diff --git a/.JuliaFormatter.toml b/.JuliaFormatter.toml deleted file mode 100644 index 959ad88a6e..0000000000 --- a/.JuliaFormatter.toml +++ /dev/null @@ -1,3 +0,0 @@ -style = "sciml" -format_markdown = true -format_docstrings = true \ No newline at end of file diff --git a/.github/workflows/FormatCheck.yml b/.github/workflows/FormatCheck.yml index 3934cf5fe5..6762c6f3eb 100644 --- a/.github/workflows/FormatCheck.yml +++ b/.github/workflows/FormatCheck.yml @@ -4,39 +4,16 @@ on: push: branches: - 'master' + - 'main' - 'release-' tags: '*' pull_request: jobs: - build: - runs-on: ${{ matrix.os }} - strategy: - matrix: - julia-version: [1] - julia-arch: [x86] - os: [ubuntu-latest] + runic: + runs-on: ubuntu-latest steps: - - uses: julia-actions/setup-julia@latest + - uses: actions/checkout@v4 + - uses: fredrikekre/runic-action@v1 with: - version: ${{ matrix.julia-version }} - - - uses: actions/checkout@v6 - - name: Install JuliaFormatter and format - # This will use the latest version by default but you can set the version like so: - # - # julia -e 'using Pkg; Pkg.add(PackageSpec(name="JuliaFormatter", version="0.13.0"))' - run: | - julia -e 'using Pkg; Pkg.add(PackageSpec(name="JuliaFormatter"))' - julia -e 'using JuliaFormatter; format(".", verbose=true)' - - name: Format check - run: | - julia -e ' - out = Cmd(`git diff`) |> read |> String - if out == "" - exit(0) - else - @error "Some files have not been formatted !!!" - write(stdout, out) - exit(1) - end' + version: '1' diff --git a/benchmark/benchmarks.jl b/benchmark/benchmarks.jl index 2396c761b5..c708a4d8fc 100644 --- a/benchmark/benchmarks.jl +++ b/benchmark/benchmarks.jl @@ -13,16 +13,16 @@ SUITE["nonstiff"] = BenchmarkGroup() function lotka_volterra!(du, u, p, t) α, β, γ, δ = p x, y = u - du[1] = α*x - β*x*y # dx/dt - du[2] = δ*x*y - γ*y # dy/dt - nothing + du[1] = α * x - β * x * y # dx/dt + du[2] = δ * x * y - γ * y # dy/dt + return nothing end function lotka_volterra_prob() p = (1.5, 1.0, 3.0, 1.0) # α, β, γ, δ u0 = [1.0, 1.0] tspan = (0.0, 10.0) - ODEProblem(lotka_volterra!, u0, tspan, p) + return ODEProblem(lotka_volterra!, u0, tspan, p) end # Pleiades Problem (7-body celestial mechanics) @@ -54,31 +54,33 @@ function pleiades!(du, u, p, t) end end end - nothing + return nothing end function pleiades_prob() # Initial conditions from literature - u0 = [3.0, 3.0, -1.0, -3.0, 2.0, -2.0, 2.0, 3.0, -3.0, 2.0, 0, 0, -4.0, 4.0, - 0, 0, 0, 0, 0, 1.75, -1.5, 0, 0, 0, -1.25, 1, 0, 0] + u0 = [ + 3.0, 3.0, -1.0, -3.0, 2.0, -2.0, 2.0, 3.0, -3.0, 2.0, 0, 0, -4.0, 4.0, + 0, 0, 0, 0, 0, 1.75, -1.5, 0, 0, 0, -1.25, 1, 0, 0, + ] tspan = (0.0, 3.0) - ODEProblem(pleiades!, u0, tspan) + return ODEProblem(pleiades!, u0, tspan) end # FitzHugh-Nagumo Model function fitzhugh_nagumo!(du, u, p, t) a, b, c = p v, w = u - du[1] = c * (v - v^3/3 + w) # dv/dt - du[2] = -(v - a + b*w) / c # dw/dt - nothing + du[1] = c * (v - v^3 / 3 + w) # dv/dt + du[2] = -(v - a + b * w) / c # dw/dt + return nothing end function fitzhugh_nagumo_prob() p = (0.7, 0.8, 12.5) u0 = [-1.0, 1.0] tspan = (0.0, 20.0) - ODEProblem(fitzhugh_nagumo!, u0, tspan, p) + return ODEProblem(fitzhugh_nagumo!, u0, tspan, p) end # ============================================================================= @@ -91,17 +93,17 @@ SUITE["stiff"] = BenchmarkGroup() function rober!(du, u, p, t) k1, k2, k3 = p y1, y2, y3 = u - du[1] = -k1*y1 + k3*y2*y3 # dy1/dt - du[2] = k1*y1 - k2*y2^2 - k3*y2*y3 # dy2/dt - du[3] = k2*y2^2 # dy3/dt - nothing + du[1] = -k1 * y1 + k3 * y2 * y3 # dy1/dt + du[2] = k1 * y1 - k2 * y2^2 - k3 * y2 * y3 # dy2/dt + du[3] = k2 * y2^2 # dy3/dt + return nothing end function rober_prob() - p = (0.04, 3e7, 1e4) # k1, k2, k3 + p = (0.04, 3.0e7, 1.0e4) # k1, k2, k3 u0 = [1.0, 0.0, 0.0] - tspan = (0.0, 1e5) - ODEProblem(rober!, u0, tspan, p) + tspan = (0.0, 1.0e5) + return ODEProblem(rober!, u0, tspan, p) end # Van der Pol Oscillator (stiff) @@ -109,43 +111,43 @@ function van_der_pol!(du, u, p, t) μ = p[1] x, y = u du[1] = y # dx/dt - du[2] = μ * ((1 - x^2)*y - x) # dy/dt - nothing + du[2] = μ * ((1 - x^2) * y - x) # dy/dt + return nothing end function van_der_pol_prob() - p = [1e6] # very stiff + p = [1.0e6] # very stiff u0 = [1.0, 1.0] tspan = (0.0, 6.3) - ODEProblem(van_der_pol!, u0, tspan, p) + return ODEProblem(van_der_pol!, u0, tspan, p) end # Pollution Problem (atmospheric chemistry, 20D stiff system) -const k1=.35e0 -const k2=.266e2 -const k3=.123e5 -const k4=.86e-3 -const k5=.82e-3 -const k6=.15e5 -const k7=.13e-3 -const k8=.24e5 -const k9=.165e5 -const k10=.9e4 -const k11=.22e-1 -const k12=.12e5 -const k13=.188e1 -const k14=.163e5 -const k15=.48e7 -const k16=.35e-3 -const k17=.175e-1 -const k18=.1e9 -const k19=.444e12 -const k20=.124e4 -const k21=.21e1 -const k22=.578e1 -const k23=.474e-1 -const k24=.178e4 -const k25=.312e1 +const k1 = 0.35e0 +const k2 = 0.266e2 +const k3 = 0.123e5 +const k4 = 0.86e-3 +const k5 = 0.82e-3 +const k6 = 0.15e5 +const k7 = 0.13e-3 +const k8 = 0.24e5 +const k9 = 0.165e5 +const k10 = 0.9e4 +const k11 = 0.22e-1 +const k12 = 0.12e5 +const k13 = 0.188e1 +const k14 = 0.163e5 +const k15 = 0.48e7 +const k16 = 0.35e-3 +const k17 = 0.175e-1 +const k18 = 0.1e9 +const k19 = 0.444e12 +const k20 = 0.124e4 +const k21 = 0.21e1 +const k22 = 0.578e1 +const k23 = 0.474e-1 +const k24 = 0.178e4 +const k25 = 0.312e1 function pollution!(dy, y, p, t) r1 = k1 * y[1] @@ -157,44 +159,44 @@ function pollution!(dy, y, p, t) r7 = k7 * y[9] r8 = k8 * y[9] * y[6] r9 = k9 * y[11] * y[2] - r10 = k10*y[11]*y[1] - r11 = k11*y[13] - r12 = k12*y[10]*y[2] - r13 = k13*y[14] - r14 = k14*y[1]*y[6] - r15 = k15*y[3] - r16 = k16*y[4] - r17 = k17*y[4] - r18 = k18*y[16] - r19 = k19*y[16] - r20 = k20*y[17]*y[6] - r21 = k21*y[19] - r22 = k22*y[19] - r23 = k23*y[1]*y[4] - r24 = k24*y[19]*y[1] - r25 = k25*y[20] - - dy[1] = -r1-r10-r14-r23-r24 + r2 + r3 + r9 + r11 + r12 + r22 + r25 - dy[2] = -r2-r3-r9-r12+r1+r21 - dy[3] = -r15+r1+r17+r19+r22 - dy[4] = -r2-r16-r17-r23+r15 - dy[5] = -r3+r4+r4+r6+r7+r13+r20 - dy[6] = -r6-r8-r14-r20+r3+r18+r18 - dy[7] = -r4-r5-r6+r13 - dy[8] = r4+r5+r6+r7 - dy[9] = -r7-r8 - dy[10] = -r12+r7+r9 - dy[11] = -r9-r10+r8+r11 + r10 = k10 * y[11] * y[1] + r11 = k11 * y[13] + r12 = k12 * y[10] * y[2] + r13 = k13 * y[14] + r14 = k14 * y[1] * y[6] + r15 = k15 * y[3] + r16 = k16 * y[4] + r17 = k17 * y[4] + r18 = k18 * y[16] + r19 = k19 * y[16] + r20 = k20 * y[17] * y[6] + r21 = k21 * y[19] + r22 = k22 * y[19] + r23 = k23 * y[1] * y[4] + r24 = k24 * y[19] * y[1] + r25 = k25 * y[20] + + dy[1] = -r1 - r10 - r14 - r23 - r24 + r2 + r3 + r9 + r11 + r12 + r22 + r25 + dy[2] = -r2 - r3 - r9 - r12 + r1 + r21 + dy[3] = -r15 + r1 + r17 + r19 + r22 + dy[4] = -r2 - r16 - r17 - r23 + r15 + dy[5] = -r3 + r4 + r4 + r6 + r7 + r13 + r20 + dy[6] = -r6 - r8 - r14 - r20 + r3 + r18 + r18 + dy[7] = -r4 - r5 - r6 + r13 + dy[8] = r4 + r5 + r6 + r7 + dy[9] = -r7 - r8 + dy[10] = -r12 + r7 + r9 + dy[11] = -r9 - r10 + r8 + r11 dy[12] = r9 - dy[13] = -r11+r10 - dy[14] = -r13+r12 + dy[13] = -r11 + r10 + dy[14] = -r13 + r12 dy[15] = r14 - dy[16] = -r18-r19+r16 + dy[16] = -r18 - r19 + r16 dy[17] = -r20 dy[18] = r20 - dy[19] = -r21-r22-r24+r23+r25 - dy[20] = -r25+r24 - nothing + dy[19] = -r21 - r22 - r24 + r23 + r25 + dy[20] = -r25 + r24 + return nothing end function pollution_prob() @@ -206,7 +208,7 @@ function pollution_prob() u0[9] = 0.01 u0[17] = 0.007 tspan = (0.0, 60.0) - ODEProblem(pollution!, u0, tspan) + return ODEProblem(pollution!, u0, tspan) end # ============================================================================= @@ -219,7 +221,7 @@ SUITE["scaling"] = BenchmarkGroup() function linear_ode!(du, u, p, t) A = p mul!(du, A, u) - nothing + return nothing end function create_linear_prob(N::Int) @@ -228,7 +230,7 @@ function create_linear_prob(N::Int) A = A - A' # Make skew-symmetric for bounded solutions u0 = randn(rng, N) tspan = (0.0, 1.0) - ODEProblem(linear_ode!, u0, tspan, A) + return ODEProblem(linear_ode!, u0, tspan, A) end # Brusselator PDE (2D reaction-diffusion from advanced ODE example) @@ -249,15 +251,15 @@ function brusselator_2d!(du, u, p, t) i, j = Tuple(I) x, y = xyd[i], xyd[j] ip1, im1, jp1, - jm1 = limit(i + 1, N), limit(i - 1, N), limit(j + 1, N), limit(j - 1, N) + jm1 = limit(i + 1, N), limit(i - 1, N), limit(j + 1, N), limit(j - 1, N) # u equation: ∂u/∂t = 1 + u²v - 4.4u + α∇²u + f(x,y,t) - du[i, j, 1] = α * (u[im1, j, 1] + u[ip1, j, 1] + u[i, jp1, 1] + u[i, jm1, 1] - 4*u[i, j, 1]) + B + u[i, j, 1]^2 * u[i, j, 2] - (A + 1) * u[i, j, 1] + brusselator_f(x, y, t) + du[i, j, 1] = α * (u[im1, j, 1] + u[ip1, j, 1] + u[i, jp1, 1] + u[i, jm1, 1] - 4 * u[i, j, 1]) + B + u[i, j, 1]^2 * u[i, j, 2] - (A + 1) * u[i, j, 1] + brusselator_f(x, y, t) - # v equation: ∂v/∂t = 3.4u - u²v + α∇²v - du[i, j, 2] = α * (u[im1, j, 2] + u[ip1, j, 2] + u[i, jp1, 2] + u[i, jm1, 2] - 4*u[i, j, 2]) + A * u[i, j, 1] - u[i, j, 1]^2 * u[i, j, 2] + # v equation: ∂v/∂t = 3.4u - u²v + α∇²v + du[i, j, 2] = α * (u[im1, j, 2] + u[ip1, j, 2] + u[i, jp1, 2] + u[i, jm1, 2] - 4 * u[i, j, 2]) + A * u[i, j, 1] - u[i, j, 1]^2 * u[i, j, 2] end - nothing + return nothing end function init_brusselator_2d(N::Int) @@ -266,10 +268,10 @@ function init_brusselator_2d(N::Int) for I in CartesianIndices((N, N)) x = xyd[I[1]] y = xyd[I[2]] - u[I, 1] = 22 * (y * (1 - y))^(3/2) # u initial condition - u[I, 2] = 27 * (x * (1 - x))^(3/2) # v initial condition + u[I, 1] = 22 * (y * (1 - y))^(3 / 2) # u initial condition + u[I, 2] = 27 * (x * (1 - x))^(3 / 2) # v initial condition end - u + return u end function create_brusselator_2d_prob(N::Int) @@ -278,7 +280,7 @@ function create_brusselator_2d_prob(N::Int) dx = step(xyd) u0 = init_brusselator_2d(N) tspan = (0.0, 11.5) - ODEProblem(brusselator_2d!, u0, tspan, (A, B, α, dx, N)) + return ODEProblem(brusselator_2d!, u0, tspan, (A, B, α, dx, N)) end # ============================================================================= @@ -300,11 +302,14 @@ SUITE["nonstiff"]["fitzhugh_nagumo"] = BenchmarkGroup() for solver in explicit_solvers solver_name = string(typeof(solver).name.name) SUITE["nonstiff"]["lotka_volterra"][solver_name] = @benchmarkable solve( - $lv_prob, $solver, reltol = 1e-6, abstol = 1e-8) + $lv_prob, $solver, reltol = 1.0e-6, abstol = 1.0e-8 + ) SUITE["nonstiff"]["pleiades"][solver_name] = @benchmarkable solve( - $pl_prob, $solver, reltol = 1e-6, abstol = 1e-8) + $pl_prob, $solver, reltol = 1.0e-6, abstol = 1.0e-8 + ) SUITE["nonstiff"]["fitzhugh_nagumo"][solver_name] = @benchmarkable solve( - $fn_prob, $solver, reltol = 1e-6, abstol = 1e-8) + $fn_prob, $solver, reltol = 1.0e-6, abstol = 1.0e-8 + ) end # Stiff benchmarks with different solvers @@ -322,11 +327,14 @@ SUITE["stiff"]["pollution"] = BenchmarkGroup() for solver in stiff_solvers solver_name = string(typeof(solver).name.name) SUITE["stiff"]["rober"][solver_name] = @benchmarkable solve( - $rober_prob_instance, $solver, reltol = 1e-6, abstol = 1e-8) + $rober_prob_instance, $solver, reltol = 1.0e-6, abstol = 1.0e-8 + ) SUITE["stiff"]["van_der_pol"][solver_name] = @benchmarkable solve( - $vdp_prob, $solver, reltol = 1e-6, abstol = 1e-8) + $vdp_prob, $solver, reltol = 1.0e-6, abstol = 1.0e-8 + ) SUITE["stiff"]["pollution"][solver_name] = @benchmarkable solve( - $pollution_prob_instance, $solver, reltol = 1e-6, abstol = 1e-8) + $pollution_prob_instance, $solver, reltol = 1.0e-6, abstol = 1.0e-8 + ) end # Scaling benchmarks @@ -336,14 +344,16 @@ SUITE["scaling"]["brusselator_2d"] = BenchmarkGroup() # Linear ODE scaling (different problem sizes) for N in [10, 50, 100] prob = create_linear_prob(N) - SUITE["scaling"]["linear"]["N$N"] = @benchmarkable solve($prob, Tsit5(), reltol = 1e-6, abstol = 1e-8) + SUITE["scaling"]["linear"]["N$N"] = @benchmarkable solve($prob, Tsit5(), reltol = 1.0e-6, abstol = 1.0e-8) end # Brusselator 2D scaling (different grid sizes) for N in [8, 16, 32] prob = create_brusselator_2d_prob(N) - SUITE["scaling"]["brusselator_2d"]["$(N)x$(N)"] = @benchmarkable solve($prob, TRBDF2(), - reltol = 1e-4, abstol = 1e-6, maxiters = 1000) + SUITE["scaling"]["brusselator_2d"]["$(N)x$(N)"] = @benchmarkable solve( + $prob, TRBDF2(), + reltol = 1.0e-4, abstol = 1.0e-6, maxiters = 1000 + ) end # ============================================================================= diff --git a/docs/common_first_steps.jl b/docs/common_first_steps.jl index 2ee45e2b7f..80fea75b8d 100644 --- a/docs/common_first_steps.jl +++ b/docs/common_first_steps.jl @@ -1,29 +1,31 @@ using Markdown function first_steps(name, solver) - Markdown.parse("""## Installation - To be able to access the solvers in `$name`, you must first install them use the Julia package manager: + return Markdown.parse( + """## Installation + To be able to access the solvers in `$name`, you must first install them use the Julia package manager: - ```julia - using Pkg - Pkg.add("$name") - ``` - This will only install the solvers listed at the bottom of this page. - If you want to explore other solvers for your problem, - you will need to install some of the other libraries listed in the navigation bar on the left. + ```julia + using Pkg + Pkg.add("$name") + ``` + This will only install the solvers listed at the bottom of this page. + If you want to explore other solvers for your problem, + you will need to install some of the other libraries listed in the navigation bar on the left. - ## Example usage + ## Example usage - ```julia - using $name + ```julia + using $name - function lorenz!(du, u, p, t) - du[1] = 10.0 * (u[2] - u[1]) - du[2] = u[1] * (28.0 - u[3]) - u[2] - du[3] = u[1] * u[2] - (8 / 3) * u[3] - end - u0 = [1.0; 0.0; 0.0] - tspan = (0.0, 100.0) - prob = ODEProblem(lorenz!, u0, tspan) - sol = solve(prob, $solver()) - ```""") + function lorenz!(du, u, p, t) + du[1] = 10.0 * (u[2] - u[1]) + du[2] = u[1] * (28.0 - u[3]) - u[2] + du[3] = u[1] * u[2] - (8 / 3) * u[3] + end + u0 = [1.0; 0.0; 0.0] + tspan = (0.0, 100.0) + prob = ODEProblem(lorenz!, u0, tspan) + sol = solve(prob, $solver()) + ```""" + ) end diff --git a/docs/common_imex_first_steps.jl b/docs/common_imex_first_steps.jl index d3e05c1fc8..a2b4f44021 100644 --- a/docs/common_imex_first_steps.jl +++ b/docs/common_imex_first_steps.jl @@ -1,51 +1,53 @@ using Markdown function imex_first_steps(name, solver) - Markdown.parse("""## Installation - To be able to access the solvers in `$name`, you must first install them use the Julia package manager: - - ```julia - using Pkg - Pkg.add("$name") - ``` - This will only install the solvers listed at the bottom of this page. - If you want to explore other solvers for your problem, - you will need to install some of the other libraries listed in the navigation bar on the left. - - ## Example usage - - IMEX methods require a `SplitODEProblem` that separates the differential equation into two parts: - one for stiff (implicit) terms and one for non-stiff (explicit) terms. - - ```julia - using $name - - # Example: A 1D reaction-diffusion system - # du/dt = f₁(u,p,t) + f₂(u,p,t) - # where f₁ contains stiff linear diffusion (implicit) - # and f₂ contains non-stiff reaction terms (explicit) - - function f1!(du, u, p, t) - # Stiff diffusion term: D * ∂²u/∂x² - # Using simple finite differences - D = 0.01 - N = length(u) - du[1] = D * (u[2] - 2u[1] + u[end]) - for i in 2:N-1 - du[i] = D * (u[i+1] - 2u[i] + u[i-1]) + return Markdown.parse( + """## Installation + To be able to access the solvers in `$name`, you must first install them use the Julia package manager: + + ```julia + using Pkg + Pkg.add("$name") + ``` + This will only install the solvers listed at the bottom of this page. + If you want to explore other solvers for your problem, + you will need to install some of the other libraries listed in the navigation bar on the left. + + ## Example usage + + IMEX methods require a `SplitODEProblem` that separates the differential equation into two parts: + one for stiff (implicit) terms and one for non-stiff (explicit) terms. + + ```julia + using $name + + # Example: A 1D reaction-diffusion system + # du/dt = f₁(u,p,t) + f₂(u,p,t) + # where f₁ contains stiff linear diffusion (implicit) + # and f₂ contains non-stiff reaction terms (explicit) + + function f1!(du, u, p, t) + # Stiff diffusion term: D * ∂²u/∂x² + # Using simple finite differences + D = 0.01 + N = length(u) + du[1] = D * (u[2] - 2u[1] + u[end]) + for i in 2:N-1 + du[i] = D * (u[i+1] - 2u[i] + u[i-1]) + end + du[N] = D * (u[1] - 2u[N] + u[N-1]) end - du[N] = D * (u[1] - 2u[N] + u[N-1]) - end - function f2!(du, u, p, t) - # Non-stiff reaction term: u * (1 - u) - @. du = u * (1 - u) - end + function f2!(du, u, p, t) + # Non-stiff reaction term: u * (1 - u) + @. du = u * (1 - u) + end - u0 = 0.5 .+ 0.1 * sin.(2π * (0:0.1:0.9)) # Initial condition with perturbation - tspan = (0.0, 10.0) - prob = SplitODEProblem(f1!, f2!, u0, tspan) - sol = solve(prob, $solver(), dt = 0.01) - ``` + u0 = 0.5 .+ 0.1 * sin.(2π * (0:0.1:0.9)) # Initial condition with perturbation + tspan = (0.0, 10.0) + prob = SplitODEProblem(f1!, f2!, u0, tspan) + sol = solve(prob, $solver(), dt = 0.01) + ``` - ```""") + ```""" + ) end diff --git a/docs/make.jl b/docs/make.jl index 19b392e281..69b2b96426 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -6,11 +6,13 @@ cp(joinpath(@__DIR__, "Project.toml"), joinpath(@__DIR__, "src", "assets", "Proj # Keep pages.jl separate for the DiffEqDocs.jl build include("pages.jl") -makedocs(sitename = "OrdinaryDiffEq.jl", +makedocs( + sitename = "OrdinaryDiffEq.jl", authors = "Chris Rackauckas et al.", clean = true, doctest = false, - modules = [OrdinaryDiffEq, + modules = [ + OrdinaryDiffEq, OrdinaryDiffEq.OrdinaryDiffEqAdamsBashforthMoulton, OrdinaryDiffEq.OrdinaryDiffEqBDF, OrdinaryDiffEq.OrdinaryDiffEqDefault, @@ -36,15 +38,22 @@ makedocs(sitename = "OrdinaryDiffEq.jl", OrdinaryDiffEq.OrdinaryDiffEqStabilizedRK, OrdinaryDiffEq.OrdinaryDiffEqSymplecticRK, OrdinaryDiffEq.OrdinaryDiffEqTsit5, - OrdinaryDiffEq.OrdinaryDiffEqVerner + OrdinaryDiffEq.OrdinaryDiffEqVerner, ], warnonly = [:docs_block, :missing_docs, :eval_block], - format = Documenter.HTML(analytics = "UA-90474609-3", + format = Documenter.HTML( + analytics = "UA-90474609-3", assets = ["assets/favicon.ico"], canonical = "https://ordinarydiffeq.sciml.ai/stable/", - size_threshold_ignore = [joinpath("semiimplicit", "Rosenbrock.md"), - joinpath("massmatrixdae", "Rosenbrock.md")]), - pages = pages) + size_threshold_ignore = [ + joinpath("semiimplicit", "Rosenbrock.md"), + joinpath("massmatrixdae", "Rosenbrock.md"), + ] + ), + pages = pages +) -deploydocs(repo = "github.com/SciML/OrdinaryDiffEq.jl"; - push_preview = true) +deploydocs( + repo = "github.com/SciML/OrdinaryDiffEq.jl"; + push_preview = true +) diff --git a/docs/pages.jl b/docs/pages.jl index 8be27c064d..28a11507c3 100644 --- a/docs/pages.jl +++ b/docs/pages.jl @@ -13,12 +13,12 @@ pages = [ "explicit/PRK.md", "explicit/QPRK.md", "explicit/TaylorSeries.md", - "explicit/Extrapolation.md" + "explicit/Extrapolation.md", ], "Semi-Implicit Solvers" => [ "semiimplicit/Rosenbrock.md", "semiimplicit/StabilizedRK.md", - "semiimplicit/ExponentialRK.md" + "semiimplicit/ExponentialRK.md", ], "Implicit Solvers" => [ "implicit/SDIRK.md", @@ -26,29 +26,29 @@ pages = [ "implicit/BDF.md", "implicit/Extrapolation.md", "implicit/PDIRK.md", - "implicit/Nordsieck.md" + "implicit/Nordsieck.md", ], "IMEX Solvers" => [ "imex/IMEXMultistep.md", "imex/StabilizedIRK.md", - "imex/IMEXBDF.md" + "imex/IMEXBDF.md", ], "Dynamical ODE Explicit Solvers" => [ "dynamicalodeexplicit/RKN.md", - "dynamicalodeexplicit/SymplecticRK.md" + "dynamicalodeexplicit/SymplecticRK.md", ], "Semilinear ODE Solvers" => [ "semilinear/ExponentialRK.md", - "semilinear/Linear.md" + "semilinear/Linear.md", ], "Mass Matrix DAE Solvers" => [ "massmatrixdae/Rosenbrock.md", - "massmatrixdae/BDF.md" + "massmatrixdae/BDF.md", ], "Fully Implicit DAE Solvers" => [ - "fullyimplicitdae/BDF.md" + "fullyimplicitdae/BDF.md", ], "Misc Solvers" => [ - "misc.md" - ] + "misc.md", + ], ] diff --git a/lib/ImplicitDiscreteSolve/src/ImplicitDiscreteSolve.jl b/lib/ImplicitDiscreteSolve/src/ImplicitDiscreteSolve.jl index 60d05501aa..dc162ed09a 100644 --- a/lib/ImplicitDiscreteSolve/src/ImplicitDiscreteSolve.jl +++ b/lib/ImplicitDiscreteSolve/src/ImplicitDiscreteSolve.jl @@ -6,11 +6,11 @@ using NonlinearSolveFirstOrder using ConcreteStructs using SymbolicIndexingInterface: parameter_symbols import OrdinaryDiffEqCore: OrdinaryDiffEqAlgorithm, alg_cache, OrdinaryDiffEqMutableCache, - OrdinaryDiffEqConstantCache, get_fsalfirstlast, isfsal, - initialize!, perform_step!, isdiscretecache, isdiscretealg, - alg_order, beta2_default, beta1_default, dt_required, - _initialize_dae!, DefaultInit, BrownFullBasicInit, OverrideInit, - @muladd, @.., _unwrap_val, OrdinaryDiffEqCore, isadaptive + OrdinaryDiffEqConstantCache, get_fsalfirstlast, isfsal, + initialize!, perform_step!, isdiscretecache, isdiscretealg, + alg_order, beta2_default, beta1_default, dt_required, + _initialize_dae!, DefaultInit, BrownFullBasicInit, OverrideInit, + @muladd, @.., _unwrap_val, OrdinaryDiffEqCore, isadaptive using Reexport @reexport using SciMLBase diff --git a/lib/ImplicitDiscreteSolve/src/alg_utils.jl b/lib/ImplicitDiscreteSolve/src/alg_utils.jl index a2d6e6ecb5..7bd4af3dca 100644 --- a/lib/ImplicitDiscreteSolve/src/alg_utils.jl +++ b/lib/ImplicitDiscreteSolve/src/alg_utils.jl @@ -1,11 +1,11 @@ function SciMLBase.isautodifferentiable(alg::IDSolve) - true + return true end function SciMLBase.allows_arbitrary_number_types(alg::IDSolve) - true + return true end function SciMLBase.allowscomplex(alg::IDSolve) - true + return true end SciMLBase.isdiscrete(alg::IDSolve) = true diff --git a/lib/ImplicitDiscreteSolve/src/algorithms.jl b/lib/ImplicitDiscreteSolve/src/algorithms.jl index a11d41f12a..cf8f9a0b53 100644 --- a/lib/ImplicitDiscreteSolve/src/algorithms.jl +++ b/lib/ImplicitDiscreteSolve/src/algorithms.jl @@ -4,7 +4,7 @@ First order solver for `ImplicitDiscreteSystems`. """ struct IDSolve{NLS} <: - OrdinaryDiffEqAlgorithm + OrdinaryDiffEqAlgorithm nlsolve::NLS extrapolant::Symbol end @@ -12,6 +12,6 @@ end function IDSolve(; nlsolve = NewtonRaphson(), extrapolant = :constant, -) - IDSolve{typeof(nlsolve)}(nlsolve, extrapolant) + ) + return IDSolve{typeof(nlsolve)}(nlsolve, extrapolant) end diff --git a/lib/ImplicitDiscreteSolve/src/cache.jl b/lib/ImplicitDiscreteSolve/src/cache.jl index f3200762d4..ad5f214642 100644 --- a/lib/ImplicitDiscreteSolve/src/cache.jl +++ b/lib/ImplicitDiscreteSolve/src/cache.jl @@ -12,10 +12,12 @@ mutable struct IDSolveCache{uType, cType, thetaType} <: OrdinaryDiffEqMutableCac Θks::thetaType end -function alg_cache(alg::IDSolve, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::IDSolve, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} state = ImplicitDiscreteState(isnothing(u) ? nothing : zero(u), p, t) f_nl = (resid, u_next, p) -> f(resid, u_next, p.u, p.p, p.t) @@ -25,22 +27,25 @@ function alg_cache(alg::IDSolve, u, rate_prototype, ::Type{uEltypeNoUnits}, prob = if nlls NonlinearLeastSquaresProblem{isinplace(f)}( NonlinearFunction(f_nl; resid_prototype = f.resid_prototype), - unl, state) + unl, state + ) else NonlinearProblem{isinplace(f)}(f_nl, unl, state) end nlcache = init(prob, alg.nlsolve) - IDSolveCache(u, uprev, state.u, nlcache, uBottomEltypeNoUnits[]) + return IDSolveCache(u, uprev, state.u, nlcache, uBottomEltypeNoUnits[]) end isdiscretecache(cache::IDSolveCache) = true -function alg_cache(alg::IDSolve, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::IDSolve, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} @assert !isnothing(u) "Empty u not supported with out of place functions yet." state = ImplicitDiscreteState(isnothing(u) ? nothing : zero(u), p, t) @@ -52,7 +57,8 @@ function alg_cache(alg::IDSolve, u, rate_prototype, ::Type{uEltypeNoUnits}, prob = if nlls NonlinearLeastSquaresProblem{isinplace(f)}( NonlinearFunction(f_nl; resid_prototype = f.resid_prototype), - unl, state) + unl, state + ) else NonlinearProblem{isinplace(f)}(f_nl, unl, state) end @@ -60,7 +66,7 @@ function alg_cache(alg::IDSolve, u, rate_prototype, ::Type{uEltypeNoUnits}, nlcache = init(prob, alg.nlsolve) # FIXME Use IDSolveConstantCache? - IDSolveCache(u, uprev, state.u, nlcache, uBottomEltypeNoUnits[]) + return IDSolveCache(u, uprev, state.u, nlcache, uBottomEltypeNoUnits[]) end get_fsalfirstlast(cache::IDSolveCache, rate_prototype) = (nothing, nothing) diff --git a/lib/ImplicitDiscreteSolve/src/controller.jl b/lib/ImplicitDiscreteSolve/src/controller.jl index 95550d89eb..86698540cd 100644 --- a/lib/ImplicitDiscreteSolve/src/controller.jl +++ b/lib/ImplicitDiscreteSolve/src/controller.jl @@ -37,13 +37,14 @@ Base.@kwdef struct KantorovichTypeController <: OrdinaryDiffEqCore.AbstractContr end function OrdinaryDiffEqCore.default_controller( - alg::IDSolve, cache::IDSolveCache, _1, _2, _3) + alg::IDSolve, cache::IDSolveCache, _1, _2, _3 + ) return KantorovichTypeController(; Θmin = 1 // 8, p = 1) end function OrdinaryDiffEqCore.stepsize_controller!( integrator, controller::KantorovichTypeController, alg::IDSolve -) + ) @inline g(x) = √(1 + 4x) - 1 # Adapt dt with a priori estimate (Eq. 5.24) @@ -58,13 +59,13 @@ end function OrdinaryDiffEqCore.step_accept_controller!( integrator, controller::KantorovichTypeController, alg::IDSolve, q -) + ) return q * integrator.dt end function OrdinaryDiffEqCore.step_reject_controller!( integrator, controller::KantorovichTypeController, alg::IDSolve -) + ) @inline g(x) = √(1 + 4x) - 1 # Shorten dt according to (Eq. 5.24) @@ -77,6 +78,7 @@ function OrdinaryDiffEqCore.step_reject_controller!( return end end + return end function OrdinaryDiffEqCore.accept_step_controller(integrator, controller::KantorovichTypeController) diff --git a/lib/ImplicitDiscreteSolve/src/solve.jl b/lib/ImplicitDiscreteSolve/src/solve.jl index 0c6639f52b..b9746cc9db 100644 --- a/lib/ImplicitDiscreteSolve/src/solve.jl +++ b/lib/ImplicitDiscreteSolve/src/solve.jl @@ -62,20 +62,24 @@ function perform_step!(integrator, cache::IDSolveCache, repeat_step = false) end # Accept step - u .= nlcache.u + return u .= nlcache.u end function initialize!(integrator, cache::IDSolveCache) - integrator.u isa AbstractVector && (cache.z .= integrator.u) + return integrator.u isa AbstractVector && (cache.z .= integrator.u) end -function _initialize_dae!(integrator, prob::ImplicitDiscreteProblem, - alg::DefaultInit, x::Union{Val{true}, Val{false}}) +function _initialize_dae!( + integrator, prob::ImplicitDiscreteProblem, + alg::DefaultInit, x::Union{Val{true}, Val{false}} + ) isnothing(prob.u0) && return - atol = one(eltype(prob.u0)) * 1e-12 - if SciMLBase.has_initializeprob(prob.f) - _initialize_dae!(integrator, prob, - OverrideInit(atol), x) + atol = one(eltype(prob.u0)) * 1.0e-12 + return if SciMLBase.has_initializeprob(prob.f) + _initialize_dae!( + integrator, prob, + OverrideInit(atol), x + ) else (; u, p, t, f) = integrator initstate = ImplicitDiscreteState(u, p, t) @@ -87,10 +91,11 @@ function _initialize_dae!(integrator, prob::ImplicitDiscreteProblem, end nlls = !isnothing(f.resid_prototype) && - (length(f.resid_prototype) != length(integrator.u)) + (length(f.resid_prototype) != length(integrator.u)) prob = if nlls NonlinearLeastSquaresProblem{isinplace(f)}( - NonlinearFunction(_f; resid_prototype = f.resid_prototype), u, initstate) + NonlinearFunction(_f; resid_prototype = f.resid_prototype), u, initstate + ) else NonlinearProblem{isinplace(f)}(_f, u, initstate) end @@ -99,7 +104,8 @@ function _initialize_dae!(integrator, prob::ImplicitDiscreteProblem, integrator.u = sol else integrator.sol = SciMLBase.solution_new_retcode( - integrator.sol, ReturnCode.InitialFailure) + integrator.sol, ReturnCode.InitialFailure + ) end end end diff --git a/lib/ImplicitDiscreteSolve/test/runtests.jl b/lib/ImplicitDiscreteSolve/test/runtests.jl index f4833c9321..0229d533fb 100644 --- a/lib/ImplicitDiscreteSolve/test/runtests.jl +++ b/lib/ImplicitDiscreteSolve/test/runtests.jl @@ -99,7 +99,7 @@ end idprob2 = ImplicitDiscreteProblem(emptyoop, u0, (0, tsteps), []) # OOP with u0=nothing throws MethodError because oneunit(Nothing) is not defined # before the assertion in alg_cache can be reached - @test_throws MethodError integ=init(idprob2, IDSolve()) + @test_throws MethodError integ = init(idprob2, IDSolve()) end @testset "Create NonlinearLeastSquaresProblem" begin @@ -110,7 +110,8 @@ end tsteps = 5 u0 = [1.0, 1.0] idprob = ImplicitDiscreteProblem( - ImplicitDiscreteFunction(over, resid_prototype = zeros(3)), u0, (0, tsteps), []) + ImplicitDiscreteFunction(over, resid_prototype = zeros(3)), u0, (0, tsteps), [] + ) integ = init(idprob, IDSolve()) @test integ.cache.nlcache.prob isa NonlinearLeastSquaresProblem @@ -118,7 +119,8 @@ end [u_next[1] - u_next[2] - 1] end idprob = ImplicitDiscreteProblem( - ImplicitDiscreteFunction(under; resid_prototype = zeros(1)), u0, (0, tsteps), []) + ImplicitDiscreteFunction(under; resid_prototype = zeros(1)), u0, (0, tsteps), [] + ) integ = init(idprob, IDSolve()) @test integ.cache.nlcache.prob isa NonlinearLeastSquaresProblem @@ -126,7 +128,8 @@ end [u_next[1]^2 - 3, u_next[2] - u[1]] end idprob = ImplicitDiscreteProblem( - ImplicitDiscreteFunction(full; resid_prototype = zeros(2)), u0, (0, tsteps), []) + ImplicitDiscreteFunction(full; resid_prototype = zeros(2)), u0, (0, tsteps), [] + ) integ = init(idprob, IDSolve()) @test integ.cache.nlcache.prob isa NonlinearProblem end @@ -147,7 +150,8 @@ end @testset "JET Tests" begin test_package( - ImplicitDiscreteSolve, target_defined_modules = true, mode = :typo) + ImplicitDiscreteSolve, target_defined_modules = true, mode = :typo + ) end include("qa.jl") diff --git a/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/OrdinaryDiffEqAdamsBashforthMoulton.jl b/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/OrdinaryDiffEqAdamsBashforthMoulton.jl index 73529fa52d..b54a1d9b5d 100644 --- a/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/OrdinaryDiffEqAdamsBashforthMoulton.jl +++ b/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/OrdinaryDiffEqAdamsBashforthMoulton.jl @@ -1,16 +1,16 @@ module OrdinaryDiffEqAdamsBashforthMoulton import OrdinaryDiffEqCore: OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, @cache, - alg_cache, - initialize!, perform_step!, alg_order, isstandard, - OrdinaryDiffEqAlgorithm, - OrdinaryDiffEqAdaptiveAlgorithm, - OrdinaryDiffEqAdamsVarOrderVarStepAlgorithm, - constvalue, calculate_residuals, calculate_residuals!, - trivial_limiter!, get_fsalfirstlast, - generic_solver_docstring, - full_cache, - _bool_to_ADType + alg_cache, + initialize!, perform_step!, alg_order, isstandard, + OrdinaryDiffEqAlgorithm, + OrdinaryDiffEqAdaptiveAlgorithm, + OrdinaryDiffEqAdamsVarOrderVarStepAlgorithm, + constvalue, calculate_residuals, calculate_residuals!, + trivial_limiter!, get_fsalfirstlast, + generic_solver_docstring, + full_cache, + _bool_to_ADType import OrdinaryDiffEqLowOrderRK: BS3ConstantCache, BS3Cache, RK4ConstantCache, RK4Cache import RecursiveArrayTools: recursivefill! using MuladdMacro, FastBroadcast @@ -27,6 +27,6 @@ include("adams_utils.jl") include("adams_bashforth_moulton_perform_step.jl") export AB3, AB4, AB5, ABM32, ABM43, ABM54, VCAB3, - VCAB4, VCAB5, VCABM3, VCABM4, VCABM5, VCABM + VCAB4, VCAB5, VCABM3, VCABM4, VCABM5, VCABM end diff --git a/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/adams_bashforth_moulton_caches.jl b/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/adams_bashforth_moulton_caches.jl index 283b4b6b18..110469fb40 100644 --- a/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/adams_bashforth_moulton_caches.jl +++ b/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/adams_bashforth_moulton_caches.jl @@ -2,7 +2,7 @@ abstract type ABMMutableCache <: OrdinaryDiffEqMutableCache end abstract type ABMVariableCoefficientMutableCache <: OrdinaryDiffEqMutableCache end get_fsalfirstlast(cache::ABMMutableCache, u) = (cache.fsalfirst, cache.k) function get_fsalfirstlast(cache::ABMVariableCoefficientMutableCache, u) - (cache.fsalfirst, cache.k4) + return (cache.fsalfirst, cache.k4) end @cache mutable struct AB3Cache{uType, rateType, Thread} <: ABMMutableCache u::uType @@ -23,26 +23,30 @@ end step::Int end -function alg_cache(alg::AB3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::AB3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} fsalfirst = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) ralk2 = zero(rate_prototype) k = zero(rate_prototype) tmp = zero(u) - AB3Cache(u, uprev, fsalfirst, k2, k3, ralk2, k, tmp, 1, alg.thread) + return AB3Cache(u, uprev, fsalfirst, k2, k3, ralk2, k, tmp, 1, alg.thread) end -function alg_cache(alg::AB3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::AB3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k2 = rate_prototype k3 = rate_prototype - AB3ConstantCache(k2, k3, 1) + return AB3ConstantCache(k2, k3, 1) end @cache mutable struct ABM32Cache{uType, rateType, Thread} <: ABMMutableCache @@ -64,26 +68,30 @@ end step::Int end -function alg_cache(alg::ABM32, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ABM32, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} fsalfirst = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) ralk2 = zero(rate_prototype) k = zero(rate_prototype) tmp = zero(u) - ABM32Cache(u, uprev, fsalfirst, k2, k3, ralk2, k, tmp, 1, alg.thread) + return ABM32Cache(u, uprev, fsalfirst, k2, k3, ralk2, k, tmp, 1, alg.thread) end -function alg_cache(alg::ABM32, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ABM32, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k2 = rate_prototype k3 = rate_prototype - ABM32ConstantCache(k2, k3, 1) + return ABM32ConstantCache(k2, k3, 1) end @cache mutable struct AB4Cache{uType, rateType, Thread} <: ABMMutableCache @@ -110,10 +118,12 @@ end step::Int end -function alg_cache(alg::AB4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::AB4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} fsalfirst = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) @@ -124,17 +134,19 @@ function alg_cache(alg::AB4, u, rate_prototype, ::Type{uEltypeNoUnits}, t2 = zero(rate_prototype) t3 = zero(rate_prototype) t4 = zero(rate_prototype) - AB4Cache(u, uprev, fsalfirst, k2, k3, k4, ralk2, k, tmp, t2, t3, t4, 1, alg.thread) + return AB4Cache(u, uprev, fsalfirst, k2, k3, k4, ralk2, k, tmp, t2, t3, t4, 1, alg.thread) end -function alg_cache(alg::AB4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::AB4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k2 = rate_prototype k3 = rate_prototype k4 = rate_prototype - AB4ConstantCache(k2, k3, k4, 1) + return AB4ConstantCache(k2, k3, k4, 1) end @cache mutable struct ABM43Cache{uType, rateType, Thread} <: ABMMutableCache @@ -164,10 +176,12 @@ end step::Int end -function alg_cache(alg::ABM43, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ABM43, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} fsalfirst = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) @@ -181,18 +195,22 @@ function alg_cache(alg::ABM43, u, rate_prototype, ::Type{uEltypeNoUnits}, t5 = zero(rate_prototype) t6 = zero(rate_prototype) t7 = zero(rate_prototype) - ABM43Cache(u, uprev, fsalfirst, k2, k3, k4, ralk2, k, - tmp, t2, t3, t4, t5, t6, t7, 1, alg.thread) + return ABM43Cache( + u, uprev, fsalfirst, k2, k3, k4, ralk2, k, + tmp, t2, t3, t4, t5, t6, t7, 1, alg.thread + ) end -function alg_cache(alg::ABM43, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ABM43, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k2 = rate_prototype k3 = rate_prototype k4 = rate_prototype - ABM43ConstantCache(k2, k3, k4, 1) + return ABM43ConstantCache(k2, k3, k4, 1) end @cache mutable struct AB5Cache{uType, rateType, Thread} <: ABMMutableCache @@ -220,10 +238,12 @@ end step::Int end -function alg_cache(alg::AB5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::AB5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} fsalfirst = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) @@ -234,18 +254,20 @@ function alg_cache(alg::AB5, u, rate_prototype, ::Type{uEltypeNoUnits}, t2 = zero(rate_prototype) t3 = zero(rate_prototype) t4 = zero(rate_prototype) - AB5Cache(u, uprev, fsalfirst, k2, k3, k4, k5, k, tmp, t2, t3, t4, 1, alg.thread) + return AB5Cache(u, uprev, fsalfirst, k2, k3, k4, k5, k, tmp, t2, t3, t4, 1, alg.thread) end -function alg_cache(alg::AB5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::AB5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k2 = rate_prototype k3 = rate_prototype k4 = rate_prototype k5 = rate_prototype - AB5ConstantCache(k2, k3, k4, k5, 1) + return AB5ConstantCache(k2, k3, k4, k5, 1) end @cache mutable struct ABM54Cache{uType, rateType, Thread} <: ABMMutableCache @@ -277,10 +299,12 @@ end step::Int end -function alg_cache(alg::ABM54, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ABM54, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} fsalfirst = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) @@ -295,23 +319,29 @@ function alg_cache(alg::ABM54, u, rate_prototype, ::Type{uEltypeNoUnits}, t6 = zero(rate_prototype) t7 = zero(rate_prototype) t8 = zero(rate_prototype) - ABM54Cache(u, uprev, fsalfirst, k2, k3, k4, k5, k, tmp, - t2, t3, t4, t5, t6, t7, t8, 1, alg.thread) + return ABM54Cache( + u, uprev, fsalfirst, k2, k3, k4, k5, k, tmp, + t2, t3, t4, t5, t6, t7, t8, 1, alg.thread + ) end -function alg_cache(alg::ABM54, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ABM54, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k2 = rate_prototype k3 = rate_prototype k4 = rate_prototype k5 = rate_prototype - ABM54ConstantCache(k2, k3, k4, k5, 1) + return ABM54ConstantCache(k2, k3, k4, k5, 1) end -@cache mutable struct VCAB3ConstantCache{TabType, tArrayType, rArrayType, cArrayType, - dtArrayType} <: OrdinaryDiffEqConstantCache +@cache mutable struct VCAB3ConstantCache{ + TabType, tArrayType, rArrayType, cArrayType, + dtArrayType, + } <: OrdinaryDiffEqConstantCache dts::dtArrayType c::cArrayType g::tArrayType @@ -324,9 +354,11 @@ end step::Int end -@cache mutable struct VCAB3Cache{uType, rateType, TabType, bs3Type, tArrayType, cArrayType, - uNoUnitsType, coefType, dtArrayType, Thread} <: - ABMVariableCoefficientMutableCache +@cache mutable struct VCAB3Cache{ + uType, rateType, TabType, bs3Type, tArrayType, cArrayType, + uNoUnitsType, coefType, dtArrayType, Thread, + } <: + ABMVariableCoefficientMutableCache u::uType uprev::uType fsalfirst::rateType @@ -348,10 +380,12 @@ end thread::Thread end -function alg_cache(alg::VCAB3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::VCAB3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} dts = fill(zero(dt), 3) c = fill(zero(t), 3, 3) g = fill(zero(t), 3) @@ -366,13 +400,15 @@ function alg_cache(alg::VCAB3, u, rate_prototype, ::Type{uEltypeNoUnits}, β = fill(zero(t), 3) order = 3 tab = BS3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - VCAB3ConstantCache(dts, c, g, ϕ_n, ϕstar_nm1, ϕstar_n, β, order, tab, 1) + return VCAB3ConstantCache(dts, c, g, ϕ_n, ϕstar_nm1, ϕstar_n, β, order, tab, 1) end -function alg_cache(alg::VCAB3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::VCAB3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = BS3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) bk1 = zero(rate_prototype) bk2 = zero(rate_prototype) @@ -382,8 +418,10 @@ function alg_cache(alg::VCAB3, u, rate_prototype, ::Type{uEltypeNoUnits}, batmp = similar(u, uEltypeNoUnits) recursivefill!(batmp, false) btmp = zero(u) - bs3cache = BS3Cache(u, uprev, bk1, bk2, bk3, bk4, butilde, btmp, batmp, tab, - trivial_limiter!, trivial_limiter!, False()) + bs3cache = BS3Cache( + u, uprev, bk1, bk2, bk3, bk4, butilde, btmp, batmp, tab, + trivial_limiter!, trivial_limiter!, False() + ) fsalfirst = zero(rate_prototype) k4 = zero(rate_prototype) dts = fill(zero(dt), 3) @@ -403,12 +441,16 @@ function alg_cache(alg::VCAB3, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmp, false) tmp = zero(u) utilde = zero(u) - VCAB3Cache(u, uprev, fsalfirst, bs3cache, k4, ϕstar_nm1, dts, c, g, ϕ_n, ϕstar_n, β, - order, atmp, tmp, utilde, tab, 1, alg.thread) + return VCAB3Cache( + u, uprev, fsalfirst, bs3cache, k4, ϕstar_nm1, dts, c, g, ϕ_n, ϕstar_n, β, + order, atmp, tmp, utilde, tab, 1, alg.thread + ) end -@cache mutable struct VCAB4ConstantCache{rk4constcache, tArrayType, rArrayType, cArrayType, - dtArrayType} <: OrdinaryDiffEqConstantCache +@cache mutable struct VCAB4ConstantCache{ + rk4constcache, tArrayType, rArrayType, cArrayType, + dtArrayType, + } <: OrdinaryDiffEqConstantCache ϕstar_nm1::rArrayType dts::dtArrayType c::cArrayType @@ -421,9 +463,11 @@ end step::Int end -@cache mutable struct VCAB4Cache{uType, rateType, rk4cacheType, tArrayType, cArrayType, - uNoUnitsType, coefType, dtArrayType, Thread} <: - ABMVariableCoefficientMutableCache +@cache mutable struct VCAB4Cache{ + uType, rateType, rk4cacheType, tArrayType, cArrayType, + uNoUnitsType, coefType, dtArrayType, Thread, + } <: + ABMVariableCoefficientMutableCache u::uType uprev::uType fsalfirst::rateType @@ -444,10 +488,12 @@ end thread::Thread end -function alg_cache(alg::VCAB4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::VCAB4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} dts = fill(zero(dt), 4) c = fill(zero(t), 4, 4) g = fill(zero(t), 4) @@ -462,13 +508,15 @@ function alg_cache(alg::VCAB4, u, rate_prototype, ::Type{uEltypeNoUnits}, β = fill(zero(t), 4) order = 4 rk4constcache = RK4ConstantCache() - VCAB4ConstantCache(ϕstar_nm1, dts, c, g, ϕ_n, ϕstar_n, β, order, rk4constcache, 1) + return VCAB4ConstantCache(ϕstar_nm1, dts, c, g, ϕ_n, ϕstar_n, β, order, rk4constcache, 1) end -function alg_cache(alg::VCAB4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::VCAB4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} rk1 = zero(rate_prototype) rk2 = zero(rate_prototype) rk3 = zero(rate_prototype) @@ -477,8 +525,10 @@ function alg_cache(alg::VCAB4, u, rate_prototype, ::Type{uEltypeNoUnits}, rtmp = zero(u) ratmp = similar(u, uEltypeNoUnits) recursivefill!(ratmp, false) - rk4cache = RK4Cache(u, uprev, rk1, rk2, rk3, rk4, rk, rtmp, ratmp, trivial_limiter!, - trivial_limiter!, False()) + rk4cache = RK4Cache( + u, uprev, rk1, rk2, rk3, rk4, rk, rtmp, ratmp, trivial_limiter!, + trivial_limiter!, False() + ) fsalfirst = zero(rate_prototype) k4 = zero(rate_prototype) dts = fill(zero(dt), 4) @@ -498,14 +548,18 @@ function alg_cache(alg::VCAB4, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmp, false) tmp = zero(u) utilde = zero(u) - VCAB4Cache(u, uprev, fsalfirst, rk4cache, k4, ϕstar_nm1, dts, c, g, ϕ_n, ϕstar_n, β, - order, atmp, tmp, utilde, 1, alg.thread) + return VCAB4Cache( + u, uprev, fsalfirst, rk4cache, k4, ϕstar_nm1, dts, c, g, ϕ_n, ϕstar_n, β, + order, atmp, tmp, utilde, 1, alg.thread + ) end # VCAB5 -@cache mutable struct VCAB5ConstantCache{rk4constcache, tArrayType, rArrayType, cArrayType, - dtArrayType} <: OrdinaryDiffEqConstantCache +@cache mutable struct VCAB5ConstantCache{ + rk4constcache, tArrayType, rArrayType, cArrayType, + dtArrayType, + } <: OrdinaryDiffEqConstantCache ϕstar_nm1::rArrayType dts::dtArrayType c::cArrayType @@ -518,9 +572,11 @@ end step::Int end -@cache mutable struct VCAB5Cache{uType, rateType, rk4cacheType, tArrayType, cArrayType, - uNoUnitsType, coefType, dtArrayType, Thread} <: - ABMVariableCoefficientMutableCache +@cache mutable struct VCAB5Cache{ + uType, rateType, rk4cacheType, tArrayType, cArrayType, + uNoUnitsType, coefType, dtArrayType, Thread, + } <: + ABMVariableCoefficientMutableCache u::uType uprev::uType fsalfirst::rateType @@ -541,10 +597,12 @@ end thread::Thread end -function alg_cache(alg::VCAB5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::VCAB5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} dts = fill(zero(dt), 5) c = fill(zero(t), 5, 5) g = fill(zero(t), 5) @@ -559,13 +617,15 @@ function alg_cache(alg::VCAB5, u, rate_prototype, ::Type{uEltypeNoUnits}, β = fill(zero(t), 5) order = 5 rk4constcache = RK4ConstantCache() - VCAB5ConstantCache(ϕstar_nm1, dts, c, g, ϕ_n, ϕstar_n, β, order, rk4constcache, 1) + return VCAB5ConstantCache(ϕstar_nm1, dts, c, g, ϕ_n, ϕstar_n, β, order, rk4constcache, 1) end -function alg_cache(alg::VCAB5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::VCAB5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} rk1 = zero(rate_prototype) rk2 = zero(rate_prototype) rk3 = zero(rate_prototype) @@ -574,8 +634,10 @@ function alg_cache(alg::VCAB5, u, rate_prototype, ::Type{uEltypeNoUnits}, rtmp = zero(u) ratmp = similar(u, uEltypeNoUnits) recursivefill!(ratmp, false) - rk4cache = RK4Cache(u, uprev, rk1, rk2, rk3, rk4, rk, rtmp, ratmp, trivial_limiter!, - trivial_limiter!, False()) + rk4cache = RK4Cache( + u, uprev, rk1, rk2, rk3, rk4, rk, rtmp, ratmp, trivial_limiter!, + trivial_limiter!, False() + ) fsalfirst = zero(rate_prototype) k4 = zero(rate_prototype) dts = fill(zero(dt), 5) @@ -595,14 +657,18 @@ function alg_cache(alg::VCAB5, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmp, false) tmp = zero(u) utilde = zero(u) - VCAB5Cache(u, uprev, fsalfirst, rk4cache, k4, ϕstar_nm1, dts, c, g, ϕ_n, ϕstar_n, β, - order, atmp, tmp, utilde, 1, alg.thread) + return VCAB5Cache( + u, uprev, fsalfirst, rk4cache, k4, ϕstar_nm1, dts, c, g, ϕ_n, ϕstar_n, β, + order, atmp, tmp, utilde, 1, alg.thread + ) end # VCABM3 -@cache mutable struct VCABM3ConstantCache{TabType, tArrayType, rArrayType, cArrayType, - dtArrayType} <: OrdinaryDiffEqConstantCache +@cache mutable struct VCABM3ConstantCache{ + TabType, tArrayType, rArrayType, cArrayType, + dtArrayType, + } <: OrdinaryDiffEqConstantCache dts::dtArrayType c::cArrayType g::tArrayType @@ -617,9 +683,10 @@ end end @cache mutable struct VCABM3Cache{ - uType, rateType, TabType, bs3Type, tArrayType, cArrayType, - uNoUnitsType, coefType, dtArrayType, Thread} <: - ABMVariableCoefficientMutableCache + uType, rateType, TabType, bs3Type, tArrayType, cArrayType, + uNoUnitsType, coefType, dtArrayType, Thread, + } <: + ABMVariableCoefficientMutableCache u::uType uprev::uType fsalfirst::rateType @@ -642,10 +709,12 @@ end thread::Thread end -function alg_cache(alg::VCABM3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::VCABM3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} dts = fill(zero(dt), 3) c = fill(zero(t), 4, 4) g = fill(zero(t), 4) @@ -661,13 +730,15 @@ function alg_cache(alg::VCABM3, u, rate_prototype, ::Type{uEltypeNoUnits}, β = fill(zero(t), 3) order = 3 tab = BS3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - VCABM3ConstantCache(dts, c, g, ϕ_n, ϕ_np1, ϕstar_nm1, ϕstar_n, β, order, tab, 1) + return VCABM3ConstantCache(dts, c, g, ϕ_n, ϕ_np1, ϕstar_nm1, ϕstar_n, β, order, tab, 1) end -function alg_cache(alg::VCABM3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::VCABM3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = BS3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) bk1 = zero(rate_prototype) bk2 = zero(rate_prototype) @@ -677,8 +748,10 @@ function alg_cache(alg::VCABM3, u, rate_prototype, ::Type{uEltypeNoUnits}, batmp = similar(u, uEltypeNoUnits) recursivefill!(batmp, false) btmp = zero(u) - bs3cache = BS3Cache(u, uprev, bk1, bk2, bk3, bk4, butilde, btmp, batmp, tab, - trivial_limiter!, trivial_limiter!, False()) + bs3cache = BS3Cache( + u, uprev, bk1, bk2, bk3, bk4, butilde, btmp, batmp, tab, + trivial_limiter!, trivial_limiter!, False() + ) fsalfirst = zero(rate_prototype) k4 = zero(rate_prototype) dts = fill(zero(dt), 3) @@ -702,15 +775,18 @@ function alg_cache(alg::VCABM3, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmp, false) tmp = zero(u) utilde = zero(u) - VCABM3Cache(u, uprev, fsalfirst, bs3cache, k4, ϕstar_nm1, dts, c, g, ϕ_n, ϕ_np1, - ϕstar_n, β, order, atmp, tmp, utilde, tab, 1, alg.thread) + return VCABM3Cache( + u, uprev, fsalfirst, bs3cache, k4, ϕstar_nm1, dts, c, g, ϕ_n, ϕ_np1, + ϕstar_n, β, order, atmp, tmp, utilde, tab, 1, alg.thread + ) end # VCABM4 @cache mutable struct VCABM4ConstantCache{ - rk4constcache, tArrayType, rArrayType, cArrayType, - dtArrayType} <: OrdinaryDiffEqConstantCache + rk4constcache, tArrayType, rArrayType, cArrayType, + dtArrayType, + } <: OrdinaryDiffEqConstantCache ϕstar_nm1::rArrayType dts::dtArrayType c::cArrayType @@ -724,9 +800,11 @@ end step::Int end -@cache mutable struct VCABM4Cache{uType, rateType, rk4cacheType, tArrayType, cArrayType, - uNoUnitsType, coefType, dtArrayType, Thread} <: - ABMVariableCoefficientMutableCache +@cache mutable struct VCABM4Cache{ + uType, rateType, rk4cacheType, tArrayType, cArrayType, + uNoUnitsType, coefType, dtArrayType, Thread, + } <: + ABMVariableCoefficientMutableCache u::uType uprev::uType fsalfirst::rateType @@ -748,10 +826,12 @@ end thread::Thread end -function alg_cache(alg::VCABM4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::VCABM4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} dts = fill(zero(dt), 4) c = fill(zero(t), 5, 5) g = fill(zero(t), 5) @@ -767,14 +847,18 @@ function alg_cache(alg::VCABM4, u, rate_prototype, ::Type{uEltypeNoUnits}, β = fill(zero(t), 4) order = 4 rk4constcache = RK4ConstantCache() - VCABM4ConstantCache(ϕstar_nm1, dts, c, g, ϕ_n, ϕ_np1, ϕstar_n, β, order, rk4constcache, - 1) + return VCABM4ConstantCache( + ϕstar_nm1, dts, c, g, ϕ_n, ϕ_np1, ϕstar_n, β, order, rk4constcache, + 1 + ) end -function alg_cache(alg::VCABM4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::VCABM4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} rk1 = zero(rate_prototype) rk2 = zero(rate_prototype) rk3 = zero(rate_prototype) @@ -783,8 +867,10 @@ function alg_cache(alg::VCABM4, u, rate_prototype, ::Type{uEltypeNoUnits}, rtmp = zero(u) ratmp = similar(u, uEltypeNoUnits) recursivefill!(ratmp, false) - rk4cache = RK4Cache(u, uprev, rk1, rk2, rk3, rk4, rk, rtmp, ratmp, trivial_limiter!, - trivial_limiter!, False()) + rk4cache = RK4Cache( + u, uprev, rk1, rk2, rk3, rk4, rk, rtmp, ratmp, trivial_limiter!, + trivial_limiter!, False() + ) fsalfirst = zero(rate_prototype) k4 = zero(rate_prototype) dts = fill(zero(dt), 4) @@ -808,15 +894,18 @@ function alg_cache(alg::VCABM4, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmp, false) tmp = zero(u) utilde = zero(u) - VCABM4Cache(u, uprev, fsalfirst, rk4cache, k4, ϕstar_nm1, dts, c, g, ϕ_n, ϕ_np1, - ϕstar_n, β, order, atmp, tmp, utilde, 1, alg.thread) + return VCABM4Cache( + u, uprev, fsalfirst, rk4cache, k4, ϕstar_nm1, dts, c, g, ϕ_n, ϕ_np1, + ϕstar_n, β, order, atmp, tmp, utilde, 1, alg.thread + ) end # VCABM5 @cache mutable struct VCABM5ConstantCache{ - rk4constcache, tArrayType, rArrayType, cArrayType, - dtArrayType} <: OrdinaryDiffEqConstantCache + rk4constcache, tArrayType, rArrayType, cArrayType, + dtArrayType, + } <: OrdinaryDiffEqConstantCache ϕstar_nm1::rArrayType dts::dtArrayType c::cArrayType @@ -830,9 +919,11 @@ end step::Int end -@cache mutable struct VCABM5Cache{uType, rateType, rk4cacheType, tArrayType, cArrayType, - uNoUnitsType, coefType, dtArrayType, Thread} <: - ABMVariableCoefficientMutableCache +@cache mutable struct VCABM5Cache{ + uType, rateType, rk4cacheType, tArrayType, cArrayType, + uNoUnitsType, coefType, dtArrayType, Thread, + } <: + ABMVariableCoefficientMutableCache u::uType uprev::uType fsalfirst::rateType @@ -854,10 +945,12 @@ end thread::Thread end -function alg_cache(alg::VCABM5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::VCABM5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} dts = fill(zero(t), 5) c = fill(zero(t), 6, 6) g = fill(zero(t), 6) @@ -873,14 +966,18 @@ function alg_cache(alg::VCABM5, u, rate_prototype, ::Type{uEltypeNoUnits}, β = fill(zero(t), 5) order = 5 rk4constcache = RK4ConstantCache() - VCABM5ConstantCache(ϕstar_nm1, dts, c, g, ϕ_n, ϕ_np1, ϕstar_n, β, order, rk4constcache, - 1) + return VCABM5ConstantCache( + ϕstar_nm1, dts, c, g, ϕ_n, ϕ_np1, ϕstar_n, β, order, rk4constcache, + 1 + ) end -function alg_cache(alg::VCABM5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::VCABM5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} rk1 = zero(rate_prototype) rk2 = zero(rate_prototype) rk3 = zero(rate_prototype) @@ -889,8 +986,10 @@ function alg_cache(alg::VCABM5, u, rate_prototype, ::Type{uEltypeNoUnits}, rtmp = zero(u) ratmp = similar(u, uEltypeNoUnits) recursivefill!(ratmp, false) - rk4cache = RK4Cache(u, uprev, rk1, rk2, rk3, rk4, rk, rtmp, ratmp, trivial_limiter!, - trivial_limiter!, False()) + rk4cache = RK4Cache( + u, uprev, rk1, rk2, rk3, rk4, rk, rtmp, ratmp, trivial_limiter!, + trivial_limiter!, False() + ) fsalfirst = zero(rate_prototype) k4 = zero(rate_prototype) dts = fill(zero(dt), 5) @@ -914,14 +1013,18 @@ function alg_cache(alg::VCABM5, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmp, false) tmp = zero(u) utilde = zero(u) - VCABM5Cache(u, uprev, fsalfirst, rk4cache, k4, ϕstar_nm1, dts, c, g, ϕ_n, ϕ_np1, - ϕstar_n, β, order, atmp, tmp, utilde, 1, alg.thread) + return VCABM5Cache( + u, uprev, fsalfirst, rk4cache, k4, ϕstar_nm1, dts, c, g, ϕ_n, ϕ_np1, + ϕstar_n, β, order, atmp, tmp, utilde, 1, alg.thread + ) end # VCABM -@cache mutable struct VCABMConstantCache{tArrayType, rArrayType, cArrayType, dtType, - dtArrayType} <: OrdinaryDiffEqConstantCache +@cache mutable struct VCABMConstantCache{ + tArrayType, rArrayType, cArrayType, dtType, + dtArrayType, + } <: OrdinaryDiffEqConstantCache ϕstar_nm1::rArrayType dts::dtArrayType c::cArrayType @@ -937,9 +1040,11 @@ end step::Int end -@cache mutable struct VCABMCache{uType, rateType, dtType, tArrayType, cArrayType, - uNoUnitsType, coefType, dtArrayType, Thread} <: - ABMVariableCoefficientMutableCache +@cache mutable struct VCABMCache{ + uType, rateType, dtType, tArrayType, cArrayType, + uNoUnitsType, coefType, dtArrayType, Thread, + } <: + ABMVariableCoefficientMutableCache u::uType uprev::uType fsalfirst::rateType @@ -969,10 +1074,12 @@ end thread::Thread end -function alg_cache(alg::VCABM, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::VCABM, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} dts = fill(zero(dt), 13) c = fill(zero(t), 13, 13) g = fill(zero(t), 13) @@ -990,14 +1097,18 @@ function alg_cache(alg::VCABM, u, rate_prototype, ::Type{uEltypeNoUnits}, ξ0 = zero(dt) order = 1 max_order = 12 - VCABMConstantCache(ϕstar_nm1, dts, c, g, ϕ_n, ϕ_np1, ϕstar_n, β, ξ, ξ0, order, - max_order, 1) + return VCABMConstantCache( + ϕstar_nm1, dts, c, g, ϕ_n, ϕ_np1, ϕstar_n, β, ξ, ξ0, order, + max_order, 1 + ) end -function alg_cache(alg::VCABM, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::VCABM, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} fsalfirst = zero(rate_prototype) k4 = zero(rate_prototype) dts = fill(zero(dt), 13) @@ -1035,8 +1146,9 @@ function alg_cache(alg::VCABM, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmpm2, false) atmpp1 = similar(u, uEltypeNoUnits) recursivefill!(atmpp1, false) - VCABMCache( + return VCABMCache( u, uprev, fsalfirst, k4, ϕstar_nm1, dts, c, g, ϕ_n, ϕ_np1, ϕstar_n, β, order, max_order, atmp, tmp, ξ, ξ0, utilde, utildem1, utildem2, utildep1, atmpm1, - atmpm2, atmpp1, 1, alg.thread) + atmpm2, atmpp1, 1, alg.thread + ) end diff --git a/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/adams_bashforth_moulton_perform_step.jl b/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/adams_bashforth_moulton_perform_step.jl index 2fa81d4a4e..4c77eaae0f 100644 --- a/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/adams_bashforth_moulton_perform_step.jl +++ b/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/adams_bashforth_moulton_perform_step.jl @@ -1,10 +1,14 @@ -function initialize!(integrator, - cache::Union{AB3ConstantCache, +function initialize!( + integrator, + cache::Union{ + AB3ConstantCache, AB4ConstantCache, AB5ConstantCache, ABM32ConstantCache, ABM43ConstantCache, - ABM54ConstantCache}) + ABM54ConstantCache, + } + ) integrator.fsalfirst = integrator.f(integrator.uprev, integrator.p, integrator.t) # Pre-start fsal OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.kshortsize = 2 @@ -13,16 +17,20 @@ function initialize!(integrator, # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -function initialize!(integrator, - cache::Union{AB3Cache, +function initialize!( + integrator, + cache::Union{ + AB3Cache, AB4Cache, AB5Cache, ABM32Cache, ABM43Cache, - ABM54Cache}) + ABM54Cache, + } + ) (; fsalfirst, k) = cache integrator.kshortsize = 2 @@ -30,7 +38,7 @@ function initialize!(integrator, integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # pre-start FSAL - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::AB3ConstantCache, repeat_step = false) @@ -77,17 +85,17 @@ end if cache.step <= 2 cache.step += 1 ttmp = t + (2 / 3) * dt - @.. broadcast=false thread=thread tmp=uprev+(2/3)*dt*k1 + @.. broadcast = false thread = thread tmp = uprev + (2 / 3) * dt * k1 f(ralk2, tmp, p, ttmp) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false thread=thread u=uprev+(dt/4)*(k1+3*ralk2) #Ralston Method + @.. broadcast = false thread = thread u = uprev + (dt / 4) * (k1 + 3 * ralk2) #Ralston Method if cnt == 1 cache.k3 .= k1 else cache.k2 .= k1 end else - @.. broadcast=false thread=thread u=uprev+(dt/12)*(23*k1-16*k2+5*k3) + @.. broadcast = false thread = thread u = uprev + (dt / 12) * (23 * k1 - 16 * k2 + 5 * k3) cache.k2, cache.k3 = k3, k2 cache.k2 .= k1 end @@ -137,21 +145,25 @@ end if cache.step == 1 cache.step += 1 ttmp = t + (2 / 3) * dt - @.. broadcast=false thread=thread tmp=uprev+(2/3)*dt*k1 + @.. broadcast = false thread = thread tmp = uprev + (2 / 3) * dt * k1 f(ralk2, tmp, p, ttmp) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false thread=thread u=uprev+(dt/4)*(k1+3*ralk2) #Ralston Method + @.. broadcast = false thread = thread u = uprev + (dt / 4) * (k1 + 3 * ralk2) #Ralston Method cache.k2 .= k1 else if cnt == 2 - perform_step!(integrator, - AB3Cache(u, uprev, fsalfirst, copy(k2), k3, ralk2, k, tmp, cnt, thread)) #Here passing copy of k2, otherwise it will change in AB3() + perform_step!( + integrator, + AB3Cache(u, uprev, fsalfirst, copy(k2), k3, ralk2, k, tmp, cnt, thread) + ) #Here passing copy of k2, otherwise it will change in AB3() else - perform_step!(integrator, - AB3Cache(u, uprev, fsalfirst, k2, k3, ralk2, k, tmp, cnt, thread)) + perform_step!( + integrator, + AB3Cache(u, uprev, fsalfirst, k2, k3, ralk2, k, tmp, cnt, thread) + ) end k = integrator.fsallast - @.. broadcast=false thread=thread u=uprev+(dt/12)*(5*k+8*k1-k2) + @.. broadcast = false thread = thread u = uprev + (dt / 12) * (5 * k + 8 * k1 - k2) cache.k2, cache.k3 = k3, k2 cache.k2 .= k1 end @@ -208,14 +220,14 @@ end cache.step += 1 halfdt = dt / 2 ttmp = t + halfdt - @.. broadcast=false thread=thread tmp=uprev+halfdt*k1 + @.. broadcast = false thread = thread tmp = uprev + halfdt * k1 f(t2, tmp, p, ttmp) - @.. broadcast=false thread=thread tmp=uprev+halfdt*t2 + @.. broadcast = false thread = thread tmp = uprev + halfdt * t2 f(t3, tmp, p, ttmp) - @.. broadcast=false thread=thread tmp=uprev+dt*t3 + @.. broadcast = false thread = thread tmp = uprev + dt * t3 f(t4, tmp, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) - @.. broadcast=false thread=thread u=uprev+(dt/6)*(2*(t2+t3)+(k1+t4)) #RK4 + @.. broadcast = false thread = thread u = uprev + (dt / 6) * (2 * (t2 + t3) + (k1 + t4)) #RK4 if cnt == 1 cache.k4 .= k1 elseif cnt == 2 @@ -224,9 +236,9 @@ end cache.k2 .= k1 end else - @.. broadcast=false thread=thread u=uprev+ - (dt/24)* - (55*k1-59*k2+37*k3-9*k4) + @.. broadcast = false thread = thread u = uprev + + (dt / 24) * + (55 * k1 - 59 * k2 + 37 * k3 - 9 * k4) cache.k4, cache.k3 = k3, k4 cache.k3 .= k2 cache.k2 .= k1 @@ -284,14 +296,14 @@ end cache.step += 1 halfdt = dt / 2 ttmp = t + halfdt - @.. broadcast=false thread=thread tmp=uprev+halfdt*k1 + @.. broadcast = false thread = thread tmp = uprev + halfdt * k1 f(t2, tmp, p, ttmp) - @.. broadcast=false thread=thread tmp=uprev+halfdt*t2 + @.. broadcast = false thread = thread tmp = uprev + halfdt * t2 f(t3, tmp, p, ttmp) - @.. broadcast=false thread=thread tmp=uprev+dt*t3 + @.. broadcast = false thread = thread tmp = uprev + dt * t3 f(t4, tmp, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) - @.. broadcast=false thread=thread u=uprev+(dt/6)*(2*(t2+t3)+(k1+t4)) #RK4 + @.. broadcast = false thread = thread u = uprev + (dt / 6) * (2 * (t2 + t3) + (k1 + t4)) #RK4 if cnt == 1 cache.k3 .= k1 else @@ -301,12 +313,16 @@ end t2 .= k2 t3 .= k3 t4 .= k4 - perform_step!(integrator, - AB4Cache(u, uprev, fsalfirst, t2, t3, t4, ralk2, k, tmp, t5, t6, t7, - cnt, thread)) + perform_step!( + integrator, + AB4Cache( + u, uprev, fsalfirst, t2, t3, t4, ralk2, k, tmp, t5, t6, t7, + cnt, thread + ) + ) k = integrator.fsallast - @.. broadcast=false thread=thread u=uprev+ - (dt/24)*(9*k+19*k1-5*k2+k3) + @.. broadcast = false thread = thread u = uprev + + (dt / 24) * (9 * k + 19 * k1 - 5 * k2 + k3) cache.k4, cache.k3 = k3, k4 cache.k3 .= k2 cache.k2 .= k1 @@ -367,14 +383,14 @@ end cache.step += 1 halfdt = dt / 2 ttmp = t + halfdt - @.. broadcast=false thread=thread tmp=uprev+halfdt*k1 + @.. broadcast = false thread = thread tmp = uprev + halfdt * k1 f(t2, tmp, p, ttmp) - @.. broadcast=false thread=thread tmp=uprev+halfdt*t2 + @.. broadcast = false thread = thread tmp = uprev + halfdt * t2 f(t3, tmp, p, ttmp) - @.. broadcast=false thread=thread tmp=uprev+dt*t3 + @.. broadcast = false thread = thread tmp = uprev + dt * t3 f(t4, tmp, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false thread=thread u=uprev+(dt/6)*(2*(t2+t3)+(k1+t4)) #RK4 + @.. broadcast = false thread = thread u = uprev + (dt / 6) * (2 * (t2 + t3) + (k1 + t4)) #RK4 if cnt == 1 cache.k5 .= k1 elseif cnt == 2 @@ -385,10 +401,12 @@ end cache.k2 .= k1 end else - @.. broadcast=false thread=thread u=uprev+ - (dt/720)* - (1901*k1-2774*k2+2616*k3-1274*k4+ - 251*k5) + @.. broadcast = false thread = thread u = uprev + + (dt / 720) * + ( + 1901 * k1 - 2774 * k2 + 2616 * k3 - 1274 * k4 + + 251 * k5 + ) cache.k5, cache.k4 = k4, k5 cache.k4 .= k3 cache.k3 .= k2 @@ -450,13 +468,13 @@ end cache.step += 1 halfdt = dt / 2 ttmp = t + halfdt - @.. broadcast=false thread=thread tmp=uprev+halfdt*k1 + @.. broadcast = false thread = thread tmp = uprev + halfdt * k1 f(t2, tmp, p, ttmp) - @.. broadcast=false thread=thread tmp=uprev+halfdt*t2 + @.. broadcast = false thread = thread tmp = uprev + halfdt * t2 f(t3, tmp, p, ttmp) - @.. broadcast=false thread=thread tmp=uprev+dt*t3 + @.. broadcast = false thread = thread tmp = uprev + dt * t3 f(t4, tmp, p, t + dt) - @.. broadcast=false thread=thread u=uprev+(dt/6)*(2*(t2+t3)+(k1+t4)) #RK4 + @.. broadcast = false thread = thread u = uprev + (dt / 6) * (2 * (t2 + t3) + (k1 + t4)) #RK4 OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) if cnt == 1 cache.k4 .= k1 @@ -470,14 +488,20 @@ end t3 .= k3 t4 .= k4 t5 .= k5 - perform_step!(integrator, - AB5Cache(u, uprev, fsalfirst, t2, t3, t4, t5, k, tmp, t6, t7, t8, - cnt, thread)) + perform_step!( + integrator, + AB5Cache( + u, uprev, fsalfirst, t2, t3, t4, t5, k, tmp, t6, t7, t8, + cnt, thread + ) + ) k = integrator.fsallast - @.. broadcast=false thread=thread u=uprev+ - (dt/720)* - (251*k+646*k1-264*k2+106*k3- - 19*k4) + @.. broadcast = false thread = thread u = uprev + + (dt / 720) * + ( + 251 * k + 646 * k1 - 264 * k2 + 106 * k3 - + 19 * k4 + ) cache.k5, cache.k4 = k4, k5 cache.k4 .= k3 cache.k3 .= k2 @@ -497,7 +521,7 @@ function initialize!(integrator, cache::VCAB3ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::VCAB3ConstantCache, repeat_step = false) @@ -532,9 +556,11 @@ end end if integrator.opts.adaptive utilde = g[k] * ϕstar_n[k] # Using lower order AB from subset of coefficients - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if integrator.EEst > one(integrator.EEst) for i in 1:2 @@ -561,7 +587,7 @@ function initialize!(integrator, cache::VCAB3Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # pre-start FSAL - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::VCAB3Cache, repeat_step = false) @@ -592,14 +618,16 @@ end integrator.fsallast .= k4 else g_coefs!(cache, k) - @.. broadcast=false thread=thread u=uprev + @.. broadcast = false thread = thread u = uprev for i in 1:k - @.. broadcast=false thread=thread u+=g[i]*ϕstar_n[i] + @.. broadcast = false thread = thread u += g[i] * ϕstar_n[i] end if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=g[k]*ϕstar_n[k] # Using lower order AB from subset of coefficients - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false thread = thread utilde = g[k] * ϕstar_n[k] # Using lower order AB from subset of coefficients + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if integrator.EEst > one(integrator.EEst) for i in 1:2 @@ -624,7 +652,7 @@ function initialize!(integrator, cache::VCAB4ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::VCAB4ConstantCache, repeat_step = false) @@ -665,9 +693,11 @@ end end if integrator.opts.adaptive utilde = g[k] * ϕstar_n[k] - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if integrator.EEst > one(integrator.EEst) for i in 1:3 @@ -694,13 +724,15 @@ function initialize!(integrator, cache::VCAB4Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # pre-start FSAL - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::VCAB4Cache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator - (; k4, dts, g, ϕ_n, ϕstar_n, ϕstar_nm1, order, atmp, utilde, rk4cache, - thread) = cache + (; + k4, dts, g, ϕ_n, ϕstar_n, ϕstar_nm1, order, atmp, utilde, rk4cache, + thread, + ) = cache k1 = integrator.fsalfirst if integrator.u_modified cache.step = 1 @@ -732,14 +764,16 @@ end integrator.fsallast .= rk4cache.k else g_coefs!(cache, k) - @.. broadcast=false thread=thread u=uprev + @.. broadcast = false thread = thread u = uprev for i in 1:k - @.. broadcast=false thread=thread u+=g[i]*ϕstar_n[i] + @.. broadcast = false thread = thread u += g[i] * ϕstar_n[i] end if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=g[k]*ϕstar_n[k] - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false thread = thread utilde = g[k] * ϕstar_n[k] + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if integrator.EEst > one(integrator.EEst) for i in 1:3 @@ -766,7 +800,7 @@ function initialize!(integrator, cache::VCAB5ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::VCAB5ConstantCache, repeat_step = false) @@ -814,9 +848,11 @@ end end if integrator.opts.adaptive utilde = g[k] * ϕstar_n[k] - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if integrator.EEst > one(integrator.EEst) for i in 1:4 @@ -843,13 +879,15 @@ function initialize!(integrator, cache::VCAB5Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # pre-start FSAL - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::VCAB5Cache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator - (; k4, dts, g, ϕ_n, ϕstar_n, ϕstar_nm1, order, atmp, utilde, rk4cache, - thread) = cache + (; + k4, dts, g, ϕ_n, ϕstar_n, ϕstar_nm1, order, atmp, utilde, rk4cache, + thread, + ) = cache k1 = integrator.fsalfirst if integrator.u_modified cache.step = 1 @@ -888,14 +926,16 @@ end integrator.fsallast .= rk4cache.k else g_coefs!(cache, k) - @.. broadcast=false thread=thread u=uprev + @.. broadcast = false thread = thread u = uprev for i in 1:k - @.. broadcast=false thread=thread u+=g[i]*ϕstar_n[i] + @.. broadcast = false thread = thread u += g[i] * ϕstar_n[i] end if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=g[k]*ϕstar_n[k] - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false thread = thread utilde = g[k] * ϕstar_n[k] + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if integrator.EEst > one(integrator.EEst) for i in 1:4 @@ -922,7 +962,7 @@ function initialize!(integrator, cache::VCABM3ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::VCABM3ConstantCache, repeat_step = false) @@ -961,9 +1001,11 @@ end u += g[end - 1] * ϕ_np1[end - 1] if integrator.opts.adaptive utilde = (g[end] - g[end - 1]) * ϕ_np1[end] - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if integrator.EEst > one(integrator.EEst) for i in 1:2 @@ -990,13 +1032,15 @@ function initialize!(integrator, cache::VCABM3Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # pre-start FSAL - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::VCABM3Cache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator - (; k4, dts, g, ϕstar_n, ϕ_np1, ϕstar_nm1, order, atmp, utilde, bs3cache, - thread) = cache + (; + k4, dts, g, ϕstar_n, ϕ_np1, ϕstar_nm1, order, atmp, utilde, bs3cache, + thread, + ) = cache k1 = integrator.fsalfirst if integrator.u_modified cache.step = 1 @@ -1022,18 +1066,20 @@ end integrator.fsallast .= k4 else g_coefs!(cache, k + 1) - @.. broadcast=false thread=thread u=uprev + @.. broadcast = false thread = thread u = uprev for i in 1:(k - 1) - @.. broadcast=false thread=thread u+=g[i]*ϕstar_n[i] + @.. broadcast = false thread = thread u += g[i] * ϕstar_n[i] end f(k4, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) ϕ_np1!(cache, k4, k + 1) - @.. broadcast=false thread=thread u+=g[end - 1]*ϕ_np1[end - 1] + @.. broadcast = false thread = thread u += g[end - 1] * ϕ_np1[end - 1] if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=(g[end]-g[end - 1])*ϕ_np1[end] - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false thread = thread utilde = (g[end] - g[end - 1]) * ϕ_np1[end] + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if integrator.EEst > one(integrator.EEst) for i in 1:2 @@ -1060,7 +1106,7 @@ function initialize!(integrator, cache::VCABM4ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::VCABM4ConstantCache, repeat_step = false) @@ -1105,9 +1151,11 @@ end u += g[end - 1] * ϕ_np1[end - 1] if integrator.opts.adaptive utilde = (g[end] - g[end - 1]) * ϕ_np1[end] - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if integrator.EEst > one(integrator.EEst) for i in 1:3 @@ -1134,13 +1182,15 @@ function initialize!(integrator, cache::VCABM4Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # pre-start FSAL - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::VCABM4Cache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator - (; k4, dts, g, ϕstar_n, ϕ_np1, ϕstar_nm1, order, atmp, utilde, rk4cache, - thread) = cache + (; + k4, dts, g, ϕstar_n, ϕ_np1, ϕstar_nm1, order, atmp, utilde, rk4cache, + thread, + ) = cache k1 = integrator.fsalfirst if integrator.u_modified cache.step = 1 @@ -1172,18 +1222,20 @@ end integrator.fsallast .= rk4cache.k else g_coefs!(cache, k + 1) - @.. broadcast=false thread=thread u=uprev + @.. broadcast = false thread = thread u = uprev for i in 1:(k - 1) - @.. broadcast=false thread=thread u+=g[i]*ϕstar_n[i] + @.. broadcast = false thread = thread u += g[i] * ϕstar_n[i] end f(k4, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) ϕ_np1!(cache, k4, k + 1) - @.. broadcast=false thread=thread u+=g[end - 1]*ϕ_np1[end - 1] + @.. broadcast = false thread = thread u += g[end - 1] * ϕ_np1[end - 1] if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=(g[end]-g[end - 1])*ϕ_np1[end] - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false thread = thread utilde = (g[end] - g[end - 1]) * ϕ_np1[end] + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if integrator.EEst > one(integrator.EEst) for i in 1:3 @@ -1210,7 +1262,7 @@ function initialize!(integrator, cache::VCABM5ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::VCABM5ConstantCache, repeat_step = false) @@ -1262,9 +1314,11 @@ end u += g[end - 1] * ϕ_np1[end - 1] if integrator.opts.adaptive utilde = (g[end] - g[end - 1]) * ϕ_np1[end] - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if integrator.EEst > one(integrator.EEst) for i in 1:4 @@ -1291,14 +1345,16 @@ function initialize!(integrator, cache::VCABM5Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # pre-start FSAL - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::VCABM5Cache, repeat_step = false) @inbounds begin (; t, dt, uprev, u, f, p) = integrator - (; k4, dts, g, ϕ_n, ϕ_np1, ϕstar_n, ϕstar_nm1, - order, atmp, utilde, rk4cache, thread) = cache + (; + k4, dts, g, ϕ_n, ϕ_np1, ϕstar_n, ϕstar_nm1, + order, atmp, utilde, rk4cache, thread, + ) = cache k1 = integrator.fsalfirst if integrator.u_modified cache.step = 1 @@ -1337,19 +1393,21 @@ end integrator.fsallast .= rk4cache.k else g_coefs!(cache, 6) - @.. broadcast=false thread=thread u=muladd(g[1], ϕstar_n[1], uprev) - @.. broadcast=false thread=thread u=muladd(g[2], ϕstar_n[2], u) - @.. broadcast=false thread=thread u=muladd(g[3], ϕstar_n[3], u) - @.. broadcast=false thread=thread u=muladd(g[4], ϕstar_n[4], u) + @.. broadcast = false thread = thread u = muladd(g[1], ϕstar_n[1], uprev) + @.. broadcast = false thread = thread u = muladd(g[2], ϕstar_n[2], u) + @.. broadcast = false thread = thread u = muladd(g[3], ϕstar_n[3], u) + @.. broadcast = false thread = thread u = muladd(g[4], ϕstar_n[4], u) f(k4, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) ϕ_np1!(cache, k4, 6) - @.. broadcast=false thread=thread u=muladd(g[6 - 1], ϕ_np1[6 - 1], u) + @.. broadcast = false thread = thread u = muladd(g[6 - 1], ϕ_np1[6 - 1], u) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=(g[6]-g[6 - 1])*ϕ_np1[end] - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = (g[6] - g[6 - 1]) * ϕ_np1[end] + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if integrator.EEst > one(integrator.EEst) dts[1] = dts[2] @@ -1382,7 +1440,7 @@ function initialize!(integrator, cache::VCABMConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::VCABMConstantCache, repeat_step = false) @@ -1409,9 +1467,11 @@ end u = muladd(g[k], ϕ_np1[k], u) if integrator.opts.adaptive utilde = (g[k + 1] - g[k]) * ϕ_np1[k + 1] - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if integrator.EEst > one(integrator.EEst) for i in 1:12 @@ -1432,15 +1492,21 @@ end expand_ϕ_and_ϕstar!(cache, k + 1) ϕ_np1!(cache, integrator.fsallast, k + 2) utildep1 = dt * γstar[(k + 1) + 1] * ϕ_np1[k + 2] - atmpm2 = calculate_residuals(utildem2, uprev, u, integrator.opts.abstol, + atmpm2 = calculate_residuals( + utildem2, uprev, u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) - atmpm1 = calculate_residuals(utildem1, uprev, u, integrator.opts.abstol, + integrator.opts.internalnorm, t + ) + atmpm1 = calculate_residuals( + utildem1, uprev, u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) - atmpp1 = calculate_residuals(utildep1, uprev, u, integrator.opts.abstol, + integrator.opts.internalnorm, t + ) + atmpp1 = calculate_residuals( + utildep1, uprev, u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) errm2 = integrator.opts.internalnorm(atmpm2, t) errm1 = integrator.opts.internalnorm(atmpm1, t) errp1 = integrator.opts.internalnorm(atmpp1, t) @@ -1468,14 +1534,16 @@ function initialize!(integrator, cache::VCABMCache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # pre-start FSAL - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::VCABMCache, repeat_step = false) @inbounds begin (; t, dt, uprev, u, f, p) = integrator - (; k4, dts, g, ϕ_n, ϕ_np1, ϕstar_n, ϕstar_nm1, order, max_order, utilde, - utildem2, utildem1, utildep1, atmp, atmpm1, atmpm2, atmpp1, thread) = cache + (; + k4, dts, g, ϕ_n, ϕ_np1, ϕstar_n, ϕstar_nm1, order, max_order, utilde, + utildem2, utildem1, utildep1, atmp, atmpm1, atmpm2, atmpp1, thread, + ) = cache k1 = integrator.fsalfirst step = integrator.iter k = order @@ -1487,18 +1555,20 @@ end ϕ_and_ϕstar!(cache, k1, k) g_coefs!(cache, k + 1) # unroll the predictor once - @.. broadcast=false thread=thread u=muladd(g[1], ϕstar_n[1], uprev) + @.. broadcast = false thread = thread u = muladd(g[1], ϕstar_n[1], uprev) for i in 2:(k - 1) - @.. broadcast=false thread=thread u=muladd(g[i], ϕstar_n[i], u) + @.. broadcast = false thread = thread u = muladd(g[i], ϕstar_n[i], u) end f(k4, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) ϕ_np1!(cache, k4, k + 1) - @.. broadcast=false thread=thread u=muladd(g[k], ϕ_np1[k], u) + @.. broadcast = false thread = thread u = muladd(g[k], ϕ_np1[k], u) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=(g[k + 1]-g[k])*ϕ_np1[k + 1] - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false thread = thread utilde = (g[k + 1] - g[k]) * ϕ_np1[k + 1] + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if integrator.EEst > one(integrator.EEst) for i in 1:12 @@ -1513,23 +1583,29 @@ end cache.order = min(order + 1, 3) else # @.. broadcast=false thread=thread utildem2 = dt * γstar[(k-2)+1] * ϕ_np1[k-1] - @.. broadcast=false thread=thread utildem2=(g[k - 1]-g[k - 2])* - ϕ_np1[k - 1] + @.. broadcast = false thread = thread utildem2 = (g[k - 1] - g[k - 2]) * + ϕ_np1[k - 1] # @.. broadcast=false thread=thread utildem1 = dt * γstar[(k-1)+1] * ϕ_np1[k] - @.. broadcast=false thread=thread utildem1=(g[k]-g[k - 1])*ϕ_np1[k] + @.. broadcast = false thread = thread utildem1 = (g[k] - g[k - 1]) * ϕ_np1[k] expand_ϕ_and_ϕstar!(cache, k + 1) ϕ_np1!(cache, k4, k + 2) - @.. broadcast=false thread=thread utildep1=dt*γstar[(k + 1) + 1]* - ϕ_np1[k + 2] - calculate_residuals!(atmpm2, utildem2, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utildep1 = dt * γstar[(k + 1) + 1] * + ϕ_np1[k + 2] + calculate_residuals!( + atmpm2, utildem2, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) - calculate_residuals!(atmpm1, utildem1, uprev, u, integrator.opts.abstol, + t + ) + calculate_residuals!( + atmpm1, utildem1, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) - calculate_residuals!(atmpp1, utildep1, uprev, u, integrator.opts.abstol, + t + ) + calculate_residuals!( + atmpp1, utildep1, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) errm2 = integrator.opts.internalnorm(atmpm2, t) errm1 = integrator.opts.internalnorm(atmpm1, t) errp1 = integrator.opts.internalnorm(atmpp1, t) diff --git a/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/adams_utils.jl b/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/adams_utils.jl index 897506ea42..9e6665e65a 100644 --- a/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/adams_utils.jl +++ b/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/adams_utils.jl @@ -2,7 +2,7 @@ # by Ernst Hairer, Gerhard Wanner, and Syvert P Norsett. # III.5 Variable Step Size Multistep Methods: Formulae 5.9 function ϕ_and_ϕstar!(cache, du, k) - @inbounds begin + return @inbounds begin (; dts, ϕstar_nm1, ϕ_n, ϕstar_n, β) = cache ξ = dt = dts[1] ξ0 = zero(dt) @@ -19,8 +19,8 @@ function ϕ_and_ϕstar!(cache, du, k) β[i] = β[i - 1] * ξ / ξ0 ξ += dts[i] if cache isa OrdinaryDiffEqMutableCache - @.. broadcast=false ϕ_n[i]=ϕ_n[i - 1]-ϕstar_nm1[i - 1] - @.. broadcast=false ϕstar_n[i]=β[i]*ϕ_n[i] + @.. broadcast = false ϕ_n[i] = ϕ_n[i - 1] - ϕstar_nm1[i - 1] + @.. broadcast = false ϕstar_n[i] = β[i] * ϕ_n[i] else ϕ_n[i] = ϕ_n[i - 1] - ϕstar_nm1[i - 1] ϕstar_n[i] = β[i] * ϕ_n[i] @@ -30,7 +30,7 @@ function ϕ_and_ϕstar!(cache, du, k) end function ϕ_and_ϕstar!(cache::Union{VCABMConstantCache, VCABMCache}, du, k) - @inbounds begin + return @inbounds begin (; dts, ϕstar_nm1, ϕ_n, ϕstar_n, β) = cache ξ = dt = dts[1] ξ0 = zero(dt) @@ -47,8 +47,8 @@ function ϕ_and_ϕstar!(cache::Union{VCABMConstantCache, VCABMCache}, du, k) β[i] = β[i - 1] * ξ / ξ0 ξ += dts[i] if cache isa OrdinaryDiffEqMutableCache - @.. broadcast=false ϕ_n[i]=ϕ_n[i - 1]-ϕstar_nm1[i - 1] - @.. broadcast=false ϕstar_n[i]=β[i]*ϕ_n[i] + @.. broadcast = false ϕ_n[i] = ϕ_n[i - 1] - ϕstar_nm1[i - 1] + @.. broadcast = false ϕstar_n[i] = β[i] * ϕ_n[i] else ϕ_n[i] = ϕ_n[i - 1] - ϕstar_nm1[i - 1] ϕstar_n[i] = β[i] * ϕ_n[i] @@ -63,9 +63,9 @@ function expand_ϕ_and_ϕstar!(cache, i) (; ξ, ξ0, β, dts, ϕstar_nm1, ϕ_n, ϕstar_n) = cache ξ0 += dts[i] β[i] = β[i - 1] * ξ / ξ0 - if cache isa OrdinaryDiffEqMutableCache - @.. broadcast=false ϕ_n[i]=ϕ_n[i - 1]-ϕstar_nm1[i - 1] - @.. broadcast=false ϕstar_n[i]=β[i]*ϕ_n[i] + return if cache isa OrdinaryDiffEqMutableCache + @.. broadcast = false ϕ_n[i] = ϕ_n[i - 1] - ϕstar_nm1[i - 1] + @.. broadcast = false ϕstar_n[i] = β[i] * ϕ_n[i] else ϕ_n[i] = ϕ_n[i - 1] - ϕstar_nm1[i - 1] ϕstar_n[i] = β[i] * ϕ_n[i] @@ -73,12 +73,12 @@ function expand_ϕ_and_ϕstar!(cache, i) end function ϕ_np1!(cache, du_np1, k) - @inbounds begin + return @inbounds begin (; ϕ_np1, ϕstar_n) = cache for i in 1:k if i != 1 if cache isa OrdinaryDiffEqMutableCache - @.. broadcast=false ϕ_np1[i]=ϕ_np1[i - 1]-ϕstar_n[i - 1] + @.. broadcast = false ϕ_np1[i] = ϕ_np1[i - 1] - ϕstar_n[i - 1] else ϕ_np1[i] = ϕ_np1[i - 1] - ϕstar_n[i - 1] end @@ -99,7 +99,7 @@ end # ------------------------------------------------------------ # Note that `g` is scaled by `dt` in here function g_coefs!(cache, k) - @inbounds begin + return @inbounds begin (; dts, c, g) = cache ξ = dt = dts[1] for i in 1:k @@ -137,5 +137,5 @@ const global γstar = [ -0.00523669, -0.0046775, -0.00421495, - -0.0038269 + -0.0038269, ] diff --git a/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/algorithms.jl b/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/algorithms.jl index 8adf8dbd43..61a8cce6c6 100644 --- a/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/algorithms.jl +++ b/lib/OrdinaryDiffEqAdamsBashforthMoulton/src/algorithms.jl @@ -1,7 +1,7 @@ # Adams Bashforth and Adams moulton methods reference = """E. Hairer, S. P. Norsett, G. Wanner, Solving Ordinary Differential Equations I, Nonstiff - Problems. Computational Mathematics (2nd revised ed.), Springer (1996) doi: - https://doi.org/10.1007/978-3-540-78862-1""" +Problems. Computational Mathematics (2nd revised ed.), Springer (1996) doi: +https://doi.org/10.1007/978-3-540-78862-1""" keyword_default_description = """ - `thread`: determines whether internal broadcasting on appropriate CPU arrays should be serial (`thread = OrdinaryDiffEq.False()`) or use multiple threads (`thread = OrdinaryDiffEq.True()`) when Julia is started with multiple threads. @@ -11,152 +11,178 @@ keyword_default = """ thread = OrdinaryDiffEq.False(), """ -@doc generic_solver_docstring("The 3-step third order multistep method. +@doc generic_solver_docstring( + "The 3-step third order multistep method. Ralston's Second Order Method is used to calculate starting values.", "AB3", "Adams-Bashforth Explicit Method", reference, keyword_default_description, - keyword_default) + keyword_default +) Base.@kwdef struct AB3{Thread} <: OrdinaryDiffEqAlgorithm thread::Thread = False() end -@doc generic_solver_docstring("The 4-step fourth order multistep method. +@doc generic_solver_docstring( + "The 4-step fourth order multistep method. Runge-Kutta method of order 4 is used to calculate starting values.", "AB4", "Adams-Bashforth Explicit Method", reference, keyword_default_description, - keyword_default) + keyword_default +) Base.@kwdef struct AB4{Thread} <: OrdinaryDiffEqAlgorithm thread::Thread = False() end -@doc generic_solver_docstring("The 5-step fifth order multistep method. +@doc generic_solver_docstring( + "The 5-step fifth order multistep method. Ralston's 3rd order Runge-Kutta method is used to calculate starting values.", "AB5", "Adams-Bashforth Explicit Method", reference, keyword_default_description, - keyword_default) + keyword_default +) Base.@kwdef struct AB5{Thread} <: OrdinaryDiffEqAlgorithm thread::Thread = False() end -@doc generic_solver_docstring("It is third order method. +@doc generic_solver_docstring( + "It is third order method. In ABM32, AB3 works as predictor and Adams Moulton 2-steps method works as Corrector. Ralston's Second Order Method is used to calculate starting values.", "ABM32", "Adams-Bashforth Explicit Method", reference, keyword_default_description, - keyword_default) + keyword_default +) Base.@kwdef struct ABM32{Thread} <: OrdinaryDiffEqAlgorithm thread::Thread = False() end -@doc generic_solver_docstring("It is fourth order method. +@doc generic_solver_docstring( + "It is fourth order method. In ABM43, AB4 works as predictor and Adams Moulton 3-steps method works as Corrector. Runge-Kutta method of order 4 is used to calculate starting values.", "ABM43", "Adams-Bashforth Explicit Method", reference, keyword_default_description, - keyword_default) + keyword_default +) Base.@kwdef struct ABM43{Thread} <: OrdinaryDiffEqAlgorithm thread::Thread = False() end -@doc generic_solver_docstring("It is fifth order method. +@doc generic_solver_docstring( + "It is fifth order method. In ABM54, AB5 works as predictor and Adams Moulton 4-steps method works as Corrector. Runge-Kutta method of order 4 is used to calculate starting values.", "ABM54", "Adams-Bashforth Explicit Method", reference, keyword_default_description, - keyword_default) + keyword_default +) Base.@kwdef struct ABM54{Thread} <: OrdinaryDiffEqAlgorithm thread::Thread = False() end # Variable Step Size Adams methods -@doc generic_solver_docstring("The 3rd order Adams method. +@doc generic_solver_docstring( + "The 3rd order Adams method. Bogacki-Shampine 3/2 method is used to calculate starting values.", "VCAB3", "Adams explicit Method", reference, keyword_default_description, - keyword_default) + keyword_default +) Base.@kwdef struct VCAB3{Thread} <: OrdinaryDiffEqAdaptiveAlgorithm thread::Thread = False() end -@doc generic_solver_docstring("The 4th order Adams method. +@doc generic_solver_docstring( + "The 4th order Adams method. Runge-Kutta 4 is used to calculate starting values.", "VCAB4", "Adams explicit Method", reference, keyword_default_description, - keyword_default) + keyword_default +) Base.@kwdef struct VCAB4{Thread} <: OrdinaryDiffEqAdaptiveAlgorithm thread::Thread = False() end -@doc generic_solver_docstring("The 5th order Adams method. +@doc generic_solver_docstring( + "The 5th order Adams method. Runge-Kutta 4 is used to calculate starting values.", "VCAB5", "Adams explicit Method", reference, keyword_default_description, - keyword_default) + keyword_default +) Base.@kwdef struct VCAB5{Thread} <: OrdinaryDiffEqAdaptiveAlgorithm thread::Thread = False() end -@doc generic_solver_docstring("The 3rd order Adams-Moulton method. +@doc generic_solver_docstring( + "The 3rd order Adams-Moulton method. Bogacki-Shampine 3/2 method is used to calculate starting values.", "VCABM3", "Adams explicit Method", reference, keyword_default_description, - keyword_default) + keyword_default +) Base.@kwdef struct VCABM3{Thread} <: OrdinaryDiffEqAdaptiveAlgorithm thread::Thread = False() end -@doc generic_solver_docstring("The 4th order Adams-Moulton method. +@doc generic_solver_docstring( + "The 4th order Adams-Moulton method. Runge-Kutta 4 is used to calculate starting values.", "VCABM4", "Adams explicit Method", reference, keyword_default_description, - keyword_default) + keyword_default +) Base.@kwdef struct VCABM4{Thread} <: OrdinaryDiffEqAdaptiveAlgorithm thread::Thread = False() end -@doc generic_solver_docstring("The 5th order Adams-Moulton method. +@doc generic_solver_docstring( + "The 5th order Adams-Moulton method. Runge-Kutta 4 is used to calculate starting values.", "VCABM5", "Adams explicit Method", reference, keyword_default_description, - keyword_default) + keyword_default +) Base.@kwdef struct VCABM5{Thread} <: OrdinaryDiffEqAdaptiveAlgorithm thread::Thread = False() end # Variable Order and Variable Step Size Adams methods -@doc generic_solver_docstring("An adaptive order adaptive time Adams Moulton method. +@doc generic_solver_docstring( + "An adaptive order adaptive time Adams Moulton method. It uses an order adaptivity algorithm is derived from Shampine's DDEABM.", "VCABM", "adaptive order Adams explicit Method", reference, keyword_default_description, - keyword_default) + keyword_default +) Base.@kwdef struct VCABM{Thread} <: OrdinaryDiffEqAdamsVarOrderVarStepAlgorithm thread::Thread = False() end diff --git a/lib/OrdinaryDiffEqAdamsBashforthMoulton/test/abm_convergence_tests.jl b/lib/OrdinaryDiffEqAdamsBashforthMoulton/test/abm_convergence_tests.jl index 4abfe350c8..d0fd594e1c 100644 --- a/lib/OrdinaryDiffEqAdamsBashforthMoulton/test/abm_convergence_tests.jl +++ b/lib/OrdinaryDiffEqAdamsBashforthMoulton/test/abm_convergence_tests.jl @@ -9,53 +9,57 @@ dts = 1 .// 2 .^ (8:-1:4) testTol = 0.2 @testset "Explicit Solver Convergence Tests ($(["out-of-place", "in-place"][i]))" for i in - 1:2 + 1:2 - prob = (ODEProblemLibrary.prob_ode_linear, - ODEProblemLibrary.prob_ode_2Dlinear)[i] + prob = ( + ODEProblemLibrary.prob_ode_linear, + ODEProblemLibrary.prob_ode_2Dlinear, + )[i] sim5 = test_convergence(dts, prob, AB3()) - @test sim5.𝒪est[:l2]≈3 atol=testTol + @test sim5.𝒪est[:l2] ≈ 3 atol = testTol sim6 = test_convergence(dts, prob, ABM32()) - @test sim6.𝒪est[:l2]≈3 atol=testTol + @test sim6.𝒪est[:l2] ≈ 3 atol = testTol sim7 = test_convergence(dts, prob, AB4()) - @test sim7.𝒪est[:l2]≈4 atol=testTol + @test sim7.𝒪est[:l2] ≈ 4 atol = testTol sim8 = test_convergence(dts1, prob, ABM43()) #using dts1 due to floating point error in convergence test - @test sim8.𝒪est[:l2]≈4 atol=testTol + @test sim8.𝒪est[:l2] ≈ 4 atol = testTol sim9 = test_convergence(dts, prob, AB5()) - @test sim9.𝒪est[:l2]≈5 atol=testTol + @test sim9.𝒪est[:l2] ≈ 5 atol = testTol sim10 = test_convergence(dts, prob, ABM54()) - @test sim10.𝒪est[:l2]≈5 atol=testTol + @test sim10.𝒪est[:l2] ≈ 5 atol = testTol sim101 = test_convergence(dts, prob, VCAB3()) - @test sim101.𝒪est[:l2]≈3 atol=testTol + @test sim101.𝒪est[:l2] ≈ 3 atol = testTol sim102 = test_convergence(dts, prob, VCAB4()) - @test sim102.𝒪est[:l2]≈4 atol=testTol + @test sim102.𝒪est[:l2] ≈ 4 atol = testTol sim103 = test_convergence(dts, prob, VCAB5()) - @test sim103.𝒪est[:l2]≈5 atol=testTol + @test sim103.𝒪est[:l2] ≈ 5 atol = testTol sim104 = test_convergence(dts, prob, VCABM3()) - @test sim104.𝒪est[:l2]≈3 atol=testTol + @test sim104.𝒪est[:l2] ≈ 3 atol = testTol sim105 = test_convergence(dts, prob, VCABM4()) - @test sim105.𝒪est[:l2]≈4 atol=testTol + @test sim105.𝒪est[:l2] ≈ 4 atol = testTol sim106 = test_convergence(dts, prob, VCABM5()) - @test sim106.𝒪est[:l2]≈5 atol=testTol + @test sim106.𝒪est[:l2] ≈ 5 atol = testTol end @testset "Explicit Solver Convergence Tests ($(["out-of-place", "in-place"][i])) - threaded " for i in - 1:2 + 1:2 - prob = (ODEProblemLibrary.prob_ode_linear, - ODEProblemLibrary.prob_ode_2Dlinear)[i] + prob = ( + ODEProblemLibrary.prob_ode_linear, + ODEProblemLibrary.prob_ode_2Dlinear, + )[i] sim5 = test_convergence(dts, prob, AB3(true)) - @test sim5.𝒪est[:l2]≈3 atol=testTol + @test sim5.𝒪est[:l2] ≈ 3 atol = testTol sim7 = test_convergence(dts, prob, AB4(true)) - @test sim7.𝒪est[:l2]≈4 atol=testTol + @test sim7.𝒪est[:l2] ≈ 4 atol = testTol sim9 = test_convergence(dts, prob, AB5(true)) - @test sim9.𝒪est[:l2]≈5 atol=testTol + @test sim9.𝒪est[:l2] ≈ 5 atol = testTol sim101 = test_convergence(dts, prob, VCAB3(true)) - @test sim101.𝒪est[:l2]≈3 atol=testTol + @test sim101.𝒪est[:l2] ≈ 3 atol = testTol sim103 = test_convergence(dts, prob, VCAB5(true)) - @test sim103.𝒪est[:l2]≈5 atol=testTol + @test sim103.𝒪est[:l2] ≈ 5 atol = testTol sim105 = test_convergence(dts, prob, VCABM4(true)) - @test sim105.𝒪est[:l2]≈4 atol=testTol + @test sim105.𝒪est[:l2] ≈ 4 atol = testTol end diff --git a/lib/OrdinaryDiffEqAdamsBashforthMoulton/test/jet.jl b/lib/OrdinaryDiffEqAdamsBashforthMoulton/test/jet.jl index d5687e7cea..fdf8f68388 100644 --- a/lib/OrdinaryDiffEqAdamsBashforthMoulton/test/jet.jl +++ b/lib/OrdinaryDiffEqAdamsBashforthMoulton/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqAdamsBashforthMoulton, target_defined_modules = true, mode = :typo) + OrdinaryDiffEqAdamsBashforthMoulton, target_defined_modules = true, mode = :typo + ) end diff --git a/lib/OrdinaryDiffEqAdamsBashforthMoulton/test/regression_test_threading.jl b/lib/OrdinaryDiffEqAdamsBashforthMoulton/test/regression_test_threading.jl index b70a6b11cb..a16b16dd0b 100644 --- a/lib/OrdinaryDiffEqAdamsBashforthMoulton/test/regression_test_threading.jl +++ b/lib/OrdinaryDiffEqAdamsBashforthMoulton/test/regression_test_threading.jl @@ -4,7 +4,8 @@ using Test using Static algorithms = [ - AB3, AB4, AB5, ABM32, ABM43, ABM54, VCAB3, VCAB4, VCAB5, VCABM3, VCABM4, VCABM5, VCABM] + AB3, AB4, AB5, ABM32, ABM43, ABM54, VCAB3, VCAB4, VCAB5, VCABM3, VCABM4, VCABM5, VCABM, +] problem = ODEProblemLibrary.prob_ode_linear diff --git a/lib/OrdinaryDiffEqBDF/src/OrdinaryDiffEqBDF.jl b/lib/OrdinaryDiffEqBDF/src/OrdinaryDiffEqBDF.jl index 95d82f78d6..c1f0366f99 100644 --- a/lib/OrdinaryDiffEqBDF/src/OrdinaryDiffEqBDF.jl +++ b/lib/OrdinaryDiffEqBDF/src/OrdinaryDiffEqBDF.jl @@ -1,27 +1,27 @@ module OrdinaryDiffEqBDF import OrdinaryDiffEqCore: alg_order, calculate_residuals!, - initialize!, perform_step!, unwrap_alg, - calculate_residuals, alg_extrapolates, - OrdinaryDiffEqAlgorithm, - OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, - OrdinaryDiffEqNewtonAdaptiveAlgorithm, - OrdinaryDiffEqNewtonAlgorithm, - AbstractController, DEFAULT_PRECS, - CompiledFloats, uses_uprev, - alg_cache, _vec, _reshape, @cache, - isfsal, full_cache, - constvalue, isadaptive, error_constant, - has_special_newton_error, - trivial_limiter!, - issplit, qsteady_min_default, qsteady_max_default, - get_current_alg_order, get_current_adaptive_order, - default_controller, stepsize_controller!, - step_accept_controller!, - step_reject_controller!, post_newton_controller!, - u_modified!, DAEAlgorithm, _unwrap_val, DummyController, - get_fsalfirstlast, generic_solver_docstring, _bool_to_ADType, - _process_AD_choice + initialize!, perform_step!, unwrap_alg, + calculate_residuals, alg_extrapolates, + OrdinaryDiffEqAlgorithm, + OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, + OrdinaryDiffEqNewtonAdaptiveAlgorithm, + OrdinaryDiffEqNewtonAlgorithm, + AbstractController, DEFAULT_PRECS, + CompiledFloats, uses_uprev, + alg_cache, _vec, _reshape, @cache, + isfsal, full_cache, + constvalue, isadaptive, error_constant, + has_special_newton_error, + trivial_limiter!, + issplit, qsteady_min_default, qsteady_max_default, + get_current_alg_order, get_current_adaptive_order, + default_controller, stepsize_controller!, + step_accept_controller!, + step_reject_controller!, post_newton_controller!, + u_modified!, DAEAlgorithm, _unwrap_val, DummyController, + get_fsalfirstlast, generic_solver_docstring, _bool_to_ADType, + _process_AD_choice using OrdinaryDiffEqSDIRK: ImplicitEulerConstantCache, ImplicitEulerCache using TruncatedStacktraces: @truncate_stacktrace @@ -36,9 +36,9 @@ using ArrayInterface: ismutable import OrdinaryDiffEqCore using OrdinaryDiffEqDifferentiation: UJacobianWrapper using OrdinaryDiffEqNonlinearSolve: NLNewton, du_alias_or_new, build_nlsolver, - nlsolve!, nlsolvefail, isnewton, markfirststage!, - set_new_W!, DIRK, compute_step!, COEFFICIENT_MULTISTEP, - NonlinearSolveAlg + nlsolve!, nlsolvefail, isnewton, markfirststage!, + set_new_W!, DIRK, compute_step!, COEFFICIENT_MULTISTEP, + NonlinearSolveAlg import ADTypes: AutoForwardDiff, AutoFiniteDiff, AbstractADType using Reexport @@ -67,29 +67,51 @@ PrecompileTools.@compile_workload begin end if Preferences.@load_preference("PrecompileAutoSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.AutoSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.AutoSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0), Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.AutoSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0) + ) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.AutoSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0), Float64[] + ) + ) end if Preferences.@load_preference("PrecompileFunctionWrapperSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0), Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0) + ) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0), Float64[] + ) + ) end if Preferences.@load_preference("PrecompileNoSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), - Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0)) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.NoSpecialize}( + lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), + Float64[] + ) + ) end for prob in prob_list, solver in solver_list @@ -102,7 +124,7 @@ PrecompileTools.@compile_workload begin end export ABDF2, QNDF1, QBDF1, QNDF2, QBDF2, QNDF, QBDF, FBDF, - SBDF, SBDF2, SBDF3, SBDF4, MEBDF2, IMEXEuler, IMEXEulerARK, - DABDF2, DImplicitEuler, DFBDF + SBDF, SBDF2, SBDF3, SBDF4, MEBDF2, IMEXEuler, IMEXEulerARK, + DABDF2, DImplicitEuler, DFBDF end diff --git a/lib/OrdinaryDiffEqBDF/src/alg_utils.jl b/lib/OrdinaryDiffEqBDF/src/alg_utils.jl index c1e2273e6a..572647a9c9 100644 --- a/lib/OrdinaryDiffEqBDF/src/alg_utils.jl +++ b/lib/OrdinaryDiffEqBDF/src/alg_utils.jl @@ -36,6 +36,6 @@ alg_extrapolates(alg::DABDF2) = true alg_order(alg::DImplicitEuler) = 1 alg_order(alg::DABDF2) = 2 -alg_order(alg::DFBDF) = 1#dummy value +alg_order(alg::DFBDF) = 1 #dummy value isfsal(alg::DImplicitEuler) = false diff --git a/lib/OrdinaryDiffEqBDF/src/algorithms.jl b/lib/OrdinaryDiffEqBDF/src/algorithms.jl index 147cace806..ad0aba5f19 100644 --- a/lib/OrdinaryDiffEqBDF/src/algorithms.jl +++ b/lib/OrdinaryDiffEqBDF/src/algorithms.jl @@ -1,8 +1,10 @@ -function BDF_docstring(description::String, +function BDF_docstring( + description::String, name::String; references::String = "", extra_keyword_description::String = "", - extra_keyword_default::String = "") + extra_keyword_default::String = "" + ) keyword_default = """ chunk_size = Val{0}(), autodiff = AutoForwardDiff(), @@ -13,61 +15,61 @@ function BDF_docstring(description::String, """ * "\n" * extra_keyword_default keyword_default_description = """ - - `autodiff`: Uses [ADTypes.jl](https://sciml.github.io/ADTypes.jl/stable/) - to specify whether to use automatic differentiation via - [ForwardDiff.jl](https://github.com/JuliaDiff/ForwardDiff.jl) or finite - differencing via [FiniteDiff.jl](https://github.com/JuliaDiff/FiniteDiff.jl). - Defaults to `AutoForwardDiff()` for automatic differentiation, which by default uses - `chunksize = 0`, and thus uses the internal ForwardDiff.jl algorithm for the choice. - To use `FiniteDiff.jl`, the `AutoFiniteDiff()` ADType can be used, which has a keyword argument - `fdtype` with default value `Val{:forward}()`, and alternatives `Val{:central}()` and `Val{:complex}()`. - - `standardtag`: Specifies whether to use package-specific tags instead of the - ForwardDiff default function-specific tags. For more information, see - [this blog post](https://www.stochasticlifestyle.com/improved-forwarddiff-jl-stacktraces-with-package-tags/). - Defaults to `Val{true}()`. - - `concrete_jac`: Specifies whether a Jacobian should be constructed. Defaults to - `nothing`, which means it will be chosen true/false depending on circumstances - of the solver, such as whether a Krylov subspace method is used for `linsolve`. - - `linsolve`: Any [LinearSolve.jl](https://github.com/SciML/LinearSolve.jl) compatible linear solver. - For example, to use [KLU.jl](https://github.com/JuliaSparse/KLU.jl), specify - `$name(linsolve = KLUFactorization()`). - When `nothing` is passed, uses `DefaultLinearSolver`. - - `precs`: Any [LinearSolve.jl-compatible preconditioner](https://docs.sciml.ai/LinearSolve/stable/basics/Preconditioners/) - can be used as a left or right preconditioner. - Preconditioners are specified by the `Pl,Pr = precs(W,du,u,p,t,newW,Plprev,Prprev,solverdata)` - function where the arguments are defined as: - - `W`: the current Jacobian of the nonlinear system. Specified as either - ``I - \\gamma J`` or ``I/\\gamma - J`` depending on the algorithm. This will - commonly be a `WOperator` type defined by OrdinaryDiffEq.jl. It is a lazy - representation of the operator. Users can construct the W-matrix on demand - by calling `convert(AbstractMatrix,W)` to receive an `AbstractMatrix` matching - the `jac_prototype`. - - `du`: the current ODE derivative - - `u`: the current ODE state - - `p`: the ODE parameters - - `t`: the current ODE time - - `newW`: a `Bool` which specifies whether the `W` matrix has been updated since - the last call to `precs`. It is recommended that this is checked to only - update the preconditioner when `newW == true`. - - `Plprev`: the previous `Pl`. - - `Prprev`: the previous `Pr`. - - `solverdata`: Optional extra data the solvers can give to the `precs` function. - Solver-dependent and subject to change. - The return is a tuple `(Pl,Pr)` of the LinearSolve.jl-compatible preconditioners. - To specify one-sided preconditioning, simply return `nothing` for the preconditioner - which is not used. Additionally, `precs` must supply the dispatch: - ```julia - Pl, Pr = precs(W, du, u, p, t, ::Nothing, ::Nothing, ::Nothing, solverdata) - ``` - which is used in the solver setup phase to construct the integrator - type with the preconditioners `(Pl,Pr)`. - The default is `precs=DEFAULT_PRECS` where the default preconditioner function - is defined as: - ```julia - DEFAULT_PRECS(W, du, u, p, t, newW, Plprev, Prprev, solverdata) = nothing, nothing - ``` - """ * "/n" * extra_keyword_description - generic_solver_docstring( + - `autodiff`: Uses [ADTypes.jl](https://sciml.github.io/ADTypes.jl/stable/) + to specify whether to use automatic differentiation via + [ForwardDiff.jl](https://github.com/JuliaDiff/ForwardDiff.jl) or finite + differencing via [FiniteDiff.jl](https://github.com/JuliaDiff/FiniteDiff.jl). + Defaults to `AutoForwardDiff()` for automatic differentiation, which by default uses + `chunksize = 0`, and thus uses the internal ForwardDiff.jl algorithm for the choice. + To use `FiniteDiff.jl`, the `AutoFiniteDiff()` ADType can be used, which has a keyword argument + `fdtype` with default value `Val{:forward}()`, and alternatives `Val{:central}()` and `Val{:complex}()`. + - `standardtag`: Specifies whether to use package-specific tags instead of the + ForwardDiff default function-specific tags. For more information, see + [this blog post](https://www.stochasticlifestyle.com/improved-forwarddiff-jl-stacktraces-with-package-tags/). + Defaults to `Val{true}()`. + - `concrete_jac`: Specifies whether a Jacobian should be constructed. Defaults to + `nothing`, which means it will be chosen true/false depending on circumstances + of the solver, such as whether a Krylov subspace method is used for `linsolve`. + - `linsolve`: Any [LinearSolve.jl](https://github.com/SciML/LinearSolve.jl) compatible linear solver. + For example, to use [KLU.jl](https://github.com/JuliaSparse/KLU.jl), specify + `$name(linsolve = KLUFactorization()`). + When `nothing` is passed, uses `DefaultLinearSolver`. + - `precs`: Any [LinearSolve.jl-compatible preconditioner](https://docs.sciml.ai/LinearSolve/stable/basics/Preconditioners/) + can be used as a left or right preconditioner. + Preconditioners are specified by the `Pl,Pr = precs(W,du,u,p,t,newW,Plprev,Prprev,solverdata)` + function where the arguments are defined as: + - `W`: the current Jacobian of the nonlinear system. Specified as either + ``I - \\gamma J`` or ``I/\\gamma - J`` depending on the algorithm. This will + commonly be a `WOperator` type defined by OrdinaryDiffEq.jl. It is a lazy + representation of the operator. Users can construct the W-matrix on demand + by calling `convert(AbstractMatrix,W)` to receive an `AbstractMatrix` matching + the `jac_prototype`. + - `du`: the current ODE derivative + - `u`: the current ODE state + - `p`: the ODE parameters + - `t`: the current ODE time + - `newW`: a `Bool` which specifies whether the `W` matrix has been updated since + the last call to `precs`. It is recommended that this is checked to only + update the preconditioner when `newW == true`. + - `Plprev`: the previous `Pl`. + - `Prprev`: the previous `Pr`. + - `solverdata`: Optional extra data the solvers can give to the `precs` function. + Solver-dependent and subject to change. + The return is a tuple `(Pl,Pr)` of the LinearSolve.jl-compatible preconditioners. + To specify one-sided preconditioning, simply return `nothing` for the preconditioner + which is not used. Additionally, `precs` must supply the dispatch: + ```julia + Pl, Pr = precs(W, du, u, p, t, ::Nothing, ::Nothing, ::Nothing, solverdata) + ``` + which is used in the solver setup phase to construct the integrator + type with the preconditioners `(Pl,Pr)`. + The default is `precs=DEFAULT_PRECS` where the default preconditioner function + is defined as: + ```julia + DEFAULT_PRECS(W, du, u, p, t, newW, Plprev, Prprev, solverdata) = nothing, nothing + ``` + """ * "/n" * extra_keyword_description + return generic_solver_docstring( description, name, "Multistep Method.", references, keyword_default_description, keyword_default ) @@ -98,9 +100,10 @@ end extrapolant = :linear, controller = :Standard, step_limiter! = trivial_limiter!, - """) + """ +) struct ABDF2{CS, AD, F, F2, P, FDT, ST, CJ, K, T, StepLimiter} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -118,14 +121,18 @@ function ABDF2(; κ = nothing, tol = nothing, linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), smooth_est = true, extrapolant = :linear, - controller = :Standard, step_limiter! = trivial_limiter!) + controller = :Standard, step_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - ABDF2{ + return ABDF2{ _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), - typeof(κ), typeof(tol), typeof(step_limiter!)}(linsolve, nlsolve, precs, κ, tol, - smooth_est, extrapolant, controller, step_limiter!, AD_choice) + typeof(κ), typeof(tol), typeof(step_limiter!), + }( + linsolve, nlsolve, precs, κ, tol, + smooth_est, extrapolant, controller, step_limiter!, AD_choice + ) end @doc BDF_docstring( @@ -158,9 +165,10 @@ like `KenCarp4`, but instead using a multistep BDF approach", extrapolant = :linear, ark = false, order, - """) + """ +) struct SBDF{CS, AD, F, F2, P, FDT, ST, CJ, K, T} <: - OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -172,16 +180,21 @@ struct SBDF{CS, AD, F, F2, P, FDT, ST, CJ, K, T} <: autodiff::AD end -function SBDF(order; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function SBDF( + order; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), κ = nothing, tol = nothing, - extrapolant = :linear, ark = false) + extrapolant = :linear, ark = false + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - SBDF{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), + return SBDF{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), - typeof(κ), typeof(tol)}(linsolve, + typeof(κ), typeof(tol), + }( + linsolve, nlsolve, precs, κ, @@ -189,7 +202,8 @@ function SBDF(order; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), extrapolant, order, ark, - AD_choice) + AD_choice + ) end # All keyword form needed for remake @@ -199,12 +213,16 @@ function SBDF(; linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), κ = nothing, tol = nothing, extrapolant = :linear, - order, ark = false) + order, ark = false + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - SBDF{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), + return SBDF{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), - typeof(κ), typeof(tol)}(linsolve, + typeof(κ), typeof(tol), + }( + linsolve, nlsolve, precs, κ, @@ -212,7 +230,8 @@ function SBDF(; extrapolant, order, ark, - AD_choice) + AD_choice + ) end """ @@ -286,9 +305,10 @@ SBDF4(; kwargs...) = SBDF(4; kwargs...) kappa = -0.1850, controller = :Standard, step_limiter! = trivial_limiter!, - """) + """ +) struct QNDF1{CS, AD, F, F2, P, FDT, ST, CJ, κType, StepLimiter} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -304,20 +324,24 @@ function QNDF1(; concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), extrapolant = :linear, kappa = -37 // 200, - controller = :Standard, step_limiter! = trivial_limiter!) + controller = :Standard, step_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - QNDF1{ + return QNDF1{ _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), - typeof(kappa), typeof(step_limiter!)}(linsolve, + typeof(kappa), typeof(step_limiter!), + }( + linsolve, nlsolve, precs, extrapolant, kappa, controller, step_limiter!, - AD_choice) + AD_choice + ) end @doc BDF_docstring( @@ -346,9 +370,10 @@ end kappa = -1 // 9, controller = :Standard, step_limiter! = trivial_limiter!, - """) + """ +) struct QNDF2{CS, AD, F, F2, P, FDT, ST, CJ, κType, StepLimiter} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -364,20 +389,24 @@ function QNDF2(; concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), extrapolant = :linear, kappa = -1 // 9, - controller = :Standard, step_limiter! = trivial_limiter!) + controller = :Standard, step_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - QNDF2{ + return QNDF2{ _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), - typeof(kappa), typeof(step_limiter!)}(linsolve, + typeof(kappa), typeof(step_limiter!), + }( + linsolve, nlsolve, precs, extrapolant, kappa, controller, step_limiter!, - AD_choice) + AD_choice + ) end @doc BDF_docstring( @@ -410,9 +439,10 @@ end kappa = promote(-0.1850, -1 // 9, -0.0823, -0.0415, 0), controller = :Standard, step_limiter! = trivial_limiter!, - """) + """ +) struct QNDF{MO, CS, AD, F, F2, P, FDT, ST, CJ, K, T, κType, StepLimiter} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} max_order::Val{MO} linsolve::F nlsolve::F2 @@ -426,27 +456,34 @@ struct QNDF{MO, CS, AD, F, F2, P, FDT, ST, CJ, K, T, κType, StepLimiter} <: autodiff::AD end -function QNDF(; max_order::Val{MO} = Val{5}(), chunk_size = Val{0}(), +function QNDF(; + max_order::Val{MO} = Val{5}(), chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), κ = nothing, tol = nothing, extrapolant = :linear, kappa = ( - -37 // 200, -1 // 9, -823 // 10000, -83 // 2000, 0 // 1), - controller = :Standard, step_limiter! = trivial_limiter!) where {MO} + -37 // 200, -1 // 9, -823 // 10000, -83 // 2000, 0 // 1, + ), + controller = :Standard, step_limiter! = trivial_limiter! + ) where {MO} AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - QNDF{MO, _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return QNDF{ + MO, _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), - typeof(κ), typeof(tol), typeof(kappa), typeof(step_limiter!)}( + typeof(κ), typeof(tol), typeof(kappa), typeof(step_limiter!), + }( max_order, linsolve, nlsolve, precs, κ, tol, - extrapolant, kappa, controller, step_limiter!, AD_choice) + extrapolant, kappa, controller, step_limiter!, AD_choice + ) end @truncate_stacktrace QNDF -@doc BDF_docstring("The second order Modified Extended BDF method, +@doc BDF_docstring( + "The second order Modified Extended BDF method, which has improved stability properties over the standard BDF. Fixed timestep only.", "MEBDF2", @@ -466,9 +503,10 @@ end extra_keyword_default = """ nlsolve = NLNewton(), extrapolant = :constant, - """) + """ +) struct MEBDF2{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -479,16 +517,21 @@ function MEBDF2(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), - extrapolant = :constant) + extrapolant = :constant + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - MEBDF2{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return MEBDF2{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, + _unwrap_val(concrete_jac), + }( + linsolve, nlsolve, precs, extrapolant, - AD_choice) + AD_choice + ) end @doc BDF_docstring( @@ -518,9 +561,10 @@ Utilizes Shampine's accuracy-optimal kappa values as defaults (has a keyword arg controller = :Standard, step_limiter! = trivial_limiter!, max_order::Val{MO} = Val{5}(), - """) + """ +) struct FBDF{MO, CS, AD, F, F2, P, FDT, ST, CJ, K, T, StepLimiter} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} max_order::Val{MO} linsolve::F nlsolve::F2 @@ -533,20 +577,25 @@ struct FBDF{MO, CS, AD, F, F2, P, FDT, ST, CJ, K, T, StepLimiter} <: autodiff::AD end -function FBDF(; max_order::Val{MO} = Val{5}(), chunk_size = Val{0}(), +function FBDF(; + max_order::Val{MO} = Val{5}(), chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), κ = nothing, tol = nothing, - extrapolant = :linear, controller = :Standard, step_limiter! = trivial_limiter!) where {MO} + extrapolant = :linear, controller = :Standard, step_limiter! = trivial_limiter! + ) where {MO} AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - FBDF{MO, _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return FBDF{ + MO, _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), - typeof(κ), typeof(tol), typeof(step_limiter!)}( + typeof(κ), typeof(tol), typeof(step_limiter!), + }( max_order, linsolve, nlsolve, precs, κ, tol, extrapolant, - controller, step_limiter!, AD_choice) + controller, step_limiter!, AD_choice + ) end @truncate_stacktrace FBDF @@ -642,7 +691,8 @@ It uses an apriori error estimator for adaptivity based on a finite differencing nlsolve = NLNewton(), extrapolant = :constant, controller = :Standard, - """) + """ +) struct DImplicitEuler{CS, AD, F, F2, P, FDT, ST, CJ} <: DAEAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 @@ -656,13 +706,18 @@ function DImplicitEuler(; concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), extrapolant = :constant, - controller = :Standard) + controller = :Standard + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - DImplicitEuler{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return DImplicitEuler{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, - nlsolve, precs, extrapolant, controller, AD_choice) + _unwrap_val(concrete_jac), + }( + linsolve, + nlsolve, precs, extrapolant, controller, AD_choice + ) end @doc BDF_docstring( @@ -685,7 +740,8 @@ end nlsolve = NLNewton(), extrapolant = :constant, controller = :Standard, - """) + """ +) struct DABDF2{CS, AD, F, F2, P, FDT, ST, CJ} <: DAEAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 @@ -699,13 +755,18 @@ function DABDF2(; concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), extrapolant = :constant, - controller = :Standard) + controller = :Standard + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - DABDF2{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return DABDF2{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, - nlsolve, precs, extrapolant, controller, AD_choice) + _unwrap_val(concrete_jac), + }( + linsolve, + nlsolve, precs, extrapolant, controller, AD_choice + ) end #= @@ -746,7 +807,8 @@ DBDF(;chunk_size=Val{0}(),autodiff=Val{true}(), standardtag = Val{true}(), concr extrapolant = :linear, controller = :Standard, max_order::Val{MO} = Val{5}(), - """) + """ +) struct DFBDF{MO, CS, AD, F, F2, P, FDT, ST, CJ, K, T} <: DAEAlgorithm{CS, AD, FDT, ST, CJ} max_order::Val{MO} linsolve::F @@ -758,19 +820,25 @@ struct DFBDF{MO, CS, AD, F, F2, P, FDT, ST, CJ, K, T} <: DAEAlgorithm{CS, AD, FD controller::Symbol autodiff::AD end -function DFBDF(; max_order::Val{MO} = Val{5}(), chunk_size = Val{0}(), +function DFBDF(; + max_order::Val{MO} = Val{5}(), chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), κ = nothing, tol = nothing, - extrapolant = :linear, controller = :Standard) where {MO} + extrapolant = :linear, controller = :Standard + ) where {MO} AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - DFBDF{MO, _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return DFBDF{ + MO, _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), - typeof(κ), typeof(tol)}(max_order, linsolve, nlsolve, precs, κ, tol, extrapolant, - controller, AD_choice) + typeof(κ), typeof(tol), + }( + max_order, linsolve, nlsolve, precs, κ, tol, extrapolant, + controller, AD_choice + ) end @truncate_stacktrace DFBDF diff --git a/lib/OrdinaryDiffEqBDF/src/bdf_caches.jl b/lib/OrdinaryDiffEqBDF/src/bdf_caches.jl index 9917964992..760cc6d0f0 100644 --- a/lib/OrdinaryDiffEqBDF/src/bdf_caches.jl +++ b/lib/OrdinaryDiffEqBDF/src/bdf_caches.jl @@ -1,33 +1,37 @@ abstract type BDFMutableCache <: OrdinaryDiffEqMutableCache end function get_fsalfirstlast(cache::BDFMutableCache, u) - (cache.fsalfirst, du_alias_or_new(cache.nlsolver, cache.fsalfirst)) + return (cache.fsalfirst, du_alias_or_new(cache.nlsolver, cache.fsalfirst)) end @cache mutable struct ABDF2ConstantCache{N, dtType, rate_prototype} <: - OrdinaryDiffEqConstantCache + OrdinaryDiffEqConstantCache nlsolver::N eulercache::ImplicitEulerConstantCache dtₙ₋₁::dtType fsalfirstprev::rate_prototype end -function alg_cache(alg::ABDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ABDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = Int64(2) // 3, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) eulercache = ImplicitEulerConstantCache(nlsolver) dtₙ₋₁ = one(dt) fsalfirstprev = rate_prototype - ABDF2ConstantCache(nlsolver, eulercache, dtₙ₋₁, fsalfirstprev) + return ABDF2ConstantCache(nlsolver, eulercache, dtₙ₋₁, fsalfirstprev) end @cache mutable struct ABDF2Cache{uType, rateType, uNoUnitsType, N, dtType, StepLimiter} <: - BDFMutableCache + BDFMutableCache uₙ::uType uₙ₋₁::uType uₙ₋₂::uType @@ -41,29 +45,36 @@ end step_limiter!::StepLimiter end -function alg_cache(alg::ABDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ABDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = Int64(2) // 3, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) fsalfirstprev = zero(rate_prototype) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) algebraic_vars = f.mass_matrix === I ? nothing : - [all(iszero, x) for x in eachcol(f.mass_matrix)] + [all(iszero, x) for x in eachcol(f.mass_matrix)] eulercache = ImplicitEulerCache( - u, uprev, uprev2, fsalfirst, atmp, nlsolver, algebraic_vars, alg.step_limiter!) + u, uprev, uprev2, fsalfirst, atmp, nlsolver, algebraic_vars, alg.step_limiter! + ) dtₙ₋₁ = one(dt) zₙ₋₁ = zero(u) - ABDF2Cache(u, uprev, uprev2, fsalfirst, fsalfirstprev, zₙ₋₁, atmp, - nlsolver, eulercache, dtₙ₋₁, alg.step_limiter!) + return ABDF2Cache( + u, uprev, uprev2, fsalfirst, fsalfirstprev, zₙ₋₁, atmp, + nlsolver, eulercache, dtₙ₋₁, alg.step_limiter! + ) end # SBDF @@ -100,13 +111,17 @@ end du₂::rateType end -function alg_cache(alg::SBDF, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SBDF, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = Int64(1) // 1, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) k2 = rate_prototype k₁ = rate_prototype @@ -119,17 +134,23 @@ function alg_cache(alg::SBDF, u, rate_prototype, ::Type{uEltypeNoUnits}, uprev3 = u uprev4 = u - SBDFConstantCache(1, alg.ark, k2, nlsolver, uprev2, uprev3, uprev4, k₁, k₂, k₃, du₁, - du₂) + return SBDFConstantCache( + 1, alg.ark, k2, nlsolver, uprev2, uprev3, uprev4, k₁, k₂, k₃, du₁, + du₂ + ) end -function alg_cache(alg::SBDF, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SBDF, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = Int64(1) // 1, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) order = alg.order @@ -144,21 +165,22 @@ function alg_cache(alg::SBDF, u, rate_prototype, ::Type{uEltypeNoUnits}, uprev3 = order >= 3 ? zero(u) : uprev2 uprev4 = order == 4 ? zero(u) : uprev2 - SBDFCache( + return SBDFCache( 1, alg.ark, u, uprev, fsalfirst, nlsolver, uprev2, uprev3, uprev4, k₁, k₂, k₃, - du₁, du₂) + du₁, du₂ + ) end # QNDF1 @cache mutable struct QNDF1ConstantCache{ - N, - coefType, - coefType1, - coefType2, - dtType, - uType -} <: OrdinaryDiffEqConstantCache + N, + coefType, + coefType1, + coefType2, + dtType, + uType, + } <: OrdinaryDiffEqConstantCache nlsolver::N D::coefType1 D2::coefType2 @@ -168,8 +190,10 @@ end dtₙ₋₁::dtType end -@cache mutable struct QNDF1Cache{uType, rateType, coefType, coefType1, coefType2, - uNoUnitsType, N, dtType, StepLimiter} <: BDFMutableCache +@cache mutable struct QNDF1Cache{ + uType, rateType, coefType, coefType1, coefType2, + uNoUnitsType, N, dtType, StepLimiter, + } <: BDFMutableCache uprev2::uType fsalfirst::rateType D::coefType1 @@ -183,13 +207,17 @@ end step_limiter!::StepLimiter end -function alg_cache(alg::QNDF1, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::QNDF1, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = zero(inv((1 - alg.kappa))), 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) uprev2 = u dtₙ₋₁ = zero(t) @@ -201,16 +229,20 @@ function alg_cache(alg::QNDF1, u, rate_prototype, ::Type{uEltypeNoUnits}, U!(1, U) - QNDF1ConstantCache(nlsolver, D, D2, R, U, uprev2, dtₙ₋₁) + return QNDF1ConstantCache(nlsolver, D, D2, R, U, uprev2, dtₙ₋₁) end -function alg_cache(alg::QNDF1, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::QNDF1, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = zero(inv((1 - alg.kappa))), 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) D = Array{typeof(u)}(undef, 1, 1) @@ -231,20 +263,21 @@ function alg_cache(alg::QNDF1, u, rate_prototype, ::Type{uEltypeNoUnits}, uprev2 = zero(u) dtₙ₋₁ = zero(dt) - QNDF1Cache( - uprev2, fsalfirst, D, D2, R, U, atmp, utilde, nlsolver, dtₙ₋₁, alg.step_limiter!) + return QNDF1Cache( + uprev2, fsalfirst, D, D2, R, U, atmp, utilde, nlsolver, dtₙ₋₁, alg.step_limiter! + ) end # QNDF2 @cache mutable struct QNDF2ConstantCache{ - N, - coefType, - coefType1, - coefType2, - uType, - dtType -} <: OrdinaryDiffEqConstantCache + N, + coefType, + coefType1, + coefType2, + uType, + dtType, + } <: OrdinaryDiffEqConstantCache nlsolver::N D::coefType1 D2::coefType2 @@ -256,8 +289,10 @@ end dtₙ₋₂::dtType end -@cache mutable struct QNDF2Cache{uType, rateType, coefType, coefType1, coefType2, - uNoUnitsType, N, dtType, StepLimiter} <: BDFMutableCache +@cache mutable struct QNDF2Cache{ + uType, rateType, coefType, coefType1, coefType2, + uNoUnitsType, N, dtType, StepLimiter, + } <: BDFMutableCache uprev2::uType uprev3::uType fsalfirst::rateType @@ -273,13 +308,17 @@ end step_limiter!::StepLimiter end -function alg_cache(alg::QNDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::QNDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = zero(inv((1 - alg.kappa))), 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) uprev2 = u uprev3 = u @@ -293,16 +332,20 @@ function alg_cache(alg::QNDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, U!(2, U) - QNDF2ConstantCache(nlsolver, D, D2, R, U, uprev2, uprev3, dtₙ₋₁, dtₙ₋₂) + return QNDF2ConstantCache(nlsolver, D, D2, R, U, uprev2, uprev3, dtₙ₋₁, dtₙ₋₂) end -function alg_cache(alg::QNDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::QNDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = zero(inv((1 - alg.kappa))), 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) D = Array{typeof(u)}(undef, 1, 2) @@ -326,19 +369,21 @@ function alg_cache(alg::QNDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, dtₙ₋₁ = zero(dt) dtₙ₋₂ = zero(dt) - QNDF2Cache(uprev2, uprev3, fsalfirst, D, D2, R, U, atmp, - utilde, nlsolver, dtₙ₋₁, dtₙ₋₂, alg.step_limiter!) + return QNDF2Cache( + uprev2, uprev3, fsalfirst, D, D2, R, U, atmp, + utilde, nlsolver, dtₙ₋₁, dtₙ₋₂, alg.step_limiter! + ) end @cache mutable struct QNDFConstantCache{ - MO, - N, - coefType, - UType, - dtType, - EEstType, - gammaType -} <: OrdinaryDiffEqConstantCache + MO, + N, + coefType, + UType, + dtType, + EEstType, + gammaType, + } <: OrdinaryDiffEqConstantCache nlsolver::N U::UType D::coefType @@ -354,15 +399,20 @@ end γₖ::gammaType end -function alg_cache(alg::QNDF{MO}, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::QNDF{MO}, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits -} where {MO} + ::Val{false} + ) where { + uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits, + } where {MO} max_order = MO - γ, c = Int64(1)//1, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) + γ, c = Int64(1) // 1, 1 + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) dtprev = one(dt) D = Matrix{uEltypeNoUnits}(undef, length(u), max_order + 2) recursivefill!(D, zero(uEltypeNoUnits)) @@ -382,13 +432,17 @@ function alg_cache(alg::QNDF{MO}, u, rate_prototype, ::Type{uEltypeNoUnits}, γₖ = SVector(ntuple(k -> sum(tTypeNoUnits(Int64(1) // j) for j in 1:k), Val(max_order))) - QNDFConstantCache(nlsolver, U, D, prevD, 1, 1, Val(max_order), dtprev, 0, 0, EEst1, - EEst2, γₖ) + return QNDFConstantCache( + nlsolver, U, D, prevD, 1, 1, Val(max_order), dtprev, 0, 0, EEst1, + EEst2, γₖ + ) end -@cache mutable struct QNDFCache{MO, UType, RUType, rateType, N, coefType, dtType, EEstType, - gammaType, uType, uNoUnitsType, StepLimiter} <: - BDFMutableCache +@cache mutable struct QNDFCache{ + MO, UType, RUType, rateType, N, coefType, dtType, EEstType, + gammaType, uType, uNoUnitsType, StepLimiter, + } <: + BDFMutableCache fsalfirst::rateType dd::uType utilde::uType @@ -420,15 +474,20 @@ end @truncate_stacktrace QNDFCache 1 -function alg_cache(alg::QNDF{MO}, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::QNDF{MO}, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits -} where {MO} + ::Val{true} + ) where { + uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits, + } where {MO} max_order = MO - γ, c = Int64(1)//1, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + γ, c = Int64(1) // 1, 1 + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) dd = zero(u) utilde = zero(u) @@ -461,13 +520,15 @@ function alg_cache(alg::QNDF{MO}, u, rate_prototype, ::Type{uEltypeNoUnits}, RU = Matrix(U) γₖ = SVector(ntuple(k -> sum(tTypeNoUnits(Int64(1) // j) for j in 1:k), Val(max_order))) - QNDFCache(fsalfirst, dd, utilde, utildem1, utildep1, ϕ, u₀, nlsolver, U, RU, D, Dtmp, + return QNDFCache( + fsalfirst, dd, utilde, utildem1, utildep1, ϕ, u₀, nlsolver, U, RU, D, Dtmp, tmp2, prevD, 1, 1, Val(max_order), dtprev, 0, 0, EEst1, EEst2, γₖ, atmp, - atmpm1, atmpp1, alg.step_limiter!) + atmpm1, atmpp1, alg.step_limiter! + ) end @cache mutable struct MEBDF2Cache{uType, rateType, uNoUnitsType, N} <: - BDFMutableCache + BDFMutableCache u::uType uprev::uType uprev2::uType @@ -479,13 +540,17 @@ end nlsolver::N end -function alg_cache(alg::MEBDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MEBDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) z₁ = zero(u) @@ -495,26 +560,32 @@ function alg_cache(alg::MEBDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - MEBDF2Cache(u, uprev, uprev2, fsalfirst, z₁, z₂, tmp2, atmp, nlsolver) + return MEBDF2Cache(u, uprev, uprev2, fsalfirst, z₁, z₂, tmp2, atmp, nlsolver) end mutable struct MEBDF2ConstantCache{N} <: OrdinaryDiffEqConstantCache nlsolver::N end -function alg_cache(alg::MEBDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MEBDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - MEBDF2ConstantCache(nlsolver) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return MEBDF2ConstantCache(nlsolver) end -@cache mutable struct FBDFConstantCache{MO, N, tsType, tType, uType, uuType, coeffType, - EEstType, rType, wType} <: - OrdinaryDiffEqConstantCache +@cache mutable struct FBDFConstantCache{ + MO, N, tsType, tType, uType, uuType, coeffType, + EEstType, rType, wType, + } <: + OrdinaryDiffEqConstantCache nlsolver::N ts::tsType ts_tmp::tsType @@ -536,20 +607,27 @@ end iters_from_event::Int end -function alg_cache(alg::FBDF{MO}, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::FBDF{MO}, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits -} where {MO} - γ, c = Int64(1)//1, 1 + ::Val{false} + ) where { + uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits, + } where {MO} + γ, c = Int64(1) // 1, 1 max_order = MO - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - bdf_coeffs = SA[1 -1 0 0 0 0; - Int64(3)//2 -2 Int64(1)//2 0 0 0; - Int64(11)//6 -3 Int64(3)//2 -Int64(1)//3 0 0; - Int64(25)//12 -4 3 -Int64(4)//3 Int64(1)//4 0; - Int64(137)//60 -5 5 -Int64(10)//3 Int64(5)//4 -Int64(1)//5] + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + bdf_coeffs = SA[ + 1 -1 0 0 0 0; + Int64(3) // 2 -2 Int64(1) // 2 0 0 0; + Int64(11) // 6 -3 Int64(3) // 2 -Int64(1) // 3 0 0; + Int64(25) // 12 -4 3 -Int64(4) // 3 Int64(1) // 4 0; + Int64(137) // 60 -5 5 -Int64(10) // 3 Int64(5) // 4 -Int64(1) // 5 + ] ts = zero(Vector{typeof(t)}(undef, max_order + 2)) #ts is the successful past points, it will be updated after successful step ts_tmp = similar(ts) @@ -571,15 +649,18 @@ function alg_cache(alg::FBDF{MO}, u, rate_prototype, ::Type{uEltypeNoUnits}, t_old = zero(t) iters_from_event = 0 - FBDFConstantCache(nlsolver, ts, ts_tmp, t_old, u_history, order, prev_order, + return FBDFConstantCache( + nlsolver, ts, ts_tmp, t_old, u_history, order, prev_order, u_corrector, bdf_coeffs, Val(5), nconsteps, consfailcnt, terkm2, - terkm1, terk, terkp1, r, weights, iters_from_event) + terkm1, terk, terkp1, r, weights, iters_from_event + ) end @cache mutable struct FBDFCache{ - MO, N, rateType, uNoUnitsType, tsType, tType, uType, uuType, - coeffType, EEstType, rType, wType, StepLimiter} <: - BDFMutableCache + MO, N, rateType, uNoUnitsType, tsType, tType, uType, uuType, + coeffType, EEstType, rType, wType, StepLimiter, + } <: + BDFMutableCache fsalfirst::rateType nlsolver::N ts::tsType @@ -611,21 +692,29 @@ end @truncate_stacktrace FBDFCache 1 -function alg_cache(alg::FBDF{MO}, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::FBDF{MO}, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {MO, uEltypeNoUnits, uBottomEltypeNoUnits, - tTypeNoUnits} - γ, c = Int64(1)//1, 1 + ::Val{true} + ) where { + MO, uEltypeNoUnits, uBottomEltypeNoUnits, + tTypeNoUnits, + } + γ, c = Int64(1) // 1, 1 fsalfirst = zero(rate_prototype) max_order = MO - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) - bdf_coeffs = SA[1 -1 0 0 0 0; - Int64(3)//2 -2 Int64(1)//2 0 0 0; - Int64(11)//6 -3 Int64(3)//2 -Int64(1)//3 0 0; - Int64(25)//12 -4 3 -Int64(4)//3 Int64(1)//4 0; - Int64(137)//60 -5 5 -Int64(10)//3 Int64(5)//4 -Int64(1)//5] + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) + bdf_coeffs = SA[ + 1 -1 0 0 0 0; + Int64(3) // 2 -2 Int64(1) // 2 0 0 0; + Int64(11) // 6 -3 Int64(3) // 2 -Int64(1) // 3 0 0; + Int64(25) // 12 -4 3 -Int64(4) // 3 Int64(1) // 4 0; + Int64(137) // 60 -5 5 -Int64(10) // 3 Int64(5) // 4 -Int64(1) // 5 + ] ts = Vector{typeof(t)}(undef, max_order + 2) #ts is the successful past points, it will be updated after successful step u_history = Matrix{eltype(u)}(undef, length(u), max_order + 2) order = 1 @@ -656,8 +745,10 @@ function alg_cache(alg::FBDF{MO}, u, rate_prototype, ::Type{uEltypeNoUnits}, ts_tmp = similar(ts) iters_from_event = 0 - FBDFCache(fsalfirst, nlsolver, ts, ts_tmp, t_old, u_history, order, prev_order, + return FBDFCache( + fsalfirst, nlsolver, ts, ts_tmp, t_old, u_history, order, prev_order, u_corrector, u₀, bdf_coeffs, Val(5), nconsteps, consfailcnt, tmp, atmp, terkm2, terkm1, terk, terkp1, terk_tmp, terkp1_tmp, r, weights, equi_ts, - iters_from_event, alg.step_limiter!) + iters_from_event, alg.step_limiter! + ) end diff --git a/lib/OrdinaryDiffEqBDF/src/bdf_perform_step.jl b/lib/OrdinaryDiffEqBDF/src/bdf_perform_step.jl index e56b0de412..b8c785037c 100644 --- a/lib/OrdinaryDiffEqBDF/src/bdf_perform_step.jl +++ b/lib/OrdinaryDiffEqBDF/src/bdf_perform_step.jl @@ -7,7 +7,7 @@ function initialize!(integrator, cache::ABDF2ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::ABDF2ConstantCache, repeat_step = false) @@ -38,7 +38,7 @@ end # initial guess if alg.extrapolant == :linear - u = @.. broadcast=false uₙ₋₁+dtₙ * fₙ₋₁ + u = @.. broadcast = false uₙ₋₁ + dtₙ * fₙ₋₁ else # :constant u = uₙ₋₁ end @@ -47,8 +47,10 @@ end mass_matrix = f.mass_matrix if mass_matrix === I - nlsolver.tmp = @.. ((dtₙ * β₁) * fₙ₋₁ + - (α₁ * uₙ₋₁ + α₂ * uₙ₋₂)) / (dtₙ * β₀) + nlsolver.tmp = @.. ( + (dtₙ * β₁) * fₙ₋₁ + + (α₁ * uₙ₋₁ + α₂ * uₙ₋₂) + ) / (dtₙ * β₀) else _tmp = mass_matrix * @.. (α₁ * uₙ₋₁ + α₂ * uₙ₋₂) nlsolver.tmp = @.. ((dtₙ * β₁) * fₙ₋₁ + _tmp) / (dtₙ * β₀) @@ -64,10 +66,12 @@ end if integrator.opts.adaptive tmp = integrator.fsallast - (1 + dtₙ / dtₙ₋₁) * integrator.fsalfirst + - (dtₙ / dtₙ₋₁) * cache.fsalfirstprev + (dtₙ / dtₙ₋₁) * cache.fsalfirstprev est = (dtₙ₋₁ + dtₙ) / 6 * tmp - atmp = calculate_residuals(est, uₙ₋₁, uₙ, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + est, uₙ₋₁, uₙ, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -91,7 +95,7 @@ function initialize!(integrator, cache::ABDF2Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::ABDF2Cache, repeat_step = false) @@ -124,20 +128,20 @@ end # initial guess if alg.extrapolant == :linear - @.. broadcast=false z=uₙ₋₁+dtₙ*fₙ₋₁ + @.. broadcast = false z = uₙ₋₁ + dtₙ * fₙ₋₁ else # :constant - @.. broadcast=false z=uₙ₋₁ + @.. broadcast = false z = uₙ₋₁ end mass_matrix = f.mass_matrix if mass_matrix === I - @.. broadcast=false tmp=((dtₙ*β₁)*fₙ₋₁+(α₁*uₙ₋₁+α₂*uₙ₋₂))/(dtₙ*β₀) + @.. broadcast = false tmp = ((dtₙ * β₁) * fₙ₋₁ + (α₁ * uₙ₋₁ + α₂ * uₙ₋₂)) / (dtₙ * β₀) else dz = nlsolver.cache.dz - @.. broadcast=false dz=α₁*uₙ₋₁+α₂*uₙ₋₂ + @.. broadcast = false dz = α₁ * uₙ₋₁ + α₂ * uₙ₋₂ mul!(ztmp, mass_matrix, dz) - @.. broadcast=false tmp=((dtₙ*β₁)*fₙ₋₁+ztmp)/(dtₙ*β₀) + @.. broadcast = false tmp = ((dtₙ * β₁) * fₙ₋₁ + ztmp) / (dtₙ * β₀) end nlsolver.γ = β₀ nlsolver.α = α₀ @@ -145,7 +149,7 @@ end z = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false uₙ=z + @.. broadcast = false uₙ = z step_limiter!(uₙ, integrator, p, t + dtₙ) @@ -155,18 +159,22 @@ end btilde0 = (dtₙ₋₁ + dtₙ) * Int64(1) // 6 btilde1 = 1 + dtₙ / dtₙ₋₁ btilde2 = dtₙ / dtₙ₋₁ - @.. broadcast=false tmp=btilde0* - (integrator.fsallast-btilde1*integrator.fsalfirst+ - btilde2*cache.fsalfirstprev) - calculate_residuals!(atmp, tmp, uₙ₋₁, uₙ, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false tmp = btilde0 * + ( + integrator.fsallast - btilde1 * integrator.fsalfirst + + btilde2 * cache.fsalfirstprev + ) + calculate_residuals!( + atmp, tmp, uₙ₋₁, uₙ, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end ################################### Finalize if integrator.EEst < one(integrator.EEst) - @.. broadcast=false cache.fsalfirstprev=integrator.fsalfirst + @.. broadcast = false cache.fsalfirstprev = integrator.fsalfirst cache.dtₙ₋₁ = dtₙ end return @@ -188,7 +196,7 @@ function initialize!(integrator, cache::SBDFConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end function perform_step!(integrator, cache::SBDFConstantCache, repeat_step = false) @@ -210,10 +218,12 @@ function perform_step!(integrator, cache::SBDFConstantCache, repeat_step = false tmp = γ * (2 * uprev - Int64(1) // 2 * uprev2 + dt * (2 * du₂ - k₁)) elseif cnt == 3 tmp = γ * - (3 * uprev - Int64(3) // 2 * uprev2 + Int64(1) // 3 * uprev3 + dt * (3 * (du₂ - k₁) + k₂)) + (3 * uprev - Int64(3) // 2 * uprev2 + Int64(1) // 3 * uprev3 + dt * (3 * (du₂ - k₁) + k₂)) else - tmp = γ * (4 * uprev - 3 * uprev2 + Int64(4) // 3 * uprev3 - Int64(1) // 4 * uprev4 + - dt * (4 * du₂ - 6 * k₁ + 4 * k₂ - k₃)) + tmp = γ * ( + 4 * uprev - 3 * uprev2 + Int64(4) // 3 * uprev3 - Int64(1) // 4 * uprev4 + + dt * (4 * du₂ - 6 * k₁ + 4 * k₂ - k₃) + ) end nlsolver.tmp = tmp @@ -234,12 +244,18 @@ function perform_step!(integrator, cache::SBDFConstantCache, repeat_step = false nlsolvefail(nlsolver) && return u = nlsolver.tmp + γ * z - cnt == 4 && (cache.uprev4 = uprev3; - cache.k₃ = k₂) - cnt >= 3 && (cache.uprev3 = uprev2; - cache.k₂ = k₁) - (cache.uprev2 = uprev; - cache.k₁ = du₂) + cnt == 4 && ( + cache.uprev4 = uprev3; + cache.k₃ = k₂ + ) + cnt >= 3 && ( + cache.uprev3 = uprev2; + cache.k₂ = k₁ + ) + ( + cache.uprev2 = uprev; + cache.k₁ = du₂ + ) cache.du₁ = f1(u, p, t + dt) cache.du₂ = f2(u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) @@ -247,7 +263,7 @@ function perform_step!(integrator, cache::SBDFConstantCache, repeat_step = false integrator.fsallast = cache.du₁ + cache.du₂ integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function initialize!(integrator, cache::SBDFCache) @@ -262,7 +278,7 @@ function initialize!(integrator, cache::SBDFCache) f2(cache.du₂, uprev, p, t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.stats.nf2 += 1 - @.. broadcast=false integrator.fsalfirst=cache.du₁+cache.du₂ + return @.. broadcast = false integrator.fsalfirst = cache.du₁ + cache.du₂ end function perform_step!(integrator, cache::SBDFCache, repeat_step = false) @@ -281,15 +297,19 @@ function perform_step!(integrator, cache::SBDFCache, repeat_step = false) integrator.stats.nf2 += 1 end if cnt == 1 - @.. broadcast=false tmp=uprev+dt*du₂ + @.. broadcast = false tmp = uprev + dt * du₂ elseif cnt == 2 - @.. broadcast=false tmp=γ*(2*uprev-1//2*uprev2+dt*(2*du₂-k₁)) + @.. broadcast = false tmp = γ * (2 * uprev - 1 // 2 * uprev2 + dt * (2 * du₂ - k₁)) elseif cnt == 3 - @.. broadcast=false tmp=γ*(3*uprev-3//2*uprev2+1//3*uprev3+ - dt*(3*(du₂-k₁)+k₂)) + @.. broadcast = false tmp = γ * ( + 3 * uprev - 3 // 2 * uprev2 + 1 // 3 * uprev3 + + dt * (3 * (du₂ - k₁) + k₂) + ) else - @.. broadcast=false tmp=γ*(4*uprev-3*uprev2+4//3*uprev3- - 1//4*uprev4+dt*(4*du₂-6*k₁+4*k₂-k₃)) + @.. broadcast = false tmp = γ * ( + 4 * uprev - 3 * uprev2 + 4 // 3 * uprev3 - + 1 // 4 * uprev4 + dt * (4 * du₂ - 6 * k₁ + 4 * k₂ - k₃) + ) end # Implicit part # precalculations @@ -298,26 +318,32 @@ function perform_step!(integrator, cache::SBDFCache, repeat_step = false) # initial guess if alg.extrapolant == :linear - @.. broadcast=false z=dt*du₁ + @.. broadcast = false z = dt * du₁ else # :constant - @.. broadcast=false z=zero(eltype(u)) + @.. broadcast = false z = zero(eltype(u)) end z = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp+γ*z - - cnt == 4 && (cache.uprev4 .= uprev3; - cache.k₃ .= k₂) - cnt >= 3 && (cache.uprev3 .= uprev2; - cache.k₂ .= k₁) - (cache.uprev2 .= uprev; - cache.k₁ .= du₂) + @.. broadcast = false u = tmp + γ * z + + cnt == 4 && ( + cache.uprev4 .= uprev3; + cache.k₃ .= k₂ + ) + cnt >= 3 && ( + cache.uprev3 .= uprev2; + cache.k₂ .= k₁ + ) + ( + cache.uprev2 .= uprev; + cache.k₁ .= du₂ + ) f1(du₁, u, p, t + dt) f2(du₂, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.stats.nf2 += 1 - @.. broadcast=false integrator.fsallast=du₁+du₂ + return @.. broadcast = false integrator.fsallast = du₁ + du₂ end # QNDF1 @@ -331,7 +357,7 @@ function initialize!(integrator, cache::QNDF1ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end function perform_step!(integrator, cache::QNDF1ConstantCache, repeat_step = false) @@ -369,10 +395,10 @@ function perform_step!(integrator, cache::QNDF1ConstantCache, repeat_step = fals mass_matrix = f.mass_matrix if mass_matrix === I - nlsolver.tmp = @.. broadcast=false (α₁ * uprev + α₂ * uprev2)/(dt * β₀) + nlsolver.tmp = @.. broadcast = false (α₁ * uprev + α₂ * uprev2) / (dt * β₀) else - _tmp = mass_matrix * @.. broadcast=false (α₁ * uprev+α₂ * uprev2) - nlsolver.tmp = @.. broadcast=false _tmp/(dt * β₀) + _tmp = mass_matrix * @.. broadcast = false (α₁ * uprev + α₂ * uprev2) + nlsolver.tmp = @.. broadcast = false _tmp / (dt * β₀) end nlsolver.γ = β₀ @@ -389,9 +415,11 @@ function perform_step!(integrator, cache::QNDF1ConstantCache, repeat_step = fals D2[1] = u - uprev D2[2] = D2[1] - D[1] utilde = (κ + inv(k + 1)) * D2[2] - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -415,7 +443,7 @@ function initialize!(integrator, cache::QNDF1Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::QNDF1Cache, repeat_step = false) @@ -428,11 +456,11 @@ function perform_step!(integrator, cache::QNDF1Cache, repeat_step = false) k = 1 if cnt > 1 ρ = dt / dtₙ₋₁ - @.. broadcast=false D[1]=uprev-uprev2 # backward diff + @.. broadcast = false D[1] = uprev - uprev2 # backward diff if ρ != 1 R!(k, ρ, cache) R .= R * U - @.. broadcast=false D[1]=D[1]*R[1, 1] + @.. broadcast = false D[1] = D[1] * R[1, 1] end else κ = zero(alg.kappa) @@ -454,12 +482,12 @@ function perform_step!(integrator, cache::QNDF1Cache, repeat_step = false) mass_matrix = f.mass_matrix if mass_matrix === I - @.. broadcast=false tmp=(α₁*uprev+α₂*uprev2)/(dt*β₀) + @.. broadcast = false tmp = (α₁ * uprev + α₂ * uprev2) / (dt * β₀) else dz = nlsolver.cache.dz - @.. broadcast=false dz=α₁*uprev+α₂*uprev2 + @.. broadcast = false dz = α₁ * uprev + α₂ * uprev2 mul!(ztmp, mass_matrix, dz) - @.. broadcast=false tmp=ztmp/(dt*β₀) + @.. broadcast = false tmp = ztmp / (dt * β₀) end nlsolver.γ = β₀ @@ -467,7 +495,7 @@ function perform_step!(integrator, cache::QNDF1Cache, repeat_step = false) nlsolver.method = COEFFICIENT_MULTISTEP z = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=z + @.. broadcast = false u = z step_limiter!(u, integrator, p, t + dt) @@ -475,11 +503,13 @@ function perform_step!(integrator, cache::QNDF1Cache, repeat_step = false) if integrator.success_iter == 0 integrator.EEst = one(integrator.EEst) else - @.. broadcast=false D2[1]=u-uprev - @.. broadcast=false D2[2]=D2[1]-D[1] - @.. broadcast=false utilde=(κ+inv(k+1))*D2[2] - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false D2[1] = u - uprev + @.. broadcast = false D2[2] = D2[1] - D[1] + @.. broadcast = false utilde = (κ + inv(k + 1)) * D2[2] + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -502,7 +532,7 @@ function initialize!(integrator, cache::QNDF2ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end function perform_step!(integrator, cache::QNDF2ConstantCache, repeat_step = false) @@ -554,10 +584,10 @@ function perform_step!(integrator, cache::QNDF2ConstantCache, repeat_step = fals mass_matrix = f.mass_matrix if mass_matrix === I - nlsolver.tmp = @.. broadcast=false (u₀ - ϕ)/(dt * β₀) + nlsolver.tmp = @.. broadcast = false (u₀ - ϕ) / (dt * β₀) else - _tmp = mass_matrix * @.. broadcast=false (u₀-ϕ) - nlsolver.tmp = @.. broadcast=false _tmp/(dt * β₀) + _tmp = mass_matrix * @.. broadcast = false (u₀ - ϕ) + nlsolver.tmp = @.. broadcast = false _tmp / (dt * β₀) end nlsolver.γ = β₀ @@ -572,18 +602,22 @@ function perform_step!(integrator, cache::QNDF2ConstantCache, repeat_step = fals integrator.EEst = one(integrator.EEst) elseif integrator.success_iter == 1 utilde = (u - uprev) - ((uprev - uprev2) * dt / dtₙ₋₁) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) else D2[1] = u - uprev D2[2] = D2[1] - D[1] D2[3] = D2[2] - D[2] utilde = (κ * γ₂ + inv(k + 1)) * D2[3] - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -610,13 +644,15 @@ function initialize!(integrator, cache::QNDF2Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::QNDF2Cache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator - (; uprev2, uprev3, dtₙ₋₁, dtₙ₋₂, D, D2, R, U, utilde, atmp, nlsolver, - step_limiter!) = cache + (; + uprev2, uprev3, dtₙ₋₁, dtₙ₋₂, D, D2, R, U, utilde, atmp, nlsolver, + step_limiter!, + ) = cache (; z, tmp, ztmp) = nlsolver alg = unwrap_alg(integrator, true) cnt = integrator.iter @@ -631,22 +667,22 @@ function perform_step!(integrator, cache::QNDF2Cache, repeat_step = false) γ₂ = Int64(1) // 1 + Int64(1) // 2 ρ₁ = dt / dtₙ₋₁ ρ₂ = dt / dtₙ₋₂ - @.. broadcast=false D[1]=uprev-uprev2 - @.. broadcast=false D[1]=D[1]*ρ₁ - @.. broadcast=false D[2]=D[1]-((uprev2-uprev3)*ρ₂) + @.. broadcast = false D[1] = uprev - uprev2 + @.. broadcast = false D[1] = D[1] * ρ₁ + @.. broadcast = false D[2] = D[1] - ((uprev2 - uprev3) * ρ₂) else κ = alg.kappa γ₁ = Int64(1) // 1 γ₂ = Int64(1) // 1 + Int64(1) // 2 ρ = dt / dtₙ₋₁ # backward diff - @.. broadcast=false D[1]=uprev-uprev2 - @.. broadcast=false D[2]=D[1]-(uprev2-uprev3) + @.. broadcast = false D[1] = uprev - uprev2 + @.. broadcast = false D[2] = D[1] - (uprev2 - uprev3) if ρ != 1 R!(k, ρ, cache) R .= R * U - @.. broadcast=false D[1]=D[1]*R[1, 1]+D[2]*R[2, 1] - @.. broadcast=false D[2]=D[1]*R[1, 2]+D[2]*R[2, 2] + @.. broadcast = false D[1] = D[1] * R[1, 1] + D[2] * R[2, 1] + @.. broadcast = false D[2] = D[1] * R[1, 2] + D[2] * R[2, 2] end end @@ -664,12 +700,12 @@ function perform_step!(integrator, cache::QNDF2Cache, repeat_step = false) mass_matrix = f.mass_matrix if mass_matrix === I - @.. broadcast=false tmp=(u₀-ϕ)/(dt*β₀) + @.. broadcast = false tmp = (u₀ - ϕ) / (dt * β₀) else dz = nlsolver.cache.dz - @.. broadcast=false dz=u₀-ϕ + @.. broadcast = false dz = u₀ - ϕ mul!(ztmp, mass_matrix, dz) - @.. broadcast=false tmp=ztmp/(dt*β₀) + @.. broadcast = false tmp = ztmp / (dt * β₀) end nlsolver.γ = β₀ @@ -678,7 +714,7 @@ function perform_step!(integrator, cache::QNDF2Cache, repeat_step = false) z = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=z + @.. broadcast = false u = z step_limiter!(u, integrator, p, t + dt) @@ -686,17 +722,21 @@ function perform_step!(integrator, cache::QNDF2Cache, repeat_step = false) if integrator.success_iter == 0 integrator.EEst = one(integrator.EEst) elseif integrator.success_iter == 1 - @.. broadcast=false utilde=(u-uprev)-((uprev-uprev2)*dt/dtₙ₋₁) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false utilde = (u - uprev) - ((uprev - uprev2) * dt / dtₙ₋₁) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) else - @.. broadcast=false D2[1]=u-uprev - @.. broadcast=false D2[2]=D2[1]-D[1] - @.. broadcast=false D2[3]=D2[2]-D[2] - @.. broadcast=false utilde=(κ*γ₂+inv(k+1))*D2[3] - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false D2[1] = u - uprev + @.. broadcast = false D2[2] = D2[1] - D[1] + @.. broadcast = false D2[3] = D2[2] - D[2] + @.. broadcast = false utilde = (κ * γ₂ + inv(k + 1)) * D2[3] + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -722,11 +762,13 @@ function initialize!(integrator, cache::QNDFConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -function perform_step!(integrator, cache::QNDFConstantCache{max_order}, - repeat_step = false) where {max_order} +function perform_step!( + integrator, cache::QNDFConstantCache{max_order}, + repeat_step = false + ) where {max_order} (; t, dt, uprev, u, f, p) = integrator (; dtprev, order, D, U, nlsolver, γₖ) = cache alg = unwrap_alg(integrator, true) @@ -797,21 +839,27 @@ function perform_step!(integrator, cache::QNDFConstantCache{max_order}, if cache.consfailcnt > 1 && mass_matrix !== I # if we get repeated failure and mass_matrix !== I it's likely that # there's a discontinuity on the algebraic equations - atmp = calculate_residuals(mass_matrix * dd, uprev, u, abstol, reltol, - internalnorm, t) + atmp = calculate_residuals( + mass_matrix * dd, uprev, u, abstol, reltol, + internalnorm, t + ) else atmp = calculate_residuals(dd, uprev, u, abstol, reltol, internalnorm, t) end integrator.EEst = error_constant(integrator, k) * internalnorm(atmp, t) if k > 1 - @views atmpm1 = calculate_residuals(_reshape(view(D, :, k), axes(u)), + @views atmpm1 = calculate_residuals( + _reshape(view(D, :, k), axes(u)), uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + integrator.opts.reltol, integrator.opts.internalnorm, t + ) cache.EEst1 = error_constant(integrator, k - 1) * internalnorm(atmpm1, t) end if k < max_order - @views atmpp1 = calculate_residuals(_reshape(view(D, :, k + 2), axes(u)), - uprev, u, abstol, reltol, internalnorm, t) + @views atmpp1 = calculate_residuals( + _reshape(view(D, :, k + 2), axes(u)), + uprev, u, abstol, reltol, internalnorm, t + ) cache.EEst2 = error_constant(integrator, k + 1) * internalnorm(atmpp1, t) end end @@ -826,7 +874,7 @@ function perform_step!(integrator, cache::QNDFConstantCache{max_order}, end integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function initialize!(integrator, cache::QNDFCache) @@ -836,14 +884,18 @@ function initialize!(integrator, cache::QNDFCache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end -function perform_step!(integrator, cache::QNDFCache{max_order}, - repeat_step = false) where {max_order} +function perform_step!( + integrator, cache::QNDFCache{max_order}, + repeat_step = false + ) where {max_order} (; t, dt, uprev, u, f, p) = integrator - (; dtprev, order, D, nlsolver, γₖ, dd, atmp, atmpm1, atmpp1, - utilde, utildem1, utildep1, ϕ, u₀, step_limiter!) = cache + (; + dtprev, order, D, nlsolver, γₖ, dd, atmp, atmpm1, atmpp1, + utilde, utildem1, utildep1, ϕ, u₀, step_limiter!, + ) = cache alg = unwrap_alg(integrator, true) if integrator.u_modified @@ -886,20 +938,20 @@ function perform_step!(integrator, cache::QNDFCache{max_order}, end u₀[i] = s + uprev[i] end - @.. broadcast=false ϕ=zero(u) + @.. broadcast = false ϕ = zero(u) vecϕ = _vec(ϕ) for i in 1:k - @views @.. broadcast=false vecϕ+=γₖ[i] * D[:, i] + @views @.. broadcast = false vecϕ += γₖ[i] * D[:, i] end markfirststage!(nlsolver) - @.. broadcast=false nlsolver.z=u₀ + @.. broadcast = false nlsolver.z = u₀ mass_matrix = f.mass_matrix if mass_matrix === I - @.. broadcast=false nlsolver.tmp=(u₀/β₀-ϕ)/dt + @.. broadcast = false nlsolver.tmp = (u₀ / β₀ - ϕ) / dt else (; tmp2) = cache - @.. broadcast=false tmp2=(u₀/β₀-ϕ)/dt + @.. broadcast = false tmp2 = (u₀ / β₀ - ϕ) / dt mul!(nlsolver.tmp, mass_matrix, tmp2) end @@ -909,8 +961,8 @@ function perform_step!(integrator, cache::QNDFCache{max_order}, z = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=z - @.. broadcast=false dd=u-u₀ + @.. broadcast = false u = z + @.. broadcast = false dd = u - u₀ update_D!(D, dd, k) step_limiter!(u, integrator, p, t + dt) @@ -920,8 +972,10 @@ function perform_step!(integrator, cache::QNDFCache{max_order}, if cache.consfailcnt > 1 && mass_matrix !== I # if we get repeated failure and mass_matrix !== I it's likely that # there's a discontinuity on the algebraic equations - calculate_residuals!(atmp, mul!(nlsolver.tmp, mass_matrix, dd), uprev, u, - abstol, reltol, internalnorm, t) + calculate_residuals!( + atmp, mul!(nlsolver.tmp, mass_matrix, dd), uprev, u, + abstol, reltol, internalnorm, t + ) else calculate_residuals!(atmp, dd, uprev, u, abstol, reltol, internalnorm, t) end @@ -929,13 +983,15 @@ function perform_step!(integrator, cache::QNDFCache{max_order}, if k > 1 @views calculate_residuals!( atmpm1, _reshape(D[:, k], axes(u)), uprev, u, abstol, - reltol, internalnorm, t) + reltol, internalnorm, t + ) cache.EEst1 = error_constant(integrator, k - 1) * internalnorm(atmpm1, t) end if k < max_order @views calculate_residuals!( atmpp1, _reshape(D[:, k + 2], axes(u)), uprev, u, abstol, - reltol, internalnorm, t) + reltol, internalnorm, t + ) cache.EEst2 = error_constant(integrator, k + 1) * internalnorm(atmpp1, t) end end @@ -961,7 +1017,7 @@ function initialize!(integrator, cache::MEBDF2ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::MEBDF2ConstantCache, repeat_step = false) @@ -1013,7 +1069,7 @@ function initialize!(integrator, cache::MEBDF2Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::MEBDF2Cache, repeat_step = false) @@ -1026,7 +1082,7 @@ end # initial guess if alg.extrapolant == :linear - @.. broadcast=false z=dt*integrator.fsalfirst + @.. broadcast = false z = dt * integrator.fsalfirst else # :constant z .= zero(eltype(u)) end @@ -1035,23 +1091,23 @@ end nlsolver.tmp = uprev z = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false z₁=uprev+z + @.. broadcast = false z₁ = uprev + z ### STEP 2 nlsolver.tmp = z₁ nlsolver.c = 2 isnewton(nlsolver) && set_new_W!(nlsolver, false) z = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false z₂=z₁+z + @.. broadcast = false z₂ = z₁ + z ### STEP 3 # z .= zero(eltype(u)) - @.. broadcast=false tmp2=0.5uprev+z₁-0.5z₂ + @.. broadcast = false tmp2 = 0.5uprev + z₁ - 0.5z₂ nlsolver.tmp = tmp2 nlsolver.c = 1 isnewton(nlsolver) && set_new_W!(nlsolver, false) z = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp2+z + @.. broadcast = false u = tmp2 + z ### finalize f(integrator.fsallast, u, p, t + dt) @@ -1072,13 +1128,17 @@ function initialize!(integrator, cache::FBDFConstantCache) u_modified = integrator.u_modified integrator.u_modified = true reinitFBDF!(integrator, cache) - integrator.u_modified = u_modified + return integrator.u_modified = u_modified end -function perform_step!(integrator, cache::FBDFConstantCache{max_order}, - repeat_step = false) where {max_order} - (; ts, u_history, order, u_corrector, bdf_coeffs, r, nlsolver, - weights, ts_tmp, iters_from_event, nconsteps) = cache +function perform_step!( + integrator, cache::FBDFConstantCache{max_order}, + repeat_step = false + ) where {max_order} + (; + ts, u_history, order, u_corrector, bdf_coeffs, r, nlsolver, + weights, ts_tmp, iters_from_event, nconsteps, + ) = cache (; t, dt, u, f, p, uprev) = integrator tdt = t + dt @@ -1103,8 +1163,10 @@ function perform_step!(integrator, cache::FBDFConstantCache{max_order}, fill!(u_corrector, zero(eltype(u))) if u isa Number for i in 1:(k - 1) - u_corrector[i] = calc_Lagrange_interp(k, weights, equi_ts[i], ts, u_history, - u_corrector[i]) + u_corrector[i] = calc_Lagrange_interp( + k, weights, equi_ts[i], ts, u_history, + u_corrector[i] + ) end tmp = -uprev * bdf_coeffs[k, 2] for i in 1:(k - 1) @@ -1117,12 +1179,13 @@ function perform_step!(integrator, cache::FBDFConstantCache{max_order}, equi_ts[i], ts, u_history, - u_corrector[:, i]) + u_corrector[:, i] + ) end tmp = -uprev * bdf_coeffs[k, 2] for i in 1:(k - 1) tmp = @.. tmp - - $(_reshape(view(u_corrector, :, i), axes(u))) * bdf_coeffs[k, i + 2] + $(_reshape(view(u_corrector, :, i), axes(u))) * bdf_coeffs[k, i + 2] end end @@ -1165,13 +1228,15 @@ function perform_step!(integrator, cache::FBDFConstantCache{max_order}, ts_tmp[i + 1] = ts[i] end ts_tmp[1] = tdt - atmp = calculate_residuals(_vec(lte), _vec(uprev), _vec(u), integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + _vec(lte), _vec(uprev), _vec(u), integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) terk = estimate_terk(integrator, cache, k + 1, Val(max_order), u) fd_weights = calc_finite_difference_weights(ts_tmp, tdt, k, Val(max_order)) - terk = @.. broadcast=false fd_weights[1, k + 1]*u + terk = @.. broadcast = false fd_weights[1, k + 1] * u if u isa Number for i in 2:(k + 1) terk += fd_weights[i, k + 1] * u_history[i - 1] @@ -1180,35 +1245,42 @@ function perform_step!(integrator, cache::FBDFConstantCache{max_order}, else for i in 2:(k + 1) terk = @.. terk + - fd_weights[i, k + 1] * - $(_reshape(view(u_history, :, i - 1), axes(u))) + fd_weights[i, k + 1] * + $(_reshape(view(u_history, :, i - 1), axes(u))) end terk *= abs(dt^(k)) end atmp = calculate_residuals( _vec(terk), _vec(uprev), _vec(u), integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + integrator.opts.reltol, integrator.opts.internalnorm, t + ) cache.terk = integrator.opts.internalnorm(atmp, t) if k > 1 terkm1 = estimate_terk(integrator, cache, k, Val(max_order), u) - atmp = calculate_residuals(_vec(terkm1), _vec(uprev), _vec(u), + atmp = calculate_residuals( + _vec(terkm1), _vec(uprev), _vec(u), integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) cache.terkm1 = integrator.opts.internalnorm(atmp, t) end if k > 2 terkm2 = estimate_terk(integrator, cache, k - 1, Val(max_order), u) - atmp = calculate_residuals(_vec(terkm2), _vec(uprev), _vec(u), + atmp = calculate_residuals( + _vec(terkm2), _vec(uprev), _vec(u), integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) cache.terkm2 = integrator.opts.internalnorm(atmp, t) end if nconsteps > k + 1 && k < max_order - atmp = calculate_residuals(_vec(terkp1), _vec(uprev), _vec(u), + atmp = calculate_residuals( + _vec(terkp1), _vec(uprev), _vec(u), integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) cache.terkp1 = integrator.opts.internalnorm(atmp, t) else cache.terkp1 = zero(cache.terk) @@ -1219,7 +1291,7 @@ function perform_step!(integrator, cache::FBDFConstantCache{max_order}, OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function initialize!(integrator, cache::FBDFCache) @@ -1234,26 +1306,30 @@ function initialize!(integrator, cache::FBDFCache) u_modified = integrator.u_modified integrator.u_modified = true reinitFBDF!(integrator, cache) - integrator.u_modified = u_modified + return integrator.u_modified = u_modified end -function perform_step!(integrator, cache::FBDFCache{max_order}, - repeat_step = false) where {max_order} - (; ts, u_history, order, u_corrector, bdf_coeffs, r, nlsolver, weights, terk_tmp, - terkp1_tmp, atmp, tmp, equi_ts, u₀, ts_tmp, step_limiter!) = cache +function perform_step!( + integrator, cache::FBDFCache{max_order}, + repeat_step = false + ) where {max_order} + (; + ts, u_history, order, u_corrector, bdf_coeffs, r, nlsolver, weights, terk_tmp, + terkp1_tmp, atmp, tmp, equi_ts, u₀, ts_tmp, step_limiter!, + ) = cache (; t, dt, u, f, p, uprev) = integrator reinitFBDF!(integrator, cache) k = order - @.. broadcast=false u₀=zero(u) #predictor + @.. broadcast = false u₀ = zero(u) #predictor tdt = t + dt if cache.iters_from_event >= 1 calc_Lagrange_interp!(k, weights, tdt, ts, u_history, u₀) else - @.. broadcast=false u₀=u + @.. broadcast = false u₀ = u end markfirststage!(nlsolver) - @.. broadcast=false nlsolver.z=u₀ + @.. broadcast = false nlsolver.z = u₀ mass_matrix = f.mass_matrix for i in 1:(k - 1) @@ -1262,20 +1338,22 @@ function perform_step!(integrator, cache::FBDFCache{max_order}, fill!(u_corrector, zero(eltype(u))) for i in 1:(k - 1) - @views calc_Lagrange_interp!(k, weights, equi_ts[i], ts, u_history, - u_corrector[:, i]) + @views calc_Lagrange_interp!( + k, weights, equi_ts[i], ts, u_history, + u_corrector[:, i] + ) end - @.. broadcast=false tmp=-uprev*bdf_coeffs[k, 2] + @.. broadcast = false tmp = -uprev * bdf_coeffs[k, 2] vc = _vec(tmp) for i in 1:(k - 1) - @.. broadcast=false @views vc -= u_corrector[:, i] * bdf_coeffs[k, i + 2] + @.. broadcast = false @views vc -= u_corrector[:, i] * bdf_coeffs[k, i + 2] end invdt = inv(dt) if mass_matrix === I - @.. broadcast=false nlsolver.tmp=tmp*invdt + @.. broadcast = false nlsolver.tmp = tmp * invdt else - @.. broadcast=false terkp1_tmp=tmp*invdt + @.. broadcast = false terkp1_tmp = tmp * invdt mul!(nlsolver.tmp, mass_matrix, terkp1_tmp) end @@ -1286,7 +1364,7 @@ function perform_step!(integrator, cache::FBDFCache{max_order}, nlsolver.method = COEFFICIENT_MULTISTEP z = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=z + @.. broadcast = false u = z step_limiter!(u, integrator, p, t + dt) @@ -1299,48 +1377,58 @@ function perform_step!(integrator, cache::FBDFCache{max_order}, end #for terkp1, we could use corrector and predictor to make an estimation. - @.. broadcast=false terkp1_tmp=(u-u₀) + @.. broadcast = false terkp1_tmp = (u - u₀) for j in 1:(k + 1) - @.. broadcast=false terkp1_tmp*=j * dt / (tdt - ts[j]) + @.. broadcast = false terkp1_tmp *= j * dt / (tdt - ts[j]) end lte = -1 / (1 + k) for j in 2:k lte -= bdf_coeffs[k, j] * r[j] end - @.. broadcast=false terk_tmp=lte*terkp1_tmp + @.. broadcast = false terk_tmp = lte * terkp1_tmp if integrator.opts.adaptive (; abstol, reltol, internalnorm) = integrator.opts for i in 1:(k + 1) ts_tmp[i + 1] = ts[i] end ts_tmp[1] = tdt - calculate_residuals!(atmp, _vec(terk_tmp), _vec(uprev), _vec(u), abstol, reltol, - internalnorm, t) + calculate_residuals!( + atmp, _vec(terk_tmp), _vec(uprev), _vec(u), abstol, reltol, + internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) estimate_terk!(integrator, cache, k + 1, Val(max_order)) - calculate_residuals!(atmp, _vec(terk_tmp), _vec(uprev), _vec(u), abstol, reltol, - internalnorm, t) + calculate_residuals!( + atmp, _vec(terk_tmp), _vec(uprev), _vec(u), abstol, reltol, + internalnorm, t + ) cache.terk = integrator.opts.internalnorm(atmp, t) if k > 1 estimate_terk!(integrator, cache, k, Val(max_order)) - calculate_residuals!(atmp, _vec(terk_tmp), _vec(uprev), _vec(u), + calculate_residuals!( + atmp, _vec(terk_tmp), _vec(uprev), _vec(u), integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) cache.terkm1 = integrator.opts.internalnorm(atmp, t) end if k > 2 estimate_terk!(integrator, cache, k - 1, Val(max_order)) - calculate_residuals!(atmp, _vec(terk_tmp), _vec(uprev), _vec(u), + calculate_residuals!( + atmp, _vec(terk_tmp), _vec(uprev), _vec(u), integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) cache.terkm2 = integrator.opts.internalnorm(atmp, t) end if cache.nconsteps > k + 1 && k < max_order - calculate_residuals!(atmp, _vec(terkp1_tmp), _vec(uprev), _vec(u), + calculate_residuals!( + atmp, _vec(terkp1_tmp), _vec(uprev), _vec(u), integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) cache.terkp1 = integrator.opts.internalnorm(atmp, t) else cache.terkp1 = zero(cache.terkp1) @@ -1348,5 +1436,5 @@ function perform_step!(integrator, cache::FBDFCache{max_order}, end f(integrator.fsallast, u, p, tdt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end diff --git a/lib/OrdinaryDiffEqBDF/src/bdf_utils.jl b/lib/OrdinaryDiffEqBDF/src/bdf_utils.jl index 8192558e4f..9d32a3ae34 100644 --- a/lib/OrdinaryDiffEqBDF/src/bdf_utils.jl +++ b/lib/OrdinaryDiffEqBDF/src/bdf_utils.jl @@ -5,7 +5,7 @@ U[j, r] = U[j - 1, r] * ((j - 1) - r) / j end end - nothing + return nothing end function R!(k, ρ, cache) @@ -16,7 +16,7 @@ function R!(k, ρ, cache) R[j, r] = R[j - 1, r] * ((j - 1) - r * ρ) / j end end - nothing + return nothing end # This functions takes help of D2 array to create backward differences array D @@ -26,10 +26,11 @@ function backward_diff!(cache::OrdinaryDiffEqMutableCache, D, D2, k, flag = true flag && copyto!(D[1], D2[1, 1]) for i in 2:k for j in 1:(k - i + 1) - @.. broadcast=false D2[i, j]=D2[i - 1, j]-D2[i - 1, j + 1] + @.. broadcast = false D2[i, j] = D2[i - 1, j] - D2[i - 1, j + 1] end flag && copyto!(D[i], D2[i, 1]) end + return end function backward_diff!(cache::OrdinaryDiffEqConstantCache, D, D2, k, flag = true) @@ -40,6 +41,7 @@ function backward_diff!(cache::OrdinaryDiffEqConstantCache, D, D2, k, flag = tru end flag && (D[i] = D2[i, 1]) end + return end # this function updates backward difference array D when stepsize gets change @@ -57,6 +59,7 @@ function reinterpolate_history!(cache::OrdinaryDiffEqMutableCache, D, R, k) D[j] .= tmp fill!(tmp, zero(eltype(tmp))) end + return end function reinterpolate_history!(cache::OrdinaryDiffEqConstantCache, D, R, k) @@ -67,6 +70,7 @@ function reinterpolate_history!(cache::OrdinaryDiffEqConstantCache, D, R, k) end D[j] = tmp end + return end function calc_R(ρ, k, ::Val{N}) where {N} @@ -77,15 +81,15 @@ function calc_R(ρ, k, ::Val{N}) where {N} R[j, r] = R[j - 1, r] * ((j - 1) - r * ρ) / j end end - SArray(R) + return SArray(R) end function update_D!(D, dd, k) dd = _vec(dd) - @views @.. broadcast=false D[:, k + 2]=dd-D[:, k + 1] - @views @.. broadcast=false D[:, k + 1]=dd + @views @.. broadcast = false D[:, k + 2] = dd - D[:, k + 1] + @views @.. broadcast = false D[:, k + 1] = dd for i in k:-1:1 - @views @.. broadcast=false D[:, i]=D[:, i]+D[:, i + 1] + @views @.. broadcast = false D[:, i] = D[:, i] + D[:, i + 1] end return nothing end @@ -95,7 +99,7 @@ const γₖ = @SVector[sum(Int64(1) // j for j in 1:k) for k in 1:6] function error_constant(integrator, alg::QNDF, k) (; γₖ) = integrator.cache κ = alg.kappa[k] - κ * γₖ[k] + inv(k + 1) + return κ * γₖ[k] + inv(k + 1) end function compute_weights!(ts, k, weights) @@ -109,6 +113,7 @@ function compute_weights!(ts, k, weights) end weights[i] = 1 / weights[i] end + return end #This uses lagrangian interpolation to calculate the predictor @@ -124,7 +129,7 @@ function calc_Lagrange_interp(k, weights, t, ts, u_history, u::Number) u *= t - ts[i] end end - u + return u end function calc_Lagrange_interp(k, weights, t, ts, u_history, u) @@ -134,30 +139,30 @@ function calc_Lagrange_interp(k, weights, t, ts, u_history, u) return reshape(u_history[:, i], size(u)) else for i in 1:(k + 1) - vc += @.. broadcast=false weights[i] / (t - ts[i])*u_history[:, i] + vc += @.. broadcast = false weights[i] / (t - ts[i]) * u_history[:, i] u = reshape(vc, size(u)) end for i in 1:(k + 1) - u *= @.. broadcast=false t-ts[i] + u *= @.. broadcast = false t - ts[i] end end - u + return u end function calc_Lagrange_interp!(k, weights, t, ts, u_history, u) vc = _vec(u) # ts is short enough that linear search will be faster i = findfirst(isequal(t), ts) - if i !== nothing - @.. broadcast=false @views vc = u_history[:, i] + return if i !== nothing + @.. broadcast = false @views vc = u_history[:, i] else for i in 1:(k + 1) wdt = weights[i] / (t - ts[i]) - @.. broadcast=false @views vc = muladd(wdt, u_history[:, i], vc) + @.. broadcast = false @views vc = muladd(wdt, u_history[:, i], vc) end for i in 1:(k + 1) dt = t - ts[i] - @.. broadcast=false u*=dt + @.. broadcast = false u *= dt end end end @@ -195,8 +200,10 @@ end function reinitFBDF!(integrator, cache) # This function is used for initialize weights and arrays that store past history information. It will be used in the first-time step advancing and event handling. - (; weights, consfailcnt, ts, u_history, u_corrector, iters_from_event, - order) = cache + (; + weights, consfailcnt, ts, u_history, u_corrector, iters_from_event, + order, + ) = cache (; t, dt, uprev) = integrator if integrator.u_modified @@ -214,21 +221,21 @@ function reinitFBDF!(integrator, cache) @views if iters_from_event == 0 weights[1] = 1 / dt ts[1] = t - @.. broadcast=false u_history[:, 1]=vuprev + @.. broadcast = false u_history[:, 1] = vuprev elseif iters_from_event == 1 && t != ts[1] ts[2] = ts[1] ts[1] = t - @.. broadcast=false u_history[:, 2]=u_history[:, 1] - @.. broadcast=false u_history[:, 1]=vuprev + @.. broadcast = false u_history[:, 2] = u_history[:, 1] + @.. broadcast = false u_history[:, 1] = vuprev elseif consfailcnt == 0 for i in (order + 2):-1:2 ts[i] = ts[i - 1] - @.. broadcast=false u_history[:, i]=u_history[:, i - 1] + @.. broadcast = false u_history[:, i] = u_history[:, i - 1] end ts[1] = t - @.. broadcast=false u_history[:, 1]=vuprev + @.. broadcast = false u_history[:, 1] = vuprev end - if iters_from_event >= 1 + return if iters_from_event >= 1 compute_weights!(ts, order, weights) end end @@ -238,19 +245,19 @@ function estimate_terk!(integrator, cache, k, ::Val{max_order}) where {max_order (; ts_tmp, terk_tmp, u_history) = cache (; t, dt, u) = integrator fd_weights = calc_finite_difference_weights(ts_tmp, t + dt, k - 1, Val(max_order)) - @.. broadcast=false terk_tmp=fd_weights[1, k]*u + @.. broadcast = false terk_tmp = fd_weights[1, k] * u vc = _vec(terk_tmp) for i in 2:k - @.. broadcast=false @views vc += fd_weights[i, k] * u_history[:, i - 1] + @.. broadcast = false @views vc += fd_weights[i, k] * u_history[:, i - 1] end - @.. broadcast=false terk_tmp*=abs(dt^(k - 1)) + return @.. broadcast = false terk_tmp *= abs(dt^(k - 1)) end function estimate_terk(integrator, cache, k, ::Val{max_order}, u) where {max_order} (; ts_tmp, u_history) = cache (; t, dt) = integrator fd_weights = calc_finite_difference_weights(ts_tmp, t + dt, k - 1, Val(max_order)) - terk = @.. broadcast=false fd_weights[1, k]*u + terk = @.. broadcast = false fd_weights[1, k] * u #@show terk,fd_weights[1,k+1] if u isa Number for i in 2:k @@ -261,7 +268,7 @@ function estimate_terk(integrator, cache, k, ::Val{max_order}, u) where {max_ord vc = _vec(terk) if ArrayInterface.ismutable(vc) for i in 2:k - @.. broadcast=false vc+=fd_weights[i, k] * @view(u_history[:, i - 1]) + @.. broadcast = false vc += fd_weights[i, k] * @view(u_history[:, i - 1]) end else for i in 2:k diff --git a/lib/OrdinaryDiffEqBDF/src/controllers.jl b/lib/OrdinaryDiffEqBDF/src/controllers.jl index 8ca920f813..7930f84aee 100644 --- a/lib/OrdinaryDiffEqBDF/src/controllers.jl +++ b/lib/OrdinaryDiffEqBDF/src/controllers.jl @@ -1,5 +1,5 @@ function default_controller(alg::Union{QNDF, FBDF}, args...) - DummyController() + return DummyController() end # QNBDF @@ -127,15 +127,15 @@ function bdf_step_reject_controller!(integrator, EEst1) u_modified!(integrator, true) end integrator.dt = hₙ - integrator.cache.order = kₙ + return integrator.cache.order = kₙ end function step_reject_controller!(integrator, ::QNDF) - bdf_step_reject_controller!(integrator, integrator.cache.EEst1) + return bdf_step_reject_controller!(integrator, integrator.cache.EEst1) end function step_reject_controller!(integrator, ::FBDF) - bdf_step_reject_controller!(integrator, integrator.cache.terkm1) + return bdf_step_reject_controller!(integrator, integrator.cache.terkm1) end function post_newton_controller!(integrator, alg::FBDF) @@ -146,20 +146,24 @@ function post_newton_controller!(integrator, alg::FBDF) integrator.dt = integrator.dt / integrator.opts.failfactor integrator.cache.consfailcnt += 1 integrator.cache.nconsteps = 0 - nothing + return nothing end -function choose_order!(alg::FBDF, integrator, +function choose_order!( + alg::FBDF, integrator, cache::OrdinaryDiffEqMutableCache, - ::Val{max_order}) where {max_order} + ::Val{max_order} + ) where {max_order} (; t, dt, u, cache, uprev) = integrator (; atmp, ts_tmp, terkm2, terkm1, terk, terkp1, terk_tmp, u_history) = cache k = cache.order # only when the order of amount of terk follows the order of step size, and achieve enough constant step size, the order could be increased. if k < max_order && integrator.cache.nconsteps >= integrator.cache.order + 2 && - ((k == 1 && terk > terkp1) || - (k == 2 && terkm1 > terk > terkp1) || - (k > 2 && terkm2 > terkm1 > terk > terkp1)) + ( + (k == 1 && terk > terkp1) || + (k == 2 && terkm1 > terk > terkp1) || + (k > 2 && terkm2 > terkm1 > terk > terkp1) + ) k += 1 terk = terkp1 else @@ -167,17 +171,21 @@ function choose_order!(alg::FBDF, integrator, terkp1 = terk terk = terkm1 terkm1 = terkm2 - fd_weights = calc_finite_difference_weights(ts_tmp, t + dt, k - 2, - Val(max_order)) - terk_tmp = @.. broadcast=false fd_weights[k - 2, 1]*u + fd_weights = calc_finite_difference_weights( + ts_tmp, t + dt, k - 2, + Val(max_order) + ) + terk_tmp = @.. broadcast = false fd_weights[k - 2, 1] * u vc = _vec(terk_tmp) for i in 2:(k - 2) @.. @views vc += fd_weights[i, k - 2] * u_history[:, i - 1] end - @.. broadcast=false terk_tmp*=abs(dt^(k - 2)) - calculate_residuals!(atmp, _vec(terk_tmp), _vec(uprev), _vec(u), + @.. broadcast = false terk_tmp *= abs(dt^(k - 2)) + calculate_residuals!( + atmp, _vec(terk_tmp), _vec(uprev), _vec(u), integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) terkm2 = integrator.opts.internalnorm(atmp, t) k -= 1 end @@ -185,16 +193,20 @@ function choose_order!(alg::FBDF, integrator, return k, terk end -function choose_order!(alg::FBDF, integrator, +function choose_order!( + alg::FBDF, integrator, cache::OrdinaryDiffEqConstantCache, - ::Val{max_order}) where {max_order} + ::Val{max_order} + ) where {max_order} (; t, dt, u, cache, uprev) = integrator (; ts_tmp, terkm2, terkm1, terk, terkp1, u_history) = cache k = cache.order if k < max_order && integrator.cache.nconsteps >= integrator.cache.order + 2 && - ((k == 1 && terk > terkp1) || - (k == 2 && terkm1 > terk > terkp1) || - (k > 2 && terkm2 > terkm1 > terk > terkp1)) + ( + (k == 1 && terk > terkp1) || + (k == 2 && terkm1 > terk > terkp1) || + (k > 2 && terkm2 > terkm1 > terk > terkp1) + ) k += 1 terk = terkp1 else @@ -202,8 +214,10 @@ function choose_order!(alg::FBDF, integrator, terkp1 = terk terk = terkm1 terkm1 = terkm2 - fd_weights = calc_finite_difference_weights(ts_tmp, t + dt, k - 2, - Val(max_order)) + fd_weights = calc_finite_difference_weights( + ts_tmp, t + dt, k - 2, + Val(max_order) + ) local terk_tmp if u isa Number terk_tmp = fd_weights[k - 2, 1] * u @@ -218,13 +232,15 @@ function choose_order!(alg::FBDF, integrator, @.. terk_tmp = fd_weights[k - 2, 1] * _vec(u) for i in 2:(k - 2) @.. terk_tmp += fd_weights[i, k - 2] * - $(_reshape(view(u_history, :, i - 1), axes(u))) + $(_reshape(view(u_history, :, i - 1), axes(u))) end @.. terk_tmp *= abs(dt^(k - 2)) end - atmp = calculate_residuals(terk_tmp, _vec(uprev), _vec(u), + atmp = calculate_residuals( + terk_tmp, _vec(uprev), _vec(u), integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) terkm2 = integrator.opts.internalnorm(atmp, t) k -= 1 end @@ -232,10 +248,12 @@ function choose_order!(alg::FBDF, integrator, return k, terk end -function stepsize_controller!(integrator, - alg::FBDF{max_order}) where { +function stepsize_controller!( + integrator, + alg::FBDF{max_order} + ) where { max_order, -} + } (; cache) = integrator cache.prev_order = cache.order k, terk = choose_order!(alg, integrator, cache, Val(max_order)) @@ -249,11 +267,13 @@ function stepsize_controller!(integrator, q = ((2 * terk / (k + 1))^(1 / (k + 1))) end integrator.qold = q - q + return q end -function step_accept_controller!(integrator, alg::FBDF{max_order}, - q) where {max_order} +function step_accept_controller!( + integrator, alg::FBDF{max_order}, + q + ) where {max_order} integrator.cache.consfailcnt = 0 if q <= integrator.opts.qsteady_max && q >= integrator.opts.qsteady_min q = one(q) @@ -264,7 +284,7 @@ function step_accept_controller!(integrator, alg::FBDF{max_order}, end function step_reject_controller!(integrator, ::DFBDF) - bdf_step_reject_controller!(integrator, integrator.cache.terkm1) + return bdf_step_reject_controller!(integrator, integrator.cache.terkm1) end function post_newton_controller!(integrator, alg::DFBDF) @@ -275,20 +295,24 @@ function post_newton_controller!(integrator, alg::DFBDF) integrator.dt = integrator.dt / integrator.opts.failfactor integrator.cache.consfailcnt += 1 integrator.cache.nconsteps = 0 - nothing + return nothing end -function choose_order!(alg::DFBDF, integrator, +function choose_order!( + alg::DFBDF, integrator, cache::OrdinaryDiffEqMutableCache, - ::Val{max_order}) where {max_order} + ::Val{max_order} + ) where {max_order} (; t, dt, u, cache, uprev) = integrator (; atmp, ts_tmp, terkm2, terkm1, terk, terkp1, terk_tmp, u_history) = cache k = cache.order # only when the order of amount of terk follows the order of step size, and achieve enough constant step size, the order could be increased. if k < max_order && integrator.cache.nconsteps >= integrator.cache.order + 2 && - ((k == 1 && terk > terkp1) || - (k == 2 && terkm1 > terk > terkp1) || - (k > 2 && terkm2 > terkm1 > terk > terkp1)) + ( + (k == 1 && terk > terkp1) || + (k == 2 && terkm1 > terk > terkp1) || + (k > 2 && terkm2 > terkm1 > terk > terkp1) + ) k += 1 terk = terkp1 else @@ -296,17 +320,21 @@ function choose_order!(alg::DFBDF, integrator, terkp1 = terk terk = terkm1 terkm1 = terkm2 - fd_weights = calc_finite_difference_weights(ts_tmp, t + dt, k - 2, - Val(max_order)) - terk_tmp = @.. broadcast=false fd_weights[k - 2, 1]*u + fd_weights = calc_finite_difference_weights( + ts_tmp, t + dt, k - 2, + Val(max_order) + ) + terk_tmp = @.. broadcast = false fd_weights[k - 2, 1] * u vc = _vec(terk_tmp) for i in 2:(k - 2) - @.. broadcast=false @views vc += fd_weights[i, k - 2] * u_history[:, i - 1] + @.. broadcast = false @views vc += fd_weights[i, k - 2] * u_history[:, i - 1] end - @.. broadcast=false terk_tmp*=abs(dt^(k - 2)) - calculate_residuals!(atmp, _vec(terk_tmp), _vec(uprev), _vec(u), + @.. broadcast = false terk_tmp *= abs(dt^(k - 2)) + calculate_residuals!( + atmp, _vec(terk_tmp), _vec(uprev), _vec(u), integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) terkm2 = integrator.opts.internalnorm(atmp, t) k -= 1 end @@ -314,16 +342,20 @@ function choose_order!(alg::DFBDF, integrator, return k, terk end -function choose_order!(alg::DFBDF, integrator, +function choose_order!( + alg::DFBDF, integrator, cache::OrdinaryDiffEqConstantCache, - ::Val{max_order}) where {max_order} + ::Val{max_order} + ) where {max_order} (; t, dt, u, cache, uprev) = integrator (; ts_tmp, terkm2, terkm1, terk, terkp1, u_history) = cache k = cache.order if k < max_order && integrator.cache.nconsteps >= integrator.cache.order + 2 && - ((k == 1 && terk > terkp1) || - (k == 2 && terkm1 > terk > terkp1) || - (k > 2 && terkm2 > terkm1 > terk > terkp1)) + ( + (k == 1 && terk > terkp1) || + (k == 2 && terkm1 > terk > terkp1) || + (k > 2 && terkm2 > terkm1 > terk > terkp1) + ) k += 1 terk = terkp1 else @@ -331,9 +363,11 @@ function choose_order!(alg::DFBDF, integrator, terkp1 = terk terk = terkm1 terkm1 = terkm2 - fd_weights = calc_finite_difference_weights(ts_tmp, t + dt, k - 2, - Val(max_order)) - terk_tmp = @.. broadcast=false fd_weights[k - 2, 1]*u + fd_weights = calc_finite_difference_weights( + ts_tmp, t + dt, k - 2, + Val(max_order) + ) + terk_tmp = @.. broadcast = false fd_weights[k - 2, 1] * u if u isa Number for i in 2:(k - 2) terk_tmp += fd_weights[i, k - 2] * u_history[i - 1] @@ -342,15 +376,17 @@ function choose_order!(alg::DFBDF, integrator, else vc = _vec(terk_tmp) for i in 2:(k - 2) - @.. broadcast=false @views vc += fd_weights[i, k - 2] * - u_history[:, i - 1] + @.. broadcast = false @views vc += fd_weights[i, k - 2] * + u_history[:, i - 1] end terk_tmp = reshape(vc, size(terk_tmp)) - terk_tmp *= @.. broadcast=false abs(dt^(k - 2)) + terk_tmp *= @.. broadcast = false abs(dt^(k - 2)) end - atmp = calculate_residuals(_vec(terk_tmp), _vec(uprev), _vec(u), + atmp = calculate_residuals( + _vec(terk_tmp), _vec(uprev), _vec(u), integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) terkm2 = integrator.opts.internalnorm(atmp, t) k -= 1 end @@ -358,10 +394,12 @@ function choose_order!(alg::DFBDF, integrator, return k, terk end -function stepsize_controller!(integrator, - alg::DFBDF{max_order}) where { +function stepsize_controller!( + integrator, + alg::DFBDF{max_order} + ) where { max_order, -} + } (; cache) = integrator cache.prev_order = cache.order k, terk = choose_order!(alg, integrator, cache, Val(max_order)) @@ -375,11 +413,13 @@ function stepsize_controller!(integrator, q = ((2 * terk / (k + 1))^(1 / (k + 1))) end integrator.qold = q - q + return q end -function step_accept_controller!(integrator, alg::DFBDF{max_order}, - q) where {max_order} +function step_accept_controller!( + integrator, alg::DFBDF{max_order}, + q + ) where {max_order} integrator.cache.consfailcnt = 0 if q <= integrator.opts.qsteady_max && q >= integrator.opts.qsteady_min q = one(q) diff --git a/lib/OrdinaryDiffEqBDF/src/dae_caches.jl b/lib/OrdinaryDiffEqBDF/src/dae_caches.jl index 1c7383dc08..2ba9e3ee43 100644 --- a/lib/OrdinaryDiffEqBDF/src/dae_caches.jl +++ b/lib/OrdinaryDiffEqBDF/src/dae_caches.jl @@ -1,10 +1,10 @@ abstract type DAEBDFMutableCache <: OrdinaryDiffEqMutableCache end function get_fsalfirstlast(cache::DAEBDFMutableCache, u) - (cache.fsalfirst, du_alias_or_new(cache.nlsolver, cache.fsalfirst)) + return (cache.fsalfirst, du_alias_or_new(cache.nlsolver, cache.fsalfirst)) end @cache mutable struct DImplicitEulerCache{uType, rateType, uNoUnitsType, N} <: - DAEBDFMutableCache + DAEBDFMutableCache u::uType uprev::uType uprev2::uType @@ -21,62 +21,74 @@ mutable struct DImplicitEulerConstantCache{N} <: OrdinaryDiffEqConstantCache nlsolver::N end -function alg_cache(alg::DImplicitEuler, du, u, res_prototype, rate_prototype, +function alg_cache( + alg::DImplicitEuler, du, u, res_prototype, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1, 1 α = 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, res_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, α, Val(false)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, res_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, α, Val(false) + ) - DImplicitEulerConstantCache(nlsolver) + return DImplicitEulerConstantCache(nlsolver) end -function alg_cache(alg::DImplicitEuler, du, u, res_prototype, rate_prototype, +function alg_cache( + alg::DImplicitEuler, du, u, res_prototype, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1, 1 α = 1 k₁ = zero(rate_prototype) k₂ = zero(rate_prototype) - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, res_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, α, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, res_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, α, Val(true) + ) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - DImplicitEulerCache(u, uprev, uprev2, atmp, k₁, k₂, nlsolver) + return DImplicitEulerCache(u, uprev, uprev2, atmp, k₁, k₂, nlsolver) end @cache mutable struct DABDF2ConstantCache{N, dtType, rate_prototype} <: - OrdinaryDiffEqConstantCache + OrdinaryDiffEqConstantCache nlsolver::N eulercache::DImplicitEulerConstantCache dtₙ₋₁::dtType fsalfirstprev::rate_prototype end -function alg_cache(alg::DABDF2, du, u, res_prototype, rate_prototype, +function alg_cache( + alg::DABDF2, du, u, res_prototype, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = Int64(1) // 1, 1 α = Int64(1) // 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, res_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, α, Val(false)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, res_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, α, Val(false) + ) eulercache = DImplicitEulerConstantCache(nlsolver) dtₙ₋₁ = one(dt) fsalfirstprev = rate_prototype - DABDF2ConstantCache(nlsolver, eulercache, dtₙ₋₁, fsalfirstprev) + return DABDF2ConstantCache(nlsolver, eulercache, dtₙ₋₁, fsalfirstprev) end @cache mutable struct DABDF2Cache{uType, rateType, uNoUnitsType, N, dtType} <: - DAEBDFMutableCache + DAEBDFMutableCache uₙ::uType uₙ₋₁::uType uₙ₋₂::uType @@ -88,14 +100,18 @@ end dtₙ₋₁::dtType end -function alg_cache(alg::DABDF2, du, u, res_prototype, rate_prototype, +function alg_cache( + alg::DABDF2, du, u, res_prototype, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = Int64(1) // 1, 1 α = Int64(1) // 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, res_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, α, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, res_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, α, Val(true) + ) fsalfirst = zero(rate_prototype) fsalfirstprev = zero(rate_prototype) @@ -109,13 +125,17 @@ function alg_cache(alg::DABDF2, du, u, res_prototype, rate_prototype, dtₙ₋₁ = one(dt) - DABDF2Cache(u, uprev, uprev2, fsalfirst, fsalfirstprev, atmp, - nlsolver, eulercache, dtₙ₋₁) + return DABDF2Cache( + u, uprev, uprev2, fsalfirst, fsalfirstprev, atmp, + nlsolver, eulercache, dtₙ₋₁ + ) end -@cache mutable struct DFBDFConstantCache{MO, N, tsType, tType, uType, uuType, coeffType, - EEstType, rType, wType} <: - OrdinaryDiffEqConstantCache +@cache mutable struct DFBDFConstantCache{ + MO, N, tsType, tType, uType, uuType, coeffType, + EEstType, rType, wType, + } <: + OrdinaryDiffEqConstantCache nlsolver::N ts::tsType ts_tmp::tsType @@ -138,18 +158,24 @@ end iters_from_event::Int end -function alg_cache(alg::DFBDF{MO}, du, u, res_prototype, rate_prototype, uEltypeNoUnits, +function alg_cache( + alg::DFBDF{MO}, du, u, res_prototype, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits, - uprev, uprev2, f, t, dt, reltol, p, calck, ::Val{false}) where {MO} + uprev, uprev2, f, t, dt, reltol, p, calck, ::Val{false} + ) where {MO} γ, c = 1.0, 1.0 max_order = MO - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - bdf_coeffs = SA[1 -1 0 0 0 0; - Int64(2)//3 -Int64(4)//3 Int64(1)//3 0 0 0; - Int64(6)//11 -Int64(18)//11 Int64(9)//11 -Int64(2)//11 0 0; - Int64(12)//25 -Int64(48)//25 Int64(36)//25 -Int64(16)//25 Int64(3)//25 0; - Int64(60)//137 -Int64(300)//137 Int64(300)//137 -Int64(200)//137 Int64(75)//137 -Int64(12)//137] + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + bdf_coeffs = SA[ + 1 -1 0 0 0 0; + Int64(2) // 3 -Int64(4) // 3 Int64(1) // 3 0 0 0; + Int64(6) // 11 -Int64(18) // 11 Int64(9) // 11 -Int64(2) // 11 0 0; + Int64(12) // 25 -Int64(48) // 25 Int64(36) // 25 -Int64(16) // 25 Int64(3) // 25 0; + Int64(60) // 137 -Int64(300) // 137 Int64(300) // 137 -Int64(200) // 137 Int64(75) // 137 -Int64(12) // 137 + ] ts = zero(Vector{typeof(t)}(undef, max_order + 2)) #ts is the successful past points, it will be updated after successful step ts_tmp = similar(ts) @@ -172,14 +198,18 @@ function alg_cache(alg::DFBDF{MO}, du, u, res_prototype, rate_prototype, uEltype iters_from_event = 0 u₀ = zero(u) - DFBDFConstantCache(nlsolver, ts, ts_tmp, t_old, u_history, order, prev_order, u₀, + return DFBDFConstantCache( + nlsolver, ts, ts_tmp, t_old, u_history, order, prev_order, u₀, u_corrector, bdf_coeffs, Val(5), nconsteps, consfailcnt, terkm2, - terkm1, terk, terkp1, r, weights, iters_from_event) + terkm1, terk, terkp1, r, weights, iters_from_event + ) end -@cache mutable struct DFBDFCache{MO, N, rateType, uNoUnitsType, tsType, tType, uType, - uuType, coeffType, EEstType, rType, wType} <: - DAEBDFMutableCache +@cache mutable struct DFBDFCache{ + MO, N, rateType, uNoUnitsType, tsType, tType, uType, + uuType, coeffType, EEstType, rType, wType, + } <: + DAEBDFMutableCache fsalfirst::rateType nlsolver::N ts::tsType @@ -208,25 +238,31 @@ end iters_from_event::Int end -function alg_cache(alg::DFBDF{MO}, du, u, res_prototype, rate_prototype, uEltypeNoUnits, +function alg_cache( + alg::DFBDF{MO}, du, u, res_prototype, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {MO} + ::Val{true} + ) where {MO} γ, c = 1.0, 1.0 fsalfirst = zero(rate_prototype) max_order = MO - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) #=bdf_coeffs = SA[1 -1 0 0 0 0 ; 3//2 -2 1//2 0 0 0 ; 11//6 -3 3//2 -1//3 0 0 ; 25//12 -4 3 -4//3 1//4 0 ; 137//60 -5 5 -10//3 5//4 -1//5]=# - bdf_coeffs = SA[1 -1 0 0 0 0; - Int64(2)//3 -Int64(4)//3 Int64(1)//3 0 0 0; - Int64(6)//11 -Int64(18)//11 Int64(9)//11 -Int64(2)//11 0 0; - Int64(12)//25 -Int64(48)//25 Int64(36)//25 -Int64(16)//25 Int64(3)//25 0; - Int64(60)//137 -Int64(300)//137 Int64(300)//137 -Int64(200)//137 Int64(75)//137 -Int64(12)//137] + bdf_coeffs = SA[ + 1 -1 0 0 0 0; + Int64(2) // 3 -Int64(4) // 3 Int64(1) // 3 0 0 0; + Int64(6) // 11 -Int64(18) // 11 Int64(9) // 11 -Int64(2) // 11 0 0; + Int64(12) // 25 -Int64(48) // 25 Int64(36) // 25 -Int64(16) // 25 Int64(3) // 25 0; + Int64(60) // 137 -Int64(300) // 137 Int64(300) // 137 -Int64(200) // 137 Int64(75) // 137 -Int64(12) // 137 + ] ts = Vector{typeof(t)}(undef, max_order + 2) #ts is the successful past points, it will be updated after successful step u_history = Matrix{eltype(u)}(undef, length(u), max_order + 2) order = 1 @@ -257,8 +293,10 @@ function alg_cache(alg::DFBDF{MO}, du, u, res_prototype, rate_prototype, uEltype ts_tmp = similar(ts) iters_from_event = 0 - DFBDFCache(fsalfirst, nlsolver, ts, ts_tmp, t_old, u_history, order, prev_order, + return DFBDFCache( + fsalfirst, nlsolver, ts, ts_tmp, t_old, u_history, order, prev_order, u_corrector, u₀, bdf_coeffs, Val(5), nconsteps, consfailcnt, tmp, atmp, terkm2, terkm1, terk, terkp1, terk_tmp, terkp1_tmp, r, weights, equi_ts, - iters_from_event) + iters_from_event + ) end diff --git a/lib/OrdinaryDiffEqBDF/src/dae_perform_step.jl b/lib/OrdinaryDiffEqBDF/src/dae_perform_step.jl index d940bc7fae..4cb520d7f0 100644 --- a/lib/OrdinaryDiffEqBDF/src/dae_perform_step.jl +++ b/lib/OrdinaryDiffEqBDF/src/dae_perform_step.jl @@ -1,7 +1,7 @@ function initialize!(integrator, cache::DImplicitEulerConstantCache) integrator.kshortsize = 2 integrator.k = typeof(integrator.k)(undef, integrator.kshortsize) - integrator.k[1] = integrator.du + return integrator.k[1] = integrator.du end function initialize!(integrator, cache::DImplicitEulerCache) @@ -10,11 +10,13 @@ function initialize!(integrator, cache::DImplicitEulerCache) resize!(integrator.k, integrator.kshortsize) integrator.k .= [k₁, k₂] integrator.k[1] .= integrator.du - nothing + return nothing end -@muladd function perform_step!(integrator, cache::DImplicitEulerConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::DImplicitEulerConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; nlsolver) = cache @@ -39,9 +41,11 @@ end r = c * dt^2 # by mean value theorem 2nd DD equals y''(s)/2 for some s tmp = r * - integrator.opts.internalnorm.((u - uprev) / dt1 - (uprev - uprev2) / dt2, t) - atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + integrator.opts.internalnorm.((u - uprev) / dt1 - (uprev - uprev2) / dt2, t) + atmp = calculate_residuals( + tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) else integrator.EEst = 1 @@ -66,8 +70,8 @@ end nlsolver.γ = 1 z = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=uprev+z - @.. broadcast=false du=z*inv(dt) + @.. broadcast = false u = uprev + z + @.. broadcast = false du = z * inv(dt) if integrator.opts.adaptive && integrator.success_iter > 0 # local truncation error (LTE) bound by dt^2/2*max|y''(t)| @@ -82,11 +86,14 @@ end c = 7 / 12 # default correction factor in SPICE (LTE overestimated by DD) r = c * dt^2 # by mean value theorem 2nd DD equals y''(s)/2 for some s - @.. broadcast=false tmp=r*integrator.opts.internalnorm( - (u-uprev)/dt1- - (uprev-uprev2)/dt2, t) - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false tmp = r * integrator.opts.internalnorm( + (u - uprev) / dt1 - + (uprev - uprev2) / dt2, t + ) + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) else integrator.EEst = 1 @@ -101,7 +108,7 @@ end function initialize!(integrator, cache::DABDF2ConstantCache) integrator.kshortsize = 2 integrator.k = typeof(integrator.k)(undef, integrator.kshortsize) - integrator.k[1] = integrator.du + return integrator.k[1] = integrator.du end @muladd function perform_step!(integrator, cache::DABDF2ConstantCache, repeat_step = false) @@ -112,7 +119,7 @@ end if integrator.iter == 1 && !integrator.u_modified cache.dtₙ₋₁ = dtₙ perform_step!(integrator, cache.eulercache, repeat_step) - integrator.fsalfirst = @.. broadcast=false (integrator.u - integrator.uprev)/dtₙ + integrator.fsalfirst = @.. broadcast = false (integrator.u - integrator.uprev) / dtₙ cache.fsalfirstprev = integrator.fsalfirst return end @@ -131,14 +138,16 @@ end nlsolvefail(nlsolver) && return uₙ = uₙ₋₁ + z - integrator.fsallast = @.. broadcast=false z/dtₙ + integrator.fsallast = @.. broadcast = false z / dtₙ if integrator.opts.adaptive tmp = integrator.fsallast - (1 + dtₙ / dtₙ₋₁) * integrator.fsalfirst + - (dtₙ / dtₙ₋₁) * cache.fsalfirstprev + (dtₙ / dtₙ₋₁) * cache.fsalfirstprev est = (dtₙ₋₁ + dtₙ) / 6 * tmp - atmp = calculate_residuals(est, uₙ₋₁, uₙ, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + est, uₙ₋₁, uₙ, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -165,7 +174,7 @@ function initialize!(integrator, cache::DABDF2Cache) resize!(integrator.k, integrator.kshortsize) integrator.k .= [k₁, k₂] integrator.k[1] .= integrator.du - nothing + return nothing end @muladd function perform_step!(integrator, cache::DABDF2Cache, repeat_step = false) @@ -177,7 +186,7 @@ end if integrator.iter == 1 && !integrator.u_modified cache.dtₙ₋₁ = dtₙ perform_step!(integrator, cache.eulercache, repeat_step) - @.. broadcast=false integrator.fsalfirst=(uₙ-uₙ₋₁)/dt + @.. broadcast = false integrator.fsalfirst = (uₙ - uₙ₋₁) / dt cache.fsalfirstprev .= integrator.fsalfirst return end @@ -188,32 +197,36 @@ end nlsolver.γ = (1 + ρ) / (1 + 2ρ) nlsolver.α = Int64(1) // 1 - @.. broadcast=false nlsolver.tmp=-c1*uₙ₋₁+c1*uₙ₋₂ + @.. broadcast = false nlsolver.tmp = -c1 * uₙ₋₁ + c1 * uₙ₋₂ nlsolver.z .= zero(eltype(z)) z = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false uₙ=uₙ₋₁+z - @.. broadcast=false du=(nlsolver.α*z+nlsolver.tmp)*inv(nlsolver.γ*dt) + @.. broadcast = false uₙ = uₙ₋₁ + z + @.. broadcast = false du = (nlsolver.α * z + nlsolver.tmp) * inv(nlsolver.γ * dt) - @.. broadcast=false integrator.fsallast=du + @.. broadcast = false integrator.fsallast = du OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if integrator.opts.adaptive btilde0 = (dtₙ₋₁ + dtₙ) * Int64(1) // 6 btilde1 = 1 + ρ btilde2 = ρ - @.. broadcast=false tmp=btilde0* - (integrator.fsallast-btilde1*integrator.fsalfirst+ - btilde2*cache.fsalfirstprev) - calculate_residuals!(atmp, tmp, uₙ₋₁, uₙ, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false tmp = btilde0 * + ( + integrator.fsallast - btilde1 * integrator.fsalfirst + + btilde2 * cache.fsalfirstprev + ) + calculate_residuals!( + atmp, tmp, uₙ₋₁, uₙ, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end ################################### Finalize if integrator.EEst < one(integrator.EEst) - @.. broadcast=false cache.fsalfirstprev=integrator.fsalfirst + @.. broadcast = false cache.fsalfirstprev = integrator.fsalfirst cache.dtₙ₋₁ = dtₙ end return @@ -222,8 +235,10 @@ end function initialize!(integrator, cache::DFBDFConstantCache) integrator.kshortsize = 2 integrator.k = typeof(integrator.k)(undef, integrator.kshortsize) - integrator.fsalfirst = integrator.f(integrator.du, integrator.uprev, integrator.p, - integrator.t) # Pre-start fsal + integrator.fsalfirst = integrator.f( + integrator.du, integrator.uprev, integrator.p, + integrator.t + ) # Pre-start fsal OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) @@ -233,13 +248,17 @@ function initialize!(integrator, cache::DFBDFConstantCache) u_modified = integrator.u_modified integrator.u_modified = true reinitFBDF!(integrator, cache) - integrator.u_modified = u_modified + return integrator.u_modified = u_modified end -function perform_step!(integrator, cache::DFBDFConstantCache{max_order}, - repeat_step = false) where {max_order} - (; ts, u_history, order, u_corrector, bdf_coeffs, r, nlsolver, - weights, ts_tmp, iters_from_event, nconsteps) = cache +function perform_step!( + integrator, cache::DFBDFConstantCache{max_order}, + repeat_step = false + ) where {max_order} + (; + ts, u_history, order, u_corrector, bdf_coeffs, r, nlsolver, + weights, ts_tmp, iters_from_event, nconsteps, + ) = cache (; t, dt, u, f, p, uprev) = integrator k = order @@ -259,8 +278,10 @@ function perform_step!(integrator, cache::DFBDFConstantCache{max_order}, fill!(u_corrector, zero(eltype(u))) if u isa Number for i in 1:(k - 1) - u_corrector[i] = calc_Lagrange_interp(k, weights, equi_ts[i], ts, u_history, - u_corrector[i]) + u_corrector[i] = calc_Lagrange_interp( + k, weights, equi_ts[i], ts, u_history, + u_corrector[i] + ) end tmp = uprev * bdf_coeffs[k, 2] for i in 1:(k - 1) @@ -268,18 +289,21 @@ function perform_step!(integrator, cache::DFBDFConstantCache{max_order}, end else for i in 1:(k - 1) - @.. broadcast=false @views u_corrector[:, i] = $calc_Lagrange_interp( + @.. broadcast = false @views u_corrector[:, i] = $calc_Lagrange_interp( k, weights, equi_ts[i], ts, u_history, - u_corrector[:, - i]) + u_corrector[ + :, + i, + ] + ) end tmp = uprev * bdf_coeffs[k, 2] vc = _vec(tmp) for i in 1:(k - 1) - vc += @.. broadcast=false u_corrector[:, i]*bdf_coeffs[k, i + 2] + vc += @.. broadcast = false u_corrector[:, i] * bdf_coeffs[k, i + 2] end tmp = reshape(vc, size(tmp)) end @@ -315,42 +339,51 @@ function perform_step!(integrator, cache::DFBDFConstantCache{max_order}, ts_tmp[i + 1] = ts[i] end ts_tmp[1] = t + dt - atmp = calculate_residuals(_vec(lte), _vec(uprev), _vec(u), integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + _vec(lte), _vec(uprev), _vec(u), integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) terk = estimate_terk(integrator, cache, k + 1, Val(max_order), u) atmp = calculate_residuals( _vec(terk), _vec(uprev), _vec(u), integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + integrator.opts.reltol, integrator.opts.internalnorm, t + ) cache.terk = integrator.opts.internalnorm(atmp, t) if k > 1 terkm1 = estimate_terk(integrator, cache, k, Val(max_order), u) - atmp = calculate_residuals(_vec(terkm1), _vec(uprev), _vec(u), + atmp = calculate_residuals( + _vec(terkm1), _vec(uprev), _vec(u), integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) cache.terkm1 = integrator.opts.internalnorm(atmp, t) end if k > 2 terkm2 = estimate_terk(integrator, cache, k - 1, Val(max_order), u) - atmp = calculate_residuals(_vec(terkm2), _vec(uprev), _vec(u), + atmp = calculate_residuals( + _vec(terkm2), _vec(uprev), _vec(u), integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) cache.terkm2 = integrator.opts.internalnorm(atmp, t) end if nconsteps > k + 1 && k < max_order - atmp = calculate_residuals(_vec(terkp1), _vec(uprev), _vec(u), + atmp = calculate_residuals( + _vec(terkp1), _vec(uprev), _vec(u), integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) cache.terkp1 = integrator.opts.internalnorm(atmp, t) else cache.terkp1 = zero(cache.terk) end end integrator.u = u - integrator.fsallast = integrator.du = (nlsolver.α * z + nlsolver.tmp) * - inv(nlsolver.γ * dt) + return integrator.fsallast = integrator.du = (nlsolver.α * z + nlsolver.tmp) * + inv(nlsolver.γ * dt) end function initialize!(integrator, cache::DFBDFCache) @@ -365,22 +398,26 @@ function initialize!(integrator, cache::DFBDFCache) u_modified = integrator.u_modified integrator.u_modified = true reinitFBDF!(integrator, cache) - integrator.u_modified = u_modified + return integrator.u_modified = u_modified end -function perform_step!(integrator, cache::DFBDFCache{max_order}, - repeat_step = false) where {max_order} - (; ts, u_history, order, u_corrector, bdf_coeffs, r, nlsolver, weights, - terk_tmp, terkp1_tmp, atmp, tmp, equi_ts, u₀, ts_tmp) = cache +function perform_step!( + integrator, cache::DFBDFCache{max_order}, + repeat_step = false + ) where {max_order} + (; + ts, u_history, order, u_corrector, bdf_coeffs, r, nlsolver, weights, + terk_tmp, terkp1_tmp, atmp, tmp, equi_ts, u₀, ts_tmp, + ) = cache (; t, dt, u, f, p, uprev) = integrator reinitFBDF!(integrator, cache) k = order - @.. broadcast=false u₀=zero(u) + @.. broadcast = false u₀ = zero(u) if cache.iters_from_event >= 1 calc_Lagrange_interp!(k, weights, t + dt, ts, u_history, u₀) else - @.. broadcast=false u₀=u + @.. broadcast = false u₀ = u end markfirststage!(nlsolver) @@ -390,23 +427,25 @@ function perform_step!(integrator, cache::DFBDFCache{max_order}, fill!(u_corrector, zero(eltype(u))) for i in 1:(k - 1) - @views calc_Lagrange_interp!(k, weights, equi_ts[i], ts, u_history, - u_corrector[:, i]) + @views calc_Lagrange_interp!( + k, weights, equi_ts[i], ts, u_history, + u_corrector[:, i] + ) end - @.. broadcast=false tmp=uprev*bdf_coeffs[k, 2] + @.. broadcast = false tmp = uprev * bdf_coeffs[k, 2] vc = _vec(tmp) for i in 1:(k - 1) - @.. broadcast=false @views vc += u_corrector[:, i] * bdf_coeffs[k, i + 2] + @.. broadcast = false @views vc += u_corrector[:, i] * bdf_coeffs[k, i + 2] end - @.. broadcast=false nlsolver.tmp=tmp+u₀ - @.. broadcast=false nlsolver.z=zero(eltype(nlsolver.z)) + @.. broadcast = false nlsolver.tmp = tmp + u₀ + @.. broadcast = false nlsolver.z = zero(eltype(nlsolver.z)) nlsolver.γ = bdf_coeffs[k, 1] nlsolver.α = Int64(1) // 1 z = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=z+u₀ + @.. broadcast = false u = z + u₀ for j in 2:k r[j] = (1 - j) @@ -415,54 +454,66 @@ function perform_step!(integrator, cache::DFBDFCache{max_order}, end end - @.. broadcast=false terkp1_tmp=z + @.. broadcast = false terkp1_tmp = z for j in 1:(k + 1) - @.. broadcast=false terkp1_tmp*=j * dt / (t + dt - ts[j]) + @.. broadcast = false terkp1_tmp *= j * dt / (t + dt - ts[j]) end lte = -1 / (1 + k) for j in 2:k lte -= (bdf_coeffs[k, j] // bdf_coeffs[k, 1]) * r[j] end - @.. broadcast=false terk_tmp=lte*terkp1_tmp + @.. broadcast = false terk_tmp = lte * terkp1_tmp if integrator.opts.adaptive (; abstol, reltol, internalnorm) = integrator.opts for i in 1:(k + 1) ts_tmp[i + 1] = ts[i] end ts_tmp[1] = t + dt - calculate_residuals!(atmp, _vec(terk_tmp), _vec(uprev), _vec(u), abstol, reltol, - internalnorm, t) + calculate_residuals!( + atmp, _vec(terk_tmp), _vec(uprev), _vec(u), abstol, reltol, + internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) estimate_terk!(integrator, cache, k + 1, Val(max_order)) - calculate_residuals!(atmp, _vec(terk_tmp), _vec(uprev), _vec(u), abstol, reltol, - internalnorm, t) + calculate_residuals!( + atmp, _vec(terk_tmp), _vec(uprev), _vec(u), abstol, reltol, + internalnorm, t + ) cache.terk = integrator.opts.internalnorm(atmp, t) if k > 1 estimate_terk!(integrator, cache, k, Val(max_order)) - calculate_residuals!(atmp, _vec(terk_tmp), _vec(uprev), _vec(u), + calculate_residuals!( + atmp, _vec(terk_tmp), _vec(uprev), _vec(u), integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) cache.terkm1 = integrator.opts.internalnorm(atmp, t) end if k > 2 estimate_terk!(integrator, cache, k - 1, Val(max_order)) - calculate_residuals!(atmp, _vec(terk_tmp), _vec(uprev), _vec(u), + calculate_residuals!( + atmp, _vec(terk_tmp), _vec(uprev), _vec(u), integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) cache.terkm2 = integrator.opts.internalnorm(atmp, t) end if cache.nconsteps > k + 1 && k < max_order - calculate_residuals!(atmp, _vec(terkp1_tmp), _vec(uprev), _vec(u), + calculate_residuals!( + atmp, _vec(terkp1_tmp), _vec(uprev), _vec(u), integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) cache.terkp1 = integrator.opts.internalnorm(atmp, t) else cache.terkp1 = zero(cache.terkp1) end end - @.. broadcast=false integrator.fsallast=integrator.du=(nlsolver.α*z+ - nlsolver.tmp)* - inv(nlsolver.γ*dt) #TODO Lorenz plot seems not smooth + return @.. broadcast = false integrator.fsallast = integrator.du = ( + nlsolver.α * z + + nlsolver.tmp + ) * + inv(nlsolver.γ * dt) #TODO Lorenz plot seems not smooth end diff --git a/lib/OrdinaryDiffEqBDF/test/allocation_tests.jl b/lib/OrdinaryDiffEqBDF/test/allocation_tests.jl index 3d5851649b..5487ac3576 100644 --- a/lib/OrdinaryDiffEqBDF/test/allocation_tests.jl +++ b/lib/OrdinaryDiffEqBDF/test/allocation_tests.jl @@ -16,7 +16,7 @@ Currently, many BDF solvers are allocating and marked with @test_broken. du[2] = -1.5 * u[2] end prob = ODEProblem(simple_system!, [1.0, 1.0], (0.0, 1.0)) - + # Split problem for IMEX methods function f1!(du, u, p, t) du[1] = -0.5 * u[1] @@ -27,7 +27,7 @@ Currently, many BDF solvers are allocating and marked with @test_broken. du[2] = -1.5 * u[2] end split_prob = SplitODEProblem(f1!, f2!, [1.0, 1.0], (0.0, 1.0)) - + # DAE problem for DAE solvers function dae_f!(resid, du, u, p, t) resid[1] = -0.5 * u[1] + u[2] - du[1] @@ -35,31 +35,31 @@ Currently, many BDF solvers are allocating and marked with @test_broken. end du0 = zeros(2) differential_vars = [true, false] - dae_prob = DAEProblem(dae_f!, du0, [1.0, 1.0], (0.0, 1.0), differential_vars=differential_vars) - + dae_prob = DAEProblem(dae_f!, du0, [1.0, 1.0], (0.0, 1.0), differential_vars = differential_vars) + # Test all exported BDF solvers for allocation-free behavior # Standard ODE BDF methods bdf_solvers = [ABDF2(), QNDF1(), QBDF1(), QNDF2(), QBDF2(), QNDF(), QBDF(), FBDF(), MEBDF2()] - + # IMEX/Split methods need SplitODEProblem - imex_solvers = [SBDF(order=2), SBDF2(), SBDF3(), SBDF4(), IMEXEuler(), IMEXEulerARK()] - + imex_solvers = [SBDF(order = 2), SBDF2(), SBDF3(), SBDF4(), IMEXEuler(), IMEXEulerARK()] + # DAE methods need DAEProblem dae_solvers = [DABDF2(), DImplicitEuler(), DFBDF()] - + @testset "BDF Solver Allocation Analysis" begin for solver in bdf_solvers @testset "$(typeof(solver)) allocation check" begin - integrator = init(prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) + integrator = init(prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) step!(integrator) # Setup step may allocate - + # Use AllocCheck to verify step! is allocation-free allocs = check_allocs(step!, (typeof(integrator),)) - + # These solvers should be allocation-free, but mark as broken for now # to verify with AllocCheck (more accurate than @allocated) - @test length(allocs) == 0 broken=true - + @test length(allocs) == 0 broken = true + if length(allocs) > 0 println("AllocCheck found $(length(allocs)) allocation sites in $(typeof(solver)) step!:") for (i, alloc) in enumerate(allocs[1:min(3, end)]) # Show first 3 @@ -71,20 +71,20 @@ Currently, many BDF solvers are allocating and marked with @test_broken. end end end - + @testset "IMEX Solver Allocation Analysis" begin for solver in imex_solvers @testset "$(typeof(solver)) allocation check" begin - integrator = init(split_prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) + integrator = init(split_prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) step!(integrator) # Setup step may allocate - + # Use AllocCheck to verify step! is allocation-free allocs = check_allocs(step!, (typeof(integrator),)) - + # These solvers should be allocation-free, but mark as broken for now # to verify with AllocCheck (more accurate than @allocated) - @test length(allocs) == 0 broken=true - + @test length(allocs) == 0 broken = true + if length(allocs) > 0 println("AllocCheck found $(length(allocs)) allocation sites in $(typeof(solver)) step!:") for (i, alloc) in enumerate(allocs[1:min(3, end)]) # Show first 3 @@ -96,20 +96,20 @@ Currently, many BDF solvers are allocating and marked with @test_broken. end end end - + @testset "DAE Solver Allocation Analysis" begin for solver in dae_solvers @testset "$(typeof(solver)) allocation check" begin - integrator = init(dae_prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) + integrator = init(dae_prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) step!(integrator) # Setup step may allocate - + # Use AllocCheck to verify step! is allocation-free allocs = check_allocs(step!, (typeof(integrator),)) - + # These solvers should be allocation-free, but mark as broken for now # to verify with AllocCheck (more accurate than @allocated) - @test length(allocs) == 0 broken=true - + @test length(allocs) == 0 broken = true + if length(allocs) > 0 println("AllocCheck found $(length(allocs)) allocation sites in $(typeof(solver)) step!:") for (i, alloc) in enumerate(allocs[1:min(3, end)]) # Show first 3 @@ -121,4 +121,4 @@ Currently, many BDF solvers are allocating and marked with @test_broken. end end end -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqBDF/test/bdf_convergence_tests.jl b/lib/OrdinaryDiffEqBDF/test/bdf_convergence_tests.jl index 926f12ca37..1297fd037f 100644 --- a/lib/OrdinaryDiffEqBDF/test/bdf_convergence_tests.jl +++ b/lib/OrdinaryDiffEqBDF/test/bdf_convergence_tests.jl @@ -13,87 +13,101 @@ if isempty(VERSION.prerelease) end @testset "Implicit Solver Convergence Tests ($(["out-of-place", "in-place"][i]))" for i in - 1:2 + 1:2 - prob = (ODEProblemLibrary.prob_ode_linear, - ODEProblemLibrary.prob_ode_2Dlinear)[i] + prob = ( + ODEProblemLibrary.prob_ode_linear, + ODEProblemLibrary.prob_ode_2Dlinear, + )[i] sim = test_convergence(dts, prob, ABDF2()) - @test sim.𝒪est[:final]≈2 atol=testTol - @test sim.𝒪est[:l2]≈2 atol=testTol - @test sim.𝒪est[:l∞]≈2 atol=testTol + @test sim.𝒪est[:final] ≈ 2 atol = testTol + @test sim.𝒪est[:l2] ≈ 2 atol = testTol + @test sim.𝒪est[:l∞] ≈ 2 atol = testTol sim = test_convergence(dts, prob, ABDF2(nlsolve = NLFunctional())) - @test sim.𝒪est[:final]≈2 atol=testTol - @test sim.𝒪est[:l2]≈2 atol=testTol - @test sim.𝒪est[:l∞]≈2 atol=testTol + @test sim.𝒪est[:final] ≈ 2 atol = testTol + @test sim.𝒪est[:l2] ≈ 2 atol = testTol + @test sim.𝒪est[:l∞] ≈ 2 atol = testTol # QBDF sim = test_convergence(dts, prob, QBDF1()) - @test sim.𝒪est[:final]≈1 atol=testTol - @test sim.𝒪est[:l2]≈1 atol=testTol - @test sim.𝒪est[:l∞]≈1 atol=testTol + @test sim.𝒪est[:final] ≈ 1 atol = testTol + @test sim.𝒪est[:l2] ≈ 1 atol = testTol + @test sim.𝒪est[:l∞] ≈ 1 atol = testTol sim = test_convergence(dts, prob, QBDF2()) - @test sim.𝒪est[:final]≈2 atol=testTol - @test sim.𝒪est[:l2]≈2 atol=testTol - @test sim.𝒪est[:l∞]≈2 atol=testTol + @test sim.𝒪est[:final] ≈ 2 atol = testTol + @test sim.𝒪est[:l2] ≈ 2 atol = testTol + @test sim.𝒪est[:l∞] ≈ 2 atol = testTol # QNDF sim = test_convergence(dts, prob, QNDF1()) - @test sim.𝒪est[:final]≈1 atol=testTol - @test sim.𝒪est[:l2]≈1 atol=testTol - @test sim.𝒪est[:l∞]≈1 atol=testTol + @test sim.𝒪est[:final] ≈ 1 atol = testTol + @test sim.𝒪est[:l2] ≈ 1 atol = testTol + @test sim.𝒪est[:l∞] ≈ 1 atol = testTol sim = test_convergence(dts, prob, QNDF1(autodiff = AutoFiniteDiff())) - @test sim.𝒪est[:final]≈1 atol=testTol - @test sim.𝒪est[:l2]≈1 atol=testTol - @test sim.𝒪est[:l∞]≈1 atol=testTol + @test sim.𝒪est[:final] ≈ 1 atol = testTol + @test sim.𝒪est[:l2] ≈ 1 atol = testTol + @test sim.𝒪est[:l∞] ≈ 1 atol = testTol if isempty(VERSION.prerelease) - sim = test_convergence(dts, + sim = test_convergence( + dts, prob, - QNDF1(autodiff = AutoEnzyme(mode = set_runtime_activity(Enzyme.Forward), - function_annotation = Enzyme.Const))) - @test sim.𝒪est[:final]≈1 atol=testTol - @test sim.𝒪est[:l2]≈1 atol=testTol - @test sim.𝒪est[:l∞]≈1 atol=testTol - - sim = test_convergence(dts, + QNDF1( + autodiff = AutoEnzyme( + mode = set_runtime_activity(Enzyme.Forward), + function_annotation = Enzyme.Const + ) + ) + ) + @test sim.𝒪est[:final] ≈ 1 atol = testTol + @test sim.𝒪est[:l2] ≈ 1 atol = testTol + @test sim.𝒪est[:l∞] ≈ 1 atol = testTol + + sim = test_convergence( + dts, prob, QNDF1( - autodiff = AutoEnzyme(mode = set_runtime_activity(Enzyme.Forward), - function_annotation = Enzyme.Const), - linsolve = LinearSolve.KrylovJL())) - @test sim.𝒪est[:final]≈1 atol=testTol - @test sim.𝒪est[:l2]≈1 atol=testTol - @test sim.𝒪est[:l∞]≈1 atol=testTol + autodiff = AutoEnzyme( + mode = set_runtime_activity(Enzyme.Forward), + function_annotation = Enzyme.Const + ), + linsolve = LinearSolve.KrylovJL() + ) + ) + @test sim.𝒪est[:final] ≈ 1 atol = testTol + @test sim.𝒪est[:l2] ≈ 1 atol = testTol + @test sim.𝒪est[:l∞] ≈ 1 atol = testTol end sim = test_convergence(dts3, prob, QNDF2()) - @test sim.𝒪est[:final]≈2 atol=testTol - @test sim.𝒪est[:l2]≈2 atol=testTol - @test sim.𝒪est[:l∞]≈2 atol=testTol + @test sim.𝒪est[:final] ≈ 2 atol = testTol + @test sim.𝒪est[:l2] ≈ 2 atol = testTol + @test sim.𝒪est[:l∞] ≈ 2 atol = testTol sim = test_convergence(dts, prob, QNDF2(nlsolve = NLFunctional())) - @test sim.𝒪est[:final]≈2 atol=testTol - @test sim.𝒪est[:l2]≈2 atol=testTol - @test sim.𝒪est[:l∞]≈2 atol=testTol + @test sim.𝒪est[:final] ≈ 2 atol = testTol + @test sim.𝒪est[:l2] ≈ 2 atol = testTol + @test sim.𝒪est[:l∞] ≈ 2 atol = testTol @test_nowarn solve(prob, QNDF()) # MEBDF2 sim21 = test_convergence(dts, prob, MEBDF2(extrapolant = :linear)) - @test sim21.𝒪est[:final]≈2 atol=testTol + @test sim21.𝒪est[:final] ≈ 2 atol = testTol - sim22 = test_convergence(dts, prob, MEBDF2(nlsolve = NLFunctional()), reltol = 1e-2) - @test sim22.𝒪est[:final]≈2 atol=testTol + sim22 = test_convergence(dts, prob, MEBDF2(nlsolve = NLFunctional()), reltol = 1.0e-2) + @test sim22.𝒪est[:final] ≈ 2 atol = testTol - sim23 = test_convergence(dts, prob, MEBDF2(nlsolve = NLAnderson()), reltol = 1e-2) - @test sim23.𝒪est[:final]≈2 atol=testTol + sim23 = test_convergence(dts, prob, MEBDF2(nlsolve = NLAnderson()), reltol = 1.0e-2) + @test sim23.𝒪est[:final] ≈ 2 atol = testTol sim24 = test_convergence( - dts, prob, MEBDF2(nlsolve = NonlinearSolveAlg()), reltol = 1e-2) - @test sim24.𝒪est[:final]≈2 atol=testTol + dts, prob, MEBDF2(nlsolve = NonlinearSolveAlg()), reltol = 1.0e-2 + ) + @test sim24.𝒪est[:final] ≈ 2 atol = testTol #FBDF @test_nowarn solve(prob, FBDF()) diff --git a/lib/OrdinaryDiffEqBDF/test/bdf_regression_tests.jl b/lib/OrdinaryDiffEqBDF/test/bdf_regression_tests.jl index 5a4a82fe98..283cc6a70f 100644 --- a/lib/OrdinaryDiffEqBDF/test/bdf_regression_tests.jl +++ b/lib/OrdinaryDiffEqBDF/test/bdf_regression_tests.jl @@ -20,7 +20,7 @@ probiip = ODEProblem(fiip, ones(2), (0.0, 1000.0), 1.0) end function ad_helper(alg, prob) - function costoop(p) + return function costoop(p) _oprob = remake(prob; p) sol = solve(_oprob, alg, saveat = 1:10) return sum(sol) diff --git a/lib/OrdinaryDiffEqBDF/test/dae_ad_tests.jl b/lib/OrdinaryDiffEqBDF/test/dae_ad_tests.jl index 686d85bc88..fba03fc29c 100644 --- a/lib/OrdinaryDiffEqBDF/test/dae_ad_tests.jl +++ b/lib/OrdinaryDiffEqBDF/test/dae_ad_tests.jl @@ -7,24 +7,30 @@ afd_cs3 = AutoForwardDiff(chunksize = 3) function f(out, du, u, p, t) out[1] = -p[1] * u[1] + p[3] * u[2] * u[3] - du[1] out[2] = +p[1] * u[1] - p[2] * u[2]^2 - p[3] * u[2] * u[3] - du[2] - out[3] = u[1] + u[2] + u[3] - 1.0 + return out[3] = u[1] + u[2] + u[3] - 1.0 end function f(du, u, p, t) - [-p[1] * u[1] + p[3] * u[2] * u[3] - du[1], + return [ + -p[1] * u[1] + p[3] * u[2] * u[3] - du[1], +p[1] * u[1] - p[2] * u[2]^2 - p[3] * u[2] * u[3] - du[2], - u[1] + u[2] + u[3] - 1.0] + u[1] + u[2] + u[3] - 1.0, + ] end function f_ode(du, u, p, t) - du .= [-p[1] * u[1] + p[3] * u[2] * u[3], + return du .= [ + -p[1] * u[1] + p[3] * u[2] * u[3], +p[1] * u[1] - p[2] * u[2]^2 - p[3] * u[2] * u[3], - u[1] + u[2] + u[3] - 1.0] + u[1] + u[2] + u[3] - 1.0, + ] end function f_ode(u, p, t) - [-p[1] * u[1] + p[3] * u[2] * u[3], + return [ + -p[1] * u[1] + p[3] * u[2] * u[3], +p[1] * u[1] - p[2] * u[2]^2 - p[3] * u[2] * u[3], - u[1] + u[2] + u[3] - 1.0] + u[1] + u[2] + u[3] - 1.0, + ] end -p = [0.04, 3e7, 1e4] +p = [0.04, 3.0e7, 1.0e4] u₀ = [1.0, 0, 0] du₀ = [-0.04, 0.04, 0.0] tspan = (0.0, 100000.0) @@ -37,27 +43,33 @@ prob_mm = ODEProblem(f_mm, u₀, tspan, p) f_mm_oop = ODEFunction{false}(f_ode, mass_matrix = M) prob_mm_oop = ODEProblem(f_mm_oop, u₀, tspan, p) if VERSION >= v"1.12" -sol1 = @inferred solve( - prob, DFBDF(autodiff = afd_cs3), dt = 1e-5, abstol = 1e-8, reltol = 1e-8) -sol2 = @inferred solve( - prob_oop, DFBDF(autodiff = afd_cs3), dt = 1e-5, abstol = 1e-8, reltol = 1e-8) -sol3 = @inferred solve( - prob_mm, FBDF(autodiff = afd_cs3), dt = 1e-5, abstol = 1e-8, reltol = 1e-8) + sol1 = @inferred solve( + prob, DFBDF(autodiff = afd_cs3), dt = 1.0e-5, abstol = 1.0e-8, reltol = 1.0e-8 + ) + sol2 = @inferred solve( + prob_oop, DFBDF(autodiff = afd_cs3), dt = 1.0e-5, abstol = 1.0e-8, reltol = 1.0e-8 + ) + sol3 = @inferred solve( + prob_mm, FBDF(autodiff = afd_cs3), dt = 1.0e-5, abstol = 1.0e-8, reltol = 1.0e-8 + ) end # These tests flex differentiation of the solver and through the initialization # To only test the solver part and isolate potential issues, set the initialization to consistent @testset "Inplace: $(isinplace(_prob)), DAEProblem: $(_prob isa DAEProblem), BrownBasic: $(initalg isa BrownFullBasicInit), Autodiff: $autodiff" for _prob in - [ - prob, prob_oop, prob_mm, prob_mm_oop], - initalg in [BrownFullBasicInit(), ShampineCollocationInit()], - autodiff in [afd_cs3, AutoFiniteDiff()] + [ + prob, prob_oop, prob_mm, prob_mm_oop, + ], + initalg in [BrownFullBasicInit(), ShampineCollocationInit()], + autodiff in [afd_cs3, AutoFiniteDiff()] alg = (_prob isa DAEProblem) ? DFBDF(; autodiff) : FBDF(; autodiff) function f(p) - sol = solve(remake(_prob, p = p), alg, abstol = 1e-14, - reltol = 1e-14, initializealg = initalg) + sol = solve( + remake(_prob, p = p), alg, abstol = 1.0e-14, + reltol = 1.0e-14, initializealg = initalg + ) sum(sol) end - @test ForwardDiff.gradient(f, [0.04, 3e7, 1e4])≈[0, 0, 0] atol=1e-8 + @test ForwardDiff.gradient(f, [0.04, 3.0e7, 1.0e4]) ≈ [0, 0, 0] atol = 1.0e-8 end diff --git a/lib/OrdinaryDiffEqBDF/test/dae_convergence_tests.jl b/lib/OrdinaryDiffEqBDF/test/dae_convergence_tests.jl index 1829c679a0..bddf5737eb 100644 --- a/lib/OrdinaryDiffEqBDF/test/dae_convergence_tests.jl +++ b/lib/OrdinaryDiffEqBDF/test/dae_convergence_tests.jl @@ -8,52 +8,58 @@ testTol = 0.2 f_dae_linear = (res, du, u, p, t) -> (@. res = du - u) function f_dae_linear_jac(J, du, u, p, gamma, t) J[1, 1] = gamma - 1.0 - J[2, 2] = gamma - 1.0 + return J[2, 2] = gamma - 1.0 end f_dae_linear_analytic = (du0, u0, p, t) -> @. u0 * exp(t) prob_dae_linear_iip = DAEProblem( - DAEFunction(f_dae_linear; - analytic = f_dae_linear_analytic), - [1.0, 1.0], [1.0, 1.0], (0.0, 1.0)) + DAEFunction( + f_dae_linear; + analytic = f_dae_linear_analytic + ), + [1.0, 1.0], [1.0, 1.0], (0.0, 1.0) +) @testset "DAE Solver Convergence Tests (in-place, ad jac)" begin prob = prob_dae_linear_iip sim11 = test_convergence(dts, prob, DImplicitEuler()) - @test sim11.𝒪est[:final]≈1 atol=testTol + @test sim11.𝒪est[:final] ≈ 1 atol = testTol sim12 = test_convergence(dts, prob, DImplicitEuler(; autodiff = AutoFiniteDiff())) - @test sim12.𝒪est[:final]≈1 atol=testTol + @test sim12.𝒪est[:final] ≈ 1 atol = testTol sim13 = test_convergence(dts, prob, DABDF2()) - @test sim13.𝒪est[:final]≈2 atol=testTol + @test sim13.𝒪est[:final] ≈ 2 atol = testTol sim14 = test_convergence(dts, prob, DABDF2(; autodiff = AutoFiniteDiff())) - @test sim14.𝒪est[:final]≈2 atol=testTol + @test sim14.𝒪est[:final] ≈ 2 atol = testTol @test_nowarn solve(prob, DFBDF()) end prob_dae_linear_iip_jac = DAEProblem( - DAEFunction(f_dae_linear; + DAEFunction( + f_dae_linear; jac = f_dae_linear_jac, - analytic = f_dae_linear_analytic), - [1.0, 1.0], [1.0, 1.0], (0.0, 1.0)) + analytic = f_dae_linear_analytic + ), + [1.0, 1.0], [1.0, 1.0], (0.0, 1.0) +) @testset "DAE Solver Convergence Tests (in-place, custom jac)" begin prob = prob_dae_linear_iip sim11 = test_convergence(dts, prob, DImplicitEuler()) - @test sim11.𝒪est[:final]≈1 atol=testTol + @test sim11.𝒪est[:final] ≈ 1 atol = testTol sim12 = test_convergence(dts, prob, DImplicitEuler(; autodiff = AutoFiniteDiff())) - @test sim12.𝒪est[:final]≈1 atol=testTol + @test sim12.𝒪est[:final] ≈ 1 atol = testTol sim13 = test_convergence(dts, prob, DABDF2()) - @test sim13.𝒪est[:final]≈2 atol=testTol + @test sim13.𝒪est[:final] ≈ 2 atol = testTol sim14 = test_convergence(dts, prob, DABDF2(; autodiff = AutoFiniteDiff())) - @test sim14.𝒪est[:final]≈2 atol=testTol + @test sim14.𝒪est[:final] ≈ 2 atol = testTol @test_nowarn solve(prob, DFBDF()) end @@ -62,52 +68,58 @@ f_dae_linear = (du, u, p, t) -> (@. du - u) function f_dae_linear_jac(du, u, p, gamma, t) J = zeros(2, 2) J[1, 1] = gamma - 1.0 - J[2, 2] = gamma - 1.0 + return J[2, 2] = gamma - 1.0 end f_dae_linear_analytic = (du0, u0, p, t) -> @. u0 * exp(t) prob_dae_linear_oop = DAEProblem( - DAEFunction(f_dae_linear; - analytic = f_dae_linear_analytic), - 1.0, 1.0, (0.0, 1.0)) + DAEFunction( + f_dae_linear; + analytic = f_dae_linear_analytic + ), + 1.0, 1.0, (0.0, 1.0) +) @testset "DAE Solver Convergence Tests (out-of-place, ad jac)" begin prob = prob_dae_linear_oop sim21 = test_convergence(dts, prob, DImplicitEuler()) - @test sim21.𝒪est[:final]≈1 atol=testTol + @test sim21.𝒪est[:final] ≈ 1 atol = testTol sim22 = test_convergence(dts, prob, DImplicitEuler(; autodiff = AutoFiniteDiff())) - @test sim22.𝒪est[:final]≈1 atol=testTol + @test sim22.𝒪est[:final] ≈ 1 atol = testTol sim23 = test_convergence(dts, prob, DABDF2()) - @test sim23.𝒪est[:final]≈2 atol=testTol + @test sim23.𝒪est[:final] ≈ 2 atol = testTol sim24 = test_convergence(dts, prob, DABDF2(; autodiff = AutoFiniteDiff())) - @test sim24.𝒪est[:final]≈2 atol=testTol + @test sim24.𝒪est[:final] ≈ 2 atol = testTol @test_nowarn solve(prob, DFBDF()) end prob_dae_linear_oop = DAEProblem( - DAEFunction(f_dae_linear; + DAEFunction( + f_dae_linear; jac = f_dae_linear_jac, - analytic = f_dae_linear_analytic), - 1.0, 1.0, (0.0, 1.0)) + analytic = f_dae_linear_analytic + ), + 1.0, 1.0, (0.0, 1.0) +) @testset "DAE Solver Convergence Tests (out-of-place, custom jac)" begin prob = prob_dae_linear_oop sim21 = test_convergence(dts, prob, DImplicitEuler()) - @test sim21.𝒪est[:final]≈1 atol=testTol + @test sim21.𝒪est[:final] ≈ 1 atol = testTol sim22 = test_convergence(dts, prob, DImplicitEuler(; autodiff = AutoFiniteDiff())) - @test sim22.𝒪est[:final]≈1 atol=testTol + @test sim22.𝒪est[:final] ≈ 1 atol = testTol sim23 = test_convergence(dts, prob, DABDF2()) - @test sim23.𝒪est[:final]≈2 atol=testTol + @test sim23.𝒪est[:final] ≈ 2 atol = testTol sim24 = test_convergence(dts, prob, DABDF2(; autodiff = AutoFiniteDiff())) - @test sim24.𝒪est[:final]≈2 atol=testTol + @test sim24.𝒪est[:final] ≈ 2 atol = testTol @test_nowarn solve(prob, DFBDF()) end diff --git a/lib/OrdinaryDiffEqBDF/test/dae_event.jl b/lib/OrdinaryDiffEqBDF/test/dae_event.jl index cf9ef1ee81..93d2fa94a6 100644 --- a/lib/OrdinaryDiffEqBDF/test/dae_event.jl +++ b/lib/OrdinaryDiffEqBDF/test/dae_event.jl @@ -3,7 +3,7 @@ using OrdinaryDiffEqBDF, Test f = function (out, du, u, p, t) out[1] = -p[1] * u[1] + p[3] * u[2] * u[3] - du[1] out[2] = +p[1] * u[1] - p[2] * u[2]^2 - p[3] * u[2] * u[3] - du[2] - out[3] = u[1] + u[2] + u[3] - p[4] + return out[3] = u[1] + u[2] + u[3] - p[4] end u₀ = [1.0, 0, 0] du₀ = [0.0, 0.0, 0.0] @@ -23,8 +23,8 @@ sol = solve(prob, IDA(), callback=cb, tstops=[50.0],abstol=1e-14,reltol=1e-14) p = [0.04, 3.0e7, 1.0e4, 1.0] prob = DAEProblem(f, du₀, u₀, tspan, p, differential_vars = differential_vars) -sol = solve(prob, DFBDF(), callback = cb, tstops = [50.0], abstol = 1e-12, reltol = 1e-12) +sol = solve(prob, DFBDF(), callback = cb, tstops = [50.0], abstol = 1.0e-12, reltol = 1.0e-12) @test sol.t[end] == 100.0 -@test sol[end][1]≈0.686300529575259 atol=1e-7 -@test sol[end][2]≈2.0797982209353813e-6 atol=1e-7 -@test sol[end][3]≈1.31369739062652 atol=1e-7 +@test sol[end][1] ≈ 0.686300529575259 atol = 1.0e-7 +@test sol[end][2] ≈ 2.0797982209353813e-6 atol = 1.0e-7 +@test sol[end][3] ≈ 1.31369739062652 atol = 1.0e-7 diff --git a/lib/OrdinaryDiffEqBDF/test/dae_initialization_tests.jl b/lib/OrdinaryDiffEqBDF/test/dae_initialization_tests.jl index 154f499c07..500cea6b61 100644 --- a/lib/OrdinaryDiffEqBDF/test/dae_initialization_tests.jl +++ b/lib/OrdinaryDiffEqBDF/test/dae_initialization_tests.jl @@ -2,10 +2,10 @@ using OrdinaryDiffEqBDF, StaticArrays, LinearAlgebra, Test, ADTypes using OrdinaryDiffEqNonlinearSolve f = function (du, u, p, t) - out1 = -0.04u[1] + 1e4 * u[2] * u[3] - du[1] - out2 = +0.04u[1] - 3e7 * u[2]^2 - 1e4 * u[2] * u[3] - du[2] + out1 = -0.04u[1] + 1.0e4 * u[2] * u[3] - du[1] + out2 = +0.04u[1] - 3.0e7 * u[2]^2 - 1.0e4 * u[2] * u[3] - du[2] out3 = u[1] + u[2] + u[3] - 1.0 - [out1, out2, out3] + return [out1, out2, out3] end u₀ = [1.0, 0, 0] @@ -15,28 +15,29 @@ differential_vars = [true, true, false] prob = DAEProblem(f, du₀, u₀, tspan, differential_vars = differential_vars) integrator = init(prob, DABDF2()) -@test integrator.du[1]≈-0.04 atol=1e-9 -@test integrator.du[2]≈0.04 atol=1e-9 -@test integrator.u≈u₀ atol=1e-9 +@test integrator.du[1] ≈ -0.04 atol = 1.0e-9 +@test integrator.du[2] ≈ 0.04 atol = 1.0e-9 +@test integrator.u ≈ u₀ atol = 1.0e-9 integrator = init(prob, DImplicitEuler()) -@test integrator.du[1]≈-0.04 atol=1e-9 -@test integrator.du[2]≈0.04 atol=1e-9 -@test integrator.u≈u₀ atol=1e-9 +@test integrator.du[1] ≈ -0.04 atol = 1.0e-9 +@test integrator.du[2] ≈ 0.04 atol = 1.0e-9 +@test integrator.u ≈ u₀ atol = 1.0e-9 integrator = init(prob, DFBDF()) -@test integrator.du[1]≈-0.04 atol=1e-9 -@test integrator.du[2]≈0.04 atol=1e-9 -@test integrator.u≈u₀ atol=1e-9 +@test integrator.du[1] ≈ -0.04 atol = 1.0e-9 +@test integrator.du[2] ≈ 0.04 atol = 1.0e-9 +@test integrator.u ≈ u₀ atol = 1.0e-9 u₀ = [1.0, 0, 0.2] prob = DAEProblem(f, du₀, u₀, tspan, differential_vars = differential_vars) integrator = init(prob, DABDF2()) -@test integrator.u≈[1.0, 0, 0.0] atol=1e-9 +@test integrator.u ≈ [1.0, 0, 0.0] atol = 1.0e-9 integrator = init( - prob, DABDF2(), initializealg = OrdinaryDiffEqNonlinearSolve.ShampineCollocationInit()) + prob, DABDF2(), initializealg = OrdinaryDiffEqNonlinearSolve.ShampineCollocationInit() +) @test !(integrator.u ≈ [1.0, 0, 0.0]) u₀ = [1.0, 0, 0.2] @@ -45,9 +46,9 @@ integrator = init(prob, DABDF2()) @test !(integrator.u ≈ [1.0, 0, 0.0]) f = function (out, du, u, p, t) - out[1] = -0.04u[1] + 1e4 * u[2] * u[3] - du[1] - out[2] = +0.04u[1] - 3e7 * u[2]^2 - 1e4 * u[2] * u[3] - du[2] - out[3] = u[1] + u[2] + u[3] - 1.0 + out[1] = -0.04u[1] + 1.0e4 * u[2] * u[3] - du[1] + out[2] = +0.04u[1] - 3.0e7 * u[2]^2 - 1.0e4 * u[2] * u[3] - du[2] + return out[3] = u[1] + u[2] + u[3] - 1.0 end u₀ = [1.0, 0, 0] @@ -58,32 +59,33 @@ prob = DAEProblem(f, du₀, u₀, tspan, differential_vars = differential_vars) integrator = init(prob, DABDF2()) integrator2 = init(prob, DABDF2(autodiff = AutoFiniteDiff())) -@test integrator.du[1]≈-0.04 atol=1e-9 -@test integrator.du[2]≈0.04 atol=1e-9 -@test integrator.u≈u₀ atol=1e-9 +@test integrator.du[1] ≈ -0.04 atol = 1.0e-9 +@test integrator.du[2] ≈ 0.04 atol = 1.0e-9 +@test integrator.u ≈ u₀ atol = 1.0e-9 -@test integrator2.du[1]≈-0.04 atol=1e-99 -@test integrator2.du[2]≈0.04 atol=1e-9 -@test integrator2.u≈u₀ atol=1e-9 +@test integrator2.du[1] ≈ -0.04 atol = 1.0e-99 +@test integrator2.du[2] ≈ 0.04 atol = 1.0e-9 +@test integrator2.u ≈ u₀ atol = 1.0e-9 integrator = init(prob, DImplicitEuler()) -@test integrator.du[1]≈-0.04 atol=1e-9 -@test integrator.du[2]≈0.04 atol=1e-9 -@test integrator.u≈u₀ atol=1e-9 +@test integrator.du[1] ≈ -0.04 atol = 1.0e-9 +@test integrator.du[2] ≈ 0.04 atol = 1.0e-9 +@test integrator.u ≈ u₀ atol = 1.0e-9 integrator = init(prob, DFBDF()) -@test integrator.du[1]≈-0.04 atol=1e-9 -@test integrator.du[2]≈0.04 atol=1e-9 -@test integrator.u≈u₀ atol=1e-9 +@test integrator.du[1] ≈ -0.04 atol = 1.0e-9 +@test integrator.du[2] ≈ 0.04 atol = 1.0e-9 +@test integrator.u ≈ u₀ atol = 1.0e-9 u₀ = [1.0, 0, 0.2] prob = DAEProblem(f, du₀, u₀, tspan, differential_vars = differential_vars) integrator = init(prob, DABDF2()) -@test integrator.u≈[1.0, 0, 0.0] atol=1e-9 +@test integrator.u ≈ [1.0, 0, 0.0] atol = 1.0e-9 integrator = init( - prob, DABDF2(), initializealg = OrdinaryDiffEqNonlinearSolve.ShampineCollocationInit()) + prob, DABDF2(), initializealg = OrdinaryDiffEqNonlinearSolve.ShampineCollocationInit() +) @test !(integrator.u ≈ [1.0, 0, 0.0]) u₀ = [1.0, 0, 0.2] @@ -99,7 +101,7 @@ integrator = init(prob, DABDF2()) f = function (out, du, u, p, t) out[1] = du[1] - u[2] out[2] = du[2] + u[3] - cos(t) - out[3] = u[1] - cos(t) + return out[3] = u[1] - cos(t) end u₀ = [1.0, 0.0, 0.0] @@ -108,25 +110,29 @@ tspan = (0.0, 1.0) differential_vars = [true, true, false] prob = DAEProblem(f, du₀, u₀, tspan, differential_vars = differential_vars) integrator = init( - prob, DABDF2(); initializealg = OrdinaryDiffEqNonlinearSolve.ShampineCollocationInit()) + prob, DABDF2(); initializealg = OrdinaryDiffEqNonlinearSolve.ShampineCollocationInit() +) -@test integrator.du[1]≈0.0 atol=1e-9 -@test_broken integrator.du[2]≈-1.0 atol=1e-9 -@test_broken integrator.u[3]≈2.0 atol=1e-9 +@test integrator.du[1] ≈ 0.0 atol = 1.0e-9 +@test_broken integrator.du[2] ≈ -1.0 atol = 1.0e-9 +@test_broken integrator.u[3] ≈ 2.0 atol = 1.0e-9 struct UnusedParam end # test iip dae initialization with parameters without eltype/length probp = DAEProblem(f, du₀, u₀, tspan, UnusedParam(), differential_vars = differential_vars) -for initializealg in (OrdinaryDiffEqNonlinearSolve.ShampineCollocationInit(), - OrdinaryDiffEqNonlinearSolve.BrownFullBasicInit()) +for initializealg in ( + OrdinaryDiffEqNonlinearSolve.ShampineCollocationInit(), + OrdinaryDiffEqNonlinearSolve.BrownFullBasicInit(), + ) @test isapprox( - init(probp, DABDF2(); initializealg).u, init(prob, DABDF2(); initializealg).u) + init(probp, DABDF2(); initializealg).u, init(prob, DABDF2(); initializealg).u + ) end f = function (du, u, p, t) - du - u + return du - u end u₀ = SVector(1.0) @@ -136,10 +142,10 @@ differential_vars = SVector(true) prob = DAEProblem(f, du₀, u₀, tspan, differential_vars = differential_vars) integrator = init(prob, DABDF2()) -@test integrator.du≈[1.0] atol=1e-9 +@test integrator.du ≈ [1.0] atol = 1.0e-9 f = function (du, u, p, t) - du .- u + return du .- u end u₀ = SA[1.0, 1.0] @@ -149,12 +155,15 @@ differential_vars = [true, true] prob = DAEProblem(f, du₀, u₀, tspan, differential_vars = differential_vars) integrator = init(prob, DABDF2()) -@test integrator.du[1]≈1.0 atol=1e-9 -@test integrator.du[2]≈1.0 atol=1e-9 +@test integrator.du[1] ≈ 1.0 atol = 1.0e-9 +@test integrator.du[2] ≈ 1.0 atol = 1.0e-9 # test oop DAE initialization with parameters without eltype/length probp = DAEProblem(f, du₀, u₀, tspan, UnusedParam(), differential_vars = differential_vars) -for initializealg in (OrdinaryDiffEqNonlinearSolve.ShampineCollocationInit(), - OrdinaryDiffEqNonlinearSolve.BrownFullBasicInit()) +for initializealg in ( + OrdinaryDiffEqNonlinearSolve.ShampineCollocationInit(), + OrdinaryDiffEqNonlinearSolve.BrownFullBasicInit(), + ) @test isapprox( - init(probp, DABDF2(); initializealg).u, init(prob, DABDF2(); initializealg).u) + init(probp, DABDF2(); initializealg).u, init(prob, DABDF2(); initializealg).u + ) end diff --git a/lib/OrdinaryDiffEqBDF/test/inference_tests.jl b/lib/OrdinaryDiffEqBDF/test/inference_tests.jl index 58ac2bba75..101187647a 100644 --- a/lib/OrdinaryDiffEqBDF/test/inference_tests.jl +++ b/lib/OrdinaryDiffEqBDF/test/inference_tests.jl @@ -2,17 +2,22 @@ using OrdinaryDiffEqBDF, ADTypes, Test using NonlinearSolve: TrustRegion prob = ODEProblem((du, u, p, t) -> du .= u, zeros(1), (0.0, 1.0)) -nlalg = FBDF(autodiff = false, - nlsolve = OrdinaryDiffEqBDF.NonlinearSolveAlg(TrustRegion(autodiff = AutoFiniteDiff()))) +nlalg = FBDF( + autodiff = false, + nlsolve = OrdinaryDiffEqBDF.NonlinearSolveAlg(TrustRegion(autodiff = AutoFiniteDiff())) +) basicalg = FBDF(autodiff = false) basicalgad = FBDF() nlsolver = @inferred OrdinaryDiffEqBDF.build_nlsolver( basicalg, prob.u0, prob.u0, prob.p, 0.0, 0.0, prob.f, prob.u0, Float64, - Float64, Float64, 0.0, 0.0, Val(true)) + Float64, Float64, 0.0, 0.0, Val(true) +) nlsolver = @inferred OrdinaryDiffEqBDF.build_nlsolver( nlalg, prob.u0, prob.u0, prob.p, 0.0, 0.0, prob.f, prob.u0, Float64, - Float64, Float64, 0.0, 0.0, Val(true)) + Float64, Float64, 0.0, 0.0, Val(true) +) nlsolver = @test_throws Any @inferred OrdinaryDiffEqBDF.build_nlsolver( basicalgad, prob.u0, prob.u0, prob.p, 0.0, 0.0, prob.f, prob.u0, Float64, - Float64, Float64, 0.0, 0.0, Val(true)) + Float64, Float64, 0.0, 0.0, Val(true) +) diff --git a/lib/OrdinaryDiffEqBDF/test/jet.jl b/lib/OrdinaryDiffEqBDF/test/jet.jl index 42cd320a0e..ded17e17e3 100644 --- a/lib/OrdinaryDiffEqBDF/test/jet.jl +++ b/lib/OrdinaryDiffEqBDF/test/jet.jl @@ -8,16 +8,17 @@ using Test @testset "JET Tests" begin # Test package for typos - now passing test_package( - OrdinaryDiffEqBDF, target_defined_modules = true, mode = :typo) - + OrdinaryDiffEqBDF, target_defined_modules = true, mode = :typo + ) + # Test individual solver type stability @testset "Solver Type Stability Tests" begin # Test problem - use a simple linear problem for stiff solvers linear_prob = ODEProblem((u, p, t) -> -u, 1.0, (0.0, 1.0)) - + # Split problem for SBDF solvers (which require SplitODEProblem) split_prob = SplitODEProblem((u, p, t) -> -u, (u, p, t) -> 0.0, 1.0, (0.0, 1.0)) - + # DAE problem for DAE solvers function simple_dae!(resid, du, u, p, t) resid[1] = -u[1] - du[1] @@ -25,49 +26,51 @@ using Test u0 = [1.0] du0 = [-1.0] dae_prob = DAEProblem(simple_dae!, du0, u0, (0.0, 1.0)) - + # Regular BDF solvers (ODEProblem) - regular_bdf_solvers = [ABDF2(), QNDF1(), QBDF1(), QNDF2(), QBDF2(), QNDF(), QBDF(), FBDF(), - MEBDF2(), IMEXEuler(), IMEXEulerARK()] - + regular_bdf_solvers = [ + ABDF2(), QNDF1(), QBDF1(), QNDF2(), QBDF2(), QNDF(), QBDF(), FBDF(), + MEBDF2(), IMEXEuler(), IMEXEulerARK(), + ] + # DAE solvers (DAEProblem) dae_solvers = [DABDF2(), DImplicitEuler(), DFBDF()] - + # Test SBDF solvers separately with required order parameter and SplitODEProblem - sbdf_solvers = [SBDF(order=2), SBDF(order=3), SBDF(order=4), SBDF2(), SBDF3(), SBDF4()] - + sbdf_solvers = [SBDF(order = 2), SBDF(order = 3), SBDF(order = 4), SBDF2(), SBDF3(), SBDF4()] + for solver in regular_bdf_solvers @testset "$(typeof(solver)) type stability" begin try - @test_opt broken=true init(linear_prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) - integrator = init(linear_prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) - @test_opt broken=true step!(integrator) + @test_opt broken = true init(linear_prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) + integrator = init(linear_prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) + @test_opt broken = true step!(integrator) catch e @test_broken false # Mark as broken if solver fails to initialize println("$(typeof(solver)) failed with: $e") end end end - + for solver in dae_solvers @testset "$(typeof(solver)) DAE type stability" begin try - @test_opt broken=true init(dae_prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) - integrator = init(dae_prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) - @test_opt broken=true step!(integrator) + @test_opt broken = true init(dae_prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) + integrator = init(dae_prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) + @test_opt broken = true step!(integrator) catch e @test_broken false # Mark as broken if solver fails to initialize println("$(typeof(solver)) failed with: $e") end end end - + for solver in sbdf_solvers @testset "$(typeof(solver)) type stability" begin try - @test_opt broken=true init(split_prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) - integrator = init(split_prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) - @test_opt broken=true step!(integrator) + @test_opt broken = true init(split_prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) + integrator = init(split_prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) + @test_opt broken = true step!(integrator) catch e @test_broken false # Mark as broken if solver fails to initialize println("$(typeof(solver)) failed with: $e") diff --git a/lib/OrdinaryDiffEqBDF/test/qa.jl b/lib/OrdinaryDiffEqBDF/test/qa.jl index 4898e74998..7f2b04a54d 100644 --- a/lib/OrdinaryDiffEqBDF/test/qa.jl +++ b/lib/OrdinaryDiffEqBDF/test/qa.jl @@ -3,6 +3,6 @@ using Aqua @testset "Aqua" begin Aqua.test_all( - OrdinaryDiffEqBDF; + OrdinaryDiffEqBDF ) end diff --git a/lib/OrdinaryDiffEqBDF/test/runtests.jl b/lib/OrdinaryDiffEqBDF/test/runtests.jl index a52df2b4a2..b818145a95 100644 --- a/lib/OrdinaryDiffEqBDF/test/runtests.jl +++ b/lib/OrdinaryDiffEqBDF/test/runtests.jl @@ -14,4 +14,4 @@ if isempty(VERSION.prerelease) @time @safetestset "JET Tests" include("jet.jl") @time @safetestset "Aqua" include("qa.jl") @time @safetestset "Allocation Tests" include("allocation_tests.jl") -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqCore/ext/OrdinaryDiffEqCoreEnzymeCoreExt.jl b/lib/OrdinaryDiffEqCore/ext/OrdinaryDiffEqCoreEnzymeCoreExt.jl index 20537ea033..a39df226cf 100644 --- a/lib/OrdinaryDiffEqCore/ext/OrdinaryDiffEqCoreEnzymeCoreExt.jl +++ b/lib/OrdinaryDiffEqCore/ext/OrdinaryDiffEqCoreEnzymeCoreExt.jl @@ -2,38 +2,46 @@ module OrdinaryDiffEqCoreEnzymeCoreExt import OrdinaryDiffEqCore, EnzymeCore function EnzymeCore.EnzymeRules.inactive_noinl( - ::typeof(OrdinaryDiffEqCore.increment_nf!), args...) - true + ::typeof(OrdinaryDiffEqCore.increment_nf!), args... + ) + return true end function EnzymeCore.EnzymeRules.inactive_noinl( - ::typeof(OrdinaryDiffEqCore.fixed_t_for_floatingpoint_error!), args...) - true + ::typeof(OrdinaryDiffEqCore.fixed_t_for_floatingpoint_error!), args... + ) + return true end function EnzymeCore.EnzymeRules.inactive_noinl( - ::typeof(OrdinaryDiffEqCore.increment_accept!), args...) - true + ::typeof(OrdinaryDiffEqCore.increment_accept!), args... + ) + return true end function EnzymeCore.EnzymeRules.inactive_noinl( - ::typeof(OrdinaryDiffEqCore.increment_reject!), args...) - true + ::typeof(OrdinaryDiffEqCore.increment_reject!), args... + ) + return true end function EnzymeCore.EnzymeRules.inactive_noinl( - ::typeof(OrdinaryDiffEqCore.check_error!), args...) - true + ::typeof(OrdinaryDiffEqCore.check_error!), args... + ) + return true end function EnzymeCore.EnzymeRules.inactive_noinl( - ::typeof(OrdinaryDiffEqCore.log_step!), args...) - true + ::typeof(OrdinaryDiffEqCore.log_step!), args... + ) + return true end function EnzymeCore.EnzymeRules.inactive_noinl( - ::typeof(OrdinaryDiffEqCore.final_progress), args...) - true + ::typeof(OrdinaryDiffEqCore.final_progress), args... + ) + return true end function EnzymeCore.EnzymeRules.inactive_noinl( - ::typeof(OrdinaryDiffEqCore.ode_determine_initdt), args...) - true + ::typeof(OrdinaryDiffEqCore.ode_determine_initdt), args... + ) + return true end end diff --git a/lib/OrdinaryDiffEqCore/ext/OrdinaryDiffEqCoreMooncakeExt.jl b/lib/OrdinaryDiffEqCore/ext/OrdinaryDiffEqCoreMooncakeExt.jl index d328f9516d..e6b8fd7ded 100644 --- a/lib/OrdinaryDiffEqCore/ext/OrdinaryDiffEqCoreMooncakeExt.jl +++ b/lib/OrdinaryDiffEqCore/ext/OrdinaryDiffEqCoreMooncakeExt.jl @@ -4,12 +4,16 @@ using OrdinaryDiffEqCore, Mooncake using Mooncake: @zero_adjoint, MinimalCtx Mooncake.@zero_adjoint Mooncake.MinimalCtx Tuple{ typeof(OrdinaryDiffEqCore.ode_determine_initdt), - Any, Any, Any, Any, Any, Any, Any, Any, Any} + Any, Any, Any, Any, Any, Any, Any, Any, Any, +} Mooncake.@zero_adjoint Mooncake.MinimalCtx Tuple{ - typeof(OrdinaryDiffEqCore.SciMLBase.check_error), Any} + typeof(OrdinaryDiffEqCore.SciMLBase.check_error), Any, +} Mooncake.@zero_adjoint Mooncake.MinimalCtx Tuple{ - typeof(OrdinaryDiffEqCore.fixed_t_for_floatingpoint_error!), Any, Any} + typeof(OrdinaryDiffEqCore.fixed_t_for_floatingpoint_error!), Any, Any, +} Mooncake.@zero_adjoint Mooncake.MinimalCtx Tuple{ - typeof(OrdinaryDiffEqCore.final_progress), Any} + typeof(OrdinaryDiffEqCore.final_progress), Any, +} end diff --git a/lib/OrdinaryDiffEqCore/src/OrdinaryDiffEqCore.jl b/lib/OrdinaryDiffEqCore/src/OrdinaryDiffEqCore.jl index 3899cee21e..323abaaee2 100644 --- a/lib/OrdinaryDiffEqCore/src/OrdinaryDiffEqCore.jl +++ b/lib/OrdinaryDiffEqCore/src/OrdinaryDiffEqCore.jl @@ -1,7 +1,7 @@ module OrdinaryDiffEqCore if isdefined(Base, :Experimental) && - isdefined(Base.Experimental, Symbol("@max_methods")) + isdefined(Base.Experimental, Symbol("@max_methods")) @eval Base.Experimental.@max_methods 1 end @@ -32,13 +32,13 @@ import DiffEqBase: DefaultInit, ShampineCollocationInit, BrownFullBasicInit # Internal utils import DiffEqBase: ODE_DEFAULT_NORM, - ODE_DEFAULT_ISOUTOFDOMAIN, ODE_DEFAULT_PROG_MESSAGE, - ODE_DEFAULT_UNSTABLE_CHECK + ODE_DEFAULT_ISOUTOFDOMAIN, ODE_DEFAULT_PROG_MESSAGE, + ODE_DEFAULT_UNSTABLE_CHECK import SciMLOperators: AbstractSciMLOperator, AbstractSciMLScalarOperator, - MatrixOperator, FunctionOperator, - update_coefficients, update_coefficients!, DEFAULT_UPDATE_FUNC, - isconstant + MatrixOperator, FunctionOperator, + update_coefficients, update_coefficients!, DEFAULT_UPDATE_FUNC, + isconstant using DiffEqBase: DEIntegrator @@ -52,17 +52,17 @@ using ArrayInterface: ArrayInterface, issingular import TruncatedStacktraces: @truncate_stacktrace, VERBOSE_MSG import StaticArraysCore: SArray, MVector, SVector, StaticArray, MMatrix, - StaticMatrix + StaticMatrix # Integrator Interface import SciMLBase: resize!, deleteat!, addat!, full_cache, user_cache, u_cache, du_cache, - resize_non_user_cache!, deleteat_non_user_cache!, addat_non_user_cache!, - terminate!, get_du, get_dt, get_proposed_dt, set_proposed_dt!, - u_modified!, savevalues!, - add_tstop!, has_tstop, first_tstop, pop_tstop!, - add_saveat!, set_reltol!, - set_abstol!, postamble!, last_step_failed, - isautodifferentiable + resize_non_user_cache!, deleteat_non_user_cache!, addat_non_user_cache!, + terminate!, get_du, get_dt, get_proposed_dt, set_proposed_dt!, + u_modified!, savevalues!, + add_tstop!, has_tstop, first_tstop, pop_tstop!, + add_saveat!, set_reltol!, + set_abstol!, postamble!, last_step_failed, + isautodifferentiable import DiffEqBase: get_tstops, get_tstops_array, get_tstops_max using DiffEqBase: check_error!, @def, _vec, _reshape @@ -70,15 +70,15 @@ using DiffEqBase: check_error!, @def, _vec, _reshape using FastBroadcast: @.., True, False using SciMLBase: NoInit, CheckInit, OverrideInit, AbstractDEProblem, _unwrap_val, - ODEAliasSpecifier + ODEAliasSpecifier import SciMLBase: AbstractNonlinearProblem, alg_order, LinearAliasSpecifier import SciMLBase: unwrap_cache, - islinear + islinear import DiffEqBase: calculate_residuals, - calculate_residuals!, @tight_loop_macros, - timedepentdtmin + calculate_residuals!, @tight_loop_macros, + timedepentdtmin import Polyester # MacroTools and Adapt imported but not directly used in OrdinaryDiffEqCore diff --git a/lib/OrdinaryDiffEqCore/src/alg_utils.jl b/lib/OrdinaryDiffEqCore/src/alg_utils.jl index 4539082cbb..af256a26c8 100644 --- a/lib/OrdinaryDiffEqCore/src/alg_utils.jl +++ b/lib/OrdinaryDiffEqCore/src/alg_utils.jl @@ -1,18 +1,25 @@ ## SciMLBase Trait Definitions function SciMLBase.isautodifferentiable(alg::Union{OrdinaryDiffEqAlgorithm, DAEAlgorithm}) - true + return true end -function SciMLBase.allows_arbitrary_number_types(alg::Union{ - OrdinaryDiffEqAlgorithm, DAEAlgorithm}) - true +function SciMLBase.allows_arbitrary_number_types( + alg::Union{ + OrdinaryDiffEqAlgorithm, DAEAlgorithm, + } + ) + return true end function SciMLBase.allowscomplex(alg::Union{OrdinaryDiffEqAlgorithm, DAEAlgorithm}) - true + return true end -function SciMLBase.forwarddiffs_model(alg::Union{OrdinaryDiffEqAdaptiveImplicitAlgorithm, - DAEAlgorithm, - OrdinaryDiffEqImplicitAlgorithm, ExponentialAlgorithm}) - alg_autodiff(alg) isa AutoForwardDiff +function SciMLBase.forwarddiffs_model( + alg::Union{ + OrdinaryDiffEqAdaptiveImplicitAlgorithm, + DAEAlgorithm, + OrdinaryDiffEqImplicitAlgorithm, ExponentialAlgorithm, + } + ) + return alg_autodiff(alg) isa AutoForwardDiff end SciMLBase.forwarddiffs_model_time(alg::RosenbrockAlgorithm) = true @@ -45,7 +52,7 @@ has_stiff_interpolation(alg) = false # evaluates f(t[i]) _eval_index(f::F, t::Tuple{A}, _) where {F, A} = f(t[1]) function _eval_index(f::F, t::Tuple{A, Vararg}, i) where {F, A} - if i == 1 + return if i == 1 f(t[1]) else _eval_index(f, Base.tail(t), i - 1) @@ -53,23 +60,27 @@ function _eval_index(f::F, t::Tuple{A, Vararg}, i) where {F, A} end function get_current_isfsal(alg::CompositeAlgorithm, cache) - _eval_index(isfsal, alg.algs, cache.current)::Bool + return _eval_index(isfsal, alg.algs, cache.current)::Bool end all_fsal(alg, cache) = isfsal(alg) all_fsal(alg::CompositeAlgorithm, cache) = _all_fsal(alg.algs) @generated function _all_fsal(algs::T) where {T <: Tuple} - ex = Expr(:tuple, map(1:length(T.types)) do i - :(isfsal(algs[$i])) - end...) - :(all($ex)) + ex = Expr( + :tuple, map(1:length(T.types)) do i + :(isfsal(algs[$i])) + end... + ) + return :(all($ex)) end issplit(alg::Union{OrdinaryDiffEqAlgorithm, DAEAlgorithm}) = false -function _composite_beta1_default(algs::Tuple{T1, T2}, current, ::Val{QT}, - beta2) where {T1, T2, QT} +function _composite_beta1_default( + algs::Tuple{T1, T2}, current, ::Val{QT}, + beta2 + ) where {T1, T2, QT} if current == 1 return QT(beta1_default(algs[1], beta2)) else @@ -77,21 +88,27 @@ function _composite_beta1_default(algs::Tuple{T1, T2}, current, ::Val{QT}, end end -@generated function _composite_beta1_default(algs::T, current, ::Val{QT}, - beta2) where {T <: Tuple, QT} +@generated function _composite_beta1_default( + algs::T, current, ::Val{QT}, + beta2 + ) where {T <: Tuple, QT} expr = Expr(:block) for i in 1:length(T.types) - push!(expr.args, quote - if current == $i - return QT(beta1_default(algs[$i], beta2)) + push!( + expr.args, quote + if current == $i + return QT(beta1_default(algs[$i], beta2)) + end end - end) + ) end return expr end -function _composite_beta2_default(algs::Tuple{T1, T2}, current, - ::Val{QT}) where {T1, T2, QT} +function _composite_beta2_default( + algs::Tuple{T1, T2}, current, + ::Val{QT} + ) where {T1, T2, QT} if current == 1 return QT(beta2_default(algs[1])) else @@ -99,26 +116,30 @@ function _composite_beta2_default(algs::Tuple{T1, T2}, current, end end -@generated function _composite_beta2_default(algs::T, current, - ::Val{QT}) where {T <: Tuple, QT} +@generated function _composite_beta2_default( + algs::T, current, + ::Val{QT} + ) where {T <: Tuple, QT} expr = Expr(:block) for i in 1:length(T.types) - push!(expr.args, quote - if current == $i - return QT(beta2_default(algs[$i])) + push!( + expr.args, quote + if current == $i + return QT(beta2_default(algs[$i])) + end end - end) + ) end return expr end function fsal_typeof(alg::Union{OrdinaryDiffEqAlgorithm, DAEAlgorithm}, rate_prototype) - typeof(rate_prototype) + return typeof(rate_prototype) end function fsal_typeof(alg::CompositeAlgorithm, rate_prototype) fsal = map(x -> fsal_typeof(x, rate_prototype), alg.algs) - @assert length(unique(fsal))==1 "`fsal_typeof` must be consistent" + @assert length(unique(fsal)) == 1 "`fsal_typeof` must be consistent" return fsal[1] end @@ -153,7 +174,7 @@ isdp8(alg) = false isdefaultalg(alg) = false function qmin_default(alg::Union{OrdinaryDiffEqAlgorithm, DAEAlgorithm}) - isadaptive(alg) ? 1 // 5 : 0 + return isadaptive(alg) ? 1 // 5 : 0 end qmin_default(alg::CompositeAlgorithm) = maximum(qmin_default.(alg.algs)) @@ -161,12 +182,14 @@ qmax_default(alg::Union{OrdinaryDiffEqAlgorithm, DAEAlgorithm}) = 10 qmax_default(alg::CompositeAlgorithm) = minimum(qmax_default.(alg.algs)) function has_chunksize(alg::OrdinaryDiffEqAlgorithm) - return alg isa Union{OrdinaryDiffEqExponentialAlgorithm, + return alg isa Union{ + OrdinaryDiffEqExponentialAlgorithm, OrdinaryDiffEqAdaptiveExponentialAlgorithm, OrdinaryDiffEqImplicitAlgorithm, OrdinaryDiffEqAdaptiveImplicitAlgorithm, DAEAlgorithm, - CompositeAlgorithm} + CompositeAlgorithm, + } end function get_chunksize(alg::OrdinaryDiffEqAlgorithm) error("This algorithm does not have a chunk size defined.") @@ -182,27 +205,34 @@ _get_fwd_tag(::AutoForwardDiff{CS, T}) where {CS, T} = T _get_fdtype(::AutoFiniteDiff{T1}) where {T1} = T1 _get_fdtype(::Type{<:AutoFiniteDiff{T1}}) where {T1} = T1 -function get_chunksize(alg::Union{OrdinaryDiffEqExponentialAlgorithm{CS, AD}, - OrdinaryDiffEqAdaptiveExponentialAlgorithm{CS, AD}, - OrdinaryDiffEqImplicitAlgorithm{CS, AD}, - OrdinaryDiffEqAdaptiveImplicitAlgorithm{CS, AD}, - DAEAlgorithm{CS, AD}, - CompositeAlgorithm{CS, AD}}) where {CS, AD} - _get_fwd_chunksize(AD) +function get_chunksize( + alg::Union{ + OrdinaryDiffEqExponentialAlgorithm{CS, AD}, + OrdinaryDiffEqAdaptiveExponentialAlgorithm{CS, AD}, + OrdinaryDiffEqImplicitAlgorithm{CS, AD}, + OrdinaryDiffEqAdaptiveImplicitAlgorithm{CS, AD}, + DAEAlgorithm{CS, AD}, + CompositeAlgorithm{CS, AD}, + } + ) where {CS, AD} + return _get_fwd_chunksize(AD) end function get_chunksize_int(alg::OrdinaryDiffEqAlgorithm) error("This algorithm does not have a chunk size defined.") end -function get_chunksize_int(alg::Union{ - OrdinaryDiffEqExponentialAlgorithm{CS}, - OrdinaryDiffEqAdaptiveExponentialAlgorithm{CS}, - OrdinaryDiffEqImplicitAlgorithm{CS, AD}, - OrdinaryDiffEqAdaptiveImplicitAlgorithm{CS, AD}, - DAEAlgorithm{CS, AD}, - CompositeAlgorithm{CS, AD}}) where {CS, AD} - _get_fwd_chunksize_int(AD) +function get_chunksize_int( + alg::Union{ + OrdinaryDiffEqExponentialAlgorithm{CS}, + OrdinaryDiffEqAdaptiveExponentialAlgorithm{CS}, + OrdinaryDiffEqImplicitAlgorithm{CS, AD}, + OrdinaryDiffEqAdaptiveImplicitAlgorithm{CS, AD}, + DAEAlgorithm{CS, AD}, + CompositeAlgorithm{CS, AD}, + } + ) where {CS, AD} + return _get_fwd_chunksize_int(AD) end # get_chunksize(alg::CompositeAlgorithm) = get_chunksize(alg.algs[alg.current_alg]) @@ -213,20 +243,24 @@ function alg_autodiff end function DiffEqBase.prepare_alg( alg::OrdinaryDiffEqLinearExponentialAlgorithm, u0::AbstractArray, - p, prob) - alg + p, prob + ) + return alg end function DiffEqBase.prepare_alg(alg::CompositeAlgorithm, u0, p, prob) algs = map(alg -> DiffEqBase.prepare_alg(alg, u0, p, prob), alg.algs) - CompositeAlgorithm(algs, alg.choice_function) + return CompositeAlgorithm(algs, alg.choice_function) end has_autodiff(alg::OrdinaryDiffEqAlgorithm) = false -function has_autodiff(alg::Union{ - OrdinaryDiffEqAdaptiveImplicitAlgorithm, OrdinaryDiffEqImplicitAlgorithm, - CompositeAlgorithm, OrdinaryDiffEqExponentialAlgorithm, DAEAlgorithm}) - true +function has_autodiff( + alg::Union{ + OrdinaryDiffEqAdaptiveImplicitAlgorithm, OrdinaryDiffEqImplicitAlgorithm, + CompositeAlgorithm, OrdinaryDiffEqExponentialAlgorithm, DAEAlgorithm, + } + ) + return true end # end @@ -234,43 +268,67 @@ end # alg_autodiff(alg::CompositeAlgorithm) = alg_autodiff(alg.algs[alg.current_alg]) get_current_alg_autodiff(alg, cache) = alg_autodiff(alg) function get_current_alg_autodiff(alg::CompositeAlgorithm, cache) - _eval_index(alg_autodiff, alg.algs, cache.current)::Bool -end - -function alg_difftype(alg::Union{ - OrdinaryDiffEqAdaptiveImplicitAlgorithm{CS, AD, FDT, ST, CJ - }, - OrdinaryDiffEqImplicitAlgorithm{CS, AD, FDT, ST, CJ}, - OrdinaryDiffEqExponentialAlgorithm{CS, AD, FDT, ST, CJ}, - OrdinaryDiffEqAdaptiveExponentialAlgorithm{CS, AD, FDT, ST, - CJ}, - DAEAlgorithm{CS, AD, FDT, ST, CJ}}) where {CS, AD, FDT, ST, - CJ} - _get_fdtype(AD) -end - -function standardtag(alg::Union{ - OrdinaryDiffEqAdaptiveImplicitAlgorithm{CS, AD, FDT, ST, CJ - }, - OrdinaryDiffEqImplicitAlgorithm{CS, AD, FDT, ST, CJ}, - OrdinaryDiffEqExponentialAlgorithm{CS, AD, FDT, ST, CJ}, - OrdinaryDiffEqAdaptiveExponentialAlgorithm{CS, AD, FDT, ST, - CJ}, - DAEAlgorithm{CS, AD, FDT, ST, CJ}}) where {CS, AD, FDT, ST, - CJ} - ST -end - -function concrete_jac(alg::Union{ - OrdinaryDiffEqAdaptiveImplicitAlgorithm{CS, AD, FDT, ST, CJ - }, - OrdinaryDiffEqImplicitAlgorithm{CS, AD, FDT, ST, CJ}, - OrdinaryDiffEqExponentialAlgorithm{CS, AD, FDT, ST, CJ}, - OrdinaryDiffEqAdaptiveExponentialAlgorithm{CS, AD, FDT, ST, - CJ}, - DAEAlgorithm{CS, AD, FDT, ST, CJ}}) where {CS, AD, FDT, ST, - CJ} - CJ + return _eval_index(alg_autodiff, alg.algs, cache.current)::Bool +end + +function alg_difftype( + alg::Union{ + OrdinaryDiffEqAdaptiveImplicitAlgorithm{ + CS, AD, FDT, ST, CJ, + }, + OrdinaryDiffEqImplicitAlgorithm{CS, AD, FDT, ST, CJ}, + OrdinaryDiffEqExponentialAlgorithm{CS, AD, FDT, ST, CJ}, + OrdinaryDiffEqAdaptiveExponentialAlgorithm{ + CS, AD, FDT, ST, + CJ, + }, + DAEAlgorithm{CS, AD, FDT, ST, CJ}, + } + ) where { + CS, AD, FDT, ST, + CJ, + } + return _get_fdtype(AD) +end + +function standardtag( + alg::Union{ + OrdinaryDiffEqAdaptiveImplicitAlgorithm{ + CS, AD, FDT, ST, CJ, + }, + OrdinaryDiffEqImplicitAlgorithm{CS, AD, FDT, ST, CJ}, + OrdinaryDiffEqExponentialAlgorithm{CS, AD, FDT, ST, CJ}, + OrdinaryDiffEqAdaptiveExponentialAlgorithm{ + CS, AD, FDT, ST, + CJ, + }, + DAEAlgorithm{CS, AD, FDT, ST, CJ}, + } + ) where { + CS, AD, FDT, ST, + CJ, + } + return ST +end + +function concrete_jac( + alg::Union{ + OrdinaryDiffEqAdaptiveImplicitAlgorithm{ + CS, AD, FDT, ST, CJ, + }, + OrdinaryDiffEqImplicitAlgorithm{CS, AD, FDT, ST, CJ}, + OrdinaryDiffEqExponentialAlgorithm{CS, AD, FDT, ST, CJ}, + OrdinaryDiffEqAdaptiveExponentialAlgorithm{ + CS, AD, FDT, ST, + CJ, + }, + DAEAlgorithm{CS, AD, FDT, ST, CJ}, + } + ) where { + CS, AD, FDT, ST, + CJ, + } + return CJ end alg_extrapolates(alg::Union{OrdinaryDiffEqAlgorithm, DAEAlgorithm}) = false @@ -281,24 +339,26 @@ end alg_order(alg::CompositeAlgorithm) = maximum(alg_order, alg.algs) function get_current_alg_order(alg::Union{OrdinaryDiffEqAlgorithm, DAEAlgorithm}, cache) - alg_order(alg) + return alg_order(alg) end function get_current_alg_order(alg::CompositeAlgorithm, cache) - _eval_index(alg_order, alg.algs, cache.current)::Int + return _eval_index(alg_order, alg.algs, cache.current)::Int end get_current_alg_order(alg::OrdinaryDiffEqAdamsVarOrderVarStepAlgorithm, cache) = cache.order function get_current_adaptive_order(alg::OrdinaryDiffEqAdamsVarOrderVarStepAlgorithm, cache) - cache.order + return cache.order end #alg_adaptive_order(alg::OrdinaryDiffEqAdaptiveAlgorithm) = error("Algorithm is adaptive with no order") -function get_current_adaptive_order(alg::Union{OrdinaryDiffEqAlgorithm, DAEAlgorithm}, - cache) - alg_adaptive_order(alg) +function get_current_adaptive_order( + alg::Union{OrdinaryDiffEqAlgorithm, DAEAlgorithm}, + cache + ) + return alg_adaptive_order(alg) end function get_current_adaptive_order(alg::CompositeAlgorithm, cache) - _eval_index(alg_adaptive_order, alg.algs, cache.current)::Int + return _eval_index(alg_adaptive_order, alg.algs, cache.current)::Int end alg_maximum_order(alg) = alg_order(alg) @@ -326,9 +386,9 @@ end function _digest_beta1_beta2(alg, cache, ::Val{QT}, _beta1, _beta2) where {QT} if alg isa OrdinaryDiffEqCompositeAlgorithm beta2 = _beta2 === nothing ? - _composite_beta2_default(alg.algs, cache.current, Val(QT)) : _beta2 + _composite_beta2_default(alg.algs, cache.current, Val(QT)) : _beta2 beta1 = _beta1 === nothing ? - _composite_beta1_default(alg.algs, cache.current, Val(QT), beta2) : _beta1 + _composite_beta1_default(alg.algs, cache.current, Val(QT), beta2) : _beta1 else beta2 = _beta2 === nothing ? beta2_default(alg) : _beta2 beta1 = _beta1 === nothing ? beta1_default(alg, beta2) : _beta1 @@ -338,15 +398,15 @@ end # other special cases in controllers.jl function beta2_default(alg::Union{OrdinaryDiffEqAlgorithm, DAEAlgorithm}) - isadaptive(alg) ? 2 // (5alg_order(alg)) : 0 + return isadaptive(alg) ? 2 // (5alg_order(alg)) : 0 end function beta1_default(alg::Union{OrdinaryDiffEqAlgorithm, DAEAlgorithm}, beta2) - isadaptive(alg) ? 7 // (10alg_order(alg)) : 0 + return isadaptive(alg) ? 7 // (10alg_order(alg)) : 0 end function gamma_default(alg::Union{OrdinaryDiffEqAlgorithm, DAEAlgorithm}) - isadaptive(alg) ? 9 // 10 : 0 + return isadaptive(alg) ? 9 // 10 : 0 end gamma_default(alg::CompositeAlgorithm) = maximum(gamma_default, alg.algs) @@ -456,7 +516,7 @@ function Base.show(io::IO, ::MIME"text/plain", alg::OrdinaryDiffEqAlgorithm) for fieldname in fieldnames(typeof(alg)) print(io, " ", fieldname, " = ", getfield(alg, fieldname), ",") end - print(io, ")") + return print(io, ")") end # Defaults in the current system: currently opt out DAEAlgorithms until complete diff --git a/lib/OrdinaryDiffEqCore/src/algorithms.jl b/lib/OrdinaryDiffEqCore/src/algorithms.jl index 2a31208144..dea787aa2d 100644 --- a/lib/OrdinaryDiffEqCore/src/algorithms.jl +++ b/lib/OrdinaryDiffEqCore/src/algorithms.jl @@ -3,37 +3,43 @@ abstract type OrdinaryDiffEqAdaptiveAlgorithm <: OrdinaryDiffEqAlgorithm end abstract type OrdinaryDiffEqCompositeAlgorithm <: OrdinaryDiffEqAlgorithm end abstract type OrdinaryDiffEqAdaptiveImplicitAlgorithm{CS, AD, FDT, ST, CJ} <: - OrdinaryDiffEqAdaptiveAlgorithm end +OrdinaryDiffEqAdaptiveAlgorithm end abstract type OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} <: - OrdinaryDiffEqAdaptiveImplicitAlgorithm{CS, AD, FDT, ST, CJ} end +OrdinaryDiffEqAdaptiveImplicitAlgorithm{CS, AD, FDT, ST, CJ} end abstract type OrdinaryDiffEqRosenbrockAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} <: - OrdinaryDiffEqAdaptiveImplicitAlgorithm{CS, AD, FDT, ST, CJ} end +OrdinaryDiffEqAdaptiveImplicitAlgorithm{CS, AD, FDT, ST, CJ} end abstract type OrdinaryDiffEqImplicitAlgorithm{CS, AD, FDT, ST, CJ} <: - OrdinaryDiffEqAlgorithm end +OrdinaryDiffEqAlgorithm end abstract type OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} <: - OrdinaryDiffEqImplicitAlgorithm{CS, AD, FDT, ST, CJ} end +OrdinaryDiffEqImplicitAlgorithm{CS, AD, FDT, ST, CJ} end abstract type OrdinaryDiffEqRosenbrockAlgorithm{CS, AD, FDT, ST, CJ} <: - OrdinaryDiffEqImplicitAlgorithm{CS, AD, FDT, ST, CJ} end -const NewtonAlgorithm = Union{OrdinaryDiffEqNewtonAlgorithm, - OrdinaryDiffEqNewtonAdaptiveAlgorithm} -const RosenbrockAlgorithm = Union{OrdinaryDiffEqRosenbrockAlgorithm, - OrdinaryDiffEqRosenbrockAdaptiveAlgorithm} +OrdinaryDiffEqImplicitAlgorithm{CS, AD, FDT, ST, CJ} end +const NewtonAlgorithm = Union{ + OrdinaryDiffEqNewtonAlgorithm, + OrdinaryDiffEqNewtonAdaptiveAlgorithm, +} +const RosenbrockAlgorithm = Union{ + OrdinaryDiffEqRosenbrockAlgorithm, + OrdinaryDiffEqRosenbrockAdaptiveAlgorithm, +} abstract type OrdinaryDiffEqExponentialAlgorithm{CS, AD, FDT, ST, CJ} <: - OrdinaryDiffEqAlgorithm end +OrdinaryDiffEqAlgorithm end abstract type OrdinaryDiffEqAdaptiveExponentialAlgorithm{CS, AD, FDT, ST, CJ} <: - OrdinaryDiffEqAdaptiveAlgorithm end +OrdinaryDiffEqAdaptiveAlgorithm end abstract type OrdinaryDiffEqLinearExponentialAlgorithm <: - OrdinaryDiffEqExponentialAlgorithm{ +OrdinaryDiffEqExponentialAlgorithm{ 0, false, Val{:forward}, Val{true}, - nothing + nothing, } end -const ExponentialAlgorithm = Union{OrdinaryDiffEqExponentialAlgorithm, - OrdinaryDiffEqAdaptiveExponentialAlgorithm} +const ExponentialAlgorithm = Union{ + OrdinaryDiffEqExponentialAlgorithm, + OrdinaryDiffEqAdaptiveExponentialAlgorithm, +} abstract type OrdinaryDiffEqAdamsVarOrderVarStepAlgorithm <: OrdinaryDiffEqAdaptiveAlgorithm end @@ -43,30 +49,39 @@ abstract type DAEAlgorithm{CS, AD, FDT, ST, CJ} <: SciMLBase.AbstractDAEAlgorith # Partitioned ODE Specific Algorithms abstract type OrdinaryDiffEqPartitionedAlgorithm <: OrdinaryDiffEqAlgorithm end abstract type OrdinaryDiffEqAdaptivePartitionedAlgorithm <: OrdinaryDiffEqAdaptiveAlgorithm end -const PartitionedAlgorithm = Union{OrdinaryDiffEqPartitionedAlgorithm, - OrdinaryDiffEqAdaptivePartitionedAlgorithm} +const PartitionedAlgorithm = Union{ + OrdinaryDiffEqPartitionedAlgorithm, + OrdinaryDiffEqAdaptivePartitionedAlgorithm, +} # Second order ODE Specific Algorithms abstract type OrdinaryDiffEqImplicitSecondOrderAlgorithm{CS, AD, FDT, ST, CJ} <: - OrdinaryDiffEqImplicitAlgorithm{CS, AD, FDT, ST, CJ} end +OrdinaryDiffEqImplicitAlgorithm{CS, AD, FDT, ST, CJ} end abstract type OrdinaryDiffEqAdaptiveImplicitSecondOrderAlgorithm{CS, AD, FDT, ST, CJ} <: - OrdinaryDiffEqAdaptiveImplicitAlgorithm{CS, AD, FDT, ST, CJ} end -const ImplicitSecondOrderAlgorithm = Union{OrdinaryDiffEqImplicitSecondOrderAlgorithm, - OrdinaryDiffEqAdaptiveImplicitSecondOrderAlgorithm} +OrdinaryDiffEqAdaptiveImplicitAlgorithm{CS, AD, FDT, ST, CJ} end +const ImplicitSecondOrderAlgorithm = Union{ + OrdinaryDiffEqImplicitSecondOrderAlgorithm, + OrdinaryDiffEqAdaptiveImplicitSecondOrderAlgorithm, +} function SciMLBase.remake(thing::OrdinaryDiffEqAlgorithm; kwargs...) T = SciMLBase.remaker_of(thing) - T(; SciMLBase.struct_as_namedtuple(thing)..., kwargs...) + return T(; SciMLBase.struct_as_namedtuple(thing)..., kwargs...) end function SciMLBase.remake( thing::Union{ - OrdinaryDiffEqAdaptiveImplicitAlgorithm{CS, AD, FDT, - ST, CJ}, - OrdinaryDiffEqImplicitAlgorithm{CS, AD, FDT, ST, CJ + OrdinaryDiffEqAdaptiveImplicitAlgorithm{ + CS, AD, FDT, + ST, CJ, }, - DAEAlgorithm{CS, AD, FDT, ST, CJ}}; - kwargs...) where {CS, AD, FDT, ST, CJ} + OrdinaryDiffEqImplicitAlgorithm{ + CS, AD, FDT, ST, CJ, + }, + DAEAlgorithm{CS, AD, FDT, ST, CJ}, + }; + kwargs... + ) where {CS, AD, FDT, ST, CJ} if haskey(kwargs, :autodiff) && kwargs[:autodiff] isa AutoForwardDiff chunk_size = _get_fwd_chunksize(kwargs[:autodiff]) else @@ -74,10 +89,12 @@ function SciMLBase.remake( end T = SciMLBase.remaker_of(thing) - T(; SciMLBase.struct_as_namedtuple(thing)..., + return T(; + SciMLBase.struct_as_namedtuple(thing)..., chunk_size = chunk_size, autodiff = thing.autodiff, standardtag = Val{ST}(), concrete_jac = CJ === nothing ? CJ : Val{CJ}(), - kwargs...) + kwargs... + ) end ############################################################################### @@ -117,7 +134,7 @@ struct CompositeAlgorithm{CS, T, F} <: OrdinaryDiffEqCompositeAlgorithm choice_function::F function CompositeAlgorithm(algs::T, choice_function::F) where {T, F} CS = mapreduce(alg -> 0, max, algs) - new{CS, T, F}(algs, choice_function) + return new{CS, T, F}(algs, choice_function) end end @@ -141,7 +158,8 @@ mutable struct AutoSwitchCache{nAlg, sAlg, tolType, T} stiffalgfirst::Bool switch_max::Int current::Int - function AutoSwitchCache(count::Int, + function AutoSwitchCache( + count::Int, successive_switches::Int, nonstiffalg::nAlg, stiffalg::sAlg, @@ -153,8 +171,10 @@ mutable struct AutoSwitchCache{nAlg, sAlg, tolType, T} dtfac::T, stiffalgfirst::Bool, switch_max::Int, - current::Int = 0) where {nAlg, sAlg, tolType, T} - new{nAlg, sAlg, tolType, T}(count, + current::Int = 0 + ) where {nAlg, sAlg, tolType, T} + return new{nAlg, sAlg, tolType, T}( + count, successive_switches, nonstiffalg, stiffalg, @@ -166,7 +186,8 @@ mutable struct AutoSwitchCache{nAlg, sAlg, tolType, T} dtfac, stiffalgfirst, switch_max, - current) + current + ) end end diff --git a/lib/OrdinaryDiffEqCore/src/cache_utils.jl b/lib/OrdinaryDiffEqCore/src/cache_utils.jl index 34767ee899..bac666b245 100644 --- a/lib/OrdinaryDiffEqCore/src/cache_utils.jl +++ b/lib/OrdinaryDiffEqCore/src/cache_utils.jl @@ -2,7 +2,7 @@ is_constant_cache(::OrdinaryDiffEqConstantCache) = true is_constant_cache(::OrdinaryDiffEqCache) = false is_constant_cache(cache::CompositeCache) = is_constant_cache(cache.caches[1]) function is_constant_cache(::DefaultCache{Cache1}) where {Cache1} - Cache1 <: OrdinaryDiffEqConstantCache + return Cache1 <: OrdinaryDiffEqConstantCache end function SciMLBase.unwrap_cache(integrator::ODEIntegrator, is_stiff) @@ -36,9 +36,12 @@ function SciMLBase.unwrap_cache(integrator::ODEIntegrator, is_stiff) end end -@deprecate alg_cache(alg::Union{OrdinaryDiffEqAlgorithm, DAEAlgorithm}, u, rate_prototype, +@deprecate alg_cache( + alg::Union{OrdinaryDiffEqAlgorithm, DAEAlgorithm}, u, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits, uprev, uprev2, f, - t, dt, reltol, p, calck, ::Type{Val{iip}}) where {iip} alg_cache(alg, + t, dt, reltol, p, calck, ::Type{Val{iip}} +) where {iip} alg_cache( + alg, u, rate_prototype, uEltypeNoUnits, @@ -51,4 +54,5 @@ end reltol, p, calck, - Val(iip)) + Val(iip) +) diff --git a/lib/OrdinaryDiffEqCore/src/caches/basic_caches.jl b/lib/OrdinaryDiffEqCore/src/caches/basic_caches.jl index 5b97865624..be4d49d755 100644 --- a/lib/OrdinaryDiffEqCore/src/caches/basic_caches.jl +++ b/lib/OrdinaryDiffEqCore/src/caches/basic_caches.jl @@ -17,7 +17,7 @@ mutable struct CompositeCache{T, F} <: OrdinaryDiffEqCache end function ismutablecache(cache::CompositeCache{T, F}) where {T, F} - eltype(T) <: OrdinaryDiffEqMutableCache + return eltype(T) <: OrdinaryDiffEqMutableCache end function get_fsalfirstlast(cache::CompositeCache, u) @@ -41,38 +41,52 @@ mutable struct DefaultCache{T1, T2, T3, T4, T5, T6, A, F, uType} <: OrdinaryDiff cache5::T5 cache6::T6 function DefaultCache{T1, T2, T3, T4, T5, T6, F, uType}( - args, choice_function, current, u) where {T1, T2, T3, T4, T5, T6, F, uType} - new{T1, T2, T3, T4, T5, T6, typeof(args), F, uType}( - args, choice_function, current, u) + args, choice_function, current, u + ) where {T1, T2, T3, T4, T5, T6, F, uType} + return new{T1, T2, T3, T4, T5, T6, typeof(args), F, uType}( + args, choice_function, current, u + ) end end function get_fsalfirstlast(cache::DefaultCache, u) - (cache.u, cache.u) # will be overwritten by the cache choice + return (cache.u, cache.u) # will be overwritten by the cache choice end -function ismutablecache(cache::DefaultCache{ - T1, T2, T3, T4, T5, T6, A, F, uType}) where {T1, T2, T3, T4, T5, T6, A, F, uType} - T1 <: OrdinaryDiffEqMutableCache +function ismutablecache( + cache::DefaultCache{ + T1, T2, T3, T4, T5, T6, A, F, uType, + } + ) where {T1, T2, T3, T4, T5, T6, A, F, uType} + return T1 <: OrdinaryDiffEqMutableCache end -function alg_cache(alg::CompositeAlgorithm, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CompositeAlgorithm, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{V}) where {V, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - caches = __alg_cache(alg.algs, u, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, - tTypeNoUnits, uprev, uprev2, f, t, dt, reltol, p, calck, Val(V)) - CompositeCache(caches, alg.choice_function, 1) + ::Val{V} + ) where {V, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + caches = __alg_cache( + alg.algs, u, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, + tTypeNoUnits, uprev, uprev2, f, t, dt, reltol, p, calck, Val(V) + ) + return CompositeCache(caches, alg.choice_function, 1) end -function alg_cache(alg::CompositeAlgorithm{CS, Tuple{A1, A2, A3, A4, A5, A6}}, u, +function alg_cache( + alg::CompositeAlgorithm{CS, Tuple{A1, A2, A3, A4, A5, A6}}, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{V}) where { - CS, V, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits, A1, A2, A3, A4, A5, A6} - args = (u, rate_prototype, uEltypeNoUnits, + ::Val{V} + ) where { + CS, V, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits, A1, A2, A3, A4, A5, A6, + } + args = ( + u, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits, uprev, uprev2, f, t, dt, - reltol, p, calck, Val(V)) + reltol, p, calck, Val(V), + ) # Core.Typeof to turn uEltypeNoUnits into Type{uEltypeNoUnits} rather than DataType argT = map(Core.Typeof, args) T1 = Base.promote_op(alg_cache, A1, argT...) @@ -82,7 +96,8 @@ function alg_cache(alg::CompositeAlgorithm{CS, Tuple{A1, A2, A3, A4, A5, A6}}, u T5 = Base.promote_op(alg_cache, A5, argT...) T6 = Base.promote_op(alg_cache, A6, argT...) cache = DefaultCache{T1, T2, T3, T4, T5, T6, typeof(alg.choice_function), typeof(u)}( - args, alg.choice_function, 1, u) + args, alg.choice_function, 1, u + ) algs = alg.algs # If the type is a bitstype we need to initialize it correctly here since isdefined will always return true. if isbitstype(T1) @@ -103,21 +118,31 @@ function alg_cache(alg::CompositeAlgorithm{CS, Tuple{A1, A2, A3, A4, A5, A6}}, u if isbitstype(T6) cache.cache6 = alg_cache(algs[6], args...) end - cache + return cache end # map + closure approach doesn't infer -@generated function __alg_cache(algs::T, u, rate_prototype, ::Type{uEltypeNoUnits}, +@generated function __alg_cache( + algs::T, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{V}) where {T <: Tuple, V, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits} - return Expr(:tuple, + ::Val{V} + ) where { + T <: Tuple, V, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, + } + return Expr( + :tuple, map(1:length(T.types)) do i - :(alg_cache(algs[$i], u, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, uprev, uprev2, f, t, dt, - reltol, p, calck, Val($V))) - end...) + :( + alg_cache( + algs[$i], u, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, uprev, uprev2, f, t, dt, + reltol, p, calck, Val($V) + ) + ) + end... + ) end alg_cache(alg::OrdinaryDiffEqAlgorithm, prob, callback::F) where {F} = ODEEmptyCache() diff --git a/lib/OrdinaryDiffEqCore/src/composite_algs.jl b/lib/OrdinaryDiffEqCore/src/composite_algs.jl index 6beec535d5..23605e70bb 100644 --- a/lib/OrdinaryDiffEqCore/src/composite_algs.jl +++ b/lib/OrdinaryDiffEqCore/src/composite_algs.jl @@ -1,13 +1,17 @@ ### AutoSwitch ### Designed to switch between two solvers, stiff and non-stiff -function AutoSwitch(nonstiffalg, stiffalg; +function AutoSwitch( + nonstiffalg, stiffalg; maxstiffstep = 10, maxnonstiffstep = 3, nonstifftol = 9 // 10, stifftol = 9 // 10, dtfac = 2, stiffalgfirst = false, - switch_max = 5) - AutoSwitch(nonstiffalg, stiffalg, maxstiffstep, maxnonstiffstep, - promote(nonstifftol, stifftol)..., dtfac, stiffalgfirst, switch_max) + switch_max = 5 + ) + return AutoSwitch( + nonstiffalg, stiffalg, maxstiffstep, maxnonstiffstep, + promote(nonstifftol, stifftol)..., dtfac, stiffalgfirst, switch_max + ) end function is_stiff(integrator, alg, ntol, stol, is_stiffalg) @@ -23,10 +27,12 @@ function is_stiff(integrator, alg, ntol, stol, is_stiffalg) integrator.alg.choice_function.successive_switches = 0 end - integrator.do_error_check = (integrator.alg.choice_function.successive_switches > - integrator.alg.choice_function.switch_max || !bool) || - is_stiffalg - bool + integrator.do_error_check = ( + integrator.alg.choice_function.successive_switches > + integrator.alg.choice_function.switch_max || !bool + ) || + is_stiffalg + return bool end function default_autoswitch end @@ -45,10 +51,12 @@ function (AS::AutoSwitchCache)(integrator) dt = integrator.dt # Successive stiffness test positives are counted by a positive integer, # and successive stiffness test negatives are counted by a negative integer - AS.count = is_stiff(integrator, AS.nonstiffalg, AS.nonstifftol, AS.stifftol, - AS.is_stiffalg) ? - AS.count < 0 ? 1 : AS.count + 1 : - AS.count > 0 ? -1 : AS.count - 1 + AS.count = is_stiff( + integrator, AS.nonstiffalg, AS.nonstifftol, AS.stifftol, + AS.is_stiffalg + ) ? + AS.count < 0 ? 1 : AS.count + 1 : + AS.count > 0 ? -1 : AS.count - 1 if (!AS.is_stiffalg && AS.count > AS.maxstiffstep) integrator.dt = dt * AS.dtfac AS.is_stiffalg = true @@ -61,12 +69,13 @@ function (AS::AutoSwitchCache)(integrator) end function AutoAlgSwitch( - nonstiffalg::OrdinaryDiffEqAlgorithm, stiffalg::OrdinaryDiffEqAlgorithm; kwargs...) + nonstiffalg::OrdinaryDiffEqAlgorithm, stiffalg::OrdinaryDiffEqAlgorithm; kwargs... + ) AS = AutoSwitch(nonstiffalg, stiffalg; kwargs...) - CompositeAlgorithm((nonstiffalg, stiffalg), AS) + return CompositeAlgorithm((nonstiffalg, stiffalg), AS) end function AutoAlgSwitch(nonstiffalg::Tuple, stiffalg::Tuple; kwargs...) AS = AutoSwitch(nonstiffalg, stiffalg; kwargs...) - CompositeAlgorithm((nonstiffalg..., stiffalg...), AS) + return CompositeAlgorithm((nonstiffalg..., stiffalg...), AS) end diff --git a/lib/OrdinaryDiffEqCore/src/dense/generic_dense.jl b/lib/OrdinaryDiffEqCore/src/dense/generic_dense.jl index c141a14671..a284356196 100644 --- a/lib/OrdinaryDiffEqCore/src/dense/generic_dense.jl +++ b/lib/OrdinaryDiffEqCore/src/dense/generic_dense.jl @@ -1,15 +1,15 @@ const DERIVATIVE_ORDER_NOT_POSSIBLE_MESSAGE = """ - Derivative order too high for interpolation order. An interpolation derivative is - only accurate to a certain derivative. For example, a second order interpolation - is a quadratic polynomial, and thus third derivatives cannot be computed (will be - incorrectly zero). Thus use a solver with a higher order interpolation or compute - the higher order derivative through other means. +Derivative order too high for interpolation order. An interpolation derivative is +only accurate to a certain derivative. For example, a second order interpolation +is a quadratic polynomial, and thus third derivatives cannot be computed (will be +incorrectly zero). Thus use a solver with a higher order interpolation or compute +the higher order derivative through other means. - You can find the list of available ODE/DAE solvers with their documented interpolations at: +You can find the list of available ODE/DAE solvers with their documented interpolations at: - * https://docs.sciml.ai/DiffEqDocs/stable/solvers/ode_solve/ - * https://docs.sciml.ai/DiffEqDocs/stable/solvers/dae_solve/ - """ +* https://docs.sciml.ai/DiffEqDocs/stable/solvers/ode_solve/ +* https://docs.sciml.ai/DiffEqDocs/stable/solvers/dae_solve/ +""" using SciMLBase: SENSITIVITY_INTERP_MESSAGE @@ -17,7 +17,7 @@ struct DerivativeOrderNotPossibleError <: Exception end function Base.showerror(io::IO, e::DerivativeOrderNotPossibleError) print(io, DERIVATIVE_ORDER_NOT_POSSIBLE_MESSAGE) - println(io, VERBOSE_MSG) + return println(io, VERBOSE_MSG) end ## Integrator Dispatches @@ -56,214 +56,292 @@ end return lo end -@inline function ode_addsteps!(integrator, f = integrator.f, always_calc_begin = false, - allow_calc_end = true, force_calc_end = false) +@inline function ode_addsteps!( + integrator, f = integrator.f, always_calc_begin = false, + allow_calc_end = true, force_calc_end = false + ) cache = integrator.cache if cache isa CompositeCache cache_current = cache.current if cache_current == 1 - _ode_addsteps!(integrator.k, integrator.tprev, integrator.uprev, + _ode_addsteps!( + integrator.k, integrator.tprev, integrator.uprev, integrator.u, integrator.dt, f, integrator.p, cache.caches[1], - always_calc_begin, allow_calc_end, force_calc_end) + always_calc_begin, allow_calc_end, force_calc_end + ) elseif cache_current == 2 - _ode_addsteps!(integrator.k, integrator.tprev, integrator.uprev, + _ode_addsteps!( + integrator.k, integrator.tprev, integrator.uprev, integrator.u, integrator.dt, f, integrator.p, cache.caches[2], - always_calc_begin, allow_calc_end, force_calc_end) + always_calc_begin, allow_calc_end, force_calc_end + ) else @assert length(integrator.cache.caches) >= cache_current - _ode_addsteps!(integrator.k, integrator.tprev, integrator.uprev, + _ode_addsteps!( + integrator.k, integrator.tprev, integrator.uprev, integrator.u, integrator.dt, f, integrator.p, cache.caches[cache_current], - always_calc_begin, allow_calc_end, force_calc_end) + always_calc_begin, allow_calc_end, force_calc_end + ) end elseif cache isa DefaultCache cache_current = cache.current if cache_current == 1 - _ode_addsteps!(integrator.k, integrator.tprev, integrator.uprev, + _ode_addsteps!( + integrator.k, integrator.tprev, integrator.uprev, integrator.u, integrator.dt, f, integrator.p, cache.cache1, - always_calc_begin, allow_calc_end, force_calc_end) + always_calc_begin, allow_calc_end, force_calc_end + ) elseif cache_current == 2 - _ode_addsteps!(integrator.k, integrator.tprev, integrator.uprev, + _ode_addsteps!( + integrator.k, integrator.tprev, integrator.uprev, integrator.u, integrator.dt, f, integrator.p, cache.cache2, - always_calc_begin, allow_calc_end, force_calc_end) + always_calc_begin, allow_calc_end, force_calc_end + ) elseif cache_current == 3 - _ode_addsteps!(integrator.k, integrator.tprev, integrator.uprev, + _ode_addsteps!( + integrator.k, integrator.tprev, integrator.uprev, integrator.u, integrator.dt, f, integrator.p, cache.cache3, - always_calc_begin, allow_calc_end, force_calc_end) + always_calc_begin, allow_calc_end, force_calc_end + ) elseif cache_current == 4 - _ode_addsteps!(integrator.k, integrator.tprev, integrator.uprev, + _ode_addsteps!( + integrator.k, integrator.tprev, integrator.uprev, integrator.u, integrator.dt, f, integrator.p, cache.cache4, - always_calc_begin, allow_calc_end, force_calc_end) + always_calc_begin, allow_calc_end, force_calc_end + ) elseif cache_current == 5 - _ode_addsteps!(integrator.k, integrator.tprev, integrator.uprev, + _ode_addsteps!( + integrator.k, integrator.tprev, integrator.uprev, integrator.u, integrator.dt, f, integrator.p, cache.cache5, - always_calc_begin, allow_calc_end, force_calc_end) + always_calc_begin, allow_calc_end, force_calc_end + ) elseif cache_current == 6 - _ode_addsteps!(integrator.k, integrator.tprev, integrator.uprev, + _ode_addsteps!( + integrator.k, integrator.tprev, integrator.uprev, integrator.u, integrator.dt, f, integrator.p, cache.cache6, - always_calc_begin, allow_calc_end, force_calc_end) + always_calc_begin, allow_calc_end, force_calc_end + ) end else - _ode_addsteps!(integrator.k, integrator.tprev, integrator.uprev, integrator.u, + _ode_addsteps!( + integrator.k, integrator.tprev, integrator.uprev, integrator.u, integrator.dt, f, integrator.p, cache, - always_calc_begin, allow_calc_end, force_calc_end) + always_calc_begin, allow_calc_end, force_calc_end + ) end return nothing end @inline function SciMLBase.addsteps!(integrator::ODEIntegrator, args...) - ode_addsteps!(integrator, args...) + return ode_addsteps!(integrator, args...) end @inline function ode_interpolant(Θ, integrator::SciMLBase.DEIntegrator, idxs, deriv) SciMLBase.addsteps!(integrator) if integrator.cache isa CompositeCache - val = composite_ode_interpolant(Θ, integrator, integrator.cache.caches, - integrator.cache.current, idxs, deriv) + val = composite_ode_interpolant( + Θ, integrator, integrator.cache.caches, + integrator.cache.current, idxs, deriv + ) elseif integrator.cache isa DefaultCache - val = default_ode_interpolant(Θ, integrator, integrator.cache, - integrator.cache.current, idxs, deriv) + val = default_ode_interpolant( + Θ, integrator, integrator.cache, + integrator.cache.current, idxs, deriv + ) else - val = ode_interpolant(Θ, integrator.dt, integrator.uprev, integrator.u, - integrator.k, integrator.cache, idxs, deriv, integrator.differential_vars) + val = ode_interpolant( + Θ, integrator.dt, integrator.uprev, integrator.u, + integrator.k, integrator.cache, idxs, deriv, integrator.differential_vars + ) end - val + return val end function default_ode_interpolant( - Θ, integrator, cache::DefaultCache, alg_choice, idxs, deriv) + Θ, integrator, cache::DefaultCache, alg_choice, idxs, deriv + ) if alg_choice == 1 - return ode_interpolant(Θ, integrator.dt, integrator.uprev, + return ode_interpolant( + Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, cache.cache1, idxs, - deriv, integrator.differential_vars) + deriv, integrator.differential_vars + ) elseif alg_choice == 2 - return ode_interpolant(Θ, integrator.dt, integrator.uprev, + return ode_interpolant( + Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, cache.cache2, idxs, - deriv, integrator.differential_vars) + deriv, integrator.differential_vars + ) elseif alg_choice == 3 - return ode_interpolant(Θ, integrator.dt, integrator.uprev, + return ode_interpolant( + Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, cache.cache3, idxs, - deriv, integrator.differential_vars) + deriv, integrator.differential_vars + ) elseif alg_choice == 4 - return ode_interpolant(Θ, integrator.dt, integrator.uprev, + return ode_interpolant( + Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, cache.cache4, idxs, - deriv, integrator.differential_vars) + deriv, integrator.differential_vars + ) elseif alg_choice == 5 - return ode_interpolant(Θ, integrator.dt, integrator.uprev, + return ode_interpolant( + Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, cache.cache5, idxs, - deriv, integrator.differential_vars) + deriv, integrator.differential_vars + ) elseif alg_choice == 6 - return ode_interpolant(Θ, integrator.dt, integrator.uprev, + return ode_interpolant( + Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, cache.cache6, idxs, - deriv, integrator.differential_vars) + deriv, integrator.differential_vars + ) else error("DefaultCache invalid alg_choice. File an issue.") end end -@generated function composite_ode_interpolant(Θ, integrator, caches::T, current, idxs, - deriv) where {T <: Tuple} +@generated function composite_ode_interpolant( + Θ, integrator, caches::T, current, idxs, + deriv + ) where {T <: Tuple} expr = Expr(:block) for i in 1:length(T.types) - push!(expr.args, + push!( + expr.args, quote if $i == current - return ode_interpolant(Θ, integrator.dt, integrator.uprev, + return ode_interpolant( + Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, caches[$i], idxs, - deriv, integrator.differential_vars) + deriv, integrator.differential_vars + ) end - end) + end + ) end - push!(expr.args, + push!( + expr.args, quote throw("Cache $current is not available. There are only $(length(caches)) caches.") - end) + end + ) return expr end @inline function ode_interpolant!(val, Θ, integrator::SciMLBase.DEIntegrator, idxs, deriv) SciMLBase.addsteps!(integrator) - if integrator.cache isa CompositeCache - ode_interpolant!(val, Θ, integrator.dt, integrator.uprev, integrator.u, + return if integrator.cache isa CompositeCache + ode_interpolant!( + val, Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, integrator.cache.caches[integrator.cache.current], - idxs, deriv, integrator.differential_vars) + idxs, deriv, integrator.differential_vars + ) elseif integrator.cache isa DefaultCache alg_choice = integrator.cache.current if alg_choice == 1 - ode_interpolant!(val, Θ, integrator.dt, integrator.uprev, integrator.u, + ode_interpolant!( + val, Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, integrator.cache.cache1, - idxs, deriv, integrator.differential_vars) + idxs, deriv, integrator.differential_vars + ) elseif alg_choice == 2 - ode_interpolant!(val, Θ, integrator.dt, integrator.uprev, integrator.u, + ode_interpolant!( + val, Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, integrator.cache.cache2, - idxs, deriv, integrator.differential_vars) + idxs, deriv, integrator.differential_vars + ) elseif alg_choice == 3 - ode_interpolant!(val, Θ, integrator.dt, integrator.uprev, integrator.u, + ode_interpolant!( + val, Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, integrator.cache.cache3, - idxs, deriv, integrator.differential_vars) + idxs, deriv, integrator.differential_vars + ) elseif alg_choice == 4 - ode_interpolant!(val, Θ, integrator.dt, integrator.uprev, integrator.u, + ode_interpolant!( + val, Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, integrator.cache.cache4, - idxs, deriv, integrator.differential_vars) + idxs, deriv, integrator.differential_vars + ) elseif alg_choice == 5 - ode_interpolant!(val, Θ, integrator.dt, integrator.uprev, integrator.u, + ode_interpolant!( + val, Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, integrator.cache.cache5, - idxs, deriv, integrator.differential_vars) + idxs, deriv, integrator.differential_vars + ) elseif alg_choice == 6 - ode_interpolant!(val, Θ, integrator.dt, integrator.uprev, integrator.u, + ode_interpolant!( + val, Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, integrator.cache.cache6, - idxs, deriv, integrator.differential_vars) + idxs, deriv, integrator.differential_vars + ) else error("DefaultCache invalid alg_choice. File an issue.") end else - ode_interpolant!(val, Θ, integrator.dt, integrator.uprev, integrator.u, - integrator.k, integrator.cache, idxs, deriv, integrator.differential_vars) + ode_interpolant!( + val, Θ, integrator.dt, integrator.uprev, integrator.u, + integrator.k, integrator.cache, idxs, deriv, integrator.differential_vars + ) end end function default_ode_interpolant!( - val, Θ, integrator, cache::DefaultCache, alg_choice, idxs, deriv) + val, Θ, integrator, cache::DefaultCache, alg_choice, idxs, deriv + ) if alg_choice == 1 - return ode_interpolant!(val, Θ, integrator.dt, integrator.uprev, + return ode_interpolant!( + val, Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, cache.cache1, idxs, - deriv, integrator.differential_vars) + deriv, integrator.differential_vars + ) elseif alg_choice == 2 - return ode_interpolant!(val, Θ, integrator.dt, integrator.uprev, + return ode_interpolant!( + val, Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, cache.cache2, idxs, - deriv, integrator.differential_vars) + deriv, integrator.differential_vars + ) elseif alg_choice == 3 - return ode_interpolant!(val, Θ, integrator.dt, integrator.uprev, + return ode_interpolant!( + val, Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, cache.cache3, idxs, - deriv, integrator.differential_vars) + deriv, integrator.differential_vars + ) elseif alg_choice == 4 - return ode_interpolant!(val, Θ, integrator.dt, integrator.uprev, + return ode_interpolant!( + val, Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, cache.cache4, idxs, - deriv, integrator.differential_vars) + deriv, integrator.differential_vars + ) elseif alg_choice == 5 - return ode_interpolant!(val, Θ, integrator.dt, integrator.uprev, + return ode_interpolant!( + val, Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, cache.cache5, idxs, - deriv, integrator.differential_vars) + deriv, integrator.differential_vars + ) elseif alg_choice == 6 - return ode_interpolant!(val, Θ, integrator.dt, integrator.uprev, + return ode_interpolant!( + val, Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, cache.cache6, idxs, - deriv, integrator.differential_vars) + deriv, integrator.differential_vars + ) else error("DefaultCache invalid alg_choice. File an issue.") end @@ -271,121 +349,163 @@ end @generated function composite_ode_interpolant!( val, Θ, integrator, caches::T, current, idxs, - deriv) where {T <: Tuple} + deriv + ) where {T <: Tuple} expr = Expr(:block) for i in 1:length(T.types) - push!(expr.args, + push!( + expr.args, quote if $i == current - return ode_interpolant!(val, Θ, integrator.dt, integrator.uprev, + return ode_interpolant!( + val, Θ, integrator.dt, integrator.uprev, integrator.u, integrator.k, caches[$i], idxs, - deriv) + deriv + ) end - end) + end + ) end - push!(expr.args, + push!( + expr.args, quote throw("Cache $current is not available. There are only $(length(caches)) caches.") - end) + end + ) return expr end -@inline function current_interpolant(t::Number, integrator::SciMLBase.DEIntegrator, idxs, - deriv) +@inline function current_interpolant( + t::Number, integrator::SciMLBase.DEIntegrator, idxs, + deriv + ) Θ = (t - integrator.tprev) / integrator.dt - ode_interpolant(Θ, integrator, idxs, deriv) + return ode_interpolant(Θ, integrator, idxs, deriv) end @inline function current_interpolant(t, integrator::SciMLBase.DEIntegrator, idxs, deriv) Θ = (t .- integrator.tprev) ./ integrator.dt - [ode_interpolant(ϕ, integrator, idxs, deriv) for ϕ in Θ] + return [ode_interpolant(ϕ, integrator, idxs, deriv) for ϕ in Θ] end -@inline function current_interpolant!(val, t::Number, integrator::SciMLBase.DEIntegrator, - idxs, deriv) +@inline function current_interpolant!( + val, t::Number, integrator::SciMLBase.DEIntegrator, + idxs, deriv + ) Θ = (t - integrator.tprev) / integrator.dt - ode_interpolant!(val, Θ, integrator, idxs, deriv) + return ode_interpolant!(val, Θ, integrator, idxs, deriv) end -@inline function current_interpolant!(val, t, integrator::SciMLBase.DEIntegrator, idxs, - deriv) +@inline function current_interpolant!( + val, t, integrator::SciMLBase.DEIntegrator, idxs, + deriv + ) Θ = (t .- integrator.tprev) ./ integrator.dt - [ode_interpolant!(val, ϕ, integrator, idxs, deriv) for ϕ in Θ] + return [ode_interpolant!(val, ϕ, integrator, idxs, deriv) for ϕ in Θ] end -@inline function current_interpolant!(val, t::Array, integrator::SciMLBase.DEIntegrator, - idxs, deriv) +@inline function current_interpolant!( + val, t::Array, integrator::SciMLBase.DEIntegrator, + idxs, deriv + ) Θ = similar(t) @inbounds @simd ivdep for i in eachindex(t) Θ[i] = (t[i] - integrator.tprev) / integrator.dt end - [ode_interpolant!(val, ϕ, integrator, idxs, deriv) for ϕ in Θ] + return [ode_interpolant!(val, ϕ, integrator, idxs, deriv) for ϕ in Θ] end -@inline function current_extrapolant(t::Number, integrator::SciMLBase.DEIntegrator, - idxs = nothing, deriv = Val{0}) +@inline function current_extrapolant( + t::Number, integrator::SciMLBase.DEIntegrator, + idxs = nothing, deriv = Val{0} + ) Θ = (t - integrator.tprev) / (integrator.t - integrator.tprev) - ode_extrapolant(Θ, integrator, idxs, deriv) + return ode_extrapolant(Θ, integrator, idxs, deriv) end -@inline function current_extrapolant!(val, t::Number, integrator::SciMLBase.DEIntegrator, - idxs = nothing, deriv = Val{0}) +@inline function current_extrapolant!( + val, t::Number, integrator::SciMLBase.DEIntegrator, + idxs = nothing, deriv = Val{0} + ) Θ = (t - integrator.tprev) / (integrator.t - integrator.tprev) - ode_extrapolant!(val, Θ, integrator, idxs, deriv) + return ode_extrapolant!(val, Θ, integrator, idxs, deriv) end -@inline function current_extrapolant(t::AbstractArray, integrator::SciMLBase.DEIntegrator, - idxs = nothing, deriv = Val{0}) +@inline function current_extrapolant( + t::AbstractArray, integrator::SciMLBase.DEIntegrator, + idxs = nothing, deriv = Val{0} + ) Θ = (t .- integrator.tprev) ./ (integrator.t - integrator.tprev) - [ode_extrapolant(ϕ, integrator, idxs, deriv) for ϕ in Θ] + return [ode_extrapolant(ϕ, integrator, idxs, deriv) for ϕ in Θ] end -@inline function current_extrapolant!(val, t, integrator::SciMLBase.DEIntegrator, - idxs = nothing, deriv = Val{0}) +@inline function current_extrapolant!( + val, t, integrator::SciMLBase.DEIntegrator, + idxs = nothing, deriv = Val{0} + ) Θ = (t .- integrator.tprev) ./ (integrator.t - integrator.tprev) - [ode_extrapolant!(val, ϕ, integrator, idxs, deriv) for ϕ in Θ] + return [ode_extrapolant!(val, ϕ, integrator, idxs, deriv) for ϕ in Θ] end @inline function ode_extrapolant!(val, Θ, integrator::SciMLBase.DEIntegrator, idxs, deriv) SciMLBase.addsteps!(integrator) - if integrator.cache isa CompositeCache - composite_ode_extrapolant!(val, Θ, integrator, integrator.cache.caches, - integrator.cache.current, idxs, deriv) + return if integrator.cache isa CompositeCache + composite_ode_extrapolant!( + val, Θ, integrator, integrator.cache.caches, + integrator.cache.current, idxs, deriv + ) elseif integrator.cache isa DefaultCache - default_ode_extrapolant!(val, Θ, integrator, integrator.cache, - integrator.cache.current, idxs, deriv) + default_ode_extrapolant!( + val, Θ, integrator, integrator.cache, + integrator.cache.current, idxs, deriv + ) else - ode_interpolant!(val, Θ, integrator.t - integrator.tprev, integrator.uprev2, - integrator.uprev, integrator.k, integrator.cache, idxs, deriv, integrator.differential_vars) + ode_interpolant!( + val, Θ, integrator.t - integrator.tprev, integrator.uprev2, + integrator.uprev, integrator.k, integrator.cache, idxs, deriv, integrator.differential_vars + ) end end function default_ode_extrapolant!( - val, Θ, integrator, cache::DefaultCache, alg_choice, idxs, deriv) - if alg_choice == 1 - ode_interpolant!(val, Θ, integrator.t - integrator.tprev, + val, Θ, integrator, cache::DefaultCache, alg_choice, idxs, deriv + ) + return if alg_choice == 1 + ode_interpolant!( + val, Θ, integrator.t - integrator.tprev, integrator.uprev2, integrator.uprev, - integrator.k, cache.cache1, idxs, deriv, integrator.differential_vars) + integrator.k, cache.cache1, idxs, deriv, integrator.differential_vars + ) elseif alg_choice == 2 - ode_interpolant!(val, Θ, integrator.t - integrator.tprev, + ode_interpolant!( + val, Θ, integrator.t - integrator.tprev, integrator.uprev2, integrator.uprev, - integrator.k, cache.cache2, idxs, deriv, integrator.differential_vars) + integrator.k, cache.cache2, idxs, deriv, integrator.differential_vars + ) elseif alg_choice == 3 - ode_interpolant!(val, Θ, integrator.t - integrator.tprev, + ode_interpolant!( + val, Θ, integrator.t - integrator.tprev, integrator.uprev2, integrator.uprev, - integrator.k, cache.cache3, idxs, deriv, integrator.differential_vars) + integrator.k, cache.cache3, idxs, deriv, integrator.differential_vars + ) elseif alg_choice == 4 - ode_interpolant!(val, Θ, integrator.t - integrator.tprev, + ode_interpolant!( + val, Θ, integrator.t - integrator.tprev, integrator.uprev2, integrator.uprev, - integrator.k, cache.cache4, idxs, deriv, integrator.differential_vars) + integrator.k, cache.cache4, idxs, deriv, integrator.differential_vars + ) elseif alg_choice == 5 - ode_interpolant!(val, Θ, integrator.t - integrator.tprev, + ode_interpolant!( + val, Θ, integrator.t - integrator.tprev, integrator.uprev2, integrator.uprev, - integrator.k, cache.cache5, idxs, deriv, integrator.differential_vars) + integrator.k, cache.cache5, idxs, deriv, integrator.differential_vars + ) elseif alg_choice == 6 - ode_interpolant!(val, Θ, integrator.t - integrator.tprev, + ode_interpolant!( + val, Θ, integrator.t - integrator.tprev, integrator.uprev2, integrator.uprev, - integrator.k, cache.cache6, idxs, deriv, integrator.differential_vars) + integrator.k, cache.cache6, idxs, deriv, integrator.differential_vars + ) else error("DefaultCache invalid alg_choice. File an issue.") end @@ -393,157 +513,231 @@ end @generated function composite_ode_extrapolant!( val, Θ, integrator, caches::T, current, idxs, - deriv) where {T <: Tuple} + deriv + ) where {T <: Tuple} expr = Expr(:block) for i in 1:length(T.types) - push!(expr.args, + push!( + expr.args, quote if $i == current - return ode_interpolant!(val, Θ, integrator.t - integrator.tprev, + return ode_interpolant!( + val, Θ, integrator.t - integrator.tprev, integrator.uprev2, integrator.uprev, - integrator.k, caches[$i], idxs, deriv, integrator.differential_vars) + integrator.k, caches[$i], idxs, deriv, integrator.differential_vars + ) end - end) + end + ) end - push!(expr.args, + push!( + expr.args, quote throw("Cache $current is not available. There are only $(length(caches)) caches.") - end) + end + ) return expr end @inline function ode_extrapolant(Θ, integrator::SciMLBase.DEIntegrator, idxs, deriv) SciMLBase.addsteps!(integrator) - if integrator.cache isa CompositeCache - composite_ode_extrapolant(Θ, integrator, integrator.cache.caches, - integrator.cache.current, idxs, deriv) + return if integrator.cache isa CompositeCache + composite_ode_extrapolant( + Θ, integrator, integrator.cache.caches, + integrator.cache.current, idxs, deriv + ) elseif integrator.cache isa DefaultCache - default_ode_extrapolant(Θ, integrator, integrator.cache, - integrator.cache.current, idxs, deriv) + default_ode_extrapolant( + Θ, integrator, integrator.cache, + integrator.cache.current, idxs, deriv + ) else - ode_interpolant(Θ, integrator.t - integrator.tprev, integrator.uprev2, - integrator.uprev, integrator.k, integrator.cache, idxs, deriv, integrator.differential_vars) + ode_interpolant( + Θ, integrator.t - integrator.tprev, integrator.uprev2, + integrator.uprev, integrator.k, integrator.cache, idxs, deriv, integrator.differential_vars + ) end end function default_ode_extrapolant( - Θ, integrator, cache::DefaultCache, alg_choice, idxs, deriv) - if alg_choice == 1 - ode_interpolant(Θ, integrator.t - integrator.tprev, + Θ, integrator, cache::DefaultCache, alg_choice, idxs, deriv + ) + return if alg_choice == 1 + ode_interpolant( + Θ, integrator.t - integrator.tprev, integrator.uprev2, integrator.uprev, - integrator.k, cache.cache1, idxs, deriv, integrator.differential_vars) + integrator.k, cache.cache1, idxs, deriv, integrator.differential_vars + ) elseif alg_choice == 2 - ode_interpolant(Θ, integrator.t - integrator.tprev, + ode_interpolant( + Θ, integrator.t - integrator.tprev, integrator.uprev2, integrator.uprev, - integrator.k, cache.cache2, idxs, deriv, integrator.differential_vars) + integrator.k, cache.cache2, idxs, deriv, integrator.differential_vars + ) elseif alg_choice == 3 - ode_interpolant(Θ, integrator.t - integrator.tprev, + ode_interpolant( + Θ, integrator.t - integrator.tprev, integrator.uprev2, integrator.uprev, - integrator.k, cache.cache3, idxs, deriv, integrator.differential_vars) + integrator.k, cache.cache3, idxs, deriv, integrator.differential_vars + ) elseif alg_choice == 4 - ode_interpolant(Θ, integrator.t - integrator.tprev, + ode_interpolant( + Θ, integrator.t - integrator.tprev, integrator.uprev2, integrator.uprev, - integrator.k, cache.cache4, idxs, deriv, integrator.differential_vars) + integrator.k, cache.cache4, idxs, deriv, integrator.differential_vars + ) elseif alg_choice == 5 - ode_interpolant(Θ, integrator.t - integrator.tprev, + ode_interpolant( + Θ, integrator.t - integrator.tprev, integrator.uprev2, integrator.uprev, - integrator.k, cache.cache5, idxs, deriv, integrator.differential_vars) + integrator.k, cache.cache5, idxs, deriv, integrator.differential_vars + ) elseif alg_choice == 6 - ode_interpolant(Θ, integrator.t - integrator.tprev, + ode_interpolant( + Θ, integrator.t - integrator.tprev, integrator.uprev2, integrator.uprev, - integrator.k, cache.cache6, idxs, deriv, integrator.differential_vars) + integrator.k, cache.cache6, idxs, deriv, integrator.differential_vars + ) else error("DefaultCache invalid alg_choice. File an issue.") end end -@generated function composite_ode_extrapolant(Θ, integrator, caches::T, current, idxs, - deriv) where {T <: Tuple} +@generated function composite_ode_extrapolant( + Θ, integrator, caches::T, current, idxs, + deriv + ) where {T <: Tuple} expr = Expr(:block) for i in 1:length(T.types) - push!(expr.args, + push!( + expr.args, quote if $i == current - return ode_interpolant(Θ, integrator.t - integrator.tprev, + return ode_interpolant( + Θ, integrator.t - integrator.tprev, integrator.uprev2, integrator.uprev, - integrator.k, caches[$i], idxs, deriv, integrator.differential_vars) + integrator.k, caches[$i], idxs, deriv, integrator.differential_vars + ) end - end) + end + ) end - push!(expr.args, + push!( + expr.args, quote throw("Cache $current is not available. There are only $(length(caches)) caches.") - end) + end + ) return expr end -function _evaluate_interpolant(f::F, Θ, dt, timeseries, i₋, i₊, +function _evaluate_interpolant( + f::F, Θ, dt, timeseries, i₋, i₊, cache, idxs, - deriv, ks, ts, p, differential_vars) where F - _ode_addsteps!(ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache) # update the kcurrent - return ode_interpolant(Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache, idxs, deriv, differential_vars) -end -function evaluate_composite_cache(f::F, Θ, dt, timeseries, i₋, i₊, + deriv, ks, ts, p, differential_vars + ) where {F} + _ode_addsteps!( + ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, + cache + ) # update the kcurrent + return ode_interpolant( + Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], + cache, idxs, deriv, differential_vars + ) +end +function evaluate_composite_cache( + f::F, Θ, dt, timeseries, i₋, i₊, caches::Tuple{C1, C2, Vararg}, idxs, - deriv, ks, ts, p, cacheid, differential_vars) where {F, C1, C2} + deriv, ks, ts, p, cacheid, differential_vars + ) where {F, C1, C2} if (cacheid -= 1) != 0 - return evaluate_composite_cache(f, Θ, dt, timeseries, i₋, i₊, Base.tail(caches), + return evaluate_composite_cache( + f, Θ, dt, timeseries, i₋, i₊, Base.tail(caches), idxs, - deriv, ks, ts, p, cacheid, differential_vars) + deriv, ks, ts, p, cacheid, differential_vars + ) end - _evaluate_interpolant(f, Θ, dt, timeseries, i₋, i₊, + return _evaluate_interpolant( + f, Θ, dt, timeseries, i₋, i₊, first(caches), idxs, - deriv, ks, ts, p, differential_vars) + deriv, ks, ts, p, differential_vars + ) end -function evaluate_composite_cache(f::F, Θ, dt, timeseries, i₋, i₊, +function evaluate_composite_cache( + f::F, Θ, dt, timeseries, i₋, i₊, caches::Tuple{C}, idxs, - deriv, ks, ts, p, _, differential_vars) where {F, C} - _evaluate_interpolant(f, Θ, dt, timeseries, i₋, i₊, + deriv, ks, ts, p, _, differential_vars + ) where {F, C} + return _evaluate_interpolant( + f, Θ, dt, timeseries, i₋, i₊, only(caches), idxs, - deriv, ks, ts, p, differential_vars) + deriv, ks, ts, p, differential_vars + ) end -function evaluate_default_cache(f::F, Θ, dt, timeseries, i₋, i₊, - cache::DefaultCache, idxs, deriv, ks, ts, p, cacheid, differential_vars) where F +function evaluate_default_cache( + f::F, Θ, dt, timeseries, i₋, i₊, + cache::DefaultCache, idxs, deriv, ks, ts, p, cacheid, differential_vars + ) where {F} if cacheid == 1 - return _evaluate_interpolant(f, Θ, dt, timeseries, i₋, i₊, - cache.cache1, idxs, deriv, ks, ts, p, differential_vars) + return _evaluate_interpolant( + f, Θ, dt, timeseries, i₋, i₊, + cache.cache1, idxs, deriv, ks, ts, p, differential_vars + ) elseif cacheid == 2 - return _evaluate_interpolant(f, Θ, dt, timeseries, i₋, i₊, - cache.cache2, idxs, deriv, ks, ts, p, differential_vars) + return _evaluate_interpolant( + f, Θ, dt, timeseries, i₋, i₊, + cache.cache2, idxs, deriv, ks, ts, p, differential_vars + ) elseif cacheid == 3 - return _evaluate_interpolant(f, Θ, dt, timeseries, i₋, i₊, - cache.cache3, idxs, deriv, ks, ts, p, differential_vars) + return _evaluate_interpolant( + f, Θ, dt, timeseries, i₋, i₊, + cache.cache3, idxs, deriv, ks, ts, p, differential_vars + ) elseif cacheid == 4 - return _evaluate_interpolant(f, Θ, dt, timeseries, i₋, i₊, - cache.cache4, idxs, deriv, ks, ts, p, differential_vars) + return _evaluate_interpolant( + f, Θ, dt, timeseries, i₋, i₊, + cache.cache4, idxs, deriv, ks, ts, p, differential_vars + ) elseif cacheid == 5 - return _evaluate_interpolant(f, Θ, dt, timeseries, i₋, i₊, - cache.cache5, idxs, deriv, ks, ts, p, differential_vars) + return _evaluate_interpolant( + f, Θ, dt, timeseries, i₋, i₊, + cache.cache5, idxs, deriv, ks, ts, p, differential_vars + ) elseif cacheid == 6 - return _evaluate_interpolant(f, Θ, dt, timeseries, i₋, i₊, - cache.cache6, idxs, deriv, ks, ts, p, differential_vars) + return _evaluate_interpolant( + f, Θ, dt, timeseries, i₋, i₊, + cache.cache6, idxs, deriv, ks, ts, p, differential_vars + ) end end -function evaluate_interpolant(f::F, Θ, dt, timeseries, i₋, i₊, cache, idxs, - deriv, ks, ts, id, p, differential_vars) where F +function evaluate_interpolant( + f::F, Θ, dt, timeseries, i₋, i₊, cache, idxs, + deriv, ks, ts, id, p, differential_vars + ) where {F} if isdiscretecache(cache) - return ode_interpolant(Θ, dt, timeseries[i₋], timeseries[i₊], 0, cache, idxs, - deriv, differential_vars) + return ode_interpolant( + Θ, dt, timeseries[i₋], timeseries[i₊], 0, cache, idxs, + deriv, differential_vars + ) elseif !id.dense return linear_interpolant(Θ, dt, timeseries[i₋], timeseries[i₊], idxs, deriv) elseif cache isa CompositeCache - return evaluate_composite_cache(f, Θ, dt, timeseries, i₋, i₊, cache.caches, idxs, - deriv, ks, ts, p, id.alg_choice[i₊], differential_vars) + return evaluate_composite_cache( + f, Θ, dt, timeseries, i₋, i₊, cache.caches, idxs, + deriv, ks, ts, p, id.alg_choice[i₊], differential_vars + ) elseif cache isa DefaultCache - return evaluate_default_cache(f, Θ, dt, timeseries, i₋, i₊, cache, idxs, - deriv, ks, ts, p, id.alg_choice[i₊], differential_vars) + return evaluate_default_cache( + f, Θ, dt, timeseries, i₋, i₊, cache, idxs, + deriv, ks, ts, p, id.alg_choice[i₊], differential_vars + ) else - return _evaluate_interpolant(f, Θ, dt, timeseries, i₋, i₊, - cache, idxs, deriv, ks, ts, p, differential_vars) + return _evaluate_interpolant( + f, Θ, dt, timeseries, i₋, i₊, + cache, idxs, deriv, ks, ts, p, differential_vars + ) end end @@ -553,8 +747,10 @@ ode_interpolation(tvals,ts,timeseries,ks) Get the value at tvals where the solution is known at the times ts (sorted), with values timeseries and derivatives ks """ -function ode_interpolation(tvals, id::I, idxs, ::Type{deriv}, p, - continuity::Symbol = :left) where {I, deriv} +function ode_interpolation( + tvals, id::I, idxs, ::Type{deriv}, p, + continuity::Symbol = :left + ) where {I, deriv} (; ts, timeseries, ks, f, cache, differential_vars) = id @inbounds tdir = sign(ts[end] - ts[1]) idx = sortperm(tvals, rev = tdir < 0) @@ -578,11 +774,13 @@ function ode_interpolation(tvals, id::I, idxs, ::Type{deriv}, p, i₋₊ref[] = (i₋, i₊) dt = ts[i₊] - ts[i₋] Θ = iszero(dt) ? oneunit(t) / oneunit(dt) : (t - ts[i₋]) / dt - evaluate_interpolant(f, Θ, dt, timeseries, i₋, i₊, cache, idxs, - deriv, ks, ts, id, p, differential_vars) + evaluate_interpolant( + f, Θ, dt, timeseries, i₋, i₊, cache, idxs, + deriv, ks, ts, id, p, differential_vars + ) end invpermute!(vals, idx) - DiffEqArray(vals, tvals) + return DiffEqArray(vals, tvals) end """ @@ -591,8 +789,10 @@ ode_interpolation(tvals,ts,timeseries,ks) Get the value at tvals where the solution is known at the times ts (sorted), with values timeseries and derivatives ks """ -function ode_interpolation!(vals, tvals, id::I, idxs, ::Type{deriv}, p, - continuity::Symbol = :left) where {I, deriv} +function ode_interpolation!( + vals, tvals, id::I, idxs, ::Type{deriv}, p, + continuity::Symbol = :left + ) where {I, deriv} (; ts, timeseries, ks, f, cache, differential_vars) = id @inbounds tdir = sign(ts[end] - ts[1]) idx = sortperm(tvals, rev = tdir < 0) @@ -633,19 +833,27 @@ function ode_interpolation!(vals, tvals, id::I, idxs, ::Type{deriv}, p, if isdiscretecache(cache) if eltype(vals) <: AbstractArray - ode_interpolant!(vals[j], Θ, dt, timeseries[i₋], timeseries[i₊], 0, cache, - idxs, deriv, differential_vars) + ode_interpolant!( + vals[j], Θ, dt, timeseries[i₋], timeseries[i₊], 0, cache, + idxs, deriv, differential_vars + ) else - vals[j] = ode_interpolant(Θ, dt, timeseries[i₋], timeseries[i₊], 0, cache, - idxs, deriv, differential_vars) + vals[j] = ode_interpolant( + Θ, dt, timeseries[i₋], timeseries[i₊], 0, cache, + idxs, deriv, differential_vars + ) end elseif !id.dense if eltype(vals) <: AbstractArray - linear_interpolant!(vals[j], Θ, dt, timeseries[i₋], timeseries[i₊], idxs, - deriv) + linear_interpolant!( + vals[j], Θ, dt, timeseries[i₋], timeseries[i₊], idxs, + deriv + ) else - vals[j] = linear_interpolant(Θ, dt, timeseries[i₋], timeseries[i₊], idxs, - deriv) + vals[j] = linear_interpolant( + Θ, dt, timeseries[i₋], timeseries[i₊], idxs, + deriv + ) end elseif cache isa DefaultCache if current_alg != id.alg_choice[i₊] # switched algorithm @@ -653,80 +861,98 @@ function ode_interpolation!(vals, tvals, id::I, idxs, ::Type{deriv}, p, if current_alg == 1 _ode_addsteps!( ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.cache1) # update the kcurrent + cache.cache1 + ) # update the kcurrent if eltype(vals) <: AbstractArray ode_interpolant!( vals[j], Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache1, idxs, deriv, differential_vars) + cache.cache1, idxs, deriv, differential_vars + ) else vals[j] = ode_interpolant( Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache1, idxs, deriv, differential_vars) + cache.cache1, idxs, deriv, differential_vars + ) end elseif current_alg == 2 _ode_addsteps!( ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.cache2) # update the kcurrent + cache.cache2 + ) # update the kcurrent if eltype(vals) <: AbstractArray ode_interpolant!( vals[j], Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache2, idxs, deriv, differential_vars) + cache.cache2, idxs, deriv, differential_vars + ) else vals[j] = ode_interpolant( Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache2, idxs, deriv, differential_vars) + cache.cache2, idxs, deriv, differential_vars + ) end elseif current_alg == 3 _ode_addsteps!( ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.cache3) # update the kcurrent + cache.cache3 + ) # update the kcurrent if eltype(vals) <: AbstractArray ode_interpolant!( vals[j], Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache3, idxs, deriv, differential_vars) + cache.cache3, idxs, deriv, differential_vars + ) else vals[j] = ode_interpolant( Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache3, idxs, deriv, differential_vars) + cache.cache3, idxs, deriv, differential_vars + ) end elseif current_alg == 4 _ode_addsteps!( ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.cache4) # update the kcurrent + cache.cache4 + ) # update the kcurrent if eltype(vals) <: AbstractArray ode_interpolant!( vals[j], Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache4, idxs, deriv, differential_vars) + cache.cache4, idxs, deriv, differential_vars + ) else vals[j] = ode_interpolant( Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache4, idxs, deriv, differential_vars) + cache.cache4, idxs, deriv, differential_vars + ) end elseif current_alg == 5 _ode_addsteps!( ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.cache5) # update the kcurrent + cache.cache5 + ) # update the kcurrent if eltype(vals) <: AbstractArray ode_interpolant!( vals[j], Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache5, idxs, deriv, differential_vars) + cache.cache5, idxs, deriv, differential_vars + ) else vals[j] = ode_interpolant( Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache5, idxs, deriv, differential_vars) + cache.cache5, idxs, deriv, differential_vars + ) end elseif current_alg == 6 _ode_addsteps!( ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.cache6) # update the kcurrent + cache.cache6 + ) # update the kcurrent if eltype(vals) <: AbstractArray ode_interpolant!( vals[j], Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache6, idxs, deriv, differential_vars) + cache.cache6, idxs, deriv, differential_vars + ) else vals[j] = ode_interpolant( Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache6, idxs, deriv, differential_vars) + cache.cache6, idxs, deriv, differential_vars + ) end end end @@ -737,19 +963,25 @@ function ode_interpolation!(vals, tvals, id::I, idxs, ::Type{deriv}, p, @inbounds cache_i₊ = cache.caches[current_alg] # this alloc is costly end end - _ode_addsteps!(ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache_i₊) # update the kcurrent + _ode_addsteps!( + ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, + cache_i₊ + ) # update the kcurrent if eltype(vals) <: AbstractArray - ode_interpolant!(vals[j], Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache_i₊, idxs, deriv, differential_vars) + ode_interpolant!( + vals[j], Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], + cache_i₊, idxs, deriv, differential_vars + ) else - vals[j] = ode_interpolant(Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache_i₊, idxs, deriv, differential_vars) + vals[j] = ode_interpolant( + Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], + cache_i₊, idxs, deriv, differential_vars + ) end end end - vals + return vals end """ @@ -758,8 +990,10 @@ ode_interpolation(tval::Number,ts,timeseries,ks) Get the value at tval where the solution is known at the times ts (sorted), with values timeseries and derivatives ks """ -function ode_interpolation(tval::Number, id::I, idxs, ::Type{deriv}, p, - continuity::Symbol = :left) where {I, deriv} +function ode_interpolation( + tval::Number, id::I, idxs, ::Type{deriv}, p, + continuity::Symbol = :left + ) where {I, deriv} (; ts, timeseries, ks, f, cache, differential_vars) = id @inbounds tdir = sign(ts[end] - ts[1]) @@ -781,59 +1015,93 @@ function ode_interpolation(tval::Number, id::I, idxs, ::Type{deriv}, p, Θ = iszero(dt) ? oneunit(tval) / oneunit(dt) : (tval - ts[i₋]) / dt if isdiscretecache(cache) - val = ode_interpolant(Θ, dt, timeseries[i₋], timeseries[i₊], 0, cache, idxs, - deriv, differential_vars) + val = ode_interpolant( + Θ, dt, timeseries[i₋], timeseries[i₊], 0, cache, idxs, + deriv, differential_vars + ) elseif !id.dense val = linear_interpolant(Θ, dt, timeseries[i₋], timeseries[i₊], idxs, deriv) elseif cache isa CompositeCache - _ode_addsteps!(ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.caches[id.alg_choice[i₊]]) # update the kcurrent - val = ode_interpolant(Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.caches[id.alg_choice[i₊]], idxs, deriv, differential_vars) + _ode_addsteps!( + ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, + cache.caches[id.alg_choice[i₊]] + ) # update the kcurrent + val = ode_interpolant( + Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], + cache.caches[id.alg_choice[i₊]], idxs, deriv, differential_vars + ) elseif cache isa DefaultCache alg_choice = id.alg_choice[i₊] if alg_choice == 1 - _ode_addsteps!(ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.cache1) # update the kcurrent - val = ode_interpolant(Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache1, idxs, deriv, differential_vars) + _ode_addsteps!( + ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, + cache.cache1 + ) # update the kcurrent + val = ode_interpolant( + Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], + cache.cache1, idxs, deriv, differential_vars + ) elseif alg_choice == 2 - _ode_addsteps!(ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.cache2) # update the kcurrent - val = ode_interpolant(Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache2, idxs, deriv, differential_vars) + _ode_addsteps!( + ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, + cache.cache2 + ) # update the kcurrent + val = ode_interpolant( + Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], + cache.cache2, idxs, deriv, differential_vars + ) elseif alg_choice == 3 - _ode_addsteps!(ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.cache3) # update the kcurrent - val = ode_interpolant(Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache3, idxs, deriv, differential_vars) + _ode_addsteps!( + ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, + cache.cache3 + ) # update the kcurrent + val = ode_interpolant( + Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], + cache.cache3, idxs, deriv, differential_vars + ) elseif alg_choice == 4 - _ode_addsteps!(ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.cache4) # update the kcurrent - val = ode_interpolant(Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache4, idxs, deriv, differential_vars) + _ode_addsteps!( + ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, + cache.cache4 + ) # update the kcurrent + val = ode_interpolant( + Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], + cache.cache4, idxs, deriv, differential_vars + ) elseif alg_choice == 5 - _ode_addsteps!(ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.cache5) # update the kcurrent - val = ode_interpolant(Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache5, idxs, deriv, differential_vars) + _ode_addsteps!( + ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, + cache.cache5 + ) # update the kcurrent + val = ode_interpolant( + Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], + cache.cache5, idxs, deriv, differential_vars + ) elseif alg_choice == 6 - _ode_addsteps!(ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.cache6) # update the kcurrent - val = ode_interpolant(Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache6, idxs, deriv, differential_vars) + _ode_addsteps!( + ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, + cache.cache6 + ) # update the kcurrent + val = ode_interpolant( + Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], + cache.cache6, idxs, deriv, differential_vars + ) else error("DefaultCache invalid alg_choice. File an issue.") end else - _ode_addsteps!(ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache) # update the kcurrent - val = ode_interpolant(Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], cache, - idxs, deriv, differential_vars) + _ode_addsteps!( + ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, + cache + ) # update the kcurrent + val = ode_interpolant( + Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], cache, + idxs, deriv, differential_vars + ) end end - val + return val end """ @@ -842,8 +1110,10 @@ ode_interpolation!(out,tval::Number,ts,timeseries,ks) Get the value at tval where the solution is known at the times ts (sorted), with values timeseries and derivatives ks """ -function ode_interpolation!(out, tval::Number, id::I, idxs, ::Type{deriv}, p, - continuity::Symbol = :left) where {I, deriv} +function ode_interpolation!( + out, tval::Number, id::I, idxs, ::Type{deriv}, p, + continuity::Symbol = :left + ) where {I, deriv} (; ts, timeseries, ks, f, cache, differential_vars) = id @inbounds tdir = sign(ts[end] - ts[1]) @@ -865,66 +1135,102 @@ function ode_interpolation!(out, tval::Number, id::I, idxs, ::Type{deriv}, p, Θ = iszero(dt) ? oneunit(tval) / oneunit(dt) : (tval - ts[i₋]) / dt if isdiscretecache(cache) - ode_interpolant!(out, Θ, dt, timeseries[i₋], timeseries[i₊], 0, cache, idxs, - deriv, differential_vars) + ode_interpolant!( + out, Θ, dt, timeseries[i₋], timeseries[i₊], 0, cache, idxs, + deriv, differential_vars + ) elseif !id.dense linear_interpolant!(out, Θ, dt, timeseries[i₋], timeseries[i₊], idxs, deriv) elseif cache isa CompositeCache - _ode_addsteps!(ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.caches[id.alg_choice[i₊]]) # update the kcurrent - ode_interpolant!(out, Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.caches[id.alg_choice[i₊]], idxs, deriv, differential_vars) + _ode_addsteps!( + ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, + cache.caches[id.alg_choice[i₊]] + ) # update the kcurrent + ode_interpolant!( + out, Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], + cache.caches[id.alg_choice[i₊]], idxs, deriv, differential_vars + ) elseif cache isa DefaultCache alg_choice = id.alg_choice[i₊] if alg_choice == 1 - _ode_addsteps!(ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.cache1) # update the kcurrent - ode_interpolant!(out, Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache1, idxs, deriv, differential_vars) + _ode_addsteps!( + ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, + cache.cache1 + ) # update the kcurrent + ode_interpolant!( + out, Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], + cache.cache1, idxs, deriv, differential_vars + ) elseif alg_choice == 2 - _ode_addsteps!(ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.cache2) # update the kcurrent - ode_interpolant!(out, Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.caches[2], idxs, deriv, differential_vars) + _ode_addsteps!( + ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, + cache.cache2 + ) # update the kcurrent + ode_interpolant!( + out, Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], + cache.caches[2], idxs, deriv, differential_vars + ) elseif alg_choice == 3 - _ode_addsteps!(ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.cache3) # update the kcurrent - ode_interpolant!(out, Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache3, idxs, deriv, differential_vars) + _ode_addsteps!( + ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, + cache.cache3 + ) # update the kcurrent + ode_interpolant!( + out, Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], + cache.cache3, idxs, deriv, differential_vars + ) elseif alg_choice == 4 - _ode_addsteps!(ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.cache4) # update the kcurrent - ode_interpolant!(out, Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache5, idxs, deriv, differential_vars) + _ode_addsteps!( + ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, + cache.cache4 + ) # update the kcurrent + ode_interpolant!( + out, Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], + cache.cache5, idxs, deriv, differential_vars + ) elseif alg_choice == 5 - _ode_addsteps!(ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.cache5) # update the kcurrent - ode_interpolant!(out, Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache5, idxs, deriv, differential_vars) + _ode_addsteps!( + ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, + cache.cache5 + ) # update the kcurrent + ode_interpolant!( + out, Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], + cache.cache5, idxs, deriv, differential_vars + ) elseif alg_choice == 6 - _ode_addsteps!(ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache.cache6) # update the kcurrent - ode_interpolant!(out, Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], - cache.cache6, idxs, deriv, differential_vars) + _ode_addsteps!( + ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, + cache.cache6 + ) # update the kcurrent + ode_interpolant!( + out, Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], + cache.cache6, idxs, deriv, differential_vars + ) else error("DefaultCache invalid alg_choice. File an issue.") end else - _ode_addsteps!(ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, - cache) # update the kcurrent - ode_interpolant!(out, Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], cache, - idxs, deriv, differential_vars) + _ode_addsteps!( + ks[i₊], ts[i₋], timeseries[i₋], timeseries[i₊], dt, f, p, + cache + ) # update the kcurrent + ode_interpolant!( + out, Θ, dt, timeseries[i₋], timeseries[i₊], ks[i₊], cache, + idxs, deriv, differential_vars + ) end end - out + return out end """ By default, Hermite interpolant so update the derivative at the two ends """ -function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache, always_calc_begin = false, - allow_calc_end = true, force_calc_end = false) +function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache, always_calc_begin = false, + allow_calc_end = true, force_calc_end = false + ) if length(k) < 2 || always_calc_begin if cache isa OrdinaryDiffEqMutableCache rtmp = similar(u, eltype(eltype(k))) @@ -937,20 +1243,23 @@ function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache, always_calc_begin = fal copyat_or_push!(k, 2, f(u, p, t + dt)) end end - nothing + return nothing end """ ode_interpolant and ode_interpolant! dispatch """ function ode_interpolant( - Θ, dt, y₀, y₁, k, cache, idxs, T::Type{Val{TI}}, differential_vars) where {TI} - _ode_interpolant(Θ, dt, y₀, y₁, k, cache, idxs, T, differential_vars) + Θ, dt, y₀, y₁, k, cache, idxs, T::Type{Val{TI}}, differential_vars + ) where {TI} + return _ode_interpolant(Θ, dt, y₀, y₁, k, cache, idxs, T, differential_vars) end -function ode_interpolant(Θ, dt, y₀, y₁, k, cache::OrdinaryDiffEqMutableCache, idxs, - T::Type{Val{TI}}, differential_vars) where {TI} - if idxs isa Number || y₀ isa Union{Number, SArray} +function ode_interpolant( + Θ, dt, y₀, y₁, k, cache::OrdinaryDiffEqMutableCache, idxs, + T::Type{Val{TI}}, differential_vars + ) where {TI} + return if idxs isa Number || y₀ isa Union{Number, SArray} # typeof(y₀) can be these if saveidxs gives a single value _ode_interpolant(Θ, dt, y₀, y₁, k, cache, idxs, T, differential_vars) elseif idxs isa Nothing @@ -975,8 +1284,9 @@ function ode_interpolant(Θ, dt, y₀, y₁, k, cache::OrdinaryDiffEqMutableCach end function ode_interpolant!( - out, Θ, dt, y₀, y₁, k, cache, idxs, T::Type{Val{TI}}, differential_vars) where {TI} - _ode_interpolant!(out, Θ, dt, y₀, y₁, k, cache, idxs, T, differential_vars) + out, Θ, dt, y₀, y₁, k, cache, idxs, T::Type{Val{TI}}, differential_vars + ) where {TI} + return _ode_interpolant!(out, Θ, dt, y₀, y₁, k, cache, idxs, T, differential_vars) end ##################### Hermite Interpolants @@ -1013,20 +1323,24 @@ end # If no dispatch found, assume Hermite function _ode_interpolant( - Θ, dt, y₀, y₁, k, cache, idxs, T::Type{Val{TI}}, differential_vars) where {TI} + Θ, dt, y₀, y₁, k, cache, idxs, T::Type{Val{TI}}, differential_vars + ) where {TI} TI > 3 && throw(DerivativeOrderNotPossibleError()) differential_vars = interpolation_differential_vars(differential_vars, y₀, idxs) - hermite_interpolant(Θ, dt, y₀, y₁, k, Val{cache isa OrdinaryDiffEqMutableCache}, - idxs, T, differential_vars) + return hermite_interpolant( + Θ, dt, y₀, y₁, k, Val{cache isa OrdinaryDiffEqMutableCache}, + idxs, T, differential_vars + ) end function _ode_interpolant!( - out, Θ, dt, y₀, y₁, k, cache, idxs, T::Type{Val{TI}}, differential_vars) where {TI} + out, Θ, dt, y₀, y₁, k, cache, idxs, T::Type{Val{TI}}, differential_vars + ) where {TI} TI > 3 && throw(DerivativeOrderNotPossibleError()) differential_vars = interpolation_differential_vars(differential_vars, y₀, idxs) - hermite_interpolant!(out, Θ, dt, y₀, y₁, k, idxs, T, differential_vars) + return hermite_interpolant!(out, Θ, dt, y₀, y₁, k, idxs, T, differential_vars) end """ @@ -1034,108 +1348,140 @@ Hairer Norsett Wanner Solving Ordinary Differential Euations I - Nonstiff Proble Herimte Interpolation, chosen if no other dispatch for ode_interpolant """ -@muladd function hermite_interpolant(Θ, dt, y₀, y₁, k, ::Type{Val{false}}, idxs::Nothing, - T::Type{Val{0}}, differential_vars) +@muladd function hermite_interpolant( + Θ, dt, y₀, y₁, k, ::Type{Val{false}}, idxs::Nothing, + T::Type{Val{0}}, differential_vars + ) #@.. broadcast=false (1-Θ)*y₀+Θ*y₁+Θ*(Θ-1)*((1-2Θ)*(y₁-y₀)+(Θ-1)*dt*k[1] + Θ*dt*k[2]) if all(differential_vars) @inbounds (1 - Θ) * y₀ + Θ * y₁ + - (Θ * (Θ - 1) * - ((1 - 2Θ) * (y₁ - y₀) + (Θ - 1) * dt * k[1] + Θ * dt * k[2])) + ( + Θ * (Θ - 1) * + ((1 - 2Θ) * (y₁ - y₀) + (Θ - 1) * dt * k[1] + Θ * dt * k[2]) + ) else @inbounds (1 - Θ) * y₀ + Θ * y₁ + - differential_vars .* (Θ * (Θ - 1) * - ((1 - 2Θ) * (y₁ - y₀) + (Θ - 1) * dt * k[1] + Θ * dt * k[2])) + differential_vars .* ( + Θ * (Θ - 1) * + ((1 - 2Θ) * (y₁ - y₀) + (Θ - 1) * dt * k[1] + Θ * dt * k[2]) + ) end end -@muladd function hermite_interpolant(Θ, dt, y₀, y₁, k, ::Type{Val{true}}, idxs::Nothing, - T::Type{Val{0}}, differential_vars) +@muladd function hermite_interpolant( + Θ, dt, y₀, y₁, k, ::Type{Val{true}}, idxs::Nothing, + T::Type{Val{0}}, differential_vars + ) #@.. broadcast=false (1-Θ)*y₀+Θ*y₁+Θ*(Θ-1)*((1-2Θ)*(y₁-y₀)+(Θ-1)*dt*k[1] + Θ*dt*k[2]) if all(differential_vars) - @inbounds @.. broadcast=false (1 - Θ)*y₀+Θ*y₁+ - Θ * (Θ-1) * - ((1 - 2Θ)*(y₁ - y₀)+(Θ-1)*dt*k[1]+Θ*dt*k[2]) + @inbounds @.. broadcast = false (1 - Θ) * y₀ + Θ * y₁ + + Θ * (Θ - 1) * + ((1 - 2Θ) * (y₁ - y₀) + (Θ - 1) * dt * k[1] + Θ * dt * k[2]) else - @inbounds @.. broadcast=false (1 - Θ)*y₀+Θ*y₁+ - differential_vars * Θ * (Θ-1) * - ((1 - 2Θ)*(y₁ - y₀)+(Θ-1)*dt*k[1]+Θ*dt*k[2]) + @inbounds @.. broadcast = false (1 - Θ) * y₀ + Θ * y₁ + + differential_vars * Θ * (Θ - 1) * + ((1 - 2Θ) * (y₁ - y₀) + (Θ - 1) * dt * k[1] + Θ * dt * k[2]) end end -@muladd function hermite_interpolant(Θ, dt, y₀::Array, y₁, k, ::Type{Val{true}}, - idxs::Nothing, T::Type{Val{0}}, differential_vars) +@muladd function hermite_interpolant( + Θ, dt, y₀::Array, y₁, k, ::Type{Val{true}}, + idxs::Nothing, T::Type{Val{0}}, differential_vars + ) out = similar(y₀) @inbounds @simd ivdep for i in eachindex(y₀) out[i] = (1 - Θ) * y₀[i] + Θ * y₁[i] + - differential_vars[i] * Θ * (Θ - 1) * - ((1 - 2Θ) * (y₁[i] - y₀[i]) + (Θ - 1) * dt * k[1][i] + Θ * dt * k[2][i]) + differential_vars[i] * Θ * (Θ - 1) * + ((1 - 2Θ) * (y₁[i] - y₀[i]) + (Θ - 1) * dt * k[1][i] + Θ * dt * k[2][i]) end end @muladd function hermite_interpolant( - Θ, dt, y₀, y₁, k, cache, idxs, T::Type{Val{0}}, differential_vars) + Θ, dt, y₀, y₁, k, cache, idxs, T::Type{Val{0}}, differential_vars + ) # return @.. broadcast=false (1-Θ)*y₀[idxs]+Θ*y₁[idxs]+Θ*(Θ-1)*((1-2Θ)*(y₁[idxs]-y₀[idxs])+(Θ-1)*dt*k[1][idxs] + Θ*dt*k[2][idxs]) if all(differential_vars) return (1 - Θ) * y₀[idxs] + Θ * y₁[idxs] + - (Θ * (Θ - 1) * - ((1 - 2Θ) * (y₁[idxs] - y₀[idxs]) + (Θ - 1) * dt * k[1][idxs] + - Θ * dt * k[2][idxs])) + ( + Θ * (Θ - 1) * + ( + (1 - 2Θ) * (y₁[idxs] - y₀[idxs]) + (Θ - 1) * dt * k[1][idxs] + + Θ * dt * k[2][idxs] + ) + ) else return (1 - Θ) * y₀[idxs] + Θ * y₁[idxs] + - differential_vars .* (Θ * (Θ - 1) * - ((1 - 2Θ) * (y₁[idxs] - y₀[idxs]) + (Θ - 1) * dt * k[1][idxs] + - Θ * dt * k[2][idxs])) + differential_vars .* ( + Θ * (Θ - 1) * + ( + (1 - 2Θ) * (y₁[idxs] - y₀[idxs]) + (Θ - 1) * dt * k[1][idxs] + + Θ * dt * k[2][idxs] + ) + ) end end @muladd function hermite_interpolant!( - out, Θ, dt, y₀, y₁, k, idxs::Nothing, T::Type{Val{0}}, differential_vars) + out, Θ, dt, y₀, y₁, k, idxs::Nothing, T::Type{Val{0}}, differential_vars + ) if all(differential_vars) - @inbounds @.. broadcast=false out=(1-Θ)*y₀+Θ*y₁+ - Θ*(Θ-1)* - ((1-2Θ)*(y₁-y₀)+(Θ-1)*dt*k[1]+ - Θ*dt*k[2]) + @inbounds @.. broadcast = false out = (1 - Θ) * y₀ + Θ * y₁ + + Θ * (Θ - 1) * + ( + (1 - 2Θ) * (y₁ - y₀) + (Θ - 1) * dt * k[1] + + Θ * dt * k[2] + ) else - @inbounds @.. broadcast=false out=(1-Θ)*y₀+Θ*y₁+ - differential_vars*Θ*(Θ-1)* - ((1-2Θ)*(y₁-y₀)+(Θ-1)*dt*k[1]+ - Θ*dt*k[2]) + @inbounds @.. broadcast = false out = (1 - Θ) * y₀ + Θ * y₁ + + differential_vars * Θ * (Θ - 1) * + ( + (1 - 2Θ) * (y₁ - y₀) + (Θ - 1) * dt * k[1] + + Θ * dt * k[2] + ) end out end -@muladd function hermite_interpolant!(out::Array, Θ, dt, y₀, y₁, k, idxs::Nothing, - T::Type{Val{0}}, differential_vars) +@muladd function hermite_interpolant!( + out::Array, Θ, dt, y₀, y₁, k, idxs::Nothing, + T::Type{Val{0}}, differential_vars + ) @inbounds @simd ivdep for i in eachindex(out) out[i] = (1 - Θ) * y₀[i] + Θ * y₁[i] + - differential_vars[i] * Θ * (Θ - 1) * - ((1 - 2Θ) * (y₁[i] - y₀[i]) + (Θ - 1) * dt * k[1][i] + Θ * dt * k[2][i]) + differential_vars[i] * Θ * (Θ - 1) * + ((1 - 2Θ) * (y₁[i] - y₀[i]) + (Θ - 1) * dt * k[1][i] + Θ * dt * k[2][i]) end out end @muladd function hermite_interpolant!( - out, Θ, dt, y₀, y₁, k, idxs, T::Type{Val{0}}, differential_vars) + out, Θ, dt, y₀, y₁, k, idxs, T::Type{Val{0}}, differential_vars + ) if all(differential_vars) - @views @.. broadcast=false out=(1-Θ)*y₀[idxs]+Θ*y₁[idxs]+ - Θ*(Θ-1)* - ((1-2Θ)*(y₁[idxs]-y₀[idxs])+ - (Θ-1)*dt*k[1][idxs]+Θ*dt*k[2][idxs]) + @views @.. broadcast = false out = (1 - Θ) * y₀[idxs] + Θ * y₁[idxs] + + Θ * (Θ - 1) * + ( + (1 - 2Θ) * (y₁[idxs] - y₀[idxs]) + + (Θ - 1) * dt * k[1][idxs] + Θ * dt * k[2][idxs] + ) else - @views @.. broadcast=false out=(1-Θ)*y₀[idxs]+Θ*y₁[idxs]+ - differential_vars*Θ*(Θ-1)* - ((1-2Θ)*(y₁[idxs]-y₀[idxs])+ - (Θ-1)*dt*k[1][idxs]+Θ*dt*k[2][idxs]) + @views @.. broadcast = false out = (1 - Θ) * y₀[idxs] + Θ * y₁[idxs] + + differential_vars * Θ * (Θ - 1) * + ( + (1 - 2Θ) * (y₁[idxs] - y₀[idxs]) + + (Θ - 1) * dt * k[1][idxs] + Θ * dt * k[2][idxs] + ) end out end @muladd function hermite_interpolant!( - out::Array, Θ, dt, y₀, y₁, k, idxs, T::Type{Val{0}}, differential_vars) + out::Array, Θ, dt, y₀, y₁, k, idxs, T::Type{Val{0}}, differential_vars + ) @inbounds for (j, i) in enumerate(idxs) out[j] = (1 - Θ) * y₀[i] + Θ * y₁[i] + - differential_vars[j] * Θ * (Θ - 1) * - ((1 - 2Θ) * (y₁[i] - y₀[i]) + (Θ - 1) * dt * k[1][i] + Θ * dt * k[2][i]) + differential_vars[j] * Θ * (Θ - 1) * + ((1 - 2Θ) * (y₁[i] - y₀[i]) + (Θ - 1) * dt * k[1][i] + Θ * dt * k[2][i]) end out end @@ -1143,127 +1489,181 @@ end """ Herimte Interpolation, chosen if no other dispatch for ode_interpolant """ -@muladd function hermite_interpolant(Θ, dt, y₀, y₁, k, ::Type{Val{false}}, idxs::Nothing, - T::Type{Val{1}}, differential_vars) +@muladd function hermite_interpolant( + Θ, dt, y₀, y₁, k, ::Type{Val{false}}, idxs::Nothing, + T::Type{Val{1}}, differential_vars + ) #@.. broadcast=false k[1] + Θ*(-4*dt*k[1] - 2*dt*k[2] - 6*y₀ + Θ*(3*dt*k[1] + 3*dt*k[2] + 6*y₀ - 6*y₁) + 6*y₁)/dt if all(differential_vars) @inbounds ( k[1] + - Θ * (-4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + - Θ * (3 * dt * k[1] + 3 * dt * k[2] + 6 * y₀ - 6 * y₁) + 6 * y₁) / dt) + Θ * ( + -4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + + Θ * (3 * dt * k[1] + 3 * dt * k[2] + 6 * y₀ - 6 * y₁) + 6 * y₁ + ) / dt + ) else @inbounds (.!differential_vars) .* (y₁ - y₀) / dt + - differential_vars .* ( + differential_vars .* ( k[1] + - Θ * (-4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + - Θ * (3 * dt * k[1] + 3 * dt * k[2] + 6 * y₀ - 6 * y₁) + 6 * y₁) / dt) + Θ * ( + -4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + + Θ * (3 * dt * k[1] + 3 * dt * k[2] + 6 * y₀ - 6 * y₁) + 6 * y₁ + ) / dt + ) end end -@muladd function hermite_interpolant(Θ, dt, y₀, y₁, k, ::Type{Val{true}}, idxs::Nothing, - T::Type{Val{1}}, differential_vars) +@muladd function hermite_interpolant( + Θ, dt, y₀, y₁, k, ::Type{Val{true}}, idxs::Nothing, + T::Type{Val{1}}, differential_vars + ) if all(differential_vars) - @inbounds @.. broadcast=false !differential_vars * - ((y₁ - y₀) / - dt)+( + @inbounds @.. broadcast = false !differential_vars * + ( + (y₁ - y₀) / + dt + ) + ( k[1] + - Θ * (-4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + - Θ * - (3 * dt * k[1] + 3 * dt * k[2] + 6 * y₀ - 6 * y₁) + - 6 * y₁) / dt) + Θ * ( + -4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + + Θ * + (3 * dt * k[1] + 3 * dt * k[2] + 6 * y₀ - 6 * y₁) + + 6 * y₁ + ) / dt + ) else - @inbounds @.. broadcast=false !differential_vars * - ((y₁ - y₀) / - dt)+differential_vars * ( + @inbounds @.. broadcast = false !differential_vars * + ( + (y₁ - y₀) / + dt + ) + differential_vars * ( k[1] + - Θ * (-4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + - Θ * - (3 * dt * k[1] + 3 * dt * k[2] + 6 * y₀ - 6 * y₁) + - 6 * y₁) / dt) + Θ * ( + -4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + + Θ * + (3 * dt * k[1] + 3 * dt * k[2] + 6 * y₀ - 6 * y₁) + + 6 * y₁ + ) / dt + ) end end @muladd function hermite_interpolant( - Θ, dt, y₀, y₁, k, cache, idxs, T::Type{Val{1}}, differential_vars) + Θ, dt, y₀, y₁, k, cache, idxs, T::Type{Val{1}}, differential_vars + ) if all(differential_vars) ( k[1][idxs] + - Θ * (-4 * dt * k[1][idxs] - 2 * dt * k[2][idxs] - 6 * y₀[idxs] + - Θ * (3 * dt * k[1][idxs] + 3 * dt * k[2][idxs] + 6 * y₀[idxs] - 6 * y₁[idxs]) + - 6 * y₁[idxs]) / dt) + Θ * ( + -4 * dt * k[1][idxs] - 2 * dt * k[2][idxs] - 6 * y₀[idxs] + + Θ * (3 * dt * k[1][idxs] + 3 * dt * k[2][idxs] + 6 * y₀[idxs] - 6 * y₁[idxs]) + + 6 * y₁[idxs] + ) / dt + ) else (.!differential_vars) .* ((y₁[idxs] - y₀[idxs]) / dt) + - differential_vars .* ( + differential_vars .* ( k[1][idxs] + - Θ * (-4 * dt * k[1][idxs] - 2 * dt * k[2][idxs] - 6 * y₀[idxs] + - Θ * (3 * dt * k[1][idxs] + 3 * dt * k[2][idxs] + 6 * y₀[idxs] - 6 * y₁[idxs]) + - 6 * y₁[idxs]) / dt) + Θ * ( + -4 * dt * k[1][idxs] - 2 * dt * k[2][idxs] - 6 * y₀[idxs] + + Θ * (3 * dt * k[1][idxs] + 3 * dt * k[2][idxs] + 6 * y₀[idxs] - 6 * y₁[idxs]) + + 6 * y₁[idxs] + ) / dt + ) end end @muladd function hermite_interpolant!( - out, Θ, dt, y₀, y₁, k, idxs::Nothing, T::Type{Val{1}}, differential_vars) + out, Θ, dt, y₀, y₁, k, idxs::Nothing, T::Type{Val{1}}, differential_vars + ) if all(differential_vars) - @inbounds @.. broadcast=false out=( - k[1]+ - Θ*(-4*dt*k[1]-2*dt*k[2]-6*y₀+ - Θ* - (3*dt*k[1]+3*dt*k[2]+6*y₀-6*y₁)+ - 6*y₁)/dt) + @inbounds @.. broadcast = false out = ( + k[1] + + Θ * ( + -4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + + Θ * + (3 * dt * k[1] + 3 * dt * k[2] + 6 * y₀ - 6 * y₁) + + 6 * y₁ + ) / dt + ) else - @inbounds @.. broadcast=false out=!differential_vars*((y₁-y₀)/dt)+ - differential_vars*( - k[1]+ - Θ*(-4*dt*k[1]-2*dt*k[2]-6*y₀+ - Θ* - (3*dt*k[1]+3*dt*k[2]+6*y₀-6*y₁)+ - 6*y₁)/dt) + @inbounds @.. broadcast = false out = !differential_vars * ((y₁ - y₀) / dt) + + differential_vars * ( + k[1] + + Θ * ( + -4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + + Θ * + (3 * dt * k[1] + 3 * dt * k[2] + 6 * y₀ - 6 * y₁) + + 6 * y₁ + ) / dt + ) end out end -@muladd function hermite_interpolant!(out::Array, Θ, dt, y₀, y₁, k, idxs::Nothing, - T::Type{Val{1}}, differential_vars) +@muladd function hermite_interpolant!( + out::Array, Θ, dt, y₀, y₁, k, idxs::Nothing, + T::Type{Val{1}}, differential_vars + ) @inbounds @simd ivdep for i in eachindex(out) out[i] = !differential_vars[i] * ((y₁[i] - y₀[i]) / dt) + - differential_vars[i] * ( + differential_vars[i] * ( k[1][i] + - Θ * (-4 * dt * k[1][i] - 2 * dt * k[2][i] - 6 * y₀[i] + - Θ * (3 * dt * k[1][i] + 3 * dt * k[2][i] + 6 * y₀[i] - 6 * y₁[i]) + - 6 * y₁[i]) / dt) + Θ * ( + -4 * dt * k[1][i] - 2 * dt * k[2][i] - 6 * y₀[i] + + Θ * (3 * dt * k[1][i] + 3 * dt * k[2][i] + 6 * y₀[i] - 6 * y₁[i]) + + 6 * y₁[i] + ) / dt + ) end out end @muladd function hermite_interpolant!( - out, Θ, dt, y₀, y₁, k, idxs, T::Type{Val{1}}, differential_vars) + out, Θ, dt, y₀, y₁, k, idxs, T::Type{Val{1}}, differential_vars + ) if all(differential_vars) - @views @.. broadcast=false out=( - k[1][idxs]+ - Θ*(-4*dt*k[1][idxs]-2*dt*k[2][idxs]- - 6*y₀[idxs]+ - Θ*(3*dt*k[1][idxs]+3*dt*k[2][idxs]+ - 6*y₀[idxs]-6*y₁[idxs])+6*y₁[idxs])/dt) + @views @.. broadcast = false out = ( + k[1][idxs] + + Θ * ( + -4 * dt * k[1][idxs] - 2 * dt * k[2][idxs] - + 6 * y₀[idxs] + + Θ * ( + 3 * dt * k[1][idxs] + 3 * dt * k[2][idxs] + + 6 * y₀[idxs] - 6 * y₁[idxs] + ) + 6 * y₁[idxs] + ) / dt + ) else - @views @.. broadcast=false out=!differential_vars*((y₁-y₀)/dt)+ - differential_vars*( - k[1][idxs]+ - Θ*(-4*dt*k[1][idxs]-2*dt*k[2][idxs]- - 6*y₀[idxs]+ - Θ*(3*dt*k[1][idxs]+3*dt*k[2][idxs]+ - 6*y₀[idxs]-6*y₁[idxs])+6*y₁[idxs])/dt) + @views @.. broadcast = false out = !differential_vars * ((y₁ - y₀) / dt) + + differential_vars * ( + k[1][idxs] + + Θ * ( + -4 * dt * k[1][idxs] - 2 * dt * k[2][idxs] - + 6 * y₀[idxs] + + Θ * ( + 3 * dt * k[1][idxs] + 3 * dt * k[2][idxs] + + 6 * y₀[idxs] - 6 * y₁[idxs] + ) + 6 * y₁[idxs] + ) / dt + ) end end @muladd function hermite_interpolant!( - out::Array, Θ, dt, y₀, y₁, k, idxs, T::Type{Val{1}}, differential_vars) + out::Array, Θ, dt, y₀, y₁, k, idxs, T::Type{Val{1}}, differential_vars + ) @inbounds for (j, i) in enumerate(idxs) out[j] = !differential_vars[j] * ((y₁[i] - y₀[i]) / dt) + - differential_vars[j] * ( + differential_vars[j] * ( k[1][i] + - Θ * (-4 * dt * k[1][i] - 2 * dt * k[2][i] - 6 * y₀[i] + - Θ * (3 * dt * k[1][i] + 3 * dt * k[2][i] + 6 * y₀[i] - 6 * y₁[i]) + - 6 * y₁[i]) / dt) + Θ * ( + -4 * dt * k[1][i] - 2 * dt * k[2][i] - 6 * y₀[i] + + Θ * (3 * dt * k[1][i] + 3 * dt * k[2][i] + 6 * y₀[i] - 6 * y₁[i]) + + 6 * y₁[i] + ) / dt + ) end out end @@ -1271,41 +1671,58 @@ end """ Herimte Interpolation, chosen if no other dispatch for ode_interpolant """ -@muladd function hermite_interpolant(Θ, dt, y₀, y₁, k, ::Type{Val{false}}, idxs::Nothing, - T::Type{Val{2}}, differential_vars) +@muladd function hermite_interpolant( + Θ, dt, y₀, y₁, k, ::Type{Val{false}}, idxs::Nothing, + T::Type{Val{2}}, differential_vars + ) if all(differential_vars) - @inbounds (-4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + - Θ * (6 * dt * k[1] + 6 * dt * k[2] + 12 * y₀ - 12 * y₁) + 6 * y₁) / - (dt * dt) + @inbounds ( + -4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + + Θ * (6 * dt * k[1] + 6 * dt * k[2] + 12 * y₀ - 12 * y₁) + 6 * y₁ + ) / + (dt * dt) else - @inbounds differential_vars .* (-4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + - Θ * (6 * dt * k[1] + 6 * dt * k[2] + 12 * y₀ - 12 * y₁) + 6 * y₁) / - (dt * dt) + @inbounds differential_vars .* ( + -4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + + Θ * (6 * dt * k[1] + 6 * dt * k[2] + 12 * y₀ - 12 * y₁) + 6 * y₁ + ) / + (dt * dt) end end -@muladd function hermite_interpolant(Θ, dt, y₀, y₁, k, ::Type{Val{true}}, idxs::Nothing, - T::Type{Val{2}}, differential_vars) +@muladd function hermite_interpolant( + Θ, dt, y₀, y₁, k, ::Type{Val{true}}, idxs::Nothing, + T::Type{Val{2}}, differential_vars + ) if all(differential_vars) - @inbounds @.. broadcast=false (-4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + - Θ * - (6 * dt * k[1] + 6 * dt * k[2] + 12 * y₀ - 12 * y₁) + - 6 * y₁)/(dt * dt) + @inbounds @.. broadcast = false ( + -4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + + Θ * + (6 * dt * k[1] + 6 * dt * k[2] + 12 * y₀ - 12 * y₁) + + 6 * y₁ + ) / (dt * dt) else - @inbounds @.. broadcast=false differential_vars * - (-4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + - Θ * - (6 * dt * k[1] + 6 * dt * k[2] + 12 * y₀ - 12 * y₁) + - 6 * y₁)/(dt * dt) + @inbounds @.. broadcast = false differential_vars * + ( + -4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + + Θ * + (6 * dt * k[1] + 6 * dt * k[2] + 12 * y₀ - 12 * y₁) + + 6 * y₁ + ) / (dt * dt) end end @muladd function hermite_interpolant( - Θ, dt, y₀, y₁, k, cache, idxs, T::Type{Val{2}}, differential_vars) + Θ, dt, y₀, y₁, k, cache, idxs, T::Type{Val{2}}, differential_vars + ) if all(differential_vars) - @views out = (-4 * dt * k[1][idxs] - 2 * dt * k[2][idxs] - 6 * y₀[idxs] + - Θ * (6 * dt * k[1][idxs] + 6 * dt * k[2][idxs] + 12 * y₀[idxs] - - 12 * y₁[idxs]) + 6 * y₁[idxs]) / (dt * dt) + @views out = ( + -4 * dt * k[1][idxs] - 2 * dt * k[2][idxs] - 6 * y₀[idxs] + + Θ * ( + 6 * dt * k[1][idxs] + 6 * dt * k[2][idxs] + 12 * y₀[idxs] - + 12 * y₁[idxs] + ) + 6 * y₁[idxs] + ) / (dt * dt) else @views out = differential_vars .* (-4 * dt * k[1][idxs] - 2 * dt * k[2][idxs] - 6 * y₀[idxs] + Θ * (6 * dt * k[1][idxs] + 6 * dt * k[2][idxs] + 12 * y₀[idxs] - 12 * y₁[idxs]) + 6 * y₁[idxs]) / (dt * dt) end @@ -1313,61 +1730,86 @@ end end @muladd function hermite_interpolant!( - out, Θ, dt, y₀, y₁, k, idxs::Nothing, T::Type{Val{2}}, differential_vars) + out, Θ, dt, y₀, y₁, k, idxs::Nothing, T::Type{Val{2}}, differential_vars + ) if all(differential_vars) - @inbounds @.. broadcast=false out=(-4*dt*k[1]-2*dt*k[2]-6*y₀+ - Θ* - (6*dt*k[1]+6*dt*k[2]+12*y₀- - 12*y₁)+ - 6*y₁)/(dt*dt) + @inbounds @.. broadcast = false out = ( + -4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + + Θ * + ( + 6 * dt * k[1] + 6 * dt * k[2] + 12 * y₀ - + 12 * y₁ + ) + + 6 * y₁ + ) / (dt * dt) else - @inbounds @.. broadcast=false out=differential_vars* - (-4*dt*k[1]-2*dt*k[2]-6*y₀+ - Θ* - (6*dt*k[1]+6*dt*k[2]+12*y₀- - 12*y₁)+ - 6*y₁)/(dt*dt) + @inbounds @.. broadcast = false out = differential_vars * + ( + -4 * dt * k[1] - 2 * dt * k[2] - 6 * y₀ + + Θ * + ( + 6 * dt * k[1] + 6 * dt * k[2] + 12 * y₀ - + 12 * y₁ + ) + + 6 * y₁ + ) / (dt * dt) end out end -@muladd function hermite_interpolant!(out::Array, Θ, dt, y₀, y₁, k, idxs::Nothing, - T::Type{Val{2}}, differential_vars) +@muladd function hermite_interpolant!( + out::Array, Θ, dt, y₀, y₁, k, idxs::Nothing, + T::Type{Val{2}}, differential_vars + ) @inbounds @simd ivdep for i in eachindex(out) out[i] = differential_vars[i] * - (-4 * dt * k[1][i] - 2 * dt * k[2][i] - 6 * y₀[i] + - Θ * (6 * dt * k[1][i] + 6 * dt * k[2][i] + 12 * y₀[i] - 12 * y₁[i]) + - 6 * y₁[i]) / (dt * dt) + ( + -4 * dt * k[1][i] - 2 * dt * k[2][i] - 6 * y₀[i] + + Θ * (6 * dt * k[1][i] + 6 * dt * k[2][i] + 12 * y₀[i] - 12 * y₁[i]) + + 6 * y₁[i] + ) / (dt * dt) end out end @muladd function hermite_interpolant!( - out, Θ, dt, y₀, y₁, k, idxs, T::Type{Val{2}}, differential_vars) + out, Θ, dt, y₀, y₁, k, idxs, T::Type{Val{2}}, differential_vars + ) if all(differential_vars) - @views @.. broadcast=false out=(-4*dt*k[1][idxs]-2*dt*k[2][idxs]- - 6*y₀[idxs]+ - Θ*(6*dt*k[1][idxs]+6*dt*k[2][idxs]+ - 12*y₀[idxs]-12*y₁[idxs])+6*y₁[idxs])/ - (dt*dt) + @views @.. broadcast = false out = ( + -4 * dt * k[1][idxs] - 2 * dt * k[2][idxs] - + 6 * y₀[idxs] + + Θ * ( + 6 * dt * k[1][idxs] + 6 * dt * k[2][idxs] + + 12 * y₀[idxs] - 12 * y₁[idxs] + ) + 6 * y₁[idxs] + ) / + (dt * dt) else - @views @.. broadcast=false out=differential_vars* - (-4*dt*k[1][idxs]-2*dt*k[2][idxs]- - 6*y₀[idxs]+ - Θ*(6*dt*k[1][idxs]+6*dt*k[2][idxs]+ - 12*y₀[idxs]-12*y₁[idxs])+6*y₁[idxs])/ - (dt*dt) + @views @.. broadcast = false out = differential_vars * + ( + -4 * dt * k[1][idxs] - 2 * dt * k[2][idxs] - + 6 * y₀[idxs] + + Θ * ( + 6 * dt * k[1][idxs] + 6 * dt * k[2][idxs] + + 12 * y₀[idxs] - 12 * y₁[idxs] + ) + 6 * y₁[idxs] + ) / + (dt * dt) end out end @muladd function hermite_interpolant!( - out::Array, Θ, dt, y₀, y₁, k, idxs, T::Type{Val{2}}, differential_vars) + out::Array, Θ, dt, y₀, y₁, k, idxs, T::Type{Val{2}}, differential_vars + ) @inbounds for (j, i) in enumerate(idxs) out[j] = differential_vars[j] * - (-4 * dt * k[1][i] - 2 * dt * k[2][i] - 6 * y₀[i] + - Θ * (6 * dt * k[1][i] + 6 * dt * k[2][i] + 12 * y₀[i] - 12 * y₁[i]) + - 6 * y₁[i]) / (dt * dt) + ( + -4 * dt * k[1][i] - 2 * dt * k[2][i] - 6 * y₀[i] + + Θ * (6 * dt * k[1][i] + 6 * dt * k[2][i] + 12 * y₀[i] - 12 * y₁[i]) + + 6 * y₁[i] + ) / (dt * dt) end out end @@ -1375,39 +1817,54 @@ end """ Herimte Interpolation, chosen if no other dispatch for ode_interpolant """ -@muladd function hermite_interpolant(Θ, dt, y₀, y₁, k, ::Type{Val{false}}, idxs::Nothing, - T::Type{Val{3}}, differential_vars) +@muladd function hermite_interpolant( + Θ, dt, y₀, y₁, k, ::Type{Val{false}}, idxs::Nothing, + T::Type{Val{3}}, differential_vars + ) #@.. broadcast=false (6*dt*k[1] + 6*dt*k[2] + 12*y₀ - 12*y₁)/(dt*dt*dt) if all(differential_vars) @inbounds (6 * dt * k[1] + 6 * dt * k[2] + 12 * y₀ - 12 * y₁) / (dt * dt * dt) else @inbounds differential_vars .* (6 * dt * k[1] + 6 * dt * k[2] + 12 * y₀ - 12 * y₁) / - (dt * dt * dt) + (dt * dt * dt) end end -@muladd function hermite_interpolant(Θ, dt, y₀, y₁, k, ::Type{Val{true}}, idxs::Nothing, - T::Type{Val{3}}, differential_vars) +@muladd function hermite_interpolant( + Θ, dt, y₀, y₁, k, ::Type{Val{true}}, idxs::Nothing, + T::Type{Val{3}}, differential_vars + ) if all(differential_vars) - @inbounds @.. broadcast=false (6 * dt * k[1] + 6 * dt * k[2] + 12 * y₀ - - 12 * y₁)/(dt * - dt * - dt) + @inbounds @.. broadcast = false ( + 6 * dt * k[1] + 6 * dt * k[2] + 12 * y₀ - + 12 * y₁ + ) / ( + dt * + dt * + dt + ) else - @inbounds @.. broadcast=false differential_vars * - (6 * dt * k[1] + 6 * dt * k[2] + 12 * y₀ - - 12 * y₁)/(dt * - dt * - dt) + @inbounds @.. broadcast = false differential_vars * + ( + 6 * dt * k[1] + 6 * dt * k[2] + 12 * y₀ - + 12 * y₁ + ) / ( + dt * + dt * + dt + ) end end @muladd function hermite_interpolant( - Θ, dt, y₀, y₁, k, cache, idxs, T::Type{Val{3}}, differential_vars) + Θ, dt, y₀, y₁, k, cache, idxs, T::Type{Val{3}}, differential_vars + ) if all(differential_vars) - @views out = (6 * dt * k[1][idxs] + 6 * dt * k[2][idxs] + 12 * y₀[idxs] - - 12 * y₁[idxs]) / - (dt * dt * dt) + @views out = ( + 6 * dt * k[1][idxs] + 6 * dt * k[2][idxs] + 12 * y₀[idxs] - + 12 * y₁[idxs] + ) / + (dt * dt * dt) else @views out = differential_vars .* (6 * dt * k[1][idxs] + 6 * dt * k[2][idxs] + 12 * y₀[idxs] - 12 * y₁[idxs]) / (dt * dt * dt) end @@ -1415,49 +1872,62 @@ end end @muladd function hermite_interpolant!( - out, Θ, dt, y₀, y₁, k, idxs::Nothing, T::Type{Val{3}}, differential_vars) + out, Θ, dt, y₀, y₁, k, idxs::Nothing, T::Type{Val{3}}, differential_vars + ) if all(differential_vars) - @inbounds @.. broadcast=false out=(6*dt*k[1]+6*dt*k[2]+12*y₀- - 12*y₁)/ - (dt*dt*dt) + @inbounds @.. broadcast = false out = ( + 6 * dt * k[1] + 6 * dt * k[2] + 12 * y₀ - + 12 * y₁ + ) / + (dt * dt * dt) else - @inbounds @.. broadcast=false out=differential_vars* - (6*dt*k[1]+6*dt*k[2]+12*y₀- - 12*y₁)/ - (dt*dt*dt) + @inbounds @.. broadcast = false out = differential_vars * + ( + 6 * dt * k[1] + 6 * dt * k[2] + 12 * y₀ - + 12 * y₁ + ) / + (dt * dt * dt) end out end -@muladd function hermite_interpolant!(out::Array, Θ, dt, y₀, y₁, k, idxs::Nothing, - T::Type{Val{3}}, differential_vars) +@muladd function hermite_interpolant!( + out::Array, Θ, dt, y₀, y₁, k, idxs::Nothing, + T::Type{Val{3}}, differential_vars + ) @inbounds @simd ivdep for i in eachindex(out) out[i] = differential_vars[i] * - (6 * dt * k[1][i] + 6 * dt * k[2][i] + 12 * y₀[i] - 12 * y₁[i]) / - (dt * dt * dt) + (6 * dt * k[1][i] + 6 * dt * k[2][i] + 12 * y₀[i] - 12 * y₁[i]) / + (dt * dt * dt) end out end @muladd function hermite_interpolant!( - out, Θ, dt, y₀, y₁, k, idxs, T::Type{Val{3}}, differential_vars) + out, Θ, dt, y₀, y₁, k, idxs, T::Type{Val{3}}, differential_vars + ) if all(differential_vars) - @views @.. broadcast=false out=(6*dt*k[1][idxs]+6*dt*k[2][idxs]+ - 12*y₀[idxs]-12*y₁[idxs])/(dt*dt*dt) + @views @.. broadcast = false out = ( + 6 * dt * k[1][idxs] + 6 * dt * k[2][idxs] + + 12 * y₀[idxs] - 12 * y₁[idxs] + ) / (dt * dt * dt) else - @views @.. broadcast=false out=differential_vars* - (6*dt*k[1][idxs]+6*dt*k[2][idxs]+ - 12*y₀[idxs]-12*y₁[idxs])/(dt*dt*dt) + @views @.. broadcast = false out = differential_vars * + ( + 6 * dt * k[1][idxs] + 6 * dt * k[2][idxs] + + 12 * y₀[idxs] - 12 * y₁[idxs] + ) / (dt * dt * dt) end out end @muladd function hermite_interpolant!( - out::Array, Θ, dt, y₀, y₁, k, idxs, T::Type{Val{3}}, differential_vars) + out::Array, Θ, dt, y₀, y₁, k, idxs, T::Type{Val{3}}, differential_vars + ) @inbounds for (j, i) in enumerate(idxs) out[j] = differential_vars[j] * - (6 * dt * k[1][i] + 6 * dt * k[2][i] + 12 * y₀[i] - 12 * y₁[i]) / - (dt * dt * dt) + (6 * dt * k[1][i] + 6 * dt * k[2][i] + 12 * y₀[i] - 12 * y₁[i]) / + (dt * dt * dt) end out end @@ -1466,24 +1936,26 @@ end @muladd @inline function linear_interpolant(Θ, dt, y₀, y₁, idxs::Nothing, T::Type{Val{0}}) Θm1 = (1 - Θ) - @.. broadcast=false Θm1 * y₀+Θ * y₁ + @.. broadcast = false Θm1 * y₀ + Θ * y₁ end @muladd @inline function linear_interpolant(Θ, dt, y₀, y₁, idxs, T::Type{Val{0}}) Θm1 = (1 - Θ) - @.. broadcast=false Θm1 * y₀[idxs]+Θ * y₁[idxs] + @.. broadcast = false Θm1 * y₀[idxs] + Θ * y₁[idxs] end -@muladd @inline function linear_interpolant!(out, Θ, dt, y₀, y₁, idxs::Nothing, - T::Type{Val{0}}) +@muladd @inline function linear_interpolant!( + out, Θ, dt, y₀, y₁, idxs::Nothing, + T::Type{Val{0}} + ) Θm1 = (1 - Θ) - @.. broadcast=false out=Θm1*y₀+Θ*y₁ + @.. broadcast = false out = Θm1 * y₀ + Θ * y₁ out end @muladd @inline function linear_interpolant!(out, Θ, dt, y₀, y₁, idxs, T::Type{Val{0}}) Θm1 = (1 - Θ) - @views @.. broadcast=false out=Θm1*y₀[idxs]+Θ*y₁[idxs] + @views @.. broadcast = false out = Θm1 * y₀[idxs] + Θ * y₁[idxs] out end @@ -1491,19 +1963,19 @@ end Linear Interpolation """ @inline function linear_interpolant(Θ, dt, y₀, y₁, idxs::Nothing, T::Type{Val{1}}) - (y₁ - y₀) / dt + return (y₁ - y₀) / dt end @inline function linear_interpolant(Θ, dt, y₀, y₁, idxs, T::Type{Val{1}}) - @.. broadcast=false (y₁[idxs] - y₀[idxs])/dt + return @.. broadcast = false (y₁[idxs] - y₀[idxs]) / dt end @inline function linear_interpolant!(out, Θ, dt, y₀, y₁, idxs::Nothing, T::Type{Val{1}}) - @.. broadcast=false out=(y₁-y₀)/dt - out + @.. broadcast = false out = (y₁ - y₀) / dt + return out end @inline function linear_interpolant!(out, Θ, dt, y₀, y₁, idxs, T::Type{Val{1}}) - @views @.. broadcast=false out=(y₁[idxs]-y₀[idxs])/dt - out + @views @.. broadcast = false out = (y₁[idxs] - y₀[idxs]) / dt + return out end diff --git a/lib/OrdinaryDiffEqCore/src/doc_utils.jl b/lib/OrdinaryDiffEqCore/src/doc_utils.jl index 44872a3585..f80ee4a856 100644 --- a/lib/OrdinaryDiffEqCore/src/doc_utils.jl +++ b/lib/OrdinaryDiffEqCore/src/doc_utils.jl @@ -2,12 +2,14 @@ Utility function to help generating consistent docstrings across the package. """ # TODO we should add a consistency check using the string $name(; $keyword_default) against the standard console output of name() -function generic_solver_docstring(description::String, +function generic_solver_docstring( + description::String, name::String, solver_class::String, references::String, keyword_description::String, - keyword_default::String) + keyword_default::String + ) if !isempty(keyword_default) # Chunk string and remove empty lines kws = split(keyword_default, "\n") @@ -43,110 +45,114 @@ function generic_solver_docstring(description::String, keyword_docstring = """ - ### Keyword Arguments + ### Keyword Arguments - $keyword_description - """ + $keyword_description + """ return start_docstring * description * keyword_docstring * - "## References\n" * references + "## References\n" * references end -function explicit_rk_docstring(description::String, +function explicit_rk_docstring( + description::String, name::String; references::String = "", extra_keyword_description::String = "", - extra_keyword_default::String = "") + extra_keyword_default::String = "" + ) keyword_default = """ - stage_limiter! = OrdinaryDiffEq.trivial_limiter!, - step_limiter! = OrdinaryDiffEq.trivial_limiter!, - thread = OrdinaryDiffEq.False(), - """ * extra_keyword_default + stage_limiter! = OrdinaryDiffEq.trivial_limiter!, + step_limiter! = OrdinaryDiffEq.trivial_limiter!, + thread = OrdinaryDiffEq.False(), + """ * extra_keyword_default keyword_default_description = """ - - `stage_limiter!`: function of the form `limiter!(u, integrator, p, t)` - - `step_limiter!`: function of the form `limiter!(u, integrator, p, t)` - - `thread`: determines whether internal broadcasting on appropriate CPU arrays should be serial (`thread = OrdinaryDiffEq.False()`) or use multiple threads (`thread = OrdinaryDiffEq.True()`) when Julia is started with multiple threads. - """ * extra_keyword_description + - `stage_limiter!`: function of the form `limiter!(u, integrator, p, t)` + - `step_limiter!`: function of the form `limiter!(u, integrator, p, t)` + - `thread`: determines whether internal broadcasting on appropriate CPU arrays should be serial (`thread = OrdinaryDiffEq.False()`) or use multiple threads (`thread = OrdinaryDiffEq.True()`) when Julia is started with multiple threads. + """ * extra_keyword_description - generic_solver_docstring( + return generic_solver_docstring( description, name, "Explicit Runge-Kutta Method. ", references, keyword_default_description, keyword_default ) end -function differentiation_rk_docstring(description::String, +function differentiation_rk_docstring( + description::String, name::String, solver_class::String; references::String = "", extra_keyword_description::String = "", - extra_keyword_default::String = "") + extra_keyword_default::String = "" + ) keyword_default = """ - chunk_size = Val{0}(), - autodiff = AutoForwardDiff(), - standardtag = Val{true}(), - concrete_jac = nothing, - diff_type = Val{:forward}, - linsolve = nothing, - precs = DEFAULT_PRECS, - """ * extra_keyword_default + chunk_size = Val{0}(), + autodiff = AutoForwardDiff(), + standardtag = Val{true}(), + concrete_jac = nothing, + diff_type = Val{:forward}, + linsolve = nothing, + precs = DEFAULT_PRECS, + """ * extra_keyword_default keyword_default_description = """ - - `autodiff`: Uses [ADTypes.jl](https://sciml.github.io/ADTypes.jl/stable/) - to specify whether to use automatic differentiation via - [ForwardDiff.jl](https://github.com/JuliaDiff/ForwardDiff.jl) or finite - differencing via [FiniteDiff.jl](https://github.com/JuliaDiff/FiniteDiff.jl). - Defaults to `AutoForwardDiff()` for automatic differentiation, which by default uses - `chunksize = 0`, and thus uses the internal ForwardDiff.jl algorithm for the choice. - To use `FiniteDiff.jl`, the `AutoFiniteDiff()` ADType can be used, which has a keyword argument - `fdtype` with default value `Val{:forward}()`, and alternatives `Val{:central}()` and `Val{:complex}()`. - - `standardtag`: Specifies whether to use package-specific tags instead of the - ForwardDiff default function-specific tags. For more information, see - [this blog post](https://www.stochasticlifestyle.com/improved-forwarddiff-jl-stacktraces-with-package-tags/). - Defaults to `Val{true}()`. - - `concrete_jac`: Specifies whether a Jacobian should be constructed. Defaults to - `nothing`, which means it will be chosen true/false depending on circumstances - of the solver, such as whether a Krylov subspace method is used for `linsolve`. - - `linsolve`: Any [LinearSolve.jl](https://github.com/SciML/LinearSolve.jl) compatible linear solver. - For example, to use [KLU.jl](https://github.com/JuliaSparse/KLU.jl), specify - `$name(linsolve = KLUFactorization()`). - When `nothing` is passed, uses `DefaultLinearSolver`. - - `precs`: Any [LinearSolve.jl-compatible preconditioner](https://docs.sciml.ai/LinearSolve/stable/basics/Preconditioners/) - can be used as a left or right preconditioner. - Preconditioners are specified by the `Pl,Pr = precs(W,du,u,p,t,newW,Plprev,Prprev,solverdata)` - function where the arguments are defined as: - - `W`: the current Jacobian of the nonlinear system. Specified as either - ``I - \\gamma J`` or ``I/\\gamma - J`` depending on the algorithm. This will - commonly be a `WOperator` type defined by OrdinaryDiffEq.jl. It is a lazy - representation of the operator. Users can construct the W-matrix on demand - by calling `convert(AbstractMatrix,W)` to receive an `AbstractMatrix` matching - the `jac_prototype`. - - `du`: the current ODE derivative - - `u`: the current ODE state - - `p`: the ODE parameters - - `t`: the current ODE time - - `newW`: a `Bool` which specifies whether the `W` matrix has been updated since - the last call to `precs`. It is recommended that this is checked to only - update the preconditioner when `newW == true`. - - `Plprev`: the previous `Pl`. - - `Prprev`: the previous `Pr`. - - `solverdata`: Optional extra data the solvers can give to the `precs` function. - Solver-dependent and subject to change. - The return is a tuple `(Pl,Pr)` of the LinearSolve.jl-compatible preconditioners. - To specify one-sided preconditioning, simply return `nothing` for the preconditioner - which is not used. Additionally, `precs` must supply the dispatch: - ```julia - Pl, Pr = precs(W, du, u, p, t, ::Nothing, ::Nothing, ::Nothing, solverdata) - ``` - which is used in the solver setup phase to construct the integrator - type with the preconditioners `(Pl,Pr)`. - The default is `precs=DEFAULT_PRECS` where the default preconditioner function - is defined as: - ```julia - DEFAULT_PRECS(W, du, u, p, t, newW, Plprev, Prprev, solverdata) = nothing, nothing - ``` - """ * extra_keyword_description + - `autodiff`: Uses [ADTypes.jl](https://sciml.github.io/ADTypes.jl/stable/) + to specify whether to use automatic differentiation via + [ForwardDiff.jl](https://github.com/JuliaDiff/ForwardDiff.jl) or finite + differencing via [FiniteDiff.jl](https://github.com/JuliaDiff/FiniteDiff.jl). + Defaults to `AutoForwardDiff()` for automatic differentiation, which by default uses + `chunksize = 0`, and thus uses the internal ForwardDiff.jl algorithm for the choice. + To use `FiniteDiff.jl`, the `AutoFiniteDiff()` ADType can be used, which has a keyword argument + `fdtype` with default value `Val{:forward}()`, and alternatives `Val{:central}()` and `Val{:complex}()`. + - `standardtag`: Specifies whether to use package-specific tags instead of the + ForwardDiff default function-specific tags. For more information, see + [this blog post](https://www.stochasticlifestyle.com/improved-forwarddiff-jl-stacktraces-with-package-tags/). + Defaults to `Val{true}()`. + - `concrete_jac`: Specifies whether a Jacobian should be constructed. Defaults to + `nothing`, which means it will be chosen true/false depending on circumstances + of the solver, such as whether a Krylov subspace method is used for `linsolve`. + - `linsolve`: Any [LinearSolve.jl](https://github.com/SciML/LinearSolve.jl) compatible linear solver. + For example, to use [KLU.jl](https://github.com/JuliaSparse/KLU.jl), specify + `$name(linsolve = KLUFactorization()`). + When `nothing` is passed, uses `DefaultLinearSolver`. + - `precs`: Any [LinearSolve.jl-compatible preconditioner](https://docs.sciml.ai/LinearSolve/stable/basics/Preconditioners/) + can be used as a left or right preconditioner. + Preconditioners are specified by the `Pl,Pr = precs(W,du,u,p,t,newW,Plprev,Prprev,solverdata)` + function where the arguments are defined as: + - `W`: the current Jacobian of the nonlinear system. Specified as either + ``I - \\gamma J`` or ``I/\\gamma - J`` depending on the algorithm. This will + commonly be a `WOperator` type defined by OrdinaryDiffEq.jl. It is a lazy + representation of the operator. Users can construct the W-matrix on demand + by calling `convert(AbstractMatrix,W)` to receive an `AbstractMatrix` matching + the `jac_prototype`. + - `du`: the current ODE derivative + - `u`: the current ODE state + - `p`: the ODE parameters + - `t`: the current ODE time + - `newW`: a `Bool` which specifies whether the `W` matrix has been updated since + the last call to `precs`. It is recommended that this is checked to only + update the preconditioner when `newW == true`. + - `Plprev`: the previous `Pl`. + - `Prprev`: the previous `Pr`. + - `solverdata`: Optional extra data the solvers can give to the `precs` function. + Solver-dependent and subject to change. + The return is a tuple `(Pl,Pr)` of the LinearSolve.jl-compatible preconditioners. + To specify one-sided preconditioning, simply return `nothing` for the preconditioner + which is not used. Additionally, `precs` must supply the dispatch: + ```julia + Pl, Pr = precs(W, du, u, p, t, ::Nothing, ::Nothing, ::Nothing, solverdata) + ``` + which is used in the solver setup phase to construct the integrator + type with the preconditioners `(Pl,Pr)`. + The default is `precs=DEFAULT_PRECS` where the default preconditioner function + is defined as: + ```julia + DEFAULT_PRECS(W, du, u, p, t, newW, Plprev, Prprev, solverdata) = nothing, nothing + ``` + """ * extra_keyword_description - generic_solver_docstring( + return generic_solver_docstring( description, name, solver_class, references, keyword_default_description, keyword_default ) diff --git a/lib/OrdinaryDiffEqCore/src/initdt.jl b/lib/OrdinaryDiffEqCore/src/initdt.jl index a31cf8d710..6aaf57b7f8 100644 --- a/lib/OrdinaryDiffEqCore/src/initdt.jl +++ b/lib/OrdinaryDiffEqCore/src/initdt.jl @@ -1,7 +1,10 @@ -@muladd function ode_determine_initdt(u0, t, tdir, dtmax, abstol, reltol, internalnorm, - prob::SciMLBase.AbstractODEProblem{uType, tType, true +@muladd function ode_determine_initdt( + u0, t, tdir, dtmax, abstol, reltol, internalnorm, + prob::SciMLBase.AbstractODEProblem{ + uType, tType, true, }, - integrator) where {tType, uType} + integrator + ) where {tType, uType} _tType = eltype(tType) f = prob.f p = integrator.p @@ -23,7 +26,7 @@ sk[i] = abstol + internalnorm(u0[i], t) * reltol end else - @.. broadcast=false sk=abstol+internalnorm(u0, t)*reltol + @.. broadcast = false sk = abstol + internalnorm(u0, t) * reltol end else if u0 isa Array && abstol isa Number && reltol isa Number @@ -32,12 +35,12 @@ sk[i] = abstol + internalnorm(u0[i], t) * reltol end else - sk = @.. broadcast=false abstol+internalnorm(u0, t) * reltol + sk = @.. broadcast = false abstol + internalnorm(u0, t) * reltol end end if get_current_isfsal(integrator.alg, integrator.cache) && - integrator isa ODEIntegrator + integrator isa ODEIntegrator # Right now DelayDiffEq has issues with fsallast not being initialized f₀ = integrator.fsallast f(f₀, u0, p, t) @@ -67,7 +70,7 @@ tmp[i] = u0[i] / sk[i] end else - tmp = @.. broadcast=false u0/sk + tmp = @.. broadcast = false u0 / sk end d₀ = internalnorm(tmp, t) @@ -104,8 +107,10 @@ =# ftmp = nothing - if prob.f.mass_matrix != I && (!(prob.f isa DynamicalODEFunction) || - any(mm != I for mm in prob.f.mass_matrix)) + if prob.f.mass_matrix != I && ( + !(prob.f isa DynamicalODEFunction) || + any(mm != I for mm in prob.f.mass_matrix) + ) ftmp = zero(f₀) try integrator.alg.linsolve(ftmp, copy(prob.f.mass_matrix), f₀, true) @@ -120,7 +125,7 @@ tmp[i] = f₀[i] / sk[i] * oneunit_tType end else - @.. broadcast=false tmp=f₀/sk*oneunit_tType + @.. broadcast = false tmp = f₀ / sk * oneunit_tType end d₁ = internalnorm(tmp, t) @@ -136,11 +141,17 @@ return tdir * dtmin end - dt₀ = ifelse((d₀ < 1 // 10^(5)) | - (d₁ < 1 // 10^(5)), smalldt, - convert(_tType, - oneunit_tType * DiffEqBase.value((d₀ / d₁) / - 100))) + dt₀ = ifelse( + (d₀ < 1 // 10^(5)) | + (d₁ < 1 // 10^(5)), smalldt, + convert( + _tType, + oneunit_tType * DiffEqBase.value( + (d₀ / d₁) / + 100 + ) + ) + ) # if d₀ < 1//10^(5) || d₁ < 1//10^(5) # dt₀ = smalldt # else @@ -163,13 +174,15 @@ u₁[i] = u0[i] + dt₀_tdir * f₀[i] end else - @.. broadcast=false u₁=u0+dt₀_tdir*f₀ + @.. broadcast = false u₁ = u0 + dt₀_tdir * f₀ end f₁ = zero(f₀) f(f₁, u₁, p, t + dt₀_tdir) - if prob.f.mass_matrix != I && (!(prob.f isa DynamicalODEFunction) || - any(mm != I for mm in prob.f.mass_matrix)) + if prob.f.mass_matrix != I && ( + !(prob.f isa DynamicalODEFunction) || + any(mm != I for mm in prob.f.mass_matrix) + ) integrator.alg.linsolve(ftmp, prob.f.mass_matrix, f₁, false) copyto!(f₁, ftmp) end @@ -184,7 +197,7 @@ tmp[i] = (f₁[i] - f₀[i]) / sk[i] * oneunit_tType end else - @.. broadcast=false tmp=(f₁-f₀)/sk*oneunit_tType + @.. broadcast = false tmp = (f₁ - f₀) / sk * oneunit_tType end d₂ = internalnorm(tmp, t) / dt₀ * oneunit_tType @@ -194,27 +207,35 @@ if max_d₁d₂ <= 1 // Int64(10)^(15) dt₁ = max(convert(_tType, oneunit_tType * 1 // 10^(6)), dt₀ * 1 // 10^(3)) else - dt₁ = convert(_tType, + dt₁ = convert( + _tType, oneunit_tType * - DiffEqBase.value(10.0^(-(2 + log10(max_d₁d₂)) / - get_current_alg_order(integrator.alg, - integrator.cache)))) + DiffEqBase.value( + 10.0^( + -(2 + log10(max_d₁d₂)) / + get_current_alg_order( + integrator.alg, + integrator.cache + ) + ) + ) + ) end return tdir * max(dtmin, min(100dt₀, dt₁, dtmax_tdir)) end const TYPE_NOT_CONSTANT_MESSAGE = """ - Detected non-constant types in an out-of-place ODE solve, i.e. for - `du = f(u,p,t)` we see `typeof(du) !== typeof(u/t)`. This is not - supported by OrdinaryDiffEq.jl's solvers. Please either make `f` - type-constant (i.e. typeof(du) === typeof(u/t)) or use the mutating - in-place form `f(du,u,p,t)` (which is type-constant by construction). - - Note that one common case for this is when computing with GPUs, using - `Float32` for `u0` and `Float64` for `tspan`. To correct this, ensure - that the element type of `tspan` matches the preferred compute type, - for example `ODEProblem(f,0f0,(0f0,1f0))` for `Float32`-based time. - """ +Detected non-constant types in an out-of-place ODE solve, i.e. for +`du = f(u,p,t)` we see `typeof(du) !== typeof(u/t)`. This is not +supported by OrdinaryDiffEq.jl's solvers. Please either make `f` +type-constant (i.e. typeof(du) === typeof(u/t)) or use the mutating +in-place form `f(du,u,p,t)` (which is type-constant by construction). + +Note that one common case for this is when computing with GPUs, using +`Float32` for `u0` and `Float64` for `tspan`. To correct this, ensure +that the element type of `tspan` matches the preferred compute type, +for example `ODEProblem(f,0f0,(0f0,1f0))` for `Float32`-based time. +""" struct TypeNotConstantError <: Exception u0::Type @@ -226,13 +247,17 @@ function Base.showerror(io::IO, e::TypeNotConstantError) print(io, "typeof(u/t) = ") println(io, e.u0) print(io, "typeof(du) = ") - println(io, e.f₀) + return println(io, e.f₀) end -@muladd function ode_determine_initdt(u0, t, tdir, dtmax, abstol, reltol, internalnorm, - prob::SciMLBase.AbstractODEProblem{uType, tType, - false}, - integrator) where {uType, tType} +@muladd function ode_determine_initdt( + u0, t, tdir, dtmax, abstol, reltol, internalnorm, + prob::SciMLBase.AbstractODEProblem{ + uType, tType, + false, + }, + integrator + ) where {uType, tType} _tType = eltype(tType) f = prob.f p = prob.p @@ -246,7 +271,7 @@ end return tdir * max(smalldt, dtmin) end - sk = @.. broadcast=false abstol+internalnorm(u0, t) * reltol + sk = @.. broadcast = false abstol + internalnorm(u0, t) * reltol d₀ = internalnorm(u0 ./ sk, t) f₀ = f(u0, p, t) @@ -269,7 +294,7 @@ end dt₀ = min(dt₀, dtmax_tdir) dt₀_tdir = tdir * dt₀ - u₁ = @.. broadcast=false u0+dt₀_tdir * f₀ + u₁ = @.. broadcast = false u0 + dt₀_tdir * f₀ f₁ = f(u₁, p, t + dt₀_tdir) # Constant zone before callback @@ -283,18 +308,30 @@ end if max_d₁d₂ <= 1 // Int64(10)^(15) dt₁ = max(smalldt, dt₀ * 1 // 10^(3)) else - dt₁ = _tType(oneunit_tType * - DiffEqBase.value(10^(-(2 + log10(max_d₁d₂)) / - get_current_alg_order(integrator.alg, - integrator.cache)))) + dt₁ = _tType( + oneunit_tType * + DiffEqBase.value( + 10^( + -(2 + log10(max_d₁d₂)) / + get_current_alg_order( + integrator.alg, + integrator.cache + ) + ) + ) + ) end return tdir * max(dtmin, min(100dt₀, dt₁, dtmax_tdir)) end -@inline function ode_determine_initdt(u0, t, tdir, dtmax, abstol, reltol, internalnorm, - prob::SciMLBase.AbstractDAEProblem{duType, uType, - tType}, - integrator) where {duType, uType, tType} +@inline function ode_determine_initdt( + u0, t, tdir, dtmax, abstol, reltol, internalnorm, + prob::SciMLBase.AbstractDAEProblem{ + duType, uType, + tType, + }, + integrator + ) where {duType, uType, tType} _tType = eltype(tType) tspan = prob.tspan init_dt = abs(tspan[2] - tspan[1]) diff --git a/lib/OrdinaryDiffEqCore/src/initialize_dae.jl b/lib/OrdinaryDiffEqCore/src/initialize_dae.jl index 3f8e108b1e..1c7f1f01b7 100644 --- a/lib/OrdinaryDiffEqCore/src/initialize_dae.jl +++ b/lib/OrdinaryDiffEqCore/src/initialize_dae.jl @@ -13,53 +13,79 @@ variable, then the system is not Index 1! ## Expansion -function DiffEqBase.initialize_dae!(integrator::ODEIntegrator, - initializealg = integrator.initializealg) - _initialize_dae!(integrator, integrator.sol.prob, +function DiffEqBase.initialize_dae!( + integrator::ODEIntegrator, + initializealg = integrator.initializealg + ) + return _initialize_dae!( + integrator, integrator.sol.prob, initializealg, - Val(SciMLBase.isinplace(integrator.sol.prob))) + Val(SciMLBase.isinplace(integrator.sol.prob)) + ) end ## Default algorithms -function _initialize_dae!(integrator::ODEIntegrator, prob::ODEProblem, - alg::DefaultInit, x::Union{Val{true}, Val{false}}) - if SciMLBase.has_initializeprob(prob.f) - _initialize_dae!(integrator, prob, - OverrideInit(integrator.opts.abstol), x) - elseif !applicable(_initialize_dae!, integrator, prob, - BrownFullBasicInit(integrator.opts.abstol), x) +function _initialize_dae!( + integrator::ODEIntegrator, prob::ODEProblem, + alg::DefaultInit, x::Union{Val{true}, Val{false}} + ) + return if SciMLBase.has_initializeprob(prob.f) + _initialize_dae!( + integrator, prob, + OverrideInit(integrator.opts.abstol), x + ) + elseif !applicable( + _initialize_dae!, integrator, prob, + BrownFullBasicInit(integrator.opts.abstol), x + ) error("`OrdinaryDiffEqNonlinearSolve` is not loaded, which is required for the default initialization algorithm (`BrownFullBasicInit` or `ShampineCollocationInit`). To solve this problem, either do `using OrdinaryDiffEqNonlinearSolve` or pass `initializealg = CheckInit()` to the `solve` function. This second option requires consistent `u0`.") else - _initialize_dae!(integrator, prob, - BrownFullBasicInit(integrator.opts.abstol), x) + _initialize_dae!( + integrator, prob, + BrownFullBasicInit(integrator.opts.abstol), x + ) end end -function _initialize_dae!(integrator::ODEIntegrator, prob::DAEProblem, - alg::DefaultInit, x::Union{Val{true}, Val{false}}) - if SciMLBase.has_initializeprob(prob.f) - _initialize_dae!(integrator, prob, - OverrideInit(integrator.opts.abstol), x) - elseif !applicable(_initialize_dae!, integrator, prob, - BrownFullBasicInit(), x) && - !applicable(_initialize_dae!, - integrator, prob, ShampineCollocationInit(), x) +function _initialize_dae!( + integrator::ODEIntegrator, prob::DAEProblem, + alg::DefaultInit, x::Union{Val{true}, Val{false}} + ) + return if SciMLBase.has_initializeprob(prob.f) + _initialize_dae!( + integrator, prob, + OverrideInit(integrator.opts.abstol), x + ) + elseif !applicable( + _initialize_dae!, integrator, prob, + BrownFullBasicInit(), x + ) && + !applicable( + _initialize_dae!, + integrator, prob, ShampineCollocationInit(), x + ) error("`OrdinaryDiffEqNonlinearSolve` is not loaded, which is required for the default initialization algorithm (`BrownFullBasicInit` or `ShampineCollocationInit`). To solve this problem, either do `using OrdinaryDiffEqNonlinearSolve` or pass `initializealg = CheckInit()` to the `solve` function. This second option requires consistent `u0`.") elseif prob.differential_vars === nothing - _initialize_dae!(integrator, prob, - ShampineCollocationInit(), x) + _initialize_dae!( + integrator, prob, + ShampineCollocationInit(), x + ) else - _initialize_dae!(integrator, prob, - BrownFullBasicInit(integrator.opts.abstol), x) + _initialize_dae!( + integrator, prob, + BrownFullBasicInit(integrator.opts.abstol), x + ) end end -function _initialize_dae!(integrator, prob::DiscreteProblem, - alg::DefaultInit, x::Union{Val{true}, Val{false}}) - if SciMLBase.has_initializeprob(prob.f) +function _initialize_dae!( + integrator, prob::DiscreteProblem, + alg::DefaultInit, x::Union{Val{true}, Val{false}} + ) + return if SciMLBase.has_initializeprob(prob.f) # integrator.opts.abstol is `false` for `DiscreteProblem`. - _initialize_dae!(integrator, prob, OverrideInit(one(eltype(prob.u0)) * 1e-12), x) + _initialize_dae!(integrator, prob, OverrideInit(one(eltype(prob.u0)) * 1.0e-12), x) end end @@ -70,46 +96,56 @@ default_nlsolve(alg, isinplace, u, initprob, autodiff = false) = alg ## If the initialization is trivial just use nothing alg function default_nlsolve( - ::Nothing, isinplace::Val{true}, u::Nothing, ::AbstractNonlinearProblem, autodiff = false) - nothing + ::Nothing, isinplace::Val{true}, u::Nothing, ::AbstractNonlinearProblem, autodiff = false + ) + return nothing end function default_nlsolve( - ::Nothing, isinplace::Val{true}, u::Nothing, ::NonlinearLeastSquaresProblem, autodiff = false) - nothing + ::Nothing, isinplace::Val{true}, u::Nothing, ::NonlinearLeastSquaresProblem, autodiff = false + ) + return nothing end function default_nlsolve( - ::Nothing, isinplace::Val{false}, u::Nothing, ::AbstractNonlinearProblem, autodiff = false) - nothing + ::Nothing, isinplace::Val{false}, u::Nothing, ::AbstractNonlinearProblem, autodiff = false + ) + return nothing end function default_nlsolve( ::Nothing, isinplace::Val{false}, u::Nothing, - ::NonlinearLeastSquaresProblem, autodiff = false) - nothing + ::NonlinearLeastSquaresProblem, autodiff = false + ) + return nothing end function OrdinaryDiffEqCore.default_nlsolve( - ::Nothing, isinplace, u, ::AbstractNonlinearProblem, autodiff = false) + ::Nothing, isinplace, u, ::AbstractNonlinearProblem, autodiff = false + ) error("This ODE requires a DAE initialization and thus a nonlinear solve but no nonlinear solve has been loaded. To solve this problem, do `using OrdinaryDiffEqNonlinearSolve` or pass a custom `nlsolve` choice into the `initializealg`.") end function OrdinaryDiffEqCore.default_nlsolve( - ::Nothing, isinplace, u, ::NonlinearLeastSquaresProblem, autodiff = false) + ::Nothing, isinplace, u, ::NonlinearLeastSquaresProblem, autodiff = false + ) error("This ODE requires a DAE initialization and thus a nonlinear solve but no nonlinear solve has been loaded. To solve this problem, do `using OrdinaryDiffEqNonlinearSolve` or pass a custom `nlsolve` choice into the `initializealg`.") end ## NoInit -function _initialize_dae!(integrator, prob::AbstractDEProblem, - alg::NoInit, x::Union{Val{true}, Val{false}}) +function _initialize_dae!( + integrator, prob::AbstractDEProblem, + alg::NoInit, x::Union{Val{true}, Val{false}} + ) end ## OverrideInit -function _initialize_dae!(integrator, prob::AbstractDEProblem, - alg::OverrideInit, isinplace::Union{Val{true}, Val{false}}) +function _initialize_dae!( + integrator, prob::AbstractDEProblem, + alg::OverrideInit, isinplace::Union{Val{true}, Val{false}} + ) initializeprob = prob.f.initialization_data.initializeprob # If it doesn't have autodiff, assume it comes from symbolic system like ModelingToolkit @@ -127,9 +163,10 @@ function _initialize_dae!(integrator, prob::AbstractDEProblem, nlsolve_alg = default_nlsolve(alg.nlsolve, isinplace, iu0, initializeprob, isAD) u0, p, - success = SciMLBase.get_initial_values( + success = SciMLBase.get_initial_values( prob, integrator, prob.f, alg, isinplace; nlsolve_alg, - abstol = integrator.opts.abstol, reltol = integrator.opts.reltol) + abstol = integrator.opts.abstol, reltol = integrator.opts.reltol + ) if isinplace === Val{true}() integrator.u .= u0 @@ -143,15 +180,20 @@ function _initialize_dae!(integrator, prob::AbstractDEProblem, @reset sol.prob.p = integrator.p integrator.sol = sol - if !success - integrator.sol = SciMLBase.solution_new_retcode(integrator.sol, - ReturnCode.InitialFailure) + return if !success + integrator.sol = SciMLBase.solution_new_retcode( + integrator.sol, + ReturnCode.InitialFailure + ) end end ## CheckInit -function _initialize_dae!(integrator, prob::AbstractDEProblem, alg::CheckInit, - isinplace::Union{Val{true}, Val{false}}) - SciMLBase.get_initial_values( - prob, integrator, prob.f, alg, isinplace; abstol = integrator.opts.abstol) +function _initialize_dae!( + integrator, prob::AbstractDEProblem, alg::CheckInit, + isinplace::Union{Val{true}, Val{false}} + ) + return SciMLBase.get_initial_values( + prob, integrator, prob.f, alg, isinplace; abstol = integrator.opts.abstol + ) end diff --git a/lib/OrdinaryDiffEqCore/src/integrators/controllers.jl b/lib/OrdinaryDiffEqCore/src/integrators/controllers.jl index 4d052d9aa5..136c70ff8c 100644 --- a/lib/OrdinaryDiffEqCore/src/integrators/controllers.jl +++ b/lib/OrdinaryDiffEqCore/src/integrators/controllers.jl @@ -2,11 +2,11 @@ abstract type AbstractController end using OrdinaryDiffEqCore @inline function stepsize_controller!(integrator, alg) - stepsize_controller!(integrator, integrator.opts.controller, alg) + return stepsize_controller!(integrator, integrator.opts.controller, alg) end @inline function step_accept_controller!(integrator, alg, q) - step_accept_controller!(integrator, integrator.opts.controller, alg, q) + return step_accept_controller!(integrator, integrator.opts.controller, alg, q) end @inline function step_reject_controller!(integrator, alg) @@ -73,7 +73,7 @@ end # TODO: Shouldn't this be in `step_accept_controller!` as for the PI controller? integrator.qold = DiffEqBase.value(integrator.dt) / q end - q + return q end function step_accept_controller!(integrator, controller::IController, alg, q) @@ -82,12 +82,12 @@ function step_accept_controller!(integrator, controller::IController, alg, q) if qsteady_min <= q <= qsteady_max q = one(q) end - integrator.dt / q # new dt + return integrator.dt / q # new dt end function step_reject_controller!(integrator, controller::IController, alg) (; qold) = integrator - integrator.dt = qold + return integrator.dt = qold end # PI step size controller @@ -146,7 +146,7 @@ end integrator.q11 = q11 @fastmath q = max(inv(qmax), min(inv(qmin), q / gamma)) end - q + return q end function step_accept_controller!(integrator, controller::PIController, alg, q) @@ -163,14 +163,14 @@ end function step_reject_controller!(integrator, controller::PIController, alg) (; q11) = integrator (; qmin, gamma) = integrator.opts - integrator.dt /= min(inv(qmin), q11 / gamma) + return integrator.dt /= min(inv(qmin), q11 / gamma) end function reset_alg_dependent_opts!(controller::PIController, alg1, alg2) if controller.beta2 == beta2_default(alg1) controller.beta2 = beta2_default(alg2) end - if controller.beta1 == beta1_default(alg1, controller.beta2) + return if controller.beta1 == beta1_default(alg1, controller.beta2) controller.beta1 = beta1_default(alg2, controller.beta2) end end @@ -249,9 +249,11 @@ struct PIDController{QT, Limiter} <: AbstractController limiter::Limiter # limiter of the dt factor (before clipping) end -function PIDController(beta1, beta2, beta3 = zero(beta1); +function PIDController( + beta1, beta2, beta3 = zero(beta1); limiter = default_dt_factor_limiter, - accept_safety = 0.81) + accept_safety = 0.81 + ) beta = MVector(map(float, promote(beta1, beta2, beta3))...) QT = eltype(beta) err = MVector{3, QT}(true, true, true) @@ -259,10 +261,12 @@ function PIDController(beta1, beta2, beta3 = zero(beta1); end function Base.show(io::IO, controller::PIDController) - print(io, "PIDController(beta=", controller.beta, + return print( + io, "PIDController(beta=", controller.beta, ", accept_safety=", controller.accept_safety, ", limiter=", controller.limiter, - ")") + ")" + ) end @inline default_dt_factor_limiter(x) = one(x) + atan(x - one(x)) @@ -334,7 +338,7 @@ function step_accept_controller!(integrator, controller::PIDController, alg, dt_ end function step_reject_controller!(integrator, controller::PIDController, alg) - integrator.dt *= integrator.qold + return integrator.dt *= integrator.qold end # Gustafsson predictive step size controller @@ -397,7 +401,7 @@ end function post_newton_controller!(integrator, alg) integrator.dt = integrator.dt / integrator.opts.failfactor - nothing + return nothing end @inline function stepsize_controller!(integrator, controller::PredictiveController, alg) @@ -422,7 +426,7 @@ end @fastmath q = DiffEqBase.value(max(inv(qmax), min(inv(qmin), qtmp))) integrator.qold = q end - q + return q end function step_accept_controller!(integrator, controller::PredictiveController, alg, q) @@ -433,7 +437,7 @@ function step_accept_controller!(integrator, controller::PredictiveController, a if integrator.success_iter > 0 expo = 1 / (get_current_adaptive_order(alg, integrator.cache) + 1) qgus = (integrator.dtacc / integrator.dt) * - fastpower((EEst^2) / integrator.erracc, expo) + fastpower((EEst^2) / integrator.erracc, expo) qgus = max(inv(qmax), min(inv(qmin), qgus / gamma)) qacc = max(q, qgus) else @@ -443,12 +447,12 @@ function step_accept_controller!(integrator, controller::PredictiveController, a qacc = one(qacc) end integrator.dtacc = integrator.dt - integrator.erracc = max(1e-2, EEst) + integrator.erracc = max(1.0e-2, EEst) return integrator.dt / qacc end function step_reject_controller!(integrator, controller::PredictiveController, alg) (; dt, success_iter, qold) = integrator - integrator.dt = success_iter == 0 ? 0.1 * dt : dt / qold + return integrator.dt = success_iter == 0 ? 0.1 * dt : dt / qold end diff --git a/lib/OrdinaryDiffEqCore/src/integrators/integrator_interface.jl b/lib/OrdinaryDiffEqCore/src/integrators/integrator_interface.jl index 2cc169a267..32e6ecfac9 100644 --- a/lib/OrdinaryDiffEqCore/src/integrators/integrator_interface.jl +++ b/lib/OrdinaryDiffEqCore/src/integrators/integrator_interface.jl @@ -2,8 +2,10 @@ # is specialized, yet, it needs to take both ODEIntegrator and DDEIntegrator. # Hence, we need to have two separate functions. -function _change_t_via_interpolation!(integrator, t, - modify_save_endpoint::Type{Val{T}}, reinitialize_alg = nothing) where {T} +function _change_t_via_interpolation!( + integrator, t, + modify_save_endpoint::Type{Val{T}}, reinitialize_alg = nothing + ) where {T} # Can get rid of an allocation here with a function # get_tmp_arr(integrator.cache) which gives a pointer to some # cache array which can be modified. @@ -18,31 +20,37 @@ function _change_t_via_interpolation!(integrator, t, integrator.t = t integrator.dt = integrator.t - integrator.tprev SciMLBase.reeval_internals_due_to_modification!( - integrator; callback_initializealg = reinitialize_alg) + integrator; callback_initializealg = reinitialize_alg + ) if T solution_endpoint_match_cur_integrator!(integrator) end end return nothing end -function SciMLBase.change_t_via_interpolation!(integrator::ODEIntegrator, +function SciMLBase.change_t_via_interpolation!( + integrator::ODEIntegrator, t, modify_save_endpoint::Type{Val{T}} = Val{ false, - }, reinitialize_alg = nothing) where { + }, reinitialize_alg = nothing + ) where { T, -} + } _change_t_via_interpolation!(integrator, t, modify_save_endpoint, reinitialize_alg) return nothing end function SciMLBase.reeval_internals_due_to_modification!( integrator::ODEIntegrator, continuous_modification = true; - callback_initializealg = nothing) + callback_initializealg = nothing + ) if integrator.isdae - DiffEqBase.initialize_dae!(integrator, + DiffEqBase.initialize_dae!( + integrator, isnothing(callback_initializealg) ? integrator.initializealg : - callback_initializealg) + callback_initializealg + ) update_uprev!(integrator) end @@ -57,7 +65,7 @@ function SciMLBase.reeval_internals_due_to_modification!( end integrator.u_modified = false - integrator.reeval_fsal = true + return integrator.reeval_fsal = true end @inline function SciMLBase.get_du(integrator::ODEIntegrator) @@ -77,7 +85,7 @@ end out .= integrator.cache.tmp else return if isfsal(integrator.alg) && - !has_stiff_interpolation(integrator.alg) + !has_stiff_interpolation(integrator.alg) # Special stiff interpolations do not store the # right value in fsallast out .= integrator.fsallast @@ -88,11 +96,11 @@ end end function u_modified!(integrator::ODEIntegrator, bool::Bool) - integrator.u_modified = bool + return integrator.u_modified = bool end function get_proposed_dt(integrator::ODEIntegrator) - ifelse(integrator.opts.adaptive, integrator.dtpropose, integrator.dtcache) + return ifelse(integrator.opts.adaptive, integrator.dtpropose, integrator.dtcache) end function set_proposed_dt!(integrator::ODEIntegrator, dt::Number) (integrator.dtpropose = dt; integrator.dtcache = dt) @@ -103,61 +111,81 @@ function set_proposed_dt!(integrator::ODEIntegrator, integrator2::ODEIntegrator) integrator.dtcache = integrator2.dtcache integrator.qold = integrator2.qold integrator.erracc = integrator2.erracc - integrator.dtacc = integrator2.dtacc + return integrator.dtacc = integrator2.dtacc end #TODO: Bigger caches for most algorithms @inline function SciMLBase.get_tmp_cache(integrator::ODEIntegrator) - get_tmp_cache(integrator::ODEIntegrator, integrator.alg, integrator.cache) + return get_tmp_cache(integrator::ODEIntegrator, integrator.alg, integrator.cache) end # the ordering of the cache arrays is important!!! -@inline function SciMLBase.get_tmp_cache(integrator, alg::OrdinaryDiffEqAlgorithm, - cache::OrdinaryDiffEqConstantCache) - nothing +@inline function SciMLBase.get_tmp_cache( + integrator, alg::OrdinaryDiffEqAlgorithm, + cache::OrdinaryDiffEqConstantCache + ) + return nothing end -@inline function SciMLBase.get_tmp_cache(integrator, alg::OrdinaryDiffEqAlgorithm, - cache::OrdinaryDiffEqMutableCache) - (cache.tmp,) +@inline function SciMLBase.get_tmp_cache( + integrator, alg::OrdinaryDiffEqAlgorithm, + cache::OrdinaryDiffEqMutableCache + ) + return (cache.tmp,) end -@inline function SciMLBase.get_tmp_cache(integrator, +@inline function SciMLBase.get_tmp_cache( + integrator, alg::OrdinaryDiffEqNewtonAdaptiveAlgorithm, - cache::OrdinaryDiffEqMutableCache) - (cache.nlsolver.tmp, cache.atmp) -end -@inline function SciMLBase.get_tmp_cache(integrator, alg::OrdinaryDiffEqNewtonAlgorithm, - cache::OrdinaryDiffEqMutableCache) - (cache.nlsolver.tmp, cache.nlsolver.z) -end -@inline function SciMLBase.get_tmp_cache(integrator, + cache::OrdinaryDiffEqMutableCache + ) + return (cache.nlsolver.tmp, cache.atmp) +end +@inline function SciMLBase.get_tmp_cache( + integrator, alg::OrdinaryDiffEqNewtonAlgorithm, + cache::OrdinaryDiffEqMutableCache + ) + return (cache.nlsolver.tmp, cache.nlsolver.z) +end +@inline function SciMLBase.get_tmp_cache( + integrator, alg::OrdinaryDiffEqRosenbrockAdaptiveAlgorithm, - cache::OrdinaryDiffEqMutableCache) - (cache.tmp, cache.linsolve_tmp) + cache::OrdinaryDiffEqMutableCache + ) + return (cache.tmp, cache.linsolve_tmp) end -@inline function SciMLBase.get_tmp_cache(integrator, +@inline function SciMLBase.get_tmp_cache( + integrator, alg::OrdinaryDiffEqAdaptiveExponentialAlgorithm, - cache::OrdinaryDiffEqMutableCache) - (cache.tmp, cache.utilde) + cache::OrdinaryDiffEqMutableCache + ) + return (cache.tmp, cache.utilde) end -@inline function SciMLBase.get_tmp_cache(integrator, +@inline function SciMLBase.get_tmp_cache( + integrator, alg::OrdinaryDiffEqExponentialAlgorithm, - cache::OrdinaryDiffEqMutableCache) - (cache.tmp, cache.dz) + cache::OrdinaryDiffEqMutableCache + ) + return (cache.tmp, cache.dz) end -@inline function SciMLBase.get_tmp_cache(integrator, +@inline function SciMLBase.get_tmp_cache( + integrator, alg::OrdinaryDiffEqLinearExponentialAlgorithm, - cache::OrdinaryDiffEqMutableCache) - (cache.tmp,) -end -@inline function SciMLBase.get_tmp_cache(integrator, alg::CompositeAlgorithm, - cache::CompositeCache) - get_tmp_cache(integrator, alg.algs[1], cache.caches[1]) -end -@inline function SciMLBase.get_tmp_cache(integrator, alg::CompositeAlgorithm, - cache::DefaultCache) + cache::OrdinaryDiffEqMutableCache + ) + return (cache.tmp,) +end +@inline function SciMLBase.get_tmp_cache( + integrator, alg::CompositeAlgorithm, + cache::CompositeCache + ) + return get_tmp_cache(integrator, alg.algs[1], cache.caches[1]) +end +@inline function SciMLBase.get_tmp_cache( + integrator, alg::CompositeAlgorithm, + cache::DefaultCache + ) init_ith_default_cache(cache, alg.algs, cache.current) - if cache.current == 1 + return if cache.current == 1 get_tmp_cache(integrator, alg.algs[1], cache.cache1) elseif cache.current == 2 get_tmp_cache(integrator, alg.algs[2], cache.cache2) @@ -173,9 +201,11 @@ end end end -@inline function SciMLBase.get_tmp_cache(integrator, alg::DAEAlgorithm, - cache::OrdinaryDiffEqMutableCache) - (cache.nlsolver.cache.dz, cache.atmp) +@inline function SciMLBase.get_tmp_cache( + integrator, alg::DAEAlgorithm, + cache::OrdinaryDiffEqMutableCache + ) + return (cache.nlsolver.cache.dz, cache.atmp) end function full_cache(integrator::ODEIntegrator) @@ -190,21 +220,22 @@ function full_cache(integrator::ODEIntegrator) init_ith_default_cache(cache, algs, 5) init_ith_default_cache(cache, algs, 6) end - full_cache(integrator.cache) + return full_cache(integrator.cache) end function full_cache(cache::CompositeCache) - Iterators.flatten(full_cache(c) for c in cache.caches) + return Iterators.flatten(full_cache(c) for c in cache.caches) end function full_cache(cache::DefaultCache) caches = ( - cache.cache1, cache.cache2, cache.cache3, cache.cache4, cache.cache5, cache.cache6) - Iterators.flatten(full_cache(c) for c in caches) + cache.cache1, cache.cache2, cache.cache3, cache.cache4, cache.cache5, cache.cache6, + ) + return Iterators.flatten(full_cache(c) for c in caches) end function SciMLBase.add_tstop!(integrator::ODEIntegrator, t) integrator.tdir * (t - integrator.t) < zero(integrator.t) && error("Tried to add a tstop that is behind the current time. This is strictly forbidden") - push!(integrator.opts.tstops, integrator.tdir * t) + return push!(integrator.opts.tstops, integrator.tdir * t) end SciMLBase.has_tstop(integrator::ODEIntegrator) = !isempty(integrator.opts.tstops) @@ -214,7 +245,7 @@ SciMLBase.pop_tstop!(integrator::ODEIntegrator) = pop!(integrator.opts.tstops) function SciMLBase.add_saveat!(integrator::ODEIntegrator, t) integrator.tdir * (t - integrator.t) < zero(integrator.t) && error("Tried to add a saveat that is behind the current time. This is strictly forbidden") - push!(integrator.opts.saveat, integrator.tdir * t) + return push!(integrator.opts.saveat, integrator.tdir * t) end function resize!(integrator::ODEIntegrator, i::Int) @@ -230,7 +261,7 @@ function resize!(integrator::ODEIntegrator, i::Int) resize_f!(integrator.f, i) resize_nlsolver!(integrator, i) resize_J_W!(cache, integrator, i) - resize_non_user_cache!(integrator, cache, i) + return resize_non_user_cache!(integrator, cache, i) end # we can't use resize!(..., i::Union{Int, NTuple{N,Int}}) where {N} because of method ambiguities with DiffEqBase function resize!(integrator::ODEIntegrator, i::NTuple{N, Int}) where {N} @@ -245,7 +276,7 @@ function resize!(integrator::ODEIntegrator, i::NTuple{N, Int}) where {N} # TODO the parts below need to be adapted for implicit methods isdefined(integrator.cache, :nlsolver) && resize_nlsolver!(integrator, i) resize_J_W!(cache, integrator, i) - resize_non_user_cache!(integrator, cache, i) + return resize_non_user_cache!(integrator, cache, i) end # default fallback @@ -259,13 +290,13 @@ end function resize_J_W! end function resize_non_user_cache!(integrator::ODEIntegrator, i::Int) - resize_non_user_cache!(integrator, integrator.cache, i) + return resize_non_user_cache!(integrator, integrator.cache, i) end function deleteat_non_user_cache!(integrator::ODEIntegrator, i) - deleteat_non_user_cache!(integrator, integrator.cache, i) + return deleteat_non_user_cache!(integrator, integrator.cache, i) end function addat_non_user_cache!(integrator::ODEIntegrator, i) - addat_non_user_cache!(integrator, integrator.cache, i) + return addat_non_user_cache!(integrator, integrator.cache, i) end resize_non_user_cache!(integrator::ODEIntegrator, cache, i) = nothing @@ -274,57 +305,61 @@ function resize_non_user_cache!(integrator::ODEIntegrator, cache::CompositeCache for _cache in cache.caches resize_non_user_cache!(integrator, _cache, i) end + return end function deleteat_non_user_cache!(integrator::ODEIntegrator, cache::CompositeCache, i) for _cache in cache.caches deleteat_non_user_cache!(integrator, _cache, i) end + return end function addat_non_user_cache!(integrator::ODEIntegrator, cache::CompositeCache, i) for _cache in cache.caches addat_non_user_cache!(integrator, _cache, i) end + return end function deleteat_non_user_cache!(integrator::ODEIntegrator, cache, idxs) # ordering doesn't matter in deterministic cache, so just resize # to match the size of u i = length(integrator.u) - resize_non_user_cache!(integrator, cache, i) + return resize_non_user_cache!(integrator, cache, i) end function addat_non_user_cache!(integrator::ODEIntegrator, cache, idxs) # ordering doesn't matter in deterministic cache, so just resize # to match the size of u i = length(integrator.u) - resize_non_user_cache!(integrator, cache, i) + return resize_non_user_cache!(integrator, cache, i) end function deleteat!(integrator::ODEIntegrator, idxs) for c in full_cache(integrator) deleteat!(c, idxs) end - deleteat_non_user_cache!(integrator, integrator.cache, idxs) + return deleteat_non_user_cache!(integrator, integrator.cache, idxs) end function addat!(integrator::ODEIntegrator, idxs) for c in full_cache(integrator) addat!(c, idxs) end - addat_non_user_cache!(integrator, integrator.cache, idxs) + return addat_non_user_cache!(integrator, integrator.cache, idxs) end function terminate!(integrator::ODEIntegrator, retcode = ReturnCode.Terminated) integrator.sol = SciMLBase.solution_new_retcode(integrator.sol, retcode) - integrator.opts.tstops.valtree = typeof(integrator.opts.tstops.valtree)() + return integrator.opts.tstops.valtree = typeof(integrator.opts.tstops.valtree)() end const EMPTY_ARRAY_OF_PAIRS = Pair[] SciMLBase.has_reinit(integrator::ODEIntegrator) = true -function SciMLBase.reinit!(integrator::ODEIntegrator, u0 = integrator.sol.prob.u0; +function SciMLBase.reinit!( + integrator::ODEIntegrator, u0 = integrator.sol.prob.u0; t0 = integrator.sol.prob.tspan[1], tf = integrator.sol.prob.tspan[2], erase_sol = true, @@ -332,11 +367,12 @@ function SciMLBase.reinit!(integrator::ODEIntegrator, u0 = integrator.sol.prob.u saveat = integrator.opts.saveat_cache, d_discontinuities = integrator.opts.d_discontinuities_cache, reset_dt = (integrator.dtcache == zero(integrator.dt)) && - integrator.opts.adaptive, + integrator.opts.adaptive, reinit_dae = true, reinit_callbacks = true, initialize_save = true, reinit_cache = true, - reinit_retcode = true) + reinit_retcode = true + ) if reinit_dae && SciMLBase.has_initializeprob(integrator.sol.prob.f) # This is `remake` infrastructure. `reinit!` is somewhat like `remake` for # integrators, so we reuse some of the same pieces. If we pass `integrator.p` @@ -346,8 +382,10 @@ function SciMLBase.reinit!(integrator::ODEIntegrator, u0 = integrator.sol.prob.u # a symbolic `remake` and it can modify `newp` inplace. The array of pairs is a # const global to avoid allocating every time this function is called. u0, - newp = SciMLBase.late_binding_update_u0_p(integrator.sol.prob, u0, - EMPTY_ARRAY_OF_PAIRS, t0, u0, integrator.p) + newp = SciMLBase.late_binding_update_u0_p( + integrator.sol.prob, u0, + EMPTY_ARRAY_OF_PAIRS, t0, u0, integrator.p + ) if newp !== integrator.p integrator.p = newp sol = integrator.sol @@ -378,9 +416,11 @@ function SciMLBase.reinit!(integrator::ODEIntegrator, u0 = integrator.sol.prob.u tspan = (tType(t0), tType(tf)) integrator.opts.tstops = initialize_tstops(tType, tstops, d_discontinuities, tspan) integrator.opts.saveat = initialize_saveat(tType, saveat, tspan) - integrator.opts.d_discontinuities = initialize_d_discontinuities(tType, + integrator.opts.d_discontinuities = initialize_d_discontinuities( + tType, d_discontinuities, - tspan) + tspan + ) if erase_sol if integrator.opts.save_start @@ -428,7 +468,7 @@ function SciMLBase.reinit!(integrator::ODEIntegrator, u0 = integrator.sol.prob.u end if reinit_dae && - (integrator.isdae || SciMLBase.has_initializeprob(integrator.sol.prob.f)) + (integrator.isdae || SciMLBase.has_initializeprob(integrator.sol.prob.f)) DiffEqBase.initialize_dae!(integrator) update_uprev!(integrator) end @@ -448,30 +488,36 @@ function SciMLBase.reinit!(integrator::ODEIntegrator, u0 = integrator.sol.prob.u end function SciMLBase.auto_dt_reset!(integrator::ODEIntegrator) - integrator.dt = ode_determine_initdt(integrator.u, integrator.t, + integrator.dt = ode_determine_initdt( + integrator.u, integrator.t, integrator.tdir, integrator.opts.dtmax, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, integrator.sol.prob, - integrator) + integrator + ) integrator.dtpropose = integrator.dt - increment_nf!(integrator.stats, 2) + return increment_nf!(integrator.stats, 2) end function increment_nf!(stats, amt = 1) - stats.nf += amt + return stats.nf += amt end function SciMLBase.set_t!(integrator::ODEIntegrator, t::Real) if integrator.opts.save_everystep - error("Integrator time cannot be reset unless it is initialized", - " with save_everystep=false") + error( + "Integrator time cannot be reset unless it is initialized", + " with save_everystep=false" + ) end - if alg_extrapolates(integrator.alg) || !isdtchangeable(integrator.alg) - reinit!(integrator, integrator.u; + return if alg_extrapolates(integrator.alg) || !isdtchangeable(integrator.alg) + reinit!( + integrator, integrator.u; t0 = t, reset_dt = false, reinit_callbacks = false, - reinit_cache = false) + reinit_cache = false + ) else integrator.t = t end @@ -479,11 +525,13 @@ end function SciMLBase.set_u!(integrator::ODEIntegrator, u) if integrator.opts.save_everystep - error("Integrator state cannot be reset unless it is initialized", - " with save_everystep=false") + error( + "Integrator state cannot be reset unless it is initialized", + " with save_everystep=false" + ) end integrator.u = u - u_modified!(integrator, true) + return u_modified!(integrator, true) end SciMLBase.has_stats(i::ODEIntegrator) = true diff --git a/lib/OrdinaryDiffEqCore/src/integrators/integrator_utils.jl b/lib/OrdinaryDiffEqCore/src/integrators/integrator_utils.jl index c46f5d8c52..d3d142d8c1 100644 --- a/lib/OrdinaryDiffEqCore/src/integrators/integrator_utils.jl +++ b/lib/OrdinaryDiffEqCore/src/integrators/integrator_utils.jl @@ -1,5 +1,7 @@ -function save_idxsinitialize(integrator, cache::OrdinaryDiffEqCache, - ::Type{uType}) where {uType} +function save_idxsinitialize( + integrator, cache::OrdinaryDiffEqCache, + ::Type{uType} + ) where {uType} error("This algorithm does not have an initialization function") end @@ -9,7 +11,7 @@ function loopheader!(integrator) # Accept or reject the step if integrator.iter > 0 if (integrator.opts.adaptive && !integrator.accept_step) || - integrator.force_stepfail + integrator.force_stepfail if integrator.isout integrator.dt = integrator.dt * integrator.opts.qmin elseif !integrator.force_stepfail @@ -47,16 +49,18 @@ function apply_step!(integrator) end function update_fsal!(integrator) - if has_discontinuity(integrator) && - first_discontinuity(integrator) == integrator.tdir * integrator.t + return if has_discontinuity(integrator) && + first_discontinuity(integrator) == integrator.tdir * integrator.t handle_discontinuities!(integrator) get_current_isfsal(integrator.alg, integrator.cache) && reset_fsal!(integrator) elseif all_fsal(integrator.alg, integrator.cache) || - get_current_isfsal(integrator.alg, integrator.cache) + get_current_isfsal(integrator.alg, integrator.cache) if integrator.reeval_fsal || integrator.u_modified || - (isdp8(integrator.alg) && !integrator.opts.calck) || - (only_diagonal_mass_matrix(integrator.alg) && - !integrator.opts.adaptive) + (isdp8(integrator.alg) && !integrator.opts.calck) || + ( + only_diagonal_mass_matrix(integrator.alg) && + !integrator.opts.adaptive + ) reset_fsal!(integrator) else # Do not reeval_fsal, instead copyto! over if isinplace(integrator.sol.prob) @@ -69,30 +73,30 @@ function update_fsal!(integrator) end function last_step_failed(integrator::ODEIntegrator) - integrator.last_stepfail && !integrator.opts.adaptive + return integrator.last_stepfail && !integrator.opts.adaptive end function modify_dt_for_tstops!(integrator) - if has_tstop(integrator) + return if has_tstop(integrator) tdir_t = integrator.tdir * integrator.t tdir_tstop = first_tstop(integrator) if integrator.opts.adaptive integrator.dt = integrator.tdir * - min(abs(integrator.dt), abs(tdir_tstop - tdir_t)) # step! to the end + min(abs(integrator.dt), abs(tdir_tstop - tdir_t)) # step! to the end elseif iszero(integrator.dtcache) && integrator.dtchangeable integrator.dt = integrator.tdir * abs(tdir_tstop - tdir_t) elseif integrator.dtchangeable && !integrator.force_stepfail # always try to step! with dtcache, but lower if a tstop # however, if force_stepfail then don't set to dtcache, and no tstop worry integrator.dt = integrator.tdir * - min(abs(integrator.dtcache), abs(tdir_tstop - tdir_t)) # step! to the end + min(abs(integrator.dtcache), abs(tdir_tstop - tdir_t)) # step! to the end end end end # Want to extend savevalues! for DDEIntegrator function savevalues!(integrator::ODEIntegrator, force_save = false, reduce_size = true) - _savevalues!(integrator, force_save, reduce_size) + return _savevalues!(integrator, force_save, reduce_size) end function _savevalues!(integrator, force_save, reduce_size)::Tuple{Bool, Bool} @@ -112,8 +116,10 @@ function _savevalues!(integrator, force_save, reduce_size)::Tuple{Bool, Bool} save_val = val copyat_or_push!(integrator.sol.u, integrator.saveiter, save_val, false) if integrator.alg isa OrdinaryDiffEqCompositeAlgorithm - copyat_or_push!(integrator.sol.alg_choice, integrator.saveiter, - integrator.cache.current) + copyat_or_push!( + integrator.sol.alg_choice, integrator.saveiter, + integrator.cache.current + ) end else # ==t, just save if curt == integrator.sol.prob.tspan[2] && !integrator.opts.save_end @@ -125,58 +131,77 @@ function _savevalues!(integrator, force_save, reduce_size)::Tuple{Bool, Bool} if integrator.opts.save_idxs === nothing copyat_or_push!(integrator.sol.u, integrator.saveiter, integrator.u) else - copyat_or_push!(integrator.sol.u, integrator.saveiter, - integrator.u[integrator.opts.save_idxs], false) + copyat_or_push!( + integrator.sol.u, integrator.saveiter, + integrator.u[integrator.opts.save_idxs], false + ) end if isdiscretealg(integrator.alg) || integrator.opts.dense integrator.saveiter_dense += 1 if integrator.opts.dense if integrator.opts.save_idxs === nothing - copyat_or_push!(integrator.sol.k, integrator.saveiter_dense, - integrator.k) + copyat_or_push!( + integrator.sol.k, integrator.saveiter_dense, + integrator.k + ) else - copyat_or_push!(integrator.sol.k, integrator.saveiter_dense, + copyat_or_push!( + integrator.sol.k, integrator.saveiter_dense, [k[integrator.opts.save_idxs] for k in integrator.k], - false) + false + ) end end end if integrator.alg isa OrdinaryDiffEqCompositeAlgorithm - copyat_or_push!(integrator.sol.alg_choice, integrator.saveiter, - integrator.cache.current) + copyat_or_push!( + integrator.sol.alg_choice, integrator.saveiter, + integrator.cache.current + ) end end end - if force_save || (integrator.opts.save_everystep && - (isempty(integrator.sol.t) || - (integrator.t !== integrator.sol.t[end]) && - (integrator.opts.save_end || integrator.t !== integrator.sol.prob.tspan[2]) - )) + if force_save || ( + integrator.opts.save_everystep && + ( + isempty(integrator.sol.t) || + (integrator.t !== integrator.sol.t[end]) && + (integrator.opts.save_end || integrator.t !== integrator.sol.prob.tspan[2]) + ) + ) integrator.saveiter += 1 saved, savedexactly = true, true if integrator.opts.save_idxs === nothing copyat_or_push!(integrator.sol.u, integrator.saveiter, integrator.u) else - copyat_or_push!(integrator.sol.u, integrator.saveiter, - integrator.u[integrator.opts.save_idxs], false) + copyat_or_push!( + integrator.sol.u, integrator.saveiter, + integrator.u[integrator.opts.save_idxs], false + ) end copyat_or_push!(integrator.sol.t, integrator.saveiter, integrator.t) if isdiscretealg(integrator.alg) || integrator.opts.dense integrator.saveiter_dense += 1 if integrator.opts.dense if integrator.opts.save_idxs === nothing - copyat_or_push!(integrator.sol.k, integrator.saveiter_dense, - integrator.k) + copyat_or_push!( + integrator.sol.k, integrator.saveiter_dense, + integrator.k + ) else - copyat_or_push!(integrator.sol.k, integrator.saveiter_dense, + copyat_or_push!( + integrator.sol.k, integrator.saveiter_dense, [k[integrator.opts.save_idxs] for k in integrator.k], - false) + false + ) end end end if integrator.alg isa OrdinaryDiffEqCompositeAlgorithm - copyat_or_push!(integrator.sol.alg_choice, integrator.saveiter, - integrator.cache.current) + copyat_or_push!( + integrator.sol.alg_choice, integrator.saveiter, + integrator.cache.current + ) end end reduce_size && resize!(integrator.k, integrator.kshortsize) @@ -194,51 +219,67 @@ function _postamble!(integrator) if !(integrator.sol isa DAESolution) resize!(integrator.sol.k, integrator.saveiter_dense) end - if integrator.opts.progress + return if integrator.opts.progress end end function final_progress(integrator) - @logmsg(LogLevel(-1), + return @logmsg( + LogLevel(-1), integrator.opts.progress_name, - _id=integrator.opts.progress_id, - message=integrator.opts.progress_message(integrator.dt, integrator.u, - integrator.p, integrator.t), - progress="done") + _id = integrator.opts.progress_id, + message = integrator.opts.progress_message( + integrator.dt, integrator.u, + integrator.p, integrator.t + ), + progress = "done" + ) end function solution_endpoint_match_cur_integrator!(integrator) - if integrator.opts.save_end && - (integrator.saveiter == 0 || - integrator.sol.t[integrator.saveiter] != integrator.t && - ((integrator.opts.save_end_user isa Bool && integrator.opts.save_end_user) || - integrator.t ∈ integrator.opts.saveat_cache || - integrator.t == integrator.sol.prob.tspan[2] || - isempty(integrator.opts.saveat_cache))) + return if integrator.opts.save_end && + ( + integrator.saveiter == 0 || + integrator.sol.t[integrator.saveiter] != integrator.t && + ( + (integrator.opts.save_end_user isa Bool && integrator.opts.save_end_user) || + integrator.t ∈ integrator.opts.saveat_cache || + integrator.t == integrator.sol.prob.tspan[2] || + isempty(integrator.opts.saveat_cache) + ) + ) integrator.saveiter += 1 copyat_or_push!(integrator.sol.t, integrator.saveiter, integrator.t) if integrator.opts.save_idxs === nothing copyat_or_push!(integrator.sol.u, integrator.saveiter, integrator.u) else - copyat_or_push!(integrator.sol.u, integrator.saveiter, - integrator.u[integrator.opts.save_idxs], false) + copyat_or_push!( + integrator.sol.u, integrator.saveiter, + integrator.u[integrator.opts.save_idxs], false + ) end if isdiscretealg(integrator.alg) || integrator.opts.dense integrator.saveiter_dense += 1 if integrator.opts.dense if integrator.opts.save_idxs === nothing - copyat_or_push!(integrator.sol.k, integrator.saveiter_dense, - integrator.k) + copyat_or_push!( + integrator.sol.k, integrator.saveiter_dense, + integrator.k + ) else - copyat_or_push!(integrator.sol.k, integrator.saveiter_dense, + copyat_or_push!( + integrator.sol.k, integrator.saveiter_dense, [k[integrator.opts.save_idxs] for k in integrator.k], - false) + false + ) end end end if integrator.alg isa OrdinaryDiffEqCompositeAlgorithm - copyat_or_push!(integrator.sol.alg_choice, integrator.saveiter, - integrator.cache.current) + copyat_or_push!( + integrator.sol.alg_choice, integrator.saveiter, + integrator.cache.current + ) end SciMLBase.save_final_discretes!(integrator, integrator.opts.callback) end @@ -266,18 +307,28 @@ function _loopfooter!(integrator) elseif integrator.opts.adaptive q = stepsize_controller!(integrator, integrator.alg) integrator.isout = integrator.opts.isoutofdomain(integrator.u, integrator.p, ttmp) - integrator.accept_step = (!integrator.isout && - accept_step_controller(integrator, - integrator.opts.controller)) || - (integrator.opts.force_dtmin && - abs(integrator.dt) <= timedepentdtmin(integrator)) + integrator.accept_step = ( + !integrator.isout && + accept_step_controller( + integrator, + integrator.opts.controller + ) + ) || + ( + integrator.opts.force_dtmin && + abs(integrator.dt) <= timedepentdtmin(integrator) + ) if integrator.accept_step # Accept increment_accept!(integrator.stats) integrator.last_stepfail = false - dtnew = DiffEqBase.value(step_accept_controller!(integrator, - integrator.alg, - q)) * - oneunit(integrator.dt) + dtnew = DiffEqBase.value( + step_accept_controller!( + integrator, + integrator.alg, + q + ) + ) * + oneunit(integrator.dt) integrator.tprev = integrator.t integrator.t = fixed_t_for_floatingpoint_error!(integrator, ttmp) calc_dt_propose!(integrator, dtnew) @@ -295,44 +346,49 @@ function _loopfooter!(integrator) handle_callbacks!(integrator) end if integrator.opts.progress && integrator.iter % integrator.opts.progress_steps == 0 - log_step!(integrator.opts.progress_name, integrator.opts.progress_id, + log_step!( + integrator.opts.progress_name, integrator.opts.progress_id, integrator.opts.progress_message, integrator.dt, integrator.u, - integrator.p, integrator.t, integrator.sol.prob.tspan) + integrator.p, integrator.t, integrator.sol.prob.tspan + ) end # Take value because if t is dual then maxeig can be dual if integrator.cache isa CompositeCache cur_eigen_est = integrator.opts.internalnorm( DiffEqBase.value(integrator.eigen_est), - integrator.t) + integrator.t + ) cur_eigen_est > integrator.stats.maxeig && (integrator.stats.maxeig = cur_eigen_est) end - nothing + return nothing end function increment_accept!(stats) - stats.naccept += 1 + return stats.naccept += 1 end function increment_reject!(stats) - stats.nreject += 1 + return stats.nreject += 1 end function log_step!(progress_name, progress_id, progress_message, dt, u, p, t, tspan) t1, t2 = tspan - @logmsg(LogLevel(-1), progress_name, - _id=progress_id, - message=progress_message(dt, u, p, t), - progress=(t-t1)/(t2-t1)) + return @logmsg( + LogLevel(-1), progress_name, + _id = progress_id, + message = progress_message(dt, u, p, t), + progress = (t - t1) / (t2 - t1) + ) end function fixed_t_for_floatingpoint_error!(integrator, ttmp) - if has_tstop(integrator) + return if has_tstop(integrator) tstop = integrator.tdir * first_tstop(integrator) if abs(ttmp - tstop) < - 100eps(float(max(integrator.t, tstop) / oneunit(integrator.t))) * - oneunit(integrator.t) + 100eps(float(max(integrator.t, tstop) / oneunit(integrator.t))) * + oneunit(integrator.t) tstop else ttmp @@ -343,11 +399,17 @@ function fixed_t_for_floatingpoint_error!(integrator, ttmp) end # Use a generated function to call apply_callback! in a type-stable way -@generated function apply_ith_callback!(integrator, +@generated function apply_ith_callback!( + integrator, time, upcrossing, event_idx, cb_idx, - callbacks::NTuple{N, - Union{ContinuousCallback, - VectorContinuousCallback}}) where {N} + callbacks::NTuple{ + N, + Union{ + ContinuousCallback, + VectorContinuousCallback, + }, + } + ) where {N} ex = quote throw(BoundsError(callbacks, cb_idx)) end @@ -357,14 +419,16 @@ end # This seemingly isn't the case with just if (return) end (rest of expression) ex = quote if (cb_idx == $i) - return DiffEqBase.apply_callback!(integrator, callbacks[$i], time, - upcrossing, event_idx) + return DiffEqBase.apply_callback!( + integrator, callbacks[$i], time, + upcrossing, event_idx + ) else $ex end end end - ex + return ex end function handle_callbacks!(integrator) @@ -377,21 +441,24 @@ function handle_callbacks!(integrator) saved_in_cb = false if !(continuous_callbacks isa Tuple{}) time, upcrossing, - event_occurred, - event_idx, - idx, - counter = DiffEqBase.find_first_continuous_callback( + event_occurred, + event_idx, + idx, + counter = DiffEqBase.find_first_continuous_callback( integrator, - continuous_callbacks...) + continuous_callbacks... + ) if event_occurred integrator.event_last_time = idx integrator.vector_event_last_time = event_idx continuous_modified, - saved_in_cb = apply_ith_callback!(integrator, + saved_in_cb = apply_ith_callback!( + integrator, time, upcrossing, event_idx, idx, - continuous_callbacks) + continuous_callbacks + ) else integrator.event_last_time = 0 integrator.vector_event_last_time = 1 @@ -399,8 +466,10 @@ function handle_callbacks!(integrator) end if !integrator.force_stepfail && !(discrete_callbacks isa Tuple{}) discrete_modified, - saved_in_cb = DiffEqBase.apply_discrete_callback!(integrator, - discrete_callbacks...) + saved_in_cb = DiffEqBase.apply_discrete_callback!( + integrator, + discrete_callbacks... + ) end if !saved_in_cb savevalues!(integrator) @@ -408,7 +477,7 @@ function handle_callbacks!(integrator) integrator.u_modified = continuous_modified | discrete_modified integrator.reeval_fsal && handle_callback_modifiers!(integrator) # Hook for DDEs to add discontinuities - nothing + return nothing end function update_uprev!(integrator) @@ -430,14 +499,14 @@ function update_uprev!(integrator) integrator.duprev = integrator.du end end - nothing + return nothing end handle_discontinuities!(integrator) = pop_discontinuity!(integrator) function calc_dt_propose!(integrator, dtnew) dtnew = if has_dtnew_modification(integrator.alg) && - integrator.opts.adaptive && (integrator.iter >= 1) + integrator.opts.adaptive && (integrator.iter >= 1) dtnew_modification(integrator, integrator.alg, dtnew) else dtnew @@ -475,9 +544,11 @@ function handle_tstop!(integrator) integrator.just_hit_tstop = true elseif tdir_t > tdir_tstop if !integrator.dtchangeable - SciMLBase.change_t_via_interpolation!(integrator, + SciMLBase.change_t_via_interpolation!( + integrator, integrator.tdir * - pop_tstop!(integrator), Val{true}) + pop_tstop!(integrator), Val{true} + ) integrator.just_hit_tstop = true else error("Something went wrong. Integrator stepped past tstops but the algorithm was dtchangeable. Please report this error.") @@ -495,7 +566,7 @@ function reset_fsal!(integrator) # Ignore DAEs but they already re-ran initialization # Mass matrix DAEs do need to reset FSAL if available - if !(integrator.sol.prob isa DAEProblem) + return if !(integrator.sol.prob isa DAEProblem) if ismutablecache(integrator.cache) integrator.f(integrator.fsalfirst, integrator.u, integrator.p, integrator.t) else @@ -508,21 +579,25 @@ function reset_fsal!(integrator) end function nlsolve_f(f, alg::OrdinaryDiffEqAlgorithm) - f isa SplitFunction && issplit(alg) ? f.f1 : f + return f isa SplitFunction && issplit(alg) ? f.f1 : f end nlsolve_f(f, alg::DAEAlgorithm) = f function nlsolve_f(integrator::ODEIntegrator) - nlsolve_f(integrator.f, unwrap_alg(integrator, true)) + return nlsolve_f(integrator.f, unwrap_alg(integrator, true)) end -function (integrator::ODEIntegrator)(t, ::Type{deriv} = Val{0}; - idxs = nothing) where {deriv} - current_interpolant(t, integrator, idxs, deriv) +function (integrator::ODEIntegrator)( + t, ::Type{deriv} = Val{0}; + idxs = nothing + ) where {deriv} + return current_interpolant(t, integrator, idxs, deriv) end -function (integrator::ODEIntegrator)(val::AbstractArray, t::Union{Number, AbstractArray}, - ::Type{deriv} = Val{0}; idxs = nothing) where {deriv} - current_interpolant!(val, t, integrator, idxs, deriv) +function (integrator::ODEIntegrator)( + val::AbstractArray, t::Union{Number, AbstractArray}, + ::Type{deriv} = Val{0}; idxs = nothing + ) where {deriv} + return current_interpolant!(val, t, integrator, idxs, deriv) end has_discontinuity(integrator) = !isempty(integrator.opts.d_discontinuities) diff --git a/lib/OrdinaryDiffEqCore/src/integrators/type.jl b/lib/OrdinaryDiffEqCore/src/integrators/type.jl index 7dc9e1a9c6..90e71dd94e 100644 --- a/lib/OrdinaryDiffEqCore/src/integrators/type.jl +++ b/lib/OrdinaryDiffEqCore/src/integrators/type.jl @@ -1,6 +1,8 @@ -mutable struct DEOptions{absType, relType, QT, tType, Controller, F1, F2, F3, F4, F5, F6, - F7, tstopsType, discType, ECType, SType, MI, tcache, savecache, - disccache} +mutable struct DEOptions{ + absType, relType, QT, tType, Controller, F1, F2, F3, F4, F5, F6, + F7, tstopsType, discType, ECType, SType, MI, tcache, savecache, + disccache, + } maxiters::MI save_everystep::Bool adaptive::Bool @@ -81,11 +83,13 @@ integrator.opts.abstol = 1e-9 For more info see the linked documentation page. """ -mutable struct ODEIntegrator{algType <: Union{OrdinaryDiffEqAlgorithm, DAEAlgorithm}, IIP, - uType, duType, tType, pType, eigenType, EEstT, QT, tdirType, - ksEltype, SolType, F, CacheType, O, FSALType, EventErrorType, - CallbackCacheType, IA, DV} <: - SciMLBase.AbstractODEIntegrator{algType, IIP, uType, tType} +mutable struct ODEIntegrator{ + algType <: Union{OrdinaryDiffEqAlgorithm, DAEAlgorithm}, IIP, + uType, duType, tType, pType, eigenType, EEstT, QT, tdirType, + ksEltype, SolType, F, CacheType, O, FSALType, EventErrorType, + CallbackCacheType, IA, DV, + } <: + SciMLBase.AbstractODEIntegrator{algType, IIP, uType, tType} sol::SolType u::uType du::duType diff --git a/lib/OrdinaryDiffEqCore/src/interp_func.jl b/lib/OrdinaryDiffEqCore/src/interp_func.jl index 11b7371194..7ef9f3d74e 100644 --- a/lib/OrdinaryDiffEqCore/src/interp_func.jl +++ b/lib/OrdinaryDiffEqCore/src/interp_func.jl @@ -1,9 +1,10 @@ abstract type OrdinaryDiffEqInterpolation{cacheType} <: - SciMLBase.AbstractDiffEqInterpolation end +SciMLBase.AbstractDiffEqInterpolation end struct InterpolationData{ - F, uType, tType, kType, algType <: Union{Nothing, Vector{Int}}, cacheType, DV} <: - OrdinaryDiffEqInterpolation{cacheType} + F, uType, tType, kType, algType <: Union{Nothing, Vector{Int}}, cacheType, DV, + } <: + OrdinaryDiffEqInterpolation{cacheType} f::F timeseries::uType ts::tType @@ -17,73 +18,89 @@ end @static if isdefined(SciMLBase, :enable_interpolation_sensitivitymode) function SciMLBase.enable_interpolation_sensitivitymode(interp::InterpolationData) - InterpolationData(interp.f, interp.timeseries, interp.ts, interp.ks, + InterpolationData( + interp.f, interp.timeseries, interp.ts, interp.ks, interp.alg_choice, interp.dense, interp.cache, - interp.differential_vars, true) + interp.differential_vars, true + ) end end -function SciMLBase.interp_summary(interp::OrdinaryDiffEqInterpolation{ +function SciMLBase.interp_summary( + interp::OrdinaryDiffEqInterpolation{ + cacheType, + } + ) where { cacheType, -}) where { - cacheType, -} - SciMLBase.interp_summary(cacheType, interp.dense) + } + return SciMLBase.interp_summary(cacheType, interp.dense) end function SciMLBase.interp_summary(::Type{cacheType}, dense::Bool) where {cacheType} - dense ? "3rd order Hermite" : "1st order linear" + return dense ? "3rd order Hermite" : "1st order linear" end -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where {cacheType <: CompositeCache} +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where {cacheType <: CompositeCache} if !dense return "1st order linear" end caches = fieldtype(cacheType, :caches) - join([SciMLBase.interp_summary(ct, dense) for ct in fieldtypes(caches)], ", ") + return join([SciMLBase.interp_summary(ct, dense) for ct in fieldtypes(caches)], ", ") end function (interp::InterpolationData)(tvals, idxs, deriv, p, continuity::Symbol = :left) - ode_interpolation(tvals, interp, idxs, deriv, p, continuity) + return ode_interpolation(tvals, interp, idxs, deriv, p, continuity) end function (interp::InterpolationData)(val, tvals, idxs, deriv, p, continuity::Symbol = :left) - ode_interpolation!(val, tvals, interp, idxs, deriv, p, continuity) + return ode_interpolation!(val, tvals, interp, idxs, deriv, p, continuity) end function InterpolationData(id::InterpolationData, f) - InterpolationData(f, id.timeseries, + return InterpolationData( + f, id.timeseries, id.ts, id.ks, id.alg_choice, id.dense, id.cache, id.differential_vars, - id.sensitivitymode) + id.sensitivitymode + ) end # strip interpolation of function information function SciMLBase.strip_interpolation(id::InterpolationData) cache = strip_cache(id.cache) - InterpolationData(nothing, id.timeseries, + return InterpolationData( + nothing, id.timeseries, id.ts, id.ks, id.alg_choice, id.dense, cache, id.differential_vars, - id.sensitivitymode) + id.sensitivitymode + ) end function strip_cache(cache) if !(cache isa OrdinaryDiffEqCore.DefaultCache) - cache = SciMLBase.constructorof(typeof(cache))([nothing - for name in - fieldnames(typeof(cache))]...) + cache = SciMLBase.constructorof(typeof(cache))( + [ + nothing + for name in + fieldnames(typeof(cache)) + ]... + ) else # need to do something special for default cache - cache = OrdinaryDiffEqCore.DefaultCache{Nothing, Nothing, Nothing, Nothing, - Nothing, Nothing, Nothing, Nothing}(nothing, nothing, 0, nothing) + cache = OrdinaryDiffEqCore.DefaultCache{ + Nothing, Nothing, Nothing, Nothing, + Nothing, Nothing, Nothing, Nothing, + }(nothing, nothing, 0, nothing) end - cache + return cache end diff --git a/lib/OrdinaryDiffEqCore/src/misc_utils.jl b/lib/OrdinaryDiffEqCore/src/misc_utils.jl index c3b6082802..1870c91ee4 100644 --- a/lib/OrdinaryDiffEqCore/src/misc_utils.jl +++ b/lib/OrdinaryDiffEqCore/src/misc_utils.jl @@ -1,5 +1,5 @@ macro swap!(x, y) - quote + return quote local tmp = $(esc(x)) $(esc(x)) = $(esc(y)) $(esc(y)) = tmp @@ -13,14 +13,14 @@ macro cache(expr) jac_vars = Pair{Symbol, Expr}[] for x in fields if x.args[2] == :uType || x.args[2] == :rateType || - x.args[2] == :kType || x.args[2] == :uNoUnitsType + x.args[2] == :kType || x.args[2] == :uNoUnitsType push!(cache_vars, :(c.$(x.args[1]))) elseif x.args[2] == :DiffCacheType push!(cache_vars, :(c.$(x.args[1]).du)) push!(cache_vars, :(c.$(x.args[1]).dual_du)) end end - quote + return quote $(esc(expr)) $(esc(:full_cache))(c::$(esc(name))) = tuple($(cache_vars...)) end @@ -39,9 +39,9 @@ end function diffdir(integrator::SciMLBase.DEIntegrator) difference = maximum(abs, integrator.uprev) * sqrt(eps(typeof(integrator.t))) - dir = integrator.tdir > zero(integrator.tdir) ? - integrator.t > integrator.sol.prob.tspan[2] - difference ? -1 : 1 : - integrator.t < integrator.sol.prob.tspan[2] + difference ? 1 : -1 + return dir = integrator.tdir > zero(integrator.tdir) ? + integrator.t > integrator.sol.prob.tspan[2] - difference ? -1 : 1 : + integrator.t < integrator.sol.prob.tspan[2] + difference ? 1 : -1 end error_constant(integrator, order) = error_constant(integrator, integrator.alg, order) @@ -57,7 +57,7 @@ isthreaded(::BaseThreads) = true isthreaded(::PolyesterThreads) = true macro threaded(option, ex) - quote + return quote opt = $(esc(option)) if (opt === BaseThreads()) || ((opt isa Bool) && opt) $(esc(:(Threads.@threads :static $ex))) @@ -96,7 +96,7 @@ end macro fold(arg) # https://github.com/JuliaLang/julia/pull/43852 - if VERSION < v"1.8.0-DEV.1484" + return if VERSION < v"1.8.0-DEV.1484" esc(:(@generated $arg)) else esc(:(Base.@assume_effects :foldable $arg)) @@ -137,7 +137,8 @@ isnewton(::Any) = false function _bool_to_ADType(::Val{true}, ::Val{CS}, _) where {CS} Base.depwarn( "Using a `Bool` for keyword argument `autodiff` is deprecated. Please use an `ADType` specifier.", - :_bool_to_ADType) + :_bool_to_ADType + ) _CS = CS === 0 ? nothing : CS return AutoForwardDiff{_CS}(nothing) end @@ -145,7 +146,8 @@ end function _bool_to_ADType(::Val{false}, _, ::Val{FD}) where {FD} Base.depwarn( "Using a `Bool` for keyword argument `autodiff` is deprecated. Please use an `ADType` specifier.", - :_bool_to_ADType) + :_bool_to_ADType + ) return AutoFiniteDiff(; fdtype = Val{FD}(), dir = 1) end @@ -159,7 +161,8 @@ function _process_AD_choice(ad_alg::Bool, ::Val{CS}, ::Val{FD}) where {CS, FD} end function _process_AD_choice( - ad_alg::AutoForwardDiff{CS}, ::Val{CS2}, ::Val{FD}) where {CS, CS2, FD} + ad_alg::AutoForwardDiff{CS}, ::Val{CS2}, ::Val{FD} + ) where {CS, CS2, FD} # Non-default `chunk_size` if (CS2 != 0) && (isnothing(CS) || (CS2 !== CS)) @warn "The `chunk_size` keyword is deprecated. Please use an `ADType` specifier. For now defaulting to using `AutoForwardDiff` with `chunksize=$(CS2)`." @@ -171,7 +174,8 @@ function _process_AD_choice( end function _process_AD_choice( - ad_alg::AutoForwardDiff{CS}, CS2::Int, ::Val{FD}) where {CS, FD} + ad_alg::AutoForwardDiff{CS}, CS2::Int, ::Val{FD} + ) where {CS, FD} # Non-default `chunk_size` if CS2 != 0 @warn "The `chunk_size` keyword is deprecated. Please use an `ADType` specifier. For now defaulting to using `AutoForwardDiff` with `chunksize=$(CS2)`." @@ -182,7 +186,8 @@ function _process_AD_choice( end function _process_AD_choice( - ad_alg::AutoFiniteDiff{FD}, ::Val{CS}, ::Val{FD2}) where {FD, CS, FD2} + ad_alg::AutoFiniteDiff{FD}, ::Val{CS}, ::Val{FD2} + ) where {FD, CS, FD2} # Non-default `diff_type` if FD2 !== :forward @warn "The `diff_type` keyword is deprecated. Please use an `ADType` specifier. For now defaulting to using `AutoFiniteDiff` with `fdtype=Val{$FD2}()`." @@ -196,9 +201,9 @@ end function _process_AD_choice(ad_alg::AutoSparse, cs2::Val{CS2}, fd::Val{FD}) where {CS2, FD} _, cs, fd = _process_AD_choice(ad_alg.dense_ad, cs2, fd) - ad_alg, cs, fd + return ad_alg, cs, fd end function _process_AD_choice(ad_alg, cs2, fd) - ad_alg, cs2, fd + return ad_alg, cs2, fd end diff --git a/lib/OrdinaryDiffEqCore/src/perform_step/composite_perform_step.jl b/lib/OrdinaryDiffEqCore/src/perform_step/composite_perform_step.jl index 5b7165a910..4b28dccd81 100644 --- a/lib/OrdinaryDiffEqCore/src/perform_step/composite_perform_step.jl +++ b/lib/OrdinaryDiffEqCore/src/perform_step/composite_perform_step.jl @@ -1,5 +1,5 @@ function init_ith_default_cache(cache::DefaultCache, algs, i) - if i == 1 + return if i == 1 if !isdefined(cache, :cache1) cache.cache1 = alg_cache(algs[1], cache.args...) end @@ -72,7 +72,7 @@ function initialize!(integrator, cache::DefaultCache) # the controller was initialized by default for algs[1] reset_alg_dependent_opts!(integrator.opts.controller, algs[1], algs[6]) end - resize!(integrator.k, integrator.kshortsize) + return resize!(integrator.k, integrator.kshortsize) end function initialize!(integrator, cache::CompositeCache) @@ -89,17 +89,21 @@ function initialize!(integrator, cache::CompositeCache) !isnothing(fsallast) && (integrator.fsallast = fsallast) initialize!(integrator, @inbounds(cache.caches[2])) # the controller was initialized by default for integrator.alg.algs[1] - reset_alg_dependent_opts!(integrator.opts.controller, integrator.alg.algs[1], - integrator.alg.algs[2]) + reset_alg_dependent_opts!( + integrator.opts.controller, integrator.alg.algs[1], + integrator.alg.algs[2] + ) else fsalfirst, fsallast = get_fsalfirstlast(cache.caches[cache.current], u) !isnothing(fsalfirst) && (integrator.fsalfirst = fsalfirst) !isnothing(fsallast) && (integrator.fsallast = fsallast) initialize!(integrator, @inbounds(cache.caches[cache.current])) - reset_alg_dependent_opts!(integrator.opts.controller, integrator.alg.algs[1], - integrator.alg.algs[cache.current]) + reset_alg_dependent_opts!( + integrator.opts.controller, integrator.alg.algs[1], + integrator.alg.algs[cache.current] + ) end - resize!(integrator.k, integrator.kshortsize) + return resize!(integrator.k, integrator.kshortsize) end function initialize!(integrator, cache::CompositeCache{Tuple{T1, T2}, F}) where {T1, T2, F} @@ -115,10 +119,12 @@ function initialize!(integrator, cache::CompositeCache{Tuple{T1, T2}, F}) where !isnothing(fsalfirst) && (integrator.fsalfirst = fsalfirst) !isnothing(fsallast) && (integrator.fsallast = fsallast) initialize!(integrator, @inbounds(cache.caches[2])) - reset_alg_dependent_opts!(integrator.opts.controller, integrator.alg.algs[1], - integrator.alg.algs[2]) + reset_alg_dependent_opts!( + integrator.opts.controller, integrator.alg.algs[1], + integrator.alg.algs[2] + ) end - resize!(integrator.k, integrator.kshortsize) + return resize!(integrator.k, integrator.kshortsize) end """ @@ -129,7 +135,7 @@ In particular, prevents dt ⟶ 0 if starting with non-adaptive alg and opts.adap and dt=cst if starting with adaptive alg and opts.adaptive=false. """ function ensure_behaving_adaptivity!(integrator, cache::Union{DefaultCache, CompositeCache}) - if anyadaptive(integrator.alg) && !isadaptive(integrator.alg) + return if anyadaptive(integrator.alg) && !isadaptive(integrator.alg) integrator.opts.adaptive = isadaptive(integrator.alg.algs[cache.current]) end end @@ -137,7 +143,7 @@ end function perform_step!(integrator, cache::DefaultCache, repeat_step = false) algs = integrator.alg.algs init_ith_default_cache(cache, algs, cache.current) - if cache.current == 1 + return if cache.current == 1 perform_step!(integrator, @inbounds(cache.cache1), repeat_step) elseif cache.current == 2 perform_step!(integrator, @inbounds(cache.cache2), repeat_step) @@ -153,7 +159,7 @@ function perform_step!(integrator, cache::DefaultCache, repeat_step = false) end function perform_step!(integrator, cache::CompositeCache, repeat_step = false) - if cache.current == 1 + return if cache.current == 1 perform_step!(integrator, @inbounds(cache.caches[1]), repeat_step) elseif cache.current == 2 perform_step!(integrator, @inbounds(cache.caches[2]), repeat_step) @@ -164,12 +170,14 @@ end choose_algorithm!(integrator, cache::OrdinaryDiffEqCache) = nothing -function choose_algorithm!(integrator, - cache::CompositeCache{Tuple{T1, T2}, F}) where {T1, T2, F} +function choose_algorithm!( + integrator, + cache::CompositeCache{Tuple{T1, T2}, F} + ) where {T1, T2, F} new_current = cache.choice_function(integrator) old_current = cache.current u = integrator.u - @inbounds if new_current != old_current + return @inbounds if new_current != old_current cache.current = new_current if new_current == 1 fsalfirst, fsallast = get_fsalfirstlast(cache.caches[1], u) @@ -183,15 +191,23 @@ function choose_algorithm!(integrator, initialize!(integrator, @inbounds(cache.caches[2])) end if old_current == 1 && new_current == 2 - reset_alg_dependent_opts!(integrator, integrator.alg.algs[1], - integrator.alg.algs[2]) - transfer_cache!(integrator, integrator.cache.caches[1], - integrator.cache.caches[2]) + reset_alg_dependent_opts!( + integrator, integrator.alg.algs[1], + integrator.alg.algs[2] + ) + transfer_cache!( + integrator, integrator.cache.caches[1], + integrator.cache.caches[2] + ) elseif old_current == 2 && new_current == 1 - reset_alg_dependent_opts!(integrator, integrator.alg.algs[2], - integrator.alg.algs[1]) - transfer_cache!(integrator, integrator.cache.caches[2], - integrator.cache.caches[1]) + reset_alg_dependent_opts!( + integrator, integrator.alg.algs[2], + integrator.alg.algs[1] + ) + transfer_cache!( + integrator, integrator.cache.caches[2], + integrator.cache.caches[1] + ) end end end @@ -200,7 +216,7 @@ function choose_algorithm!(integrator, cache::DefaultCache) new_current = cache.choice_function(integrator) old_current = cache.current u = integrator.u - @inbounds if new_current != old_current + return @inbounds if new_current != old_current algs = integrator.alg.algs cache.current = new_current init_ith_default_cache(cache, algs, new_current) @@ -284,7 +300,7 @@ function reset_alg_dependent_opts!(integrator, alg1, alg2) integrator.opts.qmax == qmax_default(alg2) end reset_alg_dependent_opts!(integrator.opts.controller, alg1, alg2) - nothing + return nothing end # Write how to transfer the cache variables from one cache to the other diff --git a/lib/OrdinaryDiffEqCore/src/precompilation_setup.jl b/lib/OrdinaryDiffEqCore/src/precompilation_setup.jl index 969df25bea..8e17044ea4 100644 --- a/lib/OrdinaryDiffEqCore/src/precompilation_setup.jl +++ b/lib/OrdinaryDiffEqCore/src/precompilation_setup.jl @@ -1,27 +1,37 @@ function lorenz(du, u, p, t) du[1] = 10.0(u[2] - u[1]) du[2] = u[1] * (28.0 - u[3]) - u[2] - du[3] = u[1] * u[2] - (8 / 3) * u[3] + return du[3] = u[1] * u[2] - (8 / 3) * u[3] end function lorenz_oop(u, p, t) - [10.0(u[2] - u[1]), u[1] * (28.0 - u[3]) - u[2], u[1] * u[2] - (8 / 3) * u[3]] + return [10.0(u[2] - u[1]), u[1] * (28.0 - u[3]) - u[2], u[1] * u[2] - (8 / 3) * u[3]] end PrecompileTools.@compile_workload begin ODEProblem(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0)) ODEProblem(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), Float64[]) - ODEProblem{true, SciMLBase.AutoSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0)) - ODEProblem{true, SciMLBase.AutoSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0), Float64[]) - ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0)) - ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0), Float64[]) + ODEProblem{true, SciMLBase.AutoSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0) + ) + ODEProblem{true, SciMLBase.AutoSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0), Float64[] + ) + ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0) + ) + ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0), Float64[] + ) ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0)) - ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), - Float64[]) + ODEProblem{true, SciMLBase.NoSpecialize}( + lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), + Float64[] + ) lorenz([1.0; 0.0; 0.0], [1.0; 0.0; 0.0], SciMLBase.NullParameters(), 0.0) lorenz([1.0; 0.0; 0.0], [1.0; 0.0; 0.0], Float64[], 0.0) diff --git a/lib/OrdinaryDiffEqCore/src/solve.jl b/lib/OrdinaryDiffEqCore/src/solve.jl index aa0bb07a91..164544a20a 100644 --- a/lib/OrdinaryDiffEqCore/src/solve.jl +++ b/lib/OrdinaryDiffEqCore/src/solve.jl @@ -1,16 +1,21 @@ function SciMLBase.__solve( - prob::Union{SciMLBase.AbstractODEProblem, - SciMLBase.AbstractDAEProblem}, + prob::Union{ + SciMLBase.AbstractODEProblem, + SciMLBase.AbstractDAEProblem, + }, alg::Union{OrdinaryDiffEqAlgorithm, DAEAlgorithm}, args...; - kwargs...) + kwargs... + ) integrator = SciMLBase.__init(prob, alg, args...; kwargs...) solve!(integrator) - integrator.sol + return integrator.sol end function SciMLBase.__init( - prob::Union{SciMLBase.AbstractODEProblem, - SciMLBase.AbstractDAEProblem}, + prob::Union{ + SciMLBase.AbstractODEProblem, + SciMLBase.AbstractDAEProblem, + }, alg::Union{OrdinaryDiffEqAlgorithm, DAEAlgorithm}, timeseries_init = (), ts_init = (), @@ -23,15 +28,15 @@ function SciMLBase.__init( save_on = true, save_discretes = true, save_start = save_everystep || isempty(saveat) || - saveat isa Number || prob.tspan[1] in saveat, + saveat isa Number || prob.tspan[1] in saveat, save_end = nothing, callback = nothing, dense = save_everystep && isempty(saveat) && - !default_linear_interpolation(prob, alg), + !default_linear_interpolation(prob, alg), calck = (callback !== nothing && callback !== CallbackSet()) || - (dense) || !isempty(saveat), # and no dense output + (dense) || !isempty(saveat), # and no dense output dt = isdiscretealg(alg) && isempty(tstops) ? - eltype(prob.tspan)(1) : eltype(prob.tspan)(0), + eltype(prob.tspan)(1) : eltype(prob.tspan)(0), dtmin = eltype(prob.tspan)(0), dtmax = eltype(prob.tspan)((prob.tspan[end] - prob.tspan[1])), force_dtmin = false, @@ -70,7 +75,8 @@ function SciMLBase.__init( initialize_integrator = true, alias = ODEAliasSpecifier(), initializealg = DefaultInit(), - kwargs...) + kwargs... + ) if prob isa SciMLBase.AbstractDAEProblem && alg isa OrdinaryDiffEqAlgorithm error("You cannot use an ODE Algorithm with a DAEProblem") end @@ -90,17 +96,17 @@ function SciMLBase.__init( error("This solver is not able to use mass matrices. For compatible solvers see https://docs.sciml.ai/DiffEqDocs/stable/solvers/dae_solve/") end elseif !(prob isa SciMLBase.AbstractDiscreteProblem) && - !(prob isa SciMLBase.AbstractDAEProblem) && - !is_mass_matrix_alg(alg) && - prob.f.mass_matrix != I + !(prob isa SciMLBase.AbstractDAEProblem) && + !is_mass_matrix_alg(alg) && + prob.f.mass_matrix != I error("This solver is not able to use mass matrices. For compatible solvers see https://docs.sciml.ai/DiffEqDocs/stable/solvers/dae_solve/") end if alg isa OrdinaryDiffEqRosenbrockAdaptiveAlgorithm && - # https://github.com/SciML/OrdinaryDiffEq.jl/pull/2079 fixes this for Rosenbrock23 and 32 - !only_diagonal_mass_matrix(alg) && - prob.f.mass_matrix isa AbstractMatrix && - all(isequal(0), prob.f.mass_matrix) + # https://github.com/SciML/OrdinaryDiffEq.jl/pull/2079 fixes this for Rosenbrock23 and 32 + !only_diagonal_mass_matrix(alg) && + prob.f.mass_matrix isa AbstractMatrix && + all(isequal(0), prob.f.mass_matrix) # technically this should also warn for zero operators but those are hard to check for if (dense || !isempty(saveat)) && verbose @warn("Rosenbrock methods on equations without differential states do not bound the error on interpolations.") @@ -108,8 +114,8 @@ function SciMLBase.__init( end if only_diagonal_mass_matrix(alg) && - prob.f.mass_matrix isa AbstractMatrix && - !isdiag(prob.f.mass_matrix) + prob.f.mass_matrix isa AbstractMatrix && + !isdiag(prob.f.mass_matrix) throw(ArgumentError("$(typeof(alg).name.name) only works with diagonal mass matrices. Please choose a solver suitable for your problem (e.g. Rodas5P)")) end @@ -117,7 +123,7 @@ function SciMLBase.__init( @warn("Dense output is incompatible with saveat. Please use the SavingCallback from the Callback Library to mix the two behaviors.") end - progress && @logmsg(LogLevel(-1), progress_name, _id=progress_id, progress=0) + progress && @logmsg(LogLevel(-1), progress_name, _id = progress_id, progress = 0) tType = eltype(prob.tspan) tspan = prob.tspan @@ -125,24 +131,34 @@ function SciMLBase.__init( t = tspan[1] - if (((!(alg isa OrdinaryDiffEqAdaptiveAlgorithm) && - !(alg isa OrdinaryDiffEqCompositeAlgorithm) && - !(alg isa DAEAlgorithm)) || !adaptive || !isadaptive(alg)) && - dt == tType(0) && isempty(tstops)) && dt_required(alg) + if ( + ( + ( + !(alg isa OrdinaryDiffEqAdaptiveAlgorithm) && + !(alg isa OrdinaryDiffEqCompositeAlgorithm) && + !(alg isa DAEAlgorithm) + ) || !adaptive || !isadaptive(alg) + ) && + dt == tType(0) && isempty(tstops) + ) && dt_required(alg) throw(ArgumentError("Fixed timestep methods require a choice of dt or choosing the tstops")) end if !isadaptive(alg) && adaptive throw(ArgumentError("Fixed timestep methods can not be run with adaptive=true")) end - isdae = alg isa DAEAlgorithm || (!(prob isa SciMLBase.AbstractDiscreteProblem) && - prob.f.mass_matrix != I && - !(prob.f.mass_matrix isa Tuple) && - ArrayInterface.issingular(prob.f.mass_matrix)) + isdae = alg isa DAEAlgorithm || ( + !(prob isa SciMLBase.AbstractDiscreteProblem) && + prob.f.mass_matrix != I && + !(prob.f.mass_matrix isa Tuple) && + ArrayInterface.issingular(prob.f.mass_matrix) + ) if alg isa CompositeAlgorithm && alg.choice_function isa AutoSwitch auto = alg.choice_function - _alg = CompositeAlgorithm(alg.algs, - AutoSwitchCache(0, 0, + _alg = CompositeAlgorithm( + alg.algs, + AutoSwitchCache( + 0, 0, auto.nonstiffalg, auto.stiffalg, auto.stiffalgfirst, @@ -152,7 +168,9 @@ function SciMLBase.__init( auto.stifftol, auto.dtfac, auto.stiffalgfirst, - auto.switch_max, 0)) + auto.switch_max, 0 + ) + ) else _alg = alg end @@ -178,7 +196,8 @@ function SciMLBase.__init( Base.depwarn(message, :init) Base.depwarn(message, :solve) aliases = ODEAliasSpecifier( - alias_u0 = aliases.alias_u0, alias_du0 = values(kwargs).alias_du0) + alias_u0 = aliases.alias_u0, alias_du0 = values(kwargs).alias_du0 + ) else aliases = ODEAliasSpecifier(alias_u0 = aliases.alias_u0, alias_du0 = nothing) end @@ -241,9 +260,15 @@ function SciMLBase.__init( abstol_internal = false elseif abstol === nothing if uBottomEltypeNoUnits == uBottomEltype - abstol_internal = unitfulvalue(real(convert(uBottomEltype, - oneunit(uBottomEltype) * - 1 // 10^6))) + abstol_internal = unitfulvalue( + real( + convert( + uBottomEltype, + oneunit(uBottomEltype) * + 1 // 10^6 + ) + ) + ) else abstol_internal = unitfulvalue.(real.(oneunit.(u) .* 1 // 10^6)) end @@ -255,8 +280,14 @@ function SciMLBase.__init( reltol_internal = false elseif reltol === nothing if uBottomEltypeNoUnits == uBottomEltype - reltol_internal = unitfulvalue(real(convert(uBottomEltype, - oneunit(uBottomEltype) * 1 // 10^3))) + reltol_internal = unitfulvalue( + real( + convert( + uBottomEltype, + oneunit(uBottomEltype) * 1 // 10^3 + ) + ) + ) else reltol_internal = unitfulvalue.(real.(oneunit.(u) .* 1 // 10^3)) end @@ -268,13 +299,13 @@ function SciMLBase.__init( # dtmin is all abs => does not care about sign already. if !isdae && isinplace(prob) && u isa AbstractArray && eltype(u) <: Number && - uBottomEltypeNoUnits == uBottomEltype && tType == tTypeNoUnits # Could this be more efficient for other arrays? + uBottomEltypeNoUnits == uBottomEltype && tType == tTypeNoUnits # Could this be more efficient for other arrays? rate_prototype = recursivecopy(u) elseif prob isa DAEProblem rate_prototype = prob.du0 else if (uBottomEltypeNoUnits == uBottomEltype && tType == tTypeNoUnits) || - eltype(u) <: Enum + eltype(u) <: Enum rate_prototype = u else # has units! rate_prototype = u / oneunit(tType) @@ -306,8 +337,10 @@ function SciMLBase.__init( end tstops_internal = initialize_tstops(tType, tstops, d_discontinuities, tspan) saveat_internal = initialize_saveat(tType, saveat, tspan) - d_discontinuities_internal = initialize_d_discontinuities(tType, d_discontinuities, - tspan) + d_discontinuities_internal = initialize_d_discontinuities( + tType, d_discontinuities, + tspan + ) callbacks_internal = CallbackSet(callback) @@ -315,11 +348,15 @@ function SciMLBase.__init( if max_len_cb !== nothing uBottomEltypeReal = real(uBottomEltype) if isinplace(prob) - callback_cache = DiffEqBase.CallbackCache(u, max_len_cb, uBottomEltypeReal, - uBottomEltypeReal) + callback_cache = DiffEqBase.CallbackCache( + u, max_len_cb, uBottomEltypeReal, + uBottomEltypeReal + ) else - callback_cache = DiffEqBase.CallbackCache(max_len_cb, uBottomEltypeReal, - uBottomEltypeReal) + callback_cache = DiffEqBase.CallbackCache( + max_len_cb, uBottomEltypeReal, + uBottomEltypeReal + ) end else callback_cache = nothing @@ -327,8 +364,9 @@ function SciMLBase.__init( ### Algorithm-specific defaults ### save_idxs, - saved_subsystem = SciMLBase.get_save_idxs_and_saved_subsystem( - prob, save_idxs) + saved_subsystem = SciMLBase.get_save_idxs_and_saved_subsystem( + prob, save_idxs + ) ks_prototype = nothing if save_idxs === nothing @@ -341,11 +379,11 @@ function SciMLBase.__init( # Have to convert in case passed in wrong. if save_idxs === nothing timeseries = timeseries_init === () ? uType[] : - convert(Vector{uType}, timeseries_init) + convert(Vector{uType}, timeseries_init) else u_initial = u[save_idxs] timeseries = timeseries_init === () ? typeof(u_initial)[] : - convert(Vector{uType}, timeseries_init) + convert(Vector{uType}, timeseries_init) end ts = ts_init === () ? tType[] : convert(Vector{tType}, ts_init) @@ -412,13 +450,17 @@ function SciMLBase.__init( end if prob isa DAEProblem - cache = alg_cache(_alg, du, u, res_prototype, rate_prototype, uEltypeNoUnits, + cache = alg_cache( + _alg, du, u, res_prototype, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits, uprev, uprev2, f, t, dt, - reltol_internal, p, calck, Val(isinplace(prob))) + reltol_internal, p, calck, Val(isinplace(prob)) + ) else - cache = alg_cache(_alg, u, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, + cache = alg_cache( + _alg, u, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits, uprev, uprev2, f, t, dt, reltol_internal, p, calck, - Val(isinplace(prob))) + Val(isinplace(prob)) + ) end # Setting up the step size controller @@ -438,10 +480,11 @@ function SciMLBase.__init( save_end_user = save_end save_end = save_end === nothing ? - save_everystep || isempty(saveat) || saveat isa Number || - prob.tspan[2] in saveat : save_end + save_everystep || isempty(saveat) || saveat isa Number || + prob.tspan[2] in saveat : save_end - opts = DEOptions{typeof(abstol_internal), typeof(reltol_internal), + opts = DEOptions{ + typeof(abstol_internal), typeof(reltol_internal), QT, tType, typeof(controller), typeof(internalnorm), typeof(internalopnorm), typeof(save_end_user), @@ -452,7 +495,9 @@ function SciMLBase.__init( typeof(d_discontinuities_internal), typeof(userdata), typeof(save_idxs), typeof(maxiters), typeof(tstops), - typeof(saveat), typeof(d_discontinuities)}(maxiters, save_everystep, + typeof(saveat), typeof(d_discontinuities), + }( + maxiters, save_everystep, adaptive, abstol_internal, reltol_internal, QT(gamma), QT(qmax), @@ -484,17 +529,21 @@ function SciMLBase.__init( unstable_check, verbose, calck, force_dtmin, advance_to_tstop, - stop_at_next_tstop) + stop_at_next_tstop + ) stats = SciMLBase.DEStats(0) differential_vars = prob isa DAEProblem ? prob.differential_vars : - get_differential_vars(f, u) + get_differential_vars(f, u) id = InterpolationData( - f, timeseries, ts, ks, alg_choice, dense, cache, differential_vars, false) - sol = SciMLBase.build_solution(prob, _alg, ts, timeseries, + f, timeseries, ts, ks, alg_choice, dense, cache, differential_vars, false + ) + sol = SciMLBase.build_solution( + prob, _alg, ts, timeseries, dense = dense, k = ks, interp = id, alg_choice = alg_choice, - calculate_error = false, stats = stats, saved_subsystem = saved_subsystem) + calculate_error = false, stats = stats, saved_subsystem = saved_subsystem + ) FType = typeof(f) SolType = typeof(sol) @@ -520,8 +569,10 @@ function SciMLBase.__init( event_last_time = 0 vector_event_last_time = 1 last_event_error = prob isa SciMLBase.AbstractDiscreteProblem ? false : - (Base.isbitstype(uBottomEltypeNoUnits) ? zero(uBottomEltypeNoUnits) : - 0.0) + ( + Base.isbitstype(uBottomEltypeNoUnits) ? zero(uBottomEltypeNoUnits) : + 0.0 + ) dtchangeable = isdtchangeable(_alg) q11 = QT(1) success_iter = 0 @@ -532,14 +583,16 @@ function SciMLBase.__init( saveiter_dense = 0 fsalfirst, fsallast = get_fsalfirstlast(cache, rate_prototype) - integrator = ODEIntegrator{typeof(_alg), isinplace(prob), uType, typeof(du), + integrator = ODEIntegrator{ + typeof(_alg), isinplace(prob), uType, typeof(du), tType, typeof(p), typeof(eigen_est), typeof(EEst), QT, typeof(tdir), typeof(k), SolType, FType, cacheType, typeof(opts), typeof(fsalfirst), typeof(last_event_error), typeof(callback_cache), - typeof(initializealg), typeof(differential_vars)}( + typeof(initializealg), typeof(differential_vars), + }( sol, u, du, k, t, tType(dt), f, p, uprev, uprev2, duprev, tprev, _alg, dtcache, dtchangeable, @@ -557,11 +610,12 @@ function SciMLBase.__init( isout, reeval_fsal, u_modified, reinitiailize, isdae, opts, stats, initializealg, differential_vars, - fsalfirst, fsallast) + fsalfirst, fsallast + ) if initialize_integrator if isdae || SciMLBase.has_initializeprob(prob.f) || - prob isa SciMLBase.ImplicitDiscreteProblem + prob isa SciMLBase.ImplicitDiscreteProblem DiffEqBase.initialize_dae!(integrator) !isnothing(integrator.u) && update_uprev!(integrator) end @@ -607,7 +661,7 @@ function SciMLBase.__init( end handle_dt!(integrator) - integrator + return integrator end function SciMLBase.solve!(integrator::ODEIntegrator) @@ -630,23 +684,25 @@ function SciMLBase.solve!(integrator::ODEIntegrator) f = integrator.sol.prob.f if SciMLBase.has_analytic(f) - SciMLBase.calculate_solution_errors!(integrator.sol; + SciMLBase.calculate_solution_errors!( + integrator.sol; timeseries_errors = integrator.opts.timeseries_errors, - dense_errors = integrator.opts.dense_errors) + dense_errors = integrator.opts.dense_errors + ) end if integrator.sol.retcode != ReturnCode.Default return integrator.sol end - integrator.sol = SciMLBase.solution_new_retcode(integrator.sol, ReturnCode.Success) + return integrator.sol = SciMLBase.solution_new_retcode(integrator.sol, ReturnCode.Success) end # Helpers function handle_dt!(integrator) - if iszero(integrator.dt) && integrator.opts.adaptive + return if iszero(integrator.dt) && integrator.opts.adaptive auto_dt_reset!(integrator) if sign(integrator.dt) != integrator.tdir && !iszero(integrator.dt) && - !isnan(integrator.dt) + !isnan(integrator.dt) error("Automatic dt setting has the wrong sign. Exiting. Please report this error.") end if isnan(integrator.dt) @@ -655,7 +711,7 @@ function handle_dt!(integrator) end end elseif integrator.opts.adaptive && integrator.dt > zero(integrator.dt) && - integrator.tdir < 0 + integrator.tdir < 0 integrator.dt *= integrator.tdir # Allow positive dt, but auto-convert end end @@ -747,8 +803,10 @@ function initialize_callbacks!(integrator, initialize_save = true) end if initialize_save && - (any((c) -> c.save_positions[2], callbacks.discrete_callbacks) || - any((c) -> c.save_positions[2], callbacks.continuous_callbacks)) + ( + any((c) -> c.save_positions[2], callbacks.discrete_callbacks) || + any((c) -> c.save_positions[2], callbacks.continuous_callbacks) + ) savevalues!(integrator, true) end end @@ -756,7 +814,7 @@ function initialize_callbacks!(integrator, initialize_save = true) # reset this as it is now handled so the integrators should proceed as normal integrator.u_modified = false - if initialize_save + return if initialize_save SciMLBase.save_discretes_if_enabled!(integrator, integrator.opts.callback; skip_duplicates = true) end end diff --git a/lib/OrdinaryDiffEqCore/test/jet.jl b/lib/OrdinaryDiffEqCore/test/jet.jl index 7c00258e56..5c66e13803 100644 --- a/lib/OrdinaryDiffEqCore/test/jet.jl +++ b/lib/OrdinaryDiffEqCore/test/jet.jl @@ -3,5 +3,6 @@ using JET, Test @testset "JET Tests" begin @test test_package( - OrdinaryDiffEqCore, target_defined_modules = true, mode = :typo) === nothing broken=true + OrdinaryDiffEqCore, target_defined_modules = true, mode = :typo + ) === nothing broken = true end diff --git a/lib/OrdinaryDiffEqDefault/src/OrdinaryDiffEqDefault.jl b/lib/OrdinaryDiffEqDefault/src/OrdinaryDiffEqDefault.jl index ea030b19ca..b3cca257b8 100644 --- a/lib/OrdinaryDiffEqDefault/src/OrdinaryDiffEqDefault.jl +++ b/lib/OrdinaryDiffEqDefault/src/OrdinaryDiffEqDefault.jl @@ -1,9 +1,9 @@ module OrdinaryDiffEqDefault using OrdinaryDiffEqCore: alg_stability_size, beta2_default, beta1_default, AutoSwitchCache, - ODEIntegrator, trivial_limiter!, - CompositeAlgorithm, OrdinaryDiffEqAlgorithm, - OrdinaryDiffEqMutableCache, AutoAlgSwitch + ODEIntegrator, trivial_limiter!, + CompositeAlgorithm, OrdinaryDiffEqAlgorithm, + OrdinaryDiffEqMutableCache, AutoAlgSwitch using OrdinaryDiffEqVerner: Vern7, Vern8, Vern9, Vern6 using OrdinaryDiffEqTsit5: Tsit5 using OrdinaryDiffEqRosenbrock: Rosenbrock23, Rodas5P @@ -30,11 +30,11 @@ PrecompileTools.@compile_workload begin prob_list = [] default_ode = [ - DefaultODEAlgorithm(autodiff = AutoFiniteDiff()) + DefaultODEAlgorithm(autodiff = AutoFiniteDiff()), ] default_autodiff_ode = [ - DefaultODEAlgorithm() + DefaultODEAlgorithm(), ] if Preferences.@load_preference("PrecompileDefault", true) @@ -51,29 +51,51 @@ PrecompileTools.@compile_workload begin end if Preferences.@load_preference("PrecompileAutoSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.AutoSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.AutoSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0), Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.AutoSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0) + ) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.AutoSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0), Float64[] + ) + ) end if Preferences.@load_preference("PrecompileFunctionWrapperSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0), Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0) + ) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0), Float64[] + ) + ) end if Preferences.@load_preference("PrecompileNoSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), - Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0)) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.NoSpecialize}( + lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), + Float64[] + ) + ) end for prob in prob_list, solver in solver_list diff --git a/lib/OrdinaryDiffEqDefault/src/default_alg.jl b/lib/OrdinaryDiffEqDefault/src/default_alg.jl index afc9585b1f..5803e54797 100644 --- a/lib/OrdinaryDiffEqDefault/src/default_alg.jl +++ b/lib/OrdinaryDiffEqDefault/src/default_alg.jl @@ -9,51 +9,63 @@ end const NUM_NONSTIFF = 2 const NUM_STIFF = 4 -const LOW_TOL = 1e-6 -const MED_TOL = 1e-2 -const EXTREME_TOL = 1e-9 +const LOW_TOL = 1.0e-6 +const MED_TOL = 1.0e-2 +const EXTREME_TOL = 1.0e-9 const SMALLSIZE = 50 const MEDIUMSIZE = 500 const STABILITY_SIZES = (alg_stability_size(Tsit5()), alg_stability_size(Vern7())) const DEFAULTBETA2S = ( beta2_default(Tsit5()), beta2_default(Vern7()), beta2_default(Rosenbrock23()), - beta2_default(Rodas5P()), beta2_default(FBDF()), beta2_default(FBDF())) + beta2_default(Rodas5P()), beta2_default(FBDF()), beta2_default(FBDF()), +) const DEFAULTBETA1S = ( beta1_default(Tsit5(), DEFAULTBETA2S[1]), beta1_default(Vern7(), DEFAULTBETA2S[2]), beta1_default(Rosenbrock23(), DEFAULTBETA2S[3]), beta1_default( - Rodas5P(), DEFAULTBETA2S[4]), - beta1_default(FBDF(), DEFAULTBETA2S[5]), beta1_default(FBDF(), DEFAULTBETA2S[6])) + Rodas5P(), DEFAULTBETA2S[4] + ), + beta1_default(FBDF(), DEFAULTBETA2S[5]), beta1_default(FBDF(), DEFAULTBETA2S[6]), +) callbacks_exists(integrator) = !isempty(integrator.opts.callbacks) current_nonstiff(current) = ifelse(current <= NUM_NONSTIFF, current, current - NUM_STIFF) function DefaultODEAlgorithm(; lazy = true, stiffalgfirst = false, kwargs...) nonstiff = (Tsit5(), Vern7(lazy = lazy)) - stiff = (Rosenbrock23(; kwargs...), Rodas5P(; kwargs...), FBDF(; kwargs...), - FBDF(; linsolve = LinearSolve.KrylovJL_GMRES(), kwargs...)) - AutoAlgSwitch(nonstiff, stiff; stiffalgfirst) + stiff = ( + Rosenbrock23(; kwargs...), Rodas5P(; kwargs...), FBDF(; kwargs...), + FBDF(; linsolve = LinearSolve.KrylovJL_GMRES(), kwargs...), + ) + return AutoAlgSwitch(nonstiff, stiff; stiffalgfirst) end -function isdefaultalg(alg::CompositeAlgorithm{ - <:Any, <:Tuple{Tsit5, Vern7, Rosenbrock23, Rodas5P, FBDF, FBDF}}) - true +function isdefaultalg( + alg::CompositeAlgorithm{ + <:Any, <:Tuple{Tsit5, Vern7, Rosenbrock23, Rodas5P, FBDF, FBDF}, + } + ) + return true end function SciMLBase.__init(prob::ODEProblem, ::Nothing, args...; kwargs...) - SciMLBase.__init( + return SciMLBase.__init( prob, DefaultODEAlgorithm(autodiff = AutoFiniteDiff()), - args...; wrap = Val(false), kwargs...) + args...; wrap = Val(false), kwargs... + ) end function SciMLBase.__solve(prob::ODEProblem, ::Nothing, args...; kwargs...) - SciMLBase.__solve( + return SciMLBase.__solve( prob, DefaultODEAlgorithm(autodiff = AutoFiniteDiff()), - args...; wrap = Val(false), kwargs...) + args...; wrap = Val(false), kwargs... + ) end function is_stiff(integrator, alg, ntol, stol, is_stiffalg, current) eigen_est, dt = integrator.eigen_est, integrator.dt - stiffness = abs(eigen_est * dt / - STABILITY_SIZES[nonstiffchoice(integrator.opts.reltol)]) # `abs` here is just for safety + stiffness = abs( + eigen_est * dt / + STABILITY_SIZES[nonstiffchoice(integrator.opts.reltol)] + ) # `abs` here is just for safety tol = is_stiffalg ? stol : ntol os = oneunit(stiffness) bool = stiffness > os * tol @@ -64,10 +76,12 @@ function is_stiff(integrator, alg, ntol, stol, is_stiffalg, current) integrator.alg.choice_function.successive_switches = 0 end - integrator.do_error_check = (integrator.alg.choice_function.successive_switches > - integrator.alg.choice_function.switch_max || !bool) || - is_stiffalg - bool + integrator.do_error_check = ( + integrator.alg.choice_function.successive_switches > + integrator.alg.choice_function.switch_max || !bool + ) || + is_stiffalg + return bool end function nonstiffchoice(reltol) @@ -76,7 +90,7 @@ function nonstiffchoice(reltol) else DefaultSolverChoice.Tsit5 end - Int(x) + return Int(x) end function stiffchoice(reltol, len, mass_matrix) @@ -91,7 +105,7 @@ function stiffchoice(reltol, len, mass_matrix) DefaultSolverChoice.Rosenbrock23 end end - Int(x) + return Int(x) end function default_autoswitch(AS::AutoSwitchCache, integrator) @@ -112,10 +126,12 @@ function default_autoswitch(AS::AutoSwitchCache, integrator) dt = integrator.dt # Successive stiffness test positives are counted by a positive integer, # and successive stiffness test negatives are counted by a negative integer - AS.count = is_stiff(integrator, AS.nonstiffalg, AS.nonstifftol, AS.stifftol, - AS.is_stiffalg, AS.current) ? - AS.count < 0 ? 1 : AS.count + 1 : - AS.count > 0 ? -1 : AS.count - 1 + AS.count = is_stiff( + integrator, AS.nonstiffalg, AS.nonstifftol, AS.stifftol, + AS.is_stiffalg, AS.current + ) ? + AS.count < 0 ? 1 : AS.count + 1 : + AS.count > 0 ? -1 : AS.count - 1 if integrator.f.mass_matrix != I #don't change anything elseif (!AS.is_stiffalg && AS.count > AS.maxstiffstep) @@ -131,16 +147,22 @@ function default_autoswitch(AS::AutoSwitchCache, integrator) end # hack for the default alg -function is_mass_matrix_alg(alg::CompositeAlgorithm{ - <:Any, <:Tuple{Tsit5, Vern7, Rosenbrock23, Rodas5P, FBDF, FBDF}}) - true +function is_mass_matrix_alg( + alg::CompositeAlgorithm{ + <:Any, <:Tuple{Tsit5, Vern7, Rosenbrock23, Rodas5P, FBDF, FBDF}, + } + ) + return true end function DefaultImplicitODEAlgorithm(; lazy = true, stol = 0, ntol = Inf, kwargs...) nonstiff = (Tsit5(), Vern7(lazy = lazy)) - stiff = (Rosenbrock23(; kwargs...), Rodas5P(; kwargs...), + stiff = ( + Rosenbrock23(; kwargs...), Rodas5P(; kwargs...), FBDF(; kwargs...), - FBDF(; linsolve = LinearSolve.KrylovJL_GMRES(), kwargs...)) - AutoAlgSwitch( - nonstiff, stiff; stiffalgfirst = true, stifftol = stol, nonstifftol = ntol) + FBDF(; linsolve = LinearSolve.KrylovJL_GMRES(), kwargs...), + ) + return AutoAlgSwitch( + nonstiff, stiff; stiffalgfirst = true, stifftol = stol, nonstifftol = ntol + ) end diff --git a/lib/OrdinaryDiffEqDefault/test/default_solver_tests.jl b/lib/OrdinaryDiffEqDefault/test/default_solver_tests.jl index 493c708d5d..338e693bc3 100644 --- a/lib/OrdinaryDiffEqDefault/test/default_solver_tests.jl +++ b/lib/OrdinaryDiffEqDefault/test/default_solver_tests.jl @@ -1,5 +1,5 @@ using OrdinaryDiffEqDefault, OrdinaryDiffEqTsit5, OrdinaryDiffEqVerner, - OrdinaryDiffEqRosenbrock, OrdinaryDiffEqBDF, ADTypes + OrdinaryDiffEqRosenbrock, OrdinaryDiffEqBDF, ADTypes using Test, LinearSolve, LinearAlgebra, SparseArrays, StaticArrays f_2dlinear = (du, u, p, t) -> (@. du = p * u) @@ -18,37 +18,40 @@ x = [zeros(4, 2) for _ in 1:5] sol_implicit = @inferred solve(prob_ode_2Dlinear, DefaultImplicitODEAlgorithm()) @test all(isequal(3), sol_implicit.alg_choice) -@test sol(0.5)≈sol_implicit(0.5) rtol=1e-3 atol=1e-6 +@test sol(0.5) ≈ sol_implicit(0.5) rtol = 1.0e-3 atol = 1.0e-6 -sol = solve(prob_ode_2Dlinear, reltol = 1e-10) -vernsol = solve(prob_ode_2Dlinear, Vern7(), reltol = 1e-10) +sol = solve(prob_ode_2Dlinear, reltol = 1.0e-10) +vernsol = solve(prob_ode_2Dlinear, Vern7(), reltol = 1.0e-10) # test that default is the same as Vern7 (we expect it to use Vern7 for this). @test sol.stats.naccept == vernsol.stats.naccept @test sol.stats.nf == vernsol.stats.nf @test all(isequal(2), sol.alg_choice) @test sol(0.5) == only(sol([0.5]).u) == vernsol(0.5) -sol_implicit = @inferred solve(prob_ode_2Dlinear, DefaultImplicitODEAlgorithm(), reltol = 1e-10) +sol_implicit = @inferred solve(prob_ode_2Dlinear, DefaultImplicitODEAlgorithm(), reltol = 1.0e-10) @test all(isequal(4), sol_implicit.alg_choice) -@test sol(0.5)≈sol_implicit(0.5) rtol=1e-10 atol=1e-6 +@test sol(0.5) ≈ sol_implicit(0.5) rtol = 1.0e-10 atol = 1.0e-6 prob_ode_linear_fast = ODEProblem( - ODEFunction(f_2dlinear, mass_matrix = 2 * I(2)), rand(2), (0.0, 1.0), 1.01) + ODEFunction(f_2dlinear, mass_matrix = 2 * I(2)), rand(2), (0.0, 1.0), 1.01 +) sol = solve(prob_ode_linear_fast) @test all(isequal(4), sol.alg_choice) # for some reason the timestepping here is different from regular Rosenbrock23 (including the initial timestep) -sol_implicit = @inferred solve(prob_ode_linear_fast, DefaultImplicitODEAlgorithm(), reltol = 1e-10) +sol_implicit = @inferred solve(prob_ode_linear_fast, DefaultImplicitODEAlgorithm(), reltol = 1.0e-10) @test all(isequal(4), sol_implicit.alg_choice) function rober(u, p, t) y₁, y₂, y₃ = u k₁, k₂, k₃ = p - [-k₁ * y₁ + k₃ * y₂ * y₃, + return [ + -k₁ * y₁ + k₃ * y₂ * y₃, k₁ * y₁ - k₃ * y₂ * y₃ - k₂ * y₂^2, - k₂ * y₂^2] + k₂ * y₂^2, + ] end -prob_rober = ODEProblem(rober, [1.0, 0.0, 0.0], (0.0, 1e3), (0.04, 3e7, 1e4)) +prob_rober = ODEProblem(rober, [1.0, 0.0, 0.0], (0.0, 1.0e3), (0.04, 3.0e7, 1.0e4)) sol = solve(prob_rober) rosensol = solve(prob_rober, AutoTsit5(Rosenbrock23(autodiff = AutoFiniteDiff()))) #test that cache is type stable @@ -60,9 +63,10 @@ rosensol = solve(prob_rober, AutoTsit5(Rosenbrock23(autodiff = AutoFiniteDiff()) @test sol.alg_choice[1] == 1 @test sol.alg_choice[end] == 3 -sol = solve(prob_rober, reltol = 1e-7, abstol = 1e-7) +sol = solve(prob_rober, reltol = 1.0e-7, abstol = 1.0e-7) rosensol = solve( - prob_rober, AutoVern7(Rodas5P(autodiff = AutoFiniteDiff())), reltol = 1e-7, abstol = 1e-7) + prob_rober, AutoVern7(Rodas5P(autodiff = AutoFiniteDiff())), reltol = 1.0e-7, abstol = 1.0e-7 +) #test that cache is type stable @test typeof(sol.interp.cache.cache4) == typeof(rosensol.interp.cache.caches[2]) # test that default has the same performance as AutoTsit5(Rosenbrock23()) (which we expect it to use for this). @@ -75,10 +79,14 @@ rosensol = solve( function exrober(du, u, p, t) y₁, y₂, y₃ = u k₁, k₂, k₃ = p - du .= vcat([-k₁ * y₁ + k₃ * y₂ * y₃, + return du .= vcat( + [ + -k₁ * y₁ + k₃ * y₂ * y₃, k₁ * y₁ - k₃ * y₂ * y₃ - k₂ * y₂^2, - k₂ * y₂^2], - fill(t, length(u) - 3)) + k₂ * y₂^2, + ], + fill(t, length(u) - 3) + ) end for n in (100, 600) @@ -87,8 +95,10 @@ for n in (100, 600) jac_prototype = sparse(I(n + 3)) jac_prototype[1:3, 1:3] .= 1.0 - prob_ex_rober = ODEProblem(ODEFunction(exrober; jac_prototype), - vcat([1.0, 0.0, 0.0], ones(n)), (0.0, 100.0), (0.04, 3e7, 1e4)) + prob_ex_rober = ODEProblem( + ODEFunction(exrober; jac_prototype), + vcat([1.0, 0.0, 0.0], ones(n)), (0.0, 100.0), (0.04, 3.0e7, 1.0e4) + ) global sol = solve(prob_ex_rober) fsol = solve(prob_ex_rober, AutoTsit5(FBDF(; autodiff = AutoFiniteDiff(), linsolve))) # test that default has the same performance as AutoTsit5(Rosenbrock23()) (which we expect it to use for this). @@ -98,7 +108,7 @@ for n in (100, 600) end function swaplinear(u, p, t) - [u[2], u[1]] .* p + return [u[2], u[1]] .* p end swaplinearf = ODEFunction(swaplinear, mass_matrix = ones(2, 2) - I(2)) prob_swaplinear = ODEProblem(swaplinearf, rand(2), (0.0, 1.0), 1.01) @@ -114,10 +124,10 @@ function rober_mm(du, u, p, t) du[1] = -k₁ * y₁ + k₃ * y₂ * y₃ du[2] = k₁ * y₁ - k₃ * y₂ * y₃ - k₂ * y₂^2 du[3] = y₁ + y₂ + y₃ - 1 - nothing + return nothing end f = ODEFunction(rober_mm, mass_matrix = [1 0 0; 0 1 0; 0 0 0]) -prob_rober_mm = ODEProblem(f, [1.0, 0.0, 1.0], (0.0, 1e5), (0.04, 3e7, 1e4)) +prob_rober_mm = ODEProblem(f, [1.0, 0.0, 1.0], (0.0, 1.0e5), (0.04, 3.0e7, 1.0e4)) sol = solve(prob_rober_mm) @test all(isequal(4), sol.alg_choice) @test sol(0.5) isa Vector{Float64} # test dense output @@ -141,9 +151,11 @@ complex_sol = solve(prob_complex) # Make sure callback doesn't recurse init, which would cause initialize to be hit twice counter = Ref{Int}(0) -cb = DiscreteCallback((u, t, integ)->false, (integ)->nothing; - initialize = (c, u, t, integ)->counter[]+=1) +cb = DiscreteCallback( + (u, t, integ) -> false, (integ) -> nothing; + initialize = (c, u, t, integ) -> counter[] += 1 +) -prob = ODEProblem((u, p, t)->[0.0], [0.0], (0.0, 1.0)) +prob = ODEProblem((u, p, t) -> [0.0], [0.0], (0.0, 1.0)) sol = solve(prob, callback = cb) @test counter[] == 1 diff --git a/lib/OrdinaryDiffEqDefault/test/jet.jl b/lib/OrdinaryDiffEqDefault/test/jet.jl index e9745ea006..b4ca6f6173 100644 --- a/lib/OrdinaryDiffEqDefault/test/jet.jl +++ b/lib/OrdinaryDiffEqDefault/test/jet.jl @@ -4,6 +4,7 @@ using JET if isempty(VERSION.prerelease) @testset "JET Tests" begin test_package( - OrdinaryDiffEqDefault, target_defined_modules = true, mode = :typo) + OrdinaryDiffEqDefault, target_defined_modules = true, mode = :typo + ) end end diff --git a/lib/OrdinaryDiffEqDifferentiation/ext/OrdinaryDiffEqDifferentiationSparseArraysExt.jl b/lib/OrdinaryDiffEqDifferentiation/ext/OrdinaryDiffEqDifferentiationSparseArraysExt.jl index cb19915333..7e607abe64 100644 --- a/lib/OrdinaryDiffEqDifferentiation/ext/OrdinaryDiffEqDifferentiationSparseArraysExt.jl +++ b/lib/OrdinaryDiffEqDifferentiation/ext/OrdinaryDiffEqDifferentiationSparseArraysExt.jl @@ -16,4 +16,4 @@ OrdinaryDiffEqDifferentiation.spzeros(T::Type, m::Integer, n::Integer) = spzeros OrdinaryDiffEqDifferentiation.get_nzval(A::SparseMatrixCSC) = A.nzval OrdinaryDiffEqDifferentiation.set_all_nzval!(A::SparseMatrixCSC, val) = (A.nzval .= val; A) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqDifferentiation/src/OrdinaryDiffEqDifferentiation.jl b/lib/OrdinaryDiffEqDifferentiation/src/OrdinaryDiffEqDifferentiation.jl index ee291273f8..9b0f89289a 100644 --- a/lib/OrdinaryDiffEqDifferentiation/src/OrdinaryDiffEqDifferentiation.jl +++ b/lib/OrdinaryDiffEqDifferentiation/src/OrdinaryDiffEqDifferentiation.jl @@ -20,34 +20,34 @@ import ArrayInterface: fast_scalar_indexing, zeromatrix, lu_instance # import StaticArrayInterface import StaticArrays import StaticArrays: SArray, MVector, SVector, @SVector, StaticArray, MMatrix, SA, - StaticMatrix + StaticMatrix using DiffEqBase: TimeGradientWrapper, - UJacobianWrapper, TimeDerivativeWrapper, - UDerivativeWrapper + UJacobianWrapper, TimeDerivativeWrapper, + UDerivativeWrapper import SciMLBase: SciMLBase, constructorof, @set, isinplace, has_jvp, unwrapped_f, DEIntegrator, ODEFunction, SplitFunction, DynamicalODEFunction, DAEFunction, islinear, remake, solve!, isconstant using SciMLBase: @set, @reset import SciMLOperators: SciMLOperators, IdentityOperator, update_coefficients, update_coefficients!, MatrixOperator, AbstractSciMLOperator, ScalarOperator import SparseMatrixColorings: ConstantColoringAlgorithm, GreedyColoringAlgorithm, ColoringProblem, - ncolors, column_colors, coloring, sparsity_pattern + ncolors, column_colors, coloring, sparsity_pattern import OrdinaryDiffEqCore using OrdinaryDiffEqCore: OrdinaryDiffEqAlgorithm, OrdinaryDiffEqAdaptiveImplicitAlgorithm, - DAEAlgorithm, - OrdinaryDiffEqImplicitAlgorithm, CompositeAlgorithm, - OrdinaryDiffEqExponentialAlgorithm, - OrdinaryDiffEqAdaptiveExponentialAlgorithm, - AbstractNLSolver, nlsolve_f, issplit, - concrete_jac, unwrap_alg, OrdinaryDiffEqCache, _vec, standardtag, - isnewton, _unwrap_val, - set_new_W!, set_W_γdt!, alg_difftype, unwrap_cache, diffdir, - get_W, isfirstcall, isfirststage, isJcurrent, - get_new_W_γdt_cutoff, - TryAgain, DIRK, COEFFICIENT_MULTISTEP, NORDSIECK_MULTISTEP, GLM, - FastConvergence, Convergence, SlowConvergence, - VerySlowConvergence, Divergence, NLStatus, MethodType, constvalue + DAEAlgorithm, + OrdinaryDiffEqImplicitAlgorithm, CompositeAlgorithm, + OrdinaryDiffEqExponentialAlgorithm, + OrdinaryDiffEqAdaptiveExponentialAlgorithm, + AbstractNLSolver, nlsolve_f, issplit, + concrete_jac, unwrap_alg, OrdinaryDiffEqCache, _vec, standardtag, + isnewton, _unwrap_val, + set_new_W!, set_W_γdt!, alg_difftype, unwrap_cache, diffdir, + get_W, isfirstcall, isfirststage, isJcurrent, + get_new_W_γdt_cutoff, + TryAgain, DIRK, COEFFICIENT_MULTISTEP, NORDSIECK_MULTISTEP, GLM, + FastConvergence, Convergence, SlowConvergence, + VerySlowConvergence, Divergence, NLStatus, MethodType, constvalue import OrdinaryDiffEqCore: get_chunksize, resize_J_W!, resize_nlsolver!, alg_autodiff, - _get_fwd_tag + _get_fwd_tag import ConstructionBase using ConstructionBase: constructorof diff --git a/lib/OrdinaryDiffEqDifferentiation/src/alg_utils.jl b/lib/OrdinaryDiffEqDifferentiation/src/alg_utils.jl index 01bd3b86ca..2ae1aac040 100644 --- a/lib/OrdinaryDiffEqDifferentiation/src/alg_utils.jl +++ b/lib/OrdinaryDiffEqDifferentiation/src/alg_utils.jl @@ -3,17 +3,20 @@ function _alg_autodiff(alg::OrdinaryDiffEqAlgorithm) error("This algorithm does not have an autodifferentiation option defined.") end function _alg_autodiff(alg::OrdinaryDiffEqAdaptiveImplicitAlgorithm{CS, AD}) where {CS, AD} - alg.autodiff + return alg.autodiff end _alg_autodiff(alg::DAEAlgorithm{CS, AD}) where {CS, AD} = alg.autodiff _alg_autodiff(alg::OrdinaryDiffEqImplicitAlgorithm{CS, AD}) where {CS, AD} = alg.autodiff _alg_autodiff(alg::CompositeAlgorithm) = _alg_autodiff(alg.algs[end]) -function _alg_autodiff(alg::Union{OrdinaryDiffEqExponentialAlgorithm{CS, AD}, - OrdinaryDiffEqAdaptiveExponentialAlgorithm{CS, AD} -}) where { - CS, AD -} - alg.autodiff +function _alg_autodiff( + alg::Union{ + OrdinaryDiffEqExponentialAlgorithm{CS, AD}, + OrdinaryDiffEqAdaptiveExponentialAlgorithm{CS, AD}, + } + ) where { + CS, AD, + } + return alg.autodiff end function alg_autodiff(alg) @@ -41,21 +44,29 @@ end function DiffEqBase.prepare_alg( alg::Union{ - OrdinaryDiffEqAdaptiveImplicitAlgorithm{CS, AD, - FDT}, + OrdinaryDiffEqAdaptiveImplicitAlgorithm{ + CS, AD, + FDT, + }, OrdinaryDiffEqImplicitAlgorithm{CS, AD, FDT}, DAEAlgorithm{CS, AD, FDT}, - OrdinaryDiffEqExponentialAlgorithm{CS, AD, FDT}}, + OrdinaryDiffEqExponentialAlgorithm{CS, AD, FDT}, + }, u0::AbstractArray{T}, - p, prob) where {CS, AD, FDT, T} + p, prob + ) where {CS, AD, FDT, T} prepped_AD = prepare_ADType(alg_autodiff(alg), prob, u0, p, standardtag(alg)) sparse_prepped_AD = prepare_user_sparsity(prepped_AD, prob) # if u0 is a StaticArray or eltype is Complex etc. don't use sparsity - if (((typeof(u0) <: StaticArray) || (eltype(u0) <: Complex) || - (!(prob.f isa DAEFunction) && prob.f.mass_matrix isa MatrixOperator)) && - sparse_prepped_AD isa AutoSparse) + if ( + ( + (typeof(u0) <: StaticArray) || (eltype(u0) <: Complex) || + (!(prob.f isa DAEFunction) && prob.f.mass_matrix isa MatrixOperator) + ) && + sparse_prepped_AD isa AutoSparse + ) @warn "Input type or problem definition is incompatible with sparse automatic differentiation. Switching to using dense automatic differentiation." autodiff = ADTypes.dense_ad(sparse_prepped_AD) else @@ -66,8 +77,9 @@ function DiffEqBase.prepare_alg( end function prepare_ADType(autodiff_alg::AutoSparse, prob, u0, p, standardtag) - SciMLBase.@set autodiff_alg.dense_ad = prepare_ADType( - ADTypes.dense_ad(autodiff_alg), prob, u0, p, standardtag) + return SciMLBase.@set autodiff_alg.dense_ad = prepare_ADType( + ADTypes.dense_ad(autodiff_alg), prob, u0, p, standardtag + ) end function prepare_ADType(autodiff_alg::AutoForwardDiff, prob, u0, p, standardtag) @@ -83,9 +95,13 @@ function prepare_ADType(autodiff_alg::AutoForwardDiff, prob, u0, p, standardtag) cs = fwd_cs == 0 ? nothing : fwd_cs - if ((prob.f isa ODEFunction && - prob.f.f isa FunctionWrappersWrappers.FunctionWrappersWrapper) || - (isbitstype(T) && sizeof(T) > 24)) && (cs == 0 || isnothing(cs)) + if ( + ( + prob.f isa ODEFunction && + prob.f.f isa FunctionWrappersWrappers.FunctionWrappersWrapper + ) || + (isbitstype(T) && sizeof(T) > 24) + ) && (cs == 0 || isnothing(cs)) return AutoForwardDiff{1}(tag) else return AutoForwardDiff{cs}(tag) @@ -95,8 +111,10 @@ end function prepare_ADType(alg::AutoFiniteDiff, prob, u0, p, standardtag) # If the autodiff alg is AutoFiniteDiff, prob.f.f isa FunctionWrappersWrapper, # and fdtype is complex, fdtype needs to change to something not complex - if alg.fdtype == Val{:complex}() && (prob.f isa ODEFunction && - prob.f.f isa FunctionWrappersWrappers.FunctionWrappersWrapper) + if alg.fdtype == Val{:complex}() && ( + prob.f isa ODEFunction && + prob.f.f isa FunctionWrappersWrappers.FunctionWrappersWrapper + ) @warn "AutoFiniteDiff fdtype complex is not compatible with this function" return AutoFiniteDiff(fdtype = Val{:forward}()) end @@ -134,13 +152,15 @@ function prepare_user_sparsity(ad_alg, prob) sparsity = sparsity isa MatrixOperator ? sparsity.A : sparsity color_alg = SciMLBase.has_colorvec(prob.f) ? - ConstantColoringAlgorithm( - sparsity, prob.f.colorvec) : GreedyColoringAlgorithm() + ConstantColoringAlgorithm( + sparsity, prob.f.colorvec + ) : GreedyColoringAlgorithm() sparsity_detector = ADTypes.KnownJacobianSparsityDetector(sparsity) return AutoSparse( - ad_alg, sparsity_detector = sparsity_detector, coloring_algorithm = color_alg) + ad_alg, sparsity_detector = sparsity_detector, coloring_algorithm = color_alg + ) else return ad_alg end @@ -152,5 +172,5 @@ end @generated function pick_static_chunksize(::Val{chunksize}) where {chunksize} x = ForwardDiff.pickchunksize(chunksize) - :(Val{$x}()) + return :(Val{$x}()) end diff --git a/lib/OrdinaryDiffEqDifferentiation/src/derivative_utils.jl b/lib/OrdinaryDiffEqDifferentiation/src/derivative_utils.jl index 5e1f9767a4..ae87f462fd 100644 --- a/lib/OrdinaryDiffEqDifferentiation/src/derivative_utils.jl +++ b/lib/OrdinaryDiffEqDifferentiation/src/derivative_utils.jl @@ -21,14 +21,14 @@ struct StaticWOperator{isinv, T, F} <: AbstractSciMLOperator{T} else W end - new{isinv, T, typeof(F)}(_W, F) + return new{isinv, T, typeof(F)}(_W, F) end end isinv(W::StaticWOperator{S}) where {S} = S Base.:\(W::StaticWOperator, v::AbstractArray) = isinv(W) ? W.W * v : W.F \ v function calc_tderivative!(integrator, cache, dtd1, repeat_step) - @inbounds begin + return @inbounds begin (; t, dt, uprev, u, f, p) = integrator (; du2, fsalfirst, dT, tf, linsolve_tmp) = cache @@ -43,14 +43,14 @@ function calc_tderivative!(integrator, cache, dtd1, repeat_step) autodiff_alg = ADTypes.dense_ad(gpu_safe_autodiff(alg_autodiff(alg), u)) - # Convert t to eltype(dT) if using ForwardDiff, to make FunctionWrappers work + # Convert t to eltype(dT) if using ForwardDiff, to make FunctionWrappers work t = autodiff_alg isa AutoForwardDiff ? convert(eltype(dT), t) : t grad_config_tup = cache.grad_config if autodiff_alg isa AutoFiniteDiff grad_config = diffdir(integrator) > 0 ? grad_config_tup[1] : - grad_config_tup[2] + grad_config_tup[2] else grad_config = grad_config_tup[1] end @@ -58,7 +58,8 @@ function calc_tderivative!(integrator, cache, dtd1, repeat_step) if integrator.iter == 1 try DI.derivative!( - tf, linsolve_tmp, dT, grad_config, autodiff_alg, t) + tf, linsolve_tmp, dT, grad_config, autodiff_alg, t + ) catch e throw(FirstAutodiffTgradError(e)) end @@ -70,7 +71,7 @@ function calc_tderivative!(integrator, cache, dtd1, repeat_step) end end - @.. broadcast=false linsolve_tmp=fsalfirst+dtd1*dT + @.. broadcast = false linsolve_tmp = fsalfirst + dtd1 * dT end end @@ -103,7 +104,7 @@ function calc_tderivative(integrator, cache) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end - dT + return dT end """ @@ -150,7 +151,7 @@ function calc_J(integrator, cache, next_step::Bool = false) end integrator.stats.njacs += 1 - J + return J end """ @@ -179,7 +180,7 @@ function calc_J!(J, integrator, cache, next_step::Bool = false) # we need to set all nzval to a non-zero number # otherwise in the following line any zero gets interpreted as a structural zero if !isnothing(integrator.f.jac_prototype) && - is_sparse_csc(integrator.f.jac_prototype) + is_sparse_csc(integrator.f.jac_prototype) set_all_nzval!(integrator.f.jac_prototype, true) J .= true .* integrator.f.jac_prototype set_all_nzval!(J, false) @@ -203,7 +204,7 @@ function calc_J!(J, integrator, cache, next_step::Bool = false) # we need to set all nzval to a non-zero number # otherwise in the following line any zero gets interpreted as a structural zero if !isnothing(integrator.f.jac_prototype) && - is_sparse_csc(integrator.f.jac_prototype) + is_sparse_csc(integrator.f.jac_prototype) set_all_nzval!(integrator.f.jac_prototype, true) J .= true .* integrator.f.jac_prototype set_all_nzval!(J, false) @@ -253,13 +254,15 @@ to be a diffeq operator --- it will automatically be converted to one. internal cache (can be specified in the constructor; default to regular `Vector`). It supports all of `AbstractSciMLOperator`'s interface. """ -mutable struct WOperator{IIP, T, - MType, - GType, - JType, - F, - C, - JV} <: AbstractSciMLOperator{T} +mutable struct WOperator{ + IIP, T, + MType, + GType, + JType, + F, + C, + JV, + } <: AbstractSciMLOperator{T} mass_matrix::MType gamma::GType J::JType @@ -277,7 +280,7 @@ mutable struct WOperator{IIP, T, AJ = J isa MatrixOperator ? convert(AbstractMatrix, J) : J if AJ isa AbstractMatrix mm = mass_matrix isa MatrixOperator ? - convert(AbstractMatrix, mass_matrix) : mass_matrix + convert(AbstractMatrix, mass_matrix) : mass_matrix if is_sparse(AJ) # If gamma is zero, then it's just an initialization and we want to make sure @@ -319,16 +322,18 @@ mutable struct WOperator{IIP, T, F = typeof(_func_cache) C = typeof(_concrete_form) JV = typeof(jacvec) - return new{IIP, T, MType, GType, JType, F, C, JV}(mass_matrix, gamma, J, + return new{IIP, T, MType, GType, JType, F, C, JV}( + mass_matrix, gamma, J, _func_cache, _concrete_form, - jacvec) + jacvec + ) end - + function Base.copy(W::WOperator{IIP, T, MType, GType, JType, F, C, JV}) where {IIP, T, MType, GType, JType, F, C, JV} return new{IIP, T, MType, GType, JType, F, C, JV}( - W.mass_matrix, - W.gamma, - W.J, + W.mass_matrix, + W.gamma, + W.J, W._func_cache === nothing ? nothing : copy(W._func_cache), W._concrete_form === nothing ? nothing : copy(W._concrete_form), W.jacvec @@ -358,23 +363,25 @@ Base.eltype(W::WOperator) = eltype(W.J) # In WOperator update_coefficients!, accept both missing u/p/t and missing dtgamma and don't update them in that case. # This helps support partial updating logic used with Newton solvers. -function SciMLOperators.update_coefficients!(W::WOperator, +function SciMLOperators.update_coefficients!( + W::WOperator, u = nothing, p = nothing, t = nothing; - dtgamma = nothing) + dtgamma = nothing + ) if (u !== nothing) && (p !== nothing) && (t !== nothing) update_coefficients!(W.J, u, p, t) update_coefficients!(W.mass_matrix, u, p, t) !isnothing(W.jacvec) && update_coefficients!(W.jacvec, u, p, t) end dtgamma !== nothing && (W.gamma = dtgamma) - W + return W end function SciMLOperators.update_coefficients!(J::UJacobianWrapper, u, p, t) J.p = p - J.t = t + return J.t = t end function Base.convert(::Type{AbstractMatrix}, W::WOperator{IIP}) where {IIP} @@ -395,26 +402,26 @@ end Base.size(W::WOperator) = size(W.J) Base.size(W::WOperator, d::Integer) = d <= 2 ? size(W)[d] : 1 function Base.getindex(W::WOperator, i::Int) - -W.mass_matrix[i] / W.gamma + W.J[i] + return -W.mass_matrix[i] / W.gamma + W.J[i] end function Base.getindex(W::WOperator, I::Vararg{Int, N}) where {N} - -W.mass_matrix[I...] / W.gamma + W.J[I...] + return -W.mass_matrix[I...] / W.gamma + W.J[I...] end function Base.:*(W::WOperator, x::AbstractVecOrMat) - (W.mass_matrix * x) / -W.gamma + W.J * x + return (W.mass_matrix * x) / -W.gamma + W.J * x end function Base.:*(W::WOperator, x::Number) - (W.mass_matrix * x) / -W.gamma + W.J * x + return (W.mass_matrix * x) / -W.gamma + W.J * x end function Base.:\(W::WOperator, x::AbstractVecOrMat) - if size(W) == () # scalar operator + return if size(W) == () # scalar operator convert(Number, W) \ x else convert(AbstractMatrix, W) \ x end end function Base.:\(W::WOperator, x::Number) - if size(W) == () # scalar operator + return if size(W) == () # scalar operator convert(Number, W) \ x else convert(AbstractMatrix, W) \ x @@ -425,7 +432,7 @@ function LinearAlgebra.mul!(Y::AbstractVecOrMat, W::WOperator, B::AbstractVecOrM # Compute mass_matrix * B if isa(W.mass_matrix, UniformScaling) a = -W.mass_matrix.λ / W.gamma - @.. broadcast=false Y=a*B + @.. broadcast = false Y = a * B else mul!(_vec(Y), W.mass_matrix, _vec(B)) lmul!(-inv(W.gamma), Y) @@ -436,7 +443,7 @@ function LinearAlgebra.mul!(Y::AbstractVecOrMat, W::WOperator, B::AbstractVecOrM else mul!(_vec(W._func_cache), W.J, _vec(B)) end - _vec(Y) .+= _vec(W._func_cache) + return _vec(Y) .+= _vec(W._func_cache) end """ @@ -451,7 +458,7 @@ islinearfunction(integrator) = islinearfunction(integrator.f, integrator.alg) return the tuple `(is_linear_wrt_odealg, islinearodefunction)`. """ -function islinearfunction(f::F, alg)::Tuple{Bool, Bool} where F +function islinearfunction(f::F, alg)::Tuple{Bool, Bool} where {F} isode = f isa ODEFunction && islinear(f.f) islin = isode || (issplit(alg) && f isa SplitFunction && islinear(f.f1.f)) return islin, isode @@ -470,7 +477,7 @@ function do_newJW(integrator, alg, nlsolver, repeat_step)::NTuple{2, Bool} # TODO: add `isJcurrent` support for Rosenbrock solvers if !isnewton(nlsolver) isfreshJ = !(integrator.alg isa CompositeAlgorithm) && - (integrator.iter > 1 && errorfail && !integrator.u_modified) + (integrator.iter > 1 && errorfail && !integrator.u_modified) return !isfreshJ, true end isfirstcall(nlsolver) && return true, true @@ -501,7 +508,8 @@ end end function jacobian2W!( - W::AbstractMatrix, mass_matrix, dtgamma::Number, J::AbstractMatrix)::Nothing + W::AbstractMatrix, mass_matrix, dtgamma::Number, J::AbstractMatrix + )::Nothing # check size and dimension iijj = axes(W) @boundscheck (iijj == axes(J) && length(iijj) == 2) || _throwWJerror(W, J) @@ -514,15 +522,15 @@ function jacobian2W!( idxs = diagind(W) λ = -mass_matrix.λ if ArrayInterface.fast_scalar_indexing(J) && - ArrayInterface.fast_scalar_indexing(W) + ArrayInterface.fast_scalar_indexing(W) @inbounds for i in 1:size(J, 1) W[i, i] = muladd(λ, invdtgamma, J[i, i]) end else - @.. broadcast=false @view(W[idxs])=muladd(λ, invdtgamma, @view(J[idxs])) + @.. broadcast = false @view(W[idxs]) = muladd(λ, invdtgamma, @view(J[idxs])) end else - @.. broadcast=false W=muladd(-mass_matrix, invdtgamma, J) + @.. broadcast = false W = muladd(-mass_matrix, invdtgamma, J) end end return nothing @@ -570,8 +578,10 @@ end is_always_new(alg) = isdefined(alg, :always_new) ? alg.always_new : false -function calc_W!(W, integrator, nlsolver::Union{Nothing, AbstractNLSolver}, cache, dtgamma, - repeat_step, newJW = nothing) +function calc_W!( + W, integrator, nlsolver::Union{Nothing, AbstractNLSolver}, cache, dtgamma, + repeat_step, newJW = nothing + ) (; t, dt, uprev, u, f, p) = integrator lcache = nlsolver === nothing ? cache : nlsolver.cache next_step = is_always_new(nlsolver) @@ -593,8 +603,10 @@ function calc_W!(W, integrator, nlsolver::Union{Nothing, AbstractNLSolver}, cach if SciMLBase.has_Wfact_t(f) f.Wfact_t(W, u, p, dtgamma, t) isnewton(nlsolver) && set_W_γdt!(nlsolver, dtgamma) - is_compos && (integrator.eigen_est = constvalue(opnorm(LowerTriangular(W), Inf)) + - inv(dtgamma)) # TODO: better estimate + is_compos && ( + integrator.eigen_est = constvalue(opnorm(LowerTriangular(W), Inf)) + + inv(dtgamma) + ) # TODO: better estimate # It's equivalent with evaluating a new Jacobian, but not a new W, # because we won't call `lu!`, and the iteration matrix is fresh. return (true, false) @@ -627,7 +639,7 @@ function calc_W!(W, integrator, nlsolver::Union{Nothing, AbstractNLSolver}, cach if W.J !== nothing && !(W.J isa AbstractSciMLOperator) islin, isode = islinearfunction(integrator) islin ? (J = isode ? f.f : f.f1.f) : - (new_jac && (calc_J!(W.J, integrator, lcache, next_step))) + (new_jac && (calc_J!(W.J, integrator, lcache, next_step))) new_W && !isdae && jacobian2W!(W._concrete_form, mass_matrix, dtgamma, J) end @@ -636,7 +648,7 @@ function calc_W!(W, integrator, nlsolver::Union{Nothing, AbstractNLSolver}, cach else # concrete W using jacobian from `calc_J!` islin, isode = islinearfunction(integrator) islin ? (J = isode ? f.f : f.f1.f) : - (new_jac && (calc_J!(J, integrator, lcache, next_step))) + (new_jac && (calc_J!(J, integrator, lcache, next_step))) new_W && !isdae && jacobian2W!(W, mass_matrix, dtgamma, J) end if isnewton(nlsolver) @@ -702,8 +714,10 @@ end end end end - is_compos && (integrator.eigen_est = isarray ? constvalue(opnorm(J, Inf)) : - integrator.opts.internalnorm(J, t)) + is_compos && ( + integrator.eigen_est = isarray ? constvalue(opnorm(J, Inf)) : + integrator.opts.internalnorm(J, t) + ) return W end @@ -713,7 +727,8 @@ function calc_rosenbrock_differentiation!(integrator, cache, dtd1, dtgamma, repe new_jac = new_W = false if !repeat_step new_jac, new_W = calc_W!( - cache.W, integrator, nlsolver, cache, dtgamma, repeat_step) + cache.W, integrator, nlsolver, cache, dtgamma, repeat_step + ) end # If the Jacobian is not updated, we won't have to update ∂/∂t either. calc_tderivative!(integrator, cache, dtd1, repeat_step || !new_jac) @@ -722,22 +737,28 @@ end # update W matrix (only used in Newton method) function update_W!(integrator, cache, dtgamma, repeat_step, newJW = nothing) - update_W!(cache.nlsolver, integrator, cache, dtgamma, repeat_step, newJW) + return update_W!(cache.nlsolver, integrator, cache, dtgamma, repeat_step, newJW) end -function update_W!(nlsolver::AbstractNLSolver, +function update_W!( + nlsolver::AbstractNLSolver, integrator::SciMLBase.DEIntegrator{<:Any, true}, cache, dtgamma, - repeat_step::Bool, newJW = nothing) + repeat_step::Bool, newJW = nothing + ) if isnewton(nlsolver) - calc_W!(get_W(nlsolver), integrator, nlsolver, cache, dtgamma, repeat_step, - newJW) + calc_W!( + get_W(nlsolver), integrator, nlsolver, cache, dtgamma, repeat_step, + newJW + ) end - nothing + return nothing end -function update_W!(nlsolver::AbstractNLSolver, +function update_W!( + nlsolver::AbstractNLSolver, integrator::SciMLBase.DEIntegrator{<:Any, false}, cache, dtgamma, - repeat_step::Bool, newJW = nothing) + repeat_step::Bool, newJW = nothing + ) if isnewton(nlsolver) isdae = integrator.alg isa DAEAlgorithm new_jac, new_W = true, true @@ -758,11 +779,13 @@ function update_W!(nlsolver::AbstractNLSolver, set_W_γdt!(nlsolver, dtgamma) end end - nothing + return nothing end -function build_J_W(alg, u, uprev, p, t, dt, f::F, jac_config, ::Type{uEltypeNoUnits}, - ::Val{IIP}) where {IIP, uEltypeNoUnits, F} +function build_J_W( + alg, u, uprev, p, t, dt, f::F, jac_config, ::Type{uEltypeNoUnits}, + ::Val{IIP} + ) where {IIP, uEltypeNoUnits, F} # TODO - make J, W AbstractSciMLOperators (lazily defined with scimlops functionality) # TODO - if jvp given, make it SciMLOperators.FunctionOperator # TODO - make mass matrix a SciMLOperator so it can be updated with time. Default to IdentityOperator @@ -781,14 +804,16 @@ function build_J_W(alg, u, uprev, p, t, dt, f::F, jac_config, ::Type{uEltypeNoUn J = isode ? f.f : f.f1.f # unwrap the Jacobian accordingly W = WOperator{IIP}(f.mass_matrix, dt, J, u) elseif IIP && f.jac_prototype !== nothing && concrete_jac(alg) === nothing && - (alg.linsolve === nothing || LinearSolve.needs_concrete_A(alg.linsolve)) + (alg.linsolve === nothing || LinearSolve.needs_concrete_A(alg.linsolve)) # If factorization, then just use the jac_prototype J = similar(f.jac_prototype) W = similar(J) - elseif (IIP && (concrete_jac(alg) === nothing || !concrete_jac(alg)) && - alg.linsolve !== nothing && - !LinearSolve.needs_concrete_A(alg.linsolve)) + elseif ( + IIP && (concrete_jac(alg) === nothing || !concrete_jac(alg)) && + alg.linsolve !== nothing && + !LinearSolve.needs_concrete_A(alg.linsolve) + ) # If the user has chosen GMRES but no sparse Jacobian, assume that the dense # Jacobian is a bad idea and create a fully matrix-free solver. This can # be overridden with concrete_jac. @@ -797,7 +822,7 @@ function build_J_W(alg, u, uprev, p, t, dt, f::F, jac_config, ::Type{uEltypeNoUn J = jacvec W = WOperator{IIP}(f.mass_matrix, promote(t, dt)[2], J, u, jacvec) elseif alg.linsolve !== nothing && !LinearSolve.needs_concrete_A(alg.linsolve) || - concrete_jac(alg) !== nothing && concrete_jac(alg) + concrete_jac(alg) !== nothing && concrete_jac(alg) # The linear solver does not need a concrete Jacobian, but the user has # asked for one. This will happen when the Jacobian is used in the preconditioner # Thus setup JacVec and a concrete J, using sparsity when possible @@ -806,9 +831,10 @@ function build_J_W(alg, u, uprev, p, t, dt, f::F, jac_config, ::Type{uEltypeNoUn if alg_autodiff(alg) isa AutoSparse if isnothing(f.sparsity) !isnothing(jac_config) ? - convert.( - eltype(u), sparsity_pattern(jac_config[1])) : - spzeros(eltype(u), length(u), length(u)) + convert.( + eltype(u), sparsity_pattern(jac_config[1]) + ) : + spzeros(eltype(u), length(u), length(u)) elseif eltype(f.sparsity) == Bool convert.(eltype(u), f.sparsity) else @@ -838,7 +864,7 @@ function build_J_W(alg, u, uprev, p, t, dt, f::F, jac_config, ::Type{uEltypeNoUn if alg_autodiff(alg) isa AutoSparse if isnothing(f.sparsity) !isnothing(jac_config) ? convert.(eltype(u), sparsity_pattern(jac_config[1])) : - spzeros(eltype(u), length(u), length(u)) + spzeros(eltype(u), length(u), length(u)) elseif eltype(f.sparsity) == Bool convert.(eltype(u), f.sparsity) else @@ -869,42 +895,51 @@ build_uf(alg, nf, t, p, ::Val{false}) = UDerivativeWrapper(nf, t, p) function LinearSolve.init_cacheval( alg::LinearSolve.DefaultLinearSolver, A::WOperator, b, u, Pl, Pr, - maxiters::Int, abstol, reltol, verbose::Union{LinearVerbosity,Bool}, - assumptions::OperatorAssumptions) - LinearSolve.init_cacheval(alg, A.J, b, u, Pl, Pr, - maxiters::Int, abstol, reltol, verbose::Union{LinearVerbosity,Bool}, - assumptions::OperatorAssumptions) -end - -for alg in [LinearSolve.AppleAccelerateLUFactorization, - LinearSolve.BunchKaufmanFactorization, - LinearSolve.CHOLMODFactorization, - LinearSolve.CholeskyFactorization, - LinearSolve.CudaOffloadFactorization, - LinearSolve.DiagonalFactorization, - LinearSolve.FastLUFactorization, - LinearSolve.FastQRFactorization, - LinearSolve.GenericFactorization, - LinearSolve.GenericLUFactorization, - LinearSolve.KLUFactorization, - LinearSolve.LDLtFactorization, - LinearSolve.LUFactorization, - LinearSolve.MKLLUFactorization, - LinearSolve.MetalLUFactorization, - LinearSolve.NormalBunchKaufmanFactorization, - LinearSolve.NormalCholeskyFactorization, - LinearSolve.QRFactorization, - LinearSolve.RFLUFactorization, - LinearSolve.SVDFactorization, - LinearSolve.SimpleLUFactorization, - LinearSolve.SparspakFactorization, - LinearSolve.UMFPACKFactorization] - @eval function LinearSolve.init_cacheval(alg::$alg, A::WOperator, b, u, Pl, Pr, - maxiters::Int, abstol, reltol, verbose::Union{LinearVerbosity,Bool}, - assumptions::OperatorAssumptions) - LinearSolve.init_cacheval(alg, A.J, b, u, Pl, Pr, - maxiters::Int, abstol, reltol, verbose::Union{LinearVerbosity,Bool}, - assumptions::OperatorAssumptions) + maxiters::Int, abstol, reltol, verbose::Union{LinearVerbosity, Bool}, + assumptions::OperatorAssumptions + ) + return LinearSolve.init_cacheval( + alg, A.J, b, u, Pl, Pr, + maxiters::Int, abstol, reltol, verbose::Union{LinearVerbosity, Bool}, + assumptions::OperatorAssumptions + ) +end + +for alg in [ + LinearSolve.AppleAccelerateLUFactorization, + LinearSolve.BunchKaufmanFactorization, + LinearSolve.CHOLMODFactorization, + LinearSolve.CholeskyFactorization, + LinearSolve.CudaOffloadFactorization, + LinearSolve.DiagonalFactorization, + LinearSolve.FastLUFactorization, + LinearSolve.FastQRFactorization, + LinearSolve.GenericFactorization, + LinearSolve.GenericLUFactorization, + LinearSolve.KLUFactorization, + LinearSolve.LDLtFactorization, + LinearSolve.LUFactorization, + LinearSolve.MKLLUFactorization, + LinearSolve.MetalLUFactorization, + LinearSolve.NormalBunchKaufmanFactorization, + LinearSolve.NormalCholeskyFactorization, + LinearSolve.QRFactorization, + LinearSolve.RFLUFactorization, + LinearSolve.SVDFactorization, + LinearSolve.SimpleLUFactorization, + LinearSolve.SparspakFactorization, + LinearSolve.UMFPACKFactorization, + ] + @eval function LinearSolve.init_cacheval( + alg::$alg, A::WOperator, b, u, Pl, Pr, + maxiters::Int, abstol, reltol, verbose::Union{LinearVerbosity, Bool}, + assumptions::OperatorAssumptions + ) + return LinearSolve.init_cacheval( + alg, A.J, b, u, Pl, Pr, + maxiters::Int, abstol, reltol, verbose::Union{LinearVerbosity, Bool}, + assumptions::OperatorAssumptions + ) end end @@ -919,20 +954,25 @@ function resize_J_W!(cache, integrator, i) if !islin if cache.J isa AbstractSciMLOperator resize_JVPCache!( - cache.J, f, cache.du1, integrator.u, alg_autodiff(integrator.alg)) + cache.J, f, cache.du1, integrator.u, alg_autodiff(integrator.alg) + ) elseif f.jac_prototype !== nothing J = similar(f.jac_prototype, i, i) J = MatrixOperator(J; update_func! = f.jac) end if cache.W.jacvec isa AbstractSciMLOperator - resize_JVPCache!(cache.W.jacvec, f, cache.du1, integrator.u, - alg_autodiff(integrator.alg)) + resize_JVPCache!( + cache.W.jacvec, f, cache.du1, integrator.u, + alg_autodiff(integrator.alg) + ) end - cache.W = WOperator{SciMLBase.isinplace(integrator.sol.prob)}(f.mass_matrix, + cache.W = WOperator{SciMLBase.isinplace(integrator.sol.prob)}( + f.mass_matrix, integrator.dt, cache.J, integrator.u, - cache.W.jacvec) + cache.W.jacvec + ) cache.J = cache.W.J end else @@ -942,7 +982,7 @@ function resize_J_W!(cache, integrator, i) cache.W = similar(cache.W, i, i) end - nothing + return nothing end getsize(::Val{N}) where {N} = N diff --git a/lib/OrdinaryDiffEqDifferentiation/src/derivative_wrappers.jl b/lib/OrdinaryDiffEqDifferentiation/src/derivative_wrappers.jl index 8cea9b7870..5a275ee895 100644 --- a/lib/OrdinaryDiffEqDifferentiation/src/derivative_wrappers.jl +++ b/lib/OrdinaryDiffEqDifferentiation/src/derivative_wrappers.jl @@ -1,35 +1,35 @@ const FIRST_AUTODIFF_TGRAD_MESSAGE = """ - First call to automatic differentiation for time gradient - failed. This means that the user `f` function is not compatible - with automatic differentiation. Methods to fix this include: - - 1. Turn off automatic differentiation (e.g. Rosenbrock23() becomes - Rosenbrock23(autodiff=AutoFiniteDiff())). More details can be found at - https://docs.sciml.ai/DiffEqDocs/stable/features/performance_overloads/ - 2. Improving the compatibility of `f` with ForwardDiff.jl automatic - differentiation (using tools like PreallocationTools.jl). More details - can be found at https://docs.sciml.ai/DiffEqDocs/stable/basics/faq/#Autodifferentiation-and-Dual-Numbers - 3. Defining analytical Jacobians and time gradients. More details can be - found at https://docs.sciml.ai/DiffEqDocs/stable/types/ode_types/#SciMLBase.ODEFunction - - Note 1: this failure occurred inside of the time gradient function. These - time gradients are only required by Rosenbrock methods (`Rosenbrock23`, - `Rodas4`, etc.) and are done by automatic differentiation w.r.t. the - argument `t`. If your function is compatible with automatic differentiation - w.r.t. `u`, i.e. for Jacobian generation, another way to work around this - issue is to switch to a non-Rosenbrock method. - - Note 2: turning off automatic differentiation tends to have a very minimal - performance impact (for this use case, because it's forward mode for a - square Jacobian. This is different from optimization gradient scenarios). - However, one should be careful as some methods are more sensitive to - accurate gradients than others. Specifically, Rodas methods like `Rodas4` - and `Rodas5P` require accurate Jacobians in order to have good convergence, - while many other methods like BDF (`QNDF`, `FBDF`), SDIRK (`KenCarp4`), - and Rosenbrock-W (`Rosenbrock23`) do not. Thus if using an algorithm which - is sensitive to autodiff and solving at a low tolerance, please change the - algorithm as well. - """ +First call to automatic differentiation for time gradient +failed. This means that the user `f` function is not compatible +with automatic differentiation. Methods to fix this include: + +1. Turn off automatic differentiation (e.g. Rosenbrock23() becomes + Rosenbrock23(autodiff=AutoFiniteDiff())). More details can be found at + https://docs.sciml.ai/DiffEqDocs/stable/features/performance_overloads/ +2. Improving the compatibility of `f` with ForwardDiff.jl automatic + differentiation (using tools like PreallocationTools.jl). More details + can be found at https://docs.sciml.ai/DiffEqDocs/stable/basics/faq/#Autodifferentiation-and-Dual-Numbers +3. Defining analytical Jacobians and time gradients. More details can be + found at https://docs.sciml.ai/DiffEqDocs/stable/types/ode_types/#SciMLBase.ODEFunction + +Note 1: this failure occurred inside of the time gradient function. These +time gradients are only required by Rosenbrock methods (`Rosenbrock23`, +`Rodas4`, etc.) and are done by automatic differentiation w.r.t. the +argument `t`. If your function is compatible with automatic differentiation +w.r.t. `u`, i.e. for Jacobian generation, another way to work around this +issue is to switch to a non-Rosenbrock method. + +Note 2: turning off automatic differentiation tends to have a very minimal +performance impact (for this use case, because it's forward mode for a +square Jacobian. This is different from optimization gradient scenarios). +However, one should be careful as some methods are more sensitive to +accurate gradients than others. Specifically, Rodas methods like `Rodas4` +and `Rodas5P` require accurate Jacobians in order to have good convergence, +while many other methods like BDF (`QNDF`, `FBDF`), SDIRK (`KenCarp4`), +and Rosenbrock-W (`Rosenbrock23`) do not. Thus if using an algorithm which +is sensitive to autodiff and solving at a low tolerance, please change the +algorithm as well. +""" struct FirstAutodiffTgradError <: Exception e::Any @@ -41,30 +41,30 @@ function Base.showerror(io::IO, e::FirstAutodiffTgradError) end const FIRST_AUTODIFF_JAC_MESSAGE = """ - First call to automatic differentiation for the Jacobian - failed. This means that the user `f` function is not compatible - with automatic differentiation. Methods to fix this include: - - 1. Turn off automatic differentiation (e.g. Rosenbrock23() becomes - Rosenbrock23(autodiff = AutoFiniteDiff())). More details can befound at - https://docs.sciml.ai/DiffEqDocs/stable/features/performance_overloads/ - 2. Improving the compatibility of `f` with ForwardDiff.jl automatic - differentiation (using tools like PreallocationTools.jl). More details - can be found at https://docs.sciml.ai/DiffEqDocs/stable/basics/faq/#Autodifferentiation-and-Dual-Numbers - 3. Defining analytical Jacobians. More details can be - found at https://docs.sciml.ai/DiffEqDocs/stable/types/ode_types/#SciMLBase.ODEFunction - - Note: turning off automatic differentiation tends to have a very minimal - performance impact (for this use case, because it's forward mode for a - square Jacobian. This is different from optimization gradient scenarios). - However, one should be careful as some methods are more sensitive to - accurate gradients than others. Specifically, Rodas methods like `Rodas4` - and `Rodas5P` require accurate Jacobians in order to have good convergence, - while many other methods like BDF (`QNDF`, `FBDF`), SDIRK (`KenCarp4`), - and Rosenbrock-W (`Rosenbrock23`) do not. Thus if using an algorithm which - is sensitive to autodiff and solving at a low tolerance, please change the - algorithm as well. - """ +First call to automatic differentiation for the Jacobian +failed. This means that the user `f` function is not compatible +with automatic differentiation. Methods to fix this include: + +1. Turn off automatic differentiation (e.g. Rosenbrock23() becomes + Rosenbrock23(autodiff = AutoFiniteDiff())). More details can befound at + https://docs.sciml.ai/DiffEqDocs/stable/features/performance_overloads/ +2. Improving the compatibility of `f` with ForwardDiff.jl automatic + differentiation (using tools like PreallocationTools.jl). More details + can be found at https://docs.sciml.ai/DiffEqDocs/stable/basics/faq/#Autodifferentiation-and-Dual-Numbers +3. Defining analytical Jacobians. More details can be + found at https://docs.sciml.ai/DiffEqDocs/stable/types/ode_types/#SciMLBase.ODEFunction + +Note: turning off automatic differentiation tends to have a very minimal +performance impact (for this use case, because it's forward mode for a +square Jacobian. This is different from optimization gradient scenarios). +However, one should be careful as some methods are more sensitive to +accurate gradients than others. Specifically, Rodas methods like `Rodas4` +and `Rodas5P` require accurate Jacobians in order to have good convergence, +while many other methods like BDF (`QNDF`, `FBDF`), SDIRK (`KenCarp4`), +and Rosenbrock-W (`Rosenbrock23`) do not. Thus if using an algorithm which +is sensitive to autodiff and solving at a low tolerance, please change the +algorithm as well. +""" struct FirstAutodiffJacError <: Exception e::Any @@ -75,7 +75,7 @@ function Base.showerror(io::IO, e::FirstAutodiffJacError) Base.showerror(io, e.e) end -function jacobian(f::F, x::AbstractArray{<:Number}, integrator) where F +function jacobian(f::F, x::AbstractArray{<:Number}, integrator) where {F} alg = unwrap_alg(integrator, true) # Update stats.nf @@ -86,11 +86,13 @@ function jacobian(f::F, x::AbstractArray{<:Number}, integrator) where F sparsity, colorvec = sparsity_colorvec(integrator.f, x) maxcolor = maximum(colorvec) chunk_size = (get_chunksize(alg) == Val(0) || get_chunksize(alg) == Val(nothing)) ? - nothing : get_chunksize(alg) - num_of_chunks = div(maxcolor, + nothing : get_chunksize(alg) + num_of_chunks = div( + maxcolor, isnothing(chunk_size) ? - getsize(ForwardDiff.pickchunksize(maxcolor)) : _unwrap_val(chunk_size), - RoundUp) + getsize(ForwardDiff.pickchunksize(maxcolor)) : _unwrap_val(chunk_size), + RoundUp + ) integrator.stats.nf += num_of_chunks @@ -99,7 +101,7 @@ function jacobian(f::F, x::AbstractArray{<:Number}, integrator) where F if dense.fdtype == Val(:forward) integrator.stats.nf += maximum(colorvec) + 1 elseif dense.fdtype == Val(:central) - integrator.stats.nf += 2*maximum(colorvec) + integrator.stats.nf += 2 * maximum(colorvec) elseif dense.fdtype == Val(:complex) integrator.stats.nf += maximum(colorvec) end @@ -136,7 +138,7 @@ function jacobian(f::F, x::AbstractArray{<:Number}, integrator) where F end # fallback for scalar x, is needed for calc_J to work -function jacobian(f::F, x, integrator) where F +function jacobian(f::F, x, integrator) where {F} alg = unwrap_alg(integrator, true) dense = ADTypes.dense_ad(alg_autodiff(alg)) @@ -183,9 +185,11 @@ function jacobian(f::F, x, integrator) where F return jac end -function jacobian!(J::AbstractMatrix{<:Number}, f::F, x::AbstractArray{<:Number}, +function jacobian!( + J::AbstractMatrix{<:Number}, f::F, x::AbstractArray{<:Number}, fx::AbstractArray{<:Number}, integrator::SciMLBase.DEIntegrator, - jac_config) where F + jac_config + ) where {F} # Handle empty state vector - nothing to compute if isempty(x) return nothing @@ -201,12 +205,18 @@ function jacobian!(J::AbstractMatrix{<:Number}, f::F, x::AbstractArray{<:Number} else sparsity, colorvec = sparsity_colorvec(integrator.f, x) maxcolor = maximum(colorvec) - chunk_size = (get_chunksize(alg) == Val(0) || - get_chunksize(alg) == Val(nothing)) ? nothing : get_chunksize(alg) + chunk_size = ( + get_chunksize(alg) == Val(0) || + get_chunksize(alg) == Val(nothing) + ) ? nothing : get_chunksize(alg) num_of_chunks = chunk_size === nothing ? - Int(ceil(maxcolor / - getsize(ForwardDiff.pickchunksize(maxcolor)))) : - Int(ceil(maxcolor / _unwrap_val(chunk_size))) + Int( + ceil( + maxcolor / + getsize(ForwardDiff.pickchunksize(maxcolor)) + ) + ) : + Int(ceil(maxcolor / _unwrap_val(chunk_size))) integrator.stats.nf += num_of_chunks end @@ -240,18 +250,28 @@ function jacobian!(J::AbstractMatrix{<:Number}, f::F, x::AbstractArray{<:Number} DI.jacobian!(f, fx, J, config, gpu_safe_autodiff(alg_autodiff(alg), x), x) end - nothing + return nothing end -function build_jac_config(alg, f::F1, uf::F2, du1, uprev, - u, tmp, du2) where {F1, F2} +function build_jac_config( + alg, f::F1, uf::F2, du1, uprev, + u, tmp, du2 + ) where {F1, F2} haslinsolve = hasfield(typeof(alg), :linsolve) if !SciMLBase.has_jac(f) && - (!SciMLBase.has_Wfact_t(f)) && - ((concrete_jac(alg) === nothing && (!haslinsolve || (haslinsolve && - (alg.linsolve === nothing || LinearSolve.needs_concrete_A(alg.linsolve))))) || - (concrete_jac(alg) !== nothing && concrete_jac(alg))) + (!SciMLBase.has_Wfact_t(f)) && + ( + ( + concrete_jac(alg) === nothing && ( + !haslinsolve || ( + haslinsolve && + (alg.linsolve === nothing || LinearSolve.needs_concrete_A(alg.linsolve)) + ) + ) + ) || + (concrete_jac(alg) !== nothing && concrete_jac(alg)) + ) jac_prototype = f.jac_prototype if is_sparse_csc(jac_prototype) @@ -280,9 +300,11 @@ function build_jac_config(alg, f::F1, uf::F2, du1, uprev, end jac_config_forward = DI.prepare_jacobian( - uf, du1, autodiff_alg_forward, u, strict = Val(false)) + uf, du1, autodiff_alg_forward, u, strict = Val(false) + ) jac_config_reverse = DI.prepare_jacobian( - uf, du1, autodiff_alg_reverse, u, strict = Val(false)) + uf, du1, autodiff_alg_reverse, u, strict = Val(false) + ) jac_config = (jac_config_forward, jac_config_reverse) else @@ -294,17 +316,20 @@ function build_jac_config(alg, f::F1, uf::F2, du1, uprev, jac_config = (nothing, nothing) end - jac_config + return jac_config end -function get_chunksize(jac_config::ForwardDiff.JacobianConfig{ - T, - V, - N, - D -}) where {T, V, N, D -} - Val(N) +function get_chunksize( + jac_config::ForwardDiff.JacobianConfig{ + T, + V, + N, + D, + } + ) where { + T, V, N, D, + } + return Val(N) end # don't degrade compile time information to runtime information function resize_jac_config!(cache, integrator) @@ -322,12 +347,18 @@ function resize_jac_config!(cache, integrator) ad_left = autodiff_alg end - cache.jac_config = ([DI.prepare!_jacobian( - uf, cache.du1, config, ad, integrator.u) - for (ad, config) in zip( - (ad_right, ad_left), cache.jac_config)]...,) + cache.jac_config = ( + [ + DI.prepare!_jacobian( + uf, cache.du1, config, ad, integrator.u + ) + for (ad, config) in zip( + (ad_right, ad_left), cache.jac_config + ) + ]..., + ) end - cache.jac_config + return cache.jac_config end function resize_grad_config!(cache, integrator) @@ -343,12 +374,18 @@ function resize_grad_config!(cache, integrator) ad_left = autodiff_alg end - cache.grad_config = ([DI.prepare!_derivative( - cache.tf, cache.du1, config, ad, integrator.t) - for (ad, config) in zip( - (ad_right, ad_left), cache.grad_config)]...,) + cache.grad_config = ( + [ + DI.prepare!_derivative( + cache.tf, cache.du1, config, ad, integrator.t + ) + for (ad, config) in zip( + (ad_right, ad_left), cache.grad_config + ) + ]..., + ) end - cache.grad_config + return cache.grad_config end """ @@ -398,7 +435,7 @@ function build_grad_config(alg, f::F1, tf::F2, du1, t) where {F1, F2} end end -function sparsity_colorvec(f::F, x) where F +function sparsity_colorvec(f::F, x) where {F} sparsity = f.sparsity if is_sparse_csc(sparsity) @@ -414,6 +451,6 @@ function sparsity_colorvec(f::F, x) where F col_alg = GreedyColoringAlgorithm() col_prob = ColoringProblem() colorvec = SciMLBase.has_colorvec(f) ? f.colorvec : - (isnothing(sparsity) ? (1:length(x)) : column_colors(coloring(sparsity, col_prob, col_alg))) - sparsity, colorvec + (isnothing(sparsity) ? (1:length(x)) : column_colors(coloring(sparsity, col_prob, col_alg))) + return sparsity, colorvec end diff --git a/lib/OrdinaryDiffEqDifferentiation/src/linsolve_utils.jl b/lib/OrdinaryDiffEqDifferentiation/src/linsolve_utils.jl index 4d8f5ecdb9..854cf572d6 100644 --- a/lib/OrdinaryDiffEqDifferentiation/src/linsolve_utils.jl +++ b/lib/OrdinaryDiffEqDifferentiation/src/linsolve_utils.jl @@ -2,24 +2,28 @@ issuccess_W(W::LinearAlgebra.Factorization) = LinearAlgebra.issuccess(W) issuccess_W(W::Number) = !iszero(W) issuccess_W(::Any) = true -function dolinsolve(integrator, linsolve; A = nothing, linu = nothing, b = nothing, +function dolinsolve( + integrator, linsolve; A = nothing, linu = nothing, b = nothing, du = nothing, u = nothing, p = nothing, t = nothing, weight = nothing, solverdata = nothing, - reltol = integrator === nothing ? nothing : integrator.opts.reltol) + reltol = integrator === nothing ? nothing : integrator.opts.reltol + ) A !== nothing && (linsolve.A = A) b !== nothing && (linsolve.b = b) linu !== nothing && (linsolve.u = linu) Plprev = linsolve.Pl isa LinearSolve.ComposePreconditioner ? linsolve.Pl.outer : - linsolve.Pl + linsolve.Pl Prprev = linsolve.Pr isa LinearSolve.ComposePreconditioner ? linsolve.Pr.outer : - linsolve.Pr + linsolve.Pr _alg = unwrap_alg(integrator, true) _Pl, - _Pr = _alg.precs(linsolve.A, du, u, p, t, A !== nothing, Plprev, Prprev, - solverdata) + _Pr = _alg.precs( + linsolve.A, du, u, p, t, A !== nothing, Plprev, Prprev, + solverdata + ) if (_Pl !== nothing || _Pr !== nothing) __Pl = _Pl === nothing ? SciMLOperators.IdentityOperator(length(integrator.u)) : _Pl __Pr = _Pr === nothing ? SciMLOperators.IdentityOperator(length(integrator.u)) : _Pr @@ -30,12 +34,12 @@ function dolinsolve(integrator, linsolve; A = nothing, linu = nothing, b = nothi linres = solve!(linsolve; reltol) ad = alg_autodiff(_alg) isa ADTypes.AutoSparse ? ADTypes.dense_ad(alg_autodiff(_alg)) : - alg_autodiff(_alg) + alg_autodiff(_alg) # TODO: this ignores the add of the `f` count for add_steps! if integrator isa SciMLBase.DEIntegrator && _alg.linsolve !== nothing && - !LinearSolve.needs_concrete_A(_alg.linsolve) && - linsolve.A isa WOperator && linsolve.A.J isa AbstractSciMLOperator + !LinearSolve.needs_concrete_A(_alg.linsolve) && + linsolve.A isa WOperator && linsolve.A.J isa AbstractSciMLOperator if ad isa ADTypes.AutoFiniteDiff || ad isa ADTypes.AutoFiniteDifferences OrdinaryDiffEqCore.increment_nf!(integrator.stats, 2 * linres.iters) else @@ -49,13 +53,13 @@ end function wrapprecs(_Pl::Nothing, _Pr::Nothing, weight, u) Pl = LinearSolve.InvPreconditioner(Diagonal(_vec(weight))) Pr = Diagonal(_vec(weight)) - Pl, Pr + return Pl, Pr end function wrapprecs(_Pl, _Pr, weight, u) Pl = _Pl === nothing ? SciMLOperators.IdentityOperator(length(u)) : _Pl Pr = _Pr === nothing ? SciMLOperators.IdentityOperator(length(u)) : _Pr - Pl, Pr + return Pl, Pr end Base.resize!(p::LinearSolve.LinearCache, i) = p diff --git a/lib/OrdinaryDiffEqDifferentiation/src/operators.jl b/lib/OrdinaryDiffEqDifferentiation/src/operators.jl index 8a27ffd4d2..6ca83976fe 100644 --- a/lib/OrdinaryDiffEqDifferentiation/src/operators.jl +++ b/lib/OrdinaryDiffEqDifferentiation/src/operators.jl @@ -28,7 +28,7 @@ end SciMLBase.isinplace(::JVPCache) = true ArrayInterface.can_setindex(::JVPCache) = false function ArrayInterface.restructure(y::JVPCache, x::JVPCache) - @assert size(y)==size(x) "cannot restructure operators. ensure their sizes match." + @assert size(y) == size(x) "cannot restructure operators. ensure their sizes match." return x end @@ -49,7 +49,8 @@ function (op::JVPCache)(Jv, v, u, p, t) end function LinearAlgebra.mul!( - Jv::AbstractArray, J::JVPCache, v::AbstractArray) + Jv::AbstractArray, J::JVPCache, v::AbstractArray + ) J.jvp_op(Jv, v, J.u, J.p, J.t) return Jv end @@ -61,29 +62,34 @@ function prepare_jvp(f::SciMLBase.AbstractDiffEqFunction, du, u, p, t, autodiff) autodiff = autodiff isa AutoSparse ? ADTypes.dense_ad(autodiff) : autodiff @assert DI.check_inplace(autodiff) "AD backend $(autodiff) doesn't support in-place problems." di_prep = DI.prepare_pushforward( - f, du, autodiff, u, (u,), DI.ConstantOrCache(p), DI.Constant(t)) - return (Jv, + f, du, autodiff, u, (u,), DI.ConstantOrCache(p), DI.Constant(t) + ) + return ( + Jv, v, u, p, - t) -> DI.pushforward!(f, du, (reshape(Jv, size(du)),), di_prep, autodiff, u, - (reshape(v, size(u)),), DI.ConstantOrCache(p), DI.Constant(t)) + t, + ) -> DI.pushforward!( + f, du, (reshape(Jv, size(du)),), di_prep, autodiff, u, + (reshape(v, size(u)),), DI.ConstantOrCache(p), DI.Constant(t) + ) end function SciMLOperators.update_coefficients!(J::JVPCache, u, p, t) J.u = u J.p = p - J.t = t + return J.t = t end function resize_JVPCache!(J::JVPCache, f, du, u, p, t, autodiff) J.jvp_op = prepare_jvp(f, du, u, p, t, autodiff) J.du = du - update_coefficients!(J, u, p, t) + return update_coefficients!(J, u, p, t) end function resize_JVPCache!(J::JVPCache, f, du, u, autodiff) J.jvp_op = prepare_jvp(f, du, u, J.p, J.t, autodiff) J.du = du - update_coefficients!(J, u, J.p, J.t) + return update_coefficients!(J, u, J.p, J.t) end diff --git a/lib/OrdinaryDiffEqDifferentiation/test/jet.jl b/lib/OrdinaryDiffEqDifferentiation/test/jet.jl index b31509a034..472dc5ba88 100644 --- a/lib/OrdinaryDiffEqDifferentiation/test/jet.jl +++ b/lib/OrdinaryDiffEqDifferentiation/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqDifferentiation, target_defined_modules = true, mode = :typo) + OrdinaryDiffEqDifferentiation, target_defined_modules = true, mode = :typo + ) end diff --git a/lib/OrdinaryDiffEqExplicitRK/src/OrdinaryDiffEqExplicitRK.jl b/lib/OrdinaryDiffEqExplicitRK/src/OrdinaryDiffEqExplicitRK.jl index 04b30a8415..8cc835f18e 100644 --- a/lib/OrdinaryDiffEqExplicitRK/src/OrdinaryDiffEqExplicitRK.jl +++ b/lib/OrdinaryDiffEqExplicitRK/src/OrdinaryDiffEqExplicitRK.jl @@ -1,12 +1,12 @@ module OrdinaryDiffEqExplicitRK import OrdinaryDiffEqCore: alg_order, alg_adaptive_order, alg_stability_size, - OrdinaryDiffEqAdaptiveAlgorithm, - @cache, alg_cache, OrdinaryDiffEqConstantCache, - unwrap_alg, - OrdinaryDiffEqMutableCache, initialize!, perform_step!, isfsal, - CompositeAlgorithm, calculate_residuals!, calculate_residuals, - full_cache, get_fsalfirstlast + OrdinaryDiffEqAdaptiveAlgorithm, + @cache, alg_cache, OrdinaryDiffEqConstantCache, + unwrap_alg, + OrdinaryDiffEqMutableCache, initialize!, perform_step!, isfsal, + CompositeAlgorithm, calculate_residuals!, calculate_residuals, + full_cache, get_fsalfirstlast using TruncatedStacktraces: @truncate_stacktrace using RecursiveArrayTools, FastBroadcast, MuladdMacro, DiffEqBase import LinearAlgebra: norm diff --git a/lib/OrdinaryDiffEqExplicitRK/src/algorithms.jl b/lib/OrdinaryDiffEqExplicitRK/src/algorithms.jl index e3b669e516..e5eb61a54a 100644 --- a/lib/OrdinaryDiffEqExplicitRK/src/algorithms.jl +++ b/lib/OrdinaryDiffEqExplicitRK/src/algorithms.jl @@ -4,13 +4,15 @@ constructDormandPrince() Constructs the tableau object for the Dormand-Prince Order 4/5 method. """ function constructDormandPrince(T::Type = Float64) - A = [0 0 0 0 0 0 0 - 1//5 0 0 0 0 0 0 - 3//40 9//40 0 0 0 0 0 - 44//45 -56//15 32//9 0 0 0 0 - 19372//6561 -25360//2187 64448//6561 -212//729 0 0 0 - 9017//3168 -355//33 46732//5247 49//176 -5103//18656 0 0 - 35//384 0 500//1113 125//192 -2187//6784 11//84 0] + A = [ + 0 0 0 0 0 0 0 + 1 // 5 0 0 0 0 0 0 + 3 // 40 9 // 40 0 0 0 0 0 + 44 // 45 -56 // 15 32 // 9 0 0 0 0 + 19372 // 6561 -25360 // 2187 64448 // 6561 -212 // 729 0 0 0 + 9017 // 3168 -355 // 33 46732 // 5247 49 // 176 -5103 // 18656 0 0 + 35 // 384 0 500 // 1113 125 // 192 -2187 // 6784 11 // 84 0 + ] c = [0; 1 // 5; 3 // 10; 4 // 5; 8 // 9; 1; 1] α = [35 // 384; 0; 500 // 1113; 125 // 192; -2187 // 6784; 11 // 84; 0] αEEst = [ @@ -20,14 +22,18 @@ function constructDormandPrince(T::Type = Float64) 393 // 640, -92097 // 339200, 187 // 2100, - 1 // 40 + 1 // 40, ] A = map(T, A) α = map(T, α) αEEst = map(T, αEEst) c = map(T, c) - return (DiffEqBase.ExplicitRKTableau(A, c, α, 5, αEEst = αEEst, adaptiveorder = 4, - fsal = true, stability_size = 3.3066)) + return ( + DiffEqBase.ExplicitRKTableau( + A, c, α, 5, αEEst = αEEst, adaptiveorder = 4, + fsal = true, stability_size = 3.3066 + ) + ) end """ diff --git a/lib/OrdinaryDiffEqExplicitRK/src/explicit_rk_caches.jl b/lib/OrdinaryDiffEqExplicitRK/src/explicit_rk_caches.jl index 9d9f3c7e1a..ce593ac657 100644 --- a/lib/OrdinaryDiffEqExplicitRK/src/explicit_rk_caches.jl +++ b/lib/OrdinaryDiffEqExplicitRK/src/explicit_rk_caches.jl @@ -1,5 +1,5 @@ @cache struct ExplicitRKCache{uType, rateType, uNoUnitsType, TabType} <: - OrdinaryDiffEqMutableCache + OrdinaryDiffEqMutableCache u::uType uprev::uType tmp::uType @@ -13,10 +13,12 @@ end get_fsalfirstlast(cache::ExplicitRKCache, u) = (cache.kk[1], cache.fsallast) -function alg_cache(alg::ExplicitRK, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ExplicitRK, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} kk = Vector{typeof(rate_prototype)}(undef, 0) for i in 1:(alg.tableau.stages) push!(kk, zero(rate_prototype)) @@ -32,7 +34,7 @@ function alg_cache(alg::ExplicitRK, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tab = ExplicitRKConstantCache(alg.tableau, rate_prototype) - ExplicitRKCache(u, uprev, tmp, utilde, atmp, fsalfirst, fsallast, kk, tab) + return ExplicitRKCache(u, uprev, tmp, utilde, atmp, fsalfirst, fsallast, kk, tab) end struct ExplicitRKConstantCache{MType, VType, KType} <: OrdinaryDiffEqConstantCache @@ -49,12 +51,14 @@ function ExplicitRKConstantCache(tableau, rate_prototype) A = copy(A') # Transpose A to column major looping kk = Array{typeof(rate_prototype)}(undef, stages) # Not ks since that's for integrator.opts.dense αEEst = isempty(αEEst) ? αEEst : α .- αEEst - ExplicitRKConstantCache(A, c, α, αEEst, stages, kk) + return ExplicitRKConstantCache(A, c, α, αEEst, stages, kk) end -function alg_cache(alg::ExplicitRK, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ExplicitRK, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - ExplicitRKConstantCache(alg.tableau, rate_prototype) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return ExplicitRKConstantCache(alg.tableau, rate_prototype) end diff --git a/lib/OrdinaryDiffEqExplicitRK/src/explicit_rk_perform_step.jl b/lib/OrdinaryDiffEqExplicitRK/src/explicit_rk_perform_step.jl index 302b31eb91..c341edeb62 100644 --- a/lib/OrdinaryDiffEqExplicitRK/src/explicit_rk_perform_step.jl +++ b/lib/OrdinaryDiffEqExplicitRK/src/explicit_rk_perform_step.jl @@ -7,11 +7,13 @@ function initialize!(integrator, cache::ExplicitRKConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -@muladd function perform_step!(integrator, cache::ExplicitRKConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::ExplicitRKConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator alg = unwrap_alg(integrator, false) (; A, c, α, αEEst, stages) = cache @@ -58,8 +60,10 @@ end for i in 2:stages utilde = utilde + αEEst[i] * kk[i] end - atmp = calculate_residuals(dt * utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + dt * utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -79,19 +83,23 @@ function initialize!(integrator, cache::ExplicitRKCache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end -@generated function accumulate_explicit_stages!(out, A, uprev, kk, dt, ::Val{s}, - ::Val{r} = Val(s)) where {s, r} +@generated function accumulate_explicit_stages!( + out, A, uprev, kk, dt, ::Val{s}, + ::Val{r} = Val(s) + ) where {s, r} if s == 1 - return :(@muladd @.. broadcast=false out=uprev+dt*kk[1]) + return :(@muladd @.. broadcast = false out = uprev + dt * kk[1]) elseif s == 2 # Note that `A` is transposed - return :(@muladd @.. broadcast=false out=uprev+dt*(A[1, $r]*kk[1])) + return :(@muladd @.. broadcast = false out = uprev + dt * (A[1, $r] * kk[1])) else - expr = :(@muladd @.. broadcast=false out=uprev+ - dt*(A[1, $r]*kk[1]+A[2, $r]*kk[2])) + expr = :( + @muladd @.. broadcast = false out = uprev + + dt * (A[1, $r] * kk[1] + A[2, $r] * kk[2]) + ) acc = expr.args[end].args[end].args[end].args[end].args[end].args for i in 3:(s - 1) push!(acc, :(A[$i, $r] * kk[$i])) @@ -102,9 +110,9 @@ end @generated function accumulate_EEst!(out, αEEst, kk, dt, ::Val{s}) where {s} if s == 1 - return :(@muladd @.. broadcast=false out=dt*(αEEst[1]*kk[1])) + return :(@muladd @.. broadcast = false out = dt * (αEEst[1] * kk[1])) else - expr = :(@muladd @.. broadcast=false out=dt*(αEEst[1]*kk[1]+αEEst[2]*kk[2])) + expr = :(@muladd @.. broadcast = false out = dt * (αEEst[1] * kk[1] + αEEst[2] * kk[2])) acc = expr.args[end].args[end].args[end].args[end].args for i in 3:s push!(acc, :(αEEst[$i] * kk[$i])) @@ -114,39 +122,43 @@ end end function accumulate_EEst!(out, αEEst, utilde, kk, dt, stages) - @.. broadcast=false utilde=αEEst[1]*kk[1] + @.. broadcast = false utilde = αEEst[1] * kk[1] for i in 2:stages - @.. broadcast=false utilde=utilde+αEEst[i]*kk[i] + @.. broadcast = false utilde = utilde + αEEst[i] * kk[i] end - @.. broadcast=false out=dt*utilde + return @.. broadcast = false out = dt * utilde end -@muladd function compute_stages!(f::F, A, c, utilde, u, tmp, uprev, kk, p, t, dt, - stages::Integer) where {F} +@muladd function compute_stages!( + f::F, A, c, utilde, u, tmp, uprev, kk, p, t, dt, + stages::Integer + ) where {F} # Middle for i in 2:(stages - 1) - @.. broadcast=false utilde=zero(kk[1][1]) + @.. broadcast = false utilde = zero(kk[1][1]) for j in 1:(i - 1) - @.. broadcast=false utilde=utilde+A[j, i]*kk[j] + @.. broadcast = false utilde = utilde + A[j, i] * kk[j] end - @.. broadcast=false tmp=uprev+dt*utilde + @.. broadcast = false tmp = uprev + dt * utilde f(kk[i], tmp, p, t + c[i] * dt) end #Last - @.. broadcast=false utilde=zero(kk[1][1]) + @.. broadcast = false utilde = zero(kk[1][1]) for j in 1:(stages - 1) - @.. broadcast=false utilde=utilde+A[j, end]*kk[j] + @.. broadcast = false utilde = utilde + A[j, end] * kk[j] end - @.. broadcast=false u=uprev+dt*utilde + @.. broadcast = false u = uprev + dt * utilde f(kk[end], u, p, t + c[end] * dt) #fsallast is tmp even if not fsal return nothing end -@generated function compute_stages!(f::F, A, c, u, tmp, uprev, kk, p, t, dt, - ::Val{s}) where {F, s} - quote - Base.@nexprs $(s - 2) i′->begin +@generated function compute_stages!( + f::F, A, c, u, tmp, uprev, kk, p, t, dt, + ::Val{s} + ) where {F, s} + return quote + Base.@nexprs $(s - 2) i′ -> begin i = i′ + 1 accumulate_explicit_stages!(tmp, A, uprev, kk, dt, Val(i)) f(kk[i], tmp, p, t + c[i] * dt) @@ -156,50 +168,71 @@ end end end -function runtime_split_stages!(f::F, A, c, utilde, u, tmp, uprev, kk, p, t, dt, - stages::Integer) where {F} - Base.@nif 17 (s->(s == stages)) (s->compute_stages!(f, A, c, u, tmp, uprev, kk, p, t, - dt, Val(s))) (s->compute_stages!(f, - A, - c, - utilde, - u, - tmp, - uprev, - kk, - p, - t, - dt, - stages)) +function runtime_split_stages!( + f::F, A, c, utilde, u, tmp, uprev, kk, p, t, dt, + stages::Integer + ) where {F} + return Base.@nif 17 (s -> (s == stages)) ( + s -> compute_stages!( + f, A, c, u, tmp, uprev, kk, p, t, + dt, Val(s) + ) + ) ( + s -> compute_stages!( + f, + A, + c, + utilde, + u, + tmp, + uprev, + kk, + p, + t, + dt, + stages + ) + ) end function accumulate_fsal!(u, α, utilde, uprev, kk, dt, stages) - @.. broadcast=false utilde=α[1]*kk[1] + @.. broadcast = false utilde = α[1] * kk[1] for i in 2:stages - @.. broadcast=false utilde=utilde+α[i]*kk[i] + @.. broadcast = false utilde = utilde + α[i] * kk[i] end - @.. broadcast=false u=uprev+dt*utilde + return @.. broadcast = false u = uprev + dt * utilde end function runtime_split_fsal!(out, A, utilde, uprev, kk, dt, stages) - Base.@nif 17 (s->(s == stages)) (s->accumulate_explicit_stages!(out, A, uprev, kk, dt, - Val(s + 1), Val(1))) (s->accumulate_fsal!(out, - A, - utilde, - uprev, - kk, - dt, - stages)) + return Base.@nif 17 (s -> (s == stages)) ( + s -> accumulate_explicit_stages!( + out, A, uprev, kk, dt, + Val(s + 1), Val(1) + ) + ) ( + s -> accumulate_fsal!( + out, + A, + utilde, + uprev, + kk, + dt, + stages + ) + ) end function runtime_split_EEst!(tmp, αEEst, utilde, kk, dt, stages) - Base.@nif 17 (s->(s == stages)) (s->accumulate_EEst!(tmp, αEEst, kk, dt, Val(s))) (s->accumulate_EEst!( - tmp, - αEEst, - utilde, - kk, - dt, - stages)) + return Base.@nif 17 (s -> (s == stages)) (s -> accumulate_EEst!(tmp, αEEst, kk, dt, Val(s))) ( + s -> accumulate_EEst!( + tmp, + αEEst, + utilde, + kk, + dt, + stages + ) + ) end @muladd function perform_step!(integrator, cache::ExplicitRKCache, repeat_step = false) @@ -219,15 +252,17 @@ end if integrator.alg isa CompositeAlgorithm # Hairer II, page 22 modified to use Inf norm - @.. broadcast=false utilde=abs((kk[end]-kk[end - 1])/(u-tmp)) + @.. broadcast = false utilde = abs((kk[end] - kk[end - 1]) / (u - tmp)) integrator.eigen_est = integrator.opts.internalnorm(norm(utilde, Inf), t) end if integrator.opts.adaptive runtime_split_EEst!(tmp, αEEst, utilde, kk, dt, stages) - calculate_residuals!(atmp, tmp, uprev, u, + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end diff --git a/lib/OrdinaryDiffEqExplicitRK/test/allocation_tests.jl b/lib/OrdinaryDiffEqExplicitRK/test/allocation_tests.jl index c03c6999fb..a0c3421e6f 100644 --- a/lib/OrdinaryDiffEqExplicitRK/test/allocation_tests.jl +++ b/lib/OrdinaryDiffEqExplicitRK/test/allocation_tests.jl @@ -15,23 +15,23 @@ These tests verify that the step! operation does not allocate during stepping. du[2] = -1.5 * u[2] end prob = ODEProblem(simple_system!, [1.0, 1.0], (0.0, 1.0)) - + # Test all exported ExplicitRK solvers for allocation-free behavior explicit_rk_solvers = [ExplicitRK()] - + @testset "ExplicitRK Solver Allocation Analysis" begin for solver in explicit_rk_solvers @testset "$(typeof(solver)) allocation check" begin - integrator = init(prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) + integrator = init(prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) step!(integrator) # Setup step may allocate - + # Use AllocCheck to verify step! is allocation-free allocs = check_allocs(step!, (typeof(integrator),)) - + # These solvers should be allocation-free, but mark as broken for now # to verify with AllocCheck (more accurate than @allocated) @test_broken length(allocs) == 0 - + if length(allocs) > 0 println("AllocCheck found $(length(allocs)) allocation sites in $(typeof(solver)) step!:") for (i, alloc) in enumerate(allocs[1:min(3, end)]) # Show first 3 @@ -43,4 +43,4 @@ These tests verify that the step! operation does not allocate during stepping. end end end -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqExplicitRK/test/jet.jl b/lib/OrdinaryDiffEqExplicitRK/test/jet.jl index 5dbac17184..92b09919c2 100644 --- a/lib/OrdinaryDiffEqExplicitRK/test/jet.jl +++ b/lib/OrdinaryDiffEqExplicitRK/test/jet.jl @@ -7,8 +7,9 @@ using Test @testset "JET Tests" begin # Test package for typos - now passing test_package( - OrdinaryDiffEqExplicitRK, target_defined_modules = true, mode = :typo) - + OrdinaryDiffEqExplicitRK, target_defined_modules = true, mode = :typo + ) + # Test individual solver type stability @testset "Solver Type Stability Tests" begin # Test problem @@ -17,16 +18,16 @@ using Test du[2] = -1.5 * u[2] end prob = ODEProblem(simple_system!, [1.0, 1.0], (0.0, 1.0)) - + # Test all exported ExplicitRK solvers explicit_rk_solvers = [ExplicitRK()] - + for solver in explicit_rk_solvers @testset "$(typeof(solver)) type stability" begin try - @test_opt broken=true init(prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) - integrator = init(prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) - @test_opt broken=true step!(integrator) + @test_opt broken = true init(prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) + integrator = init(prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) + @test_opt broken = true step!(integrator) catch e @test_broken false # Mark as broken if solver fails to initialize println("$(typeof(solver)) failed with: $e") diff --git a/lib/OrdinaryDiffEqExplicitRK/test/runtests.jl b/lib/OrdinaryDiffEqExplicitRK/test/runtests.jl index 5ed6ac4c1c..ccbf61c097 100644 --- a/lib/OrdinaryDiffEqExplicitRK/test/runtests.jl +++ b/lib/OrdinaryDiffEqExplicitRK/test/runtests.jl @@ -5,4 +5,4 @@ if isempty(VERSION.prerelease) @time @safetestset "JET Tests" include("jet.jl") @time @safetestset "Aqua" include("qa.jl") @time @safetestset "Allocation Tests" include("allocation_tests.jl") -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqExponentialRK/src/OrdinaryDiffEqExponentialRK.jl b/lib/OrdinaryDiffEqExponentialRK/src/OrdinaryDiffEqExponentialRK.jl index 754b4278a0..d2eb1f67f2 100644 --- a/lib/OrdinaryDiffEqExponentialRK/src/OrdinaryDiffEqExponentialRK.jl +++ b/lib/OrdinaryDiffEqExponentialRK/src/OrdinaryDiffEqExponentialRK.jl @@ -1,16 +1,16 @@ module OrdinaryDiffEqExponentialRK import OrdinaryDiffEqCore: alg_order, alg_adaptive_order, ismultistep, - OrdinaryDiffEqExponentialAlgorithm, - _unwrap_val, OrdinaryDiffEqMutableCache, - OrdinaryDiffEqConstantCache, - @cache, alg_cache, - initialize!, perform_step!, unwrap_alg, - OrdinaryDiffEqAdaptiveExponentialAlgorithm, CompositeAlgorithm, - ExponentialAlgorithm, fsal_typeof, isdtchangeable, - calculate_residuals, calculate_residuals!, - full_cache, get_fsalfirstlast, - generic_solver_docstring, _bool_to_ADType, _process_AD_choice + OrdinaryDiffEqExponentialAlgorithm, + _unwrap_val, OrdinaryDiffEqMutableCache, + OrdinaryDiffEqConstantCache, + @cache, alg_cache, + initialize!, perform_step!, unwrap_alg, + OrdinaryDiffEqAdaptiveExponentialAlgorithm, CompositeAlgorithm, + ExponentialAlgorithm, fsal_typeof, isdtchangeable, + calculate_residuals, calculate_residuals!, + full_cache, get_fsalfirstlast, + generic_solver_docstring, _bool_to_ADType, _process_AD_choice import OrdinaryDiffEqCore using RecursiveArrayTools using MuladdMacro, FastBroadcast @@ -20,7 +20,7 @@ import DiffEqBase: prepare_alg using ExponentialUtilities import RecursiveArrayTools: recursivecopy! using OrdinaryDiffEqDifferentiation: build_jac_config, UJacobianWrapper, UDerivativeWrapper, - calc_J, calc_J! + calc_J, calc_J! import ADTypes: AutoForwardDiff, AbstractADType using Reexport @@ -32,6 +32,6 @@ include("exponential_rk_caches.jl") include("exponential_rk_perform_step.jl") export LawsonEuler, NorsettEuler, ETD1, ETDRK2, ETDRK3, ETDRK4, HochOst4, Exp4, EPIRK4s3A, - EPIRK4s3B, - EPIRK5s3, EXPRB53s3, EPIRK5P1, EPIRK5P2, ETD2, Exprb32, Exprb43 + EPIRK4s3B, + EPIRK5s3, EXPRB53s3, EPIRK5P1, EPIRK5P2, ETD2, Exprb32, Exprb43 end diff --git a/lib/OrdinaryDiffEqExponentialRK/src/alg_utils.jl b/lib/OrdinaryDiffEqExponentialRK/src/alg_utils.jl index 5819ec3531..1079cb0ca2 100644 --- a/lib/OrdinaryDiffEqExponentialRK/src/alg_utils.jl +++ b/lib/OrdinaryDiffEqExponentialRK/src/alg_utils.jl @@ -1,6 +1,9 @@ -function isdtchangeable(alg::Union{ - LawsonEuler, NorsettEuler, ETDRK2, ETDRK3, ETDRK4, HochOst4, ETD2}) - false +function isdtchangeable( + alg::Union{ + LawsonEuler, NorsettEuler, ETDRK2, ETDRK3, ETDRK4, HochOst4, ETD2, + } + ) + return false end # due to caching alg_order(alg::LawsonEuler) = 1 @@ -26,8 +29,9 @@ alg_adaptive_order(alg::Exprb43) = 4 function DiffEqBase.prepare_alg( alg::ETD2, u0::AbstractArray, - p, prob) - alg + p, prob + ) + return alg end fsal_typeof(alg::ETD2, rate_prototype) = ETD2Fsal{typeof(rate_prototype)} diff --git a/lib/OrdinaryDiffEqExponentialRK/src/algorithms.jl b/lib/OrdinaryDiffEqExponentialRK/src/algorithms.jl index 9a079d8ae2..2c84359c1a 100644 --- a/lib/OrdinaryDiffEqExponentialRK/src/algorithms.jl +++ b/lib/OrdinaryDiffEqExponentialRK/src/algorithms.jl @@ -3,15 +3,16 @@ Hochbruck, Marlis, and Alexander Ostermann. “Exponential Integrators.” Acta Numerica 19 (2010): 209–286. doi:10.1017/S0962492910000048. """ for (Alg, Description, Ref) in [ - (:LawsonEuler, "First order exponential Euler scheme (fixed timestepping)", REF1), - (:NorsettEuler, "First order exponential-RK scheme. Alias: `ETD1`", REF1), - (:ETDRK2, "2nd order exponential-RK scheme.", REF1), - (:ETDRK3, "3rd order exponential-RK scheme.", REF1), - (:ETDRK4, "4th order exponential-RK scheme (fixed timestepping)", REF1), - (:HochOst4, "4th order exponential-RK scheme with stiff order 4.", REF1) -] + (:LawsonEuler, "First order exponential Euler scheme (fixed timestepping)", REF1), + (:NorsettEuler, "First order exponential-RK scheme. Alias: `ETD1`", REF1), + (:ETDRK2, "2nd order exponential-RK scheme.", REF1), + (:ETDRK3, "3rd order exponential-RK scheme.", REF1), + (:ETDRK4, "4th order exponential-RK scheme (fixed timestepping)", REF1), + (:HochOst4, "4th order exponential-RK scheme with stiff order 4.", REF1), + ] @eval begin - @doc generic_solver_docstring($Description, + @doc generic_solver_docstring( + $Description, $(string(Alg)), "Semilinear ODE solver", $Ref, @@ -26,28 +27,36 @@ for (Alg, Description, Ref) in [ krylov = false, m = 30, iop = 0, - """) + """ + ) struct $Alg{CS, AD, FDT, ST, CJ} <: - OrdinaryDiffEqExponentialAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqExponentialAlgorithm{CS, AD, FDT, ST, CJ} krylov::Bool m::Int iop::Int autodiff::AD end end - @eval function $Alg(; krylov = false, m = 30, iop = 0, autodiff = AutoForwardDiff(), + @eval function $Alg(; + krylov = false, m = 30, iop = 0, autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, chunk_size = Val{0}(), - diff_type = Val{:forward}()) + diff_type = Val{:forward}() + ) AD_choice, chunk_size, - diff_type = _process_AD_choice( - autodiff, chunk_size, diff_type) + diff_type = _process_AD_choice( + autodiff, chunk_size, diff_type + ) - $Alg{_unwrap_val(chunk_size), typeof(AD_choice), - diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac)}(krylov, + return $Alg{ + _unwrap_val(chunk_size), typeof(AD_choice), + diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), + }( + krylov, m, iop, - AD_choice) + AD_choice + ) end end @@ -58,10 +67,12 @@ Hochbruck, M., & Ostermann, A. (2010). Exponential integrators. Acta Numerica, 1 """ for (Alg, Description, Ref) in [ - (:Exprb32, "3rd order adaptive Exponential-Rosenbrock scheme.", REF2), - (:Exprb43, "4th order adaptive Exponential-Rosenbrock scheme.", REF2)] + (:Exprb32, "3rd order adaptive Exponential-Rosenbrock scheme.", REF2), + (:Exprb43, "4th order adaptive Exponential-Rosenbrock scheme.", REF2), + ] @eval begin - @doc generic_solver_docstring($Description, + @doc generic_solver_docstring( + $Description, $(string(Alg)), "Semilinear ODE solver", $Ref, @@ -73,9 +84,10 @@ for (Alg, Description, Ref) in [ """ m = 30, iop = 0, - """) + """ + ) struct $Alg{CS, AD, FDT, ST, CJ} <: - OrdinaryDiffEqAdaptiveExponentialAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqAdaptiveExponentialAlgorithm{CS, AD, FDT, ST, CJ} m::Int iop::Int autodiff::AD @@ -84,16 +96,22 @@ for (Alg, Description, Ref) in [ @eval function $Alg(; m = 30, iop = 0, autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, chunk_size = Val{0}(), - diff_type = Val{:forward}()) + diff_type = Val{:forward}() + ) AD_choice, chunk_size, - diff_type = _process_AD_choice( - autodiff, chunk_size, diff_type) + diff_type = _process_AD_choice( + autodiff, chunk_size, diff_type + ) - $Alg{_unwrap_val(chunk_size), typeof(AD_choice), + return $Alg{ + _unwrap_val(chunk_size), typeof(AD_choice), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(m, + _unwrap_val(concrete_jac), + }( + m, iop, - AD_choice) + AD_choice + ) end end @@ -108,20 +126,31 @@ REF5 = """ Tokman, M., Loffeld, J., & Tranquilli, P. (2012). New Adaptive Exponential Propagation Iterative Methods of Runge--Kutta Type. SIAM Journal on Scientific Computing, 34(5), A2650-A2669. (https://doi.org/10.1137/110849961) """ -for (Alg, Description, Ref) in [(:Exp4, "4th order EPIRK scheme.", REF3) - (:EPIRK4s3A, - "4th order EPIRK scheme with stiff order 4.", REF4) - (:EPIRK4s3B, - "4th order EPIRK scheme with stiff order 4.", REF4) - (:EPIRK5s3, - "5th order “horizontal” EPIRK scheme with stiff order 5. Broken.", - REF4) - (:EXPRB53s3, - "5th order EPIRK scheme with stiff order 5.", REF4) - (:EPIRK5P1, "5th order EPIRK scheme", REF5) - (:EPIRK5P2, "5th order EPIRK scheme", REF5)] +for (Alg, Description, Ref) in [ + (:Exp4, "4th order EPIRK scheme.", REF3) + ( + :EPIRK4s3A, + "4th order EPIRK scheme with stiff order 4.", REF4, + ) + ( + :EPIRK4s3B, + "4th order EPIRK scheme with stiff order 4.", REF4, + ) + ( + :EPIRK5s3, + "5th order “horizontal” EPIRK scheme with stiff order 5. Broken.", + REF4, + ) + ( + :EXPRB53s3, + "5th order EPIRK scheme with stiff order 5.", REF4, + ) + (:EPIRK5P1, "5th order EPIRK scheme", REF5) + (:EPIRK5P2, "5th order EPIRK scheme", REF5) + ] @eval begin - @doc generic_solver_docstring($Description, + @doc generic_solver_docstring( + $Description, $(string(Alg)), "Semilinear ODE solver", $Ref, @@ -135,10 +164,11 @@ for (Alg, Description, Ref) in [(:Exp4, "4th order EPIRK scheme.", REF3) adaptive_krylov = true, m = 30, iop = 0, - """) + """ + ) struct $Alg{CS, AD, FDT, ST, CJ} <: - OrdinaryDiffEqExponentialAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqExponentialAlgorithm{CS, AD, FDT, ST, CJ} adaptive_krylov::Bool m::Int iop::Int @@ -148,16 +178,22 @@ for (Alg, Description, Ref) in [(:Exp4, "4th order EPIRK scheme.", REF3) @eval function $Alg(; adaptive_krylov = true, m = 30, iop = 0, autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, - chunk_size = Val{0}(), diff_type = Val{:forward}()) + chunk_size = Val{0}(), diff_type = Val{:forward}() + ) AD_choice, chunk_size, - diff_type = _process_AD_choice( - autodiff, chunk_size, diff_type) + diff_type = _process_AD_choice( + autodiff, chunk_size, diff_type + ) - $Alg{_unwrap_val(chunk_size), typeof(AD_choice), diff_type, - _unwrap_val(standardtag), _unwrap_val(concrete_jac)}(adaptive_krylov, + return $Alg{ + _unwrap_val(chunk_size), typeof(AD_choice), diff_type, + _unwrap_val(standardtag), _unwrap_val(concrete_jac), + }( + adaptive_krylov, m, iop, - AD_choice) + AD_choice + ) end end @@ -166,4 +202,4 @@ ETD2: Exponential Runge-Kutta Method Second order Exponential Time Differencing method (in development). """ struct ETD2 <: - OrdinaryDiffEqExponentialAlgorithm{0, false, Val{:forward}, Val{true}, nothing} end + OrdinaryDiffEqExponentialAlgorithm{0, false, Val{:forward}, Val{true}, nothing} end diff --git a/lib/OrdinaryDiffEqExponentialRK/src/exponential_rk_caches.jl b/lib/OrdinaryDiffEqExponentialRK/src/exponential_rk_caches.jl index bf1891e40a..2d7a01e682 100644 --- a/lib/OrdinaryDiffEqExponentialRK/src/exponential_rk_caches.jl +++ b/lib/OrdinaryDiffEqExponentialRK/src/exponential_rk_caches.jl @@ -62,22 +62,28 @@ function expRK_operators(::HochOst4, dt, A) end # Unified constructor for constant caches -for (Alg, Cache) in [(:LawsonEuler, :LawsonEulerConstantCache), - (:NorsettEuler, :NorsettEulerConstantCache), - (:ETDRK2, :ETDRK2ConstantCache), - (:ETDRK3, :ETDRK3ConstantCache), - (:ETDRK4, :ETDRK4ConstantCache), - (:HochOst4, :HochOst4ConstantCache)] +for (Alg, Cache) in [ + (:LawsonEuler, :LawsonEulerConstantCache), + (:NorsettEuler, :NorsettEulerConstantCache), + (:ETDRK2, :ETDRK2ConstantCache), + (:ETDRK3, :ETDRK3ConstantCache), + (:ETDRK4, :ETDRK4ConstantCache), + (:HochOst4, :HochOst4ConstantCache), + ] @eval struct $Cache{opType, FType} <: ExpRKConstantCache ops::opType # precomputed operators uf::FType # derivative wrapper end - @eval function alg_cache(alg::$Alg, u, rate_prototype, ::Type{uEltypeNoUnits}, + @eval function alg_cache( + alg::$Alg, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, - tTypeNoUnits} + ::Val{false} + ) where { + uEltypeNoUnits, uBottomEltypeNoUnits, + tTypeNoUnits, + } if alg.krylov ops = nothing # no caching else @@ -106,7 +112,8 @@ call in `perform_step!`. """ function alg_cache_expRK( alg::OrdinaryDiffEqExponentialAlgorithm, u, ::Type{uEltypeNoUnits}, - uprev, f, t, dt, p, du1, tmp, dz, plist) where {uEltypeNoUnits} + uprev, f, t, dt, p, du1, tmp, dz, plist + ) where {uEltypeNoUnits} n = length(u) T = eltype(u) # Allocate cache for ForwardDiff @@ -143,7 +150,7 @@ function alg_cache_expRK( end @cache struct LawsonEulerCache{uType, rateType, JCType, FType, JType, expType, KsType} <: - ExpRKCache + ExpRKCache u::uType uprev::uType tmp::uType @@ -158,10 +165,12 @@ end KsCache::KsType end -function alg_cache(alg::LawsonEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::LawsonEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp, dz = (zero(u) for i in 1:2) # uType caches rtmp, G, du1 = (zero(rate_prototype) for i in 1:3) # rateType caches # other caches @@ -196,11 +205,11 @@ function alg_cache(alg::LawsonEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, A = size(f.f1.f) == () ? convert(Number, f.f1.f) : convert(AbstractMatrix, f.f1.f) exphA = expRK_operators(alg, dt, A) end - LawsonEulerCache(u, uprev, tmp, dz, rtmp, G, du1, jac_config, uf, J, exphA, KsCache) + return LawsonEulerCache(u, uprev, tmp, dz, rtmp, G, du1, jac_config, uf, J, exphA, KsCache) end @cache struct NorsettEulerCache{uType, rateType, JCType, FType, JType, expType, KsType} <: - ExpRKCache + ExpRKCache u::uType uprev::uType tmp::uType @@ -215,24 +224,27 @@ end KsCache::KsType end -function alg_cache(alg::NorsettEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::NorsettEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp, dz = (zero(u) for i in 1:2) # uType caches rtmp, G, du1 = (zero(rate_prototype) for i in 1:3) # rateType caches plist = (1,) uf, jac_config, - J, - phihA, - KsCache = alg_cache_expRK( + J, + phihA, + KsCache = alg_cache_expRK( alg, u, uEltypeNoUnits, uprev, f, t, - dt, p, du1, tmp, dz, plist) # other caches - NorsettEulerCache(u, uprev, tmp, dz, rtmp, G, du1, jac_config, uf, J, phihA, KsCache) + dt, p, du1, tmp, dz, plist + ) # other caches + return NorsettEulerCache(u, uprev, tmp, dz, rtmp, G, du1, jac_config, uf, J, phihA, KsCache) end @cache struct ETDRK2Cache{uType, rateType, JCType, FType, JType, opType, KsType} <: - ExpRKCache + ExpRKCache u::uType uprev::uType tmp::uType @@ -247,23 +259,27 @@ end KsCache::KsType end -function alg_cache(alg::ETDRK2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ETDRK2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp, dz = (zero(u) for i in 1:2) # uType caches rtmp, F2, du1 = (zero(rate_prototype) for i in 1:3) # rateType caches plist = (2, 2) uf, jac_config, - J, - ops, - KsCache = alg_cache_expRK(alg, u, uEltypeNoUnits, uprev, f, t, - dt, p, du1, tmp, dz, plist) # other caches - ETDRK2Cache(u, uprev, tmp, dz, rtmp, F2, du1, jac_config, uf, J, ops, KsCache) + J, + ops, + KsCache = alg_cache_expRK( + alg, u, uEltypeNoUnits, uprev, f, t, + dt, p, du1, tmp, dz, plist + ) # other caches + return ETDRK2Cache(u, uprev, tmp, dz, rtmp, F2, du1, jac_config, uf, J, ops, KsCache) end @cache struct ETDRK3Cache{uType, rateType, JCType, FType, JType, opType, KsType} <: - ExpRKCache + ExpRKCache u::uType uprev::uType tmp::uType @@ -280,23 +296,27 @@ end KsCache::KsType end -function alg_cache(alg::ETDRK3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ETDRK3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp, dz = (zero(u) for i in 1:2) # uType caches rtmp, Au, F2, F3, du1 = (zero(rate_prototype) for i in 1:5) # rateType caches plist = (1, 3, 3, 3) uf, jac_config, - J, - ops, - KsCache = alg_cache_expRK(alg, u, uEltypeNoUnits, uprev, f, t, - dt, p, du1, tmp, dz, plist) # other caches - ETDRK3Cache(u, uprev, tmp, dz, rtmp, Au, F2, F3, du1, jac_config, uf, J, ops, KsCache) + J, + ops, + KsCache = alg_cache_expRK( + alg, u, uEltypeNoUnits, uprev, f, t, + dt, p, du1, tmp, dz, plist + ) # other caches + return ETDRK3Cache(u, uprev, tmp, dz, rtmp, Au, F2, F3, du1, jac_config, uf, J, ops, KsCache) end @cache struct ETDRK4Cache{uType, rateType, JCType, FType, JType, opType, KsType} <: - ExpRKCache + ExpRKCache u::uType uprev::uType tmp::uType @@ -314,24 +334,30 @@ end KsCache::KsType end -function alg_cache(alg::ETDRK4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ETDRK4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp, dz = (zero(u) for i in 1:2) # uType caches rtmp, Au, F2, F3, F4, du1 = (zero(rate_prototype) for i in 1:6) # rateType caches plist = (1, 1, 3, 3, 3, 3) uf, jac_config, - J, - ops, - KsCache = alg_cache_expRK(alg, u, uEltypeNoUnits, uprev, f, t, - dt, p, du1, tmp, dz, plist) # other caches - ETDRK4Cache(u, uprev, tmp, dz, rtmp, Au, F2, F3, F4, du1, jac_config, uf, J, ops, - KsCache) + J, + ops, + KsCache = alg_cache_expRK( + alg, u, uEltypeNoUnits, uprev, f, t, + dt, p, du1, tmp, dz, plist + ) # other caches + return ETDRK4Cache( + u, uprev, tmp, dz, rtmp, Au, F2, F3, F4, du1, jac_config, uf, J, ops, + KsCache + ) end @cache struct HochOst4Cache{uType, rateType, JCType, FType, JType, opType, KsType} <: - ExpRKCache + ExpRKCache u::uType uprev::uType tmp::uType @@ -351,20 +377,26 @@ end KsCache::KsType end -function alg_cache(alg::HochOst4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::HochOst4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp, dz = (zero(u) for i in 1:2) # uType caches rtmp, rtmp2, Au, F2, F3, F4, F5, du1 = (zero(rate_prototype) for i in 1:8) # rateType caches plist = (3, 3, 3, 3, 3, 3, 3, 3, 3) uf, jac_config, - J, - ops, - KsCache = alg_cache_expRK(alg, u, uEltypeNoUnits, uprev, f, t, - dt, p, du1, tmp, dz, plist) # other caches - HochOst4Cache(u, uprev, tmp, dz, rtmp, rtmp2, Au, F2, F3, F4, F5, du1, jac_config, uf, - J, ops, KsCache) + J, + ops, + KsCache = alg_cache_expRK( + alg, u, uEltypeNoUnits, uprev, f, t, + dt, p, du1, tmp, dz, plist + ) # other caches + return HochOst4Cache( + u, uprev, tmp, dz, rtmp, rtmp2, Au, F2, F3, F4, F5, du1, jac_config, uf, + J, ops, KsCache + ) end #################################### @@ -381,21 +413,27 @@ function _phiv_timestep_caches(u_prototype, maxiter::Int, p::Int) end # Unified constructor for constant caches -for (Alg, Cache) in [(:Exp4, :Exp4ConstantCache), - (:EPIRK4s3A, :EPIRK4s3AConstantCache), - (:EPIRK4s3B, :EPIRK4s3BConstantCache), - (:EPIRK5s3, :EPIRK5s3ConstantCache), - (:EXPRB53s3, :EXPRB53s3ConstantCache), - (:EPIRK5P1, :EPIRK5P1ConstantCache), - (:EPIRK5P2, :EPIRK5P2ConstantCache)] +for (Alg, Cache) in [ + (:Exp4, :Exp4ConstantCache), + (:EPIRK4s3A, :EPIRK4s3AConstantCache), + (:EPIRK4s3B, :EPIRK4s3BConstantCache), + (:EPIRK5s3, :EPIRK5s3ConstantCache), + (:EXPRB53s3, :EXPRB53s3ConstantCache), + (:EPIRK5P1, :EPIRK5P1ConstantCache), + (:EPIRK5P2, :EPIRK5P2ConstantCache), + ] @eval struct $Cache{FType} <: ExpRKConstantCache uf::FType # derivative wrapper end - @eval function alg_cache(alg::$Alg, u, rate_prototype, ::Type{uEltypeNoUnits}, + @eval function alg_cache( + alg::$Alg, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, - tTypeNoUnits} + ::Val{false} + ) where { + uEltypeNoUnits, uBottomEltypeNoUnits, + tTypeNoUnits, + } if SciMLBase.has_jac(f) uf = nothing else @@ -406,7 +444,7 @@ for (Alg, Cache) in [(:Exp4, :Exp4ConstantCache), end @cache struct Exp4Cache{uType, rateType, JCType, FType, matType, JType, KsType} <: - ExpRKCache + ExpRKCache u::uType uprev::uType tmp::uType @@ -421,10 +459,12 @@ end B::matType KsCache::KsType end -function alg_cache(alg::Exp4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Exp4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp, dz = (zero(u) for i in 1:2) # uType caches rtmp, rtmp2, du1 = (zero(rate_prototype) for i in 1:3) # rateType caches # Allocate jacobian and caches for ForwardDiff @@ -449,11 +489,11 @@ function alg_cache(alg::Exp4, u, rate_prototype, ::Type{uEltypeNoUnits}, # Allocate caches for phiv_timestep maxiter = min(alg.m, n) KsCache = _phiv_timestep_caches(u, maxiter, 1) - Exp4Cache(u, uprev, tmp, dz, rtmp, rtmp2, du1, jac_config, uf, K, J, B, KsCache) + return Exp4Cache(u, uprev, tmp, dz, rtmp, rtmp2, du1, jac_config, uf, K, J, B, KsCache) end @cache struct EPIRK4s3ACache{uType, rateType, JCType, FType, matType, JType, KsType} <: - ExpRKCache + ExpRKCache u::uType uprev::uType tmp::uType @@ -468,10 +508,12 @@ end B::matType KsCache::KsType end -function alg_cache(alg::EPIRK4s3A, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::EPIRK4s3A, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp, dz = (zero(u) for i in 1:2) # uType caches rtmp, rtmp2, du1 = (zero(rate_prototype) for i in 1:3) # rateType caches # Allocate jacobian and caches for ForwardDiff @@ -495,11 +537,11 @@ function alg_cache(alg::EPIRK4s3A, u, rate_prototype, ::Type{uEltypeNoUnits}, # Allocate caches for phiv_timestep maxiter = min(alg.m, n) KsCache = _phiv_timestep_caches(u, maxiter, 4) - EPIRK4s3ACache(u, uprev, tmp, dz, rtmp, rtmp2, du1, jac_config, uf, K, J, B, KsCache) + return EPIRK4s3ACache(u, uprev, tmp, dz, rtmp, rtmp2, du1, jac_config, uf, K, J, B, KsCache) end @cache struct EPIRK4s3BCache{uType, rateType, JCType, FType, matType, JType, KsType} <: - ExpRKCache + ExpRKCache u::uType uprev::uType tmp::uType @@ -514,10 +556,12 @@ end B::matType KsCache::KsType end -function alg_cache(alg::EPIRK4s3B, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::EPIRK4s3B, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp, dz = (zero(u) for i in 1:2) # uType caches rtmp, rtmp2, du1 = (zero(rate_prototype) for i in 1:3) # rateType caches # Allocate jacobian and caches for ForwardDiff @@ -541,11 +585,11 @@ function alg_cache(alg::EPIRK4s3B, u, rate_prototype, ::Type{uEltypeNoUnits}, # Allocate caches for phiv_timestep maxiter = min(alg.m, n) KsCache = _phiv_timestep_caches(u, maxiter, 4) - EPIRK4s3BCache(u, uprev, tmp, dz, rtmp, rtmp2, du1, jac_config, uf, K, J, B, KsCache) + return EPIRK4s3BCache(u, uprev, tmp, dz, rtmp, rtmp2, du1, jac_config, uf, K, J, B, KsCache) end @cache struct EPIRK5s3Cache{uType, rateType, JCType, FType, matType, JType, KsType} <: - ExpRKCache + ExpRKCache u::uType uprev::uType tmp::uType @@ -560,10 +604,12 @@ end B::matType KsCache::KsType end -function alg_cache(alg::EPIRK5s3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::EPIRK5s3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp, dz, k = (zero(u) for i in 1:3) # uType caches rtmp, rtmp2, du1 = (zero(rate_prototype) for i in 1:3) # rateType caches # Allocate jacobian and caches for ForwardDiff @@ -586,11 +632,11 @@ function alg_cache(alg::EPIRK5s3, u, rate_prototype, ::Type{uEltypeNoUnits}, # Allocate caches for phiv_timestep maxiter = min(alg.m, n) KsCache = _phiv_timestep_caches(u, maxiter, 4) - EPIRK5s3Cache(u, uprev, tmp, dz, k, rtmp, rtmp2, du1, jac_config, uf, J, B, KsCache) + return EPIRK5s3Cache(u, uprev, tmp, dz, k, rtmp, rtmp2, du1, jac_config, uf, J, B, KsCache) end @cache struct EXPRB53s3Cache{uType, rateType, JCType, FType, matType, JType, KsType} <: - ExpRKCache + ExpRKCache u::uType uprev::uType tmp::uType @@ -605,10 +651,12 @@ end B::matType KsCache::KsType end -function alg_cache(alg::EXPRB53s3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::EXPRB53s3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp, dz = (zero(u) for i in 1:2) # uType caches rtmp, rtmp2, du1 = (zero(rate_prototype) for i in 1:3) # rateType caches # Allocate jacobian and caches for ForwardDiff @@ -632,11 +680,11 @@ function alg_cache(alg::EXPRB53s3, u, rate_prototype, ::Type{uEltypeNoUnits}, # Allocate caches for phiv_timestep maxiter = min(alg.m, n) KsCache = _phiv_timestep_caches(u, maxiter, 4) - EXPRB53s3Cache(u, uprev, tmp, dz, rtmp, rtmp2, du1, jac_config, uf, K, J, B, KsCache) + return EXPRB53s3Cache(u, uprev, tmp, dz, rtmp, rtmp2, du1, jac_config, uf, K, J, B, KsCache) end @cache struct EPIRK5P1Cache{uType, rateType, JCType, FType, matType, JType, KsType} <: - ExpRKCache + ExpRKCache u::uType uprev::uType tmp::uType @@ -651,10 +699,12 @@ end B::matType KsCache::KsType end -function alg_cache(alg::EPIRK5P1, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::EPIRK5P1, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp, dz = (zero(u) for i in 1:2) # uType caches rtmp, rtmp2, du1 = (zero(rate_prototype) for i in 1:3) # rateType caches # Allocate jacobian and caches for ForwardDiff @@ -678,11 +728,11 @@ function alg_cache(alg::EPIRK5P1, u, rate_prototype, ::Type{uEltypeNoUnits}, # Allocate caches for phiv_timestep maxiter = min(alg.m, n) KsCache = _phiv_timestep_caches(u, maxiter, 3) - EPIRK5P1Cache(u, uprev, tmp, dz, rtmp, rtmp2, du1, jac_config, uf, K, J, B, KsCache) + return EPIRK5P1Cache(u, uprev, tmp, dz, rtmp, rtmp2, du1, jac_config, uf, K, J, B, KsCache) end @cache struct EPIRK5P2Cache{uType, rateType, JCType, FType, matType, JType, KsType} <: - ExpRKCache + ExpRKCache u::uType uprev::uType tmp::uType @@ -698,10 +748,12 @@ end B::matType KsCache::KsType end -function alg_cache(alg::EPIRK5P2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::EPIRK5P2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp, dz = (zero(u) for i in 1:2) # uType caches rtmp, rtmp2, dR, du1 = (zero(rate_prototype) for i in 1:4) # rateType caches # Allocate jacobian and caches for ForwardDiff @@ -725,23 +777,29 @@ function alg_cache(alg::EPIRK5P2, u, rate_prototype, ::Type{uEltypeNoUnits}, # Allocate caches for phiv_timestep maxiter = min(alg.m, n) KsCache = _phiv_timestep_caches(u, maxiter, 3) - EPIRK5P2Cache(u, uprev, tmp, dz, rtmp, rtmp2, dR, du1, jac_config, uf, K, J, B, KsCache) + return EPIRK5P2Cache(u, uprev, tmp, dz, rtmp, rtmp2, dR, du1, jac_config, uf, K, J, B, KsCache) end #################################### # Adaptive exponential Rosenbrock method caches ## Constant caches -for (Alg, Cache) in [(:Exprb32, :Exprb32ConstantCache), - (:Exprb43, :Exprb43ConstantCache)] +for (Alg, Cache) in [ + (:Exprb32, :Exprb32ConstantCache), + (:Exprb43, :Exprb43ConstantCache), + ] @eval struct $Cache{FType} <: ExpRKConstantCache uf::FType # derivative wrapper end - @eval function alg_cache(alg::$Alg, u, rate_prototype, ::Type{uEltypeNoUnits}, + @eval function alg_cache( + alg::$Alg, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, - tTypeNoUnits} + ::Val{false} + ) where { + uEltypeNoUnits, uBottomEltypeNoUnits, + tTypeNoUnits, + } if SciMLBase.has_jac(f) uf = nothing else @@ -760,9 +818,11 @@ Construct the non-standard caches (not uType or rateType) for Exprb integrators. `plist` is a list of integers each corresponding to the order of a `phiv(!)` call in `perform_step!`. """ -function alg_cache_exprb(alg::OrdinaryDiffEqAdaptiveExponentialAlgorithm, u, +function alg_cache_exprb( + alg::OrdinaryDiffEqAdaptiveExponentialAlgorithm, u, ::Type{uEltypeNoUnits}, uprev, f, t, p, du1, tmp, dz, - plist) where {uEltypeNoUnits} + plist + ) where {uEltypeNoUnits} if f isa SplitFunction error("Algorithm $alg cannot be used for split problems. Consider reformat to a regular `ODEProblem`") end @@ -805,18 +865,22 @@ end J::JType KsCache::KsType end -function alg_cache(alg::Exprb32, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Exprb32, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} utilde, tmp, dz = (zero(u) for i in 1:3) # uType caches rtmp, F2, du1 = (zero(rate_prototype) for i in 1:3) # rateType caches plist = (3, 3) uf, jac_config, - J, - KsCache = alg_cache_exprb(alg, u, uEltypeNoUnits, uprev, f, t, p, - du1, tmp, dz, plist) # other caches - Exprb32Cache(u, uprev, utilde, tmp, dz, rtmp, F2, du1, jac_config, uf, J, KsCache) + J, + KsCache = alg_cache_exprb( + alg, u, uEltypeNoUnits, uprev, f, t, p, + du1, tmp, dz, plist + ) # other caches + return Exprb32Cache(u, uprev, utilde, tmp, dz, rtmp, F2, du1, jac_config, uf, J, KsCache) end struct Exprb43Cache{uType, rateType, JCType, FType, JType, KsType} <: ExpRKCache @@ -835,19 +899,25 @@ struct Exprb43Cache{uType, rateType, JCType, FType, JType, KsType} <: ExpRKCache J::JType KsCache::KsType end -function alg_cache(alg::Exprb43, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Exprb43, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} utilde, tmp, dz = (zero(u) for i in 1:3) # uType caches rtmp, Au, F2, F3, du1 = (zero(rate_prototype) for i in 1:5) # rateType caches plist = (1, 4, 4, 4) uf, jac_config, - J, - KsCache = alg_cache_exprb(alg, u, uEltypeNoUnits, uprev, f, t, p, - du1, tmp, dz, plist) # other caches - Exprb43Cache(u, uprev, utilde, tmp, dz, rtmp, Au, F2, F3, du1, jac_config, uf, J, - KsCache) + J, + KsCache = alg_cache_exprb( + alg, u, uEltypeNoUnits, uprev, f, t, p, + du1, tmp, dz, plist + ) # other caches + return Exprb43Cache( + u, uprev, utilde, tmp, dz, rtmp, Au, F2, F3, du1, jac_config, uf, J, + KsCache + ) end #################################### @@ -872,16 +942,16 @@ mutable struct ETD2Fsal{rateType} nlprev = convert(T, nlprev) end - new{typeof(lin)}(lin, nl, nlprev) + return new{typeof(lin)}(lin, nl, nlprev) end end function ETD2Fsal(rate_prototype) - ETD2Fsal(zero(rate_prototype), zero(rate_prototype), zero(rate_prototype)) + return ETD2Fsal(zero(rate_prototype), zero(rate_prototype), zero(rate_prototype)) end function recursivecopy!(dest::ETD2Fsal, src::ETD2Fsal) recursivecopy!(dest.lin, src.lin) recursivecopy!(dest.nl, src.nl) - recursivecopy!(dest.nlprev, src.nlprev) + return recursivecopy!(dest.nlprev, src.nlprev) end struct ETD2ConstantCache{expType} <: OrdinaryDiffEqConstantCache @@ -893,13 +963,15 @@ end get_fsalfirstlast(cache::ETD2ConstantCache, u) = (ETD2Fsal(u), ETD2Fsal(u)) -function alg_cache(alg::ETD2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ETD2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} A = size(f.f1.f) == () ? convert(Number, f.f1.f) : convert(AbstractMatrix, f.f1.f) Phi = phi(dt * A, 2) - ETD2ConstantCache(Phi[1], Phi[2], Phi[2] + Phi[3], -Phi[3]) + return ETD2ConstantCache(Phi[1], Phi[2], Phi[2] + Phi[3], -Phi[3]) end @cache struct ETD2Cache{uType, rateType, expType} <: OrdinaryDiffEqMutableCache @@ -915,13 +987,16 @@ end end get_fsalfirstlast(cache::ETD2Cache, u) = (ETD2Fsal(cache.rtmp1), ETD2Fsal(cache.rtmp1)) -function alg_cache(alg::ETD2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ETD2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} A = size(f.f1.f) == () ? convert(Number, f.f1.f) : convert(AbstractMatrix, f.f1.f) Phi = phi(dt * A, 2) - ETD2Cache( + return ETD2Cache( u, uprev, zero(u), zero(rate_prototype), zero(rate_prototype), Phi[1], Phi[2], - Phi[2] + Phi[3], -Phi[3]) + Phi[2] + Phi[3], -Phi[3] + ) end diff --git a/lib/OrdinaryDiffEqExponentialRK/src/exponential_rk_perform_step.jl b/lib/OrdinaryDiffEqExponentialRK/src/exponential_rk_perform_step.jl index 73535d7290..353ca483e3 100644 --- a/lib/OrdinaryDiffEqExponentialRK/src/exponential_rk_perform_step.jl +++ b/lib/OrdinaryDiffEqExponentialRK/src/exponential_rk_perform_step.jl @@ -5,7 +5,7 @@ @inline function _compute_nl!(G, f, u, p, t, A, Au_cache) f(G, u, p, t) mul!(Au_cache, A, u) - G .-= Au_cache + return G .-= Au_cache end ########################################## @@ -20,7 +20,7 @@ function initialize!(integrator, cache::ExpRKConstantCache) integrator.kshortsize = 2 integrator.k = typeof(integrator.k)(undef, integrator.kshortsize) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end function initialize!(integrator, cache::ExpRKCache) # Pre-start fsal @@ -31,7 +31,7 @@ function initialize!(integrator, cache::ExpRKCache) integrator.kshortsize = 2 resize!(integrator.k, integrator.kshortsize) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end ########################################### @@ -49,8 +49,10 @@ function perform_step!(integrator, cache::LawsonEulerConstantCache, repeat_step end @muladd v = uprev + dt * nl if alg.krylov - u = expv(dt, A, v; m = min(alg.m, size(A, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + u = expv( + dt, A, v; m = min(alg.m, size(A, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) else exphA = cache.ops u = exphA * v @@ -61,7 +63,7 @@ function perform_step!(integrator, cache::LawsonEulerConstantCache, repeat_step OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function perform_step!(integrator, cache::LawsonEulerCache, repeat_step = false) @@ -76,11 +78,13 @@ function perform_step!(integrator, cache::LawsonEulerCache, repeat_step = false) else OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end - @muladd @.. broadcast=false tmp=uprev+dt*G + @muladd @.. broadcast = false tmp = uprev + dt * G if alg.krylov Ks, expv_cache = KsCache - arnoldi!(Ks, A, tmp; m = min(alg.m, size(A, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + arnoldi!( + Ks, A, tmp; m = min(alg.m, size(A, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) expv!(u, dt, Ks; cache = expv_cache) else mul!(u, exphA, tmp) @@ -88,7 +92,7 @@ function perform_step!(integrator, cache::LawsonEulerCache, repeat_step = false) # Update integrator state f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # integrator.k is automatically set due to aliasing end @@ -98,8 +102,10 @@ function perform_step!(integrator, cache::NorsettEulerConstantCache, repeat_step alg = unwrap_alg(integrator, true) if alg.krylov - w = phiv(dt, A, integrator.fsalfirst, 1; m = min(alg.m, size(A, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + w = phiv( + dt, A, integrator.fsalfirst, 1; m = min(alg.m, size(A, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) u = uprev + dt * w[:, 2] else phihA = cache.ops @@ -111,7 +117,7 @@ function perform_step!(integrator, cache::NorsettEulerConstantCache, repeat_step OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function perform_step!(integrator, cache::NorsettEulerCache, repeat_step = false) @@ -123,18 +129,20 @@ function perform_step!(integrator, cache::NorsettEulerCache, repeat_step = false if alg.krylov Ks, phiv_cache, ws = KsCache w = ws[1] - arnoldi!(Ks, A, integrator.fsalfirst; m = min(alg.m, size(A, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + arnoldi!( + Ks, A, integrator.fsalfirst; m = min(alg.m, size(A, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) phiv!(w, dt, Ks, 1; cache = phiv_cache) - @muladd @.. broadcast=false u=uprev+dt*@view(w[:, 2]) + @muladd @.. broadcast = false u = uprev + dt * @view(w[:, 2]) else mul!(rtmp, cache.phihA, integrator.fsalfirst) - @muladd @.. broadcast=false u=uprev+dt*rtmp + @muladd @.. broadcast = false u = uprev + dt * rtmp end # Update integrator state f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # integrator.k is automatically set due to aliasing end @@ -145,8 +153,10 @@ function perform_step!(integrator, cache::ETDRK2ConstantCache, repeat_step = fal if alg.krylov F1 = integrator.fsalfirst - w1 = phiv(dt, A, F1, 2; m = min(alg.m, size(A, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + w1 = phiv( + dt, A, F1, 2; m = min(alg.m, size(A, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) U2 = uprev + dt * w1[:, 2] F2 = _compute_nl(f, U2, p, t + dt, A) + A * uprev if isa(f, SplitFunction) @@ -154,8 +164,10 @@ function perform_step!(integrator, cache::ETDRK2ConstantCache, repeat_step = fal else OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end - w2 = phiv(dt, A, F2, 2; m = min(alg.m, size(A, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + w2 = phiv( + dt, A, F2, 2; m = min(alg.m, size(A, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) u = uprev + dt * (w1[:, 2] - w1[:, 3] + w2[:, 3]) else phi1, phi2 = cache.ops @@ -174,7 +186,7 @@ function perform_step!(integrator, cache::ETDRK2ConstantCache, repeat_step = fal OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function perform_step!(integrator, cache::ETDRK2Cache, repeat_step = false) @@ -188,11 +200,13 @@ function perform_step!(integrator, cache::ETDRK2Cache, repeat_step = false) Ks, phiv_cache, ws = KsCache w1, w2 = ws # Krylov for F1 - arnoldi!(Ks, A, F1; m = min(alg.m, size(A, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + arnoldi!( + Ks, A, F1; m = min(alg.m, size(A, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) phiv!(w1, dt, Ks, 2; cache = phiv_cache) # Krylov for F2 - @muladd @.. broadcast=false tmp=uprev+dt*@view(w1[:, 2]) + @muladd @.. broadcast = false tmp = uprev + dt * @view(w1[:, 2]) _compute_nl!(F2, f, tmp, p, t + dt, A, rtmp) if isa(f, SplitFunction) integrator.stats.nf2 += 1 @@ -200,8 +214,10 @@ function perform_step!(integrator, cache::ETDRK2Cache, repeat_step = false) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end F2 .+= mul!(rtmp, A, uprev) - arnoldi!(Ks, A, F2; m = min(alg.m, size(A, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + arnoldi!( + Ks, A, F2; m = min(alg.m, size(A, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) phiv!(w2, dt, Ks, 2; cache = phiv_cache) # Update u u .= uprev @@ -214,7 +230,7 @@ function perform_step!(integrator, cache::ETDRK2Cache, repeat_step = false) # The caching version uses a special formula to save computation # Compute U2 mul!(rtmp, phi1, F1) - @muladd @.. broadcast=false tmp=uprev+dt*rtmp # tmp is U2 + @muladd @.. broadcast = false tmp = uprev + dt * rtmp # tmp is U2 # Compute G2 - G1, storing result in the cache F2 f.f2(rtmp, uprev, p, t) integrator.stats.nf2 += 1 @@ -228,7 +244,7 @@ function perform_step!(integrator, cache::ETDRK2Cache, repeat_step = false) # Update integrator state f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # integrator.k is automatically set due to aliasing end @@ -240,8 +256,10 @@ function perform_step!(integrator, cache::ETDRK3ConstantCache, repeat_step = fal Au = A * uprev F1 = integrator.fsalfirst if alg.krylov - kwargs = (m = min(alg.m, size(A, 1)), opnorm = integrator.opts.internalopnorm, - iop = alg.iop) + kwargs = ( + m = min(alg.m, size(A, 1)), opnorm = integrator.opts.internalopnorm, + iop = alg.iop, + ) # Krylov on F1 (first column) Ks = arnoldi(A, F1; kwargs...) w1_half = phiv(dt / 2, Ks, 1) @@ -260,10 +278,12 @@ function perform_step!(integrator, cache::ETDRK3ConstantCache, repeat_step = fal # Krylov on F3 (third column) w3 = phiv(dt, A, F3, 3; kwargs...) u = uprev + - dt * (4w1[:, 4] - 3w1[:, 3] + w1[:, 2] - - - 8w2[:, 4] + 4w2[:, 3] - + 4w3[:, 4] - w3[:, 3]) + dt * ( + 4w1[:, 4] - 3w1[:, 3] + w1[:, 2] + - + 8w2[:, 4] + 4w2[:, 3] + + 4w3[:, 4] - w3[:, 3] + ) else A21, A3, B1, B2, B3 = cache.ops # stage 1 (fsaled) @@ -284,7 +304,7 @@ function perform_step!(integrator, cache::ETDRK3ConstantCache, repeat_step = fal OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function perform_step!(integrator, cache::ETDRK3Cache, repeat_step = false) @@ -299,19 +319,21 @@ function perform_step!(integrator, cache::ETDRK3Cache, repeat_step = false) if alg.krylov Ks, phiv_cache, ws = KsCache w1_half, w1, w2, w3 = ws - kwargs = (m = min(alg.m, size(A, 1)), opnorm = integrator.opts.internalopnorm, - iop = alg.iop) + kwargs = ( + m = min(alg.m, size(A, 1)), opnorm = integrator.opts.internalopnorm, + iop = alg.iop, + ) # Krylov for F1 (first column) arnoldi!(Ks, A, F1; kwargs...) phiv!(w1_half, halfdt, Ks, 1; cache = phiv_cache) phiv!(w1, dt, Ks, 3; cache = phiv_cache) - @muladd @.. broadcast=false @views tmp = uprev + halfdt * w1_half[:, 2] # tmp is U2 + @muladd @.. broadcast = false @views tmp = uprev + halfdt * w1_half[:, 2] # tmp is U2 _compute_nl!(F2, f, tmp, p, t + halfdt, A, rtmp) F2 .+= Au # Krylov for F2 (second column) arnoldi!(Ks, A, F2; kwargs...) phiv!(w2, dt, Ks, 3; cache = phiv_cache) - @muladd @.. broadcast=false @views tmp = uprev + dt * (2 * w2[:, 2] - w1[:, 2]) # tmp is U3 + @muladd @.. broadcast = false @views tmp = uprev + dt * (2 * w2[:, 2] - w1[:, 2]) # tmp is U3 _compute_nl!(F3, f, tmp, p, t + dt, A, rtmp) F3 .+= Au if isa(f, SplitFunction) @@ -323,22 +345,22 @@ function perform_step!(integrator, cache::ETDRK3Cache, repeat_step = false) arnoldi!(Ks, A, F3; kwargs...) phiv!(w3, dt, Ks, 3; cache = phiv_cache) # Update u - @views @.. broadcast=false rtmp=4w1[:, 4]-3w1[:, 3]+w1[:, 2]-8w2[:, 4]+ - 4w2[:, 3]+4w3[:, 4]-w3[:, 3] - @muladd @.. broadcast=false u=uprev+dt*rtmp + @views @.. broadcast = false rtmp = 4w1[:, 4] - 3w1[:, 3] + w1[:, 2] - 8w2[:, 4] + + 4w2[:, 3] + 4w3[:, 4] - w3[:, 3] + @muladd @.. broadcast = false u = uprev + dt * rtmp else A21, A3, B1, B2, B3 = cache.ops # stage 1 (fsaled) # stage 2 mul!(rtmp, A21, F1) - @muladd @.. broadcast=false tmp=uprev+dt*rtmp # tmp is U2 + @muladd @.. broadcast = false tmp = uprev + dt * rtmp # tmp is U2 f.f2(F2, tmp, p, t + halfdt) F2 .+= Au integrator.stats.nf2 += 1 # stage 3 - @muladd @.. broadcast=false F3=2*F2-F1 # use F3 temporarily as cache + @muladd @.. broadcast = false F3 = 2 * F2 - F1 # use F3 temporarily as cache mul!(rtmp, A3, F3) - @muladd @.. broadcast=false tmp=uprev+dt*rtmp # tmp is U3 + @muladd @.. broadcast = false tmp = uprev + dt * rtmp # tmp is U3 f.f2(F3, tmp, p, t + dt) F3 .+= Au integrator.stats.nf2 += 1 @@ -351,7 +373,7 @@ function perform_step!(integrator, cache::ETDRK3Cache, repeat_step = false) # Update integrator state f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # integrator.k is automatically set due to aliasing end @@ -364,8 +386,10 @@ function perform_step!(integrator, cache::ETDRK4ConstantCache, repeat_step = fal F1 = integrator.fsalfirst halfdt = dt / 2 if alg.krylov - kwargs = (m = min(alg.m, size(A, 1)), opnorm = integrator.opts.internalopnorm, - iop = alg.iop) + kwargs = ( + m = min(alg.m, size(A, 1)), opnorm = integrator.opts.internalopnorm, + iop = alg.iop, + ) # Krylov on F1 (first column) Ks = arnoldi(A, F1; kwargs...) w1_half = phiv(halfdt, Ks, 1) @@ -394,8 +418,10 @@ function perform_step!(integrator, cache::ETDRK4ConstantCache, repeat_step = fal w4 = phiv(dt, A, F4, 3; kwargs...) # update u u = uprev + - dt * (w1[:, 2] - 3w1[:, 3] + 4w1[:, 4] + 2w2[:, 3] - 4w2[:, 4] + - 2w3[:, 3] - 4w3[:, 4] + 4w4[:, 4] - w4[:, 3]) + dt * ( + w1[:, 2] - 3w1[:, 3] + 4w1[:, 4] + 2w2[:, 3] - 4w2[:, 4] + + 2w3[:, 3] - 4w3[:, 4] + 4w4[:, 4] - w4[:, 3] + ) else A21, A41, A43, B1, B2, B4 = cache.ops # stage 1 (fsaled) @@ -418,7 +444,7 @@ function perform_step!(integrator, cache::ETDRK4ConstantCache, repeat_step = fal OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function perform_step!(integrator, cache::ETDRK4Cache, repeat_step = false) @@ -433,21 +459,23 @@ function perform_step!(integrator, cache::ETDRK4Cache, repeat_step = false) if alg.krylov Ks, phiv_cache, ws = KsCache w1_half, w2_half, w1, w2, w3, w4 = ws - kwargs = (m = min(alg.m, size(A, 1)), opnorm = integrator.opts.internalopnorm, - iop = alg.iop) + kwargs = ( + m = min(alg.m, size(A, 1)), opnorm = integrator.opts.internalopnorm, + iop = alg.iop, + ) # Krylov for F1 (first column) arnoldi!(Ks, A, F1; kwargs...) phiv!(w1_half, halfdt, Ks, 1; cache = phiv_cache) phiv!(w1, dt, Ks, 3; cache = phiv_cache) U2 = u # temporarily use u to store U2 (used in the extra Krylov step) - @muladd @.. broadcast=false @views U2 = uprev + halfdt * w1_half[:, 2] + @muladd @.. broadcast = false @views U2 = uprev + halfdt * w1_half[:, 2] _compute_nl!(F2, f, U2, p, t + halfdt, A, rtmp) F2 .+= Au # Krylov for F2 (second column) arnoldi!(Ks, A, F2; kwargs...) phiv!(w2_half, halfdt, Ks, 1; cache = phiv_cache) phiv!(w2, dt, Ks, 3; cache = phiv_cache) - @muladd @.. broadcast=false @views tmp = uprev + halfdt * w2_half[:, 2] # tmp is U3 + @muladd @.. broadcast = false @views tmp = uprev + halfdt * w2_half[:, 2] # tmp is U3 _compute_nl!(F3, f, tmp, p, t + halfdt, A, rtmp) F3 .+= Au # Krylov for F3 (third column) @@ -456,10 +484,10 @@ function perform_step!(integrator, cache::ETDRK4Cache, repeat_step = false) # Extra Krylov for computing F4 # Compute rtmp = 2F3 - F1 - Au + A*U2 mul!(rtmp, A, U2) - @.. broadcast=false rtmp+=2F3 - F1 - Au + @.. broadcast = false rtmp += 2F3 - F1 - Au arnoldi!(Ks, A, rtmp; kwargs...) phiv!(w1_half, halfdt, Ks, 1; cache = phiv_cache) # original w1_half is no longer needed - @muladd @.. broadcast=false @views tmp = U2 + halfdt * w1_half[:, 2] # tmp is U4 + @muladd @.. broadcast = false @views tmp = U2 + halfdt * w1_half[:, 2] # tmp is U4 _compute_nl!(F4, f, tmp, p, t + dt, A, rtmp) F4 .+= Au if isa(f, SplitFunction) @@ -471,26 +499,27 @@ function perform_step!(integrator, cache::ETDRK4Cache, repeat_step = false) arnoldi!(Ks, A, F4; kwargs...) phiv!(w4, dt, Ks, 3; cache = phiv_cache) # update u - @views @.. broadcast=false rtmp=w1[:, 2]-3w1[:, 3]+4w1[:, 4]+2w2[ - :, 3]- - 4w2[:, 4]+ - 2w3[:, 3]-4w3[:, 4]+4w4[:, 4]-w4[:, 3] - @muladd @.. broadcast=false u=uprev+dt*rtmp + @views @.. broadcast = false rtmp = w1[:, 2] - 3w1[:, 3] + 4w1[:, 4] + 2w2[ + :, 3, + ] - + 4w2[:, 4] + + 2w3[:, 3] - 4w3[:, 4] + 4w4[:, 4] - w4[:, 3] + @muladd @.. broadcast = false u = uprev + dt * rtmp else A21, A41, A43, B1, B2, B4 = cache.ops # stage 1 (fsaled) # stage 2 mul!(rtmp, A21, F1) - @muladd @.. broadcast=false tmp=uprev+dt*rtmp # tmp is U2 + @muladd @.. broadcast = false tmp = uprev + dt * rtmp # tmp is U2 f.f2(F2, tmp, p, t + halfdt) F2 .+= Au # stage 3 mul!(rtmp, A21, F2) # A32 = A21 - @muladd @.. broadcast=false tmp=uprev+dt*rtmp # tmp is U3 + @muladd @.. broadcast = false tmp = uprev + dt * rtmp # tmp is U3 f.f2(F3, tmp, p, t + halfdt) F3 .+= Au # stage 4 - @.. broadcast=false tmp=uprev + @.. broadcast = false tmp = uprev axpy!(dt, mul!(rtmp, A41, F1), tmp) axpy!(dt, mul!(rtmp, A43, F3), tmp) # tmp is U4 f.f2(F4, tmp, p, t + dt) @@ -506,7 +535,7 @@ function perform_step!(integrator, cache::ETDRK4Cache, repeat_step = false) # Update integrator state f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # integrator.k is automatically set due to aliasing end @@ -519,8 +548,10 @@ function perform_step!(integrator, cache::HochOst4ConstantCache, repeat_step = f F1 = integrator.fsalfirst halfdt = dt / 2 if alg.krylov - kwargs = (m = min(alg.m, size(A, 1)), opnorm = integrator.opts.internalopnorm, - iop = alg.iop) + kwargs = ( + m = min(alg.m, size(A, 1)), opnorm = integrator.opts.internalopnorm, + iop = alg.iop, + ) # Krylov on F1 (first column) Ks = arnoldi(A, F1; kwargs...) w1_half = phiv(halfdt, Ks, 3) @@ -544,11 +575,13 @@ function perform_step!(integrator, cache::HochOst4ConstantCache, repeat_step = f w4_half = phiv(halfdt, Ks, 3) w4 = phiv(dt, Ks, 3) U5 = uprev + - dt * (0.5w1_half[:, 2] - 0.75w1_half[:, 3] + 0.5w1_half[:, 4] + w1[:, 4] - - 0.25w1[:, 3] + - 0.5w2_half[:, 3] - w2[:, 4] + 0.25w2[:, 3] - 0.5w2_half[:, 4] + - 0.5w3_half[:, 3] - w2[:, 4] + 0.25w3[:, 3] - 0.5w3_half[:, 4] + - w4[:, 4] - 0.25w4[:, 3] - 0.25w4_half[:, 3] + 0.5w4_half[:, 4]) + dt * ( + 0.5w1_half[:, 2] - 0.75w1_half[:, 3] + 0.5w1_half[:, 4] + w1[:, 4] - + 0.25w1[:, 3] + + 0.5w2_half[:, 3] - w2[:, 4] + 0.25w2[:, 3] - 0.5w2_half[:, 4] + + 0.5w3_half[:, 3] - w2[:, 4] + 0.25w3[:, 3] - 0.5w3_half[:, 4] + + w4[:, 4] - 0.25w4[:, 3] - 0.25w4_half[:, 3] + 0.5w4_half[:, 4] + ) F5 = _compute_nl(f, U5, p, t + halfdt, A) + Au if isa(f, SplitFunction) integrator.stats.nf2 += 4 @@ -559,8 +592,10 @@ function perform_step!(integrator, cache::HochOst4ConstantCache, repeat_step = f w5 = phiv(dt, A, F5, 3; kwargs...) # update u u = uprev + - dt * (w1[:, 2] - 3w1[:, 3] + 4w1[:, 4] - w4[:, 3] + 4w4[:, 4] + 4w5[:, 3] - - 8w5[:, 4]) + dt * ( + w1[:, 2] - 3w1[:, 3] + 4w1[:, 4] - w4[:, 3] + 4w4[:, 4] + 4w5[:, 3] - + 8w5[:, 4] + ) else A21, A31, A32, A41, A42, A51, A52, A54, B1, B4, B5 = cache.ops # stage 1 (fsaled) @@ -586,7 +621,7 @@ function perform_step!(integrator, cache::HochOst4ConstantCache, repeat_step = f OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function perform_step!(integrator, cache::HochOst4Cache, repeat_step = false) @@ -601,48 +636,56 @@ function perform_step!(integrator, cache::HochOst4Cache, repeat_step = false) if alg.krylov Ks, phiv_cache, ws = KsCache w1_half, w2_half, w3_half, w4_half, w1, w2, w3, w4, w5 = ws - kwargs = (m = min(alg.m, size(A, 1)), opnorm = integrator.opts.internalopnorm, - iop = alg.iop) + kwargs = ( + m = min(alg.m, size(A, 1)), opnorm = integrator.opts.internalopnorm, + iop = alg.iop, + ) # Krylov on F1 (first column) arnoldi!(Ks, A, F1; kwargs...) phiv!(w1_half, halfdt, Ks, 3; cache = phiv_cache) phiv!(w1, dt, Ks, 3; cache = phiv_cache) - @muladd @.. broadcast=false @views tmp = uprev + halfdt * w1_half[:, 2] # tmp is U2 + @muladd @.. broadcast = false @views tmp = uprev + halfdt * w1_half[:, 2] # tmp is U2 _compute_nl!(F2, f, tmp, p, t + halfdt, A, rtmp) F2 .+= Au # Krylov on F2 (second column) arnoldi!(Ks, A, F2; kwargs...) phiv!(w2_half, halfdt, Ks, 3; cache = phiv_cache) phiv!(w2, dt, Ks, 3; cache = phiv_cache) - @muladd @.. broadcast=false @views tmp = uprev + - dt * (0.5w1_half[:, 2] - w1_half[:, 3] + - w2_half[:, 3]) # tmp is U3 + @muladd @.. broadcast = false @views tmp = uprev + + dt * ( + 0.5w1_half[:, 2] - w1_half[:, 3] + + w2_half[:, 3] + ) # tmp is U3 _compute_nl!(F3, f, tmp, p, t + halfdt, A, rtmp) F3 .+= Au # Krylov on F3 (third column) arnoldi!(Ks, A, F3; kwargs...) phiv!(w3_half, halfdt, Ks, 3; cache = phiv_cache) phiv!(w3, dt, Ks, 3; cache = phiv_cache) - @muladd @.. broadcast=false @views tmp = uprev + - dt * (w1[:, 2] - 2w1[:, 3] + w2[:, 3] + - w3[:, 3]) # tmp is U4 + @muladd @.. broadcast = false @views tmp = uprev + + dt * ( + w1[:, 2] - 2w1[:, 3] + w2[:, 3] + + w3[:, 3] + ) # tmp is U4 _compute_nl!(F4, f, tmp, p, t + dt, A, rtmp) F4 .+= Au # Krylov on F4 (fourth column) arnoldi!(Ks, A, F4; kwargs...) phiv!(w4_half, halfdt, Ks, 3; cache = phiv_cache) phiv!(w4, dt, Ks, 3; cache = phiv_cache) - @muladd @.. broadcast=false @views tmp = uprev + - dt * - (0.5w1_half[:, 2] - 0.75w1_half[:, 3] + - 0.5w1_half[:, 4] + w1[:, 4] - - 0.25w1[:, 3] + - 0.5w2_half[:, 3] - w2[:, 4] + - 0.25w2[:, 3] - 0.5w2_half[:, 4] + - 0.5w3_half[:, 3] - w2[:, 4] + - 0.25w3[:, 3] - 0.5w3_half[:, 4] + - w4[:, 4] - 0.25w4[:, 3] - - 0.25w4_half[:, 3] + 0.5w4_half[:, 4]) # tmp is U5 + @muladd @.. broadcast = false @views tmp = uprev + + dt * + ( + 0.5w1_half[:, 2] - 0.75w1_half[:, 3] + + 0.5w1_half[:, 4] + w1[:, 4] - + 0.25w1[:, 3] + + 0.5w2_half[:, 3] - w2[:, 4] + + 0.25w2[:, 3] - 0.5w2_half[:, 4] + + 0.5w3_half[:, 3] - w2[:, 4] + + 0.25w3[:, 3] - 0.5w3_half[:, 4] + + w4[:, 4] - 0.25w4[:, 3] - + 0.25w4_half[:, 3] + 0.5w4_half[:, 4] + ) # tmp is U5 _compute_nl!(F5, f, tmp, p, t + dt, A, rtmp) F5 .+= Au if isa(f, SplitFunction) @@ -654,23 +697,23 @@ function perform_step!(integrator, cache::HochOst4Cache, repeat_step = false) arnoldi!(Ks, A, F5; kwargs...) phiv!(w5, dt, Ks, 3; cache = phiv_cache) # update u - @muladd @.. broadcast=false @views rtmp = w1[:, 2] - 3w1[:, 3] + 4w1[:, 4] - - w4[:, 3] + 4w4[:, 4] + 4w5[:, 3] - - 8w5[:, 4] - @muladd @.. broadcast=false u=uprev+dt*rtmp + @muladd @.. broadcast = false @views rtmp = w1[:, 2] - 3w1[:, 3] + 4w1[:, 4] - + w4[:, 3] + 4w4[:, 4] + 4w5[:, 3] - + 8w5[:, 4] + @muladd @.. broadcast = false u = uprev + dt * rtmp else A21, A31, A32, A41, A42, A51, A52, A54, B1, B4, B5 = cache.ops # stage 1 (fsaled) # stage 2 mul!(rtmp, A21, F1) - @muladd @.. broadcast=false tmp=uprev+dt*rtmp # tmp is U2 + @muladd @.. broadcast = false tmp = uprev + dt * rtmp # tmp is U2 f.f2(F2, tmp, p, t + halfdt) F2 .+= Au # stage 3 mul!(rtmp, A31, F1) mul!(rtmp2, A32, F2) rtmp .+= rtmp2 - @muladd @.. broadcast=false tmp=uprev+dt*rtmp # tmp is U3 + @muladd @.. broadcast = false tmp = uprev + dt * rtmp # tmp is U3 f.f2(F3, tmp, p, t + halfdt) F3 .+= Au # stage 4 @@ -678,7 +721,7 @@ function perform_step!(integrator, cache::HochOst4Cache, repeat_step = false) mul!(rtmp, A41, F1) mul!(rtmp2, A42, F2) rtmp .+= rtmp2 - @muladd @.. broadcast=false tmp=uprev+dt*rtmp # tmp is U4 + @muladd @.. broadcast = false tmp = uprev + dt * rtmp # tmp is U4 f.f2(F4, tmp, p, t + dt) F4 .+= Au # stage 5 @@ -687,7 +730,7 @@ function perform_step!(integrator, cache::HochOst4Cache, repeat_step = false) rtmp .+= rtmp2 mul!(rtmp2, A54, F4) rtmp .+= rtmp2 - @muladd @.. broadcast=false tmp=uprev+dt*rtmp # tmp is U5 + @muladd @.. broadcast = false tmp = uprev + dt * rtmp # tmp is U5 f.f2(F5, tmp, p, t + halfdt) F5 .+= Au integrator.stats.nf2 += 4 @@ -697,12 +740,12 @@ function perform_step!(integrator, cache::HochOst4Cache, repeat_step = false) rtmp .+= rtmp2 mul!(rtmp2, B5, F5) rtmp .+= rtmp2 - @muladd @.. broadcast=false u=uprev+dt*rtmp + @muladd @.. broadcast = false u = uprev + dt * rtmp end # Update integrator state f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # integrator.k is automatically set due to aliasing end @@ -714,10 +757,12 @@ function perform_step!(integrator, cache::Exp4ConstantCache, repeat_step = false alg = unwrap_alg(integrator, true) f0 = integrator.fsalfirst # f(uprev) is fsaled ts = [dt / 3, 2dt / 3, dt] - kwargs = (tol = integrator.opts.reltol, iop = alg.iop, + kwargs = ( + tol = integrator.opts.reltol, iop = alg.iop, opnorm = integrator.opts.internalopnorm, adaptive = alg.adaptive_krylov, tau = (alg.adaptive_krylov ? 0.0 : dt), - m = min(alg.m, size(J, 1))) + m = min(alg.m, size(J, 1)), + ) # Krylov for f(uprev) B1 = [zero(f0) f0] @@ -751,7 +796,7 @@ function perform_step!(integrator, cache::Exp4ConstantCache, repeat_step = false OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function perform_step!(integrator, cache::Exp4Cache, repeat_step = false) @@ -761,10 +806,12 @@ function perform_step!(integrator, cache::Exp4Cache, repeat_step = false) alg = unwrap_alg(integrator, true) f0 = integrator.fsalfirst # f(u0) is fsaled ts = [dt / 3, 2dt / 3, dt] - kwargs = (tol = integrator.opts.reltol, iop = alg.iop, + kwargs = ( + tol = integrator.opts.reltol, iop = alg.iop, opnorm = integrator.opts.internalopnorm, adaptive = alg.adaptive_krylov, tau = (alg.adaptive_krylov ? 0.0 : dt), - m = min(alg.m, size(J, 1)), caches = KsCache) + m = min(alg.m, size(J, 1)), caches = KsCache, + ) # Krylov for f(uprev) B[:, 2] .= f0 @@ -773,14 +820,14 @@ function perform_step!(integrator, cache::Exp4Cache, repeat_step = false) K[:, i] ./= ts[i] end mul!(rtmp, K, [-7 / 300, 97 / 150, -37 / 300]) # rtmp is now w4 - @muladd @.. broadcast=false tmp=uprev+dt*rtmp # tmp is now u4 + @muladd @.. broadcast = false tmp = uprev + dt * rtmp # tmp is now u4 mul!(rtmp2, J, rtmp) f(rtmp, tmp, p, t + dt) # TODO: what should be the time? OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @muladd @.. broadcast=false @view(B[:, 2])=rtmp-f0-dt*rtmp2 # B[:,2] is now d4 + @muladd @.. broadcast = false @view(B[:, 2]) = rtmp - f0 - dt * rtmp2 # B[:,2] is now d4 # Partially update entities that use k1, k2, k3 mul!(rtmp, K, [59 / 300, -7 / 75, 269 / 300]) # rtmp is now w7 - @muladd @.. broadcast=false u=uprev+dt*@view(K[:, 3]) + @muladd @.. broadcast = false u = uprev + dt * @view(K[:, 3]) # Krylov for the first remainder d4 phiv_timestep!(K, ts, J, B; kwargs...) @inbounds for i in 1:3 @@ -788,11 +835,11 @@ function perform_step!(integrator, cache::Exp4Cache, repeat_step = false) end mul!(rtmp2, K, [2 / 3, 2 / 3, 2 / 3]) rtmp .+= rtmp2 # w7 fully updated - @muladd @.. broadcast=false tmp=uprev+dt*rtmp # tmp is now u7 + @muladd @.. broadcast = false tmp = uprev + dt * rtmp # tmp is now u7 mul!(rtmp2, J, rtmp) f(rtmp, tmp, p, t + dt) # TODO: what should be the time? OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @muladd @.. broadcast=false @view(B[:, 2])=rtmp-f0-dt*rtmp2 # B[:,2] is now d7 + @muladd @.. broadcast = false @view(B[:, 2]) = rtmp - f0 - dt * rtmp2 # B[:,2] is now d7 # Partially update entities that use k4, k5, k6 mul!(rtmp, K, [1.0, -4 / 3, 1.0]) axpy!(dt, rtmp, u) @@ -804,7 +851,7 @@ function perform_step!(integrator, cache::Exp4Cache, repeat_step = false) # Update integrator state f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # integrator.k is automatically set due to aliasing end @@ -813,10 +860,12 @@ function perform_step!(integrator, cache::EPIRK4s3AConstantCache, repeat_step = J = calc_J(integrator, cache) alg = unwrap_alg(integrator, true) f0 = integrator.fsalfirst # f(uprev) is fsaled - kwargs = (tol = integrator.opts.reltol, iop = alg.iop, + kwargs = ( + tol = integrator.opts.reltol, iop = alg.iop, opnorm = integrator.opts.internalopnorm, adaptive = alg.adaptive_krylov, tau = (alg.adaptive_krylov ? 0.0 : dt), - m = min(alg.m, size(J, 1))) + m = min(alg.m, size(J, 1)), + ) # Compute U2 and U3 vertically K = phiv_timestep([dt / 2, 2dt / 3], J, [zero(f0) f0]; kwargs...) @@ -838,7 +887,7 @@ function perform_step!(integrator, cache::EPIRK4s3AConstantCache, repeat_step = OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function perform_step!(integrator, cache::EPIRK4s3ACache, repeat_step = false) @@ -847,26 +896,28 @@ function perform_step!(integrator, cache::EPIRK4s3ACache, repeat_step = false) calc_J!(J, integrator, cache) alg = unwrap_alg(integrator, true) f0 = integrator.fsalfirst # f(u0) is fsaled - kwargs = (tol = integrator.opts.reltol, iop = alg.iop, + kwargs = ( + tol = integrator.opts.reltol, iop = alg.iop, opnorm = integrator.opts.internalopnorm, adaptive = alg.adaptive_krylov, tau = (alg.adaptive_krylov ? 0.0 : dt), - m = min(alg.m, size(J, 1)), caches = KsCache) + m = min(alg.m, size(J, 1)), caches = KsCache, + ) # Compute U2 and U3 vertically B[:, 2] .= f0 phiv_timestep!(K, [dt / 2, 2dt / 3], J, @view(B[:, 1:2]); kwargs...) ## U2 and R2 - @.. broadcast=false tmp=uprev+@view(K[:, 1]) # tmp is now U2 + @.. broadcast = false tmp = uprev + @view(K[:, 1]) # tmp is now U2 f(rtmp, tmp, p, t + dt / 2) mul!(rtmp2, J, @view(K[:, 1])) - @.. broadcast=false rtmp=rtmp-f0-rtmp2 # rtmp is now R2 + @.. broadcast = false rtmp = rtmp - f0 - rtmp2 # rtmp is now R2 B[:, 4] .= (32 / dt^2) * rtmp B[:, 5] .= (-144 / dt^3) * rtmp ## U3 and R3 - @.. broadcast=false tmp=uprev+@view(K[:, 2]) # tmp is now U3 + @.. broadcast = false tmp = uprev + @view(K[:, 2]) # tmp is now U3 f(rtmp, tmp, p, t + 2dt / 3) mul!(rtmp2, J, @view(K[:, 2])) - @.. broadcast=false rtmp=rtmp-f0-rtmp2 # rtmp is now R3 + @.. broadcast = false rtmp = rtmp - f0 - rtmp2 # rtmp is now R3 B[:, 4] .-= (13.5 / dt^2) * rtmp B[:, 5] .+= (81 / dt^3) * rtmp OrdinaryDiffEqCore.increment_nf!(integrator.stats, 2) @@ -874,11 +925,11 @@ function perform_step!(integrator, cache::EPIRK4s3ACache, repeat_step = false) # Update u du = @view(K[:, 1]) phiv_timestep!(du, dt, J, B; kwargs...) - @.. broadcast=false u=uprev+du + @.. broadcast = false u = uprev + du # Update integrator state f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # integrator.k is automatically set due to aliasing end @@ -887,10 +938,12 @@ function perform_step!(integrator, cache::EPIRK4s3BConstantCache, repeat_step = J = calc_J(integrator, cache) alg = unwrap_alg(integrator, true) f0 = integrator.fsalfirst # f(uprev) is fsaled - kwargs = (tol = integrator.opts.reltol, iop = alg.iop, + kwargs = ( + tol = integrator.opts.reltol, iop = alg.iop, opnorm = integrator.opts.internalopnorm, adaptive = alg.adaptive_krylov, tau = (alg.adaptive_krylov ? 0.0 : dt), - m = min(alg.m, size(J, 1))) + m = min(alg.m, size(J, 1)), + ) # Compute U2 and U3 vertically K = phiv_timestep([dt / 2, 3dt / 4], J, [zero(f0) zero(f0) f0]; kwargs...) @@ -914,7 +967,7 @@ function perform_step!(integrator, cache::EPIRK4s3BConstantCache, repeat_step = OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function perform_step!(integrator, cache::EPIRK4s3BCache, repeat_step = false) @@ -923,10 +976,12 @@ function perform_step!(integrator, cache::EPIRK4s3BCache, repeat_step = false) calc_J!(J, integrator, cache) alg = unwrap_alg(integrator, true) f0 = integrator.fsalfirst # f(u0) is fsaled - kwargs = (tol = integrator.opts.reltol, iop = alg.iop, + kwargs = ( + tol = integrator.opts.reltol, iop = alg.iop, opnorm = integrator.opts.internalopnorm, adaptive = alg.adaptive_krylov, tau = (alg.adaptive_krylov ? 0.0 : dt), - m = min(alg.m, size(J, 1)), caches = KsCache) + m = min(alg.m, size(J, 1)), caches = KsCache, + ) # Compute U2 and U3 vertically fill!(@view(B[:, 2]), zero(eltype(B))) @@ -935,17 +990,17 @@ function perform_step!(integrator, cache::EPIRK4s3BCache, repeat_step = false) K[:, 1] .*= 8 / (3 * dt) K[:, 2] .*= 16 / (9 * dt) ## U2 and R2 - @.. broadcast=false tmp=uprev+@view(K[:, 1]) # tmp is now U2 + @.. broadcast = false tmp = uprev + @view(K[:, 1]) # tmp is now U2 f(rtmp, tmp, p, t + dt / 2) mul!(rtmp2, J, @view(K[:, 1])) - @.. broadcast=false rtmp=rtmp-f0-rtmp2 # rtmp is now R2 + @.. broadcast = false rtmp = rtmp - f0 - rtmp2 # rtmp is now R2 B[:, 4] .= (54 / dt^2) * rtmp B[:, 5] .= (-324 / dt^3) * rtmp ## U3 and R3 - @.. broadcast=false tmp=uprev+@view(K[:, 2]) # tmp is now U3 + @.. broadcast = false tmp = uprev + @view(K[:, 2]) # tmp is now U3 f(rtmp, tmp, p, t + 3dt / 4) mul!(rtmp2, J, @view(K[:, 2])) - @.. broadcast=false rtmp=rtmp-f0-rtmp2 # rtmp is now R3 + @.. broadcast = false rtmp = rtmp - f0 - rtmp2 # rtmp is now R3 B[:, 4] .-= (16 / dt^2) * rtmp B[:, 5] .+= (144 / dt^3) * rtmp OrdinaryDiffEqCore.increment_nf!(integrator.stats, 2) @@ -955,11 +1010,11 @@ function perform_step!(integrator, cache::EPIRK4s3BCache, repeat_step = false) B[:, 2] .= f0 du = @view(K[:, 1]) phiv_timestep!(du, dt, J, B; kwargs...) - @.. broadcast=false u=uprev+du + @.. broadcast = false u = uprev + du # Update integrator state f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # integrator.k is automatically set due to aliasing end @@ -968,10 +1023,12 @@ function perform_step!(integrator, cache::EPIRK5s3ConstantCache, repeat_step = f J = calc_J(integrator, cache) alg = unwrap_alg(integrator, true) f0 = integrator.fsalfirst # f(uprev) is fsaled - kwargs = (tol = integrator.opts.reltol, iop = alg.iop, + kwargs = ( + tol = integrator.opts.reltol, iop = alg.iop, opnorm = integrator.opts.internalopnorm, adaptive = alg.adaptive_krylov, tau = (alg.adaptive_krylov ? 0.0 : dt), - m = min(alg.m, size(J, 1))) + m = min(alg.m, size(J, 1)), + ) # Compute U2 horizontally B = fill(zero(eltype(f0)), length(f0), 4) @@ -1003,7 +1060,7 @@ function perform_step!(integrator, cache::EPIRK5s3ConstantCache, repeat_step = f OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function perform_step!(integrator, cache::EPIRK5s3Cache, repeat_step = false) @@ -1012,10 +1069,12 @@ function perform_step!(integrator, cache::EPIRK5s3Cache, repeat_step = false) calc_J!(J, integrator, cache) alg = unwrap_alg(integrator, true) f0 = integrator.fsalfirst # f(u0) is fsaled - kwargs = (tol = integrator.opts.reltol, iop = alg.iop, + kwargs = ( + tol = integrator.opts.reltol, iop = alg.iop, opnorm = integrator.opts.internalopnorm, adaptive = alg.adaptive_krylov, tau = (alg.adaptive_krylov ? 0.0 : dt), - m = min(alg.m, size(J, 1)), caches = KsCache) + m = min(alg.m, size(J, 1)), caches = KsCache, + ) # Compute U2 horizontally fill!(@view(B[:, 2]), zero(eltype(B))) @@ -1023,11 +1082,11 @@ function perform_step!(integrator, cache::EPIRK5s3Cache, repeat_step = false) B[:, 4] .= (-3025 / (192 * dt^2)) .* f0 phiv_timestep!(k, 48dt / 55, J, @view(B[:, 1:4]); kwargs...) ## Compute R2 - @.. broadcast=false tmp=uprev+k # tmp is now U2 + @.. broadcast = false tmp = uprev + k # tmp is now U2 f(rtmp, tmp, p, t + 48dt / 55) mul!(rtmp2, J, k) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false rtmp=rtmp-f0-rtmp2 # rtmp is now R2 + @.. broadcast = false rtmp = rtmp - f0 - rtmp2 # rtmp is now R2 # Compute U3 horizontally B[:, 2] .= (53 / 5) .* f0 @@ -1040,21 +1099,21 @@ function perform_step!(integrator, cache::EPIRK5s3Cache, repeat_step = false) B[:, 4] .= (-166375 / (61056 * dt^2)) .* rtmp B[:, 5] .= (499125 / (27136 * dt^3)) .* rtmp ## Compute R3 and update B - @.. broadcast=false tmp=uprev+k # tmp is now U3 + @.. broadcast = false tmp = uprev + k # tmp is now U3 f(rtmp, tmp, p, t + 4dt / 9) mul!(rtmp2, J, k) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false rtmp=rtmp-f0-rtmp2 # rtmp is now R3 + @.. broadcast = false rtmp = rtmp - f0 - rtmp2 # rtmp is now R3 B[:, 4] .+= (2187 / (106 * dt^2)) .* rtmp B[:, 5] .-= (2187 / (106 * dt^3)) .* rtmp # Update u phiv_timestep!(k, dt, J, B; kwargs...) - @.. broadcast=false u=uprev+k + @.. broadcast = false u = uprev + k # Update integrator state f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # integrator.k is automatically set due to aliasing end @@ -1063,10 +1122,12 @@ function perform_step!(integrator, cache::EXPRB53s3ConstantCache, repeat_step = J = calc_J(integrator, cache) alg = unwrap_alg(integrator, true) f0 = integrator.fsalfirst # f(uprev) is fsaled - kwargs = (tol = integrator.opts.reltol, iop = alg.iop, + kwargs = ( + tol = integrator.opts.reltol, iop = alg.iop, opnorm = integrator.opts.internalopnorm, adaptive = alg.adaptive_krylov, tau = (alg.adaptive_krylov ? 0.0 : dt), - m = min(alg.m, size(J, 1))) + m = min(alg.m, size(J, 1)), + ) # Compute the first group for U2 and U3 B = [zero(f0) f0] @@ -1095,7 +1156,7 @@ function perform_step!(integrator, cache::EXPRB53s3ConstantCache, repeat_step = OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function perform_step!(integrator, cache::EXPRB53s3Cache, repeat_step = false) @@ -1104,21 +1165,23 @@ function perform_step!(integrator, cache::EXPRB53s3Cache, repeat_step = false) calc_J!(J, integrator, cache) alg = unwrap_alg(integrator, true) f0 = integrator.fsalfirst # f(u0) is fsaled - kwargs = (tol = integrator.opts.reltol, iop = alg.iop, + kwargs = ( + tol = integrator.opts.reltol, iop = alg.iop, opnorm = integrator.opts.internalopnorm, adaptive = alg.adaptive_krylov, tau = (alg.adaptive_krylov ? 0.0 : dt), - m = min(alg.m, size(J, 1)), caches = KsCache) + m = min(alg.m, size(J, 1)), caches = KsCache, + ) # Compute the first group for U2 and U3 B[:, 2] .= f0 phiv_timestep!(K, [dt / 2, 9dt / 10], J, @view(B[:, 1:2]); kwargs...) ## U2 and R2 - @.. broadcast=false tmp=uprev+@view(K[:, 1]) # tmp is now U2 + @.. broadcast = false tmp = uprev + @view(K[:, 1]) # tmp is now U2 f(rtmp, tmp, p, t + dt / 2) mul!(rtmp2, J, @view(K[:, 1])) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false rtmp=rtmp-f0-rtmp2 # rtmp is now R2 - @.. broadcast=false tmp=uprev+@view(K[:, 2]) # tmp is now U3 (partially) + @.. broadcast = false rtmp = rtmp - f0 - rtmp2 # rtmp is now R2 + @.. broadcast = false tmp = uprev + @view(K[:, 2]) # tmp is now U3 (partially) # Compute the second group for U3 fill!(@view(B[:, 2]), zero(eltype(B))) @@ -1134,7 +1197,7 @@ function perform_step!(integrator, cache::EXPRB53s3Cache, repeat_step = false) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) tmp .-= uprev mul!(rtmp2, J, tmp) - @.. broadcast=false rtmp=rtmp-f0-rtmp2 # rtmp is now R3 + @.. broadcast = false rtmp = rtmp - f0 - rtmp2 # rtmp is now R3 ## Update B using R3 B[:, 4] .-= (250 / (81 * dt^2)) * rtmp B[:, 5] .+= (500 / (27 * dt^3)) * rtmp @@ -1142,11 +1205,11 @@ function perform_step!(integrator, cache::EXPRB53s3Cache, repeat_step = false) # Update u du = @view(K[:, 1]) phiv_timestep!(du, dt, J, B; kwargs...) - @.. broadcast=false u=uprev+du + @.. broadcast = false u = uprev + du # Update integrator state f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # integrator.k is automatically set due to aliasing end @@ -1155,10 +1218,12 @@ function perform_step!(integrator, cache::EPIRK5P1ConstantCache, repeat_step = f J = calc_J(integrator, cache) alg = unwrap_alg(integrator, true) f0 = integrator.fsalfirst # f(uprev) is fsaled - kwargs = (tol = integrator.opts.reltol, iop = alg.iop, + kwargs = ( + tol = integrator.opts.reltol, iop = alg.iop, opnorm = integrator.opts.internalopnorm, adaptive = alg.adaptive_krylov, tau = (alg.adaptive_krylov ? 0.0 : dt), - m = min(alg.m, size(J, 1))) + m = min(alg.m, size(J, 1)), + ) # Coefficients (scaling factors absorbed) g11 = 0.35129592695058193092 * dt @@ -1198,7 +1263,7 @@ function perform_step!(integrator, cache::EPIRK5P1ConstantCache, repeat_step = f OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function perform_step!(integrator, cache::EPIRK5P1Cache, repeat_step = false) @@ -1207,10 +1272,12 @@ function perform_step!(integrator, cache::EPIRK5P1Cache, repeat_step = false) calc_J!(J, integrator, cache) alg = unwrap_alg(integrator, true) f0 = integrator.fsalfirst # f(u0) is fsaled - kwargs = (tol = integrator.opts.reltol, iop = alg.iop, + kwargs = ( + tol = integrator.opts.reltol, iop = alg.iop, opnorm = integrator.opts.internalopnorm, adaptive = alg.adaptive_krylov, tau = (alg.adaptive_krylov ? 0.0 : dt), - m = min(alg.m, size(J, 1)), caches = KsCache) + m = min(alg.m, size(J, 1)), caches = KsCache, + ) # Coefficients (scaling factors absorbed) g11 = 0.35129592695058193092 * dt @@ -1226,15 +1293,15 @@ function perform_step!(integrator, cache::EPIRK5P1Cache, repeat_step = false) B[:, 2] .= f0 phiv_timestep!(K, [g11, g21, g31], J, @view(B[:, 1:2]); kwargs...) ## U1 and R1 - @.. broadcast=false tmp=uprev+@view(K[:, 1]) # tmp is now U1 + @.. broadcast = false tmp = uprev + @view(K[:, 1]) # tmp is now U1 f(rtmp, tmp, p, t + g11) mul!(rtmp2, J, @view(K[:, 1])) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false rtmp=rtmp-f0-rtmp2 # rtmp is now R1 - @.. broadcast=false tmp=uprev+@view(K[:, 2]) # partially update U2 (stored tmp) - @.. broadcast=false u=uprev+@view(K[:, 3]) # partially update u + @.. broadcast = false rtmp = rtmp - f0 - rtmp2 # rtmp is now R1 + @.. broadcast = false tmp = uprev + @view(K[:, 2]) # partially update U2 (stored tmp) + @.. broadcast = false u = uprev + @view(K[:, 3]) # partially update u B[:, 2] .= rtmp - @.. broadcast=false @view(B[:, 4])=(-2)*rtmp + @.. broadcast = false @view(B[:, 4]) = (-2) * rtmp # Compute the second column (R1) k = @view(K[:, 1]) @@ -1245,7 +1312,7 @@ function perform_step!(integrator, cache::EPIRK5P1Cache, repeat_step = false) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) tmp .-= uprev mul!(rtmp2, J, tmp) - @.. broadcast=false rtmp=rtmp-f0-rtmp2 # rtmp is now R2 + @.. broadcast = false rtmp = rtmp - f0 - rtmp2 # rtmp is now R2 axpy!(b2, k, u) # partially update u B[:, 4] .+= rtmp # is now dR @@ -1256,7 +1323,7 @@ function perform_step!(integrator, cache::EPIRK5P1Cache, repeat_step = false) # Update integrator state f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # integrator.k is automatically set due to aliasing end @@ -1265,14 +1332,16 @@ function perform_step!(integrator, cache::EPIRK5P2ConstantCache, repeat_step = f J = calc_J(integrator, cache) alg = unwrap_alg(integrator, true) f0 = integrator.fsalfirst # f(uprev) is fsaled - kwargs = (tol = integrator.opts.reltol, iop = alg.iop, + kwargs = ( + tol = integrator.opts.reltol, iop = alg.iop, opnorm = integrator.opts.internalopnorm, adaptive = alg.adaptive_krylov, tau = (alg.adaptive_krylov ? 0.0 : dt), - m = min(alg.m, size(J, 1))) + m = min(alg.m, size(J, 1)), + ) # Coefficients (scaling factors absorbed) g11 = 0.46629408528088195806 * dt - g21 = 0.88217912653363865140 * dt # g22 = g32 + g21 = 0.8821791265336386514 * dt # g22 = g32 g31 = dt g32 = 0.92074916488140031449 * dt g33 = 0.79791561832664517267 * dt @@ -1310,7 +1379,7 @@ function perform_step!(integrator, cache::EPIRK5P2ConstantCache, repeat_step = f OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function perform_step!(integrator, cache::EPIRK5P2Cache, repeat_step = false) @@ -1319,14 +1388,16 @@ function perform_step!(integrator, cache::EPIRK5P2Cache, repeat_step = false) calc_J!(J, integrator, cache) alg = unwrap_alg(integrator, true) f0 = integrator.fsalfirst # f(u0) is fsaled - kwargs = (tol = integrator.opts.reltol, iop = alg.iop, + kwargs = ( + tol = integrator.opts.reltol, iop = alg.iop, opnorm = integrator.opts.internalopnorm, adaptive = alg.adaptive_krylov, tau = (alg.adaptive_krylov ? 0.0 : dt), - m = min(alg.m, size(J, 1)), caches = KsCache) + m = min(alg.m, size(J, 1)), caches = KsCache, + ) # Coefficients (scaling factors absorbed) g11 = 0.46629408528088195806 * dt - g21 = 0.88217912653363865140 * dt # g22 = g32 + g21 = 0.8821791265336386514 * dt # g22 = g32 g31 = dt g32 = 0.92074916488140031449 * dt g33 = 0.79791561832664517267 * dt @@ -1340,14 +1411,14 @@ function perform_step!(integrator, cache::EPIRK5P2Cache, repeat_step = false) B[:, 2] .= f0 phiv_timestep!(K, [g11, g21, g31], J, @view(B[:, 1:2]); kwargs...) ## U1 and R1 - @.. broadcast=false tmp=uprev+@view(K[:, 1]) # tmp is now U1 + @.. broadcast = false tmp = uprev + @view(K[:, 1]) # tmp is now U1 f(rtmp, tmp, p, t + g11) mul!(rtmp2, J, @view(K[:, 1])) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false rtmp=rtmp-f0-rtmp2 # rtmp is now R1 - @.. broadcast=false tmp=uprev+@view(K[:, 2]) # partially update U2 (stored in tmp) - @.. broadcast=false u=uprev+@view(K[:, 3]) # partially update u - @.. broadcast=false dR=-2rtmp # partially update dR + @.. broadcast = false rtmp = rtmp - f0 - rtmp2 # rtmp is now R1 + @.. broadcast = false tmp = uprev + @view(K[:, 2]) # partially update U2 (stored in tmp) + @.. broadcast = false u = uprev + @view(K[:, 3]) # partially update u + @.. broadcast = false dR = -2rtmp # partially update dR # Compute the second column (R1) fill!(@view(B[:, 2]), zero(eltype(B))) @@ -1360,20 +1431,20 @@ function perform_step!(integrator, cache::EPIRK5P2Cache, repeat_step = false) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) tmp .-= uprev mul!(rtmp2, J, tmp) - @.. broadcast=false rtmp=rtmp-f0-rtmp2 # rtmp is now R2 + @.. broadcast = false rtmp = rtmp - f0 - rtmp2 # rtmp is now R2 dR .+= rtmp # dR is now R2 - 2R1 axpy!(b2, k, u) # partially update u # Compute the third column (dR = R2 - 2R1) - @.. broadcast=false @view(B[:, 2])=b31*dR - @.. broadcast=false @view(B[:, 3])=b32*dR - @.. broadcast=false @view(B[:, 4])=b33*dR + @.. broadcast = false @view(B[:, 2]) = b31 * dR + @.. broadcast = false @view(B[:, 3]) = b32 * dR + @.. broadcast = false @view(B[:, 4]) = b33 * dR phiv_timestep!(k, g33, J, B; kwargs...) u .+= k # Update integrator state f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # integrator.k is automatically set due to aliasing end @@ -1385,19 +1456,25 @@ function perform_step!(integrator, cache::Exprb32ConstantCache, repeat_step = fa alg = unwrap_alg(integrator, true) F1 = integrator.fsalfirst - w1 = phiv(dt, A, F1, 3; m = min(alg.m, size(A, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + w1 = phiv( + dt, A, F1, 3; m = min(alg.m, size(A, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) U2 = uprev + dt * w1[:, 2] F2 = _compute_nl(f, U2, p, t + dt, A) + A * uprev OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - w2 = phiv(dt, A, F2, 3; m = min(alg.m, size(A, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + w2 = phiv( + dt, A, F2, 3; m = min(alg.m, size(A, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) u = uprev + dt * (w1[:, 2] - 2w1[:, 4] + 2w2[:, 4]) if integrator.opts.adaptive # error estimator for the imbedded method utilde = 2dt * (-w1[:, 4] + w2[:, 4]) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -1406,7 +1483,7 @@ function perform_step!(integrator, cache::Exprb32ConstantCache, repeat_step = fa OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function perform_step!(integrator, cache::Exprb32Cache, repeat_step = false) @@ -1421,16 +1498,18 @@ function perform_step!(integrator, cache::Exprb32Cache, repeat_step = false) # Krylov for F1 arnoldi!( Ks, J, F1; m = min(alg.m, size(J, 1)), opnorm = integrator.opts.internalopnorm, - iop = alg.iop) + iop = alg.iop + ) phiv!(w1, dt, Ks, 3; cache = phiv_cache) # Krylov for F2 - @muladd @.. broadcast=false tmp=uprev+dt*@view(w1[:, 2]) + @muladd @.. broadcast = false tmp = uprev + dt * @view(w1[:, 2]) _compute_nl!(F2, f, tmp, p, t + dt, J, rtmp) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) F2 .+= mul!(rtmp, J, uprev) arnoldi!( Ks, J, F2; m = min(alg.m, size(J, 1)), opnorm = integrator.opts.internalopnorm, - iop = alg.iop) + iop = alg.iop + ) phiv!(w2, dt, Ks, 3; cache = phiv_cache) # Update u u .= uprev @@ -1439,15 +1518,17 @@ function perform_step!(integrator, cache::Exprb32Cache, repeat_step = false) axpy!(2dt, @view(w2[:, 4]), u) if integrator.opts.adaptive # error estimator for the imbedded method - @views @.. broadcast=false utilde=(2*dt)*(-w1[:, 4]+w2[:, 4]) - calculate_residuals!(tmp, utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @views @.. broadcast = false utilde = (2 * dt) * (-w1[:, 4] + w2[:, 4]) + calculate_residuals!( + tmp, utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(tmp, t) end # Update integrator state f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # integrator.k is automatically set due to aliasing end @@ -1458,8 +1539,10 @@ function perform_step!(integrator, cache::Exprb43ConstantCache, repeat_step = fa Au = A * uprev F1 = integrator.fsalfirst - kwargs = (m = min(alg.m, size(A, 1)), opnorm = integrator.opts.internalopnorm, - iop = alg.iop) + kwargs = ( + m = min(alg.m, size(A, 1)), opnorm = integrator.opts.internalopnorm, + iop = alg.iop, + ) # Krylov on F1 (first column) Ks = arnoldi(A, F1; kwargs...) w1_half = phiv(dt / 2, Ks, 1) @@ -1475,13 +1558,17 @@ function perform_step!(integrator, cache::Exprb43ConstantCache, repeat_step = fa # Krylov on F3 (third column) w3 = phiv(dt, A, F3, 4; kwargs...) u = uprev + - dt * (w1[:, 2] - 14w1[:, 4] + 36w1[:, 5] + 16w2[:, 4] - 48w2[:, 5] - 2w3[:, 4] + - 12w3[:, 5]) + dt * ( + w1[:, 2] - 14w1[:, 4] + 36w1[:, 5] + 16w2[:, 4] - 48w2[:, 5] - 2w3[:, 4] + + 12w3[:, 5] + ) if integrator.opts.adaptive # error estimator for the imbedded method utilde = dt * (36w1[:, 5] - 48w2[:, 5] + 12w3[:, 5]) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -1490,7 +1577,7 @@ function perform_step!(integrator, cache::Exprb43ConstantCache, repeat_step = fa OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function perform_step!(integrator, cache::Exprb43Cache, repeat_step = false) @@ -1504,20 +1591,22 @@ function perform_step!(integrator, cache::Exprb43Cache, repeat_step = false) halfdt = dt / 2 Ks, phiv_cache, ws = KsCache w1_half, w1, w2, w3 = ws - kwargs = (m = min(alg.m, size(J, 1)), opnorm = integrator.opts.internalopnorm, - iop = alg.iop) + kwargs = ( + m = min(alg.m, size(J, 1)), opnorm = integrator.opts.internalopnorm, + iop = alg.iop, + ) # Krylov for F1 arnoldi!(Ks, J, F1; kwargs...) phiv!(w1_half, halfdt, Ks, 1; cache = phiv_cache) phiv!(w1, dt, Ks, 4; cache = phiv_cache) - @muladd @.. broadcast=false @views tmp = uprev + halfdt * w1_half[:, 2] # tmp is U2 + @muladd @.. broadcast = false @views tmp = uprev + halfdt * w1_half[:, 2] # tmp is U2 _compute_nl!(F2, f, tmp, p, t + halfdt, J, rtmp) F2 .+= Au OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # Krylov for F2 arnoldi!(Ks, J, F2; kwargs...) phiv!(w2, dt, Ks, 4; cache = phiv_cache) - @muladd @.. broadcast=false @views tmp = uprev + dt * w2[:, 2] # tmp is U3 + @muladd @.. broadcast = false @views tmp = uprev + dt * w2[:, 2] # tmp is U3 _compute_nl!(F3, f, tmp, p, t + dt, J, rtmp) F3 .+= Au OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) @@ -1525,20 +1614,22 @@ function perform_step!(integrator, cache::Exprb43Cache, repeat_step = false) arnoldi!(Ks, J, F3; kwargs...) phiv!(w3, dt, Ks, 4; cache = phiv_cache) # Update u - @views @.. broadcast=false rtmp=w1[:, 2]-14w1[:, 4]+36w1[:, 5]+16w2[:, 4]- - 48w2[:, 5]-2w3[:, 4]+12w3[:, 5] - @muladd @.. broadcast=false u=uprev+dt*rtmp + @views @.. broadcast = false rtmp = w1[:, 2] - 14w1[:, 4] + 36w1[:, 5] + 16w2[:, 4] - + 48w2[:, 5] - 2w3[:, 4] + 12w3[:, 5] + @muladd @.. broadcast = false u = uprev + dt * rtmp if integrator.opts.adaptive - @views @.. broadcast=false rtmp=36w1[:, 5]-48w2[:, 5]+12w3[:, 5] - @.. broadcast=false utilde=dt*rtmp - calculate_residuals!(tmp, utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @views @.. broadcast = false rtmp = 36w1[:, 5] - 48w2[:, 5] + 12w3[:, 5] + @.. broadcast = false utilde = dt * rtmp + calculate_residuals!( + tmp, utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(tmp, t) end # Update integrator state f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # integrator.k is automatically set due to aliasing end @@ -1560,7 +1651,7 @@ function initialize!(integrator, cache::ETD2ConstantCache) rate_prototype = lin integrator.fsallast = ETD2Fsal(rate_prototype) integrator.k[1] = lin + nl - integrator.k[2] = zero(rate_prototype) + return integrator.k[2] = zero(rate_prototype) end function perform_step!(integrator, cache::ETD2ConstantCache, repeat_step = false) @@ -1585,7 +1676,7 @@ function perform_step!(integrator, cache::ETD2ConstantCache, repeat_step = false integrator.k[2] = lin + nl integrator.fsallast.lin = lin integrator.fsallast.nl = nl - integrator.fsallast.nlprev = nlprev + return integrator.fsallast.nlprev = nlprev end function initialize!(integrator, cache::ETD2Cache) @@ -1602,24 +1693,24 @@ function initialize!(integrator, cache::ETD2Cache) # Avoid undefined entries if k is an array of arrays integrator.k[1] = lin + nl - integrator.k[2] = zero(rate_prototype) + return integrator.k[2] = zero(rate_prototype) end function perform_step!(integrator, cache::ETD2Cache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator (; lin, nl, nlprev) = integrator.fsalfirst (; utmp, rtmp1, rtmp2, exphA, phihA, B1, B0) = cache - @.. broadcast=false integrator.k[1]=lin+nl + @.. broadcast = false integrator.k[1] = lin + nl if integrator.iter == 1 # ETD1 for initial step mul!(utmp, exphA, uprev) mul!(rtmp1, phihA, nl) - @muladd @.. broadcast=false u=utmp+dt*rtmp1 + @muladd @.. broadcast = false u = utmp + dt * rtmp1 else mul!(utmp, exphA, uprev) mul!(rtmp1, B1, nl) mul!(rtmp2, B0, nlprev) - @muladd @.. broadcast=false u=utmp+dt*(rtmp1+rtmp2) + @muladd @.. broadcast = false u = utmp + dt * (rtmp1 + rtmp2) end # Push the fsal at t+dt @@ -1629,5 +1720,5 @@ function perform_step!(integrator, cache::ETD2Cache, repeat_step = false) f.f2(fsallast.nl, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.stats.nf2 += 1 - @.. broadcast=false integrator.k[2]=fsallast.lin+fsallast.nl + return @.. broadcast = false integrator.k[2] = fsallast.lin + fsallast.nl end diff --git a/lib/OrdinaryDiffEqExponentialRK/test/jet.jl b/lib/OrdinaryDiffEqExponentialRK/test/jet.jl index 8af9662860..13341a5599 100644 --- a/lib/OrdinaryDiffEqExponentialRK/test/jet.jl +++ b/lib/OrdinaryDiffEqExponentialRK/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqExponentialRK, target_defined_modules = true, mode = :typo) + OrdinaryDiffEqExponentialRK, target_defined_modules = true, mode = :typo + ) end diff --git a/lib/OrdinaryDiffEqExponentialRK/test/linear_nonlinear_convergence_tests.jl b/lib/OrdinaryDiffEqExponentialRK/test/linear_nonlinear_convergence_tests.jl index 0cc90ea513..64c94cc606 100644 --- a/lib/OrdinaryDiffEqExponentialRK/test/linear_nonlinear_convergence_tests.jl +++ b/lib/OrdinaryDiffEqExponentialRK/test/linear_nonlinear_convergence_tests.jl @@ -7,25 +7,27 @@ using OrdinaryDiffEqCore: alg_order μ = 1.01 linnonlin_f2 = (u, p, t) -> μ * u linnonlin_f1 = ScalarOperator(μ) - linnonlin_fun = SplitFunction(linnonlin_f1, linnonlin_f2; - analytic = (u0, p, t) -> u0 .* exp.(2μ * t)) + linnonlin_fun = SplitFunction( + linnonlin_f1, linnonlin_f2; + analytic = (u0, p, t) -> u0 .* exp.(2μ * t) + ) prob = SplitODEProblem(linnonlin_fun, 1 / 2, (0.0, 1.0)) Random.seed!(100) dts = 1 ./ 2 .^ (7:-1:4) #14->7 good plot for Alg in [ - LawsonEuler, - NorsettEuler, - ETDRK2, - ETDRK3, - ETDRK4, - HochOst4, - ETD2, - KenCarp3, - CFNLIRK3 - ] + LawsonEuler, + NorsettEuler, + ETDRK2, + ETDRK3, + ETDRK4, + HochOst4, + ETD2, + KenCarp3, + CFNLIRK3, + ] sim = test_convergence(dts, prob, Alg()) - @test sim.𝒪est[:l2]≈alg_order(Alg()) atol=0.2 + @test sim.𝒪est[:l2] ≈ alg_order(Alg()) atol = 0.2 end # Dense test @@ -40,33 +42,35 @@ end A = [2.0 -1.0; -1.0 2.0] linnonlin_f1 = MatrixOperator(A) linnonlin_f2 = (du, u, p, t) -> du .= μ .* u - linnonlin_fun_iip = SplitFunction(linnonlin_f1, linnonlin_f2; - analytic = (u0, p, t) -> exp((A + μ * I) * t) * u0) + linnonlin_fun_iip = SplitFunction( + linnonlin_f1, linnonlin_f2; + analytic = (u0, p, t) -> exp((A + μ * I) * t) * u0 + ) prob = SplitODEProblem(linnonlin_fun_iip, u0, (0.0, 1.0)) dts = 1 ./ 2 .^ (8:-1:4) for Alg in [ - LawsonEuler(), - NorsettEuler(), - ETDRK2(), - ETDRK3(), - ETDRK4(), - HochOst4(), - ETD2() - ] + LawsonEuler(), + NorsettEuler(), + ETDRK2(), + ETDRK3(), + ETDRK4(), + HochOst4(), + ETD2(), + ] sim = test_convergence(dts, prob, Alg) - @test sim.𝒪est[:l2]≈alg_order(Alg) atol=0.15 + @test sim.𝒪est[:l2] ≈ alg_order(Alg) atol = 0.15 end dts = 1 ./ 2 .^ (13:-1:9) Alg = KenCarp3(linsolve = LinearSolve.KrylovJL_GMRES()) - sim = test_convergence(dts, prob, Alg, reltol = 1e-16) - @test sim.𝒪est[:l2]≈alg_order(Alg) atol=0.5 + sim = test_convergence(dts, prob, Alg, reltol = 1.0e-16) + @test sim.𝒪est[:l2] ≈ alg_order(Alg) atol = 0.5 dts = 1 ./ 2 .^ (8:-1:4) sim = test_convergence(dts, prob, ETDRK4(), dense_errors = true) - @test sim.𝒪est[:l2]≈4 atol=0.1 - @test sim.𝒪est[:L2]≈4 atol=0.1 + @test sim.𝒪est[:l2] ≈ 4 atol = 0.1 + @test sim.𝒪est[:L2] ≈ 4 atol = 0.1 end @info "CFNLIRK3() is broken" @@ -83,17 +87,19 @@ end tspan = (0.0, 1.0) prob = ODEProblem(fun, u0, tspan) # Setup approximate solution - test_setup = Dict(:alg => Vern9(), :reltol => 1e-16, :abstol => 1e-16) + test_setup = Dict(:alg => Vern9(), :reltol => 1.0e-16, :abstol => 1.0e-16) # Convergence simulation dts = 1 ./ 2 .^ (7:-1:4) Algs = [Exp4, EPIRK4s3A, EPIRK4s3B, EPIRK5s3, EXPRB53s3, EPIRK5P1, EPIRK5P2] for Alg in Algs - sim = analyticless_test_convergence(dts, prob, Alg(adaptive_krylov = false), - test_setup) + sim = analyticless_test_convergence( + dts, prob, Alg(adaptive_krylov = false), + test_setup + ) if Alg == EPIRK5s3 - @test_broken sim.𝒪est[:l2]≈alg_order(Alg()) atol=0.1 + @test_broken sim.𝒪est[:l2] ≈ alg_order(Alg()) atol = 0.1 else - @test sim.𝒪est[:l2]≈alg_order(Alg()) atol=0.1 + @test sim.𝒪est[:l2] ≈ alg_order(Alg()) atol = 0.1 end end end @@ -111,17 +117,19 @@ end tspan = (0.0, 1.0) prob = ODEProblem(fun, u0, tspan) # Setup approximate solution - test_setup = Dict(:alg => Vern9(), :reltol => 1e-16, :abstol => 1e-16) + test_setup = Dict(:alg => Vern9(), :reltol => 1.0e-16, :abstol => 1.0e-16) # Convergence simulation dts = 1 ./ 2 .^ (7:-1:4) Algs = [Exp4, EPIRK4s3A, EPIRK4s3B, EPIRK5s3, EXPRB53s3, EPIRK5P1, EPIRK5P2] for Alg in Algs - sim = analyticless_test_convergence(dts, prob, Alg(adaptive_krylov = false), - test_setup) + sim = analyticless_test_convergence( + dts, prob, Alg(adaptive_krylov = false), + test_setup + ) if Alg == EPIRK5s3 - @test_broken sim.𝒪est[:l2]≈alg_order(Alg()) atol=0.1 + @test_broken sim.𝒪est[:l2] ≈ alg_order(Alg()) atol = 0.1 else - @test sim.𝒪est[:l2]≈alg_order(Alg()) atol=0.1 + @test sim.𝒪est[:l2] ≈ alg_order(Alg()) atol = 0.1 end end end @@ -140,19 +148,23 @@ end prob = ODEProblem(fun, u0, tspan) prob_ip = ODEProblem(fun_ip, u0, tspan) # Setup approximate solution - test_setup = Dict(:alg => Vern9(), :reltol => 1e-16, :abstol => 1e-16) + test_setup = Dict(:alg => Vern9(), :reltol => 1.0e-16, :abstol => 1.0e-16) # Convergence simulation dts = 1 ./ 2 .^ (7:-1:4) sim = analyticless_test_convergence(dts, prob, HochOst4(krylov = true), test_setup) - @test sim.𝒪est[:l2]≈4 atol=0.1 + @test sim.𝒪est[:l2] ≈ 4 atol = 0.1 sim = analyticless_test_convergence(dts, prob_ip, HochOst4(krylov = true), test_setup) - @test sim.𝒪est[:l2]≈4 atol=0.1 - sim = analyticless_test_convergence(dts, prob, EPIRK5P1(adaptive_krylov = false), - test_setup) - @test sim.𝒪est[:l2]≈5 atol=0.1 - sim = analyticless_test_convergence(dts, prob_ip, EPIRK5P1(adaptive_krylov = false), - test_setup) - @test sim.𝒪est[:l2]≈5 atol=0.1 + @test sim.𝒪est[:l2] ≈ 4 atol = 0.1 + sim = analyticless_test_convergence( + dts, prob, EPIRK5P1(adaptive_krylov = false), + test_setup + ) + @test sim.𝒪est[:l2] ≈ 5 atol = 0.1 + sim = analyticless_test_convergence( + dts, prob_ip, EPIRK5P1(adaptive_krylov = false), + test_setup + ) + @test sim.𝒪est[:l2] ≈ 5 atol = 0.1 end @testset "Adaptive Exprb Out-of-place" begin @@ -167,13 +179,13 @@ end tspan = (0.0, 1.0) prob = ODEProblem(fun, u0, tspan) # Setup approximate solution - test_setup = Dict(:alg => Vern9(), :reltol => 1e-16, :abstol => 1e-16) + test_setup = Dict(:alg => Vern9(), :reltol => 1.0e-16, :abstol => 1.0e-16) # Convergence simulation dts = 1 ./ 2 .^ (7:-1:4) Algs = [Exprb32, Exprb43] for Alg in Algs sim = analyticless_test_convergence(dts, prob, Alg(), test_setup) - @test sim.𝒪est[:l2]≈alg_order(Alg()) atol=0.1 + @test sim.𝒪est[:l2] ≈ alg_order(Alg()) atol = 0.1 end end @@ -190,12 +202,12 @@ end tspan = (0.0, 1.0) prob = ODEProblem(fun, u0, tspan) # Setup approximate solution - test_setup = Dict(:alg => Vern9(), :reltol => 1e-16, :abstol => 1e-16) + test_setup = Dict(:alg => Vern9(), :reltol => 1.0e-16, :abstol => 1.0e-16) # Convergence simulation dts = 1 ./ 2 .^ (7:-1:4) Algs = [Exprb32, Exprb43] for Alg in Algs sim = analyticless_test_convergence(dts, prob, Alg(), test_setup) - @test sim.𝒪est[:l2]≈alg_order(Alg()) atol=0.1 + @test sim.𝒪est[:l2] ≈ alg_order(Alg()) atol = 0.1 end end diff --git a/lib/OrdinaryDiffEqExponentialRK/test/linear_nonlinear_krylov_tests.jl b/lib/OrdinaryDiffEqExponentialRK/test/linear_nonlinear_krylov_tests.jl index b9a5966dda..a4546f8055 100644 --- a/lib/OrdinaryDiffEqExponentialRK/test/linear_nonlinear_krylov_tests.jl +++ b/lib/OrdinaryDiffEqExponentialRK/test/linear_nonlinear_krylov_tests.jl @@ -26,7 +26,7 @@ let N = 20 @testset "Classical ExpRK - Low Order" begin dt = 0.01 - tol = 1e-3 + tol = 1.0e-3 Algs = [LawsonEuler, NorsettEuler, ETDRK2] for Alg in Algs sol = solve(prob, Alg(krylov = true, m = 20); dt = dt, reltol = tol) @@ -43,7 +43,7 @@ let N = 20 @testset "Classical ExpRK - High Order" begin dt = 0.05 - tol = 1e-5 + tol = 1.0e-5 Algs = [ETDRK3, ETDRK4, HochOst4] for Alg in Algs sol = solve(prob, Alg(krylov = true, m = 20); dt = dt, reltol = tol) @@ -60,7 +60,7 @@ let N = 20 @testset "EPIRK" begin dt = 0.05 - tol = 1e-5 + tol = 1.0e-5 Algs = [Exp4, EPIRK4s3A, EPIRK4s3B, EXPRB53s3, EPIRK5P1, EPIRK5P2] for Alg in Algs sol = solve(prob, Alg(); dt = dt, reltol = tol) @@ -98,13 +98,13 @@ let N = 20 end println("Exprb32, out-of-place") - regression_test(prob, Exprb32(m = N), 3e-4) + regression_test(prob, Exprb32(m = N), 3.0e-4) println("Exprb32, inplace") - regression_test(prob_ip, Exprb32(m = N), 3e-4) + regression_test(prob_ip, Exprb32(m = N), 3.0e-4) println("Exprb43, out-of-place") - regression_test(prob, Exprb43(m = N), 3e-4) + regression_test(prob, Exprb43(m = N), 3.0e-4) println("Exprb43, inplace") - regression_test(prob_ip, Exprb43(m = N), 3e-4) + regression_test(prob_ip, Exprb43(m = N), 3.0e-4) end end @@ -117,9 +117,11 @@ end du = ones(N - 1) A = spdiagm(-1 => du, 0 => dd, 1 => du) f = (u, p, t) -> A * u - exp_fun = ODEFunction(f; + exp_fun = ODEFunction( + f; jac = (u, p, t) -> A, - analytic = (u, p, t) -> exp(t * Matrix(A)) * u) + analytic = (u, p, t) -> exp(t * Matrix(A)) * u + ) prob = ODEProblem(exp_fun, u0, (0.0, 1.0)) sol = solve(prob, LawsonEuler(krylov = true, m = N); dt = 0.1) @test sol(1.0) ≈ exp_fun.analytic(u0, nothing, 1.0) diff --git a/lib/OrdinaryDiffEqExtrapolation/src/OrdinaryDiffEqExtrapolation.jl b/lib/OrdinaryDiffEqExtrapolation/src/OrdinaryDiffEqExtrapolation.jl index 8c2d9c6dfa..f65bc1df0e 100644 --- a/lib/OrdinaryDiffEqExtrapolation/src/OrdinaryDiffEqExtrapolation.jl +++ b/lib/OrdinaryDiffEqExtrapolation/src/OrdinaryDiffEqExtrapolation.jl @@ -1,31 +1,31 @@ module OrdinaryDiffEqExtrapolation import OrdinaryDiffEqCore: alg_order, alg_maximum_order, get_current_adaptive_order, - get_current_alg_order, calculate_residuals!, - accept_step_controller, - default_controller, beta2_default, beta1_default, gamma_default, - initialize!, perform_step!, @cache, unwrap_alg, - isthreaded, - step_accept_controller!, calculate_residuals, - OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, - reset_alg_dependent_opts!, AbstractController, - step_accept_controller!, step_reject_controller!, - OrdinaryDiffEqAdaptiveAlgorithm, - OrdinaryDiffEqAdaptiveImplicitAlgorithm, - alg_cache, CompiledFloats, @threaded, stepsize_controller!, - DEFAULT_PRECS, full_cache, qmin_default, - constvalue, PolyesterThreads, Sequential, BaseThreads, - _digest_beta1_beta2, timedepentdtmin, _unwrap_val, - _reshape, _vec, get_fsalfirstlast, generic_solver_docstring, - differentiation_rk_docstring, _bool_to_ADType, - _process_AD_choice, LinearAliasSpecifier + get_current_alg_order, calculate_residuals!, + accept_step_controller, + default_controller, beta2_default, beta1_default, gamma_default, + initialize!, perform_step!, @cache, unwrap_alg, + isthreaded, + step_accept_controller!, calculate_residuals, + OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, + reset_alg_dependent_opts!, AbstractController, + step_accept_controller!, step_reject_controller!, + OrdinaryDiffEqAdaptiveAlgorithm, + OrdinaryDiffEqAdaptiveImplicitAlgorithm, + alg_cache, CompiledFloats, @threaded, stepsize_controller!, + DEFAULT_PRECS, full_cache, qmin_default, + constvalue, PolyesterThreads, Sequential, BaseThreads, + _digest_beta1_beta2, timedepentdtmin, _unwrap_val, + _reshape, _vec, get_fsalfirstlast, generic_solver_docstring, + differentiation_rk_docstring, _bool_to_ADType, + _process_AD_choice, LinearAliasSpecifier using FastBroadcast, Polyester, MuladdMacro, RecursiveArrayTools, LinearSolve import OrdinaryDiffEqCore import FastPower import OrdinaryDiffEqDifferentiation: TimeDerivativeWrapper, UDerivativeWrapper, calc_J, - WOperator, TimeGradientWrapper, UJacobianWrapper, - build_grad_config, - build_jac_config, calc_J!, jacobian2W!, dolinsolve + WOperator, TimeGradientWrapper, UJacobianWrapper, + build_grad_config, + build_jac_config, calc_J!, jacobian2W!, dolinsolve import ADTypes: AutoForwardDiff, AbstractADType using Reexport @@ -37,15 +37,17 @@ include("controllers.jl") include("extrapolation_caches.jl") include("extrapolation_perform_step.jl") -@inline function SciMLBase.get_tmp_cache(integrator, +@inline function SciMLBase.get_tmp_cache( + integrator, alg::OrdinaryDiffEqImplicitExtrapolationAlgorithm, - cache::OrdinaryDiffEqMutableCache) - (cache.tmp, cache.utilde) + cache::OrdinaryDiffEqMutableCache + ) + return (cache.tmp, cache.utilde) end export AitkenNeville, ExtrapolationMidpointDeuflhard, ExtrapolationMidpointHairerWanner, - ImplicitEulerExtrapolation, - ImplicitDeuflhardExtrapolation, ImplicitHairerWannerExtrapolation, - ImplicitEulerBarycentricExtrapolation + ImplicitEulerExtrapolation, + ImplicitDeuflhardExtrapolation, ImplicitHairerWannerExtrapolation, + ImplicitEulerBarycentricExtrapolation end diff --git a/lib/OrdinaryDiffEqExtrapolation/src/alg_utils.jl b/lib/OrdinaryDiffEqExtrapolation/src/alg_utils.jl index ec2215e511..6a11919178 100644 --- a/lib/OrdinaryDiffEqExtrapolation/src/alg_utils.jl +++ b/lib/OrdinaryDiffEqExtrapolation/src/alg_utils.jl @@ -3,12 +3,15 @@ alg_maximum_order(alg::ExtrapolationMidpointDeuflhard) = 2(alg.max_order + 1) function get_current_adaptive_order( alg::OrdinaryDiffEqExtrapolationVarOrderVarStepAlgorithm, - cache) - cache.cur_order + cache + ) + return cache.cur_order end -function get_current_alg_order(alg::OrdinaryDiffEqExtrapolationVarOrderVarStepAlgorithm, - cache) - cache.cur_order +function get_current_alg_order( + alg::OrdinaryDiffEqExtrapolationVarOrderVarStepAlgorithm, + cache + ) + return cache.cur_order end get_current_alg_order(alg::ExtrapolationMidpointDeuflhard, cache) = 2(cache.n_curr + 1) get_current_alg_order(alg::ImplicitDeuflhardExtrapolation, cache) = 2(cache.n_curr + 1) @@ -22,8 +25,9 @@ get_current_adaptive_order(alg::ExtrapolationMidpointHairerWanner, cache) = 2cac get_current_adaptive_order(alg::ImplicitHairerWannerExtrapolation, cache) = 2cache.n_curr get_current_adaptive_order(alg::ImplicitEulerExtrapolation, cache) = cache.n_curr - 1 function get_current_adaptive_order( - alg::ImplicitEulerBarycentricExtrapolation, cache) - cache.n_curr - 2 + alg::ImplicitEulerBarycentricExtrapolation, cache + ) + return cache.n_curr - 2 end alg_maximum_order(alg::ImplicitDeuflhardExtrapolation) = 2(alg.max_order + 1) @@ -33,14 +37,17 @@ alg_maximum_order(alg::ImplicitEulerExtrapolation) = 2(alg.max_order + 1) alg_maximum_order(alg::ImplicitEulerBarycentricExtrapolation) = alg.max_order function default_controller( - alg::Union{ExtrapolationMidpointDeuflhard, + alg::Union{ + ExtrapolationMidpointDeuflhard, ImplicitDeuflhardExtrapolation, ExtrapolationMidpointHairerWanner, ImplicitHairerWannerExtrapolation, ImplicitEulerExtrapolation, - ImplicitEulerBarycentricExtrapolation}, + ImplicitEulerBarycentricExtrapolation, + }, cache, - qoldinit, _beta1 = nothing, _beta2 = nothing) + qoldinit, _beta1 = nothing, _beta2 = nothing + ) QT = typeof(qoldinit) beta1, beta2 = _digest_beta1_beta2(alg, cache, Val(QT), _beta1, _beta2) return ExtrapolationController(beta1) @@ -61,21 +68,21 @@ beta1_default(alg::ImplicitEulerExtrapolation, beta2) = 1 // (alg.init_order + 1 beta1_default(alg::ImplicitEulerBarycentricExtrapolation, beta2) = 1 // (alg.init_order - 1) function gamma_default(alg::ExtrapolationMidpointDeuflhard) - (1 // 4)^beta1_default(alg, beta2_default(alg)) + return (1 // 4)^beta1_default(alg, beta2_default(alg)) end function gamma_default(alg::ImplicitDeuflhardExtrapolation) - (1 // 4)^beta1_default(alg, beta2_default(alg)) + return (1 // 4)^beta1_default(alg, beta2_default(alg)) end function gamma_default(alg::ExtrapolationMidpointHairerWanner) - (65 // 100)^beta1_default(alg, beta2_default(alg)) + return (65 // 100)^beta1_default(alg, beta2_default(alg)) end function gamma_default(alg::ImplicitHairerWannerExtrapolation) - (65 // 100)^beta1_default(alg, beta2_default(alg)) + return (65 // 100)^beta1_default(alg, beta2_default(alg)) end function gamma_default(alg::ImplicitEulerExtrapolation) - (65 // 100)^beta1_default(alg, beta2_default(alg)) + return (65 // 100)^beta1_default(alg, beta2_default(alg)) end function gamma_default(alg::ImplicitEulerBarycentricExtrapolation) - (80 // 100)^beta1_default(alg, beta2_default(alg)) + return (80 // 100)^beta1_default(alg, beta2_default(alg)) end diff --git a/lib/OrdinaryDiffEqExtrapolation/src/algorithms.jl b/lib/OrdinaryDiffEqExtrapolation/src/algorithms.jl index b62fc80f16..c7d306c5b9 100644 --- a/lib/OrdinaryDiffEqExtrapolation/src/algorithms.jl +++ b/lib/OrdinaryDiffEqExtrapolation/src/algorithms.jl @@ -1,7 +1,7 @@ abstract type OrdinaryDiffEqExtrapolationVarOrderVarStepAlgorithm <: - OrdinaryDiffEqAdaptiveAlgorithm end +OrdinaryDiffEqAdaptiveAlgorithm end abstract type OrdinaryDiffEqImplicitExtrapolationAlgorithm{CS, AD, FDT, ST, CJ} <: - OrdinaryDiffEqAdaptiveImplicitAlgorithm{CS, AD, FDT, ST, CJ} end +OrdinaryDiffEqAdaptiveImplicitAlgorithm{CS, AD, FDT, ST, CJ} end reference = """@inproceedings{elrod2022parallelizing, title={Parallelizing explicit and implicit extrapolation methods for ordinary differential equations}, author={Elrod, Chris and Ma, Yingbo and Althaus, Konstantin and Rackauckas, Christopher and others}, @@ -27,7 +27,8 @@ reference = """@inproceedings{elrod2022parallelizing, min_order::Int = 1, init_order = 3, thread = OrdinaryDiffEq.False(), - """) + """ +) Base.@kwdef struct AitkenNeville{TO} <: OrdinaryDiffEqExtrapolationVarOrderVarStepAlgorithm max_order::Int = 10 min_order::Int = 1 @@ -54,9 +55,10 @@ Similar to Hairer's SEULEX.", init_order = 5, thread = OrdinaryDiffEq.False(), sequence = :harmonic - """) + """ +) struct ImplicitEulerExtrapolation{CS, AD, F, P, FDT, ST, CJ, TO} <: - OrdinaryDiffEqImplicitExtrapolationAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqImplicitExtrapolationAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F precs::P max_order::Int @@ -67,17 +69,21 @@ struct ImplicitEulerExtrapolation{CS, AD, F, P, FDT, ST, CJ, TO} <: autodiff::AD end -function ImplicitEulerExtrapolation(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function ImplicitEulerExtrapolation(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, max_order = 12, min_order = 3, init_order = 5, - threading = false, sequence = :harmonic) + threading = false, sequence = :harmonic + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - linsolve = (linsolve === nothing && - (threading == true || threading isa PolyesterThreads)) ? - RFLUFactorization(; thread = Val(false)) : linsolve + linsolve = ( + linsolve === nothing && + (threading == true || threading isa PolyesterThreads) + ) ? + RFLUFactorization(; thread = Val(false)) : linsolve min_order = max(3, min_order) init_order = max(min_order + 1, init_order) @@ -88,9 +94,9 @@ function ImplicitEulerExtrapolation(; chunk_size = Val{0}(), autodiff = AutoForw @warn "The range of extrapolation orders and/or the initial order given to the `ImplicitEulerExtrapolation` algorithm are not valid and have been changed: Minimal order: " * lpad(min_order, 2, " ") * " --> " * lpad(min_order, 2, " ") * - " + " Maximal order: " * lpad(max_order, 2, " ") * " --> " * lpad(max_order, 2, " ") * - " + " Initial order: " * lpad(init_order, 2, " ") * " --> " * lpad(init_order, 2, " ") end @@ -102,15 +108,20 @@ Initial order: " * lpad(init_order, 2, " ") * " --> " * lpad(init_order, 2, " ") :$(sequence) --> :harmonic" sequence = :harmonic end - ImplicitEulerExtrapolation{_unwrap_val(chunk_size), typeof(AD_choice), + return ImplicitEulerExtrapolation{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), - typeof(threading)}(linsolve, precs, max_order, min_order, + typeof(threading), + }( + linsolve, precs, max_order, min_order, init_order, - threading, sequence, AD_choice) + threading, sequence, AD_choice + ) end -@doc generic_solver_docstring("Midpoint extrapolation using Barycentric coordinates.", +@doc generic_solver_docstring( + "Midpoint extrapolation using Barycentric coordinates.", "ExtrapolationMidpointDeuflhard", "Parallelized Explicit Extrapolation Method.", reference, @@ -129,9 +140,10 @@ end thread = OrdinaryDiffEq.True(), sequence = :harmonic, sequence_factor = 2, - """) + """ +) struct ExtrapolationMidpointDeuflhard{TO} <: - OrdinaryDiffEqExtrapolationVarOrderVarStepAlgorithm + OrdinaryDiffEqExtrapolationVarOrderVarStepAlgorithm min_order::Int # Minimal extrapolation order init_order::Int # Initial extrapolation order max_order::Int # Maximal extrapolation order @@ -139,9 +151,11 @@ struct ExtrapolationMidpointDeuflhard{TO} <: threading::TO sequence_factor::Int # An even factor by which sequence is scaled for midpoint extrapolation end -function ExtrapolationMidpointDeuflhard(; min_order = 1, init_order = 5, max_order = 10, +function ExtrapolationMidpointDeuflhard(; + min_order = 1, init_order = 5, max_order = 10, sequence = :harmonic, threading = true, - sequence_factor = 2) + sequence_factor = 2 + ) # Enforce 1 <= min_order <= init_order <= max_order: min_order = max(1, min_order) init_order = max(min_order, init_order) @@ -152,9 +166,9 @@ function ExtrapolationMidpointDeuflhard(; min_order = 1, init_order = 5, max_ord @warn "The range of extrapolation orders and/or the initial order given to the `ExtrapolationMidpointDeuflhard` algorithm are not valid and have been changed: Minimal order: " * lpad(min_order, 2, " ") * " --> " * lpad(min_order, 2, " ") * - " + " Maximal order: " * lpad(max_order, 2, " ") * " --> " * lpad(max_order, 2, " ") * - " + " Initial order: " * lpad(init_order, 2, " ") * " --> " * lpad(init_order, 2, " ") end @@ -176,11 +190,14 @@ Initial order: " * lpad(init_order, 2, " ") * " --> " * lpad(init_order, 2, " ") end # Initialize algorithm - ExtrapolationMidpointDeuflhard(min_order, init_order, max_order, sequence, threading, - sequence_factor) + return ExtrapolationMidpointDeuflhard( + min_order, init_order, max_order, sequence, threading, + sequence_factor + ) end -@doc differentiation_rk_docstring("Midpoint extrapolation using Barycentric coordinates.", +@doc differentiation_rk_docstring( + "Midpoint extrapolation using Barycentric coordinates.", "ImplicitDeuflhardExtrapolation", "Parallelized Explicit Extrapolation Method.", references = reference, @@ -197,9 +214,10 @@ end init_order = 5, thread = OrdinaryDiffEq.False(), sequence = :harmonic, - """) + """ +) struct ImplicitDeuflhardExtrapolation{CS, AD, F, P, FDT, ST, CJ, TO} <: - OrdinaryDiffEqImplicitExtrapolationAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqImplicitExtrapolationAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F precs::P min_order::Int # Minimal extrapolation order @@ -215,7 +233,8 @@ function ImplicitDeuflhardExtrapolation(; linsolve = nothing, precs = DEFAULT_PRECS, diff_type = Val{:forward}(), min_order = 1, init_order = 5, max_order = 10, - sequence = :harmonic, threading = false) + sequence = :harmonic, threading = false + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) # Enforce 1 <= min_order <= init_order <= max_order: @@ -223,18 +242,20 @@ function ImplicitDeuflhardExtrapolation(; init_order = max(min_order, init_order) max_order = max(init_order, max_order) - linsolve = (linsolve === nothing && - (threading == true || threading isa PolyesterThreads)) ? - RFLUFactorization(; thread = Val(false)) : linsolve + linsolve = ( + linsolve === nothing && + (threading == true || threading isa PolyesterThreads) + ) ? + RFLUFactorization(; thread = Val(false)) : linsolve # Warn user if orders have been changed if (min_order, init_order, max_order) != (min_order, init_order, max_order) @warn "The range of extrapolation orders and/or the initial order given to the `ImplicitDeuflhardExtrapolation` algorithm are not valid and have been changed: Minimal order: " * lpad(min_order, 2, " ") * " --> " * lpad(min_order, 2, " ") * - " + " Maximal order: " * lpad(max_order, 2, " ") * " --> " * lpad(max_order, 2, " ") * - " + " Initial order: " * lpad(init_order, 2, " ") * " --> " * lpad(init_order, 2, " ") chunk_size end @@ -249,15 +270,20 @@ Initial order: " * lpad(init_order, 2, " ") * " --> " * lpad(init_order, 2, " ") end # Initialize algorithm - ImplicitDeuflhardExtrapolation{_unwrap_val(chunk_size), typeof(AD_choice), + return ImplicitDeuflhardExtrapolation{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), - typeof(threading)}(linsolve, precs, min_order, + typeof(threading), + }( + linsolve, precs, min_order, init_order, max_order, - sequence, threading, AD_choice) + sequence, threading, AD_choice + ) end -@doc generic_solver_docstring("Midpoint extrapolation using Barycentric coordinates, +@doc generic_solver_docstring( + "Midpoint extrapolation using Barycentric coordinates, following Hairer's ODEX in the adaptivity behavior.", "ExtrapolationMidpointHairerWanner", "Parallelized Explicit Extrapolation Method.", @@ -277,9 +303,10 @@ end thread = OrdinaryDiffEq.True(), sequence = :harmonic, sequence_factor = 2, - """) + """ +) struct ExtrapolationMidpointHairerWanner{TO} <: - OrdinaryDiffEqExtrapolationVarOrderVarStepAlgorithm + OrdinaryDiffEqExtrapolationVarOrderVarStepAlgorithm min_order::Int # Minimal extrapolation order init_order::Int # Initial extrapolation order max_order::Int # Maximal extrapolation order @@ -287,9 +314,11 @@ struct ExtrapolationMidpointHairerWanner{TO} <: threading::TO sequence_factor::Int # An even factor by which sequence is scaled for midpoint extrapolation end -function ExtrapolationMidpointHairerWanner(; min_order = 2, init_order = 5, max_order = 10, +function ExtrapolationMidpointHairerWanner(; + min_order = 2, init_order = 5, max_order = 10, sequence = :harmonic, threading = true, - sequence_factor = 2) + sequence_factor = 2 + ) # Enforce 2 <= min_order # and min_order + 1 <= init_order <= max_order - 1: min_order = max(2, min_order) @@ -301,9 +330,9 @@ function ExtrapolationMidpointHairerWanner(; min_order = 2, init_order = 5, max_ @warn "The range of extrapolation orders and/or the initial order given to the `ExtrapolationMidpointHairerWanner` algorithm are not valid and have been changed: Minimal order: " * lpad(min_order, 2, " ") * " --> " * lpad(min_order, 2, " ") * - " + " Maximal order: " * lpad(max_order, 2, " ") * " --> " * lpad(max_order, 2, " ") * - " + " Initial order: " * lpad(init_order, 2, " ") * " --> " * lpad(init_order, 2, " ") end @@ -325,12 +354,14 @@ Initial order: " * lpad(init_order, 2, " ") * " --> " * lpad(init_order, 2, " ") end # Initialize algorithm - ExtrapolationMidpointHairerWanner( + return ExtrapolationMidpointHairerWanner( min_order, init_order, max_order, sequence, threading, - sequence_factor) + sequence_factor + ) end -@doc differentiation_rk_docstring("Midpoint extrapolation using Barycentric coordinates, +@doc differentiation_rk_docstring( + "Midpoint extrapolation using Barycentric coordinates, following Hairer's SODEX in the adaptivity behavior.", "ImplicitHairerWannerExtrapolation", "Parallelized Explicit Extrapolation Method.", @@ -348,9 +379,10 @@ end init_order = 5, thread = OrdinaryDiffEq.False(), sequence = :harmonic, - """) + """ +) struct ImplicitHairerWannerExtrapolation{CS, AD, F, P, FDT, ST, CJ, TO} <: - OrdinaryDiffEqImplicitExtrapolationAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqImplicitExtrapolationAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F precs::P min_order::Int # Minimal extrapolation order @@ -368,7 +400,8 @@ function ImplicitHairerWannerExtrapolation(; linsolve = nothing, precs = DEFAULT_PRECS, diff_type = Val{:forward}(), min_order = 2, init_order = 5, max_order = 10, - sequence = :harmonic, threading = false) + sequence = :harmonic, threading = false + ) # Enforce 2 <= min_order # and min_order + 1 <= init_order <= max_order - 1: @@ -376,18 +409,20 @@ function ImplicitHairerWannerExtrapolation(; init_order = max(min_order + 1, init_order) max_order = max(init_order + 1, max_order) - linsolve = (linsolve === nothing && - (threading == true || threading isa PolyesterThreads)) ? - RFLUFactorization(; thread = Val(false)) : linsolve + linsolve = ( + linsolve === nothing && + (threading == true || threading isa PolyesterThreads) + ) ? + RFLUFactorization(; thread = Val(false)) : linsolve # Warn user if orders have been changed if (min_order, init_order, max_order) != (min_order, init_order, max_order) @warn "The range of extrapolation orders and/or the initial order given to the `ImplicitHairerWannerExtrapolation` algorithm are not valid and have been changed: Minimal order: " * lpad(min_order, 2, " ") * " --> " * lpad(min_order, 2, " ") * - " + " Maximal order: " * lpad(max_order, 2, " ") * " --> " * lpad(max_order, 2, " ") * - " + " Initial order: " * lpad(init_order, 2, " ") * " --> " * lpad(init_order, 2, " ") end @@ -402,15 +437,20 @@ Initial order: " * lpad(init_order, 2, " ") * " --> " * lpad(init_order, 2, " ") AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) # Initialize algorithm - ImplicitHairerWannerExtrapolation{_unwrap_val(chunk_size), typeof(AD_choice), + return ImplicitHairerWannerExtrapolation{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), - typeof(threading)}(linsolve, precs, min_order, + typeof(threading), + }( + linsolve, precs, min_order, init_order, - max_order, sequence, threading, AD_choice) + max_order, sequence, threading, AD_choice + ) end -@doc differentiation_rk_docstring("Euler extrapolation using Barycentric coordinates, +@doc differentiation_rk_docstring( + "Euler extrapolation using Barycentric coordinates, following Hairer's SODEX in the adaptivity behavior.", "ImplicitEulerBarycentricExtrapolation", "Parallelized Explicit Extrapolation Method.", @@ -430,9 +470,10 @@ end thread = OrdinaryDiffEq.False(), sequence = :harmonic, sequence_factor = 2, - """) + """ +) struct ImplicitEulerBarycentricExtrapolation{CS, AD, F, P, FDT, ST, CJ, TO} <: - OrdinaryDiffEqImplicitExtrapolationAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqImplicitExtrapolationAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F precs::P min_order::Int # Minimal extrapolation order @@ -444,7 +485,8 @@ struct ImplicitEulerBarycentricExtrapolation{CS, AD, F, P, FDT, ST, CJ, TO} <: autodiff::AD end -function ImplicitEulerBarycentricExtrapolation(; chunk_size = Val{0}(), +function ImplicitEulerBarycentricExtrapolation(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, @@ -452,25 +494,28 @@ function ImplicitEulerBarycentricExtrapolation(; chunk_size = Val{0}(), diff_type = Val{:forward}(), min_order = 3, init_order = 5, max_order = 12, sequence = :harmonic, - threading = false, sequence_factor = 2) + threading = false, sequence_factor = 2 + ) # Enforce 2 <= min_order # and min_order + 1 <= init_order <= max_order - 1: min_order = max(3, min_order) init_order = max(min_order + 1, init_order) max_order = max(init_order + 1, max_order) - linsolve = (linsolve === nothing && - (threading == true || threading isa PolyesterThreads)) ? - RFLUFactorization(; thread = Val(false)) : linsolve + linsolve = ( + linsolve === nothing && + (threading == true || threading isa PolyesterThreads) + ) ? + RFLUFactorization(; thread = Val(false)) : linsolve # Warn user if orders have been changed if (min_order, init_order, max_order) != (min_order, init_order, max_order) @warn "The range of extrapolation orders and/or the initial order given to the `ImplicitEulerBarycentricExtrapolation` algorithm are not valid and have been changed: Minimal order: " * lpad(min_order, 2, " ") * " --> " * lpad(min_order, 2, " ") * - " + " Maximal order: " * lpad(max_order, 2, " ") * " --> " * lpad(max_order, 2, " ") * - " + " Initial order: " * lpad(init_order, 2, " ") * " --> " * lpad(init_order, 2, " ") end @@ -485,10 +530,13 @@ Initial order: " * lpad(init_order, 2, " ") * " --> " * lpad(init_order, 2, " ") AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) # Initialize algorithm - ImplicitEulerBarycentricExtrapolation{_unwrap_val(chunk_size), typeof(AD_choice), + return ImplicitEulerBarycentricExtrapolation{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac), typeof(threading)}(linsolve, + _unwrap_val(concrete_jac), typeof(threading), + }( + linsolve, precs, min_order, init_order, @@ -496,5 +544,6 @@ Initial order: " * lpad(init_order, 2, " ") * " --> " * lpad(init_order, 2, " ") sequence, threading, sequence_factor, - AD_choice) + AD_choice + ) end diff --git a/lib/OrdinaryDiffEqExtrapolation/src/controllers.jl b/lib/OrdinaryDiffEqExtrapolation/src/controllers.jl index 7a2baaace4..5b435ee431 100644 --- a/lib/OrdinaryDiffEqExtrapolation/src/controllers.jl +++ b/lib/OrdinaryDiffEqExtrapolation/src/controllers.jl @@ -4,24 +4,32 @@ mutable struct ExtrapolationController{QT} <: AbstractController end function reset_alg_dependent_opts!(controller::ExtrapolationController, alg1, alg2) - if controller.beta1 == beta1_default(alg1, beta2_default(alg1)) + return if controller.beta1 == beta1_default(alg1, beta2_default(alg1)) controller.beta1 = beta1_default(alg2, beta2_default(alg2)) end end -@inline function stepsize_controller!(integrator, - alg::Union{ExtrapolationMidpointDeuflhard, - ImplicitDeuflhardExtrapolation}) +@inline function stepsize_controller!( + integrator, + alg::Union{ + ExtrapolationMidpointDeuflhard, + ImplicitDeuflhardExtrapolation, + } + ) # Dummy function # ExtrapolationMidpointDeuflhard's stepsize scaling is stored in the cache; # it is computed by stepsize_controller_internal! (in perform_step!) resp. stepsize_predictor! # (in step_accept_controller! and step_reject_controller!) - zero(typeof(integrator.opts.qmax)) + return zero(typeof(integrator.opts.qmax)) end -function stepsize_controller_internal!(integrator, - alg::Union{ExtrapolationMidpointDeuflhard, - ImplicitDeuflhardExtrapolation}) +function stepsize_controller_internal!( + integrator, + alg::Union{ + ExtrapolationMidpointDeuflhard, + ImplicitDeuflhardExtrapolation, + } + ) # Standard step size controller # Compute and save the stepsize scaling based on the latest error estimate of the current order (; controller) = integrator.opts @@ -31,19 +39,25 @@ function stepsize_controller_internal!(integrator, else # Update gamma and beta1 controller.beta1 = typeof(controller.beta1)(1 // (2integrator.cache.n_curr + 1)) - integrator.opts.gamma = FastPower.fastpower(typeof(integrator.opts.gamma)(1 // 4), - controller.beta1) + integrator.opts.gamma = FastPower.fastpower( + typeof(integrator.opts.gamma)(1 // 4), + controller.beta1 + ) # Compute new stepsize scaling qtmp = FastPower.fastpower(integrator.EEst, controller.beta1) / - integrator.opts.gamma + integrator.opts.gamma @fastmath q = max(inv(integrator.opts.qmax), min(inv(integrator.opts.qmin), qtmp)) end - integrator.cache.Q[integrator.cache.n_curr - alg.min_order + 1] = q + return integrator.cache.Q[integrator.cache.n_curr - alg.min_order + 1] = q end -function stepsize_predictor!(integrator, - alg::Union{ExtrapolationMidpointDeuflhard, - ImplicitDeuflhardExtrapolation}, n_new::Int) +function stepsize_predictor!( + integrator, + alg::Union{ + ExtrapolationMidpointDeuflhard, + ImplicitDeuflhardExtrapolation, + }, n_new::Int + ) # Compute and save the stepsize scaling for order n_new based on the latest error estimate of the current order. (; controller) = integrator.opts @@ -58,20 +72,28 @@ function stepsize_predictor!(integrator, s_new = stage_number[n_new - alg.min_order + 1] # Update gamma and beta1 controller.beta1 = typeof(controller.beta1)(1 // (2integrator.cache.n_curr + 1)) - integrator.opts.gamma = FastPower.fastpower(typeof(integrator.opts.gamma)(1 // 4), - controller.beta1) + integrator.opts.gamma = FastPower.fastpower( + typeof(integrator.opts.gamma)(1 // 4), + controller.beta1 + ) # Compute new stepsize scaling qtmp = EEst * - FastPower.fastpower(FastPower.fastpower(tol, (1.0 - s_curr / s_new)), - controller.beta1) / integrator.opts.gamma + FastPower.fastpower( + FastPower.fastpower(tol, (1.0 - s_curr / s_new)), + controller.beta1 + ) / integrator.opts.gamma @fastmath q = max(inv(integrator.opts.qmax), min(inv(integrator.opts.qmin), qtmp)) end - integrator.cache.Q[n_new - alg.min_order + 1] = q + return integrator.cache.Q[n_new - alg.min_order + 1] = q end -function step_accept_controller!(integrator, - alg::Union{ExtrapolationMidpointDeuflhard, - ImplicitDeuflhardExtrapolation}, q) +function step_accept_controller!( + integrator, + alg::Union{ + ExtrapolationMidpointDeuflhard, + ImplicitDeuflhardExtrapolation, + }, q + ) # Compute new order and stepsize, return new stepsize (; min_order, max_order) = alg (; n_curr, n_old, Q) = integrator.cache @@ -82,8 +104,10 @@ function step_accept_controller!(integrator, dt_new = Vector{eltype(Q)}(undef, length(tmp) + 1) dt_new[1:(end - 1)] = integrator.dt ./ Q[tmp] # Store for the possible new stepsizes dtmin = timedepentdtmin(integrator) - dt_new[1:(end - 1)] = max.(dtmin, - min.(abs(integrator.opts.dtmax), abs.(dt_new[1:(end - 1)]))) # Safety scaling + dt_new[1:(end - 1)] = max.( + dtmin, + min.(abs(integrator.opts.dtmax), abs.(dt_new[1:(end - 1)])) + ) # Safety scaling # n_new is the most efficient order of the last step work = s[tmp] ./ dt_new[1:(end - 1)] @@ -105,12 +129,16 @@ function step_accept_controller!(integrator, end integrator.cache.n_curr = n_new - dt_new[n_new - min_order + 1] + return dt_new[n_new - min_order + 1] end -function step_reject_controller!(integrator, - alg::Union{ExtrapolationMidpointDeuflhard, - ImplicitDeuflhardExtrapolation}) +function step_reject_controller!( + integrator, + alg::Union{ + ExtrapolationMidpointDeuflhard, + ImplicitDeuflhardExtrapolation, + } + ) # Compute and save reduced stepsize dt_red of order n_old # Use the latest error estimate to predict dt_red if an estimate of order n_old is not available if integrator.cache.n_curr < integrator.cache.n_old @@ -118,57 +146,76 @@ function step_reject_controller!(integrator, end integrator.cache.n_curr = integrator.cache.n_old # Reset order for redoing the rejected step dt_red = integrator.dt / - integrator.cache.Q[integrator.cache.n_old - integrator.alg.min_order + 1] + integrator.cache.Q[integrator.cache.n_old - integrator.alg.min_order + 1] dtmin = timedepentdtmin(integrator) dt_red = integrator.tdir * max(dtmin, min(abs(integrator.opts.dtmax), abs(dt_red))) # Safety scaling - integrator.dt = dt_red + return integrator.dt = dt_red end -@inline function stepsize_controller!(integrator, - alg::Union{ExtrapolationMidpointHairerWanner, +@inline function stepsize_controller!( + integrator, + alg::Union{ + ExtrapolationMidpointHairerWanner, ImplicitHairerWannerExtrapolation, ImplicitEulerExtrapolation, - ImplicitEulerBarycentricExtrapolation}) + ImplicitEulerBarycentricExtrapolation, + } + ) # Dummy function # ExtrapolationMidpointHairerWanner's stepsize scaling is stored in the cache; # it is computed by stepsize_controller_internal! (in perform_step!), step_accept_controller! or step_reject_controller! - zero(typeof(integrator.opts.qmax)) + return zero(typeof(integrator.opts.qmax)) end -function stepsize_controller_internal!(integrator, - alg::Union{ExtrapolationMidpointHairerWanner, +function stepsize_controller_internal!( + integrator, + alg::Union{ + ExtrapolationMidpointHairerWanner, ImplicitHairerWannerExtrapolation, ImplicitEulerExtrapolation, - ImplicitEulerBarycentricExtrapolation}) + ImplicitEulerBarycentricExtrapolation, + } + ) # Standard step size controller # Compute and save the stepsize scaling based on the latest error estimate of the current order (; controller) = integrator.opts - if alg isa - Union{ImplicitEulerExtrapolation, ImplicitEulerBarycentricExtrapolation, - ImplicitHairerWannerExtrapolation} + return if alg isa + Union{ + ImplicitEulerExtrapolation, ImplicitEulerBarycentricExtrapolation, + ImplicitHairerWannerExtrapolation, + } if iszero(integrator.EEst) q = inv(integrator.opts.qmax) else # Update gamma and beta1 if alg isa ImplicitHairerWannerExtrapolation - controller.beta1 = typeof(controller.beta1)(1 // - (2integrator.cache.n_curr + 1)) + controller.beta1 = typeof(controller.beta1)( + 1 // + (2integrator.cache.n_curr + 1) + ) elseif alg isa ImplicitEulerExtrapolation controller.beta1 = typeof(controller.beta1)(1 // (integrator.cache.n_curr)) else - controller.beta1 = typeof(controller.beta1)(1 // - (integrator.cache.n_curr - 1)) + controller.beta1 = typeof(controller.beta1)( + 1 // + (integrator.cache.n_curr - 1) + ) end integrator.opts.gamma = FastPower.fastpower( - typeof(integrator.opts.gamma)(65 // - 100), - controller.beta1) + typeof(integrator.opts.gamma)( + 65 // + 100 + ), + controller.beta1 + ) # Compute new stepsize scaling qtmp = FastPower.fastpower(integrator.EEst, controller.beta1) / - (integrator.opts.gamma) - @fastmath q = max(inv(integrator.opts.qmax), - min(inv(integrator.opts.qmin), qtmp)) + (integrator.opts.gamma) + @fastmath q = max( + inv(integrator.opts.qmax), + min(inv(integrator.opts.qmin), qtmp) + ) end integrator.cache.Q[integrator.cache.n_curr + 1] = q else @@ -178,24 +225,33 @@ function stepsize_controller_internal!(integrator, # Update gamma and beta1 controller.beta1 = typeof(controller.beta1)(1 // (2integrator.cache.n_curr + 1)) integrator.opts.gamma = FastPower.fastpower( - typeof(integrator.opts.gamma)(65 // - 100), - controller.beta1) + typeof(integrator.opts.gamma)( + 65 // + 100 + ), + controller.beta1 + ) # Compute new stepsize scaling qtmp = FastPower.fastpower(integrator.EEst, controller.beta1) / - integrator.opts.gamma - @fastmath q = max(inv(integrator.opts.qmax), - min(inv(integrator.opts.qmin), qtmp)) + integrator.opts.gamma + @fastmath q = max( + inv(integrator.opts.qmax), + min(inv(integrator.opts.qmin), qtmp) + ) end integrator.cache.Q[integrator.cache.n_curr + 1] = q end end -function step_accept_controller!(integrator, - alg::Union{ExtrapolationMidpointHairerWanner, +function step_accept_controller!( + integrator, + alg::Union{ + ExtrapolationMidpointHairerWanner, ImplicitHairerWannerExtrapolation, ImplicitEulerExtrapolation, - ImplicitEulerBarycentricExtrapolation}, q) + ImplicitEulerBarycentricExtrapolation, + }, q + ) # Compute new order and stepsize, return new stepsize (; min_order, max_order) = alg (; n_curr, n_old, Q, sigma, work, dt_new) = integrator.cache @@ -205,9 +261,9 @@ function step_accept_controller!(integrator, win_min_old = min(n_old, n_curr) - 1 # cf. win_min in perform_step! of the last step tmp = win_min_old:(max(n_curr, n_old) + 1) # Index range for the new order fill!(dt_new, zero(eltype(dt_new))) - @.. broadcast=false Q=integrator.dt/Q + @.. broadcast = false Q = integrator.dt / Q copyto!(dt_new, win_min_old, Q, win_min_old, (max(n_curr, n_old) + 1) - win_min_old + 1) - @.. broadcast=false Q=integrator.dt/Q + @.. broadcast = false Q = integrator.dt / Q dtmin = timedepentdtmin(integrator) fill!(work, zero(eltype(work))) # work[n] is the work for order (n-1) for i in tmp @@ -241,17 +297,23 @@ function step_accept_controller!(integrator, if n_new == n_curr + 1 # Compute the new stepsize of order n_new based on the optimal stepsize of order n_curr dt_new[n_new + 1] = s[n_curr + 2] / s[n_curr + 1] * dt_new[n_curr + 1] - dt_new[n_new + 1] = max(dtmin, - min(abs(integrator.opts.dtmax), abs(dt_new[n_new + 1]))) + dt_new[n_new + 1] = max( + dtmin, + min(abs(integrator.opts.dtmax), abs(dt_new[n_new + 1])) + ) end - dt_new[n_new + 1] + return dt_new[n_new + 1] end -function step_reject_controller!(integrator, - alg::Union{ExtrapolationMidpointHairerWanner, +function step_reject_controller!( + integrator, + alg::Union{ + ExtrapolationMidpointHairerWanner, ImplicitHairerWannerExtrapolation, ImplicitEulerExtrapolation, - ImplicitEulerBarycentricExtrapolation}) + ImplicitEulerBarycentricExtrapolation, + } + ) # Compute and save order and stepsize for redoing the current step (; n_old, n_curr, Q) = integrator.cache @@ -266,5 +328,5 @@ function step_reject_controller!(integrator, dt_red = integrator.dt / Q[n_red + 1] dtmin = timedepentdtmin(integrator) dt_red = integrator.tdir * max(dtmin, min(abs(integrator.opts.dtmax), abs(dt_red))) # Safety scaling - integrator.dt = dt_red + return integrator.dt = dt_red end diff --git a/lib/OrdinaryDiffEqExtrapolation/src/extrapolation_caches.jl b/lib/OrdinaryDiffEqExtrapolation/src/extrapolation_caches.jl index cd24042484..2709e8442a 100644 --- a/lib/OrdinaryDiffEqExtrapolation/src/extrapolation_caches.jl +++ b/lib/OrdinaryDiffEqExtrapolation/src/extrapolation_caches.jl @@ -8,12 +8,12 @@ get_fsalfirstlast(cache::ExtrapolationMutableCache, u) = (cache.fsalfirst, cache end @cache mutable struct AitkenNevilleCache{ - uType, - rateType, - arrayType, - dtType, - uNoUnitsType -} <: ExtrapolationMutableCache + uType, + rateType, + arrayType, + dtType, + uNoUnitsType, + } <: ExtrapolationMutableCache u::uType uprev::uType tmp::uType @@ -32,7 +32,7 @@ end end @cache mutable struct AitkenNevilleConstantCache{dtType, arrayType} <: - OrdinaryDiffEqConstantCache + OrdinaryDiffEqConstantCache dtpropose::dtType T::arrayType cur_order::Int @@ -41,10 +41,12 @@ end step_no::Int end -function alg_cache(alg::AitkenNeville, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::AitkenNeville, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) utilde = zero(u) k = zero(rate_prototype) @@ -73,29 +75,35 @@ function alg_cache(alg::AitkenNeville, u, rate_prototype, ::Type{uEltypeNoUnits} atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) step_no = zero(Int) - AitkenNevilleCache(u, uprev, tmp, k, utilde, atmp, fsalfirst, dtpropose, T, cur_order, - work, A, step_no, u_tmps, k_tmps) + return AitkenNevilleCache( + u, uprev, tmp, k, utilde, atmp, fsalfirst, dtpropose, T, cur_order, + work, A, step_no, u_tmps, k_tmps + ) end -function alg_cache(alg::AitkenNeville, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::AitkenNeville, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} dtpropose = zero(dt) cur_order = max(alg.init_order, alg.min_order) T = Array{typeof(u), 2}(undef, alg.max_order, alg.max_order) - @.. broadcast=false T=u + @.. broadcast = false T = u work = zero(dt) A = one(Int) step_no = zero(Int) - AitkenNevilleConstantCache(dtpropose, T, cur_order, work, A, step_no) + return AitkenNevilleConstantCache(dtpropose, T, cur_order, work, A, step_no) end -@cache mutable struct ImplicitEulerExtrapolationCache{uType, rateType, QType, arrayType, - dtType, JType, WType, F, JCType, - GCType, uNoUnitsType, TFType, UFType, - sequenceType} <: - ExtrapolationMutableCache +@cache mutable struct ImplicitEulerExtrapolationCache{ + uType, rateType, QType, arrayType, + dtType, JType, WType, F, JCType, + GCType, uNoUnitsType, TFType, UFType, + sequenceType, + } <: + ExtrapolationMutableCache uprev::uType u_tmps::Array{uType, 1} u_tmps2::Array{uType, 1} @@ -136,9 +144,11 @@ end end get_fsalfirstlast(cache::ImplicitEulerExtrapolationCache, u) = (zero(u), zero(u)) -@cache mutable struct ImplicitEulerExtrapolationConstantCache{QType, dtType, arrayType, TF, - UF, sequenceType} <: - OrdinaryDiffEqConstantCache +@cache mutable struct ImplicitEulerExtrapolationConstantCache{ + QType, dtType, arrayType, TF, + UF, sequenceType, + } <: + OrdinaryDiffEqConstantCache Q::Vector{QType} # Storage for stepsize scaling factors. Q[n] contains information for extrapolation order (n) dtpropose::dtType T::arrayType @@ -159,10 +169,12 @@ get_fsalfirstlast(cache::ImplicitEulerExtrapolationCache, u) = (zero(u), zero(u) dt_new::Array{QType, 1} end -function alg_cache(alg::ImplicitEulerExtrapolation, u, rate_prototype, +function alg_cache( + alg::ImplicitEulerExtrapolation, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} dtpropose = zero(dt) #cur_order = max(alg.init_order, alg.min_order) QType = tTypeNoUnits <: Integer ? typeof(qmin_default(alg)) : tTypeNoUnits # Cf. SciMLBase.__init in solve.jl @@ -192,15 +204,19 @@ function alg_cache(alg::ImplicitEulerExtrapolation, u, rate_prototype, sigma = 9 // 10 work = fill(zero(eltype(Q)), alg.max_order + 1) dt_new = fill(zero(eltype(Q)), alg.max_order + 1) - ImplicitEulerExtrapolationConstantCache(Q, dtpropose, T, n_curr, n_old, A, step_no, + return ImplicitEulerExtrapolationConstantCache( + Q, dtpropose, T, n_curr, n_old, A, step_no, sigma, tf, uf, sequence, stage_number, work, - dt_new) + dt_new + ) end -function alg_cache(alg::ImplicitEulerExtrapolation, u, rate_prototype, +function alg_cache( + alg::ImplicitEulerExtrapolation, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} u_tmp = zero(u) u_tmps = Array{typeof(u_tmp), 1}(undef, get_thread_count(alg)) @@ -271,7 +287,8 @@ function alg_cache(alg::ImplicitEulerExtrapolation, u, rate_prototype, linprob = LinearProblem(W[1], _vec(linsolve_tmps[1]); u0 = _vec(k_tmps[1])) linsolve1 = init( - linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true)) + linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true) + ) #Pl = LinearSolve.InvPreconditioner(Diagonal(_vec(weight))), #Pr = Diagonal(_vec(weight))) @@ -279,8 +296,10 @@ function alg_cache(alg::ImplicitEulerExtrapolation, u, rate_prototype, linsolve[1] = linsolve1 for i in 2:get_thread_count(alg) linprob = LinearProblem(W[i], _vec(linsolve_tmps[i]); u0 = _vec(k_tmps[i])) - linsolve[i] = init(linprob, alg.linsolve, - alias = LinearAliasSpecifier(alias_A = true, alias_b = true)) + linsolve[i] = init( + linprob, alg.linsolve, + alias = LinearAliasSpecifier(alias_A = true, alias_b = true) + ) #Pl = LinearSolve.InvPreconditioner(Diagonal(_vec(weight))), #Pr = Diagonal(_vec(weight))) end @@ -289,20 +308,24 @@ function alg_cache(alg::ImplicitEulerExtrapolation, u, rate_prototype, grad_config = build_grad_config(alg, f, tf, du1, t) jac_config = build_jac_config(alg, f, uf, du1, uprev, u, du1, du2) sequence = generate_sequence(constvalue(uBottomEltypeNoUnits), alg) - cc = alg_cache(alg, u, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, - tTypeNoUnits, uprev, uprev2, f, t, dt, reltol, p, calck, Val(false)) + cc = alg_cache( + alg, u, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, + tTypeNoUnits, uprev, uprev2, f, t, dt, reltol, p, calck, Val(false) + ) diff1 = Array{typeof(u), 1}(undef, get_thread_count(alg)) diff2 = Array{typeof(u), 1}(undef, get_thread_count(alg)) for i in 1:get_thread_count(alg) diff1[i] = zero(u) diff2[i] = zero(u) end - ImplicitEulerExtrapolationCache(uprev, u_tmps, u_tmps2, utilde, tmp, atmp, k_tmps, + return ImplicitEulerExtrapolationCache( + uprev, u_tmps, u_tmps2, utilde, tmp, atmp, k_tmps, dtpropose, T, A, step_no, du1, du2, J, W, tf, uf, linsolve_tmps, linsolve, jac_config, grad_config, sequence, cc.stage_number, cc.Q, cc.n_curr, cc.n_old, cc.sigma, res, cc.work, - cc.dt_new, diff1, diff2) + cc.dt_new, diff1, diff2 + ) end struct extrapolation_coefficients{T1, T2, T3} @@ -322,11 +345,15 @@ struct extrapolation_coefficients{T1, T2, T3} extrapolation_scalars_2::T3 end -function create_extrapolation_coefficients(T, - alg::Union{ExtrapolationMidpointDeuflhard, +function create_extrapolation_coefficients( + T, + alg::Union{ + ExtrapolationMidpointDeuflhard, ExtrapolationMidpointHairerWanner, ImplicitDeuflhardExtrapolation, - ImplicitHairerWannerExtrapolation}) + ImplicitHairerWannerExtrapolation, + } + ) # Compute and return extrapolation_coefficients (; min_order, init_order, max_order, sequence) = alg @@ -337,9 +364,13 @@ function create_extrapolation_coefficients(T, elseif sequence == :romberg subdividing_sequence = BigInt(2) .^ (0:max_order) else # sequence == :bulirsch - subdividing_sequence = [n == 0 ? BigInt(1) : - (isodd(n) ? BigInt(2)^((n + 1) ÷ 2) : - 3 * BigInt(2)^(n ÷ 2 - 1)) for n in 0:max_order] + subdividing_sequence = [ + n == 0 ? BigInt(1) : + ( + isodd(n) ? BigInt(2)^((n + 1) ÷ 2) : + 3 * BigInt(2)^(n ÷ 2 - 1) + ) for n in 0:max_order + ] end # Compute nodes corresponding to subdividing_sequence @@ -350,29 +381,35 @@ function create_extrapolation_coefficients(T, extrapolation_weights_2[1, :] = ones(Rational{BigInt}, 1, max_order) for n in 2:max_order distance = nodes[2:n] .- nodes[n + 1] - extrapolation_weights_2[1:(n - 1), n] = extrapolation_weights_2[1:(n - 1), - n - 1] .// distance + extrapolation_weights_2[1:(n - 1), n] = extrapolation_weights_2[ + 1:(n - 1), + n - 1, + ] .// distance extrapolation_weights_2[n, n] = 1 // prod(-distance) end # Compute barycentric weights for extrapolation operators extrapolation_weights = zeros(Rational{BigInt}, max_order + 1, max_order + 1) for n in 1:max_order - extrapolation_weights[n + 1, (n + 1):(max_order + 1)] = extrapolation_weights_2[n, - n:max_order] // - (nodes[n + 1] - nodes[1]) + extrapolation_weights[n + 1, (n + 1):(max_order + 1)] = extrapolation_weights_2[ + n, + n:max_order, + ] // + (nodes[n + 1] - nodes[1]) extrapolation_weights[1, n] = 1 // prod(nodes[1] .- nodes[2:n]) end extrapolation_weights[1, max_order + 1] = 1 // - prod(nodes[1] .- nodes[2:(max_order + 1)]) + prod(nodes[1] .- nodes[2:(max_order + 1)]) # Rescale barycentric weights to obtain weights of 1. Barycentric Formula for m in 1:(max_order + 1) extrapolation_weights[1:m, m] = -extrapolation_weights[1:m, m] .// nodes[1:m] if 2 <= m - extrapolation_weights_2[1:(m - 1), m - 1] = -extrapolation_weights_2[1:(m - 1), - m - 1] .// - nodes[2:m] + extrapolation_weights_2[1:(m - 1), m - 1] = -extrapolation_weights_2[ + 1:(m - 1), + m - 1, + ] .// + nodes[2:m] end end @@ -387,9 +424,11 @@ function create_extrapolation_coefficients(T, extrapolation_scalars = -nodes[1] * [BigInt(1); extrapolation_scalars_2] # Initialize and return extrapolation_coefficients - extrapolation_coefficients(Int.(subdividing_sequence), + return extrapolation_coefficients( + Int.(subdividing_sequence), T.(extrapolation_weights), T.(extrapolation_scalars), - T.(extrapolation_weights_2), T.(extrapolation_scalars_2)) + T.(extrapolation_weights_2), T.(extrapolation_scalars_2) + ) end function create_extrapolation_coefficients(T, alg::ImplicitEulerBarycentricExtrapolation) @@ -403,9 +442,13 @@ function create_extrapolation_coefficients(T, alg::ImplicitEulerBarycentricExtra elseif sequence == :romberg subdividing_sequence = BigInt(2) .^ (0:max_order) else # sequence == :bulirsch - subdividing_sequence = [n == 0 ? BigInt(1) : - (isodd(n) ? BigInt(2)^((n + 1) ÷ 2) : - 3 * BigInt(2)^(n ÷ 2 - 1)) for n in 0:max_order] + subdividing_sequence = [ + n == 0 ? BigInt(1) : + ( + isodd(n) ? BigInt(2)^((n + 1) ÷ 2) : + 3 * BigInt(2)^(n ÷ 2 - 1) + ) for n in 0:max_order + ] end # Compute nodes corresponding to subdividing_sequence @@ -416,29 +459,35 @@ function create_extrapolation_coefficients(T, alg::ImplicitEulerBarycentricExtra extrapolation_weights_2[1, :] = ones(Rational{BigInt}, 1, max_order) for n in 2:max_order distance = nodes[2:n] .- nodes[n + 1] - extrapolation_weights_2[1:(n - 1), n] = extrapolation_weights_2[1:(n - 1), - n - 1] .// distance + extrapolation_weights_2[1:(n - 1), n] = extrapolation_weights_2[ + 1:(n - 1), + n - 1, + ] .// distance extrapolation_weights_2[n, n] = 1 // prod(-distance) end # Compute barycentric weights for extrapolation operators extrapolation_weights = zeros(Rational{BigInt}, max_order + 1, max_order + 1) for n in 1:max_order - extrapolation_weights[n + 1, (n + 1):(max_order + 1)] = extrapolation_weights_2[n, - n:max_order] // - (nodes[n + 1] - nodes[1]) + extrapolation_weights[n + 1, (n + 1):(max_order + 1)] = extrapolation_weights_2[ + n, + n:max_order, + ] // + (nodes[n + 1] - nodes[1]) extrapolation_weights[1, n] = 1 // prod(nodes[1] .- nodes[2:n]) end extrapolation_weights[1, max_order + 1] = 1 // - prod(nodes[1] .- nodes[2:(max_order + 1)]) + prod(nodes[1] .- nodes[2:(max_order + 1)]) # Rescale barycentric weights to obtain weights of 1. Barycentric Formula for m in 1:(max_order + 1) extrapolation_weights[1:m, m] = -extrapolation_weights[1:m, m] .// nodes[1:m] if 2 <= m - extrapolation_weights_2[1:(m - 1), m - 1] = -extrapolation_weights_2[1:(m - 1), - m - 1] .// - nodes[2:m] + extrapolation_weights_2[1:(m - 1), m - 1] = -extrapolation_weights_2[ + 1:(m - 1), + m - 1, + ] .// + nodes[2:m] end end @@ -453,13 +502,17 @@ function create_extrapolation_coefficients(T, alg::ImplicitEulerBarycentricExtra extrapolation_scalars = -nodes[1] * [BigInt(1); extrapolation_scalars_2] # Initialize and return extrapolation_coefficients - extrapolation_coefficients(Int.(subdividing_sequence), + return extrapolation_coefficients( + Int.(subdividing_sequence), T.(extrapolation_weights), T.(extrapolation_scalars), - T.(extrapolation_weights_2), T.(extrapolation_scalars_2)) + T.(extrapolation_weights_2), T.(extrapolation_scalars_2) + ) end -function create_extrapolation_coefficients(T::Type{<:CompiledFloats}, - alg::ImplicitEulerBarycentricExtrapolation) +function create_extrapolation_coefficients( + T::Type{<:CompiledFloats}, + alg::ImplicitEulerBarycentricExtrapolation + ) # Compute and return extrapolation_coefficients (; min_order, init_order, max_order, sequence) = alg @@ -490,53 +543,61 @@ function create_extrapolation_coefficients(T::Type{<:CompiledFloats}, 18, 19, 20, - 21 + 21, + ] + extrapolation_weights = T[ + -1.0 -2.0 -3.0 -4.0 -5.0 -6.0 -7.0 -8.0 -9.0 -10.0 -11.0 -12.0 -13.0 -14.0 -15.0 -16.0; + 0.0 4.0 24.0 96.0 320.0 960.0 2688.0 7168.0 18432.0 46080.0 112640.0 270336.0 638976.0 1.490944e6 3.44064e6 7.86432e6; + 0.0 0.0 -27.0 -324.0 -2430.0 -14580.0 -76545.0 -367416.0 -1.653372e6 -7.08588e6 -2.9229255e7 -1.1691702e8 -4.55976378e8 -1.741000716e9 -6.528752685e9 -2.410616376e10; + 0.0 0.0 0.0 256.0 5120.0 61440.0 573440.0 4.58752e6 3.3030144e7 2.2020096e8 1.38412032e9 8.30472192e9 4.798283776e10 2.68703891456e11 1.46565758976e12 7.81684047872e12; + 0.0 0.0 0.0 0.0 -3125.0 -93750.0 -1.640625e6 -2.1875e7 -2.4609375e8 -2.4609375e9 -2.255859375e10 -1.93359375e11 -1.571044921875e12 -1.221923828125e13 -9.1644287109375e13 -6.6650390625e14; + 0.0 0.0 0.0 0.0 0.0 46656.0 1.959552e6 4.7029248e7 8.46526464e8 1.269789696e10 1.67612239872e11 2.011346878464e12 2.2412150931456e13 2.35327584780288e14 2.35327584780288e15 2.259144813890765e16; + 0.0 0.0 0.0 0.0 0.0 0.0 -823543.0 -4.6118408e7 -1.452729852e9 -3.389702988e10 -6.5251782519e11 -1.0962299463192e13 -1.66261541858412e14 -2.327661586017768e15 -3.0550558316483204e16 -3.8018472571623546e17; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.6777216e7 1.207959552e9 4.831838208e10 1.41733920768e12 3.401614098432e13 7.07535732473856e14 1.3207333672845312e16 2.2641143439163392e17 3.6225829502661427e18; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -3.87420489e8 -3.486784401e10 -1.725958278495e12 -6.213449802582e13 -1.817434067255235e15 -4.579933849483192e16 -1.0304851161337183e18 -2.119855096046506e19; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0e10 1.1e12 6.6e13 2.86e15 1.001e17 3.003e18 8.008e19; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.85311670611e11 -3.7661140520652e13 -2.692771547226618e15 -1.3822893942429973e17 -5.701943751252363e18 -2.007084200440832e20; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8.916100448256e12 1.390911669927936e15 1.1683658027394662e17 7.010194816436797e18 3.364893511889663e20; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -3.02875106592253e14 -5.512326939979005e16 -5.37451876647953e18 -3.726333011425807e20; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.1112006825558016e16 2.3335214333671834e18 2.6135440053712454e20; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -4.378938903808594e17 -1.0509453369140625e20; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.8446744073709552e19 + ] + extrapolation_weights_2 = T[ + -2.0 -12.0 -48.0 -160.0 -480.0 -1344.0 -3584.0 -9216.0 -23040.0 -56320.0 -135168.0 -319488.0 -745472.0 -1.72032e6 -3.93216e6; + 0.0 18.0 216.0 1620.0 9720.0 51030.0 244944.0 1.102248e6 4.72392e6 1.948617e7 7.794468e7 3.03984252e8 1.160667144e9 4.35250179e9 1.607077584e10; + 0.0 0.0 -192.0 -3840.0 -46080.0 -430080.0 -3.44064e6 -2.4772608e7 -1.6515072e8 -1.03809024e9 -6.22854144e9 -3.598712832e10 -2.01527918592e11 -1.09924319232e12 -5.86263035904e12; + 0.0 0.0 0.0 2500.0 75000.0 1.3125e6 1.75e7 1.96875e8 1.96875e9 1.8046875e10 1.546875e11 1.2568359375e12 9.775390625e12 7.33154296875e13 5.33203125e14; + 0.0 0.0 0.0 0.0 -38880.0 -1.63296e6 -3.919104e7 -7.0543872e8 -1.05815808e10 -1.3967686656e11 -1.67612239872e12 -1.867679244288e13 -1.9610632065024e14 -1.9610632065024e15 -1.882620678242304e16; + 0.0 0.0 0.0 0.0 0.0 705894.0 3.9530064e7 1.245197016e9 2.905459704e10 5.5930099302e11 9.396256682736e12 1.42509893021496e14 1.995138502300944e15 2.618619284269989e16 3.2587262204248755e17; + 0.0 0.0 0.0 0.0 0.0 0.0 -1.4680064e7 -1.056964608e9 -4.227858432e10 -1.24017180672e12 -2.976412336128e13 -6.19093765914624e14 -1.1556416963739648e16 -1.9811000509267968e17 -3.169760081482875e18; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.44373768e8 3.099363912e10 1.53418513644e12 5.523066491184e13 1.61549694867132e15 4.071052310651726e16 9.159867698966385e17 1.884315640930228e19; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -9.0e9 -9.9e11 -5.94e13 -2.574e15 -9.009e16 -2.7027e18 -7.2072e19; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.5937424601e11 3.423740047332e13 2.44797413384238e15 1.2566267220390883e17 5.183585228411239e18 1.8246220004007562e20; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -8.173092077568e12 -1.275002364100608e15 -1.0710019858445107e17 -6.426011915067064e18 -3.084485719232191e20; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.79577021469772e14 5.0883017907498504e16 4.961094245981104e18 3.439692010546899e20; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0318292052303872e16 -2.166841330983813e18 -2.4268622907018707e20; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.0870096435546874e17 9.80882314453125e19; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.7293822569102705e19 + ] + extrapolation_scalars = T[ + -1.0, 0.5, -0.16666666666666666, 0.041666666666666664, + -0.008333333333333333, 0.001388888888888889, + -0.0001984126984126984, 2.48015873015873e-5, + -2.7557319223985893e-6, 2.755731922398589e-7, + -2.505210838544172e-8, 2.08767569878681e-9, + -1.6059043836821613e-10, 1.1470745597729725e-11, + -7.647163731819816e-13, 4.779477332387385e-14, + ] + extrapolation_scalars_2 = T[ + -0.5, 0.16666666666666666, -0.041666666666666664, + 0.008333333333333333, -0.001388888888888889, + 0.0001984126984126984, -2.48015873015873e-5, + 2.7557319223985893e-6, -2.755731922398589e-7, + 2.505210838544172e-8, -2.08767569878681e-9, + 1.6059043836821613e-10, -1.1470745597729725e-11, + 7.647163731819816e-13, -4.779477332387385e-14, ] - extrapolation_weights = T[-1.0 -2.0 -3.0 -4.0 -5.0 -6.0 -7.0 -8.0 -9.0 -10.0 -11.0 -12.0 -13.0 -14.0 -15.0 -16.0; - 0.0 4.0 24.0 96.0 320.0 960.0 2688.0 7168.0 18432.0 46080.0 112640.0 270336.0 638976.0 1.490944e6 3.44064e6 7.86432e6; - 0.0 0.0 -27.0 -324.0 -2430.0 -14580.0 -76545.0 -367416.0 -1.653372e6 -7.08588e6 -2.9229255e7 -1.1691702e8 -4.55976378e8 -1.741000716e9 -6.528752685e9 -2.410616376e10; - 0.0 0.0 0.0 256.0 5120.0 61440.0 573440.0 4.58752e6 3.3030144e7 2.2020096e8 1.38412032e9 8.30472192e9 4.798283776e10 2.68703891456e11 1.46565758976e12 7.81684047872e12; - 0.0 0.0 0.0 0.0 -3125.0 -93750.0 -1.640625e6 -2.1875e7 -2.4609375e8 -2.4609375e9 -2.255859375e10 -1.93359375e11 -1.571044921875e12 -1.221923828125e13 -9.1644287109375e13 -6.6650390625e14; - 0.0 0.0 0.0 0.0 0.0 46656.0 1.959552e6 4.7029248e7 8.46526464e8 1.269789696e10 1.67612239872e11 2.011346878464e12 2.2412150931456e13 2.35327584780288e14 2.35327584780288e15 2.259144813890765e16; - 0.0 0.0 0.0 0.0 0.0 0.0 -823543.0 -4.6118408e7 -1.452729852e9 -3.389702988e10 -6.5251782519e11 -1.0962299463192e13 -1.66261541858412e14 -2.327661586017768e15 -3.0550558316483204e16 -3.8018472571623546e17; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.6777216e7 1.207959552e9 4.831838208e10 1.41733920768e12 3.401614098432e13 7.07535732473856e14 1.3207333672845312e16 2.2641143439163392e17 3.6225829502661427e18; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -3.87420489e8 -3.486784401e10 -1.725958278495e12 -6.213449802582e13 -1.817434067255235e15 -4.579933849483192e16 -1.0304851161337183e18 -2.119855096046506e19; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0e10 1.1e12 6.6e13 2.86e15 1.001e17 3.003e18 8.008e19; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.85311670611e11 -3.7661140520652e13 -2.692771547226618e15 -1.3822893942429973e17 -5.701943751252363e18 -2.007084200440832e20; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8.916100448256e12 1.390911669927936e15 1.1683658027394662e17 7.010194816436797e18 3.364893511889663e20; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -3.02875106592253e14 -5.512326939979005e16 -5.37451876647953e18 -3.726333011425807e20; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.1112006825558016e16 2.3335214333671834e18 2.6135440053712454e20; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -4.378938903808594e17 -1.0509453369140625e20; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.8446744073709552e19] - extrapolation_weights_2 = T[-2.0 -12.0 -48.0 -160.0 -480.0 -1344.0 -3584.0 -9216.0 -23040.0 -56320.0 -135168.0 -319488.0 -745472.0 -1.72032e6 -3.93216e6; - 0.0 18.0 216.0 1620.0 9720.0 51030.0 244944.0 1.102248e6 4.72392e6 1.948617e7 7.794468e7 3.03984252e8 1.160667144e9 4.35250179e9 1.607077584e10; - 0.0 0.0 -192.0 -3840.0 -46080.0 -430080.0 -3.44064e6 -2.4772608e7 -1.6515072e8 -1.03809024e9 -6.22854144e9 -3.598712832e10 -2.01527918592e11 -1.09924319232e12 -5.86263035904e12; - 0.0 0.0 0.0 2500.0 75000.0 1.3125e6 1.75e7 1.96875e8 1.96875e9 1.8046875e10 1.546875e11 1.2568359375e12 9.775390625e12 7.33154296875e13 5.33203125e14; - 0.0 0.0 0.0 0.0 -38880.0 -1.63296e6 -3.919104e7 -7.0543872e8 -1.05815808e10 -1.3967686656e11 -1.67612239872e12 -1.867679244288e13 -1.9610632065024e14 -1.9610632065024e15 -1.882620678242304e16; - 0.0 0.0 0.0 0.0 0.0 705894.0 3.9530064e7 1.245197016e9 2.905459704e10 5.5930099302e11 9.396256682736e12 1.42509893021496e14 1.995138502300944e15 2.618619284269989e16 3.2587262204248755e17; - 0.0 0.0 0.0 0.0 0.0 0.0 -1.4680064e7 -1.056964608e9 -4.227858432e10 -1.24017180672e12 -2.976412336128e13 -6.19093765914624e14 -1.1556416963739648e16 -1.9811000509267968e17 -3.169760081482875e18; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.44373768e8 3.099363912e10 1.53418513644e12 5.523066491184e13 1.61549694867132e15 4.071052310651726e16 9.159867698966385e17 1.884315640930228e19; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -9.0e9 -9.9e11 -5.94e13 -2.574e15 -9.009e16 -2.7027e18 -7.2072e19; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.5937424601e11 3.423740047332e13 2.44797413384238e15 1.2566267220390883e17 5.183585228411239e18 1.8246220004007562e20; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -8.173092077568e12 -1.275002364100608e15 -1.0710019858445107e17 -6.426011915067064e18 -3.084485719232191e20; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.79577021469772e14 5.0883017907498504e16 4.961094245981104e18 3.439692010546899e20; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0318292052303872e16 -2.166841330983813e18 -2.4268622907018707e20; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.0870096435546874e17 9.80882314453125e19; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.7293822569102705e19] - extrapolation_scalars = T[-1.0, 0.5, -0.16666666666666666, 0.041666666666666664, - -0.008333333333333333, 0.001388888888888889, - -0.0001984126984126984, 2.48015873015873e-5, - -2.7557319223985893e-6, 2.755731922398589e-7, - -2.505210838544172e-8, 2.08767569878681e-9, - -1.6059043836821613e-10, 1.1470745597729725e-11, - -7.647163731819816e-13, 4.779477332387385e-14] - extrapolation_scalars_2 = T[-0.5, 0.16666666666666666, -0.041666666666666664, - 0.008333333333333333, -0.001388888888888889, - 0.0001984126984126984, -2.48015873015873e-5, - 2.7557319223985893e-6, -2.755731922398589e-7, - 2.505210838544172e-8, -2.08767569878681e-9, - 1.6059043836821613e-10, -1.1470745597729725e-11, - 7.647163731819816e-13, -4.779477332387385e-14] elseif sequence == :romberg subdividing_sequence = [ 1, @@ -554,110 +615,132 @@ function create_extrapolation_coefficients(T::Type{<:CompiledFloats}, 4096, 8192, 16384, - 32768 + 32768, + ] + extrapolation_weights = T[ + -1.0 -2.0 -2.6666666666666665 -3.0476190476190474 -3.250793650793651 -3.355657962109575 -3.4089223742065524 -3.4357642826648718 -3.4492378680870868 -3.4559878443455743 -3.4593661315834487 -3.461056100382464 -3.4619012911273677 -3.462323938092467 -3.4625352744739657 -3.4626409458895506; + 0.0 4.0 16.0 42.666666666666664 97.52380952380952 208.05079365079365 429.5242191500256 872.6841277968774 1759.1113127244143 3532.019576921177 7077.863105219736 14169.563674965806 28352.971574333144 56719.79075383079 113453.43080341395 226920.71174792582; + 0.0 0.0 -21.333333333333332 -170.66666666666666 -910.2222222222222 -4161.015873015873 -17753.667724867726 -73305.4667349377 -297876.1822880008 -1.2008866561532002e6 -4.822384062356381e6 -1.9327284852653358e7 -7.738471041687992e7 -3.096900575159161e8 -1.2390627356143517e9 -4.956856027421692e9; + 0.0 0.0 0.0 195.04761904761904 3120.7619047619046 33288.12698412698 304348.589569161 2.597107964323507e6 2.144708512473606e7 1.7430012037880734e8 1.4053804981724308e9 1.1287134353949562e10 9.047378143596361e10 7.244977688400918e11 5.798813602675166e12 4.6401837394984086e13; + 0.0 0.0 0.0 0.0 -3328.8126984126984 -106522.00634920635 -2.272469468783069e6 -4.1553727429176114e7 -7.091836147912724e8 -1.1712968089455853e10 -1.9038221148575864e11 -3.070100544274281e12 -4.9314242468029234e13 -7.905719653583081e14 -1.2661516207654468e16 -2.026832257412905e17; + 0.0 0.0 0.0 0.0 0.0 109958.20010240655 7.037324806554019e6 3.002591917463048e8 1.0980907583864862e10 3.748149788625873e11 1.2380985108235143e13 4.024802778042154e14 1.2980781243197372e16 4.17013960565776e17 1.3370561115283118e19 4.282761941599191e20; + 0.0 0.0 0.0 0.0 0.0 0.0 -7.14902837491202e6 -9.150756319887385e8 -7.808645392970569e10 -5.711466344572759e12 -3.899027691228337e14 -2.5758737779469784e16 -1.6747268245191785e18 -1.0802647359418198e20 -6.940806836733636e21 -4.45080936254575e23; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9.222809519256577e8 2.3610392369296838e11 4.029506964359994e13 5.894593045006619e15 8.04808437078237e17 1.0633855994427287e20 1.3827388620055293e22 1.7838420090628812e24 2.2922719589400975e26; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.370298214329408e11 -1.2135926857366569e14 -4.142396367314456e16 -1.2119468228942864e19 -3.309422791049998e21 -8.745416614284383e23 -2.274363584260878e26 -5.86821621488665e28; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.215967622499351e14 1.2451508454393354e17 8.500229771532529e19 4.97384873488532e22 2.7163845890787027e25 1.435653067982757e28 7.467219005025235e30; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.2463680016909867e17 -2.5525616674631408e20 -3.4850975299763416e23 -4.0785598522237415e26 -4.4548749745889186e29 -4.708946553784829e32; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.5538086443402602e20 1.0460400207217706e24 2.856386616584248e27 6.685576903730903e30 1.4604865598763616e34; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.046295463950274e24 -8.571252440680644e27 -4.68104666627039e31 -2.1912648165764018e35; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8.572298863881802e27 1.4044854458583944e32 1.5340726363295958e36; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.4045711740794687e32 -4.602498823223603e36; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.602639284627553e36 + ] + extrapolation_weights_2 = T[ + -2.0 -8.0 -21.333333333333332 -48.76190476190476 -104.02539682539683 -214.7621095750128 -436.3420638984387 -879.5556563622072 -1766.0097884605884 -3538.931552609868 -7084.781837482903 -14176.485787166572 -28359.895376915396 -56726.71540170698 -113460.35587396291; + 0.0 16.0 128.0 682.6666666666666 3120.7619047619046 13315.250793650794 54979.10005120328 223407.13671600062 900664.9921149001 3.616788046767285e6 1.449546363949002e7 5.803853281265994e7 2.322675431369371e8 9.292970517107637e8 3.7176420205662684e9; + 0.0 0.0 -170.66666666666666 -2730.6666666666665 -29127.11111111111 -266305.01587301586 -2.272469468783069e6 -1.876619948414405e7 -1.5251260533145642e8 -1.229707935900877e9 -9.876242559705868e9 -7.916455875646815e10 -6.339355477350803e11 -5.07396190234077e12 -4.060160772061108e13; + 0.0 0.0 0.0 3120.7619047619046 99864.38095238095 2.130440126984127e6 3.895661946485261e7 6.648596388668178e8 1.0980907583864862e10 1.784833232678987e11 2.878219260257138e12 4.623210231377741e13 7.411612175234139e14 1.1870171444676064e16 1.9001552413245984e17; + 0.0 0.0 0.0 0.0 -106522.00634920635 -6.817408406349206e6 -2.908760920042328e8 -1.0637754221869085e10 -3.631020107731315e11 -1.1994079323602793e13 -3.899027691228337e14 -1.2575131829347454e16 -4.039822742980955e17 -1.295273108043052e19 -4.148925630924216e20; + 0.0 0.0 0.0 0.0 0.0 7.037324806554019e6 9.007775752389145e8 7.686635308705403e10 5.62222468293881e12 3.838105383552894e14 2.5356257501665572e16 1.6485592178860662e18 1.0633855994427287e20 6.832356729909674e21 4.381265466255972e23; + 0.0 0.0 0.0 0.0 0.0 0.0 -9.150756319887385e8 -2.3425936178911707e11 -3.998026441200931e13 -5.848541536842505e15 -7.985208711635634e17 -1.0550778994470824e20 -1.371936214646111e22 -1.7699057433670775e24 -2.274363584260878e26; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.3610392369296838e11 1.2088520893079981e14 4.126215131504634e16 1.2072126556173556e19 3.296495358272459e21 8.711254830634834e23 2.2654793515098592e26 5.845293495297249e28; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.2135926857366569e14 -1.2427189101943366e17 -8.483627760260006e19 -4.964134186574997e22 -2.7110791504281586e25 -1.4328490580843533e28 -7.452634592906045e30; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.2451508454393354e17 2.5500689314597588e20 3.481694114419724e23 4.074576883618054e26 4.4505245107465464e29 4.704347973165898e32; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.5525616674631408e20 -1.0455292589929025e24 -2.854991896556619e27 -6.682312461883378e30 -1.4597734316732968e34; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0460400207217706e24 8.569159849752745e27 4.679903832611632e31 2.1907298398145424e35; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -8.571252440680644e27 -1.4043139998811168e32 -1.5338853716034814e36; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.4044854458583944e32 4.602217908988787e36; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -4.602498823223603e36 + ] + extrapolation_scalars = T[ + -1.0, 0.5, -0.125, 0.015625, -0.0009765625, + 3.0517578125e-5, -4.76837158203125e-7, + 3.725290298461914e-9, -1.4551915228366852e-11, + 2.842170943040401e-14, -2.7755575615628914e-17, + 1.3552527156068805e-20, -3.308722450212111e-24, + 4.0389678347315804e-28, -2.465190328815662e-32, + 7.52316384526264e-37, + ] + extrapolation_scalars_2 = T[ + -0.5, 0.125, -0.015625, 0.0009765625, -3.0517578125e-5, + 4.76837158203125e-7, -3.725290298461914e-9, + 1.4551915228366852e-11, -2.842170943040401e-14, + 2.7755575615628914e-17, -1.3552527156068805e-20, + 3.308722450212111e-24, -4.0389678347315804e-28, + 2.465190328815662e-32, -7.52316384526264e-37, ] - extrapolation_weights = T[-1.0 -2.0 -2.6666666666666665 -3.0476190476190474 -3.250793650793651 -3.355657962109575 -3.4089223742065524 -3.4357642826648718 -3.4492378680870868 -3.4559878443455743 -3.4593661315834487 -3.461056100382464 -3.4619012911273677 -3.462323938092467 -3.4625352744739657 -3.4626409458895506; - 0.0 4.0 16.0 42.666666666666664 97.52380952380952 208.05079365079365 429.5242191500256 872.6841277968774 1759.1113127244143 3532.019576921177 7077.863105219736 14169.563674965806 28352.971574333144 56719.79075383079 113453.43080341395 226920.71174792582; - 0.0 0.0 -21.333333333333332 -170.66666666666666 -910.2222222222222 -4161.015873015873 -17753.667724867726 -73305.4667349377 -297876.1822880008 -1.2008866561532002e6 -4.822384062356381e6 -1.9327284852653358e7 -7.738471041687992e7 -3.096900575159161e8 -1.2390627356143517e9 -4.956856027421692e9; - 0.0 0.0 0.0 195.04761904761904 3120.7619047619046 33288.12698412698 304348.589569161 2.597107964323507e6 2.144708512473606e7 1.7430012037880734e8 1.4053804981724308e9 1.1287134353949562e10 9.047378143596361e10 7.244977688400918e11 5.798813602675166e12 4.6401837394984086e13; - 0.0 0.0 0.0 0.0 -3328.8126984126984 -106522.00634920635 -2.272469468783069e6 -4.1553727429176114e7 -7.091836147912724e8 -1.1712968089455853e10 -1.9038221148575864e11 -3.070100544274281e12 -4.9314242468029234e13 -7.905719653583081e14 -1.2661516207654468e16 -2.026832257412905e17; - 0.0 0.0 0.0 0.0 0.0 109958.20010240655 7.037324806554019e6 3.002591917463048e8 1.0980907583864862e10 3.748149788625873e11 1.2380985108235143e13 4.024802778042154e14 1.2980781243197372e16 4.17013960565776e17 1.3370561115283118e19 4.282761941599191e20; - 0.0 0.0 0.0 0.0 0.0 0.0 -7.14902837491202e6 -9.150756319887385e8 -7.808645392970569e10 -5.711466344572759e12 -3.899027691228337e14 -2.5758737779469784e16 -1.6747268245191785e18 -1.0802647359418198e20 -6.940806836733636e21 -4.45080936254575e23; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9.222809519256577e8 2.3610392369296838e11 4.029506964359994e13 5.894593045006619e15 8.04808437078237e17 1.0633855994427287e20 1.3827388620055293e22 1.7838420090628812e24 2.2922719589400975e26; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.370298214329408e11 -1.2135926857366569e14 -4.142396367314456e16 -1.2119468228942864e19 -3.309422791049998e21 -8.745416614284383e23 -2.274363584260878e26 -5.86821621488665e28; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.215967622499351e14 1.2451508454393354e17 8.500229771532529e19 4.97384873488532e22 2.7163845890787027e25 1.435653067982757e28 7.467219005025235e30; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.2463680016909867e17 -2.5525616674631408e20 -3.4850975299763416e23 -4.0785598522237415e26 -4.4548749745889186e29 -4.708946553784829e32; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.5538086443402602e20 1.0460400207217706e24 2.856386616584248e27 6.685576903730903e30 1.4604865598763616e34; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.046295463950274e24 -8.571252440680644e27 -4.68104666627039e31 -2.1912648165764018e35; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8.572298863881802e27 1.4044854458583944e32 1.5340726363295958e36; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.4045711740794687e32 -4.602498823223603e36; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.602639284627553e36] - extrapolation_weights_2 = T[-2.0 -8.0 -21.333333333333332 -48.76190476190476 -104.02539682539683 -214.7621095750128 -436.3420638984387 -879.5556563622072 -1766.0097884605884 -3538.931552609868 -7084.781837482903 -14176.485787166572 -28359.895376915396 -56726.71540170698 -113460.35587396291; - 0.0 16.0 128.0 682.6666666666666 3120.7619047619046 13315.250793650794 54979.10005120328 223407.13671600062 900664.9921149001 3.616788046767285e6 1.449546363949002e7 5.803853281265994e7 2.322675431369371e8 9.292970517107637e8 3.7176420205662684e9; - 0.0 0.0 -170.66666666666666 -2730.6666666666665 -29127.11111111111 -266305.01587301586 -2.272469468783069e6 -1.876619948414405e7 -1.5251260533145642e8 -1.229707935900877e9 -9.876242559705868e9 -7.916455875646815e10 -6.339355477350803e11 -5.07396190234077e12 -4.060160772061108e13; - 0.0 0.0 0.0 3120.7619047619046 99864.38095238095 2.130440126984127e6 3.895661946485261e7 6.648596388668178e8 1.0980907583864862e10 1.784833232678987e11 2.878219260257138e12 4.623210231377741e13 7.411612175234139e14 1.1870171444676064e16 1.9001552413245984e17; - 0.0 0.0 0.0 0.0 -106522.00634920635 -6.817408406349206e6 -2.908760920042328e8 -1.0637754221869085e10 -3.631020107731315e11 -1.1994079323602793e13 -3.899027691228337e14 -1.2575131829347454e16 -4.039822742980955e17 -1.295273108043052e19 -4.148925630924216e20; - 0.0 0.0 0.0 0.0 0.0 7.037324806554019e6 9.007775752389145e8 7.686635308705403e10 5.62222468293881e12 3.838105383552894e14 2.5356257501665572e16 1.6485592178860662e18 1.0633855994427287e20 6.832356729909674e21 4.381265466255972e23; - 0.0 0.0 0.0 0.0 0.0 0.0 -9.150756319887385e8 -2.3425936178911707e11 -3.998026441200931e13 -5.848541536842505e15 -7.985208711635634e17 -1.0550778994470824e20 -1.371936214646111e22 -1.7699057433670775e24 -2.274363584260878e26; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.3610392369296838e11 1.2088520893079981e14 4.126215131504634e16 1.2072126556173556e19 3.296495358272459e21 8.711254830634834e23 2.2654793515098592e26 5.845293495297249e28; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.2135926857366569e14 -1.2427189101943366e17 -8.483627760260006e19 -4.964134186574997e22 -2.7110791504281586e25 -1.4328490580843533e28 -7.452634592906045e30; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.2451508454393354e17 2.5500689314597588e20 3.481694114419724e23 4.074576883618054e26 4.4505245107465464e29 4.704347973165898e32; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.5525616674631408e20 -1.0455292589929025e24 -2.854991896556619e27 -6.682312461883378e30 -1.4597734316732968e34; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0460400207217706e24 8.569159849752745e27 4.679903832611632e31 2.1907298398145424e35; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -8.571252440680644e27 -1.4043139998811168e32 -1.5338853716034814e36; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.4044854458583944e32 4.602217908988787e36; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -4.602498823223603e36] - extrapolation_scalars = T[-1.0, 0.5, -0.125, 0.015625, -0.0009765625, - 3.0517578125e-5, -4.76837158203125e-7, - 3.725290298461914e-9, -1.4551915228366852e-11, - 2.842170943040401e-14, -2.7755575615628914e-17, - 1.3552527156068805e-20, -3.308722450212111e-24, - 4.0389678347315804e-28, -2.465190328815662e-32, - 7.52316384526264e-37] - extrapolation_scalars_2 = T[-0.5, 0.125, -0.015625, 0.0009765625, -3.0517578125e-5, - 4.76837158203125e-7, -3.725290298461914e-9, - 1.4551915228366852e-11, -2.842170943040401e-14, - 2.7755575615628914e-17, -1.3552527156068805e-20, - 3.308722450212111e-24, -4.0389678347315804e-28, - 2.465190328815662e-32, -7.52316384526264e-37] else # sequence == :bulirsch subdividing_sequence = [1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256] - extrapolation_weights = T[-1.0 -2.0 -3.0 -4.0 -4.8 -5.485714285714286 -5.984415584415585 -6.383376623376623 -6.660914737436476 -6.875782954773137 -7.022076209130012 -7.13353773625906 -7.20862760716705 -7.265388454467578 -7.3034271374752615 -7.332068028210459; - 0.0 4.0 24.0 96.0 288.0 768.0 1843.2 4213.028571428571 9192.062337662337 19609.732987012987 40924.660146809714 84489.62094825231 172574.54491557917 350627.6468126053 708636.9282949497 1.4284334932559617e6; - 0.0 0.0 -27.0 -324.0 -1944.0 -9331.2 -37324.8 -137814.64615384614 -472507.35824175825 -1.5641622893520272e6 -5.005319325926487e6 -1.5754447714391567e7 -4.878796711553518e7 -1.4987663497892407e8 -4.567668875548162e8 -1.3865492871229203e9; - 0.0 0.0 0.0 256.0 3072.0 24576.0 147456.0 786432.0 3.7748736e6 1.7256565028571427e7 7.530137467012987e7 3.212858652592208e8 1.3410192636906607e9 5.5371117984646635e9 2.2619690751174793e10 9.191493384604361e10; - 0.0 0.0 0.0 0.0 -1555.2 -37324.8 -447897.6 -4.29981696e6 -3.439853568e7 -2.5401995579076922e8 -1.7418511254224176e9 -1.1532255726934628e10 -7.38064366523816e10 -4.6461756843466455e11 -2.877631391595342e12 -1.768016726996178e13; - 0.0 0.0 0.0 0.0 0.0 22469.485714285714 539267.6571428571 8.628282514285713e6 1.0353939017142858e8 1.1044201618285713e9 1.0602433553554285e10 9.693653534678204e10 8.459915812082797e11 7.219128159643986e12 6.026402637615849e13 4.976642178160185e14; - 0.0 0.0 0.0 0.0 0.0 0.0 -217162.47272727272 -1.0423798690909091e7 -2.501711685818182e8 -4.803286436770909e9 -7.685258298833455e10 -1.1350535333661716e12 -1.5566448457593213e13 -2.061212485419239e14 -2.638351981336626e15 -3.3217283961746376e16; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.663693137582418e6 2.7185727060395604e8 8.699432659326593e9 2.0878638382383826e11 4.454109521575216e12 8.551890281424414e13 1.5637742228890358e15 2.729496825406317e16 4.658341248693448e17; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -9.94469241567476e7 -9.54690471904777e9 -4.5825142651429297e11 -1.7596854778148848e13 -5.630993529007631e14 -1.6633088577991774e16 -4.5622185813920294e17 -1.208201334658303e19; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.95451559685786e9 4.7563349729835455e11 3.044054382709469e13 1.461146103700545e15 6.234223375788993e16 2.393941776302973e18 8.754987067622302e19; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.664005179966794e11 -3.194889945536245e13 -3.067094347714795e15 -2.3555284590449626e17 -1.507538213788776e19 -8.906071909152154e20; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.6222283049151686e13 3.1146783454371235e15 3.986788282159518e17 3.827316750873137e19 3.265976960745077e21; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.066453178967725e15 -4.095180207236064e17 -7.862745997893244e19 -1.2077177852764021e22; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0573083217291824e17 7.90006395544006e19 2.0224163725926554e22; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.676457043743931e19 -2.0555190095953393e22; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0272113415037764e22] - extrapolation_weights_2 = T[-2.0 -12.0 -48.0 -144.0 -384.0 -921.6 -2106.5142857142855 -4596.0311688311685 -9804.866493506493 -20462.330073404857 -42244.810474126156 -86287.27245778959 -175313.82340630266 -354318.46414747485 -714216.7466279808; - 0.0 18.0 216.0 1296.0 6220.8 24883.2 91876.43076923076 315004.9054945055 1.0427748595680182e6 3.336879550617658e6 1.0502965142927712e7 3.2525311410356782e7 9.991775665261604e7 3.0451125836987746e8 9.243661914152801e8; - 0.0 0.0 -192.0 -2304.0 -18432.0 -110592.0 -589824.0 -2.8311552e6 -1.2942423771428572e7 -5.64760310025974e7 -2.409643989444156e8 -1.0057644477679955e9 -4.1528338488484974e9 -1.6964768063381096e10 -6.893620038453271e10; - 0.0 0.0 0.0 1296.0 31104.0 373248.0 3.5831808e6 2.86654464e7 2.116832964923077e8 1.4515426045186813e9 9.610213105778856e9 6.150536387698467e10 3.8718130702888715e11 2.3980261596627847e12 1.473347272496815e13; - 0.0 0.0 0.0 0.0 -19660.8 -471859.2 -7.5497472e6 -9.05969664e7 -9.663676416e8 -9.27712935936e9 -8.481946842843428e10 -7.402426335572446e11 -6.316737139688488e12 -5.273102307913868e13 -4.354561905890162e14; - 0.0 0.0 0.0 0.0 0.0 199065.6 9.5551488e6 2.293235712e8 4.40301256704e9 7.044820107264e10 1.0404657389189907e12 1.4269244419460445e13 1.8894447783009694e14 2.4184893162252405e15 3.0449176964934176e16; - 0.0 0.0 0.0 0.0 0.0 0.0 -5.309712316483516e6 -2.5486619119120878e8 -8.155718118118681e9 -1.9573723483484836e11 -4.1757276764767646e12 -8.017397138835389e13 -1.466038333958471e15 -2.558903273818422e16 -4.367194920650107e17; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9.530330231688312e7 9.149117022420778e9 4.391576170761974e11 1.686365249572598e13 5.396368798632314e14 1.594004322057545e16 4.372126140500695e17 1.1578596123808737e19; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -4.799686984456052e9 -4.6076995050778094e11 -2.948927683249798e13 -1.415485287959903e15 -6.0394038952955864e16 -2.3191310957935053e18 -8.481393721759105e19; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.6293384053841528e11 3.128329738337573e13 3.00319654880407e15 2.306454949481526e17 1.4761311676681767e19 8.72052874437815e20; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.596880987650869e13 -3.0660114962896685e15 -3.9244947152507757e17 -3.767514926640745e19 -3.2149460707334354e21; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0553442916868112e15 4.052522080077355e17 7.780842393748523e19 1.195137391679773e22; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.0412356004656733e17 -7.838344705788186e19 -2.0066162446817756e22; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.662517163307765e19 2.0448131814203635e22; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0231987972010274e22] - extrapolation_scalars = T[-1.0, 0.5, -0.16666666666666666, 0.041666666666666664, - -0.006944444444444444, 0.0008680555555555555, - -7.233796296296296e-5, 4.521122685185185e-6, - -1.8838011188271604e-7, 5.886878496334876e-9, - -1.226433020069766e-10, 1.9163015938590095e-12, - -1.9961474936031345e-14, 1.5594902293774489e-16, - -8.122344944674213e-19, 3.1727909940133645e-21] - extrapolation_scalars_2 = T[-0.5, 0.16666666666666666, -0.041666666666666664, - 0.006944444444444444, -0.0008680555555555555, - 7.233796296296296e-5, -4.521122685185185e-6, - 1.8838011188271604e-7, -5.886878496334876e-9, - 1.226433020069766e-10, -1.9163015938590095e-12, - 1.9961474936031345e-14, -1.5594902293774489e-16, - 8.122344944674213e-19, -3.1727909940133645e-21] + extrapolation_weights = T[ + -1.0 -2.0 -3.0 -4.0 -4.8 -5.485714285714286 -5.984415584415585 -6.383376623376623 -6.660914737436476 -6.875782954773137 -7.022076209130012 -7.13353773625906 -7.20862760716705 -7.265388454467578 -7.3034271374752615 -7.332068028210459; + 0.0 4.0 24.0 96.0 288.0 768.0 1843.2 4213.028571428571 9192.062337662337 19609.732987012987 40924.660146809714 84489.62094825231 172574.54491557917 350627.6468126053 708636.9282949497 1.4284334932559617e6; + 0.0 0.0 -27.0 -324.0 -1944.0 -9331.2 -37324.8 -137814.64615384614 -472507.35824175825 -1.5641622893520272e6 -5.005319325926487e6 -1.5754447714391567e7 -4.878796711553518e7 -1.4987663497892407e8 -4.567668875548162e8 -1.3865492871229203e9; + 0.0 0.0 0.0 256.0 3072.0 24576.0 147456.0 786432.0 3.7748736e6 1.7256565028571427e7 7.530137467012987e7 3.212858652592208e8 1.3410192636906607e9 5.5371117984646635e9 2.2619690751174793e10 9.191493384604361e10; + 0.0 0.0 0.0 0.0 -1555.2 -37324.8 -447897.6 -4.29981696e6 -3.439853568e7 -2.5401995579076922e8 -1.7418511254224176e9 -1.1532255726934628e10 -7.38064366523816e10 -4.6461756843466455e11 -2.877631391595342e12 -1.768016726996178e13; + 0.0 0.0 0.0 0.0 0.0 22469.485714285714 539267.6571428571 8.628282514285713e6 1.0353939017142858e8 1.1044201618285713e9 1.0602433553554285e10 9.693653534678204e10 8.459915812082797e11 7.219128159643986e12 6.026402637615849e13 4.976642178160185e14; + 0.0 0.0 0.0 0.0 0.0 0.0 -217162.47272727272 -1.0423798690909091e7 -2.501711685818182e8 -4.803286436770909e9 -7.685258298833455e10 -1.1350535333661716e12 -1.5566448457593213e13 -2.061212485419239e14 -2.638351981336626e15 -3.3217283961746376e16; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.663693137582418e6 2.7185727060395604e8 8.699432659326593e9 2.0878638382383826e11 4.454109521575216e12 8.551890281424414e13 1.5637742228890358e15 2.729496825406317e16 4.658341248693448e17; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -9.94469241567476e7 -9.54690471904777e9 -4.5825142651429297e11 -1.7596854778148848e13 -5.630993529007631e14 -1.6633088577991774e16 -4.5622185813920294e17 -1.208201334658303e19; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.95451559685786e9 4.7563349729835455e11 3.044054382709469e13 1.461146103700545e15 6.234223375788993e16 2.393941776302973e18 8.754987067622302e19; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.664005179966794e11 -3.194889945536245e13 -3.067094347714795e15 -2.3555284590449626e17 -1.507538213788776e19 -8.906071909152154e20; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.6222283049151686e13 3.1146783454371235e15 3.986788282159518e17 3.827316750873137e19 3.265976960745077e21; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.066453178967725e15 -4.095180207236064e17 -7.862745997893244e19 -1.2077177852764021e22; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0573083217291824e17 7.90006395544006e19 2.0224163725926554e22; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.676457043743931e19 -2.0555190095953393e22; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0272113415037764e22 + ] + extrapolation_weights_2 = T[ + -2.0 -12.0 -48.0 -144.0 -384.0 -921.6 -2106.5142857142855 -4596.0311688311685 -9804.866493506493 -20462.330073404857 -42244.810474126156 -86287.27245778959 -175313.82340630266 -354318.46414747485 -714216.7466279808; + 0.0 18.0 216.0 1296.0 6220.8 24883.2 91876.43076923076 315004.9054945055 1.0427748595680182e6 3.336879550617658e6 1.0502965142927712e7 3.2525311410356782e7 9.991775665261604e7 3.0451125836987746e8 9.243661914152801e8; + 0.0 0.0 -192.0 -2304.0 -18432.0 -110592.0 -589824.0 -2.8311552e6 -1.2942423771428572e7 -5.64760310025974e7 -2.409643989444156e8 -1.0057644477679955e9 -4.1528338488484974e9 -1.6964768063381096e10 -6.893620038453271e10; + 0.0 0.0 0.0 1296.0 31104.0 373248.0 3.5831808e6 2.86654464e7 2.116832964923077e8 1.4515426045186813e9 9.610213105778856e9 6.150536387698467e10 3.8718130702888715e11 2.3980261596627847e12 1.473347272496815e13; + 0.0 0.0 0.0 0.0 -19660.8 -471859.2 -7.5497472e6 -9.05969664e7 -9.663676416e8 -9.27712935936e9 -8.481946842843428e10 -7.402426335572446e11 -6.316737139688488e12 -5.273102307913868e13 -4.354561905890162e14; + 0.0 0.0 0.0 0.0 0.0 199065.6 9.5551488e6 2.293235712e8 4.40301256704e9 7.044820107264e10 1.0404657389189907e12 1.4269244419460445e13 1.8894447783009694e14 2.4184893162252405e15 3.0449176964934176e16; + 0.0 0.0 0.0 0.0 0.0 0.0 -5.309712316483516e6 -2.5486619119120878e8 -8.155718118118681e9 -1.9573723483484836e11 -4.1757276764767646e12 -8.017397138835389e13 -1.466038333958471e15 -2.558903273818422e16 -4.367194920650107e17; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9.530330231688312e7 9.149117022420778e9 4.391576170761974e11 1.686365249572598e13 5.396368798632314e14 1.594004322057545e16 4.372126140500695e17 1.1578596123808737e19; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -4.799686984456052e9 -4.6076995050778094e11 -2.948927683249798e13 -1.415485287959903e15 -6.0394038952955864e16 -2.3191310957935053e18 -8.481393721759105e19; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.6293384053841528e11 3.128329738337573e13 3.00319654880407e15 2.306454949481526e17 1.4761311676681767e19 8.72052874437815e20; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.596880987650869e13 -3.0660114962896685e15 -3.9244947152507757e17 -3.767514926640745e19 -3.2149460707334354e21; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0553442916868112e15 4.052522080077355e17 7.780842393748523e19 1.195137391679773e22; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.0412356004656733e17 -7.838344705788186e19 -2.0066162446817756e22; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.662517163307765e19 2.0448131814203635e22; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0231987972010274e22 + ] + extrapolation_scalars = T[ + -1.0, 0.5, -0.16666666666666666, 0.041666666666666664, + -0.006944444444444444, 0.0008680555555555555, + -7.233796296296296e-5, 4.521122685185185e-6, + -1.8838011188271604e-7, 5.886878496334876e-9, + -1.226433020069766e-10, 1.9163015938590095e-12, + -1.9961474936031345e-14, 1.5594902293774489e-16, + -8.122344944674213e-19, 3.1727909940133645e-21, + ] + extrapolation_scalars_2 = T[ + -0.5, 0.16666666666666666, -0.041666666666666664, + 0.006944444444444444, -0.0008680555555555555, + 7.233796296296296e-5, -4.521122685185185e-6, + 1.8838011188271604e-7, -5.886878496334876e-9, + 1.226433020069766e-10, -1.9163015938590095e-12, + 1.9961474936031345e-14, -1.5594902293774489e-16, + 8.122344944674213e-19, -3.1727909940133645e-21, + ] end - extrapolation_coefficients(subdividing_sequence, + return extrapolation_coefficients( + subdividing_sequence, extrapolation_weights, extrapolation_scalars, - extrapolation_weights_2, extrapolation_scalars_2) + extrapolation_weights_2, extrapolation_scalars_2 + ) end -function create_extrapolation_coefficients(T::Type{<:CompiledFloats}, - alg::Union{ExtrapolationMidpointDeuflhard, +function create_extrapolation_coefficients( + T::Type{<:CompiledFloats}, + alg::Union{ + ExtrapolationMidpointDeuflhard, ExtrapolationMidpointHairerWanner, ImplicitDeuflhardExtrapolation, - ImplicitHairerWannerExtrapolation}) + ImplicitHairerWannerExtrapolation, + } + ) # Compute and return extrapolation_coefficients (; min_order, init_order, max_order, sequence) = alg @@ -688,53 +771,61 @@ function create_extrapolation_coefficients(T::Type{<:CompiledFloats}, 18, 19, 20, - 21 + 21, + ] + extrapolation_weights = T[ + -1.0 -1.3333333333333333 -1.5 -1.6 -1.6666666666666667 -1.7142857142857142 -1.75 -1.7777777777777777 -1.8 -1.8181818181818181 -1.8333333333333333 -1.8461538461538463 -1.8571428571428572 -1.8666666666666667 -1.875 -1.8823529411764706; + 0.0 5.333333333333333 38.4 204.8 975.2380952380952 4388.571428571428 19114.666666666668 81555.91111111111 343170.32727272727 1.4298763636363635e6 5.915044102564103e6 2.433618145054945e7 9.970459794285715e7 4.0712710826666665e8 1.6579836988235295e9 6.737203601568627e9; + 0.0 0.0 -72.9 -1499.6571428571428 -21088.928571428572 -253067.14285714287 -2.79006525e6 -2.9219592436363637e7 -2.9584837341818184e8 -2.925972923916084e9 -2.8449861733434067e10 -2.7311867264096704e11 -2.596334381793193e12 -2.449162486354648e13 -2.2960898309574828e14 -2.141777720860745e15; + 0.0 0.0 0.0 1872.4571428571428 83220.31746031746 2.3967451428571427e6 5.6940854303030305e7 1.214738225131313e9 2.422001138107972e10 4.613335501158042e11 8.50611193356378e12 1.5311001480414803e14 2.7059443139242895e15 4.7143563158147624e16 8.120422362168969e17 1.3858854164768373e19; + 0.0 0.0 0.0 0.0 -77504.96031746031 -6.341314935064935e6 -3.236712831439394e8 -1.3278821872571873e10 -4.80171683784965e11 -1.6005722792832168e13 -5.043469942533053e14 -1.525755612867142e16 -4.4766093502525523e17 -1.2827711003647664e19 -3.607793719775906e20 -9.995618963881296e21; + 0.0 0.0 0.0 0.0 0.0 4.711650077922078e6 6.393346721118882e8 5.260811016234965e10 3.4090055385202573e12 1.9175656154176447e14 9.826959789128542e15 4.7169406987817e17 2.15773437679608e19 9.515608601670712e20 4.078117972144591e22 1.708360692331116e24; + 0.0 0.0 0.0 0.0 0.0 0.0 -3.952348909376457e8 -8.263044119869713e10 -1.0248756909925902e13 -9.846844874242534e14 -8.108603230469998e16 -6.022558357283822e18 -4.1560671463889437e20 -2.715297202307443e22 -1.7009177076954297e24 -1.0307396968759164e26; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.3741255122091064e10 1.3338509797230594e13 2.371290630618772e15 3.221627130440662e17 3.711314454267642e19 3.8230073464151254e21 3.6330154661690406e23 3.249405137443117e25 2.772825717284793e27; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -6.174193142616171e12 -2.6321560239574205e15 -6.449440297701669e17 -1.1940678036887662e20 -1.8574538823517637e22 -2.5642554640188345e24 -3.245385821648838e26 -3.845504022726303e28; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.082508822446903e15 6.237312738860727e17 2.041302350899874e20 4.99971155510259e22 1.0207744425001122e25 1.837393996500202e27 3.015210660923408e29; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.30788366240374e17 -1.748372388422729e20 -7.448430618928414e22 -2.355293074113417e25 -6.165659032955555e27 -1.4147218829987503e30; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.87960511179021e19 5.723442800021062e22 3.1065086459191243e25 1.2426034583676497e28 4.089940525827236e30; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.7640007344435631e22 -2.1641022343595773e25 -1.4694640618129094e28 -7.307458985088932e30; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.155890364150897e24 9.361198795139813e27 7.828458512415587e30; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.472332709198601e27 -4.593753679027078e30; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.1322357960170301e30 + ] + extrapolation_weights_2 = T[ + -4.0 -28.8 -153.6 -731.4285714285714 -3291.4285714285716 -14336.0 -61166.933333333334 -257377.74545454545 -1.0724072727272727e6 -4.436283076923077e6 -1.8252136087912086e7 -7.477844845714286e7 -3.053453312e8 -1.2434877741176472e9 -5.052902701176471e9; + 0.0 64.8 1333.0285714285715 18745.714285714286 224948.57142857142 2.480058e6 2.5972971054545455e7 2.6297633192727274e8 2.6008648212587414e9 2.5288765985274727e10 2.4277215345863736e11 2.3078527838161714e12 2.1770333212041316e13 2.0409687386288734e14 1.9038024185428845e15; + 0.0 0.0 -1755.4285714285713 -78019.04761904762 -2.2469485714285714e6 -5.338205090909091e7 -1.138817086060606e9 -2.2706260669762238e10 -4.325002032335664e11 -7.974479937716044e12 -1.4354063887888878e14 -2.5368227943040215e15 -4.41970904607634e16 -7.612895964533408e17 -1.299267577947035e19; + 0.0 0.0 0.0 74404.76190476191 6.087662337662337e6 3.107244318181818e8 1.2747668997668997e10 4.609648164335664e11 1.536549388111888e13 4.8417311448317306e14 1.4647253883524564e16 4.29754497624245e17 1.2314602563501758e19 3.4634819709848696e20 9.595794205326044e21; + 0.0 0.0 0.0 0.0 -4.580770909090909e6 -6.215753756643356e8 -5.114677376895105e10 -3.314310940228028e12 -1.8642999038782656e14 -9.553988683874972e15 -4.585914568259986e17 -2.0977973107739664e19 -9.251286140513193e20 -3.964836917362797e22 -1.6609062286552515e24; + 0.0 0.0 0.0 0.0 0.0 3.8716887275524473e8 8.094410566402983e10 1.0039598605641701e13 9.64588885640085e14 7.943121531888978e16 5.899649003053539e18 4.071249449523863e20 2.659882973688924e22 1.6662051014159312e24 1.0097041928580407e26; + 0.0 0.0 0.0 0.0 0.0 0.0 -4.3057798010808395e10 -1.3130095581648865e13 -2.3342392145153535e15 -3.1712892065275264e17 -3.65332516591971e19 -3.763272856627389e21 -3.5762495995101494e23 -3.198633182170568e25 -2.729500315452218e27; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.097968535917206e12 2.59966027057523e15 6.369817577976957e17 1.1793262258654482e20 1.8345223529400134e22 2.532597989154405e24 3.205319330023544e26 3.7980286644210397e28; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0716837342224339e15 -6.174939611472119e17 -2.0208893273908753e20 -4.949714439551565e22 -1.010566698075111e25 -1.8190200565352e27 -2.9850585543141743e29; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.2888102437061885e17 1.733923029840723e20 7.38687334108603e22 2.3358278420959505e25 6.114703173179063e27 1.4030299666103307e30; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5.838774520736112e19 -5.6836966694653606e22 -3.0849356692113527e25 -1.233974267684541e28 -4.061538161064547e30; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.753562860275258e22 2.1512968956947278e25 1.4607690081927147e28 7.2642195828103e30; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -6.124482760252167e24 -9.313437576797262e27 -7.788517397556324e30; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.461344563824385e27 4.57333699600918e30; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.1278129999388386e30 + ] + extrapolation_scalars = T[ + -1.0, 0.25, -0.027777777777777776, 0.001736111111111111, + -6.944444444444444e-5, 1.9290123456790124e-6, + -3.936759889140842e-8, 6.151187326782565e-10, + -7.594058428126624e-12, 7.594058428126623e-14, + -6.276081345559193e-16, 4.358389823304995e-18, + -2.5789288895295828e-20, 1.3157800456783586e-22, + -5.8479113141260385e-25, 2.2843403570804838e-27, + ] + extrapolation_scalars_2 = T[ + -0.25, 0.027777777777777776, -0.001736111111111111, + 6.944444444444444e-5, -1.9290123456790124e-6, + 3.936759889140842e-8, -6.151187326782565e-10, + 7.594058428126624e-12, -7.594058428126623e-14, + 6.276081345559193e-16, -4.358389823304995e-18, + 2.5789288895295828e-20, -1.3157800456783586e-22, + 5.8479113141260385e-25, -2.2843403570804838e-27, ] - extrapolation_weights = T[-1.0 -1.3333333333333333 -1.5 -1.6 -1.6666666666666667 -1.7142857142857142 -1.75 -1.7777777777777777 -1.8 -1.8181818181818181 -1.8333333333333333 -1.8461538461538463 -1.8571428571428572 -1.8666666666666667 -1.875 -1.8823529411764706; - 0.0 5.333333333333333 38.4 204.8 975.2380952380952 4388.571428571428 19114.666666666668 81555.91111111111 343170.32727272727 1.4298763636363635e6 5.915044102564103e6 2.433618145054945e7 9.970459794285715e7 4.0712710826666665e8 1.6579836988235295e9 6.737203601568627e9; - 0.0 0.0 -72.9 -1499.6571428571428 -21088.928571428572 -253067.14285714287 -2.79006525e6 -2.9219592436363637e7 -2.9584837341818184e8 -2.925972923916084e9 -2.8449861733434067e10 -2.7311867264096704e11 -2.596334381793193e12 -2.449162486354648e13 -2.2960898309574828e14 -2.141777720860745e15; - 0.0 0.0 0.0 1872.4571428571428 83220.31746031746 2.3967451428571427e6 5.6940854303030305e7 1.214738225131313e9 2.422001138107972e10 4.613335501158042e11 8.50611193356378e12 1.5311001480414803e14 2.7059443139242895e15 4.7143563158147624e16 8.120422362168969e17 1.3858854164768373e19; - 0.0 0.0 0.0 0.0 -77504.96031746031 -6.341314935064935e6 -3.236712831439394e8 -1.3278821872571873e10 -4.80171683784965e11 -1.6005722792832168e13 -5.043469942533053e14 -1.525755612867142e16 -4.4766093502525523e17 -1.2827711003647664e19 -3.607793719775906e20 -9.995618963881296e21; - 0.0 0.0 0.0 0.0 0.0 4.711650077922078e6 6.393346721118882e8 5.260811016234965e10 3.4090055385202573e12 1.9175656154176447e14 9.826959789128542e15 4.7169406987817e17 2.15773437679608e19 9.515608601670712e20 4.078117972144591e22 1.708360692331116e24; - 0.0 0.0 0.0 0.0 0.0 0.0 -3.952348909376457e8 -8.263044119869713e10 -1.0248756909925902e13 -9.846844874242534e14 -8.108603230469998e16 -6.022558357283822e18 -4.1560671463889437e20 -2.715297202307443e22 -1.7009177076954297e24 -1.0307396968759164e26; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.3741255122091064e10 1.3338509797230594e13 2.371290630618772e15 3.221627130440662e17 3.711314454267642e19 3.8230073464151254e21 3.6330154661690406e23 3.249405137443117e25 2.772825717284793e27; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -6.174193142616171e12 -2.6321560239574205e15 -6.449440297701669e17 -1.1940678036887662e20 -1.8574538823517637e22 -2.5642554640188345e24 -3.245385821648838e26 -3.845504022726303e28; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.082508822446903e15 6.237312738860727e17 2.041302350899874e20 4.99971155510259e22 1.0207744425001122e25 1.837393996500202e27 3.015210660923408e29; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.30788366240374e17 -1.748372388422729e20 -7.448430618928414e22 -2.355293074113417e25 -6.165659032955555e27 -1.4147218829987503e30; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.87960511179021e19 5.723442800021062e22 3.1065086459191243e25 1.2426034583676497e28 4.089940525827236e30; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.7640007344435631e22 -2.1641022343595773e25 -1.4694640618129094e28 -7.307458985088932e30; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.155890364150897e24 9.361198795139813e27 7.828458512415587e30; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.472332709198601e27 -4.593753679027078e30; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.1322357960170301e30] - extrapolation_weights_2 = T[-4.0 -28.8 -153.6 -731.4285714285714 -3291.4285714285716 -14336.0 -61166.933333333334 -257377.74545454545 -1.0724072727272727e6 -4.436283076923077e6 -1.8252136087912086e7 -7.477844845714286e7 -3.053453312e8 -1.2434877741176472e9 -5.052902701176471e9; - 0.0 64.8 1333.0285714285715 18745.714285714286 224948.57142857142 2.480058e6 2.5972971054545455e7 2.6297633192727274e8 2.6008648212587414e9 2.5288765985274727e10 2.4277215345863736e11 2.3078527838161714e12 2.1770333212041316e13 2.0409687386288734e14 1.9038024185428845e15; - 0.0 0.0 -1755.4285714285713 -78019.04761904762 -2.2469485714285714e6 -5.338205090909091e7 -1.138817086060606e9 -2.2706260669762238e10 -4.325002032335664e11 -7.974479937716044e12 -1.4354063887888878e14 -2.5368227943040215e15 -4.41970904607634e16 -7.612895964533408e17 -1.299267577947035e19; - 0.0 0.0 0.0 74404.76190476191 6.087662337662337e6 3.107244318181818e8 1.2747668997668997e10 4.609648164335664e11 1.536549388111888e13 4.8417311448317306e14 1.4647253883524564e16 4.29754497624245e17 1.2314602563501758e19 3.4634819709848696e20 9.595794205326044e21; - 0.0 0.0 0.0 0.0 -4.580770909090909e6 -6.215753756643356e8 -5.114677376895105e10 -3.314310940228028e12 -1.8642999038782656e14 -9.553988683874972e15 -4.585914568259986e17 -2.0977973107739664e19 -9.251286140513193e20 -3.964836917362797e22 -1.6609062286552515e24; - 0.0 0.0 0.0 0.0 0.0 3.8716887275524473e8 8.094410566402983e10 1.0039598605641701e13 9.64588885640085e14 7.943121531888978e16 5.899649003053539e18 4.071249449523863e20 2.659882973688924e22 1.6662051014159312e24 1.0097041928580407e26; - 0.0 0.0 0.0 0.0 0.0 0.0 -4.3057798010808395e10 -1.3130095581648865e13 -2.3342392145153535e15 -3.1712892065275264e17 -3.65332516591971e19 -3.763272856627389e21 -3.5762495995101494e23 -3.198633182170568e25 -2.729500315452218e27; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.097968535917206e12 2.59966027057523e15 6.369817577976957e17 1.1793262258654482e20 1.8345223529400134e22 2.532597989154405e24 3.205319330023544e26 3.7980286644210397e28; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.0716837342224339e15 -6.174939611472119e17 -2.0208893273908753e20 -4.949714439551565e22 -1.010566698075111e25 -1.8190200565352e27 -2.9850585543141743e29; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.2888102437061885e17 1.733923029840723e20 7.38687334108603e22 2.3358278420959505e25 6.114703173179063e27 1.4030299666103307e30; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -5.838774520736112e19 -5.6836966694653606e22 -3.0849356692113527e25 -1.233974267684541e28 -4.061538161064547e30; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.753562860275258e22 2.1512968956947278e25 1.4607690081927147e28 7.2642195828103e30; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -6.124482760252167e24 -9.313437576797262e27 -7.788517397556324e30; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.461344563824385e27 4.57333699600918e30; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.1278129999388386e30] - extrapolation_scalars = T[-1.0, 0.25, -0.027777777777777776, 0.001736111111111111, - -6.944444444444444e-5, 1.9290123456790124e-6, - -3.936759889140842e-8, 6.151187326782565e-10, - -7.594058428126624e-12, 7.594058428126623e-14, - -6.276081345559193e-16, 4.358389823304995e-18, - -2.5789288895295828e-20, 1.3157800456783586e-22, - -5.8479113141260385e-25, 2.2843403570804838e-27] - extrapolation_scalars_2 = T[-0.25, 0.027777777777777776, -0.001736111111111111, - 6.944444444444444e-5, -1.9290123456790124e-6, - 3.936759889140842e-8, -6.151187326782565e-10, - 7.594058428126624e-12, -7.594058428126623e-14, - 6.276081345559193e-16, -4.358389823304995e-18, - 2.5789288895295828e-20, -1.3157800456783586e-22, - 5.8479113141260385e-25, -2.2843403570804838e-27] elseif sequence == :romberg subdividing_sequence = [ 1, @@ -752,104 +843,122 @@ function create_extrapolation_coefficients(T::Type{<:CompiledFloats}, 4096, 8192, 16384, - 32768 + 32768, + ] + extrapolation_weights = T[ + -1.0 -1.3333333333333333 -1.4222222222222223 -1.4447971781305116 -1.4504630494172979 -1.451880901860521 -1.452235451531305 -1.4523240943593299 -1.4523462554044868 -1.4523517956869105 -1.4523531807588372 -1.4523535270269017 -1.4523536135939228 -1.4523536352356785 -1.4523536406461173 -1.452353641998727; + 0.0 5.333333333333333 28.444444444444443 121.36296296296297 493.15743680188126 1980.3655501377505 7929.205565360925 31724.5675171852 126906.01579724405 507631.8090356717 2.0305349820189304e6 8.122147673959353e6 3.248859844172289e7 1.2995440151277749e8 5.19817613796996e8 2.07927046293387e9; + 0.0 0.0 -91.02222222222223 -1941.8074074074075 -33140.17975308642 -538659.4296374682 -8.652349112921841e6 -1.3857291091506496e8 -2.2177080072599993e9 -3.54854939788296e10 -5.677765672441477e11 -9.084459730370057e12 -1.4535149430390788e14 -2.325624463334606e15 -3.720999363124215e16 -5.953599069714284e17; + 0.0 0.0 0.0 5917.889241622575 504993.2152851264 3.4474203496797964e7 2.241370436871182e9 1.4401024799097037e11 9.225665310201598e12 5.905867660750885e14 3.77998601491761e16 2.4192279640364677e18 1.5483118033241417e20 9.909204991428803e21 6.341892706539483e23 4.05881157410929e25; + 0.0 0.0 0.0 0.0 -1.5209207425057925e6 -5.1914094677531046e8 -1.4176008786611145e11 -3.6866623485688414e13 -9.474866810815984e15 -2.4279369357326935e18 -6.217036386624773e20 -1.591658462098873e23 -4.074707838080507e25 -1.0431291857706623e28 -2.670413262277438e30 -6.836259581321538e32; + 0.0 0.0 0.0 0.0 0.0 1.5589452477944808e9 2.1284799116553977e12 2.3248676581708025e15 2.4184528070774876e18 2.486207422190278e21 2.5483650380553205e24 2.6101630458060033e27 2.6729701040532997e30 2.7371631523457504e33 2.8028657600863993e36 2.870137275504677e39; + 0.0 0.0 0.0 0.0 0.0 0.0 -6.386999060908798e12 -3.4881530871309916e16 -1.5239973381214444e20 -6.341377114357268e23 -2.607614058456583e27 -1.069122783562139e31 -4.380196305334128e34 -1.7942379182565492e38 -7.349310654759861e41 -3.010289127531343e45; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0465098000284594e17 2.2861355418221703e21 3.995311436502874e25 6.649821721972122e29 1.0937793665786103e34 1.7937998718897874e38 2.93967940527153e42 4.816664723480877e46 7.891743901406595e50; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -6.858511278043386e21 -5.993058601571351e26 -4.189451610800854e31 -2.7891799442838834e36 -1.835085270122301e41 -1.2038170852496654e46 -7.891262227584487e50 -5.171933283225826e55; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.7979244390088466e27 6.284201388527134e32 1.7571900680469942e38 4.679485289631606e43 1.2315095760466199e49 3.231484209329825e54 8.473210620642257e59; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.8852622144842938e33 -2.635787615753444e39 -2.948078543974702e45 -3.140352413792322e51 -3.305811498811932e57 -3.46978305819599e63; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.907364732522996e39 4.422118870277351e46 1.9784224923818425e53 8.429821331796452e59 3.549588914822444e66; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.3266357401568573e47 -2.9676339154575293e54 -5.310787755579382e61 -9.051452272305827e68; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8.902901879036164e54 7.966181752074431e62 5.702415016525277e70; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.389854534525231e63 -8.553622556652643e71; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.5660867693856473e72 + ] + extrapolation_weights_2 = T[ + -4.0 -21.333333333333332 -91.02222222222223 -369.86807760141096 -1485.274162603313 -5946.904174020694 -23793.4256378889 -95179.51184793304 -380723.8567767538 -1.522901236514198e6 -6.091610755469514e6 -2.4366448831292167e7 -9.746580113458312e7 -3.89863210347747e8 -1.5594528472004025e9; + 0.0 85.33333333333333 1820.4444444444443 31068.91851851852 504993.2152851264 8.111577293364226e6 1.299121039828734e8 2.0791012568062494e9 3.3267650605152744e10 5.322905317913885e11 8.516680997221928e12 1.3626702590991364e14 2.1802729343761932e15 3.4884369029289516e16 5.5814991278571405e17; + 0.0 0.0 -5825.422222222222 -497102.6962962963 -3.3935544067160495e7 -2.2063490237950697e9 -1.4176008786611145e11 -9.081514289729697e12 -5.813588478551652e14 -3.7209237334345224e16 -2.3814275270983977e18 -1.524119431397202e20 -9.754373663437728e21 -6.242800632999802e23 -3.995392643263833e25; + 0.0 0.0 0.0 1.5149796458553793e6 5.1711305245196944e8 1.4120633752288446e11 3.6722613237697445e13 9.437855612336234e15 2.4184528070774876e18 6.19275108823952e20 1.585441046231299e23 4.058791010588005e25 1.0390544623887458e28 2.659981960471667e30 6.809555442332001e32; + 0.0 0.0 0.0 0.0 -1.5574228403259315e9 -2.1264013179916716e12 -2.32259727959837e15 -2.416091036758076e18 -2.4837794852545453e21 -2.545876400322845e24 -2.607614058456583e27 -2.6703597816860604e30 -2.7344901414547876e33 -2.8001285864925646e36 -2.867334407071567e39; + 0.0 0.0 0.0 0.0 0.0 6.385439734966193e12 3.4873014872562036e16 1.523625268458817e20 6.339828926585209e23 2.606977433930593e27 1.0688617672575583e31 4.379126921470521e34 1.7937998718897874e38 7.34751638946329e41 3.009554193662317e45; + 0.0 0.0 0.0 0.0 0.0 0.0 -1.0464459261392974e17 -2.2859960071821667e21 -3.995067582045079e25 -6.649415849064287e29 -1.093712607584068e34 -1.7936903870343255e38 -2.9394999814797044e42 -4.816370737596875e46 -7.891262227584487e50; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.858406625466511e21 5.99296715475431e26 4.1893876848424375e31 2.789137384775456e36 1.8350572689432526e41 1.2037987164586916e46 7.89114181647872e50 5.171854365786813e55; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.7979175804714053e27 -6.284177416201281e32 -1.7571833648988464e38 -4.679467438811868e43 -1.2315048782104076e49 -3.231471882195848e54 -8.47317829790887e59; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.8852604165581403e33 2.6357851020704912e39 2.948075732467912e45 3.140349418918881e51 3.305808346144411e57 3.4697797491530044e63; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -7.907362847260331e39 -4.4221178159620535e46 -1.978422020689163e53 -8.429819321970427e59 -3.549588068534498e66; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.3266356610832054e47 2.967633738572764e54 5.310787439031764e61 9.051451732797232e68; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -8.902901746372587e54 -7.966181633369073e62 -5.702414931552672e70; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.3898545256223295e63 8.553622524787915e71; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.5660867669957927e72 + ] + extrapolation_scalars = T[ + -1.0, 0.25, -0.015625, 0.000244140625, + -9.5367431640625e-7, 9.313225746154785e-10, + -2.2737367544323206e-13, 1.3877787807814457e-17, + -2.117582368135751e-22, 8.077935669463161e-28, + -7.703719777548943e-34, 1.8367099231598242e-40, + -1.0947644252537633e-47, 1.6313261169996311e-55, + -6.077163357286271e-64, 5.659799424266695e-73, + ] + extrapolation_scalars_2 = T[ + -0.25, 0.015625, -0.000244140625, 9.5367431640625e-7, + -9.313225746154785e-10, 2.2737367544323206e-13, + -1.3877787807814457e-17, 2.117582368135751e-22, + -8.077935669463161e-28, 7.703719777548943e-34, + -1.8367099231598242e-40, 1.0947644252537633e-47, + -1.6313261169996311e-55, 6.077163357286271e-64, + -5.659799424266695e-73, ] - extrapolation_weights = T[-1.0 -1.3333333333333333 -1.4222222222222223 -1.4447971781305116 -1.4504630494172979 -1.451880901860521 -1.452235451531305 -1.4523240943593299 -1.4523462554044868 -1.4523517956869105 -1.4523531807588372 -1.4523535270269017 -1.4523536135939228 -1.4523536352356785 -1.4523536406461173 -1.452353641998727; - 0.0 5.333333333333333 28.444444444444443 121.36296296296297 493.15743680188126 1980.3655501377505 7929.205565360925 31724.5675171852 126906.01579724405 507631.8090356717 2.0305349820189304e6 8.122147673959353e6 3.248859844172289e7 1.2995440151277749e8 5.19817613796996e8 2.07927046293387e9; - 0.0 0.0 -91.02222222222223 -1941.8074074074075 -33140.17975308642 -538659.4296374682 -8.652349112921841e6 -1.3857291091506496e8 -2.2177080072599993e9 -3.54854939788296e10 -5.677765672441477e11 -9.084459730370057e12 -1.4535149430390788e14 -2.325624463334606e15 -3.720999363124215e16 -5.953599069714284e17; - 0.0 0.0 0.0 5917.889241622575 504993.2152851264 3.4474203496797964e7 2.241370436871182e9 1.4401024799097037e11 9.225665310201598e12 5.905867660750885e14 3.77998601491761e16 2.4192279640364677e18 1.5483118033241417e20 9.909204991428803e21 6.341892706539483e23 4.05881157410929e25; - 0.0 0.0 0.0 0.0 -1.5209207425057925e6 -5.1914094677531046e8 -1.4176008786611145e11 -3.6866623485688414e13 -9.474866810815984e15 -2.4279369357326935e18 -6.217036386624773e20 -1.591658462098873e23 -4.074707838080507e25 -1.0431291857706623e28 -2.670413262277438e30 -6.836259581321538e32; - 0.0 0.0 0.0 0.0 0.0 1.5589452477944808e9 2.1284799116553977e12 2.3248676581708025e15 2.4184528070774876e18 2.486207422190278e21 2.5483650380553205e24 2.6101630458060033e27 2.6729701040532997e30 2.7371631523457504e33 2.8028657600863993e36 2.870137275504677e39; - 0.0 0.0 0.0 0.0 0.0 0.0 -6.386999060908798e12 -3.4881530871309916e16 -1.5239973381214444e20 -6.341377114357268e23 -2.607614058456583e27 -1.069122783562139e31 -4.380196305334128e34 -1.7942379182565492e38 -7.349310654759861e41 -3.010289127531343e45; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0465098000284594e17 2.2861355418221703e21 3.995311436502874e25 6.649821721972122e29 1.0937793665786103e34 1.7937998718897874e38 2.93967940527153e42 4.816664723480877e46 7.891743901406595e50; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -6.858511278043386e21 -5.993058601571351e26 -4.189451610800854e31 -2.7891799442838834e36 -1.835085270122301e41 -1.2038170852496654e46 -7.891262227584487e50 -5.171933283225826e55; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.7979244390088466e27 6.284201388527134e32 1.7571900680469942e38 4.679485289631606e43 1.2315095760466199e49 3.231484209329825e54 8.473210620642257e59; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.8852622144842938e33 -2.635787615753444e39 -2.948078543974702e45 -3.140352413792322e51 -3.305811498811932e57 -3.46978305819599e63; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.907364732522996e39 4.422118870277351e46 1.9784224923818425e53 8.429821331796452e59 3.549588914822444e66; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.3266357401568573e47 -2.9676339154575293e54 -5.310787755579382e61 -9.051452272305827e68; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8.902901879036164e54 7.966181752074431e62 5.702415016525277e70; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.389854534525231e63 -8.553622556652643e71; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.5660867693856473e72] - extrapolation_weights_2 = T[-4.0 -21.333333333333332 -91.02222222222223 -369.86807760141096 -1485.274162603313 -5946.904174020694 -23793.4256378889 -95179.51184793304 -380723.8567767538 -1.522901236514198e6 -6.091610755469514e6 -2.4366448831292167e7 -9.746580113458312e7 -3.89863210347747e8 -1.5594528472004025e9; - 0.0 85.33333333333333 1820.4444444444443 31068.91851851852 504993.2152851264 8.111577293364226e6 1.299121039828734e8 2.0791012568062494e9 3.3267650605152744e10 5.322905317913885e11 8.516680997221928e12 1.3626702590991364e14 2.1802729343761932e15 3.4884369029289516e16 5.5814991278571405e17; - 0.0 0.0 -5825.422222222222 -497102.6962962963 -3.3935544067160495e7 -2.2063490237950697e9 -1.4176008786611145e11 -9.081514289729697e12 -5.813588478551652e14 -3.7209237334345224e16 -2.3814275270983977e18 -1.524119431397202e20 -9.754373663437728e21 -6.242800632999802e23 -3.995392643263833e25; - 0.0 0.0 0.0 1.5149796458553793e6 5.1711305245196944e8 1.4120633752288446e11 3.6722613237697445e13 9.437855612336234e15 2.4184528070774876e18 6.19275108823952e20 1.585441046231299e23 4.058791010588005e25 1.0390544623887458e28 2.659981960471667e30 6.809555442332001e32; - 0.0 0.0 0.0 0.0 -1.5574228403259315e9 -2.1264013179916716e12 -2.32259727959837e15 -2.416091036758076e18 -2.4837794852545453e21 -2.545876400322845e24 -2.607614058456583e27 -2.6703597816860604e30 -2.7344901414547876e33 -2.8001285864925646e36 -2.867334407071567e39; - 0.0 0.0 0.0 0.0 0.0 6.385439734966193e12 3.4873014872562036e16 1.523625268458817e20 6.339828926585209e23 2.606977433930593e27 1.0688617672575583e31 4.379126921470521e34 1.7937998718897874e38 7.34751638946329e41 3.009554193662317e45; - 0.0 0.0 0.0 0.0 0.0 0.0 -1.0464459261392974e17 -2.2859960071821667e21 -3.995067582045079e25 -6.649415849064287e29 -1.093712607584068e34 -1.7936903870343255e38 -2.9394999814797044e42 -4.816370737596875e46 -7.891262227584487e50; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.858406625466511e21 5.99296715475431e26 4.1893876848424375e31 2.789137384775456e36 1.8350572689432526e41 1.2037987164586916e46 7.89114181647872e50 5.171854365786813e55; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.7979175804714053e27 -6.284177416201281e32 -1.7571833648988464e38 -4.679467438811868e43 -1.2315048782104076e49 -3.231471882195848e54 -8.47317829790887e59; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.8852604165581403e33 2.6357851020704912e39 2.948075732467912e45 3.140349418918881e51 3.305808346144411e57 3.4697797491530044e63; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -7.907362847260331e39 -4.4221178159620535e46 -1.978422020689163e53 -8.429819321970427e59 -3.549588068534498e66; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.3266356610832054e47 2.967633738572764e54 5.310787439031764e61 9.051451732797232e68; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -8.902901746372587e54 -7.966181633369073e62 -5.702414931552672e70; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.3898545256223295e63 8.553622524787915e71; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.5660867669957927e72] - extrapolation_scalars = T[-1.0, 0.25, -0.015625, 0.000244140625, - -9.5367431640625e-7, 9.313225746154785e-10, - -2.2737367544323206e-13, 1.3877787807814457e-17, - -2.117582368135751e-22, 8.077935669463161e-28, - -7.703719777548943e-34, 1.8367099231598242e-40, - -1.0947644252537633e-47, 1.6313261169996311e-55, - -6.077163357286271e-64, 5.659799424266695e-73] - extrapolation_scalars_2 = T[-0.25, 0.015625, -0.000244140625, 9.5367431640625e-7, - -9.313225746154785e-10, 2.2737367544323206e-13, - -1.3877787807814457e-17, 2.117582368135751e-22, - -8.077935669463161e-28, 7.703719777548943e-34, - -1.8367099231598242e-40, 1.0947644252537633e-47, - -1.6313261169996311e-55, 6.077163357286271e-64, - -5.659799424266695e-73] else # sequence == :bulirsch subdividing_sequence = [1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256] - extrapolation_weights = T[-1.0 -1.3333333333333333 -1.5 -1.6 -1.6457142857142857 -1.6718367346938776 -1.6835279006707577 -1.6901299708694666 -1.693069327340544 -1.6947243315705933 -1.6954602083971546 -1.695874240194077 -1.6960582742950205 -1.6961617997954963 -1.6962078123772122 -1.6962336948493626; - 0.0 5.333333333333333 38.4 204.8 921.6 3932.16 16178.029714285714 65739.29534693877 264796.0427960611 1.063337834600653e6 4.260748471165052e6 1.7059653702729277e7 6.82682451256418e7 2.7313966499109036e8 1.0926772230310967e9 4.3709756753076935e9; - 0.0 0.0 -72.9 -1499.6571428571428 -17995.885714285716 -188466.0031168831 -1.809273629922078e6 -1.687678722000189e7 -1.5430205458287445e8 -1.4010322512667694e9 -1.2658738458504457e10 -1.1417952888042778e11 -1.0286202719081353e12 -9.262670584090748e12 -8.338439277458397e13 -7.505626090600242e14; - 0.0 0.0 0.0 1872.4571428571428 53926.76571428571 1.1504376685714286e6 2.0707878034285713e7 3.5341445178514284e8 5.816192120806923e9 9.4536202090576e10 1.5231567106062036e12 2.4466077986835336e13 3.9213804300291206e14 6.280341834369219e15 1.0052910177255184e17 1.608858416060063e18; - 0.0 0.0 0.0 0.0 -57586.834285714285 -4.738573792653061e6 -2.2745154204734695e8 -9.528151870492496e9 -3.6588103182691187e11 -1.36516582563434e13 -4.992606448034158e14 -1.8132753113333124e16 -6.553390301665806e17 -2.3644157580681015e19 -8.52021725370699e20 -3.0689640436338757e22; - 0.0 0.0 0.0 0.0 0.0 5.09977563903525e6 5.874941536168609e8 5.013283444197213e10 3.609564079821993e12 2.464129078491814e14 1.6221009705271826e16 1.0546231071871968e18 6.7967878012847596e19 4.36700279749998e21 2.7997424543832918e23 1.7935867203368857e25; - 0.0 0.0 0.0 0.0 0.0 0.0 -5.70060368320064e8 -1.8763129837277533e11 -3.602520928757287e13 -6.036515068986755e15 -9.272087145963656e17 -1.3838308524243085e20 -2.0243468469749884e22 -2.9409072775127474e24 -4.251513956009017e26 -6.1356617753586065e28; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.9561237425512534e11 9.013818205676177e13 3.0767166142041348e16 8.860943848907908e18 2.419628400341786e21 6.371227239299971e23 1.6569236045823926e26 4.271386836316456e28 1.0977631674699422e31; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -8.554159840110055e13 -1.1262162440922038e17 -8.649340754628125e19 -5.797259955974749e22 -3.561836516950886e25 -2.126373139447408e28 -1.2442320541680835e31 -7.230324405099858e33; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.1651370210969312e17 2.1475805572858636e20 2.9321633208809658e23 3.377852145654872e26 3.689515303627295e29 3.8860083472261895e32 4.0424356038700874e35; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.0269737017532947e20 -1.0674622648776207e24 -3.279244077704051e27 -8.791712994944155e30 -2.1606513856374756e34 -5.159530537984771e37; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.1022516982215851e24 8.126681320648103e27 4.438251558583284e31 2.0451463181951773e35 8.935380607282608e38; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -7.659880204931148e27 -1.6135647078547534e32 -1.9827483130119208e36 -2.126313710861715e40; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.665360734159382e32 4.911348648324117e36 1.0729004833885644e41; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -4.62766803500927e36 -3.8992995301161535e41; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.023990816545532e41] - extrapolation_weights_2 = T[-4.0 -28.8 -153.6 -691.2 -2949.12 -12133.522285714285 -49304.47151020408 -198597.0320970458 -797503.3759504899 -3.1955613533737888e6 -1.279474027704696e7 -5.120118384423134e7 -2.0485474874331778e8 -8.195079172733225e8 -3.27823175648077e9; - 0.0 64.8 1333.0285714285715 15996.342857142858 167525.33610389612 1.6082432265974027e6 1.5001588640001683e7 1.3715738185144395e8 1.2453620011260173e9 1.1252211963115074e10 1.0149291456038025e11 9.143291305850092e11 8.233484963636221e12 7.411946024407464e13 6.671667636089105e14; - 0.0 0.0 -1755.4285714285713 -50556.34285714286 -1.0785353142857142e6 -1.941363565714286e7 -3.313260485485714e8 -5.45268011325649e9 -8.862768945991501e10 -1.427959416193316e12 -2.2936948112658125e13 -3.6762941531523006e14 -5.887820469721143e15 -9.424603291176736e16 -1.508304765056309e18; - 0.0 0.0 0.0 55987.2 4.606946742857143e6 2.2113344365714285e8 9.263480985201038e9 3.557176698317199e11 1.327244552700053e13 4.853922935588765e14 1.7629065526851648e16 6.37135168217509e17 2.29873754256621e19 8.283544552215128e20 2.9837150424218233e22; - 0.0 0.0 0.0 0.0 -5.020091644675325e6 -5.783145574665974e8 -4.9349508903816315e10 -3.5531646410747744e12 -2.4256270616403794e14 -1.5967556428626954e16 -1.0381446211373969e18 -6.690587991889685e19 -4.2987683787890434e21 -2.755996478533553e23 -1.765561927831622e25; - 0.0 0.0 0.0 0.0 0.0 5.661016157622857e8 1.863283032451866e11 3.577503422307583e13 5.994594825452124e15 9.207697651894463e17 1.3742209159491396e20 2.0102888827598844e22 2.920484310307798e24 4.221989553536732e26 6.093053013029727e28; - 0.0 0.0 0.0 0.0 0.0 0.0 -1.9484826341819125e11 -8.978607978310253e13 -3.0646981899298996e16 -8.826330786998111e18 -2.410176726902951e21 -6.346339632896457e23 -1.6504512467519928e26 -4.254701731487095e28 -1.0934750300970127e31; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8.539308868165419e13 1.1242610075573214e17 8.63432453804023e19 5.787195268551182e22 3.555652772997846e25 2.1226815194136454e28 1.2420719290740417e31 7.217771758563227e33; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.1639991919747662e17 -2.145483310647889e20 -2.929299880137918e23 -3.3745534619188814e26 -3.685912261338597e29 -3.882213417199601e32 -4.0384879128506835e35; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0260939388619086e20 1.0669989566029343e24 3.277820794684214e27 8.787897147290099e30 2.1597136029180146e34 5.157291158410993e37; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.1019825938030739e24 -8.124697267591304e27 -4.437168001073864e31 -2.0446470148948364e35 -8.933199117876534e38; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.6590490547353e27 1.6133896248786405e32 1.9825331710508737e36 2.126082991058019e40; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.66525908860676e32 -4.911048883391968e36 -1.07283499873992e41; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.627542501479674e36 3.8991937548467816e41; - 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -4.023929415318473e41] - extrapolation_scalars = T[-1.0, 0.25, -0.027777777777777776, 0.001736111111111111, - -4.8225308641975306e-5, 7.535204475308642e-7, - -5.232780885631001e-9, 2.0440550334496098e-11, - -3.548706655294462e-14, 3.465533843060998e-17, - -1.5041379527174468e-20, 3.672211798626579e-24, - -3.9846048162180767e-28, 2.4320097755237285e-32, - -6.597248740027475e-37, 1.0066602691692314e-41] - extrapolation_scalars_2 = T[-0.25, 0.027777777777777776, -0.001736111111111111, - 4.8225308641975306e-5, -7.535204475308642e-7, - 5.232780885631001e-9, -2.0440550334496098e-11, - 3.548706655294462e-14, -3.465533843060998e-17, - 1.5041379527174468e-20, -3.672211798626579e-24, - 3.9846048162180767e-28, -2.4320097755237285e-32, - 6.597248740027475e-37, -1.0066602691692314e-41] + extrapolation_weights = T[ + -1.0 -1.3333333333333333 -1.5 -1.6 -1.6457142857142857 -1.6718367346938776 -1.6835279006707577 -1.6901299708694666 -1.693069327340544 -1.6947243315705933 -1.6954602083971546 -1.695874240194077 -1.6960582742950205 -1.6961617997954963 -1.6962078123772122 -1.6962336948493626; + 0.0 5.333333333333333 38.4 204.8 921.6 3932.16 16178.029714285714 65739.29534693877 264796.0427960611 1.063337834600653e6 4.260748471165052e6 1.7059653702729277e7 6.82682451256418e7 2.7313966499109036e8 1.0926772230310967e9 4.3709756753076935e9; + 0.0 0.0 -72.9 -1499.6571428571428 -17995.885714285716 -188466.0031168831 -1.809273629922078e6 -1.687678722000189e7 -1.5430205458287445e8 -1.4010322512667694e9 -1.2658738458504457e10 -1.1417952888042778e11 -1.0286202719081353e12 -9.262670584090748e12 -8.338439277458397e13 -7.505626090600242e14; + 0.0 0.0 0.0 1872.4571428571428 53926.76571428571 1.1504376685714286e6 2.0707878034285713e7 3.5341445178514284e8 5.816192120806923e9 9.4536202090576e10 1.5231567106062036e12 2.4466077986835336e13 3.9213804300291206e14 6.280341834369219e15 1.0052910177255184e17 1.608858416060063e18; + 0.0 0.0 0.0 0.0 -57586.834285714285 -4.738573792653061e6 -2.2745154204734695e8 -9.528151870492496e9 -3.6588103182691187e11 -1.36516582563434e13 -4.992606448034158e14 -1.8132753113333124e16 -6.553390301665806e17 -2.3644157580681015e19 -8.52021725370699e20 -3.0689640436338757e22; + 0.0 0.0 0.0 0.0 0.0 5.09977563903525e6 5.874941536168609e8 5.013283444197213e10 3.609564079821993e12 2.464129078491814e14 1.6221009705271826e16 1.0546231071871968e18 6.7967878012847596e19 4.36700279749998e21 2.7997424543832918e23 1.7935867203368857e25; + 0.0 0.0 0.0 0.0 0.0 0.0 -5.70060368320064e8 -1.8763129837277533e11 -3.602520928757287e13 -6.036515068986755e15 -9.272087145963656e17 -1.3838308524243085e20 -2.0243468469749884e22 -2.9409072775127474e24 -4.251513956009017e26 -6.1356617753586065e28; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.9561237425512534e11 9.013818205676177e13 3.0767166142041348e16 8.860943848907908e18 2.419628400341786e21 6.371227239299971e23 1.6569236045823926e26 4.271386836316456e28 1.0977631674699422e31; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -8.554159840110055e13 -1.1262162440922038e17 -8.649340754628125e19 -5.797259955974749e22 -3.561836516950886e25 -2.126373139447408e28 -1.2442320541680835e31 -7.230324405099858e33; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.1651370210969312e17 2.1475805572858636e20 2.9321633208809658e23 3.377852145654872e26 3.689515303627295e29 3.8860083472261895e32 4.0424356038700874e35; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -2.0269737017532947e20 -1.0674622648776207e24 -3.279244077704051e27 -8.791712994944155e30 -2.1606513856374756e34 -5.159530537984771e37; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.1022516982215851e24 8.126681320648103e27 4.438251558583284e31 2.0451463181951773e35 8.935380607282608e38; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -7.659880204931148e27 -1.6135647078547534e32 -1.9827483130119208e36 -2.126313710861715e40; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.665360734159382e32 4.911348648324117e36 1.0729004833885644e41; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -4.62766803500927e36 -3.8992995301161535e41; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.023990816545532e41 + ] + extrapolation_weights_2 = T[ + -4.0 -28.8 -153.6 -691.2 -2949.12 -12133.522285714285 -49304.47151020408 -198597.0320970458 -797503.3759504899 -3.1955613533737888e6 -1.279474027704696e7 -5.120118384423134e7 -2.0485474874331778e8 -8.195079172733225e8 -3.27823175648077e9; + 0.0 64.8 1333.0285714285715 15996.342857142858 167525.33610389612 1.6082432265974027e6 1.5001588640001683e7 1.3715738185144395e8 1.2453620011260173e9 1.1252211963115074e10 1.0149291456038025e11 9.143291305850092e11 8.233484963636221e12 7.411946024407464e13 6.671667636089105e14; + 0.0 0.0 -1755.4285714285713 -50556.34285714286 -1.0785353142857142e6 -1.941363565714286e7 -3.313260485485714e8 -5.45268011325649e9 -8.862768945991501e10 -1.427959416193316e12 -2.2936948112658125e13 -3.6762941531523006e14 -5.887820469721143e15 -9.424603291176736e16 -1.508304765056309e18; + 0.0 0.0 0.0 55987.2 4.606946742857143e6 2.2113344365714285e8 9.263480985201038e9 3.557176698317199e11 1.327244552700053e13 4.853922935588765e14 1.7629065526851648e16 6.37135168217509e17 2.29873754256621e19 8.283544552215128e20 2.9837150424218233e22; + 0.0 0.0 0.0 0.0 -5.020091644675325e6 -5.783145574665974e8 -4.9349508903816315e10 -3.5531646410747744e12 -2.4256270616403794e14 -1.5967556428626954e16 -1.0381446211373969e18 -6.690587991889685e19 -4.2987683787890434e21 -2.755996478533553e23 -1.765561927831622e25; + 0.0 0.0 0.0 0.0 0.0 5.661016157622857e8 1.863283032451866e11 3.577503422307583e13 5.994594825452124e15 9.207697651894463e17 1.3742209159491396e20 2.0102888827598844e22 2.920484310307798e24 4.221989553536732e26 6.093053013029727e28; + 0.0 0.0 0.0 0.0 0.0 0.0 -1.9484826341819125e11 -8.978607978310253e13 -3.0646981899298996e16 -8.826330786998111e18 -2.410176726902951e21 -6.346339632896457e23 -1.6504512467519928e26 -4.254701731487095e28 -1.0934750300970127e31; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8.539308868165419e13 1.1242610075573214e17 8.63432453804023e19 5.787195268551182e22 3.555652772997846e25 2.1226815194136454e28 1.2420719290740417e31 7.217771758563227e33; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.1639991919747662e17 -2.145483310647889e20 -2.929299880137918e23 -3.3745534619188814e26 -3.685912261338597e29 -3.882213417199601e32 -4.0384879128506835e35; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0260939388619086e20 1.0669989566029343e24 3.277820794684214e27 8.787897147290099e30 2.1597136029180146e34 5.157291158410993e37; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.1019825938030739e24 -8.124697267591304e27 -4.437168001073864e31 -2.0446470148948364e35 -8.933199117876534e38; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.6590490547353e27 1.6133896248786405e32 1.9825331710508737e36 2.126082991058019e40; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -1.66525908860676e32 -4.911048883391968e36 -1.07283499873992e41; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.627542501479674e36 3.8991937548467816e41; + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 -4.023929415318473e41 + ] + extrapolation_scalars = T[ + -1.0, 0.25, -0.027777777777777776, 0.001736111111111111, + -4.8225308641975306e-5, 7.535204475308642e-7, + -5.232780885631001e-9, 2.0440550334496098e-11, + -3.548706655294462e-14, 3.465533843060998e-17, + -1.5041379527174468e-20, 3.672211798626579e-24, + -3.9846048162180767e-28, 2.4320097755237285e-32, + -6.597248740027475e-37, 1.0066602691692314e-41, + ] + extrapolation_scalars_2 = T[ + -0.25, 0.027777777777777776, -0.001736111111111111, + 4.8225308641975306e-5, -7.535204475308642e-7, + 5.232780885631001e-9, -2.0440550334496098e-11, + 3.548706655294462e-14, -3.465533843060998e-17, + 1.5041379527174468e-20, -3.672211798626579e-24, + 3.9846048162180767e-28, -2.4320097755237285e-32, + 6.597248740027475e-37, -1.0066602691692314e-41, + ] end - extrapolation_coefficients(subdividing_sequence, + return extrapolation_coefficients( + subdividing_sequence, extrapolation_weights, extrapolation_scalars, - extrapolation_weights_2, extrapolation_scalars_2) + extrapolation_weights_2, extrapolation_scalars_2 + ) end function generate_sequence(T, alg::ImplicitEulerExtrapolation) @@ -863,12 +972,16 @@ function generate_sequence(T, alg::ImplicitEulerExtrapolation) elseif sequence == :romberg subdividing_sequence = BigInt(2) .^ (0:max_order) else # sequence == :bulirsch - subdividing_sequence = [n == 0 ? BigInt(1) : - (isodd(n) ? BigInt(2)^((n + 1) ÷ 2) : - 3 * BigInt(2)^(n ÷ 2 - 1)) for n in 0:max_order] + subdividing_sequence = [ + n == 0 ? BigInt(1) : + ( + isodd(n) ? BigInt(2)^((n + 1) ÷ 2) : + 3 * BigInt(2)^(n ÷ 2 - 1) + ) for n in 0:max_order + ] end - subdividing_sequence + return subdividing_sequence end function generate_sequence(T::Type{<:CompiledFloats}, alg::ImplicitEulerExtrapolation) @@ -882,18 +995,21 @@ function generate_sequence(T::Type{<:CompiledFloats}, alg::ImplicitEulerExtrapol elseif sequence == :romberg subdividing_sequence = Int(2) .^ (0:max_order) else # sequence == :bulirsch - subdividing_sequence = [n == 0 ? Int(1) : - (isodd(n) ? Int(2)^((n + 1) ÷ 2) : 3 * Int(2)^(n ÷ 2 - 1)) - for n in 0:max_order] + subdividing_sequence = [ + n == 0 ? Int(1) : + (isodd(n) ? Int(2)^((n + 1) ÷ 2) : 3 * Int(2)^(n ÷ 2 - 1)) + for n in 0:max_order + ] end - subdividing_sequence + return subdividing_sequence end -@cache mutable struct ExtrapolationMidpointDeuflhardConstantCache{QType, - extrapolation_coefficients -} <: - OrdinaryDiffEqConstantCache +@cache mutable struct ExtrapolationMidpointDeuflhardConstantCache{ + QType, + extrapolation_coefficients, + } <: + OrdinaryDiffEqConstantCache # Values that are mutated Q::Vector{QType} # Storage for stepsize scaling factors. Q[n] contains information for extrapolation order (n + alg.min_order - 1) n_curr::Int # Storage for the current extrapolation order @@ -904,10 +1020,12 @@ end stage_number::Vector{Int} # stage_number[n] contains information for extrapolation order (n + alg.min_order - 1) end -function alg_cache(alg::ExtrapolationMidpointDeuflhard, u, rate_prototype, +function alg_cache( + alg::ExtrapolationMidpointDeuflhard, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} # Initialize cache's members QType = tTypeNoUnits <: Integer ? typeof(qmin_default(alg)) : tTypeNoUnits # Cf. SciMLBase.__init in solve.jl @@ -927,13 +1045,16 @@ function alg_cache(alg::ExtrapolationMidpointDeuflhard, u, rate_prototype, end # Initialize cache - ExtrapolationMidpointDeuflhardConstantCache(Q, n_curr, n_old, coefficients, - stage_number) + return ExtrapolationMidpointDeuflhardConstantCache( + Q, n_curr, n_old, coefficients, + stage_number + ) end -@cache mutable struct ExtrapolationMidpointDeuflhardCache{uType, uNoUnitsType, rateType, - QType, extrapolation_coefficients -} <: ExtrapolationMutableCache +@cache mutable struct ExtrapolationMidpointDeuflhardCache{ + uType, uNoUnitsType, rateType, + QType, extrapolation_coefficients, + } <: ExtrapolationMutableCache # Values that are mutated utilde::uType u_temp1::uType @@ -956,10 +1077,12 @@ end stage_number::Vector{Int} # Stage_number[n] contains information for extrapolation order (n + alg.min_order - 1) end -function alg_cache(alg::ExtrapolationMidpointDeuflhard, u, rate_prototype, +function alg_cache( + alg::ExtrapolationMidpointDeuflhard, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} # Initialize cache's members utilde = zero(u) u_temp1 = zero(u) @@ -986,19 +1109,25 @@ function alg_cache(alg::ExtrapolationMidpointDeuflhard, u, rate_prototype, k_tmps[i] = zero(rate_prototype) end - cc = alg_cache(alg::ExtrapolationMidpointDeuflhard, u, rate_prototype, uEltypeNoUnits, + cc = alg_cache( + alg::ExtrapolationMidpointDeuflhard, u, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits, uprev, uprev2, f, t, dt, reltol, p, - calck, Val(false)) + calck, Val(false) + ) # Initialize cache - ExtrapolationMidpointDeuflhardCache(utilde, u_temp1, u_temp2, u_temp3, u_temp4, tmp, T, + return ExtrapolationMidpointDeuflhardCache( + utilde, u_temp1, u_temp2, u_temp3, u_temp4, tmp, T, res, fsalfirst, k, k_tmps, cc.Q, cc.n_curr, - cc.n_old, cc.coefficients, cc.stage_number) + cc.n_old, cc.coefficients, cc.stage_number + ) end -@cache mutable struct ImplicitDeuflhardExtrapolationConstantCache{QType, - extrapolation_coefficients, - TF, UF} <: - OrdinaryDiffEqConstantCache +@cache mutable struct ImplicitDeuflhardExtrapolationConstantCache{ + QType, + extrapolation_coefficients, + TF, UF, + } <: + OrdinaryDiffEqConstantCache # Values that are mutated Q::Vector{QType} # Storage for stepsize scaling factors. Q[n] contains information for extrapolation order (n + alg.min_order - 1) n_curr::Int # Storage for the current extrapolation order @@ -1012,12 +1141,14 @@ end uf::UF end -@cache mutable struct ImplicitDeuflhardExtrapolationCache{uType, QType, - extrapolation_coefficients, - rateType, JType, WType, F, JCType, - GCType, uNoUnitsType, TFType, - UFType} <: - ExtrapolationMutableCache +@cache mutable struct ImplicitDeuflhardExtrapolationCache{ + uType, QType, + extrapolation_coefficients, + rateType, JType, WType, F, JCType, + GCType, uNoUnitsType, TFType, + UFType, + } <: + ExtrapolationMutableCache # Values that are mutated utilde::uType u_temp1::uType @@ -1054,10 +1185,12 @@ end diff2::Array{uType, 1} end -function alg_cache(alg::ImplicitDeuflhardExtrapolation, u, rate_prototype, +function alg_cache( + alg::ImplicitDeuflhardExtrapolation, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} # Initialize cache's members QType = tTypeNoUnits <: Integer ? typeof(qmin_default(alg)) : tTypeNoUnits # Cf. SciMLBase.__init in solve.jl @@ -1087,19 +1220,23 @@ function alg_cache(alg::ImplicitDeuflhardExtrapolation, u, rate_prototype, #Update stage_number by the jacobian size jac_dim = rate_prototype isa Union{CompiledFloats, BigFloat} ? 1 : - sum(size(rate_prototype)) + sum(size(rate_prototype)) stage_number = stage_number .+ jac_dim tf = TimeDerivativeWrapper(f, u, p) uf = UDerivativeWrapper(f, t, p) - ImplicitDeuflhardExtrapolationConstantCache(Q, n_curr, n_old, coefficients, - stage_number, tf, uf) + return ImplicitDeuflhardExtrapolationConstantCache( + Q, n_curr, n_old, coefficients, + stage_number, tf, uf + ) end -function alg_cache(alg::ImplicitDeuflhardExtrapolation, u, rate_prototype, +function alg_cache( + alg::ImplicitDeuflhardExtrapolation, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} utilde = zero(u) u_temp1 = zero(u) u_temp2 = zero(u) @@ -1125,9 +1262,11 @@ function alg_cache(alg::ImplicitDeuflhardExtrapolation, u, rate_prototype, k_tmps[i] = zero(rate_prototype) end - cc = alg_cache(alg::ImplicitDeuflhardExtrapolation, u, rate_prototype, uEltypeNoUnits, + cc = alg_cache( + alg::ImplicitDeuflhardExtrapolation, u, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits, uprev, uprev2, f, t, dt, reltol, p, - calck, Val(false)) + calck, Val(false) + ) du1 = zero(rate_prototype) du2 = zero(rate_prototype) @@ -1160,7 +1299,8 @@ function alg_cache(alg::ImplicitDeuflhardExtrapolation, u, rate_prototype, linprob = LinearProblem(W[1], _vec(linsolve_tmps[1]); u0 = _vec(k_tmps[1])) linsolve1 = init( - linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true)) + linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true) + ) #Pl = LinearSolve.InvPreconditioner(Diagonal(_vec(weight))), #Pr = Diagonal(_vec(weight))) @@ -1168,8 +1308,10 @@ function alg_cache(alg::ImplicitDeuflhardExtrapolation, u, rate_prototype, linsolve[1] = linsolve1 for i in 2:get_thread_count(alg) linprob = LinearProblem(W[i], _vec(linsolve_tmps[i]); u0 = _vec(k_tmps[i])) - linsolve[i] = init(linprob, alg.linsolve, - alias = LinearAliasSpecifier(alias_A = true, alias_b = true)) + linsolve[i] = init( + linprob, alg.linsolve, + alias = LinearAliasSpecifier(alias_A = true, alias_b = true) + ) #Pl = LinearSolve.InvPreconditioner(Diagonal(_vec(weight))), #Pr = Diagonal(_vec(weight))) end @@ -1183,17 +1325,20 @@ function alg_cache(alg::ImplicitDeuflhardExtrapolation, u, rate_prototype, diff2[i] = zero(u) end - ImplicitDeuflhardExtrapolationCache(utilde, u_temp1, u_temp2, u_temp3, u_temp4, tmp, T, + return ImplicitDeuflhardExtrapolationCache( + utilde, u_temp1, u_temp2, u_temp3, u_temp4, tmp, T, res, fsalfirst, k, k_tmps, cc.Q, cc.n_curr, cc.n_old, cc.coefficients, cc.stage_number, du1, du2, J, W, tf, uf, linsolve_tmps, linsolve, - jac_config, grad_config, diff1, diff2) + jac_config, grad_config, diff1, diff2 + ) end -@cache mutable struct ExtrapolationMidpointHairerWannerConstantCache{QType, - extrapolation_coefficients -} <: - OrdinaryDiffEqConstantCache +@cache mutable struct ExtrapolationMidpointHairerWannerConstantCache{ + QType, + extrapolation_coefficients, + } <: + OrdinaryDiffEqConstantCache # Values that are mutated Q::Vector{QType} # Storage for stepsize scaling factors. Q[n] contains information for extrapolation order (n - 1) n_curr::Int # Storage for the current extrapolation order @@ -1209,10 +1354,12 @@ end dt_new::Array{QType, 1} end -function alg_cache(alg::ExtrapolationMidpointHairerWanner, u, rate_prototype, +function alg_cache( + alg::ExtrapolationMidpointHairerWanner, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} # Initialize cache's members QType = tTypeNoUnits <: Integer ? typeof(qmin_default(alg)) : tTypeNoUnits # Cf. SciMLBase.__init in solve.jl @@ -1235,14 +1382,18 @@ function alg_cache(alg::ExtrapolationMidpointHairerWanner, u, rate_prototype, work = fill(zero(eltype(Q)), alg.max_order + 1) dt_new = fill(zero(eltype(Q)), alg.max_order + 1) # Initialize the constant cache - ExtrapolationMidpointHairerWannerConstantCache(Q, n_curr, n_old, coefficients, - stage_number, sigma, work, dt_new) + return ExtrapolationMidpointHairerWannerConstantCache( + Q, n_curr, n_old, coefficients, + stage_number, sigma, work, dt_new + ) end -@cache mutable struct ExtrapolationMidpointHairerWannerCache{uType, uNoUnitsType, rateType, - QType, - extrapolation_coefficients} <: - ExtrapolationMutableCache +@cache mutable struct ExtrapolationMidpointHairerWannerCache{ + uType, uNoUnitsType, rateType, + QType, + extrapolation_coefficients, + } <: + ExtrapolationMutableCache # Values that are mutated utilde::uType u_temp1::uType @@ -1270,10 +1421,12 @@ end dt_new::Array{QType, 1} end -function alg_cache(alg::ExtrapolationMidpointHairerWanner, u, rate_prototype, +function alg_cache( + alg::ExtrapolationMidpointHairerWanner, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} # Initialize cache's members utilde = zero(u) u_temp1 = zero(u) @@ -1298,20 +1451,26 @@ function alg_cache(alg::ExtrapolationMidpointHairerWanner, u, rate_prototype, k_tmps[i] = zero(rate_prototype) end - cc = alg_cache(alg, u, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, - tTypeNoUnits, uprev, uprev2, f, t, dt, reltol, p, calck, Val(false)) + cc = alg_cache( + alg, u, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, + tTypeNoUnits, uprev, uprev2, f, t, dt, reltol, p, calck, Val(false) + ) # Initialize the cache - ExtrapolationMidpointHairerWannerCache(utilde, u_temp1, u_temp2, u_temp3, u_temp4, tmp, + return ExtrapolationMidpointHairerWannerCache( + utilde, u_temp1, u_temp2, u_temp3, u_temp4, tmp, T, res, fsalfirst, k, k_tmps, cc.Q, cc.n_curr, cc.n_old, cc.coefficients, - cc.stage_number, cc.sigma, cc.work, cc.dt_new) + cc.stage_number, cc.sigma, cc.work, cc.dt_new + ) end -@cache mutable struct ImplicitHairerWannerExtrapolationConstantCache{QType, - extrapolation_coefficients, - TF, UF} <: - OrdinaryDiffEqConstantCache +@cache mutable struct ImplicitHairerWannerExtrapolationConstantCache{ + QType, + extrapolation_coefficients, + TF, UF, + } <: + OrdinaryDiffEqConstantCache # Values that are mutated Q::Vector{QType} # Storage for stepsize scaling factors. Q[n] contains information for extrapolation order (n - 1) n_curr::Int # Storage for the current extrapolation order @@ -1330,10 +1489,12 @@ end dt_new::Array{QType, 1} end -function alg_cache(alg::ImplicitHairerWannerExtrapolation, u, rate_prototype, +function alg_cache( + alg::ImplicitHairerWannerExtrapolation, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} # Initialize cache's members QType = tTypeNoUnits <: Integer ? typeof(qmin_default(alg)) : tTypeNoUnits # Cf. SciMLBase.__init in solve.jl @@ -1375,17 +1536,21 @@ function alg_cache(alg::ImplicitHairerWannerExtrapolation, u, rate_prototype, uf = UDerivativeWrapper(f, t, p) work = fill(zero(eltype(Q)), alg.max_order + 1) dt_new = fill(zero(eltype(Q)), alg.max_order + 1) - ImplicitHairerWannerExtrapolationConstantCache(Q, n_curr, n_old, coefficients, + return ImplicitHairerWannerExtrapolationConstantCache( + Q, n_curr, n_old, coefficients, stage_number, sigma, tf, uf, work, - dt_new) + dt_new + ) end -@cache mutable struct ImplicitHairerWannerExtrapolationCache{uType, uNoUnitsType, rateType, - QType, - extrapolation_coefficients, - JType, WType, F, JCType, - GCType, TFType, UFType} <: - ExtrapolationMutableCache +@cache mutable struct ImplicitHairerWannerExtrapolationCache{ + uType, uNoUnitsType, rateType, + QType, + extrapolation_coefficients, + JType, WType, F, JCType, + GCType, TFType, UFType, + } <: + ExtrapolationMutableCache # Values that are mutated utilde::uType u_temp1::uType @@ -1427,10 +1592,12 @@ end dt_new::Array{QType, 1} end -function alg_cache(alg::ImplicitHairerWannerExtrapolation, u, rate_prototype, +function alg_cache( + alg::ImplicitHairerWannerExtrapolation, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} # Initialize cache's members utilde = zero(u) u_temp1 = zero(u) @@ -1455,8 +1622,10 @@ function alg_cache(alg::ImplicitHairerWannerExtrapolation, u, rate_prototype, k_tmps[i] = zero(rate_prototype) end - cc = alg_cache(alg, u, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, - tTypeNoUnits, uprev, uprev2, f, t, dt, reltol, p, calck, Val(false)) + cc = alg_cache( + alg, u, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, + tTypeNoUnits, uprev, uprev2, f, t, dt, reltol, p, calck, Val(false) + ) du1 = zero(rate_prototype) du2 = zero(rate_prototype) @@ -1490,7 +1659,8 @@ function alg_cache(alg::ImplicitHairerWannerExtrapolation, u, rate_prototype, linprob = LinearProblem(W[1], _vec(linsolve_tmps[1]); u0 = _vec(k_tmps[1])) linsolve1 = init( - linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true)) + linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true) + ) #Pl = LinearSolve.InvPreconditioner(Diagonal(_vec(weight))), #Pr = Diagonal(_vec(weight))) @@ -1498,8 +1668,10 @@ function alg_cache(alg::ImplicitHairerWannerExtrapolation, u, rate_prototype, linsolve[1] = linsolve1 for i in 2:get_thread_count(alg) linprob = LinearProblem(W[i], _vec(linsolve_tmps[i]); u0 = _vec(k_tmps[i])) - linsolve[i] = init(linprob, alg.linsolve, - alias = LinearAliasSpecifier(alias_A = true, alias_b = true)) + linsolve[i] = init( + linprob, alg.linsolve, + alias = LinearAliasSpecifier(alias_A = true, alias_b = true) + ) #Pl = LinearSolve.InvPreconditioner(Diagonal(_vec(weight))), #Pr = Diagonal(_vec(weight))) end @@ -1514,19 +1686,23 @@ function alg_cache(alg::ImplicitHairerWannerExtrapolation, u, rate_prototype, end # Initialize the cache - ImplicitHairerWannerExtrapolationCache(utilde, u_temp1, u_temp2, u_temp3, u_temp4, tmp, + return ImplicitHairerWannerExtrapolationCache( + utilde, u_temp1, u_temp2, u_temp3, u_temp4, tmp, T, res, fsalfirst, k, k_tmps, cc.Q, cc.n_curr, cc.n_old, cc.coefficients, cc.stage_number, cc.sigma, du1, du2, J, W, tf, uf, linsolve_tmps, linsolve, jac_config, grad_config, diff1, diff2, - cc.work, cc.dt_new) + cc.work, cc.dt_new + ) end -@cache mutable struct ImplicitEulerBarycentricExtrapolationConstantCache{QType, - extrapolation_coefficients, - TF, UF} <: - OrdinaryDiffEqConstantCache +@cache mutable struct ImplicitEulerBarycentricExtrapolationConstantCache{ + QType, + extrapolation_coefficients, + TF, UF, + } <: + OrdinaryDiffEqConstantCache # Values that are mutated Q::Vector{QType} # Storage for stepsize scaling factors. Q[n] contains information for extrapolation order (n - 1) n_curr::Int # Storage for the current extrapolation order @@ -1545,10 +1721,12 @@ end dt_new::Array{QType, 1} end -function alg_cache(alg::ImplicitEulerBarycentricExtrapolation, u, rate_prototype, +function alg_cache( + alg::ImplicitEulerBarycentricExtrapolation, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} # Initialize cache's members QType = tTypeNoUnits <: Integer ? typeof(qmin_default(alg)) : tTypeNoUnits # Cf. SciMLBase.__init in solve.jl @@ -1574,17 +1752,21 @@ function alg_cache(alg::ImplicitEulerBarycentricExtrapolation, u, rate_prototype # Initialize the constant cache tf = TimeDerivativeWrapper(f, u, p) uf = UDerivativeWrapper(f, t, p) - ImplicitEulerBarycentricExtrapolationConstantCache(Q, n_curr, n_old, coefficients, + return ImplicitEulerBarycentricExtrapolationConstantCache( + Q, n_curr, n_old, coefficients, stage_number, sigma, tf, uf, work, - dt_new) + dt_new + ) end -@cache mutable struct ImplicitEulerBarycentricExtrapolationCache{uType, uNoUnitsType, - rateType, QType, - extrapolation_coefficients, - JType, WType, F, JCType, - GCType, TFType, UFType} <: - ExtrapolationMutableCache +@cache mutable struct ImplicitEulerBarycentricExtrapolationCache{ + uType, uNoUnitsType, + rateType, QType, + extrapolation_coefficients, + JType, WType, F, JCType, + GCType, TFType, UFType, + } <: + ExtrapolationMutableCache # Values that are mutated utilde::uType u_temp1::uType @@ -1625,10 +1807,12 @@ end dt_new::Array{QType, 1} end -function alg_cache(alg::ImplicitEulerBarycentricExtrapolation, u, rate_prototype, +function alg_cache( + alg::ImplicitEulerBarycentricExtrapolation, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} # Initialize cache's members utilde = zero(u) u_temp1 = zero(u) @@ -1653,8 +1837,10 @@ function alg_cache(alg::ImplicitEulerBarycentricExtrapolation, u, rate_prototype k_tmps[i] = zero(rate_prototype) end - cc = alg_cache(alg, u, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, - tTypeNoUnits, uprev, uprev2, f, t, dt, reltol, p, calck, Val(false)) + cc = alg_cache( + alg, u, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, + tTypeNoUnits, uprev, uprev2, f, t, dt, reltol, p, calck, Val(false) + ) du1 = zero(rate_prototype) du2 = zero(rate_prototype) @@ -1688,7 +1874,8 @@ function alg_cache(alg::ImplicitEulerBarycentricExtrapolation, u, rate_prototype linprob = LinearProblem(W[1], _vec(linsolve_tmps[1]); u0 = _vec(k_tmps[1])) linsolve1 = init( - linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true)) + linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true) + ) #Pl = LinearSolve.InvPreconditioner(Diagonal(_vec(weight))), #Pr = Diagonal(_vec(weight))) @@ -1696,8 +1883,10 @@ function alg_cache(alg::ImplicitEulerBarycentricExtrapolation, u, rate_prototype linsolve[1] = linsolve1 for i in 2:get_thread_count(alg) linprob = LinearProblem(W[i], _vec(linsolve_tmps[i]); u0 = _vec(k_tmps[i])) - linsolve[i] = init(linprob, alg.linsolve, - alias = LinearAliasSpecifier(alias_A = true, alias_b = true)) + linsolve[i] = init( + linprob, alg.linsolve, + alias = LinearAliasSpecifier(alias_A = true, alias_b = true) + ) #Pl = LinearSolve.InvPreconditioner(Diagonal(_vec(weight))), #Pr = Diagonal(_vec(weight))) end @@ -1712,11 +1901,13 @@ function alg_cache(alg::ImplicitEulerBarycentricExtrapolation, u, rate_prototype end # Initialize the cache - ImplicitEulerBarycentricExtrapolationCache(utilde, u_temp1, u_temp2, u_temp3, u_temp4, + return ImplicitEulerBarycentricExtrapolationCache( + utilde, u_temp1, u_temp2, u_temp3, u_temp4, tmp, T, res, fsalfirst, k, k_tmps, cc.Q, cc.n_curr, cc.n_old, cc.coefficients, cc.stage_number, cc.sigma, du1, du2, J, W, tf, uf, linsolve_tmps, linsolve, jac_config, grad_config, diff1, - diff2, cc.work, cc.dt_new) + diff2, cc.work, cc.dt_new + ) end diff --git a/lib/OrdinaryDiffEqExtrapolation/src/extrapolation_perform_step.jl b/lib/OrdinaryDiffEqExtrapolation/src/extrapolation_perform_step.jl index 95b2c4d0e9..71f3b13672 100644 --- a/lib/OrdinaryDiffEqExtrapolation/src/extrapolation_perform_step.jl +++ b/lib/OrdinaryDiffEqExtrapolation/src/extrapolation_perform_step.jl @@ -10,7 +10,7 @@ function initialize!(integrator, cache::AitkenNevilleCache) cache.step_no = 1 alg = unwrap_alg(integrator, false) - cache.cur_order = max(alg.init_order, alg.min_order) + return cache.cur_order = max(alg.init_order, alg.min_order) end function perform_step!(integrator, cache::AitkenNevilleCache, repeat_step = false) @@ -25,19 +25,19 @@ function perform_step!(integrator, cache::AitkenNevilleCache, repeat_step = fals for i in 1:max_order dt_temp = dt / (2^(i - 1)) # Solve using Euler method - @muladd @.. broadcast=false u=uprev+dt_temp*fsalfirst + @muladd @.. broadcast = false u = uprev + dt_temp * fsalfirst f(k, u, p, t + dt_temp) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - for j in 2:(2 ^ (i - 1)) - @muladd @.. broadcast=false u=u+dt_temp*k + for j in 2:(2^(i - 1)) + @muladd @.. broadcast = false u = u + dt_temp * k f(k, u, p, t + j * dt_temp) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end - @.. broadcast=false T[i, 1]=u + @.. broadcast = false T[i, 1] = u end else let max_order = max_order, uprev = uprev, dt = dt, fsalfirst = fsalfirst, p = p, - t = t, u_tmps = u_tmps, k_tmps = k_tmps, T = T + t = t, u_tmps = u_tmps, k_tmps = k_tmps, T = T # Balance workload of threads by computing T[1,1] with T[max_order,1] on # same thread, T[2,1] with T[max_order-1,1] on same thread. Similarly fill # first column of T matrix @@ -47,19 +47,23 @@ function perform_step!(integrator, cache::AitkenNevilleCache, repeat_step = fals for index in startIndex:endIndex dt_temp = dt / (2^(index - 1)) # Solve using Euler method - @muladd @.. broadcast=false u_tmps[Threads.threadid()]=uprev+ - dt_temp* - fsalfirst - f(k_tmps[Threads.threadid()], u_tmps[Threads.threadid()], p, - t + dt_temp) - for j in 2:(2 ^ (index - 1)) - @muladd @.. broadcast=false u_tmps[Threads.threadid()]=u_tmps[Threads.threadid()]+ - dt_temp* - k_tmps[Threads.threadid()] - f(k_tmps[Threads.threadid()], u_tmps[Threads.threadid()], p, - t + j * dt_temp) + @muladd @.. broadcast = false u_tmps[Threads.threadid()] = uprev + + dt_temp * + fsalfirst + f( + k_tmps[Threads.threadid()], u_tmps[Threads.threadid()], p, + t + dt_temp + ) + for j in 2:(2^(index - 1)) + @muladd @.. broadcast = false u_tmps[Threads.threadid()] = u_tmps[Threads.threadid()] + + dt_temp * + k_tmps[Threads.threadid()] + f( + k_tmps[Threads.threadid()], u_tmps[Threads.threadid()], p, + t + j * dt_temp + ) end - @.. broadcast=false T[index, 1]=u_tmps[Threads.threadid()] + @.. broadcast = false T[index, 1] = u_tmps[Threads.threadid()] end end end @@ -71,7 +75,7 @@ function perform_step!(integrator, cache::AitkenNevilleCache, repeat_step = fals for j in 2:max_order tmp *= 2 for i in j:max_order - @.. broadcast=false T[i, j]=(tmp*T[i, j - 1]-T[i - 1, j - 1])/(tmp-1) + @.. broadcast = false T[i, j] = (tmp * T[i, j - 1] - T[i - 1, j - 1]) / (tmp - 1) end end @@ -85,10 +89,12 @@ function perform_step!(integrator, cache::AitkenNevilleCache, repeat_step = fals for i in range_start:max_order A = 2^(i - 1) - @.. broadcast=false utilde=T[i, i]-T[i, i - 1] - atmp = calculate_residuals(utilde, uprev, T[i, i], integrator.opts.abstol, + @.. broadcast = false utilde = T[i, i] - T[i, i - 1] + atmp = calculate_residuals( + utilde, uprev, T[i, i], integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) EEst = integrator.opts.internalnorm(atmp, t) beta1 = integrator.opts.controller.beta1 @@ -97,8 +103,10 @@ function perform_step!(integrator, cache::AitkenNevilleCache, repeat_step = fals integrator.opts.controller.beta1 = 1 / (i + 1) integrator.EEst = EEst - dtpropose = step_accept_controller!(integrator, alg, - stepsize_controller!(integrator, alg)) + dtpropose = step_accept_controller!( + integrator, alg, + stepsize_controller!(integrator, alg) + ) integrator.EEst = e integrator.opts.controller.beta1 = beta1 integrator.qold = qold @@ -116,10 +124,10 @@ function perform_step!(integrator, cache::AitkenNevilleCache, repeat_step = fals end # using extrapolated value of u - @.. broadcast=false u=T[cache.cur_order, cache.cur_order] + @.. broadcast = false u = T[cache.cur_order, cache.cur_order] cache.step_no = cache.step_no + 1 f(k, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::AitkenNevilleConstantCache) @@ -134,7 +142,7 @@ function initialize!(integrator, cache::AitkenNevilleConstantCache) integrator.k[2] = integrator.fsallast cache.step_no = 1 alg = unwrap_alg(integrator, false) - cache.cur_order = max(alg.init_order, alg.min_order) + return cache.cur_order = max(alg.init_order, alg.min_order) end function perform_step!(integrator, cache::AitkenNevilleConstantCache, repeat_step = false) @@ -149,12 +157,12 @@ function perform_step!(integrator, cache::AitkenNevilleConstantCache, repeat_ste dt_temp = dt / (2^(i - 1)) # Romberg sequence # Solve using Euler method with dt_temp = dt/n_{i} - @muladd u = @.. broadcast=false uprev+dt_temp * integrator.fsalfirst + @muladd u = @.. broadcast = false uprev + dt_temp * integrator.fsalfirst k = f(u, p, t + dt_temp) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - for j in 2:(2 ^ (i - 1)) - @muladd u = @.. broadcast=false u+dt_temp * k + for j in 2:(2^(i - 1)) + @muladd u = @.. broadcast = false u + dt_temp * k k = f(u, p, t + j * dt_temp) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @@ -162,7 +170,7 @@ function perform_step!(integrator, cache::AitkenNevilleConstantCache, repeat_ste end else let max_order = max_order, dt = dt, uprev = uprev, integrator = integrator, p = p, - t = t, T = T + t = t, T = T # Balance workload of threads by computing T[1,1] with T[max_order,1] on # same thread, T[2,1] with T[max_order-1,1] on same thread. Similarly fill # first column of T matrix @@ -172,10 +180,10 @@ function perform_step!(integrator, cache::AitkenNevilleConstantCache, repeat_ste for index in startIndex:endIndex dt_temp = dt / 2^(index - 1) - @muladd u = @.. broadcast=false uprev+dt_temp * integrator.fsalfirst + @muladd u = @.. broadcast = false uprev + dt_temp * integrator.fsalfirst k_temp = f(u, p, t + dt_temp) - for j in 2:(2 ^ (index - 1)) - @muladd u = @.. broadcast=false u+dt_temp * k_temp + for j in 2:(2^(index - 1)) + @muladd u = @.. broadcast = false u + dt_temp * k_temp k_temp = f(u, p, t + j * dt_temp) end T[index, 1] = u @@ -206,9 +214,11 @@ function perform_step!(integrator, cache::AitkenNevilleConstantCache, repeat_ste for i in range_start:max_order A = 2^(i - 1) utilde = T[i, i] - T[i, i - 1] - atmp = calculate_residuals(utilde, uprev, T[i, i], integrator.opts.abstol, + atmp = calculate_residuals( + utilde, uprev, T[i, i], integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) EEst = integrator.opts.internalnorm(atmp, t) beta1 = integrator.opts.controller.beta1 @@ -217,8 +227,10 @@ function perform_step!(integrator, cache::AitkenNevilleConstantCache, repeat_ste integrator.opts.controller.beta1 = 1 / (i + 1) integrator.EEst = EEst - dtpropose = step_accept_controller!(integrator, alg, - stepsize_controller!(integrator, alg)) + dtpropose = step_accept_controller!( + integrator, alg, + stepsize_controller!(integrator, alg) + ) integrator.EEst = e integrator.opts.controller.beta1 = beta1 integrator.qold = qold @@ -244,7 +256,7 @@ function perform_step!(integrator, cache::AitkenNevilleConstantCache, repeat_ste OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.fsallast = k integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end function initialize!(integrator, cache::ImplicitEulerExtrapolationCache) @@ -255,13 +267,15 @@ function initialize!(integrator, cache::ImplicitEulerExtrapolationCache) integrator.k[2] = integrator.fsallast OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - cache.step_no = 1 + return cache.step_no = 1 #alg = unwrap_alg(integrator, true) #cache.cur_order = max(alg.init_order, alg.min_order) end -function perform_step!(integrator, cache::ImplicitEulerExtrapolationCache, - repeat_step = false) +function perform_step!( + integrator, cache::ImplicitEulerExtrapolationCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator alg = unwrap_alg(integrator, true) (; T, utilde, atmp, dtpropose, n_curr, A, stage_number, diff1, diff2) = cache @@ -276,7 +290,7 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationCache, # Set up the order window # alg.min_order + 1 ≦ n_curr ≦ alg.max_order - 1 is enforced by step_*_controller! if !(alg.min_order + 1 <= n_curr <= alg.max_order - 1) - error("Something went wrong while setting up the order window: $n_curr ∉ [$(alg.min_order+1),$(alg.max_order-1)]. + error("Something went wrong while setting up the order window: $n_curr ∉ [$(alg.min_order + 1),$(alg.max_order - 1)]. Please report this error ") end win_min = n_curr - 1 @@ -293,52 +307,56 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationCache, dt_temp = dt / sequence[index] jacobian2W!(W[1], integrator.f.mass_matrix, dt_temp, J) integrator.stats.nw += 1 - @.. broadcast=false k_tmps[1]=integrator.fsalfirst - @.. broadcast=false u_tmps[1]=uprev + @.. broadcast = false k_tmps[1] = integrator.fsalfirst + @.. broadcast = false u_tmps[1] = uprev for j in 1:sequence[index] - @.. broadcast=false linsolve_tmps[1]=k_tmps[1] + @.. broadcast = false linsolve_tmps[1] = k_tmps[1] linsolve = cache.linsolve[1] if !repeat_step && j == 1 - linres = dolinsolve(integrator, linsolve; A = W[1], - b = _vec(linsolve_tmps[1]), linu = _vec(k_tmps[1])) + linres = dolinsolve( + integrator, linsolve; A = W[1], + b = _vec(linsolve_tmps[1]), linu = _vec(k_tmps[1]) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, - b = _vec(linsolve_tmps[1]), linu = _vec(k_tmps[1])) + linres = dolinsolve( + integrator, linsolve; A = nothing, + b = _vec(linsolve_tmps[1]), linu = _vec(k_tmps[1]) + ) end cache.linsolve[1] = linres.cache integrator.stats.nsolve += 1 - @.. broadcast=false u_tmps2[1]=u_tmps[1] - @.. broadcast=false u_tmps[1]=u_tmps[1]-k_tmps[1] + @.. broadcast = false u_tmps2[1] = u_tmps[1] + @.. broadcast = false u_tmps[1] = u_tmps[1] - k_tmps[1] if index <= 2 && j >= 2 # Deuflhard Stability check for initial two sequences - @.. broadcast=false diff2[1]=u_tmps[1]-u_tmps2[1] - @.. broadcast=false diff2[1]=0.5*(diff2[1]-diff1[1]) + @.. broadcast = false diff2[1] = u_tmps[1] - u_tmps2[1] + @.. broadcast = false diff2[1] = 0.5 * (diff2[1] - diff1[1]) if integrator.opts.internalnorm(diff1[1], t) < - integrator.opts.internalnorm(diff2[1], t) + integrator.opts.internalnorm(diff2[1], t) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return end end - @.. broadcast=false diff1[1]=u_tmps[1]-u_tmps2[1] + @.. broadcast = false diff1[1] = u_tmps[1] - u_tmps2[1] f(k_tmps[1], u_tmps[1], p, t + j * dt_temp) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end - @.. broadcast=false T[index, 1]=u_tmps[1] + @.. broadcast = false T[index, 1] = u_tmps[1] end else calc_J!(J, integrator, cache) # Store the calculated jac as it won't change in internal discretisation let n_curr = n_curr, uprev = uprev, dt = dt, p = p, t = t, T = T, W = W, - integrator = integrator, cache = cache, repeat_step = repeat_step, - k_tmps = k_tmps, u_tmps = u_tmps, u_tmps2 = u_tmps2, diff1 = diff1, - diff2 = diff2 + integrator = integrator, cache = cache, repeat_step = repeat_step, + k_tmps = k_tmps, u_tmps = u_tmps, u_tmps2 = u_tmps2, diff1 = diff1, + diff2 = diff2 @threaded alg.threading for i in 1:2 startIndex = (i == 1) ? 1 : n_curr + 1 @@ -346,50 +364,58 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationCache, for index in startIndex:endIndex dt_temp = dt / sequence[index] jacobian2W!(W[Threads.threadid()], integrator.f.mass_matrix, dt_temp, J) - @.. broadcast=false k_tmps[Threads.threadid()]=integrator.fsalfirst - @.. broadcast=false u_tmps[Threads.threadid()]=uprev + @.. broadcast = false k_tmps[Threads.threadid()] = integrator.fsalfirst + @.. broadcast = false u_tmps[Threads.threadid()] = uprev for j in 1:sequence[index] - @.. broadcast=false linsolve_tmps[Threads.threadid()]=k_tmps[Threads.threadid()] + @.. broadcast = false linsolve_tmps[Threads.threadid()] = k_tmps[Threads.threadid()] linsolve = cache.linsolve[Threads.threadid()] if !repeat_step && j == 1 - linres = dolinsolve(integrator, linsolve; + linres = dolinsolve( + integrator, linsolve; A = W[Threads.threadid()], b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, + linres = dolinsolve( + integrator, linsolve; A = nothing, b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) end cache.linsolve[Threads.threadid()] = linres.cache - @.. broadcast=false u_tmps2[Threads.threadid()]=u_tmps[Threads.threadid()] - @.. broadcast=false u_tmps[Threads.threadid()]=u_tmps[Threads.threadid()]- - k_tmps[Threads.threadid()] + @.. broadcast = false u_tmps2[Threads.threadid()] = u_tmps[Threads.threadid()] + @.. broadcast = false u_tmps[Threads.threadid()] = u_tmps[Threads.threadid()] - + k_tmps[Threads.threadid()] if index <= 2 && j >= 2 # Deuflhard Stability check for initial two sequences - @.. broadcast=false diff2[Threads.threadid()]=u_tmps[Threads.threadid()]- - u_tmps2[Threads.threadid()] - @.. broadcast=false diff2[Threads.threadid()]=0.5* - (diff2[Threads.threadid()]- - diff1[Threads.threadid()]) + @.. broadcast = false diff2[Threads.threadid()] = u_tmps[Threads.threadid()] - + u_tmps2[Threads.threadid()] + @.. broadcast = false diff2[Threads.threadid()] = 0.5 * + ( + diff2[Threads.threadid()] - + diff1[Threads.threadid()] + ) if integrator.opts.internalnorm(diff1[Threads.threadid()], t) < - integrator.opts.internalnorm(diff2[Threads.threadid()], t) + integrator.opts.internalnorm(diff2[Threads.threadid()], t) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return end end - @.. broadcast=false diff1[Threads.threadid()]=u_tmps[Threads.threadid()]- - u_tmps2[Threads.threadid()] - f(k_tmps[Threads.threadid()], u_tmps[Threads.threadid()], p, - t + j * dt_temp) + @.. broadcast = false diff1[Threads.threadid()] = u_tmps[Threads.threadid()] - + u_tmps2[Threads.threadid()] + f( + k_tmps[Threads.threadid()], u_tmps[Threads.threadid()], p, + t + j * dt_temp + ) end - @.. broadcast=false T[index, 1]=u_tmps[Threads.threadid()] + @.. broadcast = false T[index, 1] = u_tmps[Threads.threadid()] end integrator.force_stepfail ? break : continue end @@ -408,22 +434,27 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationCache, # Polynomial extrapolation for j in 2:(n_curr + 1) for i in j:(n_curr + 1) - @.. broadcast=false T[i, j]=((sequence[i]/sequence[i - j + 1])*T[ - i, j - 1]- - T[i - 1, j - 1])/ - ((sequence[i]/sequence[i - j + 1])-1) + @.. broadcast = false T[i, j] = ( + (sequence[i] / sequence[i - j + 1]) * T[ + i, j - 1, + ] - + T[i - 1, j - 1] + ) / + ((sequence[i] / sequence[i - j + 1]) - 1) end end if integrator.opts.adaptive # Compute all information relating to an extrapolation order ≦ win_min for i in (win_min - 1):win_min - @.. broadcast=false integrator.u=T[i + 1, i + 1] - @.. broadcast=false cache.utilde=T[i + 1, i] + @.. broadcast = false integrator.u = T[i + 1, i + 1] + @.. broadcast = false cache.utilde = T[i + 1, i] - calculate_residuals!(cache.res, integrator.u, cache.utilde, + calculate_residuals!( + cache.res, integrator.u, cache.utilde, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(cache.res, t) cache.n_curr = i # Update cache's n_curr for stepsize_controller_internal! stepsize_controller_internal!(integrator, alg) # Update cache.Q @@ -436,9 +467,13 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationCache, # Accept current approximation u of order n_curr break elseif (n_curr < alg.min_order + 1) || - integrator.EEst <= - typeof(integrator.EEst)(prod(sequence[(n_curr + 2):(win_max + 1)] .// - sequence[1]^2)) + integrator.EEst <= + typeof(integrator.EEst)( + prod( + sequence[(n_curr + 2):(win_max + 1)] .// + sequence[1]^2 + ) + ) # Reject current approximation order but pass convergence monitor # Compute approximation of order (n_curr + 1) n_curr = n_curr + 1 @@ -447,49 +482,59 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationCache, dt_temp = dt / sequence[n_curr + 1] jacobian2W!(W[1], integrator.f.mass_matrix, dt_temp, J) integrator.stats.nw += 1 - @.. broadcast=false k_tmps[1]=integrator.fsalfirst - @.. broadcast=false u_tmps[1]=uprev + @.. broadcast = false k_tmps[1] = integrator.fsalfirst + @.. broadcast = false u_tmps[1] = uprev for j in 1:sequence[n_curr + 1] - @.. broadcast=false linsolve_tmps[1]=k_tmps[1] + @.. broadcast = false linsolve_tmps[1] = k_tmps[1] linsolve = cache.linsolve[1] if !repeat_step && j == 1 - linres = dolinsolve(integrator, linsolve; A = W[1], + linres = dolinsolve( + integrator, linsolve; A = W[1], b = _vec(linsolve_tmps[1]), - linu = _vec(k_tmps[1])) + linu = _vec(k_tmps[1]) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, + linres = dolinsolve( + integrator, linsolve; A = nothing, b = _vec(linsolve_tmps[1]), - linu = _vec(k_tmps[1])) + linu = _vec(k_tmps[1]) + ) end cache.linsolve[1] = linres.cache integrator.stats.nsolve += 1 - @.. broadcast=false u_tmps[1]=u_tmps[1]-k_tmps[1] + @.. broadcast = false u_tmps[1] = u_tmps[1] - k_tmps[1] f(k_tmps[1], u_tmps[1], p, t + j * dt_temp) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end - @.. broadcast=false T[n_curr + 1, 1]=u_tmps[1] + @.. broadcast = false T[n_curr + 1, 1] = u_tmps[1] for j in 2:(n_curr + 1) for i in j:(n_curr + 1) - @.. broadcast=false T[i, j]=((sequence[i]/sequence[i - j + 1])* - T[i, j - 1]-T[i - 1, j - 1])/ - ((sequence[i]/sequence[i - j + 1])- - 1) + @.. broadcast = false T[i, j] = ( + (sequence[i] / sequence[i - j + 1]) * + T[i, j - 1] - T[i - 1, j - 1] + ) / + ( + (sequence[i] / sequence[i - j + 1]) - + 1 + ) end end - @.. broadcast=false integrator.u=T[n_curr + 1, n_curr + 1] - @.. broadcast=false cache.utilde=T[n_curr + 1, n_curr] + @.. broadcast = false integrator.u = T[n_curr + 1, n_curr + 1] + @.. broadcast = false cache.utilde = T[n_curr + 1, n_curr] - calculate_residuals!(cache.res, integrator.u, cache.utilde, + calculate_residuals!( + cache.res, integrator.u, cache.utilde, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(cache.res, t) stepsize_controller_internal!(integrator, alg) # Update cache.Q else @@ -498,12 +543,12 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationCache, end end else - @.. broadcast=false integrator.u=T[n_curr + 1, n_curr + 1] + @.. broadcast = false integrator.u = T[n_curr + 1, n_curr + 1] end cache.step_no = cache.step_no + 1 f(integrator.fsallast, integrator.u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::ImplicitEulerExtrapolationConstantCache) @@ -514,11 +559,13 @@ function initialize!(integrator, cache::ImplicitEulerExtrapolationConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -function perform_step!(integrator, cache::ImplicitEulerExtrapolationConstantCache, - repeat_step = false) +function perform_step!( + integrator, cache::ImplicitEulerExtrapolationConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator alg = unwrap_alg(integrator, true) (; dtpropose, T, n_curr, work, A, tf, uf) = cache @@ -530,7 +577,7 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationConstantCach # Set up the order window # alg.min_order + 1 ≦ n_curr ≦ alg.max_order - 1 is enforced by step_*_controller! if !(alg.min_order + 1 <= n_curr <= alg.max_order - 1) - error("Something went wrong while setting up the order window: $n_curr ∉ [$(alg.min_order+1),$(alg.max_order-1)]. + error("Something went wrong while setting up the order window: $n_curr ∉ [$(alg.min_order + 1),$(alg.max_order - 1)]. Please report this error ") end win_min = n_curr - 1 @@ -560,7 +607,7 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationConstantCach diff2 = u_tmp - u_tmp2 diff2 = 0.5 * (diff2 - diff1) if integrator.opts.internalnorm(diff1, t) < - integrator.opts.internalnorm(diff2, t) + integrator.opts.internalnorm(diff2, t) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return @@ -576,7 +623,7 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationConstantCach else J = calc_J(integrator, cache) # Store the calculated jac as it won't change in internal discretisation let n_curr = n_curr, dt = dt, integrator = integrator, cache = cache, - repeat_step = repeat_step, uprev = uprev, T = T + repeat_step = repeat_step, uprev = uprev, T = T @threaded alg.threading for i in 1:2 startIndex = (i == 1) ? 1 : n_curr + 1 @@ -596,7 +643,7 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationConstantCach diff2 = u_tmp - u_tmp2 diff2 = 0.5 * (diff2 - diff1) if integrator.opts.internalnorm(diff1, t) < - integrator.opts.internalnorm(diff2, t) + integrator.opts.internalnorm(diff2, t) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return @@ -626,9 +673,11 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationConstantCach for j in 2:(n_curr + 1) tmp *= 2 for i in j:(n_curr + 1) - T[i, j] = ((sequence[i] / sequence[i - j + 1]) * T[i, j - 1] - - T[i - 1, j - 1]) / - ((sequence[i] / sequence[i - j + 1]) - 1) + T[i, j] = ( + (sequence[i] / sequence[i - j + 1]) * T[i, j - 1] - + T[i - 1, j - 1] + ) / + ((sequence[i] / sequence[i - j + 1]) - 1) end end @@ -639,9 +688,11 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationConstantCach for i in (win_min - 1):win_min u = T[i + 1, i + 1] utilde = T[i + 1, i] - res = calculate_residuals(u, utilde, integrator.opts.abstol, + res = calculate_residuals( + u, utilde, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(res, t) cache.n_curr = i # Update cache's n_curr for stepsize_controller_internal! stepsize_controller_internal!(integrator, alg) # Update cache.Q @@ -654,9 +705,13 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationConstantCach # Accept current approximation u of order n_curr break elseif (n_curr < alg.min_order + 1) || - integrator.EEst <= - typeof(integrator.EEst)(prod(sequence[(n_curr + 2):(win_max + 1)] .// - sequence[1]^2)) + integrator.EEst <= + typeof(integrator.EEst)( + prod( + sequence[(n_curr + 2):(win_max + 1)] .// + sequence[1]^2 + ) + ) # Reject current approximation order but pass convergence monitor # Always compute approximation of order (n_curr + 1) n_curr = n_curr + 1 @@ -682,17 +737,21 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationConstantCach #Extrapolate to new order for j in 2:(n_curr + 1) for i in j:(n_curr + 1) - T[i, j] = ((sequence[i] / sequence[i - j + 1]) * T[i, j - 1] - - T[i - 1, j - 1]) / - ((sequence[i] / sequence[i - j + 1]) - 1) + T[i, j] = ( + (sequence[i] / sequence[i - j + 1]) * T[i, j - 1] - + T[i - 1, j - 1] + ) / + ((sequence[i] / sequence[i - j + 1]) - 1) end end # Update u, integrator.EEst and cache.Q u = T[n_curr + 1, n_curr + 1] utilde = T[n_curr + 1, n_curr] - res = calculate_residuals(u, utilde, integrator.opts.abstol, + res = calculate_residuals( + u, utilde, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(res, t) stepsize_controller_internal!(integrator, alg) # Update cache.Q else @@ -710,7 +769,7 @@ function perform_step!(integrator, cache::ImplicitEulerExtrapolationConstantCach OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.fsallast = k_temp integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end function initialize!(integrator, cache::ExtrapolationMidpointDeuflhardCache) @@ -721,11 +780,13 @@ function initialize!(integrator, cache::ExtrapolationMidpointDeuflhardCache) resize!(integrator.k, integrator.kshortsize) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation + return integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation end -function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardCache, - repeat_step = false) +function perform_step!( + integrator, cache::ExtrapolationMidpointDeuflhardCache, + repeat_step = false + ) # Unpack all information needed (; t, uprev, dt, f, p) = integrator alg = unwrap_alg(integrator, false) @@ -760,14 +821,14 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardCache, for i in 0:n_curr j_int = sequence_factor * subdividing_sequence[i + 1] dt_int = dt / j_int # Stepsize of the ith internal discretisation - @.. broadcast=false u_temp2=uprev - @.. broadcast=false u_temp1=u_temp2+dt_int*fsalfirst # Euler starting step + @.. broadcast = false u_temp2 = uprev + @.. broadcast = false u_temp1 = u_temp2 + dt_int * fsalfirst # Euler starting step for j in 2:j_int f(k, cache.u_temp1, p, t + (j - 1) * dt_int) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false T[i + 1]=u_temp2+2*dt_int*k # Explicit Midpoint rule - @.. broadcast=false u_temp2=u_temp1 - @.. broadcast=false u_temp1=T[i + 1] + @.. broadcast = false T[i + 1] = u_temp2 + 2 * dt_int * k # Explicit Midpoint rule + @.. broadcast = false u_temp2 = u_temp1 + @.. broadcast = false u_temp1 = T[i + 1] end end else @@ -778,8 +839,8 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardCache, # Romberg sequence --> 1, 2, 4, 8, ..., 2^(i) # 1 + 2 + 4 + ... + 2^(i-1) = 2^(i) - 1 let n_curr = n_curr, subdividing_sequence = subdividing_sequence, uprev = uprev, - dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, - t = t, T = T + dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, + t = t, T = T @threaded alg.threading for i in 1:2 startIndex = (i == 1) ? 0 : n_curr @@ -787,45 +848,49 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardCache, for index in startIndex:endIndex j_int_temp = sequence_factor * subdividing_sequence[index + 1] dt_int_temp = dt / j_int_temp # Stepsize of the ith internal discretisation - @.. broadcast=false u_temp4[Threads.threadid()]=uprev - @.. broadcast=false u_temp3[Threads.threadid()]=u_temp4[Threads.threadid()]+ - dt_int_temp* - fsalfirst # Euler starting step + @.. broadcast = false u_temp4[Threads.threadid()] = uprev + @.. broadcast = false u_temp3[Threads.threadid()] = u_temp4[Threads.threadid()] + + dt_int_temp * + fsalfirst # Euler starting step for j in 2:j_int_temp - f(k_tmps[Threads.threadid()], + f( + k_tmps[Threads.threadid()], cache.u_temp3[Threads.threadid()], - p, t + (j - 1) * dt_int_temp) - @.. broadcast=false T[index + 1]=u_temp4[Threads.threadid()]+ - 2*dt_int_temp* - k_tmps[Threads.threadid()] # Explicit Midpoint rule - @.. broadcast=false u_temp4[Threads.threadid()]=u_temp3[Threads.threadid()] - @.. broadcast=false u_temp3[Threads.threadid()]=T[index + 1] + p, t + (j - 1) * dt_int_temp + ) + @.. broadcast = false T[index + 1] = u_temp4[Threads.threadid()] + + 2 * dt_int_temp * + k_tmps[Threads.threadid()] # Explicit Midpoint rule + @.. broadcast = false u_temp4[Threads.threadid()] = u_temp3[Threads.threadid()] + @.. broadcast = false u_temp3[Threads.threadid()] = T[index + 1] end end end end else let n_curr = n_curr, subdividing_sequence = subdividing_sequence, uprev = uprev, - dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, - t = t, T = T + dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, + t = t, T = T @threaded alg.threading for i in 0:(n_curr ÷ 2) indices = (i, n_curr - i) for index in indices j_int_temp = sequence_factor * subdividing_sequence[index + 1] dt_int_temp = dt / j_int_temp # Stepsize of the ith internal discretisation - @.. broadcast=false u_temp4[Threads.threadid()]=uprev - @.. broadcast=false u_temp3[Threads.threadid()]=u_temp4[Threads.threadid()]+ - dt_int_temp* - fsalfirst # Euler starting step + @.. broadcast = false u_temp4[Threads.threadid()] = uprev + @.. broadcast = false u_temp3[Threads.threadid()] = u_temp4[Threads.threadid()] + + dt_int_temp * + fsalfirst # Euler starting step for j in 2:j_int_temp - f(k_tmps[Threads.threadid()], u_temp3[Threads.threadid()], p, - t + (j - 1) * dt_int_temp) - @.. broadcast=false T[index + 1]=u_temp4[Threads.threadid()]+ - 2*dt_int_temp* - k_tmps[Threads.threadid()] # Explicit Midpoint rule - @.. broadcast=false u_temp4[Threads.threadid()]=u_temp3[Threads.threadid()] - @.. broadcast=false u_temp3[Threads.threadid()]=T[index + 1] + f( + k_tmps[Threads.threadid()], u_temp3[Threads.threadid()], p, + t + (j - 1) * dt_int_temp + ) + @.. broadcast = false T[index + 1] = u_temp4[Threads.threadid()] + + 2 * dt_int_temp * + k_tmps[Threads.threadid()] # Explicit Midpoint rule + @.. broadcast = false u_temp4[Threads.threadid()] = u_temp3[Threads.threadid()] + @.. broadcast = false u_temp3[Threads.threadid()] = T[index + 1] end if indices[2] <= indices[1] break @@ -848,17 +913,19 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardCache, u_temp1 .= false u_temp2 .= false for j in 1:(i + 1) - @.. broadcast=false u_temp1+=cache.T[j] * extrapolation_weights[j, (i + 1)] + @.. broadcast = false u_temp1 += cache.T[j] * extrapolation_weights[j, (i + 1)] end for j in 2:(i + 1) - @.. broadcast=false u_temp2+=cache.T[j] * extrapolation_weights_2[j - 1, i] + @.. broadcast = false u_temp2 += cache.T[j] * extrapolation_weights_2[j - 1, i] end - @.. broadcast=false integrator.u=extrapolation_scalars[i + 1]*u_temp1 - @.. broadcast=false cache.utilde=extrapolation_scalars_2[i]*u_temp2 + @.. broadcast = false integrator.u = extrapolation_scalars[i + 1] * u_temp1 + @.. broadcast = false cache.utilde = extrapolation_scalars_2[i] * u_temp2 - calculate_residuals!(cache.res, integrator.u, cache.utilde, + calculate_residuals!( + cache.res, integrator.u, cache.utilde, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(cache.res, t) cache.n_curr = i # Update cache's n_curr for stepsize_controller_internal! stepsize_controller_internal!(integrator, alg) # Update cache.Q @@ -870,8 +937,10 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardCache, # Accept current approximation u of order n_curr break elseif integrator.EEst <= - tol^(stage_number[n_curr - alg.min_order + 1] / - stage_number[win_max - alg.min_order + 1] - 1) + tol^( + stage_number[n_curr - alg.min_order + 1] / + stage_number[win_max - alg.min_order + 1] - 1 + ) # Reject current approximation order but pass convergence monitor # Compute approximation of order (n_curr + 1) n_curr = n_curr + 1 @@ -880,14 +949,14 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardCache, # Update cache.T j_int = sequence_factor * subdividing_sequence[n_curr + 1] dt_int = dt / j_int # Stepsize of the new internal discretisation - @.. broadcast=false u_temp2=uprev - @.. broadcast=false u_temp1=u_temp2+dt_int*fsalfirst # Euler starting step + @.. broadcast = false u_temp2 = uprev + @.. broadcast = false u_temp1 = u_temp2 + dt_int * fsalfirst # Euler starting step for j in 2:j_int f(k, cache.u_temp1, p, t + (j - 1) * dt_int) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false T[n_curr + 1]=u_temp2+2*dt_int*k - @.. broadcast=false u_temp2=u_temp1 - @.. broadcast=false u_temp1=T[n_curr + 1] + @.. broadcast = false T[n_curr + 1] = u_temp2 + 2 * dt_int * k + @.. broadcast = false u_temp2 = u_temp1 + @.. broadcast = false u_temp1 = T[n_curr + 1] end # Update u, integrator.EEst and cache.Q @@ -897,19 +966,21 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardCache, u_temp1 .= false u_temp2 .= false for j in 1:(n_curr + 1) - @.. broadcast=false u_temp1+=cache.T[j] * - extrapolation_weights[j, (n_curr + 1)] + @.. broadcast = false u_temp1 += cache.T[j] * + extrapolation_weights[j, (n_curr + 1)] end for j in 2:(n_curr + 1) - @.. broadcast=false u_temp2+=cache.T[j] * - extrapolation_weights_2[j - 1, n_curr] + @.. broadcast = false u_temp2 += cache.T[j] * + extrapolation_weights_2[j - 1, n_curr] end - @.. broadcast=false integrator.u=extrapolation_scalars[n_curr + 1]*u_temp1 - @.. broadcast=false cache.utilde=extrapolation_scalars_2[n_curr]*u_temp2 + @.. broadcast = false integrator.u = extrapolation_scalars[n_curr + 1] * u_temp1 + @.. broadcast = false cache.utilde = extrapolation_scalars_2[n_curr] * u_temp2 - calculate_residuals!(cache.res, integrator.u, cache.utilde, + calculate_residuals!( + cache.res, integrator.u, cache.utilde, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(cache.res, t) stepsize_controller_internal!(integrator, alg) # Update cache.Q else @@ -922,13 +993,13 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardCache, #integrator.u .= extrapolation_scalars[n_curr+1] * sum( broadcast(*, cache.T[1:(n_curr+1)], extrapolation_weights[1:(n_curr+1), (n_curr+1)]) ) # Approximation of extrapolation order n_curr u_temp1 .= false for j in 1:(n_curr + 1) - @.. broadcast=false u_temp1+=cache.T[j] * extrapolation_weights[j, (n_curr + 1)] + @.. broadcast = false u_temp1 += cache.T[j] * extrapolation_weights[j, (n_curr + 1)] end - @.. broadcast=false integrator.u=extrapolation_scalars[n_curr + 1]*u_temp1 + @.. broadcast = false integrator.u = extrapolation_scalars[n_curr + 1] * u_temp1 end f(cache.k, integrator.u, p, t + dt) # Update FSAL - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::ExtrapolationMidpointDeuflhardConstantCache) @@ -940,11 +1011,13 @@ function initialize!(integrator, cache::ExtrapolationMidpointDeuflhardConstantCa # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardConstantCache, - repeat_step = false) +function perform_step!( + integrator, cache::ExtrapolationMidpointDeuflhardConstantCache, + repeat_step = false + ) # Unpack all information needed (; t, uprev, dt, f, p) = integrator alg = unwrap_alg(integrator, false) @@ -999,7 +1072,7 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardConstant # Romberg sequence --> 1, 2, 4, 8, ..., 2^(i) # 1 + 2 + 4 + ... + 2^(i-1) = 2^(i) - 1 let n_curr = n_curr, subdividing_sequence = subdividing_sequence, uprev = uprev, - dt = dt, integrator = integrator, p = p, t = t, T = T + dt = dt, integrator = integrator, p = p, t = t, T = T @threaded alg.threading for i in 1:2 startIndex = (i == 1) ? 0 : n_curr @@ -1011,8 +1084,8 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardConstant u_temp3 = u_temp4 + dt_int_temp * integrator.fsalfirst # Euler starting step for j in 2:j_int_temp T[index + 1] = u_temp4 + - 2 * dt_int_temp * - f(u_temp3, p, t + (j - 1) * dt_int_temp) # Explicit Midpoint rule + 2 * dt_int_temp * + f(u_temp3, p, t + (j - 1) * dt_int_temp) # Explicit Midpoint rule u_temp4 = u_temp3 u_temp3 = T[index + 1] end @@ -1021,7 +1094,7 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardConstant end else let n_curr = n_curr, subdividing_sequence = subdividing_sequence, dt = dt, - uprev = uprev, p = p, t = t, T = T + uprev = uprev, p = p, t = t, T = T @threaded alg.threading for i in 0:(n_curr ÷ 2) indices = (i, n_curr - i) @@ -1032,8 +1105,8 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardConstant u_temp3 = u_temp4 + dt_int_temp * integrator.fsalfirst # Euler starting step for j in 2:j_int_temp T[index + 1] = u_temp4 + - 2 * dt_int_temp * - f(u_temp3, p, t + (j - 1) * dt_int_temp) # Explicit Midpoint rule + 2 * dt_int_temp * + f(u_temp3, p, t + (j - 1) * dt_int_temp) # Explicit Midpoint rule u_temp4 = u_temp3 u_temp3 = T[index + 1] end @@ -1052,14 +1125,24 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardConstant # Compute all information relating to an extrapolation order ≦ win_min for i in (alg.min_order):n_curr u = eltype(uprev).(extrapolation_scalars[i + 1]) * - sum(broadcast(*, T[1:(i + 1)], - eltype(uprev).(extrapolation_weights[1:(i + 1), (i + 1)]))) # Approximation of extrapolation order i + sum( + broadcast( + *, T[1:(i + 1)], + eltype(uprev).(extrapolation_weights[1:(i + 1), (i + 1)]) + ) + ) # Approximation of extrapolation order i utilde = eltype(uprev).(extrapolation_scalars_2[i]) * - sum(broadcast(*, T[2:(i + 1)], - eltype(uprev).(extrapolation_weights_2[1:i, i]))) # and its internal counterpart - res = calculate_residuals(u, utilde, integrator.opts.abstol, + sum( + broadcast( + *, T[2:(i + 1)], + eltype(uprev).(extrapolation_weights_2[1:i, i]) + ) + ) # and its internal counterpart + res = calculate_residuals( + u, utilde, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(res, t) cache.n_curr = i # Update cache's n_curr for stepsize_controller_internal! stepsize_controller_internal!(integrator, alg) # Update cache.Q @@ -1071,8 +1154,10 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardConstant # Accept current approximation u of order n_curr break elseif integrator.EEst <= - tol^(stage_number[n_curr - alg.min_order + 1] / - stage_number[win_max - alg.min_order + 1] - 1) + tol^( + stage_number[n_curr - alg.min_order + 1] / + stage_number[win_max - alg.min_order + 1] - 1 + ) # Reject current approximation order but pass convergence monitor # Compute approximation of order (n_curr + 1) n_curr = n_curr + 1 @@ -1085,7 +1170,7 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardConstant u_temp1 = u_temp2 + dt_int * integrator.fsalfirst # Euler starting step for j in 2:j_int T[n_curr + 1] = u_temp2 + - 2 * dt_int * f(u_temp1, p, t + (j - 1) * dt_int) + 2 * dt_int * f(u_temp1, p, t + (j - 1) * dt_int) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) u_temp2 = u_temp1 u_temp1 = T[n_curr + 1] @@ -1093,16 +1178,34 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardConstant # Update u, integrator.EEst and cache.Q u = eltype(uprev).(extrapolation_scalars[n_curr + 1]) * - sum(broadcast(*, T[1:(n_curr + 1)], - eltype(uprev).(extrapolation_weights[1:(n_curr + 1), - (n_curr + 1)]))) # Approximation of extrapolation order n_curr + sum( + broadcast( + *, T[1:(n_curr + 1)], + eltype(uprev).( + extrapolation_weights[ + 1:(n_curr + 1), + (n_curr + 1), + ] + ) + ) + ) # Approximation of extrapolation order n_curr utilde = eltype(uprev).(extrapolation_scalars_2[n_curr]) * - sum(broadcast(*, T[2:(n_curr + 1)], - eltype(uprev).(extrapolation_weights_2[1:n_curr, - n_curr]))) # and its internal counterpart - res = calculate_residuals(u, utilde, integrator.opts.abstol, + sum( + broadcast( + *, T[2:(n_curr + 1)], + eltype(uprev).( + extrapolation_weights_2[ + 1:n_curr, + n_curr, + ] + ) + ) + ) # and its internal counterpart + res = calculate_residuals( + u, utilde, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(res, t) stepsize_controller_internal!(integrator, alg) # Update cache.Q else @@ -1112,16 +1215,24 @@ function perform_step!(integrator, cache::ExtrapolationMidpointDeuflhardConstant end else u = eltype(uprev).(extrapolation_scalars[n_curr + 1]) * - sum(broadcast(*, T[1:(n_curr + 1)], - eltype(uprev).(extrapolation_weights[1:(n_curr + 1), - (n_curr + 1)]))) # Approximation of extrapolation order n_curr + sum( + broadcast( + *, T[1:(n_curr + 1)], + eltype(uprev).( + extrapolation_weights[ + 1:(n_curr + 1), + (n_curr + 1), + ] + ) + ) + ) # Approximation of extrapolation order n_curr end # Save the latest approximation and update FSAL integrator.u = u integrator.fsallast = f(u, p, t + dt) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end function initialize!(integrator, cache::ImplicitDeuflhardExtrapolationCache) @@ -1132,11 +1243,13 @@ function initialize!(integrator, cache::ImplicitDeuflhardExtrapolationCache) resize!(integrator.k, integrator.kshortsize) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation + return integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation end -function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationCache, - repeat_step = false) +function perform_step!( + integrator, cache::ImplicitDeuflhardExtrapolationCache, + repeat_step = false + ) # Unpack all information needed (; t, uprev, dt, f, p) = integrator alg = unwrap_alg(integrator, true) @@ -1174,49 +1287,59 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationCache, dt_int = dt / j_int # Stepsize of the ith internal discretisation jacobian2W!(W[1], integrator.f.mass_matrix, dt_int, J) integrator.stats.nw += 1 - @.. broadcast=false u_temp2=uprev - @.. broadcast=false linsolve_tmps[1]=fsalfirst + @.. broadcast = false u_temp2 = uprev + @.. broadcast = false linsolve_tmps[1] = fsalfirst linsolve = cache.linsolve[1] if !repeat_step - linres = dolinsolve(integrator, linsolve; A = W[1], - b = _vec(linsolve_tmps[1]), linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; A = W[1], + b = _vec(linsolve_tmps[1]), linu = _vec(k) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, - b = _vec(linsolve_tmps[1]), linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; A = nothing, + b = _vec(linsolve_tmps[1]), linu = _vec(k) + ) end cache.linsolve[1] = linres.cache integrator.stats.nsolve += 1 - @.. broadcast=false u_temp1=u_temp2-k # Euler starting step - @.. broadcast=false diff1[1]=u_temp1-u_temp2 + @.. broadcast = false u_temp1 = u_temp2 - k # Euler starting step + @.. broadcast = false diff1[1] = u_temp1 - u_temp2 for j in 2:j_int f(k, cache.u_temp1, p, t + (j - 1) * dt_int) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false linsolve_tmps[1]=k-(u_temp1-u_temp2)/dt_int + @.. broadcast = false linsolve_tmps[1] = k - (u_temp1 - u_temp2) / dt_int linsolve = cache.linsolve[1] if !repeat_step && j == 1 - linres = dolinsolve(integrator, linsolve; A = W[1], - b = _vec(linsolve_tmps[1]), linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; A = W[1], + b = _vec(linsolve_tmps[1]), linu = _vec(k) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, - b = _vec(linsolve_tmps[1]), linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; A = nothing, + b = _vec(linsolve_tmps[1]), linu = _vec(k) + ) end cache.linsolve[1] = linres.cache integrator.stats.nsolve += 1 - @.. broadcast=false T[i + 1]=2*u_temp1-u_temp2-2*k # Explicit Midpoint rule - @.. broadcast=false u_temp2=u_temp1 - @.. broadcast=false u_temp1=T[i + 1] + @.. broadcast = false T[i + 1] = 2 * u_temp1 - u_temp2 - 2 * k # Explicit Midpoint rule + @.. broadcast = false u_temp2 = u_temp1 + @.. broadcast = false u_temp1 = T[i + 1] if (i <= 1) # Deuflhard Stability check for initial two sequences - @.. broadcast=false diff2[1]=u_temp1-u_temp2 - if (integrator.opts.internalnorm(diff1[1], t) < - integrator.opts.internalnorm(0.5 * (diff2[1] - diff1[1]), t)) + @.. broadcast = false diff2[1] = u_temp1 - u_temp2 + if ( + integrator.opts.internalnorm(diff1[1], t) < + integrator.opts.internalnorm(0.5 * (diff2[1] - diff1[1]), t) + ) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return @@ -1232,8 +1355,8 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationCache, # Romberg sequence --> 1, 2, 4, 8, ..., 2^(i) # 1 + 2 + 4 + ... + 2^(i-1) = 2^(i) - 1 let n_curr = n_curr, subdividing_sequence = subdividing_sequence, uprev = uprev, - dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, - t = t, T = T + dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, + t = t, T = T @threaded alg.threading for i in 1:2 startIndex = (i == 1) ? 0 : n_curr @@ -1242,70 +1365,92 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationCache, for index in startIndex:endIndex j_int_temp = 4 * subdividing_sequence[index + 1] dt_int_temp = dt / j_int_temp # Stepsize of the ith internal discretisation - jacobian2W!(W[Threads.threadid()], integrator.f.mass_matrix, - dt_int_temp, J) - @.. broadcast=false u_temp4[Threads.threadid()]=uprev - @.. broadcast=false linsolve_tmps[Threads.threadid()]=fsalfirst + jacobian2W!( + W[Threads.threadid()], integrator.f.mass_matrix, + dt_int_temp, J + ) + @.. broadcast = false u_temp4[Threads.threadid()] = uprev + @.. broadcast = false linsolve_tmps[Threads.threadid()] = fsalfirst linsolve = cache.linsolve[Threads.threadid()] if !repeat_step - linres = dolinsolve(integrator, linsolve; + linres = dolinsolve( + integrator, linsolve; A = W[Threads.threadid()], b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, + linres = dolinsolve( + integrator, linsolve; A = nothing, b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) end cache.linsolve[Threads.threadid()] = linres.cache - @.. broadcast=false k_tmps[Threads.threadid()]=-k_tmps[Threads.threadid()] - @.. broadcast=false u_temp3[Threads.threadid()]=u_temp4[Threads.threadid()]+ - k_tmps[Threads.threadid()] # Euler starting step - @.. broadcast=false diff1[Threads.threadid()]=u_temp3[Threads.threadid()]- - u_temp4[Threads.threadid()] + @.. broadcast = false k_tmps[Threads.threadid()] = -k_tmps[Threads.threadid()] + @.. broadcast = false u_temp3[Threads.threadid()] = u_temp4[Threads.threadid()] + + k_tmps[Threads.threadid()] # Euler starting step + @.. broadcast = false diff1[Threads.threadid()] = u_temp3[Threads.threadid()] - + u_temp4[Threads.threadid()] for j in 2:j_int_temp - f(k_tmps[Threads.threadid()], + f( + k_tmps[Threads.threadid()], cache.u_temp3[Threads.threadid()], - p, t + (j - 1) * dt_int_temp) - @.. broadcast=false linsolve_tmps[Threads.threadid()]=k_tmps[Threads.threadid()]- - (u_temp3[Threads.threadid()]- - u_temp4[Threads.threadid()])/ - dt_int_temp + p, t + (j - 1) * dt_int_temp + ) + @.. broadcast = false linsolve_tmps[Threads.threadid()] = k_tmps[Threads.threadid()] - + ( + u_temp3[Threads.threadid()] - + u_temp4[Threads.threadid()] + ) / + dt_int_temp linsolve = cache.linsolve[Threads.threadid()] if !repeat_step && j == 1 - linres = dolinsolve(integrator, linsolve; + linres = dolinsolve( + integrator, linsolve; A = W[Threads.threadid()], b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, + linres = dolinsolve( + integrator, linsolve; A = nothing, b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) end cache.linsolve[Threads.threadid()] = linres.cache - @.. broadcast=false T[index + 1]=2* - u_temp3[Threads.threadid()]- - u_temp4[Threads.threadid()]- - 2*k_tmps[Threads.threadid()] # Explicit Midpoint rule - @.. broadcast=false u_temp4[Threads.threadid()]=u_temp3[Threads.threadid()] - @.. broadcast=false u_temp3[Threads.threadid()]=T[index + 1] + @.. broadcast = false T[index + 1] = 2 * + u_temp3[Threads.threadid()] - + u_temp4[Threads.threadid()] - + 2 * k_tmps[Threads.threadid()] # Explicit Midpoint rule + @.. broadcast = false u_temp4[Threads.threadid()] = u_temp3[Threads.threadid()] + @.. broadcast = false u_temp3[Threads.threadid()] = T[index + 1] if (index <= 1) # Deuflhard Stability check for initial two sequences - @.. broadcast=false diff2[Threads.threadid()]=u_temp3[Threads.threadid()]- - u_temp4[Threads.threadid()] - @.. broadcast=false diff2[Threads.threadid()]=0.5* - (diff2[Threads.threadid()]- - diff1[Threads.threadid()]) - if (integrator.opts.internalnorm(diff1[Threads.threadid()], - t) < - integrator.opts.internalnorm(diff2[Threads.threadid()], - t)) + @.. broadcast = false diff2[Threads.threadid()] = u_temp3[Threads.threadid()] - + u_temp4[Threads.threadid()] + @.. broadcast = false diff2[Threads.threadid()] = 0.5 * + ( + diff2[Threads.threadid()] - + diff1[Threads.threadid()] + ) + if ( + integrator.opts.internalnorm( + diff1[Threads.threadid()], + t + ) < + integrator.opts.internalnorm( + diff2[Threads.threadid()], + t + ) + ) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return @@ -1318,8 +1463,8 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationCache, end else let n_curr = n_curr, subdividing_sequence = subdividing_sequence, uprev = uprev, - dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, - t = t, T = T + dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, + t = t, T = T @threaded alg.threading for i in 0:(n_curr ÷ 2) indices = i != n_curr - i ? (i, n_curr - i) : (-1, n_curr - i) #Use flag to avoid union @@ -1327,70 +1472,92 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationCache, index == -1 && continue j_int_temp = 4 * subdividing_sequence[index + 1] dt_int_temp = dt / j_int_temp # Stepsize of the ith internal discretisation - jacobian2W!(W[Threads.threadid()], integrator.f.mass_matrix, - dt_int_temp, J) - @.. broadcast=false u_temp4[Threads.threadid()]=uprev - @.. broadcast=false linsolve_tmps[Threads.threadid()]=fsalfirst + jacobian2W!( + W[Threads.threadid()], integrator.f.mass_matrix, + dt_int_temp, J + ) + @.. broadcast = false u_temp4[Threads.threadid()] = uprev + @.. broadcast = false linsolve_tmps[Threads.threadid()] = fsalfirst linsolve = cache.linsolve[Threads.threadid()] if !repeat_step - linres = dolinsolve(integrator, linsolve; + linres = dolinsolve( + integrator, linsolve; A = W[Threads.threadid()], b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, + linres = dolinsolve( + integrator, linsolve; A = nothing, b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) end cache.linsolve[Threads.threadid()] = linres.cache - @.. broadcast=false k_tmps[Threads.threadid()]=-k_tmps[Threads.threadid()] - @.. broadcast=false u_temp3[Threads.threadid()]=u_temp4[Threads.threadid()]+ - k_tmps[Threads.threadid()] # Euler starting step - @.. broadcast=false diff1[Threads.threadid()]=u_temp3[Threads.threadid()]- - u_temp4[Threads.threadid()] + @.. broadcast = false k_tmps[Threads.threadid()] = -k_tmps[Threads.threadid()] + @.. broadcast = false u_temp3[Threads.threadid()] = u_temp4[Threads.threadid()] + + k_tmps[Threads.threadid()] # Euler starting step + @.. broadcast = false diff1[Threads.threadid()] = u_temp3[Threads.threadid()] - + u_temp4[Threads.threadid()] for j in 2:j_int_temp - f(k_tmps[Threads.threadid()], + f( + k_tmps[Threads.threadid()], cache.u_temp3[Threads.threadid()], - p, t + (j - 1) * dt_int_temp) - @.. broadcast=false linsolve_tmps[Threads.threadid()]=k_tmps[Threads.threadid()]- - (u_temp3[Threads.threadid()]- - u_temp4[Threads.threadid()])/ - dt_int_temp + p, t + (j - 1) * dt_int_temp + ) + @.. broadcast = false linsolve_tmps[Threads.threadid()] = k_tmps[Threads.threadid()] - + ( + u_temp3[Threads.threadid()] - + u_temp4[Threads.threadid()] + ) / + dt_int_temp linsolve = cache.linsolve[Threads.threadid()] if !repeat_step && j == 1 - linres = dolinsolve(integrator, linsolve; + linres = dolinsolve( + integrator, linsolve; A = W[Threads.threadid()], b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, + linres = dolinsolve( + integrator, linsolve; A = nothing, b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) end cache.linsolve[Threads.threadid()] = linres.cache - @.. broadcast=false T[index + 1]=2* - u_temp3[Threads.threadid()]- - u_temp4[Threads.threadid()]- - 2*k_tmps[Threads.threadid()] # Explicit Midpoint rule - @.. broadcast=false u_temp4[Threads.threadid()]=u_temp3[Threads.threadid()] - @.. broadcast=false u_temp3[Threads.threadid()]=T[index + 1] + @.. broadcast = false T[index + 1] = 2 * + u_temp3[Threads.threadid()] - + u_temp4[Threads.threadid()] - + 2 * k_tmps[Threads.threadid()] # Explicit Midpoint rule + @.. broadcast = false u_temp4[Threads.threadid()] = u_temp3[Threads.threadid()] + @.. broadcast = false u_temp3[Threads.threadid()] = T[index + 1] if (index <= 1) # Deuflhard Stability check for initial two sequences - @.. broadcast=false diff2[Threads.threadid()]=u_temp3[Threads.threadid()]- - u_temp4[Threads.threadid()] - @.. broadcast=false diff2[Threads.threadid()]=0.5* - (diff2[Threads.threadid()]- - diff1[Threads.threadid()]) - if (integrator.opts.internalnorm(diff1[Threads.threadid()], - t) < - integrator.opts.internalnorm(diff2[Threads.threadid()], - t)) + @.. broadcast = false diff2[Threads.threadid()] = u_temp3[Threads.threadid()] - + u_temp4[Threads.threadid()] + @.. broadcast = false diff2[Threads.threadid()] = 0.5 * + ( + diff2[Threads.threadid()] - + diff1[Threads.threadid()] + ) + if ( + integrator.opts.internalnorm( + diff1[Threads.threadid()], + t + ) < + integrator.opts.internalnorm( + diff2[Threads.threadid()], + t + ) + ) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return @@ -1418,17 +1585,19 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationCache, u_temp1 .= false u_temp2 .= false for j in 1:(i + 1) - @.. broadcast=false u_temp1+=cache.T[j] * extrapolation_weights[j, (i + 1)] + @.. broadcast = false u_temp1 += cache.T[j] * extrapolation_weights[j, (i + 1)] end for j in 2:(i + 1) - @.. broadcast=false u_temp2+=cache.T[j] * extrapolation_weights_2[j - 1, i] + @.. broadcast = false u_temp2 += cache.T[j] * extrapolation_weights_2[j - 1, i] end - @.. broadcast=false integrator.u=extrapolation_scalars[i + 1]*u_temp1 - @.. broadcast=false cache.utilde=extrapolation_scalars_2[i]*u_temp2 + @.. broadcast = false integrator.u = extrapolation_scalars[i + 1] * u_temp1 + @.. broadcast = false cache.utilde = extrapolation_scalars_2[i] * u_temp2 - calculate_residuals!(cache.res, integrator.u, cache.utilde, + calculate_residuals!( + cache.res, integrator.u, cache.utilde, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(cache.res, t) cache.n_curr = i # Update cache's n_curr for stepsize_controller_internal! stepsize_controller_internal!(integrator, alg) # Update cache.Q @@ -1437,13 +1606,15 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationCache, # Check if an approximation of some order in the order window can be accepted while n_curr <= win_max tol = integrator.opts.internalnorm(cache.utilde - integrator.u, t) / - integrator.EEst # Used by the convergence monitor + integrator.EEst # Used by the convergence monitor if accept_step_controller(integrator, integrator.opts.controller) # Accept current approximation u of order n_curr break elseif integrator.EEst <= - tol^(stage_number[n_curr - alg.min_order + 1] / - stage_number[win_max - alg.min_order + 1] - 1) + tol^( + stage_number[n_curr - alg.min_order + 1] / + stage_number[win_max - alg.min_order + 1] - 1 + ) # Reject current approximation order but pass convergence monitor # Compute approximation of order (n_curr + 1) n_curr = n_curr + 1 @@ -1454,30 +1625,34 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationCache, dt_int = dt / j_int # Stepsize of the new internal discretisation jacobian2W!(W[1], integrator.f.mass_matrix, dt_int, J) integrator.stats.nw += 1 - @.. broadcast=false u_temp2=uprev - @.. broadcast=false linsolve_tmps[1]=fsalfirst + @.. broadcast = false u_temp2 = uprev + @.. broadcast = false linsolve_tmps[1] = fsalfirst linsolve = cache.linsolve[1] - linres = dolinsolve(integrator, linsolve; b = _vec(linsolve_tmps[1]), - linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; b = _vec(linsolve_tmps[1]), + linu = _vec(k) + ) cache.linsolve[1] = linres.cache integrator.stats.nsolve += 1 - @.. broadcast=false u_temp1=u_temp2-k # Euler starting step + @.. broadcast = false u_temp1 = u_temp2 - k # Euler starting step for j in 2:j_int f(k, cache.u_temp1, p, t + (j - 1) * dt_int) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false linsolve_tmps[1]=dt_int*k-(u_temp1-u_temp2) + @.. broadcast = false linsolve_tmps[1] = dt_int * k - (u_temp1 - u_temp2) linsolve = cache.linsolve[1] - linres = dolinsolve(integrator, linsolve; b = _vec(linsolve_tmps[1]), - linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; b = _vec(linsolve_tmps[1]), + linu = _vec(k) + ) cache.linsolve[1] = linres.cache integrator.stats.nsolve += 1 - @.. broadcast=false T[n_curr + 1]=2*u_temp1-u_temp2-2*k # Explicit Midpoint rule - @.. broadcast=false u_temp2=u_temp1 - @.. broadcast=false u_temp1=T[n_curr + 1] + @.. broadcast = false T[n_curr + 1] = 2 * u_temp1 - u_temp2 - 2 * k # Explicit Midpoint rule + @.. broadcast = false u_temp2 = u_temp1 + @.. broadcast = false u_temp1 = T[n_curr + 1] end # Update u, integrator.EEst and cache.Q @@ -1487,19 +1662,21 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationCache, u_temp1 .= false u_temp2 .= false for j in 1:(n_curr + 1) - @.. broadcast=false u_temp1+=cache.T[j] * - extrapolation_weights[j, (n_curr + 1)] + @.. broadcast = false u_temp1 += cache.T[j] * + extrapolation_weights[j, (n_curr + 1)] end for j in 2:(n_curr + 1) - @.. broadcast=false u_temp2+=cache.T[j] * - extrapolation_weights_2[j - 1, n_curr] + @.. broadcast = false u_temp2 += cache.T[j] * + extrapolation_weights_2[j - 1, n_curr] end - @.. broadcast=false integrator.u=extrapolation_scalars[n_curr + 1]*u_temp1 - @.. broadcast=false cache.utilde=extrapolation_scalars_2[n_curr]*u_temp2 + @.. broadcast = false integrator.u = extrapolation_scalars[n_curr + 1] * u_temp1 + @.. broadcast = false cache.utilde = extrapolation_scalars_2[n_curr] * u_temp2 - calculate_residuals!(cache.res, integrator.u, cache.utilde, + calculate_residuals!( + cache.res, integrator.u, cache.utilde, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(cache.res, t) stepsize_controller_internal!(integrator, alg) # Update cache.Q else @@ -1512,13 +1689,13 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationCache, #integrator.u .= extrapolation_scalars[n_curr+1] * sum( broadcast(*, cache.T[1:(n_curr+1)], extrapolation_weights[1:(n_curr+1), (n_curr+1)]) ) # Approximation of extrapolation order n_curr u_temp1 .= false for j in 1:(n_curr + 1) - @.. broadcast=false u_temp1+=cache.T[j] * extrapolation_weights[j, (n_curr + 1)] + @.. broadcast = false u_temp1 += cache.T[j] * extrapolation_weights[j, (n_curr + 1)] end - @.. broadcast=false integrator.u=extrapolation_scalars[n_curr + 1]*u_temp1 + @.. broadcast = false integrator.u = extrapolation_scalars[n_curr + 1] * u_temp1 end f(cache.k, integrator.u, p, t + dt) # Update FSAL - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::ImplicitDeuflhardExtrapolationConstantCache) @@ -1530,11 +1707,13 @@ function initialize!(integrator, cache::ImplicitDeuflhardExtrapolationConstantCa # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationConstantCache, - repeat_step = false) +function perform_step!( + integrator, cache::ImplicitDeuflhardExtrapolationConstantCache, + repeat_step = false + ) # Unpack all information needed (; t, uprev, dt, f, p) = integrator alg = unwrap_alg(integrator, true) @@ -1575,23 +1754,28 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationConstant integrator.stats.nw += 1 u_temp2 = uprev u_temp1 = u_temp2 + - _reshape(W \ -_vec(dt_int * integrator.fsalfirst), axes(uprev)) # Euler starting step + _reshape(W \ -_vec(dt_int * integrator.fsalfirst), axes(uprev)) # Euler starting step diff1 = u_temp1 - u_temp2 for j in 2:j_int T[i + 1] = 2 * u_temp1 - u_temp2 + - 2 * _reshape( + 2 * _reshape( W \ - -_vec(dt_int * f(u_temp1, p, t + (j - 1) * dt_int) - - (u_temp1 - u_temp2)), - axes(uprev)) + -_vec( + dt_int * f(u_temp1, p, t + (j - 1) * dt_int) - + (u_temp1 - u_temp2) + ), + axes(uprev) + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) u_temp2 = u_temp1 u_temp1 = T[i + 1] if (i <= 1) # Deuflhard Stability check for initial two sequences diff2 = u_temp1 - u_temp2 - if (integrator.opts.internalnorm(diff1, t) < - integrator.opts.internalnorm(0.5 * (diff2 - diff1), t)) + if ( + integrator.opts.internalnorm(diff1, t) < + integrator.opts.internalnorm(0.5 * (diff2 - diff1), t) + ) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return @@ -1607,7 +1791,7 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationConstant # Romberg sequence --> 1, 2, 4, 8, ..., 2^(i) # 1 + 2 + 4 + ... + 2^(i-1) = 2^(i) - 1 let n_curr = n_curr, subdividing_sequence = subdividing_sequence, uprev = uprev, - dt = dt, u_temp2 = u_temp2, u_temp2 = u_temp2, p = p, t = t, T = T + dt = dt, u_temp2 = u_temp2, u_temp2 = u_temp2, p = p, t = t, T = T @threaded alg.threading for i in 1:2 startIndex = (i == 1) ? 0 : n_curr @@ -1620,27 +1804,37 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationConstant integrator.stats.nw += 1 u_temp4 = uprev u_temp3 = u_temp4 + - _reshape(W \ -_vec(dt_int * integrator.fsalfirst), - axes(uprev)) # Euler starting step + _reshape( + W \ -_vec(dt_int * integrator.fsalfirst), + axes(uprev) + ) # Euler starting step diff1 = u_temp3 - u_temp4 for j in 2:j_int T[index + 1] = 2 * u_temp3 - u_temp4 + - 2 * _reshape( + 2 * _reshape( W \ - -_vec(dt_int * f(u_temp3, p, - t + (j - 1) * dt_int) - - (u_temp3 - u_temp4)), - axes(uprev)) + -_vec( + dt_int * f( + u_temp3, p, + t + (j - 1) * dt_int + ) - + (u_temp3 - u_temp4) + ), + axes(uprev) + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) u_temp4 = u_temp3 u_temp3 = T[index + 1] if (index <= 1) # Deuflhard Stability check for initial two sequences diff2 = u_temp3 - u_temp4 - if (integrator.opts.internalnorm(diff1[1], t) < - integrator.opts.internalnorm( - 0.5 * - (diff2[1] - diff1[1]), t)) + if ( + integrator.opts.internalnorm(diff1[1], t) < + integrator.opts.internalnorm( + 0.5 * + (diff2[1] - diff1[1]), t + ) + ) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return @@ -1653,7 +1847,7 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationConstant end else let n_curr = n_curr, subdividing_sequence = subdividing_sequence, uprev = uprev, - dt = dt, integrator = integrator, p = p, t = t, T = T + dt = dt, integrator = integrator, p = p, t = t, T = T @threaded alg.threading for i in 0:(n_curr ÷ 2) indices = i != n_curr - i ? (i, n_curr - i) : (-1, n_curr - i) @@ -1665,25 +1859,34 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationConstant integrator.stats.nw += 1 u_temp4 = uprev u_temp3 = u_temp4 + - _reshape(W \ -_vec(dt_int * integrator.fsalfirst), - axes(uprev)) # Euler starting step + _reshape( + W \ -_vec(dt_int * integrator.fsalfirst), + axes(uprev) + ) # Euler starting step diff1 = u_temp3 - u_temp4 for j in 2:j_int T[index + 1] = 2 * u_temp3 - u_temp4 + - 2 * _reshape( + 2 * _reshape( W \ - -_vec(dt_int * f(u_temp3, p, - t + (j - 1) * dt_int) - - (u_temp3 - u_temp4)), - axes(uprev)) + -_vec( + dt_int * f( + u_temp3, p, + t + (j - 1) * dt_int + ) - + (u_temp3 - u_temp4) + ), + axes(uprev) + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) u_temp4 = u_temp3 u_temp3 = T[index + 1] if (index <= 1) # Deuflhard Stability check for initial two sequences diff2 = u_temp3 - u_temp4 - if (integrator.opts.internalnorm(diff1, t) < - integrator.opts.internalnorm(0.5 * (diff2 - diff1), t)) + if ( + integrator.opts.internalnorm(diff1, t) < + integrator.opts.internalnorm(0.5 * (diff2 - diff1), t) + ) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return @@ -1705,14 +1908,24 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationConstant # Compute all information relating to an extrapolation order ≦ win_min for i in (alg.min_order):n_curr u = eltype(uprev).(extrapolation_scalars[i + 1]) * - sum(broadcast(*, T[1:(i + 1)], - eltype(uprev).(extrapolation_weights[1:(i + 1), (i + 1)]))) # Approximation of extrapolation order i + sum( + broadcast( + *, T[1:(i + 1)], + eltype(uprev).(extrapolation_weights[1:(i + 1), (i + 1)]) + ) + ) # Approximation of extrapolation order i utilde = eltype(uprev).(extrapolation_scalars_2[i]) * - sum(broadcast(*, T[2:(i + 1)], - eltype(uprev).(extrapolation_weights_2[1:i, i]))) # and its internal counterpart - res = calculate_residuals(u, utilde, integrator.opts.abstol, + sum( + broadcast( + *, T[2:(i + 1)], + eltype(uprev).(extrapolation_weights_2[1:i, i]) + ) + ) # and its internal counterpart + res = calculate_residuals( + u, utilde, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(res, t) cache.n_curr = i # Update cache's n_curr for stepsize_controller_internal! stepsize_controller_internal!(integrator, alg) # Update cache.Q @@ -1725,8 +1938,10 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationConstant # Accept current approximation u of order n_curr break elseif integrator.EEst <= - tol^(stage_number[n_curr - alg.min_order + 1] / - stage_number[win_max - alg.min_order + 1] - 1) + tol^( + stage_number[n_curr - alg.min_order + 1] / + stage_number[win_max - alg.min_order + 1] - 1 + ) # Reject current approximation order but pass convergence monitor # Compute approximation of order (n_curr + 1) n_curr = n_curr + 1 @@ -1739,15 +1954,18 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationConstant integrator.stats.nw += 1 u_temp2 = uprev u_temp1 = u_temp2 + - _reshape(W \ -_vec(dt_int * integrator.fsalfirst), axes(uprev)) # Euler starting step + _reshape(W \ -_vec(dt_int * integrator.fsalfirst), axes(uprev)) # Euler starting step for j in 2:j_int T[n_curr + 1] = 2 * u_temp1 - u_temp2 + - 2 * _reshape( + 2 * _reshape( W \ - -_vec(dt_int * - f(u_temp1, p, t + (j - 1) * dt_int) - - (u_temp1 - u_temp2)), - axes(uprev)) + -_vec( + dt_int * + f(u_temp1, p, t + (j - 1) * dt_int) - + (u_temp1 - u_temp2) + ), + axes(uprev) + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) u_temp2 = u_temp1 u_temp1 = T[n_curr + 1] @@ -1755,16 +1973,34 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationConstant # Update u, integrator.EEst and cache.Q u = eltype(uprev).(extrapolation_scalars[n_curr + 1]) * - sum(broadcast(*, T[1:(n_curr + 1)], - eltype(uprev).(extrapolation_weights[1:(n_curr + 1), - (n_curr + 1)]))) # Approximation of extrapolation order n_curr + sum( + broadcast( + *, T[1:(n_curr + 1)], + eltype(uprev).( + extrapolation_weights[ + 1:(n_curr + 1), + (n_curr + 1), + ] + ) + ) + ) # Approximation of extrapolation order n_curr utilde = eltype(uprev).(extrapolation_scalars_2[n_curr]) * - sum(broadcast(*, T[2:(n_curr + 1)], - eltype(uprev).(extrapolation_weights_2[1:n_curr, - n_curr]))) # and its internal counterpart - res = calculate_residuals(u, utilde, integrator.opts.abstol, + sum( + broadcast( + *, T[2:(n_curr + 1)], + eltype(uprev).( + extrapolation_weights_2[ + 1:n_curr, + n_curr, + ] + ) + ) + ) # and its internal counterpart + res = calculate_residuals( + u, utilde, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(res, t) stepsize_controller_internal!(integrator, alg) # Update cache.Q else @@ -1774,9 +2010,17 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationConstant end else u = eltype(uprev).(extrapolation_scalars[n_curr + 1]) * - sum(broadcast(*, T[1:(n_curr + 1)], - eltype(uprev).(extrapolation_weights[1:(n_curr + 1), - (n_curr + 1)]))) # Approximation of extrapolation order n_curr + sum( + broadcast( + *, T[1:(n_curr + 1)], + eltype(uprev).( + extrapolation_weights[ + 1:(n_curr + 1), + (n_curr + 1), + ] + ) + ) + ) # Approximation of extrapolation order n_curr end # Save the latest approximation and update FSAL @@ -1784,7 +2028,7 @@ function perform_step!(integrator, cache::ImplicitDeuflhardExtrapolationConstant integrator.fsallast = f(u, p, t + dt) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::ExtrapolationMidpointHairerWannerCache) @@ -1795,11 +2039,13 @@ function initialize!(integrator, cache::ExtrapolationMidpointHairerWannerCache) resize!(integrator.k, integrator.kshortsize) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation + return integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation end -function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerCache, - repeat_step = false) +function perform_step!( + integrator, cache::ExtrapolationMidpointHairerWannerCache, + repeat_step = false + ) # Unpack all information needed (; t, uprev, dt, f, p) = integrator alg = unwrap_alg(integrator, false) @@ -1821,7 +2067,7 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerCache # Set up the order window # alg.min_order + 1 ≦ n_curr ≦ alg.max_order - 1 is enforced by step_*_controller! if !(alg.min_order + 1 <= n_curr <= alg.max_order - 1) - error("Something went wrong while setting up the order window: $n_curr ∉ [$(alg.min_order+1),$(alg.max_order-1)]. + error("Something went wrong while setting up the order window: $n_curr ∉ [$(alg.min_order + 1),$(alg.max_order - 1)]. Please report this error ") end win_min = n_curr - 1 @@ -1837,14 +2083,14 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerCache for i in 0:n_curr j_int = sequence_factor * subdividing_sequence[i + 1] dt_int = dt / j_int # Stepsize of the ith internal discretisation - @.. broadcast=false u_temp2=uprev - @.. broadcast=false u_temp1=u_temp2+dt_int*fsalfirst # Euler starting step + @.. broadcast = false u_temp2 = uprev + @.. broadcast = false u_temp1 = u_temp2 + dt_int * fsalfirst # Euler starting step for j in 2:j_int f(k, cache.u_temp1, p, t + (j - 1) * dt_int) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false T[i + 1]=u_temp2+2*dt_int*k # Explicit Midpoint rule - @.. broadcast=false u_temp2=u_temp1 - @.. broadcast=false u_temp1=T[i + 1] + @.. broadcast = false T[i + 1] = u_temp2 + 2 * dt_int * k # Explicit Midpoint rule + @.. broadcast = false u_temp2 = u_temp1 + @.. broadcast = false u_temp1 = T[i + 1] end end else @@ -1855,8 +2101,8 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerCache # Romberg sequence --> 1, 2, 4, 8, ..., 2^(i) # 1 + 2 + 4 + ... + 2^(i-1) = 2^(i) - 1 let n_curr = n_curr, subdividing_sequence = subdividing_sequence, uprev = uprev, - dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, - t = t, T = T + dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, + t = t, T = T @threaded alg.threading for i in 1:2 startIndex = (i == 1) ? 0 : n_curr @@ -1865,27 +2111,29 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerCache for index in startIndex:endIndex j_int_temp = sequence_factor * subdividing_sequence[index + 1] dt_int_temp = dt / j_int_temp # Stepsize of the ith internal discretisation - @.. broadcast=false u_temp4[Threads.threadid()]=uprev - @.. broadcast=false u_temp3[Threads.threadid()]=u_temp4[Threads.threadid()]+ - dt_int_temp* - fsalfirst # Euler starting step + @.. broadcast = false u_temp4[Threads.threadid()] = uprev + @.. broadcast = false u_temp3[Threads.threadid()] = u_temp4[Threads.threadid()] + + dt_int_temp * + fsalfirst # Euler starting step for j in 2:j_int_temp - f(k_tmps[Threads.threadid()], + f( + k_tmps[Threads.threadid()], cache.u_temp3[Threads.threadid()], - p, t + (j - 1) * dt_int_temp) - @.. broadcast=false T[index + 1]=u_temp4[Threads.threadid()]+ - 2*dt_int_temp* - k_tmps[Threads.threadid()] # Explicit Midpoint rule - @.. broadcast=false u_temp4[Threads.threadid()]=u_temp3[Threads.threadid()] - @.. broadcast=false u_temp3[Threads.threadid()]=T[index + 1] + p, t + (j - 1) * dt_int_temp + ) + @.. broadcast = false T[index + 1] = u_temp4[Threads.threadid()] + + 2 * dt_int_temp * + k_tmps[Threads.threadid()] # Explicit Midpoint rule + @.. broadcast = false u_temp4[Threads.threadid()] = u_temp3[Threads.threadid()] + @.. broadcast = false u_temp3[Threads.threadid()] = T[index + 1] end end end end else let n_curr = n_curr, subdividing_sequence = subdividing_sequence, uprev = uprev, - dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, - t = t, T = T + dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, + t = t, T = T @threaded alg.threading for i in 0:(n_curr ÷ 2) indices = i != n_curr - i ? (i, n_curr - i) : (-1, n_curr - i) @@ -1893,19 +2141,21 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerCache index == -1 && continue j_int_temp = sequence_factor * subdividing_sequence[index + 1] dt_int_temp = dt / j_int_temp # Stepsize of the ith internal discretisation - @.. broadcast=false u_temp4[Threads.threadid()]=uprev - @.. broadcast=false u_temp3[Threads.threadid()]=u_temp4[Threads.threadid()]+ - dt_int_temp* - fsalfirst # Euler starting step + @.. broadcast = false u_temp4[Threads.threadid()] = uprev + @.. broadcast = false u_temp3[Threads.threadid()] = u_temp4[Threads.threadid()] + + dt_int_temp * + fsalfirst # Euler starting step for j in 2:j_int_temp - f(k_tmps[Threads.threadid()], + f( + k_tmps[Threads.threadid()], cache.u_temp3[Threads.threadid()], - p, t + (j - 1) * dt_int_temp) - @.. broadcast=false T[index + 1]=u_temp4[Threads.threadid()]+ - 2*dt_int_temp* - k_tmps[Threads.threadid()] # Explicit Midpoint rule - @.. broadcast=false u_temp4[Threads.threadid()]=u_temp3[Threads.threadid()] - @.. broadcast=false u_temp3[Threads.threadid()]=T[index + 1] + p, t + (j - 1) * dt_int_temp + ) + @.. broadcast = false T[index + 1] = u_temp4[Threads.threadid()] + + 2 * dt_int_temp * + k_tmps[Threads.threadid()] # Explicit Midpoint rule + @.. broadcast = false u_temp4[Threads.threadid()] = u_temp3[Threads.threadid()] + @.. broadcast = false u_temp3[Threads.threadid()] = T[index + 1] end end end @@ -1925,17 +2175,19 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerCache u_temp1 .= false u_temp2 .= false for j in 1:(i + 1) - @.. broadcast=false u_temp1+=cache.T[j] * extrapolation_weights[j, (i + 1)] + @.. broadcast = false u_temp1 += cache.T[j] * extrapolation_weights[j, (i + 1)] end for j in 2:(i + 1) - @.. broadcast=false u_temp2+=cache.T[j] * extrapolation_weights_2[j - 1, i] + @.. broadcast = false u_temp2 += cache.T[j] * extrapolation_weights_2[j - 1, i] end - @.. broadcast=false integrator.u=extrapolation_scalars[i + 1]*u_temp1 - @.. broadcast=false cache.utilde=extrapolation_scalars_2[i]*u_temp2 + @.. broadcast = false integrator.u = extrapolation_scalars[i + 1] * u_temp1 + @.. broadcast = false cache.utilde = extrapolation_scalars_2[i] * u_temp2 - calculate_residuals!(cache.res, integrator.u, cache.utilde, + calculate_residuals!( + cache.res, integrator.u, cache.utilde, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(cache.res, t) cache.n_curr = i # Update cache's n_curr for stepsize_controller_internal! stepsize_controller_internal!(integrator, alg) # Update cache.Q @@ -1948,9 +2200,13 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerCache # Accept current approximation u of order n_curr break elseif (n_curr < alg.min_order + 1) || - integrator.EEst <= - typeof(integrator.EEst)(prod(subdividing_sequence[(n_curr + 2):(win_max + 1)] .// - subdividing_sequence[1]^2)) + integrator.EEst <= + typeof(integrator.EEst)( + prod( + subdividing_sequence[(n_curr + 2):(win_max + 1)] .// + subdividing_sequence[1]^2 + ) + ) # Reject current approximation order but pass convergence monitor # Compute approximation of order (n_curr + 1) n_curr = n_curr + 1 @@ -1959,14 +2215,14 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerCache # Update cache.T j_int = sequence_factor * subdividing_sequence[n_curr + 1] dt_int = dt / j_int # Stepsize of the new internal discretisation - @.. broadcast=false u_temp2=uprev - @.. broadcast=false u_temp1=u_temp2+dt_int*fsalfirst # Euler starting step + @.. broadcast = false u_temp2 = uprev + @.. broadcast = false u_temp1 = u_temp2 + dt_int * fsalfirst # Euler starting step for j in 2:j_int f(k, cache.u_temp1, p, t + (j - 1) * dt_int) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false T[n_curr + 1]=u_temp2+2*dt_int*k - @.. broadcast=false u_temp2=u_temp1 - @.. broadcast=false u_temp1=T[n_curr + 1] + @.. broadcast = false T[n_curr + 1] = u_temp2 + 2 * dt_int * k + @.. broadcast = false u_temp2 = u_temp1 + @.. broadcast = false u_temp1 = T[n_curr + 1] end # Update u, integrator.EEst and cache.Q @@ -1976,19 +2232,21 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerCache u_temp1 .= false u_temp2 .= false for j in 1:(n_curr + 1) - @.. broadcast=false u_temp1+=cache.T[j] * - extrapolation_weights[j, (n_curr + 1)] + @.. broadcast = false u_temp1 += cache.T[j] * + extrapolation_weights[j, (n_curr + 1)] end for j in 2:(n_curr + 1) - @.. broadcast=false u_temp2+=cache.T[j] * - extrapolation_weights_2[j - 1, n_curr] + @.. broadcast = false u_temp2 += cache.T[j] * + extrapolation_weights_2[j - 1, n_curr] end - @.. broadcast=false integrator.u=extrapolation_scalars[n_curr + 1]*u_temp1 - @.. broadcast=false cache.utilde=extrapolation_scalars_2[n_curr]*u_temp2 + @.. broadcast = false integrator.u = extrapolation_scalars[n_curr + 1] * u_temp1 + @.. broadcast = false cache.utilde = extrapolation_scalars_2[n_curr] * u_temp2 - calculate_residuals!(cache.res, integrator.u, cache.utilde, + calculate_residuals!( + cache.res, integrator.u, cache.utilde, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(cache.res, t) stepsize_controller_internal!(integrator, alg) # Update cache.Q else @@ -2001,13 +2259,13 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerCache #integrator.u .= extrapolation_scalars[n_curr+1] * sum( broadcast(*, cache.T[1:(n_curr+1)], extrapolation_weights[1:(n_curr+1), (n_curr+1)]) ) # Approximation of extrapolation order n_curr u_temp1 .= false for j in 1:(n_curr + 1) - @.. broadcast=false u_temp1+=cache.T[j] * extrapolation_weights[j, (n_curr + 1)] + @.. broadcast = false u_temp1 += cache.T[j] * extrapolation_weights[j, (n_curr + 1)] end - @.. broadcast=false integrator.u=extrapolation_scalars[n_curr + 1]*u_temp1 + @.. broadcast = false integrator.u = extrapolation_scalars[n_curr + 1] * u_temp1 end f(cache.k, integrator.u, p, t + dt) # Update FSAL - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::ExtrapolationMidpointHairerWannerConstantCache) @@ -2019,11 +2277,13 @@ function initialize!(integrator, cache::ExtrapolationMidpointHairerWannerConstan # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerConstantCache, - repeat_step = false) +function perform_step!( + integrator, cache::ExtrapolationMidpointHairerWannerConstantCache, + repeat_step = false + ) # Unpack all information needed (; t, uprev, dt, f, p) = integrator alg = unwrap_alg(integrator, false) @@ -2048,7 +2308,7 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerConst # Set up the order window # alg.min_order + 1 ≦ n_curr ≦ alg.max_order - 1 is enforced by step_*_controller! if !(alg.min_order + 1 <= n_curr <= alg.max_order - 1) - error("Something went wrong while setting up the order window: $n_curr ∉ [$(alg.min_order+1),$(alg.max_order-1)]. + error("Something went wrong while setting up the order window: $n_curr ∉ [$(alg.min_order + 1),$(alg.max_order - 1)]. Please report this error ") end win_min = n_curr - 1 @@ -2081,7 +2341,7 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerConst # Romberg sequence --> 1, 2, 4, 8, ..., 2^(i) # 1 + 2 + 4 + ... + 2^(i-1) = 2^(i) - 1 let n_curr = n_curr, subdividing_sequence = subdividing_sequence, dt = dt, - uprev = uprev, integrator = integrator, T = T, p = p, t = t + uprev = uprev, integrator = integrator, T = T, p = p, t = t @threaded alg.threading for i in 1:2 startIndex = (i == 1) ? 0 : n_curr @@ -2093,8 +2353,8 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerConst u_temp3 = u_temp4 + dt_int_temp * integrator.fsalfirst # Euler starting step for j in 2:j_int_temp T[index + 1] = u_temp4 + - 2 * dt_int_temp * - f(u_temp3, p, t + (j - 1) * dt_int_temp) # Explicit Midpoint rule + 2 * dt_int_temp * + f(u_temp3, p, t + (j - 1) * dt_int_temp) # Explicit Midpoint rule u_temp4 = u_temp3 u_temp3 = T[index + 1] end @@ -2103,7 +2363,7 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerConst end else let n_curr = n_curr, subdividing_sequence = subdividing_sequence, dt = dt, - uprev = uprev, integrator = integrator, T = T, p = p, t = t + uprev = uprev, integrator = integrator, T = T, p = p, t = t @threaded alg.threading for i in 0:(n_curr ÷ 2) indices = i != n_curr - i ? (i, n_curr - i) : (-1, n_curr - i) @@ -2115,8 +2375,8 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerConst u_temp3 = u_temp4 + dt_int_temp * integrator.fsalfirst # Euler starting step for j in 2:j_int_temp T[index + 1] = u_temp4 + - 2 * dt_int_temp * - f(u_temp3, p, t + (j - 1) * dt_int_temp) # Explicit Midpoint rule + 2 * dt_int_temp * + f(u_temp3, p, t + (j - 1) * dt_int_temp) # Explicit Midpoint rule u_temp4 = u_temp3 u_temp3 = T[index + 1] end @@ -2131,14 +2391,24 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerConst # Compute all information relating to an extrapolation order ≦ win_min for i in (win_min - 1):win_min u = eltype(uprev).(extrapolation_scalars[i + 1]) * - sum(broadcast(*, T[1:(i + 1)], - eltype(uprev).(extrapolation_weights[1:(i + 1), (i + 1)]))) # Approximation of extrapolation order i + sum( + broadcast( + *, T[1:(i + 1)], + eltype(uprev).(extrapolation_weights[1:(i + 1), (i + 1)]) + ) + ) # Approximation of extrapolation order i utilde = eltype(uprev).(extrapolation_scalars_2[i]) * - sum(broadcast(*, T[2:(i + 1)], - eltype(uprev).(extrapolation_weights_2[1:i, i]))) # and its internal counterpart - res = calculate_residuals(u, utilde, integrator.opts.abstol, + sum( + broadcast( + *, T[2:(i + 1)], + eltype(uprev).(extrapolation_weights_2[1:i, i]) + ) + ) # and its internal counterpart + res = calculate_residuals( + u, utilde, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(res, t) cache.n_curr = i # Update cache's n_curr for stepsize_controller_internal! stepsize_controller_internal!(integrator, alg) # Update cache.Q @@ -2151,9 +2421,13 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerConst # Accept current approximation u of order n_curr break elseif (n_curr < alg.min_order + 1) || - integrator.EEst <= - typeof(integrator.EEst)(prod(subdividing_sequence[(n_curr + 2):(win_max + 1)] .// - subdividing_sequence[1]^2)) + integrator.EEst <= + typeof(integrator.EEst)( + prod( + subdividing_sequence[(n_curr + 2):(win_max + 1)] .// + subdividing_sequence[1]^2 + ) + ) # Reject current approximation order but pass convergence monitor # Always compute approximation of order (n_curr + 1) n_curr = n_curr + 1 @@ -2166,7 +2440,7 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerConst u_temp1 = u_temp2 + dt_int * integrator.fsalfirst # Euler starting step for j in 2:j_int T[n_curr + 1] = u_temp2 + - 2 * dt_int * f(u_temp1, p, t + (j - 1) * dt_int) + 2 * dt_int * f(u_temp1, p, t + (j - 1) * dt_int) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) u_temp2 = u_temp1 u_temp1 = T[n_curr + 1] @@ -2174,16 +2448,34 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerConst # Update u, integrator.EEst and cache.Q u = eltype(uprev).(extrapolation_scalars[n_curr + 1]) * - sum(broadcast(*, T[1:(n_curr + 1)], - eltype(uprev).(extrapolation_weights[1:(n_curr + 1), - (n_curr + 1)]))) # Approximation of extrapolation order n_curr + sum( + broadcast( + *, T[1:(n_curr + 1)], + eltype(uprev).( + extrapolation_weights[ + 1:(n_curr + 1), + (n_curr + 1), + ] + ) + ) + ) # Approximation of extrapolation order n_curr utilde = eltype(uprev).(extrapolation_scalars_2[n_curr]) * - sum(broadcast(*, T[2:(n_curr + 1)], - eltype(uprev).(extrapolation_weights_2[1:n_curr, - n_curr]))) # and its internal counterpart - res = calculate_residuals(u, utilde, integrator.opts.abstol, + sum( + broadcast( + *, T[2:(n_curr + 1)], + eltype(uprev).( + extrapolation_weights_2[ + 1:n_curr, + n_curr, + ] + ) + ) + ) # and its internal counterpart + res = calculate_residuals( + u, utilde, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(res, t) stepsize_controller_internal!(integrator, alg) # Update cache.Q else @@ -2193,9 +2485,17 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerConst end else u = eltype(uprev).(extrapolation_scalars[n_curr + 1]) * - sum(broadcast(*, T[1:(n_curr + 1)], - eltype(uprev).(extrapolation_weights[1:(n_curr + 1), - (n_curr + 1)]))) # Approximation of extrapolation order n_curr + sum( + broadcast( + *, T[1:(n_curr + 1)], + eltype(uprev).( + extrapolation_weights[ + 1:(n_curr + 1), + (n_curr + 1), + ] + ) + ) + ) # Approximation of extrapolation order n_curr end # Save the latest approximation and update FSAL @@ -2203,7 +2503,7 @@ function perform_step!(integrator, cache::ExtrapolationMidpointHairerWannerConst integrator.fsallast = f(u, p, t + dt) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::ImplicitHairerWannerExtrapolationConstantCache) @@ -2215,11 +2515,13 @@ function initialize!(integrator, cache::ImplicitHairerWannerExtrapolationConstan # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationConstantCache, - repeat_step = false) +function perform_step!( + integrator, cache::ImplicitHairerWannerExtrapolationConstantCache, + repeat_step = false + ) # Unpack all information needed (; t, uprev, dt, f, p) = integrator alg = unwrap_alg(integrator, true) @@ -2243,7 +2545,7 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationConst # Set up the order window # alg.min_order + 1 ≦ n_curr ≦ alg.max_order - 1 is enforced by step_*_controller! if !(alg.min_order + 1 <= n_curr <= alg.max_order - 1) - error("Something went wrong while setting up the order window: $n_curr ∉ [$(alg.min_order+1),$(alg.max_order-1)]. + error("Something went wrong while setting up the order window: $n_curr ∉ [$(alg.min_order + 1),$(alg.max_order - 1)]. Please report this error ") end win_min = n_curr - 1 @@ -2264,15 +2566,18 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationConst integrator.stats.nw += 1 u_temp2 = uprev u_temp1 = u_temp2 + - _reshape(W \ -_vec(dt_int * integrator.fsalfirst), axes(uprev)) # Euler starting step + _reshape(W \ -_vec(dt_int * integrator.fsalfirst), axes(uprev)) # Euler starting step diff1 = u_temp1 - u_temp2 for j in 2:(j_int + 1) T[i + 1] = 2 * u_temp1 - u_temp2 + - 2 * _reshape( + 2 * _reshape( W \ - -_vec(dt_int * f(u_temp1, p, t + (j - 1) * dt_int) - - (u_temp1 - u_temp2)), - axes(uprev)) + -_vec( + dt_int * f(u_temp1, p, t + (j - 1) * dt_int) - + (u_temp1 - u_temp2) + ), + axes(uprev) + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if (j == j_int + 1) T[i + 1] = 0.5(T[i + 1] + u_temp2) @@ -2282,8 +2587,10 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationConst if (i <= 1) # Deuflhard Stability check for initial two sequences diff2 = u_temp1 - u_temp2 - if (integrator.opts.internalnorm(diff1, t) < - integrator.opts.internalnorm(0.5 * (diff2 - diff1), t)) + if ( + integrator.opts.internalnorm(diff1, t) < + integrator.opts.internalnorm(0.5 * (diff2 - diff1), t) + ) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return @@ -2300,7 +2607,7 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationConst # Romberg sequence --> 1, 2, 4, 8, ..., 2^(i) # 1 + 2 + 4 + ... + 2^(i-1) = 2^(i) - 1 let n_curr = n_curr, subdividing_sequence = subdividing_sequence, uprev = uprev, - dt = dt, u_temp2 = u_temp2, u_temp2 = u_temp2, p = p, t = t, T = T + dt = dt, u_temp2 = u_temp2, u_temp2 = u_temp2, p = p, t = t, T = T @threaded alg.threading for i in 1:2 startIndex = (i == 1) ? 0 : n_curr @@ -2313,17 +2620,24 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationConst integrator.stats.nw += 1 u_temp4 = uprev u_temp3 = u_temp4 + - _reshape(W \ -_vec(dt_int * integrator.fsalfirst), - axes(uprev)) # Euler starting step + _reshape( + W \ -_vec(dt_int * integrator.fsalfirst), + axes(uprev) + ) # Euler starting step diff1 = u_temp3 - u_temp4 for j in 2:(j_int + 1) T[index + 1] = 2 * u_temp3 - u_temp4 + - 2 * _reshape( + 2 * _reshape( W \ - -_vec(dt_int * f(u_temp3, p, - t + (j - 1) * dt_int) - - (u_temp3 - u_temp4)), - axes(uprev)) + -_vec( + dt_int * f( + u_temp3, p, + t + (j - 1) * dt_int + ) - + (u_temp3 - u_temp4) + ), + axes(uprev) + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if (j == j_int + 1) T[index + 1] = 0.5(T[index + 1] + u_temp4) @@ -2333,8 +2647,10 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationConst if (index <= 1) # Deuflhard Stability check for initial two sequences diff2 = u_temp3 - u_temp4 - if (integrator.opts.internalnorm(diff1, t) < - integrator.opts.internalnorm(0.5 * (diff2 - diff1), t)) + if ( + integrator.opts.internalnorm(diff1, t) < + integrator.opts.internalnorm(0.5 * (diff2 - diff1), t) + ) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return @@ -2348,7 +2664,7 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationConst end else let n_curr = n_curr, subdividing_sequence = subdividing_sequence, uprev = uprev, - dt = dt, integrator = integrator, p = p, t = t, T = T + dt = dt, integrator = integrator, p = p, t = t, T = T @threaded alg.threading for i in 0:(n_curr ÷ 2) indices = i != n_curr - i ? (i, n_curr - i) : (-1, n_curr - i) @@ -2360,17 +2676,24 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationConst integrator.stats.nw += 1 u_temp4 = uprev u_temp3 = u_temp4 + - _reshape(W \ -_vec(dt_int * integrator.fsalfirst), - axes(uprev)) # Euler starting step + _reshape( + W \ -_vec(dt_int * integrator.fsalfirst), + axes(uprev) + ) # Euler starting step diff1 = u_temp3 - u_temp4 for j in 2:(j_int + 1) T[index + 1] = 2 * u_temp3 - u_temp4 + - 2 * _reshape( + 2 * _reshape( W \ - -_vec(dt_int * f(u_temp3, p, - t + (j - 1) * dt_int) - - (u_temp3 - u_temp4)), - axes(uprev)) + -_vec( + dt_int * f( + u_temp3, p, + t + (j - 1) * dt_int + ) - + (u_temp3 - u_temp4) + ), + axes(uprev) + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if (j == j_int + 1) T[index + 1] = 0.5(T[index + 1] + u_temp4) @@ -2380,8 +2703,10 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationConst if (index <= 1) # Deuflhard Stability check for initial two sequences diff2 = u_temp3 - u_temp4 - if (integrator.opts.internalnorm(diff1, t) < - integrator.opts.internalnorm(0.5 * (diff2 - diff1), t)) + if ( + integrator.opts.internalnorm(diff1, t) < + integrator.opts.internalnorm(0.5 * (diff2 - diff1), t) + ) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return @@ -2404,14 +2729,24 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationConst # Compute all information relating to an extrapolation order ≦ win_min for i in (win_min - 1):win_min u = eltype(uprev).(extrapolation_scalars[i + 1]) * - sum(broadcast(*, T[1:(i + 1)], - eltype(uprev).(extrapolation_weights[1:(i + 1), (i + 1)]))) # Approximation of extrapolation order i + sum( + broadcast( + *, T[1:(i + 1)], + eltype(uprev).(extrapolation_weights[1:(i + 1), (i + 1)]) + ) + ) # Approximation of extrapolation order i utilde = eltype(uprev).(extrapolation_scalars_2[i]) * - sum(broadcast(*, T[2:(i + 1)], - eltype(uprev).(extrapolation_weights_2[1:i, i]))) # and its internal counterpart - res = calculate_residuals(u, utilde, integrator.opts.abstol, + sum( + broadcast( + *, T[2:(i + 1)], + eltype(uprev).(extrapolation_weights_2[1:i, i]) + ) + ) # and its internal counterpart + res = calculate_residuals( + u, utilde, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(res, t) cache.n_curr = i # Update cache's n_curr for stepsize_controller_internal! stepsize_controller_internal!(integrator, alg) # Update cache.Q @@ -2424,9 +2759,13 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationConst # Accept current approximation u of order n_curr break elseif (n_curr < alg.min_order + 1) || - integrator.EEst <= - typeof(integrator.EEst)(prod(subdividing_sequence[(n_curr + 2):(win_max + 1)] .// - subdividing_sequence[1]^2)) + integrator.EEst <= + typeof(integrator.EEst)( + prod( + subdividing_sequence[(n_curr + 2):(win_max + 1)] .// + subdividing_sequence[1]^2 + ) + ) # Reject current approximation order but pass convergence monitor # Always compute approximation of order (n_curr + 1) n_curr = n_curr + 1 @@ -2439,15 +2778,18 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationConst integrator.stats.nw += 1 u_temp2 = uprev u_temp1 = u_temp2 + - _reshape(W \ -_vec(dt_int * integrator.fsalfirst), axes(uprev)) # Euler starting step + _reshape(W \ -_vec(dt_int * integrator.fsalfirst), axes(uprev)) # Euler starting step for j in 2:(j_int + 1) T[n_curr + 1] = 2 * u_temp1 - u_temp2 + - 2 * _reshape( + 2 * _reshape( W \ - -_vec(dt_int * - f(u_temp1, p, t + (j - 1) * dt_int) - - (u_temp1 - u_temp2)), - axes(uprev)) + -_vec( + dt_int * + f(u_temp1, p, t + (j - 1) * dt_int) - + (u_temp1 - u_temp2) + ), + axes(uprev) + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if (j == j_int + 1) T[n_curr + 1] = 0.5(T[n_curr + 1] + u_temp2) @@ -2458,16 +2800,34 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationConst # Update u, integrator.EEst and cache.Q u = eltype(uprev).(extrapolation_scalars[n_curr + 1]) * - sum(broadcast(*, T[1:(n_curr + 1)], - eltype(uprev).(extrapolation_weights[1:(n_curr + 1), - (n_curr + 1)]))) # Approximation of extrapolation order n_curr + sum( + broadcast( + *, T[1:(n_curr + 1)], + eltype(uprev).( + extrapolation_weights[ + 1:(n_curr + 1), + (n_curr + 1), + ] + ) + ) + ) # Approximation of extrapolation order n_curr utilde = eltype(uprev).(extrapolation_scalars_2[n_curr]) * - sum(broadcast(*, T[2:(n_curr + 1)], - eltype(uprev).(extrapolation_weights_2[1:n_curr, - n_curr]))) # and its internal counterpart - res = calculate_residuals(u, utilde, integrator.opts.abstol, + sum( + broadcast( + *, T[2:(n_curr + 1)], + eltype(uprev).( + extrapolation_weights_2[ + 1:n_curr, + n_curr, + ] + ) + ) + ) # and its internal counterpart + res = calculate_residuals( + u, utilde, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(res, t) stepsize_controller_internal!(integrator, alg) # Update cache.Q else @@ -2477,16 +2837,24 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationConst end else u = eltype(uprev).(extrapolation_scalars[n_curr + 1]) * - sum(broadcast(*, T[1:(n_curr + 1)], - eltype(uprev).(extrapolation_weights[1:(n_curr + 1), - (n_curr + 1)]))) # Approximation of extrapolation order n_curr + sum( + broadcast( + *, T[1:(n_curr + 1)], + eltype(uprev).( + extrapolation_weights[ + 1:(n_curr + 1), + (n_curr + 1), + ] + ) + ) + ) # Approximation of extrapolation order n_curr end # Save the latest approximation and update FSAL integrator.u = u integrator.fsallast = f(u, p, t + dt) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end function initialize!(integrator, cache::ImplicitHairerWannerExtrapolationCache) @@ -2497,11 +2865,13 @@ function initialize!(integrator, cache::ImplicitHairerWannerExtrapolationCache) resize!(integrator.k, integrator.kshortsize) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation + return integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation end -function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationCache, - repeat_step = false) +function perform_step!( + integrator, cache::ImplicitHairerWannerExtrapolationCache, + repeat_step = false + ) # Unpack all information needed (; t, uprev, dt, f, p) = integrator alg = unwrap_alg(integrator, true) @@ -2524,7 +2894,7 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationCache # Set up the order window # alg.min_order + 1 ≦ n_curr ≦ alg.max_order - 1 is enforced by step_*_controller! if !(alg.min_order + 1 <= n_curr <= alg.max_order - 1) - error("Something went wrong while setting up the order window: $n_curr ∉ [$(alg.min_order+1),$(alg.max_order-1)]. + error("Something went wrong while setting up the order window: $n_curr ∉ [$(alg.min_order + 1),$(alg.max_order - 1)]. Please report this error ") end win_min = n_curr - 1 @@ -2543,57 +2913,67 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationCache dt_int = dt / j_int # Stepsize of the ith internal discretisation jacobian2W!(W[1], integrator.f.mass_matrix, dt_int, J) integrator.stats.nw += 1 - @.. broadcast=false u_temp2=uprev - @.. broadcast=false linsolve_tmps[1]=fsalfirst + @.. broadcast = false u_temp2 = uprev + @.. broadcast = false linsolve_tmps[1] = fsalfirst linsolve = cache.linsolve[1] if !repeat_step - linres = dolinsolve(integrator, linsolve; A = W[1], - b = _vec(linsolve_tmps[1]), linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; A = W[1], + b = _vec(linsolve_tmps[1]), linu = _vec(k) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, - b = _vec(linsolve_tmps[1]), linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; A = nothing, + b = _vec(linsolve_tmps[1]), linu = _vec(k) + ) end cache.linsolve[1] = linres.cache integrator.stats.nsolve += 1 - @.. broadcast=false u_temp1=u_temp2-k # Euler starting step - @.. broadcast=false diff1[1]=u_temp1-u_temp2 + @.. broadcast = false u_temp1 = u_temp2 - k # Euler starting step + @.. broadcast = false diff1[1] = u_temp1 - u_temp2 for j in 2:(j_int + 1) f(k, cache.u_temp1, p, t + (j - 1) * dt_int) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false linsolve_tmps[1]=k-(u_temp1-u_temp2)/dt_int + @.. broadcast = false linsolve_tmps[1] = k - (u_temp1 - u_temp2) / dt_int linsolve = cache.linsolve[1] if !repeat_step && j == 1 - linres = dolinsolve(integrator, linsolve; A = W[1], - b = _vec(linsolve_tmps[1]), linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; A = W[1], + b = _vec(linsolve_tmps[1]), linu = _vec(k) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, - b = _vec(linsolve_tmps[1]), linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; A = nothing, + b = _vec(linsolve_tmps[1]), linu = _vec(k) + ) end cache.linsolve[1] = linres.cache integrator.stats.nsolve += 1 - @.. broadcast=false T[i + 1]=2*u_temp1-u_temp2-2*k # Explicit Midpoint rule + @.. broadcast = false T[i + 1] = 2 * u_temp1 - u_temp2 - 2 * k # Explicit Midpoint rule if (j == j_int + 1) - @.. broadcast=false T[i + 1]=0.5(T[i + 1]+u_temp2) + @.. broadcast = false T[i + 1] = 0.5(T[i + 1] + u_temp2) end - @.. broadcast=false u_temp2=u_temp1 - @.. broadcast=false u_temp1=T[i + 1] + @.. broadcast = false u_temp2 = u_temp1 + @.. broadcast = false u_temp1 = T[i + 1] if (i <= 1) # Deuflhard Stability check for initial two sequences - @.. broadcast=false diff2[1]=u_temp1-u_temp2 - @.. broadcast=false diff2[1]=0.5*(diff2[1]-diff1[1]) - if (integrator.opts.internalnorm(diff1[1], t) < - integrator.opts.internalnorm(diff2[1], t)) + @.. broadcast = false diff2[1] = u_temp1 - u_temp2 + @.. broadcast = false diff2[1] = 0.5 * (diff2[1] - diff1[1]) + if ( + integrator.opts.internalnorm(diff1[1], t) < + integrator.opts.internalnorm(diff2[1], t) + ) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return end end - @.. broadcast=false diff1[1]=u_temp1-u_temp2 + @.. broadcast = false diff1[1] = u_temp1 - u_temp2 end end else @@ -2604,8 +2984,8 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationCache # Romberg sequence --> 1, 2, 4, 8, ..., 2^(i) # 1 + 2 + 4 + ... + 2^(i-1) = 2^(i) - 1 let n_curr = n_curr, subdividing_sequence = subdividing_sequence, uprev = uprev, - dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, - t = t, T = T + dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, + t = t, T = T @threaded alg.threading for i in 1:2 startIndex = (i == 1) ? 0 : n_curr @@ -2614,79 +2994,103 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationCache for index in startIndex:endIndex j_int_temp = 4 * subdividing_sequence[index + 1] dt_int_temp = dt / j_int_temp # Stepsize of the ith internal discretisation - jacobian2W!(W[Threads.threadid()], integrator.f.mass_matrix, - dt_int_temp, J) - @.. broadcast=false u_temp4[Threads.threadid()]=uprev - @.. broadcast=false linsolve_tmps[Threads.threadid()]=fsalfirst + jacobian2W!( + W[Threads.threadid()], integrator.f.mass_matrix, + dt_int_temp, J + ) + @.. broadcast = false u_temp4[Threads.threadid()] = uprev + @.. broadcast = false linsolve_tmps[Threads.threadid()] = fsalfirst linsolve = cache.linsolve[Threads.threadid()] if !repeat_step - linres = dolinsolve(integrator, linsolve; + linres = dolinsolve( + integrator, linsolve; A = W[Threads.threadid()], b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, + linres = dolinsolve( + integrator, linsolve; A = nothing, b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) end cache.linsolve[Threads.threadid()] = linres.cache - @.. broadcast=false u_temp3[Threads.threadid()]=u_temp4[Threads.threadid()]- - k_tmps[Threads.threadid()] # Euler starting step - @.. broadcast=false diff1[Threads.threadid()]=u_temp3[Threads.threadid()]- - u_temp4[Threads.threadid()] + @.. broadcast = false u_temp3[Threads.threadid()] = u_temp4[Threads.threadid()] - + k_tmps[Threads.threadid()] # Euler starting step + @.. broadcast = false diff1[Threads.threadid()] = u_temp3[Threads.threadid()] - + u_temp4[Threads.threadid()] for j in 2:(j_int_temp + 1) - f(k_tmps[Threads.threadid()], + f( + k_tmps[Threads.threadid()], cache.u_temp3[Threads.threadid()], - p, t + (j - 1) * dt_int_temp) - @.. broadcast=false linsolve_tmps[Threads.threadid()]=k_tmps[Threads.threadid()]- - (u_temp3[Threads.threadid()]- - u_temp4[Threads.threadid()])/ - dt_int_temp + p, t + (j - 1) * dt_int_temp + ) + @.. broadcast = false linsolve_tmps[Threads.threadid()] = k_tmps[Threads.threadid()] - + ( + u_temp3[Threads.threadid()] - + u_temp4[Threads.threadid()] + ) / + dt_int_temp linsolve = cache.linsolve[Threads.threadid()] if !repeat_step && j == 1 - linres = dolinsolve(integrator, linsolve; + linres = dolinsolve( + integrator, linsolve; A = W[Threads.threadid()], b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, + linres = dolinsolve( + integrator, linsolve; A = nothing, b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) end cache.linsolve[Threads.threadid()] = linres.cache - @.. broadcast=false T[index + 1]=2* - u_temp3[Threads.threadid()]- - u_temp4[Threads.threadid()]- - 2*k_tmps[Threads.threadid()] # Explicit Midpoint rule + @.. broadcast = false T[index + 1] = 2 * + u_temp3[Threads.threadid()] - + u_temp4[Threads.threadid()] - + 2 * k_tmps[Threads.threadid()] # Explicit Midpoint rule if (j == j_int_temp + 1) - @.. broadcast=false T[index + 1]=0.5(T[index + 1]+ - u_temp4[Threads.threadid()]) + @.. broadcast = false T[index + 1] = 0.5( + T[index + 1] + + u_temp4[Threads.threadid()] + ) end - @.. broadcast=false u_temp4[Threads.threadid()]=u_temp3[Threads.threadid()] - @.. broadcast=false u_temp3[Threads.threadid()]=T[index + 1] + @.. broadcast = false u_temp4[Threads.threadid()] = u_temp3[Threads.threadid()] + @.. broadcast = false u_temp3[Threads.threadid()] = T[index + 1] if (index <= 1) # Deuflhard Stability check for initial two sequences - @.. broadcast=false diff2[Threads.threadid()]=u_temp3[Threads.threadid()]- - u_temp4[Threads.threadid()] - @.. broadcast=false diff2[Threads.threadid()]=0.5* - (diff2[Threads.threadid()]- - diff1[Threads.threadid()]) - if (integrator.opts.internalnorm(diff1[Threads.threadid()], - t) < - integrator.opts.internalnorm(diff2[Threads.threadid()], - t)) + @.. broadcast = false diff2[Threads.threadid()] = u_temp3[Threads.threadid()] - + u_temp4[Threads.threadid()] + @.. broadcast = false diff2[Threads.threadid()] = 0.5 * + ( + diff2[Threads.threadid()] - + diff1[Threads.threadid()] + ) + if ( + integrator.opts.internalnorm( + diff1[Threads.threadid()], + t + ) < + integrator.opts.internalnorm( + diff2[Threads.threadid()], + t + ) + ) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return end end - @.. broadcast=false diff1[Threads.threadid()]=u_temp3[Threads.threadid()]- - u_temp4[Threads.threadid()] + @.. broadcast = false diff1[Threads.threadid()] = u_temp3[Threads.threadid()] - + u_temp4[Threads.threadid()] end end integrator.force_stepfail ? break : continue @@ -2694,8 +3098,8 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationCache end else let n_curr = n_curr, subdividing_sequence = subdividing_sequence, uprev = uprev, - dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, - t = t, T = T + dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, + t = t, T = T @threaded alg.threading for i in 0:(n_curr ÷ 2) tid = Threads.threadid() @@ -2707,61 +3111,73 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationCache j_int_temp = 4 * subdividing_sequence[index + 1] dt_int_temp = dt / j_int_temp # Stepsize of the ith internal discretisation jacobian2W!(W[tid], integrator.f.mass_matrix, dt_int_temp, J) - @.. broadcast=false u_temp4[tid]=uprev - @.. broadcast=false linsolvetmp=fsalfirst + @.. broadcast = false u_temp4[tid] = uprev + @.. broadcast = false linsolvetmp = fsalfirst linsolve = cache.linsolve[tid] if !repeat_step - linres = dolinsolve(integrator, linsolve; A = W[tid], - b = _vec(linsolvetmp), linu = _vec(ktmp)) + linres = dolinsolve( + integrator, linsolve; A = W[tid], + b = _vec(linsolvetmp), linu = _vec(ktmp) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, - b = _vec(linsolvetmp), linu = _vec(ktmp)) + linres = dolinsolve( + integrator, linsolve; A = nothing, + b = _vec(linsolvetmp), linu = _vec(ktmp) + ) end cache.linsolve[tid] = linres.cache - @.. broadcast=false u_temp3[tid]=u_temp4[tid]-ktmp # Euler starting step - @.. broadcast=false diff1[tid]=u_temp3[tid]-u_temp4[tid] + @.. broadcast = false u_temp3[tid] = u_temp4[tid] - ktmp # Euler starting step + @.. broadcast = false diff1[tid] = u_temp3[tid] - u_temp4[tid] for j in 2:(j_int_temp + 1) f(ktmp, cache.u_temp3[tid], p, t + (j - 1) * dt_int_temp) - @.. broadcast=false linsolvetmp=ktmp- - (u_temp3[tid]-u_temp4[tid])/ - dt_int_temp + @.. broadcast = false linsolvetmp = ktmp - + (u_temp3[tid] - u_temp4[tid]) / + dt_int_temp linsolve = cache.linsolve[tid] if (!repeat_step && j == 1) - linres = dolinsolve(integrator, linsolve; A = W[tid], + linres = dolinsolve( + integrator, linsolve; A = W[tid], b = _vec(linsolvetmp), - linu = _vec(ktmp)) + linu = _vec(ktmp) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, + linres = dolinsolve( + integrator, linsolve; A = nothing, b = _vec(linsolvetmp), - linu = _vec(ktmp)) + linu = _vec(ktmp) + ) end cache.linsolve[tid] = linres.cache - @.. broadcast=false T[index + 1]=2*u_temp3[tid]- - u_temp4[tid]-2*ktmp # Explicit Midpoint rule + @.. broadcast = false T[index + 1] = 2 * u_temp3[tid] - + u_temp4[tid] - 2 * ktmp # Explicit Midpoint rule if (j == j_int_temp + 1) - @.. broadcast=false T[index + 1]=0.5(T[index + 1]+ - u_temp4[tid]) + @.. broadcast = false T[index + 1] = 0.5( + T[index + 1] + + u_temp4[tid] + ) end - @.. broadcast=false u_temp4[tid]=u_temp3[tid] - @.. broadcast=false u_temp3[tid]=T[index + 1] + @.. broadcast = false u_temp4[tid] = u_temp3[tid] + @.. broadcast = false u_temp3[tid] = T[index + 1] if (index <= 1) # Deuflhard Stability check for initial two sequences - @.. broadcast=false diff2[tid]=u_temp3[tid]-u_temp4[tid] - @.. broadcast=false diff2[tid]=0.5* - (diff2[tid]-diff1[tid]) - if (integrator.opts.internalnorm(diff1[tid], t) < - integrator.opts.internalnorm(diff2[tid], t)) + @.. broadcast = false diff2[tid] = u_temp3[tid] - u_temp4[tid] + @.. broadcast = false diff2[tid] = 0.5 * + (diff2[tid] - diff1[tid]) + if ( + integrator.opts.internalnorm(diff1[tid], t) < + integrator.opts.internalnorm(diff2[tid], t) + ) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return end end - @.. broadcast=false diff1[tid]=u_temp3[tid]-u_temp4[tid] + @.. broadcast = false diff1[tid] = u_temp3[tid] - u_temp4[tid] end end integrator.force_stepfail ? break : continue @@ -2784,17 +3200,19 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationCache u_temp1 .= false u_temp2 .= false for j in 1:(i + 1) - @.. broadcast=false u_temp1+=cache.T[j] * extrapolation_weights[j, (i + 1)] + @.. broadcast = false u_temp1 += cache.T[j] * extrapolation_weights[j, (i + 1)] end for j in 2:(i + 1) - @.. broadcast=false u_temp2+=cache.T[j] * extrapolation_weights_2[j - 1, i] + @.. broadcast = false u_temp2 += cache.T[j] * extrapolation_weights_2[j - 1, i] end - @.. broadcast=false integrator.u=extrapolation_scalars[i + 1]*u_temp1 - @.. broadcast=false cache.utilde=extrapolation_scalars_2[i]*u_temp2 + @.. broadcast = false integrator.u = extrapolation_scalars[i + 1] * u_temp1 + @.. broadcast = false cache.utilde = extrapolation_scalars_2[i] * u_temp2 - calculate_residuals!(cache.res, integrator.u, cache.utilde, + calculate_residuals!( + cache.res, integrator.u, cache.utilde, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(cache.res, t) cache.n_curr = i # Update cache's n_curr for stepsize_controller_internal! stepsize_controller_internal!(integrator, alg) # Update cache.Q @@ -2822,45 +3240,53 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationCache dt_int = dt / j_int # Stepsize of the new internal discretisation jacobian2W!(W[1], integrator.f.mass_matrix, dt_int, J) integrator.stats.nw += 1 - @.. broadcast=false u_temp2=uprev - @.. broadcast=false linsolve_tmps[1]=fsalfirst + @.. broadcast = false u_temp2 = uprev + @.. broadcast = false linsolve_tmps[1] = fsalfirst linsolve = cache.linsolve[1] if !repeat_step - linres = dolinsolve(integrator, linsolve; A = W[1], - b = _vec(linsolve_tmps[1]), linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; A = W[1], + b = _vec(linsolve_tmps[1]), linu = _vec(k) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, - b = _vec(linsolve_tmps[1]), linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; A = nothing, + b = _vec(linsolve_tmps[1]), linu = _vec(k) + ) end cache.linsolve[1] = linres.cache integrator.stats.nsolve += 1 - @.. broadcast=false u_temp1=u_temp2-k # Euler starting step + @.. broadcast = false u_temp1 = u_temp2 - k # Euler starting step for j in 2:(j_int + 1) f(k, cache.u_temp1, p, t + (j - 1) * dt_int) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false linsolve_tmps[1]=k-(u_temp1-u_temp2)/dt_int + @.. broadcast = false linsolve_tmps[1] = k - (u_temp1 - u_temp2) / dt_int linsolve = cache.linsolve[1] if !repeat_step && j == 1 - linres = dolinsolve(integrator, linsolve; A = W[1], - b = _vec(linsolve_tmps[1]), linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; A = W[1], + b = _vec(linsolve_tmps[1]), linu = _vec(k) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, - b = _vec(linsolve_tmps[1]), linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; A = nothing, + b = _vec(linsolve_tmps[1]), linu = _vec(k) + ) end cache.linsolve[1] = linres.cache integrator.stats.nsolve += 1 - @.. broadcast=false T[n_curr + 1]=2*u_temp1-u_temp2-2*k # Explicit Midpoint rule + @.. broadcast = false T[n_curr + 1] = 2 * u_temp1 - u_temp2 - 2 * k # Explicit Midpoint rule if (j == j_int + 1) - @.. broadcast=false T[n_curr + 1]=0.5(T[n_curr + 1]+u_temp2) + @.. broadcast = false T[n_curr + 1] = 0.5(T[n_curr + 1] + u_temp2) end - @.. broadcast=false u_temp2=u_temp1 - @.. broadcast=false u_temp1=T[n_curr + 1] + @.. broadcast = false u_temp2 = u_temp1 + @.. broadcast = false u_temp1 = T[n_curr + 1] end # Update u, integrator.EEst and cache.Q @@ -2870,19 +3296,21 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationCache u_temp1 .= false u_temp2 .= false for j in 1:(n_curr + 1) - @.. broadcast=false u_temp1+=cache.T[j] * - extrapolation_weights[j, (n_curr + 1)] + @.. broadcast = false u_temp1 += cache.T[j] * + extrapolation_weights[j, (n_curr + 1)] end for j in 2:(n_curr + 1) - @.. broadcast=false u_temp2+=cache.T[j] * - extrapolation_weights_2[j - 1, n_curr] + @.. broadcast = false u_temp2 += cache.T[j] * + extrapolation_weights_2[j - 1, n_curr] end - @.. broadcast=false integrator.u=extrapolation_scalars[n_curr + 1]*u_temp1 - @.. broadcast=false cache.utilde=extrapolation_scalars_2[n_curr]*u_temp2 + @.. broadcast = false integrator.u = extrapolation_scalars[n_curr + 1] * u_temp1 + @.. broadcast = false cache.utilde = extrapolation_scalars_2[n_curr] * u_temp2 - calculate_residuals!(cache.res, integrator.u, cache.utilde, + calculate_residuals!( + cache.res, integrator.u, cache.utilde, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(cache.res, t) stepsize_controller_internal!(integrator, alg) # Update cache.Q else @@ -2895,13 +3323,13 @@ function perform_step!(integrator, cache::ImplicitHairerWannerExtrapolationCache #integrator.u .= extrapolation_scalars[n_curr+1] * sum( broadcast(*, cache.T[1:(n_curr+1)], extrapolation_weights[1:(n_curr+1), (n_curr+1)]) ) # Approximation of extrapolation order n_curr u_temp1 .= false for j in 1:(n_curr + 1) - @.. broadcast=false u_temp1+=cache.T[j] * extrapolation_weights[j, (n_curr + 1)] + @.. broadcast = false u_temp1 += cache.T[j] * extrapolation_weights[j, (n_curr + 1)] end - @.. broadcast=false integrator.u=extrapolation_scalars[n_curr + 1]*u_temp1 + @.. broadcast = false integrator.u = extrapolation_scalars[n_curr + 1] * u_temp1 end f(cache.k, integrator.u, p, t + dt) # Update FSAL - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::ImplicitEulerBarycentricExtrapolationConstantCache) @@ -2913,12 +3341,14 @@ function initialize!(integrator, cache::ImplicitEulerBarycentricExtrapolationCon # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -function perform_step!(integrator, +function perform_step!( + integrator, cache::ImplicitEulerBarycentricExtrapolationConstantCache, - repeat_step = false) + repeat_step = false + ) # Unpack all information needed (; t, uprev, dt, f, p) = integrator alg = unwrap_alg(integrator, true) @@ -2943,7 +3373,7 @@ function perform_step!(integrator, # Set up the order window # alg.min_order + 1 ≦ n_curr ≦ alg.max_order - 1 is enforced by step_*_controller! if !(alg.min_order + 1 <= n_curr <= alg.max_order - 1) - error("Something went wrong while setting up the order window: $n_curr ∉ [$(alg.min_order+1),$(alg.max_order-1)]. + error("Something went wrong while setting up the order window: $n_curr ∉ [$(alg.min_order + 1),$(alg.max_order - 1)]. Please report this error ") end win_min = n_curr - 1 @@ -2964,13 +3394,14 @@ function perform_step!(integrator, integrator.stats.nw += 1 u_temp2 = uprev u_temp1 = u_temp2 + - _reshape(W \ -_vec(dt_int * integrator.fsalfirst), axes(uprev)) # Euler starting step + _reshape(W \ -_vec(dt_int * integrator.fsalfirst), axes(uprev)) # Euler starting step diff1 = u_temp1 - u_temp2 for j in 2:(j_int + 1) T[i + 1] = u_temp1 + - _reshape( + _reshape( W \ -_vec(dt_int * f(u_temp1, p, t + (j - 1) * dt_int)), - axes(uprev)) + axes(uprev) + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if (j == j_int + 1) T[i + 1] = 0.25(T[i + 1] + 2 * u_temp1 + u_temp2) @@ -2980,8 +3411,10 @@ function perform_step!(integrator, if (i <= 1) # Deuflhard Stability check for initial two sequences diff2 = u_temp1 - u_temp2 - if (integrator.opts.internalnorm(diff1, t) < - integrator.opts.internalnorm(0.5 * (diff2 - diff1), t)) + if ( + integrator.opts.internalnorm(diff1, t) < + integrator.opts.internalnorm(0.5 * (diff2 - diff1), t) + ) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return @@ -2998,7 +3431,7 @@ function perform_step!(integrator, # Romberg sequence --> 1, 2, 4, 8, ..., 2^(i) # 1 + 2 + 4 + ... + 2^(i-1) = 2^(i) - 1 let n_curr = n_curr, subdividing_sequence = subdividing_sequence, uprev = uprev, - dt = dt, u_temp2 = u_temp2, u_temp2 = u_temp2, p = p, t = t, T = T + dt = dt, u_temp2 = u_temp2, u_temp2 = u_temp2, p = p, t = t, T = T @threaded alg.threading for i in 1:2 startIndex = (i == 1) ? 0 : n_curr @@ -3011,15 +3444,22 @@ function perform_step!(integrator, integrator.stats.nw += 1 u_temp4 = uprev u_temp3 = u_temp4 + - _reshape(W \ -_vec(dt_int * integrator.fsalfirst), - axes(uprev)) # Euler starting step + _reshape( + W \ -_vec(dt_int * integrator.fsalfirst), + axes(uprev) + ) # Euler starting step diff1 = u_temp3 - u_temp4 for j in 2:(j_int + 1) T[index + 1] = u_temp3 + _reshape( W \ - -_vec(dt_int * f(u_temp3, p, - t + (j - 1) * dt_int)), - axes(uprev)) + -_vec( + dt_int * f( + u_temp3, p, + t + (j - 1) * dt_int + ) + ), + axes(uprev) + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if (j == j_int + 1) T[index + 1] = 0.25(T[index + 1] + 2 * u_temp3 + u_temp4) @@ -3029,8 +3469,10 @@ function perform_step!(integrator, if (index <= 1) # Deuflhard Stability check for initial two sequences diff2 = u_temp3 - u_temp4 - if (integrator.opts.internalnorm(diff1, t) < - integrator.opts.internalnorm(0.5 * (diff2 - diff1), t)) + if ( + integrator.opts.internalnorm(diff1, t) < + integrator.opts.internalnorm(0.5 * (diff2 - diff1), t) + ) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return @@ -3044,7 +3486,7 @@ function perform_step!(integrator, end else let n_curr = n_curr, subdividing_sequence = subdividing_sequence, uprev = uprev, - dt = dt, integrator = integrator, p = p, t = t, T = T + dt = dt, integrator = integrator, p = p, t = t, T = T @threaded alg.threading for i in 0:(n_curr ÷ 2) indices = i != n_curr - i ? (i, n_curr - i) : (-1, n_curr - i) @@ -3056,15 +3498,22 @@ function perform_step!(integrator, integrator.stats.nw += 1 u_temp4 = uprev u_temp3 = u_temp4 + - _reshape(W \ -_vec(dt_int * integrator.fsalfirst), - axes(uprev)) # Euler starting step + _reshape( + W \ -_vec(dt_int * integrator.fsalfirst), + axes(uprev) + ) # Euler starting step diff1 = u_temp3 - u_temp4 for j in 2:(j_int + 1) T[index + 1] = u_temp3 + _reshape( W \ - -_vec(dt_int * f(u_temp3, p, - t + (j - 1) * dt_int)), - axes(uprev)) + -_vec( + dt_int * f( + u_temp3, p, + t + (j - 1) * dt_int + ) + ), + axes(uprev) + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if (j == j_int + 1) T[index + 1] = 0.25(T[index + 1] + 2 * u_temp3 + u_temp4) @@ -3074,8 +3523,10 @@ function perform_step!(integrator, if (index <= 1) # Deuflhard Stability check for initial two sequences diff2 = u_temp3 - u_temp4 - if (integrator.opts.internalnorm(diff1, t) < - integrator.opts.internalnorm(0.5 * (diff2 - diff1), t)) + if ( + integrator.opts.internalnorm(diff1, t) < + integrator.opts.internalnorm(0.5 * (diff2 - diff1), t) + ) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return @@ -3098,14 +3549,24 @@ function perform_step!(integrator, # Compute all information relating to an extrapolation order ≦ win_min for i in (win_min - 1):win_min u = eltype(uprev).(extrapolation_scalars[i + 1]) * - sum(broadcast(*, T[1:(i + 1)], - eltype(uprev).(extrapolation_weights[1:(i + 1), (i + 1)]))) # Approximation of extrapolation order i + sum( + broadcast( + *, T[1:(i + 1)], + eltype(uprev).(extrapolation_weights[1:(i + 1), (i + 1)]) + ) + ) # Approximation of extrapolation order i utilde = eltype(uprev).(extrapolation_scalars_2[i]) * - sum(broadcast(*, T[2:(i + 1)], - eltype(uprev).(extrapolation_weights_2[1:i, i]))) # and its internal counterpart - res = calculate_residuals(u, utilde, integrator.opts.abstol, + sum( + broadcast( + *, T[2:(i + 1)], + eltype(uprev).(extrapolation_weights_2[1:i, i]) + ) + ) # and its internal counterpart + res = calculate_residuals( + u, utilde, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(res, t) cache.n_curr = i # Update cache's n_curr for stepsize_controller_internal! stepsize_controller_internal!(integrator, alg) # Update cache.Q @@ -3118,9 +3579,13 @@ function perform_step!(integrator, # Accept current approximation u of order n_curr break elseif (n_curr < alg.min_order + 1) || - integrator.EEst <= - typeof(integrator.EEst)(prod(subdividing_sequence[(n_curr + 2):(win_max + 1)] .// - subdividing_sequence[1]^2)) + integrator.EEst <= + typeof(integrator.EEst)( + prod( + subdividing_sequence[(n_curr + 2):(win_max + 1)] .// + subdividing_sequence[1]^2 + ) + ) # Reject current approximation order but pass convergence monitor # Always compute approximation of order (n_curr + 1) n_curr = n_curr + 1 @@ -3133,13 +3598,16 @@ function perform_step!(integrator, integrator.stats.nw += 1 u_temp2 = uprev u_temp1 = u_temp2 + - _reshape(W \ -_vec(dt_int * integrator.fsalfirst), axes(uprev)) # Euler starting step + _reshape(W \ -_vec(dt_int * integrator.fsalfirst), axes(uprev)) # Euler starting step for j in 2:(j_int + 1) T[n_curr + 1] = u_temp1 + _reshape( W \ - -_vec(dt_int * - f(u_temp1, p, t + (j - 1) * dt_int)), - axes(uprev)) + -_vec( + dt_int * + f(u_temp1, p, t + (j - 1) * dt_int) + ), + axes(uprev) + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if (j == j_int + 1) T[n_curr + 1] = 0.25(T[n_curr + 1] + 2 * u_temp1 + u_temp2) @@ -3150,16 +3618,34 @@ function perform_step!(integrator, # Update u, integrator.EEst and cache.Q u = eltype(uprev).(extrapolation_scalars[n_curr + 1]) * - sum(broadcast(*, T[1:(n_curr + 1)], - eltype(uprev).(extrapolation_weights[1:(n_curr + 1), - (n_curr + 1)]))) # Approximation of extrapolation order n_curr + sum( + broadcast( + *, T[1:(n_curr + 1)], + eltype(uprev).( + extrapolation_weights[ + 1:(n_curr + 1), + (n_curr + 1), + ] + ) + ) + ) # Approximation of extrapolation order n_curr utilde = eltype(uprev).(extrapolation_scalars_2[n_curr]) * - sum(broadcast(*, T[2:(n_curr + 1)], - eltype(uprev).(extrapolation_weights_2[1:n_curr, - n_curr]))) # and its internal counterpart - res = calculate_residuals(u, utilde, integrator.opts.abstol, + sum( + broadcast( + *, T[2:(n_curr + 1)], + eltype(uprev).( + extrapolation_weights_2[ + 1:n_curr, + n_curr, + ] + ) + ) + ) # and its internal counterpart + res = calculate_residuals( + u, utilde, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(res, t) stepsize_controller_internal!(integrator, alg) # Update cache.Q else @@ -3169,16 +3655,24 @@ function perform_step!(integrator, end else u = eltype(uprev).(extrapolation_scalars[n_curr + 1]) * - sum(broadcast(*, T[1:(n_curr + 1)], - eltype(uprev).(extrapolation_weights[1:(n_curr + 1), - (n_curr + 1)]))) # Approximation of extrapolation order n_curr + sum( + broadcast( + *, T[1:(n_curr + 1)], + eltype(uprev).( + extrapolation_weights[ + 1:(n_curr + 1), + (n_curr + 1), + ] + ) + ) + ) # Approximation of extrapolation order n_curr end # Save the latest approximation and update FSAL integrator.u = u integrator.fsallast = f(u, p, t + dt) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end function initialize!(integrator, cache::ImplicitEulerBarycentricExtrapolationCache) @@ -3189,11 +3683,13 @@ function initialize!(integrator, cache::ImplicitEulerBarycentricExtrapolationCac resize!(integrator.k, integrator.kshortsize) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation + return integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation end -function perform_step!(integrator, cache::ImplicitEulerBarycentricExtrapolationCache, - repeat_step = false) +function perform_step!( + integrator, cache::ImplicitEulerBarycentricExtrapolationCache, + repeat_step = false + ) # Unpack all information needed (; t, uprev, dt, f, p) = integrator alg = unwrap_alg(integrator, true) @@ -3217,7 +3713,7 @@ function perform_step!(integrator, cache::ImplicitEulerBarycentricExtrapolationC # Set up the order window # alg.min_order + 1 ≦ n_curr ≦ alg.max_order - 1 is enforced by step_*_controller! if !(alg.min_order + 1 <= n_curr <= alg.max_order - 1) - error("Something went wrong while setting up the order window: $n_curr ∉ [$(alg.min_order+1),$(alg.max_order-1)]. + error("Something went wrong while setting up the order window: $n_curr ∉ [$(alg.min_order + 1),$(alg.max_order - 1)]. Please report this error ") end win_min = n_curr - 1 @@ -3236,57 +3732,67 @@ function perform_step!(integrator, cache::ImplicitEulerBarycentricExtrapolationC dt_int = dt / j_int # Stepsize of the ith internal discretisation jacobian2W!(W[1], integrator.f.mass_matrix, dt_int, J) integrator.stats.nw += 1 - @.. broadcast=false u_temp2=uprev - @.. broadcast=false linsolve_tmps[1]=fsalfirst + @.. broadcast = false u_temp2 = uprev + @.. broadcast = false linsolve_tmps[1] = fsalfirst linsolve = cache.linsolve[1] if !repeat_step - linres = dolinsolve(integrator, linsolve; A = W[1], - b = _vec(linsolve_tmps[1]), linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; A = W[1], + b = _vec(linsolve_tmps[1]), linu = _vec(k) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, - b = _vec(linsolve_tmps[1]), linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; A = nothing, + b = _vec(linsolve_tmps[1]), linu = _vec(k) + ) end cache.linsolve[1] = linres.cache integrator.stats.nsolve += 1 - @.. broadcast=false u_temp1=u_temp2-k # Euler starting step - @.. broadcast=false diff1[1]=u_temp1-u_temp2 + @.. broadcast = false u_temp1 = u_temp2 - k # Euler starting step + @.. broadcast = false diff1[1] = u_temp1 - u_temp2 for j in 2:(j_int + 1) f(k, cache.u_temp1, p, t + (j - 1) * dt_int) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false linsolve_tmps[1]=k + @.. broadcast = false linsolve_tmps[1] = k linsolve = cache.linsolve[1] if !repeat_step && j == 1 - linres = dolinsolve(integrator, linsolve; A = W[1], - b = _vec(linsolve_tmps[1]), linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; A = W[1], + b = _vec(linsolve_tmps[1]), linu = _vec(k) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, - b = _vec(linsolve_tmps[1]), linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; A = nothing, + b = _vec(linsolve_tmps[1]), linu = _vec(k) + ) end cache.linsolve[1] = linres.cache integrator.stats.nsolve += 1 - @.. broadcast=false T[i + 1]=u_temp1-k + @.. broadcast = false T[i + 1] = u_temp1 - k if (j == j_int + 1) - @.. broadcast=false T[i + 1]=0.25(T[i + 1]+2*u_temp1+u_temp2) + @.. broadcast = false T[i + 1] = 0.25(T[i + 1] + 2 * u_temp1 + u_temp2) end - @.. broadcast=false u_temp2=u_temp1 - @.. broadcast=false u_temp1=T[i + 1] + @.. broadcast = false u_temp2 = u_temp1 + @.. broadcast = false u_temp1 = T[i + 1] if (i <= 1) # Deuflhard Stability check for initial two sequences - @.. broadcast=false diff2[1]=u_temp1-u_temp2 - @.. broadcast=false diff2[1]=0.5*(diff2[1]-diff1[1]) - if (integrator.opts.internalnorm(diff1[1], t) < - integrator.opts.internalnorm(diff2[1], t)) + @.. broadcast = false diff2[1] = u_temp1 - u_temp2 + @.. broadcast = false diff2[1] = 0.5 * (diff2[1] - diff1[1]) + if ( + integrator.opts.internalnorm(diff1[1], t) < + integrator.opts.internalnorm(diff2[1], t) + ) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return end end - @.. broadcast=false diff1[1]=u_temp1-u_temp2 + @.. broadcast = false diff1[1] = u_temp1 - u_temp2 end end else @@ -3297,8 +3803,8 @@ function perform_step!(integrator, cache::ImplicitEulerBarycentricExtrapolationC # Romberg sequence --> 1, 2, 4, 8, ..., 2^(i) # 1 + 2 + 4 + ... + 2^(i-1) = 2^(i) - 1 let n_curr = n_curr, subdividing_sequence = subdividing_sequence, uprev = uprev, - dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, - t = t, T = T + dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, + t = t, T = T @threaded alg.threading for i in 1:2 startIndex = (i == 1) ? 0 : n_curr @@ -3307,78 +3813,100 @@ function perform_step!(integrator, cache::ImplicitEulerBarycentricExtrapolationC for index in startIndex:endIndex j_int_temp = sequence_factor * subdividing_sequence[index + 1] dt_int_temp = dt / j_int_temp # Stepsize of the ith internal discretisation - jacobian2W!(W[Threads.threadid()], integrator.f.mass_matrix, - dt_int_temp, J) - @.. broadcast=false u_temp4[Threads.threadid()]=uprev - @.. broadcast=false linsolve_tmps[Threads.threadid()]=fsalfirst + jacobian2W!( + W[Threads.threadid()], integrator.f.mass_matrix, + dt_int_temp, J + ) + @.. broadcast = false u_temp4[Threads.threadid()] = uprev + @.. broadcast = false linsolve_tmps[Threads.threadid()] = fsalfirst linsolve = cache.linsolve[Threads.threadid()] if !repeat_step - linres = dolinsolve(integrator, linsolve; + linres = dolinsolve( + integrator, linsolve; A = W[Threads.threadid()], b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, + linres = dolinsolve( + integrator, linsolve; A = nothing, b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) end cache.linsolve[Threads.threadid()] = linres.cache - @.. broadcast=false k_tmps[Threads.threadid()]=-k_tmps[Threads.threadid()] - @.. broadcast=false u_temp3[Threads.threadid()]=u_temp4[Threads.threadid()]- - k_tmps[Threads.threadid()] # Euler starting step - @.. broadcast=false diff1[Threads.threadid()]=u_temp3[Threads.threadid()]- - u_temp4[Threads.threadid()] + @.. broadcast = false k_tmps[Threads.threadid()] = -k_tmps[Threads.threadid()] + @.. broadcast = false u_temp3[Threads.threadid()] = u_temp4[Threads.threadid()] - + k_tmps[Threads.threadid()] # Euler starting step + @.. broadcast = false diff1[Threads.threadid()] = u_temp3[Threads.threadid()] - + u_temp4[Threads.threadid()] for j in 2:(j_int_temp + 1) - f(k_tmps[Threads.threadid()], + f( + k_tmps[Threads.threadid()], cache.u_temp3[Threads.threadid()], - p, t + (j - 1) * dt_int_temp) - @.. broadcast=false linsolve_tmps[Threads.threadid()]=k_tmps[Threads.threadid()] + p, t + (j - 1) * dt_int_temp + ) + @.. broadcast = false linsolve_tmps[Threads.threadid()] = k_tmps[Threads.threadid()] linsolve = cache.linsolve[Threads.threadid()] if !repeat_step && j == 1 - linres = dolinsolve(integrator, linsolve; + linres = dolinsolve( + integrator, linsolve; A = W[Threads.threadid()], b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, + linres = dolinsolve( + integrator, linsolve; A = nothing, b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) end cache.linsolve[Threads.threadid()] = linres.cache - @.. broadcast=false T[index + 1]=u_temp3[Threads.threadid()]- - k_tmps[Threads.threadid()] # Explicit Midpoint rule + @.. broadcast = false T[index + 1] = u_temp3[Threads.threadid()] - + k_tmps[Threads.threadid()] # Explicit Midpoint rule if (j == j_int_temp + 1) - @.. broadcast=false T[index + 1]=0.25(T[index + 1]+ - 2* - u_temp3[Threads.threadid()]+ - u_temp4[Threads.threadid()]) + @.. broadcast = false T[index + 1] = 0.25( + T[index + 1] + + 2 * + u_temp3[Threads.threadid()] + + u_temp4[Threads.threadid()] + ) end - @.. broadcast=false u_temp4[Threads.threadid()]=u_temp3[Threads.threadid()] - @.. broadcast=false u_temp3[Threads.threadid()]=T[index + 1] + @.. broadcast = false u_temp4[Threads.threadid()] = u_temp3[Threads.threadid()] + @.. broadcast = false u_temp3[Threads.threadid()] = T[index + 1] if (index <= 1) # Deuflhard Stability check for initial two sequences - @.. broadcast=false diff2[Threads.threadid()]=u_temp3[Threads.threadid()]- - u_temp4[Threads.threadid()] - @.. broadcast=false diff2[Threads.threadid()]=0.5* - (diff2[Threads.threadid()]- - diff1[Threads.threadid()]) - if (integrator.opts.internalnorm(diff1[Threads.threadid()], - t) < - integrator.opts.internalnorm(diff2[Threads.threadid()], - t)) + @.. broadcast = false diff2[Threads.threadid()] = u_temp3[Threads.threadid()] - + u_temp4[Threads.threadid()] + @.. broadcast = false diff2[Threads.threadid()] = 0.5 * + ( + diff2[Threads.threadid()] - + diff1[Threads.threadid()] + ) + if ( + integrator.opts.internalnorm( + diff1[Threads.threadid()], + t + ) < + integrator.opts.internalnorm( + diff2[Threads.threadid()], + t + ) + ) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return end end - @.. broadcast=false diff1[Threads.threadid()]=u_temp3[Threads.threadid()]- - u_temp4[Threads.threadid()] + @.. broadcast = false diff1[Threads.threadid()] = u_temp3[Threads.threadid()] - + u_temp4[Threads.threadid()] end end integrator.force_stepfail ? break : continue @@ -3386,8 +3914,8 @@ function perform_step!(integrator, cache::ImplicitEulerBarycentricExtrapolationC end else let n_curr = n_curr, subdividing_sequence = subdividing_sequence, uprev = uprev, - dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, - t = t, T = T + dt = dt, u_temp3 = u_temp3, u_temp4 = u_temp4, k_tmps = k_tmps, p = p, + t = t, T = T @threaded alg.threading for i in 0:(n_curr ÷ 2) indices = i != n_curr - i ? (i, n_curr - i) : (-1, n_curr - i) @@ -3395,77 +3923,99 @@ function perform_step!(integrator, cache::ImplicitEulerBarycentricExtrapolationC index == -1 && continue j_int_temp = sequence_factor * subdividing_sequence[index + 1] dt_int_temp = dt / j_int_temp # Stepsize of the ith internal discretisation - jacobian2W!(W[Threads.threadid()], integrator.f.mass_matrix, - dt_int_temp, J) - @.. broadcast=false u_temp4[Threads.threadid()]=uprev - @.. broadcast=false linsolve_tmps[Threads.threadid()]=fsalfirst + jacobian2W!( + W[Threads.threadid()], integrator.f.mass_matrix, + dt_int_temp, J + ) + @.. broadcast = false u_temp4[Threads.threadid()] = uprev + @.. broadcast = false linsolve_tmps[Threads.threadid()] = fsalfirst linsolve = cache.linsolve[Threads.threadid()] if !repeat_step - linres = dolinsolve(integrator, linsolve; + linres = dolinsolve( + integrator, linsolve; A = W[Threads.threadid()], b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, + linres = dolinsolve( + integrator, linsolve; A = nothing, b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) end cache.linsolve[Threads.threadid()] = linres.cache - @.. broadcast=false u_temp3[Threads.threadid()]=u_temp4[Threads.threadid()]- - k_tmps[Threads.threadid()] # Euler starting step - @.. broadcast=false diff1[Threads.threadid()]=u_temp3[Threads.threadid()]- - u_temp4[Threads.threadid()] + @.. broadcast = false u_temp3[Threads.threadid()] = u_temp4[Threads.threadid()] - + k_tmps[Threads.threadid()] # Euler starting step + @.. broadcast = false diff1[Threads.threadid()] = u_temp3[Threads.threadid()] - + u_temp4[Threads.threadid()] for j in 2:(j_int_temp + 1) - f(k_tmps[Threads.threadid()], + f( + k_tmps[Threads.threadid()], cache.u_temp3[Threads.threadid()], - p, t + (j - 1) * dt_int_temp) - @.. broadcast=false linsolve_tmps[Threads.threadid()]=k_tmps[Threads.threadid()] + p, t + (j - 1) * dt_int_temp + ) + @.. broadcast = false linsolve_tmps[Threads.threadid()] = k_tmps[Threads.threadid()] linsolve = cache.linsolve[Threads.threadid()] if (!repeat_step && j == 1) - linres = dolinsolve(integrator, linsolve; + linres = dolinsolve( + integrator, linsolve; A = W[Threads.threadid()], b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, + linres = dolinsolve( + integrator, linsolve; A = nothing, b = _vec(linsolve_tmps[Threads.threadid()]), - linu = _vec(k_tmps[Threads.threadid()])) + linu = _vec(k_tmps[Threads.threadid()]) + ) end cache.linsolve[Threads.threadid()] = linres.cache - @.. broadcast=false T[index + 1]=u_temp3[Threads.threadid()]- - k_tmps[Threads.threadid()] # Explicit Midpoint rule + @.. broadcast = false T[index + 1] = u_temp3[Threads.threadid()] - + k_tmps[Threads.threadid()] # Explicit Midpoint rule if (j == j_int_temp + 1) - @.. broadcast=false T[index + 1]=0.25(T[index + 1]+ - 2* - u_temp3[Threads.threadid()]+ - u_temp4[Threads.threadid()]) + @.. broadcast = false T[index + 1] = 0.25( + T[index + 1] + + 2 * + u_temp3[Threads.threadid()] + + u_temp4[Threads.threadid()] + ) end - @.. broadcast=false u_temp4[Threads.threadid()]=u_temp3[Threads.threadid()] - @.. broadcast=false u_temp3[Threads.threadid()]=T[index + 1] + @.. broadcast = false u_temp4[Threads.threadid()] = u_temp3[Threads.threadid()] + @.. broadcast = false u_temp3[Threads.threadid()] = T[index + 1] if (index <= 1) # Deuflhard Stability check for initial two sequences - @.. broadcast=false diff2[Threads.threadid()]=u_temp3[Threads.threadid()]- - u_temp4[Threads.threadid()] - @.. broadcast=false diff2[Threads.threadid()]=0.5* - (diff2[Threads.threadid()]- - diff1[Threads.threadid()]) - if (integrator.opts.internalnorm(diff1[Threads.threadid()], - t) < - integrator.opts.internalnorm(diff2[Threads.threadid()], - t)) + @.. broadcast = false diff2[Threads.threadid()] = u_temp3[Threads.threadid()] - + u_temp4[Threads.threadid()] + @.. broadcast = false diff2[Threads.threadid()] = 0.5 * + ( + diff2[Threads.threadid()] - + diff1[Threads.threadid()] + ) + if ( + integrator.opts.internalnorm( + diff1[Threads.threadid()], + t + ) < + integrator.opts.internalnorm( + diff2[Threads.threadid()], + t + ) + ) # Divergence of iteration, overflow is possible. Force fail and start with smaller step integrator.force_stepfail = true return end end - @.. broadcast=false diff1[Threads.threadid()]=u_temp3[Threads.threadid()]- - u_temp4[Threads.threadid()] + @.. broadcast = false diff1[Threads.threadid()] = u_temp3[Threads.threadid()] - + u_temp4[Threads.threadid()] end end integrator.force_stepfail ? break : continue @@ -3488,17 +4038,19 @@ function perform_step!(integrator, cache::ImplicitEulerBarycentricExtrapolationC u_temp1 .= false u_temp2 .= false for j in 1:(i + 1) - @.. broadcast=false u_temp1+=cache.T[j] * extrapolation_weights[j, (i + 1)] + @.. broadcast = false u_temp1 += cache.T[j] * extrapolation_weights[j, (i + 1)] end for j in 2:(i + 1) - @.. broadcast=false u_temp2+=cache.T[j] * extrapolation_weights_2[j - 1, i] + @.. broadcast = false u_temp2 += cache.T[j] * extrapolation_weights_2[j - 1, i] end - @.. broadcast=false integrator.u=extrapolation_scalars[i + 1]*u_temp1 - @.. broadcast=false cache.utilde=extrapolation_scalars_2[i]*u_temp2 + @.. broadcast = false integrator.u = extrapolation_scalars[i + 1] * u_temp1 + @.. broadcast = false cache.utilde = extrapolation_scalars_2[i] * u_temp2 - calculate_residuals!(cache.res, integrator.u, cache.utilde, + calculate_residuals!( + cache.res, integrator.u, cache.utilde, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(cache.res, t) cache.n_curr = i # Update cache's n_curr for stepsize_controller_internal! stepsize_controller_internal!(integrator, alg) # Update cache.Q @@ -3528,41 +4080,49 @@ function perform_step!(integrator, cache::ImplicitEulerBarycentricExtrapolationC dt_int = dt / j_int # Stepsize of the new internal discretisation jacobian2W!(W[1], integrator.f.mass_matrix, dt_int, J) integrator.stats.nw += 1 - @.. broadcast=false u_temp2=uprev - @.. broadcast=false linsolve_tmps[1]=fsalfirst + @.. broadcast = false u_temp2 = uprev + @.. broadcast = false linsolve_tmps[1] = fsalfirst linsolve = cache.linsolve[1] if !repeat_step - linres = dolinsolve(integrator, linsolve; A = W[1], - b = _vec(linsolve_tmps[1]), linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; A = W[1], + b = _vec(linsolve_tmps[1]), linu = _vec(k) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, - b = _vec(linsolve_tmps[1]), linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; A = nothing, + b = _vec(linsolve_tmps[1]), linu = _vec(k) + ) end cache.linsolve[1] = linres.cache integrator.stats.nsolve += 1 - @.. broadcast=false k=-k - @.. broadcast=false u_temp1=u_temp2+k # Euler starting step + @.. broadcast = false k = -k + @.. broadcast = false u_temp1 = u_temp2 + k # Euler starting step for j in 2:(j_int + 1) f(k, cache.u_temp1, p, t + (j - 1) * dt_int) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false linsolve_tmps[1]=k + @.. broadcast = false linsolve_tmps[1] = k linsolve = cache.linsolve[1] - linres = dolinsolve(integrator, linsolve; b = _vec(linsolve_tmps[1]), - linu = _vec(k)) + linres = dolinsolve( + integrator, linsolve; b = _vec(linsolve_tmps[1]), + linu = _vec(k) + ) cache.linsolve[1] = linres.cache integrator.stats.nsolve += 1 - @.. broadcast=false T[n_curr + 1]=u_temp1-k # Explicit Midpoint rule + @.. broadcast = false T[n_curr + 1] = u_temp1 - k # Explicit Midpoint rule if (j == j_int + 1) - @.. broadcast=false T[n_curr + 1]=0.25(T[n_curr + 1]+2*u_temp1+ - u_temp2) + @.. broadcast = false T[n_curr + 1] = 0.25( + T[n_curr + 1] + 2 * u_temp1 + + u_temp2 + ) end - @.. broadcast=false u_temp2=u_temp1 - @.. broadcast=false u_temp1=T[n_curr + 1] + @.. broadcast = false u_temp2 = u_temp1 + @.. broadcast = false u_temp1 = T[n_curr + 1] end # Update u, integrator.EEst and cache.Q @@ -3572,19 +4132,21 @@ function perform_step!(integrator, cache::ImplicitEulerBarycentricExtrapolationC u_temp1 .= false u_temp2 .= false for j in 1:(n_curr + 1) - @.. broadcast=false u_temp1+=cache.T[j] * - extrapolation_weights[j, (n_curr + 1)] + @.. broadcast = false u_temp1 += cache.T[j] * + extrapolation_weights[j, (n_curr + 1)] end for j in 2:(n_curr + 1) - @.. broadcast=false u_temp2+=cache.T[j] * - extrapolation_weights_2[j - 1, n_curr] + @.. broadcast = false u_temp2 += cache.T[j] * + extrapolation_weights_2[j - 1, n_curr] end - @.. broadcast=false integrator.u=extrapolation_scalars[n_curr + 1]*u_temp1 - @.. broadcast=false cache.utilde=extrapolation_scalars_2[n_curr]*u_temp2 + @.. broadcast = false integrator.u = extrapolation_scalars[n_curr + 1] * u_temp1 + @.. broadcast = false cache.utilde = extrapolation_scalars_2[n_curr] * u_temp2 - calculate_residuals!(cache.res, integrator.u, cache.utilde, + calculate_residuals!( + cache.res, integrator.u, cache.utilde, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(cache.res, t) stepsize_controller_internal!(integrator, alg) # Update cache.Q else @@ -3597,11 +4159,11 @@ function perform_step!(integrator, cache::ImplicitEulerBarycentricExtrapolationC #integrator.u .= extrapolation_scalars[n_curr+1] * sum( broadcast(*, cache.T[1:(n_curr+1)], extrapolation_weights[1:(n_curr+1), (n_curr+1)]) ) # Approximation of extrapolation order n_curr u_temp1 .= false for j in 1:(n_curr + 1) - @.. broadcast=false u_temp1+=cache.T[j] * extrapolation_weights[j, (n_curr + 1)] + @.. broadcast = false u_temp1 += cache.T[j] * extrapolation_weights[j, (n_curr + 1)] end - @.. broadcast=false integrator.u=extrapolation_scalars[n_curr + 1]*u_temp1 + @.. broadcast = false integrator.u = extrapolation_scalars[n_curr + 1] * u_temp1 end f(cache.k, integrator.u, p, t + dt) # Update FSAL - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end diff --git a/lib/OrdinaryDiffEqExtrapolation/test/jet.jl b/lib/OrdinaryDiffEqExtrapolation/test/jet.jl index 31152862f7..3bee27dad9 100644 --- a/lib/OrdinaryDiffEqExtrapolation/test/jet.jl +++ b/lib/OrdinaryDiffEqExtrapolation/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqExtrapolation, target_defined_modules = true, mode = :typo) + OrdinaryDiffEqExtrapolation, target_defined_modules = true, mode = :typo + ) end diff --git a/lib/OrdinaryDiffEqExtrapolation/test/ode_extrapolation_tests.jl b/lib/OrdinaryDiffEqExtrapolation/test/ode_extrapolation_tests.jl index 73841a2460..c6d0c078e4 100644 --- a/lib/OrdinaryDiffEqExtrapolation/test/ode_extrapolation_tests.jl +++ b/lib/OrdinaryDiffEqExtrapolation/test/ode_extrapolation_tests.jl @@ -7,16 +7,21 @@ using OrdinaryDiffEqExtrapolation, DiffEqDevTools, Test, Random linear = (u, p, t) -> (p * u) linear_analytic = (u0, p, t) -> u0 * exp(p * t) -prob_ode_bigfloatlinear = ODEProblem(ODEFunction(linear, analytic = linear_analytic), - big"0.5", (big"0.0", big"1.0"), big"1.01") +prob_ode_bigfloatlinear = ODEProblem( + ODEFunction(linear, analytic = linear_analytic), + big"0.5", (big"0.0", big"1.0"), big"1.01" +) f_2dlinear = (du, u, p, t) -> (@. du = p * u) f_2dlinear_analytic = (u0, p, t) -> @. u0 * exp(p * t) prob_ode_bigfloat2Dlinear = ODEProblem( - ODEFunction(f_2dlinear, - analytic = f_2dlinear_analytic), + ODEFunction( + f_2dlinear, + analytic = f_2dlinear_analytic + ), rand(BigFloat, (4, 2)), (big"0.0", big"1.0"), - big"1.01") + big"1.01" +) # Prepare tests Random.seed!(100) @@ -36,23 +41,35 @@ testTol = 0.2 # Convergence test for j in 1:4 - sim = test_convergence(dts, prob, - AitkenNeville(max_order = j, + sim = test_convergence( + dts, prob, + AitkenNeville( + max_order = j, min_order = j, init_order = j, - threading = false)) - @test sim.𝒪est[:final]≈j atol=testTol + threading = false + ) + ) + @test sim.𝒪est[:final] ≈ j atol = testTol end # Regression test - sol = solve(prob, - AitkenNeville(max_order = 9, min_order = 1, - init_order = 9, threading = false), reltol = 1e-3) + sol = solve( + prob, + AitkenNeville( + max_order = 9, min_order = 1, + init_order = 9, threading = false + ), reltol = 1.0e-3 + ) @test length(sol.u) < 15 @test SciMLBase.successful_retcode(sol) @test SciMLBase.successful_retcode(sol) - sol = solve(prob, - AitkenNeville(max_order = 9, min_order = 1, - init_order = 9, threading = false), reltol = 1e-6) + sol = solve( + prob, + AitkenNeville( + max_order = 9, min_order = 1, + init_order = 9, threading = false + ), reltol = 1.0e-6 + ) @test length(sol.u) < 18 @test SciMLBase.successful_retcode(sol) end @@ -65,24 +82,30 @@ testTol = 0.2 println("Testing ImplicitEulerExtrapolation") @testset "Testing ImplicitEulerExtrapolation" begin for prob in problem_array, - seq in sequence_array + seq in sequence_array global dts newTol = 0.35 # Convergence test for j in 1:4 - alg = ImplicitEulerExtrapolation(min_order = j, + alg = ImplicitEulerExtrapolation( + min_order = j, init_order = j, max_order = j, - sequence = seq, threading = false) + sequence = seq, threading = false + ) sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈alg.init_order + 1.1 atol=newTol #Superconvergence + @test sim.𝒪est[:final] ≈ alg.init_order + 1.1 atol = newTol #Superconvergence end # Regression test - sol = solve(prob, - ImplicitEulerExtrapolation(max_order = 9, min_order = 1, + sol = solve( + prob, + ImplicitEulerExtrapolation( + max_order = 9, min_order = 1, init_order = 9, sequence = seq, - threading = false), reltol = 1e-3) + threading = false + ), reltol = 1.0e-3 + ) @test length(sol.u) < 15 @test SciMLBase.successful_retcode(sol) end @@ -91,27 +114,33 @@ testTol = 0.2 println("Testing ImplicitEulerBarycentricExtrapolation") @testset "Testing ImplicitEulerBarycentricExtrapolation" begin for prob in problem_array, - seq in sequence_array + seq in sequence_array global dts newTol = 0.35 # Convergence test for j in 1:4 - alg = ImplicitEulerBarycentricExtrapolation(min_order = j, + alg = ImplicitEulerBarycentricExtrapolation( + min_order = j, init_order = j, max_order = j, sequence = seq, - threading = false) + threading = false + ) sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈alg.init_order + 0.5 atol=newTol #Superconvergence + @test sim.𝒪est[:final] ≈ alg.init_order + 0.5 atol = newTol #Superconvergence end # Regression test - sol = solve(prob, - ImplicitEulerBarycentricExtrapolation(max_order = 9, min_order = 1, + sol = solve( + prob, + ImplicitEulerBarycentricExtrapolation( + max_order = 9, min_order = 1, init_order = 9, sequence = seq, - threading = false), - reltol = 1e-3) + threading = false + ), + reltol = 1.0e-3 + ) @test length(sol.u) < 15 @test SciMLBase.successful_retcode(sol) end @@ -120,24 +149,28 @@ testTol = 0.2 println("Testing ImplicitDeuflhardExtrapolation") @testset "Testing ImplicitDeuflhardExtrapolation" begin for prob in problem_array, - seq in sequence_array + seq in sequence_array global dts # Convergence test for j in 1:6 - alg = ImplicitDeuflhardExtrapolation(min_order = j, + alg = ImplicitDeuflhardExtrapolation( + min_order = j, init_order = j, max_order = j, - sequence = seq, threading = false) + sequence = seq, threading = false + ) sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈2 * (alg.init_order + 1) atol=testTol + @test sim.𝒪est[:final] ≈ 2 * (alg.init_order + 1) atol = testTol end # Regression test - alg = ImplicitDeuflhardExtrapolation(max_order = 9, min_order = 1, + alg = ImplicitDeuflhardExtrapolation( + max_order = 9, min_order = 1, init_order = 9, sequence = seq, - threading = false) - sol = solve(prob, alg, reltol = 1e-3) + threading = false + ) + sol = solve(prob, alg, reltol = 1.0e-3) @test length(sol.u) < 10 @test SciMLBase.successful_retcode(sol) end @@ -146,23 +179,27 @@ testTol = 0.2 println("Testing ImplicitHairerWannerExtrapolation") @testset "Testing ImplicitHairerWannerExtrapolation" begin for prob in problem_array, - seq in sequence_array + seq in sequence_array global dts # Convergence test for j in 1:6 - alg = ImplicitHairerWannerExtrapolation(min_order = j, + alg = ImplicitHairerWannerExtrapolation( + min_order = j, init_order = j, max_order = j, - sequence = seq, threading = false) + sequence = seq, threading = false + ) sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈2 * (alg.init_order + 1) - 1 atol=testTol + @test sim.𝒪est[:final] ≈ 2 * (alg.init_order + 1) - 1 atol = testTol end - alg = ImplicitHairerWannerExtrapolation(max_order = 9, min_order = 1, + alg = ImplicitHairerWannerExtrapolation( + max_order = 9, min_order = 1, init_order = 9, sequence = seq, - threading = false) - sol = solve(prob, alg, reltol = 1e-3) + threading = false + ) + sol = solve(prob, alg, reltol = 1.0e-3) @test length(sol.u) < 10 @test SciMLBase.successful_retcode(sol) end @@ -174,24 +211,28 @@ testTol = 0.2 @testset "Testing ExtrapolationMidpointDeuflhard" begin @testset "Testing sequential ExtrapolationMidpointDeuflhard" begin for prob in problem_array, - seq in sequence_array + seq in sequence_array global dts # Convergence test for j in 1:6 - alg = ExtrapolationMidpointDeuflhard(min_order = j, + alg = ExtrapolationMidpointDeuflhard( + min_order = j, init_order = j, max_order = j, - sequence = seq, threading = false) + sequence = seq, threading = false + ) sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈2 * (alg.init_order + 1) atol=testTol + @test sim.𝒪est[:final] ≈ 2 * (alg.init_order + 1) atol = testTol end # Regression test - alg = ExtrapolationMidpointDeuflhard(max_order = 9, min_order = 1, + alg = ExtrapolationMidpointDeuflhard( + max_order = 9, min_order = 1, init_order = 9, sequence = seq, - threading = false) - sol = solve(prob, alg, reltol = 1e-3) + threading = false + ) + sol = solve(prob, alg, reltol = 1.0e-3) @test length(sol.u) < 10 @test SciMLBase.successful_retcode(sol) end @@ -203,25 +244,29 @@ testTol = 0.2 @testset "Testing ExtrapolationMidpointHairerWanner" begin @testset "Testing sequential ExtrapolationMidpointHairerWanner" begin for prob in problem_array, - seq in sequence_array + seq in sequence_array global dts # Convergence test for j in 1:6 - alg = ExtrapolationMidpointHairerWanner(min_order = j, + alg = ExtrapolationMidpointHairerWanner( + min_order = j, init_order = j, max_order = j, sequence = seq, - threading = false) + threading = false + ) sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈2 * (alg.init_order + 1) atol=testTol + @test sim.𝒪est[:final] ≈ 2 * (alg.init_order + 1) atol = testTol end # Regression test - alg = ExtrapolationMidpointHairerWanner(max_order = 9, min_order = 2, + alg = ExtrapolationMidpointHairerWanner( + max_order = 9, min_order = 2, init_order = 9, sequence = seq, - threading = false) - sol = solve(prob, alg, reltol = 1e-3) + threading = false + ) + sol = solve(prob, alg, reltol = 1.0e-3) @test length(sol.u) < 10 @test SciMLBase.successful_retcode(sol) end @@ -231,21 +276,27 @@ testTol = 0.2 println("Regression Test Float32 and Float64 Fallbacks") @testset "Regression Test Float32 and Float64 Fallbacks" begin prob_ode_2Dlinear = ODEProblem( - ODEFunction(f_2dlinear, - analytic = f_2dlinear_analytic), + ODEFunction( + f_2dlinear, + analytic = f_2dlinear_analytic + ), Float64.(prob_ode_bigfloat2Dlinear.u0), (0.0, 1.0), - 1.01) + 1.01 + ) s1 = solve(prob_ode_bigfloat2Dlinear, ExtrapolationMidpointDeuflhard()) s2 = solve(prob_ode_2Dlinear, ExtrapolationMidpointDeuflhard()) - @test all(all(s1[i] - s2[i] .< 5e-14) for i in 1:length(s1)) + @test all(all(s1[i] - s2[i] .< 5.0e-14) for i in 1:length(s1)) prob_ode_2Dlinear = ODEProblem( - ODEFunction(f_2dlinear, - analytic = f_2dlinear_analytic), + ODEFunction( + f_2dlinear, + analytic = f_2dlinear_analytic + ), Float32.(prob_ode_bigfloat2Dlinear.u0), - (0.0f0, 1.0f0), 1.01f0) + (0.0f0, 1.0f0), 1.01f0 + ) s1 = solve(prob_ode_bigfloat2Dlinear, ExtrapolationMidpointDeuflhard()) s2 = solve(prob_ode_2Dlinear, ExtrapolationMidpointDeuflhard()) - @test all(all(s1[i] - s2[i] .< 5e-6) for i in 1:length(s1)) + @test all(all(s1[i] - s2[i] .< 5.0e-6) for i in 1:length(s1)) end end # Extrapolation methods diff --git a/lib/OrdinaryDiffEqFIRK/src/OrdinaryDiffEqFIRK.jl b/lib/OrdinaryDiffEqFIRK/src/OrdinaryDiffEqFIRK.jl index 0ed22cd373..57929e6f87 100644 --- a/lib/OrdinaryDiffEqFIRK/src/OrdinaryDiffEqFIRK.jl +++ b/lib/OrdinaryDiffEqFIRK/src/OrdinaryDiffEqFIRK.jl @@ -1,24 +1,24 @@ module OrdinaryDiffEqFIRK import OrdinaryDiffEqCore: alg_order, calculate_residuals!, - initialize!, perform_step!, unwrap_alg, - calculate_residuals, - OrdinaryDiffEqAlgorithm, OrdinaryDiffEqNewtonAdaptiveAlgorithm, - OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, - OrdinaryDiffEqAdaptiveAlgorithm, CompiledFloats, uses_uprev, - alg_cache, _vec, _reshape, @cache, @threaded, isthreaded, - PolyesterThreads, - isfsal, full_cache, constvalue, _unwrap_val, - differentiation_rk_docstring, trivial_limiter!, - _ode_interpolant!, _ode_addsteps!, AbstractController, - qmax_default, alg_adaptive_order, DEFAULT_PRECS, - stepsize_controller!, step_accept_controller!, - step_reject_controller!, - PredictiveController, alg_can_repeat_jac, NewtonAlgorithm, - fac_default_gamma, - get_current_adaptive_order, get_fsalfirstlast, - isfirk, generic_solver_docstring, _bool_to_ADType, - _process_AD_choice, LinearAliasSpecifier + initialize!, perform_step!, unwrap_alg, + calculate_residuals, + OrdinaryDiffEqAlgorithm, OrdinaryDiffEqNewtonAdaptiveAlgorithm, + OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, + OrdinaryDiffEqAdaptiveAlgorithm, CompiledFloats, uses_uprev, + alg_cache, _vec, _reshape, @cache, @threaded, isthreaded, + PolyesterThreads, + isfsal, full_cache, constvalue, _unwrap_val, + differentiation_rk_docstring, trivial_limiter!, + _ode_interpolant!, _ode_addsteps!, AbstractController, + qmax_default, alg_adaptive_order, DEFAULT_PRECS, + stepsize_controller!, step_accept_controller!, + step_reject_controller!, + PredictiveController, alg_can_repeat_jac, NewtonAlgorithm, + fac_default_gamma, + get_current_adaptive_order, get_fsalfirstlast, + isfirk, generic_solver_docstring, _bool_to_ADType, + _process_AD_choice, LinearAliasSpecifier using MuladdMacro, DiffEqBase, RecursiveArrayTools, Polyester isfirk, generic_solver_docstring using SciMLOperators: AbstractSciMLOperator @@ -29,11 +29,11 @@ import OrdinaryDiffEqCore import OrdinaryDiffEqCore: _ode_interpolant, _ode_interpolant!, has_stiff_interpolation import FastPower: fastpower using OrdinaryDiffEqDifferentiation: UJacobianWrapper, build_J_W, build_jac_config, - UDerivativeWrapper, calc_J!, dolinsolve, calc_J, - islinearfunction + UDerivativeWrapper, calc_J!, dolinsolve, calc_J, + islinearfunction using OrdinaryDiffEqNonlinearSolve: du_alias_or_new, Convergence, FastConvergence, NLStatus, - VerySlowConvergence, - Divergence, get_new_W_γdt_cutoff + VerySlowConvergence, + Divergence, get_new_W_γdt_cutoff import ADTypes: AutoForwardDiff, AbstractADType using Reexport diff --git a/lib/OrdinaryDiffEqFIRK/src/alg_utils.jl b/lib/OrdinaryDiffEqFIRK/src/alg_utils.jl index 4d68b1142f..6cc50b2916 100644 --- a/lib/OrdinaryDiffEqFIRK/src/alg_utils.jl +++ b/lib/OrdinaryDiffEqFIRK/src/alg_utils.jl @@ -18,5 +18,5 @@ get_current_alg_order(alg::AdaptiveRadau, cache) = cache.num_stages * 2 - 1 get_current_adaptive_order(alg::AdaptiveRadau, cache) = cache.num_stages function has_stiff_interpolation(::Union{RadauIIA3, RadauIIA5, RadauIIA9, AdaptiveRadau}) - true + return true end diff --git a/lib/OrdinaryDiffEqFIRK/src/algorithms.jl b/lib/OrdinaryDiffEqFIRK/src/algorithms.jl index 9a06a5edd0..aa43395837 100644 --- a/lib/OrdinaryDiffEqFIRK/src/algorithms.jl +++ b/lib/OrdinaryDiffEqFIRK/src/algorithms.jl @@ -1,22 +1,21 @@ - hairer1999stiff = """@article{hairer1999stiff, - title={Stiff differential equations solved by Radau methods}, - author={Hairer, Ernst and Wanner, Gerhard}, - journal={Journal of Computational and Applied Mathematics}, - volume={111}, - number={1-2}, - pages={93--111}, - year={1999}, - publisher={Elsevier}}""" +title={Stiff differential equations solved by Radau methods}, +author={Hairer, Ernst and Wanner, Gerhard}, +journal={Journal of Computational and Applied Mathematics}, +volume={111}, +number={1-2}, +pages={93--111}, +year={1999}, +publisher={Elsevier}}""" extra_keyword_description = """ - - `extrapolant`: TBD - - `smooth_est`: TBD - - `step_limiter!`: function of the form `limiter!(u, integrator, p, t)`""" +- `extrapolant`: TBD +- `smooth_est`: TBD +- `step_limiter!`: function of the form `limiter!(u, integrator, p, t)`""" extra_keyword_default = """ - extrapolant = :dense, - smooth_est = true, - step_limiter! = trivial_limiter!""" +extrapolant = :dense, +smooth_est = true, +step_limiter! = trivial_limiter!""" @doc differentiation_rk_docstring( "An A-B-L stable fully implicit Runge-Kutta method with internal tableau complex basis transform for efficiency. @@ -25,9 +24,10 @@ Similar to Hairer's SEULEX.", "Fully-Implicit Runge-Kutta Method."; references = hairer1999stiff, extra_keyword_description = extra_keyword_description, - extra_keyword_default = extra_keyword_default) + extra_keyword_default = extra_keyword_default +) struct RadauIIA3{CS, AD, F, P, FDT, ST, CJ, Tol, C1, C2, StepLimiter} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F precs::P extrapolant::Symbol @@ -40,20 +40,25 @@ struct RadauIIA3{CS, AD, F, P, FDT, ST, CJ, Tol, C1, C2, StepLimiter} <: autodiff::AD end -function RadauIIA3(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function RadauIIA3(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, extrapolant = :dense, fast_convergence_cutoff = 1 // 5, new_W_γdt_cutoff = 1 // 5, controller = :Predictive, κ = nothing, maxiters = 10, - step_limiter! = trivial_limiter!) + step_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - RadauIIA3{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return RadauIIA3{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), typeof(κ), typeof(fast_convergence_cutoff), - typeof(new_W_γdt_cutoff), typeof(step_limiter!)}(linsolve, + typeof(new_W_γdt_cutoff), typeof(step_limiter!), + }( + linsolve, precs, extrapolant, κ, @@ -62,7 +67,8 @@ function RadauIIA3(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), new_W_γdt_cutoff, controller, step_limiter!, - AD_choice) + AD_choice + ) end @doc differentiation_rk_docstring( @@ -71,9 +77,10 @@ end "Fully-Implicit Runge-Kutta Method."; references = hairer1999stiff, extra_keyword_description = extra_keyword_description, - extra_keyword_default = extra_keyword_default) + extra_keyword_default = extra_keyword_default +) struct RadauIIA5{CS, AD, F, P, FDT, ST, CJ, Tol, C1, C2, StepLimiter} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F precs::P smooth_est::Bool @@ -87,20 +94,25 @@ struct RadauIIA5{CS, AD, F, P, FDT, ST, CJ, Tol, C1, C2, StepLimiter} <: autodiff::AD end -function RadauIIA5(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function RadauIIA5(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, extrapolant = :dense, fast_convergence_cutoff = 1 // 5, new_W_γdt_cutoff = 1 // 5, controller = :Predictive, κ = nothing, maxiters = 10, smooth_est = true, - step_limiter! = trivial_limiter!) + step_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - RadauIIA5{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return RadauIIA5{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), typeof(κ), typeof(fast_convergence_cutoff), - typeof(new_W_γdt_cutoff), typeof(step_limiter!)}(linsolve, + typeof(new_W_γdt_cutoff), typeof(step_limiter!), + }( + linsolve, precs, smooth_est, extrapolant, @@ -110,7 +122,8 @@ function RadauIIA5(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), new_W_γdt_cutoff, controller, step_limiter!, - AD_choice) + AD_choice + ) end @doc differentiation_rk_docstring( @@ -120,9 +133,10 @@ Similar to Hairer's SEULEX.", "Fully-Implicit Runge-Kutta Method."; references = hairer1999stiff, extra_keyword_description = extra_keyword_description, - extra_keyword_default = extra_keyword_default) + extra_keyword_default = extra_keyword_default +) struct RadauIIA9{CS, AD, F, P, FDT, ST, CJ, Tol, C1, C2, StepLimiter} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F precs::P smooth_est::Bool @@ -136,20 +150,25 @@ struct RadauIIA9{CS, AD, F, P, FDT, ST, CJ, Tol, C1, C2, StepLimiter} <: autodiff::AD end -function RadauIIA9(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function RadauIIA9(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, extrapolant = :dense, fast_convergence_cutoff = 1 // 5, new_W_γdt_cutoff = 1 // 5, controller = :Predictive, κ = nothing, maxiters = 10, smooth_est = true, - step_limiter! = trivial_limiter!) + step_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - RadauIIA9{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return RadauIIA9{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), typeof(κ), typeof(fast_convergence_cutoff), - typeof(new_W_γdt_cutoff), typeof(step_limiter!)}(linsolve, + typeof(new_W_γdt_cutoff), typeof(step_limiter!), + }( + linsolve, precs, smooth_est, extrapolant, @@ -159,11 +178,12 @@ function RadauIIA9(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), new_W_γdt_cutoff, controller, step_limiter!, - AD_choice) + AD_choice + ) end struct AdaptiveRadau{CS, AD, F, P, FDT, ST, CJ, Tol, C1, C2, StepLimiter, TO} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F precs::P smooth_est::Bool @@ -180,20 +200,25 @@ struct AdaptiveRadau{CS, AD, F, P, FDT, ST, CJ, Tol, C1, C2, StepLimiter, TO} <: autodiff::AD end -function AdaptiveRadau(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function AdaptiveRadau(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), min_order = 5, max_order = 13, threading = false, linsolve = nothing, precs = DEFAULT_PRECS, extrapolant = :dense, fast_convergence_cutoff = 1 // 5, new_W_γdt_cutoff = 1 // 5, controller = :Predictive, κ = nothing, maxiters = 10, smooth_est = true, - step_limiter! = trivial_limiter!) + step_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - AdaptiveRadau{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return AdaptiveRadau{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), typeof(κ), typeof(fast_convergence_cutoff), - typeof(new_W_γdt_cutoff), typeof(step_limiter!), typeof(threading)}(linsolve, + typeof(new_W_γdt_cutoff), typeof(step_limiter!), typeof(threading), + }( + linsolve, precs, smooth_est, extrapolant, @@ -203,5 +228,6 @@ function AdaptiveRadau(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), new_W_γdt_cutoff, controller, step_limiter!, min_order, max_order, threading, - AD_choice) + AD_choice + ) end diff --git a/lib/OrdinaryDiffEqFIRK/src/controllers.jl b/lib/OrdinaryDiffEqFIRK/src/controllers.jl index f65712b672..c805e0f2aa 100644 --- a/lib/OrdinaryDiffEqFIRK/src/controllers.jl +++ b/lib/OrdinaryDiffEqFIRK/src/controllers.jl @@ -1,5 +1,6 @@ function step_accept_controller!( - integrator, controller::PredictiveController, alg::AdaptiveRadau, q) + integrator, controller::PredictiveController, alg::AdaptiveRadau, q + ) (; qmin, qmax, gamma, qsteady_min, qsteady_max) = integrator.opts (; cache) = integrator (; num_stages, step, iter, hist_iter, index) = cache @@ -9,7 +10,7 @@ function step_accept_controller!( if integrator.success_iter > 0 expo = 1 / (get_current_adaptive_order(alg, integrator.cache) + 1) qgus = (integrator.dtacc / integrator.dt) * - fastpow((EEst^2) / integrator.erracc, expo) + fastpow((EEst^2) / integrator.erracc, expo) qgus = max(inv(qmax), min(inv(qmin), qgus / gamma)) qacc = max(q, qgus) else @@ -19,7 +20,7 @@ function step_accept_controller!( qacc = one(qacc) end integrator.dtacc = integrator.dt - integrator.erracc = max(1e-2, EEst) + integrator.erracc = max(1.0e-2, EEst) cache.step = step + 1 hist_iter = hist_iter * 0.8 + iter * 0.2 cache.hist_iter = hist_iter @@ -31,8 +32,12 @@ function step_accept_controller!( cache.index += 1 cache.step = 1 cache.hist_iter = iter - elseif ((hist_iter > 8 || cache.status == VerySlowConvergence || - cache.status == Divergence) && num_stages > min_stages) + elseif ( + ( + hist_iter > 8 || cache.status == VerySlowConvergence || + cache.status == Divergence + ) && num_stages > min_stages + ) cache.num_stages -= 2 cache.index -= 1 cache.step = 1 @@ -43,7 +48,8 @@ function step_accept_controller!( end function step_reject_controller!( - integrator, controller::PredictiveController, alg::AdaptiveRadau) + integrator, controller::PredictiveController, alg::AdaptiveRadau + ) (; dt, success_iter, qold) = integrator (; cache) = integrator (; num_stages, step, iter, hist_iter) = cache @@ -52,9 +58,13 @@ function step_reject_controller!( hist_iter = hist_iter * 0.8 + iter * 0.2 cache.hist_iter = hist_iter min_stages = (alg.min_order - 1) ÷ 4 * 2 + 1 - if (step > 10) - if ((hist_iter > 8 || cache.status == VerySlowConvergence || - cache.status == Divergence) && num_stages > min_stages) + return if (step > 10) + if ( + ( + hist_iter > 8 || cache.status == VerySlowConvergence || + cache.status == Divergence + ) && num_stages > min_stages + ) cache.num_stages -= 2 cache.index -= 1 cache.step = 1 diff --git a/lib/OrdinaryDiffEqFIRK/src/firk_addsteps.jl b/lib/OrdinaryDiffEqFIRK/src/firk_addsteps.jl index 2c76846601..6489208f1f 100644 --- a/lib/OrdinaryDiffEqFIRK/src/firk_addsteps.jl +++ b/lib/OrdinaryDiffEqFIRK/src/firk_addsteps.jl @@ -103,7 +103,7 @@ function _ode_addsteps!(integrator, cache::RadauIIA3ConstantCache) if η * ndw < κ && (iter > 1 || iszero(ndw) || !iszero(integrator.success_iter)) # Newton method converges cache.status = η < alg.fast_convergence_cutoff ? FastConvergence : - Convergence + Convergence fail_convergence = false break end @@ -130,11 +130,13 @@ function _ode_addsteps!(integrator, cache::RadauIIA3Cache, repeat_step = false) (; T11, T12, T21, T22, TI11, TI12, TI21, TI22) = cache.tab (; c1, c2, α, β, e1, e2) = cache.tab (; κ) = cache - (; z1, z2, w1, w2, - dw12, cubuff, - k, k2, fw1, fw2, - J, W1, - tmp, atmp, jac_config, rtol, atol, step_limiter!) = cache + (; + z1, z2, w1, w2, + dw12, cubuff, + k, k2, fw1, fw2, + J, W1, + tmp, atmp, jac_config, rtol, atol, step_limiter!, + ) = cache (; internalnorm, abstol, reltol, adaptive) = integrator.opts alg = unwrap_alg(integrator, true) (; maxiters) = alg @@ -153,19 +155,19 @@ function _ode_addsteps!(integrator, cache::RadauIIA3Cache, repeat_step = false) if integrator.iter == 1 || integrator.u_modified || alg.extrapolant == :constant cache.dtprev = one(cache.dtprev) uzero = zero(eltype(u)) - @.. z1=uzero - @.. z2=uzero - @.. w1=uzero - @.. w2=uzero - @.. integrator.k[3]=uzero - @.. integrator.k[4]=uzero + @.. z1 = uzero + @.. z2 = uzero + @.. w1 = uzero + @.. w2 = uzero + @.. integrator.k[3] = uzero + @.. integrator.k[4] = uzero else c2′ = dt / cache.dtprev c1′ = c1 * c2′ - @.. z1=c1′ * (integrator.k[3] + (c1′ - c1m1) * integrator.k[4]) - @.. z2=c2′ * (integrator.k[3] + (c2′ - c1m1) * integrator.k[4]) - @.. w1=TI11 * z1 + TI12 * z2 - @.. w2=TI21 * z1 + TI22 * z2 + @.. z1 = c1′ * (integrator.k[3] + (c1′ - c1m1) * integrator.k[4]) + @.. z2 = c2′ * (integrator.k[3] + (c2′ - c1m1) * integrator.k[4]) + @.. w1 = TI11 * z1 + TI12 * z2 + @.. w2 = TI21 * z1 + TI22 * z2 end # Newton iteration @@ -209,11 +211,15 @@ function _ode_addsteps!(integrator, cache::RadauIIA3Cache, repeat_step = false) linsolve = cache.linsolve if needfactor - linres = dolinsolve(integrator, linsolve; A = W1, b = _vec(cubuff), - linu = _vec(dw12)) + linres = dolinsolve( + integrator, linsolve; A = W1, b = _vec(cubuff), + linu = _vec(dw12) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, b = _vec(cubuff), - linu = _vec(dw12)) + linres = dolinsolve( + integrator, linsolve; A = nothing, b = _vec(cubuff), + linu = _vec(dw12) + ) end cache.linsolve = linres.cache @@ -251,7 +257,7 @@ function _ode_addsteps!(integrator, cache::RadauIIA3Cache, repeat_step = false) if η * ndw < κ && (iter > 1 || iszero(ndw) || !iszero(integrator.success_iter)) # Newton method converges cache.status = η < alg.fast_convergence_cutoff ? FastConvergence : - Convergence + Convergence fail_convergence = false break end @@ -280,11 +286,15 @@ function _ode_addsteps!(integrator, cache::RadauIIA3Cache, repeat_step = false) return end -function _ode_addsteps!(integrator, cache::RadauIIA5ConstantCache, - repeat_step = false) +function _ode_addsteps!( + integrator, cache::RadauIIA5ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p, k) = integrator - (; T11, T12, T13, T21, T22, T23, T31, TI11, TI12, TI13, - TI21, TI22, TI23, TI31, TI32, TI33) = cache.tab + (; + T11, T12, T13, T21, T22, T23, T31, TI11, TI12, TI13, + TI21, TI22, TI23, TI31, TI32, TI33, + ) = cache.tab (; c1, c2, γ, α, β, e1, e2, e3) = cache.tab (; κ, cont1, cont2, cont3) = cache (; internalnorm, abstol, reltol, adaptive) = integrator.opts @@ -293,8 +303,8 @@ function _ode_addsteps!(integrator, cache::RadauIIA5ConstantCache, mass_matrix = integrator.f.mass_matrix # precalculations - rtol = @.. reltol^(2 / 3)/10 - atol = @.. rtol*(abstol / reltol) + rtol = @.. reltol^(2 / 3) / 10 + atol = @.. rtol * (abstol / reltol) c1m1 = c1 - 1 c2m1 = c2 - 1 c1mc2 = c1 - c2 @@ -329,9 +339,9 @@ function _ode_addsteps!(integrator, cache::RadauIIA5ConstantCache, z1 = @.. c1′ * (k[3] + (c1′ - c2m1) * (k[4] + (c1′ - c1m1) * k[5])) z2 = @.. c2′ * (k[3] + (c2′ - c2m1) * (k[4] + (c2′ - c1m1) * k[5])) z3 = @.. c3′ * (k[3] + (c3′ - c2m1) * (k[4] + (c3′ - c1m1) * k[5])) - w1 = @.. TI11*z1+TI12*z2+TI13*z3 - w2 = @.. TI21*z1+TI22*z2+TI23*z3 - w3 = @.. TI31*z1+TI32*z2+TI33*z3 + w1 = @.. TI11 * z1 + TI12 * z2 + TI13 * z3 + w2 = @.. TI21 * z1 + TI22 * z2 + TI23 * z3 + w3 = @.. TI31 * z1 + TI32 * z2 + TI33 * z3 end # Newton iteration @@ -350,25 +360,25 @@ function _ode_addsteps!(integrator, cache::RadauIIA5ConstantCache, ff3 = f(uprev + z3, p, t + dt) # c3 = 1 OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) - fw1 = @.. TI11*ff1+TI12*ff2+TI13*ff3 - fw2 = @.. TI21*ff1+TI22*ff2+TI23*ff3 - fw3 = @.. TI31*ff1+TI32*ff2+TI33*ff3 + fw1 = @.. TI11 * ff1 + TI12 * ff2 + TI13 * ff3 + fw2 = @.. TI21 * ff1 + TI22 * ff2 + TI23 * ff3 + fw3 = @.. TI31 * ff1 + TI32 * ff2 + TI33 * ff3 if mass_matrix isa UniformScaling # `UniformScaling` doesn't play nicely with broadcast - Mw1 = @.. mass_matrix.λ*w1 - Mw2 = @.. mass_matrix.λ*w2 - Mw3 = @.. mass_matrix.λ*w3 + Mw1 = @.. mass_matrix.λ * w1 + Mw2 = @.. mass_matrix.λ * w2 + Mw3 = @.. mass_matrix.λ * w3 else Mw1 = mass_matrix * w1 Mw2 = mass_matrix * w2 Mw3 = mass_matrix * w3 end - rhs1 = @.. fw1-γdt * Mw1 - rhs2 = @.. fw2 - αdt * Mw2+βdt * Mw3 - rhs3 = @.. fw3 - βdt * Mw2-αdt * Mw3 + rhs1 = @.. fw1 - γdt * Mw1 + rhs2 = @.. fw2 - αdt * Mw2 + βdt * Mw3 + rhs3 = @.. fw3 - βdt * Mw2 - αdt * Mw3 dw1 = _reshape(LU1 \ _vec(rhs1), axes(u)) - dw23 = _reshape(LU2 \ _vec(@.. rhs2+rhs3 * im), axes(u)) + dw23 = _reshape(LU2 \ _vec(@.. rhs2 + rhs3 * im), axes(u)) integrator.stats.nsolve += 2 dw2 = real(dw23) dw3 = imag(dw23) @@ -391,20 +401,20 @@ function _ode_addsteps!(integrator, cache::RadauIIA5ConstantCache, η = θ / (1 - θ) end - w1 = @.. w1-dw1 - w2 = @.. w2-dw2 - w3 = @.. w3-dw3 + w1 = @.. w1 - dw1 + w2 = @.. w2 - dw2 + w3 = @.. w3 - dw3 # transform `w` to `z` - z1 = @.. T11*w1+T12*w2+T13*w3 - z2 = @.. T21*w1+T22*w2+T23*w3 - z3 = @.. T31 * w1+w2 # T32 = 1, T33 = 0 + z1 = @.. T11 * w1 + T12 * w2 + T13 * w3 + z2 = @.. T21 * w1 + T22 * w2 + T23 * w3 + z3 = @.. T31 * w1 + w2 # T32 = 1, T33 = 0 # check stopping criterion if η * ndw < κ && (iter > 1 || iszero(ndw) || !iszero(integrator.success_iter)) # Newton method converges cache.status = η < alg.fast_convergence_cutoff ? FastConvergence : - Convergence + Convergence fail_convergence = false break end @@ -417,14 +427,14 @@ function _ode_addsteps!(integrator, cache::RadauIIA5ConstantCache, cache.ηold = η cache.iter = iter - u = @.. uprev+z3 + u = @.. uprev + z3 if integrator.EEst <= oneunit(integrator.EEst) if alg.extrapolant != :constant - integrator.k[3] = (z2 - z3)/c2m1 - tmp = @.. (z1 - z2)/c1mc2 - integrator.k[4] = (tmp - integrator.k[3])/c1m1 - integrator.k[5] = integrator.k[4]-(tmp - z1 / c1) / c2 + integrator.k[3] = (z2 - z3) / c2m1 + tmp = @.. (z1 - z2) / c1mc2 + integrator.k[4] = (tmp - integrator.k[3]) / c1m1 + integrator.k[5] = integrator.k[4] - (tmp - z1 / c1) / c2 end end @@ -434,15 +444,19 @@ end function _ode_addsteps!(integrator, cache::RadauIIA5Cache, repeat_step = false) (; t, dt, uprev, u, f, p, fsallast, fsalfirst, k) = integrator - (; T11, T12, T13, T21, T22, T23, T31, TI11, TI12, TI13, - TI21, TI22, TI23, TI31, TI32, TI33) = cache.tab + (; + T11, T12, T13, T21, T22, T23, T31, TI11, TI12, TI13, + TI21, TI22, TI23, TI31, TI32, TI33, + ) = cache.tab (; c1, c2, γ, α, β, e1, e2, e3) = cache.tab (; κ) = cache - (; z1, z2, z3, w1, w2, w3, - dw1, ubuff, dw23, cubuff, - k, k2, k3, fw1, fw2, fw3, - J, W1, W2, - tmp, atmp, jac_config, linsolve1, linsolve2, rtol, atol, step_limiter!) = cache + (; + z1, z2, z3, w1, w2, w3, + dw1, ubuff, dw23, cubuff, + k, k2, k3, fw1, fw2, fw3, + J, W1, W2, + tmp, atmp, jac_config, linsolve1, linsolve2, rtol, atol, step_limiter!, + ) = cache (; internalnorm, abstol, reltol, adaptive) = integrator.opts alg = unwrap_alg(integrator, true) (; maxiters) = alg @@ -466,12 +480,12 @@ function _ode_addsteps!(integrator, cache::RadauIIA5Cache, repeat_step = false) if integrator.iter == 1 || integrator.u_modified || alg.extrapolant == :constant cache.dtprev = one(cache.dtprev) uzero = zero(eltype(u)) - @.. z1=uzero - @.. z2=uzero - @.. z3=uzero - @.. w1=uzero - @.. w2=uzero - @.. w3=uzero + @.. z1 = uzero + @.. z2 = uzero + @.. z3 = uzero + @.. w1 = uzero + @.. w2 = uzero + @.. w3 = uzero @.. integrator.k[3] = uzero @.. integrator.k[4] = uzero @.. integrator.k[5] = uzero @@ -479,15 +493,21 @@ function _ode_addsteps!(integrator, cache::RadauIIA5Cache, repeat_step = false) c3′ = dt / cache.dtprev c1′ = c1 * c3′ c2′ = c2 * c3′ - @.. z1=c1′ * (integrator.k[3] + - (c1′ - c2m1) * (integrator.k[4] + (c1′ - c1m1) * integrator.k[5])) - @.. z1=c2′ * (integrator.k[3] + - (c2′ - c2m1) * (integrator.k[4] + (c2′ - c1m1) * integrator.k[5])) - @.. z1=c3′ * (integrator.k[3] + - (c3′ - c2m1) * (integrator.k[4] + (c3′ - c1m1) * integrator.k[5])) - @.. w1=TI11 * z1 + TI12 * z2 + TI13 * z3 - @.. w2=TI21 * z1 + TI22 * z2 + TI23 * z3 - @.. w3=TI31 * z1 + TI32 * z2 + TI33 * z3 + @.. z1 = c1′ * ( + integrator.k[3] + + (c1′ - c2m1) * (integrator.k[4] + (c1′ - c1m1) * integrator.k[5]) + ) + @.. z1 = c2′ * ( + integrator.k[3] + + (c2′ - c2m1) * (integrator.k[4] + (c2′ - c1m1) * integrator.k[5]) + ) + @.. z1 = c3′ * ( + integrator.k[3] + + (c3′ - c2m1) * (integrator.k[4] + (c3′ - c1m1) * integrator.k[5]) + ) + @.. w1 = TI11 * z1 + TI12 * z2 + TI13 * z3 + @.. w2 = TI21 * z1 + TI22 * z2 + TI23 * z3 + @.. w3 = TI31 * z1 + TI32 * z2 + TI33 * z3 end # Newton iteration @@ -501,17 +521,17 @@ function _ode_addsteps!(integrator, cache::RadauIIA5Cache, repeat_step = false) integrator.stats.nnonliniter += 1 # evaluate function - @.. tmp=uprev + z1 + @.. tmp = uprev + z1 f(fsallast, tmp, p, t + c1 * dt) - @.. tmp=uprev + z2 + @.. tmp = uprev + z2 f(k2, tmp, p, t + c2 * dt) - @.. tmp=uprev + z3 + @.. tmp = uprev + z3 f(k3, tmp, p, t + dt) # c3 = 1 OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) - @.. fw1=TI11 * fsallast + TI12 * k2 + TI13 * k3 - @.. fw2=TI21 * fsallast + TI22 * k2 + TI23 * k3 - @.. fw3=TI31 * fsallast + TI32 * k2 + TI33 * k3 + @.. fw1 = TI11 * fsallast + TI12 * k2 + TI13 * k3 + @.. fw2 = TI21 * fsallast + TI22 * k2 + TI23 * k3 + @.. fw3 = TI31 * fsallast + TI32 * k2 + TI33 * k3 if mass_matrix === I Mw1 = w1 @@ -533,32 +553,42 @@ function _ode_addsteps!(integrator, cache::RadauIIA5Cache, repeat_step = false) Mw3 = z3 end - @.. ubuff=fw1 - γdt * Mw1 + @.. ubuff = fw1 - γdt * Mw1 needfactor = iter == 1 && new_W linsolve1 = cache.linsolve1 if needfactor - linres1 = dolinsolve(integrator, linsolve1; A = W1, b = _vec(ubuff), - linu = _vec(dw1)) + linres1 = dolinsolve( + integrator, linsolve1; A = W1, b = _vec(ubuff), + linu = _vec(dw1) + ) else - linres1 = dolinsolve(integrator, linsolve1; A = nothing, b = _vec(ubuff), - linu = _vec(dw1)) + linres1 = dolinsolve( + integrator, linsolve1; A = nothing, b = _vec(ubuff), + linu = _vec(dw1) + ) end cache.linsolve1 = linres1.cache - @.. cubuff=complex(fw2 - αdt * Mw2 + βdt * Mw3, - fw3 - βdt * Mw2 - αdt * Mw3) + @.. cubuff = complex( + fw2 - αdt * Mw2 + βdt * Mw3, + fw3 - βdt * Mw2 - αdt * Mw3 + ) linsolve2 = cache.linsolve2 if needfactor - linres2 = dolinsolve(integrator, linsolve2; A = W2, b = _vec(cubuff), - linu = _vec(dw23)) + linres2 = dolinsolve( + integrator, linsolve2; A = W2, b = _vec(cubuff), + linu = _vec(dw23) + ) else - linres2 = dolinsolve(integrator, linsolve2; A = nothing, b = _vec(cubuff), - linu = _vec(dw23)) + linres2 = dolinsolve( + integrator, linsolve2; A = nothing, b = _vec(cubuff), + linu = _vec(dw23) + ) end cache.linsolve2 = linres2.cache @@ -566,8 +596,8 @@ function _ode_addsteps!(integrator, cache::RadauIIA5Cache, repeat_step = false) integrator.stats.nsolve += 2 dw2 = z2 dw3 = z3 - @.. dw2=real(dw23) - @.. dw3=imag(dw23) + @.. dw2 = real(dw23) + @.. dw3 = imag(dw23) # compute norm of residuals ndwprev = ndw @@ -591,20 +621,20 @@ function _ode_addsteps!(integrator, cache::RadauIIA5Cache, repeat_step = false) η = θ / (1 - θ) end - @.. w1=w1 - dw1 - @.. w2=w2 - dw2 - @.. w3=w3 - dw3 + @.. w1 = w1 - dw1 + @.. w2 = w2 - dw2 + @.. w3 = w3 - dw3 # transform `w` to `z` - @.. z1=T11 * w1 + T12 * w2 + T13 * w3 - @.. z2=T21 * w1 + T22 * w2 + T23 * w3 - @.. z3=T31 * w1 + w2 # T32 = 1, T33 = 0 + @.. z1 = T11 * w1 + T12 * w2 + T13 * w3 + @.. z2 = T21 * w1 + T22 * w2 + T23 * w3 + @.. z3 = T31 * w1 + w2 # T32 = 1, T33 = 0 # check stopping criterion if η * ndw < κ && (iter > 1 || iszero(ndw) || !iszero(integrator.success_iter)) # Newton method converges cache.status = η < alg.fast_convergence_cutoff ? FastConvergence : - Convergence + Convergence fail_convergence = false break end @@ -617,14 +647,14 @@ function _ode_addsteps!(integrator, cache::RadauIIA5Cache, repeat_step = false) cache.ηold = η cache.iter = iter - @.. u=uprev + z3 + @.. u = uprev + z3 step_limiter!(u, integrator, p, t + dt) if integrator.EEst <= oneunit(integrator.EEst) cache.dtprev = dt if alg.extrapolant != :constant integrator.k[3] = (z2 - z3) / c2m1 - @.. tmp=(z1 - z2) / c1mc2 + @.. tmp = (z1 - z2) / c1mc2 integrator.k[4] = (tmp - integrator.k[3]) / c1m1 integrator.k[5] = integrator.k[4] - (tmp - z1 / c1) / c2 end @@ -635,14 +665,20 @@ function _ode_addsteps!(integrator, cache::RadauIIA5Cache, repeat_step = false) return end -function _ode_addsteps!(integrator, cache::RadauIIA9ConstantCache, - repeat_step = false) +function _ode_addsteps!( + integrator, cache::RadauIIA9ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p, k) = integrator - (; T11, T12, T13, T14, T15, T21, T22, T23, T24, T25, T31, T32, - T33, T34, T35, T41, T42, T43, T44, T45, T51) = cache.tab#= T52 = 1, T53 = 0, T54 = 1, T55 = 0=# - (; TI11, - TI12, TI13, TI14, TI15, TI21, TI22, TI23, TI24, TI25, TI31, TI32, TI33, TI34, - TI35, TI41, TI42, TI43, TI44, TI45, TI51, TI52, TI53, TI54, TI55) = cache.tab + (; + T11, T12, T13, T14, T15, T21, T22, T23, T24, T25, T31, T32, + T33, T34, T35, T41, T42, T43, T44, T45, T51, + ) = cache.tab #= T52 = 1, T53 = 0, T54 = 1, T55 = 0=# + (; + TI11, + TI12, TI13, TI14, TI15, TI21, TI22, TI23, TI24, TI25, TI31, TI32, TI33, TI34, + TI35, TI41, TI42, TI43, TI44, TI45, TI51, TI52, TI53, TI54, TI55, + ) = cache.tab (; c1, c2, c3, c4, γ, α1, β1, α2, β2, e1, e2, e3, e4, e5) = cache.tab (; κ) = cache (; internalnorm, abstol, reltol, adaptive) = integrator.opts @@ -651,8 +687,8 @@ function _ode_addsteps!(integrator, cache::RadauIIA9ConstantCache, mass_matrix = integrator.f.mass_matrix # precalculations rtol pow is (num stages + 1)/(2*num stages) - rtol = @.. reltol^(3 / 5)/10 - atol = @.. rtol*(abstol / reltol) + rtol = @.. reltol^(3 / 5) / 10 + atol = @.. rtol * (abstol / reltol) c1m1 = c1 - 1 c2m1 = c2 - 1 c3m1 = c3 - 1 @@ -701,30 +737,58 @@ function _ode_addsteps!(integrator, cache::RadauIIA9ConstantCache, c2′ = c2 * c5′ c3′ = c3 * c5′ c4′ = c4 * c5′ - z1 = @.. c1′ * (k[3] + - (c1′-c4m1) * (k[4] + - (c1′ - c3m1) * (k[5] + - (c1′ - c2m1) * (k[6] + (c1′ - c1m1) * k[7])))) - z2 = @.. c2′ * (k[3] + - (c2′-c4m1) * (k[4] + - (c2′ - c3m1) * (k[5] + - (c2′ - c2m1) * (k[6] + (c2′ - c1m1) * k[7])))) - z3 = @.. c3′ * (k[3] + - (c3′-c4m1) * (k[4] + - (c3′ - c3m1) * (k[5] + - (c3′ - c2m1) * (k[6] + (c3′ - c1m1) * k[7])))) - z4 = @.. c4′ * (k[3] + - (c4′-c4m1) * (k[4] + - (c4′ - c3m1) * (k[5] + - (c4′ - c2m1) * (k[6] + (c4′ - c1m1) * k[7])))) - z5 = @.. c5′ * (k[3] + - (c5′-c4m1) * (k[4] + - (c5′ - c3m1) * (k[5] + (c5′ - c2m1) * (k[6] + (c5′ - c1m1) * k[7])))) - w1 = @.. TI11*z1+TI12*z2+TI13*z3+TI14*z4+TI15*z5 - w2 = @.. TI21*z1+TI22*z2+TI23*z3+TI24*z4+TI25*z5 - w3 = @.. TI31*z1+TI32*z2+TI33*z3+TI34*z4+TI35*z5 - w4 = @.. TI41*z1+TI42*z2+TI43*z3+TI44*z4+TI45*z5 - w5 = @.. TI51*z1+TI52*z2+TI53*z3+TI54*z4+TI55*z5 + z1 = @.. c1′ * ( + k[3] + + (c1′ - c4m1) * ( + k[4] + + (c1′ - c3m1) * ( + k[5] + + (c1′ - c2m1) * (k[6] + (c1′ - c1m1) * k[7]) + ) + ) + ) + z2 = @.. c2′ * ( + k[3] + + (c2′ - c4m1) * ( + k[4] + + (c2′ - c3m1) * ( + k[5] + + (c2′ - c2m1) * (k[6] + (c2′ - c1m1) * k[7]) + ) + ) + ) + z3 = @.. c3′ * ( + k[3] + + (c3′ - c4m1) * ( + k[4] + + (c3′ - c3m1) * ( + k[5] + + (c3′ - c2m1) * (k[6] + (c3′ - c1m1) * k[7]) + ) + ) + ) + z4 = @.. c4′ * ( + k[3] + + (c4′ - c4m1) * ( + k[4] + + (c4′ - c3m1) * ( + k[5] + + (c4′ - c2m1) * (k[6] + (c4′ - c1m1) * k[7]) + ) + ) + ) + z5 = @.. c5′ * ( + k[3] + + (c5′ - c4m1) * ( + k[4] + + (c5′ - c3m1) * (k[5] + (c5′ - c2m1) * (k[6] + (c5′ - c1m1) * k[7])) + ) + ) + w1 = @.. TI11 * z1 + TI12 * z2 + TI13 * z3 + TI14 * z4 + TI15 * z5 + w2 = @.. TI21 * z1 + TI22 * z2 + TI23 * z3 + TI24 * z4 + TI25 * z5 + w3 = @.. TI31 * z1 + TI32 * z2 + TI33 * z3 + TI34 * z4 + TI35 * z5 + w4 = @.. TI41 * z1 + TI42 * z2 + TI43 * z3 + TI44 * z4 + TI45 * z5 + w5 = @.. TI51 * z1 + TI52 * z2 + TI53 * z3 + TI54 * z4 + TI55 * z5 end # Newton iteration @@ -745,18 +809,18 @@ function _ode_addsteps!(integrator, cache::RadauIIA9ConstantCache, ff5 = f(uprev + z5, p, t + dt) # c5 = 1 OrdinaryDiffEqCore.increment_nf!(integrator.stats, 5) - fw1 = @.. TI11*ff1+TI12*ff2+TI13*ff3+TI14*ff4+TI15*ff5 - fw2 = @.. TI21*ff1+TI22*ff2+TI23*ff3+TI24*ff4+TI25*ff5 - fw3 = @.. TI31*ff1+TI32*ff2+TI33*ff3+TI34*ff4+TI35*ff5 - fw4 = @.. TI41*ff1+TI42*ff2+TI43*ff3+TI44*ff4+TI45*ff5 - fw5 = @.. TI51*ff1+TI52*ff2+TI53*ff3+TI54*ff4+TI55*ff5 + fw1 = @.. TI11 * ff1 + TI12 * ff2 + TI13 * ff3 + TI14 * ff4 + TI15 * ff5 + fw2 = @.. TI21 * ff1 + TI22 * ff2 + TI23 * ff3 + TI24 * ff4 + TI25 * ff5 + fw3 = @.. TI31 * ff1 + TI32 * ff2 + TI33 * ff3 + TI34 * ff4 + TI35 * ff5 + fw4 = @.. TI41 * ff1 + TI42 * ff2 + TI43 * ff3 + TI44 * ff4 + TI45 * ff5 + fw5 = @.. TI51 * ff1 + TI52 * ff2 + TI53 * ff3 + TI54 * ff4 + TI55 * ff5 if mass_matrix isa UniformScaling # `UniformScaling` doesn't play nicely with broadcast - Mw1 = @.. mass_matrix.λ*w1 - Mw2 = @.. mass_matrix.λ*w2 - Mw3 = @.. mass_matrix.λ*w3 - Mw4 = @.. mass_matrix.λ*w4 - Mw5 = @.. mass_matrix.λ*w5 + Mw1 = @.. mass_matrix.λ * w1 + Mw2 = @.. mass_matrix.λ * w2 + Mw3 = @.. mass_matrix.λ * w3 + Mw4 = @.. mass_matrix.λ * w4 + Mw5 = @.. mass_matrix.λ * w5 else Mw1 = mass_matrix * w1 Mw2 = mass_matrix * w2 @@ -765,14 +829,14 @@ function _ode_addsteps!(integrator, cache::RadauIIA9ConstantCache, Mw5 = mass_matrix * w5 end - rhs1 = @.. fw1-γdt * Mw1 - rhs2 = @.. fw2 - α1dt * Mw2+β1dt * Mw3 - rhs3 = @.. fw3 - β1dt * Mw2-α1dt * Mw3 - rhs4 = @.. fw4 - α2dt * Mw4+β2dt * Mw5 - rhs5 = @.. fw5 - β2dt * Mw4-α2dt * Mw5 + rhs1 = @.. fw1 - γdt * Mw1 + rhs2 = @.. fw2 - α1dt * Mw2 + β1dt * Mw3 + rhs3 = @.. fw3 - β1dt * Mw2 - α1dt * Mw3 + rhs4 = @.. fw4 - α2dt * Mw4 + β2dt * Mw5 + rhs5 = @.. fw5 - β2dt * Mw4 - α2dt * Mw5 dw1 = _reshape(LU1 \ _vec(rhs1), axes(u)) - dw23 = _reshape(LU2 \ _vec(@.. rhs2+rhs3 * im), axes(u)) - dw45 = _reshape(LU3 \ _vec(@.. rhs4+rhs5 * im), axes(u)) + dw23 = _reshape(LU2 \ _vec(@.. rhs2 + rhs3 * im), axes(u)) + dw45 = _reshape(LU3 \ _vec(@.. rhs4 + rhs5 * im), axes(u)) integrator.stats.nsolve += 3 dw2 = real(dw23) dw3 = imag(dw23) @@ -787,7 +851,7 @@ function _ode_addsteps!(integrator, cache::RadauIIA9ConstantCache, atmp4 = calculate_residuals(dw4, uprev, u, atol, rtol, internalnorm, t) atmp5 = calculate_residuals(dw5, uprev, u, atol, rtol, internalnorm, t) ndw = internalnorm(atmp1, t) + internalnorm(atmp2, t) + internalnorm(atmp3, t) + - internalnorm(atmp4, t) + internalnorm(atmp5, t) + internalnorm(atmp4, t) + internalnorm(atmp5, t) # check divergence (not in initial step) @@ -802,24 +866,24 @@ function _ode_addsteps!(integrator, cache::RadauIIA9ConstantCache, η = θ / (1 - θ) end - w1 = @.. w1-dw1 - w2 = @.. w2-dw2 - w3 = @.. w3-dw3 - w4 = @.. w4-dw4 - w5 = @.. w5-dw5 + w1 = @.. w1 - dw1 + w2 = @.. w2 - dw2 + w3 = @.. w3 - dw3 + w4 = @.. w4 - dw4 + w5 = @.. w5 - dw5 # transform `w` to `z` - z1 = @.. T11*w1+T12*w2+T13*w3+T14*w4+T15*w5 - z2 = @.. T21*w1+T22*w2+T23*w3+T24*w4+T25*w5 - z3 = @.. T31*w1+T32*w2+T33*w3+T34*w4+T35*w5 - z4 = @.. T41*w1+T42*w2+T43*w3+T44*w4+T45*w5 - z5 = @.. T51*w1+w2+w4#= T52=1, T53=0, T54=1, T55=0 =# + z1 = @.. T11 * w1 + T12 * w2 + T13 * w3 + T14 * w4 + T15 * w5 + z2 = @.. T21 * w1 + T22 * w2 + T23 * w3 + T24 * w4 + T25 * w5 + z3 = @.. T31 * w1 + T32 * w2 + T33 * w3 + T34 * w4 + T35 * w5 + z4 = @.. T41 * w1 + T42 * w2 + T43 * w3 + T44 * w4 + T45 * w5 + z5 = @.. T51 * w1 + w2 + w4 #= T52=1, T53=0, T54=1, T55=0 =# # check stopping criterion if η * ndw < κ && (iter > 1 || iszero(ndw) || !iszero(integrator.success_iter)) # Newton method converges cache.status = η < alg.fast_convergence_cutoff ? FastConvergence : - Convergence + Convergence fail_convergence = false break end @@ -833,7 +897,7 @@ function _ode_addsteps!(integrator, cache::RadauIIA9ConstantCache, #cache.ηold = η #cache.iter = iter - u = @.. uprev+z5 + u = @.. uprev + z5 if integrator.EEst <= oneunit(integrator.EEst) #cache.dtprev = dt @@ -866,19 +930,25 @@ end function _ode_addsteps!(integrator, cache::RadauIIA9Cache, repeat_step = false) (; t, dt, uprev, u, f, p, fsallast, fslafirst, k) = integrator - (; T11, T12, T13, T14, T15, T21, T22, T23, T24, T25, T31, T32, - T33, T34, T35, T41, T42, T43, T44, T45, T51) = cache.tab#= T52 = 1, T53 = 0, T54 = 1, T55 = 0=# - (; TI11, - TI12, TI13, TI14, TI15, TI21, TI22, TI23, TI24, TI25, TI31, TI32, TI33, TI34, - TI35, TI41, TI42, TI43, TI44, TI45, TI51, TI52, TI53, TI54, TI55) = cache.tab + (; + T11, T12, T13, T14, T15, T21, T22, T23, T24, T25, T31, T32, + T33, T34, T35, T41, T42, T43, T44, T45, T51, + ) = cache.tab #= T52 = 1, T53 = 0, T54 = 1, T55 = 0=# + (; + TI11, + TI12, TI13, TI14, TI15, TI21, TI22, TI23, TI24, TI25, TI31, TI32, TI33, TI34, + TI35, TI41, TI42, TI43, TI44, TI45, TI51, TI52, TI53, TI54, TI55, + ) = cache.tab (; c1, c2, c3, c4, γ, α1, β1, α2, β2, e1, e2, e3, e4, e5) = cache.tab (; κ) = cache (; z1, z2, z3, z4, z5, w1, w2, w3, w4, w5) = cache (; dw1, ubuff, dw23, dw45, cubuff1, cubuff2) = cache (; k, k2, k3, k4, k5, fw1, fw2, fw3, fw4, fw5) = cache (; J, W1, W2, W3) = cache - (; tmp, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8, tmp9, tmp10, atmp, jac_config, - linsolve1, linsolve2, linsolve3, rtol, atol, step_limiter!) = cache + (; + tmp, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8, tmp9, tmp10, atmp, jac_config, + linsolve1, linsolve2, linsolve3, rtol, atol, step_limiter!, + ) = cache (; internalnorm, abstol, reltol, adaptive) = integrator.opts alg = unwrap_alg(integrator, true) (; maxiters) = alg @@ -911,52 +981,82 @@ function _ode_addsteps!(integrator, cache::RadauIIA9Cache, repeat_step = false) if integrator.iter == 1 || integrator.u_modified || alg.extrapolant == :constant cache.dtprev = one(cache.dtprev) uzero = zero(eltype(u)) - @.. z1=uzero - @.. z2=uzero - @.. z3=uzero - @.. z4=uzero - @.. z5=uzero - @.. w1=uzero - @.. w2=uzero - @.. w3=uzero - @.. w4=uzero - @.. w5=uzero - @.. integrator.k[3]=uzero - @.. integrator.k[4]=uzero - @.. integrator.k[5]=uzero - @.. integrator.k[6]=uzero - @.. integrator.k[7]=uzero + @.. z1 = uzero + @.. z2 = uzero + @.. z3 = uzero + @.. z4 = uzero + @.. z5 = uzero + @.. w1 = uzero + @.. w2 = uzero + @.. w3 = uzero + @.. w4 = uzero + @.. w5 = uzero + @.. integrator.k[3] = uzero + @.. integrator.k[4] = uzero + @.. integrator.k[5] = uzero + @.. integrator.k[6] = uzero + @.. integrator.k[7] = uzero else c5′ = dt / cache.dtprev c1′ = c1 * c5′ c2′ = c2 * c5′ c3′ = c3 * c5′ c4′ = c4 * c5′ - @.. z1 = c1′ * (integrator.k[3] + - (c1′-c4m1) * (integrator.k[4] + - (c1′ - c3m1) * (integrator.k[5] + - (c1′ - c2m1) * (integrator.k[6] + (c1′ - c1m1) * integrator.k[7])))) - @.. z2 = c2′ * (integrator.k[3] + - (c2′-c4m1) * (integrator.k[4] + - (c2′ - c3m1) * (integrator.k[5] + - (c2′ - c2m1) * (integrator.k[6] + (c2′ - c1m1) * integrator.k[7])))) - @.. z3 = c3′ * (integrator.k[3] + - (c3′-c4m1) * (integrator.k[4] + - (c3′ - c3m1) * (integrator.k[5] + - (c3′ - c2m1) * (integrator.k[6] + (c3′ - c1m1) * integrator.k[7])))) - @.. z4 = c4′ * (integrator.k[3] + - (c4′-c4m1) * (integrator.k[4] + - (c4′ - c3m1) * (integrator.k[5] + - (c4′ - c2m1) * (integrator.k[6] + (c4′ - c1m1) * integrator.k[7])))) - @.. z5 = c5′ * (integrator.k[3] + - (c5′-c4m1) * (integrator.k[4] + - (c5′ - c3m1) * (integrator.k[5] + - (c5′ - c2m1) * (integrator.k[6] + (c5′ - c1m1) * integrator.k[7])))) - @.. w1 = TI11*z1+TI12*z2+TI13*z3+TI14*z4+TI15*z5 - @.. w2 = TI21*z1+TI22*z2+TI23*z3+TI24*z4+TI25*z5 - @.. w3 = TI31*z1+TI32*z2+TI33*z3+TI34*z4+TI35*z5 - @.. w4 = TI41*z1+TI42*z2+TI43*z3+TI44*z4+TI45*z5 - @.. w5 = TI51*z1+TI52*z2+TI53*z3+TI54*z4+TI55*z5 + @.. z1 = c1′ * ( + integrator.k[3] + + (c1′ - c4m1) * ( + integrator.k[4] + + (c1′ - c3m1) * ( + integrator.k[5] + + (c1′ - c2m1) * (integrator.k[6] + (c1′ - c1m1) * integrator.k[7]) + ) + ) + ) + @.. z2 = c2′ * ( + integrator.k[3] + + (c2′ - c4m1) * ( + integrator.k[4] + + (c2′ - c3m1) * ( + integrator.k[5] + + (c2′ - c2m1) * (integrator.k[6] + (c2′ - c1m1) * integrator.k[7]) + ) + ) + ) + @.. z3 = c3′ * ( + integrator.k[3] + + (c3′ - c4m1) * ( + integrator.k[4] + + (c3′ - c3m1) * ( + integrator.k[5] + + (c3′ - c2m1) * (integrator.k[6] + (c3′ - c1m1) * integrator.k[7]) + ) + ) + ) + @.. z4 = c4′ * ( + integrator.k[3] + + (c4′ - c4m1) * ( + integrator.k[4] + + (c4′ - c3m1) * ( + integrator.k[5] + + (c4′ - c2m1) * (integrator.k[6] + (c4′ - c1m1) * integrator.k[7]) + ) + ) + ) + @.. z5 = c5′ * ( + integrator.k[3] + + (c5′ - c4m1) * ( + integrator.k[4] + + (c5′ - c3m1) * ( + integrator.k[5] + + (c5′ - c2m1) * (integrator.k[6] + (c5′ - c1m1) * integrator.k[7]) + ) + ) + ) + @.. w1 = TI11 * z1 + TI12 * z2 + TI13 * z3 + TI14 * z4 + TI15 * z5 + @.. w2 = TI21 * z1 + TI22 * z2 + TI23 * z3 + TI24 * z4 + TI25 * z5 + @.. w3 = TI31 * z1 + TI32 * z2 + TI33 * z3 + TI34 * z4 + TI35 * z5 + @.. w4 = TI41 * z1 + TI42 * z2 + TI43 * z3 + TI44 * z4 + TI45 * z5 + @.. w5 = TI51 * z1 + TI52 * z2 + TI53 * z3 + TI54 * z4 + TI55 * z5 end # Newton iteration @@ -970,28 +1070,28 @@ function _ode_addsteps!(integrator, cache::RadauIIA9Cache, repeat_step = false) integrator.stats.nnonliniter += 1 # evaluate function - @.. tmp=uprev + z1 + @.. tmp = uprev + z1 f(fsallast, tmp, p, t + c1 * dt) - @.. tmp=uprev + z2 + @.. tmp = uprev + z2 f(k2, tmp, p, t + c2 * dt) - @.. tmp=uprev + z3 + @.. tmp = uprev + z3 f(k3, tmp, p, t + c3 * dt) - @.. tmp=uprev + z4 + @.. tmp = uprev + z4 f(k4, tmp, p, t + c4 * dt) - @.. tmp=uprev + z5 + @.. tmp = uprev + z5 f(k5, tmp, p, t + dt) # c5 = 1 OrdinaryDiffEqCore.increment_nf!(integrator.stats, 5) - @.. fw1=TI11 * fsallast + TI12 * k2 + TI13 * k3 + TI14 * k4 + - TI15 * k5 - @.. fw2=TI21 * fsallast + TI22 * k2 + TI23 * k3 + TI24 * k4 + - TI25 * k5 - @.. fw3=TI31 * fsallast + TI32 * k2 + TI33 * k3 + TI34 * k4 + - TI35 * k5 - @.. fw4=TI41 * fsallast + TI42 * k2 + TI43 * k3 + TI44 * k4 + - TI45 * k5 - @.. fw5=TI51 * fsallast + TI52 * k2 + TI53 * k3 + TI54 * k4 + - TI55 * k5 + @.. fw1 = TI11 * fsallast + TI12 * k2 + TI13 * k3 + TI14 * k4 + + TI15 * k5 + @.. fw2 = TI21 * fsallast + TI22 * k2 + TI23 * k3 + TI24 * k4 + + TI25 * k5 + @.. fw3 = TI31 * fsallast + TI32 * k2 + TI33 * k3 + TI34 * k4 + + TI35 * k5 + @.. fw4 = TI41 * fsallast + TI42 * k2 + TI43 * k3 + TI44 * k4 + + TI45 * k5 + @.. fw5 = TI51 * fsallast + TI52 * k2 + TI53 * k3 + TI54 * k4 + + TI55 * k5 if mass_matrix === I Mw1 = w1 @@ -1023,59 +1123,67 @@ function _ode_addsteps!(integrator, cache::RadauIIA9Cache, repeat_step = false) Mw5 = z5 end - @.. ubuff=fw1 - γdt * Mw1 + @.. ubuff = fw1 - γdt * Mw1 needfactor = iter == 1 && new_W linsolve1 = cache.linsolve1 if needfactor linres1 = dolinsolve( - integrator, linsolve1; A = W1, b = _vec(ubuff), linu = _vec(dw1)) + integrator, linsolve1; A = W1, b = _vec(ubuff), linu = _vec(dw1) + ) else linres1 = dolinsolve( - integrator, linsolve1; A = nothing, b = _vec(ubuff), linu = _vec(dw1)) + integrator, linsolve1; A = nothing, b = _vec(ubuff), linu = _vec(dw1) + ) end cache.linsolve1 = linres1.cache - @.. cubuff1=complex( - fw2 - α1dt * Mw2 + β1dt * Mw3, fw3 - β1dt * Mw2 - α1dt * Mw3) + @.. cubuff1 = complex( + fw2 - α1dt * Mw2 + β1dt * Mw3, fw3 - β1dt * Mw2 - α1dt * Mw3 + ) linsolve2 = cache.linsolve2 if needfactor linres2 = dolinsolve( - integrator, linsolve2; A = W2, b = _vec(cubuff1), linu = _vec(dw23)) + integrator, linsolve2; A = W2, b = _vec(cubuff1), linu = _vec(dw23) + ) else linres2 = dolinsolve( - integrator, linsolve2; A = nothing, b = _vec(cubuff1), linu = _vec(dw23)) + integrator, linsolve2; A = nothing, b = _vec(cubuff1), linu = _vec(dw23) + ) end cache.linsolve2 = linres2.cache - @.. cubuff2=complex( - fw4 - α2dt * Mw4 + β2dt * Mw5, fw5 - β2dt * Mw4 - α2dt * Mw5) + @.. cubuff2 = complex( + fw4 - α2dt * Mw4 + β2dt * Mw5, fw5 - β2dt * Mw4 - α2dt * Mw5 + ) linsolve3 = cache.linsolve3 if needfactor linres3 = dolinsolve( - integrator, linsolve3; A = W3, b = _vec(cubuff2), linu = _vec(dw45)) + integrator, linsolve3; A = W3, b = _vec(cubuff2), linu = _vec(dw45) + ) else linres3 = dolinsolve( - integrator, linsolve3; A = nothing, b = _vec(cubuff2), linu = _vec(dw45)) + integrator, linsolve3; A = nothing, b = _vec(cubuff2), linu = _vec(dw45) + ) end cache.linsolve3 = linres3.cache integrator.stats.nsolve += 3 dw2 = z2 dw3 = z3 - @.. dw2=real(dw23) - @.. dw3=imag(dw23) + @.. dw2 = real(dw23) + @.. dw3 = imag(dw23) dw4 = z4 dw5 = z5 - @.. dw4=real(dw45) - @.. dw5=imag(dw45) + @.. dw4 = real(dw45) + @.. dw5 = imag(dw45) # compute norm of residuals ndwprev = ndw @@ -1104,24 +1212,24 @@ function _ode_addsteps!(integrator, cache::RadauIIA9Cache, repeat_step = false) η = θ / (1 - θ) end - @.. w1=w1 - dw1 - @.. w2=w2 - dw2 - @.. w3=w3 - dw3 - @.. w4=w4 - dw4 - @.. w5=w5 - dw5 + @.. w1 = w1 - dw1 + @.. w2 = w2 - dw2 + @.. w3 = w3 - dw3 + @.. w4 = w4 - dw4 + @.. w5 = w5 - dw5 # transform `w` to `z` - @.. z1=T11 * w1 + T12 * w2 + T13 * w3 + T14 * w4 + T15 * w5 - @.. z2=T21 * w1 + T22 * w2 + T23 * w3 + T24 * w4 + T25 * w5 - @.. z3=T31 * w1 + T32 * w2 + T33 * w3 + T34 * w4 + T35 * w5 - @.. z4=T41 * w1 + T42 * w2 + T43 * w3 + T44 * w4 + T45 * w5 - @.. z5=T51 * w1 + w2 + w4#= T52=1, T53=0, T54=1, T55=0 =# + @.. z1 = T11 * w1 + T12 * w2 + T13 * w3 + T14 * w4 + T15 * w5 + @.. z2 = T21 * w1 + T22 * w2 + T23 * w3 + T24 * w4 + T25 * w5 + @.. z3 = T31 * w1 + T32 * w2 + T33 * w3 + T34 * w4 + T35 * w5 + @.. z4 = T41 * w1 + T42 * w2 + T43 * w3 + T44 * w4 + T45 * w5 + @.. z5 = T51 * w1 + w2 + w4 #= T52=1, T53=0, T54=1, T55=0 =# # check stopping criterion if η * ndw < κ && (iter > 1 || iszero(ndw) || !iszero(integrator.success_iter)) # Newton method converges cache.status = η < alg.fast_convergence_cutoff ? FastConvergence : - Convergence + Convergence fail_convergence = false break end @@ -1135,7 +1243,7 @@ function _ode_addsteps!(integrator, cache::RadauIIA9Cache, repeat_step = false) cache.ηold = η cache.iter = iter - @.. u=uprev + z5 + @.. u = uprev + z5 step_limiter!(u, integrator, p, t + dt) @@ -1174,8 +1282,8 @@ function _ode_addstep!(integrator, cache::AdaptiveRadauConstantCache, repeat_ste mass_matrix = integrator.f.mass_matrix # precalculations rtol pow is (num stages + 1)/(2*num stages) - rtol = @.. reltol^((num_stages + 1) / (num_stages * 2))/10 - atol = @.. rtol*(abstol / reltol) + rtol = @.. reltol^((num_stages + 1) / (num_stages * 2)) / 10 + atol = @.. rtol * (abstol / reltol) γdt, αdt, βdt = γ / dt, α ./ dt, β ./ dt J = calc_J(integrator, cache) @@ -1292,7 +1400,9 @@ function _ode_addstep!(integrator, cache::AdaptiveRadauConstantCache, repeat_ste for i in 1:num_stages ndw += internalnorm( calculate_residuals( - z[i], uprev, u, atol, rtol, internalnorm, t), t) + z[i], uprev, u, atol, rtol, internalnorm, t + ), t + ) end # check divergence (not in initial step) @@ -1331,7 +1441,7 @@ function _ode_addstep!(integrator, cache::AdaptiveRadauConstantCache, repeat_ste if η * ndw < κ && (iter > 1 || iszero(ndw) || !iszero(integrator.success_iter)) # Newton method converges cache.status = η < alg.fast_convergence_cutoff ? FastConvergence : - Convergence + Convergence fail_convergence = false break end @@ -1356,11 +1466,15 @@ function _ode_addstep!(integrator, cache::AdaptiveRadauConstantCache, repeat_ste derivatives[1, j] = @.. (z[j - 1] - z[j]) / (c[j - 1] - c[j]) #first derivatives end for i in 2:num_stages - derivatives[i, i] = @.. (derivatives[i - 1, i] - - derivatives[i - 1, i - 1]) / c[i] + derivatives[i, i] = @.. ( + derivatives[i - 1, i] - + derivatives[i - 1, i - 1] + ) / c[i] for j in (i + 1):num_stages - derivatives[i, j] = @.. (derivatives[i - 1, j - 1] - - derivatives[i - 1, j]) / (c[j - i] - c[j]) #all others + derivatives[i, j] = @.. ( + derivatives[i - 1, j - 1] - + derivatives[i - 1, j] + ) / (c[j - i] - c[j]) #all others end end for i in 1:num_stages @@ -1394,8 +1508,8 @@ function _ode_addsteps!(integrator, cache::AdaptiveRadauCache, repeat_step = fal # precalculations γdt = γ / dt for i in 1:((num_stages - 1) ÷ 2) - αdt[i] = α[i]/dt - βdt[i] = β[i]/dt + αdt[i] = α[i] / dt + βdt[i] = β[i] / dt end if integrator.opts.adaptive @@ -1404,8 +1518,8 @@ function _ode_addsteps!(integrator, cache::AdaptiveRadauCache, repeat_step = fal cache.rtol = reltol^((num_stages + 1) / (2 * num_stages)) / 10 cache.atol = cache.rtol * (abstol / reltol) else - @.. cache.rtol=reltol^((num_stages + 1) / (2 * num_stages)) / 10 - @.. cache.atol=cache.rtol * (abstol / reltol) + @.. cache.rtol = reltol^((num_stages + 1) / (2 * num_stages)) / 10 + @.. cache.atol = cache.rtol * (abstol / reltol) end end @@ -1423,12 +1537,12 @@ function _ode_addsteps!(integrator, cache::AdaptiveRadauCache, repeat_step = fal end else let W1 = W1, W2 = W2, γdt = γdt, αdt = αdt, βdt = βdt, - mass_matrix = mass_matrix, num_stages = num_stages, J = J + mass_matrix = mass_matrix, num_stages = num_stages, J = J @inbounds @threaded alg.threading for i in 1:((num_stages - 1) ÷ 2) for II in CartesianIndices(J) W2[i][II] = -(αdt[i] + βdt[i] * im) * mass_matrix[Tuple(II)...] + - J[II] + J[II] end end end @@ -1513,42 +1627,52 @@ function _ode_addsteps!(integrator, cache::AdaptiveRadauCache, repeat_step = fal if needfactor cache.linsolve1 = dolinsolve( - integrator, linsolve1; A = W1, b = _vec(ubuff), linu = _vec(dw1)).cache + integrator, linsolve1; A = W1, b = _vec(ubuff), linu = _vec(dw1) + ).cache else cache.linsolve1 = dolinsolve( - integrator, linsolve1; A = nothing, b = _vec(ubuff), linu = _vec(dw1)).cache + integrator, linsolve1; A = nothing, b = _vec(ubuff), linu = _vec(dw1) + ).cache end if !isthreaded(alg.threading) for i in 1:((num_stages - 1) ÷ 2) - @.. cubuff[i]=complex( + @.. cubuff[i] = complex( fw[2 * i] - αdt[i] * Mw[2 * i] + βdt[i] * Mw[2 * i + 1], - fw[2 * i + 1] - βdt[i] * Mw[2 * i] - αdt[i] * Mw[2 * i + 1]) + fw[2 * i + 1] - βdt[i] * Mw[2 * i] - αdt[i] * Mw[2 * i + 1] + ) if needfactor - cache.linsolve2[i] = dolinsolve(integrator, linsolve2[i]; A = W2[i], - b = _vec(cubuff[i]), linu = _vec(dw2[i])).cache + cache.linsolve2[i] = dolinsolve( + integrator, linsolve2[i]; A = W2[i], + b = _vec(cubuff[i]), linu = _vec(dw2[i]) + ).cache else - cache.linsolve2[i] = dolinsolve(integrator, linsolve2[i]; A = nothing, - b = _vec(cubuff[i]), linu = _vec(dw2[i])).cache + cache.linsolve2[i] = dolinsolve( + integrator, linsolve2[i]; A = nothing, + b = _vec(cubuff[i]), linu = _vec(dw2[i]) + ).cache end end else let integrator = integrator, linsolve2 = linsolve2, fw = fw, αdt = αdt, - βdt = βdt, Mw = Mw, W1 = W1, W2 = W2, cubuff = cubuff, dw2 = dw2, - needfactor = needfactor + βdt = βdt, Mw = Mw, W1 = W1, W2 = W2, cubuff = cubuff, dw2 = dw2, + needfactor = needfactor @threaded alg.threading for i in 1:((num_stages - 1) ÷ 2) - @.. cubuff[i]=complex( + @.. cubuff[i] = complex( fw[2 * i] - αdt[i] * Mw[2 * i] + βdt[i] * Mw[2 * i + 1], - fw[2 * i + 1] - βdt[i] * Mw[2 * i] - αdt[i] * Mw[2 * i + 1]) + fw[2 * i + 1] - βdt[i] * Mw[2 * i] - αdt[i] * Mw[2 * i + 1] + ) if needfactor cache.linsolve2[i] = dolinsolve( integrator, linsolve2[i]; A = W2[i], - b = _vec(cubuff[i]), linu = _vec(dw2[i])).cache + b = _vec(cubuff[i]), linu = _vec(dw2[i]) + ).cache else cache.linsolve2[i] = dolinsolve( integrator, linsolve2[i]; A = nothing, - b = _vec(cubuff[i]), linu = _vec(dw2[i])).cache + b = _vec(cubuff[i]), linu = _vec(dw2[i]) + ).cache end end end @@ -1607,7 +1731,7 @@ function _ode_addsteps!(integrator, cache::AdaptiveRadauCache, repeat_step = fal if η * ndw < κ && (iter > 1 || iszero(ndw) || !iszero(integrator.success_iter)) # Newton method converges cache.status = η < alg.fast_convergence_cutoff ? FastConvergence : - Convergence + Convergence fail_convergence = false break end @@ -1621,7 +1745,7 @@ function _ode_addsteps!(integrator, cache::AdaptiveRadauCache, repeat_step = fal cache.ηold = η cache.iter = iter - @.. u=uprev + z[num_stages] + @.. u = uprev + z[num_stages] step_limiter!(u, integrator, p, t + dt) @@ -1633,11 +1757,15 @@ function _ode_addsteps!(integrator, cache::AdaptiveRadauCache, repeat_step = fal @.. derivatives[1, j] = (z[j - 1] - z[j]) / (c[j - 1] - c[j]) #first derivatives end for i in 2:num_stages - @.. derivatives[i, i] = (derivatives[i - 1, i] - - derivatives[i - 1, i - 1]) / c[i] + @.. derivatives[i, i] = ( + derivatives[i - 1, i] - + derivatives[i - 1, i - 1] + ) / c[i] for j in (i + 1):num_stages - @.. derivatives[i, j] = (derivatives[i - 1, j - 1] - - derivatives[i - 1, j]) / (c[j - i] - c[j]) #all others + @.. derivatives[i, j] = ( + derivatives[i - 1, j - 1] - + derivatives[i - 1, j] + ) / (c[j - i] - c[j]) #all others end end for i in 1:num_stages diff --git a/lib/OrdinaryDiffEqFIRK/src/firk_caches.jl b/lib/OrdinaryDiffEqFIRK/src/firk_caches.jl index 6f99a62cf3..96c577a10e 100644 --- a/lib/OrdinaryDiffEqFIRK/src/firk_caches.jl +++ b/lib/OrdinaryDiffEqFIRK/src/firk_caches.jl @@ -2,7 +2,7 @@ abstract type FIRKMutableCache <: OrdinaryDiffEqMutableCache end get_fsalfirstlast(cache::FIRKMutableCache, u) = (cache.fsalfirst, cache.k) mutable struct RadauIIA3ConstantCache{F, Tab, Tol, Dt, U, JType} <: - OrdinaryDiffEqConstantCache + OrdinaryDiffEqConstantCache uf::F tab::Tab κ::Tol @@ -16,10 +16,12 @@ mutable struct RadauIIA3ConstantCache{F, Tab, Tol, Dt, U, JType} <: J::JType end -function alg_cache(alg::RadauIIA3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RadauIIA3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} uf = UDerivativeWrapper(f, t, p) uToltype = constvalue(uBottomEltypeNoUnits) tab = RadauIIA3Tableau(uToltype, constvalue(tTypeNoUnits)) @@ -27,12 +29,16 @@ function alg_cache(alg::RadauIIA3, u, rate_prototype, ::Type{uEltypeNoUnits}, κ = convert(uToltype, 1 // 100) J = false .* _vec(rate_prototype) .* _vec(rate_prototype)' - RadauIIA3ConstantCache(uf, tab, κ, one(uToltype), 10000, u, u, dt, dt, - Convergence, J) + return RadauIIA3ConstantCache( + uf, tab, κ, one(uToltype), 10000, u, u, dt, dt, + Convergence, J + ) end -mutable struct RadauIIA3Cache{uType, cuType, uNoUnitsType, rateType, JType, W1Type, UF, JC, - F1, Tab, Tol, Dt, rTol, aTol, StepLimiter} <: FIRKMutableCache +mutable struct RadauIIA3Cache{ + uType, cuType, uNoUnitsType, rateType, JType, W1Type, UF, JC, + F1, Tab, Tol, Dt, rTol, aTol, StepLimiter, + } <: FIRKMutableCache u::uType uprev::uType z1::uType @@ -66,10 +72,12 @@ mutable struct RadauIIA3Cache{uType, cuType, uNoUnitsType, rateType, JType, W1Ty step_limiter!::StepLimiter end -function alg_cache(alg::RadauIIA3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RadauIIA3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} uf = UJacobianWrapper(f, t, p) uToltype = constvalue(uBottomEltypeNoUnits) tab = RadauIIA3Tableau(uToltype, constvalue(tTypeNoUnits)) @@ -105,25 +113,28 @@ function alg_cache(alg::RadauIIA3, u, rate_prototype, ::Type{uEltypeNoUnits}, linprob = LinearProblem(W1, _vec(cubuff); u0 = _vec(dw12)) linsolve = init( linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true), - assumptions = LinearSolve.OperatorAssumptions(true)) + assumptions = LinearSolve.OperatorAssumptions(true) + ) #Pl = LinearSolve.InvPreconditioner(Diagonal(_vec(weight))), #Pr = Diagonal(_vec(weight))) rtol = reltol isa Number ? reltol : zero(reltol) atol = reltol isa Number ? reltol : zero(reltol) - RadauIIA3Cache(u, uprev, + return RadauIIA3Cache( + u, uprev, z1, z2, w1, w2, dw12, cubuff, du1, fsalfirst, k, k2, fw1, fw2, J, W1, uf, tab, κ, one(uToltype), 10000, tmp, atmp, jac_config, linsolve, rtol, atol, dt, dt, - Convergence, alg.step_limiter!) + Convergence, alg.step_limiter! + ) end mutable struct RadauIIA5ConstantCache{F, Tab, Tol, Dt, U, JType} <: - OrdinaryDiffEqConstantCache + OrdinaryDiffEqConstantCache uf::F tab::Tab κ::Tol @@ -138,10 +149,12 @@ mutable struct RadauIIA5ConstantCache{F, Tab, Tol, Dt, U, JType} <: J::JType end -function alg_cache(alg::RadauIIA5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RadauIIA5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} uf = UDerivativeWrapper(f, t, p) uToltype = constvalue(uBottomEltypeNoUnits) tab = RadauIIA5Tableau(uToltype, constvalue(tTypeNoUnits)) @@ -149,13 +162,17 @@ function alg_cache(alg::RadauIIA5, u, rate_prototype, ::Type{uEltypeNoUnits}, κ = alg.κ !== nothing ? convert(uToltype, alg.κ) : convert(uToltype, 1 // 100) J = false .* _vec(rate_prototype) .* _vec(rate_prototype)' - RadauIIA5ConstantCache(uf, tab, κ, one(uToltype), 10000, u, u, u, dt, dt, - Convergence, J) + return RadauIIA5ConstantCache( + uf, tab, κ, one(uToltype), 10000, u, u, u, dt, dt, + Convergence, J + ) end -mutable struct RadauIIA5Cache{uType, cuType, uNoUnitsType, rateType, JType, W1Type, W2Type, - UF, JC, F1, F2, Tab, Tol, Dt, rTol, aTol, StepLimiter} <: - FIRKMutableCache +mutable struct RadauIIA5Cache{ + uType, cuType, uNoUnitsType, rateType, JType, W1Type, W2Type, + UF, JC, F1, F2, Tab, Tol, Dt, rTol, aTol, StepLimiter, + } <: + FIRKMutableCache u::uType uprev::uType z1::uType @@ -197,10 +214,12 @@ mutable struct RadauIIA5Cache{uType, cuType, uNoUnitsType, rateType, JType, W1Ty step_limiter!::StepLimiter end -function alg_cache(alg::RadauIIA5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RadauIIA5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} uf = UJacobianWrapper(f, t, p) uToltype = constvalue(uBottomEltypeNoUnits) tab = RadauIIA5Tableau(uToltype, constvalue(tTypeNoUnits)) @@ -245,31 +264,35 @@ function alg_cache(alg::RadauIIA5, u, rate_prototype, ::Type{uEltypeNoUnits}, linprob = LinearProblem(W1, _vec(ubuff); u0 = _vec(dw1)) linsolve1 = init( linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true), - assumptions = LinearSolve.OperatorAssumptions(true)) + assumptions = LinearSolve.OperatorAssumptions(true) + ) #Pl = LinearSolve.InvPreconditioner(Diagonal(_vec(weight))), #Pr = Diagonal(_vec(weight))) linprob = LinearProblem(W2, _vec(cubuff); u0 = _vec(dw23)) linsolve2 = init( linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true), - assumptions = LinearSolve.OperatorAssumptions(true)) + assumptions = LinearSolve.OperatorAssumptions(true) + ) #Pl = LinearSolve.InvPreconditioner(Diagonal(_vec(weight))), #Pr = Diagonal(_vec(weight))) rtol = reltol isa Number ? reltol : zero(reltol) atol = reltol isa Number ? reltol : zero(reltol) - RadauIIA5Cache(u, uprev, + return RadauIIA5Cache( + u, uprev, z1, z2, z3, w1, w2, w3, dw1, ubuff, dw23, cubuff, du1, fsalfirst, k, k2, k3, fw1, fw2, fw3, J, W1, W2, uf, tab, κ, one(uToltype), 10000, tmp, atmp, jac_config, linsolve1, linsolve2, rtol, atol, dt, dt, - Convergence, alg.step_limiter!) + Convergence, alg.step_limiter! + ) end mutable struct RadauIIA9ConstantCache{F, Tab, Tol, Dt, U, JType} <: - OrdinaryDiffEqConstantCache + OrdinaryDiffEqConstantCache uf::F tab::Tab κ::Tol @@ -286,10 +309,12 @@ mutable struct RadauIIA9ConstantCache{F, Tab, Tol, Dt, U, JType} <: J::JType end -function alg_cache(alg::RadauIIA9, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RadauIIA9, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} uf = UDerivativeWrapper(f, t, p) uToltype = constvalue(uBottomEltypeNoUnits) tab = RadauIIA9Tableau(uToltype, constvalue(tTypeNoUnits)) @@ -297,13 +322,17 @@ function alg_cache(alg::RadauIIA9, u, rate_prototype, ::Type{uEltypeNoUnits}, κ = alg.κ !== nothing ? convert(uToltype, alg.κ) : convert(uToltype, 1 // 100) J = false .* _vec(rate_prototype) .* _vec(rate_prototype)' - RadauIIA9ConstantCache(uf, tab, κ, one(uToltype), 10000, u, u, u, u, u, dt, dt, - Convergence, J) + return RadauIIA9ConstantCache( + uf, tab, κ, one(uToltype), 10000, u, u, u, u, u, dt, dt, + Convergence, J + ) end -mutable struct RadauIIA9Cache{uType, cuType, uNoUnitsType, rateType, JType, W1Type, W2Type, - UF, JC, F1, F2, Tab, Tol, Dt, rTol, aTol, StepLimiter} <: - FIRKMutableCache +mutable struct RadauIIA9Cache{ + uType, cuType, uNoUnitsType, rateType, JType, W1Type, W2Type, + UF, JC, F1, F2, Tab, Tol, Dt, rTol, aTol, StepLimiter, + } <: + FIRKMutableCache u::uType uprev::uType z1::uType @@ -366,10 +395,12 @@ mutable struct RadauIIA9Cache{uType, cuType, uNoUnitsType, rateType, JType, W1Ty step_limiter!::StepLimiter end -function alg_cache(alg::RadauIIA9, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RadauIIA9, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} uf = UJacobianWrapper(f, t, p) uToltype = constvalue(uBottomEltypeNoUnits) tab = RadauIIA9Tableau(uToltype, constvalue(tTypeNoUnits)) @@ -437,26 +468,30 @@ function alg_cache(alg::RadauIIA9, u, rate_prototype, ::Type{uEltypeNoUnits}, linprob = LinearProblem(W1, _vec(ubuff); u0 = _vec(dw1)) linsolve1 = init( linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true), - assumptions = LinearSolve.OperatorAssumptions(true)) + assumptions = LinearSolve.OperatorAssumptions(true) + ) #Pl = LinearSolve.InvPreconditioner(Diagonal(_vec(weight))), #Pr = Diagonal(_vec(weight))) linprob = LinearProblem(W2, _vec(cubuff1); u0 = _vec(dw23)) linsolve2 = init( linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true), - assumptions = LinearSolve.OperatorAssumptions(true)) + assumptions = LinearSolve.OperatorAssumptions(true) + ) #Pl = LinearSolve.InvPreconditioner(Diagonal(_vec(weight))), #Pr = Diagonal(_vec(weight))) linprob = LinearProblem(W3, _vec(cubuff2); u0 = _vec(dw45)) linsolve3 = init( linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true), - assumptions = LinearSolve.OperatorAssumptions(true)) + assumptions = LinearSolve.OperatorAssumptions(true) + ) #Pl = LinearSolve.InvPreconditioner(Diagonal(_vec(weight))), #Pr = Diagonal(_vec(weight))) rtol = reltol isa Number ? reltol : zero(reltol) atol = reltol isa Number ? reltol : zero(reltol) - RadauIIA9Cache(u, uprev, + return RadauIIA9Cache( + u, uprev, z1, z2, z3, z4, z5, w1, w2, w3, w4, w5, dw1, ubuff, dw23, dw45, cubuff1, cubuff2, du1, fsalfirst, k, k2, k3, k4, k5, fw1, fw2, fw3, fw4, fw5, @@ -464,11 +499,12 @@ function alg_cache(alg::RadauIIA9, u, rate_prototype, ::Type{uEltypeNoUnits}, uf, tab, κ, one(uToltype), 10000, tmp, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8, tmp9, tmp10, atmp, jac_config, linsolve1, linsolve2, linsolve3, rtol, atol, dt, dt, - Convergence, alg.step_limiter!) + Convergence, alg.step_limiter! + ) end mutable struct AdaptiveRadauConstantCache{F, Tab, Tol, Dt, U, JType} <: - OrdinaryDiffEqConstantCache + OrdinaryDiffEqConstantCache uf::F tabs::Vector{Tab} κ::Tol @@ -485,10 +521,12 @@ mutable struct AdaptiveRadauConstantCache{F, Tab, Tol, Dt, U, JType} <: index::Int end -function alg_cache(alg::AdaptiveRadau, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::AdaptiveRadau, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} uf = UDerivativeWrapper(f, t, p) uToltype = constvalue(uBottomEltypeNoUnits) @@ -503,8 +541,10 @@ function alg_cache(alg::AdaptiveRadau, u, rate_prototype, ::Type{uEltypeNoUnits} end num_stages = min_stages - tabs = [RadauIIATableau(uToltype, constvalue(tTypeNoUnits), i) - for i in min_stages:2:max_stages] + tabs = [ + RadauIIATableau(uToltype, constvalue(tTypeNoUnits), i) + for i in min_stages:2:max_stages + ] cont = Vector{typeof(u)}(undef, max_stages) for i in 1:max_stages cont[i] = zero(u) @@ -514,14 +554,17 @@ function alg_cache(alg::AdaptiveRadau, u, rate_prototype, ::Type{uEltypeNoUnits} κ = alg.κ !== nothing ? convert(uToltype, alg.κ) : convert(uToltype, 1 // 100) J = false .* _vec(rate_prototype) .* _vec(rate_prototype)' - AdaptiveRadauConstantCache(uf, tabs, κ, one(uToltype), 10000, cont, dt, dt, - Convergence, J, num_stages, 1, 0.0, index) + return AdaptiveRadauConstantCache( + uf, tabs, κ, one(uToltype), 10000, cont, dt, dt, + Convergence, J, num_stages, 1, 0.0, index + ) end mutable struct AdaptiveRadauCache{ - uType, cuType, tType, uNoUnitsType, rateType, JType, W1Type, W2Type, - UF, JC, F1, F2, Tab, Tol, Dt, rTol, aTol, StepLimiter} <: - FIRKMutableCache + uType, cuType, tType, uNoUnitsType, rateType, JType, W1Type, W2Type, + UF, JC, F1, F2, Tab, Tol, Dt, rTol, aTol, StepLimiter, + } <: + FIRKMutableCache u::uType uprev::uType z::Vector{uType} @@ -565,10 +608,12 @@ mutable struct AdaptiveRadauCache{ index::Int end -function alg_cache(alg::AdaptiveRadau, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::AdaptiveRadau, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} uf = UJacobianWrapper(f, t, p) uToltype = constvalue(uBottomEltypeNoUnits) @@ -583,8 +628,10 @@ function alg_cache(alg::AdaptiveRadau, u, rate_prototype, ::Type{uEltypeNoUnits} end num_stages = min_stages - tabs = [RadauIIATableau(uToltype, constvalue(tTypeNoUnits), i) - for i in min_stages:2:max_stages] + tabs = [ + RadauIIATableau(uToltype, constvalue(tTypeNoUnits), i) + for i in min_stages:2:max_stages + ] index = 1 @@ -644,23 +691,31 @@ function alg_cache(alg::AdaptiveRadau, u, rate_prototype, ::Type{uEltypeNoUnits} linprob = LinearProblem(W1, _vec(ubuff); u0 = _vec(dw1)) linsolve1 = init( linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true), - assumptions = LinearSolve.OperatorAssumptions(true)) - - linsolve2 = [init(LinearProblem(W2[i], _vec(cubuff[i]); u0 = _vec(dw2[i])), - alg.linsolve, alias = LinearAliasSpecifier( - alias_A = true, alias_b = true), - assumptions = LinearSolve.OperatorAssumptions(true)) - for i in 1:((max_stages - 1) ÷ 2)] + assumptions = LinearSolve.OperatorAssumptions(true) + ) + + linsolve2 = [ + init( + LinearProblem(W2[i], _vec(cubuff[i]); u0 = _vec(dw2[i])), + alg.linsolve, alias = LinearAliasSpecifier( + alias_A = true, alias_b = true + ), + assumptions = LinearSolve.OperatorAssumptions(true) + ) + for i in 1:((max_stages - 1) ÷ 2) + ] rtol = reltol isa Number ? reltol : zero(reltol) atol = reltol isa Number ? reltol : zero(reltol) - AdaptiveRadauCache(u, uprev, + return AdaptiveRadauCache( + u, uprev, z, w, c_prime, αdt, βdt, dw1, ubuff, dw2, cubuff, dw, derivatives, du1, fsalfirst, ks, k, fw, J, W1, W2, uf, tabs, κ, one(uToltype), 10000, tmp, atmp, jac_config, linsolve1, linsolve2, rtol, atol, dt, dt, - Convergence, alg.step_limiter!, num_stages, 1, 0.0, index) + Convergence, alg.step_limiter!, num_stages, 1, 0.0, index + ) end diff --git a/lib/OrdinaryDiffEqFIRK/src/firk_interpolants.jl b/lib/OrdinaryDiffEqFIRK/src/firk_interpolants.jl index 4913dcb67f..0c1613c39f 100644 --- a/lib/OrdinaryDiffEqFIRK/src/firk_interpolants.jl +++ b/lib/OrdinaryDiffEqFIRK/src/firk_interpolants.jl @@ -1,10 +1,12 @@ FIRK_WITH_INTERPOLATIONS = Union{ RadauIIA3ConstantCache, RadauIIA3Cache, RadauIIA5ConstantCache, RadauIIA5Cache, - RadauIIA9ConstantCache, RadauIIA9Cache, AdaptiveRadauConstantCache, AdaptiveRadauCache} + RadauIIA9ConstantCache, RadauIIA9Cache, AdaptiveRadauConstantCache, AdaptiveRadauCache, +} @muladd function _ode_interpolant( Θ, dt, y₀, y₁, k, cache::Union{RadauIIA3ConstantCache, RadauIIA3Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars) + idxs::Nothing, T::Type{Val{0}}, differential_vars + ) (; cont1, cont2) = cache (; c1) = cache.tab c1m1 = c1 - 1 @@ -14,7 +16,8 @@ end @muladd function _ode_interpolant!( out, Θ, dt, y₀, y₁, k, cache::Union{RadauIIA3ConstantCache, RadauIIA3Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars) + idxs::Nothing, T::Type{Val{0}}, differential_vars + ) (; c1) = cache.tab c1m1 = c1 - 1 Θdt = 1 - Θ @@ -23,17 +26,19 @@ end @muladd function _ode_interpolant( Θ, dt, y₀, y₁, k, cache::Union{RadauIIA5ConstantCache, RadauIIA5Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars) + idxs::Nothing, T::Type{Val{0}}, differential_vars + ) (; c1, c2) = cache.tab c1m1 = c1 - 1 c2m1 = c2 - 1 - Θdt = 1-Θ + Θdt = 1 - Θ @.. y₁ - Θdt * (k[3] - (Θdt + c2m1) * (k[4] - (Θdt + c1m1) * k[5])) end @muladd function _ode_interpolant!( out, Θ, dt, y₀, y₁, k, cache::Union{RadauIIA5ConstantCache, RadauIIA5Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars) + idxs::Nothing, T::Type{Val{0}}, differential_vars + ) (; c1, c2) = cache.tab (; dtprev) = cache c1m1 = c1 - 1 @@ -44,7 +49,8 @@ end @muladd function _ode_interpolant( Θ, dt, y₀, y₁, k, cache::Union{RadauIIA9ConstantCache, RadauIIA9Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars) + idxs::Nothing, T::Type{Val{0}}, differential_vars + ) (; c1, c2, c3, c4) = cache.tab c1m1 = c1 - 1 c2m1 = c2 - 1 @@ -52,14 +58,17 @@ end c4m1 = c4 - 1 Θdt = 1 - Θ @.. y₁ - - Θdt * (k[3] - - (Θdt + c4m1) * - (k[4] - (Θdt + c3m1) * (k[5] - (Θdt + c2m1) * (k[6] - (Θdt + c1m1) * k[7])))) + Θdt * ( + k[3] - + (Θdt + c4m1) * + (k[4] - (Θdt + c3m1) * (k[5] - (Θdt + c2m1) * (k[6] - (Θdt + c1m1) * k[7]))) + ) end @muladd function _ode_interpolant!( out, Θ, dt, y₀, y₁, k, cache::Union{RadauIIA9ConstantCache, RadauIIA9Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars) + idxs::Nothing, T::Type{Val{0}}, differential_vars + ) (; c1, c2, c3, c4) = cache.tab c1m1 = c1 - 1 c2m1 = c2 - 1 @@ -67,14 +76,17 @@ end c4m1 = c4 - 1 Θdt = 1 - Θ @.. out = y₁ - - Θdt * (k[3] - - (Θdt + c4m1) * - (k[4] - (Θdt + c3m1) * (k[5] - (Θdt + c2m1) * (k[6] - (Θdt + c1m1) * k[7])))) + Θdt * ( + k[3] - + (Θdt + c4m1) * + (k[4] - (Θdt + c3m1) * (k[5] - (Θdt + c2m1) * (k[6] - (Θdt + c1m1) * k[7]))) + ) end @muladd function _ode_interpolant( Θ, dt, y₀, y₁, k, cache::Union{AdaptiveRadauConstantCache, AdaptiveRadauCache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars) + idxs::Nothing, T::Type{Val{0}}, differential_vars + ) (; num_stages, index) = cache (; c) = cache.tabs[index] Θdt = 1 - Θ @@ -91,7 +103,8 @@ end @muladd function _ode_interpolant!( out, Θ, dt, y₀, y₁, k, cache::Union{AdaptiveRadauConstantCache, AdaptiveRadauCache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars) + idxs::Nothing, T::Type{Val{0}}, differential_vars + ) (; num_stages, index) = cache (; c) = cache.tabs[index] Θdt = 1 - Θ diff --git a/lib/OrdinaryDiffEqFIRK/src/firk_perform_step.jl b/lib/OrdinaryDiffEqFIRK/src/firk_perform_step.jl index 1f84f924ec..a636fbd0e6 100644 --- a/lib/OrdinaryDiffEqFIRK/src/firk_perform_step.jl +++ b/lib/OrdinaryDiffEqFIRK/src/firk_perform_step.jl @@ -36,7 +36,7 @@ function initialize!(integrator, cache::RadauIIA3ConstantCache) integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - nothing + return nothing end function initialize!(integrator, cache::RadauIIA3Cache) @@ -54,11 +54,11 @@ function initialize!(integrator, cache::RadauIIA3Cache) cache.rtol = reltol^(2 / 3) / 10 cache.atol = cache.rtol * (abstol / reltol) else - @.. cache.rtol=reltol^(2 / 3) / 10 - @.. cache.atol=cache.rtol * (abstol / reltol) + @.. cache.rtol = reltol^(2 / 3) / 10 + @.. cache.atol = cache.rtol * (abstol / reltol) end end - nothing + return nothing end function initialize!(integrator, cache::RadauIIA5ConstantCache) @@ -74,7 +74,7 @@ function initialize!(integrator, cache::RadauIIA5ConstantCache) integrator.k[3] = zero(integrator.fsalfirst) integrator.k[4] = zero(integrator.fsalfirst) integrator.k[5] = zero(integrator.fsalfirst) - nothing + return nothing end function initialize!(integrator, cache::RadauIIA5Cache) @@ -93,11 +93,11 @@ function initialize!(integrator, cache::RadauIIA5Cache) cache.rtol = reltol^(2 / 3) / 10 cache.atol = cache.rtol * (abstol / reltol) else - @.. cache.rtol=reltol^(2 / 3) / 10 - @.. cache.atol=cache.rtol * (abstol / reltol) + @.. cache.rtol = reltol^(2 / 3) / 10 + @.. cache.atol = cache.rtol * (abstol / reltol) end end - nothing + return nothing end function initialize!(integrator, cache::RadauIIA9ConstantCache) @@ -115,7 +115,7 @@ function initialize!(integrator, cache::RadauIIA9ConstantCache) integrator.k[5] = zero(integrator.fsalfirst) integrator.k[6] = zero(integrator.fsalfirst) integrator.k[7] = zero(integrator.fsalfirst) - nothing + return nothing end function initialize!(integrator, cache::RadauIIA9Cache) @@ -136,11 +136,11 @@ function initialize!(integrator, cache::RadauIIA9Cache) cache.rtol = reltol^(3 / 5) / 10 cache.atol = cache.rtol * (abstol / reltol) else - @.. cache.rtol=reltol^(3 / 5) / 10 - @.. cache.atol=cache.rtol * (abstol / reltol) + @.. cache.rtol = reltol^(3 / 5) / 10 + @.. cache.atol = cache.rtol * (abstol / reltol) end end - nothing + return nothing end function initialize!(integrator, cache::AdaptiveRadauConstantCache) @@ -157,7 +157,7 @@ function initialize!(integrator, cache::AdaptiveRadauConstantCache) for i in 3:(max_stages + 2) integrator.k[i] = zero(integrator.fsallast) end - nothing + return nothing end function initialize!(integrator, cache::AdaptiveRadauCache) @@ -171,7 +171,7 @@ function initialize!(integrator, cache::AdaptiveRadauCache) end integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - nothing + return nothing end @muladd function perform_step!(integrator, cache::RadauIIA3ConstantCache) @@ -279,7 +279,7 @@ end if η * ndw < κ && (iter > 1 || iszero(ndw) || !iszero(integrator.success_iter)) # Newton method converges cache.status = η < alg.fast_convergence_cutoff ? FastConvergence : - Convergence + Convergence fail_convergence = false break end @@ -316,11 +316,13 @@ end (; T11, T12, T21, T22, TI11, TI12, TI21, TI22) = cache.tab (; c1, c2, α, β, e1, e2) = cache.tab (; κ) = cache - (; z1, z2, w1, w2, - dw12, cubuff, - k, k2, fw1, fw2, - J, W1, - tmp, atmp, jac_config, rtol, atol, step_limiter!) = cache + (; + z1, z2, w1, w2, + dw12, cubuff, + k, k2, fw1, fw2, + J, W1, + tmp, atmp, jac_config, rtol, atol, step_limiter!, + ) = cache (; internalnorm, abstol, reltol, adaptive) = integrator.opts alg = unwrap_alg(integrator, true) (; maxiters) = alg @@ -340,19 +342,19 @@ end if integrator.iter == 1 || integrator.u_modified || alg.extrapolant == :constant cache.dtprev = one(cache.dtprev) uzero = zero(eltype(u)) - @.. z1=uzero - @.. z2=uzero - @.. w1=uzero - @.. w2=uzero - @.. integrator.k[3]=uzero - @.. integrator.k[4]=uzero + @.. z1 = uzero + @.. z2 = uzero + @.. w1 = uzero + @.. w2 = uzero + @.. integrator.k[3] = uzero + @.. integrator.k[4] = uzero else c2′ = dt / cache.dtprev c1′ = c1 * c2′ - @.. z1=c1′ * (integrator.k[3] + (c1′ - c1m1) * integrator.k[4]) - @.. z2=c2′ * (integrator.k[3] + (c2′ - c1m1) * integrator.k[4]) - @.. w1=TI11 * z1 + TI12 * z2 - @.. w2=TI21 * z1 + TI22 * z2 + @.. z1 = c1′ * (integrator.k[3] + (c1′ - c1m1) * integrator.k[4]) + @.. z2 = c2′ * (integrator.k[3] + (c2′ - c1m1) * integrator.k[4]) + @.. w1 = TI11 * z1 + TI12 * z2 + @.. w2 = TI21 * z1 + TI22 * z2 end # Newton iteration @@ -395,11 +397,15 @@ end linsolve = cache.linsolve if needfactor - linres = dolinsolve(integrator, linsolve; A = W1, b = _vec(cubuff), - linu = _vec(dw12)) + linres = dolinsolve( + integrator, linsolve; A = W1, b = _vec(cubuff), + linu = _vec(dw12) + ) else - linres = dolinsolve(integrator, linsolve; A = nothing, b = _vec(cubuff), - linu = _vec(dw12)) + linres = dolinsolve( + integrator, linsolve; A = nothing, b = _vec(cubuff), + linu = _vec(dw12) + ) end cache.linsolve = linres.cache @@ -437,7 +443,7 @@ end if η * ndw < κ && (iter > 1 || iszero(ndw) || !iszero(integrator.success_iter)) # Newton method converges cache.status = η < alg.fast_convergence_cutoff ? FastConvergence : - Convergence + Convergence fail_convergence = false break end @@ -473,11 +479,15 @@ end return end -@muladd function perform_step!(integrator, cache::RadauIIA5ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::RadauIIA5ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p, k) = integrator - (; T11, T12, T13, T21, T22, T23, T31, TI11, TI12, TI13, - TI21, TI22, TI23, TI31, TI32, TI33) = cache.tab + (; + T11, T12, T13, T21, T22, T23, T31, TI11, TI12, TI13, + TI21, TI22, TI23, TI31, TI32, TI33, + ) = cache.tab (; c1, c2, γ, α, β, e1, e2, e3) = cache.tab (; κ, cont1, cont2, cont3) = cache (; internalnorm, abstol, reltol, adaptive) = integrator.opts @@ -486,8 +496,8 @@ end mass_matrix = integrator.f.mass_matrix # precalculations - rtol = @.. reltol^(2 / 3)/10 - atol = @.. rtol*(abstol / reltol) + rtol = @.. reltol^(2 / 3) / 10 + atol = @.. rtol * (abstol / reltol) c1m1 = c1 - 1 c2m1 = c2 - 1 c1mc2 = c1 - c2 @@ -522,9 +532,9 @@ end z1 = @.. c1′ * (k[3] + (c1′ - c2m1) * (k[4] + (c1′ - c1m1) * k[5])) z2 = @.. c2′ * (k[3] + (c2′ - c2m1) * (k[4] + (c2′ - c1m1) * k[5])) z3 = @.. c3′ * (k[3] + (c3′ - c2m1) * (k[4] + (c3′ - c1m1) * k[5])) - w1 = @.. TI11*z1+TI12*z2+TI13*z3 - w2 = @.. TI21*z1+TI22*z2+TI23*z3 - w3 = @.. TI31*z1+TI32*z2+TI33*z3 + w1 = @.. TI11 * z1 + TI12 * z2 + TI13 * z3 + w2 = @.. TI21 * z1 + TI22 * z2 + TI23 * z3 + w3 = @.. TI31 * z1 + TI32 * z2 + TI33 * z3 end # Newton iteration @@ -543,25 +553,25 @@ end ff3 = f(uprev + z3, p, t + dt) # c3 = 1 OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) - fw1 = @.. TI11*ff1+TI12*ff2+TI13*ff3 - fw2 = @.. TI21*ff1+TI22*ff2+TI23*ff3 - fw3 = @.. TI31*ff1+TI32*ff2+TI33*ff3 + fw1 = @.. TI11 * ff1 + TI12 * ff2 + TI13 * ff3 + fw2 = @.. TI21 * ff1 + TI22 * ff2 + TI23 * ff3 + fw3 = @.. TI31 * ff1 + TI32 * ff2 + TI33 * ff3 if mass_matrix isa UniformScaling # `UniformScaling` doesn't play nicely with broadcast - Mw1 = @.. mass_matrix.λ*w1 - Mw2 = @.. mass_matrix.λ*w2 - Mw3 = @.. mass_matrix.λ*w3 + Mw1 = @.. mass_matrix.λ * w1 + Mw2 = @.. mass_matrix.λ * w2 + Mw3 = @.. mass_matrix.λ * w3 else Mw1 = mass_matrix * w1 Mw2 = mass_matrix * w2 Mw3 = mass_matrix * w3 end - rhs1 = @.. fw1-γdt * Mw1 - rhs2 = @.. fw2 - αdt * Mw2+βdt * Mw3 - rhs3 = @.. fw3 - βdt * Mw2-αdt * Mw3 + rhs1 = @.. fw1 - γdt * Mw1 + rhs2 = @.. fw2 - αdt * Mw2 + βdt * Mw3 + rhs3 = @.. fw3 - βdt * Mw2 - αdt * Mw3 dw1 = _reshape(LU1 \ _vec(rhs1), axes(u)) - dw23 = _reshape(LU2 \ _vec(@.. rhs2+rhs3 * im), axes(u)) + dw23 = _reshape(LU2 \ _vec(@.. rhs2 + rhs3 * im), axes(u)) integrator.stats.nsolve += 2 dw2 = real(dw23) dw3 = imag(dw23) @@ -584,20 +594,20 @@ end η = θ / (1 - θ) end - w1 = @.. w1-dw1 - w2 = @.. w2-dw2 - w3 = @.. w3-dw3 + w1 = @.. w1 - dw1 + w2 = @.. w2 - dw2 + w3 = @.. w3 - dw3 # transform `w` to `z` - z1 = @.. T11*w1+T12*w2+T13*w3 - z2 = @.. T21*w1+T22*w2+T23*w3 - z3 = @.. T31 * w1+w2 # T32 = 1, T33 = 0 + z1 = @.. T11 * w1 + T12 * w2 + T13 * w3 + z2 = @.. T21 * w1 + T22 * w2 + T23 * w3 + z3 = @.. T31 * w1 + w2 # T32 = 1, T33 = 0 # check stopping criterion if η * ndw < κ && (iter > 1 || iszero(ndw) || !iszero(integrator.success_iter)) # Newton method converges cache.status = η < alg.fast_convergence_cutoff ? FastConvergence : - Convergence + Convergence fail_convergence = false break end @@ -610,13 +620,13 @@ end cache.ηold = η cache.iter = iter - u = @.. uprev+z3 + u = @.. uprev + z3 if adaptive e1dt, e2dt, e3dt = e1 / dt, e2 / dt, e3 / dt - tmp = @.. e1dt*z1+e2dt*z2+e3dt*z3 + tmp = @.. e1dt * z1 + e2dt * z2 + e3dt * z3 mass_matrix != I && (tmp = mass_matrix * tmp) - utilde = @.. integrator.fsalfirst+tmp + utilde = @.. integrator.fsalfirst + tmp if alg.smooth_est utilde = _reshape(LU1 \ _vec(utilde), axes(u)) integrator.stats.nsolve += 1 @@ -627,10 +637,10 @@ end integrator.EEst = internalnorm(atmp, t) if !(integrator.EEst < oneunit(integrator.EEst)) && integrator.iter == 1 || - integrator.u_modified + integrator.u_modified f0 = f(uprev .+ utilde, p, t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - utilde = @.. f0+tmp + utilde = @.. f0 + tmp alg.smooth_est && (utilde = LU1 \ utilde; integrator.stats.nsolve += 1) atmp = calculate_residuals(utilde, uprev, u, atol, rtol, internalnorm, t) integrator.EEst = internalnorm(atmp, t) @@ -640,10 +650,10 @@ end if integrator.EEst <= oneunit(integrator.EEst) cache.dtprev = dt if alg.extrapolant != :constant - integrator.k[3] = (z2 - z3)/c2m1 - tmp = @.. (z1 - z2)/c1mc2 - integrator.k[4] = (tmp - integrator.k[3])/c1m1 - integrator.k[5] = integrator.k[4]-(tmp - z1 / c1) / c2 + integrator.k[3] = (z2 - z3) / c2m1 + tmp = @.. (z1 - z2) / c1mc2 + integrator.k[4] = (tmp - integrator.k[3]) / c1m1 + integrator.k[5] = integrator.k[4] - (tmp - z1 / c1) / c2 end end @@ -657,16 +667,20 @@ end @muladd function perform_step!(integrator, cache::RadauIIA5Cache, repeat_step = false) (; t, dt, uprev, u, f, p, fsallast, fsalfirst, k) = integrator - (; T11, T12, T13, T21, T22, T23, T31, TI11, TI12, TI13, - TI21, TI22, TI23, TI31, TI32, TI33) = cache.tab + (; + T11, T12, T13, T21, T22, T23, T31, TI11, TI12, TI13, + TI21, TI22, TI23, TI31, TI32, TI33, + ) = cache.tab (; c1, c2, γ, α, β, e1, e2, e3) = cache.tab (; κ) = cache linres1 = nothing - (; z1, z2, z3, w1, w2, w3, - dw1, ubuff, dw23, cubuff, - k, k2, k3, fw1, fw2, fw3, - J, W1, W2, - tmp, atmp, jac_config, linsolve1, linsolve2, rtol, atol, step_limiter!) = cache + (; + z1, z2, z3, w1, w2, w3, + dw1, ubuff, dw23, cubuff, + k, k2, k3, fw1, fw2, fw3, + J, W1, W2, + tmp, atmp, jac_config, linsolve1, linsolve2, rtol, atol, step_limiter!, + ) = cache (; internalnorm, abstol, reltol, adaptive) = integrator.opts alg = unwrap_alg(integrator, true) (; maxiters) = alg @@ -691,28 +705,34 @@ end if integrator.iter == 1 || integrator.u_modified || alg.extrapolant == :constant cache.dtprev = one(cache.dtprev) uzero = zero(eltype(u)) - @.. z1=uzero - @.. z2=uzero - @.. z3=uzero - @.. w1=uzero - @.. w2=uzero - @.. w3=uzero - @.. integrator.k[3]=uzero - @.. integrator.k[4]=uzero - @.. integrator.k[5]=uzero + @.. z1 = uzero + @.. z2 = uzero + @.. z3 = uzero + @.. w1 = uzero + @.. w2 = uzero + @.. w3 = uzero + @.. integrator.k[3] = uzero + @.. integrator.k[4] = uzero + @.. integrator.k[5] = uzero else c3′ = dt / cache.dtprev c1′ = c1 * c3′ c2′ = c2 * c3′ - @.. z1=c1′ * (integrator.k[3] + - (c1′ - c2m1) * (integrator.k[4] + (c1′ - c1m1) * integrator.k[5])) - @.. z1=c2′ * (integrator.k[3] + - (c2′ - c2m1) * (integrator.k[4] + (c2′ - c1m1) * integrator.k[5])) - @.. z1=c3′ * (integrator.k[3] + - (c3′ - c2m1) * (integrator.k[4] + (c3′ - c1m1) * integrator.k[5])) - @.. w1=TI11 * z1 + TI12 * z2 + TI13 * z3 - @.. w2=TI21 * z1 + TI22 * z2 + TI23 * z3 - @.. w3=TI31 * z1 + TI32 * z2 + TI33 * z3 + @.. z1 = c1′ * ( + integrator.k[3] + + (c1′ - c2m1) * (integrator.k[4] + (c1′ - c1m1) * integrator.k[5]) + ) + @.. z1 = c2′ * ( + integrator.k[3] + + (c2′ - c2m1) * (integrator.k[4] + (c2′ - c1m1) * integrator.k[5]) + ) + @.. z1 = c3′ * ( + integrator.k[3] + + (c3′ - c2m1) * (integrator.k[4] + (c3′ - c1m1) * integrator.k[5]) + ) + @.. w1 = TI11 * z1 + TI12 * z2 + TI13 * z3 + @.. w2 = TI21 * z1 + TI22 * z2 + TI23 * z3 + @.. w3 = TI31 * z1 + TI32 * z2 + TI33 * z3 end # Newton iteration @@ -726,17 +746,17 @@ end integrator.stats.nnonliniter += 1 # evaluate function - @.. tmp=uprev + z1 + @.. tmp = uprev + z1 f(fsallast, tmp, p, t + c1 * dt) - @.. tmp=uprev + z2 + @.. tmp = uprev + z2 f(k2, tmp, p, t + c2 * dt) - @.. tmp=uprev + z3 + @.. tmp = uprev + z3 f(k3, tmp, p, t + dt) # c3 = 1 OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) - @.. fw1=TI11 * fsallast + TI12 * k2 + TI13 * k3 - @.. fw2=TI21 * fsallast + TI22 * k2 + TI23 * k3 - @.. fw3=TI31 * fsallast + TI32 * k2 + TI33 * k3 + @.. fw1 = TI11 * fsallast + TI12 * k2 + TI13 * k3 + @.. fw2 = TI21 * fsallast + TI22 * k2 + TI23 * k3 + @.. fw3 = TI31 * fsallast + TI32 * k2 + TI33 * k3 if mass_matrix === I Mw1 = w1 @@ -758,32 +778,42 @@ end Mw3 = z3 end - @.. ubuff=fw1 - γdt * Mw1 + @.. ubuff = fw1 - γdt * Mw1 needfactor = iter == 1 && new_W linsolve1 = cache.linsolve1 if needfactor - linres1 = dolinsolve(integrator, linsolve1; A = W1, b = _vec(ubuff), - linu = _vec(dw1)) + linres1 = dolinsolve( + integrator, linsolve1; A = W1, b = _vec(ubuff), + linu = _vec(dw1) + ) else - linres1 = dolinsolve(integrator, linsolve1; A = nothing, b = _vec(ubuff), - linu = _vec(dw1)) + linres1 = dolinsolve( + integrator, linsolve1; A = nothing, b = _vec(ubuff), + linu = _vec(dw1) + ) end cache.linsolve1 = linres1.cache - @.. cubuff=complex(fw2 - αdt * Mw2 + βdt * Mw3, - fw3 - βdt * Mw2 - αdt * Mw3) + @.. cubuff = complex( + fw2 - αdt * Mw2 + βdt * Mw3, + fw3 - βdt * Mw2 - αdt * Mw3 + ) linsolve2 = cache.linsolve2 if needfactor - linres2 = dolinsolve(integrator, linsolve2; A = W2, b = _vec(cubuff), - linu = _vec(dw23)) + linres2 = dolinsolve( + integrator, linsolve2; A = W2, b = _vec(cubuff), + linu = _vec(dw23) + ) else - linres2 = dolinsolve(integrator, linsolve2; A = nothing, b = _vec(cubuff), - linu = _vec(dw23)) + linres2 = dolinsolve( + integrator, linsolve2; A = nothing, b = _vec(cubuff), + linu = _vec(dw23) + ) end cache.linsolve2 = linres2.cache @@ -791,8 +821,8 @@ end integrator.stats.nsolve += 2 dw2 = z2 dw3 = z3 - @.. dw2=real(dw23) - @.. dw3=imag(dw23) + @.. dw2 = real(dw23) + @.. dw3 = imag(dw23) # compute norm of residuals ndwprev = ndw @@ -816,20 +846,20 @@ end η = θ / (1 - θ) end - @.. w1=w1 - dw1 - @.. w2=w2 - dw2 - @.. w3=w3 - dw3 + @.. w1 = w1 - dw1 + @.. w2 = w2 - dw2 + @.. w3 = w3 - dw3 # transform `w` to `z` - @.. z1=T11 * w1 + T12 * w2 + T13 * w3 - @.. z2=T21 * w1 + T22 * w2 + T23 * w3 - @.. z3=T31 * w1 + w2 # T32 = 1, T33 = 0 + @.. z1 = T11 * w1 + T12 * w2 + T13 * w3 + @.. z2 = T21 * w1 + T22 * w2 + T23 * w3 + @.. z3 = T31 * w1 + w2 # T32 = 1, T33 = 0 # check stopping criterion if η * ndw < κ && (iter > 1 || iszero(ndw) || !iszero(integrator.success_iter)) # Newton method converges cache.status = η < alg.fast_convergence_cutoff ? FastConvergence : - Convergence + Convergence fail_convergence = false break end @@ -842,19 +872,21 @@ end cache.ηold = η cache.iter = iter - @.. u=uprev + z3 + @.. u = uprev + z3 step_limiter!(u, integrator, p, t + dt) if adaptive utilde = w2 e1dt, e2dt, e3dt = e1 / dt, e2 / dt, e3 / dt - @.. tmp=e1dt * z1 + e2dt * z2 + e3dt * z3 + @.. tmp = e1dt * z1 + e2dt * z2 + e3dt * z3 mass_matrix != I && (mul!(w1, mass_matrix, tmp); copyto!(tmp, w1)) - @.. ubuff=integrator.fsalfirst + tmp + @.. ubuff = integrator.fsalfirst + tmp if alg.smooth_est - linres1 = dolinsolve(integrator, linres1.cache; b = _vec(ubuff), - linu = _vec(utilde)) + linres1 = dolinsolve( + integrator, linres1.cache; b = _vec(ubuff), + linu = _vec(utilde) + ) cache.linsolve1 = linres1.cache integrator.stats.nsolve += 1 end @@ -865,15 +897,17 @@ end integrator.EEst = internalnorm(atmp, t) if !(integrator.EEst < oneunit(integrator.EEst)) && integrator.iter == 1 || - integrator.u_modified - @.. utilde=uprev + utilde + integrator.u_modified + @.. utilde = uprev + utilde f(fsallast, utilde, p, t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. ubuff=fsallast + tmp + @.. ubuff = fsallast + tmp if alg.smooth_est - linres1 = dolinsolve(integrator, linres1.cache; b = _vec(ubuff), - linu = _vec(utilde)) + linres1 = dolinsolve( + integrator, linres1.cache; b = _vec(ubuff), + linu = _vec(utilde) + ) cache.linsolve1 = linres1.cache integrator.stats.nsolve += 1 end @@ -898,14 +932,20 @@ end return end -@muladd function perform_step!(integrator, cache::RadauIIA9ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::RadauIIA9ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p, k) = integrator - (; T11, T12, T13, T14, T15, T21, T22, T23, T24, T25, T31, T32, - T33, T34, T35, T41, T42, T43, T44, T45, T51) = cache.tab#= T52 = 1, T53 = 0, T54 = 1, T55 = 0=# - (; TI11, - TI12, TI13, TI14, TI15, TI21, TI22, TI23, TI24, TI25, TI31, TI32, TI33, TI34, - TI35, TI41, TI42, TI43, TI44, TI45, TI51, TI52, TI53, TI54, TI55) = cache.tab + (; + T11, T12, T13, T14, T15, T21, T22, T23, T24, T25, T31, T32, + T33, T34, T35, T41, T42, T43, T44, T45, T51, + ) = cache.tab #= T52 = 1, T53 = 0, T54 = 1, T55 = 0=# + (; + TI11, + TI12, TI13, TI14, TI15, TI21, TI22, TI23, TI24, TI25, TI31, TI32, TI33, TI34, + TI35, TI41, TI42, TI43, TI44, TI45, TI51, TI52, TI53, TI54, TI55, + ) = cache.tab (; c1, c2, c3, c4, γ, α1, β1, α2, β2, e1, e2, e3, e4, e5) = cache.tab (; κ) = cache (; internalnorm, abstol, reltol, adaptive) = integrator.opts @@ -914,8 +954,8 @@ end mass_matrix = integrator.f.mass_matrix # precalculations rtol pow is (num stages + 1)/(2*num stages) - rtol = @.. reltol^(3 / 5)/10 - atol = @.. rtol*(abstol / reltol) + rtol = @.. reltol^(3 / 5) / 10 + atol = @.. rtol * (abstol / reltol) c1m1 = c1 - 1 c2m1 = c2 - 1 c3m1 = c3 - 1 @@ -964,30 +1004,58 @@ end c2′ = c2 * c5′ c3′ = c3 * c5′ c4′ = c4 * c5′ - z1 = @.. c1′ * (k[3] + - (c1′-c4m1) * (k[4] + - (c1′ - c3m1) * (k[5] + - (c1′ - c2m1) * (k[6] + (c1′ - c1m1) * k[7])))) - z2 = @.. c2′ * (k[3] + - (c2′-c4m1) * (k[4] + - (c2′ - c3m1) * (k[5] + - (c2′ - c2m1) * (k[6] + (c2′ - c1m1) * k[7])))) - z3 = @.. c3′ * (k[3] + - (c3′-c4m1) * (k[4] + - (c3′ - c3m1) * (k[5] + - (c3′ - c2m1) * (k[6] + (c3′ - c1m1) * k[7])))) - z4 = @.. c4′ * (k[3] + - (c4′-c4m1) * (k[4] + - (c4′ - c3m1) * (k[5] + - (c4′ - c2m1) * (k[6] + (c4′ - c1m1) * k[7])))) - z5 = @.. c5′ * (k[3] + - (c5′-c4m1) * (k[4] + - (c5′ - c3m1) * (k[5] + (c5′ - c2m1) * (k[6] + (c5′ - c1m1) * k[7])))) - w1 = @.. TI11*z1+TI12*z2+TI13*z3+TI14*z4+TI15*z5 - w2 = @.. TI21*z1+TI22*z2+TI23*z3+TI24*z4+TI25*z5 - w3 = @.. TI31*z1+TI32*z2+TI33*z3+TI34*z4+TI35*z5 - w4 = @.. TI41*z1+TI42*z2+TI43*z3+TI44*z4+TI45*z5 - w5 = @.. TI51*z1+TI52*z2+TI53*z3+TI54*z4+TI55*z5 + z1 = @.. c1′ * ( + k[3] + + (c1′ - c4m1) * ( + k[4] + + (c1′ - c3m1) * ( + k[5] + + (c1′ - c2m1) * (k[6] + (c1′ - c1m1) * k[7]) + ) + ) + ) + z2 = @.. c2′ * ( + k[3] + + (c2′ - c4m1) * ( + k[4] + + (c2′ - c3m1) * ( + k[5] + + (c2′ - c2m1) * (k[6] + (c2′ - c1m1) * k[7]) + ) + ) + ) + z3 = @.. c3′ * ( + k[3] + + (c3′ - c4m1) * ( + k[4] + + (c3′ - c3m1) * ( + k[5] + + (c3′ - c2m1) * (k[6] + (c3′ - c1m1) * k[7]) + ) + ) + ) + z4 = @.. c4′ * ( + k[3] + + (c4′ - c4m1) * ( + k[4] + + (c4′ - c3m1) * ( + k[5] + + (c4′ - c2m1) * (k[6] + (c4′ - c1m1) * k[7]) + ) + ) + ) + z5 = @.. c5′ * ( + k[3] + + (c5′ - c4m1) * ( + k[4] + + (c5′ - c3m1) * (k[5] + (c5′ - c2m1) * (k[6] + (c5′ - c1m1) * k[7])) + ) + ) + w1 = @.. TI11 * z1 + TI12 * z2 + TI13 * z3 + TI14 * z4 + TI15 * z5 + w2 = @.. TI21 * z1 + TI22 * z2 + TI23 * z3 + TI24 * z4 + TI25 * z5 + w3 = @.. TI31 * z1 + TI32 * z2 + TI33 * z3 + TI34 * z4 + TI35 * z5 + w4 = @.. TI41 * z1 + TI42 * z2 + TI43 * z3 + TI44 * z4 + TI45 * z5 + w5 = @.. TI51 * z1 + TI52 * z2 + TI53 * z3 + TI54 * z4 + TI55 * z5 end # Newton iteration @@ -1008,18 +1076,18 @@ end ff5 = f(uprev + z5, p, t + dt) # c5 = 1 OrdinaryDiffEqCore.increment_nf!(integrator.stats, 5) - fw1 = @.. TI11*ff1+TI12*ff2+TI13*ff3+TI14*ff4+TI15*ff5 - fw2 = @.. TI21*ff1+TI22*ff2+TI23*ff3+TI24*ff4+TI25*ff5 - fw3 = @.. TI31*ff1+TI32*ff2+TI33*ff3+TI34*ff4+TI35*ff5 - fw4 = @.. TI41*ff1+TI42*ff2+TI43*ff3+TI44*ff4+TI45*ff5 - fw5 = @.. TI51*ff1+TI52*ff2+TI53*ff3+TI54*ff4+TI55*ff5 + fw1 = @.. TI11 * ff1 + TI12 * ff2 + TI13 * ff3 + TI14 * ff4 + TI15 * ff5 + fw2 = @.. TI21 * ff1 + TI22 * ff2 + TI23 * ff3 + TI24 * ff4 + TI25 * ff5 + fw3 = @.. TI31 * ff1 + TI32 * ff2 + TI33 * ff3 + TI34 * ff4 + TI35 * ff5 + fw4 = @.. TI41 * ff1 + TI42 * ff2 + TI43 * ff3 + TI44 * ff4 + TI45 * ff5 + fw5 = @.. TI51 * ff1 + TI52 * ff2 + TI53 * ff3 + TI54 * ff4 + TI55 * ff5 if mass_matrix isa UniformScaling # `UniformScaling` doesn't play nicely with broadcast - Mw1 = @.. mass_matrix.λ*w1 - Mw2 = @.. mass_matrix.λ*w2 - Mw3 = @.. mass_matrix.λ*w3 - Mw4 = @.. mass_matrix.λ*w4 - Mw5 = @.. mass_matrix.λ*w5 + Mw1 = @.. mass_matrix.λ * w1 + Mw2 = @.. mass_matrix.λ * w2 + Mw3 = @.. mass_matrix.λ * w3 + Mw4 = @.. mass_matrix.λ * w4 + Mw5 = @.. mass_matrix.λ * w5 else Mw1 = mass_matrix * w1 Mw2 = mass_matrix * w2 @@ -1028,14 +1096,14 @@ end Mw5 = mass_matrix * w5 end - rhs1 = @.. fw1-γdt * Mw1 - rhs2 = @.. fw2 - α1dt * Mw2+β1dt * Mw3 - rhs3 = @.. fw3 - β1dt * Mw2-α1dt * Mw3 - rhs4 = @.. fw4 - α2dt * Mw4+β2dt * Mw5 - rhs5 = @.. fw5 - β2dt * Mw4-α2dt * Mw5 + rhs1 = @.. fw1 - γdt * Mw1 + rhs2 = @.. fw2 - α1dt * Mw2 + β1dt * Mw3 + rhs3 = @.. fw3 - β1dt * Mw2 - α1dt * Mw3 + rhs4 = @.. fw4 - α2dt * Mw4 + β2dt * Mw5 + rhs5 = @.. fw5 - β2dt * Mw4 - α2dt * Mw5 dw1 = _reshape(LU1 \ _vec(rhs1), axes(u)) - dw23 = _reshape(LU2 \ _vec(@.. rhs2+rhs3 * im), axes(u)) - dw45 = _reshape(LU3 \ _vec(@.. rhs4+rhs5 * im), axes(u)) + dw23 = _reshape(LU2 \ _vec(@.. rhs2 + rhs3 * im), axes(u)) + dw45 = _reshape(LU3 \ _vec(@.. rhs4 + rhs5 * im), axes(u)) integrator.stats.nsolve += 3 dw2 = real(dw23) dw3 = imag(dw23) @@ -1050,7 +1118,7 @@ end atmp4 = calculate_residuals(dw4, uprev, u, atol, rtol, internalnorm, t) atmp5 = calculate_residuals(dw5, uprev, u, atol, rtol, internalnorm, t) ndw = internalnorm(atmp1, t) + internalnorm(atmp2, t) + internalnorm(atmp3, t) + - internalnorm(atmp4, t) + internalnorm(atmp5, t) + internalnorm(atmp4, t) + internalnorm(atmp5, t) # check divergence (not in initial step) @@ -1065,24 +1133,24 @@ end η = θ / (1 - θ) end - w1 = @.. w1-dw1 - w2 = @.. w2-dw2 - w3 = @.. w3-dw3 - w4 = @.. w4-dw4 - w5 = @.. w5-dw5 + w1 = @.. w1 - dw1 + w2 = @.. w2 - dw2 + w3 = @.. w3 - dw3 + w4 = @.. w4 - dw4 + w5 = @.. w5 - dw5 # transform `w` to `z` - z1 = @.. T11*w1+T12*w2+T13*w3+T14*w4+T15*w5 - z2 = @.. T21*w1+T22*w2+T23*w3+T24*w4+T25*w5 - z3 = @.. T31*w1+T32*w2+T33*w3+T34*w4+T35*w5 - z4 = @.. T41*w1+T42*w2+T43*w3+T44*w4+T45*w5 - z5 = @.. T51*w1+w2+w4#= T52=1, T53=0, T54=1, T55=0 =# + z1 = @.. T11 * w1 + T12 * w2 + T13 * w3 + T14 * w4 + T15 * w5 + z2 = @.. T21 * w1 + T22 * w2 + T23 * w3 + T24 * w4 + T25 * w5 + z3 = @.. T31 * w1 + T32 * w2 + T33 * w3 + T34 * w4 + T35 * w5 + z4 = @.. T41 * w1 + T42 * w2 + T43 * w3 + T44 * w4 + T45 * w5 + z5 = @.. T51 * w1 + w2 + w4 #= T52=1, T53=0, T54=1, T55=0 =# # check stopping criterion if η * ndw < κ && (iter > 1 || iszero(ndw) || !iszero(integrator.success_iter)) # Newton method converges cache.status = η < alg.fast_convergence_cutoff ? FastConvergence : - Convergence + Convergence fail_convergence = false break end @@ -1096,13 +1164,13 @@ end cache.ηold = η cache.iter = iter - u = @.. uprev+z5 + u = @.. uprev + z5 if adaptive e1dt, e2dt, e3dt, e4dt, e5dt = e1 / dt, e2 / dt, e3 / dt, e4 / dt, e5 / dt - tmp = @.. e1dt*z1+e2dt*z2+e3dt*z3+e4dt*z4+e5dt*z5 + tmp = @.. e1dt * z1 + e2dt * z2 + e3dt * z3 + e4dt * z4 + e5dt * z5 mass_matrix != I && (tmp = mass_matrix * tmp) - utilde = @.. integrator.fsalfirst+tmp + utilde = @.. integrator.fsalfirst + tmp if alg.smooth_est utilde = _reshape(LU1 \ _vec(utilde), axes(u)) integrator.stats.nsolve += 1 @@ -1111,10 +1179,10 @@ end integrator.EEst = internalnorm(atmp, t) if !(integrator.EEst < oneunit(integrator.EEst)) && integrator.iter == 1 || - integrator.u_modified + integrator.u_modified f0 = f(uprev .+ utilde, p, t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - utilde = @.. f0+tmp + utilde = @.. f0 + tmp alg.smooth_est && (utilde = LU1 \ utilde; integrator.stats.nsolve += 1) atmp = calculate_residuals(utilde, uprev, u, atol, rtol, internalnorm, t) integrator.EEst = internalnorm(atmp, t) @@ -1152,11 +1220,15 @@ end @muladd function perform_step!(integrator, cache::RadauIIA9Cache, repeat_step = false) (; t, dt, uprev, u, f, p, fsallast, fsalfirst, k) = integrator - (; T11, T12, T13, T14, T15, T21, T22, T23, T24, T25, T31, T32, - T33, T34, T35, T41, T42, T43, T44, T45, T51) = cache.tab#= T52 = 1, T53 = 0, T54 = 1, T55 = 0=# - (; TI11, - TI12, TI13, TI14, TI15, TI21, TI22, TI23, TI24, TI25, TI31, TI32, TI33, TI34, - TI35, TI41, TI42, TI43, TI44, TI45, TI51, TI52, TI53, TI54, TI55) = cache.tab + (; + T11, T12, T13, T14, T15, T21, T22, T23, T24, T25, T31, T32, + T33, T34, T35, T41, T42, T43, T44, T45, T51, + ) = cache.tab #= T52 = 1, T53 = 0, T54 = 1, T55 = 0=# + (; + TI11, + TI12, TI13, TI14, TI15, TI21, TI22, TI23, TI24, TI25, TI31, TI32, TI33, TI34, + TI35, TI41, TI42, TI43, TI44, TI45, TI51, TI52, TI53, TI54, TI55, + ) = cache.tab (; c1, c2, c3, c4, γ, α1, β1, α2, β2, e1, e2, e3, e4, e5) = cache.tab (; κ) = cache linres1 = nothing @@ -1164,8 +1236,10 @@ end (; dw1, ubuff, dw23, dw45, cubuff1, cubuff2) = cache (; k, k2, k3, k4, k5, fw1, fw2, fw3, fw4, fw5) = cache (; J, W1, W2, W3) = cache - (; tmp, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8, tmp9, tmp10, atmp, jac_config, - linsolve1, linsolve2, linsolve3, rtol, atol, step_limiter!) = cache + (; + tmp, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8, tmp9, tmp10, atmp, jac_config, + linsolve1, linsolve2, linsolve3, rtol, atol, step_limiter!, + ) = cache (; internalnorm, abstol, reltol, adaptive) = integrator.opts alg = unwrap_alg(integrator, true) (; maxiters) = alg @@ -1199,16 +1273,16 @@ end if integrator.iter == 1 || integrator.u_modified || alg.extrapolant == :constant cache.dtprev = one(cache.dtprev) uzero = zero(eltype(u)) - @.. z1=uzero - @.. z2=uzero - @.. z3=uzero - @.. z4=uzero - @.. z5=uzero - @.. w1=uzero - @.. w2=uzero - @.. w3=uzero - @.. w4=uzero - @.. w5=uzero + @.. z1 = uzero + @.. z2 = uzero + @.. z3 = uzero + @.. z4 = uzero + @.. z5 = uzero + @.. w1 = uzero + @.. w2 = uzero + @.. w3 = uzero + @.. w4 = uzero + @.. w5 = uzero integrator.k[3] = map(zero, u) integrator.k[4] = map(zero, u) integrator.k[5] = map(zero, u) @@ -1220,31 +1294,61 @@ end c2′ = c2 * c5′ c3′ = c3 * c5′ c4′ = c4 * c5′ - @.. z1 = c1′ * (integrator.k[3] + - (c1′-c4m1) * (integrator.k[4] + - (c1′ - c3m1) * (integrator.k[5] + - (c1′ - c2m1) * (integrator.k[6] + (c1′ - c1m1) * integrator.k[7])))) - @.. z2 = c2′ * (integrator.k[3] + - (c2′-c4m1) * (integrator.k[4] + - (c2′ - c3m1) * (integrator.k[5] + - (c2′ - c2m1) * (integrator.k[6] + (c2′ - c1m1) * integrator.k[7])))) - @.. z3 = c3′ * (integrator.k[3] + - (c3′-c4m1) * (integrator.k[4] + - (c3′ - c3m1) * (integrator.k[5] + - (c3′ - c2m1) * (integrator.k[6] + (c3′ - c1m1) * integrator.k[7])))) - @.. z4 = c4′ * (integrator.k[3] + - (c4′-c4m1) * (integrator.k[4] + - (c4′ - c3m1) * (integrator.k[5] + - (c4′ - c2m1) * (integrator.k[6] + (c4′ - c1m1) * integrator.k[7])))) - @.. z5 = c5′ * (integrator.k[3] + - (c5′-c4m1) * (integrator.k[4] + - (c5′ - c3m1) * (integrator.k[5] + - (c5′ - c2m1) * (integrator.k[6] + (c5′ - c1m1) * integrator.k[7])))) - @.. w1 = TI11*z1+TI12*z2+TI13*z3+TI14*z4+TI15*z5 - @.. w2 = TI21*z1+TI22*z2+TI23*z3+TI24*z4+TI25*z5 - @.. w3 = TI31*z1+TI32*z2+TI33*z3+TI34*z4+TI35*z5 - @.. w4 = TI41*z1+TI42*z2+TI43*z3+TI44*z4+TI45*z5 - @.. w5 = TI51*z1+TI52*z2+TI53*z3+TI54*z4+TI55*z5 + @.. z1 = c1′ * ( + integrator.k[3] + + (c1′ - c4m1) * ( + integrator.k[4] + + (c1′ - c3m1) * ( + integrator.k[5] + + (c1′ - c2m1) * (integrator.k[6] + (c1′ - c1m1) * integrator.k[7]) + ) + ) + ) + @.. z2 = c2′ * ( + integrator.k[3] + + (c2′ - c4m1) * ( + integrator.k[4] + + (c2′ - c3m1) * ( + integrator.k[5] + + (c2′ - c2m1) * (integrator.k[6] + (c2′ - c1m1) * integrator.k[7]) + ) + ) + ) + @.. z3 = c3′ * ( + integrator.k[3] + + (c3′ - c4m1) * ( + integrator.k[4] + + (c3′ - c3m1) * ( + integrator.k[5] + + (c3′ - c2m1) * (integrator.k[6] + (c3′ - c1m1) * integrator.k[7]) + ) + ) + ) + @.. z4 = c4′ * ( + integrator.k[3] + + (c4′ - c4m1) * ( + integrator.k[4] + + (c4′ - c3m1) * ( + integrator.k[5] + + (c4′ - c2m1) * (integrator.k[6] + (c4′ - c1m1) * integrator.k[7]) + ) + ) + ) + @.. z5 = c5′ * ( + integrator.k[3] + + (c5′ - c4m1) * ( + integrator.k[4] + + (c5′ - c3m1) * ( + integrator.k[5] + + (c5′ - c2m1) * (integrator.k[6] + (c5′ - c1m1) * integrator.k[7]) + ) + ) + ) + @.. w1 = TI11 * z1 + TI12 * z2 + TI13 * z3 + TI14 * z4 + TI15 * z5 + @.. w2 = TI21 * z1 + TI22 * z2 + TI23 * z3 + TI24 * z4 + TI25 * z5 + @.. w3 = TI31 * z1 + TI32 * z2 + TI33 * z3 + TI34 * z4 + TI35 * z5 + @.. w4 = TI41 * z1 + TI42 * z2 + TI43 * z3 + TI44 * z4 + TI45 * z5 + @.. w5 = TI51 * z1 + TI52 * z2 + TI53 * z3 + TI54 * z4 + TI55 * z5 end # Newton iteration @@ -1258,28 +1362,28 @@ end integrator.stats.nnonliniter += 1 # evaluate function - @.. tmp=uprev + z1 + @.. tmp = uprev + z1 f(fsallast, tmp, p, t + c1 * dt) - @.. tmp=uprev + z2 + @.. tmp = uprev + z2 f(k2, tmp, p, t + c2 * dt) - @.. tmp=uprev + z3 + @.. tmp = uprev + z3 f(k3, tmp, p, t + c3 * dt) - @.. tmp=uprev + z4 + @.. tmp = uprev + z4 f(k4, tmp, p, t + c4 * dt) - @.. tmp=uprev + z5 + @.. tmp = uprev + z5 f(k5, tmp, p, t + dt) # c5 = 1 OrdinaryDiffEqCore.increment_nf!(integrator.stats, 5) - @.. fw1=TI11 * fsallast + TI12 * k2 + TI13 * k3 + TI14 * k4 + - TI15 * k5 - @.. fw2=TI21 * fsallast + TI22 * k2 + TI23 * k3 + TI24 * k4 + - TI25 * k5 - @.. fw3=TI31 * fsallast + TI32 * k2 + TI33 * k3 + TI34 * k4 + - TI35 * k5 - @.. fw4=TI41 * fsallast + TI42 * k2 + TI43 * k3 + TI44 * k4 + - TI45 * k5 - @.. fw5=TI51 * fsallast + TI52 * k2 + TI53 * k3 + TI54 * k4 + - TI55 * k5 + @.. fw1 = TI11 * fsallast + TI12 * k2 + TI13 * k3 + TI14 * k4 + + TI15 * k5 + @.. fw2 = TI21 * fsallast + TI22 * k2 + TI23 * k3 + TI24 * k4 + + TI25 * k5 + @.. fw3 = TI31 * fsallast + TI32 * k2 + TI33 * k3 + TI34 * k4 + + TI35 * k5 + @.. fw4 = TI41 * fsallast + TI42 * k2 + TI43 * k3 + TI44 * k4 + + TI45 * k5 + @.. fw5 = TI51 * fsallast + TI52 * k2 + TI53 * k3 + TI54 * k4 + + TI55 * k5 if mass_matrix === I Mw1 = w1 @@ -1311,59 +1415,67 @@ end Mw5 = z5 end - @.. ubuff=fw1 - γdt * Mw1 + @.. ubuff = fw1 - γdt * Mw1 needfactor = iter == 1 && new_W linsolve1 = cache.linsolve1 if needfactor linres1 = dolinsolve( - integrator, linsolve1; A = W1, b = _vec(ubuff), linu = _vec(dw1)) + integrator, linsolve1; A = W1, b = _vec(ubuff), linu = _vec(dw1) + ) else linres1 = dolinsolve( - integrator, linsolve1; A = nothing, b = _vec(ubuff), linu = _vec(dw1)) + integrator, linsolve1; A = nothing, b = _vec(ubuff), linu = _vec(dw1) + ) end cache.linsolve1 = linres1.cache - @.. cubuff1=complex( - fw2 - α1dt * Mw2 + β1dt * Mw3, fw3 - β1dt * Mw2 - α1dt * Mw3) + @.. cubuff1 = complex( + fw2 - α1dt * Mw2 + β1dt * Mw3, fw3 - β1dt * Mw2 - α1dt * Mw3 + ) linsolve2 = cache.linsolve2 if needfactor linres2 = dolinsolve( - integrator, linsolve2; A = W2, b = _vec(cubuff1), linu = _vec(dw23)) + integrator, linsolve2; A = W2, b = _vec(cubuff1), linu = _vec(dw23) + ) else linres2 = dolinsolve( - integrator, linsolve2; A = nothing, b = _vec(cubuff1), linu = _vec(dw23)) + integrator, linsolve2; A = nothing, b = _vec(cubuff1), linu = _vec(dw23) + ) end cache.linsolve2 = linres2.cache - @.. cubuff2=complex( - fw4 - α2dt * Mw4 + β2dt * Mw5, fw5 - β2dt * Mw4 - α2dt * Mw5) + @.. cubuff2 = complex( + fw4 - α2dt * Mw4 + β2dt * Mw5, fw5 - β2dt * Mw4 - α2dt * Mw5 + ) linsolve3 = cache.linsolve3 if needfactor linres3 = dolinsolve( - integrator, linsolve3; A = W3, b = _vec(cubuff2), linu = _vec(dw45)) + integrator, linsolve3; A = W3, b = _vec(cubuff2), linu = _vec(dw45) + ) else linres3 = dolinsolve( - integrator, linsolve3; A = nothing, b = _vec(cubuff2), linu = _vec(dw45)) + integrator, linsolve3; A = nothing, b = _vec(cubuff2), linu = _vec(dw45) + ) end cache.linsolve3 = linres3.cache integrator.stats.nsolve += 3 dw2 = z2 dw3 = z3 - @.. dw2=real(dw23) - @.. dw3=imag(dw23) + @.. dw2 = real(dw23) + @.. dw3 = imag(dw23) dw4 = z4 dw5 = z5 - @.. dw4=real(dw45) - @.. dw5=imag(dw45) + @.. dw4 = real(dw45) + @.. dw5 = imag(dw45) # compute norm of residuals ndwprev = ndw @@ -1392,24 +1504,24 @@ end η = θ / (1 - θ) end - @.. w1=w1 - dw1 - @.. w2=w2 - dw2 - @.. w3=w3 - dw3 - @.. w4=w4 - dw4 - @.. w5=w5 - dw5 + @.. w1 = w1 - dw1 + @.. w2 = w2 - dw2 + @.. w3 = w3 - dw3 + @.. w4 = w4 - dw4 + @.. w5 = w5 - dw5 # transform `w` to `z` - @.. z1=T11 * w1 + T12 * w2 + T13 * w3 + T14 * w4 + T15 * w5 - @.. z2=T21 * w1 + T22 * w2 + T23 * w3 + T24 * w4 + T25 * w5 - @.. z3=T31 * w1 + T32 * w2 + T33 * w3 + T34 * w4 + T35 * w5 - @.. z4=T41 * w1 + T42 * w2 + T43 * w3 + T44 * w4 + T45 * w5 - @.. z5=T51 * w1 + w2 + w4#= T52=1, T53=0, T54=1, T55=0 =# + @.. z1 = T11 * w1 + T12 * w2 + T13 * w3 + T14 * w4 + T15 * w5 + @.. z2 = T21 * w1 + T22 * w2 + T23 * w3 + T24 * w4 + T25 * w5 + @.. z3 = T31 * w1 + T32 * w2 + T33 * w3 + T34 * w4 + T35 * w5 + @.. z4 = T41 * w1 + T42 * w2 + T43 * w3 + T44 * w4 + T45 * w5 + @.. z5 = T51 * w1 + w2 + w4 #= T52=1, T53=0, T54=1, T55=0 =# # check stopping criterion if η * ndw < κ && (iter > 1 || iszero(ndw) || !iszero(integrator.success_iter)) # Newton method converges cache.status = η < alg.fast_convergence_cutoff ? FastConvergence : - Convergence + Convergence fail_convergence = false break end @@ -1423,20 +1535,22 @@ end cache.ηold = η cache.iter = iter - @.. u=uprev + z5 + @.. u = uprev + z5 step_limiter!(u, integrator, p, t + dt) if adaptive utilde = w2 e1dt, e2dt, e3dt, e4dt, e5dt = e1 / dt, e2 / dt, e3 / dt, e4 / dt, e5 / dt - @.. tmp=e1dt * z1 + e2dt * z2 + e3dt * z3 + e4dt * z4 + e5dt * z5 + @.. tmp = e1dt * z1 + e2dt * z2 + e3dt * z3 + e4dt * z4 + e5dt * z5 mass_matrix != I && (mul!(w1, mass_matrix, tmp); copyto!(tmp, w1)) - @.. ubuff=integrator.fsalfirst + tmp + @.. ubuff = integrator.fsalfirst + tmp if alg.smooth_est - linres1 = dolinsolve(integrator, linres1.cache; b = _vec(ubuff), - linu = _vec(utilde)) + linres1 = dolinsolve( + integrator, linres1.cache; b = _vec(ubuff), + linu = _vec(utilde) + ) cache.linsolve1 = linres1.cache integrator.stats.nsolve += 1 end @@ -1447,15 +1561,17 @@ end integrator.EEst = internalnorm(atmp, t) if !(integrator.EEst < oneunit(integrator.EEst)) && integrator.iter == 1 || - integrator.u_modified - @.. utilde=uprev + utilde + integrator.u_modified + @.. utilde = uprev + utilde f(fsallast, utilde, p, t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. ubuff=fsallast + tmp + @.. ubuff = fsallast + tmp if alg.smooth_est - linres1 = dolinsolve(integrator, linres1.cache; b = _vec(ubuff), - linu = _vec(utilde)) + linres1 = dolinsolve( + integrator, linres1.cache; b = _vec(ubuff), + linu = _vec(utilde) + ) cache.linsolve1 = linres1.cache integrator.stats.nsolve += 1 end @@ -1491,8 +1607,10 @@ end return end -@muladd function perform_step!(integrator, cache::AdaptiveRadauConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::AdaptiveRadauConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p, k) = integrator (; tabs, num_stages, index) = cache tab = tabs[index] @@ -1504,8 +1622,8 @@ end mass_matrix = integrator.f.mass_matrix # precalculations rtol pow is (num stages + 1)/(2*num stages) - rtol = @.. reltol^((num_stages + 1) / (num_stages * 2))/10 - atol = @.. rtol*(abstol / reltol) + rtol = @.. reltol^((num_stages + 1) / (num_stages * 2)) / 10 + atol = @.. rtol * (abstol / reltol) γdt, αdt, βdt = γ / dt, α ./ dt, β ./ dt @@ -1611,7 +1729,8 @@ end z[1] = _reshape(LU1 \ _vec(rhs[1]), axes(u)) for i in 2:((num_stages + 1) ÷ 2) tmp = _reshape( - LU2[i - 1] \ _vec(@.. rhs[2 * i - 2] + rhs[2 * i - 1] * im), axes(u)) + LU2[i - 1] \ _vec(@.. rhs[2 * i - 2] + rhs[2 * i - 1] * im), axes(u) + ) z[2 * i - 2] = @.. real(tmp) z[2 * i - 1] = @.. imag(tmp) end @@ -1622,7 +1741,8 @@ end ndw = 0.0 for i in 1:num_stages ndw += internalnorm( - calculate_residuals(z[i], uprev, u, atol, rtol, internalnorm, t), t) + calculate_residuals(z[i], uprev, u, atol, rtol, internalnorm, t), t + ) end # check divergence (not in initial step) @@ -1661,7 +1781,7 @@ end if η * ndw < κ && (iter > 1 || iszero(ndw) || !iszero(integrator.success_iter)) # Newton method converges cache.status = η < alg.fast_convergence_cutoff ? FastConvergence : - Convergence + Convergence fail_convergence = false break end @@ -1684,7 +1804,7 @@ end end mass_matrix != I && (tmp = mass_matrix * tmp) #utilde = @.. 1 / γ * dt * integrator.fsalfirst + tmp - utilde = @.. integrator.fsalfirst+tmp + utilde = @.. integrator.fsalfirst + tmp if alg.smooth_est utilde = _reshape(LU1 \ _vec(utilde), axes(u)) integrator.stats.nsolve += 1 @@ -1693,11 +1813,11 @@ end integrator.EEst = internalnorm(atmp, t) if !(integrator.EEst < oneunit(integrator.EEst)) && integrator.iter == 1 || - integrator.u_modified + integrator.u_modified f0 = f(uprev .+ utilde, p, t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) #utilde = @.. 1 / γ * dt * f0 + tmp - utilde = @.. f0+tmp + utilde = @.. f0 + tmp if alg.smooth_est utilde = _reshape(LU1 \ _vec(utilde), axes(u)) integrator.stats.nsolve += 1 @@ -1716,11 +1836,15 @@ end derivatives[1, j] = @.. (z[j - 1] - z[j]) / (c[j - 1] - c[j]) #first derivatives end for i in 2:num_stages - derivatives[i, i] = @.. (derivatives[i - 1, i] - - derivatives[i - 1, i - 1]) / c[i] + derivatives[i, i] = @.. ( + derivatives[i - 1, i] - + derivatives[i - 1, i - 1] + ) / c[i] for j in (i + 1):num_stages - derivatives[i, j] = @.. (derivatives[i - 1, j - 1] - - derivatives[i - 1, j]) / (c[j - i] - c[j]) #all others + derivatives[i, j] = @.. ( + derivatives[i - 1, j - 1] - + derivatives[i - 1, j] + ) / (c[j - i] - c[j]) #all others end end for i in 1:num_stages @@ -1764,8 +1888,8 @@ end cache.rtol = reltol^((num_stages + 1) / (2 * num_stages)) / 10 cache.atol = cache.rtol * (abstol / reltol) else - @.. cache.rtol=reltol^((num_stages + 1) / (2 * num_stages)) / 10 - @.. cache.atol=cache.rtol * (abstol / reltol) + @.. cache.rtol = reltol^((num_stages + 1) / (2 * num_stages)) / 10 + @.. cache.atol = cache.rtol * (abstol / reltol) end end @@ -1783,12 +1907,12 @@ end end else let W1 = W1, W2 = W2, γdt = γdt, αdt = αdt, βdt = βdt, - mass_matrix = mass_matrix, num_stages = num_stages, J = J + mass_matrix = mass_matrix, num_stages = num_stages, J = J @inbounds @threaded alg.threading for i in 1:((num_stages - 1) ÷ 2) for II in CartesianIndices(J) W2[i][II] = -(αdt[i] + βdt[i] * im) * mass_matrix[Tuple(II)...] + - J[II] + J[II] end end end @@ -1873,42 +1997,52 @@ end if needfactor cache.linsolve1 = dolinsolve( - integrator, linsolve1; A = W1, b = _vec(ubuff), linu = _vec(dw1)).cache + integrator, linsolve1; A = W1, b = _vec(ubuff), linu = _vec(dw1) + ).cache else cache.linsolve1 = dolinsolve( - integrator, linsolve1; A = nothing, b = _vec(ubuff), linu = _vec(dw1)).cache + integrator, linsolve1; A = nothing, b = _vec(ubuff), linu = _vec(dw1) + ).cache end if !isthreaded(alg.threading) for i in 1:((num_stages - 1) ÷ 2) @.. cubuff[i] = complex( fw[2 * i] - αdt[i] * Mw[2 * i] + βdt[i] * Mw[2 * i + 1], - fw[2 * i + 1] - βdt[i] * Mw[2 * i] - αdt[i] * Mw[2 * i + 1]) + fw[2 * i + 1] - βdt[i] * Mw[2 * i] - αdt[i] * Mw[2 * i + 1] + ) if needfactor - cache.linsolve2[i] = dolinsolve(integrator, linsolve2[i]; A = W2[i], - b = _vec(cubuff[i]), linu = _vec(dw2[i])).cache + cache.linsolve2[i] = dolinsolve( + integrator, linsolve2[i]; A = W2[i], + b = _vec(cubuff[i]), linu = _vec(dw2[i]) + ).cache else - cache.linsolve2[i] = dolinsolve(integrator, linsolve2[i]; A = nothing, - b = _vec(cubuff[i]), linu = _vec(dw2[i])).cache + cache.linsolve2[i] = dolinsolve( + integrator, linsolve2[i]; A = nothing, + b = _vec(cubuff[i]), linu = _vec(dw2[i]) + ).cache end end else let integrator = integrator, linsolve2 = linsolve2, fw = fw, αdt = αdt, - βdt = βdt, Mw = Mw, W1 = W1, W2 = W2, cubuff = cubuff, dw2 = dw2, - needfactor = needfactor + βdt = βdt, Mw = Mw, W1 = W1, W2 = W2, cubuff = cubuff, dw2 = dw2, + needfactor = needfactor @threaded alg.threading for i in 1:((num_stages - 1) ÷ 2) @.. cubuff[i] = complex( fw[2 * i] - αdt[i] * Mw[2 * i] + βdt[i] * Mw[2 * i + 1], - fw[2 * i + 1] - βdt[i] * Mw[2 * i] - αdt[i] * Mw[2 * i + 1]) + fw[2 * i + 1] - βdt[i] * Mw[2 * i] - αdt[i] * Mw[2 * i + 1] + ) if needfactor cache.linsolve2[i] = dolinsolve( integrator, linsolve2[i]; A = W2[i], - b = _vec(cubuff[i]), linu = _vec(dw2[i])).cache + b = _vec(cubuff[i]), linu = _vec(dw2[i]) + ).cache else cache.linsolve2[i] = dolinsolve( integrator, linsolve2[i]; A = nothing, - b = _vec(cubuff[i]), linu = _vec(dw2[i])).cache + b = _vec(cubuff[i]), linu = _vec(dw2[i]) + ).cache end end end @@ -1967,7 +2101,7 @@ end if η * ndw < κ && (iter > 1 || iszero(ndw) || !iszero(integrator.success_iter)) # Newton method converges cache.status = η < alg.fast_convergence_cutoff ? FastConvergence : - Convergence + Convergence fail_convergence = false break end @@ -1981,7 +2115,7 @@ end cache.ηold = η cache.iter = iter - @.. u=uprev + z[num_stages] + @.. u = uprev + z[num_stages] step_limiter!(u, integrator, p, t + dt) @@ -1993,11 +2127,13 @@ end end mass_matrix != I && (mul!(w[1], mass_matrix, tmp); copyto!(tmp, w[1])) #@.. ubuff=1 / γ * dt * integrator.fsalfirst + tmp - @.. ubuff=integrator.fsalfirst + tmp + @.. ubuff = integrator.fsalfirst + tmp if alg.smooth_est - cache.linsolve1 = dolinsolve(integrator, linsolve1; b = _vec(ubuff), - linu = _vec(utilde)).cache + cache.linsolve1 = dolinsolve( + integrator, linsolve1; b = _vec(ubuff), + linu = _vec(utilde) + ).cache integrator.stats.nsolve += 1 end @@ -2007,16 +2143,18 @@ end integrator.EEst = internalnorm(atmp, t) if !(integrator.EEst < oneunit(integrator.EEst)) && integrator.iter == 1 || - integrator.u_modified - @.. utilde=uprev + utilde + integrator.u_modified + @.. utilde = uprev + utilde f(fsallast, utilde, p, t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) #@.. ubuff = 1 / γ * dt * fsallast + tmp - @.. ubuff=fsallast + tmp + @.. ubuff = fsallast + tmp if alg.smooth_est - cache.linsolve1 = dolinsolve(integrator, linsolve1; b = _vec(ubuff), - linu = _vec(utilde)).cache + cache.linsolve1 = dolinsolve( + integrator, linsolve1; b = _vec(ubuff), + linu = _vec(utilde) + ).cache integrator.stats.nsolve += 1 end @@ -2033,11 +2171,15 @@ end @.. derivatives[1, j] = (z[j - 1] - z[j]) / (c[j - 1] - c[j]) #first derivatives end for i in 2:num_stages - @.. derivatives[i, i] = (derivatives[i - 1, i] - - derivatives[i - 1, i - 1]) / c[i] + @.. derivatives[i, i] = ( + derivatives[i - 1, i] - + derivatives[i - 1, i - 1] + ) / c[i] for j in (i + 1):num_stages - @.. derivatives[i, j] = (derivatives[i - 1, j - 1] - - derivatives[i - 1, j]) / (c[j - i] - c[j]) #all others + @.. derivatives[i, j] = ( + derivatives[i - 1, j - 1] - + derivatives[i - 1, j] + ) / (c[j - i] - c[j]) #all others end end for i in 1:num_stages diff --git a/lib/OrdinaryDiffEqFIRK/src/firk_tableaus.jl b/lib/OrdinaryDiffEqFIRK/src/firk_tableaus.jl index 73e25c9d2a..fe7d05f8b9 100644 --- a/lib/OrdinaryDiffEqFIRK/src/firk_tableaus.jl +++ b/lib/OrdinaryDiffEqFIRK/src/firk_tableaus.jl @@ -30,9 +30,11 @@ function RadauIIA3Tableau(T, T2) β = T(-sqrt(2)) e1 = T(1 / 4) e2 = T(-1 / 4) - RadauIIA3Tableau{T, T2}(T11, T12, T21, T22, + return RadauIIA3Tableau{T, T2}( + T11, T12, T21, T22, TI11, TI12, TI21, TI22, - c1, c2, α, β, e1, e2) + c1, c2, α, β, e1, e2 + ) end struct RadauIIA5Tableau{T, T2} @@ -69,14 +71,14 @@ end # 0 α -β # 0 β α] function RadauIIA5Tableau(T, T2) - T11 = convert(T, 9.1232394870892942792e-02) + T11 = convert(T, 9.1232394870892942792e-2) T12 = convert(T, -0.14125529502095420843e0) - T13 = convert(T, -3.0029194105147424492e-02) + T13 = convert(T, -3.0029194105147424492e-2) T21 = convert(T, 0.24171793270710701896e0) T22 = convert(T, 0.20412935229379993199e0) T23 = convert(T, 0.38294211275726193779e0) T31 = convert(T, 0.96604818261509293619e0) - TI11 = convert(T, 4.3255798900631553510e0) + TI11 = convert(T, 4.325579890063155351e0) TI12 = convert(T, 0.33919925181580986954e0) TI13 = convert(T, 0.54177053993587487119e0) TI21 = convert(T, -4.1787185915519047273e0) @@ -104,13 +106,15 @@ function RadauIIA5Tableau(T, T2) e1 = convert(T, -(13 + 7 * sqrt6) / 3) e2 = convert(T, (-13 + 7 * sqrt6) / 3) e3 = convert(T, -1 / 3) - RadauIIA5Tableau{T, T2}(T11, T12, T13, T21, T22, T23, T31, + return RadauIIA5Tableau{T, T2}( + T11, T12, T13, T21, T22, T23, T31, #= T33 = 0 =# TI11, TI12, TI13, TI21, TI22, TI23, TI31, TI32, TI33, c1, c2, #= c3 = 1 =# γ, α, β, - e1, e2, e3) + e1, e2, e3 + ) end struct RadauIIA9Tableau{T, T2} @@ -214,7 +218,7 @@ function RadauIIA9Tableau(T, T2) TI21 = convert(T, 5.344186437834911598895e0) TI22 = convert(T, 4.593615567759161004454e0) TI23 = convert(T, -3.036360323459424298646e0) - TI24 = convert(T, 1.050660190231458863860e0) + TI24 = convert(T, 1.05066019023145886386e0) TI25 = convert(T, -2.727786118642962705386e-1) TI31 = convert(T, 3.748059807439804860051e0) TI32 = convert(T, -3.984965736343884667252e0) @@ -226,30 +230,31 @@ function RadauIIA9Tableau(T, T2) TI43 = convert(T, -1.721290632540055611515e-1) TI44 = convert(T, -9.916977798254264258817e-2) TI45 = convert(T, 5.312281158383066671849e-1) - TI51 = convert(T, -8.611443979875291977700e0) + TI51 = convert(T, -8.6114439798752919777e0) TI52 = convert(T, 9.699991409528808231336e0) TI53 = convert(T, 1.914728639696874284851e0) TI54 = convert(T, 2.418692006084940026427e0) TI55 = convert(T, -1.047463487935337418694e0) c1 = convert(T2, 5.710419611451768219312e-2) - c2 = convert(T2, 2.768430136381238276800e-1) + c2 = convert(T2, 2.7684301363812382768e-1) c3 = convert(T2, 5.835904323689168200567e-1) - c4 = convert(T2, 8.602401356562194478479e-1)#= c5 = convert(T2, 1) =# + c4 = convert(T2, 8.602401356562194478479e-1) #= c5 = convert(T2, 1) =# γ = convert(T, 6.286704751729276645173e0) α1 = convert(T, 3.655694325463572258243e0) β1 = convert(T, 6.543736899360077294021e0) - α2 = convert(T, 5.700953298671789419170e0) + α2 = convert(T, 5.70095329867178941917e0) β2 = convert(T, 3.210265600308549888425e0) e1 = convert(T, -2.778093394406463730479e1) e2 = convert(T, 3.641478498049213152712e0) e3 = convert(T, -1.252547721169118720491e0) e4 = convert(T, 5.920031671845428725662e-1) - e5 = convert(T, -2.000000000000000000000e-1) + e5 = convert(T, -2.0e-1) - RadauIIA9Tableau{T, T2}(T11, T12, T13, T14, T15, + return RadauIIA9Tableau{T, T2}( + T11, T12, T13, T14, T15, T21, T22, T23, T24, T25, T31, T32, T33, T34, T35, T41, T42, T43, T44, T45, T51, #=T52, T53, T54, T55=# @@ -259,7 +264,8 @@ function RadauIIA9Tableau(T, T2) c1, c2, c3, c4, #= c5 = 1 =# γ, α1, β1, α2, β2, - e1, e2, e3, e4, e5) + e1, e2, e3, e4, e5 + ) end struct RadauIIATableau{T1, T2} @@ -276,7 +282,7 @@ import LinearAlgebra: eigen import FastGaussQuadrature: gaussradau function RadauIIATableau{T1, T2}(tab::RadauIIATableau{T1, T2}) where {T1, T2} - RadauIIATableau{T1, T2}(tab.T, tab.TI, tab.c, tab.γ, tab.α, tab.β, tab.e) + return RadauIIATableau{T1, T2}(tab.T, tab.TI, tab.c, tab.γ, tab.α, tab.β, tab.e) end function RadauIIATableau(T1, T2, num_stages::Int) @@ -333,11 +339,13 @@ function generateRadauTableau(T1, T2, num_stages::Int) A = c_powers' ./ (1:num_stages) b = vcat(-(num_stages)^2, -0.5, zeros(num_stages - 2)) e = A \ b - tab = RadauIIATableau{T1, T2}(T, TI, c2, γ, α, β, e) + return tab = RadauIIATableau{T1, T2}(T, TI, c2, γ, α, β, e) end const RadauIIATableauCache = Dict{ - Tuple{Type, Type, Int}, RadauIIATableau{T1, T2} where {T1, T2}}( + Tuple{Type, Type, Int}, RadauIIATableau{T1, T2} where {T1, T2}, +}( (Float64, Float64, 3) => generateRadauTableau(Float64, Float64, 3), (Float64, Float64, 5) => generateRadauTableau(Float64, Float64, 5), - (Float64, Float64, 7) => generateRadauTableau(Float64, Float64, 7)) + (Float64, Float64, 7) => generateRadauTableau(Float64, Float64, 7) +) diff --git a/lib/OrdinaryDiffEqFIRK/src/integrator_interface.jl b/lib/OrdinaryDiffEqFIRK/src/integrator_interface.jl index 6670c6b7f2..ca2ecde909 100644 --- a/lib/OrdinaryDiffEqFIRK/src/integrator_interface.jl +++ b/lib/OrdinaryDiffEqFIRK/src/integrator_interface.jl @@ -1,5 +1,6 @@ @inline function SciMLBase.get_tmp_cache( integrator, alg::Union{RadauIIA3, RadauIIA5, RadauIIA9, AdaptiveRadau}, - cache::OrdinaryDiffEqMutableCache) - (cache.tmp, cache.atmp) + cache::OrdinaryDiffEqMutableCache + ) + return (cache.tmp, cache.atmp) end diff --git a/lib/OrdinaryDiffEqFIRK/test/jet.jl b/lib/OrdinaryDiffEqFIRK/test/jet.jl index d792628f27..4c8bfc3be5 100644 --- a/lib/OrdinaryDiffEqFIRK/test/jet.jl +++ b/lib/OrdinaryDiffEqFIRK/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqFIRK, target_defined_modules = true, mode = :typo) + OrdinaryDiffEqFIRK, target_defined_modules = true, mode = :typo + ) end diff --git a/lib/OrdinaryDiffEqFIRK/test/ode_firk_tests.jl b/lib/OrdinaryDiffEqFIRK/test/ode_firk_tests.jl index 95f7078830..46e948e600 100644 --- a/lib/OrdinaryDiffEqFIRK/test/ode_firk_tests.jl +++ b/lib/OrdinaryDiffEqFIRK/test/ode_firk_tests.jl @@ -5,32 +5,35 @@ testTol = 0.5 for prob in [prob_ode_linear, prob_ode_2Dlinear] sim21 = test_convergence(1 .// 2 .^ (6:-1:3), prob, RadauIIA5(), dense_errors = true) - @test sim21.𝒪est[:final]≈5 atol=testTol - @test sim21.𝒪est[:L2]≈4 atol=testTol + @test sim21.𝒪est[:final] ≈ 5 atol = testTol + @test sim21.𝒪est[:L2] ≈ 4 atol = testTol end sim21 = test_convergence(1 ./ 2 .^ (2.5:-1:0.5), prob_ode_linear, RadauIIA9(), dense_errors = true) -@test sim21.𝒪est[:final]≈8 atol=testTol -@test sim21.𝒪est[:L2]≈6 atol=testTol +@test sim21.𝒪est[:final] ≈ 8 atol = testTol +@test sim21.𝒪est[:L2] ≈ 6 atol = testTol sim21 = test_convergence(1 ./ 2 .^ (2.5:-1:0.5), prob_ode_2Dlinear, RadauIIA9(), dense_errors = true) -@test sim21.𝒪est[:final]≈8 atol=testTol -@test sim21.𝒪est[:L2]≈6 atol=testTol +@test sim21.𝒪est[:final] ≈ 8 atol = testTol +@test sim21.𝒪est[:L2] ≈ 6 atol = testTol using GenericSchur prob_ode_linear_big = remake( - prob_ode_linear, u0 = big.(prob_ode_linear.u0), tspan = big.(prob_ode_linear.tspan)) -prob_ode_2Dlinear_big = remake(prob_ode_2Dlinear, u0 = big.(prob_ode_2Dlinear.u0), - tspan = big.(prob_ode_2Dlinear.tspan)) + prob_ode_linear, u0 = big.(prob_ode_linear.u0), tspan = big.(prob_ode_linear.tspan) +) +prob_ode_2Dlinear_big = remake( + prob_ode_2Dlinear, u0 = big.(prob_ode_2Dlinear.u0), + tspan = big.(prob_ode_2Dlinear.tspan) +) #non-threaded tests for i in [5, 9, 13, 17, 21, 25], prob in [prob_ode_linear_big, prob_ode_2Dlinear_big] dts = 1 ./ 2 .^ (4.25:-1:0.25) local sim21 = test_convergence(dts, prob, AdaptiveRadau(min_order = i, max_order = i), dense_errors = true) - @test sim21.𝒪est[:final] ≈ i atol=testTol - @test sim21.𝒪est[:L2] ≈ ((i + 3) ÷ 2) atol=testTol + @test sim21.𝒪est[:final] ≈ i atol = testTol + @test sim21.𝒪est[:L2] ≈ ((i + 3) ÷ 2) atol = testTol end #threaded tests @@ -38,10 +41,12 @@ using OrdinaryDiffEqCore for i in [5, 9, 13, 17, 21, 25], prob in [prob_ode_linear_big, prob_ode_2Dlinear_big] dts = 1 ./ 2 .^ (4.25:-1:0.25) - local sim21 = test_convergence(dts, + local sim21 = test_convergence( + dts, prob, - AdaptiveRadau(min_order = i, max_order = i, threading = OrdinaryDiffEqCore.PolyesterThreads())) - @test sim21.𝒪est[:final] ≈ i atol=testTol + AdaptiveRadau(min_order = i, max_order = i, threading = OrdinaryDiffEqCore.PolyesterThreads()) + ) + @test sim21.𝒪est[:final] ≈ i atol = testTol end # Create Van der Pol stiff problem using the same ordering as ODEProblemLibrary @@ -51,19 +56,21 @@ function vanderpol_firk(du, u, p, t) x, y = u[1], u[2] μ = p[1] du[1] = y # dx/dt = y - du[2] = μ * ((1 - x^2) * y - x) # dy/dt = μ * ((1 - x^2) * y - x) + return du[2] = μ * ((1 - x^2) * y - x) # dy/dt = μ * ((1 - x^2) * y - x) end function vanderpol_firk(u, p, t) x, y = u[1], u[2] μ = p[1] - [y, # dx/dt = y - μ * ((1 - x^2) * y - x)] # dy/dt = μ * ((1 - x^2) * y - x) + return [ + y, # dx/dt = y + μ * ((1 - x^2) * y - x), + ] # dy/dt = μ * ((1 - x^2) * y - x) end # test adaptivity for iip in (true, false) - vanstiff = ODEProblem{iip}(vanderpol_firk, [sqrt(3), 0.0], (0.0, 1.0), [1e6]) + vanstiff = ODEProblem{iip}(vanderpol_firk, [sqrt(3), 0.0], (0.0, 1.0), [1.0e6]) sol = solve(vanstiff, RadauIIA5()) if iip @test sol.stats.naccept + sol.stats.nreject > sol.stats.njacs # J reuse @@ -71,20 +78,22 @@ for iip in (true, false) end @test length(sol) < 150 @test SciMLBase.successful_retcode(sol) - sol_temp = solve(remake(vanstiff, p = [1e7]), RadauIIA5()) + sol_temp = solve(remake(vanstiff, p = [1.0e7]), RadauIIA5()) @test length(sol_temp) < 150 @test SciMLBase.successful_retcode(sol_temp) - sol_temp2 = solve(remake(vanstiff, p = [1e7]), reltol = [1e-6, 1e-4], RadauIIA5()) + sol_temp2 = solve(remake(vanstiff, p = [1.0e7]), reltol = [1.0e-6, 1.0e-4], RadauIIA5()) @test length(sol_temp2) < 180 @test SciMLBase.successful_retcode(sol_temp2) - sol_temp3 = solve(remake(vanstiff, p = [1e7]), RadauIIA5(), reltol = 1e-9, - abstol = 1e-9) + sol_temp3 = solve( + remake(vanstiff, p = [1.0e7]), RadauIIA5(), reltol = 1.0e-9, + abstol = 1.0e-9 + ) @test length(sol_temp3) < 970 @test SciMLBase.successful_retcode(sol_temp3) - sol_temp4 = solve(remake(vanstiff, p = [1e9]), RadauIIA5()) + sol_temp4 = solve(remake(vanstiff, p = [1.0e9]), RadauIIA5()) @test length(sol_temp4) < 170 @test SciMLBase.successful_retcode(sol_temp4) - sol_temp5 = solve(remake(vanstiff, p = [1e10]), RadauIIA5()) + sol_temp5 = solve(remake(vanstiff, p = [1.0e10]), RadauIIA5()) @test length(sol_temp5) < 190 @test SciMLBase.successful_retcode(sol_temp5) end @@ -93,13 +102,13 @@ end for prob in [prob_ode_linear, prob_ode_2Dlinear] dts = 1 ./ 2 .^ (8:-1:1) sim = test_convergence(dts, prob, RadauIIA3(), dense_errors = true) - @test sim.𝒪est[:final]≈3 atol=0.25 - @test sim.𝒪est[:L2]≈3 atol=0.25 + @test sim.𝒪est[:final] ≈ 3 atol = 0.25 + @test sim.𝒪est[:L2] ≈ 3 atol = 0.25 end # test adaptivity for iip in (true, false) - vanstiff = ODEProblem{iip}(vanderpol_firk, [sqrt(3), 0], (0.0, 1.0), [1e6]) + vanstiff = ODEProblem{iip}(vanderpol_firk, [sqrt(3), 0], (0.0, 1.0), [1.0e6]) sol = solve(vanstiff, RadauIIA3()) if iip @test sol.stats.naccept + sol.stats.nreject > sol.stats.njacs # J reuse diff --git a/lib/OrdinaryDiffEqFeagin/src/OrdinaryDiffEqFeagin.jl b/lib/OrdinaryDiffEqFeagin/src/OrdinaryDiffEqFeagin.jl index 9b60335285..ab3fec071d 100644 --- a/lib/OrdinaryDiffEqFeagin/src/OrdinaryDiffEqFeagin.jl +++ b/lib/OrdinaryDiffEqFeagin/src/OrdinaryDiffEqFeagin.jl @@ -1,15 +1,15 @@ module OrdinaryDiffEqFeagin import OrdinaryDiffEqCore: alg_order, calculate_residuals!, - initialize!, perform_step!, unwrap_alg, - calculate_residuals, - OrdinaryDiffEqAlgorithm, - OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, - OrdinaryDiffEqAdaptiveAlgorithm, CompiledFloats, uses_uprev, - alg_cache, _vec, _reshape, @cache, isfsal, full_cache, - constvalue, _unwrap_val, get_fsalfirstlast, - generic_solver_docstring, trivial_limiter!, - _ode_interpolant!, _ode_addsteps! + initialize!, perform_step!, unwrap_alg, + calculate_residuals, + OrdinaryDiffEqAlgorithm, + OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, + OrdinaryDiffEqAdaptiveAlgorithm, CompiledFloats, uses_uprev, + alg_cache, _vec, _reshape, @cache, isfsal, full_cache, + constvalue, _unwrap_val, get_fsalfirstlast, + generic_solver_docstring, trivial_limiter!, + _ode_interpolant!, _ode_addsteps! using FastBroadcast, Polyester, MuladdMacro, RecursiveArrayTools using DiffEqBase: @def, @tight_loop_macros using Static: False diff --git a/lib/OrdinaryDiffEqFeagin/src/feagin_caches.jl b/lib/OrdinaryDiffEqFeagin/src/feagin_caches.jl index e350b35725..f94c8ef8d8 100644 --- a/lib/OrdinaryDiffEqFeagin/src/feagin_caches.jl +++ b/lib/OrdinaryDiffEqFeagin/src/feagin_caches.jl @@ -2,7 +2,7 @@ abstract type FeaginCache <: OrdinaryDiffEqMutableCache end get_fsalfirstlast(cache::FeaginCache, u) = (cache.fsalfirst, cache.k) @cache struct Feagin10Cache{uType, uNoUnitsType, rateType, TabType, StepLimiter} <: - FeaginCache + FeaginCache u::uType uprev::uType fsalfirst::rateType @@ -29,10 +29,12 @@ get_fsalfirstlast(cache::FeaginCache, u) = (cache.fsalfirst, cache.k) step_limiter!::StepLimiter end -function alg_cache(alg::Feagin10, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Feagin10, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = Feagin10ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) k2 = zero(rate_prototype) @@ -56,19 +58,23 @@ function alg_cache(alg::Feagin10, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmp, false) k = zero(rate_prototype) - Feagin10Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, - k15, k16, k17, tmp, atmp, k, tab, alg.step_limiter!) + return Feagin10Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, + k15, k16, k17, tmp, atmp, k, tab, alg.step_limiter! + ) end -function alg_cache(alg::Feagin10, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Feagin10, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - Feagin10ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return Feagin10ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct Feagin12Cache{uType, uNoUnitsType, rateType, TabType, StepLimiter} <: - FeaginCache + FeaginCache u::uType uprev::uType fsalfirst::rateType @@ -103,10 +109,12 @@ end step_limiter!::StepLimiter end -function alg_cache(alg::Feagin12, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Feagin12, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = Feagin12ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) k2 = zero(rate_prototype) @@ -138,20 +146,24 @@ function alg_cache(alg::Feagin12, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmp, false) k = zero(rate_prototype) - Feagin12Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, + return Feagin12Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, k24, - k25, tmp, atmp, k, tab, alg.step_limiter!) + k25, tmp, atmp, k, tab, alg.step_limiter! + ) end -function alg_cache(alg::Feagin12, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Feagin12, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - Feagin12ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return Feagin12ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct Feagin14Cache{uType, uNoUnitsType, rateType, TabType, StepLimiter} <: - FeaginCache + FeaginCache u::uType uprev::uType fsalfirst::rateType @@ -196,10 +208,12 @@ end step_limiter!::StepLimiter end -function alg_cache(alg::Feagin14, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Feagin14, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = Feagin14ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) k2 = zero(rate_prototype) @@ -241,15 +255,19 @@ function alg_cache(alg::Feagin14, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmp, false) k = zero(rate_prototype) - Feagin14Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, + return Feagin14Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k30, - k31, k32, k33, k34, k35, tmp, atmp, k, tab, alg.step_limiter!) + k31, k32, k33, k34, k35, tmp, atmp, k, tab, alg.step_limiter! + ) end -function alg_cache(alg::Feagin14, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Feagin14, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - Feagin14ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return Feagin14ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end diff --git a/lib/OrdinaryDiffEqFeagin/src/feagin_rk_perform_step.jl b/lib/OrdinaryDiffEqFeagin/src/feagin_rk_perform_step.jl index e3c1a36328..ea79d1e16e 100644 --- a/lib/OrdinaryDiffEqFeagin/src/feagin_rk_perform_step.jl +++ b/lib/OrdinaryDiffEqFeagin/src/feagin_rk_perform_step.jl @@ -7,11 +7,13 @@ function initialize!(integrator, cache::Feagin10ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -@muladd function perform_step!(integrator, cache::Feagin10ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Feagin10ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; adaptiveConst, a0100, a0200, a0201, a0300, a0302, a0400, a0402, a0403, a0500, a0503, a0504, a0600, a0603, a0604, a0605, a0700, a0704, a0705, a0706, a0800, a0805, a0806, a0807, a0900, a0905, a0906, a0907, a0908, a1000, a1005, a1006, a1007, a1008, a1009, a1100, a1105, a1106, a1107, a1108, a1109, a1110, a1200, a1203, a1204, a1205, a1206, a1207, a1208, a1209, a1210, a1211, a1300, a1302, a1303, a1305, a1306, a1307, a1308, a1309, a1310, a1311, a1312, a1400, a1401, a1404, a1406, a1412, a1413, a1500, a1502, a1514, a1600, a1601, a1602, a1604, a1605, a1606, a1607, a1608, a1609, a1610, a1611, a1612, a1613, a1614, a1615, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16) = cache k1 = integrator.fsalfirst @@ -24,57 +26,77 @@ end k7 = f(uprev + dt * (a0600 * k1 + a0603 * k4 + a0604 * k5 + a0605 * k6), p, t + c6 * dt) k8 = f(uprev + dt * (a0700 * k1 + a0704 * k5 + a0705 * k6 + a0706 * k7), p, t + c7 * dt) k9 = f(uprev + dt * (a0800 * k1 + a0805 * k6 + a0806 * k7 + a0807 * k8), p, t + c8 * dt) - k10 = f(uprev + dt * (a0900 * k1 + a0905 * k6 + a0906 * k7 + a0907 * k8 + a0908 * k9), - p, t + c9 * dt) + k10 = f( + uprev + dt * (a0900 * k1 + a0905 * k6 + a0906 * k7 + a0907 * k8 + a0908 * k9), + p, t + c9 * dt + ) k11 = f( uprev + - dt * - (a1000 * k1 + a1005 * k6 + a1006 * k7 + a1007 * k8 + a1008 * k9 + a1009 * k10), - p, t + c10 * dt) + dt * + (a1000 * k1 + a1005 * k6 + a1006 * k7 + a1007 * k8 + a1008 * k9 + a1009 * k10), + p, t + c10 * dt + ) k12 = f( uprev + - dt * - (a1100 * k1 + a1105 * k6 + a1106 * k7 + a1107 * k8 + a1108 * k9 + a1109 * k10 + - a1110 * k11), + dt * + ( + a1100 * k1 + a1105 * k6 + a1106 * k7 + a1107 * k8 + a1108 * k9 + a1109 * k10 + + a1110 * k11 + ), p, - t + c11 * dt) + t + c11 * dt + ) k13 = f( uprev + - dt * - (a1200 * k1 + a1203 * k4 + a1204 * k5 + a1205 * k6 + a1206 * k7 + a1207 * k8 + - a1208 * k9 + a1209 * k10 + a1210 * k11 + a1211 * k12), + dt * + ( + a1200 * k1 + a1203 * k4 + a1204 * k5 + a1205 * k6 + a1206 * k7 + a1207 * k8 + + a1208 * k9 + a1209 * k10 + a1210 * k11 + a1211 * k12 + ), p, - t + c12 * dt) + t + c12 * dt + ) k14 = f( uprev + - dt * - (a1300 * k1 + a1302 * k3 + a1303 * k4 + a1305 * k6 + a1306 * k7 + a1307 * k8 + - a1308 * k9 + a1309 * k10 + a1310 * k11 + a1311 * k12 + a1312 * k13), + dt * + ( + a1300 * k1 + a1302 * k3 + a1303 * k4 + a1305 * k6 + a1306 * k7 + a1307 * k8 + + a1308 * k9 + a1309 * k10 + a1310 * k11 + a1311 * k12 + a1312 * k13 + ), p, - t + c13 * dt) + t + c13 * dt + ) k15 = f( uprev + - dt * - (a1400 * k1 + a1401 * k2 + a1404 * k5 + a1406 * k7 + a1412 * k13 + a1413 * k14), - p, t + c14 * dt) + dt * + (a1400 * k1 + a1401 * k2 + a1404 * k5 + a1406 * k7 + a1412 * k13 + a1413 * k14), + p, t + c14 * dt + ) k16 = f(uprev + dt * (a1500 * k1 + a1502 * k3 + a1514 * k15), p, t + c15 * dt) k17 = f( uprev + - dt * - (a1600 * k1 + a1601 * k2 + a1602 * k3 + a1604 * k5 + a1605 * k6 + a1606 * k7 + - a1607 * k8 + a1608 * k9 + a1609 * k10 + a1610 * k11 + a1611 * k12 + - a1612 * k13 + a1613 * k14 + a1614 * k15 + a1615 * k16), + dt * + ( + a1600 * k1 + a1601 * k2 + a1602 * k3 + a1604 * k5 + a1605 * k6 + a1606 * k7 + + a1607 * k8 + a1608 * k9 + a1609 * k10 + a1610 * k11 + a1611 * k12 + + a1612 * k13 + a1613 * k14 + a1614 * k15 + a1615 * k16 + ), p, - t + c16 * dt) + t + c16 * dt + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 16) u = uprev + dt * - (b1 * k1 + b2 * k2 + b3 * k3 + b5 * k5 + b7 * k7 + b9 * k9 + b10 * k10 + b11 * k11 + - b12 * k12 + b13 * k13 + b14 * k14 + b15 * k15 + b16 * k16 + b17 * k17) + ( + b1 * k1 + b2 * k2 + b3 * k3 + b5 * k5 + b7 * k7 + b9 * k9 + b10 * k10 + b11 * k11 + + b12 * k12 + b13 * k13 + b14 * k14 + b15 * k15 + b16 * k16 + b17 * k17 + ) if integrator.opts.adaptive - utilde = @.. broadcast=false dt*(k2-k16)*adaptiveConst - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + utilde = @.. broadcast = false dt * (k2 - k16) * adaptiveConst + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end k = f(u, p, t + dt) # For the interpolation, needs k at the updated point @@ -91,7 +113,7 @@ function initialize!(integrator, cache::Feagin10Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end #= @@ -172,64 +194,76 @@ end f(k6, tmp, p, t + c5 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a0600 * k1[i] + a0603 * k4[i] + a0604 * k5[i] + a0605 * k6[i]) + dt * + (a0600 * k1[i] + a0603 * k4[i] + a0604 * k5[i] + a0605 * k6[i]) end f(k7, tmp, p, t + c6 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a0700 * k1[i] + a0704 * k5[i] + a0705 * k6[i] + a0706 * k7[i]) + dt * + (a0700 * k1[i] + a0704 * k5[i] + a0705 * k6[i] + a0706 * k7[i]) end f(k8, tmp, p, t + c7 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a0800 * k1[i] + a0805 * k6[i] + a0806 * k7[i] + a0807 * k8[i]) + dt * + (a0800 * k1[i] + a0805 * k6[i] + a0806 * k7[i] + a0807 * k8[i]) end f(k9, tmp, p, t + c8 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a0900 * k1[i] + a0905 * k6[i] + a0906 * k7[i] + a0907 * k8[i] + - a0908 * k9[i]) + dt * + ( + a0900 * k1[i] + a0905 * k6[i] + a0906 * k7[i] + a0907 * k8[i] + + a0908 * k9[i] + ) end f(k10, tmp, p, t + c9 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a1000 * k1[i] + a1005 * k6[i] + a1006 * k7[i] + a1007 * k8[i] + - a1008 * k9[i] + a1009 * k10[i]) + dt * + ( + a1000 * k1[i] + a1005 * k6[i] + a1006 * k7[i] + a1007 * k8[i] + + a1008 * k9[i] + a1009 * k10[i] + ) end f(k11, tmp, p, t + c10 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a1100 * k1[i] + a1105 * k6[i] + a1106 * k7[i] + a1107 * k8[i] + - a1108 * k9[i] + a1109 * k10[i] + a1110 * k11[i]) + dt * + ( + a1100 * k1[i] + a1105 * k6[i] + a1106 * k7[i] + a1107 * k8[i] + + a1108 * k9[i] + a1109 * k10[i] + a1110 * k11[i] + ) end f(k12, tmp, p, t + c11 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a1200 * k1[i] + a1203 * k4[i] + a1204 * k5[i] + a1205 * k6[i] + - a1206 * k7[i] + a1207 * k8[i] + a1208 * k9[i] + a1209 * k10[i] + - a1210 * k11[i] + a1211 * k12[i]) + dt * + ( + a1200 * k1[i] + a1203 * k4[i] + a1204 * k5[i] + a1205 * k6[i] + + a1206 * k7[i] + a1207 * k8[i] + a1208 * k9[i] + a1209 * k10[i] + + a1210 * k11[i] + a1211 * k12[i] + ) end f(k13, tmp, p, t + c12 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a1300 * k1[i] + a1302 * k3[i] + a1303 * k4[i] + a1305 * k6[i] + - a1306 * k7[i] + a1307 * k8[i] + a1308 * k9[i] + a1309 * k10[i] + - a1310 * k11[i] + a1311 * k12[i] + a1312 * k13[i]) + dt * + ( + a1300 * k1[i] + a1302 * k3[i] + a1303 * k4[i] + a1305 * k6[i] + + a1306 * k7[i] + a1307 * k8[i] + a1308 * k9[i] + a1309 * k10[i] + + a1310 * k11[i] + a1311 * k12[i] + a1312 * k13[i] + ) end f(k14, tmp, p, t + c13 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a1400 * k1[i] + a1401 * k2[i] + a1404 * k5[i] + a1406 * k7[i] + - a1412 * k13[i] + a1413 * k14[i]) + dt * + ( + a1400 * k1[i] + a1401 * k2[i] + a1404 * k5[i] + a1406 * k7[i] + + a1412 * k13[i] + a1413 * k14[i] + ) end f(k15, tmp, p, t + c14 * dt) @tight_loop_macros for i in uidx @@ -238,21 +272,25 @@ end f(k16, tmp, p, t + c15 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a1600 * k1[i] + a1601 * k2[i] + a1602 * k3[i] + a1604 * k5[i] + - a1605 * k6[i] + a1606 * k7[i] + a1607 * k8[i] + a1608 * k9[i] + - a1609 * k10[i] + a1610 * k11[i] + a1611 * k12[i] + - a1612 * k13[i] + a1613 * k14[i] + a1614 * k15[i] + - a1615 * k16[i]) + dt * + ( + a1600 * k1[i] + a1601 * k2[i] + a1602 * k3[i] + a1604 * k5[i] + + a1605 * k6[i] + a1606 * k7[i] + a1607 * k8[i] + a1608 * k9[i] + + a1609 * k10[i] + a1610 * k11[i] + a1611 * k12[i] + + a1612 * k13[i] + a1613 * k14[i] + a1614 * k15[i] + + a1615 * k16[i] + ) end f(k17, tmp, p, t + c16 * dt) @tight_loop_macros for i in uidx @inbounds u[i] = uprev[i] + - dt * - (b1 * k1[i] + b2 * k2[i] + b3 * k3[i] + b5 * k5[i] + b7 * k7[i] + - b9 * k9[i] + b10 * k10[i] + b11 * k11[i] + b12 * k12[i] + - b13 * k13[i] + b14 * k14[i] + b15 * k15[i] + b16 * k16[i] + - b17 * k17[i]) + dt * + ( + b1 * k1[i] + b2 * k2[i] + b3 * k3[i] + b5 * k5[i] + b7 * k7[i] + + b9 * k9[i] + b10 * k10[i] + b11 * k11[i] + b12 * k12[i] + + b13 * k13[i] + b14 * k14[i] + b15 * k15[i] + b16 * k16[i] + + b17 * k17[i] + ) end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 16) @@ -262,8 +300,10 @@ end @tight_loop_macros for i in uidx @inbounds tmp[i] = dt * (k2[i] - k16[i]) * adaptiveConst end - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end f(integrator.fsallast, u, p, t + dt) # For the interpolation, needs k at the updated point @@ -279,11 +319,13 @@ function initialize!(integrator, cache::Feagin12ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -@muladd function perform_step!(integrator, cache::Feagin12ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Feagin12ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; adaptiveConst, a0100, a0200, a0201, a0300, a0302, a0400, a0402, a0403, a0500, a0503, a0504, a0600, a0603, a0604, a0605, a0700, a0704, a0705, a0706, a0800, a0805, a0806, a0807, a0900, a0905, a0906, a0907, a0908, a1000, a1005, a1006, a1007, a1008, a1009, a1100, a1105, a1106, a1107, a1108, a1109, a1110, a1200, a1208, a1209, a1210, a1211, a1300, a1308, a1309, a1310, a1311, a1312, a1400, a1408, a1409, a1410, a1411, a1412, a1413, a1500, a1508, a1509, a1510, a1511, a1512, a1513, a1514, a1600, a1608, a1609, a1610, a1611, a1612, a1613, a1614, a1615, a1700, a1705, a1706, a1707, a1708, a1709, a1710, a1711, a1712, a1713, a1714, a1715, a1716, a1800, a1805, a1806, a1807, a1808, a1809, a1810, a1811, a1812, a1813, a1814, a1815, a1816, a1817, a1900, a1904, a1905, a1906, a1908, a1909, a1910, a1911, a1912, a1913, a1914, a1915, a1916, a1917, a1918, a2000, a2003, a2004, a2005, a2007, a2009, a2010, a2017, a2018, a2019, a2100, a2102, a2103, a2106, a2107, a2109, a2110, a2117, a2118, a2119, a2120, a2200, a2201, a2204, a2206, a2220, a2221, a2300, a2302, a2322, a2400, a2401, a2402, a2404, a2406, a2407, a2408, a2409, a2410, a2411, a2412, a2413, a2414, a2415, a2416, a2417, a2418, a2419, a2420, a2421, a2422, a2423, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25) = cache k1 = integrator.fsalfirst @@ -296,118 +338,162 @@ end k7 = f(uprev + dt * (a0600 * k1 + a0603 * k4 + a0604 * k5 + a0605 * k6), p, t + c6 * dt) k8 = f(uprev + dt * (a0700 * k1 + a0704 * k5 + a0705 * k6 + a0706 * k7), p, t + c7 * dt) k9 = f(uprev + dt * (a0800 * k1 + a0805 * k6 + a0806 * k7 + a0807 * k8), p, t + c8 * dt) - k10 = f(uprev + dt * (a0900 * k1 + a0905 * k6 + a0906 * k7 + a0907 * k8 + a0908 * k9), - p, t + c9 * dt) + k10 = f( + uprev + dt * (a0900 * k1 + a0905 * k6 + a0906 * k7 + a0907 * k8 + a0908 * k9), + p, t + c9 * dt + ) k11 = f( uprev + - dt * - (a1000 * k1 + a1005 * k6 + a1006 * k7 + a1007 * k8 + a1008 * k9 + a1009 * k10), - p, t + c10 * dt) + dt * + (a1000 * k1 + a1005 * k6 + a1006 * k7 + a1007 * k8 + a1008 * k9 + a1009 * k10), + p, t + c10 * dt + ) k12 = f( uprev + - dt * - (a1100 * k1 + a1105 * k6 + a1106 * k7 + a1107 * k8 + a1108 * k9 + a1109 * k10 + - a1110 * k11), + dt * + ( + a1100 * k1 + a1105 * k6 + a1106 * k7 + a1107 * k8 + a1108 * k9 + a1109 * k10 + + a1110 * k11 + ), p, - t + c11 * dt) + t + c11 * dt + ) k13 = f( uprev + - dt * (a1200 * k1 + a1208 * k9 + a1209 * k10 + a1210 * k11 + a1211 * k12), p, - t + c12 * dt) + dt * (a1200 * k1 + a1208 * k9 + a1209 * k10 + a1210 * k11 + a1211 * k12), p, + t + c12 * dt + ) k14 = f( uprev + - dt * (a1300 * k1 + a1308 * k9 + a1309 * k10 + a1310 * k11 + a1311 * k12 + - a1312 * k13), + dt * ( + a1300 * k1 + a1308 * k9 + a1309 * k10 + a1310 * k11 + a1311 * k12 + + a1312 * k13 + ), p, - t + c13 * dt) + t + c13 * dt + ) k15 = f( uprev + - dt * (a1400 * k1 + a1408 * k9 + a1409 * k10 + a1410 * k11 + a1411 * k12 + - a1412 * k13 + a1413 * k14), + dt * ( + a1400 * k1 + a1408 * k9 + a1409 * k10 + a1410 * k11 + a1411 * k12 + + a1412 * k13 + a1413 * k14 + ), p, - t + c14 * dt) + t + c14 * dt + ) k16 = f( uprev + - dt * (a1500 * k1 + a1508 * k9 + a1509 * k10 + a1510 * k11 + a1511 * k12 + - a1512 * k13 + a1513 * k14 + a1514 * k15), + dt * ( + a1500 * k1 + a1508 * k9 + a1509 * k10 + a1510 * k11 + a1511 * k12 + + a1512 * k13 + a1513 * k14 + a1514 * k15 + ), p, - t + c15 * dt) + t + c15 * dt + ) k17 = f( uprev + - dt * ((a1600 * k1 + a1608 * k9 + a1609 * k10) + - (a1610 * k11 + a1611 * k12 + a1612 * k13 + a1613 * k14) + - (a1614 * k15 + a1615 * k16)), + dt * ( + (a1600 * k1 + a1608 * k9 + a1609 * k10) + + (a1610 * k11 + a1611 * k12 + a1612 * k13 + a1613 * k14) + + (a1614 * k15 + a1615 * k16) + ), p, - t + c16 * dt) + t + c16 * dt + ) k18 = f( uprev + - dt * ((a1700 * k1 + a1705 * k6 + a1706 * k7) + - (a1707 * k8 + a1708 * k9 + a1709 * k10 + a1710 * k11) + - (a1711 * k12 + a1712 * k13 + a1713 * k14 + a1714 * k15) + - (a1715 * k16 + a1716 * k17)), + dt * ( + (a1700 * k1 + a1705 * k6 + a1706 * k7) + + (a1707 * k8 + a1708 * k9 + a1709 * k10 + a1710 * k11) + + (a1711 * k12 + a1712 * k13 + a1713 * k14 + a1714 * k15) + + (a1715 * k16 + a1716 * k17) + ), p, - t + c17 * dt) + t + c17 * dt + ) k19 = f( uprev + - dt * ((a1800 * k1 + a1805 * k6 + a1806 * k7) + - (a1807 * k8 + a1808 * k9 + a1809 * k10 + a1810 * k11) + - (a1811 * k12 + a1812 * k13 + a1813 * k14 + a1814 * k15) + - (a1815 * k16 + a1816 * k17 + a1817 * k18)), + dt * ( + (a1800 * k1 + a1805 * k6 + a1806 * k7) + + (a1807 * k8 + a1808 * k9 + a1809 * k10 + a1810 * k11) + + (a1811 * k12 + a1812 * k13 + a1813 * k14 + a1814 * k15) + + (a1815 * k16 + a1816 * k17 + a1817 * k18) + ), p, - t + c18 * dt) + t + c18 * dt + ) k20 = f( uprev + - dt * ((a1900 * k1 + a1904 * k5 + a1905 * k6) + - (a1906 * k7 + a1908 * k9 + a1909 * k10 + a1910 * k11) + - (a1911 * k12 + a1912 * k13 + a1913 * k14 + a1914 * k15) + - (a1915 * k16 + a1916 * k17 + a1917 * k18 + a1918 * k19)), + dt * ( + (a1900 * k1 + a1904 * k5 + a1905 * k6) + + (a1906 * k7 + a1908 * k9 + a1909 * k10 + a1910 * k11) + + (a1911 * k12 + a1912 * k13 + a1913 * k14 + a1914 * k15) + + (a1915 * k16 + a1916 * k17 + a1917 * k18 + a1918 * k19) + ), p, - t + c19 * dt) + t + c19 * dt + ) k21 = f( uprev + - dt * ((a2000 * k1 + a2003 * k4 + a2004 * k5) + - (a2005 * k6 + a2007 * k8 + a2009 * k10 + a2010 * k11) + - (a2017 * k18 + a2018 * k19 + a2019 * k20)), + dt * ( + (a2000 * k1 + a2003 * k4 + a2004 * k5) + + (a2005 * k6 + a2007 * k8 + a2009 * k10 + a2010 * k11) + + (a2017 * k18 + a2018 * k19 + a2019 * k20) + ), p, - t + c20 * dt) + t + c20 * dt + ) k22 = f( uprev + - dt * ((a2100 * k1 + a2102 * k3 + a2103 * k4) + - (a2106 * k7 + a2107 * k8 + a2109 * k10 + a2110 * k11) + - (a2117 * k18 + a2118 * k19 + a2119 * k20 + a2120 * k21)), + dt * ( + (a2100 * k1 + a2102 * k3 + a2103 * k4) + + (a2106 * k7 + a2107 * k8 + a2109 * k10 + a2110 * k11) + + (a2117 * k18 + a2118 * k19 + a2119 * k20 + a2120 * k21) + ), p, - t + c21 * dt) + t + c21 * dt + ) k23 = f( uprev + - dt * ((a2200 * k1 + a2201 * k2 + a2204 * k5) + - (a2206 * k7 + a2220 * k21 + a2221 * k22)), + dt * ( + (a2200 * k1 + a2201 * k2 + a2204 * k5) + + (a2206 * k7 + a2220 * k21 + a2221 * k22) + ), p, - t + c22 * dt) + t + c22 * dt + ) k24 = f(uprev + dt * (a2300 * k1 + a2302 * k3 + a2322 * k23), p, t + c23 * dt) k25 = f( uprev + - dt * ((a2400 * k1 + a2401 * k2 + a2402 * k3) + - (a2404 * k5 + a2406 * k7 + a2407 * k8 + a2408 * k9) + - (a2409 * k10 + a2410 * k11 + a2411 * k12 + a2412 * k13) + - (a2413 * k14 + a2414 * k15 + a2415 * k16 + a2416 * k17) + - (a2417 * k18 + a2418 * k19 + a2419 * k20 + a2420 * k21) + - (a2421 * k22 + a2422 * k23 + a2423 * k24)), + dt * ( + (a2400 * k1 + a2401 * k2 + a2402 * k3) + + (a2404 * k5 + a2406 * k7 + a2407 * k8 + a2408 * k9) + + (a2409 * k10 + a2410 * k11 + a2411 * k12 + a2412 * k13) + + (a2413 * k14 + a2414 * k15 + a2415 * k16 + a2416 * k17) + + (a2417 * k18 + a2418 * k19 + a2419 * k20 + a2420 * k21) + + (a2421 * k22 + a2422 * k23 + a2423 * k24) + ), p, - t + c24 * dt) + t + c24 * dt + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 24) u = uprev + - dt * ((b1 * k1 + b2 * k2 + b3 * k3 + b5 * k5) + - (b7 * k7 + b8 * k8 + b10 * k10 + b11 * k11) + - (b13 * k13 + b14 * k14 + b15 * k15 + b16 * k16) + - (b17 * k17 + b18 * k18 + b19 * k19 + b20 * k20) + - (b21 * k21 + b22 * k22 + b23 * k23) + (b24 * k24 + b25 * k25)) + dt * ( + (b1 * k1 + b2 * k2 + b3 * k3 + b5 * k5) + + (b7 * k7 + b8 * k8 + b10 * k10 + b11 * k11) + + (b13 * k13 + b14 * k14 + b15 * k15 + b16 * k16) + + (b17 * k17 + b18 * k18 + b19 * k19 + b20 * k20) + + (b21 * k21 + b22 * k22 + b23 * k23) + (b24 * k24 + b25 * k25) + ) k = f(u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.fsallast = k if integrator.opts.adaptive - utilde = @.. broadcast=false dt*(k2-k24)*adaptiveConst - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + utilde = @.. broadcast = false dt * (k2 - k24) * adaptiveConst + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = integrator.fsalfirst @@ -421,7 +507,7 @@ function initialize!(integrator, cache::Feagin12Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end #= @@ -518,127 +604,177 @@ end f(k6, tmp, p, t + c5 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a0600 * k1[i] + a0603 * k4[i] + a0604 * k5[i] + a0605 * k6[i]) + dt * + (a0600 * k1[i] + a0603 * k4[i] + a0604 * k5[i] + a0605 * k6[i]) end f(k7, tmp, p, t + c6 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a0700 * k1[i] + a0704 * k5[i] + a0705 * k6[i] + a0706 * k7[i]) + dt * + (a0700 * k1[i] + a0704 * k5[i] + a0705 * k6[i] + a0706 * k7[i]) end f(k8, tmp, p, t + c7 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a0800 * k1[i] + a0805 * k6[i] + a0806 * k7[i] + a0807 * k8[i]) + dt * + (a0800 * k1[i] + a0805 * k6[i] + a0806 * k7[i] + a0807 * k8[i]) end f(k9, tmp, p, t + c8 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a0900 * k1[i] + a0905 * k6[i] + a0906 * k7[i] + a0907 * k8[i] + - a0908 * k9[i]) + dt * + ( + a0900 * k1[i] + a0905 * k6[i] + a0906 * k7[i] + a0907 * k8[i] + + a0908 * k9[i] + ) end f(k10, tmp, p, t + c9 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a1000 * k1[i] + a1005 * k6[i] + a1006 * k7[i] + a1007 * k8[i] + - a1008 * k9[i] + a1009 * k10[i]) + dt * + ( + a1000 * k1[i] + a1005 * k6[i] + a1006 * k7[i] + a1007 * k8[i] + + a1008 * k9[i] + a1009 * k10[i] + ) end f(k11, tmp, p, t + c10 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a1100 * k1[i] + a1105 * k6[i] + a1106 * k7[i] + a1107 * k8[i] + - a1108 * k9[i] + a1109 * k10[i] + a1110 * k11[i]) + dt * + ( + a1100 * k1[i] + a1105 * k6[i] + a1106 * k7[i] + a1107 * k8[i] + + a1108 * k9[i] + a1109 * k10[i] + a1110 * k11[i] + ) end f(k12, tmp, p, t + c11 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a1200 * k1[i] + a1208 * k9[i] + a1209 * k10[i] + - a1210 * k11[i] + a1211 * k12[i]) + dt * ( + a1200 * k1[i] + a1208 * k9[i] + a1209 * k10[i] + + a1210 * k11[i] + a1211 * k12[i] + ) end f(k13, tmp, p, t + c12 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a1300 * k1[i] + a1308 * k9[i] + a1309 * k10[i] + - a1310 * k11[i] + a1311 * k12[i] + a1312 * k13[i]) + dt * ( + a1300 * k1[i] + a1308 * k9[i] + a1309 * k10[i] + + a1310 * k11[i] + a1311 * k12[i] + a1312 * k13[i] + ) end f(k14, tmp, p, t + c13 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a1400 * k1[i] + a1408 * k9[i] + a1409 * k10[i] + - a1410 * k11[i] + a1411 * k12[i] + a1412 * k13[i] + - a1413 * k14[i]) + dt * ( + a1400 * k1[i] + a1408 * k9[i] + a1409 * k10[i] + + a1410 * k11[i] + a1411 * k12[i] + a1412 * k13[i] + + a1413 * k14[i] + ) end f(k15, tmp, p, t + c14 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a1500 * k1[i] + a1508 * k9[i] + a1509 * k10[i] + - a1510 * k11[i] + a1511 * k12[i] + a1512 * k13[i] + - a1513 * k14[i] + a1514 * k15[i]) + dt * ( + a1500 * k1[i] + a1508 * k9[i] + a1509 * k10[i] + + a1510 * k11[i] + a1511 * k12[i] + a1512 * k13[i] + + a1513 * k14[i] + a1514 * k15[i] + ) end f(k16, tmp, p, t + c15 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * ((a1600 * k1[i] + a1608 * k9[i] + a1609 * k10[i]) + - (a1610 * k11[i] + a1611 * k12[i] + a1612 * k13[i] + - a1613 * k14[i]) + (a1614 * k15[i] + a1615 * k16[i])) + dt * ( + (a1600 * k1[i] + a1608 * k9[i] + a1609 * k10[i]) + + ( + a1610 * k11[i] + a1611 * k12[i] + a1612 * k13[i] + + a1613 * k14[i] + ) + (a1614 * k15[i] + a1615 * k16[i]) + ) end f(k17, tmp, p, t + c16 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * ((a1700 * k1[i] + a1705 * k6[i] + a1706 * k7[i]) + - (a1707 * k8[i] + a1708 * k9[i] + a1709 * k10[i] + - a1710 * k11[i]) + - (a1711 * k12[i] + a1712 * k13[i] + a1713 * k14[i] + - a1714 * k15[i]) + (a1715 * k16[i] + a1716 * k17[i])) + dt * ( + (a1700 * k1[i] + a1705 * k6[i] + a1706 * k7[i]) + + ( + a1707 * k8[i] + a1708 * k9[i] + a1709 * k10[i] + + a1710 * k11[i] + ) + + ( + a1711 * k12[i] + a1712 * k13[i] + a1713 * k14[i] + + a1714 * k15[i] + ) + (a1715 * k16[i] + a1716 * k17[i]) + ) end f(k18, tmp, p, t + c17 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * ((a1800 * k1[i] + a1805 * k6[i] + a1806 * k7[i]) + - (a1807 * k8[i] + a1808 * k9[i] + a1809 * k10[i] + - a1810 * k11[i]) + - (a1811 * k12[i] + a1812 * k13[i] + a1813 * k14[i] + - a1814 * k15[i]) + - (a1815 * k16[i] + a1816 * k17[i] + a1817 * k18[i])) + dt * ( + (a1800 * k1[i] + a1805 * k6[i] + a1806 * k7[i]) + + ( + a1807 * k8[i] + a1808 * k9[i] + a1809 * k10[i] + + a1810 * k11[i] + ) + + ( + a1811 * k12[i] + a1812 * k13[i] + a1813 * k14[i] + + a1814 * k15[i] + ) + + (a1815 * k16[i] + a1816 * k17[i] + a1817 * k18[i]) + ) end f(k19, tmp, p, t + c18 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * ((a1900 * k1[i] + a1904 * k5[i] + a1905 * k6[i]) + - (a1906 * k7[i] + a1908 * k9[i] + a1909 * k10[i] + - a1910 * k11[i]) + - (a1911 * k12[i] + a1912 * k13[i] + a1913 * k14[i] + - a1914 * k15[i]) + - (a1915 * k16[i] + a1916 * k17[i] + a1917 * k18[i] + - a1918 * k19[i])) + dt * ( + (a1900 * k1[i] + a1904 * k5[i] + a1905 * k6[i]) + + ( + a1906 * k7[i] + a1908 * k9[i] + a1909 * k10[i] + + a1910 * k11[i] + ) + + ( + a1911 * k12[i] + a1912 * k13[i] + a1913 * k14[i] + + a1914 * k15[i] + ) + + ( + a1915 * k16[i] + a1916 * k17[i] + a1917 * k18[i] + + a1918 * k19[i] + ) + ) end f(k20, tmp, p, t + c19 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * ((a2000 * k1[i] + a2003 * k4[i] + a2004 * k5[i]) + - (a2005 * k6[i] + a2007 * k8[i] + a2009 * k10[i] + - a2010 * k11[i]) + - (a2017 * k18[i] + a2018 * k19[i] + a2019 * k20[i])) + dt * ( + (a2000 * k1[i] + a2003 * k4[i] + a2004 * k5[i]) + + ( + a2005 * k6[i] + a2007 * k8[i] + a2009 * k10[i] + + a2010 * k11[i] + ) + + (a2017 * k18[i] + a2018 * k19[i] + a2019 * k20[i]) + ) end f(k21, tmp, p, t + c20 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * ((a2100 * k1[i] + a2102 * k3[i] + a2103 * k4[i]) + - (a2106 * k7[i] + a2107 * k8[i] + a2109 * k10[i] + - a2110 * k11[i]) + - (a2117 * k18[i] + a2118 * k19[i] + a2119 * k20[i] + - a2120 * k21[i])) + dt * ( + (a2100 * k1[i] + a2102 * k3[i] + a2103 * k4[i]) + + ( + a2106 * k7[i] + a2107 * k8[i] + a2109 * k10[i] + + a2110 * k11[i] + ) + + ( + a2117 * k18[i] + a2118 * k19[i] + a2119 * k20[i] + + a2120 * k21[i] + ) + ) end f(k22, tmp, p, t + c21 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * ((a2200 * k1[i] + a2201 * k2[i] + a2204 * k5[i]) + - (a2206 * k7[i] + a2220 * k21[i] + a2221 * k22[i])) + dt * ( + (a2200 * k1[i] + a2201 * k2[i] + a2204 * k5[i]) + + (a2206 * k7[i] + a2220 * k21[i] + a2221 * k22[i]) + ) end f(k23, tmp, p, t + c22 * dt) @tight_loop_macros for i in uidx @@ -647,26 +783,38 @@ end f(k24, tmp, p, t + c23 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * ((a2400 * k1[i] + a2401 * k2[i] + a2402 * k3[i]) + - (a2404 * k5[i] + a2406 * k7[i] + a2407 * k8[i] + - a2408 * k9[i]) + - (a2409 * k10[i] + a2410 * k11[i] + a2411 * k12[i] + - a2412 * k13[i]) + - (a2413 * k14[i] + a2414 * k15[i] + a2415 * k16[i] + - a2416 * k17[i]) + - (a2417 * k18[i] + a2418 * k19[i] + a2419 * k20[i] + - a2420 * k21[i]) + - (a2421 * k22[i] + a2422 * k23[i] + a2423 * k24[i])) + dt * ( + (a2400 * k1[i] + a2401 * k2[i] + a2402 * k3[i]) + + ( + a2404 * k5[i] + a2406 * k7[i] + a2407 * k8[i] + + a2408 * k9[i] + ) + + ( + a2409 * k10[i] + a2410 * k11[i] + a2411 * k12[i] + + a2412 * k13[i] + ) + + ( + a2413 * k14[i] + a2414 * k15[i] + a2415 * k16[i] + + a2416 * k17[i] + ) + + ( + a2417 * k18[i] + a2418 * k19[i] + a2419 * k20[i] + + a2420 * k21[i] + ) + + (a2421 * k22[i] + a2422 * k23[i] + a2423 * k24[i]) + ) end f(k25, tmp, p, t + c24 * dt) @tight_loop_macros for i in uidx @inbounds u[i] = uprev[i] + - dt * ((b1 * k1[i] + b2 * k2[i] + b3 * k3[i] + b5 * k5[i]) + - (b7 * k7[i] + b8 * k8[i] + b10 * k10[i] + b11 * k11[i]) + - (b13 * k13[i] + b14 * k14[i] + b15 * k15[i] + b16 * k16[i]) + - (b17 * k17[i] + b18 * k18[i] + b19 * k19[i] + b20 * k20[i]) + - (b21 * k21[i] + b22 * k22[i] + b23 * k23[i]) + - (b24 * k24[i] + b25 * k25[i])) + dt * ( + (b1 * k1[i] + b2 * k2[i] + b3 * k3[i] + b5 * k5[i]) + + (b7 * k7[i] + b8 * k8[i] + b10 * k10[i] + b11 * k11[i]) + + (b13 * k13[i] + b14 * k14[i] + b15 * k15[i] + b16 * k16[i]) + + (b17 * k17[i] + b18 * k18[i] + b19 * k19[i] + b20 * k20[i]) + + (b21 * k21[i] + b22 * k22[i] + b23 * k23[i]) + + (b24 * k24[i] + b25 * k25[i]) + ) end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 24) @@ -676,8 +824,10 @@ end @tight_loop_macros for i in uidx @inbounds tmp[i] = dt * (k2[i] - k24[i]) * adaptiveConst end - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end f(k, u, p, t + dt) @@ -693,11 +843,13 @@ function initialize!(integrator, cache::Feagin14ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -@muladd function perform_step!(integrator, cache::Feagin14ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Feagin14ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; adaptiveConst, a0100, a0200, a0201, a0300, a0302, a0400, a0402, a0403, a0500, a0503, a0504, a0600, a0603, a0604, a0605, a0700, a0704, a0705, a0706, a0800, a0805, a0806, a0807, a0900, a0905, a0906, a0907, a0908, a1000, a1005, a1006, a1007, a1008, a1009, a1100, a1105, a1106, a1107, a1108, a1109, a1110, a1200, a1208, a1209, a1210, a1211, a1300, a1308, a1309, a1310, a1311, a1312, a1400, a1408, a1409, a1410, a1411, a1412, a1413, a1500, a1508, a1509, a1510, a1511, a1512, a1513, a1514, a1600, a1608, a1609, a1610, a1611, a1612, a1613, a1614, a1615, a1700, a1712, a1713, a1714, a1715, a1716, a1800, a1812, a1813, a1814, a1815, a1816, a1817, a1900, a1912, a1913, a1914, a1915, a1916, a1917, a1918, a2000, a2012, a2013, a2014, a2015, a2016, a2017, a2018, a2019, a2100, a2112, a2113, a2114, a2115, a2116, a2117, a2118, a2119, a2120, a2200, a2212, a2213, a2214, a2215, a2216, a2217, a2218, a2219, a2220, a2221, a2300, a2308, a2309, a2310, a2311, a2312, a2313, a2314, a2315, a2316, a2317, a2318, a2319, a2320, a2321, a2322, a2400, a2408, a2409, a2410, a2411, a2412, a2413, a2414, a2415, a2416, a2417, a2418, a2419, a2420, a2421, a2422, a2423, a2500, a2508, a2509, a2510, a2511, a2512, a2513, a2514, a2515, a2516, a2517, a2518, a2519, a2520, a2521, a2522, a2523, a2524, a2600, a2605, a2606, a2607, a2608, a2609, a2610, a2612, a2613, a2614, a2615, a2616, a2617, a2618, a2619, a2620, a2621, a2622, a2623, a2624, a2625, a2700, a2705, a2706, a2707, a2708, a2709, a2711, a2712, a2713, a2714, a2715, a2716, a2717, a2718, a2719, a2720, a2721, a2722, a2723, a2724, a2725, a2726, a2800, a2805, a2806, a2807, a2808, a2810, a2811, a2813, a2814, a2815, a2823, a2824, a2825, a2826, a2827, a2900, a2904, a2905, a2906, a2909, a2910, a2911, a2913, a2914, a2915, a2923, a2924, a2925, a2926, a2927, a2928, a3000, a3003, a3004, a3005, a3007, a3009, a3010, a3013, a3014, a3015, a3023, a3024, a3025, a3027, a3028, a3029, a3100, a3102, a3103, a3106, a3107, a3109, a3110, a3113, a3114, a3115, a3123, a3124, a3125, a3127, a3128, a3129, a3130, a3200, a3201, a3204, a3206, a3230, a3231, a3300, a3302, a3332, a3400, a3401, a3402, a3404, a3406, a3407, a3409, a3410, a3411, a3412, a3413, a3414, a3415, a3416, a3417, a3418, a3419, a3420, a3421, a3422, a3423, a3424, a3425, a3426, a3427, a3428, a3429, a3430, a3431, a3432, a3433, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35) = cache k1 = integrator.fsalfirst @@ -710,190 +862,262 @@ end k7 = f(uprev + dt * (a0600 * k1 + a0603 * k4 + a0604 * k5 + a0605 * k6), p, t + c6 * dt) k8 = f(uprev + dt * (a0700 * k1 + a0704 * k5 + a0705 * k6 + a0706 * k7), p, t + c7 * dt) k9 = f(uprev + dt * (a0800 * k1 + a0805 * k6 + a0806 * k7 + a0807 * k8), p, t + c8 * dt) - k10 = f(uprev + dt * (a0900 * k1 + a0905 * k6 + a0906 * k7 + a0907 * k8 + a0908 * k9), - p, t + c9 * dt) + k10 = f( + uprev + dt * (a0900 * k1 + a0905 * k6 + a0906 * k7 + a0907 * k8 + a0908 * k9), + p, t + c9 * dt + ) k11 = f( uprev + - dt * - (a1000 * k1 + a1005 * k6 + a1006 * k7 + a1007 * k8 + a1008 * k9 + a1009 * k10), - p, t + c10 * dt) + dt * + (a1000 * k1 + a1005 * k6 + a1006 * k7 + a1007 * k8 + a1008 * k9 + a1009 * k10), + p, t + c10 * dt + ) k12 = f( uprev + - dt * - (a1100 * k1 + a1105 * k6 + a1106 * k7 + a1107 * k8 + a1108 * k9 + a1109 * k10 + - a1110 * k11), + dt * + ( + a1100 * k1 + a1105 * k6 + a1106 * k7 + a1107 * k8 + a1108 * k9 + a1109 * k10 + + a1110 * k11 + ), p, - t + c11 * dt) + t + c11 * dt + ) k13 = f( uprev + - dt * (a1200 * k1 + a1208 * k9 + a1209 * k10 + a1210 * k11 + a1211 * k12), p, - t + c12 * dt) + dt * (a1200 * k1 + a1208 * k9 + a1209 * k10 + a1210 * k11 + a1211 * k12), p, + t + c12 * dt + ) k14 = f( uprev + - dt * (a1300 * k1 + a1308 * k9 + a1309 * k10 + a1310 * k11 + a1311 * k12 + - a1312 * k13), + dt * ( + a1300 * k1 + a1308 * k9 + a1309 * k10 + a1310 * k11 + a1311 * k12 + + a1312 * k13 + ), p, - t + c13 * dt) + t + c13 * dt + ) k15 = f( uprev + - dt * (a1400 * k1 + a1408 * k9 + a1409 * k10 + a1410 * k11 + a1411 * k12 + - a1412 * k13 + a1413 * k14), + dt * ( + a1400 * k1 + a1408 * k9 + a1409 * k10 + a1410 * k11 + a1411 * k12 + + a1412 * k13 + a1413 * k14 + ), p, - t + c14 * dt) + t + c14 * dt + ) k16 = f( uprev + - dt * (a1500 * k1 + a1508 * k9 + a1509 * k10 + a1510 * k11 + a1511 * k12 + - a1512 * k13 + a1513 * k14 + a1514 * k15), + dt * ( + a1500 * k1 + a1508 * k9 + a1509 * k10 + a1510 * k11 + a1511 * k12 + + a1512 * k13 + a1513 * k14 + a1514 * k15 + ), p, - t + c15 * dt) + t + c15 * dt + ) k17 = f( uprev + - dt * (a1600 * k1 + a1608 * k9 + a1609 * k10 + a1610 * k11 + a1611 * k12 + - a1612 * k13 + a1613 * k14 + a1614 * k15 + a1615 * k16), + dt * ( + a1600 * k1 + a1608 * k9 + a1609 * k10 + a1610 * k11 + a1611 * k12 + + a1612 * k13 + a1613 * k14 + a1614 * k15 + a1615 * k16 + ), p, - t + c16 * dt) + t + c16 * dt + ) k18 = f( uprev + - dt * (a1700 * k1 + a1712 * k13 + a1713 * k14 + a1714 * k15 + a1715 * k16 + - a1716 * k17), + dt * ( + a1700 * k1 + a1712 * k13 + a1713 * k14 + a1714 * k15 + a1715 * k16 + + a1716 * k17 + ), p, - t + c17 * dt) + t + c17 * dt + ) k19 = f( uprev + - dt * (a1800 * k1 + a1812 * k13 + a1813 * k14 + a1814 * k15 + a1815 * k16 + - a1816 * k17 + a1817 * k18), + dt * ( + a1800 * k1 + a1812 * k13 + a1813 * k14 + a1814 * k15 + a1815 * k16 + + a1816 * k17 + a1817 * k18 + ), p, - t + c18 * dt) + t + c18 * dt + ) k20 = f( uprev + - dt * (a1900 * k1 + a1912 * k13 + a1913 * k14 + a1914 * k15 + a1915 * k16 + - a1916 * k17 + a1917 * k18 + a1918 * k19), + dt * ( + a1900 * k1 + a1912 * k13 + a1913 * k14 + a1914 * k15 + a1915 * k16 + + a1916 * k17 + a1917 * k18 + a1918 * k19 + ), p, - t + c19 * dt) + t + c19 * dt + ) k21 = f( uprev + - dt * (a2000 * k1 + a2012 * k13 + a2013 * k14 + a2014 * k15 + a2015 * k16 + - a2016 * k17 + a2017 * k18 + a2018 * k19 + a2019 * k20), + dt * ( + a2000 * k1 + a2012 * k13 + a2013 * k14 + a2014 * k15 + a2015 * k16 + + a2016 * k17 + a2017 * k18 + a2018 * k19 + a2019 * k20 + ), p, - t + c20 * dt) + t + c20 * dt + ) k22 = f( uprev + - dt * (a2100 * k1 + a2112 * k13 + a2113 * k14 + a2114 * k15 + a2115 * k16 + - a2116 * k17 + a2117 * k18 + a2118 * k19 + a2119 * k20 + a2120 * k21), + dt * ( + a2100 * k1 + a2112 * k13 + a2113 * k14 + a2114 * k15 + a2115 * k16 + + a2116 * k17 + a2117 * k18 + a2118 * k19 + a2119 * k20 + a2120 * k21 + ), p, - t + c21 * dt) + t + c21 * dt + ) k23 = f( uprev + - dt * (a2200 * k1 + a2212 * k13 + a2213 * k14 + a2214 * k15 + a2215 * k16 + - a2216 * k17 + a2217 * k18 + a2218 * k19 + a2219 * k20 + a2220 * k21 + - a2221 * k22), + dt * ( + a2200 * k1 + a2212 * k13 + a2213 * k14 + a2214 * k15 + a2215 * k16 + + a2216 * k17 + a2217 * k18 + a2218 * k19 + a2219 * k20 + a2220 * k21 + + a2221 * k22 + ), p, - t + c22 * dt) + t + c22 * dt + ) k24 = f( uprev + - dt * (a2300 * k1 + a2308 * k9 + a2309 * k10 + a2310 * k11 + a2311 * k12 + - a2312 * k13 + a2313 * k14 + a2314 * k15 + a2315 * k16 + a2316 * k17 + - a2317 * k18 + a2318 * k19 + a2319 * k20 + a2320 * k21 + a2321 * k22 + - a2322 * k23), + dt * ( + a2300 * k1 + a2308 * k9 + a2309 * k10 + a2310 * k11 + a2311 * k12 + + a2312 * k13 + a2313 * k14 + a2314 * k15 + a2315 * k16 + a2316 * k17 + + a2317 * k18 + a2318 * k19 + a2319 * k20 + a2320 * k21 + a2321 * k22 + + a2322 * k23 + ), p, - t + c23 * dt) + t + c23 * dt + ) k25 = f( uprev + - dt * (a2400 * k1 + a2408 * k9 + a2409 * k10 + a2410 * k11 + a2411 * k12 + - a2412 * k13 + a2413 * k14 + a2414 * k15 + a2415 * k16 + a2416 * k17 + - a2417 * k18 + a2418 * k19 + a2419 * k20 + a2420 * k21 + a2421 * k22 + - a2422 * k23 + a2423 * k24), + dt * ( + a2400 * k1 + a2408 * k9 + a2409 * k10 + a2410 * k11 + a2411 * k12 + + a2412 * k13 + a2413 * k14 + a2414 * k15 + a2415 * k16 + a2416 * k17 + + a2417 * k18 + a2418 * k19 + a2419 * k20 + a2420 * k21 + a2421 * k22 + + a2422 * k23 + a2423 * k24 + ), p, - t + c24 * dt) + t + c24 * dt + ) k26 = f( uprev + - dt * (a2500 * k1 + a2508 * k9 + a2509 * k10 + a2510 * k11 + a2511 * k12 + - a2512 * k13 + a2513 * k14 + a2514 * k15 + a2515 * k16 + a2516 * k17 + - a2517 * k18 + a2518 * k19 + a2519 * k20 + a2520 * k21 + a2521 * k22 + - a2522 * k23 + a2523 * k24 + a2524 * k25), + dt * ( + a2500 * k1 + a2508 * k9 + a2509 * k10 + a2510 * k11 + a2511 * k12 + + a2512 * k13 + a2513 * k14 + a2514 * k15 + a2515 * k16 + a2516 * k17 + + a2517 * k18 + a2518 * k19 + a2519 * k20 + a2520 * k21 + a2521 * k22 + + a2522 * k23 + a2523 * k24 + a2524 * k25 + ), p, - t + c25 * dt) + t + c25 * dt + ) k27 = f( uprev + - dt * - (a2600 * k1 + a2605 * k6 + a2606 * k7 + a2607 * k8 + a2608 * k9 + a2609 * k10 + - a2610 * k11 + a2612 * k13 + a2613 * k14 + a2614 * k15 + a2615 * k16 + - a2616 * k17 + a2617 * k18 + a2618 * k19 + a2619 * k20 + a2620 * k21 + - a2621 * k22 + a2622 * k23 + a2623 * k24 + a2624 * k25 + a2625 * k26), + dt * + ( + a2600 * k1 + a2605 * k6 + a2606 * k7 + a2607 * k8 + a2608 * k9 + a2609 * k10 + + a2610 * k11 + a2612 * k13 + a2613 * k14 + a2614 * k15 + a2615 * k16 + + a2616 * k17 + a2617 * k18 + a2618 * k19 + a2619 * k20 + a2620 * k21 + + a2621 * k22 + a2622 * k23 + a2623 * k24 + a2624 * k25 + a2625 * k26 + ), p, - t + c26 * dt) + t + c26 * dt + ) k28 = f( uprev + - dt * - (a2700 * k1 + a2705 * k6 + a2706 * k7 + a2707 * k8 + a2708 * k9 + a2709 * k10 + - a2711 * k12 + a2712 * k13 + a2713 * k14 + a2714 * k15 + a2715 * k16 + - a2716 * k17 + a2717 * k18 + a2718 * k19 + a2719 * k20 + a2720 * k21 + - a2721 * k22 + a2722 * k23 + a2723 * k24 + a2724 * k25 + a2725 * k26 + - a2726 * k27), + dt * + ( + a2700 * k1 + a2705 * k6 + a2706 * k7 + a2707 * k8 + a2708 * k9 + a2709 * k10 + + a2711 * k12 + a2712 * k13 + a2713 * k14 + a2714 * k15 + a2715 * k16 + + a2716 * k17 + a2717 * k18 + a2718 * k19 + a2719 * k20 + a2720 * k21 + + a2721 * k22 + a2722 * k23 + a2723 * k24 + a2724 * k25 + a2725 * k26 + + a2726 * k27 + ), p, - t + c27 * dt) + t + c27 * dt + ) k29 = f( uprev + - dt * - (a2800 * k1 + a2805 * k6 + a2806 * k7 + a2807 * k8 + a2808 * k9 + a2810 * k11 + - a2811 * k12 + a2813 * k14 + a2814 * k15 + a2815 * k16 + a2823 * k24 + - a2824 * k25 + a2825 * k26 + a2826 * k27 + a2827 * k28), + dt * + ( + a2800 * k1 + a2805 * k6 + a2806 * k7 + a2807 * k8 + a2808 * k9 + a2810 * k11 + + a2811 * k12 + a2813 * k14 + a2814 * k15 + a2815 * k16 + a2823 * k24 + + a2824 * k25 + a2825 * k26 + a2826 * k27 + a2827 * k28 + ), p, - t + c28 * dt) + t + c28 * dt + ) k30 = f( uprev + - dt * - (a2900 * k1 + a2904 * k5 + a2905 * k6 + a2906 * k7 + a2909 * k10 + a2910 * k11 + - a2911 * k12 + a2913 * k14 + a2914 * k15 + a2915 * k16 + a2923 * k24 + - a2924 * k25 + a2925 * k26 + a2926 * k27 + a2927 * k28 + a2928 * k29), + dt * + ( + a2900 * k1 + a2904 * k5 + a2905 * k6 + a2906 * k7 + a2909 * k10 + a2910 * k11 + + a2911 * k12 + a2913 * k14 + a2914 * k15 + a2915 * k16 + a2923 * k24 + + a2924 * k25 + a2925 * k26 + a2926 * k27 + a2927 * k28 + a2928 * k29 + ), p, - t + c29 * dt) + t + c29 * dt + ) k31 = f( uprev + - dt * - (a3000 * k1 + a3003 * k4 + a3004 * k5 + a3005 * k6 + a3007 * k8 + a3009 * k10 + - a3010 * k11 + a3013 * k14 + a3014 * k15 + a3015 * k16 + a3023 * k24 + - a3024 * k25 + a3025 * k26 + a3027 * k28 + a3028 * k29 + a3029 * k30), + dt * + ( + a3000 * k1 + a3003 * k4 + a3004 * k5 + a3005 * k6 + a3007 * k8 + a3009 * k10 + + a3010 * k11 + a3013 * k14 + a3014 * k15 + a3015 * k16 + a3023 * k24 + + a3024 * k25 + a3025 * k26 + a3027 * k28 + a3028 * k29 + a3029 * k30 + ), p, - t + c30 * dt) + t + c30 * dt + ) k32 = f( uprev + - dt * - (a3100 * k1 + a3102 * k3 + a3103 * k4 + a3106 * k7 + a3107 * k8 + a3109 * k10 + - a3110 * k11 + a3113 * k14 + a3114 * k15 + a3115 * k16 + a3123 * k24 + - a3124 * k25 + a3125 * k26 + a3127 * k28 + a3128 * k29 + a3129 * k30 + - a3130 * k31), + dt * + ( + a3100 * k1 + a3102 * k3 + a3103 * k4 + a3106 * k7 + a3107 * k8 + a3109 * k10 + + a3110 * k11 + a3113 * k14 + a3114 * k15 + a3115 * k16 + a3123 * k24 + + a3124 * k25 + a3125 * k26 + a3127 * k28 + a3128 * k29 + a3129 * k30 + + a3130 * k31 + ), p, - t + c31 * dt) + t + c31 * dt + ) k33 = f( uprev + - dt * - (a3200 * k1 + a3201 * k2 + a3204 * k5 + a3206 * k7 + a3230 * k31 + a3231 * k32), - p, t + c32 * dt) + dt * + (a3200 * k1 + a3201 * k2 + a3204 * k5 + a3206 * k7 + a3230 * k31 + a3231 * k32), + p, t + c32 * dt + ) k34 = f(uprev + dt * (a3300 * k1 + a3302 * k3 + a3332 * k33), p, t + c33 * dt) k35 = f( uprev + - dt * - (a3400 * k1 + a3401 * k2 + a3402 * k3 + a3404 * k5 + a3406 * k7 + a3407 * k8 + - a3409 * k10 + a3410 * k11 + a3411 * k12 + a3412 * k13 + a3413 * k14 + - a3414 * k15 + a3415 * k16 + a3416 * k17 + a3417 * k18 + a3418 * k19 + - a3419 * k20 + a3420 * k21 + a3421 * k22 + a3422 * k23 + a3423 * k24 + - a3424 * k25 + a3425 * k26 + a3426 * k27 + a3427 * k28 + a3428 * k29 + - a3429 * k30 + a3430 * k31 + a3431 * k32 + a3432 * k33 + a3433 * k34), + dt * + ( + a3400 * k1 + a3401 * k2 + a3402 * k3 + a3404 * k5 + a3406 * k7 + a3407 * k8 + + a3409 * k10 + a3410 * k11 + a3411 * k12 + a3412 * k13 + a3413 * k14 + + a3414 * k15 + a3415 * k16 + a3416 * k17 + a3417 * k18 + a3418 * k19 + + a3419 * k20 + a3420 * k21 + a3421 * k22 + a3422 * k23 + a3423 * k24 + + a3424 * k25 + a3425 * k26 + a3426 * k27 + a3427 * k28 + a3428 * k29 + + a3429 * k30 + a3430 * k31 + a3431 * k32 + a3432 * k33 + a3433 * k34 + ), p, - t + c34 * dt) + t + c34 * dt + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 34) u = uprev + dt * - (b1 * k1 + b2 * k2 + b3 * k3 + b5 * k5 + b7 * k7 + b8 * k8 + b10 * k10 + b11 * k11 + - b12 * k12 + b14 * k14 + b15 * k15 + b16 * k16 + b18 * k18 + b19 * k19 + b20 * k20 + - b21 * k21 + b22 * k22 + b23 * k23 + b24 * k24 + b25 * k25 + b26 * k26 + b27 * k27 + - b28 * k28 + b29 * k29 + b30 * k30 + b31 * k31 + b32 * k32 + b33 * k33 + b34 * k34 + - b35 * k35) + ( + b1 * k1 + b2 * k2 + b3 * k3 + b5 * k5 + b7 * k7 + b8 * k8 + b10 * k10 + b11 * k11 + + b12 * k12 + b14 * k14 + b15 * k15 + b16 * k16 + b18 * k18 + b19 * k19 + b20 * k20 + + b21 * k21 + b22 * k22 + b23 * k23 + b24 * k24 + b25 * k25 + b26 * k26 + b27 * k27 + + b28 * k28 + b29 * k29 + b30 * k30 + b31 * k31 + b32 * k32 + b33 * k33 + b34 * k34 + + b35 * k35 + ) if integrator.opts.adaptive - utilde = @.. broadcast=false dt*(k2-k34)*adaptiveConst - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + utilde = @.. broadcast = false dt * (k2 - k34) * adaptiveConst + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end k = f(u, p, t + dt) # For the interpolation, needs k at the updated point @@ -910,7 +1134,7 @@ function initialize!(integrator, cache::Feagin14Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end #= @@ -1028,219 +1252,267 @@ end f(k6, tmp, p, t + c5 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a0600 * k1[i] + a0603 * k4[i] + a0604 * k5[i] + a0605 * k6[i]) + dt * + (a0600 * k1[i] + a0603 * k4[i] + a0604 * k5[i] + a0605 * k6[i]) end f(k7, tmp, p, t + c6 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a0700 * k1[i] + a0704 * k5[i] + a0705 * k6[i] + a0706 * k7[i]) + dt * + (a0700 * k1[i] + a0704 * k5[i] + a0705 * k6[i] + a0706 * k7[i]) end f(k8, tmp, p, t + c7 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a0800 * k1[i] + a0805 * k6[i] + a0806 * k7[i] + a0807 * k8[i]) + dt * + (a0800 * k1[i] + a0805 * k6[i] + a0806 * k7[i] + a0807 * k8[i]) end f(k9, tmp, p, t + c8 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a0900 * k1[i] + a0905 * k6[i] + a0906 * k7[i] + a0907 * k8[i] + - a0908 * k9[i]) + dt * + ( + a0900 * k1[i] + a0905 * k6[i] + a0906 * k7[i] + a0907 * k8[i] + + a0908 * k9[i] + ) end f(k10, tmp, p, t + c9 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a1000 * k1[i] + a1005 * k6[i] + a1006 * k7[i] + a1007 * k8[i] + - a1008 * k9[i] + a1009 * k10[i]) + dt * + ( + a1000 * k1[i] + a1005 * k6[i] + a1006 * k7[i] + a1007 * k8[i] + + a1008 * k9[i] + a1009 * k10[i] + ) end f(k11, tmp, p, t + c10 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a1100 * k1[i] + a1105 * k6[i] + a1106 * k7[i] + a1107 * k8[i] + - a1108 * k9[i] + a1109 * k10[i] + a1110 * k11[i]) + dt * + ( + a1100 * k1[i] + a1105 * k6[i] + a1106 * k7[i] + a1107 * k8[i] + + a1108 * k9[i] + a1109 * k10[i] + a1110 * k11[i] + ) end f(k12, tmp, p, t + c11 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a1200 * k1[i] + a1208 * k9[i] + a1209 * k10[i] + - a1210 * k11[i] + a1211 * k12[i]) + dt * ( + a1200 * k1[i] + a1208 * k9[i] + a1209 * k10[i] + + a1210 * k11[i] + a1211 * k12[i] + ) end f(k13, tmp, p, t + c12 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a1300 * k1[i] + a1308 * k9[i] + a1309 * k10[i] + - a1310 * k11[i] + a1311 * k12[i] + a1312 * k13[i]) + dt * ( + a1300 * k1[i] + a1308 * k9[i] + a1309 * k10[i] + + a1310 * k11[i] + a1311 * k12[i] + a1312 * k13[i] + ) end f(k14, tmp, p, t + c13 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a1400 * k1[i] + a1408 * k9[i] + a1409 * k10[i] + - a1410 * k11[i] + a1411 * k12[i] + a1412 * k13[i] + - a1413 * k14[i]) + dt * ( + a1400 * k1[i] + a1408 * k9[i] + a1409 * k10[i] + + a1410 * k11[i] + a1411 * k12[i] + a1412 * k13[i] + + a1413 * k14[i] + ) end f(k15, tmp, p, t + c14 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a1500 * k1[i] + a1508 * k9[i] + a1509 * k10[i] + - a1510 * k11[i] + a1511 * k12[i] + a1512 * k13[i] + - a1513 * k14[i] + a1514 * k15[i]) + dt * ( + a1500 * k1[i] + a1508 * k9[i] + a1509 * k10[i] + + a1510 * k11[i] + a1511 * k12[i] + a1512 * k13[i] + + a1513 * k14[i] + a1514 * k15[i] + ) end f(k16, tmp, p, t + c15 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a1600 * k1[i] + a1608 * k9[i] + a1609 * k10[i] + - a1610 * k11[i] + a1611 * k12[i] + a1612 * k13[i] + - a1613 * k14[i] + a1614 * k15[i] + a1615 * k16[i]) + dt * ( + a1600 * k1[i] + a1608 * k9[i] + a1609 * k10[i] + + a1610 * k11[i] + a1611 * k12[i] + a1612 * k13[i] + + a1613 * k14[i] + a1614 * k15[i] + a1615 * k16[i] + ) end f(k17, tmp, p, t + c16 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a1700 * k1[i] + a1712 * k13[i] + a1713 * k14[i] + - a1714 * k15[i] + a1715 * k16[i] + a1716 * k17[i]) + dt * ( + a1700 * k1[i] + a1712 * k13[i] + a1713 * k14[i] + + a1714 * k15[i] + a1715 * k16[i] + a1716 * k17[i] + ) end f(k18, tmp, p, t + c17 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a1800 * k1[i] + a1812 * k13[i] + a1813 * k14[i] + - a1814 * k15[i] + a1815 * k16[i] + a1816 * k17[i] + - a1817 * k18[i]) + dt * ( + a1800 * k1[i] + a1812 * k13[i] + a1813 * k14[i] + + a1814 * k15[i] + a1815 * k16[i] + a1816 * k17[i] + + a1817 * k18[i] + ) end f(k19, tmp, p, t + c18 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a1900 * k1[i] + a1912 * k13[i] + a1913 * k14[i] + - a1914 * k15[i] + a1915 * k16[i] + a1916 * k17[i] + - a1917 * k18[i] + a1918 * k19[i]) + dt * ( + a1900 * k1[i] + a1912 * k13[i] + a1913 * k14[i] + + a1914 * k15[i] + a1915 * k16[i] + a1916 * k17[i] + + a1917 * k18[i] + a1918 * k19[i] + ) end f(k20, tmp, p, t + c19 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a2000 * k1[i] + a2012 * k13[i] + a2013 * k14[i] + - a2014 * k15[i] + a2015 * k16[i] + a2016 * k17[i] + - a2017 * k18[i] + a2018 * k19[i] + a2019 * k20[i]) + dt * ( + a2000 * k1[i] + a2012 * k13[i] + a2013 * k14[i] + + a2014 * k15[i] + a2015 * k16[i] + a2016 * k17[i] + + a2017 * k18[i] + a2018 * k19[i] + a2019 * k20[i] + ) end f(k21, tmp, p, t + c20 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a2100 * k1[i] + a2112 * k13[i] + a2113 * k14[i] + - a2114 * k15[i] + a2115 * k16[i] + a2116 * k17[i] + - a2117 * k18[i] + a2118 * k19[i] + a2119 * k20[i] + - a2120 * k21[i]) + dt * ( + a2100 * k1[i] + a2112 * k13[i] + a2113 * k14[i] + + a2114 * k15[i] + a2115 * k16[i] + a2116 * k17[i] + + a2117 * k18[i] + a2118 * k19[i] + a2119 * k20[i] + + a2120 * k21[i] + ) end f(k22, tmp, p, t + c21 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a2200 * k1[i] + a2212 * k13[i] + a2213 * k14[i] + - a2214 * k15[i] + a2215 * k16[i] + a2216 * k17[i] + - a2217 * k18[i] + a2218 * k19[i] + a2219 * k20[i] + - a2220 * k21[i] + a2221 * k22[i]) + dt * ( + a2200 * k1[i] + a2212 * k13[i] + a2213 * k14[i] + + a2214 * k15[i] + a2215 * k16[i] + a2216 * k17[i] + + a2217 * k18[i] + a2218 * k19[i] + a2219 * k20[i] + + a2220 * k21[i] + a2221 * k22[i] + ) end f(k23, tmp, p, t + c22 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a2300 * k1[i] + a2308 * k9[i] + a2309 * k10[i] + - a2310 * k11[i] + a2311 * k12[i] + a2312 * k13[i] + - a2313 * k14[i] + a2314 * k15[i] + a2315 * k16[i] + - a2316 * k17[i] + a2317 * k18[i] + a2318 * k19[i] + - a2319 * k20[i] + a2320 * k21[i] + a2321 * k22[i] + - a2322 * k23[i]) + dt * ( + a2300 * k1[i] + a2308 * k9[i] + a2309 * k10[i] + + a2310 * k11[i] + a2311 * k12[i] + a2312 * k13[i] + + a2313 * k14[i] + a2314 * k15[i] + a2315 * k16[i] + + a2316 * k17[i] + a2317 * k18[i] + a2318 * k19[i] + + a2319 * k20[i] + a2320 * k21[i] + a2321 * k22[i] + + a2322 * k23[i] + ) end f(k24, tmp, p, t + c23 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a2400 * k1[i] + a2408 * k9[i] + a2409 * k10[i] + - a2410 * k11[i] + a2411 * k12[i] + a2412 * k13[i] + - a2413 * k14[i] + a2414 * k15[i] + a2415 * k16[i] + - a2416 * k17[i] + a2417 * k18[i] + a2418 * k19[i] + - a2419 * k20[i] + a2420 * k21[i] + a2421 * k22[i] + - a2422 * k23[i] + a2423 * k24[i]) + dt * ( + a2400 * k1[i] + a2408 * k9[i] + a2409 * k10[i] + + a2410 * k11[i] + a2411 * k12[i] + a2412 * k13[i] + + a2413 * k14[i] + a2414 * k15[i] + a2415 * k16[i] + + a2416 * k17[i] + a2417 * k18[i] + a2418 * k19[i] + + a2419 * k20[i] + a2420 * k21[i] + a2421 * k22[i] + + a2422 * k23[i] + a2423 * k24[i] + ) end f(k25, tmp, p, t + c24 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a2500 * k1[i] + a2508 * k9[i] + a2509 * k10[i] + - a2510 * k11[i] + a2511 * k12[i] + a2512 * k13[i] + - a2513 * k14[i] + a2514 * k15[i] + a2515 * k16[i] + - a2516 * k17[i] + a2517 * k18[i] + a2518 * k19[i] + - a2519 * k20[i] + a2520 * k21[i] + a2521 * k22[i] + - a2522 * k23[i] + a2523 * k24[i] + a2524 * k25[i]) + dt * ( + a2500 * k1[i] + a2508 * k9[i] + a2509 * k10[i] + + a2510 * k11[i] + a2511 * k12[i] + a2512 * k13[i] + + a2513 * k14[i] + a2514 * k15[i] + a2515 * k16[i] + + a2516 * k17[i] + a2517 * k18[i] + a2518 * k19[i] + + a2519 * k20[i] + a2520 * k21[i] + a2521 * k22[i] + + a2522 * k23[i] + a2523 * k24[i] + a2524 * k25[i] + ) end f(k26, tmp, p, t + c25 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a2600 * k1[i] + a2605 * k6[i] + a2606 * k7[i] + a2607 * k8[i] + - a2608 * k9[i] + a2609 * k10[i] + a2610 * k11[i] + - a2612 * k13[i] + a2613 * k14[i] + a2614 * k15[i] + - a2615 * k16[i] + a2616 * k17[i] + a2617 * k18[i] + - a2618 * k19[i] + a2619 * k20[i] + a2620 * k21[i] + - a2621 * k22[i] + a2622 * k23[i] + a2623 * k24[i] + - a2624 * k25[i] + a2625 * k26[i]) + dt * + ( + a2600 * k1[i] + a2605 * k6[i] + a2606 * k7[i] + a2607 * k8[i] + + a2608 * k9[i] + a2609 * k10[i] + a2610 * k11[i] + + a2612 * k13[i] + a2613 * k14[i] + a2614 * k15[i] + + a2615 * k16[i] + a2616 * k17[i] + a2617 * k18[i] + + a2618 * k19[i] + a2619 * k20[i] + a2620 * k21[i] + + a2621 * k22[i] + a2622 * k23[i] + a2623 * k24[i] + + a2624 * k25[i] + a2625 * k26[i] + ) end f(k27, tmp, p, t + c26 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a2700 * k1[i] + a2705 * k6[i] + a2706 * k7[i] + a2707 * k8[i] + - a2708 * k9[i] + a2709 * k10[i] + a2711 * k12[i] + - a2712 * k13[i] + a2713 * k14[i] + a2714 * k15[i] + - a2715 * k16[i] + a2716 * k17[i] + a2717 * k18[i] + - a2718 * k19[i] + a2719 * k20[i] + a2720 * k21[i] + - a2721 * k22[i] + a2722 * k23[i] + a2723 * k24[i] + - a2724 * k25[i] + a2725 * k26[i] + a2726 * k27[i]) + dt * + ( + a2700 * k1[i] + a2705 * k6[i] + a2706 * k7[i] + a2707 * k8[i] + + a2708 * k9[i] + a2709 * k10[i] + a2711 * k12[i] + + a2712 * k13[i] + a2713 * k14[i] + a2714 * k15[i] + + a2715 * k16[i] + a2716 * k17[i] + a2717 * k18[i] + + a2718 * k19[i] + a2719 * k20[i] + a2720 * k21[i] + + a2721 * k22[i] + a2722 * k23[i] + a2723 * k24[i] + + a2724 * k25[i] + a2725 * k26[i] + a2726 * k27[i] + ) end f(k28, tmp, p, t + c27 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a2800 * k1[i] + a2805 * k6[i] + a2806 * k7[i] + a2807 * k8[i] + - a2808 * k9[i] + a2810 * k11[i] + a2811 * k12[i] + - a2813 * k14[i] + a2814 * k15[i] + a2815 * k16[i] + - a2823 * k24[i] + a2824 * k25[i] + a2825 * k26[i] + - a2826 * k27[i] + a2827 * k28[i]) + dt * + ( + a2800 * k1[i] + a2805 * k6[i] + a2806 * k7[i] + a2807 * k8[i] + + a2808 * k9[i] + a2810 * k11[i] + a2811 * k12[i] + + a2813 * k14[i] + a2814 * k15[i] + a2815 * k16[i] + + a2823 * k24[i] + a2824 * k25[i] + a2825 * k26[i] + + a2826 * k27[i] + a2827 * k28[i] + ) end f(k29, tmp, p, t + c28 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a2900 * k1[i] + a2904 * k5[i] + a2905 * k6[i] + a2906 * k7[i] + - a2909 * k10[i] + a2910 * k11[i] + a2911 * k12[i] + - a2913 * k14[i] + a2914 * k15[i] + a2915 * k16[i] + - a2923 * k24[i] + a2924 * k25[i] + a2925 * k26[i] + - a2926 * k27[i] + a2927 * k28[i] + a2928 * k29[i]) + dt * + ( + a2900 * k1[i] + a2904 * k5[i] + a2905 * k6[i] + a2906 * k7[i] + + a2909 * k10[i] + a2910 * k11[i] + a2911 * k12[i] + + a2913 * k14[i] + a2914 * k15[i] + a2915 * k16[i] + + a2923 * k24[i] + a2924 * k25[i] + a2925 * k26[i] + + a2926 * k27[i] + a2927 * k28[i] + a2928 * k29[i] + ) end f(k30, tmp, p, t + c29 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a3000 * k1[i] + a3003 * k4[i] + a3004 * k5[i] + a3005 * k6[i] + - a3007 * k8[i] + a3009 * k10[i] + a3010 * k11[i] + - a3013 * k14[i] + a3014 * k15[i] + a3015 * k16[i] + - a3023 * k24[i] + a3024 * k25[i] + a3025 * k26[i] + - a3027 * k28[i] + a3028 * k29[i] + a3029 * k30[i]) + dt * + ( + a3000 * k1[i] + a3003 * k4[i] + a3004 * k5[i] + a3005 * k6[i] + + a3007 * k8[i] + a3009 * k10[i] + a3010 * k11[i] + + a3013 * k14[i] + a3014 * k15[i] + a3015 * k16[i] + + a3023 * k24[i] + a3024 * k25[i] + a3025 * k26[i] + + a3027 * k28[i] + a3028 * k29[i] + a3029 * k30[i] + ) end f(k31, tmp, p, t + c30 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a3100 * k1[i] + a3102 * k3[i] + a3103 * k4[i] + a3106 * k7[i] + - a3107 * k8[i] + a3109 * k10[i] + a3110 * k11[i] + - a3113 * k14[i] + a3114 * k15[i] + a3115 * k16[i] + - a3123 * k24[i] + a3124 * k25[i] + a3125 * k26[i] + - a3127 * k28[i] + a3128 * k29[i] + a3129 * k30[i] + - a3130 * k31[i]) + dt * + ( + a3100 * k1[i] + a3102 * k3[i] + a3103 * k4[i] + a3106 * k7[i] + + a3107 * k8[i] + a3109 * k10[i] + a3110 * k11[i] + + a3113 * k14[i] + a3114 * k15[i] + a3115 * k16[i] + + a3123 * k24[i] + a3124 * k25[i] + a3125 * k26[i] + + a3127 * k28[i] + a3128 * k29[i] + a3129 * k30[i] + + a3130 * k31[i] + ) end f(k32, tmp, p, t + c31 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a3200 * k1[i] + a3201 * k2[i] + a3204 * k5[i] + a3206 * k7[i] + - a3230 * k31[i] + a3231 * k32[i]) + dt * + ( + a3200 * k1[i] + a3201 * k2[i] + a3204 * k5[i] + a3206 * k7[i] + + a3230 * k31[i] + a3231 * k32[i] + ) end f(k33, tmp, p, t + c32 * dt) @tight_loop_macros for i in uidx @@ -1249,30 +1521,34 @@ end f(k34, tmp, p, t + c33 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * - (a3400 * k1[i] + a3401 * k2[i] + a3402 * k3[i] + a3404 * k5[i] + - a3406 * k7[i] + a3407 * k8[i] + a3409 * k10[i] + - a3410 * k11[i] + a3411 * k12[i] + a3412 * k13[i] + - a3413 * k14[i] + a3414 * k15[i] + a3415 * k16[i] + - a3416 * k17[i] + a3417 * k18[i] + a3418 * k19[i] + - a3419 * k20[i] + a3420 * k21[i] + a3421 * k22[i] + - a3422 * k23[i] + a3423 * k24[i] + a3424 * k25[i] + - a3425 * k26[i] + a3426 * k27[i] + a3427 * k28[i] + - a3428 * k29[i] + a3429 * k30[i] + a3430 * k31[i] + - a3431 * k32[i] + a3432 * k33[i] + a3433 * k34[i]) + dt * + ( + a3400 * k1[i] + a3401 * k2[i] + a3402 * k3[i] + a3404 * k5[i] + + a3406 * k7[i] + a3407 * k8[i] + a3409 * k10[i] + + a3410 * k11[i] + a3411 * k12[i] + a3412 * k13[i] + + a3413 * k14[i] + a3414 * k15[i] + a3415 * k16[i] + + a3416 * k17[i] + a3417 * k18[i] + a3418 * k19[i] + + a3419 * k20[i] + a3420 * k21[i] + a3421 * k22[i] + + a3422 * k23[i] + a3423 * k24[i] + a3424 * k25[i] + + a3425 * k26[i] + a3426 * k27[i] + a3427 * k28[i] + + a3428 * k29[i] + a3429 * k30[i] + a3430 * k31[i] + + a3431 * k32[i] + a3432 * k33[i] + a3433 * k34[i] + ) end f(k35, tmp, p, t + c34 * dt) @tight_loop_macros for i in uidx @inbounds u[i] = uprev[i] + - dt * - (b1 * k1[i] + b2 * k2[i] + b3 * k3[i] + b5 * k5[i] + b7 * k7[i] + - b8 * k8[i] + b10 * k10[i] + b11 * k11[i] + b12 * k12[i] + - b14 * k14[i] + b15 * k15[i] + b16 * k16[i] + b18 * k18[i] + - b19 * k19[i] + b20 * k20[i] + b21 * k21[i] + b22 * k22[i] + - b23 * k23[i] + b24 * k24[i] + b25 * k25[i] + b26 * k26[i] + - b27 * k27[i] + b28 * k28[i] + b29 * k29[i] + b30 * k30[i] + - b31 * k31[i] + b32 * k32[i] + b33 * k33[i] + b34 * k34[i] + - b35 * k35[i]) + dt * + ( + b1 * k1[i] + b2 * k2[i] + b3 * k3[i] + b5 * k5[i] + b7 * k7[i] + + b8 * k8[i] + b10 * k10[i] + b11 * k11[i] + b12 * k12[i] + + b14 * k14[i] + b15 * k15[i] + b16 * k16[i] + b18 * k18[i] + + b19 * k19[i] + b20 * k20[i] + b21 * k21[i] + b22 * k22[i] + + b23 * k23[i] + b24 * k24[i] + b25 * k25[i] + b26 * k26[i] + + b27 * k27[i] + b28 * k28[i] + b29 * k29[i] + b30 * k30[i] + + b31 * k31[i] + b32 * k32[i] + b33 * k33[i] + b34 * k34[i] + + b35 * k35[i] + ) end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 35) @@ -1282,8 +1558,10 @@ end @tight_loop_macros for i in uidx @inbounds tmp[i] = dt * (k2[i] - k34[i]) * adaptiveConst end - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end f(integrator.fsallast, u, p, t + dt) # For the interpolation, needs k at the updated point diff --git a/lib/OrdinaryDiffEqFeagin/src/feagin_tableaus.jl b/lib/OrdinaryDiffEqFeagin/src/feagin_tableaus.jl index 64a056e0c9..a768f07de3 100644 --- a/lib/OrdinaryDiffEqFeagin/src/feagin_tableaus.jl +++ b/lib/OrdinaryDiffEqFeagin/src/feagin_tableaus.jl @@ -262,7 +262,8 @@ function Feagin10ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo c14 = convert(T2, 0.5393578408029818) c15 = convert(T2, 0.1) c16 = convert(T2, 1) - Feagin10ConstantCache(adaptiveConst, a0100, a0200, a0201, a0300, a0302, a0400, a0402, + return Feagin10ConstantCache( + adaptiveConst, a0100, a0200, a0201, a0300, a0302, a0400, a0402, a0403, a0500, a0503, a0504, a0600, a0603, a0604, a0605, a0700, a0704, a0705, a0706, a0800, a0805, a0806, a0807, a0900, a0905, a0906, a0907, a0908, a1000, a1005, a1006, a1007, a1008, a1009, @@ -273,7 +274,8 @@ function Feagin10ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a1514, a1600, a1601, a1602, a1604, a1605, a1606, a1607, a1608, a1609, a1610, a1611, a1612, a1613, a1614, a1615, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, c1, - c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16) + c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16 + ) end """ @@ -291,8 +293,10 @@ function Feagin10ConstantCache(T::Type, T2::Type) a0400 = convert(T, big"0.184024714708643575149100693471120664216774047979591417844635") a0402 = convert(T, big"0.197966831227192369068141770510388793370637287463360401555746") - a0403 = convert(T, - big"-0.0729547847313632629185146671595558023015011608914382961421311") + a0403 = convert( + T, + big"-0.0729547847313632629185146671595558023015011608914382961421311" + ) a0500 = convert(T, big"0.0879007340206681337319777094132125475918886824944548534041378") a0503 = convert(T, big"0.410459702520260645318174895920453426088035325902848695210406") @@ -301,18 +305,24 @@ function Feagin10ConstantCache(T::Type, T2::Type) a0600 = convert(T, big"0.0859700504902460302188480225945808401411132615636600222593880") a0603 = convert(T, big"0.330885963040722183948884057658753173648240154838402033448632") a0604 = convert(T, big"0.489662957309450192844507011135898201178015478433790097210790") - a0605 = convert(T, - big"-0.0731856375070850736789057580558988816340355615025188195854775") + a0605 = convert( + T, + big"-0.0731856375070850736789057580558988816340355615025188195854775" + ) a0700 = convert(T, big"0.120930449125333720660378854927668953958938996999703678812621") a0704 = convert(T, big"0.260124675758295622809007617838335174368108756484693361887839") a0705 = convert(T, big"0.0325402621549091330158899334391231259332716675992700000776101") - a0706 = convert(T, - big"-0.0595780211817361001560122202563305121444953672762930724538856") + a0706 = convert( + T, + big"-0.0595780211817361001560122202563305121444953672762930724538856" + ) a0800 = convert(T, big"0.110854379580391483508936171010218441909425780168656559807038") - a0805 = convert(T, - big"-0.0605761488255005587620924953655516875526344415354339234619466") + a0805 = convert( + T, + big"-0.0605761488255005587620924953655516875526344415354339234619466" + ) a0806 = convert(T, big"0.321763705601778390100898799049878904081404368603077129251110") a0807 = convert(T, big"0.510485725608063031577759012285123416744672137031752354067590") @@ -323,22 +333,30 @@ function Feagin10ConstantCache(T::Type, T2::Type) a0908 = convert(T, big"0.509504608929686104236098690045386253986643232352989602185060") a1000 = convert(T, big"0.113976783964185986138004186736901163890724752541486831640341") - a1005 = convert(T, - big"-0.0768813364203356938586214289120895270821349023390922987406384") + a1005 = convert( + T, + big"-0.0768813364203356938586214289120895270821349023390922987406384" + ) a1006 = convert(T, big"0.239527360324390649107711455271882373019741311201004119339563") a1007 = convert(T, big"0.397774662368094639047830462488952104564716416343454639902613") a1008 = convert(T, big"0.0107558956873607455550609147441477450257136782823280838547024") a1009 = convert(T, big"-0.327769124164018874147061087350233395378262992392394071906457") a1100 = convert(T, big"0.0798314528280196046351426864486400322758737630423413945356284") - a1105 = convert(T, - big"-0.0520329686800603076514949887612959068721311443881683526937298") - a1106 = convert(T, - big"-0.0576954146168548881732784355283433509066159287152968723021864") + a1105 = convert( + T, + big"-0.0520329686800603076514949887612959068721311443881683526937298" + ) + a1106 = convert( + T, + big"-0.0576954146168548881732784355283433509066159287152968723021864" + ) a1107 = convert(T, big"0.194781915712104164976306262147382871156142921354409364738090") a1108 = convert(T, big"0.145384923188325069727524825977071194859203467568236523866582") - a1109 = convert(T, - big"-0.0782942710351670777553986729725692447252077047239160551335016") + a1109 = convert( + T, + big"-0.0782942710351670777553986729725692447252077047239160551335016" + ) a1110 = convert(T, big"-0.114503299361098912184303164290554670970133218405658122674674") a1200 = convert(T, big"0.985115610164857280120041500306517278413646677314195559520529") @@ -354,8 +372,10 @@ function Feagin10ConstantCache(T::Type, T2::Type) a1300 = convert(T, big"0.895080295771632891049613132336585138148156279241561345991710") a1302 = convert(T, big"0.197966831227192369068141770510388793370637287463360401555746") - a1303 = convert(T, - big"-0.0729547847313632629185146671595558023015011608914382961421311") + a1303 = convert( + T, + big"-0.0729547847313632629185146671595558023015011608914382961421311" + ) a1305 = convert(T, big"-0.851236239662007619739049371445966793289359722875702227166105") a1306 = convert(T, big"0.398320112318533301719718614174373643336480918103773904231856") a1307 = convert(T, big"3.63937263181035606029412920047090044132027387893977804176229") @@ -363,14 +383,18 @@ function Feagin10ConstantCache(T::Type, T2::Type) a1309 = convert(T, big"-2.12221714704053716026062427460427261025318461146260124401561") a1310 = convert(T, big"-1.58350398545326172713384349625753212757269188934434237975291") a1311 = convert(T, big"-1.71561608285936264922031819751349098912615880827551992973034") - a1312 = convert(T, - big"-0.0244036405750127452135415444412216875465593598370910566069132") + a1312 = convert( + T, + big"-0.0244036405750127452135415444412216875465593598370910566069132" + ) a1400 = convert(T, big"-0.915176561375291440520015019275342154318951387664369720564660") a1401 = convert(T, big"1.45453440217827322805250021715664459117622483736537873607016") a1404 = convert(T, big"-0.777333643644968233538931228575302137803351053629547286334469") - a1406 = convert(T, - big"-0.0910895662155176069593203555807484200111889091770101799647985") + a1406 = convert( + T, + big"-0.0910895662155176069593203555807484200111889091770101799647985" + ) a1412 = convert(T, big"0.0910895662155176069593203555807484200111889091770101799647985") a1413 = convert(T, big"0.777333643644968233538931228575302137803351053629547286334469") @@ -428,7 +452,8 @@ function Feagin10ConstantCache(T::Type, T2::Type) c14 = convert(T2, big"0.539357840802981787532485197881302436857273449701009015505500") c15 = convert(T2, 1 // 10) c16 = convert(T2, 1) - Feagin10ConstantCache(adaptiveConst, a0100, a0200, a0201, a0300, a0302, a0400, a0402, + return Feagin10ConstantCache( + adaptiveConst, a0100, a0200, a0201, a0300, a0302, a0400, a0402, a0403, a0500, a0503, a0504, a0600, a0603, a0604, a0605, a0700, a0704, a0705, a0706, a0800, a0805, a0806, a0807, a0900, a0905, a0906, a0907, a0908, a1000, a1005, a1006, a1007, a1008, a1009, @@ -439,7 +464,8 @@ function Feagin10ConstantCache(T::Type, T2::Type) a1514, a1600, a1601, a1602, a1604, a1605, a1606, a1607, a1608, a1609, a1610, a1611, a1612, a1613, a1614, a1615, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, c1, - c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16) + c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16 + ) end struct Feagin12ConstantCache{T, T2} <: OrdinaryDiffEqConstantCache @@ -709,7 +735,7 @@ function Feagin12ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo b12 = convert(T, 0) b13 = convert(T, 0.138413023680782974005350203145033146748813640089941234591267) b14 = convert(T, 0.215872690604931311708935511140681138965472074195773051123019) - b15 = convert(T, 0.243809523809523809523809523809523809523809523809523809523810) + b15 = convert(T, 0.24380952380952380952380952380952380952380952380952380952381) b16 = convert(T, 0.215872690604931311708935511140681138965472074195773051123019) b17 = convert(T, 0.138413023680782974005350203145033146748813640089941234591267) b18 = convert(T, -0.0714285714285714285714285714285714285714285714285714285714286) @@ -739,10 +765,10 @@ function Feagin12ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a0600 = convert(T, 0.103364471650010477570395435690481791543342708330349879244197) a0603 = convert(T, 0.124053094528946761061581889237115328211074784955180298044074) - a0604 = convert(T, 0.483171167561032899288836480451962508724109257517289177302380) - a0605 = convert(T, -0.0387530245694763252085681443767620580395733302341368038804290) + a0604 = convert(T, 0.48317116756103289928883648045196250872410925751728917730238) + a0605 = convert(T, -0.038753024569476325208568144376762058039573330234136803880429) - a0700 = convert(T, 0.124038261431833324081904585980175168140024670698633612292480) + a0700 = convert(T, 0.12403826143183332408190458598017516814002467069863361229248) a0704 = convert(T, 0.217050632197958486317846256953159942875916353757734167684657) a0705 = convert(T, 0.0137455792075966759812907801835048190594443990939408530842918) a0706 = convert(T, -0.0661095317267682844455831341498149531672668252085016565917546) @@ -753,7 +779,7 @@ function Feagin12ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a0807 = convert(T, 0.408394315582641046727306852653894780093303185664924644551239) a0900 = convert(T, 0.0890013652502551018954509355423841780143232697403434118692699) - a0905 = convert(T, 0.00499528226645532360197793408420692800405891149406814091955810) + a0905 = convert(T, 0.0049952822664553236019779340842069280040589114940681409195581) a0906 = convert(T, 0.397918238819828997341739603001347156083435060931424970826304) a0907 = convert(T, 0.427930210752576611068192608300897981558240730580396406312359) a0908 = convert(T, -0.0865117637557827005740277475955029103267246394128995965941585) @@ -775,7 +801,7 @@ function Feagin12ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a1200 = convert(T, 0.0194588815119755475588801096525317761242073762016273186231215) a1208 = convert(T, 0.0000678512949171812509306121653452367476194364781259165332321534) - a1209 = convert(T, -0.0000429795859049273623271005330230162343568863387724883603675550) + a1209 = convert(T, -0.000042979585904927362327100533023016234356886338772488360367555) a1210 = convert(T, 0.0000176358982260285155407485928953302139937553442829975734148981) a1211 = convert(T, 0.0653866627415027051009595231385181033549511358787382098351924) @@ -797,7 +823,7 @@ function Feagin12ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a1500 = convert(T, 0.228410433917778099547115412893004398779136994596948545722283) a1508 = convert(T, -0.498707400793025250635016567442511512138603770959682292383042) a1509 = convert(T, 0.134841168335724478552596703792570104791700727205981058201689) - a1510 = convert(T, -0.0387458244055834158439904226924029230935161059142806805674360) + a1510 = convert(T, -0.038745824405583415843990422692402923093516105914280680567436) a1511 = convert(T, -1.27473257473474844240388430824908952380979292713250350199641) a1512 = convert(T, 1.43916364462877165201184452437038081875299303577911839630524) a1513 = convert(T, -0.214007467967990254219503540827349569639028092344812795499026) @@ -805,15 +831,15 @@ function Feagin12ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a1600 = convert(T, 2.00222477655974203614249646012506747121440306225711721209798) a1608 = convert(T, 2.06701809961524912091954656438138595825411859673341600679555) - a1609 = convert(T, 0.623978136086139541957471279831494466155292316167021080663140) + a1609 = convert(T, 0.62397813608613954195747127983149446615529231616702108066314) a1610 = convert(T, -0.0462283685500311430283203554129062069391947101880112723185773) - a1611 = convert(T, -8.84973288362649614860075246727118949286604835457092701094630) + a1611 = convert(T, -8.8497328836264961486007524672711894928660483545709270109463) a1612 = convert(T, 7.74257707850855976227437225791835589560188590785037197433615) a1613 = convert(T, -0.588358519250869210993353314127711745644125882130941202896436) a1614 = convert(T, -1.10683733362380649395704708016953056176195769617014899442903) a1615 = convert(T, -0.929529037579203999778397238291233214220788057511899747507074) - a1700 = convert(T, 3.13789533412073442934451608989888796808161259330322100268310) + a1700 = convert(T, 3.1378953341207344293445160898988879680816125933032210026831) a1705 = convert(T, 0.129146941900176461970759579482746551122871751501482634045487) a1706 = convert(T, 1.53073638102311295076342566143214939031177504112433874313011) a1707 = convert(T, 0.577874761129140052546751349454576715334892100418571882718036) @@ -822,13 +848,13 @@ function Feagin12ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a1710 = convert(T, 0.0759292995578913560162301311785251873561801342333194895292058) a1711 = convert(T, -12.3729973380186513287414553402595806591349822617535905976253) a1712 = convert(T, 9.85455883464769543935957209317369202080367765721777101906955) - a1713 = convert(T, 0.0859111431370436529579357709052367772889980495122329601159540) + a1713 = convert(T, 0.085911143137043652957935770905236777288998049512232960115954) a1714 = convert(T, -5.65242752862643921117182090081762761180392602644189218673969) a1715 = convert(T, -1.94300935242819610883833776782364287728724899124166920477873) a1716 = convert(T, -0.128352601849404542018428714319344620742146491335612353559923) a1800 = convert(T, 1.38360054432196014878538118298167716825163268489922519995564) - a1805 = convert(T, 0.00499528226645532360197793408420692800405891149406814091955810) + a1805 = convert(T, 0.0049952822664553236019779340842069280040589114940681409195581) a1806 = convert(T, 0.397918238819828997341739603001347156083435060931424970826304) a1807 = convert(T, 0.427930210752576611068192608300897981558240730580396406312359) a1808 = convert(T, -1.30299107424475770916551439123047573342071475998399645982146) @@ -847,7 +873,7 @@ function Feagin12ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a1905 = convert(T, 0.0137455792075966759812907801835048190594443990939408530842918) a1906 = convert(T, -0.0661095317267682844455831341498149531672668252085016565917546) a1908 = convert(T, 0.152281696736414447136604697040747131921486432699422112099617) - a1909 = convert(T, -0.337741018357599840802300793133998004354643424457539667670080) + a1909 = convert(T, -0.33774101835759984080230079313399800435464342445753966767008) a1910 = convert(T, -0.0192825981633995781534949199286824400469353110630787982121133) a1911 = convert(T, -3.68259269696866809932409015535499603576312120746888880201882) a1912 = convert(T, 3.16197870406982063541533528419683854018352080342887002331312) @@ -860,8 +886,8 @@ function Feagin12ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a2000 = convert(T, 0.103364471650010477570395435690481791543342708330349879244197) a2003 = convert(T, 0.124053094528946761061581889237115328211074784955180298044074) - a2004 = convert(T, 0.483171167561032899288836480451962508724109257517289177302380) - a2005 = convert(T, -0.0387530245694763252085681443767620580395733302341368038804290) + a2004 = convert(T, 0.48317116756103289928883648045196250872410925751728917730238) + a2005 = convert(T, -0.038753024569476325208568144376762058039573330234136803880429) a2007 = convert(T, -0.438313820361122420391059788940960176420682836652600698580091) a2009 = convert(T, -0.218636633721676647685111485017151199362509373698288330593486) a2010 = convert(T, -0.0312334764394719229981634995206440349766174759626578122323015) @@ -875,8 +901,8 @@ function Feagin12ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a2106 = convert(T, 0.0984256130499315928152900286856048243348202521491288575952143) a2107 = convert(T, -0.196410889223054653446526504390100417677539095340135532418849) a2109 = convert(T, 0.436457930493068729391826122587949137609670676712525034763317) - a2110 = convert(T, 0.0652613721675721098560370939805555698350543810708414716730270) - a2117 = convert(T, -0.0652613721675721098560370939805555698350543810708414716730270) + a2110 = convert(T, 0.065261372167572109856037093980555569835054381070841471673027) + a2117 = convert(T, -0.065261372167572109856037093980555569835054381070841471673027) a2118 = convert(T, -0.436457930493068729391826122587949137609670676712525034763317) a2119 = convert(T, 0.196410889223054653446526504390100417677539095340135532418849) a2120 = convert(T, -0.0984256130499315928152900286856048243348202521491288575952143) @@ -897,24 +923,25 @@ function Feagin12ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a2402 = convert(T, 91 // 216) a2404 = convert(T, 7 // 24) a2406 = convert(T, 0.348600717628329563206854421629657569274689947367847465753757) - a2407 = convert(T, 0.229499544768994849582890233710555447073823569666506700662510) + a2407 = convert(T, 0.22949954476899484958289023371055544707382356966650670066251) a2408 = convert(T, 5.79046485790481979159831978177003471098279506036722411333192) a2409 = convert(T, 0.418587511856506868874073759426596207226461447604248151080016) a2410 = convert(T, 0.307039880222474002649653817490106690389251482313213999386651) a2411 = convert(T, -4.68700905350603332214256344683853248065574415794742040470287) a2412 = convert(T, 3.13571665593802262152038152399873856554395436199962915429076) a2413 = convert(T, 1.40134829710965720817510506275620441055845017313930508348898) - a2414 = convert(T, -5.52931101439499023629010306005764336421276055777658156400910) + a2414 = convert(T, -5.5293110143949902362901030600576433642127605577765815640091) a2415 = convert(T, -0.853138235508063349309546894974784906188927508039552519557498) a2416 = convert(T, 0.103575780373610140411804607167772795518293914458500175573749) a2417 = convert(T, -0.140474416950600941142546901202132534870665923700034957196546) a2418 = convert(T, -0.418587511856506868874073759426596207226461447604248151080016) - a2419 = convert(T, -0.229499544768994849582890233710555447073823569666506700662510) + a2419 = convert(T, -0.22949954476899484958289023371055544707382356966650670066251) a2420 = convert(T, -0.348600717628329563206854421629657569274689947367847465753757) a2421 = convert(T, -7 // 24) a2422 = convert(T, -91 // 216) a2423 = convert(T, -63 // 80) - Feagin12ConstantCache(adaptiveConst, a0100, a0200, a0201, a0300, a0302, a0400, a0402, + return Feagin12ConstantCache( + adaptiveConst, a0100, a0200, a0201, a0300, a0302, a0400, a0402, a0403, a0500, a0503, a0504, a0600, a0603, a0604, a0605, a0700, a0704, a0705, a0706, a0800, a0805, a0806, a0807, a0900, a0905, a0906, a0907, a0908, a1000, a1005, a1006, a1007, a1008, a1009, @@ -936,7 +963,8 @@ function Feagin12ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a2423, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, - b18, b19, b20, b21, b22, b23, b24, b25) + b18, b19, b20, b21, b22, b23, b24, b25 + ) end """ @@ -1014,28 +1042,38 @@ function Feagin12ConstantCache(T::Type, T2::Type) a0600 = convert(T, big"0.103364471650010477570395435690481791543342708330349879244197") a0603 = convert(T, big"0.124053094528946761061581889237115328211074784955180298044074") a0604 = convert(T, big"0.483171167561032899288836480451962508724109257517289177302380") - a0605 = convert(T, - big"-0.0387530245694763252085681443767620580395733302341368038804290") + a0605 = convert( + T, + big"-0.0387530245694763252085681443767620580395733302341368038804290" + ) a0700 = convert(T, big"0.124038261431833324081904585980175168140024670698633612292480") a0704 = convert(T, big"0.217050632197958486317846256953159942875916353757734167684657") a0705 = convert(T, big"0.0137455792075966759812907801835048190594443990939408530842918") - a0706 = convert(T, - big"-0.0661095317267682844455831341498149531672668252085016565917546") + a0706 = convert( + T, + big"-0.0661095317267682844455831341498149531672668252085016565917546" + ) a0800 = convert(T, big"0.0914774894856882983144991846980432197088832099976660100090486") - a0805 = convert(T, - big"-0.00544348523717469689965754944144838611346156873847009178068318") + a0805 = convert( + T, + big"-0.00544348523717469689965754944144838611346156873847009178068318" + ) a0806 = convert(T, big"0.0680716801688453518578515120895103863112751730758794372203952") a0807 = convert(T, big"0.408394315582641046727306852653894780093303185664924644551239") a0900 = convert(T, big"0.0890013652502551018954509355423841780143232697403434118692699") - a0905 = convert(T, - big"0.00499528226645532360197793408420692800405891149406814091955810") + a0905 = convert( + T, + big"0.00499528226645532360197793408420692800405891149406814091955810" + ) a0906 = convert(T, big"0.397918238819828997341739603001347156083435060931424970826304") a0907 = convert(T, big"0.427930210752576611068192608300897981558240730580396406312359") - a0908 = convert(T, - big"-0.0865117637557827005740277475955029103267246394128995965941585") + a0908 = convert( + T, + big"-0.0865117637557827005740277475955029103267246394128995965941585" + ) a1000 = convert(T, big"0.0695087624134907543112693906409809822706021061685544615255758") a1005 = convert(T, big"0.129146941900176461970759579482746551122871751501482634045487") @@ -1045,51 +1083,77 @@ function Feagin12ConstantCache(T::Type, T2::Type) a1009 = convert(T, big"-0.408276642965631951497484981519757463459627174520978426909934") a1100 = convert(T, big"0.0444861403295135866269453507092463581620165501018684152933313") - a1105 = convert(T, - big"-0.00380476867056961731984232686574547203016331563626856065717964") + a1105 = convert( + T, + big"-0.00380476867056961731984232686574547203016331563626856065717964" + ) a1106 = convert(T, big"0.0106955064029624200721262602809059154469206077644957399593972") a1107 = convert(T, big"0.0209616244499904333296674205928919920806734650660039898074652") - a1108 = convert(T, - big"-0.0233146023259321786648561431551978077665337818756053603898847") - a1109 = convert(T, - big"0.00263265981064536974369934736325334761174975280887405725010964") - a1110 = convert(T, - big"0.00315472768977025060103545855572111407955208306374459723959783") + a1108 = convert( + T, + big"-0.0233146023259321786648561431551978077665337818756053603898847" + ) + a1109 = convert( + T, + big"0.00263265981064536974369934736325334761174975280887405725010964" + ) + a1110 = convert( + T, + big"0.00315472768977025060103545855572111407955208306374459723959783" + ) a1200 = convert(T, big"0.0194588815119755475588801096525317761242073762016273186231215") - a1208 = convert(T, - big"0.0000678512949171812509306121653452367476194364781259165332321534") - a1209 = convert(T, - big"-0.0000429795859049273623271005330230162343568863387724883603675550") - a1210 = convert(T, - big"0.0000176358982260285155407485928953302139937553442829975734148981") + a1208 = convert( + T, + big"0.0000678512949171812509306121653452367476194364781259165332321534" + ) + a1209 = convert( + T, + big"-0.0000429795859049273623271005330230162343568863387724883603675550" + ) + a1210 = convert( + T, + big"0.0000176358982260285155407485928953302139937553442829975734148981" + ) a1211 = convert(T, big"0.0653866627415027051009595231385181033549511358787382098351924") a1300 = convert(T, big"0.206836835664277105916828174798272361078909196043446411598231") a1308 = convert(T, big"0.0166796067104156472828045866664696450306326505094792505215514") - a1309 = convert(T, - big"-0.00879501563200710214457024178249986591130234990219959208704979") - a1310 = convert(T, - big"0.00346675455362463910824462315246379209427513654098596403637231") + a1309 = convert( + T, + big"-0.00879501563200710214457024178249986591130234990219959208704979" + ) + a1310 = convert( + T, + big"0.00346675455362463910824462315246379209427513654098596403637231" + ) a1311 = convert(T, big"-0.861264460105717678161432562258351242030270498966891201799225") a1312 = convert(T, big"0.908651882074050281096239478469262145034957129939256789178785") a1400 = convert(T, big"0.0203926084654484010091511314676925686038504449562413004562382") a1408 = convert(T, big"0.0869469392016685948675400555583947505833954460930940959577347") - a1409 = convert(T, - big"-0.0191649630410149842286436611791405053287170076602337673587681") - a1410 = convert(T, - big"0.00655629159493663287364871573244244516034828755253746024098838") + a1409 = convert( + T, + big"-0.0191649630410149842286436611791405053287170076602337673587681" + ) + a1410 = convert( + T, + big"0.00655629159493663287364871573244244516034828755253746024098838" + ) a1411 = convert(T, big"0.0987476128127434780903798528674033899738924968006632201445462") - a1412 = convert(T, - big"0.00535364695524996055083260173615567408717110247274021056118319") + a1412 = convert( + T, + big"0.00535364695524996055083260173615567408717110247274021056118319" + ) a1413 = convert(T, big"0.301167864010967916837091303817051676920059229784957479998077") a1500 = convert(T, big"0.228410433917778099547115412893004398779136994596948545722283") a1508 = convert(T, big"-0.498707400793025250635016567442511512138603770959682292383042") a1509 = convert(T, big"0.134841168335724478552596703792570104791700727205981058201689") - a1510 = convert(T, - big"-0.0387458244055834158439904226924029230935161059142806805674360") + a1510 = convert( + T, + big"-0.0387458244055834158439904226924029230935161059142806805674360" + ) a1511 = convert(T, big"-1.27473257473474844240388430824908952380979292713250350199641") a1512 = convert(T, big"1.43916364462877165201184452437038081875299303577911839630524") a1513 = convert(T, big"-0.214007467967990254219503540827349569639028092344812795499026") @@ -1098,8 +1162,10 @@ function Feagin12ConstantCache(T::Type, T2::Type) a1600 = convert(T, big"2.00222477655974203614249646012506747121440306225711721209798") a1608 = convert(T, big"2.06701809961524912091954656438138595825411859673341600679555") a1609 = convert(T, big"0.623978136086139541957471279831494466155292316167021080663140") - a1610 = convert(T, - big"-0.0462283685500311430283203554129062069391947101880112723185773") + a1610 = convert( + T, + big"-0.0462283685500311430283203554129062069391947101880112723185773" + ) a1611 = convert(T, big"-8.84973288362649614860075246727118949286604835457092701094630") a1612 = convert(T, big"7.74257707850855976227437225791835589560188590785037197433615") a1613 = convert(T, big"-0.588358519250869210993353314127711745644125882130941202896436") @@ -1121,8 +1187,10 @@ function Feagin12ConstantCache(T::Type, T2::Type) a1716 = convert(T, big"-0.128352601849404542018428714319344620742146491335612353559923") a1800 = convert(T, big"1.38360054432196014878538118298167716825163268489922519995564") - a1805 = convert(T, - big"0.00499528226645532360197793408420692800405891149406814091955810") + a1805 = convert( + T, + big"0.00499528226645532360197793408420692800405891149406814091955810" + ) a1806 = convert(T, big"0.397918238819828997341739603001347156083435060931424970826304") a1807 = convert(T, big"0.427930210752576611068192608300897981558240730580396406312359") a1808 = convert(T, big"-1.30299107424475770916551439123047573342071475998399645982146") @@ -1133,41 +1201,59 @@ function Feagin12ConstantCache(T::Type, T2::Type) a1813 = convert(T, big"-1.66997375108841486404695805725510845049807969199236227575796") a1814 = convert(T, big"2.06413702318035263832289040301832647130604651223986452170089") a1815 = convert(T, big"-0.674743962644306471862958129570837723192079875998405058648892") - a1816 = convert(T, - big"-0.00115618834794939500490703608435907610059605754935305582045729") - a1817 = convert(T, - big"-0.00544057908677007389319819914241631024660726585015012485938593") + a1816 = convert( + T, + big"-0.00115618834794939500490703608435907610059605754935305582045729" + ) + a1817 = convert( + T, + big"-0.00544057908677007389319819914241631024660726585015012485938593" + ) a1900 = convert(T, big"0.951236297048287669474637975894973552166903378983475425758226") a1904 = convert(T, big"0.217050632197958486317846256953159942875916353757734167684657") a1905 = convert(T, big"0.0137455792075966759812907801835048190594443990939408530842918") - a1906 = convert(T, - big"-0.0661095317267682844455831341498149531672668252085016565917546") + a1906 = convert( + T, + big"-0.0661095317267682844455831341498149531672668252085016565917546" + ) a1908 = convert(T, big"0.152281696736414447136604697040747131921486432699422112099617") a1909 = convert(T, big"-0.337741018357599840802300793133998004354643424457539667670080") - a1910 = convert(T, - big"-0.0192825981633995781534949199286824400469353110630787982121133") + a1910 = convert( + T, + big"-0.0192825981633995781534949199286824400469353110630787982121133" + ) a1911 = convert(T, big"-3.68259269696866809932409015535499603576312120746888880201882") a1912 = convert(T, big"3.16197870406982063541533528419683854018352080342887002331312") a1913 = convert(T, big"-0.370462522106885290716991856022051125477943482284080569177386") - a1914 = convert(T, - big"-0.0514974200365440434996434456698127984941168616474316871020314") - a1915 = convert(T, - big"-0.000829625532120152946787043541792848416659382675202720677536554") - a1916 = convert(T, - big"0.00000279801041419278598986586589070027583961355402640879503213503") + a1914 = convert( + T, + big"-0.0514974200365440434996434456698127984941168616474316871020314" + ) + a1915 = convert( + T, + big"-0.000829625532120152946787043541792848416659382675202720677536554" + ) + a1916 = convert( + T, + big"0.00000279801041419278598986586589070027583961355402640879503213503" + ) a1917 = convert(T, big"0.0418603916412360287969841020776788461794119440689356178942252") a1918 = convert(T, big"0.279084255090877355915660874555379649966282167560126269290222") a2000 = convert(T, big"0.103364471650010477570395435690481791543342708330349879244197") a2003 = convert(T, big"0.124053094528946761061581889237115328211074784955180298044074") a2004 = convert(T, big"0.483171167561032899288836480451962508724109257517289177302380") - a2005 = convert(T, - big"-0.0387530245694763252085681443767620580395733302341368038804290") + a2005 = convert( + T, + big"-0.0387530245694763252085681443767620580395733302341368038804290" + ) a2007 = convert(T, big"-0.438313820361122420391059788940960176420682836652600698580091") a2009 = convert(T, big"-0.218636633721676647685111485017151199362509373698288330593486") - a2010 = convert(T, - big"-0.0312334764394719229981634995206440349766174759626578122323015") + a2010 = convert( + T, + big"-0.0312334764394719229981634995206440349766174759626578122323015" + ) a2017 = convert(T, big"0.0312334764394719229981634995206440349766174759626578122323015") a2018 = convert(T, big"0.218636633721676647685111485017151199362509373698288330593486") a2019 = convert(T, big"0.438313820361122420391059788940960176420682836652600698580091") @@ -1179,12 +1265,16 @@ function Feagin12ConstantCache(T::Type, T2::Type) a2107 = convert(T, big"-0.196410889223054653446526504390100417677539095340135532418849") a2109 = convert(T, big"0.436457930493068729391826122587949137609670676712525034763317") a2110 = convert(T, big"0.0652613721675721098560370939805555698350543810708414716730270") - a2117 = convert(T, - big"-0.0652613721675721098560370939805555698350543810708414716730270") + a2117 = convert( + T, + big"-0.0652613721675721098560370939805555698350543810708414716730270" + ) a2118 = convert(T, big"-0.436457930493068729391826122587949137609670676712525034763317") a2119 = convert(T, big"0.196410889223054653446526504390100417677539095340135532418849") - a2120 = convert(T, - big"-0.0984256130499315928152900286856048243348202521491288575952143") + a2120 = convert( + T, + big"-0.0984256130499315928152900286856048243348202521491288575952143" + ) a2200 = convert(T, big"-0.216049382716049382716049382716049382716049382716049382716049") a2201 = convert(T, big"0.771604938271604938271604938271604938271604938271604938271605") @@ -1219,7 +1309,8 @@ function Feagin12ConstantCache(T::Type, T2::Type) a2421 = convert(T, -7 // 24) a2422 = convert(T, -91 // 216) a2423 = convert(T, -63 // 80) - Feagin12ConstantCache(adaptiveConst, a0100, a0200, a0201, a0300, a0302, a0400, a0402, + return Feagin12ConstantCache( + adaptiveConst, a0100, a0200, a0201, a0300, a0302, a0400, a0402, a0403, a0500, a0503, a0504, a0600, a0603, a0604, a0605, a0700, a0704, a0705, a0706, a0800, a0805, a0806, a0807, a0900, a0905, a0906, a0907, a0908, a1000, a1005, a1006, a1007, a1008, a1009, @@ -1241,7 +1332,8 @@ function Feagin12ConstantCache(T::Type, T2::Type) a2423, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, - b18, b19, b20, b21, b22, b23, b24, b25) + b18, b19, b20, b21, b22, b23, b24, b25 + ) end struct Feagin14ConstantCache{T, T2} <: OrdinaryDiffEqConstantCache @@ -1664,10 +1756,10 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo c15 = convert(T2, 1 // 6) c16 = convert(T2, 9 // 10) c17 = convert(T2, 0.0641299257451966923312771193896682809481096651615083225402924) - c18 = convert(T2, 0.204149909283428848927744634301023405027149505241333751628870) + c18 = convert(T2, 0.20414990928342884892774463430102340502714950524133375162887) c19 = convert(T2, 0.395350391048760565615671369827324372352227297456659450554577) c20 = convert(T2, 0.604649608951239434384328630172675627647772702543340549445423) - c21 = convert(T2, 0.795850090716571151072255365698976594972850494758666248371130) + c21 = convert(T2, 0.79585009071657115107225536569897659497285049475866624837113) c22 = convert(T2, 0.935870074254803307668722880610331719051890334838491677459708) c23 = convert(T2, 1 // 6) c24 = convert(T2, 0.812917502928376762983393159278036506189612372617238550774312) @@ -1699,12 +1791,12 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo b15 = convert(T, 15 // 256) b16 = convert(T, 33 // 512) b17 = convert(T, 0) - b18 = convert(T, 0.105352113571753019691496032887878162227673083080523884041670) + b18 = convert(T, 0.10535211357175301969149603288787816222767308308052388404167) b19 = convert(T, 0.170561346241752182382120338553874085887555487802790804737501) b20 = convert(T, 0.206229397329351940783526485701104894741914286259542454077972) b21 = convert(T, 0.206229397329351940783526485701104894741914286259542454077972) b22 = convert(T, 0.170561346241752182382120338553874085887555487802790804737501) - b23 = convert(T, 0.105352113571753019691496032887878162227673083080523884041670) + b23 = convert(T, 0.10535211357175301969149603288787816222767308308052388404167) b24 = convert(T, -33 // 512) b25 = convert(T, -15 // 256) b26 = convert(T, -27 // 512) @@ -1737,12 +1829,12 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a0600 = convert(T, 0.103484561636679776672993546511910344499744798201971316606663) a0603 = convert(T, 0.122068887306407222589644082868962077139592714834162134741275) a0604 = convert(T, 0.482574490331246622475134780125688112865919023850168049679402) - a0605 = convert(T, -0.0381409600015606999730886240005620205664113072478411477421970) + a0605 = convert(T, -0.038140960001560699973088624000562020566411307247841147742197) a0700 = convert(T, 0.124380526654094412881516420868799316268491466359671423163289) a0704 = convert(T, 0.226120282197584301422238662979202901196752320742633143965145) a0705 = convert(T, 0.0137885887618080880607695837016477814530969417491493385363543) - a0706 = convert(T, -0.0672210133996684449749399507414305856950086341525382182856200) + a0706 = convert(T, -0.06722101339966844497493995074143058569500863415253821828562) a0800 = convert(T, 0.0936919065659673815530885456083005933866349695217750085655603) a0805 = convert(T, -0.00613406843450510987229498995641664735620914507128858871007099) a0806 = convert(T, 0.216019825625503063708860097659866573490979433278117320188668) @@ -1754,8 +1846,8 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a0907 = convert(T, 0.0978080858367729012259313014081291665503740655476733940756599) a0908 = convert(T, 0.217590689243420631360008651767860318344168120024782176879989) - a1000 = convert(T, 0.0615255359769428227954562389614314714333423969064821107453940) - a1005 = convert(T, 0.00592232780324503308042990005798046524738389560444257136834990) + a1000 = convert(T, 0.061525535976942822795456238961431471433342396906482110745394) + a1005 = convert(T, 0.0059223278032450330804299000579804652473838956044425713683499) a1006 = convert(T, 0.470326159963841112217224303205894113455362530746108825010848) a1007 = convert(T, 0.299688863848679000853981837096192399136831121671781279184194) a1008 = convert(T, -0.247656877593994914689992276329810825853958069263947095548189) @@ -1770,7 +1862,7 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a1110 = convert(T, -1.56261579627468188307070943950527825211462892236424360892806) a1200 = convert(T, 0.0437726782233730163574465242495339811688214967071614123256973) - a1208 = convert(T, 0.00624365027520195208794358628580933625281631216903095917201250) + a1208 = convert(T, 0.0062436502752019520879435862858093362528163121690309591720125) a1209 = convert(T, 0.200043097109577314994435165469647856829066232218264969608768) a1210 = convert(T, -0.00805328367804983036823857162048902911923392887337029314844206) a1211 = convert(T, 0.0211517528067396521915711903523399601316877825157550573051221) @@ -1804,7 +1896,7 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a1609 = convert(T, 0.430527907083710898626656292808782917793030154094709462877146) a1610 = convert(T, 0.511973029011022237668556960394071692077125787030651386389972) a1611 = convert(T, 0.908303638886404260390159124638110213997496214819904630546596) - a1612 = convert(T, -1.23921093371933931757372469151534028854413889248605726186520) + a1612 = convert(T, -1.2392109337193393175737246915153402885441388924860572618652) a1613 = convert(T, -0.649048661671761465141672348879062553905402831967191097656668) a1614 = convert(T, 0.251708904586819292210480529948970541404887852931447491219418) a1615 = convert(T, 0.779906470345586398810756795282334476023540593411550187024263) @@ -1843,10 +1935,10 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a2018 = convert(T, -3.64411637921569236846406990361350645806721478409266709351203) a2019 = convert(T, -0.804503249910509910899030787958579499315694913210787878260459) - a2100 = convert(T, -148.809426507100488427838868268647625561930612082148597076690) + a2100 = convert(T, -148.80942650710048842783886826864762556193061208214859707669) a2112 = convert(T, -91.7295278291256484357935662402321623495228729036354276506427) a2113 = convert(T, 707.656144971598359834575719286335716154821128966649565194286) - a2114 = convert(T, -1.10563611857482440905296961311590930801338308942637769555540) + a2114 = convert(T, -1.1056361185748244090529696131159093080133830894263776955554) a2115 = convert(T, 176.134591883811372587859898076055660406999516762301689616841) a2116 = convert(T, 0.491384824214880662268898345164454557416884631402764792538746) a2117 = convert(T, -684.278000449814944358237535610895081956077167893600278300805) @@ -1858,7 +1950,7 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a2212 = convert(T, -4.46990150858505531443846227701960360497830681408751431146712) a2213 = convert(T, 45.5127128690952681968241950400052751178905907817398483534845) a2214 = convert(T, -0.0713085086183826912791492024438246129930559805352394367050813) - a2215 = convert(T, 11.2273614068412741582590624479939384207826800776794485051540) + a2215 = convert(T, 11.227361406841274158259062447993938420782680077679448505154) a2216 = convert(T, 0.126244376717622724516237912909138809361786889819105426371393) a2217 = convert(T, -43.5439339549483313605810624907242107623814304467621407753424) a2218 = convert(T, 0.787174307543058978398792994996550902064546091443233850464377) @@ -1878,7 +1970,7 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a2316 = convert(T, 0.0119671168968323754838161435501011294100927813964199613229864) a2317 = convert(T, -46.7249764992482408003358268242662695593201321659795608950429) a2318 = convert(T, 1.33029613326626711314710039298216591399033511191227101321435) - a2319 = convert(T, 1.00766787503398298353438903619926657771162717793661719708370) + a2319 = convert(T, 1.0076678750339829835343890361992665777116271779366171970837) a2320 = convert(T, 0.0209512051933665091664122388475480702892770753864487241177616) a2321 = convert(T, 0.0210134706331264177317735424331396407424412188443757490871603) a2322 = convert(T, 0.00952196014417121794175101542454575907376360233658356240547761) @@ -1888,10 +1980,10 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a2409 = convert(T, 1.03427452057230411936482926828825709938667999698324740166559) a2410 = convert(T, 0.00600303645864422487051240448206640574939078092406156945568306) a2411 = convert(T, 0.855938125099619537578012106002407728915062652616416005816477) - a2412 = convert(T, -250.516998547447860492777657729316130386584050420782075966990) + a2412 = convert(T, -250.51699854744786049277765772931613038658405042078207596699) a2413 = convert(T, 1946.42466652388427766053750328264758595829850895761428240231) a2414 = convert(T, -3.04503882102310365506105809086860882786950544097602101685174) - a2415 = convert(T, 490.626379528281713521208265299168083841598542274061671576230) + a2415 = convert(T, 490.62637952828171352120826529916808384159854227406167157623) a2416 = convert(T, 1.56647589531270907115484067013597445739595615245966775329993) a2417 = convert(T, -1881.97428994011173362217267377035870619215906638453056643641) a2418 = convert(T, 75.2592224724847175278837713643303149821620618914245864351135) @@ -1906,7 +1998,7 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a2509 = convert(T, 0.0230138787854593149638399846373742768772087122638142234223658) a2510 = convert(T, -0.00322155956692977098724476092467120878189463604760620461043308) a2511 = convert(T, 0.00988442549447664668946335414487885256040819982786014648129297) - a2512 = convert(T, 2.16252799377922507788307841904757354045759225335732707916530) + a2512 = convert(T, 2.1625279937792250778830784190475735404575922533573270791653) a2513 = convert(T, -16.2699864546457421328065640660139489006987552040228852402716) a2514 = convert(T, -0.128534502120524552843583417470935010538029037542654506231743) a2515 = convert(T, -8.98915042666504253089307820833379330486511746063552853023189) @@ -1915,7 +2007,7 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a2518 = convert(T, -0.574403330914095065628165482017335820148383663195675408024658) a2519 = convert(T, -0.345602039021393296692722496608124982535237228827655306030152) a2520 = convert(T, -0.00662241490206585091731619991383757781133067992707418687587487) - a2521 = convert(T, -0.00777788129242204164032546458607364309759347209626759111946150) + a2521 = convert(T, -0.0077778812924220416403254645860736430975934720962675911194615) a2522 = convert(T, -0.00356084192402274913338827232697437364675240818791706587952939) a2523 = convert(T, 4.79282506449930799649797749629840189457296934139359048988332) a2524 = convert(T, 0.153725464873068577844576387402512082757034273069877432944621) @@ -1943,7 +2035,7 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a2625 = convert(T, -1.57196275801232751882901735171459249177687219114442583461866) a2700 = convert(T, -16.6451467486341512872031294403931758764560371130818978459405) - a2705 = convert(T, 0.00592232780324503308042990005798046524738389560444257136834990) + a2705 = convert(T, 0.0059223278032450330804299000579804652473838956044425713683499) a2706 = convert(T, 0.470326159963841112217224303205894113455362530746108825010848) a2707 = convert(T, 0.299688863848679000853981837096192399136831121671781279184194) a2708 = convert(T, -0.247656877593994914689992276329810825853958069263947095548189) @@ -1958,11 +2050,11 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a2718 = convert(T, -1.25037492835620639521768185656179119962253747492403205797494) a2719 = convert(T, 2.59263594969543681023776379504377324994226447359296887778718) a2720 = convert(T, -0.301440298346404539830163997260526875264431537275641495291993) - a2721 = convert(T, 0.221384460789832337451706451572773791695246839057318414301020) - a2722 = convert(T, 0.0827577274771892931955989870974693152996276435429809890551210) + a2721 = convert(T, 0.22138446078983233745170645157277379169524683905731841430102) + a2722 = convert(T, 0.082757727477189293195598987097469315299627643542980989055121) a2723 = convert(T, 18.9960662040611520464672450037243263998175161412237156872211) a2724 = convert(T, 0.269231946409639685623468015128334167460051910348912845121977) - a2725 = convert(T, 1.62674827447066537462989364929628933988125029284183680279020) + a2725 = convert(T, 1.6267482744706653746298936492962893398812502928418368027902) a2726 = convert(T, 0.491719043846229147070666628704194097678081907210673044988866) a2800 = convert(T, 0.0838479812409052664616968791372814085980533139224911131069335) @@ -1970,7 +2062,7 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a2806 = convert(T, -0.247299020568812652339473838743194598325992840353340132697498) a2807 = convert(T, 0.0978080858367729012259313014081291665503740655476733940756599) a2808 = convert(T, 0.217590689243420631360008651767860318344168120024782176879989) - a2810 = convert(T, 0.137585606763325224865659632196787746647447222975084865975440) + a2810 = convert(T, 0.13758560676332522486565963219678774664744722297508486597544) a2811 = convert(T, 0.0439870229715046685058790092341545026046103890294261359042581) a2813 = convert(T, -0.513700813768193341957004456618630303738757363641964030086972) a2814 = convert(T, 0.826355691151315508644211308399153458701423158616168576922372) @@ -1979,12 +2071,12 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a2824 = convert(T, -0.826355691151315508644211308399153458701423158616168576922372) a2825 = convert(T, 0.513700813768193341957004456618630303738757363641964030086972) a2826 = convert(T, -0.0439870229715046685058790092341545026046103890294261359042581) - a2827 = convert(T, -0.137585606763325224865659632196787746647447222975084865975440) + a2827 = convert(T, -0.13758560676332522486565963219678774664744722297508486597544) a2900 = convert(T, 0.124380526654094412881516420868799316268491466359671423163289) a2904 = convert(T, 0.226120282197584301422238662979202901196752320742633143965145) a2905 = convert(T, 0.0137885887618080880607695837016477814530969417491493385363543) - a2906 = convert(T, -0.0672210133996684449749399507414305856950086341525382182856200) + a2906 = convert(T, -0.06722101339966844497493995074143058569500863415253821828562) a2909 = convert(T, -0.856238975085428354755349769879501772112121597411563802855067) a2910 = convert(T, -1.96337522866858908928262850028093813988180440518267404553576) a2911 = convert(T, -0.232332822724119401237246257308921847250108199230419994978218) @@ -2001,7 +2093,7 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a3000 = convert(T, 0.103484561636679776672993546511910344499744798201971316606663) a3003 = convert(T, 0.122068887306407222589644082868962077139592714834162134741275) a3004 = convert(T, 0.482574490331246622475134780125688112865919023850168049679402) - a3005 = convert(T, -0.0381409600015606999730886240005620205664113072478411477421970) + a3005 = convert(T, -0.038140960001560699973088624000562020566411307247841147742197) a3007 = convert(T, -0.550499525310802324138388507020508177411414311000037561712836) a3009 = convert(T, -0.711915811585189227887648262043794387578291882406745570495765) a3010 = convert(T, -0.584129605671551340432988730158480872095335329645227595707052) @@ -2021,14 +2113,14 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a3106 = convert(T, 0.109993425580724703919462404865068340845119058295846426463652) a3107 = convert(T, -0.254297048076270161384068506997153122141835626976703920846242) a3109 = convert(T, 0.865570777116694254343770343821098281832847401233011859346737) - a3110 = convert(T, 3.32416449114093083106799552786572018336860092936986407160200) + a3110 = convert(T, 3.324164491140930831067995527865720183368600929369864071602) a3113 = convert(T, -12.0102223315977933882352385148661841260301942633996815127277) a3114 = convert(T, 0.476601466242493239430442776862061899602963782003580209476163) a3115 = convert(T, -29.0243011221036390525802623213654099596251221332470910692353) a3123 = convert(T, 29.0243011221036390525802623213654099596251221332470910692353) a3124 = convert(T, -0.476601466242493239430442776862061899602963782003580209476163) a3125 = convert(T, 12.0102223315977933882352385148661841260301942633996815127277) - a3127 = convert(T, -3.32416449114093083106799552786572018336860092936986407160200) + a3127 = convert(T, -3.324164491140930831067995527865720183368600929369864071602) a3128 = convert(T, -0.865570777116694254343770343821098281832847401233011859346737) a3129 = convert(T, 0.254297048076270161384068506997153122141835626976703920846242) a3130 = convert(T, -0.109993425580724703919462404865068340845119058295846426463652) @@ -2075,7 +2167,8 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a3431 = convert(T, -21 // 128) a3432 = convert(T, -7 // 32) a3433 = convert(T, -7 // 24) - Feagin14ConstantCache(adaptiveConst, a0100, a0200, a0201, a0300, a0302, a0400, a0402, + return Feagin14ConstantCache( + adaptiveConst, a0100, a0200, a0201, a0300, a0302, a0400, a0402, a0403, a0500, a0503, a0504, a0600, a0603, a0604, a0605, a0700, a0704, a0705, a0706, a0800, a0805, a0806, a0807, a0900, a0905, a0906, a0907, a0908, a1000, a1005, a1006, a1007, a1008, a1009, @@ -2116,7 +2209,8 @@ function Feagin14ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, - b32, b33, b34, b35) + b32, b33, b34, b35 + ) end """ @@ -2214,38 +2308,50 @@ function Feagin14ConstantCache(T::Type, T2::Type) a0600 = convert(T, big"0.103484561636679776672993546511910344499744798201971316606663") a0603 = convert(T, big"0.122068887306407222589644082868962077139592714834162134741275") a0604 = convert(T, big"0.482574490331246622475134780125688112865919023850168049679402") - a0605 = convert(T, - big"-0.0381409600015606999730886240005620205664113072478411477421970") + a0605 = convert( + T, + big"-0.0381409600015606999730886240005620205664113072478411477421970" + ) a0700 = convert(T, big"0.124380526654094412881516420868799316268491466359671423163289") a0704 = convert(T, big"0.226120282197584301422238662979202901196752320742633143965145") a0705 = convert(T, big"0.0137885887618080880607695837016477814530969417491493385363543") - a0706 = convert(T, - big"-0.0672210133996684449749399507414305856950086341525382182856200") + a0706 = convert( + T, + big"-0.0672210133996684449749399507414305856950086341525382182856200" + ) a0800 = convert(T, big"0.0936919065659673815530885456083005933866349695217750085655603") - a0805 = convert(T, - big"-0.00613406843450510987229498995641664735620914507128858871007099") + a0805 = convert( + T, + big"-0.00613406843450510987229498995641664735620914507128858871007099" + ) a0806 = convert(T, big"0.216019825625503063708860097659866573490979433278117320188668") a0807 = convert(T, big"0.423695063515761937337619073960976753205867469544123532683116") a0900 = convert(T, big"0.0838479812409052664616968791372814085980533139224911131069335") - a0905 = convert(T, - big"-0.0117949367100973814319755056031295775367961960590736150777613") + a0905 = convert( + T, + big"-0.0117949367100973814319755056031295775367961960590736150777613" + ) a0906 = convert(T, big"-0.247299020568812652339473838743194598325992840353340132697498") a0907 = convert(T, big"0.0978080858367729012259313014081291665503740655476733940756599") a0908 = convert(T, big"0.217590689243420631360008651767860318344168120024782176879989") a1000 = convert(T, big"0.0615255359769428227954562389614314714333423969064821107453940") - a1005 = convert(T, - big"0.00592232780324503308042990005798046524738389560444257136834990") + a1005 = convert( + T, + big"0.00592232780324503308042990005798046524738389560444257136834990" + ) a1006 = convert(T, big"0.470326159963841112217224303205894113455362530746108825010848") a1007 = convert(T, big"0.299688863848679000853981837096192399136831121671781279184194") a1008 = convert(T, big"-0.247656877593994914689992276329810825853958069263947095548189") a1009 = convert(T, big"0.110895029771437682893999851839061714522445173600678718208625") a1100 = convert(T, big"0.0419700073362782579861792864787277787213483656543104611245994") - a1105 = convert(T, - big"-0.00317987696266205093901912847692712407988609169703103952205634") + a1105 = convert( + T, + big"-0.00317987696266205093901912847692712407988609169703103952205634" + ) a1106 = convert(T, big"0.806397714906192077260821711520379506393543111567419750119748") a1107 = convert(T, big"0.0975983126412388979093522850684288851314672048003054550357187") a1108 = convert(T, big"0.778575578158398909027512446452927238999763460594181964958853") @@ -2253,45 +2359,67 @@ function Feagin14ConstantCache(T::Type, T2::Type) a1110 = convert(T, big"-1.56261579627468188307070943950527825211462892236424360892806") a1200 = convert(T, big"0.0437726782233730163574465242495339811688214967071614123256973") - a1208 = convert(T, - big"0.00624365027520195208794358628580933625281631216903095917201250") + a1208 = convert( + T, + big"0.00624365027520195208794358628580933625281631216903095917201250" + ) a1209 = convert(T, big"0.200043097109577314994435165469647856829066232218264969608768") - a1210 = convert(T, - big"-0.00805328367804983036823857162048902911923392887337029314844206") + a1210 = convert( + T, + big"-0.00805328367804983036823857162048902911923392887337029314844206" + ) a1211 = convert(T, big"0.0211517528067396521915711903523399601316877825157550573051221") a1300 = convert(T, big"0.0283499250363514563095023591920717312247137654896477097768495") - a1308 = convert(T, - big"0.00249163204855817407538949148805995149459884653585417680098222") + a1308 = convert( + T, + big"0.00249163204855817407538949148805995149459884653585417680098222" + ) a1309 = convert(T, big"0.0230138787854593149638399846373742768772087122638142234223658") - a1310 = convert(T, - big"-0.00322155956692977098724476092467120878189463604760620461043308") - a1311 = convert(T, - big"0.00988442549447664668946335414487885256040819982786014648129297") - a1312 = convert(T, - big"-0.0213010771328887351384307642875927384886634565429572466632092") + a1310 = convert( + T, + big"-0.00322155956692977098724476092467120878189463604760620461043308" + ) + a1311 = convert( + T, + big"0.00988442549447664668946335414487885256040819982786014648129297" + ) + a1312 = convert( + T, + big"-0.0213010771328887351384307642875927384886634565429572466632092" + ) a1400 = convert(T, big"0.343511894290243001049432234735147943083353174980701426268122") a1408 = convert(T, big"0.210451912023627385609097011999010655788807405225626700040882") a1409 = convert(T, big"1.03427452057230411936482926828825709938667999698324740166559") - a1410 = convert(T, - big"0.00600303645864422487051240448206640574939078092406156945568306") + a1410 = convert( + T, + big"0.00600303645864422487051240448206640574939078092406156945568306" + ) a1411 = convert(T, big"0.855938125099619537578012106002407728915062652616416005816477") a1412 = convert(T, big"-0.977235005036766810872264852372525633013107656892839677696022") a1413 = convert(T, big"-0.660026980479294694616225013856327693720573981219974874776419") - a1500 = convert(T, - big"-0.0143574001672168069538206399935076366657755954378399880691949") - a1508 = convert(T, - big"-0.0366253270049039970293685796848974791733119081733552207318285") + a1500 = convert( + T, + big"-0.0143574001672168069538206399935076366657755954378399880691949" + ) + a1508 = convert( + T, + big"-0.0366253270049039970293685796848974791733119081733552207318285" + ) a1509 = convert(T, big"0.0350254975636213681976849406979846524346789082471103574920148") a1510 = convert(T, big"0.0360946016362113508931786658758335239823689929864237671348749") - a1511 = convert(T, - big"-0.0265219967553681106351595946834601923649627012457464284442911") + a1511 = convert( + T, + big"-0.0265219967553681106351595946834601923649627012457464284442911" + ) a1512 = convert(T, big"0.0445699011305698119638911537508839908104336323082226770910408") a1513 = convert(T, big"0.124343093331358243286225595741786448038973408895106741855721") - a1514 = convert(T, - big"0.00413829693239480694403512496204335960426192908674476033832967") + a1514 = convert( + T, + big"0.00413829693239480694403512496204335960426192908674476033832967" + ) a1600 = convert(T, big"0.356032404425120290975609116398089176264106222379748802654822") a1608 = convert(T, big"-0.450192758947562595966821779075956175110645100214763601190349") @@ -2304,36 +2432,56 @@ function Feagin14ConstantCache(T::Type, T2::Type) a1615 = convert(T, big"0.779906470345586398810756795282334476023540593411550187024263") a1700 = convert(T, big"0.0130935687406513066406881206418834980127470438213192487844956") - a1712 = convert(T, - big"-0.0000932053067985113945908461962767108237858631509684667142124826") + a1712 = convert( + T, + big"-0.0000932053067985113945908461962767108237858631509684667142124826" + ) a1713 = convert(T, big"0.0505374334262299359640090443138590726770942344716122381702746") - a1714 = convert(T, - big"8.04470341944487979109579109610197797641311868930865361048975e-7") - a1715 = convert(T, - big"0.000591726029494171190528755742777717259844340971924321528178248") - a1716 = convert(T, - big"-4.01614722154557337064691684906375587732264247950093804676867e-7") + a1714 = convert( + T, + big"8.04470341944487979109579109610197797641311868930865361048975e-7" + ) + a1715 = convert( + T, + big"0.000591726029494171190528755742777717259844340971924321528178248" + ) + a1716 = convert( + T, + big"-4.01614722154557337064691684906375587732264247950093804676867e-7" + ) a1800 = convert(T, big"0.0207926484466053012541944544000765652167255206144373407979758") - a1812 = convert(T, - big"0.000582695918800085915101902697837284108951406103029871570103075") - a1813 = convert(T, - big"-0.00801700732358815939083342186525852746640558465919633524655451") - a1814 = convert(T, - big"4.03847643847136940375170821743560570484117290330895506618968e-6") + a1812 = convert( + T, + big"0.000582695918800085915101902697837284108951406103029871570103075" + ) + a1813 = convert( + T, + big"-0.00801700732358815939083342186525852746640558465919633524655451" + ) + a1814 = convert( + T, + big"4.03847643847136940375170821743560570484117290330895506618968e-6" + ) a1815 = convert(T, big"0.0854609998055506144225056114567535602510114622033622491802597") - a1816 = convert(T, - big"-2.04486480935804242706707569691004307904442837552677456232848e-6") + a1816 = convert( + T, + big"-2.04486480935804242706707569691004307904442837552677456232848e-6" + ) a1817 = convert(T, big"0.105328578824431893399799402979093997354240904235172843146582") a1900 = convert(T, big"1.40153449795736021415446247355771306718486452917597731683689") a1912 = convert(T, big"-0.230252000984221261616272410367415621261130298274455611733277") a1913 = convert(T, big"-7.21106840466912905659582237106874247165856493509961561958267") - a1914 = convert(T, - big"0.00372901560694836335236995327852132340217759566678662385552634") + a1914 = convert( + T, + big"0.00372901560694836335236995327852132340217759566678662385552634" + ) a1915 = convert(T, big"-4.71415495727125020678778179392224757011323373221820091641216") - a1916 = convert(T, - big"-0.00176367657545349242053841995032797673574903886695600132759652") + a1916 = convert( + T, + big"-0.00176367657545349242053841995032797673574903886695600132759652" + ) a1917 = convert(T, big"7.64130548038698765563029310880237651185173367813936997648198") a1918 = convert(T, big"3.50602043659751834989896082949744710968212949893375368243588") @@ -2342,8 +2490,10 @@ function Feagin14ConstantCache(T::Type, T2::Type) a2013 = convert(T, big"-56.4501393867325792523560991120904281440468100061340556540132") a2014 = convert(T, big"0.0912376306930644901344530449290276645709607450403673704844997") a2015 = convert(T, big"-12.7336279925434886201945524309199275038162717529918963305155") - a2016 = convert(T, - big"-0.0396895921904719712313542810939736674712383070433147873009352") + a2016 = convert( + T, + big"-0.0396895921904719712313542810939736674712383070433147873009352" + ) a2017 = convert(T, big"54.4392141883570886996225765155307791861438378423305337073797") a2018 = convert(T, big"-3.64411637921569236846406990361350645806721478409266709351203") a2019 = convert(T, big"-0.804503249910509910899030787958579499315694913210787878260459") @@ -2362,8 +2512,10 @@ function Feagin14ConstantCache(T::Type, T2::Type) a2200 = convert(T, big"-9.67307946948196763644126118433219395839951408571877262880482") a2212 = convert(T, big"-4.46990150858505531443846227701960360497830681408751431146712") a2213 = convert(T, big"45.5127128690952681968241950400052751178905907817398483534845") - a2214 = convert(T, - big"-0.0713085086183826912791492024438246129930559805352394367050813") + a2214 = convert( + T, + big"-0.0713085086183826912791492024438246129930559805352394367050813" + ) a2215 = convert(T, big"11.2273614068412741582590624479939384207826800776794485051540") a2216 = convert(T, big"0.126244376717622724516237912909138809361786889819105426371393") a2217 = convert(T, big"-43.5439339549483313605810624907242107623814304467621407753424") @@ -2373,16 +2525,22 @@ function Feagin14ConstantCache(T::Type, T2::Type) a2221 = convert(T, big"0.0859131249503067107308438031499859443441115056294154956487671") a2300 = convert(T, big"-10.0664032447054702403396606900426891472202824757968765569183") - a2308 = convert(T, - big"-0.0366253270049039970293685796848974791733119081733552207318285") + a2308 = convert( + T, + big"-0.0366253270049039970293685796848974791733119081733552207318285" + ) a2309 = convert(T, big"0.0350254975636213681976849406979846524346789082471103574920148") a2310 = convert(T, big"0.0360946016362113508931786658758335239823689929864237671348749") - a2311 = convert(T, - big"-0.0265219967553681106351595946834601923649627012457464284442911") + a2311 = convert( + T, + big"-0.0265219967553681106351595946834601923649627012457464284442911" + ) a2312 = convert(T, big"-6.27088972181464143590553149478871603839356122957396018530209") a2313 = convert(T, big"48.2079237442562989090702103008195063923492593141636117832993") - a2314 = convert(T, - big"-0.0694471689136165640882395180583732834557754169149088630301342") + a2314 = convert( + T, + big"-0.0694471689136165640882395180583732834557754169149088630301342" + ) a2315 = convert(T, big"12.6810690204850295698341370913609807066108483811412127009785") a2316 = convert(T, big"0.0119671168968323754838161435501011294100927813964199613229864") a2317 = convert(T, big"-46.7249764992482408003358268242662695593201321659795608950429") @@ -2390,14 +2548,18 @@ function Feagin14ConstantCache(T::Type, T2::Type) a2319 = convert(T, big"1.00766787503398298353438903619926657771162717793661719708370") a2320 = convert(T, big"0.0209512051933665091664122388475480702892770753864487241177616") a2321 = convert(T, big"0.0210134706331264177317735424331396407424412188443757490871603") - a2322 = convert(T, - big"0.00952196014417121794175101542454575907376360233658356240547761") + a2322 = convert( + T, + big"0.00952196014417121794175101542454575907376360233658356240547761" + ) a2400 = convert(T, big"-409.478081677743708772589097409370357624424341606752069725341") a2408 = convert(T, big"0.210451912023627385609097011999010655788807405225626700040882") a2409 = convert(T, big"1.03427452057230411936482926828825709938667999698324740166559") - a2410 = convert(T, - big"0.00600303645864422487051240448206640574939078092406156945568306") + a2410 = convert( + T, + big"0.00600303645864422487051240448206640574939078092406156945568306" + ) a2411 = convert(T, big"0.855938125099619537578012106002407728915062652616416005816477") a2412 = convert(T, big"-250.516998547447860492777657729316130386584050420782075966990") a2413 = convert(T, big"1946.42466652388427766053750328264758595829850895761428240231") @@ -2409,39 +2571,57 @@ function Feagin14ConstantCache(T::Type, T2::Type) a2419 = convert(T, big"34.5734356980331067622434344736554689696728644793551014989002") a2420 = convert(T, big"3.21147679440968961435417361847073755169022966748891627882572") a2421 = convert(T, big"-0.460408041738414391307201404237058848867245095265382820823055") - a2422 = convert(T, - big"-0.0870718339841810522431884137957986245724252047388936572215438") + a2422 = convert( + T, + big"-0.0870718339841810522431884137957986245724252047388936572215438" + ) a2423 = convert(T, big"-7.39351814158303067567016952195521063999185773249132944724553") a2500 = convert(T, big"3.43347475853550878921093496257596781120623891072008459930197") - a2508 = convert(T, - big"0.00249163204855817407538949148805995149459884653585417680098222") + a2508 = convert( + T, + big"0.00249163204855817407538949148805995149459884653585417680098222" + ) a2509 = convert(T, big"0.0230138787854593149638399846373742768772087122638142234223658") - a2510 = convert(T, - big"-0.00322155956692977098724476092467120878189463604760620461043308") - a2511 = convert(T, - big"0.00988442549447664668946335414487885256040819982786014648129297") + a2510 = convert( + T, + big"-0.00322155956692977098724476092467120878189463604760620461043308" + ) + a2511 = convert( + T, + big"0.00988442549447664668946335414487885256040819982786014648129297" + ) a2512 = convert(T, big"2.16252799377922507788307841904757354045759225335732707916530") a2513 = convert(T, big"-16.2699864546457421328065640660139489006987552040228852402716") a2514 = convert(T, big"-0.128534502120524552843583417470935010538029037542654506231743") a2515 = convert(T, big"-8.98915042666504253089307820833379330486511746063552853023189") - a2516 = convert(T, - big"-0.00348595363232025333387080201851013650192401767250513765000963") + a2516 = convert( + T, + big"-0.00348595363232025333387080201851013650192401767250513765000963" + ) a2517 = convert(T, big"15.7936194113339807536235187388695574135853387025139738341334") a2518 = convert(T, big"-0.574403330914095065628165482017335820148383663195675408024658") a2519 = convert(T, big"-0.345602039021393296692722496608124982535237228827655306030152") - a2520 = convert(T, - big"-0.00662241490206585091731619991383757781133067992707418687587487") - a2521 = convert(T, - big"-0.00777788129242204164032546458607364309759347209626759111946150") - a2522 = convert(T, - big"-0.00356084192402274913338827232697437364675240818791706587952939") + a2520 = convert( + T, + big"-0.00662241490206585091731619991383757781133067992707418687587487" + ) + a2521 = convert( + T, + big"-0.00777788129242204164032546458607364309759347209626759111946150" + ) + a2522 = convert( + T, + big"-0.00356084192402274913338827232697437364675240818791706587952939" + ) a2523 = convert(T, big"4.79282506449930799649797749629840189457296934139359048988332") a2524 = convert(T, big"0.153725464873068577844576387402512082757034273069877432944621") a2600 = convert(T, big"32.3038520871985442326994734440031535091364975047784630088983") - a2605 = convert(T, - big"-0.00317987696266205093901912847692712407988609169703103952205634") + a2605 = convert( + T, + big"-0.00317987696266205093901912847692712407988609169703103952205634" + ) a2606 = convert(T, big"0.806397714906192077260821711520379506393543111567419750119748") a2607 = convert(T, big"0.0975983126412388979093522850684288851314672048003054550357187") a2608 = convert(T, big"0.778575578158398909027512446452927238999763460594181964958853") @@ -2451,24 +2631,34 @@ function Feagin14ConstantCache(T::Type, T2::Type) a2613 = convert(T, big"-154.544555293543621230730189631471036399316683669609116705323") a2614 = convert(T, big"1.56971088703334872692034283417621761466263593582497085955201") a2615 = convert(T, big"3.27685545087248131321429817269900731165522404974733504794135") - a2616 = convert(T, - big"-0.0503489245193653176348040727199783626534081095691632396802451") + a2616 = convert( + T, + big"-0.0503489245193653176348040727199783626534081095691632396802451" + ) a2617 = convert(T, big"153.321151858041665070593767885914694011224363102594556731397") a2618 = convert(T, big"7.17568186327720495846766484814784143567826308034865369443637") a2619 = convert(T, big"-2.94036748675300481945917659896930989215320594380777597403592") - a2620 = convert(T, - big"-0.0665845946076803144470749676022628870281920493197256887985612") - a2621 = convert(T, - big"-0.0462346054990843661229248668562217261176966514016859284197145") - a2622 = convert(T, - big"-0.0204198733585679401539388228617269778848579774821581777675337") + a2620 = convert( + T, + big"-0.0665845946076803144470749676022628870281920493197256887985612" + ) + a2621 = convert( + T, + big"-0.0462346054990843661229248668562217261176966514016859284197145" + ) + a2622 = convert( + T, + big"-0.0204198733585679401539388228617269778848579774821581777675337" + ) a2623 = convert(T, big"-53.3523106438735850515953441165998107974045090495791591218714") a2624 = convert(T, big"-1.35548714715078654978732186705996404017554501614191325114947") a2625 = convert(T, big"-1.57196275801232751882901735171459249177687219114442583461866") a2700 = convert(T, big"-16.6451467486341512872031294403931758764560371130818978459405") - a2705 = convert(T, - big"0.00592232780324503308042990005798046524738389560444257136834990") + a2705 = convert( + T, + big"0.00592232780324503308042990005798046524738389560444257136834990" + ) a2706 = convert(T, big"0.470326159963841112217224303205894113455362530746108825010848") a2707 = convert(T, big"0.299688863848679000853981837096192399136831121671781279184194") a2708 = convert(T, big"-0.247656877593994914689992276329810825853958069263947095548189") @@ -2491,8 +2681,10 @@ function Feagin14ConstantCache(T::Type, T2::Type) a2726 = convert(T, big"0.491719043846229147070666628704194097678081907210673044988866") a2800 = convert(T, big"0.0838479812409052664616968791372814085980533139224911131069335") - a2805 = convert(T, - big"-0.0117949367100973814319755056031295775367961960590736150777613") + a2805 = convert( + T, + big"-0.0117949367100973814319755056031295775367961960590736150777613" + ) a2806 = convert(T, big"-0.247299020568812652339473838743194598325992840353340132697498") a2807 = convert(T, big"0.0978080858367729012259313014081291665503740655476733940756599") a2808 = convert(T, big"0.217590689243420631360008651767860318344168120024782176879989") @@ -2504,15 +2696,19 @@ function Feagin14ConstantCache(T::Type, T2::Type) a2823 = convert(T, big"-25.7018139719811832625873882972519939511136556341960074626615") a2824 = convert(T, big"-0.826355691151315508644211308399153458701423158616168576922372") a2825 = convert(T, big"0.513700813768193341957004456618630303738757363641964030086972") - a2826 = convert(T, - big"-0.0439870229715046685058790092341545026046103890294261359042581") + a2826 = convert( + T, + big"-0.0439870229715046685058790092341545026046103890294261359042581" + ) a2827 = convert(T, big"-0.137585606763325224865659632196787746647447222975084865975440") a2900 = convert(T, big"0.124380526654094412881516420868799316268491466359671423163289") a2904 = convert(T, big"0.226120282197584301422238662979202901196752320742633143965145") a2905 = convert(T, big"0.0137885887618080880607695837016477814530969417491493385363543") - a2906 = convert(T, - big"-0.0672210133996684449749399507414305856950086341525382182856200") + a2906 = convert( + T, + big"-0.0672210133996684449749399507414305856950086341525382182856200" + ) a2909 = convert(T, big"-0.856238975085428354755349769879501772112121597411563802855067") a2910 = convert(T, big"-1.96337522866858908928262850028093813988180440518267404553576") a2911 = convert(T, big"-0.232332822724119401237246257308921847250108199230419994978218") @@ -2529,14 +2725,18 @@ function Feagin14ConstantCache(T::Type, T2::Type) a3000 = convert(T, big"0.103484561636679776672993546511910344499744798201971316606663") a3003 = convert(T, big"0.122068887306407222589644082868962077139592714834162134741275") a3004 = convert(T, big"0.482574490331246622475134780125688112865919023850168049679402") - a3005 = convert(T, - big"-0.0381409600015606999730886240005620205664113072478411477421970") + a3005 = convert( + T, + big"-0.0381409600015606999730886240005620205664113072478411477421970" + ) a3007 = convert(T, big"-0.550499525310802324138388507020508177411414311000037561712836") a3009 = convert(T, big"-0.711915811585189227887648262043794387578291882406745570495765") a3010 = convert(T, big"-0.584129605671551340432988730158480872095335329645227595707052") a3013 = convert(T, big"2.11046308125864932128717300046622750300375054278936987850718") - a3014 = convert(T, - big"-0.0837494736739572135525742023001037992695260175335123517729291") + a3014 = convert( + T, + big"-0.0837494736739572135525742023001037992695260175335123517729291" + ) a3015 = convert(T, big"5.10021499072320914075295969043344113107545060862804249161191") a3023 = convert(T, big"-5.10021499072320914075295969043344113107545060862804249161191") a3024 = convert(T, big"0.0837494736739572135525742023001037992695260175335123517729291") @@ -2605,7 +2805,8 @@ function Feagin14ConstantCache(T::Type, T2::Type) a3431 = convert(T, -21 // 128) a3432 = convert(T, -7 // 32) a3433 = convert(T, -7 // 24) - Feagin14ConstantCache(adaptiveConst, a0100, a0200, a0201, a0300, a0302, a0400, a0402, + return Feagin14ConstantCache( + adaptiveConst, a0100, a0200, a0201, a0300, a0302, a0400, a0402, a0403, a0500, a0503, a0504, a0600, a0603, a0604, a0605, a0700, a0704, a0705, a0706, a0800, a0805, a0806, a0807, a0900, a0905, a0906, a0907, a0908, a1000, a1005, a1006, a1007, a1008, a1009, @@ -2646,5 +2847,6 @@ function Feagin14ConstantCache(T::Type, T2::Type) c25, c26, c27, c28, c29, c30, c31, c32, c33, c34, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, - b32, b33, b34, b35) + b32, b33, b34, b35 + ) end diff --git a/lib/OrdinaryDiffEqFeagin/test/jet.jl b/lib/OrdinaryDiffEqFeagin/test/jet.jl index 2e74088464..253ad73478 100644 --- a/lib/OrdinaryDiffEqFeagin/test/jet.jl +++ b/lib/OrdinaryDiffEqFeagin/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqFeagin, target_defined_modules = true, mode = :typo) -end \ No newline at end of file + OrdinaryDiffEqFeagin, target_defined_modules = true, mode = :typo + ) +end diff --git a/lib/OrdinaryDiffEqFeagin/test/ode_feagin_tests.jl b/lib/OrdinaryDiffEqFeagin/test/ode_feagin_tests.jl index 15cfd34387..ec65193349 100644 --- a/lib/OrdinaryDiffEqFeagin/test/ode_feagin_tests.jl +++ b/lib/OrdinaryDiffEqFeagin/test/ode_feagin_tests.jl @@ -1,9 +1,9 @@ using OrdinaryDiffEqFeagin, DiffEqBase, Test, DiffEqDevTools, - Random + Random import ODEProblemLibrary: prob_ode_bigfloatlinear, - prob_ode_bigfloat2Dlinear, - prob_ode_2Dlinear + prob_ode_bigfloat2Dlinear, + prob_ode_2Dlinear ## Convergence Testing println("Convergence Test on Linear") diff --git a/lib/OrdinaryDiffEqFeagin/test/qa.jl b/lib/OrdinaryDiffEqFeagin/test/qa.jl index 7cceede6e7..1676c92185 100644 --- a/lib/OrdinaryDiffEqFeagin/test/qa.jl +++ b/lib/OrdinaryDiffEqFeagin/test/qa.jl @@ -5,4 +5,4 @@ using Aqua Aqua.test_all( OrdinaryDiffEqFeagin ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqFeagin/test/runtests.jl b/lib/OrdinaryDiffEqFeagin/test/runtests.jl index 5c2f9b2f13..db1086415f 100644 --- a/lib/OrdinaryDiffEqFeagin/test/runtests.jl +++ b/lib/OrdinaryDiffEqFeagin/test/runtests.jl @@ -1,6 +1,5 @@ - using SafeTestsets @time @safetestset "Feagin Tests" include("ode_feagin_tests.jl") @time @safetestset "JET Tests" include("jet.jl") -@time @safetestset "Aqua" include("qa.jl") \ No newline at end of file +@time @safetestset "Aqua" include("qa.jl") diff --git a/lib/OrdinaryDiffEqFunctionMap/src/OrdinaryDiffEqFunctionMap.jl b/lib/OrdinaryDiffEqFunctionMap/src/OrdinaryDiffEqFunctionMap.jl index a4b4ed3f88..aa6e519438 100644 --- a/lib/OrdinaryDiffEqFunctionMap/src/OrdinaryDiffEqFunctionMap.jl +++ b/lib/OrdinaryDiffEqFunctionMap/src/OrdinaryDiffEqFunctionMap.jl @@ -1,12 +1,12 @@ module OrdinaryDiffEqFunctionMap import OrdinaryDiffEqCore: isfsal, beta2_default, beta1_default, OrdinaryDiffEqAlgorithm, - initialize!, perform_step!, unwrap_alg, - OrdinaryDiffEqMutableCache, - alg_cache, @cache, _ode_addsteps!, _ode_interpolant!, - _ode_interpolant, get_fsalfirstlast, - alg_order, OrdinaryDiffEqConstantCache, dt_required, - isdiscretecache, isdiscretealg, full_cache + initialize!, perform_step!, unwrap_alg, + OrdinaryDiffEqMutableCache, + alg_cache, @cache, _ode_addsteps!, _ode_interpolant!, + _ode_interpolant, get_fsalfirstlast, + alg_order, OrdinaryDiffEqConstantCache, dt_required, + isdiscretecache, isdiscretealg, full_cache using DiffEqBase import RecursiveArrayTools: recursivecopy! import FastBroadcast: @.. @@ -26,14 +26,18 @@ include("functionmap_perform_step.jl") include("fixed_timestep_perform_step.jl") # Default algorithm for DiscreteProblem -function SciMLBase.__solve(prob::SciMLBase.DiscreteProblem, ::Nothing, args...; - kwargs...) - SciMLBase.__solve(prob, FunctionMap(), args...; kwargs...) +function SciMLBase.__solve( + prob::SciMLBase.DiscreteProblem, ::Nothing, args...; + kwargs... + ) + return SciMLBase.__solve(prob, FunctionMap(), args...; kwargs...) end -function SciMLBase.__init(prob::SciMLBase.DiscreteProblem, ::Nothing, args...; - kwargs...) - SciMLBase.__init(prob, FunctionMap(), args...; kwargs...) +function SciMLBase.__init( + prob::SciMLBase.DiscreteProblem, ::Nothing, args...; + kwargs... + ) + return SciMLBase.__init(prob, FunctionMap(), args...; kwargs...) end export FunctionMap diff --git a/lib/OrdinaryDiffEqFunctionMap/src/alg_utils.jl b/lib/OrdinaryDiffEqFunctionMap/src/alg_utils.jl index 353b284fd1..6916d66419 100644 --- a/lib/OrdinaryDiffEqFunctionMap/src/alg_utils.jl +++ b/lib/OrdinaryDiffEqFunctionMap/src/alg_utils.jl @@ -1,11 +1,11 @@ function SciMLBase.isautodifferentiable(alg::FunctionMap) - true + return true end function SciMLBase.allows_arbitrary_number_types(alg::FunctionMap) - true + return true end function SciMLBase.allowscomplex(alg::FunctionMap) - true + return true end SciMLBase.isdiscrete(alg::FunctionMap) = true @@ -19,7 +19,7 @@ beta2_default(alg::FunctionMap) = 0 beta1_default(alg::FunctionMap, beta2) = 0 function FunctionMap_scale_by_time(alg::FunctionMap{scale_by_time}) where {scale_by_time} - scale_by_time + return scale_by_time end dt_required(alg::FunctionMap) = false diff --git a/lib/OrdinaryDiffEqFunctionMap/src/fixed_timestep_perform_step.jl b/lib/OrdinaryDiffEqFunctionMap/src/fixed_timestep_perform_step.jl index 97bfac9e78..4e5fee9313 100644 --- a/lib/OrdinaryDiffEqFunctionMap/src/fixed_timestep_perform_step.jl +++ b/lib/OrdinaryDiffEqFunctionMap/src/fixed_timestep_perform_step.jl @@ -1,18 +1,20 @@ function initialize!(integrator, cache::FunctionMapCache) integrator.kshortsize = 0 - resize!(integrator.k, integrator.kshortsize) + return resize!(integrator.k, integrator.kshortsize) end function perform_step!(integrator, cache::FunctionMapCache, repeat_step = false) (; u, uprev, dt, t, f, p) = integrator alg = unwrap_alg(integrator, nothing) (; tmp) = cache - if integrator.f != DiffEqBase.DISCRETE_INPLACE_DEFAULT && - !(integrator.f isa DiffEqBase.EvalFunc && - integrator.f.f === DiffEqBase.DISCRETE_INPLACE_DEFAULT) + return if integrator.f != DiffEqBase.DISCRETE_INPLACE_DEFAULT && + !( + integrator.f isa DiffEqBase.EvalFunc && + integrator.f.f === DiffEqBase.DISCRETE_INPLACE_DEFAULT + ) if FunctionMap_scale_by_time(alg) f(tmp, uprev, p, t + dt) - @muladd @.. broadcast=false u=uprev + dt * tmp + @muladd @.. broadcast = false u = uprev + dt * tmp else f(u, uprev, p, t + dt) end @@ -23,13 +25,15 @@ end function perform_step!(integrator, cache::FunctionMapConstantCache, repeat_step = false) (; uprev, dt, t, f, p) = integrator alg = unwrap_alg(integrator, nothing) - if integrator.f != DiffEqBase.DISCRETE_OUTOFPLACE_DEFAULT && - !(integrator.f isa DiffEqBase.EvalFunc && - integrator.f.f === DiffEqBase.DISCRETE_OUTOFPLACE_DEFAULT) + return if integrator.f != DiffEqBase.DISCRETE_OUTOFPLACE_DEFAULT && + !( + integrator.f isa DiffEqBase.EvalFunc && + integrator.f.f === DiffEqBase.DISCRETE_OUTOFPLACE_DEFAULT + ) if FunctionMap_scale_by_time(alg) tmp = f(uprev, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @muladd integrator.u = @.. broadcast=false uprev+dt * tmp + @muladd integrator.u = @.. broadcast = false uprev + dt * tmp else integrator.u = f(uprev, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) @@ -39,5 +43,5 @@ end function initialize!(integrator, cache::FunctionMapConstantCache) integrator.kshortsize = 0 - integrator.k = typeof(integrator.k)(undef, integrator.kshortsize) + return integrator.k = typeof(integrator.k)(undef, integrator.kshortsize) end diff --git a/lib/OrdinaryDiffEqFunctionMap/src/functionmap_caches.jl b/lib/OrdinaryDiffEqFunctionMap/src/functionmap_caches.jl index a2b03c0818..2e2a4b278e 100644 --- a/lib/OrdinaryDiffEqFunctionMap/src/functionmap_caches.jl +++ b/lib/OrdinaryDiffEqFunctionMap/src/functionmap_caches.jl @@ -5,22 +5,28 @@ end get_fsalfirstlast(cache::FunctionMapCache, u) = (nothing, nothing) -function alg_cache(alg::FunctionMap, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::FunctionMap, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - FunctionMapCache(u, uprev, + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return FunctionMapCache( + u, uprev, FunctionMap_scale_by_time(alg) ? rate_prototype : - (eltype(u) <: Enum ? copy(u) : zero(u))) + (eltype(u) <: Enum ? copy(u) : zero(u)) + ) end struct FunctionMapConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::FunctionMap, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::FunctionMap, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - FunctionMapConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return FunctionMapConstantCache() end isdiscretecache(cache::Union{FunctionMapCache, FunctionMapConstantCache}) = true diff --git a/lib/OrdinaryDiffEqFunctionMap/src/functionmap_perform_step.jl b/lib/OrdinaryDiffEqFunctionMap/src/functionmap_perform_step.jl index 7527b13d53..c29161c15a 100644 --- a/lib/OrdinaryDiffEqFunctionMap/src/functionmap_perform_step.jl +++ b/lib/OrdinaryDiffEqFunctionMap/src/functionmap_perform_step.jl @@ -1,11 +1,15 @@ -function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::FunctionMapCache, +function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::FunctionMapCache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) - nothing + force_calc_end = false + ) + return nothing end -function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::FunctionMapConstantCache, +function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::FunctionMapConstantCache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) - nothing + force_calc_end = false + ) + return nothing end diff --git a/lib/OrdinaryDiffEqFunctionMap/src/interp_func.jl b/lib/OrdinaryDiffEqFunctionMap/src/interp_func.jl index 9ff3cc13c2..2a8f48ce7a 100644 --- a/lib/OrdinaryDiffEqFunctionMap/src/interp_func.jl +++ b/lib/OrdinaryDiffEqFunctionMap/src/interp_func.jl @@ -1,9 +1,15 @@ -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where {cacheType <: - FunctionMapConstantCache} - "left-endpoint piecewise constant" +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where { + cacheType <: + FunctionMapConstantCache, + } + return "left-endpoint piecewise constant" end -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where {cacheType <: FunctionMapCache} - "left-endpoint piecewise constant" +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where {cacheType <: FunctionMapCache} + return "left-endpoint piecewise constant" end diff --git a/lib/OrdinaryDiffEqFunctionMap/src/interpolants.jl b/lib/OrdinaryDiffEqFunctionMap/src/interpolants.jl index 233b567fed..9edc115337 100644 --- a/lib/OrdinaryDiffEqFunctionMap/src/interpolants.jl +++ b/lib/OrdinaryDiffEqFunctionMap/src/interpolants.jl @@ -1,23 +1,31 @@ -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{FunctionMapConstantCache, FunctionMapCache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) y₀ end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{FunctionMapConstantCache, FunctionMapCache}, - idxs, T::Type{Val{0}}, differential_vars::Nothing) + idxs, T::Type{Val{0}}, differential_vars::Nothing + ) y₀[idxs] end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{FunctionMapConstantCache, FunctionMapCache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) recursivecopy!(out, y₀) end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{FunctionMapConstantCache, FunctionMapCache}, - idxs, T::Type{Val{0}}, differential_vars::Nothing) + idxs, T::Type{Val{0}}, differential_vars::Nothing + ) @views out[idxs] .= y₀[idxs] end diff --git a/lib/OrdinaryDiffEqFunctionMap/test/discrete_problem_defaults.jl b/lib/OrdinaryDiffEqFunctionMap/test/discrete_problem_defaults.jl index a3c2a0a237..95ef9e94cc 100644 --- a/lib/OrdinaryDiffEqFunctionMap/test/discrete_problem_defaults.jl +++ b/lib/OrdinaryDiffEqFunctionMap/test/discrete_problem_defaults.jl @@ -19,73 +19,73 @@ end # Test scalar DiscreteProblem f(u, p, t) = 1.01 * u prob_scalar = DiscreteProblem(f, 0.5, (0.0, 1.0)) - + @testset "Scalar DiscreteProblem" begin # Test solve without explicit algorithm sol = solve(prob_scalar) @test is_functionmap(sol.alg) @test get_scale_by_time(sol.alg) == false @test length(sol.u) > 1 - + # Test init without explicit algorithm integrator = init(prob_scalar) @test is_functionmap(integrator.alg) @test get_scale_by_time(integrator.alg) == false end - + # Test array DiscreteProblem function f_array!(du, u, p, t) du[1] = 1.01 * u[1] du[2] = 0.99 * u[2] end prob_array = DiscreteProblem(f_array!, [0.5, 1.0], (0.0, 1.0)) - + @testset "Array DiscreteProblem" begin # Test solve without explicit algorithm sol = solve(prob_array) @test is_functionmap(sol.alg) @test get_scale_by_time(sol.alg) == false @test length(sol.u) > 1 - + # Test init without explicit algorithm integrator = init(prob_array) @test is_functionmap(integrator.alg) @test get_scale_by_time(integrator.alg) == false end - + # Test that explicit algorithm specification still works @testset "Explicit FunctionMap specification" begin sol1 = solve(prob_scalar, FunctionMap()) @test is_functionmap(sol1.alg) @test get_scale_by_time(sol1.alg) == false - - sol2 = solve(prob_scalar, FunctionMap(scale_by_time=true), dt=0.1) + + sol2 = solve(prob_scalar, FunctionMap(scale_by_time = true), dt = 0.1) @test is_functionmap(sol2.alg) @test get_scale_by_time(sol2.alg) == true - + integrator1 = init(prob_scalar, FunctionMap()) @test is_functionmap(integrator1.alg) @test get_scale_by_time(integrator1.alg) == false - - integrator2 = init(prob_scalar, FunctionMap(scale_by_time=true), dt=0.1) + + integrator2 = init(prob_scalar, FunctionMap(scale_by_time = true), dt = 0.1) @test is_functionmap(integrator2.alg) @test get_scale_by_time(integrator2.alg) == true end - + # Test that the default behaves correctly with different problem types @testset "DiscreteProblem with integer time" begin henon_map!(u_next, u, p, t) = begin u_next[1] = 1 + u[2] - 1.4 * u[1]^2 u_next[2] = 0.3 * u[1] end - + prob_int = DiscreteProblem(henon_map!, [0.5, 0.5], (0, 10)) - + sol = solve(prob_int) @test is_functionmap(sol.alg) @test eltype(sol.t) <: Integer - + integrator = init(prob_int) @test is_functionmap(integrator.alg) end -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqFunctionMap/test/jet.jl b/lib/OrdinaryDiffEqFunctionMap/test/jet.jl index 7a66377433..8ee6a5a5c2 100644 --- a/lib/OrdinaryDiffEqFunctionMap/test/jet.jl +++ b/lib/OrdinaryDiffEqFunctionMap/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqFunctionMap, target_defined_modules = true, mode = :typo) -end \ No newline at end of file + OrdinaryDiffEqFunctionMap, target_defined_modules = true, mode = :typo + ) +end diff --git a/lib/OrdinaryDiffEqFunctionMap/test/qa.jl b/lib/OrdinaryDiffEqFunctionMap/test/qa.jl index 9a84171581..9c7f1076f3 100644 --- a/lib/OrdinaryDiffEqFunctionMap/test/qa.jl +++ b/lib/OrdinaryDiffEqFunctionMap/test/qa.jl @@ -6,4 +6,4 @@ using Aqua OrdinaryDiffEqFunctionMap; piracies = false # Piracy is necessary for default algorithm dispatch ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqFunctionMap/test/runtests.jl b/lib/OrdinaryDiffEqFunctionMap/test/runtests.jl index 629e974a06..54c7ae19a7 100644 --- a/lib/OrdinaryDiffEqFunctionMap/test/runtests.jl +++ b/lib/OrdinaryDiffEqFunctionMap/test/runtests.jl @@ -2,4 +2,4 @@ using SafeTestsets @time @safetestset "JET Tests" include("jet.jl") @time @safetestset "Aqua" include("qa.jl") -@time @safetestset "DiscreteProblem Defaults" include("discrete_problem_defaults.jl") \ No newline at end of file +@time @safetestset "DiscreteProblem Defaults" include("discrete_problem_defaults.jl") diff --git a/lib/OrdinaryDiffEqHighOrderRK/src/OrdinaryDiffEqHighOrderRK.jl b/lib/OrdinaryDiffEqHighOrderRK/src/OrdinaryDiffEqHighOrderRK.jl index b14651b116..409a6238d1 100644 --- a/lib/OrdinaryDiffEqHighOrderRK/src/OrdinaryDiffEqHighOrderRK.jl +++ b/lib/OrdinaryDiffEqHighOrderRK/src/OrdinaryDiffEqHighOrderRK.jl @@ -1,17 +1,17 @@ module OrdinaryDiffEqHighOrderRK import OrdinaryDiffEqCore: alg_order, qmax_default, qmin_default, beta2_default, - beta1_default, - explicit_rk_docstring, OrdinaryDiffEqAdaptiveAlgorithm, - trivial_limiter!, - _ode_addsteps!, @cache, OrdinaryDiffEqMutableCache, - constvalue, - alg_cache, uses_uprev, initialize!, perform_step!, - OrdinaryDiffEqConstantCache, - calculate_residuals!, calculate_residuals, CompiledFloats, - copyat_or_push!, get_fsalfirstlast, - unwrap_alg, _ode_interpolant, _ode_interpolant!, - DerivativeOrderNotPossibleError, full_cache, isdp8 + beta1_default, + explicit_rk_docstring, OrdinaryDiffEqAdaptiveAlgorithm, + trivial_limiter!, + _ode_addsteps!, @cache, OrdinaryDiffEqMutableCache, + constvalue, + alg_cache, uses_uprev, initialize!, perform_step!, + OrdinaryDiffEqConstantCache, + calculate_residuals!, calculate_residuals, CompiledFloats, + copyat_or_push!, get_fsalfirstlast, + unwrap_alg, _ode_interpolant, _ode_interpolant!, + DerivativeOrderNotPossibleError, full_cache, isdp8 import Static: False import MuladdMacro: @muladd using DiffEqBase diff --git a/lib/OrdinaryDiffEqHighOrderRK/src/algorithms.jl b/lib/OrdinaryDiffEqHighOrderRK/src/algorithms.jl index cf4f35f911..5e9dadd31c 100644 --- a/lib/OrdinaryDiffEqHighOrderRK/src/algorithms.jl +++ b/lib/OrdinaryDiffEqHighOrderRK/src/algorithms.jl @@ -3,37 +3,40 @@ "TanYam7", references = "Tanaka M., Muramatsu S., Yamashita S., (1992), On the Optimization of Some Nine-Stage Seventh-order Runge-Kutta Method, Information Processing Society of Japan, - 33 (12), pp. 1512-1526.") + 33 (12), pp. 1512-1526." +) Base.@kwdef struct TanYam7{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function TanYam7(stage_limiter!, step_limiter! = trivial_limiter!) - TanYam7(stage_limiter!, step_limiter!, False()) + return TanYam7(stage_limiter!, step_limiter!, False()) end -@doc explicit_rk_docstring("Tsitouras-Papakostas 8/7 Runge-Kutta method.", "TsitPap8", +@doc explicit_rk_docstring( + "Tsitouras-Papakostas 8/7 Runge-Kutta method.", "TsitPap8", references = """@article{tsitouras1999cheap, - title={Cheap error estimation for Runge--Kutta methods}, - author={Tsitouras, Ch and Papakostas, SN}, - journal={SIAM Journal on Scientific Computing}, - volume={20}, - number={6}, - pages={2067--2088}, - year={1999}, - publisher={SIAM}}""") + title={Cheap error estimation for Runge--Kutta methods}, + author={Tsitouras, Ch and Papakostas, SN}, + journal={SIAM Journal on Scientific Computing}, + volume={20}, + number={6}, + pages={2067--2088}, + year={1999}, + publisher={SIAM}}""" +) Base.@kwdef struct TsitPap8{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function TsitPap8(stage_limiter!, step_limiter! = trivial_limiter!) - TsitPap8(stage_limiter!, step_limiter!, False()) + return TsitPap8(stage_limiter!, step_limiter!, False()) end @doc explicit_rk_docstring( @@ -41,7 +44,8 @@ end "DP8", references = "E. Hairer, S.P. Norsett, G. Wanner, (1993) Solving Ordinary Differential Equations I. Nonstiff Problems. 2nd Edition. Springer Series in Computational Mathematics, - Springer-Verlag.") + Springer-Verlag." +) Base.@kwdef struct DP8{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -49,10 +53,11 @@ Base.@kwdef struct DP8{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAdapt end # for backwards compatibility function DP8(stage_limiter!, step_limiter! = trivial_limiter!) - DP8(stage_limiter!, step_limiter!, False()) + return DP8(stage_limiter!, step_limiter!, False()) end -@doc explicit_rk_docstring("Phase-fitted Runge-Kutta of 8th order.", "PFRK87", +@doc explicit_rk_docstring( + "Phase-fitted Runge-Kutta of 8th order.", "PFRK87", references = """@article{tsitouras2017phase, title={Phase-fitted Runge--Kutta pairs of orders 8 (7)}, author={Tsitouras, Ch and Famelis, I Th and Simos, TE}, @@ -62,11 +67,12 @@ end year={2017}, publisher={Elsevier}}""", extra_keyword_description = """- `omega`: a periodicity phase estimate, - when accurate this method results in zero numerical dissipation. - """, - extra_keyword_default = "omega = 0.0") + when accurate this method results in zero numerical dissipation. + """, + extra_keyword_default = "omega = 0.0" +) Base.@kwdef struct PFRK87{StageLimiter, StepLimiter, Thread, T} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() @@ -74,5 +80,5 @@ Base.@kwdef struct PFRK87{StageLimiter, StepLimiter, Thread, T} <: end # for backwards compatibility function PFRK87(stage_limiter!, step_limiter! = trivial_limiter!; omega = 0.0) - PFRK87(stage_limiter!, step_limiter!, False(), omega) + return PFRK87(stage_limiter!, step_limiter!, False(), omega) end diff --git a/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_addsteps.jl b/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_addsteps.jl index aca4eb6f5a..53fbbbff96 100644 --- a/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_addsteps.jl +++ b/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_addsteps.jl @@ -1,6 +1,8 @@ -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::DP8ConstantCache, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::DP8ConstantCache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 7 || always_calc_begin (; c7, c8, c9, c10, c11, c6, c5, c4, c3, c2, b1, b6, b7, b8, b9, b10, b11, b12, a0201, a0301, a0302, a0401, a0403, a0501, a0503, a0504, a0601, a0604, a0605, a0701, a0704, a0705, a0706, a0801, a0804, a0805, a0806, a0807, a0901, a0904, a0905, a0906, a0907, a0908, a1001, a1004, a1005, a1006, a1007, a1008, a1009, a1101, a1104, a1105, a1106, a1107, a1108, a1109, a1110, a1201, a1204, a1205, a1206, a1207, a1208, a1209, a1210, a1211) = cache (; c14, c15, c16, a1401, a1407, a1408, a1409, a1410, a1411, a1412, a1413, a1501, a1506, a1507, a1508, a1511, a1512, a1513, a1514, a1601, a1606, a1607, a1608, a1609, a1613, a1614, a1615) = cache @@ -11,86 +13,128 @@ k4 = f(uprev + dt * (a0401 * k1 + a0403 * k3), p, t + c4 * dt) k5 = f(uprev + dt * (a0501 * k1 + a0503 * k3 + a0504 * k4), p, t + c5 * dt) k6 = f(uprev + dt * (a0601 * k1 + a0604 * k4 + a0605 * k5), p, t + c6 * dt) - k7 = f(uprev + dt * (a0701 * k1 + a0704 * k4 + a0705 * k5 + a0706 * k6), p, - t + c7 * dt) + k7 = f( + uprev + dt * (a0701 * k1 + a0704 * k4 + a0705 * k5 + a0706 * k6), p, + t + c7 * dt + ) k8 = f( uprev + - dt * (a0801 * k1 + a0804 * k4 + a0805 * k5 + a0806 * k6 + a0807 * k7), + dt * (a0801 * k1 + a0804 * k4 + a0805 * k5 + a0806 * k6 + a0807 * k7), p, - t + c8 * dt) + t + c8 * dt + ) k9 = f( uprev + - dt * - (a0901 * k1 + a0904 * k4 + a0905 * k5 + a0906 * k6 + a0907 * k7 + - a0908 * k8), - p, t + c9 * dt) + dt * + ( + a0901 * k1 + a0904 * k4 + a0905 * k5 + a0906 * k6 + a0907 * k7 + + a0908 * k8 + ), + p, t + c9 * dt + ) k10 = f( uprev + - dt * (a1001 * k1 + a1004 * k4 + a1005 * k5 + a1006 * k6 + a1007 * k7 + - a1008 * k8 + a1009 * k9), + dt * ( + a1001 * k1 + a1004 * k4 + a1005 * k5 + a1006 * k6 + a1007 * k7 + + a1008 * k8 + a1009 * k9 + ), p, - t + c10 * dt) + t + c10 * dt + ) k11 = f( uprev + - dt * (a1101 * k1 + a1104 * k4 + a1105 * k5 + a1106 * k6 + a1107 * k7 + - a1108 * k8 + a1109 * k9 + a1110 * k10), + dt * ( + a1101 * k1 + a1104 * k4 + a1105 * k5 + a1106 * k6 + a1107 * k7 + + a1108 * k8 + a1109 * k9 + a1110 * k10 + ), p, - t + c11 * dt) + t + c11 * dt + ) k12 = f( uprev + - dt * (a1201 * k1 + a1204 * k4 + a1205 * k5 + a1206 * k6 + a1207 * k7 + - a1208 * k8 + a1209 * k9 + a1210 * k10 + a1211 * k11), + dt * ( + a1201 * k1 + a1204 * k4 + a1205 * k5 + a1206 * k6 + a1207 * k7 + + a1208 * k8 + a1209 * k9 + a1210 * k10 + a1211 * k11 + ), p, - t + dt) + t + dt + ) kupdate = b1 * k1 + b6 * k6 + b7 * k7 + b8 * k8 + b9 * k9 + b10 * k10 + b11 * k11 + - b12 * k12 + b12 * k12 utmp = uprev + dt * kupdate k13 = f(utmp, p, t + dt) k14 = f( uprev + - dt * (a1401 * k1 + a1407 * k7 + a1408 * k8 + a1409 * k9 + a1410 * k10 + - a1411 * k11 + a1412 * k12 + a1413 * k13), + dt * ( + a1401 * k1 + a1407 * k7 + a1408 * k8 + a1409 * k9 + a1410 * k10 + + a1411 * k11 + a1412 * k12 + a1413 * k13 + ), p, - t + c14 * dt) + t + c14 * dt + ) k15 = f( uprev + - dt * (a1501 * k1 + a1506 * k6 + a1507 * k7 + a1508 * k8 + a1511 * k11 + - a1512 * k12 + a1513 * k13 + a1514 * k14), + dt * ( + a1501 * k1 + a1506 * k6 + a1507 * k7 + a1508 * k8 + a1511 * k11 + + a1512 * k12 + a1513 * k13 + a1514 * k14 + ), p, - t + c15 * dt) + t + c15 * dt + ) k16 = f( uprev + - dt * (a1601 * k1 + a1606 * k6 + a1607 * k7 + a1608 * k8 + a1609 * k9 + - a1613 * k13 + a1614 * k14 + a1615 * k15), + dt * ( + a1601 * k1 + a1606 * k6 + a1607 * k7 + a1608 * k8 + a1609 * k9 + + a1613 * k13 + a1614 * k14 + a1615 * k15 + ), p, - t + c16 * dt) + t + c16 * dt + ) udiff = kupdate copyat_or_push!(k, 1, udiff) bspl = k1 - udiff copyat_or_push!(k, 2, bspl) copyat_or_push!(k, 3, udiff - k13 - bspl) - copyat_or_push!(k, 4, - (d401 * k1 + d406 * k6 + d407 * k7 + d408 * k8 + d409 * k9 + - d410 * k10 + d411 * k11 + d412 * k12 + d413 * k13 + d414 * k14 + - d415 * k15 + d416 * k16)) - copyat_or_push!(k, 5, - (d501 * k1 + d506 * k6 + d507 * k7 + d508 * k8 + d509 * k9 + - d510 * k10 + d511 * k11 + d512 * k12 + d513 * k13 + d514 * k14 + - d515 * k15 + d516 * k16)) - copyat_or_push!(k, 6, - (d601 * k1 + d606 * k6 + d607 * k7 + d608 * k8 + d609 * k9 + - d610 * k10 + d611 * k11 + d612 * k12 + d613 * k13 + d614 * k14 + - d615 * k15 + d616 * k16)) - copyat_or_push!(k, 7, - (d701 * k1 + d706 * k6 + d707 * k7 + d708 * k8 + d709 * k9 + - d710 * k10 + d711 * k11 + d712 * k12 + d713 * k13 + d714 * k14 + - d715 * k15 + d716 * k16)) + copyat_or_push!( + k, 4, + ( + d401 * k1 + d406 * k6 + d407 * k7 + d408 * k8 + d409 * k9 + + d410 * k10 + d411 * k11 + d412 * k12 + d413 * k13 + d414 * k14 + + d415 * k15 + d416 * k16 + ) + ) + copyat_or_push!( + k, 5, + ( + d501 * k1 + d506 * k6 + d507 * k7 + d508 * k8 + d509 * k9 + + d510 * k10 + d511 * k11 + d512 * k12 + d513 * k13 + d514 * k14 + + d515 * k15 + d516 * k16 + ) + ) + copyat_or_push!( + k, 6, + ( + d601 * k1 + d606 * k6 + d607 * k7 + d608 * k8 + d609 * k9 + + d610 * k10 + d611 * k11 + d612 * k12 + d613 * k13 + d614 * k14 + + d615 * k15 + d616 * k16 + ) + ) + copyat_or_push!( + k, 7, + ( + d701 * k1 + d706 * k6 + d707 * k7 + d708 * k8 + d709 * k9 + + d710 * k10 + d711 * k11 + d712 * k12 + d713 * k13 + d714 * k14 + + d715 * k15 + d716 * k16 + ) + ) end end -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::DP8Cache, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::DP8Cache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 7 || always_calc_begin (; c7, c8, c9, c10, c11, c6, c5, c4, c3, c2, b1, b6, b7, b8, b9, b10, b11, b12, a0201, a0301, a0302, a0401, a0403, a0501, a0503, a0504, a0601, a0604, a0605, a0701, a0704, a0705, a0706, a0801, a0804, a0805, a0806, a0807, a0901, a0904, a0905, a0906, a0907, a0908, a1001, a1004, a1005, a1006, a1007, a1008, a1009, a1101, a1104, a1105, a1106, a1107, a1108, a1109, a1110, a1201, a1204, a1205, a1206, a1207, a1208, a1209, a1210, a1211) = cache.tab (; c14, c15, c16, a1401, a1407, a1408, a1409, a1410, a1411, a1412, a1413, a1501, a1506, a1507, a1508, a1511, a1512, a1513, a1514, a1601, a1606, a1607, a1608, a1609, a1613, a1614, a1615) = cache.tab @@ -98,77 +142,101 @@ end (; k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, udiff, bspl, dense_tmp3, dense_tmp4, dense_tmp5, dense_tmp6, dense_tmp7, kupdate, utilde, tmp) = cache utmp = utilde f(k1, uprev, p, t) - @.. broadcast=false tmp=uprev + dt * (a0201 * k1) + @.. broadcast = false tmp = uprev + dt * (a0201 * k1) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false tmp=uprev + dt * (a0301 * k1 + a0302 * k2) + @.. broadcast = false tmp = uprev + dt * (a0301 * k1 + a0302 * k2) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false tmp=uprev + dt * (a0401 * k1 + a0403 * k3) + @.. broadcast = false tmp = uprev + dt * (a0401 * k1 + a0403 * k3) f(k4, tmp, p, t + c4 * dt) - @.. broadcast=false tmp=uprev + dt * (a0501 * k1 + a0503 * k3 + a0504 * k4) + @.. broadcast = false tmp = uprev + dt * (a0501 * k1 + a0503 * k3 + a0504 * k4) f(k5, tmp, p, t + c5 * dt) - @.. broadcast=false tmp=uprev + dt * (a0601 * k1 + a0604 * k4 + a0605 * k5) + @.. broadcast = false tmp = uprev + dt * (a0601 * k1 + a0604 * k4 + a0605 * k5) f(k6, tmp, p, t + c6 * dt) - @.. broadcast=false tmp=uprev + - dt * (a0701 * k1 + a0704 * k4 + a0705 * k5 + a0706 * k6) + @.. broadcast = false tmp = uprev + + dt * (a0701 * k1 + a0704 * k4 + a0705 * k5 + a0706 * k6) f(k7, tmp, p, t + c7 * dt) - @.. broadcast=false tmp=uprev + - dt * (a0801 * k1 + a0804 * k4 + a0805 * k5 + a0806 * k6 + - a0807 * k7) + @.. broadcast = false tmp = uprev + + dt * ( + a0801 * k1 + a0804 * k4 + a0805 * k5 + a0806 * k6 + + a0807 * k7 + ) f(k8, tmp, p, t + c8 * dt) - @.. broadcast=false tmp=uprev + - dt * (a0901 * k1 + a0904 * k4 + a0905 * k5 + a0906 * k6 + - a0907 * k7 + a0908 * k8) + @.. broadcast = false tmp = uprev + + dt * ( + a0901 * k1 + a0904 * k4 + a0905 * k5 + a0906 * k6 + + a0907 * k7 + a0908 * k8 + ) f(k9, tmp, p, t + c9 * dt) - @.. broadcast=false tmp=uprev + - dt * (a1001 * k1 + a1004 * k4 + a1005 * k5 + a1006 * k6 + - a1007 * k7 + a1008 * k8 + a1009 * k9) + @.. broadcast = false tmp = uprev + + dt * ( + a1001 * k1 + a1004 * k4 + a1005 * k5 + a1006 * k6 + + a1007 * k7 + a1008 * k8 + a1009 * k9 + ) f(k10, tmp, p, t + c10 * dt) - @.. broadcast=false tmp=uprev + - dt * (a1101 * k1 + a1104 * k4 + a1105 * k5 + a1106 * k6 + - a1107 * k7 + a1108 * k8 + a1109 * k9 + a1110 * k10) + @.. broadcast = false tmp = uprev + + dt * ( + a1101 * k1 + a1104 * k4 + a1105 * k5 + a1106 * k6 + + a1107 * k7 + a1108 * k8 + a1109 * k9 + a1110 * k10 + ) f(k11, tmp, p, t + c11 * dt) - @.. broadcast=false tmp=uprev + - dt * (a1201 * k1 + a1204 * k4 + a1205 * k5 + a1206 * k6 + - a1207 * k7 + a1208 * k8 + a1209 * k9 + a1210 * k10 + - a1211 * k11) + @.. broadcast = false tmp = uprev + + dt * ( + a1201 * k1 + a1204 * k4 + a1205 * k5 + a1206 * k6 + + a1207 * k7 + a1208 * k8 + a1209 * k9 + a1210 * k10 + + a1211 * k11 + ) f(k12, tmp, p, t + dt) - @.. broadcast=false kupdate=b1 * k1 + b6 * k6 + b7 * k7 + b8 * k8 + b9 * k9 + - b10 * k10 + b11 * k11 + b12 * k12 - @.. broadcast=false utmp=uprev + dt * kupdate + @.. broadcast = false kupdate = b1 * k1 + b6 * k6 + b7 * k7 + b8 * k8 + b9 * k9 + + b10 * k10 + b11 * k11 + b12 * k12 + @.. broadcast = false utmp = uprev + dt * kupdate f(k13, utmp, p, t + dt) - @.. broadcast=false tmp=uprev + - dt * (a1401 * k1 + a1407 * k7 + a1408 * k8 + a1409 * k9 + - a1410 * k10 + a1411 * k11 + a1412 * k12 + a1413 * k13) + @.. broadcast = false tmp = uprev + + dt * ( + a1401 * k1 + a1407 * k7 + a1408 * k8 + a1409 * k9 + + a1410 * k10 + a1411 * k11 + a1412 * k12 + a1413 * k13 + ) f(k14, tmp, p, t + c14 * dt) - @.. broadcast=false tmp=uprev + - dt * (a1501 * k1 + a1506 * k6 + a1507 * k7 + a1508 * k8 + - a1511 * k11 + a1512 * k12 + a1513 * k13 + a1514 * k14) + @.. broadcast = false tmp = uprev + + dt * ( + a1501 * k1 + a1506 * k6 + a1507 * k7 + a1508 * k8 + + a1511 * k11 + a1512 * k12 + a1513 * k13 + a1514 * k14 + ) f(k15, tmp, p, t + c15 * dt) - @.. broadcast=false tmp=uprev + - dt * (a1601 * k1 + a1606 * k6 + a1607 * k7 + a1608 * k8 + - a1609 * k9 + a1613 * k13 + a1614 * k14 + a1615 * k15) + @.. broadcast = false tmp = uprev + + dt * ( + a1601 * k1 + a1606 * k6 + a1607 * k7 + a1608 * k8 + + a1609 * k9 + a1613 * k13 + a1614 * k14 + a1615 * k15 + ) f(k16, tmp, p, t + c16 * dt) copyto!(udiff, kupdate) copyat_or_push!(k, 1, udiff) - @.. broadcast=false tmp=k1 - udiff + @.. broadcast = false tmp = k1 - udiff copyat_or_push!(k, 2, tmp) - @.. broadcast=false tmp=udiff - k13 - bspl + @.. broadcast = false tmp = udiff - k13 - bspl copyat_or_push!(k, 3, tmp) - @.. broadcast=false tmp=(d401 * k1 + d406 * k6 + d407 * k7 + d408 * k8 + d409 * k9 + - d410 * k10 + d411 * k11 + d412 * k12 + d413 * k13 + - d414 * k14 + d415 * k15 + d416 * k16) + @.. broadcast = false tmp = ( + d401 * k1 + d406 * k6 + d407 * k7 + d408 * k8 + d409 * k9 + + d410 * k10 + d411 * k11 + d412 * k12 + d413 * k13 + + d414 * k14 + d415 * k15 + d416 * k16 + ) copyat_or_push!(k, 4, tmp) - @.. broadcast=false tmp=(d501 * k1 + d506 * k6 + d507 * k7 + d508 * k8 + d509 * k9 + - d510 * k10 + d511 * k11 + d512 * k12 + d513 * k13 + - d514 * k14 + d515 * k15 + d516 * k16) + @.. broadcast = false tmp = ( + d501 * k1 + d506 * k6 + d507 * k7 + d508 * k8 + d509 * k9 + + d510 * k10 + d511 * k11 + d512 * k12 + d513 * k13 + + d514 * k14 + d515 * k15 + d516 * k16 + ) copyat_or_push!(k, 5, tmp) - @.. broadcast=false tmp=(d601 * k1 + d606 * k6 + d607 * k7 + d608 * k8 + d609 * k9 + - d610 * k10 + d611 * k11 + d612 * k12 + d613 * k13 + - d614 * k14 + d615 * k15 + d616 * k16) + @.. broadcast = false tmp = ( + d601 * k1 + d606 * k6 + d607 * k7 + d608 * k8 + d609 * k9 + + d610 * k10 + d611 * k11 + d612 * k12 + d613 * k13 + + d614 * k14 + d615 * k15 + d616 * k16 + ) copyat_or_push!(k, 6, tmp) - @.. broadcast=false tmp=(d701 * k1 + d706 * k6 + d707 * k7 + d708 * k8 + d709 * k9 + - d710 * k10 + d711 * k11 + d712 * k12 + d713 * k13 + - d714 * k14 + d715 * k15 + d716 * k16) + @.. broadcast = false tmp = ( + d701 * k1 + d706 * k6 + d707 * k7 + d708 * k8 + d709 * k9 + + d710 * k10 + d711 * k11 + d712 * k12 + d713 * k13 + + d714 * k14 + d715 * k15 + d716 * k16 + ) copyat_or_push!(k, 7, tmp) end end diff --git a/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_caches.jl b/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_caches.jl index 3aed829fb2..622b4a1030 100644 --- a/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_caches.jl +++ b/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_caches.jl @@ -1,8 +1,10 @@ abstract type HighOrderRKMutableCache <: OrdinaryDiffEqMutableCache end get_fsalfirstlast(cache::HighOrderRKMutableCache, u) = (cache.fsalfirst, cache.k) -@cache struct TanYam7Cache{uType, rateType, uNoUnitsType, TabType, StageLimiter, - StepLimiter, Thread} <: - HighOrderRKMutableCache +@cache struct TanYam7Cache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, + StepLimiter, Thread, + } <: + HighOrderRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -25,10 +27,12 @@ get_fsalfirstlast(cache::HighOrderRKMutableCache, u) = (cache.fsalfirst, cache.k thread::Thread end -function alg_cache(alg::TanYam7, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::TanYam7, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = TanYam7ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) k2 = zero(rate_prototype) @@ -45,19 +49,25 @@ function alg_cache(alg::TanYam7, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) k = zero(rate_prototype) - TanYam7Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, utilde, tmp, atmp, k, - tab, alg.stage_limiter!, alg.step_limiter!, alg.thread) + return TanYam7Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, utilde, tmp, atmp, k, + tab, alg.stage_limiter!, alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::TanYam7, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::TanYam7, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - TanYam7ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return TanYam7ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -@cache struct DP8Cache{uType, rateType, uNoUnitsType, TabType, StageLimiter, StepLimiter, - Thread} <: HighOrderRKMutableCache +@cache struct DP8Cache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, StepLimiter, + Thread, + } <: HighOrderRKMutableCache u::uType uprev::uType k1::rateType @@ -94,10 +104,12 @@ end end get_fsalfirstlast(cache::DP8Cache, u) = (cache.k1, cache.k13) -function alg_cache(alg::DP8, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DP8, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k1 = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) @@ -129,22 +141,28 @@ function alg_cache(alg::DP8, u, rate_prototype, ::Type{uEltypeNoUnits}, dense_tmp6 = zero(rate_prototype) dense_tmp7 = zero(rate_prototype) tab = DP8ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - DP8Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, + return DP8Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, kupdate, udiff, bspl, dense_tmp3, dense_tmp4, dense_tmp5, dense_tmp6, dense_tmp7, - utilde, tmp, atmp, tab, alg.stage_limiter!, alg.step_limiter!, alg.thread) + utilde, tmp, atmp, tab, alg.stage_limiter!, alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::DP8, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DP8, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - DP8ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return DP8ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -@cache struct TsitPap8Cache{uType, rateType, uNoUnitsType, TabType, StageLimiter, - StepLimiter, Thread} <: - HighOrderRKMutableCache +@cache struct TsitPap8Cache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, + StepLimiter, Thread, + } <: + HighOrderRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -170,10 +188,12 @@ end thread::Thread end -function alg_cache(alg::TsitPap8, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::TsitPap8, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = TsitPap8ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) k2 = zero(rate_prototype) @@ -193,21 +213,26 @@ function alg_cache(alg::TsitPap8, u, rate_prototype, ::Type{uEltypeNoUnits}, tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - TsitPap8Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, utilde, - tmp, atmp, k, tab, alg.stage_limiter!, alg.step_limiter!, alg.thread) + return TsitPap8Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, utilde, + tmp, atmp, k, tab, alg.stage_limiter!, alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::TsitPap8, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::TsitPap8, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - TsitPap8ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return TsitPap8ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct PFRK87Cache{ - uType, rateType, uNoUnitsType, TabType, StageLimiter, StepLimiter, - Thread} <: - HighOrderRKMutableCache + uType, rateType, uNoUnitsType, TabType, StageLimiter, StepLimiter, + Thread, + } <: + HighOrderRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -233,10 +258,12 @@ end thread::Thread end -function alg_cache(alg::PFRK87, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::PFRK87, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = PFRK87ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) k2 = zero(rate_prototype) @@ -256,13 +283,17 @@ function alg_cache(alg::PFRK87, u, rate_prototype, ::Type{uEltypeNoUnits}, tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - PFRK87Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, utilde, - tmp, atmp, k, tab, alg.stage_limiter!, alg.step_limiter!, alg.thread) + return PFRK87Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, utilde, + tmp, atmp, k, tab, alg.stage_limiter!, alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::PFRK87, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::PFRK87, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - PFRK87ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return PFRK87ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end diff --git a/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_perform_step.jl b/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_perform_step.jl index b4e94c4fe9..a59fb06f68 100644 --- a/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_perform_step.jl +++ b/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_perform_step.jl @@ -7,7 +7,7 @@ function initialize!(integrator, cache::TanYam7ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::TanYam7ConstantCache, repeat_step = false) @@ -20,30 +20,42 @@ end k4 = f(uprev + dt * (a41 * k1 + a43 * k3), p, t + c3 * dt) k5 = f(uprev + dt * (a51 * k1 + a53 * k3 + a54 * k4), p, t + c4 * dt) k6 = f(uprev + dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5), p, t + c5 * dt) - k7 = f(uprev + dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6), p, - t + c6 * dt) - k8 = f(uprev + dt * (a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + a86 * k6 + a87 * k7), - p, t + c7 * dt) + k7 = f( + uprev + dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6), p, + t + c6 * dt + ) + k8 = f( + uprev + dt * (a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + a86 * k6 + a87 * k7), + p, t + c7 * dt + ) k9 = f( uprev + - dt * - (a91 * k1 + a93 * k3 + a94 * k4 + a95 * k5 + a96 * k6 + a97 * k7 + a98 * k8), + dt * + (a91 * k1 + a93 * k3 + a94 * k4 + a95 * k5 + a96 * k6 + a97 * k7 + a98 * k8), p, - t + dt) + t + dt + ) k10 = f( uprev + - dt * (a101 * k1 + a103 * k3 + a104 * k4 + a105 * k5 + a106 * k6 + a107 * k7 + - a108 * k8), + dt * ( + a101 * k1 + a103 * k3 + a104 * k4 + a105 * k5 + a106 * k6 + a107 * k7 + + a108 * k8 + ), p, - t + dt) + t + dt + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 9) u = uprev + dt * (b1 * k1 + b4 * k4 + b5 * k5 + b6 * k6 + b7 * k7 + b8 * k8 + b9 * k9) if integrator.opts.adaptive utilde = dt * - (btilde1 * k1 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + btilde7 * k7 + - btilde8 * k8 + btilde9 * k9 + btilde10 * k10) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + ( + btilde1 * k1 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + btilde7 * k7 + + btilde8 * k8 + btilde9 * k9 + btilde10 * k10 + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.fsallast = f(u, p, t + dt) # For the interpolation, needs k at the updated point @@ -59,7 +71,7 @@ function initialize!(integrator, cache::TanYam7Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::TanYam7Cache, repeat_step = false) @@ -69,63 +81,77 @@ end k1 = fsalfirst f(k1, uprev, p, t) a = dt * a21 - @.. broadcast=false thread=thread tmp=uprev + a * k1 + @.. broadcast = false thread = thread tmp = uprev + a * k1 stage_limiter!(tmp, integrator, p, t + c1 * dt) f(k2, tmp, p, t + c1 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a31 * k1 + a32 * k2) stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k3, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a41 * k1 + a43 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a41 * k1 + a43 * k3) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k4, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a51 * k1 + a53 * k3 + a54 * k4) + @.. broadcast = false thread = thread tmp = uprev + dt * (a51 * k1 + a53 * k3 + a54 * k4) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k5, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5) stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k6, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + - a76 * k6) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + + a76 * k6 + ) stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k7, tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + - a86 * k6 + - a87 * k7) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + + a86 * k6 + + a87 * k7 + ) stage_limiter!(tmp, integrator, p, t + c7 * dt) f(k8, tmp, p, t + c7 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a91 * k1 + a93 * k3 + a94 * k4 + a95 * k5 + - a96 * k6 + - a97 * k7 + a98 * k8) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a91 * k1 + a93 * k3 + a94 * k4 + a95 * k5 + + a96 * k6 + + a97 * k7 + a98 * k8 + ) stage_limiter!(tmp, integrator, p, t + dt) f(k9, tmp, p, t + dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a101 * k1 + a103 * k3 + a104 * k4 + a105 * k5 + - a106 * k6 + - a107 * k7 + a108 * k8) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a101 * k1 + a103 * k3 + a104 * k4 + a105 * k5 + + a106 * k6 + + a107 * k7 + a108 * k8 + ) stage_limiter!(tmp, integrator, p, t + dt) f(k10, tmp, p, t + dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (b1 * k1 + b4 * k4 + b5 * k5 + b6 * k6 + b7 * k7 + - b8 * k8 + - b9 * k9) + @.. broadcast = false thread = thread u = uprev + + dt * + ( + b1 * k1 + b4 * k4 + b5 * k5 + b6 * k6 + b7 * k7 + + b8 * k8 + + b9 * k9 + ) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 10) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde4 * k4 + - btilde5 * k5 + - btilde6 * k6 + btilde7 * k7 + - btilde8 * k8 + - btilde9 * k9 + btilde10 * k10) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * ( + btilde1 * k1 + btilde4 * k4 + + btilde5 * k5 + + btilde6 * k6 + btilde7 * k7 + + btilde8 * k8 + + btilde9 * k9 + btilde10 * k10 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end f(k, u, p, t + dt) @@ -203,7 +229,7 @@ function initialize!(integrator, cache::TsitPap8ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end #= @@ -237,8 +263,10 @@ end end =# -@muladd function perform_step!(integrator, cache::TsitPap8ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::TsitPap8ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, a0201, a0301, a0302, a0401, a0403, a0501, a0503, a0504, a0601, a0604, a0605, a0701, a0704, a0705, a0706, a0801, a0804, a0805, a0806, a0807, a0901, a0904, a0905, a0906, a0907, a0908, a1001, a1004, a1005, a1006, a1007, a1008, a1009, a1101, a1104, a1105, a1106, a1107, a1108, a1109, a1110, a1201, a1204, a1205, a1206, a1207, a1208, a1209, a1210, a1211, a1301, a1304, a1305, a1306, a1307, a1308, a1309, a1310, b1, b6, b7, b8, b9, b10, b11, b12, btilde1, btilde6, btilde7, btilde8, btilde9, btilde10, btilde11, btilde12, btilde13) = cache k1 = integrator.fsalfirst @@ -251,51 +279,71 @@ end k7 = f(uprev + dt * (a0701 * k1 + a0704 * k4 + a0705 * k5 + a0706 * k6), p, t + c6 * dt) k8 = f( uprev + dt * (a0801 * k1 + a0804 * k4 + a0805 * k5 + a0806 * k6 + a0807 * k7), p, - t + c7 * dt) + t + c7 * dt + ) k9 = f( uprev + - dt * - (a0901 * k1 + a0904 * k4 + a0905 * k5 + a0906 * k6 + a0907 * k7 + a0908 * k8), + dt * + (a0901 * k1 + a0904 * k4 + a0905 * k5 + a0906 * k6 + a0907 * k7 + a0908 * k8), p, - t + c8 * dt) + t + c8 * dt + ) k10 = f( uprev + - dt * - (a1001 * k1 + a1004 * k4 + a1005 * k5 + a1006 * k6 + a1007 * k7 + a1008 * k8 + - a1009 * k9), + dt * + ( + a1001 * k1 + a1004 * k4 + a1005 * k5 + a1006 * k6 + a1007 * k7 + a1008 * k8 + + a1009 * k9 + ), p, - t + c9 * dt) + t + c9 * dt + ) k11 = f( uprev + - dt * - (a1101 * k1 + a1104 * k4 + a1105 * k5 + a1106 * k6 + a1107 * k7 + a1108 * k8 + - a1109 * k9 + a1110 * k10), + dt * + ( + a1101 * k1 + a1104 * k4 + a1105 * k5 + a1106 * k6 + a1107 * k7 + a1108 * k8 + + a1109 * k9 + a1110 * k10 + ), p, - t + c10 * dt) + t + c10 * dt + ) k12 = f( uprev + - dt * - (a1201 * k1 + a1204 * k4 + a1205 * k5 + a1206 * k6 + a1207 * k7 + a1208 * k8 + - a1209 * k9 + a1210 * k10 + a1211 * k11), + dt * + ( + a1201 * k1 + a1204 * k4 + a1205 * k5 + a1206 * k6 + a1207 * k7 + a1208 * k8 + + a1209 * k9 + a1210 * k10 + a1211 * k11 + ), p, - t + dt) + t + dt + ) k13 = f( uprev + - dt * - (a1301 * k1 + a1304 * k4 + a1305 * k5 + a1306 * k6 + a1307 * k7 + a1308 * k8 + - a1309 * k9 + a1310 * k10), + dt * + ( + a1301 * k1 + a1304 * k4 + a1305 * k5 + a1306 * k6 + a1307 * k7 + a1308 * k8 + + a1309 * k9 + a1310 * k10 + ), p, - t + dt) + t + dt + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 12) u = uprev + - dt * (b1 * k1 + b6 * k6 + b7 * k7 + b8 * k8 + b9 * k9 + b10 * k10 + b11 * k11 + - b12 * k12) + dt * ( + b1 * k1 + b6 * k6 + b7 * k7 + b8 * k8 + b9 * k9 + b10 * k10 + b11 * k11 + + b12 * k12 + ) if integrator.opts.adaptive utilde = dt * - (btilde1 * k1 + btilde6 * k6 + btilde7 * k7 + btilde8 * k8 + btilde9 * k9 + - btilde10 * k10 + btilde11 * k11 + btilde12 * k12 + btilde13 * k13) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + ( + btilde1 * k1 + btilde6 * k6 + btilde7 * k7 + btilde8 * k8 + btilde9 * k9 + + btilde10 * k10 + btilde11 * k11 + btilde12 * k12 + btilde13 * k13 + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.fsallast = f(u, p, t + dt) @@ -311,7 +359,7 @@ function initialize!(integrator, cache::TsitPap8Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::TsitPap8Cache, repeat_step = false) @@ -321,86 +369,106 @@ end k1 = cache.fsalfirst f(k1, uprev, p, t) a = dt * a0201 - @.. broadcast=false thread=thread tmp=uprev + a * k1 + @.. broadcast = false thread = thread tmp = uprev + a * k1 stage_limiter!(tmp, integrator, p, t + c1 * dt) f(k2, tmp, p, t + c1 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a0301 * k1 + a0302 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a0301 * k1 + a0302 * k2) stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k3, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a0401 * k1 + a0403 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a0401 * k1 + a0403 * k3) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k4, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a0501 * k1 + a0503 * k3 + a0504 * k4) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a0501 * k1 + a0503 * k3 + a0504 * k4) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k5, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a0601 * k1 + a0604 * k4 + a0605 * k5) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a0601 * k1 + a0604 * k4 + a0605 * k5) stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k6, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a0701 * k1 + a0704 * k4 + a0705 * k5 + - a0706 * k6) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a0701 * k1 + a0704 * k4 + a0705 * k5 + + a0706 * k6 + ) stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k7, tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a0801 * k1 + a0804 * k4 + a0805 * k5 + - a0806 * k6 + a0807 * k7) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a0801 * k1 + a0804 * k4 + a0805 * k5 + + a0806 * k6 + a0807 * k7 + ) stage_limiter!(tmp, integrator, p, t + c7 * dt) f(k8, tmp, p, t + c7 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a0901 * k1 + a0904 * k4 + a0905 * k5 + - a0906 * k6 + - a0907 * k7 + a0908 * k8) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a0901 * k1 + a0904 * k4 + a0905 * k5 + + a0906 * k6 + + a0907 * k7 + a0908 * k8 + ) stage_limiter!(tmp, integrator, p, t + c8 * dt) f(k9, tmp, p, t + c8 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a1001 * k1 + a1004 * k4 + a1005 * k5 + - a1006 * k6 + - a1007 * k7 + a1008 * k8 + a1009 * k9) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a1001 * k1 + a1004 * k4 + a1005 * k5 + + a1006 * k6 + + a1007 * k7 + a1008 * k8 + a1009 * k9 + ) stage_limiter!(tmp, integrator, p, t + c9 * dt) f(k10, tmp, p, t + c9 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a1101 * k1 + a1104 * k4 + a1105 * k5 + - a1106 * k6 + - a1107 * k7 + a1108 * k8 + a1109 * k9 + - a1110 * k10) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a1101 * k1 + a1104 * k4 + a1105 * k5 + + a1106 * k6 + + a1107 * k7 + a1108 * k8 + a1109 * k9 + + a1110 * k10 + ) stage_limiter!(tmp, integrator, p, t + c10 * dt) f(k11, tmp, p, t + c10 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a1201 * k1 + a1204 * k4 + a1205 * k5 + - a1206 * k6 + - a1207 * k7 + a1208 * k8 + a1209 * k9 + - a1210 * k10 + - a1211 * k11) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a1201 * k1 + a1204 * k4 + a1205 * k5 + + a1206 * k6 + + a1207 * k7 + a1208 * k8 + a1209 * k9 + + a1210 * k10 + + a1211 * k11 + ) stage_limiter!(tmp, integrator, p, t + dt) f(k12, tmp, p, t + dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a1301 * k1 + a1304 * k4 + a1305 * k5 + - a1306 * k6 + - a1307 * k7 + a1308 * k8 + a1309 * k9 + - a1310 * k10) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a1301 * k1 + a1304 * k4 + a1305 * k5 + + a1306 * k6 + + a1307 * k7 + a1308 * k8 + a1309 * k9 + + a1310 * k10 + ) stage_limiter!(tmp, integrator, p, t + dt) f(k13, tmp, p, t + dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (b1 * k1 + b6 * k6 + b7 * k7 + b8 * k8 + b9 * k9 + - b10 * k10 + - b11 * k11 + b12 * k12) + @.. broadcast = false thread = thread u = uprev + + dt * + ( + b1 * k1 + b6 * k6 + b7 * k7 + b8 * k8 + b9 * k9 + + b10 * k10 + + b11 * k11 + b12 * k12 + ) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 13) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde6 * k6 + - btilde7 * k7 + - btilde8 * k8 + btilde9 * k9 + - btilde10 * k10 + - btilde11 * k11 + btilde12 * k12 + - btilde13 * k13) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * ( + btilde1 * k1 + btilde6 * k6 + + btilde7 * k7 + + btilde8 * k8 + btilde9 * k9 + + btilde10 * k10 + + btilde11 * k11 + btilde12 * k12 + + btilde13 * k13 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end f(k, u, p, t + dt) @@ -489,7 +557,7 @@ function initialize!(integrator, cache::DP8ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - @inbounds for i in eachindex(integrator.k) + return @inbounds for i in eachindex(integrator.k) integrator.k[i] = zero(integrator.fsalfirst) end end @@ -507,49 +575,68 @@ end k7 = f(uprev + dt * (a0701 * k1 + a0704 * k4 + a0705 * k5 + a0706 * k6), p, t + c7 * dt) k8 = f( uprev + dt * (a0801 * k1 + a0804 * k4 + a0805 * k5 + a0806 * k6 + a0807 * k7), p, - t + c8 * dt) + t + c8 * dt + ) k9 = f( uprev + - dt * - (a0901 * k1 + a0904 * k4 + a0905 * k5 + a0906 * k6 + a0907 * k7 + a0908 * k8), + dt * + (a0901 * k1 + a0904 * k4 + a0905 * k5 + a0906 * k6 + a0907 * k7 + a0908 * k8), p, - t + c9 * dt) + t + c9 * dt + ) k10 = f( uprev + - dt * - (a1001 * k1 + a1004 * k4 + a1005 * k5 + a1006 * k6 + a1007 * k7 + a1008 * k8 + - a1009 * k9), + dt * + ( + a1001 * k1 + a1004 * k4 + a1005 * k5 + a1006 * k6 + a1007 * k7 + a1008 * k8 + + a1009 * k9 + ), p, - t + c10 * dt) + t + c10 * dt + ) k11 = f( uprev + - dt * - (a1101 * k1 + a1104 * k4 + a1105 * k5 + a1106 * k6 + a1107 * k7 + a1108 * k8 + - a1109 * k9 + a1110 * k10), + dt * + ( + a1101 * k1 + a1104 * k4 + a1105 * k5 + a1106 * k6 + a1107 * k7 + a1108 * k8 + + a1109 * k9 + a1110 * k10 + ), p, - t + c11 * dt) + t + c11 * dt + ) k12 = f( uprev + - dt * - (a1201 * k1 + a1204 * k4 + a1205 * k5 + a1206 * k6 + a1207 * k7 + a1208 * k8 + - a1209 * k9 + a1210 * k10 + a1211 * k11), + dt * + ( + a1201 * k1 + a1204 * k4 + a1205 * k5 + a1206 * k6 + a1207 * k7 + a1208 * k8 + + a1209 * k9 + a1210 * k10 + a1211 * k11 + ), p, - t + dt) + t + dt + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 11) kupdate = b1 * k1 + b6 * k6 + b7 * k7 + b8 * k8 + b9 * k9 + b10 * k10 + b11 * k11 + - b12 * k12 + b12 * k12 u = uprev + dt * kupdate if integrator.opts.adaptive - utilde = dt * (k1 * er1 + k6 * er6 + k7 * er7 + k8 * er8 + k9 * er9 + k10 * er10 + - k11 * er11 + k12 * er12) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + utilde = dt * ( + k1 * er1 + k6 * er6 + k7 * er7 + k8 * er8 + k9 * er9 + k10 * er10 + + k11 * er11 + k12 * er12 + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) err5 = integrator.opts.internalnorm(atmp, t) # Order 5 utilde = dt * - (btilde1 * k1 + btilde6 * k6 + btilde7 * k7 + btilde8 * k8 + btilde9 * k9 + - btilde10 * k10 + btilde11 * k11 + btilde12 * k12) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + ( + btilde1 * k1 + btilde6 * k6 + btilde7 * k7 + btilde8 * k8 + btilde9 * k9 + + btilde10 * k10 + btilde11 * k11 + btilde12 * k12 + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) err3 = integrator.opts.internalnorm(atmp, t) # Order 3 err52 = err5 * err5 if err5 ≈ 0 && err3 ≈ 0 @@ -566,22 +653,31 @@ end (; d401, d406, d407, d408, d409, d410, d411, d412, d413, d414, d415, d416, d501, d506, d507, d508, d509, d510, d511, d512, d513, d514, d515, d516, d601, d606, d607, d608, d609, d610, d611, d612, d613, d614, d615, d616, d701, d706, d707, d708, d709, d710, d711, d712, d713, d714, d715, d716) = cache k14 = f( uprev + - dt * (a1401 * k1 + a1407 * k7 + a1408 * k8 + a1409 * k9 + a1410 * k10 + - a1411 * k11 + a1412 * k12 + a1413 * k13), + dt * ( + a1401 * k1 + a1407 * k7 + a1408 * k8 + a1409 * k9 + a1410 * k10 + + a1411 * k11 + a1412 * k12 + a1413 * k13 + ), p, - t + c14 * dt) + t + c14 * dt + ) k15 = f( uprev + - dt * (a1501 * k1 + a1506 * k6 + a1507 * k7 + a1508 * k8 + a1511 * k11 + - a1512 * k12 + a1513 * k13 + a1514 * k14), + dt * ( + a1501 * k1 + a1506 * k6 + a1507 * k7 + a1508 * k8 + a1511 * k11 + + a1512 * k12 + a1513 * k13 + a1514 * k14 + ), p, - t + c15 * dt) + t + c15 * dt + ) k16 = f( uprev + - dt * (a1601 * k1 + a1606 * k6 + a1607 * k7 + a1608 * k8 + a1609 * k9 + - a1613 * k13 + a1614 * k14 + a1615 * k15), + dt * ( + a1601 * k1 + a1606 * k6 + a1607 * k7 + a1608 * k8 + a1609 * k9 + + a1613 * k13 + a1614 * k14 + a1615 * k15 + ), p, - t + c16 * dt) + t + c16 * dt + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) udiff = kupdate integrator.k[1] = udiff @@ -589,17 +685,17 @@ end integrator.k[2] = bspl integrator.k[3] = udiff - k13 - bspl integrator.k[4] = d401 * k1 + d406 * k6 + d407 * k7 + d408 * k8 + d409 * k9 + - d410 * k10 + d411 * k11 + d412 * k12 + d413 * k13 + d414 * k14 + - d415 * k15 + d416 * k16 + d410 * k10 + d411 * k11 + d412 * k12 + d413 * k13 + d414 * k14 + + d415 * k15 + d416 * k16 integrator.k[5] = d501 * k1 + d506 * k6 + d507 * k7 + d508 * k8 + d509 * k9 + - d510 * k10 + d511 * k11 + d512 * k12 + d513 * k13 + d514 * k14 + - d515 * k15 + d516 * k16 + d510 * k10 + d511 * k11 + d512 * k12 + d513 * k13 + d514 * k14 + + d515 * k15 + d516 * k16 integrator.k[6] = d601 * k1 + d606 * k6 + d607 * k7 + d608 * k8 + d609 * k9 + - d610 * k10 + d611 * k11 + d612 * k12 + d613 * k13 + d614 * k14 + - d615 * k15 + d616 * k16 + d610 * k10 + d611 * k11 + d612 * k12 + d613 * k13 + d614 * k14 + + d615 * k15 + d616 * k16 integrator.k[7] = d701 * k1 + d706 * k6 + d707 * k7 + d708 * k8 + d709 * k9 + - d710 * k10 + d711 * k11 + d712 * k12 + d713 * k13 + d714 * k14 + - d715 * k15 + d716 * k16 + d710 * k10 + d711 * k11 + d712 * k12 + d713 * k13 + d714 * k14 + + d715 * k15 + d716 * k16 end integrator.u = u end @@ -614,10 +710,10 @@ function initialize!(integrator, cache::DP8Cache) cache.dense_tmp4, cache.dense_tmp5, cache.dense_tmp6, - cache.dense_tmp7 + cache.dense_tmp7, ] integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::DP8Cache, repeat_step = false) @@ -627,85 +723,105 @@ end (; k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, udiff, bspl, dense_tmp3, dense_tmp4, dense_tmp5, dense_tmp6, dense_tmp7, kupdate, utilde, tmp, atmp, stage_limiter!, step_limiter!, thread) = cache f(k1, uprev, p, t) a = dt * a0201 - @.. broadcast=false thread=thread tmp=uprev + a * k1 + @.. broadcast = false thread = thread tmp = uprev + a * k1 stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a0301 * k1 + a0302 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a0301 * k1 + a0302 * k2) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a0401 * k1 + a0403 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a0401 * k1 + a0403 * k3) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k4, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a0501 * k1 + a0503 * k3 + a0504 * k4) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a0501 * k1 + a0503 * k3 + a0504 * k4) stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k5, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a0601 * k1 + a0604 * k4 + a0605 * k5) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a0601 * k1 + a0604 * k4 + a0605 * k5) stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k6, tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a0701 * k1 + a0704 * k4 + a0705 * k5 + - a0706 * k6) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a0701 * k1 + a0704 * k4 + a0705 * k5 + + a0706 * k6 + ) stage_limiter!(tmp, integrator, p, t + c7 * dt) f(k7, tmp, p, t + c7 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a0801 * k1 + a0804 * k4 + a0805 * k5 + - a0806 * k6 + a0807 * k7) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a0801 * k1 + a0804 * k4 + a0805 * k5 + + a0806 * k6 + a0807 * k7 + ) stage_limiter!(tmp, integrator, p, t + c8 * dt) f(k8, tmp, p, t + c8 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a0901 * k1 + a0904 * k4 + a0905 * k5 + - a0906 * k6 + - a0907 * k7 + a0908 * k8) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a0901 * k1 + a0904 * k4 + a0905 * k5 + + a0906 * k6 + + a0907 * k7 + a0908 * k8 + ) stage_limiter!(tmp, integrator, p, t + c9 * dt) f(k9, tmp, p, t + c9 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a1001 * k1 + a1004 * k4 + a1005 * k5 + - a1006 * k6 + - a1007 * k7 + a1008 * k8 + a1009 * k9) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a1001 * k1 + a1004 * k4 + a1005 * k5 + + a1006 * k6 + + a1007 * k7 + a1008 * k8 + a1009 * k9 + ) stage_limiter!(tmp, integrator, p, t + c10 * dt) f(k10, tmp, p, t + c10 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a1101 * k1 + a1104 * k4 + a1105 * k5 + - a1106 * k6 + - a1107 * k7 + a1108 * k8 + a1109 * k9 + - a1110 * k10) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a1101 * k1 + a1104 * k4 + a1105 * k5 + + a1106 * k6 + + a1107 * k7 + a1108 * k8 + a1109 * k9 + + a1110 * k10 + ) stage_limiter!(tmp, integrator, p, t + c11 * dt) f(k11, tmp, p, t + c11 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a1201 * k1 + a1204 * k4 + a1205 * k5 + - a1206 * k6 + - a1207 * k7 + a1208 * k8 + a1209 * k9 + - a1210 * k10 + - a1211 * k11) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a1201 * k1 + a1204 * k4 + a1205 * k5 + + a1206 * k6 + + a1207 * k7 + a1208 * k8 + a1209 * k9 + + a1210 * k10 + + a1211 * k11 + ) stage_limiter!(tmp, integrator, p, t + dt) f(k12, tmp, p, t + dt) - @.. broadcast=false thread=thread kupdate=b1 * k1 + b6 * k6 + b7 * k7 + b8 * k8 + - b9 * k9 + - b10 * k10 + b11 * k11 + b12 * k12 - @.. broadcast=false thread=thread u=uprev + dt * kupdate + @.. broadcast = false thread = thread kupdate = b1 * k1 + b6 * k6 + b7 * k7 + b8 * k8 + + b9 * k9 + + b10 * k10 + b11 * k11 + b12 * k12 + @.. broadcast = false thread = thread u = uprev + dt * kupdate stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 12) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * - (k1 * er1 + k6 * er6 + k7 * er7 + - k8 * er8 + k9 * er9 + - k10 * er10 + k11 * er11 + k12 * er12) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * + ( + k1 * er1 + k6 * er6 + k7 * er7 + + k8 * er8 + k9 * er9 + + k10 * er10 + k11 * er11 + k12 * er12 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) err5 = integrator.opts.internalnorm(atmp, t) # Order 5 - @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde6 * k6 + - btilde7 * k7 + - btilde8 * k8 + btilde9 * k9 + - btilde10 * k10 + - btilde11 * k11 + btilde12 * k12) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * ( + btilde1 * k1 + btilde6 * k6 + + btilde7 * k7 + + btilde8 * k8 + btilde9 * k9 + + btilde10 * k10 + + btilde11 * k11 + btilde12 * k12 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) err3 = integrator.opts.internalnorm(atmp, t) # Order 3 err52 = err5 * err5 if err5 ≈ 0 && err3 ≈ 0 @@ -719,56 +835,62 @@ end if integrator.opts.calck (; c14, c15, c16, a1401, a1407, a1408, a1409, a1410, a1411, a1412, a1413, a1501, a1506, a1507, a1508, a1511, a1512, a1513, a1514, a1601, a1606, a1607, a1608, a1609, a1613, a1614, a1615) = cache.tab (; d401, d406, d407, d408, d409, d410, d411, d412, d413, d414, d415, d416, d501, d506, d507, d508, d509, d510, d511, d512, d513, d514, d515, d516, d601, d606, d607, d608, d609, d610, d611, d612, d613, d614, d615, d616, d701, d706, d707, d708, d709, d710, d711, d712, d713, d714, d715, d716) = cache.tab - @.. broadcast=false thread=thread tmp=uprev + - dt * (a1401 * k1 + a1407 * k7 + a1408 * k8 + - a1409 * k9 + - a1410 * k10 + a1411 * k11 + a1412 * k12 + - a1413 * k13) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a1401 * k1 + a1407 * k7 + a1408 * k8 + + a1409 * k9 + + a1410 * k10 + a1411 * k11 + a1412 * k12 + + a1413 * k13 + ) f(k14, tmp, p, t + c14 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a1501 * k1 + a1506 * k6 + a1507 * k7 + - a1508 * k8 + - a1511 * k11 + a1512 * k12 + a1513 * k13 + - a1514 * k14) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a1501 * k1 + a1506 * k6 + a1507 * k7 + + a1508 * k8 + + a1511 * k11 + a1512 * k12 + a1513 * k13 + + a1514 * k14 + ) f(k15, tmp, p, t + c15 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a1601 * k1 + a1606 * k6 + a1607 * k7 + - a1608 * k8 + - a1609 * k9 + a1613 * k13 + a1614 * k14 + - a1615 * k15) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a1601 * k1 + a1606 * k6 + a1607 * k7 + + a1608 * k8 + + a1609 * k9 + a1613 * k13 + a1614 * k14 + + a1615 * k15 + ) f(k16, tmp, p, t + c16 * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) - @.. broadcast=false thread=thread udiff=kupdate - @.. broadcast=false thread=thread bspl=k1 - udiff - @.. broadcast=false thread=thread integrator.k[3]=udiff - k13 - bspl - @.. broadcast=false thread=thread integrator.k[4]=d401 * k1 + d406 * k6 + - d407 * k7 + d408 * k8 + - d409 * k9 + d410 * k10 + - d411 * k11 + - d412 * k12 + d413 * k13 + - d414 * k14 + - d415 * k15 + d416 * k16 - @.. broadcast=false thread=thread integrator.k[5]=d501 * k1 + d506 * k6 + - d507 * k7 + d508 * k8 + - d509 * k9 + d510 * k10 + - d511 * k11 + - d512 * k12 + d513 * k13 + - d514 * k14 + - d515 * k15 + d516 * k16 - @.. broadcast=false thread=thread integrator.k[6]=d601 * k1 + d606 * k6 + - d607 * k7 + d608 * k8 + - d609 * k9 + d610 * k10 + - d611 * k11 + - d612 * k12 + d613 * k13 + - d614 * k14 + - d615 * k15 + d616 * k16 - @.. broadcast=false thread=thread integrator.k[7]=d701 * k1 + d706 * k6 + - d707 * k7 + d708 * k8 + - d709 * k9 + d710 * k10 + - d711 * k11 + - d712 * k12 + d713 * k13 + - d714 * k14 + - d715 * k15 + d716 * k16 + @.. broadcast = false thread = thread udiff = kupdate + @.. broadcast = false thread = thread bspl = k1 - udiff + @.. broadcast = false thread = thread integrator.k[3] = udiff - k13 - bspl + @.. broadcast = false thread = thread integrator.k[4] = d401 * k1 + d406 * k6 + + d407 * k7 + d408 * k8 + + d409 * k9 + d410 * k10 + + d411 * k11 + + d412 * k12 + d413 * k13 + + d414 * k14 + + d415 * k15 + d416 * k16 + @.. broadcast = false thread = thread integrator.k[5] = d501 * k1 + d506 * k6 + + d507 * k7 + d508 * k8 + + d509 * k9 + d510 * k10 + + d511 * k11 + + d512 * k12 + d513 * k13 + + d514 * k14 + + d515 * k15 + d516 * k16 + @.. broadcast = false thread = thread integrator.k[6] = d601 * k1 + d606 * k6 + + d607 * k7 + d608 * k8 + + d609 * k9 + d610 * k10 + + d611 * k11 + + d612 * k12 + d613 * k13 + + d614 * k14 + + d615 * k15 + d616 * k16 + @.. broadcast = false thread = thread integrator.k[7] = d701 * k1 + d706 * k6 + + d707 * k7 + d708 * k8 + + d709 * k9 + d710 * k10 + + d711 * k11 + + d712 * k12 + d713 * k13 + + d714 * k14 + + d715 * k15 + d716 * k16 end end @@ -887,7 +1009,7 @@ function initialize!(integrator, cache::PFRK87ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::PFRK87ConstantCache, repeat_step = false) @@ -898,12 +1020,12 @@ end νsq = ν^2 c_ν = -0.19781108078634084 - (0.164050909125528499 * νsq) + - (0.042578310088756321 * (νsq^2)) - (0.002300513610963998 * (νsq^3)) + - (0.000033467244551879287 * (νsq^4)) - - (7.8661142036921924 * (1 / 100000000) * (νsq^5)) - d_ν = 1 - (0.296457092123567400 * νsq) + (0.0015793885907465726 * (νsq^2)) - - (0.00018913011771688527 * (νsq^3)) + (0.000017089234650765179 * (νsq^4)) - - (1.2705211682518626 * (1 / 10000000) * (νsq^5)) + (0.042578310088756321 * (νsq^2)) - (0.002300513610963998 * (νsq^3)) + + (0.000033467244551879287 * (νsq^4)) - + (7.8661142036921924 * (1 / 100000000) * (νsq^5)) + d_ν = 1 - (0.2964570921235674 * νsq) + (0.0015793885907465726 * (νsq^2)) - + (0.00018913011771688527 * (νsq^3)) + (0.000017089234650765179 * (νsq^4)) - + (1.2705211682518626 * (1 / 10000000) * (νsq^5)) α0807 = c_ν / d_ν α0801 = 0.026876256 + 0.0576576 * α0807 @@ -945,51 +1067,71 @@ end k7 = f(uprev + dt * (α0701 * k1 + α0704 * k4 + α0705 * k5 + α0706 * k6), p, t + c7 * dt) k8 = f( uprev + dt * (α0801 * k1 + α0804 * k4 + α0805 * k5 + α0806 * k6 + α0807 * k7), p, - t + c8 * dt) + t + c8 * dt + ) k9 = f( uprev + - dt * - (α0901 * k1 + α0904 * k4 + α0905 * k5 + α0906 * k6 + α0907 * k7 + α0908 * k8), + dt * + (α0901 * k1 + α0904 * k4 + α0905 * k5 + α0906 * k6 + α0907 * k7 + α0908 * k8), p, - t + c9 * dt) + t + c9 * dt + ) k10 = f( uprev + - dt * - (α1001 * k1 + α1004 * k4 + α1005 * k5 + α1006 * k6 + α1007 * k7 + α1008 * k8 + - α1009 * k9), + dt * + ( + α1001 * k1 + α1004 * k4 + α1005 * k5 + α1006 * k6 + α1007 * k7 + α1008 * k8 + + α1009 * k9 + ), p, - t + c10 * dt) + t + c10 * dt + ) k11 = f( uprev + - dt * - (α1101 * k1 + α1104 * k4 + α1105 * k5 + α1106 * k6 + α1107 * k7 + α1108 * k8 + - α1109 * k9 + α1110 * k10), + dt * + ( + α1101 * k1 + α1104 * k4 + α1105 * k5 + α1106 * k6 + α1107 * k7 + α1108 * k8 + + α1109 * k9 + α1110 * k10 + ), p, - t + c11 * dt) + t + c11 * dt + ) k12 = f( uprev + - dt * - (α1201 * k1 + α1204 * k4 + α1205 * k5 + α1206 * k6 + α1207 * k7 + α1208 * k8 + - α1209 * k9 + α1210 * k10 + α1211 * k11), + dt * + ( + α1201 * k1 + α1204 * k4 + α1205 * k5 + α1206 * k6 + α1207 * k7 + α1208 * k8 + + α1209 * k9 + α1210 * k10 + α1211 * k11 + ), p, - t + c12 * dt) + t + c12 * dt + ) k13 = f( uprev + - dt * - (α1301 * k1 + α1304 * k4 + α1305 * k5 + α1306 * k6 + α1307 * k7 + α1308 * k8 + - α1309 * k9 + α1310 * k10 + α1311 * k11), + dt * + ( + α1301 * k1 + α1304 * k4 + α1305 * k5 + α1306 * k6 + α1307 * k7 + α1308 * k8 + + α1309 * k9 + α1310 * k10 + α1311 * k11 + ), p, - t + c13 * dt) + t + c13 * dt + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 12) u = uprev + - dt * (β1 * k1 + β6 * k6 + β7 * k7 + β8 * k8 + β9 * k9 + β10 * k10 + β11 * k11 + - β12 * k12 + β13 * k13) + dt * ( + β1 * k1 + β6 * k6 + β7 * k7 + β8 * k8 + β9 * k9 + β10 * k10 + β11 * k11 + + β12 * k12 + β13 * k13 + ) if integrator.opts.adaptive utilde = dt * - (β1tilde * k1 + β6tilde * k6 + β7tilde * k7 + β8tilde * k8 + β9tilde * k9 + - β10tilde * k10 + β11tilde * k11 + β12tilde * k12) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + ( + β1tilde * k1 + β6tilde * k6 + β7tilde * k7 + β8tilde * k8 + β9tilde * k9 + + β10tilde * k10 + β11tilde * k11 + β12tilde * k12 + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.fsallast = f(u, p, t + dt) @@ -1005,7 +1147,7 @@ function initialize!(integrator, cache::PFRK87Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::PFRK87Cache, repeat_step = false) @@ -1018,11 +1160,11 @@ end νsq = ν^2 c_ν = -0.19781108078634084 - (0.164050909125528499 * νsq) + - (0.042578310088756321 * (νsq^2)) - (0.002300513610963998 * (νsq^3)) + - (0.000033467244551879287 * (νsq^4)) - (7.8661142036921924 * (10^(-8)) * (νsq^5)) - d_ν = 1 - (0.296457092123567400 * νsq) + (0.0015793885907465726 * (νsq^2)) - - (0.00018913011771688527 * (νsq^3)) + (0.000017089234650765179 * (νsq^4)) - - (1.2705211682518626 * (10^(-7)) * (νsq^5)) + (0.042578310088756321 * (νsq^2)) - (0.002300513610963998 * (νsq^3)) + + (0.000033467244551879287 * (νsq^4)) - (7.8661142036921924 * (10^(-8)) * (νsq^5)) + d_ν = 1 - (0.2964570921235674 * νsq) + (0.0015793885907465726 * (νsq^2)) - + (0.00018913011771688527 * (νsq^3)) + (0.000017089234650765179 * (νsq^4)) - + (1.2705211682518626 * (10^(-7)) * (νsq^5)) α0807 = c_ν / d_ν α0801 = 0.026876256 + 0.0576576 * α0807 @@ -1057,86 +1199,106 @@ end k1 = cache.fsalfirst f(k1, uprev, p, t) - @.. broadcast=false thread=thread tmp=uprev + dt * α0201 * k1 + @.. broadcast = false thread = thread tmp = uprev + dt * α0201 * k1 stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (α0301 * k1 + α0302 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (α0301 * k1 + α0302 * k2) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (α0401 * k1 + α0403 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (α0401 * k1 + α0403 * k3) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k4, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (α0501 * k1 + α0503 * k3 + α0504 * k4) + @.. broadcast = false thread = thread tmp = uprev + + dt * (α0501 * k1 + α0503 * k3 + α0504 * k4) stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k5, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (α0601 * k1 + α0604 * k4 + α0605 * k5) + @.. broadcast = false thread = thread tmp = uprev + + dt * (α0601 * k1 + α0604 * k4 + α0605 * k5) stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k6, tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (α0701 * k1 + α0704 * k4 + α0705 * k5 + - α0706 * k6) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + α0701 * k1 + α0704 * k4 + α0705 * k5 + + α0706 * k6 + ) stage_limiter!(tmp, integrator, p, t + c7 * dt) f(k7, tmp, p, t + c7 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (α0801 * k1 + α0804 * k4 + α0805 * k5 + - α0806 * k6 + α0807 * k7) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + α0801 * k1 + α0804 * k4 + α0805 * k5 + + α0806 * k6 + α0807 * k7 + ) stage_limiter!(tmp, integrator, p, t + c8 * dt) f(k8, tmp, p, t + c8 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (α0901 * k1 + α0904 * k4 + α0905 * k5 + - α0906 * k6 + - α0907 * k7 + α0908 * k8) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + α0901 * k1 + α0904 * k4 + α0905 * k5 + + α0906 * k6 + + α0907 * k7 + α0908 * k8 + ) stage_limiter!(tmp, integrator, p, t + c9 * dt) f(k9, tmp, p, t + c9 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (α1001 * k1 + α1004 * k4 + α1005 * k5 + - α1006 * k6 + - α1007 * k7 + α1008 * k8 + α1009 * k9) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + α1001 * k1 + α1004 * k4 + α1005 * k5 + + α1006 * k6 + + α1007 * k7 + α1008 * k8 + α1009 * k9 + ) stage_limiter!(tmp, integrator, p, t + c10 * dt) f(k10, tmp, p, t + c10 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (α1101 * k1 + α1104 * k4 + α1105 * k5 + - α1106 * k6 + - α1107 * k7 + α1108 * k8 + α1109 * k9 + - α1110 * k10) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + α1101 * k1 + α1104 * k4 + α1105 * k5 + + α1106 * k6 + + α1107 * k7 + α1108 * k8 + α1109 * k9 + + α1110 * k10 + ) stage_limiter!(tmp, integrator, p, t + c11 * dt) f(k11, tmp, p, t + c11 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (α1201 * k1 + α1204 * k4 + α1205 * k5 + - α1206 * k6 + - α1207 * k7 + α1208 * k8 + α1209 * k9 + - α1210 * k10 + - α1211 * k11) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + α1201 * k1 + α1204 * k4 + α1205 * k5 + + α1206 * k6 + + α1207 * k7 + α1208 * k8 + α1209 * k9 + + α1210 * k10 + + α1211 * k11 + ) stage_limiter!(tmp, integrator, p, t + c12 * dt) f(k12, tmp, p, t + c12 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (α1301 * k1 + α1304 * k4 + α1305 * k5 + - α1306 * k6 + - α1307 * k7 + α1308 * k8 + α1309 * k9 + - α1310 * k10 + - α1311 * k11) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + α1301 * k1 + α1304 * k4 + α1305 * k5 + + α1306 * k6 + + α1307 * k7 + α1308 * k8 + α1309 * k9 + + α1310 * k10 + + α1311 * k11 + ) stage_limiter!(tmp, integrator, p, t + c13 * dt) f(k13, tmp, p, t + c13 * dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (β1 * k1 + β6 * k6 + β7 * k7 + β8 * k8 + β9 * k9 + - β10 * k10 + - β11 * k11 + β12 * k12 + β13 * k13) + @.. broadcast = false thread = thread u = uprev + + dt * + ( + β1 * k1 + β6 * k6 + β7 * k7 + β8 * k8 + β9 * k9 + + β10 * k10 + + β11 * k11 + β12 * k12 + β13 * k13 + ) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 13) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * (β1tilde * k1 + β6tilde * k6 + - β7tilde * k7 + - β8tilde * k8 + β9tilde * k9 + - β10tilde * k10 + - β11tilde * k11 + β12tilde * k12) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * ( + β1tilde * k1 + β6tilde * k6 + + β7tilde * k7 + + β8tilde * k8 + β9tilde * k9 + + β10tilde * k10 + + β11tilde * k11 + β12tilde * k12 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end f(k, u, p, t + dt) diff --git a/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_tableaus.jl b/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_tableaus.jl index 1e03a14aac..336d8af9f7 100644 --- a/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_tableaus.jl +++ b/lib/OrdinaryDiffEqHighOrderRK/src/high_order_rk_tableaus.jl @@ -132,12 +132,13 @@ function TanYam7ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloa btilde9 = convert(T, -121.84501355497527) btilde10 = convert(T, 80) - TanYam7ConstantCache( + return TanYam7ConstantCache( c1, c2, c3, c4, c5, c6, c7, a21, a31, a32, a41, a43, a51, a53, a54, a61, a63, a64, a65, a71, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, a91, a93, a94, a95, a96, a97, a98, a101, a103, a104, a105, a106, a107, a108, b1, b4, b5, b6, b7, b8, b9, btilde1, - btilde4, btilde5, btilde6, btilde7, btilde8, btilde9, btilde10) + btilde4, btilde5, btilde6, btilde7, btilde8, btilde9, btilde10 + ) end """ @@ -160,111 +161,181 @@ function TanYam7ConstantCache(T::Type, T2::Type) a51 = convert(T, 17751533712975975593187 // 24112920357813127230992) a53 = convert(T, -68331192803887602162951 // 24112920357813127230992) a54 = convert(T, 7825717455900471140481 // 3014115044726640903874) - a61 = convert(T, + a61 = convert( + T, -BigInt(2425518501234340256175806929031336393991001205323654593685210322030691047097621496102266496) // - BigInt(201073929944556265242953373967503382318096046559546854970564286270157897072030532387737241)) - a63 = convert(T, + BigInt(201073929944556265242953373967503382318096046559546854970564286270157897072030532387737241) + ) + a63 = convert( + T, BigInt(126875939114499086848675646731069753055308007638565564293214808307459627250976287910912) // - BigInt(2631823273838775215546306644775636213113650954300949659959480717139276934490785884841)) - a64 = convert(T, + BigInt(2631823273838775215546306644775636213113650954300949659959480717139276934490785884841) + ) + a64 = convert( + T, -BigInt(18238165682427587123600563411903599919711680222699338744428834349094610403849667513626245575680) // - BigInt(479212348415302218688412787744011607018072627155280851781784515530195350673833210517995172867)) - a65 = convert(T, + BigInt(479212348415302218688412787744011607018072627155280851781784515530195350673833210517995172867) + ) + a65 = convert( + T, BigInt(74777425357290689294313120787550134201356775453356604582280658347816977407509825814840320) // - BigInt(27848089034948481594251542168496834020714916243735255636715495143105044359669539013058107)) - a71 = convert(T, + BigInt(27848089034948481594251542168496834020714916243735255636715495143105044359669539013058107) + ) + a71 = convert( + T, BigInt(42210784012026021620512889337138957588173072058924928398799062235) // - BigInt(401168555464694196502745570125544252560955194769351196028554688)) - a73 = convert(T, + BigInt(401168555464694196502745570125544252560955194769351196028554688) + ) + a73 = convert( + T, -BigInt(53537582181289418572806048482253962781541488) // - BigInt(128102133978061070595749084326726258918069)) - a74 = convert(T, + BigInt(128102133978061070595749084326726258918069) + ) + a74 = convert( + T, BigInt(6373437319382536771018620806214785516542915567996760353063349991182871200304) // - BigInt(19178871740288180724887392022898914045213833131528843480576173243533301485)) - a75 = convert(T, + BigInt(19178871740288180724887392022898914045213833131528843480576173243533301485) + ) + a75 = convert( + T, -BigInt(836513109281956728811652083904588515347012294160401579661057793958992) // - BigInt(42189346226535262916910956145917457264775063492307360825161811325023)) - a76 = convert(T, + BigInt(42189346226535262916910956145917457264775063492307360825161811325023) + ) + a76 = convert( + T, BigInt(10038768138260655813133796321688310283082351149893792474426644227234755871856831386997923013888351) // - BigInt(8279123943002224665888560854425725483235895533066047643118716510648226939201056966728652698557760)) - a81 = convert(T, + BigInt(8279123943002224665888560854425725483235895533066047643118716510648226939201056966728652698557760) + ) + a81 = convert( + T, BigInt(1454976871505621321312348899226731229297985195430097820532172928754404221419640982320963761) // - BigInt(12687546780768188413911065021432924447284583965992535848754097389537051103097048673168256)) - a83 = convert(T, + BigInt(12687546780768188413911065021432924447284583965992535848754097389537051103097048673168256) + ) + a83 = convert( + T, -BigInt(1452249436938195913836212549773886207822959770792) // - BigInt(3187825000852340545619892931005470986913487349)) - a84 = convert(T, + BigInt(3187825000852340545619892931005470986913487349) + ) + a84 = convert( + T, BigInt(3193785703967379485471835519262043520640585789136428552340853315619929163223926155626278646291801931779256) // - BigInt(8816743814108800069900425523882492176796603795861854625575345408990649746129323017714575203134405597571)) - a85 = convert(T, + BigInt(8816743814108800069900425523882492176796603795861854625575345408990649746129323017714575203134405597571) + ) + a85 = convert( + T, -BigInt(314398569508916946629277462588835135011587938712337655816458752800894863689255534896547161759213480) // - BigInt(14507196201560052990013371105817112064769849230048646555812475120383456376679192045076337148816813)) - a86 = convert(T, + BigInt(14507196201560052990013371105817112064769849230048646555812475120383456376679192045076337148816813) + ) + a86 = convert( + T, BigInt(5021633516852870452803558794670341128133410978274753232000155240629688617274518068065484524425884625107263111090060721584249881611265924113) // - BigInt(3807402575192378287101053794016079417728266285278436439472658972755893033722804748992796724254152818232996309281540415603729279478920107136)) - a87 = convert(T, + BigInt(3807402575192378287101053794016079417728266285278436439472658972755893033722804748992796724254152818232996309281540415603729279478920107136) + ) + a87 = convert( + T, -BigInt(894451839895008223904010765658125850176064186717638397881061173697811879745) // - BigInt(186244934020117483847289332768639722211239803963523669807238114327710091115676)) - a91 = convert(T, + BigInt(186244934020117483847289332768639722211239803963523669807238114327710091115676) + ) + a91 = convert( + T, BigInt(152015786770038627019906826956584678402371493198250158080970494807155603994339) // - BigInt(1319428594672311986480108760138089275639618425553698631283119461253421932416)) - a93 = convert(T, + BigInt(1319428594672311986480108760138089275639618425553698631283119461253421932416) + ) + a93 = convert( + T, -BigInt(19887569115365707672105043997835466942389220328) // - BigInt(43451712251082409470704235239058276887205131)) - a94 = convert(T, + BigInt(43451712251082409470704235239058276887205131) + ) + a94 = convert( + T, BigInt(6298831527954572673520838478029639446424615570453903300371170696118960335541193275024146681623960) // - BigInt(17307483347318198085207889427954666589398911583434527253470846782562794571553580157056644256313)) - a95 = convert(T, + BigInt(17307483347318198085207889427954666589398911583434527253470846782562794571553580157056644256313) + ) + a95 = convert( + T, -BigInt(16267621644623777942279856217571823792451732234540266142050307930357537283432611648312520) // - BigInt(747020211145282116967827947968990352912884924402891384654470989583659988117513448655559)) - a96 = convert(T, + BigInt(747020211145282116967827947968990352912884924402891384654470989583659988117513448655559) + ) + a96 = convert( + T, BigInt(491920517345271821393960134665582163547632868347911487496995665146055538579545277983570189994492481977206720065882583432234119698425636137169515) // - BigInt(371241970695441505578374965290296000309261530083026613438333515399198575394818137422626328203755084156959422247928840402063855870066548878130304)) - a97 = convert(T, + BigInt(371241970695441505578374965290296000309261530083026613438333515399198575394818137422626328203755084156959422247928840402063855870066548878130304) + ) + a97 = convert( + T, -BigInt(17535891839112183607157943692398769696531153719141528498448224128785868799210475) // - BigInt(3881175428498724209649715816699297677268154716152409333146177577349474565697791732)) - a98 = convert(T, + BigInt(3881175428498724209649715816699297677268154716152409333146177577349474565697791732) + ) + a98 = convert( + T, -BigInt(31140449219386755112730831706895080247696102690585728771850210691242594436100540310) // - BigInt(58531715707220748822628340615174217489020037018063169180406742622693159384762890406389)) - a101 = convert(T, + BigInt(58531715707220748822628340615174217489020037018063169180406742622693159384762890406389) + ) + a101 = convert( + T, BigInt(24861126512935523838485032295435745281790804119672244200744512677831357181363) // - BigInt(215828469302253893975010055544246846578750854407392771457340001283636121600)) + BigInt(215828469302253893975010055544246846578750854407392771457340001283636121600) + ) a103 = convert(T, -76626859319946149305867456329803 // 167454524692981091214376557800) - a104 = convert(T, + a104 = convert( + T, BigInt(257532657386915224604779230484778835596042580268896440943054087972106955277512448850995064336363) // - BigInt(707777528357579864776572552477247532276956780876653359042572831013312547307465249178438602200)) - a105 = convert(T, + BigInt(707777528357579864776572552477247532276956780876653359042572831013312547307465249178438602200) + ) + a105 = convert( + T, -BigInt(103092665221253777021612043042409780416654274677686197534469014507504059634284484983141143) // - BigInt(4735075386204034224907103653335170134874540866215348781137359896717512695961598377363000)) - a106 = convert(T, + BigInt(4735075386204034224907103653335170134874540866215348781137359896717512695961598377363000) + ) + a106 = convert( + T, BigInt(1318945254307068672853031172410281620677291556423152759282406612372948205789241763483098989903852936890735513699395545618802215742952753372919) // - BigInt(995520191927224509158660659519643916330847017611189618002256023928790665495276022949114110343406997764203331763292012060684160018593393766400)) - a107 = convert(T, + BigInt(995520191927224509158660659519643916330847017611189618002256023928790665495276022949114110343406997764203331763292012060684160018593393766400) + ) + a107 = convert( + T, -BigInt(2175691361381933486174620849991740173349017185199505364607841) // - BigInt(482872625303278742130341621563226511344221688759361797916327450)) - a108 = convert(T, + BigInt(482872625303278742130341621563226511344221688759361797916327450) + ) + a108 = convert( + T, -BigInt(11327601987184122343710458559595782081610122892585097) // - BigInt(21251874884678431935286330856983429378055579208005268000)) - b1 = convert(T, + BigInt(21251874884678431935286330856983429378055579208005268000) + ) + b1 = convert( + T, BigInt(677260699094873524061210073954310211) // - BigInt(13212228177645157882237395248920447488)) - b4 = convert(T, + BigInt(13212228177645157882237395248920447488) + ) + b4 = convert( + T, BigInt(5627843976805934592544586970647029617399366281651959837492864) // - BigInt(20448796992082885248862284273169726631726393791864145954479875)) - b5 = convert(T, + BigInt(20448796992082885248862284273169726631726393791864145954479875) + ) + b5 = convert( + T, BigInt(1359735671458057021603668186882234273947181034928034734244224) // - BigInt(4035225037829041960922838374222759264846456609494840689395475)) - b6 = convert(T, + BigInt(4035225037829041960922838374222759264846456609494840689395475) + ) + b6 = convert( + T, BigInt(3575764371063841994042920363615768888383369782579963896064642431626191680598750790399139608006651160426580137040859330533720256407) // - BigInt(18833618269956378326078572170759846509476617594300797062242096554507068838086062412372695473217373611870290738365243380652826304000)) - b7 = convert(T, + BigInt(18833618269956378326078572170759846509476617594300797062242096554507068838086062412372695473217373611870290738365243380652826304000) + ) + b7 = convert( + T, BigInt(14322850798205614664394883796805489119964080948503151) // - BigInt(1692788382425178679633337406927131793062126418747780)) - b8 = convert(T, + BigInt(1692788382425178679633337406927131793062126418747780) + ) + b8 = convert( + T, -BigInt(16735096417960349589058935251250023138290806176584545269411) // - BigInt(128573843052304513208482301684749747737236254208431871400)) - b9 = convert(T, - 33050288141543277444692395096256051 // 271248590133163812341791503489000) + BigInt(128573843052304513208482301684749747737236254208431871400) + ) + b9 = convert( + T, + 33050288141543277444692395096256051 // 271248590133163812341791503489000 + ) # bhat1 =convert(T,BigInt(962650826879437817605721930727384851)//BigInt(18874611682350225546053421784172067840)) # bhat4 =convert(T,BigInt(99703652969826806275610089806158069716600653757297413344)//BigInt(361062893830367886445877712954352019629670588714825566425)) # bhat5 =convert(T,BigInt(17540887447270394964911517553576959050951784592644178144)//BigInt(52550888012671962193116521992300249584518949945887203425)) @@ -272,35 +343,50 @@ function TanYam7ConstantCache(T::Type, T2::Type) # bhat7 =convert(T,BigInt(179578338747395946570172802104016572846366090083599)//BigInt(31203472487100067827342625012481692038011546889360)) # bhat8 =convert(T,-BigInt(500374162579884236288722085953024481890963958534161489781)//BigInt(5844265593286568782203740985670443078965284282201448700)) # bhat10=convert(T,80) - btilde1 = convert(T, + btilde1 = convert( + T, BigInt(-11350400930890172457349074817136051) // - BigInt(44040760592150526274124650829734824960)) - btilde4 = convert(T, + BigInt(44040760592150526274124650829734824960) + ) + btilde4 = convert( + T, BigInt(18872409140206580874590465524732661000311743892579167244576) // - BigInt(20448796992082885248862284273169726631726393791864145954479875)) - btilde5 = convert(T, + BigInt(20448796992082885248862284273169726631726393791864145954479875) + ) + btilde5 = convert( + T, BigInt(-4274515681501734477669162831906773100582117137555409033632) // - BigInt(1345075012609680653640946124740919754948818869831613563131825)) - btilde6 = convert(T, + BigInt(1345075012609680653640946124740919754948818869831613563131825) + ) + btilde6 = convert( + T, BigInt(151982138295746861476872192192436808638630079892291260212523545728864842939698890632387350810275352451114165347163409431707619557) // - BigInt(12555745513304252217385714780506564339651078396200531374828064369671379225390708274915130315478249074580193825576828920435217536000)) - btilde7 = convert(T, + BigInt(12555745513304252217385714780506564339651078396200531374828064369671379225390708274915130315478249074580193825576828920435217536000) + ) + btilde7 = convert( + T, BigInt(-6107634561545846083950679043550120057398294081957207) // - BigInt(2257051176566904906177783209236175724082835224997040)) - btilde8 = convert(T, + BigInt(2257051176566904906177783209236175724082835224997040) + ) + btilde8 = convert( + T, BigInt(1908954947067632130235683120094494845563199696277664164743) // - BigInt(42857947684101504402827433894916582579078751402810623800)) - btilde9 = convert(T, + BigInt(42857947684101504402827433894916582579078751402810623800) + ) + btilde9 = convert( + T, -33050288141543277444692395096256051 // - 271248590133163812341791503489000) + 271248590133163812341791503489000 + ) btilde10 = convert(T, 80) - TanYam7ConstantCache( + return TanYam7ConstantCache( c1, c2, c3, c4, c5, c6, c7, a21, a31, a32, a41, a43, a51, a53, a54, a61, a63, a64, a65, a71, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, a91, a93, a94, a95, a96, a97, a98, a101, a103, a104, a105, a106, a107, a108, b1, b4, b5, b6, b7, b8, b9, btilde1, - btilde4, btilde5, btilde6, btilde7, btilde8, btilde9, btilde10) + btilde4, btilde5, btilde6, btilde7, btilde8, btilde9, btilde10 + ) end struct TsitPap8ConstantCache{T, T2} <: OrdinaryDiffEqConstantCache @@ -489,7 +575,8 @@ function TsitPap8ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo btilde12 = convert(T, 0.0951361371292365) btilde13 = convert(T, -2.9872967453726327) - TsitPap8ConstantCache(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, a0201, a0301, a0302, + return TsitPap8ConstantCache( + c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, a0201, a0301, a0302, a0401, a0403, a0501, a0503, a0504, a0601, a0604, a0605, a0701, a0704, a0705, a0706, a0801, a0804, a0805, a0806, a0807, a0901, a0904, a0905, a0906, a0907, a0908, a1001, a1004, a1005, a1006, @@ -497,7 +584,8 @@ function TsitPap8ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a1109, a1110, a1201, a1204, a1205, a1206, a1207, a1208, a1209, a1210, a1211, a1301, a1304, a1305, a1306, a1307, a1308, a1309, a1310, b1, b6, b7, b8, b9, b10, b11, b12, btilde1, btilde6, - btilde7, btilde8, btilde9, btilde10, btilde11, btilde12, btilde13) + btilde7, btilde8, btilde9, btilde10, btilde11, btilde12, btilde13 + ) end """ @@ -535,127 +623,205 @@ function TsitPap8ConstantCache(T::Type, T2::Type) a0805 = convert(T, -318556182235222634647116091 // 27172411532484037214054400) a0806 = convert(T, 1205563885850790193966807 // 132365727505912221222912) a0807 = convert(T, 254 // 39) - a0901 = convert(T, + a0901 = convert( + T, -BigInt(20629396399716689122801179264428539394462855874226604463554767070845753369) // - BigInt(42881759662770155956657513470012114488076017981128105307375594963152353200)) - a0904 = convert(T, + BigInt(42881759662770155956657513470012114488076017981128105307375594963152353200) + ) + a0904 = convert( + T, -BigInt(3315443074343659404779422149387397712986453181141168247590906370819301077749322753) // - BigInt(498517112641608872807821838566847987729514312398278633788185835348997643218553476)) - a0905 = convert(T, + BigInt(498517112641608872807821838566847987729514312398278633788185835348997643218553476) + ) + a0905 = convert( + T, -BigInt(273749409411654060286948141164828452109898379203526945684314474186724062841643) // - BigInt(60427583951377552503967840653825589117167443021628367691773162913607984889600)) - a0906 = convert(T, + BigInt(60427583951377552503967840653825589117167443021628367691773162913607984889600) + ) + a0906 = convert( + T, BigInt(16656372518874512738268060504309924900437672263609245028809229865738327731797537) // - BigInt(4276990138533930522782076385771016009097627930550149628282203007913538394549504)) - a0907 = convert(T, + BigInt(4276990138533930522782076385771016009097627930550149628282203007913538394549504) + ) + a0907 = convert( + T, BigInt(42008080033354305590804322944084805264441066760038302359736803632) // - BigInt(4865302423216534910074823287811605599629170295030631799935804001)) - a0908 = convert(T, + BigInt(4865302423216534910074823287811605599629170295030631799935804001) + ) + a0908 = convert( + T, BigInt(668459780930716338000066627236927417191947396177093524377824) // - BigInt(71100452948884643779799087713322002499799983434685642170251833)) - a1001 = convert(T, + BigInt(71100452948884643779799087713322002499799983434685642170251833) + ) + a1001 = convert( + T, -BigInt(1793603946322260900828212460706877142477132870159527) // - BigInt(2313097568511990753781649719556084665131024900300800)) - a1004 = convert(T, + BigInt(2313097568511990753781649719556084665131024900300800) + ) + a1004 = convert( + T, -BigInt(14776874123722838192315406145167687512425345723701) // - BigInt(1847893530366076701102014146927696206329050105856)) - a1005 = convert(T, + BigInt(1847893530366076701102014146927696206329050105856) + ) + a1005 = convert( + T, -BigInt(19587020919884661714856757105130246995757906603) // - BigInt(2911893296942532038566182868170393629789388800)) - a1006 = convert(T, + BigInt(2911893296942532038566182868170393629789388800) + ) + a1006 = convert( + T, BigInt(6364380863259071677112259236455506477417699780613300364807) // - BigInt(1150428174584942133406579091549443438814988349188394057728)) - a1007 = convert(T, + BigInt(1150428174584942133406579091549443438814988349188394057728) + ) + a1007 = convert( + T, BigInt(27725164402569748756040320433848245155581006369) // - BigInt(2544159473655547770881695354241256106302348256)) - a1008 = convert(T, + BigInt(2544159473655547770881695354241256106302348256) + ) + a1008 = convert( + T, BigInt(10744247163960019876833255044784609639) // - BigInt(534761804739901348825491947768304503296)) - a1009 = convert(T, + BigInt(534761804739901348825491947768304503296) + ) + a1009 = convert( + T, -BigInt(50977737930792808232204417497248979399878217280011103197862899) // - BigInt(1300915694564913675613280314081837358644964393191337994183389184)) - a1101 = convert(T, + BigInt(1300915694564913675613280314081837358644964393191337994183389184) + ) + a1101 = convert( + T, -BigInt(3587625717068952487214493441966897048737050755812600710793) // - BigInt(3015733164033229624772006086429467685046639983706974412800)) - a1104 = convert(T, + BigInt(3015733164033229624772006086429467685046639983706974412800) + ) + a1104 = convert( + T, -BigInt(5453011711267804731211501837262816944661201619903) // - BigInt(764973320899716397072448644710733101329290196992)) - a1105 = convert(T, + BigInt(764973320899716397072448644710733101329290196992) + ) + a1105 = convert( + T, -BigInt(884348836774584715070440485633026464653487653) // - BigInt(92725983515963799584249219499787659014963200)) - a1106 = convert(T, + BigInt(92725983515963799584249219499787659014963200) + ) + a1106 = convert( + T, BigInt(26823469063654084387375587616552322383082061411417182757389742951) // - BigInt(3541299744763681675473620647087123057228744296123642301654630400)) - a1107 = convert(T, + BigInt(3541299744763681675473620647087123057228744296123642301654630400) + ) + a1107 = convert( + T, BigInt(142363419491686507162007051071007722765323162710521029) // - BigInt(12634887202368261565807449771335728082273587905775840)) - a1108 = convert(T, + BigInt(12634887202368261565807449771335728082273587905775840) + ) + a1108 = convert( + T, BigInt(64747617454909275289531520412519442831235890581) // - BigInt(1269317188117975960996670628974453443777854830080)) - a1109 = convert(T, + BigInt(1269317188117975960996670628974453443777854830080) + ) + a1109 = convert( + T, BigInt(112633808253272720979874303367503891597499261046700689572459050065039333987335667) // - BigInt(1404514291245034532812181377119034501014039830518218465064579291611563374608650240)) - a1110 = convert(T, + BigInt(1404514291245034532812181377119034501014039830518218465064579291611563374608650240) + ) + a1110 = convert( + T, -BigInt(10612202518573994431153697720606405883) // - BigInt(67082546658259846778754594976831647575)) - a1201 = convert(T, + BigInt(67082546658259846778754594976831647575) + ) + a1201 = convert( + T, -BigInt(7534081165544982478296202335922049210803875045423) // - BigInt(19219575665440848756074598051658416387002479820800)) - a1204 = convert(T, + BigInt(19219575665440848756074598051658416387002479820800) + ) + a1204 = convert( + T, BigInt(237696087452786717802270375283034262859273455) // - BigInt(60688480889936839261131818793519097177034752)) - a1205 = convert(T, + BigInt(60688480889936839261131818793519097177034752) + ) + a1205 = convert( + T, -BigInt(20610578209826329263318986584876108069323) // - BigInt(7356333776438834884293014575840932659200)) - a1206 = convert(T, + BigInt(7356333776438834884293014575840932659200) + ) + a1206 = convert( + T, BigInt(51260471529841028040709654458903254781320136131844164563) // - BigInt(20998023776318546907382302106788168158765514131585630208)) - a1207 = convert(T, + BigInt(20998023776318546907382302106788168158765514131585630208) + ) + a1207 = convert( + T, -BigInt(3077214437173472971196810795615384000211457151011) // - BigInt(1272435592582280820597059432060116893200684680384)) - a1208 = convert(T, + BigInt(1272435592582280820597059432060116893200684680384) + ) + a1208 = convert( + T, -BigInt(1539218116260541896259682954580256454049) // - BigInt(4534670830750360983422999946409310393344)) - a1209 = convert(T, + BigInt(4534670830750360983422999946409310393344) + ) + a1209 = convert( + T, BigInt(241886539350268429372116296787271276553970618941104594460614948326132797451456131) // - BigInt(1240669632662465892528916120041123051054026283188324780101555345343662316090597376)) - a1210 = convert(T, + BigInt(1240669632662465892528916120041123051054026283188324780101555345343662316090597376) + ) + a1210 = convert( + T, -80556486832245966191717452425924975 // - 414445409518676597565032008051106461) - a1211 = convert(T, + 414445409518676597565032008051106461 + ) + a1211 = convert( + T, BigInt(2944781680874500347594142792814463350) // - BigInt(4965161383073676983610218096030654529)) - a1301 = convert(T, + BigInt(4965161383073676983610218096030654529) + ) + a1301 = convert( + T, -BigInt(7757739937862944832927743694336116203639371542761) // - BigInt(5225100678421794325654850845451340473577260032000)) - a1304 = convert(T, + BigInt(5225100678421794325654850845451340473577260032000) + ) + a1304 = convert( + T, -BigInt(433889546009521405913741133329446636837810749) // - BigInt(181488796115643001621310691169322233346938880)) - a1305 = convert(T, + BigInt(181488796115643001621310691169322233346938880) + ) + a1305 = convert( + T, -BigInt(246044720162308748108107126829066792329071) // - BigInt(21999103311417807170100413255475150848000)) - a1306 = convert(T, + BigInt(21999103311417807170100413255475150848000) + ) + a1306 = convert( + T, BigInt(2140331235425829844389060818616719848637810765257179167) // - BigInt(245428182036011897638028252815369258646052549878743040)) - a1307 = convert(T, + BigInt(245428182036011897638028252815369258646052549878743040) + ) + a1307 = convert( + T, BigInt(1573990926219809229258666534611598771063240529) // - BigInt(214535514317495538101650508596881057760818080)) - a1308 = convert(T, + BigInt(214535514317495538101650508596881057760818080) + ) + a1308 = convert( + T, BigInt(62408280667309375445301959066100433563) // - BigInt(4838320046251983849512355559327451645440)) - a1309 = convert(T, + BigInt(4838320046251983849512355559327451645440) + ) + a1309 = convert( + T, BigInt(1145609822249493677618113725359506642998153205603226883141207089968379) // - BigInt(26902802166822768476367427840835743139559294105398677975568538466119680)) - a1310 = convert(T, + BigInt(26902802166822768476367427840835743139559294105398677975568538466119680) + ) + a1310 = convert( + T, -408950356875874683139089678053832 // - 7674292714443204070455739595109785) + 7674292714443204070455739595109785 + ) b1 = convert(T, 55038446513529253801 // 1239280570055853383520) b6 = convert(T, 2335496795323782464411846394611 // 6598368783294020109895379936256) b7 = convert(T, 7636073376527143565375240869888 // 30725949199261296642046754748645) b8 = convert(T, -4237087214169934312729607487 // 12735791394214625116604076160) - b9 = convert(T, + b9 = convert( + T, BigInt(408505291291133241760995514121984335914363927884426780078325258228227984174126699) // - BigInt(212624874612193697466655159405635202123821166475348052734199905546455860773575680)) + BigInt(212624874612193697466655159405635202123821166475348052734199905546455860773575680) + ) b10 = convert(T, -1108225296327029096435947 // 405679075893979729103310) b11 = convert(T, 2460988291206213825688467985 // 1756342789520947764222671739) b12 = convert(T, 4808707937311 // 50545545388065) @@ -670,15 +836,18 @@ function TsitPap8ConstantCache(T::Type, T2::Type) btilde6 = convert(T, -34035261967014004512968665 // 31722926842759712066804711232) btilde7 = convert(T, 24580774837247048845194838016 // 92177847597783889926140264245935) btilde8 = convert(T, 7658235379858959628545472335 // 3661540025836704721023671896) - btilde9 = convert(T, + btilde9 = convert( + T, BigInt(1510930663253486646384296195586886863633653147150681174690536256975353069486325) // - BigInt(4702280880846591386281796794547701585430660412435581935467882526508158459415616)) + BigInt(4702280880846591386281796794547701585430660412435581935467882526508158459415616) + ) btilde10 = convert(T, -237184116991804346989794715 // 257525077377498332034781188) btilde11 = convert(T, 2460988291206213825688467985 // 1756342789520947764222671739) btilde12 = convert(T, 4808707937311 // 50545545388065) btilde13 = convert(T, -5752173075461 // 1925544586212) - TsitPap8ConstantCache(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, a0201, a0301, a0302, + return TsitPap8ConstantCache( + c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, a0201, a0301, a0302, a0401, a0403, a0501, a0503, a0504, a0601, a0604, a0605, a0701, a0704, a0705, a0706, a0801, a0804, a0805, a0806, a0807, a0901, a0904, a0905, a0906, a0907, a0908, a1001, a1004, a1005, a1006, @@ -686,7 +855,8 @@ function TsitPap8ConstantCache(T::Type, T2::Type) a1109, a1110, a1201, a1204, a1205, a1206, a1207, a1208, a1209, a1210, a1211, a1301, a1304, a1305, a1306, a1307, a1308, a1309, a1310, b1, b6, b7, b8, b9, b10, b11, b12, btilde1, btilde6, - btilde7, btilde8, btilde9, btilde10, btilde11, btilde12, btilde13) + btilde7, btilde8, btilde9, btilde10, btilde11, btilde12, btilde13 + ) end struct DP8ConstantCache{T, T2} <: OrdinaryDiffEqConstantCache @@ -941,9 +1111,10 @@ function DP8ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) a1211 = convert(T, 0.6433927460157636) c14, c15, c16, a1401, a1407, a1408, a1409, a1410, a1411, a1412, a1413, a1501, a1506, a1507, a1508, a1511, a1512, a1513, a1514, a1601, a1606, a1607, a1608, a1609, a1613, a1614, a1615 = DP8Interp( T, - T2) + T2 + ) d401, d406, d407, d408, d409, d410, d411, d412, d413, d414, d415, d416, d501, d506, d507, d508, d509, d510, d511, d512, d513, d514, d515, d516, d601, d606, d607, d608, d609, d610, d611, d612, d613, d614, d615, d616, d701, d706, d707, d708, d709, d710, d711, d712, d713, d714, d715, d716 = DP8Interp_polyweights(T) - DP8ConstantCache( + return DP8ConstantCache( c7, c8, c9, c10, c11, c6, c5, c4, c3, c2, b1, b6, b7, b8, b9, b10, b11, b12, btilde1, btilde6, btilde7, btilde8, btilde9, btilde10, btilde11, btilde12, er1, er6, er7, er8, er9, er10, er11, er12, a0201, a0301, @@ -958,7 +1129,8 @@ function DP8ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) d412, d413, d414, d415, d416, d501, d506, d507, d508, d509, d510, d511, d512, d513, d514, d515, d516, d601, d606, d607, d608, d609, d610, d611, d612, d613, d614, d615, d616, d701, d706, d707, d708, d709, d710, d711, - d712, d713, d714, d715, d716) + d712, d713, d714, d715, d716 + ) end function DP8ConstantCache(T::Type, T2::Type) @@ -1051,9 +1223,10 @@ function DP8ConstantCache(T::Type, T2::Type) a1211 = convert(T, big" 6.43392746015763530355970484046e-1") c14, c15, c16, a1401, a1407, a1408, a1409, a1410, a1411, a1412, a1413, a1501, a1506, a1507, a1508, a1511, a1512, a1513, a1514, a1601, a1606, a1607, a1608, a1609, a1613, a1614, a1615 = DP8Interp( T, - T2) + T2 + ) d401, d406, d407, d408, d409, d410, d411, d412, d413, d414, d415, d416, d501, d506, d507, d508, d509, d510, d511, d512, d513, d514, d515, d516, d601, d606, d607, d608, d609, d610, d611, d612, d613, d614, d615, d616, d701, d706, d707, d708, d709, d710, d711, d712, d713, d714, d715, d716 = DP8Interp_polyweights(T) - DP8ConstantCache( + return DP8ConstantCache( c7, c8, c9, c10, c11, c6, c5, c4, c3, c2, b1, b6, b7, b8, b9, b10, b11, b12, btilde1, btilde6, btilde7, btilde8, btilde9, btilde10, btilde11, btilde12, er1, er6, er7, er8, er9, er10, er11, er12, a0201, a0301, @@ -1068,7 +1241,8 @@ function DP8ConstantCache(T::Type, T2::Type) d412, d413, d414, d415, d416, d501, d506, d507, d508, d509, d510, d511, d512, d513, d514, d515, d516, d601, d606, d607, d608, d609, d610, d611, d612, d613, d614, d615, d616, d701, d706, d707, d708, d709, d710, d711, - d712, d713, d714, d715, d716) + d712, d713, d714, d715, d716 + ) end function DP8Interp(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) @@ -1101,8 +1275,8 @@ function DP8Interp(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) a1615 = convert(T, -9.15095847217987) return c14, c15, c16, a1401, a1407, a1408, a1409, a1410, a1411, a1412, a1413, a1501, - a1506, a1507, a1508, a1511, a1512, a1513, a1514, a1601, a1606, a1607, a1608, - a1609, a1613, a1614, a1615 + a1506, a1507, a1508, a1511, a1512, a1513, a1514, a1601, a1606, a1607, a1608, + a1609, a1613, a1614, a1615 end function DP8Interp(T::Type, T2::Type) @@ -1135,8 +1309,8 @@ function DP8Interp(T::Type, T2::Type) a1615 = convert(T, big"-9.15095847217987001081870187138e0") return c14, c15, c16, a1401, a1407, a1408, a1409, a1410, a1411, a1412, a1413, a1501, - a1506, a1507, a1508, a1511, a1512, a1513, a1514, a1601, a1606, a1607, a1608, - a1609, a1613, a1614, a1615 + a1506, a1507, a1508, a1511, a1512, a1513, a1514, a1601, a1606, a1607, a1608, + a1609, a1613, a1614, a1615 end function DP8Interp_polyweights(T::Type{<:CompiledFloats}) @@ -1190,9 +1364,9 @@ function DP8Interp_polyweights(T::Type{<:CompiledFloats}) d716 = convert(T, -149.72683625798564) return d401, d406, d407, d408, d409, d410, d411, d412, d413, d414, d415, d416, d501, - d506, d507, d508, d509, d510, d511, d512, d513, d514, d515, d516, d601, d606, - d607, d608, d609, d610, d611, d612, d613, d614, d615, d616, d701, d706, d707, - d708, d709, d710, d711, d712, d713, d714, d715, d716 + d506, d507, d508, d509, d510, d511, d512, d513, d514, d515, d516, d601, d606, + d607, d608, d609, d610, d611, d612, d613, d614, d615, d616, d701, d706, d707, + d708, d709, d710, d711, d712, d713, d714, d715, d716 end function DP8Interp_polyweights(T::Type) @@ -1246,9 +1420,9 @@ function DP8Interp_polyweights(T::Type) d716 = convert(T, big"-0.14972683625798562581422125276e+03") return d401, d406, d407, d408, d409, d410, d411, d412, d413, d414, d415, d416, d501, - d506, d507, d508, d509, d510, d511, d512, d513, d514, d515, d516, d601, d606, - d607, d608, d609, d610, d611, d612, d613, d614, d615, d616, d701, d706, d707, - d708, d709, d710, d711, d712, d713, d714, d715, d716 + d506, d507, d508, d509, d510, d511, d512, d513, d514, d515, d516, d601, d606, + d607, d608, d609, d610, d611, d612, d613, d614, d615, d616, d701, d706, d707, + d708, d709, d710, d711, d712, d713, d714, d715, d716 end struct PFRK87ConstantCache{T1, T2} <: OrdinaryDiffEqConstantCache α0201::T1 @@ -1397,10 +1571,12 @@ function PFRK87ConstantCache(T1::Type, T2::Type) c12 = convert(T2, 1 // 1) c13 = convert(T2, 1 // 1) - PFRK87ConstantCache(α0201, α0301, α0401, α0501, α0601, α0701, α0302, α0403, α0503, + return PFRK87ConstantCache( + α0201, α0301, α0401, α0501, α0601, α0701, α0302, α0403, α0503, α0504, α0604, α0704, α0605, α0705, α0706, α0908, α1008, α1108, α1208, α1308, α1009, α1109, α1209, α1309, α1110, α1210, α1310, α1211, α1311, β1, β6, β7, β8, β9, β10, β11, β12, β13, β1tilde, β6tilde, β7tilde, β8tilde, β9tilde, β10tilde, β11tilde, β12tilde, - c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13) + c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13 + ) end diff --git a/lib/OrdinaryDiffEqHighOrderRK/src/interp_func.jl b/lib/OrdinaryDiffEqHighOrderRK/src/interp_func.jl index a7211ab354..3bd2beffda 100644 --- a/lib/OrdinaryDiffEqHighOrderRK/src/interp_func.jl +++ b/lib/OrdinaryDiffEqHighOrderRK/src/interp_func.jl @@ -1,6 +1,9 @@ -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where { +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where { cacheType <: - Union{DP8ConstantCache, DP8Cache}} - dense ? "specialized 7th order interpolation" : "1st order linear" + Union{DP8ConstantCache, DP8Cache}, + } + return dense ? "specialized 7th order interpolation" : "1st order linear" end diff --git a/lib/OrdinaryDiffEqHighOrderRK/src/interpolants.jl b/lib/OrdinaryDiffEqHighOrderRK/src/interpolants.jl index 114a94e03a..ff453fc2f5 100644 --- a/lib/OrdinaryDiffEqHighOrderRK/src/interpolants.jl +++ b/lib/OrdinaryDiffEqHighOrderRK/src/interpolants.jl @@ -1,113 +1,155 @@ -function _ode_interpolant(Θ, dt, y₀, y₁, k, +function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{DP8ConstantCache, DP8Cache}, - idxs, T::Type{Val{D}}, differential_vars) where {D} + idxs, T::Type{Val{D}}, differential_vars + ) where {D} throw(DerivativeOrderNotPossibleError()) end -function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{DP8ConstantCache, DP8Cache}, - idxs, T::Type{Val{D}}, differential_vars) where {D} + idxs, T::Type{Val{D}}, differential_vars + ) where {D} throw(DerivativeOrderNotPossibleError()) end """ """ -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{DP8ConstantCache, DP8Cache}, idxs::Nothing, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) Θ1 = 1 - Θ # return @.. broadcast=false y₀ + dt*Θ*(k[1] + Θ1*(k[2] + Θ*(k[3]+Θ1*(k[4] + Θ*(k[5] + Θ1*(k[6]+Θ*k[7])))))) return @inbounds y₀ + - dt * Θ * - (k[1] + - Θ1 * (k[2] + - Θ * (k[3] + Θ1 * (k[4] + Θ * (k[5] + Θ1 * (k[6] + Θ * k[7])))))) + dt * Θ * + ( + k[1] + + Θ1 * ( + k[2] + + Θ * (k[3] + Θ1 * (k[4] + Θ * (k[5] + Θ1 * (k[6] + Θ * k[7])))) + ) + ) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{DP8ConstantCache, DP8Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) Θ1 = 1 - Θ # return @.. broadcast=false y₀[idxs] + dt*Θ*(k[1][idxs] + Θ1*(k[2][idxs] + Θ*(k[3][idxs]+Θ1*(k[4][idxs] + Θ*(k[5][idxs] + Θ1*(k[6][idxs]+Θ*k[7][idxs])))))) return y₀[idxs] + - dt * Θ * - (k[1][idxs] + - Θ1 * (k[2][idxs] + - Θ * (k[3][idxs] + - Θ1 * (k[4][idxs] + Θ * (k[5][idxs] + Θ1 * (k[6][idxs] + Θ * k[7][idxs])))))) + dt * Θ * + ( + k[1][idxs] + + Θ1 * ( + k[2][idxs] + + Θ * ( + k[3][idxs] + + Θ1 * (k[4][idxs] + Θ * (k[5][idxs] + Θ1 * (k[6][idxs] + Θ * k[7][idxs]))) + ) + ) + ) end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{DP8ConstantCache, DP8Cache}, idxs::Nothing, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) Θ1 = 1 - Θ - @inbounds @.. broadcast=false out=y₀ + - dt * Θ * - (k[1] + - Θ1 * (k[2] + - Θ * (k[3] + - Θ1 * - (k[4] + Θ * (k[5] + Θ1 * (k[6] + Θ * k[7])))))) + @inbounds @.. broadcast = false out = y₀ + + dt * Θ * + ( + k[1] + + Θ1 * ( + k[2] + + Θ * ( + k[3] + + Θ1 * + (k[4] + Θ * (k[5] + Θ1 * (k[6] + Θ * k[7]))) + ) + ) + ) #@inbounds for i in eachindex(out) # out[i] = y₀[i] + dt*Θ*(k[1][i] + Θ1*(k[2][i] + Θ*(k[3][i]+Θ1*(k[4][i] + Θ*(k[5][i] + Θ1*(k[6][i]+Θ*k[7][i])))))) #end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{DP8ConstantCache, DP8Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) Θ1 = 1 - Θ - @views @.. broadcast=false out=y₀[idxs] + - dt * Θ * - (k[1][idxs] + - Θ1 * (k[2][idxs] + - Θ * (k[3][idxs] + - Θ1 * (k[4][idxs] + - Θ * - (k[5][idxs] + Θ1 * (k[6][idxs] + Θ * k[7][idxs])))))) + @views @.. broadcast = false out = y₀[idxs] + + dt * Θ * + ( + k[1][idxs] + + Θ1 * ( + k[2][idxs] + + Θ * ( + k[3][idxs] + + Θ1 * ( + k[4][idxs] + + Θ * + (k[5][idxs] + Θ1 * (k[6][idxs] + Θ * k[7][idxs])) + ) + ) + ) + ) #@inbounds for (j,i) in enumerate(idxs) # out[j] = y₀[i] + dt*Θ*(k[1][i] + Θ1*(k[2][i] + Θ*(k[3][i]+Θ1*(k[4][i] + Θ*(k[5][i] + Θ1*(k[6][i]+Θ*k[7][i])))))) #end out end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{DP8ConstantCache, DP8Cache}, idxs::Nothing, - T::Type{Val{1}}, differential_vars::Nothing) - @inbounds b1diff = @.. broadcast=false k[1]+k[2] - @inbounds b2diff = @.. broadcast=false -2*k[2]+2*k[3]+2*k[4] - @inbounds b3diff = @.. broadcast=false -3 * k[3]-6 * k[4]+3*k[5]+3*k[6] - @inbounds b4diff = @.. broadcast=false 4 * k[4] - 8 * k[5] - 12 * k[6]+4 * k[7] - @inbounds b5diff = @.. broadcast=false 5 * k[5] + 15 * k[6]-15 * k[7] - @inbounds b6diff = @.. broadcast=false -6 * k[6]+18 * k[7] - @inbounds b7diff = @.. broadcast=false -7*k[7] + T::Type{Val{1}}, differential_vars::Nothing + ) + @inbounds b1diff = @.. broadcast = false k[1] + k[2] + @inbounds b2diff = @.. broadcast = false -2 * k[2] + 2 * k[3] + 2 * k[4] + @inbounds b3diff = @.. broadcast = false -3 * k[3] - 6 * k[4] + 3 * k[5] + 3 * k[6] + @inbounds b4diff = @.. broadcast = false 4 * k[4] - 8 * k[5] - 12 * k[6] + 4 * k[7] + @inbounds b5diff = @.. broadcast = false 5 * k[5] + 15 * k[6] - 15 * k[7] + @inbounds b6diff = @.. broadcast = false -6 * k[6] + 18 * k[7] + @inbounds b7diff = @.. broadcast = false -7 * k[7] # return @.. broadcast=false b1diff + Θ*(b2diff + Θ*(b3diff + Θ*(b4diff + Θ*(b5diff + Θ*(b6diff + Θ*b7diff))))) return b1diff + - Θ * - (b2diff + Θ * (b3diff + Θ * (b4diff + Θ * (b5diff + Θ * (b6diff + Θ * b7diff))))) + Θ * + (b2diff + Θ * (b3diff + Θ * (b4diff + Θ * (b5diff + Θ * (b6diff + Θ * b7diff))))) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{DP8ConstantCache, DP8Cache}, idxs, - T::Type{Val{1}}, differential_vars::Nothing) - b1diff = @.. broadcast=false k[1][idxs]+k[2][idxs] - b2diff = @.. broadcast=false -2*k[2][idxs]+2*k[3][idxs]+2*k[4][idxs] - b3diff = @.. broadcast=false -3 * k[3][idxs]-6 * k[4][idxs]+3*k[5][idxs]+3*k[6][idxs] - b4diff = @.. broadcast=false 4 * k[4][idxs] - 8 * k[5][idxs] - - 12 * k[6][idxs]+4 * k[7][idxs] - b5diff = @.. broadcast=false 5 * k[5][idxs] + 15 * k[6][idxs]-15 * k[7][idxs] - b6diff = @.. broadcast=false -6 * k[6][idxs]+18 * k[7][idxs] - b7diff = @.. broadcast=false -7*k[7][idxs] + T::Type{Val{1}}, differential_vars::Nothing + ) + b1diff = @.. broadcast = false k[1][idxs] + k[2][idxs] + b2diff = @.. broadcast = false -2 * k[2][idxs] + 2 * k[3][idxs] + 2 * k[4][idxs] + b3diff = @.. broadcast = false -3 * k[3][idxs] - 6 * k[4][idxs] + 3 * k[5][idxs] + 3 * k[6][idxs] + b4diff = @.. broadcast = false 4 * k[4][idxs] - 8 * k[5][idxs] - + 12 * k[6][idxs] + 4 * k[7][idxs] + b5diff = @.. broadcast = false 5 * k[5][idxs] + 15 * k[6][idxs] - 15 * k[7][idxs] + b6diff = @.. broadcast = false -6 * k[6][idxs] + 18 * k[7][idxs] + b7diff = @.. broadcast = false -7 * k[7][idxs] # return @.. broadcast=false b1diff + Θ*(b2diff + Θ*(b3diff + Θ*(b4diff + Θ*(b5diff + Θ*(b6diff + Θ*b7diff))))) return b1diff + - Θ * - (b2diff + Θ * (b3diff + Θ * (b4diff + Θ * (b5diff + Θ * (b6diff + Θ * b7diff))))) + Θ * + (b2diff + Θ * (b3diff + Θ * (b4diff + Θ * (b5diff + Θ * (b6diff + Θ * b7diff))))) end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{DP8ConstantCache, DP8Cache}, idxs::Nothing, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) # b1diff = k[1] + k[2] # b2diff = -2*k[2] + 2*k[3] + 2*k[4] # b3diff = -3*k[3] - 6*k[4] + 3*k[5] + 3*k[6] @@ -116,18 +158,28 @@ end # b6diff = -6*k[6] + 18*k[7] # @.. broadcast=false out = b1diff + Θ*(b2diff + Θ*(b3diff + Θ*(b4diff + # Θ*(b5diff + Θ*(b6diff - 7*k[7]*Θ))))) - @views @.. broadcast=false out=k[1] + k[2] + - Θ * (-2 * k[2] + 2 * k[3] + 2 * k[4] + - Θ * (-3 * k[3] - 6 * k[4] + 3 * k[5] + 3 * k[6] + - Θ * (4 * k[4] - 8 * k[5] - 12 * k[6] + 4 * k[7] + - Θ * (5 * k[5] + 15 * k[6] - 15 * k[7] + - Θ * (-6 * k[6] + 18 * k[7] - 7 * k[7] * Θ))))) + @views @.. broadcast = false out = k[1] + k[2] + + Θ * ( + -2 * k[2] + 2 * k[3] + 2 * k[4] + + Θ * ( + -3 * k[3] - 6 * k[4] + 3 * k[5] + 3 * k[6] + + Θ * ( + 4 * k[4] - 8 * k[5] - 12 * k[6] + 4 * k[7] + + Θ * ( + 5 * k[5] + 15 * k[6] - 15 * k[7] + + Θ * (-6 * k[6] + 18 * k[7] - 7 * k[7] * Θ) + ) + ) + ) + ) out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{DP8ConstantCache, DP8Cache}, idxs, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) # b1diff = k[1][idxs] + k[2][idxs] # b2diff = -2*k[2][idxs] + 2*k[3][idxs] + 2*k[4][idxs] # b3diff = -3*k[3][idxs] - 6*k[4][idxs] + 3*k[5][idxs] + 3*k[6][idxs] @@ -136,17 +188,27 @@ end # b6diff = -6*k[6][idxs] + 18*k[7][idxs] #@views @.. broadcast=false out = b1diff + Θ*(b2diff + Θ*(b3diff + Θ*(b4diff + # Θ*(b5diff + Θ*(b6diff - 7*k[7][idxs]*Θ))))) - @views @.. broadcast=false out=k[1][idxs] + k[2][idxs] + - Θ * (-2 * k[2][idxs] + 2 * k[3][idxs] + 2 * k[4][idxs] + - Θ * - (-3 * k[3][idxs] - 6 * k[4][idxs] + 3 * k[5][idxs] + - 3 * k[6][idxs] + - Θ * - (4 * k[4][idxs] - 8 * k[5][idxs] - 12 * k[6][idxs] + - 4 * k[7][idxs] + - Θ * - (5 * k[5][idxs] + 15 * k[6][idxs] - 15 * k[7][idxs] + - Θ * (-6 * k[6][idxs] + 18 * k[7][idxs] - - 7 * k[7][idxs] * Θ))))) + @views @.. broadcast = false out = k[1][idxs] + k[2][idxs] + + Θ * ( + -2 * k[2][idxs] + 2 * k[3][idxs] + 2 * k[4][idxs] + + Θ * + ( + -3 * k[3][idxs] - 6 * k[4][idxs] + 3 * k[5][idxs] + + 3 * k[6][idxs] + + Θ * + ( + 4 * k[4][idxs] - 8 * k[5][idxs] - 12 * k[6][idxs] + + 4 * k[7][idxs] + + Θ * + ( + 5 * k[5][idxs] + 15 * k[6][idxs] - 15 * k[7][idxs] + + Θ * ( + -6 * k[6][idxs] + 18 * k[7][idxs] - + 7 * k[7][idxs] * Θ + ) + ) + ) + ) + ) out end diff --git a/lib/OrdinaryDiffEqHighOrderRK/test/allocation_tests.jl b/lib/OrdinaryDiffEqHighOrderRK/test/allocation_tests.jl index 6df9a0f131..fedfb0e064 100644 --- a/lib/OrdinaryDiffEqHighOrderRK/test/allocation_tests.jl +++ b/lib/OrdinaryDiffEqHighOrderRK/test/allocation_tests.jl @@ -15,23 +15,23 @@ These tests verify that the step! operation does not allocate during stepping. du[2] = -1.5 * u[2] end prob = ODEProblem(simple_system!, [1.0, 1.0], (0.0, 1.0)) - + # Test all exported HighOrderRK solvers for allocation-free behavior high_order_solvers = [TanYam7(), DP8(), PFRK87(), TsitPap8()] - + @testset "HighOrderRK Solver Allocation Analysis" begin for solver in high_order_solvers @testset "$(typeof(solver)) allocation check" begin - integrator = init(prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) + integrator = init(prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) step!(integrator) # Setup step may allocate - + # Use AllocCheck to verify step! is allocation-free allocs = check_allocs(step!, (typeof(integrator),)) - + # These solvers should be allocation-free, but mark as broken for now # to verify with AllocCheck (more accurate than @allocated) @test_broken length(allocs) == 0 - + if length(allocs) > 0 println("AllocCheck found $(length(allocs)) allocation sites in $(typeof(solver)) step!:") for (i, alloc) in enumerate(allocs[1:min(3, end)]) # Show first 3 @@ -43,4 +43,4 @@ These tests verify that the step! operation does not allocate during stepping. end end end -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqHighOrderRK/test/high_order_erk_convergence_tests.jl b/lib/OrdinaryDiffEqHighOrderRK/test/high_order_erk_convergence_tests.jl index 720aac4417..873b8d603a 100644 --- a/lib/OrdinaryDiffEqHighOrderRK/test/high_order_erk_convergence_tests.jl +++ b/lib/OrdinaryDiffEqHighOrderRK/test/high_order_erk_convergence_tests.jl @@ -7,9 +7,11 @@ dts5 = 1 .// 2 .^ (3:-1:1) testTol = 0.2 @testset "Explicit Solver Convergence Tests ($(["out-of-place", "in-place"][i]))" for i in 1:2 - prob = (ODEProblemLibrary.prob_ode_linear, - ODEProblemLibrary.prob_ode_2Dlinear)[i] + prob = ( + ODEProblemLibrary.prob_ode_linear, + ODEProblemLibrary.prob_ode_2Dlinear, + )[i] sim3 = test_convergence(dts5, prob, PFRK87()) - @test sim3.𝒪est[:l∞]≈8.4 atol=0.2 + @test sim3.𝒪est[:l∞] ≈ 8.4 atol = 0.2 end diff --git a/lib/OrdinaryDiffEqHighOrderRK/test/jet.jl b/lib/OrdinaryDiffEqHighOrderRK/test/jet.jl index 2899c72a10..7c6ce2a672 100644 --- a/lib/OrdinaryDiffEqHighOrderRK/test/jet.jl +++ b/lib/OrdinaryDiffEqHighOrderRK/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqHighOrderRK, target_defined_modules = true, mode = :typo) -end \ No newline at end of file + OrdinaryDiffEqHighOrderRK, target_defined_modules = true, mode = :typo + ) +end diff --git a/lib/OrdinaryDiffEqHighOrderRK/test/qa.jl b/lib/OrdinaryDiffEqHighOrderRK/test/qa.jl index 7afa33773b..1e7b55be83 100644 --- a/lib/OrdinaryDiffEqHighOrderRK/test/qa.jl +++ b/lib/OrdinaryDiffEqHighOrderRK/test/qa.jl @@ -5,4 +5,4 @@ using Aqua Aqua.test_all( OrdinaryDiffEqHighOrderRK ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqHighOrderRK/test/runtests.jl b/lib/OrdinaryDiffEqHighOrderRK/test/runtests.jl index b9c5046422..bc43452eba 100644 --- a/lib/OrdinaryDiffEqHighOrderRK/test/runtests.jl +++ b/lib/OrdinaryDiffEqHighOrderRK/test/runtests.jl @@ -7,4 +7,4 @@ if isempty(VERSION.prerelease) @time @safetestset "JET Tests" include("jet.jl") @time @safetestset "Aqua" include("qa.jl") @time @safetestset "Allocation Tests" include("allocation_tests.jl") -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqIMEXMultistep/src/OrdinaryDiffEqIMEXMultistep.jl b/lib/OrdinaryDiffEqIMEXMultistep/src/OrdinaryDiffEqIMEXMultistep.jl index d36cb67936..c69c1813dd 100644 --- a/lib/OrdinaryDiffEqIMEXMultistep/src/OrdinaryDiffEqIMEXMultistep.jl +++ b/lib/OrdinaryDiffEqIMEXMultistep/src/OrdinaryDiffEqIMEXMultistep.jl @@ -1,17 +1,17 @@ module OrdinaryDiffEqIMEXMultistep import OrdinaryDiffEqCore: alg_order, issplit, OrdinaryDiffEqNewtonAlgorithm, _unwrap_val, - DEFAULT_PRECS, OrdinaryDiffEqConstantCache, - OrdinaryDiffEqMutableCache, - @cache, alg_cache, initialize!, perform_step!, - full_cache, get_fsalfirstlast, - generic_solver_docstring, _bool_to_ADType, _process_AD_choice + DEFAULT_PRECS, OrdinaryDiffEqConstantCache, + OrdinaryDiffEqMutableCache, + @cache, alg_cache, initialize!, perform_step!, + full_cache, get_fsalfirstlast, + generic_solver_docstring, _bool_to_ADType, _process_AD_choice using FastBroadcast import OrdinaryDiffEqCore using OrdinaryDiffEqDifferentiation: dolinsolve using OrdinaryDiffEqNonlinearSolve: NLNewton, build_nlsolver, markfirststage!, nlsolve!, - nlsolvefail, du_alias_or_new + nlsolvefail, du_alias_or_new import ADTypes: AutoForwardDiff, AbstractADType using Reexport diff --git a/lib/OrdinaryDiffEqIMEXMultistep/src/algorithms.jl b/lib/OrdinaryDiffEqIMEXMultistep/src/algorithms.jl index b6549128f7..a4ae919910 100644 --- a/lib/OrdinaryDiffEqIMEXMultistep/src/algorithms.jl +++ b/lib/OrdinaryDiffEqIMEXMultistep/src/algorithms.jl @@ -1,6 +1,7 @@ # IMEX Multistep methods -@doc generic_solver_docstring("Crank-Nicolson Adams Bashforth Order 2 (fixed time step)", +@doc generic_solver_docstring( + "Crank-Nicolson Adams Bashforth Order 2 (fixed time step)", "CNAB2", "IMEX Multistep method.", "@article{jorgenson2014unconditional, @@ -19,9 +20,10 @@ number={6}, pages={647--659}, year={2010}, - publisher={Wiley Online Library}}", "", "") + publisher={Wiley Online Library}}", "", "" +) struct CNAB2{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -33,20 +35,24 @@ function CNAB2(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), - extrapolant = :linear) + extrapolant = :linear + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - CNAB2{ + return CNAB2{ _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), - typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac)}( + typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), + }( linsolve, nlsolve, precs, extrapolant, - AD_choice) + AD_choice + ) end -@doc generic_solver_docstring("Crank-Nicholson Leapfrong 2.", +@doc generic_solver_docstring( + "Crank-Nicholson Leapfrong 2.", "CNLF2", "IMEX Multistep method.", "@article{han2020second, @@ -64,9 +70,10 @@ end volume={281}, pages={263--276}, year={2015}, - publisher={Elsevier}}", "", "") + publisher={Elsevier}}", "", "" +) struct CNLF2{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -77,15 +84,18 @@ function CNLF2(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), - extrapolant = :linear) + extrapolant = :linear + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - CNLF2{ + return CNLF2{ _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), - typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac)}( + typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), + }( linsolve, nlsolve, precs, extrapolant, - AD_choice) + AD_choice + ) end diff --git a/lib/OrdinaryDiffEqIMEXMultistep/src/imex_multistep_caches.jl b/lib/OrdinaryDiffEqIMEXMultistep/src/imex_multistep_caches.jl index d30425975a..65ba9f5fa9 100644 --- a/lib/OrdinaryDiffEqIMEXMultistep/src/imex_multistep_caches.jl +++ b/lib/OrdinaryDiffEqIMEXMultistep/src/imex_multistep_caches.jl @@ -1,13 +1,13 @@ # IMEX Multistep methods abstract type IMEXMutableCache <: OrdinaryDiffEqMutableCache end function get_fsalfirstlast(cache::IMEXMutableCache, u) - (cache.fsalfirst, du_alias_or_new(cache.nlsolver, cache.fsalfirst)) + return (cache.fsalfirst, du_alias_or_new(cache.nlsolver, cache.fsalfirst)) end # CNAB2 @cache mutable struct CNAB2ConstantCache{rateType, N, uType, tType} <: - OrdinaryDiffEqConstantCache + OrdinaryDiffEqConstantCache k2::rateType nlsolver::N uprev3::uType @@ -27,28 +27,36 @@ end tprev2::tType end -function alg_cache(alg::CNAB2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CNAB2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1 // 2, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) k2 = rate_prototype uprev3 = u tprev2 = t - CNAB2ConstantCache(k2, nlsolver, uprev3, tprev2) + return CNAB2ConstantCache(k2, nlsolver, uprev3, tprev2) end -function alg_cache(alg::CNAB2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CNAB2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1 // 2, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) k1 = zero(rate_prototype) @@ -57,13 +65,13 @@ function alg_cache(alg::CNAB2, u, rate_prototype, ::Type{uEltypeNoUnits}, uprev3 = zero(u) tprev2 = t - CNAB2Cache(u, uprev, uprev2, fsalfirst, k1, k2, du₁, nlsolver, uprev3, tprev2) + return CNAB2Cache(u, uprev, uprev2, fsalfirst, k1, k2, du₁, nlsolver, uprev3, tprev2) end # CNLF2 @cache mutable struct CNLF2ConstantCache{rateType, N, uType, tType} <: - OrdinaryDiffEqConstantCache + OrdinaryDiffEqConstantCache k2::rateType nlsolver::N uprev2::uType @@ -84,29 +92,37 @@ end tprev2::tType end -function alg_cache(alg::CNLF2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CNLF2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1 // 1, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) k2 = rate_prototype uprev2 = u uprev3 = u tprev2 = t - CNLF2ConstantCache(k2, nlsolver, uprev2, uprev3, tprev2) + return CNLF2ConstantCache(k2, nlsolver, uprev2, uprev3, tprev2) end -function alg_cache(alg::CNLF2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CNLF2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1 // 1, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) k1 = zero(rate_prototype) @@ -116,5 +132,5 @@ function alg_cache(alg::CNLF2, u, rate_prototype, ::Type{uEltypeNoUnits}, uprev3 = zero(u) tprev2 = t - CNLF2Cache(u, uprev, uprev2, fsalfirst, k1, k2, du₁, nlsolver, uprev3, tprev2) + return CNLF2Cache(u, uprev, uprev2, fsalfirst, k1, k2, du₁, nlsolver, uprev3, tprev2) end diff --git a/lib/OrdinaryDiffEqIMEXMultistep/src/imex_multistep_perform_step.jl b/lib/OrdinaryDiffEqIMEXMultistep/src/imex_multistep_perform_step.jl index 64b41d9fcf..ac9308f98c 100644 --- a/lib/OrdinaryDiffEqIMEXMultistep/src/imex_multistep_perform_step.jl +++ b/lib/OrdinaryDiffEqIMEXMultistep/src/imex_multistep_perform_step.jl @@ -10,7 +10,7 @@ function initialize!(integrator, cache::CNAB2ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end function perform_step!(integrator, cache::CNAB2ConstantCache, repeat_step = false) @@ -50,7 +50,7 @@ function perform_step!(integrator, cache::CNAB2ConstantCache, repeat_step = fals integrator.stats.nf2 += 1 integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function initialize!(integrator, cache::CNAB2Cache) @@ -60,7 +60,7 @@ function initialize!(integrator, cache::CNAB2Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::CNAB2Cache, repeat_step = false) @@ -72,12 +72,12 @@ function perform_step!(integrator, cache::CNAB2Cache, repeat_step = false) f1(du₁, uprev, p, t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false k1=integrator.fsalfirst - du₁ + @.. broadcast = false k1 = integrator.fsalfirst - du₁ # Explicit part if cnt == 1 - @.. broadcast=false tmp=uprev + dt * k1 + @.. broadcast = false tmp = uprev + dt * k1 else - @.. broadcast=false tmp=uprev + dt * (3 // 2 * k1 - 1 // 2 * k2) + @.. broadcast = false tmp = uprev + dt * (3 // 2 * k1 - 1 // 2 * k2) end # Implicit part # precalculations @@ -85,16 +85,16 @@ function perform_step!(integrator, cache::CNAB2Cache, repeat_step = false) γdt = γ * dt # initial guess - @.. broadcast=false z=dt * du₁ - @.. broadcast=false tmp+=γ * z + @.. broadcast = false z = dt * du₁ + @.. broadcast = false tmp += γ * z markfirststage!(nlsolver) z = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + 1 // 2 * z + @.. broadcast = false u = tmp + 1 // 2 * z cache.k2 .= k1 f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end # CNLF2 @@ -109,7 +109,7 @@ function initialize!(integrator, cache::CNLF2ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end function perform_step!(integrator, cache::CNLF2ConstantCache, repeat_step = false) @@ -151,7 +151,7 @@ function perform_step!(integrator, cache::CNLF2ConstantCache, repeat_step = fals integrator.stats.nf2 += 1 integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function initialize!(integrator, cache::CNLF2Cache) @@ -161,7 +161,7 @@ function initialize!(integrator, cache::CNLF2Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::CNLF2Cache, repeat_step = false) @@ -175,27 +175,27 @@ function perform_step!(integrator, cache::CNLF2Cache, repeat_step = false) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # Explicit part if cnt == 1 - @.. broadcast=false tmp=uprev + dt * (integrator.fsalfirst - du₁) + @.. broadcast = false tmp = uprev + dt * (integrator.fsalfirst - du₁) else - @.. broadcast=false tmp=uprev2 + 2 // 1 * dt * (integrator.fsalfirst - du₁) + @.. broadcast = false tmp = uprev2 + 2 // 1 * dt * (integrator.fsalfirst - du₁) end # Implicit part # precalculations γ = 1 // 1 if cnt != 1 - @.. broadcast=false tmp+=γ * dt * k2 + @.. broadcast = false tmp += γ * dt * k2 end γdt = γ * dt # initial guess - @.. broadcast=false z=dt * du₁ + @.. broadcast = false z = dt * du₁ markfirststage!(nlsolver) z = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + γ * z + @.. broadcast = false u = tmp + γ * z cache.uprev2 .= uprev cache.k2 .= du₁ f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end diff --git a/lib/OrdinaryDiffEqIMEXMultistep/test/jet.jl b/lib/OrdinaryDiffEqIMEXMultistep/test/jet.jl index f10091d9e0..e77276b9d4 100644 --- a/lib/OrdinaryDiffEqIMEXMultistep/test/jet.jl +++ b/lib/OrdinaryDiffEqIMEXMultistep/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqIMEXMultistep, target_defined_modules = true, mode = :typo) -end \ No newline at end of file + OrdinaryDiffEqIMEXMultistep, target_defined_modules = true, mode = :typo + ) +end diff --git a/lib/OrdinaryDiffEqIMEXMultistep/test/qa.jl b/lib/OrdinaryDiffEqIMEXMultistep/test/qa.jl index 1757af4c40..0448efc483 100644 --- a/lib/OrdinaryDiffEqIMEXMultistep/test/qa.jl +++ b/lib/OrdinaryDiffEqIMEXMultistep/test/qa.jl @@ -5,4 +5,4 @@ using Aqua Aqua.test_all( OrdinaryDiffEqIMEXMultistep ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqLinear/src/OrdinaryDiffEqLinear.jl b/lib/OrdinaryDiffEqLinear/src/OrdinaryDiffEqLinear.jl index ff75ceee9e..986c0ef4dd 100644 --- a/lib/OrdinaryDiffEqLinear/src/OrdinaryDiffEqLinear.jl +++ b/lib/OrdinaryDiffEqLinear/src/OrdinaryDiffEqLinear.jl @@ -1,15 +1,15 @@ module OrdinaryDiffEqLinear import OrdinaryDiffEqCore: alg_order, alg_extrapolates, dt_required, - OrdinaryDiffEqLinearExponentialAlgorithm, - OrdinaryDiffEqAdaptiveAlgorithm, OrdinaryDiffEqAlgorithm, - OrdinaryDiffEqExponentialAlgorithm, - OrdinaryDiffEqMutableCache, @cache, alg_cache, - OrdinaryDiffEqConstantCache, - initialize!, perform_step!, unwrap_alg, - calculate_residuals!, get_fsalfirstlast, - _vec, isdtchangeable, full_cache, - generic_solver_docstring + OrdinaryDiffEqLinearExponentialAlgorithm, + OrdinaryDiffEqAdaptiveAlgorithm, OrdinaryDiffEqAlgorithm, + OrdinaryDiffEqExponentialAlgorithm, + OrdinaryDiffEqMutableCache, @cache, alg_cache, + OrdinaryDiffEqConstantCache, + initialize!, perform_step!, unwrap_alg, + calculate_residuals!, get_fsalfirstlast, + _vec, isdtchangeable, full_cache, + generic_solver_docstring using LinearAlgebra: mul!, I using SciMLOperators: AbstractSciMLOperator using ExponentialUtilities @@ -27,7 +27,7 @@ include("integrator_interface.jl") include("linear_perform_step.jl") export MagnusMidpoint, LinearExponential, MagnusLeapfrog, LieEuler, CayleyEuler, - MagnusGauss4, MagnusNC6, MagnusGL6, MagnusGL8, MagnusNC8, MagnusGL4, - MagnusAdapt4, RKMK2, RKMK4, LieRK4, CG2, CG3, CG4a + MagnusGauss4, MagnusNC6, MagnusGL6, MagnusGL8, MagnusNC8, MagnusGL4, + MagnusAdapt4, RKMK2, RKMK4, LieRK4, CG2, CG3, CG4a end diff --git a/lib/OrdinaryDiffEqLinear/src/alg_utils.jl b/lib/OrdinaryDiffEqLinear/src/alg_utils.jl index 2ac84104d8..44929661bb 100644 --- a/lib/OrdinaryDiffEqLinear/src/alg_utils.jl +++ b/lib/OrdinaryDiffEqLinear/src/alg_utils.jl @@ -24,10 +24,11 @@ dt_required(alg::LinearExponential) = false function DiffEqBase.prepare_alg( alg::LinearExponential, u0::AbstractArray, - p, prob) - alg + p, prob + ) + return alg end function isdtchangeable(alg::Union{LieEuler, MagnusGauss4, CayleyEuler}) - false + return false end # due to caching diff --git a/lib/OrdinaryDiffEqLinear/src/algorithms.jl b/lib/OrdinaryDiffEqLinear/src/algorithms.jl index fb70e651c4..bd8029275d 100644 --- a/lib/OrdinaryDiffEqLinear/src/algorithms.jl +++ b/lib/OrdinaryDiffEqLinear/src/algorithms.jl @@ -66,32 +66,50 @@ REF6 = """ """ for (Alg, Description, Ref) in [ - (:MagnusMidpoint, "Second order Magnus Midpoint method.", - "https://joshuagoings.com/2017/06/15/magnus/"), - (:MagnusLeapfrog, "Second order Magnus Leapfrog method.", - "https://joshuagoings.com/2017/06/15/magnus/"), - (:LieEuler, "description", REF1), - (:MagnusGauss4, - "Fourth order Magnus method approximated using a two stage Gauss quadrature.", - REF5), - (:MagnusNC6, - "Sixth order Magnus method approximated using Newton-Cotes quadrature.", REF3), - (:MagnusGL6, - "Sixth order Magnus method approximated using Gauss-Legendre quadrature.", REF3), - (:MagnusGL8, - "Eighth order Magnus method approximated using Newton-Cotes quadrature.", REF3), - (:MagnusNC8, - "Eighth order Magnus method approximated using Gauss-Legendre quadrature.", REF3), - (:MagnusGL4, - "Fourth order Magnus method approximated using Gauss-Legendre quadrature.", REF4), - (:RKMK2, "Second order Runge–Kutta–Munthe-Kaas method.", REF1), - (:RKMK4, "Fourth order Runge–Kutta–Munthe-Kaas method.", REF1), - (:LieRK4, "Fourth order Lie Runge-Kutta method.", REF1), - (:CG2, "Second order Crouch–Grossman method.", REF1), - (:CG3, "Third order Crouch-Grossman method.", REF2), - (:CG4a, " Fourth order Crouch-Grossman method.", REF6)] + ( + :MagnusMidpoint, "Second order Magnus Midpoint method.", + "https://joshuagoings.com/2017/06/15/magnus/", + ), + ( + :MagnusLeapfrog, "Second order Magnus Leapfrog method.", + "https://joshuagoings.com/2017/06/15/magnus/", + ), + (:LieEuler, "description", REF1), + ( + :MagnusGauss4, + "Fourth order Magnus method approximated using a two stage Gauss quadrature.", + REF5, + ), + ( + :MagnusNC6, + "Sixth order Magnus method approximated using Newton-Cotes quadrature.", REF3, + ), + ( + :MagnusGL6, + "Sixth order Magnus method approximated using Gauss-Legendre quadrature.", REF3, + ), + ( + :MagnusGL8, + "Eighth order Magnus method approximated using Newton-Cotes quadrature.", REF3, + ), + ( + :MagnusNC8, + "Eighth order Magnus method approximated using Gauss-Legendre quadrature.", REF3, + ), + ( + :MagnusGL4, + "Fourth order Magnus method approximated using Gauss-Legendre quadrature.", REF4, + ), + (:RKMK2, "Second order Runge–Kutta–Munthe-Kaas method.", REF1), + (:RKMK4, "Fourth order Runge–Kutta–Munthe-Kaas method.", REF1), + (:LieRK4, "Fourth order Lie Runge-Kutta method.", REF1), + (:CG2, "Second order Crouch–Grossman method.", REF1), + (:CG3, "Third order Crouch-Grossman method.", REF2), + (:CG4a, " Fourth order Crouch-Grossman method.", REF6), + ] @eval begin - @doc generic_solver_docstring($Description, + @doc generic_solver_docstring( + $Description, $(string(Alg)), "Semilinear ODE solver", $Ref, @@ -106,7 +124,8 @@ for (Alg, Description, Ref) in [ krylov = false, m = 30, iop = 0, - """) + """ + ) struct $Alg <: OrdinaryDiffEqLinearExponentialAlgorithm krylov::Bool m::Int @@ -116,7 +135,8 @@ for (Alg, Description, Ref) in [ @eval $Alg(; krylov = false, m = 30, iop = 0) = $Alg(krylov, m, iop) end -@doc generic_solver_docstring("Fourth Order Adaptive Magnus method.", +@doc generic_solver_docstring( + "Fourth Order Adaptive Magnus method.", "MagnusAdapt4", "Semilinear ODE solver", "@article{li2008adaptive, @@ -127,10 +147,12 @@ end number={9}, pages={1111--1118}, year={2008}, - publisher={Springer}}", "", "") + publisher={Springer}}", "", "" +) struct MagnusAdapt4 <: OrdinaryDiffEqAdaptiveAlgorithm end -@doc generic_solver_docstring("First order method using Cayley transformations.", +@doc generic_solver_docstring( + "First order method using Cayley transformations.", "CayleyEuler", "Semilinear ODE solver", "@article{iserles2000lie, @@ -140,7 +162,8 @@ struct MagnusAdapt4 <: OrdinaryDiffEqAdaptiveAlgorithm end volume={9}, pages={215--365}, year={2000}, - publisher={Cambridge University Press}}", "", "") + publisher={Cambridge University Press}}", "", "" +) struct CayleyEuler <: OrdinaryDiffEqAlgorithm end @doc generic_solver_docstring( @@ -166,9 +189,10 @@ struct CayleyEuler <: OrdinaryDiffEqAlgorithm end krylov = :off, m = 10, iop = 0, - """) + """ +) struct LinearExponential <: - OrdinaryDiffEqExponentialAlgorithm{1, false, Val{:forward}, Val{true}, nothing} + OrdinaryDiffEqExponentialAlgorithm{1, false, Val{:forward}, Val{true}, nothing} krylov::Symbol m::Int iop::Int diff --git a/lib/OrdinaryDiffEqLinear/src/integrator_interface.jl b/lib/OrdinaryDiffEqLinear/src/integrator_interface.jl index 070694d5d3..ddf120d208 100644 --- a/lib/OrdinaryDiffEqLinear/src/integrator_interface.jl +++ b/lib/OrdinaryDiffEqLinear/src/integrator_interface.jl @@ -1,5 +1,7 @@ -@inline function SciMLBase.get_tmp_cache(integrator, +@inline function SciMLBase.get_tmp_cache( + integrator, alg::LinearExponential, - cache::OrdinaryDiffEqMutableCache) - (cache.tmp,) + cache::OrdinaryDiffEqMutableCache + ) + return (cache.tmp,) end diff --git a/lib/OrdinaryDiffEqLinear/src/linear_caches.jl b/lib/OrdinaryDiffEqLinear/src/linear_caches.jl index c2867776d1..044427f757 100644 --- a/lib/OrdinaryDiffEqLinear/src/linear_caches.jl +++ b/lib/OrdinaryDiffEqLinear/src/linear_caches.jl @@ -2,7 +2,7 @@ abstract type LinearMutableCache <: OrdinaryDiffEqMutableCache end get_fsalfirstlast(cache::LinearMutableCache, u) = (cache.fsalfirst, cache.k) @cache struct MagnusMidpointCache{uType, rateType, WType, expType} <: - LinearMutableCache + LinearMutableCache u::uType uprev::uType uprev2::uType @@ -13,25 +13,29 @@ get_fsalfirstlast(cache::LinearMutableCache, u) = (cache.fsalfirst, cache.k) exp_cache::expType end -function alg_cache(alg::MagnusMidpoint, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MagnusMidpoint, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} W = false .* _vec(rate_prototype) .* _vec(rate_prototype)' # uEltype? k = zero(rate_prototype) fsalfirst = zero(rate_prototype) exp_cache = ExponentialUtilities.alloc_mem(f, ExpMethodGeneric()) - MagnusMidpointCache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) + return MagnusMidpointCache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) end struct MagnusMidpointConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::MagnusMidpoint, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MagnusMidpoint, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - MagnusMidpointConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return MagnusMidpointConstantCache() end @cache struct RKMK2Cache{uType, rateType, WType, expType} <: LinearMutableCache @@ -45,25 +49,29 @@ end exp_cache::expType end -function alg_cache(alg::RKMK2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RKMK2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} W = false .* _vec(rate_prototype) .* _vec(rate_prototype)' # uEltype? k = zero(rate_prototype) fsalfirst = zero(rate_prototype) exp_cache = ExponentialUtilities.alloc_mem(f, ExpMethodGeneric()) - RKMK2Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) + return RKMK2Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) end struct RKMK2ConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::RKMK2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RKMK2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - RKMK2ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return RKMK2ConstantCache() end @cache struct LieRK4Cache{uType, rateType, WType, expType} <: LinearMutableCache @@ -77,25 +85,29 @@ end exp_cache::expType end -function alg_cache(alg::LieRK4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::LieRK4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} W = false .* _vec(rate_prototype) .* _vec(rate_prototype)' # uEltype? k = zero(rate_prototype) fsalfirst = zero(rate_prototype) exp_cache = ExponentialUtilities.alloc_mem(f, ExpMethodGeneric()) - LieRK4Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) + return LieRK4Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) end struct LieRK4ConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::LieRK4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::LieRK4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - LieRK4ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return LieRK4ConstantCache() end @cache struct CG3Cache{uType, rateType, WType, expType} <: LinearMutableCache @@ -109,25 +121,29 @@ end exp_cache::expType end -function alg_cache(alg::CG3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CG3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} W = false .* _vec(rate_prototype) .* _vec(rate_prototype)' # uEltype? k = zero(rate_prototype) fsalfirst = zero(rate_prototype) exp_cache = ExponentialUtilities.alloc_mem(f, ExpMethodGeneric()) - CG3Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) + return CG3Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) end struct CG3ConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::CG3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CG3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CG3ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CG3ConstantCache() end @cache struct CG2Cache{uType, rateType, WType, expType} <: LinearMutableCache @@ -141,25 +157,29 @@ end exp_cache::expType end -function alg_cache(alg::CG2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CG2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} W = false .* _vec(rate_prototype) .* _vec(rate_prototype)' # uEltype? k = zero(rate_prototype) fsalfirst = zero(rate_prototype) exp_cache = ExponentialUtilities.alloc_mem(f, ExpMethodGeneric()) - CG2Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) + return CG2Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) end struct CG2ConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::CG2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CG2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CG2ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CG2ConstantCache() end @cache struct CG4aCache{uType, rateType, WType, expType} <: LinearMutableCache @@ -173,21 +193,25 @@ end exp_cache::expType end -function alg_cache(alg::CG4a, u, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, - tTypeNoUnits, uprev, uprev2, f, t, dt, reltol, p, calck, ::Val{true}) +function alg_cache( + alg::CG4a, u, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, + tTypeNoUnits, uprev, uprev2, f, t, dt, reltol, p, calck, ::Val{true} + ) W = false .* vec(rate_prototype) .* vec(rate_prototype)' # uEltype? k = zero(rate_prototype) fsalfirst = zero(rate_prototype) exp_cache = ExponentialUtilities.alloc_mem(f, ExpMethodGeneric()) - CG4aCache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) + return CG4aCache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) end struct CG4aConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::CG4a, u, rate_prototype, uEltypeNoUnits, - tTypeNoUnits, uprev, uprev2, f, t, dt, reltol, p, calck, ::Val{false}) - CG4aConstantCache() +function alg_cache( + alg::CG4a, u, rate_prototype, uEltypeNoUnits, + tTypeNoUnits, uprev, uprev2, f, t, dt, reltol, p, calck, ::Val{false} + ) + return CG4aConstantCache() end @cache struct RKMK4Cache{uType, rateType, WType, expType} <: LinearMutableCache @@ -201,29 +225,33 @@ end exp_cache::expType end -function alg_cache(alg::RKMK4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RKMK4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} W = false .* _vec(rate_prototype) .* _vec(rate_prototype)' # uEltype? k = zero(rate_prototype) fsalfirst = zero(rate_prototype) exp_cache = ExponentialUtilities.alloc_mem(f, ExpMethodGeneric()) - RKMK4Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) + return RKMK4Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) end struct RKMK4ConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::RKMK4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RKMK4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - RKMK4ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return RKMK4ConstantCache() end @cache struct MagnusAdapt4Cache{uType, rateType, WType, uNoUnitsType, expType} <: - LinearMutableCache + LinearMutableCache u::uType uprev::uType uprev2::uType @@ -236,10 +264,12 @@ end exp_cache::expType end -function alg_cache(alg::MagnusAdapt4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MagnusAdapt4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} W = false .* _vec(rate_prototype) .* _vec(rate_prototype)' # uEltype? k = zero(rate_prototype) fsalfirst = zero(rate_prototype) @@ -248,17 +278,19 @@ function alg_cache(alg::MagnusAdapt4, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmp, false) tmp = zero(u) exp_cache = ExponentialUtilities.alloc_mem(f, ExpMethodGeneric()) - MagnusAdapt4Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, utilde, atmp, exp_cache) + return MagnusAdapt4Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, utilde, atmp, exp_cache) end struct MagnusAdapt4ConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::MagnusAdapt4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MagnusAdapt4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - MagnusAdapt4ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return MagnusAdapt4ConstantCache() end @cache struct MagnusNC8Cache{uType, rateType, WType, expType} <: LinearMutableCache @@ -272,25 +304,29 @@ end exp_cache::expType end -function alg_cache(alg::MagnusNC8, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MagnusNC8, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} W = false .* _vec(rate_prototype) .* _vec(rate_prototype)' # uEltype? k = zero(rate_prototype) fsalfirst = zero(rate_prototype) exp_cache = ExponentialUtilities.alloc_mem(f, ExpMethodGeneric()) - MagnusNC8Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) + return MagnusNC8Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) end struct MagnusNC8ConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::MagnusNC8, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MagnusNC8, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - MagnusNC8ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return MagnusNC8ConstantCache() end @cache struct MagnusGL4Cache{uType, rateType, WType, expType} <: LinearMutableCache @@ -304,25 +340,29 @@ end exp_cache::expType end -function alg_cache(alg::MagnusGL4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MagnusGL4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} W = false .* _vec(rate_prototype) .* _vec(rate_prototype)' # uEltype? k = zero(rate_prototype) fsalfirst = zero(rate_prototype) exp_cache = ExponentialUtilities.alloc_mem(f, ExpMethodGeneric()) - MagnusGL4Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) + return MagnusGL4Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) end struct MagnusGL4ConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::MagnusGL4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MagnusGL4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - MagnusGL4ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return MagnusGL4ConstantCache() end @cache struct MagnusGL8Cache{uType, rateType, WType, expType} <: LinearMutableCache @@ -336,25 +376,29 @@ end exp_cache::expType end -function alg_cache(alg::MagnusGL8, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MagnusGL8, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} W = false .* _vec(rate_prototype) .* _vec(rate_prototype)' # uEltype? k = zero(rate_prototype) fsalfirst = zero(rate_prototype) exp_cache = ExponentialUtilities.alloc_mem(f, ExpMethodGeneric()) - MagnusGL8Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) + return MagnusGL8Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) end struct MagnusGL8ConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::MagnusGL8, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MagnusGL8, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - MagnusGL8ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return MagnusGL8ConstantCache() end @cache struct MagnusNC6Cache{uType, rateType, WType, expType} <: LinearMutableCache @@ -368,25 +412,29 @@ end exp_cache::expType end -function alg_cache(alg::MagnusNC6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MagnusNC6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} W = false .* _vec(rate_prototype) .* _vec(rate_prototype)' # uEltype? k = zero(rate_prototype) fsalfirst = zero(rate_prototype) exp_cache = ExponentialUtilities.alloc_mem(f, ExpMethodGeneric()) - MagnusNC6Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) + return MagnusNC6Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) end struct MagnusNC6ConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::MagnusNC6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MagnusNC6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - MagnusNC6ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return MagnusNC6ConstantCache() end @cache struct MagnusGL6Cache{uType, rateType, WType, expType} <: LinearMutableCache @@ -400,28 +448,32 @@ end exp_cache::expType end -function alg_cache(alg::MagnusGL6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MagnusGL6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} W = false .* _vec(rate_prototype) .* _vec(rate_prototype)' # uEltype? k = zero(rate_prototype) fsalfirst = zero(rate_prototype) exp_cache = ExponentialUtilities.alloc_mem(f, ExpMethodGeneric()) - MagnusGL6Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) + return MagnusGL6Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) end struct MagnusGL6ConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::MagnusGL6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MagnusGL6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - MagnusGL6ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return MagnusGL6ConstantCache() end @cache struct MagnusGauss4Cache{uType, rateType, WType, expType} <: - LinearMutableCache + LinearMutableCache u::uType uprev::uType uprev2::uType @@ -432,25 +484,29 @@ end exp_cache::expType end -function alg_cache(alg::MagnusGauss4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MagnusGauss4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} W = false .* _vec(rate_prototype) .* _vec(rate_prototype)' # uEltype? k = zero(rate_prototype) fsalfirst = zero(rate_prototype) exp_cache = ExponentialUtilities.alloc_mem(f, ExpMethodGeneric()) - MagnusGauss4Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) + return MagnusGauss4Cache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) end struct MagnusGauss4ConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::MagnusGauss4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MagnusGauss4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - MagnusGauss4ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return MagnusGauss4ConstantCache() end @cache struct LieEulerCache{uType, rateType, WType, expType} <: LinearMutableCache @@ -464,25 +520,29 @@ end exp_cache::expType end -function alg_cache(alg::LieEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::LieEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} W = false .* _vec(rate_prototype) .* _vec(rate_prototype)' # uEltype? k = zero(rate_prototype) fsalfirst = zero(rate_prototype) exp_cache = ExponentialUtilities.alloc_mem(f, ExpMethodGeneric()) - LieEulerCache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) + return LieEulerCache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) end struct LieEulerConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::LieEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::LieEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - LieEulerConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return LieEulerConstantCache() end @cache struct CayleyEulerCache{uType, rateType} <: LinearMutableCache @@ -494,27 +554,31 @@ end k::rateType end -function alg_cache(alg::CayleyEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CayleyEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k = zero(rate_prototype) fsalfirst = zero(rate_prototype) - CayleyEulerCache(u, uprev, zero(u), zero(u), fsalfirst, k) + return CayleyEulerCache(u, uprev, zero(u), zero(u), fsalfirst, k) end struct CayleyEulerConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::CayleyEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CayleyEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CayleyEulerConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CayleyEulerConstantCache() end @cache struct MagnusLeapfrogCache{uType, rateType, WType, expType} <: - LinearMutableCache + LinearMutableCache u::uType uprev::uType uprev2::uType @@ -525,38 +589,44 @@ end exp_cache::expType end -function alg_cache(alg::MagnusLeapfrog, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MagnusLeapfrog, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} W = false .* _vec(rate_prototype) .* _vec(rate_prototype)' # uEltype? k = zero(rate_prototype) fsalfirst = zero(rate_prototype) exp_cache = ExponentialUtilities.alloc_mem(f, ExpMethodGeneric()) - MagnusLeapfrogCache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) + return MagnusLeapfrogCache(u, uprev, uprev2, zero(u), fsalfirst, W, k, exp_cache) end struct MagnusLeapfrogConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::MagnusLeapfrog, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MagnusLeapfrog, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - MagnusLeapfrogConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return MagnusLeapfrogConstantCache() end struct LinearExponentialConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::LinearExponential, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::LinearExponential, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - LinearExponentialConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return LinearExponentialConstantCache() end @cache struct LinearExponentialCache{uType, rateType, KsType, expType} <: - LinearMutableCache + LinearMutableCache u::uType uprev::uType tmp::uType @@ -571,18 +641,21 @@ function _phiv_timestep_caches(u_prototype, maxiter::Int, p::Int) n = length(u_prototype) T = eltype(u_prototype) u = zero(u_prototype) # stores the current state - W = similar(u_prototype, n, p + 1) # stores the w vectors - P = similar(u_prototype, n, p + 2) # stores output from phiv! + W = similar(u_prototype, n, p + 1) # stores the w vectors + P = similar(u_prototype, n, p + 2) # stores output from phiv! Ks = KrylovSubspace{T, T, typeof(similar(u_prototype, size(u_prototype, 1), 2))}( - n, maxiter) # stores output from arnoldi! + n, maxiter + ) # stores output from arnoldi! phiv_cache = PhivCache(u_prototype, maxiter, p + 1) # cache used by phiv! (need +1 for error estimation) return u, W, P, Ks, phiv_cache end -function alg_cache(alg::LinearExponential, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::LinearExponential, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) rtmp = zero(rate_prototype) n = length(u) @@ -601,5 +674,5 @@ function alg_cache(alg::LinearExponential, u, rate_prototype, ::Type{uEltypeNoUn throw(ArgumentError("Unknown krylov setting $(alg.krylov). Can be :off, :simple or :adaptive.")) end exp_cache = ExponentialUtilities.alloc_mem(f, ExpMethodGeneric()) - LinearExponentialCache(u, uprev, tmp, rtmp, KsCache, exp_cache) + return LinearExponentialCache(u, uprev, tmp, rtmp, KsCache, exp_cache) end diff --git a/lib/OrdinaryDiffEqLinear/src/linear_perform_step.jl b/lib/OrdinaryDiffEqLinear/src/linear_perform_step.jl index 21e9902a3b..22c60430ec 100644 --- a/lib/OrdinaryDiffEqLinear/src/linear_perform_step.jl +++ b/lib/OrdinaryDiffEqLinear/src/linear_perform_step.jl @@ -5,7 +5,7 @@ function initialize!(integrator, cache::MagnusMidpointCache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::MagnusMidpointCache, repeat_step = false) @@ -19,15 +19,17 @@ function perform_step!(integrator, cache::MagnusMidpointCache, repeat_step = fal update_coefficients!(L, u, p, t + dt / 2) if alg.krylov - u .= expv(dt, L, u; m = min(alg.m, size(L, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + u .= expv( + dt, L, u; m = min(alg.m, size(L, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) else A = convert(AbstractMatrix, L) u .= exponential!(dt * A, exp_method, exp_cache) * u end integrator.f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::LieRK4Cache) integrator.kshortsize = 2 @@ -36,7 +38,7 @@ function initialize!(integrator, cache::LieRK4Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::LieRK4Cache, repeat_step = false) @@ -67,18 +69,22 @@ function perform_step!(integrator, cache::LieRK4Cache, repeat_step = false) y1_2 = exponential!((3 * k1 + 2 * k2 + 2 * k3 - k4) / 12, exp_method, exp_cache) * uprev if alg.krylov - u .= expv((1 / 12), (-k1 + 2 * k2 + 2 * k3 + 3 * k4), y1_2; + u .= expv( + (1 / 12), (-k1 + 2 * k2 + 2 * k3 + 3 * k4), y1_2; m = min(alg.m, size(L, 1)), opnorm = integrator.opts.internalopnorm, - iop = alg.iop) + iop = alg.iop + ) else - u .= exponential!((1 / 12) * (-k1 + 2 * k2 + 2 * k3 + 3 * k4), + u .= exponential!( + (1 / 12) * (-k1 + 2 * k2 + 2 * k3 + 3 * k4), exp_method, - exp_cache) * - y1_2 + exp_cache + ) * + y1_2 end integrator.f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::RKMK4Cache) @@ -88,7 +94,7 @@ function initialize!(integrator, cache::RKMK4Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::RKMK4Cache, repeat_step = false) @@ -103,25 +109,31 @@ function perform_step!(integrator, cache::RKMK4Cache, repeat_step = false) k1 = dt * convert(AbstractMatrix, L) update_coefficients!(L, exponential!(k1 / 2, exp_method, exp_cache) * uprev, p, t) k2 = dt * convert(AbstractMatrix, L) - update_coefficients!(L, + update_coefficients!( + L, exponential!(k1 / 2 - (k1 * k2 - k2 * k1) / 8, exp_method, exp_cache) * uprev, p, - t) + t + ) k3 = dt * convert(AbstractMatrix, L) update_coefficients!(L, exponential!(k3, exp_method, exp_cache) * uprev, p, t) k4 = dt * convert(AbstractMatrix, L) if alg.krylov - u .= expv(1 / 6, (k1 + 2 * k2 + 2 * k3 + k4 - (k1 * k4 - k4 * k1) / 2), uprev; + u .= expv( + 1 / 6, (k1 + 2 * k2 + 2 * k3 + k4 - (k1 * k4 - k4 * k1) / 2), uprev; m = min(alg.m, size(L, 1)), opnorm = integrator.opts.internalopnorm, - iop = alg.iop) + iop = alg.iop + ) else - u .= exponential!((1 / 6) * (k1 + 2 * k2 + 2 * k3 + k4 - (k1 * k4 - k4 * k1) / 2), + u .= exponential!( + (1 / 6) * (k1 + 2 * k2 + 2 * k3 + k4 - (k1 * k4 - k4 * k1) / 2), exp_method, - exp_cache) * uprev + exp_cache + ) * uprev end integrator.f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::RKMK2Cache) @@ -131,7 +143,7 @@ function initialize!(integrator, cache::RKMK2Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::RKMK2Cache, repeat_step = false) @@ -147,14 +159,16 @@ function perform_step!(integrator, cache::RKMK2Cache, repeat_step = false) update_coefficients!(L, exponential!(k1, exp_method, exp_cache) * uprev, p, t) k2 = dt * convert(AbstractMatrix, L) if alg.krylov - u .= expv(1 / 2, (k1 + k2), uprev; m = min(alg.m, size(L, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + u .= expv( + 1 / 2, (k1 + k2), uprev; m = min(alg.m, size(L, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) else u .= exponential!((1 / 2) * (k1 + k2), exp_method, exp_cache) * uprev end integrator.f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::CG3Cache) @@ -164,7 +178,7 @@ function initialize!(integrator, cache::CG3Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::CG3Cache, repeat_step = false) @@ -180,16 +194,18 @@ function perform_step!(integrator, cache::CG3Cache, repeat_step = false) update_coefficients!(L, v2, p, t + (3 * dt / 4)) B = deepcopy(convert(AbstractMatrix, L)) v3 = exponential!((119 / 216) * dt * B, exp_method, exp_cache) * - exponential!((17 / 108) * dt * A, exp_method, exp_cache) * uprev + exponential!((17 / 108) * dt * A, exp_method, exp_cache) * uprev update_coefficients!(L, v3, p, t + (17 * dt / 24)) C = convert(AbstractMatrix, L) - u .= (exponential!(dt * (24 / 17) * C, exp_method, exp_cache) * - exponential!(dt * (-2 / 3) * B, exp_method, exp_cache) * - exponential!(dt * (13 / 51) * A, exp_method, exp_cache)) * - uprev + u .= ( + exponential!(dt * (24 / 17) * C, exp_method, exp_cache) * + exponential!(dt * (-2 / 3) * B, exp_method, exp_cache) * + exponential!(dt * (13 / 51) * A, exp_method, exp_cache) + ) * + uprev integrator.f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::CG2Cache) @@ -199,7 +215,7 @@ function initialize!(integrator, cache::CG2Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::CG2Cache, repeat_step = false) @@ -213,11 +229,13 @@ function perform_step!(integrator, cache::CG2Cache, repeat_step = false) k1 = dt * convert(AbstractMatrix, L) update_coefficients!(L, exponential!(k1, exp_method, exp_cache) * uprev, p, t) k2 = dt * convert(AbstractMatrix, L) - u .= (exponential!((1 / 2) * (k1), exp_method, exp_cache) * - (exponential!((1 / 2) * k2, exp_method, exp_cache))) * uprev + u .= ( + exponential!((1 / 2) * (k1), exp_method, exp_cache) * + (exponential!((1 / 2) * k2, exp_method, exp_cache)) + ) * uprev integrator.f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::CG4aCache) @@ -227,7 +245,7 @@ function initialize!(integrator, cache::CG4aCache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::CG4aCache, repeat_step = false) @@ -243,28 +261,30 @@ function perform_step!(integrator, cache::CG4aCache, repeat_step = false) update_coefficients!(L, v2, p, t + (0.8177227988124852 * dt)) B = deepcopy(convert(AbstractMatrix, L)) v3 = exponential!((0.3199876375476427) * dt * B, exp_method, exp_cache) * - exponential!((0.0659864263556022) * dt * A, exp_method, exp_cache) * uprev + exponential!((0.0659864263556022) * dt * A, exp_method, exp_cache) * uprev update_coefficients!(L, v3, p, t + (0.3859740639032449 * dt)) C = deepcopy(convert(AbstractMatrix, L)) v4 = exponential!((0.9214417194464946) * dt * C, exp_method, exp_cache) * - exponential!((0.4997857776773573) * dt * B, exp_method, exp_cache) * - exponential!((-1.0969984448371582) * dt * A, exp_method, exp_cache) * uprev + exponential!((0.4997857776773573) * dt * B, exp_method, exp_cache) * + exponential!((-1.0969984448371582) * dt * A, exp_method, exp_cache) * uprev update_coefficients!(L, v4, p, t + (0.3242290522866937 * dt)) D = deepcopy(convert(AbstractMatrix, L)) v5 = exponential!((0.3552358559023322) * dt * D, exp_method, exp_cache) * - exponential!((0.2390958372307326) * dt * C, exp_method, exp_cache) * - exponential!((1.3918565724203246) * dt * B, exp_method, exp_cache) * - exponential!((-1.1092979392113465) * dt * A, exp_method, exp_cache) * uprev + exponential!((0.2390958372307326) * dt * C, exp_method, exp_cache) * + exponential!((1.3918565724203246) * dt * B, exp_method, exp_cache) * + exponential!((-1.1092979392113465) * dt * A, exp_method, exp_cache) * uprev update_coefficients!(L, v5, p, t + (0.8768903263420429 * dt)) E = convert(AbstractMatrix, L) - u .= (exponential!(dt * (0.3322195591068374) * E, exp_method, exp_cache) * - exponential!(dt * (-0.1907142565505889) * D, exp_method, exp_cache) * - exponential!(dt * (0.7397813985370780) * C, exp_method, exp_cache) * - exponential!(dt * (-0.0183698531564020) * B, exp_method, exp_cache) * - exponential!(dt * (0.1370831520630755) * A, exp_method, exp_cache)) * uprev + u .= ( + exponential!(dt * (0.3322195591068374) * E, exp_method, exp_cache) * + exponential!(dt * (-0.1907142565505889) * D, exp_method, exp_cache) * + exponential!(dt * (0.739781398537078) * C, exp_method, exp_cache) * + exponential!(dt * (-0.018369853156402) * B, exp_method, exp_cache) * + exponential!(dt * (0.1370831520630755) * A, exp_method, exp_cache) + ) * uprev integrator.f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::MagnusAdapt4Cache) @@ -274,7 +294,7 @@ function initialize!(integrator, cache::MagnusAdapt4Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::MagnusAdapt4Cache, repeat_step = false) @@ -308,7 +328,7 @@ function perform_step!(integrator, cache::MagnusAdapt4Cache, repeat_step = false Q4 = k4 - 2 * k2 + k1 y5 = (1 / 2) * Q1 + (1 / 4) * Q2 + (1 / 3) * Q3 - (1 / 24) * Q4 - - (1 / 48) * (Q1 * Q2 - Q2 * Q1) + (1 / 48) * (Q1 * Q2 - Q2 * Q1) update_coefficients!(L, exponential!(y5, exp_method, exp_cache) * uprev, p, t + dt / 2) A4 = deepcopy(convert(AbstractMatrix, L)) k5 = dt * A4 @@ -321,16 +341,18 @@ function perform_step!(integrator, cache::MagnusAdapt4Cache, repeat_step = false Q6 = k6 - 2 * k2 + k1 v4 = Q1 + Q2 + (2 / 3) * Q5 + (1 / 6) * Q6 - - (1 / 6) * (Q1 * (Q2 - Q3 + Q5 + (1 / 2) * Q6) - (Q2 - Q3 + Q5 + (1 / 2) * Q6) * Q1) + (1 / 6) * (Q1 * (Q2 - Q3 + Q5 + (1 / 2) * Q6) - (Q2 - Q3 + Q5 + (1 / 2) * Q6) * Q1) u .= exponential!(v4, exp_method, exp_cache) * uprev integrator.f(integrator.fsallast, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - if integrator.opts.adaptive + return if integrator.opts.adaptive utilde = u - exponential!(y6, exp_method, exp_cache) * uprev - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -342,7 +364,7 @@ function initialize!(integrator, cache::MagnusNC8Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::MagnusNC8Cache, repeat_step = false) @@ -384,30 +406,38 @@ function perform_step!(integrator, cache::MagnusNC8Cache, repeat_step = false) Q1 = (-38 * B0 / 5 + 24 * B2) * B3 - B3 * (-38 * B0 / 5 + 24 * B2) Q2 = (63 * B0 / 5 - 84 * B2) * (-5 * B1 / 28 + B3) - - (-5 * B1 / 28 + B3) * (63 * B0 / 5 - 84 * B2) - Q3 = (19 * B0 / 28 - 15 * B2 / 7) * (B0 * (B2 + dt * (61 * Q1 / 588 - Q2 / 12)) - - (B2 + dt * (61 * Q1 / 588 - Q2 / 12)) * B0) - - (B0 * (B2 + dt * (61 * Q1 / 588 - Q2 / 12)) - - (B2 + dt * (61 * Q1 / 588 - Q2 / 12)) * B0) * (19 * B0 / 28 - 15 * B2 / 7) + (-5 * B1 / 28 + B3) * (63 * B0 / 5 - 84 * B2) + Q3 = (19 * B0 / 28 - 15 * B2 / 7) * ( + B0 * (B2 + dt * (61 * Q1 / 588 - Q2 / 12)) - + (B2 + dt * (61 * Q1 / 588 - Q2 / 12)) * B0 + ) - + ( + B0 * (B2 + dt * (61 * Q1 / 588 - Q2 / 12)) - + (B2 + dt * (61 * Q1 / 588 - Q2 / 12)) * B0 + ) * (19 * B0 / 28 - 15 * B2 / 7) Q4 = B3 * (20 * Q1 / 7 + 10 * Q2) - (20 * Q1 / 7 + 10 * Q2) * B3 Q5 = (-6025 * B0 / 4116 + 2875 * B2 / 343) * (B2 * Q1 - Q1 * B2) - - (B2 * Q1 - Q1 * B2) * (-6025 * B0 / 4116 + 2875 * B2 / 343) + (B2 * Q1 - Q1 * B2) * (-6025 * B0 / 4116 + 2875 * B2 / 343) Q6 = B3 * (20 * (Q3 + Q4) / 7 + 820 * dt * Q5 / 189) - - (20 * (Q3 + Q4) / 7 + 820 * dt * Q5 / 189) * B3 - Q7 = (-1 / 42) * (B0 * (B0 * (Q3 - Q4 / 3 + dt * Q5) - (Q3 - Q4 / 3 + dt * Q5) * B0) - - (B0 * (Q3 - Q4 / 3 + dt * Q5) - (Q3 - Q4 / 3 + dt * Q5) * B0) * B0) + (20 * (Q3 + Q4) / 7 + 820 * dt * Q5 / 189) * B3 + Q7 = (-1 / 42) * ( + B0 * (B0 * (Q3 - Q4 / 3 + dt * Q5) - (Q3 - Q4 / 3 + dt * Q5) * B0) - + (B0 * (Q3 - Q4 / 3 + dt * Q5) - (Q3 - Q4 / 3 + dt * Q5) * B0) * B0 + ) Ω1 = dt * B0 Ω2 = (dt^2) * (Q1 + Q2) Ω3_4_5_6 = (dt^3) * (Q3 + Q4) + (dt^4) * (Q5 + Q6) + (dt^5) * Q7 if alg.krylov - u .= expv(1.0, Ω1 + Ω2 + Ω3_4_5_6, uprev; m = min(alg.m, size(L, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + u .= expv( + 1.0, Ω1 + Ω2 + Ω3_4_5_6, uprev; m = min(alg.m, size(L, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) else u .= exponential!(Ω1 + Ω2 + Ω3_4_5_6, exp_method, exp_cache) * uprev end integrator.f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::MagnusGL4Cache) @@ -417,7 +447,7 @@ function initialize!(integrator, cache::MagnusGL4Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::MagnusGL4Cache, repeat_step = false) @@ -436,13 +466,15 @@ function perform_step!(integrator, cache::MagnusGL4Cache, repeat_step = false) Ω = (dt / 2) * (A1 + A2) - (dt^2) * (sqrt(3) / 12) * (A1 * A2 - A2 * A1) if alg.krylov - u .= expv(1.0, Ω, uprev; m = min(alg.m, size(L, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + u .= expv( + 1.0, Ω, uprev; m = min(alg.m, size(L, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) else u .= exponential!(Ω, exp_method, exp_cache) * uprev end integrator.f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::MagnusGL8Cache) @@ -452,7 +484,7 @@ function initialize!(integrator, cache::MagnusGL8Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::MagnusGL8Cache, repeat_step = false) @@ -486,30 +518,38 @@ function perform_step!(integrator, cache::MagnusGL8Cache, repeat_step = false) B3 = (1 / 2) * ((v1^3) * w1 * R1 + (v2^3) * w2 * R2) Q1 = (-38 * B0 / 5 + 24 * B2) * B3 - B3 * (-38 * B0 / 5 + 24 * B2) Q2 = (63 * B0 / 5 - 84 * B2) * (-5 * B1 / 28 + B3) - - (-5 * B1 / 28 + B3) * (63 * B0 / 5 - 84 * B2) - Q3 = (19 * B0 / 28 - 15 * B2 / 7) * (B0 * (B2 + dt * (61 * Q1 / 588 - Q2 / 12)) - - (B2 + dt * (61 * Q1 / 588 - Q2 / 12)) * B0) - - (B0 * (B2 + dt * (61 * Q1 / 588 - Q2 / 12)) - - (B2 + dt * (61 * Q1 / 588 - Q2 / 12)) * B0) * (19 * B0 / 28 - 15 * B2 / 7) + (-5 * B1 / 28 + B3) * (63 * B0 / 5 - 84 * B2) + Q3 = (19 * B0 / 28 - 15 * B2 / 7) * ( + B0 * (B2 + dt * (61 * Q1 / 588 - Q2 / 12)) - + (B2 + dt * (61 * Q1 / 588 - Q2 / 12)) * B0 + ) - + ( + B0 * (B2 + dt * (61 * Q1 / 588 - Q2 / 12)) - + (B2 + dt * (61 * Q1 / 588 - Q2 / 12)) * B0 + ) * (19 * B0 / 28 - 15 * B2 / 7) Q4 = B3 * (20 * Q1 / 7 + 10 * Q2) - (20 * Q1 / 7 + 10 * Q2) * B3 Q5 = (-6025 * B0 / 4116 + 2875 * B2 / 343) * (B2 * Q1 - Q1 * B2) - - (B2 * Q1 - Q1 * B2) * (-6025 * B0 / 4116 + 2875 * B2 / 343) + (B2 * Q1 - Q1 * B2) * (-6025 * B0 / 4116 + 2875 * B2 / 343) Q6 = B3 * (20 * (Q3 + Q4) / 7 + 820 * dt * Q5 / 189) - - (20 * (Q3 + Q4) / 7 + 820 * dt * Q5 / 189) * B3 - Q7 = (-1 / 42) * (B0 * (B0 * (Q3 - Q4 / 3 + dt * Q5) - (Q3 - Q4 / 3 + dt * Q5) * B0) - - (B0 * (Q3 - Q4 / 3 + dt * Q5) - (Q3 - Q4 / 3 + dt * Q5) * B0) * B0) + (20 * (Q3 + Q4) / 7 + 820 * dt * Q5 / 189) * B3 + Q7 = (-1 / 42) * ( + B0 * (B0 * (Q3 - Q4 / 3 + dt * Q5) - (Q3 - Q4 / 3 + dt * Q5) * B0) - + (B0 * (Q3 - Q4 / 3 + dt * Q5) - (Q3 - Q4 / 3 + dt * Q5) * B0) * B0 + ) Ω1 = dt * B0 Ω2 = (dt^2) * (Q1 + Q2) Ω3_4_5_6 = (dt^3) * (Q3 + Q4) + (dt^4) * (Q5 + Q6) + (dt^5) * Q7 if alg.krylov - u .= expv(1.0, Ω1 + Ω2 + Ω3_4_5_6, uprev; m = min(alg.m, size(L, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + u .= expv( + 1.0, Ω1 + Ω2 + Ω3_4_5_6, uprev; m = min(alg.m, size(L, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) else u .= exponential!(Ω1 + Ω2 + Ω3_4_5_6, exp_method, exp_cache) * uprev end integrator.f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::MagnusNC6Cache) @@ -519,7 +559,7 @@ function initialize!(integrator, cache::MagnusNC6Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::MagnusNC6Cache, repeat_step = false) @@ -546,17 +586,21 @@ function perform_step!(integrator, cache::MagnusNC6Cache, repeat_step = false) Ω1 = dt * B0 Ω2 = (dt * dt) * (B1 * (3 * B0 / 2 - 6 * B2) - (3 * B0 / 2 - 6 * B2) * B1) Ω3_4 = (dt * dt) * - (B0 * (B0 * (dt * B2 / 2 - Ω2 / 60) - (dt * B2 / 2 - Ω2 / 60) * B0) - - (B0 * (dt * B2 / 2 - Ω2 / 60) - (dt * B2 / 2 - Ω2 / 60) * B0) * B0) + - (3 * dt / 5) * (B1 * Ω2 - Ω2 * B1) + ( + B0 * (B0 * (dt * B2 / 2 - Ω2 / 60) - (dt * B2 / 2 - Ω2 / 60) * B0) - + (B0 * (dt * B2 / 2 - Ω2 / 60) - (dt * B2 / 2 - Ω2 / 60) * B0) * B0 + ) + + (3 * dt / 5) * (B1 * Ω2 - Ω2 * B1) if alg.krylov - u .= expv(1.0, Ω1 + Ω2 + Ω3_4, uprev; m = min(alg.m, size(L, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + u .= expv( + 1.0, Ω1 + Ω2 + Ω3_4, uprev; m = min(alg.m, size(L, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) else u .= exponential!(Ω1 + Ω2 + Ω3_4, exp_method, exp_cache) * uprev end integrator.f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::MagnusGL6Cache) @@ -566,7 +610,7 @@ function initialize!(integrator, cache::MagnusGL6Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::MagnusGL6Cache, repeat_step = false) @@ -589,17 +633,21 @@ function perform_step!(integrator, cache::MagnusGL6Cache, repeat_step = false) Ω1 = dt * B0 Ω2 = (dt * dt) * (B1 * (3 * B0 / 2 - 6 * B2) - (3 * B0 / 2 - 6 * B2) * B1) Ω3_4 = (dt * dt) * - (B0 * (B0 * (dt * B2 / 2 - Ω2 / 60) - (dt * B2 / 2 - Ω2 / 60) * B0) - - (B0 * (dt * B2 / 2 - Ω2 / 60) - (dt * B2 / 2 - Ω2 / 60) * B0) * B0) + - (3 * dt / 5) * (B1 * Ω2 - Ω2 * B1) + ( + B0 * (B0 * (dt * B2 / 2 - Ω2 / 60) - (dt * B2 / 2 - Ω2 / 60) * B0) - + (B0 * (dt * B2 / 2 - Ω2 / 60) - (dt * B2 / 2 - Ω2 / 60) * B0) * B0 + ) + + (3 * dt / 5) * (B1 * Ω2 - Ω2 * B1) if alg.krylov - u .= expv(1.0, Ω1 + Ω2 + Ω3_4, uprev; m = min(alg.m, size(L, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + u .= expv( + 1.0, Ω1 + Ω2 + Ω3_4, uprev; m = min(alg.m, size(L, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) else u .= exponential!(Ω1 + Ω2 + Ω3_4, exp_method, exp_cache) * uprev end integrator.f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::MagnusGauss4Cache) @@ -609,7 +657,7 @@ function initialize!(integrator, cache::MagnusGauss4Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::MagnusGauss4Cache, repeat_step = false) @@ -625,18 +673,21 @@ function perform_step!(integrator, cache::MagnusGauss4Cache, repeat_step = false update_coefficients!(L, uprev, p, t + dt * (1 / 2 - sqrt(3) / 6)) B = convert(AbstractMatrix, L) if alg.krylov - u .= expv(dt, (A + B) ./ 2 + (dt * sqrt(3)) .* (B * A - A * B) ./ 12, u; + u .= expv( + dt, (A + B) ./ 2 + (dt * sqrt(3)) .* (B * A - A * B) ./ 12, u; m = min(alg.m, size(L, 1)), opnorm = integrator.opts.internalopnorm, - iop = alg.iop) + iop = alg.iop + ) else u .= exponential!( (dt / 2) .* (A + B) + - ((dt^2) * (sqrt(3) / 12)) .* (B * A - A * B), + ((dt^2) * (sqrt(3) / 12)) .* (B * A - A * B), exp_method, - exp_cache) * uprev + exp_cache + ) * uprev end integrator.f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::LieEulerCache) @@ -646,7 +697,7 @@ function initialize!(integrator, cache::LieEulerCache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::LieEulerCache, repeat_step = false) @@ -660,14 +711,16 @@ function perform_step!(integrator, cache::LieEulerCache, repeat_step = false) update_coefficients!(L, u, p, t) if alg.krylov - u .= expv(dt, L, u; m = min(alg.m, size(L, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + u .= expv( + dt, L, u; m = min(alg.m, size(L, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) else u .= exponential!(dt * convert(AbstractMatrix, L), exp_method, exp_cache) * u end integrator.f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::MagnusLeapfrogCache) @@ -677,23 +730,27 @@ function initialize!(integrator, cache::MagnusLeapfrogCache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end -function perform_step!(integrator, cache::MagnusLeapfrogCache, repeat_step = false, - alg_extrapolates = true, iter = 1) +function perform_step!( + integrator, cache::MagnusLeapfrogCache, repeat_step = false, + alg_extrapolates = true, iter = 1 + ) (; t, dt, uprev, uprev2, u, p, iter) = integrator alg = unwrap_alg(integrator, nothing) (; W, k, tmp, exp_cache) = cache mass_matrix = integrator.f.mass_matrix exp_method = ExpMethodGeneric() # println("iter : $iter") - if iter == 1 + return if iter == 1 L = integrator.f.f update_coefficients!(L, u, p, t + dt / 2) if alg.krylov - u .= expv(dt, L, u; m = min(alg.m, size(L, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + u .= expv( + dt, L, u; m = min(alg.m, size(L, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) else A = convert(AbstractMatrix, L) u .= exponential!(dt * A, exp_method, exp_cache) * u @@ -706,8 +763,10 @@ function perform_step!(integrator, cache::MagnusLeapfrogCache, repeat_step = fal L = integrator.f.f update_coefficients!(L, u, p, t) if alg.krylov - u .= expv(2 * dt, L, uprev2; m = min(alg.m, size(L, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + u .= expv( + 2 * dt, L, uprev2; m = min(alg.m, size(L, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) else A = convert(AbstractMatrix, L) u .= exponential!(2 * dt * A, exp_method, exp_cache) * uprev2 @@ -728,11 +787,13 @@ function initialize!(integrator, cache::LinearExponentialConstantCache) integrator.kshortsize = 2 integrator.k = typeof(integrator.k)(undef, integrator.kshortsize) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -function perform_step!(integrator, cache::LinearExponentialConstantCache, - repeat_step = false) +function perform_step!( + integrator, cache::LinearExponentialConstantCache, + repeat_step = false + ) (; t, dt, uprev, f, p) = integrator alg = unwrap_alg(integrator, nothing) A = convert(AbstractMatrix, f.f) # assume f to be an ODEFunction wrapped around a linear operator @@ -740,12 +801,16 @@ function perform_step!(integrator, cache::LinearExponentialConstantCache, if alg.krylov == :off u = exponential!(dt * A, ExpMethodGeneric()) * integrator.u elseif alg.krylov == :simple - u = expv(dt, A, integrator.u; m = min(alg.m, size(A, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + u = expv( + dt, A, integrator.u; m = min(alg.m, size(A, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) else - u = expv_timestep(dt, A, integrator.u; m = min(alg.m, size(A, 1)), iop = alg.iop, + u = expv_timestep( + dt, A, integrator.u; m = min(alg.m, size(A, 1)), iop = alg.iop, opnorm = integrator.opts.internalopnorm, - tol = integrator.opts.reltol) + tol = integrator.opts.reltol + ) end # Update integrator state @@ -753,7 +818,7 @@ function perform_step!(integrator, cache::LinearExponentialConstantCache, OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function initialize!(integrator, cache::LinearExponentialCache) @@ -767,7 +832,7 @@ function initialize!(integrator, cache::LinearExponentialCache) integrator.kshortsize = 2 resize!(integrator.k, integrator.kshortsize) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end function perform_step!(integrator, cache::LinearExponentialCache, repeat_step = false) @@ -782,20 +847,24 @@ function perform_step!(integrator, cache::LinearExponentialCache, repeat_step = mul!(tmp, E, u) elseif alg.krylov == :simple Ks, expv_cache = KsCache - arnoldi!(Ks, A, u; m = min(alg.m, size(A, 1)), - opnorm = integrator.opts.internalopnorm, iop = alg.iop) + arnoldi!( + Ks, A, u; m = min(alg.m, size(A, 1)), + opnorm = integrator.opts.internalopnorm, iop = alg.iop + ) expv!(tmp, dt, Ks; cache = expv_cache) else - expv_timestep!(tmp, dt, A, u; adaptive = true, caches = KsCache, + expv_timestep!( + tmp, dt, A, u; adaptive = true, caches = KsCache, m = min(alg.m, size(A, 1)), iop = alg.iop, opnorm = integrator.opts.internalopnorm, - tol = integrator.opts.reltol) + tol = integrator.opts.reltol + ) end # Update integrator state u .= tmp f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # integrator.k is automatically set due to aliasing end @@ -813,7 +882,7 @@ function initialize!(integrator, cache::CayleyEulerConstantCache) integrator.kshortsize = 2 integrator.k = typeof(integrator.k)(undef, integrator.kshortsize) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end function perform_step!(integrator, cache::CayleyEulerConstantCache, repeat_step = false) @@ -836,7 +905,7 @@ function perform_step!(integrator, cache::CayleyEulerConstantCache, repeat_step OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function initialize!(integrator, cache::CayleyEulerCache) @@ -846,7 +915,7 @@ function initialize!(integrator, cache::CayleyEulerCache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::CayleyEulerCache, repeat_step = false) @@ -869,5 +938,5 @@ function perform_step!(integrator, cache::CayleyEulerCache, repeat_step = false) # Update integrator state integrator.f(integrator.fsallast, u, p, t + dt) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end diff --git a/lib/OrdinaryDiffEqLinear/test/jet.jl b/lib/OrdinaryDiffEqLinear/test/jet.jl index c6c146e8f7..22f419bac2 100644 --- a/lib/OrdinaryDiffEqLinear/test/jet.jl +++ b/lib/OrdinaryDiffEqLinear/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqLinear, target_defined_modules = true, mode = :typo) -end \ No newline at end of file + OrdinaryDiffEqLinear, target_defined_modules = true, mode = :typo + ) +end diff --git a/lib/OrdinaryDiffEqLinear/test/linear_method_tests.jl b/lib/OrdinaryDiffEqLinear/test/linear_method_tests.jl index e7b70586e0..6511c77504 100644 --- a/lib/OrdinaryDiffEqLinear/test/linear_method_tests.jl +++ b/lib/OrdinaryDiffEqLinear/test/linear_method_tests.jl @@ -11,93 +11,93 @@ solve(prob, LinearExponential(krylov = :off)) sol1 = solve(prob, LinearExponential(krylov = :off))(1.0) sol2 = solve(prob, LinearExponential(krylov = :simple))(1.0) sol3 = solve(prob, LinearExponential(krylov = :adaptive))(1.0) -sol4 = solve(prob, Rosenbrock23(), reltol = 1e-12, abstol = 1e-12)(1.0) +sol4 = solve(prob, Rosenbrock23(), reltol = 1.0e-12, abstol = 1.0e-12)(1.0) sol_analytic = exp(1.0 * Matrix(A)) * u0 -@test isapprox(sol1, sol_analytic, rtol = 1e-10) -@test isapprox(sol2, sol_analytic, rtol = 1e-10) -@test isapprox(sol3, sol_analytic, rtol = 1e-10) -@test isapprox(sol4, sol_analytic, rtol = 1e-8) +@test isapprox(sol1, sol_analytic, rtol = 1.0e-10) +@test isapprox(sol2, sol_analytic, rtol = 1.0e-10) +@test isapprox(sol3, sol_analytic, rtol = 1.0e-10) +@test isapprox(sol4, sol_analytic, rtol = 1.0e-8) # u' = A(t)u solvers function update_func!(A, u, p, t) A[1, 1] = 0 A[2, 1] = sin(u[1]) A[1, 2] = -1 - A[2, 2] = 0 + return A[2, 2] = 0 end A = MatrixOperator(ones(2, 2), update_func! = update_func!) prob = ODEProblem(A, ones(2), (10, 50.0)) sol1 = solve(prob, Vern9(), dt = 1 / 4) sol2 = solve(prob, RKMK2(), dt = 1 / 4) dts = 1 ./ 2 .^ (10:-1:5) -test_setup = Dict(:alg => Vern9(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => Vern9(), :reltol => 1.0e-14, :abstol => 1.0e-14) sim = analyticless_test_convergence(dts, prob, RKMK2(), test_setup) -@test sim.𝒪est[:l2]≈2 atol=0.2 +@test sim.𝒪est[:l2] ≈ 2 atol = 0.2 A = MatrixOperator(ones(2, 2), update_func! = update_func!) prob = ODEProblem(A, ones(2), (0, 30.0)) sol1 = solve(prob, Vern9(), dt = 1 / 4) sol2 = solve(prob, RKMK4(), dt = 1 / 4) dts = (0.38) .^ (6:-1:1) -test_setup = Dict(:alg => Vern9(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => Vern9(), :reltol => 1.0e-14, :abstol => 1.0e-14) sim = analyticless_test_convergence(dts, prob, RKMK4(), test_setup) -@test sim.𝒪est[:l2]≈4 atol=0.22 +@test sim.𝒪est[:l2] ≈ 4 atol = 0.22 A = MatrixOperator(ones(2, 2), update_func! = update_func!) prob = ODEProblem(A, ones(2), (0, 30.0)) sol1 = solve(prob, Vern9(), dt = 1 / 4) sol2 = solve(prob, LieRK4(), dt = 1 / 4) dts = 1 ./ 2 .^ (7:-1:1) -test_setup = Dict(:alg => Vern9(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => Vern9(), :reltol => 1.0e-14, :abstol => 1.0e-14) sim = analyticless_test_convergence(dts, prob, LieRK4(), test_setup) -@test sim.𝒪est[:l2]≈5 atol=0.2 +@test sim.𝒪est[:l2] ≈ 5 atol = 0.2 A = MatrixOperator(ones(2, 2), update_func! = update_func!) prob = ODEProblem(A, ones(2), (0, 30.0)) sol1 = solve(prob, Vern9(), dt = 1 / 4) sol2 = solve(prob, CG2(), dt = 1 / 4) dts = 1 ./ 2 .^ (7:-1:1) -test_setup = Dict(:alg => Vern9(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => Vern9(), :reltol => 1.0e-14, :abstol => 1.0e-14) sim = analyticless_test_convergence(dts, prob, CG2(), test_setup) -@test sim.𝒪est[:l2]≈2 atol=0.2 +@test sim.𝒪est[:l2] ≈ 2 atol = 0.2 A = MatrixOperator(ones(2, 2), update_func! = update_func!) prob = ODEProblem(A, ones(2), (0, 20.0)) sol1 = solve(prob, Vern6(), dt = 1 / 8) sol2 = solve(prob, CG3(), dt = 1 / 8) dts = 1 ./ 2 .^ (10:-1:3) -test_setup = Dict(:alg => Vern6(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => Vern6(), :reltol => 1.0e-14, :abstol => 1.0e-14) sim = analyticless_test_convergence(dts, prob, CG3(), test_setup) -@test sim.𝒪est[:l2]≈3 atol=0.2 +@test sim.𝒪est[:l2] ≈ 3 atol = 0.2 A = MatrixOperator(ones(2, 2), update_func! = update_func!) prob = ODEProblem(A, ones(2), (0, 30.0)) sol1 = solve(prob, Vern9(), dt = 1 / 4) sol2 = solve(prob, CG4a(), dt = 1 / 4) dts = (0.38) .^ (6:-1:1) -test_setup = Dict(:alg => Vern9(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => Vern9(), :reltol => 1.0e-14, :abstol => 1.0e-14) sim = analyticless_test_convergence(dts, prob, CG4a(), test_setup) -@test sim.𝒪est[:l2]≈4 atol=0.28 +@test sim.𝒪est[:l2] ≈ 4 atol = 0.28 function update_func!(A, u, p, t) A[1, 1] = 0 A[2, 1] = 1 A[1, 2] = -2 * (1 - cos(u[2]) - u[2] * sin(u[2])) - A[2, 2] = 0 + return A[2, 2] = 0 end A = MatrixOperator(ones(2, 2), update_func! = update_func!) prob = ODEProblem(A, ones(2), (30, 150.0)) dts = 1 ./ 2 .^ (7:-1:1) -test_setup = Dict(:alg => Tsit5(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => Tsit5(), :reltol => 1.0e-14, :abstol => 1.0e-14) sim = analyticless_test_convergence(dts, prob, MagnusAdapt4(), test_setup) -@test sim.𝒪est[:l2]≈4 atol=0.2 +@test sim.𝒪est[:l2] ≈ 4 atol = 0.2 function update_func!(A, u, p, t) A[1, 1] = cos(t) A[2, 1] = sin(t) A[1, 2] = -sin(t) - A[2, 2] = cos(t) + return A[2, 2] = cos(t) end A = MatrixOperator(ones(2, 2), update_func! = update_func!) prob = ODEProblem(A, ones(2), (0.0, 5.0)) @@ -105,11 +105,11 @@ dts = 1 ./ 2 .^ (10:-1:1) sol = solve(prob, MagnusMidpoint(), dt = 1 / 4) dts = 1 ./ 2 .^ (10:-1:1) -test_setup = Dict(:alg => Vern9(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => Vern9(), :reltol => 1.0e-14, :abstol => 1.0e-14) sim = analyticless_test_convergence(dts, prob, MagnusMidpoint(), test_setup) -@test sim.𝒪est[:l2]≈2 atol=0.2 +@test sim.𝒪est[:l2] ≈ 2 atol = 0.2 sim = analyticless_test_convergence(dts, prob, MagnusMidpoint(krylov = true), test_setup) -@test sim.𝒪est[:l2]≈2 atol=0.2 +@test sim.𝒪est[:l2] ≈ 2 atol = 0.2 A = MatrixOperator(ones(2, 2), update_func! = update_func!) prob = ODEProblem(A, ones(2), (0.0, 5.0)) @@ -117,11 +117,11 @@ dts = 1 ./ 2 .^ (10:-1:1) sol = solve(prob, MagnusLeapfrog(), dt = 1 / 4) dts = 1 ./ 2 .^ (10:-1:1) -test_setup = Dict(:alg => Vern9(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => Vern9(), :reltol => 1.0e-14, :abstol => 1.0e-14) sim = analyticless_test_convergence(dts, prob, MagnusLeapfrog(), test_setup) -@test sim.𝒪est[:l2]≈2 atol=0.2 +@test sim.𝒪est[:l2] ≈ 2 atol = 0.2 sim = analyticless_test_convergence(dts, prob, MagnusLeapfrog(krylov = true), test_setup) -@test sim.𝒪est[:l2]≈2 atol=0.2 +@test sim.𝒪est[:l2] ≈ 2 atol = 0.2 A = MatrixOperator(ones(2, 2), update_func! = update_func!) prob = ODEProblem(A, ones(2), (0.5, 5.0)) @@ -129,11 +129,11 @@ dts = 1 ./ 2 .^ (10:-1:1) sol = solve(prob, LieEuler(), dt = 1 / 4) dts = 1 ./ 2 .^ (10:-1:1) -test_setup = Dict(:alg => Vern9(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => Vern9(), :reltol => 1.0e-14, :abstol => 1.0e-14) sim = analyticless_test_convergence(dts, prob, LieEuler(), test_setup) -@test sim.𝒪est[:l2]≈1 atol=0.2 +@test sim.𝒪est[:l2] ≈ 1 atol = 0.2 sim = analyticless_test_convergence(dts, prob, LieEuler(krylov = true), test_setup) -@test sim.𝒪est[:l2]≈1 atol=0.2 +@test sim.𝒪est[:l2] ≈ 1 atol = 0.2 A = MatrixOperator(ones(2, 2), update_func! = update_func!) prob = ODEProblem(A, ones(2), (1.0, 6.0)) @@ -141,66 +141,66 @@ dts = 1 ./ 2 .^ (10:-1:1) sol = solve(prob, MagnusGauss4(), dt = 1 / 4) dts = 1 ./ 2 .^ (7:-1:1) -test_setup = Dict(:alg => Vern6(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => Vern6(), :reltol => 1.0e-14, :abstol => 1.0e-14) sim = analyticless_test_convergence(dts, prob, MagnusGauss4(), test_setup) -@test sim.𝒪est[:l2]≈4 atol=0.2 +@test sim.𝒪est[:l2] ≈ 4 atol = 0.2 sim = analyticless_test_convergence(dts, prob, MagnusGauss4(krylov = true), test_setup) -@test sim.𝒪est[:l2]≈4 atol=0.2 +@test sim.𝒪est[:l2] ≈ 4 atol = 0.2 A = MatrixOperator(ones(2, 2), update_func! = update_func!) prob = ODEProblem(A, ones(2), (1.0, 6.0)) dts = 1 ./ 2 .^ (4:-1:1) -test_setup = Dict(:alg => Vern9(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => Vern9(), :reltol => 1.0e-14, :abstol => 1.0e-14) sim = analyticless_test_convergence(dts, prob, MagnusNC6(), test_setup) -@test sim.𝒪est[:l2]≈6 atol=0.2 +@test sim.𝒪est[:l2] ≈ 6 atol = 0.2 sim = analyticless_test_convergence(dts, prob, MagnusNC6(krylov = true), test_setup) -@test sim.𝒪est[:l2]≈6 atol=0.2 +@test sim.𝒪est[:l2] ≈ 6 atol = 0.2 A = MatrixOperator(ones(2, 2), update_func! = update_func!) prob = ODEProblem(A, ones(2), (1.0, 6.0)) sol = solve(prob, MagnusGL6(), dt = 1 / 10) dts = 1 ./ 2 .^ (4:-1:1) -test_setup = Dict(:alg => Vern9(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => Vern9(), :reltol => 1.0e-14, :abstol => 1.0e-14) sim = analyticless_test_convergence(dts, prob, MagnusGL6(), test_setup) -@test sim.𝒪est[:l2]≈6 atol=0.3 +@test sim.𝒪est[:l2] ≈ 6 atol = 0.3 sim = analyticless_test_convergence(dts, prob, MagnusGL6(krylov = true), test_setup) -@test sim.𝒪est[:l2]≈6 atol=0.3 +@test sim.𝒪est[:l2] ≈ 6 atol = 0.3 A = MatrixOperator(ones(2, 2), update_func! = update_func!) prob = ODEProblem(A, ones(2), (0.0, 100.0)) dts = 1.775 .^ (5:-1:0) -test_setup = Dict(:alg => Vern9(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => Vern9(), :reltol => 1.0e-14, :abstol => 1.0e-14) sim = analyticless_test_convergence(dts, prob, MagnusGL8(), test_setup) -@test sim.𝒪est[:l2]≈8 atol=0.2 +@test sim.𝒪est[:l2] ≈ 8 atol = 0.2 sim = analyticless_test_convergence(dts, prob, MagnusGL8(krylov = true), test_setup) -@test sim.𝒪est[:l2]≈8 atol=0.2 +@test sim.𝒪est[:l2] ≈ 8 atol = 0.2 A = MatrixOperator(ones(2, 2), update_func! = update_func!) prob = ODEProblem(A, ones(2), (0.0, 100.0)) dts = 1.773 .^ (5:-1:0) -test_setup = Dict(:alg => Vern9(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => Vern9(), :reltol => 1.0e-14, :abstol => 1.0e-14) sim = analyticless_test_convergence(dts, prob, MagnusNC8(), test_setup) -@test sim.𝒪est[:l2]≈8 atol=0.2 +@test sim.𝒪est[:l2] ≈ 8 atol = 0.2 sim = analyticless_test_convergence(dts, prob, MagnusNC8(krylov = true), test_setup) -@test sim.𝒪est[:l2]≈8 atol=0.2 +@test sim.𝒪est[:l2] ≈ 8 atol = 0.2 A = MatrixOperator(ones(2, 2), update_func! = update_func!) prob = ODEProblem(A, ones(2), (1.0, 6.0)) dts = 1 ./ 2 .^ (7:-1:1) -test_setup = Dict(:alg => Vern6(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => Vern6(), :reltol => 1.0e-14, :abstol => 1.0e-14) sim = analyticless_test_convergence(dts, prob, MagnusGL4(), test_setup) -@test sim.𝒪est[:l2]≈4 atol=0.2 +@test sim.𝒪est[:l2] ≈ 4 atol = 0.2 sim = analyticless_test_convergence(dts, prob, MagnusGL4(krylov = true), test_setup) -@test sim.𝒪est[:l2]≈4 atol=0.2 +@test sim.𝒪est[:l2] ≈ 4 atol = 0.2 A = MatrixOperator(ones(2, 2), update_func! = update_func!) prob = ODEProblem(A, ones(2), (0, 20.0)) sol1 = solve(prob, Vern6(), dt = 1 / 8) sol2 = solve(prob, CG3(), dt = 1 / 8) dts = 1 ./ 2 .^ (10:-1:3) -test_setup = Dict(:alg => Vern6(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => Vern6(), :reltol => 1.0e-14, :abstol => 1.0e-14) sim = analyticless_test_convergence(dts, prob, CG3(), test_setup) -@test sim.𝒪est[:l2]≈3 atol=0.2 +@test sim.𝒪est[:l2] ≈ 3 atol = 0.2 function B(y::AbstractMatrix) b = similar(y) @@ -224,7 +224,7 @@ function B(y::AbstractMatrix) end function update_func(A, u, p, t) - B(u) + return B(u) end function update_func!(A, u, p, t) @@ -233,8 +233,10 @@ function update_func!(A, u, p, t) end η = diagm([1.0, 2, 3, 4, 5]) -A = MatrixOperator(Matrix{eltype(η)}(I(size(η, 1))), update_func = update_func, - update_func! = update_func!) +A = MatrixOperator( + Matrix{eltype(η)}(I(size(η, 1))), update_func = update_func, + update_func! = update_func! +) dts = 1 ./ 2 .^ (10:-1:2) tspan = (0.0, 20.0) @@ -245,12 +247,12 @@ sol = solve(prob, CayleyEuler(), dt = 1 / 10) @test sol.retcode == ReturnCode.Success eig_err = [norm(eigvals(sol[i]) - eigvals(η)) for i in eachindex(sol)] -@test all(≈(e, 0, atol = 1e-13) for e in eig_err) +@test all(≈(e, 0, atol = 1.0e-13) for e in eig_err) -test_setup = Dict(:alg => Vern9(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => Vern9(), :reltol => 1.0e-14, :abstol => 1.0e-14) sim = analyticless_test_convergence(dts, prob, CayleyEuler(), test_setup) -@test sim.𝒪est[:l2]≈1 atol=0.2 +@test sim.𝒪est[:l2] ≈ 1 atol = 0.2 # OOP f = SplitFunction(A, (u, p, t) -> -u * B(u), _func_cache = similar(η)) @@ -259,9 +261,9 @@ sol = solve(prob, CayleyEuler(), dt = 1 / 10) @test sol.retcode == ReturnCode.Success eig_err = [norm(eigvals(sol[i]) - eigvals(η)) for i in eachindex(sol)] -@test all(≈(e, 0, atol = 1e-13) for e in eig_err) +@test all(≈(e, 0, atol = 1.0e-13) for e in eig_err) -test_setup = Dict(:alg => Vern9(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => Vern9(), :reltol => 1.0e-14, :abstol => 1.0e-14) sim = analyticless_test_convergence(dts, prob, CayleyEuler(), test_setup) -@test sim.𝒪est[:l2]≈1 atol=0.2 +@test sim.𝒪est[:l2] ≈ 1 atol = 0.2 diff --git a/lib/OrdinaryDiffEqLinear/test/qa.jl b/lib/OrdinaryDiffEqLinear/test/qa.jl index f5a6790cc8..223770117f 100644 --- a/lib/OrdinaryDiffEqLinear/test/qa.jl +++ b/lib/OrdinaryDiffEqLinear/test/qa.jl @@ -5,4 +5,4 @@ using Aqua Aqua.test_all( OrdinaryDiffEqLinear ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqLinear/test/runtests.jl b/lib/OrdinaryDiffEqLinear/test/runtests.jl index cb444f2ebe..3d4103f9a1 100644 --- a/lib/OrdinaryDiffEqLinear/test/runtests.jl +++ b/lib/OrdinaryDiffEqLinear/test/runtests.jl @@ -2,4 +2,4 @@ using SafeTestsets @time @safetestset "Linear Methods Tests" include("linear_method_tests.jl") @time @safetestset "JET Tests" include("jet.jl") -@time @safetestset "Aqua" include("qa.jl") \ No newline at end of file +@time @safetestset "Aqua" include("qa.jl") diff --git a/lib/OrdinaryDiffEqLowOrderRK/src/OrdinaryDiffEqLowOrderRK.jl b/lib/OrdinaryDiffEqLowOrderRK/src/OrdinaryDiffEqLowOrderRK.jl index 611edfefc6..648db39776 100644 --- a/lib/OrdinaryDiffEqLowOrderRK/src/OrdinaryDiffEqLowOrderRK.jl +++ b/lib/OrdinaryDiffEqLowOrderRK/src/OrdinaryDiffEqLowOrderRK.jl @@ -1,22 +1,22 @@ module OrdinaryDiffEqLowOrderRK import OrdinaryDiffEqCore: alg_order, isfsal, beta2_default, beta1_default, - alg_stability_size, - ssp_coefficient, OrdinaryDiffEqAlgorithm, - OrdinaryDiffEqExponentialAlgorithm, - explicit_rk_docstring, generic_solver_docstring, - trivial_limiter!, - OrdinaryDiffEqAdaptiveAlgorithm, - unwrap_alg, initialize!, perform_step!, - calculate_residuals, - calculate_residuals!, _ode_addsteps!, @OnDemandTableauExtract, - constvalue, - OrdinaryDiffEqMutableCache, uses_uprev, - OrdinaryDiffEqConstantCache, @fold, - @cache, CompiledFloats, alg_cache, CompositeAlgorithm, - AutoAlgSwitch, _ode_interpolant, _ode_interpolant!, full_cache, - accept_step_controller, DerivativeOrderNotPossibleError, - du_cache, u_cache, get_fsalfirstlast, copyat_or_push! + alg_stability_size, + ssp_coefficient, OrdinaryDiffEqAlgorithm, + OrdinaryDiffEqExponentialAlgorithm, + explicit_rk_docstring, generic_solver_docstring, + trivial_limiter!, + OrdinaryDiffEqAdaptiveAlgorithm, + unwrap_alg, initialize!, perform_step!, + calculate_residuals, + calculate_residuals!, _ode_addsteps!, @OnDemandTableauExtract, + constvalue, + OrdinaryDiffEqMutableCache, uses_uprev, + OrdinaryDiffEqConstantCache, @fold, + @cache, CompiledFloats, alg_cache, CompositeAlgorithm, + AutoAlgSwitch, _ode_interpolant, _ode_interpolant!, full_cache, + accept_step_controller, DerivativeOrderNotPossibleError, + du_cache, u_cache, get_fsalfirstlast, copyat_or_push! using SciMLBase import MuladdMacro: @muladd import FastBroadcast: @.. @@ -42,9 +42,9 @@ include("split_perform_step.jl") include("fixed_timestep_perform_step.jl") export Euler, SplitEuler, Heun, Ralston, Midpoint, RK4, - BS3, OwrenZen3, OwrenZen4, OwrenZen5, BS5, - DP5, Anas5, RKO65, FRK65, RKM, MSRK5, MSRK6, - PSRK4p7q6, PSRK3p5q4, PSRK3p6q5, Stepanov5, SIR54, - Alshina2, Alshina3, Alshina6, AutoDP5 + BS3, OwrenZen3, OwrenZen4, OwrenZen5, BS5, + DP5, Anas5, RKO65, FRK65, RKM, MSRK5, MSRK6, + PSRK4p7q6, PSRK3p5q4, PSRK3p6q5, Stepanov5, SIR54, + Alshina2, Alshina3, Alshina6, AutoDP5 end diff --git a/lib/OrdinaryDiffEqLowOrderRK/src/alg_utils.jl b/lib/OrdinaryDiffEqLowOrderRK/src/alg_utils.jl index 464f23297c..85beb43479 100644 --- a/lib/OrdinaryDiffEqLowOrderRK/src/alg_utils.jl +++ b/lib/OrdinaryDiffEqLowOrderRK/src/alg_utils.jl @@ -44,6 +44,7 @@ ssp_coefficient(alg::Euler) = 1 function prepare_alg( alg::SplitEuler, u0::AbstractArray, - p, prob) - alg + p, prob + ) + return alg end diff --git a/lib/OrdinaryDiffEqLowOrderRK/src/algorithms.jl b/lib/OrdinaryDiffEqLowOrderRK/src/algorithms.jl index d328dc2d3c..ea00f589f7 100644 --- a/lib/OrdinaryDiffEqLowOrderRK/src/algorithms.jl +++ b/lib/OrdinaryDiffEqLowOrderRK/src/algorithms.jl @@ -4,32 +4,35 @@ "Explicit Runge-Kutta Method.", """E. Hairer, S.P. Norsett, G. Wanner, (1993) Solving Ordinary Differential Equations I. Nonstiff Problems. 2nd Edition. Springer Series in Computational Mathematics, - Springer-Verlag.""", "", "") + Springer-Verlag.""", "", "" +) struct Euler <: OrdinaryDiffEqAlgorithm end @doc generic_solver_docstring( "1st order fully explicit method for testing split accuracy", "SplitEuler", "Split Method.", - "", "", "") + "", "", "" +) struct SplitEuler <: - OrdinaryDiffEqExponentialAlgorithm{0, false, Val{:forward}, Val{true}, nothing} end + OrdinaryDiffEqExponentialAlgorithm{0, false, Val{:forward}, Val{true}, nothing} end @doc explicit_rk_docstring( "The second order Heun's method. Uses embedded Euler method for adaptivity.", "Heun", references = """E. Hairer, S.P. Norsett, G. Wanner, (1993) Solving Ordinary Differential Equations I. Nonstiff Problems. 2nd Edition. Springer Series in Computational Mathematics, - Springer-Verlag.""") + Springer-Verlag.""" +) Base.@kwdef struct Heun{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function Heun(stage_limiter!, step_limiter! = trivial_limiter!) - Heun(stage_limiter!, step_limiter!, False()) + return Heun(stage_limiter!, step_limiter!, False()) end @doc explicit_rk_docstring( @@ -37,16 +40,17 @@ end "Ralston", references = """E. Hairer, S.P. Norsett, G. Wanner, (1993) Solving Ordinary Differential Equations I. Nonstiff Problems. 2nd Edition. Springer Series in Computational Mathematics, - Springer-Verlag.""") + Springer-Verlag.""" +) Base.@kwdef struct Ralston{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function Ralston(stage_limiter!, step_limiter! = trivial_limiter!) - Ralston(stage_limiter!, step_limiter!, False()) + return Ralston(stage_limiter!, step_limiter!, False()) end @doc explicit_rk_docstring( @@ -54,19 +58,21 @@ end "Midpoint", references = """E. Hairer, S.P. Norsett, G. Wanner, (1993) Solving Ordinary Differential Equations I. Nonstiff Problems. 2nd Edition. Springer Series in Computational Mathematics, - Springer-Verlag.""") + Springer-Verlag.""" +) Base.@kwdef struct Midpoint{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function Midpoint(stage_limiter!, step_limiter! = trivial_limiter!) - Midpoint(stage_limiter!, step_limiter!, False()) + return Midpoint(stage_limiter!, step_limiter!, False()) end -@doc explicit_rk_docstring("The canonical Runge-Kutta Order 4 method. Uses a defect control for adaptive stepping using maximum error over the whole interval. Classic fourth-order method. Good for medium accuracy calculations.", +@doc explicit_rk_docstring( + "The canonical Runge-Kutta Order 4 method. Uses a defect control for adaptive stepping using maximum error over the whole interval. Classic fourth-order method. Good for medium accuracy calculations.", "RK4", references = "@article{shampine2005solving, title={Solving ODEs and DDEs with residual control}, @@ -77,7 +83,8 @@ end pages={113--127}, year={2005}, publisher={Elsevier} - }") + }" +) Base.@kwdef struct RK4{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -85,7 +92,7 @@ Base.@kwdef struct RK4{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAdapt end # for backwards compatibility function RK4(stage_limiter!, step_limiter! = trivial_limiter!) - RK4(stage_limiter!, step_limiter!, False()) + return RK4(stage_limiter!, step_limiter!, False()) end @doc explicit_rk_docstring( @@ -100,7 +107,8 @@ end pages={321--325}, year={1989}, publisher={Elsevier} - }") + }" +) Base.@kwdef struct BS3{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -108,7 +116,7 @@ Base.@kwdef struct BS3{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAdapt end # for backwards compatibility function BS3(stage_limiter!, step_limiter! = trivial_limiter!) - BS3(stage_limiter!, step_limiter!, False()) + return BS3(stage_limiter!, step_limiter!, False()) end @doc explicit_rk_docstring( @@ -123,16 +131,17 @@ end pages={1488--1501}, year={1992}, publisher={SIAM} - }") + }" +) Base.@kwdef struct OwrenZen3{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function OwrenZen3(stage_limiter!, step_limiter! = trivial_limiter!) - OwrenZen3(stage_limiter!, step_limiter!, False()) + return OwrenZen3(stage_limiter!, step_limiter!, False()) end @doc explicit_rk_docstring( @@ -147,16 +156,17 @@ end pages={1488--1501}, year={1992}, publisher={SIAM} - }") + }" +) Base.@kwdef struct OwrenZen4{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function OwrenZen4(stage_limiter!, step_limiter! = trivial_limiter!) - OwrenZen4(stage_limiter!, step_limiter!, False()) + return OwrenZen4(stage_limiter!, step_limiter!, False()) end @doc explicit_rk_docstring( @@ -171,16 +181,17 @@ end pages={1488--1501}, year={1992}, publisher={SIAM} - }") + }" +) Base.@kwdef struct OwrenZen5{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function OwrenZen5(stage_limiter!, step_limiter! = trivial_limiter!) - OwrenZen5(stage_limiter!, step_limiter!, False()) + return OwrenZen5(stage_limiter!, step_limiter!, False()) end @doc explicit_rk_docstring( @@ -197,7 +208,8 @@ end publisher={Elsevier} }", extra_keyword_description = """- `lazy`: determines if the lazy interpolant is used.""", - extra_keyword_default = "lazy = true") + extra_keyword_default = "lazy = true" +) Base.@kwdef struct BS5{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -206,7 +218,7 @@ Base.@kwdef struct BS5{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAdapt end # for backwards compatibility function BS5(stage_limiter!, step_limiter! = trivial_limiter!; lazy = true) - BS5(stage_limiter!, step_limiter!, False(), lazy) + return BS5(stage_limiter!, step_limiter!, False(), lazy) end @doc explicit_rk_docstring( @@ -221,7 +233,8 @@ end pages={19--26}, year={1980}, publisher={Elsevier} - }") + }" +) Base.@kwdef struct DP5{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -229,15 +242,16 @@ Base.@kwdef struct DP5{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAdapt end # for backwards compatibility function DP5(stage_limiter!, step_limiter! = trivial_limiter!) - DP5(stage_limiter!, step_limiter!, False()) + return DP5(stage_limiter!, step_limiter!, False()) end AutoDP5(alg; kwargs...) = AutoAlgSwitch(DP5(), alg; kwargs...) -@doc explicit_rk_docstring("4th order Runge-Kutta method designed for periodic problems.", +@doc explicit_rk_docstring( + "4th order Runge-Kutta method designed for periodic problems.", "Anas5", extra_keyword_description = """- `w`: a periodicity estimate, which when accurate the method becomes 5th order - (and is otherwise 4th order with less error for better estimates).""", + (and is otherwise 4th order with less error for better estimates).""", extra_keyword_default = "w = 1", references = """@article{anastassi2005optimized, title={An optimized Runge--Kutta method for the solution of orbital problems}, @@ -247,7 +261,8 @@ AutoDP5(alg; kwargs...) = AutoAlgSwitch(DP5(), alg; kwargs...) number={1}, pages={1--9}, year={2005}, - publisher={Elsevier}}""") + publisher={Elsevier}}""" +) Base.@kwdef struct Anas5{StageLimiter, StepLimiter, Thread, T} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -256,13 +271,15 @@ Base.@kwdef struct Anas5{StageLimiter, StepLimiter, Thread, T} <: OrdinaryDiffEq end # for backwards compatibility function Anas5(stage_limiter!, step_limiter! = trivial_limiter!; w = 1) - Anas5(stage_limiter!, step_limiter!, False(), w) + return Anas5(stage_limiter!, step_limiter!, False(), w) end -@doc explicit_rk_docstring("Tsitouras' Runge-Kutta-Oliver 6 stage 5th order method.", "RKO65", +@doc explicit_rk_docstring( + "Tsitouras' Runge-Kutta-Oliver 6 stage 5th order method.", "RKO65", references = "Tsitouras, Ch. \"Explicit Runge–Kutta methods for starting integration of Lane–Emden problem.\" Applied Mathematics and Computation 354 (2019): 353-364. - doi: https://doi.org/10.1016/j.amc.2019.02.047") + doi: https://doi.org/10.1016/j.amc.2019.02.047" +) Base.@kwdef struct RKO65{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -270,12 +287,13 @@ Base.@kwdef struct RKO65{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlg end # for backwards compatibility function RKO65(stage_limiter!, step_limiter! = trivial_limiter!) - RKO65(stage_limiter!, step_limiter!, False()) + return RKO65(stage_limiter!, step_limiter!, False()) end -@doc explicit_rk_docstring("Zero Dissipation Runge-Kutta of 6th order.", "FRK65", +@doc explicit_rk_docstring( + "Zero Dissipation Runge-Kutta of 6th order.", "FRK65", extra_keyword_description = """- `omega`: a periodicity phase estimate, - when accurate this method results in zero numerical dissipation.""", + when accurate this method results in zero numerical dissipation.""", extra_keyword_default = "omega = 0.0", references = """@article{medvedev2018fitted, title={Fitted modifications of Runge-Kutta pairs of orders 6 (5)}, @@ -285,9 +303,10 @@ end number={16}, pages={6184--6194}, year={2018}, - publisher={Wiley Online Library}}""") + publisher={Wiley Online Library}}""" +) Base.@kwdef struct FRK65{StageLimiter, StepLimiter, Thread, T} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() @@ -296,23 +315,25 @@ end # for backwards compatibility function FRK65(stage_limiter!, step_limiter! = trivial_limiter!; omega = 0.0) - FRK65(stage_limiter!, step_limiter!, False(), omega) + return FRK65(stage_limiter!, step_limiter!, False(), omega) end -@doc explicit_rk_docstring("""Method designed to have good stability properties +@doc explicit_rk_docstring( + """Method designed to have good stability properties when applied to pseudospectral discretizations of hyperbolic partial differential equaitons.""", "RKM", references = """@article{mead1999optimal, - title={Optimal Runge--Kutta methods for first order pseudospectral operators}, - author={Mead, JL and Renaut, RA}, - journal={Journal of Computational Physics}, - volume={152}, - number={1}, - pages={404--419}, - year={1999}, - publisher={Elsevier} - }""") + title={Optimal Runge--Kutta methods for first order pseudospectral operators}, + author={Mead, JL and Renaut, RA}, + journal={Journal of Computational Physics}, + volume={152}, + number={1}, + pages={404--419}, + year={1999}, + publisher={Elsevier} + }""" +) Base.@kwdef struct RKM{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -320,11 +341,13 @@ Base.@kwdef struct RKM{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgor end # for backwards compatibility function RKM(stage_limiter!, step_limiter! = trivial_limiter!) - RKM(stage_limiter!, step_limiter!, False()) + return RKM(stage_limiter!, step_limiter!, False()) end -@doc explicit_rk_docstring("5th order method.", "MSRK5", - references = "Misha Stepanov - https://arxiv.org/pdf/2202.08443.pdf : Figure 3.") +@doc explicit_rk_docstring( + "5th order method.", "MSRK5", + references = "Misha Stepanov - https://arxiv.org/pdf/2202.08443.pdf : Figure 3." +) Base.@kwdef struct MSRK5{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -332,11 +355,13 @@ Base.@kwdef struct MSRK5{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlg end # for backwards compatibility function MSRK5(stage_limiter!, step_limiter! = trivial_limiter!) - MSRK5(stage_limiter!, step_limiter!, False()) + return MSRK5(stage_limiter!, step_limiter!, False()) end -@doc explicit_rk_docstring("6th order method.", "MSRK6", - references = "Misha Stepanov - https://arxiv.org/pdf/2202.08443.pdf : Table4") +@doc explicit_rk_docstring( + "6th order method.", "MSRK6", + references = "Misha Stepanov - https://arxiv.org/pdf/2202.08443.pdf : Table4" +) Base.@kwdef struct MSRK6{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -344,10 +369,11 @@ Base.@kwdef struct MSRK6{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlg end # for backwards compatibility function MSRK6(stage_limiter!, step_limiter! = trivial_limiter!) - MSRK6(stage_limiter!, step_limiter!, False()) + return MSRK6(stage_limiter!, step_limiter!, False()) end -@doc explicit_rk_docstring("6-stage Pseudo-Symplectic method.", "PSRK4p7q6", +@doc explicit_rk_docstring( + "6-stage Pseudo-Symplectic method.", "PSRK4p7q6", references = "@article{Aubry1998, author = {A. Aubry and P. Chartier}, journal = {BIT Numer. Math.}, @@ -364,14 +390,16 @@ end year = {2017}, issn = {0021-9991}, doi = {https://doi.org/10.1016/j.jcp.2016.10.040}, - author = {F. Capuano and G. Coppola and L. Rández and L. {de Luca}},}") + author = {F. Capuano and G. Coppola and L. Rández and L. {de Luca}},}" +) Base.@kwdef struct PSRK4p7q6{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end -@doc explicit_rk_docstring("4-stage Pseudo-Symplectic method.", "PSRK3p5q4", +@doc explicit_rk_docstring( + "4-stage Pseudo-Symplectic method.", "PSRK3p5q4", references = "@article{Aubry1998, author = {A. Aubry and P. Chartier}, journal = {BIT Numer. Math.}, @@ -382,14 +410,16 @@ end title = {Explicit {R}unge–{K}utta schemes for incompressible flow with improved energy-conservation properties}, journal = {J. Comput. Phys.}, year = {2017}, - author = {F. Capuano and G. Coppola and L. Rández and L. {de Luca}},}") + author = {F. Capuano and G. Coppola and L. Rández and L. {de Luca}},}" +) Base.@kwdef struct PSRK3p5q4{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end -@doc explicit_rk_docstring("5-stage Pseudo-Symplectic method.", "PSRK3p6q5", +@doc explicit_rk_docstring( + "5-stage Pseudo-Symplectic method.", "PSRK3p6q5", references = "@article{Aubry1998, author = {A. Aubry and P. Chartier}, journal = {BIT Numer. Math.}, @@ -400,14 +430,16 @@ end title = {Explicit {R}unge–{K}utta schemes for incompressible flow with improved energy-conservation properties}, journal = {J. Comput. Phys.}, year = {2017}, - author = {F. Capuano and G. Coppola and L. Rández and L. {de Luca}},}") + author = {F. Capuano and G. Coppola and L. Rández and L. {de Luca}},}" +) Base.@kwdef struct PSRK3p6q5{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end -@doc explicit_rk_docstring("5th order method.", +@doc explicit_rk_docstring( + "5th order method.", "Stepanov5", references = "@article{Stepanov2021Embedded5, title={Embedded (4, 5) pairs of explicit 7-stage Runge–Kutta methods with FSAL property}, @@ -415,19 +447,21 @@ end journal={Calcolo}, year={2021}, volume={59} - }") + }" +) Base.@kwdef struct Stepanov5{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function Stepanov5(stage_limiter!, step_limiter! = trivial_limiter!) - Stepanov5(stage_limiter!, step_limiter!, False()) + return Stepanov5(stage_limiter!, step_limiter!, False()) end -@doc explicit_rk_docstring("5th order method suited for SIR-type epidemic models.", +@doc explicit_rk_docstring( + "5th order method suited for SIR-type epidemic models.", "SIR54", references = "@article{Kovalnogov2020RungeKuttaPS, title={Runge–Kutta pairs suited for SIR‐type epidemic models}, @@ -436,19 +470,21 @@ end year={2020}, volume={44}, pages={5210 - 5216} - }") + }" +) Base.@kwdef struct SIR54{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function SIR54(stage_limiter!, step_limiter! = trivial_limiter!) - SIR54(stage_limiter!, step_limiter!, False()) + return SIR54(stage_limiter!, step_limiter!, False()) end -@doc explicit_rk_docstring("2nd order, 2-stage Method with optimal parameters.", +@doc explicit_rk_docstring( + "2nd order, 2-stage Method with optimal parameters.", "Alshina2", references = "@article{Alshina2008, doi = {10.1134/s0965542508030068}, @@ -462,19 +498,21 @@ end author = {E. A. Alshina and E. M. Zaks and N. N. Kalitkin}, title = {Optimal first- to sixth-order accurate Runge-Kutta schemes}, journal = {Computational Mathematics and Mathematical Physics} - }") + }" +) Base.@kwdef struct Alshina2{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function Alshina2(stage_limiter!, step_limiter! = trivial_limiter!) - Alshina2(stage_limiter!, step_limiter!, False()) + return Alshina2(stage_limiter!, step_limiter!, False()) end -@doc explicit_rk_docstring("3rd order, 3-stage Method with optimal parameters.", +@doc explicit_rk_docstring( + "3rd order, 3-stage Method with optimal parameters.", "Alshina3", references = "@article{Alshina2008, doi = {10.1134/s0965542508030068}, @@ -488,19 +526,21 @@ end author = {E. A. Alshina and E. M. Zaks and N. N. Kalitkin}, title = {Optimal first- to sixth-order accurate Runge-Kutta schemes}, journal = {Computational Mathematics and Mathematical Physics} - }") + }" +) Base.@kwdef struct Alshina3{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function Alshina3(stage_limiter!, step_limiter! = trivial_limiter!) - Alshina3(stage_limiter!, step_limiter!, False()) + return Alshina3(stage_limiter!, step_limiter!, False()) end -@doc explicit_rk_docstring("6th order, 7-stage Method with optimal parameters.", +@doc explicit_rk_docstring( + "6th order, 7-stage Method with optimal parameters.", "Alshina6", references = "@article{Alshina2008, doi = {10.1134/s0965542508030068}, @@ -514,7 +554,8 @@ end author = {E. A. Alshina and E. M. Zaks and N. N. Kalitkin}, title = {Optimal first- to sixth-order accurate Runge-Kutta schemes}, journal = {Computational Mathematics and Mathematical Physics} - }") + }" +) Base.@kwdef struct Alshina6{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -522,5 +563,5 @@ Base.@kwdef struct Alshina6{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEq end # for backwards compatibility function Alshina6(stage_limiter!, step_limiter! = trivial_limiter!) - Alshina6(stage_limiter!, step_limiter!, False()) + return Alshina6(stage_limiter!, step_limiter!, False()) end diff --git a/lib/OrdinaryDiffEqLowOrderRK/src/fixed_timestep_perform_step.jl b/lib/OrdinaryDiffEqLowOrderRK/src/fixed_timestep_perform_step.jl index 61862e1171..253ac19600 100644 --- a/lib/OrdinaryDiffEqLowOrderRK/src/fixed_timestep_perform_step.jl +++ b/lib/OrdinaryDiffEqLowOrderRK/src/fixed_timestep_perform_step.jl @@ -7,18 +7,18 @@ function initialize!(integrator, cache::EulerConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end function perform_step!(integrator, cache::EulerConstantCache, repeat_step = false) (; t, dt, uprev, f, p) = integrator - @muladd u = @.. broadcast=false uprev+dt * integrator.fsalfirst + @muladd u = @.. broadcast = false uprev + dt * integrator.fsalfirst k = f(u, p, t + dt) # For the interpolation, needs k at the updated point OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.fsallast = k integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end get_fsalfirstlast(cache::EulerCache, u) = (cache.fsalfirst, cache.k) @@ -31,14 +31,14 @@ function initialize!(integrator, cache::EulerCache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::EulerCache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator - @muladd @.. broadcast=false u=uprev + dt * integrator.fsalfirst + @muladd @.. broadcast = false u = uprev + dt * integrator.fsalfirst f(integrator.fsallast, u, p, t + dt) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function initialize!(integrator, cache::Union{HeunConstantCache, RalstonConstantCache}) @@ -50,12 +50,14 @@ function initialize!(integrator, cache::Union{HeunConstantCache, RalstonConstant # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -@muladd function perform_step!(integrator, +@muladd function perform_step!( + integrator, cache::Union{HeunConstantCache, RalstonConstantCache}, - repeat_step = false) + repeat_step = false + ) (; t, dt, uprev, u, f, p, fsalfirst) = integrator # precalculations @@ -68,25 +70,27 @@ end a₃ = 3 * a₂ end - tmp = @.. broadcast=false uprev+a₁ * fsalfirst + tmp = @.. broadcast = false uprev + a₁ * fsalfirst k2 = f(tmp, p, t + a₁) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if cache isa HeunConstantCache - u = @.. broadcast=false uprev+a₂ * (fsalfirst + k2) + u = @.. broadcast = false uprev + a₂ * (fsalfirst + k2) else - u = @.. broadcast=false uprev+a₂*fsalfirst+a₃*k2 + u = @.. broadcast = false uprev + a₂ * fsalfirst + a₃ * k2 end if integrator.opts.adaptive if cache isa HeunConstantCache - tmp = @.. broadcast=false a₂*(k2 - fsalfirst) + tmp = @.. broadcast = false a₂ * (k2 - fsalfirst) else - tmp = @.. broadcast=false a₃*(k2 - fsalfirst) + tmp = @.. broadcast = false a₃ * (k2 - fsalfirst) end - atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end k = f(u, p, t + dt) @@ -107,11 +111,13 @@ function initialize!(integrator, cache::Union{HeunCache, RalstonCache}) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end -@muladd function perform_step!(integrator, cache::Union{HeunCache, RalstonCache}, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Union{HeunCache, RalstonCache}, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; fsalfirst, k, tmp, atmp, stage_limiter!, step_limiter!, thread) = cache @@ -125,31 +131,33 @@ end a₃ = 3 * a₂ end - @.. broadcast=false thread=thread tmp=uprev + a₁ * fsalfirst + @.. broadcast = false thread = thread tmp = uprev + a₁ * fsalfirst stage_limiter!(tmp, integrator, p, t + a₁) f(k, tmp, p, t + a₁) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if cache isa HeunCache - @.. broadcast=false thread=thread u=uprev + a₂ * (fsalfirst + k) + @.. broadcast = false thread = thread u = uprev + a₂ * (fsalfirst + k) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) else - @.. broadcast=false thread=thread u=uprev + a₂ * fsalfirst + a₃ * k + @.. broadcast = false thread = thread u = uprev + a₂ * fsalfirst + a₃ * k stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) end if integrator.opts.adaptive if cache isa HeunCache - @.. broadcast=false thread=thread tmp=a₂ * (k - fsalfirst) + @.. broadcast = false thread = thread tmp = a₂ * (k - fsalfirst) else - @.. broadcast=false thread=thread tmp=a₃ * (k - fsalfirst) + @.. broadcast = false thread = thread tmp = a₃ * (k - fsalfirst) end - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end f(integrator.fsallast, u, p, t + dt) # For the interpolation, needs k at the updated point @@ -165,23 +173,27 @@ function initialize!(integrator, cache::MidpointConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -@muladd function perform_step!(integrator, cache::MidpointConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::MidpointConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator halfdt = dt / 2 - tmp = @.. broadcast=false uprev+halfdt * integrator.fsalfirst + tmp = @.. broadcast = false uprev + halfdt * integrator.fsalfirst k = f(tmp, p, t + halfdt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - u = @.. broadcast=false uprev+dt * k + u = @.. broadcast = false uprev + dt * k integrator.fsallast = f(u, p, t + dt) # For interpolation, then FSAL'd OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if integrator.opts.adaptive - utilde = @.. broadcast=false dt*(integrator.fsalfirst - k) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + utilde = @.. broadcast = false dt * (integrator.fsalfirst - k) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = integrator.fsalfirst @@ -199,25 +211,27 @@ function initialize!(integrator, cache::MidpointCache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::MidpointCache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator (; tmp, k, fsalfirst, atmp, stage_limiter!, step_limiter!, thread) = cache halfdt = dt / 2 - @.. broadcast=false thread=thread tmp=uprev + halfdt * fsalfirst + @.. broadcast = false thread = thread tmp = uprev + halfdt * fsalfirst stage_limiter!(k, tmp, p, t + halfdt) f(k, tmp, p, t + halfdt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false thread=thread u=uprev + dt * k + @.. broadcast = false thread = thread u = uprev + dt * k stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) if integrator.opts.adaptive - @.. broadcast=false thread=thread tmp=dt * (fsalfirst - k) - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread tmp = dt * (fsalfirst - k) + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end f(k, u, p, t + dt) @@ -233,7 +247,7 @@ function initialize!(integrator, cache::RK4ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::RK4ConstantCache, repeat_step = false) @@ -255,31 +269,45 @@ end σ₁ = one(t) * (1 // 2) - sqrt(one(t) * 3) / 6 σ₂ = one(t) * (1 // 2) + sqrt(one(t) * 3) / 6 p1 = (1 - σ₁) * uprev + σ₁ * u + - σ₁ * (σ₁ - 1) * ((1 - 2σ₁) * (u - uprev) + (σ₁ - 1) * dt * k₁ + σ₁ * dt * k₅) + σ₁ * (σ₁ - 1) * ((1 - 2σ₁) * (u - uprev) + (σ₁ - 1) * dt * k₁ + σ₁ * dt * k₅) p2 = (1 - σ₂) * uprev + σ₂ * u + - σ₂ * (σ₂ - 1) * ((1 - 2σ₂) * (u - uprev) + (σ₂ - 1) * dt * k₁ + σ₂ * dt * k₅) + σ₂ * (σ₂ - 1) * ((1 - 2σ₂) * (u - uprev) + (σ₂ - 1) * dt * k₁ + σ₂ * dt * k₅) pprime1 = k₁ + - σ₁ * (-4 * dt * k₁ - 2 * dt * k₅ - 6 * uprev + - σ₁ * (3 * dt * k₁ + 3 * dt * k₅ + 6 * uprev - 6 * u) + 6 * u) / dt + σ₁ * ( + -4 * dt * k₁ - 2 * dt * k₅ - 6 * uprev + + σ₁ * (3 * dt * k₁ + 3 * dt * k₅ + 6 * uprev - 6 * u) + 6 * u + ) / dt pprime2 = k₁ + - σ₂ * (-4 * dt * k₁ - 2 * dt * k₅ - 6 * uprev + - σ₂ * (3 * dt * k₁ + 3 * dt * k₅ + 6 * uprev - 6 * u) + 6 * u) / dt + σ₂ * ( + -4 * dt * k₁ - 2 * dt * k₅ - 6 * uprev + + σ₂ * (3 * dt * k₁ + 3 * dt * k₅ + 6 * uprev - 6 * u) + 6 * u + ) / dt e1 = integrator.opts.internalnorm( - calculate_residuals(dt * (f(p1, p, t + σ₁ * dt) - - pprime1), uprev, u, + calculate_residuals( + dt * ( + f(p1, p, t + σ₁ * dt) - + pprime1 + ), uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t), - t) + t + ), + t + ) e2 = integrator.opts.internalnorm( - calculate_residuals(dt * (f(p2, p, t + σ₂ * dt) - - pprime2), uprev, u, + calculate_residuals( + dt * ( + f(p2, p, t + σ₂ * dt) - + pprime2 + ), uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t), - t) + t + ), + t + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 2) integrator.EEst = convert(typeof(one(t)), 2.1342) * max(e1, e2) end @@ -298,7 +326,7 @@ function initialize!(integrator, cache::RK4Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # pre-start FSAL - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::RK4Cache, repeat_step = false) @@ -307,16 +335,16 @@ end k₁ = fsalfirst halfdt = dt / 2 ttmp = t + halfdt - @.. broadcast=false thread=thread tmp=uprev + halfdt * k₁ + @.. broadcast = false thread = thread tmp = uprev + halfdt * k₁ stage_limiter!(tmp, integrator, p, ttmp) f(k₂, tmp, p, ttmp) - @.. broadcast=false thread=thread tmp=uprev + halfdt * k₂ + @.. broadcast = false thread = thread tmp = uprev + halfdt * k₂ stage_limiter!(tmp, integrator, p, ttmp) f(k₃, tmp, p, ttmp) - @.. broadcast=false thread=thread tmp=uprev + dt * k₃ + @.. broadcast = false thread = thread tmp = uprev + dt * k₃ stage_limiter!(tmp, integrator, p, t + dt) f(k₄, tmp, p, t + dt) - @.. broadcast=false thread=thread u=uprev + (dt / 6) * (2 * (k₂ + k₃) + (k₁ + k₄)) + @.. broadcast = false thread = thread u = uprev + (dt / 6) * (2 * (k₂ + k₃) + (k₁ + k₄)) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) f(k, u, p, t + dt) @@ -329,41 +357,57 @@ end # one(t) so that types are correct but unitless σ₁ = one(t) * (1 // 2) - sqrt(one(t) * 3) / 6 σ₂ = one(t) * (1 // 2) + sqrt(one(t) * 3) / 6 - @.. broadcast=false thread=thread tmp=(1 - σ₁) * uprev + σ₁ * u + - σ₁ * (σ₁ - 1) * - ((1 - 2σ₁) * (u - uprev) + - (σ₁ - 1) * dt * k₁ + - σ₁ * dt * k₅) - @.. broadcast=false thread=thread pprime=k₁ + - σ₁ * - (-4 * dt * k₁ - 2 * dt * k₅ - 6 * uprev + - σ₁ * - (3 * dt * k₁ + 3 * dt * k₅ + 6 * uprev - - 6 * u) + - 6 * u) / dt + @.. broadcast = false thread = thread tmp = (1 - σ₁) * uprev + σ₁ * u + + σ₁ * (σ₁ - 1) * + ( + (1 - 2σ₁) * (u - uprev) + + (σ₁ - 1) * dt * k₁ + + σ₁ * dt * k₅ + ) + @.. broadcast = false thread = thread pprime = k₁ + + σ₁ * + ( + -4 * dt * k₁ - 2 * dt * k₅ - 6 * uprev + + σ₁ * + ( + 3 * dt * k₁ + 3 * dt * k₅ + 6 * uprev - + 6 * u + ) + + 6 * u + ) / dt f(_p, tmp, p, t + σ₁ * dt) - @.. broadcast=false thread=thread tmp=dt * (_p - pprime) - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread tmp = dt * (_p - pprime) + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) e1 = integrator.opts.internalnorm(atmp, t) - @.. broadcast=false thread=thread tmp=(1 - σ₂) * uprev + σ₂ * u + - σ₂ * (σ₂ - 1) * - ((1 - 2σ₂) * (u - uprev) + - (σ₂ - 1) * dt * k₁ + - σ₂ * dt * k₅) - @.. broadcast=false thread=thread pprime=k₁ + - σ₂ * - (-4 * dt * k₁ - 2 * dt * k₅ - 6 * uprev + - σ₂ * - (3 * dt * k₁ + 3 * dt * k₅ + 6 * uprev - - 6 * u) + - 6 * u) / dt + @.. broadcast = false thread = thread tmp = (1 - σ₂) * uprev + σ₂ * u + + σ₂ * (σ₂ - 1) * + ( + (1 - 2σ₂) * (u - uprev) + + (σ₂ - 1) * dt * k₁ + + σ₂ * dt * k₅ + ) + @.. broadcast = false thread = thread pprime = k₁ + + σ₂ * + ( + -4 * dt * k₁ - 2 * dt * k₅ - 6 * uprev + + σ₂ * + ( + 3 * dt * k₁ + 3 * dt * k₅ + 6 * uprev - + 6 * u + ) + + 6 * u + ) / dt f(_p, tmp, p, t + σ₂ * dt) - @.. broadcast=false thread=thread tmp=dt * (_p - pprime) - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread tmp = dt * (_p - pprime) + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) e2 = integrator.opts.internalnorm(atmp, t) integrator.EEst = convert(typeof(one(t)), 2.1342) * max(e1, e2) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 2) @@ -382,7 +426,7 @@ function initialize!(integrator, cache::Anas5ConstantCache) @inbounds for i in 2:(integrator.kshortsize - 1) integrator.k[i] = zero(integrator.fsalfirst) end - integrator.k[integrator.kshortsize] = integrator.fsallast + return integrator.k[integrator.kshortsize] = integrator.fsallast end @muladd function perform_step!(integrator, cache::Anas5ConstantCache, repeat_step = false) @@ -394,8 +438,10 @@ end v = w * dt ## Formula by Z.A. Anastassi, see the Anas5 caches in tableaus/low_order_rk_tableaus.jl for the full citation. a65 = (-8000 // 1071) * - (-a43 * (v^5) + 6 * tan(v) * (v^4) + 24 * (v^3) - 72 * tan(v) * (v^2) - 144 * v + - 144 * tan(v)) / ((v^5) * (a43 * tan(v) * v + 12 - 10 * a43)) + ( + -a43 * (v^5) + 6 * tan(v) * (v^4) + 24 * (v^3) - 72 * tan(v) * (v^2) - 144 * v + + 144 * tan(v) + ) / ((v^5) * (a43 * tan(v) * v + 12 - 10 * a43)) a61 += (-119 // 200) * a65 a63 += (189 // 100) * a65 a64 += (-459 // 200) * a65 @@ -404,8 +450,10 @@ end k3 = f(uprev + dt * (a31 * k1 + a32 * k2), p, t + c3 * dt) k4 = f(uprev + dt * (a41 * k1 + a42 * k2 + 2 * k3), p, t + c4 * dt) k5 = f(uprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4), p, t + c5 * dt) - k6 = f(uprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5), p, - t + c6 * dt) + k6 = f( + uprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5), p, + t + c6 * dt + ) u = uprev + dt * (b1 * k1 + b3 * k3 + b4 * k4 + b5 * k5 + b6 * k6) k7 = f(u, p, t + dt) integrator.fsallast = k7 @@ -434,7 +482,7 @@ function initialize!(integrator, cache::Anas5Cache) integrator.fsalfirst = cache.k1 integrator.fsallast = cache.k7 # setup pointers integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::Anas5Cache, repeat_step = false) @@ -447,8 +495,10 @@ end v = w * dt ## Formula by Z.A. Anastassi, see the Anas5 caches in tableaus/low_order_rk_tableaus.jl for the full citation. a65 = (-8000 // 1071) * - (-a43 * (v^5) + 6 * tan(v) * (v^4) + 24 * (v^3) - 72 * tan(v) * (v^2) - 144 * v + - 144 * tan(v)) / ((v^5) * (a43 * tan(v) * v + 12 - 10 * a43)) + ( + -a43 * (v^5) + 6 * tan(v) * (v^4) + 24 * (v^3) - 72 * tan(v) * (v^2) - 144 * v + + 144 * tan(v) + ) / ((v^5) * (a43 * tan(v) * v + 12 - 10 * a43)) a61 += (-119 // 200) * a65 a63 += (189 // 100) * a65 a64 += (-459 // 200) * a65 @@ -469,21 +519,23 @@ end f(k4, tmp, p, t + c4 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a51 * k1[i] + a52 * k2[i] + a53 * k3[i] + a54 * k4[i]) + dt * (a51 * k1[i] + a52 * k2[i] + a53 * k3[i] + a54 * k4[i]) end stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k5, tmp, p, t + c5 * dt) @tight_loop_macros for i in uidx @inbounds tmp[i] = uprev[i] + - dt * (a61 * k1[i] + a62 * k2[i] + a63 * k3[i] + a64 * k4[i] + - a65 * k5[i]) + dt * ( + a61 * k1[i] + a62 * k2[i] + a63 * k3[i] + a64 * k4[i] + + a65 * k5[i] + ) end stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k6, tmp, p, t + c6 * dt) @tight_loop_macros for i in uidx @inbounds u[i] = uprev[i] + - dt * - (b1 * k1[i] + b3 * k3[i] + b4 * k4[i] + b5 * k5[i] + b6 * k6[i]) + dt * + (b1 * k1[i] + b3 * k3[i] + b4 * k4[i] + b5 * k5[i] + b6 * k6[i]) end stage_limiter!(tmp, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) diff --git a/lib/OrdinaryDiffEqLowOrderRK/src/interp_func.jl b/lib/OrdinaryDiffEqLowOrderRK/src/interp_func.jl index 76040b4e13..c61fb453d6 100644 --- a/lib/OrdinaryDiffEqLowOrderRK/src/interp_func.jl +++ b/lib/OrdinaryDiffEqLowOrderRK/src/interp_func.jl @@ -1,30 +1,51 @@ -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where { - cacheType <: Union{OwrenZen3Cache, - OwrenZen3ConstantCache}} - dense ? "specialized 3rd order \"free\" interpolation" : "1st order linear" +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where { + cacheType <: Union{ + OwrenZen3Cache, + OwrenZen3ConstantCache, + }, + } + return dense ? "specialized 3rd order \"free\" interpolation" : "1st order linear" end -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where { - cacheType <: Union{OwrenZen4Cache, - OwrenZen4ConstantCache}} - dense ? "specialized 4th order \"free\" interpolation" : "1st order linear" +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where { + cacheType <: Union{ + OwrenZen4Cache, + OwrenZen4ConstantCache, + }, + } + return dense ? "specialized 4th order \"free\" interpolation" : "1st order linear" end -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where { - cacheType <: Union{OwrenZen5Cache, - OwrenZen5ConstantCache}} - dense ? "specialized 5th order \"free\" interpolation" : "1st order linear" +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where { + cacheType <: Union{ + OwrenZen5Cache, + OwrenZen5ConstantCache, + }, + } + return dense ? "specialized 5th order \"free\" interpolation" : "1st order linear" end -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where { +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where { cacheType <: - Union{DP5ConstantCache, DP5Cache}} - dense ? "specialized 4th order \"free\" interpolation" : "1st order linear" + Union{DP5ConstantCache, DP5Cache}, + } + return dense ? "specialized 4th order \"free\" interpolation" : "1st order linear" end -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where { +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where { cacheType <: - Union{BS5ConstantCache, BS5Cache}} - dense ? "specialized 5th order lazy interpolation" : "1st order linear" + Union{BS5ConstantCache, BS5Cache}, + } + return dense ? "specialized 5th order lazy interpolation" : "1st order linear" end diff --git a/lib/OrdinaryDiffEqLowOrderRK/src/interpolants.jl b/lib/OrdinaryDiffEqLowOrderRK/src/interpolants.jl index 4aca1ad953..d4919c3c08 100644 --- a/lib/OrdinaryDiffEqLowOrderRK/src/interpolants.jl +++ b/lib/OrdinaryDiffEqLowOrderRK/src/interpolants.jl @@ -3,18 +3,22 @@ RK_WITH_SPECIAL_INTERPOLATIONS = Union{ OwrenZen3ConstantCache, OwrenZen3Cache, OwrenZen4ConstantCache, OwrenZen4Cache, OwrenZen5ConstantCache, OwrenZen5Cache, - BS5ConstantCache, BS5Cache + BS5ConstantCache, BS5Cache, } -function _ode_interpolant(Θ, dt, y₀, y₁, k, +function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::RK_WITH_SPECIAL_INTERPOLATIONS, - idxs, T::Type{Val{D}}, differential_vars) where {D} + idxs, T::Type{Val{D}}, differential_vars + ) where {D} throw(DerivativeOrderNotPossibleError()) end -function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::RK_WITH_SPECIAL_INTERPOLATIONS, - idxs, T::Type{Val{D}}, differential_vars) where {D} + idxs, T::Type{Val{D}}, differential_vars + ) where {D} throw(DerivativeOrderNotPossibleError()) end @@ -29,45 +33,59 @@ Hairer Norsett Wanner Solving Ordinary Differential Euations I - Nonstiff Proble b40 = b20^2 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::DP5ConstantCache, idxs::Nothing, - T::Type{Val{0}}, differential_vars::Nothing) +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::DP5ConstantCache, idxs::Nothing, + T::Type{Val{0}}, differential_vars::Nothing + ) @dp5pre0 @inbounds y₀ + dt * (k[1] * b10 + k[2] * b20 + k[3] * b30 + k[4] * b40) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::DP5Cache, idxs::Nothing, - T::Type{Val{0}}, differential_vars::Nothing) +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::DP5Cache, idxs::Nothing, + T::Type{Val{0}}, differential_vars::Nothing + ) @dp5pre0 - @inbounds @.. broadcast=false y₀+dt * - (k[1] * b10 + k[2] * b20 + k[3] * b30 + k[4] * b40) + @inbounds @.. broadcast = false y₀ + dt * + (k[1] * b10 + k[2] * b20 + k[3] * b30 + k[4] * b40) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{DP5ConstantCache, DP5Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @dp5pre0 - @views @.. broadcast=false y₀[idxs]+dt * (k[1][idxs] * b10 + k[2][idxs] * b20 + - k[3][idxs] * b30 + k[4][idxs] * b40) + @views @.. broadcast = false y₀[idxs] + dt * ( + k[1][idxs] * b10 + k[2][idxs] * b20 + + k[3][idxs] * b30 + k[4][idxs] * b40 + ) end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{DP5ConstantCache, DP5Cache}, idxs::Nothing, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @dp5pre0 - @inbounds @.. broadcast=false out=y₀ + - dt * - (k[1] * b10 + k[2] * b20 + k[3] * b30 + k[4] * b40) + @inbounds @.. broadcast = false out = y₀ + + dt * + (k[1] * b10 + k[2] * b20 + k[3] * b30 + k[4] * b40) out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{DP5ConstantCache, DP5Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @dp5pre0 - @views @.. broadcast=false out=y₀[idxs] + - dt * - (k[1][idxs] * b10 + k[2][idxs] * b20 + k[3][idxs] * b30 + - k[4][idxs] * b40) + @views @.. broadcast = false out = y₀[idxs] + + dt * + ( + k[1][idxs] * b10 + k[2][idxs] * b20 + k[3][idxs] * b30 + + k[4][idxs] * b40 + ) out end @@ -77,36 +95,44 @@ end b40diff = Θ * @evalpoly(Θ, 2, -6, 4) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{DP5ConstantCache, DP5Cache}, idxs::Nothing, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) @dp5pre1 - @inbounds @.. broadcast=false k[1]+k[2]*b20diff+k[3]*b30diff+k[4]*b40diff + @inbounds @.. broadcast = false k[1] + k[2] * b20diff + k[3] * b30diff + k[4] * b40diff end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{DP5ConstantCache, DP5Cache}, idxs, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) @dp5pre1 - @views @.. broadcast=false k[1][idxs]+k[2][idxs]*b20diff+k[3][idxs]*b30diff+ - k[4][idxs]*b40diff + @views @.. broadcast = false k[1][idxs] + k[2][idxs] * b20diff + k[3][idxs] * b30diff + + k[4][idxs] * b40diff end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{DP5ConstantCache, DP5Cache}, idxs::Nothing, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) @dp5pre1 - @inbounds @.. broadcast=false out=k[1] + k[2] * b20diff + k[3] * b30diff + - k[4] * b40diff + @inbounds @.. broadcast = false out = k[1] + k[2] * b20diff + k[3] * b30diff + + k[4] * b40diff out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{DP5ConstantCache, DP5Cache}, idxs, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) @dp5pre1 - @views @.. broadcast=false out=k[1][idxs] + k[2][idxs] * b20diff + - k[3][idxs] * b30diff + k[4][idxs] * b40diff + @views @.. broadcast = false out = k[1][idxs] + k[2][idxs] * b20diff + + k[3][idxs] * b30diff + k[4][idxs] * b40diff out end @@ -117,38 +143,54 @@ end invdt = inv(dt) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{DP5ConstantCache, DP5Cache}, idxs::Nothing, - T::Type{Val{2}}, differential_vars::Nothing) + T::Type{Val{2}}, differential_vars::Nothing + ) @dp5pre2 - @inbounds @.. broadcast=false (k[2] * b20diff2 + k[3] * b30diff2 + - k[4] * b40diff2)*invdt + @inbounds @.. broadcast = false ( + k[2] * b20diff2 + k[3] * b30diff2 + + k[4] * b40diff2 + ) * invdt end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{DP5ConstantCache, DP5Cache}, idxs, - T::Type{Val{2}}, differential_vars::Nothing) + T::Type{Val{2}}, differential_vars::Nothing + ) @dp5pre2 - @views @.. broadcast=false (k[2][idxs] * b20diff2 + k[3][idxs] * b30diff2 + - k[4][idxs] * b40diff2)*invdt + @views @.. broadcast = false ( + k[2][idxs] * b20diff2 + k[3][idxs] * b30diff2 + + k[4][idxs] * b40diff2 + ) * invdt end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{DP5ConstantCache, DP5Cache}, idxs::Nothing, - T::Type{Val{2}}, differential_vars::Nothing) + T::Type{Val{2}}, differential_vars::Nothing + ) @dp5pre2 - @inbounds @.. broadcast=false out=(k[2] * b20diff2 + k[3] * b30diff2 + - k[4] * b40diff2) * - invdt + @inbounds @.. broadcast = false out = ( + k[2] * b20diff2 + k[3] * b30diff2 + + k[4] * b40diff2 + ) * + invdt out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{DP5ConstantCache, DP5Cache}, idxs, - T::Type{Val{2}}, differential_vars::Nothing) + T::Type{Val{2}}, differential_vars::Nothing + ) @dp5pre2 - @views @.. broadcast=false out=(k[2][idxs] * b20diff2 + k[3][idxs] * b30diff2 + - k[4][idxs] * b40diff2) * invdt + @views @.. broadcast = false out = ( + k[2][idxs] * b20diff2 + k[3][idxs] * b30diff2 + + k[4][idxs] * b40diff2 + ) * invdt out end @@ -158,33 +200,41 @@ end invdt2 = inv(dt)^2 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{DP5ConstantCache, DP5Cache}, idxs::Nothing, - T::Type{Val{3}}, differential_vars::Nothing) + T::Type{Val{3}}, differential_vars::Nothing + ) @dp5pre3 - @inbounds @.. broadcast=false (k[3] * b30diff3 + k[4] * b40diff3)*invdt2 + @inbounds @.. broadcast = false (k[3] * b30diff3 + k[4] * b40diff3) * invdt2 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{DP5ConstantCache, DP5Cache}, idxs, - T::Type{Val{3}}, differential_vars::Nothing) + T::Type{Val{3}}, differential_vars::Nothing + ) @dp5pre3 - @views @.. broadcast=false (k[3][idxs] * b30diff3 + k[4][idxs] * b40diff3)*invdt2 + @views @.. broadcast = false (k[3][idxs] * b30diff3 + k[4][idxs] * b40diff3) * invdt2 end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{DP5ConstantCache, DP5Cache}, idxs::Nothing, - T::Type{Val{3}}, differential_vars::Nothing) + T::Type{Val{3}}, differential_vars::Nothing + ) @dp5pre3 - @inbounds @.. broadcast=false out=(k[3] * b30diff3 + k[4] * b40diff3) * invdt2 + @inbounds @.. broadcast = false out = (k[3] * b30diff3 + k[4] * b40diff3) * invdt2 out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{DP5ConstantCache, DP5Cache}, idxs, - T::Type{Val{3}}, differential_vars::Nothing) + T::Type{Val{3}}, differential_vars::Nothing + ) @dp5pre3 - @views @.. broadcast=false out=(k[3][idxs] * b30diff3 + k[4][idxs] * b40diff3) * invdt2 + @views @.. broadcast = false out = (k[3][idxs] * b30diff3 + k[4][idxs] * b40diff3) * invdt2 out end @@ -192,33 +242,41 @@ end b40diff4invdt3 = 24 * inv(dt)^3 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{DP5ConstantCache, DP5Cache}, idxs::Nothing, - T::Type{Val{4}}, differential_vars::Nothing) + T::Type{Val{4}}, differential_vars::Nothing + ) @dp5pre4 - @inbounds @.. broadcast=false k[4]*b40diff4invdt3 + @inbounds @.. broadcast = false k[4] * b40diff4invdt3 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{DP5ConstantCache, DP5Cache}, idxs, - T::Type{Val{4}}, differential_vars::Nothing) + T::Type{Val{4}}, differential_vars::Nothing + ) @dp5pre4 - @views @.. broadcast=false k[4][idxs]*b40diff4invdt3 + @views @.. broadcast = false k[4][idxs] * b40diff4invdt3 end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{DP5ConstantCache, DP5Cache}, idxs::Nothing, - T::Type{Val{4}}, differential_vars::Nothing) + T::Type{Val{4}}, differential_vars::Nothing + ) @dp5pre4 - @inbounds @.. broadcast=false out=k[4] * b40diff4invdt3 + @inbounds @.. broadcast = false out = k[4] * b40diff4invdt3 out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{DP5ConstantCache, DP5Cache}, idxs, - T::Type{Val{4}}, differential_vars::Nothing) + T::Type{Val{4}}, differential_vars::Nothing + ) @dp5pre4 - @views @.. broadcast=false out=k[4][idxs] * b40diff4invdt3 + @views @.. broadcast = false out = k[4][idxs] * b40diff4invdt3 out end @@ -241,125 +299,161 @@ end b4Θ = Θ² * @evalpoly(Θ, -1, 1) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen3ConstantCache, OwrenZen3Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @owrenzen3pre0 - @inbounds @.. broadcast=false y₀+dt * - (k[1] * b1Θ + k[2] * b2Θ + k[3] * b3Θ + k[4] * b4Θ) + @inbounds @.. broadcast = false y₀ + dt * + (k[1] * b1Θ + k[2] * b2Θ + k[3] * b3Θ + k[4] * b4Θ) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen3ConstantCache, OwrenZen3Cache}, - idxs, T::Type{Val{0}}, differential_vars::Nothing) + idxs, T::Type{Val{0}}, differential_vars::Nothing + ) @owrenzen3pre0 - @views @.. broadcast=false y₀[idxs]+dt * (k[1][idxs] * b1Θ + k[2][idxs] * b2Θ + - k[3][idxs] * b3Θ + - k[4][idxs] * b4Θ) + @views @.. broadcast = false y₀[idxs] + dt * ( + k[1][idxs] * b1Θ + k[2][idxs] * b2Θ + + k[3][idxs] * b3Θ + + k[4][idxs] * b4Θ + ) end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen3ConstantCache, OwrenZen3Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @owrenzen3pre0 - @inbounds @.. broadcast=false out=y₀ + - dt * - (k[1] * b1Θ + k[2] * b2Θ + k[3] * b3Θ + k[4] * b4Θ) + @inbounds @.. broadcast = false out = y₀ + + dt * + (k[1] * b1Θ + k[2] * b2Θ + k[3] * b3Θ + k[4] * b4Θ) out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen3ConstantCache, OwrenZen3Cache}, - idxs, T::Type{Val{0}}, differential_vars::Nothing) + idxs, T::Type{Val{0}}, differential_vars::Nothing + ) @owrenzen3pre0 - @views @.. broadcast=false out=y₀[idxs] + - dt * - (k[1][idxs] * b1Θ + k[2][idxs] * b2Θ + k[3][idxs] * b3Θ + - k[4][idxs] * b4Θ) + @views @.. broadcast = false out = y₀[idxs] + + dt * + ( + k[1][idxs] * b1Θ + k[2][idxs] * b2Θ + k[3][idxs] * b3Θ + + k[4][idxs] * b4Θ + ) out end @def owrenzen3pre1 begin @owrenzen3unpack - b1Θdiff = @evalpoly(Θ, 1, 2*r12, 3*r13) - b2Θdiff = Θ * @evalpoly(Θ, 2*r22, 3*r23) - b3Θdiff = Θ * @evalpoly(Θ, 2*r32, 3*r33) + b1Θdiff = @evalpoly(Θ, 1, 2 * r12, 3 * r13) + b2Θdiff = Θ * @evalpoly(Θ, 2 * r22, 3 * r23) + b3Θdiff = Θ * @evalpoly(Θ, 2 * r32, 3 * r33) b4Θdiff = Θ * @evalpoly(Θ, -2, 3) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen3ConstantCache, OwrenZen3Cache}, - idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing + ) @owrenzen3pre1 - @inbounds @.. broadcast=false k[1]*b1Θdiff+k[2]*b2Θdiff+k[3]*b3Θdiff+k[4]*b4Θdiff + @inbounds @.. broadcast = false k[1] * b1Θdiff + k[2] * b2Θdiff + k[3] * b3Θdiff + k[4] * b4Θdiff end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen3ConstantCache, OwrenZen3Cache}, - idxs, T::Type{Val{1}}, differential_vars::Nothing) + idxs, T::Type{Val{1}}, differential_vars::Nothing + ) @owrenzen3pre1 - @views @.. broadcast=false k[1][idxs]*b1Θdiff+k[2][idxs]*b2Θdiff+k[3][idxs]*b3Θdiff+ - k[4][idxs]*b4Θdiff + @views @.. broadcast = false k[1][idxs] * b1Θdiff + k[2][idxs] * b2Θdiff + k[3][idxs] * b3Θdiff + + k[4][idxs] * b4Θdiff end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen3ConstantCache, OwrenZen3Cache}, - idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing + ) @owrenzen3pre1 - @inbounds @.. broadcast=false out=k[1] * b1Θdiff + k[2] * b2Θdiff + k[3] * b3Θdiff + - k[4] * b4Θdiff + @inbounds @.. broadcast = false out = k[1] * b1Θdiff + k[2] * b2Θdiff + k[3] * b3Θdiff + + k[4] * b4Θdiff out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen3ConstantCache, OwrenZen3Cache}, - idxs, T::Type{Val{1}}, differential_vars::Nothing) + idxs, T::Type{Val{1}}, differential_vars::Nothing + ) @owrenzen3pre1 - @views @.. broadcast=false out=k[1][idxs] * b1Θdiff + k[2][idxs] * b2Θdiff + - k[3][idxs] * b3Θdiff + k[4][idxs] * b4Θdiff + @views @.. broadcast = false out = k[1][idxs] * b1Θdiff + k[2][idxs] * b2Θdiff + + k[3][idxs] * b3Θdiff + k[4][idxs] * b4Θdiff out end @def owrenzen3pre2 begin @owrenzen3unpack - b1Θdiff2 = @evalpoly(Θ, 2*r12, 6*r13) - b2Θdiff2 = @evalpoly(Θ, 2*r22, 6*r23) - b3Θdiff2 = @evalpoly(Θ, 2*r32, 6*r33) + b1Θdiff2 = @evalpoly(Θ, 2 * r12, 6 * r13) + b2Θdiff2 = @evalpoly(Θ, 2 * r22, 6 * r23) + b3Θdiff2 = @evalpoly(Θ, 2 * r32, 6 * r33) b4Θdiff2 = @evalpoly(Θ, -2, 6) invdt = inv(dt) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen3ConstantCache, OwrenZen3Cache}, - idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing + ) @owrenzen3pre2 - @inbounds @.. broadcast=false (k[1] * b1Θdiff2 + k[2] * b2Θdiff2 + k[3] * b3Θdiff2 + - k[4] * b4Θdiff2)*invdt + @inbounds @.. broadcast = false ( + k[1] * b1Θdiff2 + k[2] * b2Θdiff2 + k[3] * b3Θdiff2 + + k[4] * b4Θdiff2 + ) * invdt end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen3ConstantCache, OwrenZen3Cache}, - idxs, T::Type{Val{2}}, differential_vars::Nothing) + idxs, T::Type{Val{2}}, differential_vars::Nothing + ) @owrenzen3pre2 - @views @.. broadcast=false (k[1][idxs] * b1Θdiff2 + k[2][idxs] * b2Θdiff2 + - k[3][idxs] * b3Θdiff2 + k[4][idxs] * b4Θdiff2)*invdt + @views @.. broadcast = false ( + k[1][idxs] * b1Θdiff2 + k[2][idxs] * b2Θdiff2 + + k[3][idxs] * b3Θdiff2 + k[4][idxs] * b4Θdiff2 + ) * invdt end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen3ConstantCache, OwrenZen3Cache}, - idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing + ) @owrenzen3pre2 - @inbounds @.. broadcast=false out=(k[1] * b1Θdiff2 + k[2] * b2Θdiff2 + k[3] * b3Θdiff2 + - k[4] * b4Θdiff2) * invdt + @inbounds @.. broadcast = false out = ( + k[1] * b1Θdiff2 + k[2] * b2Θdiff2 + k[3] * b3Θdiff2 + + k[4] * b4Θdiff2 + ) * invdt out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen3ConstantCache, OwrenZen3Cache}, - idxs, T::Type{Val{2}}, differential_vars::Nothing) + idxs, T::Type{Val{2}}, differential_vars::Nothing + ) @owrenzen3pre2 - @views @.. broadcast=false out=(k[1][idxs] * b1Θdiff2 + k[2][idxs] * b2Θdiff2 + - k[3][idxs] * b3Θdiff2 + k[4][idxs] * b4Θdiff2) * invdt + @views @.. broadcast = false out = ( + k[1][idxs] * b1Θdiff2 + k[2][idxs] * b2Θdiff2 + + k[3][idxs] * b3Θdiff2 + k[4][idxs] * b4Θdiff2 + ) * invdt out end @@ -372,37 +466,53 @@ end invdt2 = inv(dt)^2 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen3ConstantCache, OwrenZen3Cache}, - idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing + ) @owrenzen3pre3 - @inbounds @.. broadcast=false (k[1] * b1Θdiff3 + k[2] * b2Θdiff3 + k[3] * b3Θdiff3 + - k[4] * b4Θdiff3)*invdt2 + @inbounds @.. broadcast = false ( + k[1] * b1Θdiff3 + k[2] * b2Θdiff3 + k[3] * b3Θdiff3 + + k[4] * b4Θdiff3 + ) * invdt2 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen3ConstantCache, OwrenZen3Cache}, - idxs, T::Type{Val{3}}, differential_vars::Nothing) + idxs, T::Type{Val{3}}, differential_vars::Nothing + ) @owrenzen3pre3 - @views @.. broadcast=false (k[1][idxs] * b1Θdiff3 + k[2][idxs] * b2Θdiff3 + - k[3][idxs] * b3Θdiff3 + k[4][idxs] * b4Θdiff3)*invdt2 + @views @.. broadcast = false ( + k[1][idxs] * b1Θdiff3 + k[2][idxs] * b2Θdiff3 + + k[3][idxs] * b3Θdiff3 + k[4][idxs] * b4Θdiff3 + ) * invdt2 end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen3ConstantCache, OwrenZen3Cache}, - idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing + ) @owrenzen3pre3 - @inbounds @.. broadcast=false out=(k[1] * b1Θdiff3 + k[2] * b2Θdiff3 + k[3] * b3Θdiff3 + - k[4] * b4Θdiff3) * invdt2 + @inbounds @.. broadcast = false out = ( + k[1] * b1Θdiff3 + k[2] * b2Θdiff3 + k[3] * b3Θdiff3 + + k[4] * b4Θdiff3 + ) * invdt2 out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen3ConstantCache, OwrenZen3Cache}, - idxs, T::Type{Val{3}}, differential_vars::Nothing) + idxs, T::Type{Val{3}}, differential_vars::Nothing + ) @owrenzen3pre3 - @views @.. broadcast=false out=(k[1][idxs] * b1Θdiff3 + k[2][idxs] * b2Θdiff3 + - k[3][idxs] * b3Θdiff3 + k[4][idxs] * b4Θdiff3) * invdt2 + @views @.. broadcast = false out = ( + k[1][idxs] * b1Θdiff3 + k[2][idxs] * b2Θdiff3 + + k[3][idxs] * b3Θdiff3 + k[4][idxs] * b4Θdiff3 + ) * invdt2 out end @@ -426,34 +536,44 @@ end b6Θ = Θ² * @evalpoly(Θ, r62, r63, r64) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @owrenzen4pre0 # return @.. broadcast=false y₀ + dt*(k[1]*b1Θ + k[3]*b3Θ + k[4]*b4Θ + k[5]*b5Θ + k[6]*b6Θ) return @inbounds y₀ + - dt * (k[1] * b1Θ + k[3] * b3Θ + k[4] * b4Θ + k[5] * b5Θ + k[6] * b6Θ) + dt * (k[1] * b1Θ + k[3] * b3Θ + k[4] * b4Θ + k[5] * b5Θ + k[6] * b6Θ) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs, T::Type{Val{0}}, differential_vars::Nothing) + idxs, T::Type{Val{0}}, differential_vars::Nothing + ) @owrenzen4pre0 # return @.. broadcast=false y₀[idxs] + dt*(k[1][idxs]*b1Θ + k[3][idxs]*b3Θ + # k[4][idxs]*b4Θ + k[5][idxs]*b5Θ + k[6][idxs]*b6Θ) return y₀[idxs] + - dt * (k[1][idxs] * b1Θ + k[3][idxs] * b3Θ + - k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + k[6][idxs] * b6Θ) + dt * ( + k[1][idxs] * b1Θ + k[3][idxs] * b3Θ + + k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + k[6][idxs] * b6Θ + ) end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @owrenzen4pre0 - @inbounds @.. broadcast=false out=y₀ + - dt * - (k[1] * b1Θ + k[3] * b3Θ + k[4] * b4Θ + k[5] * b5Θ + - k[6] * b6Θ) + @inbounds @.. broadcast = false out = y₀ + + dt * + ( + k[1] * b1Θ + k[3] * b3Θ + k[4] * b4Θ + k[5] * b5Θ + + k[6] * b6Θ + ) #@inbounds for i in eachindex(out) # out[i] = y₀[i] + dt*(k[1][i]*b1Θ + k[3][i]*b3Θ + k[4][i]*b4Θ + # k[5][i]*b5Θ + k[6][i]*b6Θ) @@ -461,14 +581,18 @@ end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs, T::Type{Val{0}}, differential_vars::Nothing) + idxs, T::Type{Val{0}}, differential_vars::Nothing + ) @owrenzen4pre0 - @inbounds @.. broadcast=false out=y₀[idxs] + - dt * (k[1][idxs] * b1Θ + k[3][idxs] * b3Θ + - k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + - k[6][idxs] * b6Θ) + @inbounds @.. broadcast = false out = y₀[idxs] + + dt * ( + k[1][idxs] * b1Θ + k[3][idxs] * b3Θ + + k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + + k[6][idxs] * b6Θ + ) #@inbounds for (j,i) in enumerate(idxs) # out[j] = y₀[i] + dt*(k[1][i]*b1Θ + k[3][i]*b3Θ + k[4][i]*b4Θ + # k[5][i]*b5Θ + k[6][i]*b6Θ) @@ -478,137 +602,177 @@ end @def owrenzen4pre1 begin @owrenzen4unpack - b1Θdiff = @evalpoly(Θ, 1, 2*r12, 3*r13, 4*r14) - b3Θdiff = Θ * @evalpoly(Θ, 2*r32, 3*r33, 4*r34) - b4Θdiff = Θ * @evalpoly(Θ, 2*r42, 3*r43, 4*r44) - b5Θdiff = Θ * @evalpoly(Θ, 2*r52, 3*r53, 4*r54) - b6Θdiff = Θ * @evalpoly(Θ, 2*r62, 3*r63, 4*r64) + b1Θdiff = @evalpoly(Θ, 1, 2 * r12, 3 * r13, 4 * r14) + b3Θdiff = Θ * @evalpoly(Θ, 2 * r32, 3 * r33, 4 * r34) + b4Θdiff = Θ * @evalpoly(Θ, 2 * r42, 3 * r43, 4 * r44) + b5Θdiff = Θ * @evalpoly(Θ, 2 * r52, 3 * r53, 4 * r54) + b6Θdiff = Θ * @evalpoly(Θ, 2 * r62, 3 * r63, 4 * r64) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing + ) @owrenzen4pre1 - @inbounds @.. broadcast=false k[1]*b1Θdiff+k[3]*b3Θdiff+k[4]*b4Θdiff+k[5]*b5Θdiff+ - k[6]*b6Θdiff + @inbounds @.. broadcast = false k[1] * b1Θdiff + k[3] * b3Θdiff + k[4] * b4Θdiff + k[5] * b5Θdiff + + k[6] * b6Θdiff end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs, T::Type{Val{1}}, differential_vars::Nothing) + idxs, T::Type{Val{1}}, differential_vars::Nothing + ) @owrenzen4pre1 - @views @.. broadcast=false k[1][idxs]*b1Θdiff+k[3][idxs]*b3Θdiff+k[4][idxs]*b4Θdiff+ - k[5][idxs]*b5Θdiff+k[6][idxs]*b6Θdiff + @views @.. broadcast = false k[1][idxs] * b1Θdiff + k[3][idxs] * b3Θdiff + k[4][idxs] * b4Θdiff + + k[5][idxs] * b5Θdiff + k[6][idxs] * b6Θdiff end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing + ) @owrenzen4pre1 - @inbounds @.. broadcast=false out=k[1] * b1Θdiff + k[3] * b3Θdiff + k[4] * b4Θdiff + - k[5] * b5Θdiff + k[6] * b6Θdiff + @inbounds @.. broadcast = false out = k[1] * b1Θdiff + k[3] * b3Θdiff + k[4] * b4Θdiff + + k[5] * b5Θdiff + k[6] * b6Θdiff out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs, T::Type{Val{1}}, differential_vars::Nothing) + idxs, T::Type{Val{1}}, differential_vars::Nothing + ) @owrenzen4pre1 - @views @.. broadcast=false out=k[1][idxs] * b1Θdiff + k[3][idxs] * b3Θdiff + - k[4][idxs] * b4Θdiff + - k[5][idxs] * b5Θdiff + k[6][idxs] * b6Θdiff + @views @.. broadcast = false out = k[1][idxs] * b1Θdiff + k[3][idxs] * b3Θdiff + + k[4][idxs] * b4Θdiff + + k[5][idxs] * b5Θdiff + k[6][idxs] * b6Θdiff out end @def owrenzen4pre2 begin @owrenzen4unpack - b1Θdiff2 = @evalpoly(Θ, 2*r12, 6*r13, 12*r14) - b3Θdiff2 = @evalpoly(Θ, 2*r32, 6*r33, 12*r34) - b4Θdiff2 = @evalpoly(Θ, 2*r42, 6*r43, 12*r44) - b5Θdiff2 = @evalpoly(Θ, 2*r52, 6*r53, 12*r54) - b6Θdiff2 = @evalpoly(Θ, 2*r62, 6*r63, 12*r64) + b1Θdiff2 = @evalpoly(Θ, 2 * r12, 6 * r13, 12 * r14) + b3Θdiff2 = @evalpoly(Θ, 2 * r32, 6 * r33, 12 * r34) + b4Θdiff2 = @evalpoly(Θ, 2 * r42, 6 * r43, 12 * r44) + b5Θdiff2 = @evalpoly(Θ, 2 * r52, 6 * r53, 12 * r54) + b6Θdiff2 = @evalpoly(Θ, 2 * r62, 6 * r63, 12 * r64) invdt = inv(dt) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing + ) @owrenzen4pre2 - @.. broadcast=false (k[1] * b1Θdiff2 + k[3] * b3Θdiff2 + k[4] * b4Θdiff2 + - k[5] * b5Θdiff2 + k[6] * b6Θdiff2)*invdt + @.. broadcast = false ( + k[1] * b1Θdiff2 + k[3] * b3Θdiff2 + k[4] * b4Θdiff2 + + k[5] * b5Θdiff2 + k[6] * b6Θdiff2 + ) * invdt end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs, T::Type{Val{2}}, differential_vars::Nothing) + idxs, T::Type{Val{2}}, differential_vars::Nothing + ) @owrenzen4pre2 - @views @.. broadcast=false (k[1][idxs] * b1Θdiff2 + k[3][idxs] * b3Θdiff2 + - k[4][idxs] * b4Θdiff2 + - k[5][idxs] * b5Θdiff2 + k[6][idxs] * b6Θdiff2)*invdt + @views @.. broadcast = false ( + k[1][idxs] * b1Θdiff2 + k[3][idxs] * b3Θdiff2 + + k[4][idxs] * b4Θdiff2 + + k[5][idxs] * b5Θdiff2 + k[6][idxs] * b6Θdiff2 + ) * invdt end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing + ) @owrenzen4pre2 - @inbounds @.. broadcast=false out=(k[1] * b1Θdiff2 + k[3] * b3Θdiff2 + k[4] * b4Θdiff2 + - k[5] * b5Θdiff2 + k[6] * b6Θdiff2) * invdt + @inbounds @.. broadcast = false out = ( + k[1] * b1Θdiff2 + k[3] * b3Θdiff2 + k[4] * b4Θdiff2 + + k[5] * b5Θdiff2 + k[6] * b6Θdiff2 + ) * invdt out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs, T::Type{Val{2}}, differential_vars::Nothing) + idxs, T::Type{Val{2}}, differential_vars::Nothing + ) @owrenzen4pre2 - @views @.. broadcast=false out=(k[1][idxs] * b1Θdiff2 + k[3][idxs] * b3Θdiff2 + - k[4][idxs] * b4Θdiff2 + - k[5][idxs] * b5Θdiff2 + k[6][idxs] * b6Θdiff2) * invdt + @views @.. broadcast = false out = ( + k[1][idxs] * b1Θdiff2 + k[3][idxs] * b3Θdiff2 + + k[4][idxs] * b4Θdiff2 + + k[5][idxs] * b5Θdiff2 + k[6][idxs] * b6Θdiff2 + ) * invdt out end @def owrenzen4pre3 begin @owrenzen4unpack - b1Θdiff3 = @evalpoly(Θ, 6*r13, 24*r14) - b3Θdiff3 = @evalpoly(Θ, 6*r33, 24*r34) - b4Θdiff3 = @evalpoly(Θ, 6*r43, 24*r44) - b5Θdiff3 = @evalpoly(Θ, 6*r53, 24*r54) - b6Θdiff3 = @evalpoly(Θ, 6*r63, 24*r64) + b1Θdiff3 = @evalpoly(Θ, 6 * r13, 24 * r14) + b3Θdiff3 = @evalpoly(Θ, 6 * r33, 24 * r34) + b4Θdiff3 = @evalpoly(Θ, 6 * r43, 24 * r44) + b5Θdiff3 = @evalpoly(Θ, 6 * r53, 24 * r54) + b6Θdiff3 = @evalpoly(Θ, 6 * r63, 24 * r64) invdt2 = inv(dt)^2 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing + ) @owrenzen4pre3 - @inbounds @.. broadcast=false (k[1] * b1Θdiff3 + k[3] * b3Θdiff3 + k[4] * b4Θdiff3 + - k[5] * b5Θdiff3 + k[6] * b6Θdiff3)*invdt2 + @inbounds @.. broadcast = false ( + k[1] * b1Θdiff3 + k[3] * b3Θdiff3 + k[4] * b4Θdiff3 + + k[5] * b5Θdiff3 + k[6] * b6Θdiff3 + ) * invdt2 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs, T::Type{Val{3}}, differential_vars::Nothing) + idxs, T::Type{Val{3}}, differential_vars::Nothing + ) @owrenzen4pre3 - @views @.. broadcast=false (k[1][idxs] * b1Θdiff3 + k[3][idxs] * b3Θdiff3 + - k[4][idxs] * b4Θdiff3 + - k[5][idxs] * b5Θdiff3 + k[6][idxs] * b6Θdiff3)*invdt2 + @views @.. broadcast = false ( + k[1][idxs] * b1Θdiff3 + k[3][idxs] * b3Θdiff3 + + k[4][idxs] * b4Θdiff3 + + k[5][idxs] * b5Θdiff3 + k[6][idxs] * b6Θdiff3 + ) * invdt2 end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing + ) @owrenzen4pre3 - @inbounds @.. broadcast=false out=(k[1] * b1Θdiff3 + k[3] * b3Θdiff3 + k[4] * b4Θdiff3 + - k[5] * b5Θdiff3 + k[6] * b6Θdiff3) * invdt2 + @inbounds @.. broadcast = false out = ( + k[1] * b1Θdiff3 + k[3] * b3Θdiff3 + k[4] * b4Θdiff3 + + k[5] * b5Θdiff3 + k[6] * b6Θdiff3 + ) * invdt2 out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs, T::Type{Val{3}}, differential_vars::Nothing) + idxs, T::Type{Val{3}}, differential_vars::Nothing + ) @owrenzen4pre3 - @views @.. broadcast=false out=(k[1][idxs] * b1Θdiff3 + k[3][idxs] * b3Θdiff3 + - k[4][idxs] * b4Θdiff3 + - k[5][idxs] * b5Θdiff3 + k[6][idxs] * b6Θdiff3) * invdt2 + @views @.. broadcast = false out = ( + k[1][idxs] * b1Θdiff3 + k[3][idxs] * b3Θdiff3 + + k[4][idxs] * b4Θdiff3 + + k[5][idxs] * b5Θdiff3 + k[6][idxs] * b6Θdiff3 + ) * invdt2 out end @@ -622,39 +786,55 @@ end invdt3 = inv(dt)^3 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs::Nothing, T::Type{Val{4}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{4}}, differential_vars::Nothing + ) @owrenzen4pre4 - @.. broadcast=false (k[1] * b1Θdiff4 + k[3] * b3Θdiff4 + k[4] * b4Θdiff4 + - k[5] * b5Θdiff4 + k[6] * b6Θdiff4)*invdt3 + @.. broadcast = false ( + k[1] * b1Θdiff4 + k[3] * b3Θdiff4 + k[4] * b4Θdiff4 + + k[5] * b5Θdiff4 + k[6] * b6Θdiff4 + ) * invdt3 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs, T::Type{Val{4}}, differential_vars::Nothing) + idxs, T::Type{Val{4}}, differential_vars::Nothing + ) @owrenzen4pre4 - @views @.. broadcast=false (k[1][idxs] * b1Θdiff4 + k[3][idxs] * b3Θdiff4 + - k[4][idxs] * b4Θdiff4 + - k[5][idxs] * b5Θdiff4 + k[6][idxs] * b6Θdiff4)*invdt3 + @views @.. broadcast = false ( + k[1][idxs] * b1Θdiff4 + k[3][idxs] * b3Θdiff4 + + k[4][idxs] * b4Θdiff4 + + k[5][idxs] * b5Θdiff4 + k[6][idxs] * b6Θdiff4 + ) * invdt3 end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs::Nothing, T::Type{Val{4}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{4}}, differential_vars::Nothing + ) @owrenzen4pre4 - @inbounds @.. broadcast=false out=(k[1] * b1Θdiff4 + k[3] * b3Θdiff4 + k[4] * b4Θdiff4 + - k[5] * b5Θdiff4 + k[6] * b6Θdiff4) * invdt3 + @inbounds @.. broadcast = false out = ( + k[1] * b1Θdiff4 + k[3] * b3Θdiff4 + k[4] * b4Θdiff4 + + k[5] * b5Θdiff4 + k[6] * b6Θdiff4 + ) * invdt3 out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen4ConstantCache, OwrenZen4Cache}, - idxs, T::Type{Val{4}}, differential_vars::Nothing) + idxs, T::Type{Val{4}}, differential_vars::Nothing + ) @owrenzen4pre4 - @views @.. broadcast=false out=(k[1][idxs] * b1Θdiff4 + k[3][idxs] * b3Θdiff4 + - k[4][idxs] * b4Θdiff4 + - k[5][idxs] * b5Θdiff4 + k[6][idxs] * b6Θdiff4) * invdt3 + @views @.. broadcast = false out = ( + k[1][idxs] * b1Θdiff4 + k[3][idxs] * b3Θdiff4 + + k[4][idxs] * b4Θdiff4 + + k[5][idxs] * b5Θdiff4 + k[6][idxs] * b6Θdiff4 + ) * invdt3 out end @@ -680,39 +860,51 @@ end b8Θ = Θ² * @evalpoly(Θ, r82, r83, r84, r85) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @owrenzen5pre0 # return @.. broadcast=false y₀ + dt*(k[1]*b1Θ + k[3]*b3Θ + k[4]*b4Θ + k[5]*b5Θ + k[6]*b6Θ + # k[7]*b7Θ + k[8]*b8Θ) return @inbounds y₀ + - dt * (k[1] * b1Θ + k[3] * b3Θ + k[4] * b4Θ + k[5] * b5Θ + k[6] * b6Θ + - k[7] * b7Θ + k[8] * b8Θ) + dt * ( + k[1] * b1Θ + k[3] * b3Θ + k[4] * b4Θ + k[5] * b5Θ + k[6] * b6Θ + + k[7] * b7Θ + k[8] * b8Θ + ) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs, T::Type{Val{0}}, differential_vars::Nothing) + idxs, T::Type{Val{0}}, differential_vars::Nothing + ) @owrenzen5pre0 # return @.. broadcast=false y₀[idxs] + dt*(k[1][idxs]*b1Θ + k[3][idxs]*b3Θ + # k[4][idxs]*b4Θ + k[5][idxs]*b5Θ + k[6][idxs]*b6Θ + # k[7][idxs]*b7Θ + k[8][idxs]*b8Θ) return y₀[idxs] + - dt * (k[1][idxs] * b1Θ + k[3][idxs] * b3Θ + + dt * ( + k[1][idxs] * b1Θ + k[3][idxs] * b3Θ + k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + k[6][idxs] * b6Θ + - k[7][idxs] * b7Θ + k[8][idxs] * b8Θ) + k[7][idxs] * b7Θ + k[8][idxs] * b8Θ + ) end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @owrenzen5pre0 - @inbounds @.. broadcast=false out=y₀ + - dt * - (k[1] * b1Θ + k[3] * b3Θ + k[4] * b4Θ + k[5] * b5Θ + - k[6] * b6Θ + - k[7] * b7Θ + k[8] * b8Θ) + @inbounds @.. broadcast = false out = y₀ + + dt * + ( + k[1] * b1Θ + k[3] * b3Θ + k[4] * b4Θ + k[5] * b5Θ + + k[6] * b6Θ + + k[7] * b7Θ + k[8] * b8Θ + ) #@inbounds for i in eachindex(out) # out[i] = y₀[i] + dt*(k[1][i]*b1Θ + k[3][i]*b3Θ + k[4][i]*b4Θ + # k[5][i]*b5Θ + k[6][i]*b6Θ + k[7][i]*b7Θ + k[8][i]*b8Θ) @@ -720,14 +912,18 @@ end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs, T::Type{Val{0}}, differential_vars::Nothing) + idxs, T::Type{Val{0}}, differential_vars::Nothing + ) @owrenzen5pre0 - @views @.. broadcast=false out=y₀[idxs] + - dt * (k[1][idxs] * b1Θ + k[3][idxs] * b3Θ + - k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + k[6][idxs] * b6Θ + - k[7][idxs] * b7Θ + k[8][idxs] * b8Θ) + @views @.. broadcast = false out = y₀[idxs] + + dt * ( + k[1][idxs] * b1Θ + k[3][idxs] * b3Θ + + k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + k[6][idxs] * b6Θ + + k[7][idxs] * b7Θ + k[8][idxs] * b8Θ + ) #@inbounds for (j,i) in enumerate(idxs) # out[j] = y₀[i] + dt*(k[1][i]*b1Θ + k[3][i]*b3Θ + k[4][i]*b4Θ + # k[5][i]*b5Θ + k[6][i]*b6Θ + k[7][i]*b7Θ + k[8][i]*b8Θ) @@ -737,39 +933,45 @@ end @def owrenzen5pre1 begin @owrenzen5unpack - b1Θdiff = @evalpoly(Θ, 1, 2*r12, 3*r13, 4*r14, 5*r15) - b3Θdiff = Θ * @evalpoly(Θ, 2*r32, 3*r33, 4*r34, 5*r35) - b4Θdiff = Θ * @evalpoly(Θ, 2*r42, 3*r43, 4*r44, 5*r45) - b5Θdiff = Θ * @evalpoly(Θ, 2*r52, 3*r53, 4*r54, 5*r55) - b6Θdiff = Θ * @evalpoly(Θ, 2*r62, 3*r63, 4*r64, 5*r65) - b7Θdiff = Θ * @evalpoly(Θ, 2*r72, 3*r73, 4*r74, 5*r75) - b8Θdiff = Θ * @evalpoly(Θ, 2*r82, 3*r83, 4*r84, 5*r85) + b1Θdiff = @evalpoly(Θ, 1, 2 * r12, 3 * r13, 4 * r14, 5 * r15) + b3Θdiff = Θ * @evalpoly(Θ, 2 * r32, 3 * r33, 4 * r34, 5 * r35) + b4Θdiff = Θ * @evalpoly(Θ, 2 * r42, 3 * r43, 4 * r44, 5 * r45) + b5Θdiff = Θ * @evalpoly(Θ, 2 * r52, 3 * r53, 4 * r54, 5 * r55) + b6Θdiff = Θ * @evalpoly(Θ, 2 * r62, 3 * r63, 4 * r64, 5 * r65) + b7Θdiff = Θ * @evalpoly(Θ, 2 * r72, 3 * r73, 4 * r74, 5 * r75) + b8Θdiff = Θ * @evalpoly(Θ, 2 * r82, 3 * r83, 4 * r84, 5 * r85) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing + ) @owrenzen5pre1 return @inbounds k[1] * b1Θdiff + k[3] * b3Θdiff + k[4] * b4Θdiff + k[5] * b5Θdiff + - k[6] * b6Θdiff + k[7] * b7Θdiff + k[8] * b8Θdiff + k[6] * b6Θdiff + k[7] * b7Θdiff + k[8] * b8Θdiff end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs, T::Type{Val{1}}, differential_vars::Nothing) + idxs, T::Type{Val{1}}, differential_vars::Nothing + ) @owrenzen5pre1 k[1][idxs] * b1Θdiff + k[3][idxs] * b3Θdiff + k[4][idxs] * b4Θdiff + - k[5][idxs] * b5Θdiff + - k[6][idxs] * b6Θdiff + k[7][idxs] * b7Θdiff + k[8][idxs] * b8Θdiff + k[5][idxs] * b5Θdiff + + k[6][idxs] * b6Θdiff + k[7][idxs] * b7Θdiff + k[8][idxs] * b8Θdiff end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing + ) @owrenzen5pre1 - @inbounds @.. broadcast=false out=k[1] * b1Θdiff + k[3] * b3Θdiff + k[4] * b4Θdiff + - k[5] * b5Θdiff + k[6] * b6Θdiff + k[7] * b7Θdiff + - k[8] * b8Θdiff + @inbounds @.. broadcast = false out = k[1] * b1Θdiff + k[3] * b3Θdiff + k[4] * b4Θdiff + + k[5] * b5Θdiff + k[6] * b6Θdiff + k[7] * b7Θdiff + + k[8] * b8Θdiff #@inbounds for i in eachindex(out) # out[i] = k[1][i]*b1Θdiff + k[3][i]*b3Θdiff + k[4][i]*b4Θdiff + # k[5][i]*b5Θdiff + k[6][i]*b6Θdiff + k[7][i]*b7Θdiff + k[8][i]*b8Θdiff @@ -777,14 +979,16 @@ end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs, T::Type{Val{1}}, differential_vars::Nothing) + idxs, T::Type{Val{1}}, differential_vars::Nothing + ) @owrenzen5pre1 - @views @.. broadcast=false out=k[1][idxs] * b1Θdiff + k[3][idxs] * b3Θdiff + - k[4][idxs] * b4Θdiff + - k[5][idxs] * b5Θdiff + k[6][idxs] * b6Θdiff + - k[7][idxs] * b7Θdiff + k[8][idxs] * b8Θdiff + @views @.. broadcast = false out = k[1][idxs] * b1Θdiff + k[3][idxs] * b3Θdiff + + k[4][idxs] * b4Θdiff + + k[5][idxs] * b5Θdiff + k[6][idxs] * b6Θdiff + + k[7][idxs] * b7Θdiff + k[8][idxs] * b8Θdiff #@inbounds for (j,i) in enumerate(idxs) # out[j] = k[1][i]*b1Θdiff + k[3][i]*b3Θdiff + k[4][i]*b4Θdiff + # k[5][i]*b5Θdiff + k[6][i]*b6Θdiff + k[7][i]*b7Θdiff + k[8][i]*b8Θdiff @@ -794,41 +998,53 @@ end @def owrenzen5pre2 begin @owrenzen5unpack - b1Θdiff2 = @evalpoly(Θ, 2*r12, 6*r13, 12*r14, 20*r15) - b3Θdiff2 = @evalpoly(Θ, 2*r32, 6*r33, 12*r34, 20*r35) - b4Θdiff2 = @evalpoly(Θ, 2*r42, 6*r43, 12*r44, 20*r45) - b5Θdiff2 = @evalpoly(Θ, 2*r52, 6*r53, 12*r54, 20*r55) - b6Θdiff2 = @evalpoly(Θ, 2*r62, 6*r63, 12*r64, 20*r65) - b7Θdiff2 = @evalpoly(Θ, 2*r72, 6*r73, 12*r74, 20*r75) - b8Θdiff2 = @evalpoly(Θ, 2*r82, 6*r83, 12*r84, 20*r85) + b1Θdiff2 = @evalpoly(Θ, 2 * r12, 6 * r13, 12 * r14, 20 * r15) + b3Θdiff2 = @evalpoly(Θ, 2 * r32, 6 * r33, 12 * r34, 20 * r35) + b4Θdiff2 = @evalpoly(Θ, 2 * r42, 6 * r43, 12 * r44, 20 * r45) + b5Θdiff2 = @evalpoly(Θ, 2 * r52, 6 * r53, 12 * r54, 20 * r55) + b6Θdiff2 = @evalpoly(Θ, 2 * r62, 6 * r63, 12 * r64, 20 * r65) + b7Θdiff2 = @evalpoly(Θ, 2 * r72, 6 * r73, 12 * r74, 20 * r75) + b8Θdiff2 = @evalpoly(Θ, 2 * r82, 6 * r83, 12 * r84, 20 * r85) invdt = inv(dt) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing + ) @owrenzen5pre2 - return @inbounds (k[1] * b1Θdiff2 + k[3] * b3Θdiff2 + k[4] * b4Θdiff2 + - k[5] * b5Θdiff2 + - k[6] * b6Θdiff2 + k[7] * b7Θdiff2 + k[8] * b8Θdiff2) * invdt + return @inbounds ( + k[1] * b1Θdiff2 + k[3] * b3Θdiff2 + k[4] * b4Θdiff2 + + k[5] * b5Θdiff2 + + k[6] * b6Θdiff2 + k[7] * b7Θdiff2 + k[8] * b8Θdiff2 + ) * invdt end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs, T::Type{Val{2}}, differential_vars::Nothing) + idxs, T::Type{Val{2}}, differential_vars::Nothing + ) @owrenzen5pre2 - (k[1][idxs] * b1Θdiff2 + k[3][idxs] * b3Θdiff2 + k[4][idxs] * b4Θdiff2 + - k[5][idxs] * b5Θdiff2 + - k[6][idxs] * b6Θdiff2 + k[7][idxs] * b7Θdiff2 + k[8][idxs] * b8Θdiff2) * invdt + ( + k[1][idxs] * b1Θdiff2 + k[3][idxs] * b3Θdiff2 + k[4][idxs] * b4Θdiff2 + + k[5][idxs] * b5Θdiff2 + + k[6][idxs] * b6Θdiff2 + k[7][idxs] * b7Θdiff2 + k[8][idxs] * b8Θdiff2 + ) * invdt end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing + ) @owrenzen5pre2 - @inbounds @.. broadcast=false out=(k[1] * b1Θdiff2 + k[3] * b3Θdiff2 + k[4] * b4Θdiff2 + - k[5] * b5Θdiff2 + k[6] * b6Θdiff2 + k[7] * b7Θdiff2 + - k[8] * b8Θdiff2) * invdt + @inbounds @.. broadcast = false out = ( + k[1] * b1Θdiff2 + k[3] * b3Θdiff2 + k[4] * b4Θdiff2 + + k[5] * b5Θdiff2 + k[6] * b6Θdiff2 + k[7] * b7Θdiff2 + + k[8] * b8Θdiff2 + ) * invdt #@inbounds for i in eachindex(out) # out[i] = (k[1][i]*b1Θdiff2 + k[3][i]*b3Θdiff2 + k[4][i]*b4Θdiff2 + # k[5][i]*b5Θdiff2 + k[6][i]*b6Θdiff2 + k[7][i]*b7Θdiff2 + k[8][i]*b8Θdiff2)*invdt @@ -836,14 +1052,18 @@ end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs, T::Type{Val{2}}, differential_vars::Nothing) + idxs, T::Type{Val{2}}, differential_vars::Nothing + ) @owrenzen5pre2 - @views @.. broadcast=false out=(k[1][idxs] * b1Θdiff2 + k[3][idxs] * b3Θdiff2 + - k[4][idxs] * b4Θdiff2 + - k[5][idxs] * b5Θdiff2 + k[6][idxs] * b6Θdiff2 + - k[7][idxs] * b7Θdiff2 + k[8][idxs] * b8Θdiff2) * invdt + @views @.. broadcast = false out = ( + k[1][idxs] * b1Θdiff2 + k[3][idxs] * b3Θdiff2 + + k[4][idxs] * b4Θdiff2 + + k[5][idxs] * b5Θdiff2 + k[6][idxs] * b6Θdiff2 + + k[7][idxs] * b7Θdiff2 + k[8][idxs] * b8Θdiff2 + ) * invdt #@inbounds for (j,i) in enumerate(idxs) # out[j] = (k[1][i]*b1Θdiff2 + k[3][i]*b3Θdiff2 + k[4][i]*b4Θdiff2 + # k[5][i]*b5Θdiff2 + k[6][i]*b6Θdiff2 + k[7][i]*b7Θdiff2 + k[8][i]*b8Θdiff2)*invdt @@ -853,41 +1073,53 @@ end @def owrenzen5pre3 begin @owrenzen5unpack - b1Θdiff3 = @evalpoly(Θ, 6*r13, 24*r14, 60*r15) - b3Θdiff3 = @evalpoly(Θ, 6*r33, 24*r34, 60*r35) - b4Θdiff3 = @evalpoly(Θ, 6*r43, 24*r44, 60*r45) - b5Θdiff3 = @evalpoly(Θ, 6*r53, 24*r54, 60*r55) - b6Θdiff3 = @evalpoly(Θ, 6*r63, 24*r64, 60*r65) - b7Θdiff3 = @evalpoly(Θ, 6*r73, 24*r74, 60*r75) - b8Θdiff3 = @evalpoly(Θ, 6*r83, 24*r84, 60*r85) + b1Θdiff3 = @evalpoly(Θ, 6 * r13, 24 * r14, 60 * r15) + b3Θdiff3 = @evalpoly(Θ, 6 * r33, 24 * r34, 60 * r35) + b4Θdiff3 = @evalpoly(Θ, 6 * r43, 24 * r44, 60 * r45) + b5Θdiff3 = @evalpoly(Θ, 6 * r53, 24 * r54, 60 * r55) + b6Θdiff3 = @evalpoly(Θ, 6 * r63, 24 * r64, 60 * r65) + b7Θdiff3 = @evalpoly(Θ, 6 * r73, 24 * r74, 60 * r75) + b8Θdiff3 = @evalpoly(Θ, 6 * r83, 24 * r84, 60 * r85) invdt2 = inv(dt)^2 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing + ) @owrenzen5pre3 - return @inbounds (k[1] * b1Θdiff3 + k[3] * b3Θdiff3 + k[4] * b4Θdiff3 + - k[5] * b5Θdiff3 + - k[6] * b6Θdiff3 + k[7] * b7Θdiff3 + k[8] * b8Θdiff3) * invdt2 + return @inbounds ( + k[1] * b1Θdiff3 + k[3] * b3Θdiff3 + k[4] * b4Θdiff3 + + k[5] * b5Θdiff3 + + k[6] * b6Θdiff3 + k[7] * b7Θdiff3 + k[8] * b8Θdiff3 + ) * invdt2 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs, T::Type{Val{3}}, differential_vars::Nothing) + idxs, T::Type{Val{3}}, differential_vars::Nothing + ) @owrenzen5pre3 - (k[1][idxs] * b1Θdiff3 + k[3][idxs] * b3Θdiff3 + k[4][idxs] * b4Θdiff3 + - k[5][idxs] * b5Θdiff3 + - k[6][idxs] * b6Θdiff3 + k[7][idxs] * b7Θdiff3 + k[8][idxs] * b8Θdiff3) * invdt2 + ( + k[1][idxs] * b1Θdiff3 + k[3][idxs] * b3Θdiff3 + k[4][idxs] * b4Θdiff3 + + k[5][idxs] * b5Θdiff3 + + k[6][idxs] * b6Θdiff3 + k[7][idxs] * b7Θdiff3 + k[8][idxs] * b8Θdiff3 + ) * invdt2 end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing + ) @owrenzen5pre3 - @inbounds @.. broadcast=false out=(k[1] * b1Θdiff3 + k[3] * b3Θdiff3 + k[4] * b4Θdiff3 + - k[5] * b5Θdiff3 + k[6] * b6Θdiff3 + k[7] * b7Θdiff3 + - k[8] * b8Θdiff3) * invdt2 + @inbounds @.. broadcast = false out = ( + k[1] * b1Θdiff3 + k[3] * b3Θdiff3 + k[4] * b4Θdiff3 + + k[5] * b5Θdiff3 + k[6] * b6Θdiff3 + k[7] * b7Θdiff3 + + k[8] * b8Θdiff3 + ) * invdt2 #@inbounds for i in eachindex(out) # out[i] = (k[1][i]*b1Θdiff3 + k[3][i]*b3Θdiff3 + k[4][i]*b4Θdiff3 + # k[5][i]*b5Θdiff3 + k[6][i]*b6Θdiff3 + k[7][i]*b7Θdiff3 + k[8][i]*b8Θdiff3)*invdt2 @@ -895,14 +1127,18 @@ end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs, T::Type{Val{3}}, differential_vars::Nothing) + idxs, T::Type{Val{3}}, differential_vars::Nothing + ) @owrenzen5pre3 - @views @.. broadcast=false out=(k[1][idxs] * b1Θdiff3 + k[3][idxs] * b3Θdiff3 + - k[4][idxs] * b4Θdiff3 + - k[5][idxs] * b5Θdiff3 + k[6][idxs] * b6Θdiff3 + - k[7][idxs] * b7Θdiff3 + k[8][idxs] * b8Θdiff3) * invdt2 + @views @.. broadcast = false out = ( + k[1][idxs] * b1Θdiff3 + k[3][idxs] * b3Θdiff3 + + k[4][idxs] * b4Θdiff3 + + k[5][idxs] * b5Θdiff3 + k[6][idxs] * b6Θdiff3 + + k[7][idxs] * b7Θdiff3 + k[8][idxs] * b8Θdiff3 + ) * invdt2 #@inbounds for (j,i) in enumerate(idxs) # out[j] = (k[1][i]*b1Θdiff3 + k[3][i]*b3Θdiff3 + k[4][i]*b4Θdiff3 + # k[5][i]*b5Θdiff3 + k[6][i]*b6Θdiff3 + k[7][i]*b7Θdiff3 + k[8][i]*b8Θdiff3)*invdt2 @@ -912,41 +1148,53 @@ end @def owrenzen5pre4 begin @owrenzen5unpack - b1Θdiff4 = @evalpoly(Θ, 24*r14, 120*r15) - b3Θdiff4 = @evalpoly(Θ, 24*r34, 120*r35) - b4Θdiff4 = @evalpoly(Θ, 24*r44, 120*r45) - b5Θdiff4 = @evalpoly(Θ, 24*r54, 120*r55) - b6Θdiff4 = @evalpoly(Θ, 24*r64, 120*r65) - b7Θdiff4 = @evalpoly(Θ, 24*r74, 120*r75) - b8Θdiff4 = @evalpoly(Θ, 24*r84, 120*r85) + b1Θdiff4 = @evalpoly(Θ, 24 * r14, 120 * r15) + b3Θdiff4 = @evalpoly(Θ, 24 * r34, 120 * r35) + b4Θdiff4 = @evalpoly(Θ, 24 * r44, 120 * r45) + b5Θdiff4 = @evalpoly(Θ, 24 * r54, 120 * r55) + b6Θdiff4 = @evalpoly(Θ, 24 * r64, 120 * r65) + b7Θdiff4 = @evalpoly(Θ, 24 * r74, 120 * r75) + b8Θdiff4 = @evalpoly(Θ, 24 * r84, 120 * r85) invdt3 = inv(dt)^3 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs::Nothing, T::Type{Val{4}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{4}}, differential_vars::Nothing + ) @owrenzen5pre4 - return @inbounds (k[1] * b1Θdiff4 + k[3] * b3Θdiff4 + k[4] * b4Θdiff4 + - k[5] * b5Θdiff4 + - k[6] * b6Θdiff4 + k[7] * b7Θdiff4 + k[8] * b8Θdiff4) * invdt3 + return @inbounds ( + k[1] * b1Θdiff4 + k[3] * b3Θdiff4 + k[4] * b4Θdiff4 + + k[5] * b5Θdiff4 + + k[6] * b6Θdiff4 + k[7] * b7Θdiff4 + k[8] * b8Θdiff4 + ) * invdt3 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs, T::Type{Val{4}}, differential_vars::Nothing) + idxs, T::Type{Val{4}}, differential_vars::Nothing + ) @owrenzen5pre4 - (k[1][idxs] * b1Θdiff4 + k[3][idxs] * b3Θdiff4 + k[4][idxs] * b4Θdiff4 + - k[5][idxs] * b5Θdiff4 + - k[6][idxs] * b6Θdiff4 + k[7][idxs] * b7Θdiff4 + k[8][idxs] * b8Θdiff4) * invdt3 + ( + k[1][idxs] * b1Θdiff4 + k[3][idxs] * b3Θdiff4 + k[4][idxs] * b4Θdiff4 + + k[5][idxs] * b5Θdiff4 + + k[6][idxs] * b6Θdiff4 + k[7][idxs] * b7Θdiff4 + k[8][idxs] * b8Θdiff4 + ) * invdt3 end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs::Nothing, T::Type{Val{4}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{4}}, differential_vars::Nothing + ) @owrenzen5pre4 - @inbounds @.. broadcast=false out=(k[1] * b1Θdiff4 + k[3] * b3Θdiff4 + k[4] * b4Θdiff4 + - k[5] * b5Θdiff4 + k[6] * b6Θdiff4 + k[7] * b7Θdiff4 + - k[8] * b8Θdiff4) * invdt3 + @inbounds @.. broadcast = false out = ( + k[1] * b1Θdiff4 + k[3] * b3Θdiff4 + k[4] * b4Θdiff4 + + k[5] * b5Θdiff4 + k[6] * b6Θdiff4 + k[7] * b7Θdiff4 + + k[8] * b8Θdiff4 + ) * invdt3 #@inbounds for i in eachindex(out) # out[i] = (k[1][i]*b1Θdiff4 + k[3][i]*b3Θdiff4 + k[4][i]*b4Θdiff4 + # k[5][i]*b5Θdiff4 + k[6][i]*b6Θdiff4 + k[7][i]*b7Θdiff4 + k[8][i]*b8Θdiff4)*invdt3 @@ -954,14 +1202,18 @@ end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs, T::Type{Val{4}}, differential_vars::Nothing) + idxs, T::Type{Val{4}}, differential_vars::Nothing + ) @owrenzen5pre4 - @views @.. broadcast=false out=(k[1][idxs] * b1Θdiff4 + k[3][idxs] * b3Θdiff4 + - k[4][idxs] * b4Θdiff4 + - k[5][idxs] * b5Θdiff4 + k[6][idxs] * b6Θdiff4 + - k[7][idxs] * b7Θdiff4 + k[8][idxs] * b8Θdiff4) * invdt3 + @views @.. broadcast = false out = ( + k[1][idxs] * b1Θdiff4 + k[3][idxs] * b3Θdiff4 + + k[4][idxs] * b4Θdiff4 + + k[5][idxs] * b5Θdiff4 + k[6][idxs] * b6Θdiff4 + + k[7][idxs] * b7Θdiff4 + k[8][idxs] * b8Θdiff4 + ) * invdt3 #@inbounds for (j,i) in enumerate(idxs) # out[j] = (k[1][i]*b1Θdiff4 + k[3][i]*b3Θdiff4 + k[4][i]*b4Θdiff4 + # k[5][i]*b5Θdiff4 + k[6][i]*b6Θdiff4 + k[7][i]*b7Θdiff4 + k[8][i]*b8Θdiff4)*invdt3 @@ -981,31 +1233,43 @@ end invdt4 = inv(dt)^4 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs::Nothing, T::Type{Val{5}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{5}}, differential_vars::Nothing + ) @owrenzen5pre5 - return @inbounds (k[1] * b1Θdiff5 + k[3] * b3Θdiff5 + k[4] * b4Θdiff5 + - k[5] * b5Θdiff5 + - k[6] * b6Θdiff5 + k[7] * b7Θdiff5 + k[8] * b8Θdiff5) * invdt4 + return @inbounds ( + k[1] * b1Θdiff5 + k[3] * b3Θdiff5 + k[4] * b4Θdiff5 + + k[5] * b5Θdiff5 + + k[6] * b6Θdiff5 + k[7] * b7Θdiff5 + k[8] * b8Θdiff5 + ) * invdt4 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs, T::Type{Val{5}}, differential_vars::Nothing) + idxs, T::Type{Val{5}}, differential_vars::Nothing + ) @owrenzen5pre5 - (k[1][idxs] * b1Θdiff5 + k[3][idxs] * b3Θdiff5 + k[4][idxs] * b4Θdiff5 + - k[5][idxs] * b5Θdiff5 + - k[6][idxs] * b6Θdiff5 + k[7][idxs] * b7Θdiff5 + k[8][idxs] * b8Θdiff5) * invdt4 + ( + k[1][idxs] * b1Θdiff5 + k[3][idxs] * b3Θdiff5 + k[4][idxs] * b4Θdiff5 + + k[5][idxs] * b5Θdiff5 + + k[6][idxs] * b6Θdiff5 + k[7][idxs] * b7Θdiff5 + k[8][idxs] * b8Θdiff5 + ) * invdt4 end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs::Nothing, T::Type{Val{5}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{5}}, differential_vars::Nothing + ) @owrenzen5pre5 - @inbounds @.. broadcast=false out=(k[1] * b1Θdiff5 + k[3] * b3Θdiff5 + k[4] * b4Θdiff5 + - k[5] * b5Θdiff5 + k[6] * b6Θdiff5 + k[7] * b7Θdiff5 + - k[8] * b8Θdiff5) * invdt4 + @inbounds @.. broadcast = false out = ( + k[1] * b1Θdiff5 + k[3] * b3Θdiff5 + k[4] * b4Θdiff5 + + k[5] * b5Θdiff5 + k[6] * b6Θdiff5 + k[7] * b7Θdiff5 + + k[8] * b8Θdiff5 + ) * invdt4 #@inbounds for i in eachindex(out) # out[i] = (k[1][i]*b1Θdiff5 + k[3][i]*b3Θdiff5 + k[4][i]*b4Θdiff5 + # k[5][i]*b5Θdiff5 + k[6][i]*b6Θdiff5 + k[7][i]*b7Θdiff5 + k[8][i]*b8Θdiff5)*invdt4 @@ -1013,14 +1277,18 @@ end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{OwrenZen5ConstantCache, OwrenZen5Cache}, - idxs, T::Type{Val{5}}, differential_vars::Nothing) + idxs, T::Type{Val{5}}, differential_vars::Nothing + ) @owrenzen5pre5 - @views @.. broadcast=false out=(k[1][idxs] * b1Θdiff5 + k[3][idxs] * b3Θdiff5 + - k[4][idxs] * b4Θdiff5 + - k[5][idxs] * b5Θdiff5 + k[6][idxs] * b6Θdiff5 + - k[7][idxs] * b7Θdiff5 + k[8][idxs] * b8Θdiff5) * invdt4 + @views @.. broadcast = false out = ( + k[1][idxs] * b1Θdiff5 + k[3][idxs] * b3Θdiff5 + + k[4][idxs] * b4Θdiff5 + + k[5][idxs] * b5Θdiff5 + k[6][idxs] * b6Θdiff5 + + k[7][idxs] * b7Θdiff5 + k[8][idxs] * b8Θdiff5 + ) * invdt4 #@inbounds for (j,i) in enumerate(idxs) # out[j] = (k[1][i]*b1Θdiff5 + k[3][i]*b3Θdiff5 + k[4][i]*b4Θdiff5 + # k[5][i]*b5Θdiff5 + k[6][i]*b6Θdiff5 + k[7][i]*b7Θdiff5 + k[8][i]*b8Θdiff5)*invdt4 @@ -1049,71 +1317,93 @@ end b6Θ = Θ² * @evalpoly(Θ, r062, r063, r064, r065, r066) b7Θ = Θ² * @evalpoly(Θ, r072, r073, r074, r075, r076) b8Θ = Θ² * @evalpoly(Θ, r082, r083, r084, r085, r086) - b9Θ = (Θ² * Θ) * @evalpoly(Θ, r093, r094, r095, - r096) + b9Θ = (Θ² * Θ) * @evalpoly( + Θ, r093, r094, r095, + r096 + ) b10Θ = Θ² * @evalpoly(Θ, r102, r103, r104, r105, r106) b11Θ = Θ² * @evalpoly(Θ, r112, r113, r114, r115, r116) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::BS5ConstantCache, idxs::Nothing, - T::Type{Val{0}}, differential_vars::Nothing) +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::BS5ConstantCache, idxs::Nothing, + T::Type{Val{0}}, differential_vars::Nothing + ) @bs5pre0 # return @.. broadcast=false y₀ + dt*Θ*k[1] + dt*(k[1]*b1Θ + k[3]*b3Θ + k[4]*b4Θ + k[5]*b5Θ + k[6]*b6Θ + k[7]*b7Θ + k[8]*b8Θ + k[9]*b9Θ + k[10]*b10Θ + k[11]*b11Θ) return @inbounds y₀ + dt * Θ * k[1] + - dt * (k[1] * b1Θ + k[3] * b3Θ + k[4] * b4Θ + k[5] * b5Θ + - k[6] * b6Θ + k[7] * b7Θ + k[8] * b8Θ + k[9] * b9Θ + k[10] * b10Θ + - k[11] * b11Θ) + dt * ( + k[1] * b1Θ + k[3] * b3Θ + k[4] * b4Θ + k[5] * b5Θ + + k[6] * b6Θ + k[7] * b7Θ + k[8] * b8Θ + k[9] * b9Θ + k[10] * b10Θ + + k[11] * b11Θ + ) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::BS5Cache, idxs::Nothing, - T::Type{Val{0}}, differential_vars::Nothing) +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::BS5Cache, idxs::Nothing, + T::Type{Val{0}}, differential_vars::Nothing + ) @bs5pre0 # return @.. broadcast=false y₀ + dt*Θ*k[1] + dt*(k[1]*b1Θ + k[3]*b3Θ + k[4]*b4Θ + k[5]*b5Θ + k[6]*b6Θ + k[7]*b7Θ + k[8]*b8Θ + k[9]*b9Θ + k[10]*b10Θ + k[11]*b11Θ) - return @inbounds @.. broadcast=false y₀+dt*Θ*k[1]+ - dt*(k[1] * b1Θ + k[3] * b3Θ + k[4] * b4Θ + - k[5] * b5Θ + - k[6] * b6Θ + k[7] * b7Θ + k[8] * b8Θ + - k[9] * b9Θ + k[10] * b10Θ + k[11] * b11Θ) + return @inbounds @.. broadcast = false y₀ + dt * Θ * k[1] + + dt * ( + k[1] * b1Θ + k[3] * b3Θ + k[4] * b4Θ + + k[5] * b5Θ + + k[6] * b6Θ + k[7] * b7Θ + k[8] * b8Θ + + k[9] * b9Θ + k[10] * b10Θ + k[11] * b11Θ + ) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{BS5ConstantCache, BS5Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @bs5pre0 # return @.. broadcast=false y₀[idxs] + dt*Θ*k[1][idxs] + dt*(k[1][idxs]*b1Θ + k[3][idxs]*b3Θ + # k[4][idxs]*b4Θ + k[5][idxs]*b5Θ + k[6][idxs]*b6Θ + k[7][idxs]*b7Θ + # k[8][idxs]*b8Θ + k[9][idxs]*b9Θ + k[10][idxs]*b10Θ + k[11][idxs]*b11Θ) return y₀[idxs] + dt * Θ * k[1][idxs] + - dt * (k[1][idxs] * b1Θ + k[3][idxs] * b3Θ + + dt * ( + k[1][idxs] * b1Θ + k[3][idxs] * b3Θ + k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + k[6][idxs] * b6Θ + k[7][idxs] * b7Θ + - k[8][idxs] * b8Θ + k[9][idxs] * b9Θ + k[10][idxs] * b10Θ + k[11][idxs] * b11Θ) + k[8][idxs] * b8Θ + k[9][idxs] * b9Θ + k[10][idxs] * b10Θ + k[11][idxs] * b11Θ + ) end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{BS5ConstantCache, BS5Cache}, idxs::Nothing, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @bs5pre0 - @inbounds @.. broadcast=false out=y₀ + dt * Θ * k[1] + - dt * - (k[1] * b1Θ + k[3] * b3Θ + k[4] * b4Θ + k[5] * b5Θ + - k[6] * b6Θ + k[7] * b7Θ + k[8] * b8Θ + k[9] * b9Θ + - k[10] * b10Θ + k[11] * b11Θ) + @inbounds @.. broadcast = false out = y₀ + dt * Θ * k[1] + + dt * + ( + k[1] * b1Θ + k[3] * b3Θ + k[4] * b4Θ + k[5] * b5Θ + + k[6] * b6Θ + k[7] * b7Θ + k[8] * b8Θ + k[9] * b9Θ + + k[10] * b10Θ + k[11] * b11Θ + ) #@inbounds for i in eachindex(out) # out[i] = y₀[i] + dt*Θ*k[1][i] + dt*(k[1][i]*b1Θ + k[3][i]*b3Θ + k[4][i]*b4Θ + k[5][i]*b5Θ + k[6][i]*b6Θ + k[7][i]*b7Θ + k[8][i]*b8Θ + k[9][i]*b9Θ + k[10][i]*b10Θ + k[11][i]*b11Θ) #end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{BS5ConstantCache, BS5Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @bs5pre0 - @views @.. broadcast=false out=y₀[idxs] + dt * Θ * k[1][idxs] + - dt * - (k[1][idxs] * b1Θ + k[3][idxs] * b3Θ + k[4][idxs] * b4Θ + - k[5][idxs] * b5Θ + k[6][idxs] * b6Θ + k[7][idxs] * b7Θ + - k[8][idxs] * b8Θ + k[9][idxs] * b9Θ + - k[10][idxs] * b10Θ + k[11][idxs] * b11Θ) + @views @.. broadcast = false out = y₀[idxs] + dt * Θ * k[1][idxs] + + dt * + ( + k[1][idxs] * b1Θ + k[3][idxs] * b3Θ + k[4][idxs] * b4Θ + + k[5][idxs] * b5Θ + k[6][idxs] * b6Θ + k[7][idxs] * b7Θ + + k[8][idxs] * b8Θ + k[9][idxs] * b9Θ + + k[10][idxs] * b10Θ + k[11][idxs] * b11Θ + ) #@inbounds for (j,i) in enumerate(idxs) # out[j] = y₀[i] + dt*Θ*k[1][i] + dt*(k[1][i]*b1Θ + k[3][i]*b3Θ + k[4][i]*b4Θ + k[5][i]*b5Θ + k[6][i]*b6Θ + k[7][i]*b7Θ + k[8][i]*b8Θ + k[9][i]*b9Θ + k[10][i]*b10Θ + k[11][i]*b11Θ) #end @@ -1123,67 +1413,75 @@ end @def bs5pre1 begin @bs5unpack Θ² = Θ * Θ - b1Θdiff = Θ * @evalpoly(Θ, 2*r012, 3*r013, 4*r014, 5*r015, 6*r016) - b3Θdiff = Θ * @evalpoly(Θ, 2*r032, 3*r033, 4*r034, 5*r035, 6*r036) - b4Θdiff = Θ * @evalpoly(Θ, 2*r042, 3*r043, 4*r044, 5*r045, 6*r046) - b5Θdiff = Θ * @evalpoly(Θ, 2*r052, 3*r053, 4*r054, 5*r055, 6*r056) - b6Θdiff = Θ * @evalpoly(Θ, 2*r062, 3*r063, 4*r064, 5*r065, 6*r066) - b7Θdiff = Θ * @evalpoly(Θ, 2*r072, 3*r073, 4*r074, 5*r075, 6*r076) - b8Θdiff = Θ * @evalpoly(Θ, 2*r082, 3*r083, 4*r084, 5*r085, 6*r086) - b9Θdiff = Θ² * @evalpoly(Θ, 3*r093, 4*r094, 5*r095, 6*r096) - b10Θdiff = Θ * @evalpoly(Θ, 2*r102, 3*r103, 4*r104, 5*r105, 6*r106) - b11Θdiff = Θ * @evalpoly(Θ, 2*r112, 3*r113, 4*r114, 5*r115, 6*r116) -end - -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, + b1Θdiff = Θ * @evalpoly(Θ, 2 * r012, 3 * r013, 4 * r014, 5 * r015, 6 * r016) + b3Θdiff = Θ * @evalpoly(Θ, 2 * r032, 3 * r033, 4 * r034, 5 * r035, 6 * r036) + b4Θdiff = Θ * @evalpoly(Θ, 2 * r042, 3 * r043, 4 * r044, 5 * r045, 6 * r046) + b5Θdiff = Θ * @evalpoly(Θ, 2 * r052, 3 * r053, 4 * r054, 5 * r055, 6 * r056) + b6Θdiff = Θ * @evalpoly(Θ, 2 * r062, 3 * r063, 4 * r064, 5 * r065, 6 * r066) + b7Θdiff = Θ * @evalpoly(Θ, 2 * r072, 3 * r073, 4 * r074, 5 * r075, 6 * r076) + b8Θdiff = Θ * @evalpoly(Θ, 2 * r082, 3 * r083, 4 * r084, 5 * r085, 6 * r086) + b9Θdiff = Θ² * @evalpoly(Θ, 3 * r093, 4 * r094, 5 * r095, 6 * r096) + b10Θdiff = Θ * @evalpoly(Θ, 2 * r102, 3 * r103, 4 * r104, 5 * r105, 6 * r106) + b11Θdiff = Θ * @evalpoly(Θ, 2 * r112, 3 * r113, 4 * r114, 5 * r115, 6 * r116) +end + +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{BS5ConstantCache, BS5Cache}, idxs::Nothing, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) @bs5pre1 # return @.. broadcast=false k[1] + k[1]*b1Θdiff + k[3]*b3Θdiff + k[4]*b4Θdiff + k[5]*b5Θdiff + k[6]*b6Θdiff + k[7]*b7Θdiff + k[8]*b8Θdiff + k[9]*b9Θdiff + k[10]*b10Θdiff + k[11]*b11Θdiff return @inbounds k[1] + k[1] * b1Θdiff + k[3] * b3Θdiff + k[4] * b4Θdiff + - k[5] * b5Θdiff + - k[6] * b6Θdiff + k[7] * b7Θdiff + k[8] * b8Θdiff + k[9] * b9Θdiff + - k[10] * b10Θdiff + k[11] * b11Θdiff + k[5] * b5Θdiff + + k[6] * b6Θdiff + k[7] * b7Θdiff + k[8] * b8Θdiff + k[9] * b9Θdiff + + k[10] * b10Θdiff + k[11] * b11Θdiff end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{BS5ConstantCache, BS5Cache}, idxs, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) @bs5pre1 # return @.. broadcast=false k[1][idxs] + k[1][idxs]*b1Θdiff + k[3][idxs]*b3Θdiff + # k[4][idxs]*b4Θdiff + k[5][idxs]*b5Θdiff + k[6][idxs]*b6Θdiff + # k[7][idxs]*b7Θdiff + k[8][idxs]*b8Θdiff + k[9][idxs]*b9Θdiff + # k[10][idxs]*b10Θdiff + k[11][idxs]*b11Θdiff return @inbounds k[1][idxs] + k[1][idxs] * b1Θdiff + k[3][idxs] * b3Θdiff + - k[4][idxs] * b4Θdiff + k[5][idxs] * b5Θdiff + k[6][idxs] * b6Θdiff + - k[7][idxs] * b7Θdiff + k[8][idxs] * b8Θdiff + k[9][idxs] * b9Θdiff + - k[10][idxs] * b10Θdiff + k[11][idxs] * b11Θdiff + k[4][idxs] * b4Θdiff + k[5][idxs] * b5Θdiff + k[6][idxs] * b6Θdiff + + k[7][idxs] * b7Θdiff + k[8][idxs] * b8Θdiff + k[9][idxs] * b9Θdiff + + k[10][idxs] * b10Θdiff + k[11][idxs] * b11Θdiff end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{BS5ConstantCache, BS5Cache}, idxs::Nothing, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) @bs5pre1 - @inbounds @.. broadcast=false out=k[1] + k[1] * b1Θdiff + k[3] * b3Θdiff + - k[4] * b4Θdiff + k[5] * b5Θdiff + k[6] * b6Θdiff + - k[7] * b7Θdiff + k[8] * b8Θdiff + k[9] * b9Θdiff + - k[10] * b10Θdiff + k[11] * b11Θdiff + @inbounds @.. broadcast = false out = k[1] + k[1] * b1Θdiff + k[3] * b3Θdiff + + k[4] * b4Θdiff + k[5] * b5Θdiff + k[6] * b6Θdiff + + k[7] * b7Θdiff + k[8] * b8Θdiff + k[9] * b9Θdiff + + k[10] * b10Θdiff + k[11] * b11Θdiff #@inbounds for i in eachindex(out) # out[i] = k[1][i] + k[1][i]*b1Θdiff + k[3][i]*b3Θdiff + k[4][i]*b4Θdiff + k[5][i]*b5Θdiff + k[6][i]*b6Θdiff + k[7][i]*b7Θdiff + k[8][i]*b8Θdiff + k[9][i]*b9Θdiff + k[10][i]*b10Θdiff + k[11][i]*b11Θdiff #end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{BS5ConstantCache, BS5Cache}, idxs, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) @bs5pre1 - @views @.. broadcast=false out=k[1][idxs] + k[1][idxs] * b1Θdiff + - k[3][idxs] * b3Θdiff + k[4][idxs] * b4Θdiff + - k[5][idxs] * b5Θdiff + k[6][idxs] * b6Θdiff + - k[7][idxs] * b7Θdiff + k[8][idxs] * b8Θdiff + - k[9][idxs] * b9Θdiff + k[10][idxs] * b10Θdiff + - k[11][idxs] * b11Θdiff + @views @.. broadcast = false out = k[1][idxs] + k[1][idxs] * b1Θdiff + + k[3][idxs] * b3Θdiff + k[4][idxs] * b4Θdiff + + k[5][idxs] * b5Θdiff + k[6][idxs] * b6Θdiff + + k[7][idxs] * b7Θdiff + k[8][idxs] * b8Θdiff + + k[9][idxs] * b9Θdiff + k[10][idxs] * b10Θdiff + + k[11][idxs] * b11Θdiff #@inbounds for (j,i) in enumerate(idxs) # out[j] = k[1][i] + k[1][i]*b1Θdiff + k[3][i]*b3Θdiff + k[4][i]*b4Θdiff + k[5][i]*b5Θdiff + k[6][i]*b6Θdiff + k[7][i]*b7Θdiff + k[8][i]*b8Θdiff + k[9][i]*b9Θdiff + k[10][i]*b10Θdiff + k[11][i]*b11Θdiff #end diff --git a/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_addsteps.jl b/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_addsteps.jl index d4225ea6e0..787a149892 100644 --- a/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_addsteps.jl +++ b/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_addsteps.jl @@ -1,22 +1,24 @@ -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::OwrenZen4Cache, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::OwrenZen4Cache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 6 || always_calc_begin uidx = eachindex(uprev) (; k1, k2, k3, k4, k5, k6, tmp) = cache (; a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a63, a64, a65, c1, c2, c3, c4) = cache.tab # NOTE: k1 does not need to be evaluated since it is aliased with integrator.fsalfirst. a = dt * a21 - @.. broadcast=false tmp=uprev + a * k1 + @.. broadcast = false tmp = uprev + a * k1 f(k2, tmp, p, t + c1 * dt) - @.. broadcast=false tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false tmp = uprev + dt * (a31 * k1 + a32 * k2) f(k3, tmp, p, t + c2 * dt) - @.. broadcast=false tmp=uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) + @.. broadcast = false tmp = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) f(k4, tmp, p, t + c3 * dt) - @.. broadcast=false tmp=uprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) + @.. broadcast = false tmp = uprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) f(k5, tmp, p, t + c4 * dt) # NOTE: We should not change u here. - @.. broadcast=false tmp=uprev + dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5) + @.. broadcast = false tmp = uprev + dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5) f(k6, tmp, p, t + dt) copyat_or_push!(k, 1, k1) copyat_or_push!(k, 2, k2) @@ -28,36 +30,42 @@ nothing end -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::OwrenZen5Cache, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::OwrenZen5Cache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 8 || always_calc_begin uidx = eachindex(uprev) (; k1, k2, k3, k4, k5, k6, k7, k8, tmp) = cache (; a21, a31, a32, a41, a42, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, c1, c2, c3, c4, c5, c6) = cache.tab # NOTE: k1 does not need to be evaluated since it is aliased with integrator.fsalfirst. a = dt * a21 - @.. broadcast=false tmp=uprev + a * k1 + @.. broadcast = false tmp = uprev + a * k1 f(k2, tmp, p, t + c1 * dt) - @.. broadcast=false tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false tmp = uprev + dt * (a31 * k1 + a32 * k2) f(k3, tmp, p, t + c2 * dt) - @.. broadcast=false tmp=uprev + dt * (a41 * k1 + a42 * k2 + k3) + @.. broadcast = false tmp = uprev + dt * (a41 * k1 + a42 * k2 + k3) f(k4, tmp, p, t + c3 * dt) - @.. broadcast=false tmp=uprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) + @.. broadcast = false tmp = uprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) f(k5, tmp, p, t + c4 * dt) - @.. broadcast=false tmp=uprev + - dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5) + @.. broadcast = false tmp = uprev + + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5) f(k6, tmp, p, t + c5 * dt) - @.. broadcast=false tmp=uprev + - dt * - (a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + a75 * k5 + - a76 * k6) + @.. broadcast = false tmp = uprev + + dt * + ( + a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + a75 * k5 + + a76 * k6 + ) f(k7, tmp, p, t + c6 * dt) # NOTE: We should not change u here. - @.. broadcast=false tmp=uprev + - dt * - (a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + a86 * k6 + - a87 * k7) + @.. broadcast = false tmp = uprev + + dt * + ( + a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + a86 * k6 + + a87 * k7 + ) f(k8, tmp, p, t + dt) copyat_or_push!(k, 1, k1) copyat_or_push!(k, 2, k2) @@ -71,9 +79,11 @@ end nothing end -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::DP5Cache, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::DP5Cache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 4 || always_calc_begin T = constvalue(recursive_unitless_bottom_eltype(u)) T2 = constvalue(typeof(one(t))) @@ -81,29 +91,31 @@ end (; k1, k2, k3, k4, k5, k6, k7, dense_tmp3, dense_tmp4, update, bspl, utilde, tmp, atmp) = cache uidx = eachindex(uprev) f(k1, uprev, p, t) - @.. broadcast=false tmp=uprev + dt * (a21 * k1) + @.. broadcast = false tmp = uprev + dt * (a21 * k1) f(k2, tmp, p, t + c1 * dt) - @.. broadcast=false tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false tmp = uprev + dt * (a31 * k1 + a32 * k2) f(k3, tmp, p, t + c2 * dt) - @.. broadcast=false tmp=uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) + @.. broadcast = false tmp = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) f(k4, tmp, p, t + c3 * dt) - @.. broadcast=false tmp=uprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) + @.. broadcast = false tmp = uprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) f(k5, tmp, p, t + c4 * dt) - @.. broadcast=false tmp=uprev + - dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5) + @.. broadcast = false tmp = uprev + + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5) f(k6, tmp, p, t + dt) - @.. broadcast=false update=a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6 - @.. broadcast=false tmp=uprev + dt * update + @.. broadcast = false update = a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6 + @.. broadcast = false tmp = uprev + dt * update f(k7, tmp, p, t + dt) copyat_or_push!(k, 1, update) - @.. broadcast=false utilde=dt * (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + - btilde5 * k5 + btilde6 * k6 + btilde7 * k7) + @.. broadcast = false utilde = dt * ( + btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + + btilde5 * k5 + btilde6 * k6 + btilde7 * k7 + ) #integrator.k[4] == k5 - @.. broadcast=false k5=d1 * k1 + d3 * k3 + d4 * k4 + d5 * k5 + d6 * k6 + d7 * k7 + @.. broadcast = false k5 = d1 * k1 + d3 * k3 + d4 * k4 + d5 * k5 + d6 * k6 + d7 * k7 #bspl == k3 - @.. broadcast=false bspl=k1 - update + @.. broadcast = false bspl = k1 - update # k6 === integrator.k[3] === k2 - @.. broadcast=false k6=update - k7 - bspl + @.. broadcast = false k6 = update - k7 - bspl copyat_or_push!(k, 2, bspl) copyat_or_push!(k, 3, k6) copyat_or_push!(k, 4, k5) @@ -117,33 +129,39 @@ Computers and Mathematics with Applications, Vol. 32, No. 6, 1996, pages 15 to 2 Called to add the extra k9, k10, k11 steps for the Order 5 interpolation when needed """ -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::BS5Cache, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::BS5Cache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 8 || always_calc_begin uidx = eachindex(uprev) (; k1, k2, k3, k4, k5, k6, k7, k8, tmp) = cache (; c1, c2, c3, c4, c5, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87) = cache.tab - @.. broadcast=false tmp=uprev + dt * a21 * k1 + @.. broadcast = false tmp = uprev + dt * a21 * k1 f(k2, tmp, p, t + c1 * dt) - @.. broadcast=false tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false tmp = uprev + dt * (a31 * k1 + a32 * k2) f(k3, tmp, p, t + c2 * dt) - @.. broadcast=false tmp=uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) + @.. broadcast = false tmp = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) f(k4, tmp, p, t + c3 * dt) - @.. broadcast=false tmp=uprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) + @.. broadcast = false tmp = uprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) f(k5, tmp, p, t + c4 * dt) - @.. broadcast=false tmp=uprev + - dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5) + @.. broadcast = false tmp = uprev + + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5) f(k6, tmp, p, t + c5 * dt) - @.. broadcast=false tmp=uprev + - dt * - (a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + a75 * k5 + - a76 * k6) + @.. broadcast = false tmp = uprev + + dt * + ( + a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + a75 * k5 + + a76 * k6 + ) f(k7, tmp, p, t + dt) - @.. broadcast=false tmp=uprev + - dt * - (a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + a86 * k6 + - a87 * k7) + @.. broadcast = false tmp = uprev + + dt * + ( + a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + a86 * k6 + + a87 * k7 + ) f(k8, tmp, p, t + dt) copyat_or_push!(k, 1, k1) copyat_or_push!(k, 2, k2) @@ -159,33 +177,41 @@ Called to add the extra k9, k10, k11 steps for the Order 5 interpolation when ne rtmp = similar(cache.k1) (; tmp) = cache (; c6, c7, c8, a91, a92, a93, a94, a95, a96, a97, a98, a101, a102, a103, a104, a105, a106, a107, a108, a109, a111, a112, a113, a114, a115, a116, a117, a118, a119, a1110) = cache.tab - @.. broadcast=false tmp=uprev + - dt * (a91 * k[1] + a92 * k[2] + a93 * k[3] + a94 * k[4] + - a95 * k[5] + a96 * k[6] + a97 * k[7] + a98 * k[8]) + @.. broadcast = false tmp = uprev + + dt * ( + a91 * k[1] + a92 * k[2] + a93 * k[3] + a94 * k[4] + + a95 * k[5] + a96 * k[6] + a97 * k[7] + a98 * k[8] + ) f(rtmp, tmp, p, t + c6 * dt) copyat_or_push!(k, 9, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a101 * k[1] + a102 * k[2] + a103 * k[3] + a104 * k[4] + - a105 * k[5] + a106 * k[6] + a107 * k[7] + a108 * k[8] + - a109 * k[9]) + @.. broadcast = false tmp = uprev + + dt * + ( + a101 * k[1] + a102 * k[2] + a103 * k[3] + a104 * k[4] + + a105 * k[5] + a106 * k[6] + a107 * k[7] + a108 * k[8] + + a109 * k[9] + ) f(rtmp, tmp, p, t + c7 * dt) copyat_or_push!(k, 10, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a111 * k[1] + a112 * k[2] + a113 * k[3] + a114 * k[4] + - a115 * k[5] + a116 * k[6] + a117 * k[7] + a118 * k[8] + - a119 * k[9] + a1110 * k[10]) + @.. broadcast = false tmp = uprev + + dt * + ( + a111 * k[1] + a112 * k[2] + a113 * k[3] + a114 * k[4] + + a115 * k[5] + a116 * k[6] + a117 * k[7] + a118 * k[8] + + a119 * k[9] + a1110 * k[10] + ) f(rtmp, tmp, p, t + c8 * dt) copyat_or_push!(k, 11, rtmp) end nothing end -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::OwrenZen3ConstantCache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 4 || always_calc_begin (; a21, a31, a32, a41, a42, a43, c1, c2) = cache k1 = f(uprev, p, t) @@ -203,20 +229,22 @@ end nothing end -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::OwrenZen3Cache, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::OwrenZen3Cache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 4 || always_calc_begin (; k1, k2, k3, k4, tmp) = cache (; a21, a31, a32, a41, a42, a43, c1, c2) = cache.tab # NOTE: k1 does not need to be evaluated since it is aliased with integrator.fsalfirst. a1 = dt * a21 - @.. broadcast=false tmp=uprev + a1 * k1 + @.. broadcast = false tmp = uprev + a1 * k1 f(k2, tmp, p, t + c1 * dt) - @.. broadcast=false tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false tmp = uprev + dt * (a31 * k1 + a32 * k2) f(k3, tmp, p, t + c2 * dt) # NOTE: We should not change u here. - @.. broadcast=false tmp=uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) + @.. broadcast = false tmp = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) f(k4, tmp, p, t + dt) copyat_or_push!(k, 1, k1) copyat_or_push!(k, 2, k2) @@ -226,10 +254,12 @@ end nothing end -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::OwrenZen4ConstantCache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 6 || always_calc_begin (; a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a63, a64, a65, c1, c2, c3, c4) = cache k1 = f(uprev, p, t) @@ -290,10 +320,12 @@ end end =# -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::OwrenZen5ConstantCache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 8 || always_calc_begin (; a21, a31, a32, a41, a42, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, c1, c2, c3, c4, c5, c6) = cache k1 = f(uprev, p, t) @@ -302,13 +334,16 @@ end k3 = f(uprev + dt * (a31 * k1 + a32 * k2), p, t + c2 * dt) k4 = f(uprev + dt * (a41 * k1 + a42 * k2 + k3), p, t + c3 * dt) k5 = f(uprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4), p, t + c4 * dt) - k6 = f(uprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5), p, - t + c5 * dt) + k6 = f( + uprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5), p, + t + c5 * dt + ) k7 = f( uprev + - dt * (a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6), + dt * (a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6), p, - t + c6 * dt) + t + c6 * dt + ) u = uprev + dt * (a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + a86 * k6 + a87 * k7) k8 = f(u, p, t + dt) copyat_or_push!(k, 1, k1) @@ -373,9 +408,11 @@ end end =# -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::DP5ConstantCache, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::DP5ConstantCache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 4 || always_calc_begin T = constvalue(recursive_unitless_bottom_eltype(u)) T2 = constvalue(typeof(one(t))) @@ -385,8 +422,10 @@ end k3 = f(uprev + dt * (a31 * k1 + a32 * k2), p, t + c2 * dt) k4 = f(uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3), p, t + c3 * dt) k5 = f(uprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4), p, t + c4 * dt) - k6 = f(uprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5), p, - t + dt) + k6 = f( + uprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5), p, + t + dt + ) update = a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6 k7 = f(uprev + dt * update, p, t + dt) copyat_or_push!(k, 1, update) @@ -457,69 +496,107 @@ Computers and Mathematics with Applications, Vol. 32, No. 6, 1996, pages 15 to 2 Called to add the extra k9, k10, k11 steps for the Order 5 interpolation when needed """ -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::BS5ConstantCache, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::BS5ConstantCache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 8 || always_calc_begin (; c1, c2, c3, c4, c5, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87) = cache copyat_or_push!(k, 1, f(uprev, p, t)) copyat_or_push!(k, 2, f(uprev + dt * a21 * k[1], p, t + c1 * dt)) copyat_or_push!(k, 3, f(uprev + dt * (a31 * k[1] + a32 * k[2]), p, t + c2 * dt)) - copyat_or_push!(k, 4, - f(uprev + dt * (a41 * k[1] + a42 * k[2] + a43 * k[3]), p, - t + c3 * dt)) - copyat_or_push!(k, 5, - f(uprev + dt * (a51 * k[1] + a52 * k[2] + a53 * k[3] + a54 * k[4]), - p, t + c4 * dt)) - copyat_or_push!(k, 6, + copyat_or_push!( + k, 4, + f( + uprev + dt * (a41 * k[1] + a42 * k[2] + a43 * k[3]), p, + t + c3 * dt + ) + ) + copyat_or_push!( + k, 5, + f( + uprev + dt * (a51 * k[1] + a52 * k[2] + a53 * k[3] + a54 * k[4]), + p, t + c4 * dt + ) + ) + copyat_or_push!( + k, 6, f( uprev + - dt * - (a61 * k[1] + a62 * k[2] + a63 * k[3] + a64 * k[4] + a65 * k[5]), - p, t + c5 * dt)) - copyat_or_push!(k, 7, + dt * + (a61 * k[1] + a62 * k[2] + a63 * k[3] + a64 * k[4] + a65 * k[5]), + p, t + c5 * dt + ) + ) + copyat_or_push!( + k, 7, f( uprev + - dt * - (a71 * k[1] + a72 * k[2] + a73 * k[3] + a74 * k[4] + a75 * k[5] + - a76 * k[6]), + dt * + ( + a71 * k[1] + a72 * k[2] + a73 * k[3] + a74 * k[4] + a75 * k[5] + + a76 * k[6] + ), p, - t + dt)) - copyat_or_push!(k, 8, + t + dt + ) + ) + copyat_or_push!( + k, 8, f( uprev + - dt * - (a81 * k[1] + a83 * k[3] + a84 * k[4] + a85 * k[5] + a86 * k[6] + - a87 * k[7]), + dt * + ( + a81 * k[1] + a83 * k[3] + a84 * k[4] + a85 * k[5] + a86 * k[6] + + a87 * k[7] + ), p, - t + dt)) + t + dt + ) + ) end if (allow_calc_end && length(k) < 11) || force_calc_end # Have not added the extra stages yet (; c6, c7, c8, a91, a92, a93, a94, a95, a96, a97, a98, a101, a102, a103, a104, a105, a106, a107, a108, a109, a111, a112, a113, a114, a115, a116, a117, a118, a119, a1110) = cache - copyat_or_push!(k, 9, + copyat_or_push!( + k, 9, f( uprev + - dt * - (a91 * k[1] + a92 * k[2] + a93 * k[3] + a94 * k[4] + a95 * k[5] + - a96 * k[6] + a97 * k[7] + a98 * k[8]), + dt * + ( + a91 * k[1] + a92 * k[2] + a93 * k[3] + a94 * k[4] + a95 * k[5] + + a96 * k[6] + a97 * k[7] + a98 * k[8] + ), p, - t + c6 * dt)) - copyat_or_push!(k, 10, + t + c6 * dt + ) + ) + copyat_or_push!( + k, 10, f( uprev + - dt * (a101 * k[1] + a102 * k[2] + a103 * k[3] + a104 * k[4] + - a105 * k[5] + a106 * k[6] + a107 * k[7] + a108 * k[8] + - a109 * k[9]), + dt * ( + a101 * k[1] + a102 * k[2] + a103 * k[3] + a104 * k[4] + + a105 * k[5] + a106 * k[6] + a107 * k[7] + a108 * k[8] + + a109 * k[9] + ), p, - t + c7 * dt)) - copyat_or_push!(k, 11, + t + c7 * dt + ) + ) + copyat_or_push!( + k, 11, f( uprev + - dt * (a111 * k[1] + a112 * k[2] + a113 * k[3] + a114 * k[4] + - a115 * k[5] + a116 * k[6] + a117 * k[7] + a118 * k[8] + - a119 * k[9] + a1110 * k[10]), + dt * ( + a111 * k[1] + a112 * k[2] + a113 * k[3] + a114 * k[4] + + a115 * k[5] + a116 * k[6] + a117 * k[7] + a118 * k[8] + + a119 * k[9] + a1110 * k[10] + ), p, - t + c8 * dt)) + t + c8 * dt + ) + ) end nothing end diff --git a/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_caches.jl b/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_caches.jl index 95c7f369fe..77fc517a74 100644 --- a/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_caches.jl +++ b/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_caches.jl @@ -14,40 +14,48 @@ end fsalfirst::rateType end -function alg_cache(alg::SplitEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SplitEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SplitEulerCache(u, uprev, zero(u), zero(rate_prototype), zero(rate_prototype)) + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SplitEulerCache(u, uprev, zero(u), zero(rate_prototype), zero(rate_prototype)) end struct SplitEulerConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::SplitEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SplitEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SplitEulerConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SplitEulerConstantCache() end -function alg_cache(alg::Euler, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Euler, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - EulerCache(u, uprev, zero(u), zero(rate_prototype), zero(rate_prototype)) + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return EulerCache(u, uprev, zero(u), zero(rate_prototype), zero(rate_prototype)) end struct EulerConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::Euler, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Euler, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - EulerConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return EulerConstantCache() end @cache struct HeunCache{uType, rateType, uNoUnitsType, StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqMutableCache + OrdinaryDiffEqMutableCache u::uType uprev::uType tmp::uType @@ -60,13 +68,13 @@ end end @cache struct RalstonCache{ - uType, - rateType, - uNoUnitsType, - StageLimiter, - StepLimiter, - Thread -} <: OrdinaryDiffEqMutableCache + uType, + rateType, + uNoUnitsType, + StageLimiter, + StepLimiter, + Thread, + } <: OrdinaryDiffEqMutableCache u::uType uprev::uType tmp::uType @@ -78,52 +86,64 @@ end thread::Thread end -function alg_cache(alg::Heun, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Heun, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - HeunCache(u, uprev, zero(u), atmp, zero(rate_prototype), - zero(rate_prototype), alg.stage_limiter!, alg.step_limiter!, alg.thread) + return HeunCache( + u, uprev, zero(u), atmp, zero(rate_prototype), + zero(rate_prototype), alg.stage_limiter!, alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::Ralston, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Ralston, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - RalstonCache(u, uprev, zero(u), atmp, zero(rate_prototype), - zero(rate_prototype), alg.stage_limiter!, alg.step_limiter!, alg.thread) + return RalstonCache( + u, uprev, zero(u), atmp, zero(rate_prototype), + zero(rate_prototype), alg.stage_limiter!, alg.step_limiter!, alg.thread + ) end struct HeunConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::Heun, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Heun, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - HeunConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return HeunConstantCache() end struct RalstonConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::Ralston, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Ralston, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - RalstonConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return RalstonConstantCache() end @cache struct MidpointCache{ - uType, - rateType, - uNoUnitsType, - StageLimiter, - StepLimiter, - Thread -} <: OrdinaryDiffEqMutableCache + uType, + rateType, + uNoUnitsType, + StageLimiter, + StepLimiter, + Thread, + } <: OrdinaryDiffEqMutableCache u::uType uprev::uType k::rateType @@ -137,28 +157,34 @@ end struct MidpointConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::Midpoint, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Midpoint, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) - MidpointCache(u, uprev, k, tmp, atmp, fsalfirst, alg.stage_limiter!, alg.step_limiter!, - alg.thread) + return MidpointCache( + u, uprev, k, tmp, atmp, fsalfirst, alg.stage_limiter!, alg.step_limiter!, + alg.thread + ) end -function alg_cache(alg::Midpoint, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Midpoint, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - MidpointConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return MidpointConstantCache() end @cache struct RK4Cache{uType, rateType, uNoUnitsType, StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqMutableCache + OrdinaryDiffEqMutableCache u::uType uprev::uType fsalfirst::rateType @@ -175,10 +201,12 @@ end struct RK4ConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::RK4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RK4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k₁ = zero(rate_prototype) k₂ = zero(rate_prototype) k₃ = zero(rate_prototype) @@ -187,19 +215,25 @@ function alg_cache(alg::RK4, u, rate_prototype, ::Type{uEltypeNoUnits}, tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - RK4Cache(u, uprev, k₁, k₂, k₃, k₄, k, tmp, atmp, alg.stage_limiter!, alg.step_limiter!, - alg.thread) + return RK4Cache( + u, uprev, k₁, k₂, k₃, k₄, k, tmp, atmp, alg.stage_limiter!, alg.step_limiter!, + alg.thread + ) end -function alg_cache(alg::RK4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RK4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - RK4ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return RK4ConstantCache() end -@cache struct BS3Cache{uType, rateType, uNoUnitsType, TabType, StageLimiter, StepLimiter, - Thread} <: OrdinaryDiffEqMutableCache +@cache struct BS3Cache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, StepLimiter, + Thread, + } <: OrdinaryDiffEqMutableCache u::uType uprev::uType fsalfirst::rateType @@ -215,10 +249,12 @@ end thread::Thread end -function alg_cache(alg::BS3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::BS3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = BS3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) k2 = zero(rate_prototype) @@ -228,20 +264,26 @@ function alg_cache(alg::BS3, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - BS3Cache(u, uprev, k1, k2, k3, k4, utilde, tmp, atmp, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return BS3Cache( + u, uprev, k1, k2, k3, k4, utilde, tmp, atmp, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::BS3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::BS3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - BS3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return BS3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -@cache struct OwrenZen3Cache{uType, rateType, uNoUnitsType, TabType, StageLimiter, - StepLimiter, Thread} <: - OrdinaryDiffEqMutableCache +@cache struct OwrenZen3Cache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, + StepLimiter, Thread, + } <: + OrdinaryDiffEqMutableCache u::uType uprev::uType k1::rateType @@ -257,10 +299,12 @@ end thread::Thread end -function alg_cache(alg::OwrenZen3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::OwrenZen3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = OwrenZen3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) k2 = zero(rate_prototype) @@ -270,20 +314,26 @@ function alg_cache(alg::OwrenZen3, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - OwrenZen3Cache(u, uprev, k1, k2, k3, k4, utilde, tmp, atmp, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return OwrenZen3Cache( + u, uprev, k1, k2, k3, k4, utilde, tmp, atmp, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::OwrenZen3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::OwrenZen3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - OwrenZen3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return OwrenZen3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -@cache struct OwrenZen4Cache{uType, rateType, uNoUnitsType, TabType, StageLimiter, - StepLimiter, Thread} <: - OrdinaryDiffEqMutableCache +@cache struct OwrenZen4Cache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, + StepLimiter, Thread, + } <: + OrdinaryDiffEqMutableCache u::uType uprev::uType k1::rateType @@ -301,10 +351,12 @@ end thread::Thread end -function alg_cache(alg::OwrenZen4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::OwrenZen4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = OwrenZen4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) k2 = zero(rate_prototype) @@ -316,20 +368,26 @@ function alg_cache(alg::OwrenZen4, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - OwrenZen4Cache(u, uprev, k1, k2, k3, k4, k5, k6, utilde, tmp, atmp, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread) + return OwrenZen4Cache( + u, uprev, k1, k2, k3, k4, k5, k6, utilde, tmp, atmp, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::OwrenZen4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::OwrenZen4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - OwrenZen4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return OwrenZen4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -@cache struct OwrenZen5Cache{uType, rateType, uNoUnitsType, TabType, StageLimiter, - StepLimiter, Thread} <: - OrdinaryDiffEqMutableCache +@cache struct OwrenZen5Cache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, + StepLimiter, Thread, + } <: + OrdinaryDiffEqMutableCache u::uType uprev::uType k1::rateType @@ -349,10 +407,12 @@ end thread::Thread end -function alg_cache(alg::OwrenZen5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::OwrenZen5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = OwrenZen5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) k2 = zero(rate_prototype) @@ -366,19 +426,25 @@ function alg_cache(alg::OwrenZen5, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - OwrenZen5Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, utilde, tmp, atmp, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread) + return OwrenZen5Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, utilde, tmp, atmp, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::OwrenZen5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::OwrenZen5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - OwrenZen5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return OwrenZen5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -@cache struct BS5Cache{uType, rateType, uNoUnitsType, TabType, StageLimiter, StepLimiter, - Thread} <: OrdinaryDiffEqMutableCache +@cache struct BS5Cache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, StepLimiter, + Thread, + } <: OrdinaryDiffEqMutableCache u::uType uprev::uType k1::rateType @@ -398,10 +464,12 @@ end thread::Thread end -function alg_cache(alg::BS5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::BS5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = BS5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) k2 = zero(rate_prototype) @@ -415,19 +483,25 @@ function alg_cache(alg::BS5, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - BS5Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, utilde, tmp, atmp, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread) + return BS5Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, utilde, tmp, atmp, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::BS5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::BS5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - BS5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return BS5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -@cache struct DP5Cache{uType, rateType, uNoUnitsType, StageLimiter, StepLimiter, - Thread} <: OrdinaryDiffEqMutableCache +@cache struct DP5Cache{ + uType, rateType, uNoUnitsType, StageLimiter, StepLimiter, + Thread, + } <: OrdinaryDiffEqMutableCache u::uType uprev::uType k1::rateType @@ -449,10 +523,12 @@ end thread::Thread end -function alg_cache(alg::DP5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DP5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k1 = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) @@ -476,29 +552,33 @@ function alg_cache(alg::DP5, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = k3 end - cache = DP5Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, dense_tmp3, dense_tmp4, update, + cache = DP5Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, dense_tmp3, dense_tmp4, update, bspl, utilde, tmp, atmp, alg.stage_limiter!, alg.step_limiter!, - alg.thread) - cache + alg.thread + ) + return cache end -function alg_cache(alg::DP5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DP5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - DP5ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return DP5ConstantCache() end @cache struct Anas5Cache{ - uType, - rateType, - uNoUnitsType, - TabType, - StageLimiter, - StepLimiter, - Thread -} <: - OrdinaryDiffEqMutableCache + uType, + rateType, + uNoUnitsType, + TabType, + StageLimiter, + StepLimiter, + Thread, + } <: + OrdinaryDiffEqMutableCache u::uType uprev::uType k1::rateType @@ -517,10 +597,12 @@ end thread::Thread end -function alg_cache(alg::Anas5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Anas5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = Anas5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) k2 = zero(rate_prototype) @@ -533,7 +615,8 @@ function alg_cache(alg::Anas5, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - Anas5Cache(u, + return Anas5Cache( + u, uprev, k1, k2, @@ -548,18 +631,21 @@ function alg_cache(alg::Anas5, u, rate_prototype, ::Type{uEltypeNoUnits}, tab, alg.stage_limiter!, alg.step_limiter!, - alg.thread) + alg.thread + ) end -function alg_cache(alg::Anas5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Anas5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - Anas5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return Anas5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct RKO65Cache{uType, rateType, TabType, StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqMutableCache + OrdinaryDiffEqMutableCache u::uType uprev::uType k::rateType @@ -646,22 +732,28 @@ struct RKO65ConstantCache{T1, T2} <: OrdinaryDiffEqConstantCache c4 = T2(1 // 1) c5 = T2(4 // 5) c6 = T2(1 // 1) - new{T1, T2}(α21, α31, α41, α51, α32, α42, α52, α62, α43, α53, α63, α54, α64, α65, - β2, β3, β4, β5, β6, c1, c2, c3, c4, c5, c6) + return new{T1, T2}( + α21, α31, α41, α51, α32, α42, α52, α62, α43, α53, α63, α54, α64, α65, + β2, β3, β4, β5, β6, c1, c2, c3, c4, c5, c6 + ) end end -function alg_cache(alg::RKO65, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RKO65, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - RKO65ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) # why not real(tTypeNoUnits)? + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return RKO65ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) # why not real(tTypeNoUnits)? end -function alg_cache(alg::RKO65, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RKO65, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) @@ -675,14 +767,17 @@ function alg_cache(alg::RKO65, u, rate_prototype, ::Type{uEltypeNoUnits}, fsalfirst = zero(rate_prototype) tab = RKO65ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - RKO65Cache( + return RKO65Cache( u, uprev, k, k1, k2, k3, k4, k5, k6, tmp, fsalfirst, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + alg.step_limiter!, alg.thread + ) end -@cache struct FRK65Cache{uType, rateType, uNoUnitsType, TabType, StageLimiter, StepLimiter, - Thread} <: - OrdinaryDiffEqMutableCache +@cache struct FRK65Cache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, StepLimiter, + Thread, + } <: + OrdinaryDiffEqMutableCache u::uType uprev::uType utilde::uType @@ -905,26 +1000,32 @@ struct FRK65ConstantCache{T1, T2} <: OrdinaryDiffEqConstantCache f10 = T1(-711049 // 7105160932) f11 = T1(267 // 333462710) - new{T1, T2}(α21, α31, α41, α51, α61, α71, α81, α91, α32, α43, α53, α63, α73, α83, + return new{T1, T2}( + α21, α31, α41, α51, α61, α71, α81, α91, α32, α43, α53, α63, α73, α83, α54, α64, α74, α84, α94, α65, α75, α85, α95, α76, α86, α96, α87, α97, α98, β1, β7, β8, β1tilde, β4tilde, β5tilde, β6tilde, β7tilde, β8tilde, β9tilde, c2, c3, c4, c5, c6, c7, c8, c9, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, - f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11) + f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11 + ) end end -function alg_cache(alg::FRK65, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::FRK65, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - FRK65ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return FRK65ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -function alg_cache(alg::FRK65, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::FRK65, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = FRK65ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) k2 = zero(rate_prototype) @@ -939,12 +1040,14 @@ function alg_cache(alg::FRK65, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - FRK65Cache(u, uprev, utilde, k1, k2, k3, k4, k5, k6, k7, k8, k9, tmp, atmp, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread) + return FRK65Cache( + u, uprev, utilde, k1, k2, k3, k4, k5, k6, k7, k8, k9, tmp, atmp, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) end @cache struct RKMCache{uType, rateType, TabType, StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqMutableCache + OrdinaryDiffEqMutableCache u::uType uprev::uType k::rateType @@ -1002,31 +1105,35 @@ struct RKMConstantCache{T, T2} <: OrdinaryDiffEqConstantCache α5 = T(0.082069535961948) α6 = T(0.853923000035347) β1 = T(-0.028289441132839) - β2 = T(0.463968918564710) + β2 = T(0.46396891856471) β3 = T(-0.434414348751899) β4 = T(0.693796229087598) - β6 = T(0.304938642232430) + β6 = T(0.30493864223243) c2 = T2(0.167266187050662) c3 = T2(0.484574582244783) c4 = T2(0.536909403373491) c5 = T2(0.082069535961948) c6 = T2(0.853923000035347) - new{T, T2}(α2, α3, α4, α5, α6, β1, β2, β3, β4, β6, c2, c3, c4, c5, c6) + return new{T, T2}(α2, α3, α4, α5, α6, β1, β2, β3, β4, β6, c2, c3, c4, c5, c6) end end -function alg_cache(alg::RKM, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RKM, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - RKMConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return RKMConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -function alg_cache(alg::RKM, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RKM, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = RKMConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k = zero(rate_prototype) k1 = zero(rate_prototype) @@ -1037,12 +1144,14 @@ function alg_cache(alg::RKM, u, rate_prototype, ::Type{uEltypeNoUnits}, k6 = zero(rate_prototype) tmp = zero(u) fsalfirst = zero(rate_prototype) - RKMCache(u, uprev, k, k1, k2, k3, k4, k5, k6, tmp, fsalfirst, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return RKMCache( + u, uprev, k, k1, k2, k3, k4, k5, k6, tmp, fsalfirst, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end @cache struct MSRK5Cache{uType, rateType, TabType, StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqMutableCache + OrdinaryDiffEqMutableCache u::uType uprev::uType tmp::uType @@ -1063,17 +1172,21 @@ end thread::Thread end -function alg_cache(alg::MSRK5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MSRK5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} return MSRK5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -function alg_cache(alg::MSRK5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MSRK5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k1 = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) @@ -1087,12 +1200,14 @@ function alg_cache(alg::MSRK5, u, rate_prototype, ::Type{uEltypeNoUnits}, tmp = zero(u) fsalfirst = zero(u) tab = MSRK5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - MSRK5Cache(u, uprev, tmp, fsalfirst, k1, k2, k3, k4, k5, k6, k7, k8, k9, k, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread) + return MSRK5Cache( + u, uprev, tmp, fsalfirst, k1, k2, k3, k4, k5, k6, k7, k8, k9, k, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) end @cache struct MSRK6Cache{uType, rateType, TabType, StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqMutableCache + OrdinaryDiffEqMutableCache u::uType uprev::uType tmp::uType @@ -1113,17 +1228,21 @@ end thread::Thread end -function alg_cache(alg::MSRK6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MSRK6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} return MSRK6ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -function alg_cache(alg::MSRK6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MSRK6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k1 = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) @@ -1137,12 +1256,14 @@ function alg_cache(alg::MSRK6, u, rate_prototype, ::Type{uEltypeNoUnits}, tmp = zero(u) fsalfirst = zero(u) tab = MSRK6ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - MSRK6Cache(u, uprev, tmp, fsalfirst, k1, k2, k3, k4, k5, k6, k7, k8, k9, k, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread) + return MSRK6Cache( + u, uprev, tmp, fsalfirst, k1, k2, k3, k4, k5, k6, k7, k8, k9, k, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) end @cache struct PSRK4p7q6Cache{uType, rateType, TabType, StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqMutableCache + OrdinaryDiffEqMutableCache u::uType uprev::uType k1::rateType @@ -1158,18 +1279,23 @@ end thread::Thread end -function alg_cache(alg::PSRK4p7q6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::PSRK4p7q6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} return PSRK4p7q6ConstantCache( - constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits) + ) end -function alg_cache(alg::PSRK4p7q6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::PSRK4p7q6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k1 = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) @@ -1178,12 +1304,14 @@ function alg_cache(alg::PSRK4p7q6, u, rate_prototype, ::Type{uEltypeNoUnits}, k6 = zero(rate_prototype) tmp = zero(u) tab = PSRK4p7q6ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - PSRK4p7q6Cache(u, uprev, k1, k2, k3, k4, k5, k6, tmp, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread) + return PSRK4p7q6Cache( + u, uprev, k1, k2, k3, k4, k5, k6, tmp, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) end @cache struct PSRK3p6q5Cache{uType, rateType, TabType, StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqMutableCache + OrdinaryDiffEqMutableCache u::uType uprev::uType k1::rateType @@ -1198,18 +1326,23 @@ end thread::Thread end -function alg_cache(alg::PSRK3p6q5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::PSRK3p6q5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} return PSRK3p6q5ConstantCache( - constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits) + ) end -function alg_cache(alg::PSRK3p6q5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::PSRK3p6q5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k1 = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) @@ -1217,12 +1350,14 @@ function alg_cache(alg::PSRK3p6q5, u, rate_prototype, ::Type{uEltypeNoUnits}, k5 = zero(rate_prototype) tmp = zero(u) tab = PSRK3p6q5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - PSRK3p6q5Cache(u, uprev, tmp, k1, k2, k3, k4, k5, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread) + return PSRK3p6q5Cache( + u, uprev, tmp, k1, k2, k3, k4, k5, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) end @cache struct PSRK3p5q4Cache{uType, rateType, TabType, StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqMutableCache + OrdinaryDiffEqMutableCache u::uType uprev::uType k1::rateType @@ -1236,30 +1371,37 @@ end thread::Thread end -function alg_cache(alg::PSRK3p5q4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::PSRK3p5q4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} return PSRK3p5q4ConstantCache( - constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits) + ) end -function alg_cache(alg::PSRK3p5q4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::PSRK3p5q4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k1 = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) k4 = zero(rate_prototype) tmp = zero(u) tab = PSRK3p5q4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - PSRK3p5q4Cache(u, uprev, tmp, k1, k2, k3, k4, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread) + return PSRK3p5q4Cache( + u, uprev, tmp, k1, k2, k3, k4, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) end @cache struct Stepanov5Cache{uType, rateType, TabType, StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqMutableCache + OrdinaryDiffEqMutableCache u::uType uprev::uType tmp::uType @@ -1278,18 +1420,24 @@ end thread::Thread end -function alg_cache(alg::Stepanov5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Stepanov5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - return Stepanov5ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return Stepanov5ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) end -function alg_cache(alg::Stepanov5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Stepanov5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k1 = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) @@ -1301,7 +1449,8 @@ function alg_cache(alg::Stepanov5, u, rate_prototype, ::Type{uEltypeNoUnits}, tmp = zero(u) fsalfirst = zero(u) tab = Stepanov5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - Stepanov5Cache(u, + return Stepanov5Cache( + u, uprev, tmp, fsalfirst, @@ -1316,11 +1465,14 @@ function alg_cache(alg::Stepanov5, u, rate_prototype, ::Type{uEltypeNoUnits}, tab, alg.stage_limiter!, alg.step_limiter!, - alg.thread) + alg.thread + ) end -@cache struct SIR54Cache{uType, rateType, uNoUnitsType, TabType, StageLimiter, StepLimiter, - Thread} <: OrdinaryDiffEqMutableCache +@cache struct SIR54Cache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, StepLimiter, + Thread, + } <: OrdinaryDiffEqMutableCache u::uType uprev::uType k1::rateType @@ -1340,17 +1492,21 @@ end thread::Thread end -function alg_cache(alg::SIR54, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SIR54, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} return SIR54ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -function alg_cache(alg::SIR54, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SIR54, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k1 = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) @@ -1364,12 +1520,16 @@ function alg_cache(alg::SIR54, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmp, false) tmp = zero(u) tab = SIR54ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - SIR54Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, utilde, tmp, atmp, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread) + return SIR54Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, utilde, tmp, atmp, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) end -@cache struct Alshina2Cache{uType, rateType, uNoUnitsType, TabType, StageLimiter, - StepLimiter, Thread} <: OrdinaryDiffEqMutableCache +@cache struct Alshina2Cache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, + StepLimiter, Thread, + } <: OrdinaryDiffEqMutableCache u::uType uprev::uType utilde::uType @@ -1383,17 +1543,21 @@ end thread::Thread end -function alg_cache(alg::Alshina2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Alshina2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} return Alshina2ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -function alg_cache(alg::Alshina2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Alshina2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k1 = zero(rate_prototype) k2 = zero(rate_prototype) utilde = zero(u) @@ -1401,12 +1565,16 @@ function alg_cache(alg::Alshina2, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tab = Alshina2ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - Alshina2Cache(u, uprev, utilde, k1, k2, atmp, tmp, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return Alshina2Cache( + u, uprev, utilde, k1, k2, atmp, tmp, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -@cache struct Alshina3Cache{uType, rateType, uNoUnitsType, TabType, StageLimiter, - StepLimiter, Thread} <: OrdinaryDiffEqMutableCache +@cache struct Alshina3Cache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, + StepLimiter, Thread, + } <: OrdinaryDiffEqMutableCache u::uType uprev::uType utilde::uType @@ -1421,17 +1589,21 @@ end thread::Thread end -function alg_cache(alg::Alshina3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Alshina3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} return Alshina3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -function alg_cache(alg::Alshina3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Alshina3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k1 = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) @@ -1440,12 +1612,14 @@ function alg_cache(alg::Alshina3, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tab = Alshina3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - Alshina3Cache(u, uprev, utilde, k1, k2, k3, atmp, tmp, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return Alshina3Cache( + u, uprev, utilde, k1, k2, k3, atmp, tmp, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end @cache struct Alshina6Cache{uType, rateType, TabType, StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqMutableCache + OrdinaryDiffEqMutableCache u::uType uprev::uType k1::rateType @@ -1462,17 +1636,21 @@ end thread::Thread end -function alg_cache(alg::Alshina6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Alshina6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} return Alshina6ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -function alg_cache(alg::Alshina6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Alshina6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k1 = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) @@ -1482,6 +1660,8 @@ function alg_cache(alg::Alshina6, u, rate_prototype, ::Type{uEltypeNoUnits}, k7 = zero(rate_prototype) tmp = zero(u) tab = Alshina6ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - Alshina6Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, tmp, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return Alshina6Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, tmp, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end diff --git a/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_perform_step.jl b/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_perform_step.jl index e5c7f6cbb4..de1c79dba2 100644 --- a/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_perform_step.jl +++ b/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_perform_step.jl @@ -7,7 +7,7 @@ function initialize!(integrator, cache::BS3ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::BS3ConstantCache, repeat_step = false) @@ -24,8 +24,10 @@ end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) if integrator.opts.adaptive utilde = dt * (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = integrator.fsalfirst @@ -40,7 +42,7 @@ function initialize!(integrator, cache::BS3Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::BS3Cache, repeat_step = false) @@ -50,24 +52,28 @@ end # k1 = cache.fsalfirst k1 = integrator.fsalfirst a1 = dt * a21 - @.. broadcast=false thread=thread tmp=uprev + a1 * k1 + @.. broadcast = false thread = thread tmp = uprev + a1 * k1 stage_limiter!(tmp, integrator, p, t + c1 * dt) f(k2, tmp, p, t + c1 * dt) a2 = dt * a32 - @.. broadcast=false thread=thread tmp=uprev + a2 * k2 + @.. broadcast = false thread = thread tmp = uprev + a2 * k2 stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k3, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread u=uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) + @.. broadcast = false thread = thread u = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) f(k4, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde2 * k2 + - btilde3 * k3 + btilde4 * k4) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * ( + btilde1 * k1 + btilde2 * k2 + + btilde3 * k3 + btilde4 * k4 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -84,11 +90,13 @@ function initialize!(integrator, cache::OwrenZen3ConstantCache) @inbounds for i in 2:(integrator.kshortsize - 1) integrator.k[i] = zero(integrator.fsalfirst) end - integrator.k[integrator.kshortsize] = integrator.fsallast + return integrator.k[integrator.kshortsize] = integrator.fsallast end -@muladd function perform_step!(integrator, cache::OwrenZen3ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::OwrenZen3ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; a21, a31, a32, a41, a42, a43, c1, c2, btilde1, btilde2, btilde3) = cache k1 = integrator.fsalfirst @@ -102,8 +110,10 @@ end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) if integrator.opts.adaptive utilde = dt * (btilde1 * k1 + btilde2 * k2 + btilde3 * k3) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = k1 @@ -122,7 +132,7 @@ function initialize!(integrator, cache::OwrenZen3Cache) integrator.k[3] = cache.k3 integrator.k[4] = cache.k4 integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::OwrenZen3Cache, repeat_step = false) @@ -130,23 +140,27 @@ end (; k1, k2, k3, k4, utilde, tmp, atmp, stage_limiter!, step_limiter!, thread) = cache (; a21, a31, a32, a41, a42, a43, c1, c2, btilde1, btilde2, btilde3) = cache.tab a1 = dt * a21 - @.. broadcast=false thread=thread tmp=uprev + a1 * k1 + @.. broadcast = false thread = thread tmp = uprev + a1 * k1 stage_limiter!(tmp, integrator, p, t + c1 * dt) f(k2, tmp, p, t + c1 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a31 * k1 + a32 * k2) stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k3, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread u=uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) + @.. broadcast = false thread = thread u = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) f(k4, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde2 * k2 + - btilde3 * k3) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * ( + btilde1 * k1 + btilde2 * k2 + + btilde3 * k3 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -163,11 +177,13 @@ function initialize!(integrator, cache::OwrenZen4ConstantCache) @inbounds for i in 2:(integrator.kshortsize - 1) integrator.k[i] = zero(integrator.fsalfirst) end - integrator.k[integrator.kshortsize] = integrator.fsallast + return integrator.k[integrator.kshortsize] = integrator.fsallast end -@muladd function perform_step!(integrator, cache::OwrenZen4ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::OwrenZen4ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a63, a64, a65, c1, c2, c3, c4, btilde1, btilde3, btilde4, btilde5) = cache k1 = integrator.fsalfirst @@ -182,8 +198,10 @@ end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 5) if integrator.opts.adaptive utilde = dt * (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = k1 @@ -206,7 +224,7 @@ function initialize!(integrator, cache::OwrenZen4Cache) integrator.k[5] = cache.k5 integrator.k[6] = cache.k6 integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::OwrenZen4Cache, repeat_step = false) @@ -214,32 +232,36 @@ end (; k1, k2, k3, k4, k5, k6, utilde, tmp, atmp, stage_limiter!, step_limiter!, thread) = cache (; a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a63, a64, a65, c1, c2, c3, c4, btilde1, btilde3, btilde4, btilde5) = cache.tab a = dt * a21 - @.. broadcast=false thread=thread tmp=uprev + a * k1 + @.. broadcast = false thread = thread tmp = uprev + a * k1 stage_limiter!(tmp, integrator, p, t + c1 * dt) f(k2, tmp, p, t + c1 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a31 * k1 + a32 * k2) stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k3, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k4, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k5, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread u=uprev + - dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5) + @.. broadcast = false thread = thread u = uprev + + dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) f(k6, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 5) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde3 * k3 + - btilde4 * k4 + - btilde5 * k5) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * ( + btilde1 * k1 + btilde3 * k3 + + btilde4 * k4 + + btilde5 * k5 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end return nothing @@ -257,11 +279,13 @@ function initialize!(integrator, cache::OwrenZen5ConstantCache) @inbounds for i in 2:(integrator.kshortsize - 1) integrator.k[i] = zero(integrator.fsalfirst) end - integrator.k[integrator.kshortsize] = integrator.fsallast + return integrator.k[integrator.kshortsize] = integrator.fsallast end -@muladd function perform_step!(integrator, cache::OwrenZen5ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::OwrenZen5ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; a21, a31, a32, a41, a42, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, c1, c2, c3, c4, c5, c6, btilde1, btilde3, btilde4, btilde5, btilde6, btilde7) = cache k1 = integrator.fsalfirst @@ -270,20 +294,28 @@ end k3 = f(uprev + dt * (a31 * k1 + a32 * k2), p, t + c2 * dt) k4 = f(uprev + dt * (a41 * k1 + a42 * k2 + k3), p, t + c3 * dt) k5 = f(uprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4), p, t + c4 * dt) - k6 = f(uprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5), p, - t + c5 * dt) - k7 = f(uprev + dt * (a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6), - p, t + c6 * dt) + k6 = f( + uprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5), p, + t + c5 * dt + ) + k7 = f( + uprev + dt * (a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6), + p, t + c6 * dt + ) u = uprev + dt * (a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + a86 * k6 + a87 * k7) k8 = f(u, p, t + dt) integrator.fsallast = k8 OrdinaryDiffEqCore.increment_nf!(integrator.stats, 7) if integrator.opts.adaptive utilde = dt * - (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + - btilde7 * k7) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + ( + btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + + btilde7 * k7 + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = k1 @@ -310,7 +342,7 @@ function initialize!(integrator, cache::OwrenZen5Cache) integrator.k[7] = cache.k7 integrator.k[8] = cache.k8 integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::OwrenZen5Cache, repeat_step = false) @@ -318,46 +350,56 @@ end (; k1, k2, k3, k4, k5, k6, k7, k8, utilde, tmp, atmp, stage_limiter!, step_limiter!, thread) = cache (; a21, a31, a32, a41, a42, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, c1, c2, c3, c4, c5, c6, btilde1, btilde3, btilde4, btilde5, btilde6, btilde7) = cache.tab a = dt * a21 - @.. broadcast=false thread=thread tmp=uprev + a * k1 + @.. broadcast = false thread = thread tmp = uprev + a * k1 stage_limiter!(tmp, integrator, p, t + c1 * dt) f(k2, tmp, p, t + c1 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a31 * k1 + a32 * k2) stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k3, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a41 * k1 + a42 * k2 + k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a41 * k1 + a42 * k2 + k3) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k4, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k5, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + - a65 * k5) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + + a65 * k5 + ) stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k6, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + - a75 * k5 + - a76 * k6) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + + a75 * k5 + + a76 * k6 + ) stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k7, tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + - a86 * k6 + a87 * k7) + @.. broadcast = false thread = thread u = uprev + + dt * + ( + a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + + a86 * k6 + a87 * k7 + ) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) f(k8, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 7) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde3 * k3 + - btilde4 * k4 + - btilde5 * k5 + btilde6 * k6 + - btilde7 * k7) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * ( + btilde1 * k1 + btilde3 * k3 + + btilde4 * k4 + + btilde5 * k5 + btilde6 * k6 + + btilde7 * k7 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end return nothing @@ -378,7 +420,7 @@ function initialize!(integrator, cache::BS5ConstantCache) end integrator.k[integrator.kshortsize] = integrator.fsallast - if !alg.lazy + return if !alg.lazy @inbounds for i in 9:11 integrator.k[i] = zero(integrator.fsalfirst) end @@ -394,10 +436,14 @@ end k3 = f(uprev + dt * (a31 * k1 + a32 * k2), p, t + c2 * dt) k4 = f(uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3), p, t + c3 * dt) k5 = f(uprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4), p, t + c4 * dt) - k6 = f(uprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5), p, - t + c5 * dt) - k7 = f(uprev + dt * (a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6), - p, t + dt) + k6 = f( + uprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5), p, + t + c5 * dt + ) + k7 = f( + uprev + dt * (a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6), + p, t + dt + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 6) u = uprev + dt * (a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + a86 * k6 + a87 * k7) integrator.fsallast = f(u, p, t + dt) @@ -406,13 +452,19 @@ end if integrator.opts.adaptive uhat = dt * (bhat1 * k1 + bhat3 * k3 + bhat4 * k4 + bhat5 * k5 + bhat6 * k6) utilde = dt * - (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + - btilde7 * k7 + btilde8 * k8) - atmp = calculate_residuals(uhat, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + ( + btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + + btilde7 * k7 + btilde8 * k8 + ) + atmp = calculate_residuals( + uhat, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) EEst1 = integrator.opts.internalnorm(atmp, t) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) EEst2 = integrator.opts.internalnorm(atmp, t) integrator.EEst = max(EEst1, EEst2) end @@ -427,29 +479,40 @@ end integrator.u = u alg = unwrap_alg(integrator, false) - if !alg.lazy && (integrator.opts.adaptive == false || - accept_step_controller(integrator, integrator.opts.controller)) + if !alg.lazy && ( + integrator.opts.adaptive == false || + accept_step_controller(integrator, integrator.opts.controller) + ) (; c6, c7, c8, a91, a92, a93, a94, a95, a96, a97, a98, a101, a102, a103, a104, a105, a106, a107, a108, a109, a111, a112, a113, a114, a115, a116, a117, a118, a119, a1110) = cache k = integrator.k k[9] = f( uprev + - dt * (a91 * k[1] + a92 * k[2] + a93 * k[3] + a94 * k[4] + a95 * k[5] + - a96 * k[6] + a97 * k[7] + a98 * k[8]), + dt * ( + a91 * k[1] + a92 * k[2] + a93 * k[3] + a94 * k[4] + a95 * k[5] + + a96 * k[6] + a97 * k[7] + a98 * k[8] + ), p, - t + c6 * dt) + t + c6 * dt + ) k[10] = f( uprev + - dt * - (a101 * k[1] + a102 * k[2] + a103 * k[3] + a104 * k[4] + a105 * k[5] + - a106 * k[6] + a107 * k[7] + a108 * k[8] + a109 * k[9]), + dt * + ( + a101 * k[1] + a102 * k[2] + a103 * k[3] + a104 * k[4] + a105 * k[5] + + a106 * k[6] + a107 * k[7] + a108 * k[8] + a109 * k[9] + ), p, - t + c7 * dt) + t + c7 * dt + ) k[11] = f( uprev + - dt * - (a111 * k[1] + a112 * k[2] + a113 * k[3] + a114 * k[4] + a115 * k[5] + - a116 * k[6] + a117 * k[7] + a118 * k[8] + a119 * k[9] + a1110 * k[10]), - p, t + c8 * dt) + dt * + ( + a111 * k[1] + a112 * k[2] + a113 * k[3] + a114 * k[4] + a115 * k[5] + + a116 * k[6] + a117 * k[7] + a118 * k[8] + a119 * k[9] + a1110 * k[10] + ), + p, t + c8 * dt + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) end end @@ -474,7 +537,7 @@ function initialize!(integrator, cache::BS5Cache) integrator.k[11] = similar(cache.k1) end integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::BS5Cache, repeat_step = false) @@ -482,84 +545,106 @@ end (; k1, k2, k3, k4, k5, k6, k7, k8, utilde, tmp, atmp, stage_limiter!, step_limiter!, thread) = cache (; c1, c2, c3, c4, c5, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, bhat1, bhat3, bhat4, bhat5, bhat6, btilde1, btilde3, btilde4, btilde5, btilde6, btilde7, btilde8) = cache.tab a = dt * a21 - @.. broadcast=false thread=thread tmp=uprev + a * k1 + @.. broadcast = false thread = thread tmp = uprev + a * k1 stage_limiter!(tmp, integrator, p, t + c1 * dt) f(k2, tmp, p, t + c1 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a31 * k1 + a32 * k2) stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k3, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k4, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k5, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + - a65 * k5) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + + a65 * k5 + ) stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k6, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + - a75 * k5 + - a76 * k6) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + + a75 * k5 + + a76 * k6 + ) stage_limiter!(tmp, integrator, p, t + dt) f(k7, tmp, p, t + dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + - a86 * k6 + a87 * k7) + @.. broadcast = false thread = thread u = uprev + + dt * + ( + a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + + a86 * k6 + a87 * k7 + ) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) f(k8, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 7) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * - (bhat1 * k1 + bhat3 * k3 + bhat4 * k4 + - bhat5 * k5 + - bhat6 * k6) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * + ( + bhat1 * k1 + bhat3 * k3 + bhat4 * k4 + + bhat5 * k5 + + bhat6 * k6 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) EEst1 = integrator.opts.internalnorm(atmp, t) - @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde3 * k3 + - btilde4 * k4 + - btilde5 * k5 + btilde6 * k6 + - btilde7 * k7 + - btilde8 * k8) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * ( + btilde1 * k1 + btilde3 * k3 + + btilde4 * k4 + + btilde5 * k5 + btilde6 * k6 + + btilde7 * k7 + + btilde8 * k8 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) EEst2 = integrator.opts.internalnorm(atmp, t) integrator.EEst = max(EEst1, EEst2) end alg = unwrap_alg(integrator, false) - if !alg.lazy && (integrator.opts.adaptive == false || - accept_step_controller(integrator, integrator.opts.controller)) + if !alg.lazy && ( + integrator.opts.adaptive == false || + accept_step_controller(integrator, integrator.opts.controller) + ) k = integrator.k (; c6, c7, c8, a91, a92, a93, a94, a95, a96, a97, a98, a101, a102, a103, a104, a105, a106, a107, a108, a109, a111, a112, a113, a114, a115, a116, a117, a118, a119, a1110) = cache.tab - @.. broadcast=false thread=thread tmp=uprev + - dt * (a91 * k[1] + a92 * k[2] + a93 * k[3] + - a94 * k[4] + - a95 * k[5] + a96 * k[6] + a97 * k[7] + - a98 * k[8]) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a91 * k[1] + a92 * k[2] + a93 * k[3] + + a94 * k[4] + + a95 * k[5] + a96 * k[6] + a97 * k[7] + + a98 * k[8] + ) f(k[9], tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a101 * k[1] + a102 * k[2] + a103 * k[3] + - a104 * k[4] + - a105 * k[5] + a106 * k[6] + a107 * k[7] + - a108 * k[8] + - a109 * k[9]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a101 * k[1] + a102 * k[2] + a103 * k[3] + + a104 * k[4] + + a105 * k[5] + a106 * k[6] + a107 * k[7] + + a108 * k[8] + + a109 * k[9] + ) f(k[10], tmp, p, t + c7 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a111 * k[1] + a112 * k[2] + a113 * k[3] + - a114 * k[4] + - a115 * k[5] + a116 * k[6] + a117 * k[7] + - a118 * k[8] + - a119 * k[9] + a1110 * k[10]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a111 * k[1] + a112 * k[2] + a113 * k[3] + + a114 * k[4] + + a115 * k[5] + a116 * k[6] + a117 * k[7] + + a118 * k[8] + + a119 * k[9] + a1110 * k[10] + ) f(k[11], tmp, p, t + c8 * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) end @@ -574,7 +659,7 @@ function initialize!(integrator, cache::DP5ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - @inbounds for i in eachindex(integrator.k) + return @inbounds for i in eachindex(integrator.k) integrator.k[i] = zero(integrator.fsalfirst) end end @@ -601,14 +686,19 @@ end g7 = u # Hairer II, page 22 modified to use the Inf norm integrator.eigen_est = integrator.opts.internalnorm( - maximum(abs.((k7 .- k6) ./ (g7 .- g6))), t) + maximum(abs.((k7 .- k6) ./ (g7 .- g6))), t + ) end if integrator.opts.adaptive utilde = dt * - (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + - btilde7 * k7) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + ( + btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + + btilde7 * k7 + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = update @@ -628,7 +718,7 @@ function initialize!(integrator, cache::DP5Cache) integrator.k[3] = cache.dense_tmp3 integrator.k[4] = cache.dense_tmp4 integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::DP5Cache, repeat_step = false) @@ -638,27 +728,29 @@ end @OnDemandTableauExtract DP5ConstantCacheActual T T2 (; k1, k2, k3, k4, k5, k6, k7, dense_tmp3, dense_tmp4, update, bspl, utilde, tmp, atmp, stage_limiter!, step_limiter!, thread) = cache a = dt * a21 - @.. broadcast=false thread=thread tmp=uprev + a * k1 + @.. broadcast = false thread = thread tmp = uprev + a * k1 stage_limiter!(tmp, integrator, p, t + c1 * dt) f(k2, tmp, p, t + c1 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a31 * k1 + a32 * k2) stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k3, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k4, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k5, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + - a65 * k5) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + + a65 * k5 + ) stage_limiter!(tmp, integrator, p, t + dt) f(k6, tmp, p, t + dt) - @.. broadcast=false thread=thread update=a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + - a76 * k6 - @.. broadcast=false thread=thread u=uprev + dt * update + @.. broadcast = false thread = thread update = a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + + a76 * k6 + @.. broadcast = false thread = thread u = uprev + dt * update stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) f(k7, u, p, t + dt) @@ -667,29 +759,34 @@ end g6 = tmp g7 = u # Hairer II, page 22 modified to use Inf norm - @.. broadcast=false thread=thread utilde=abs((k7 - k6) / (g7 - g6)) + @.. broadcast = false thread = thread utilde = abs((k7 - k6) / (g7 - g6)) integrator.eigen_est = integrator.opts.internalnorm( - norm(utilde, Inf) * oneunit(t), t) + norm(utilde, Inf) * oneunit(t), t + ) end if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde3 * k3 + - btilde4 * k4 + - btilde5 * k5 + btilde6 * k6 + - btilde7 * k7) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * ( + btilde1 * k1 + btilde3 * k3 + + btilde4 * k4 + + btilde5 * k5 + btilde6 * k6 + + btilde7 * k7 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end if integrator.opts.calck #integrator.k[4] == k5 - @.. broadcast=false thread=thread integrator.k[4]=d1 * k1 + d3 * k3 + d4 * k4 + - d5 * k5 + - d6 * k6 + d7 * k7 + @.. broadcast = false thread = thread integrator.k[4] = d1 * k1 + d3 * k3 + d4 * k4 + + d5 * k5 + + d6 * k6 + d7 * k7 #bspl == k3 - @.. broadcast=false thread=thread bspl=k1 - update + @.. broadcast = false thread = thread bspl = k1 - update # k6 === integrator.k[3] === k2 - @.. broadcast=false thread=thread integrator.k[3]=update - k7 - bspl + @.. broadcast = false thread = thread integrator.k[3] = update - k7 - bspl end return nothing end @@ -706,7 +803,7 @@ function initialize!(integrator, cache::RKO65ConstantCache) @inbounds for i in 2:(integrator.kshortsize - 1) integrator.k[i] = zero(integrator.fsalfirst) end - integrator.k[integrator.kshortsize] = integrator.fsallast + return integrator.k[integrator.kshortsize] = integrator.fsallast end @muladd function perform_step!(integrator, cache::RKO65ConstantCache, repeat_step = false) @@ -718,10 +815,14 @@ end k2 = f(uprev + α21 * dt * k1, p, t + c2 * dt) k3 = f(uprev + α31 * dt * k1 + α32 * dt * k2, p, t + c3 * dt) k4 = f(uprev + α41 * dt * k1 + α42 * dt * k2 + α43 * dt * k3, p, t + c4 * dt) - k5 = f(uprev + α51 * dt * k1 + α52 * dt * k2 + α53 * dt * k3 + α54 * dt * k4, p, - t + c5 * dt) - k6 = f(uprev + α62 * dt * k2 + α63 * dt * k3 + α64 * dt * k4 + α65 * dt * k5, p, - t + c6 * dt) + k5 = f( + uprev + α51 * dt * k1 + α52 * dt * k2 + α53 * dt * k3 + α54 * dt * k4, p, + t + c5 * dt + ) + k6 = f( + uprev + α62 * dt * k2 + α63 * dt * k3 + α64 * dt * k4 + α65 * dt * k5, p, + t + c6 * dt + ) u = uprev + dt * (β2 * k2 + β3 * k3 + β4 * k4 + β5 * k5 + β6 * k6) integrator.fsallast = f(u, p, t + dt) # For interpolation, then FSAL'd @@ -751,7 +852,7 @@ function initialize!(integrator, cache::RKO65Cache) integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::RKO65Cache, repeat_step = false) @@ -760,31 +861,31 @@ end (; α21, α31, α41, α51, α32, α42, α52, α62, α43, α53, α63, α54, α64, α65, β2, β3, β4, β5, β6, c1, c2, c3, c4, c5, c6) = cache.tab #println("L221: tmp", tmp) f(k1, uprev, p, t + c1 * dt) - @.. broadcast=false thread=thread tmp=uprev + α21 * dt * k1 + @.. broadcast = false thread = thread tmp = uprev + α21 * dt * k1 stage_limiter!(tmp, integrator, p, t + c2 * dt) #println("L224: tmp/k", tmp, k1) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + α31 * dt * k1 + α32 * dt * k2 + @.. broadcast = false thread = thread tmp = uprev + α31 * dt * k1 + α32 * dt * k2 stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + α41 * dt * k1 + α42 * dt * k2 + - α43 * dt * k3 + @.. broadcast = false thread = thread tmp = uprev + α41 * dt * k1 + α42 * dt * k2 + + α43 * dt * k3 stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k4, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + α51 * dt * k1 + α52 * dt * k2 + - α53 * dt * k3 + - α54 * dt * k4 + @.. broadcast = false thread = thread tmp = uprev + α51 * dt * k1 + α52 * dt * k2 + + α53 * dt * k3 + + α54 * dt * k4 stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k5, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=uprev + α62 * dt * k2 + α63 * dt * k3 + - α64 * dt * k4 + - α65 * dt * k5 + @.. broadcast = false thread = thread tmp = uprev + α62 * dt * k2 + α63 * dt * k3 + + α64 * dt * k4 + + α65 * dt * k5 stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k6, tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (β2 * k2 + β3 * k3 + β4 * k4 + β5 * k5 + β6 * k6) + @.. broadcast = false thread = thread u = uprev + + dt * + (β2 * k2 + β3 * k3 + β4 * k4 + β5 * k5 + β6 * k6) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) #println("L238: tmp/u", tmp, u) @@ -805,7 +906,7 @@ function initialize!(integrator, cache::FRK65ConstantCache) @inbounds for i in 2:(integrator.kshortsize - 1) integrator.k[i] = zero(integrator.fsalfirst) end - integrator.k[integrator.kshortsize] = integrator.fsallast + return integrator.k[integrator.kshortsize] = integrator.fsallast end @muladd function perform_step!(integrator, cache::FRK65ConstantCache, repeat_step = false) @@ -815,39 +916,49 @@ end ν = alg.omega * dt νsq = ν^2 β4 = (d1 + νsq * (d2 + νsq * (d3 + νsq * (d4 + νsq * (d5 + νsq * (d6 + +νsq * d7)))))) / - (1 + - νsq * (d8 + νsq * (d9 + νsq * (d10 + νsq * (d11 + νsq * (d12 + +νsq * d13)))))) + ( + 1 + + νsq * (d8 + νsq * (d9 + νsq * (d10 + νsq * (d11 + νsq * (d12 + +νsq * d13))))) + ) β5 = (e1 + νsq * (e2 + νsq * (e3 + νsq * (e4 + νsq * (e5 + νsq * e6))))) / - (1 + νsq * (e8 + νsq * (e9 + νsq * (e10 + νsq * e11)))) + (1 + νsq * (e8 + νsq * (e9 + νsq * (e10 + νsq * e11)))) β6 = (f1 + νsq * (f2 + νsq * (f3 + νsq * (f4 + νsq * (f5 + νsq * f6))))) / - (1 + νsq * (f8 + νsq * (f9 + νsq * (f10 + νsq * f11)))) + (1 + νsq * (f8 + νsq * (f9 + νsq * (f10 + νsq * f11)))) k1 = integrator.fsalfirst k2 = f(uprev + α21 * dt * k1, p, t + c2 * dt) k3 = f(uprev + α31 * dt * k1 + α32 * dt * k2, p, t + c3 * dt) k4 = f(uprev + α41 * dt * k1 + α43 * dt * k3, p, t + c4 * dt) k5 = f(uprev + α51 * dt * k1 + α53 * dt * k3 + α54 * dt * k4, p, t + c5 * dt) - k6 = f(uprev + α61 * dt * k1 + α63 * dt * k3 + α64 * dt * k4 + α65 * dt * k5, p, - t + c6 * dt) + k6 = f( + uprev + α61 * dt * k1 + α63 * dt * k3 + α64 * dt * k4 + α65 * dt * k5, p, + t + c6 * dt + ) k7 = f( uprev + α71 * dt * k1 + α73 * dt * k3 + α74 * dt * k4 + α75 * dt * k5 + - α76 * dt * k6, + α76 * dt * k6, p, - t + c7 * dt) + t + c7 * dt + ) k8 = f( uprev + α81 * dt * k1 + α83 * dt * k3 + α84 * dt * k4 + α85 * dt * k5 + - α86 * dt * k6 + α87 * dt * k7, + α86 * dt * k6 + α87 * dt * k7, p, - t + c8 * dt) + t + c8 * dt + ) u = uprev + dt * (β1 * k1 + β4 * k4 + β5 * k5 + β6 * k6 + β7 * k7 + β8 * k8) integrator.fsallast = f(u, p, t + dt) k9 = integrator.fsallast if integrator.opts.adaptive utilde = dt * - (β1tilde * k1 + β4tilde * k4 + β5tilde * k5 + β6tilde * k6 + β7tilde * k7 + - β8tilde * k8 + β9tilde * k9) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + ( + β1tilde * k1 + β4tilde * k4 + β5tilde * k5 + β6tilde * k6 + β7tilde * k7 + + β8tilde * k8 + β9tilde * k9 + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 8) @@ -880,7 +991,7 @@ function initialize!(integrator, cache::FRK65Cache) integrator.k[9] = cache.k9 integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::FRK65Cache, repeat_step = false) @@ -892,59 +1003,67 @@ end ν = alg.omega * dt νsq = ν^2 β4 = (d1 + νsq * (d2 + νsq * (d3 + νsq * (d4 + νsq * (d5 + νsq * (d6 + +νsq * d7)))))) / - (1 + - νsq * (d8 + νsq * (d9 + νsq * (d10 + νsq * (d11 + νsq * (d12 + +νsq * d13)))))) + ( + 1 + + νsq * (d8 + νsq * (d9 + νsq * (d10 + νsq * (d11 + νsq * (d12 + +νsq * d13))))) + ) β5 = (e1 + νsq * (e2 + νsq * (e3 + νsq * (e4 + νsq * (e5 + νsq * e6))))) / - (1 + νsq * (e8 + νsq * (e9 + νsq * (e10 + νsq * e11)))) + (1 + νsq * (e8 + νsq * (e9 + νsq * (e10 + νsq * e11)))) β6 = (f1 + νsq * (f2 + νsq * (f3 + νsq * (f4 + νsq * (f5 + νsq * f6))))) / - (1 + νsq * (f8 + νsq * (f9 + νsq * (f10 + νsq * f11)))) + (1 + νsq * (f8 + νsq * (f9 + νsq * (f10 + νsq * f11)))) - @.. broadcast=false thread=thread tmp=uprev + α21 * dt * k1 + @.. broadcast = false thread = thread tmp = uprev + α21 * dt * k1 stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + α31 * dt * k1 + α32 * dt * k2 + @.. broadcast = false thread = thread tmp = uprev + α31 * dt * k1 + α32 * dt * k2 stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + α41 * dt * k1 + α43 * dt * k3 + @.. broadcast = false thread = thread tmp = uprev + α41 * dt * k1 + α43 * dt * k3 stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k4, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + α51 * dt * k1 + α53 * dt * k3 + - α54 * dt * k4 + @.. broadcast = false thread = thread tmp = uprev + α51 * dt * k1 + α53 * dt * k3 + + α54 * dt * k4 stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k5, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=uprev + α61 * dt * k1 + α63 * dt * k3 + - α64 * dt * k4 + - α65 * dt * k5 + @.. broadcast = false thread = thread tmp = uprev + α61 * dt * k1 + α63 * dt * k3 + + α64 * dt * k4 + + α65 * dt * k5 stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k6, tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread tmp=uprev + α71 * dt * k1 + α73 * dt * k3 + - α74 * dt * k4 + - α75 * dt * k5 + α76 * dt * k6 + @.. broadcast = false thread = thread tmp = uprev + α71 * dt * k1 + α73 * dt * k3 + + α74 * dt * k4 + + α75 * dt * k5 + α76 * dt * k6 stage_limiter!(tmp, integrator, p, t + c7 * dt) f(k7, tmp, p, t + c7 * dt) - @.. broadcast=false thread=thread tmp=uprev + α81 * dt * k1 + α83 * dt * k3 + - α84 * dt * k4 + - α85 * dt * k5 + α86 * dt * k6 + α87 * dt * k7 + @.. broadcast = false thread = thread tmp = uprev + α81 * dt * k1 + α83 * dt * k3 + + α84 * dt * k4 + + α85 * dt * k5 + α86 * dt * k6 + α87 * dt * k7 stage_limiter!(tmp, integrator, p, t + c8 * dt) f(k8, tmp, p, t + c8 * dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (β1 * k1 + β4 * k4 + β5 * k5 + β6 * k6 + β7 * k7 + - β8 * k8) + @.. broadcast = false thread = thread u = uprev + + dt * + ( + β1 * k1 + β4 * k4 + β5 * k5 + β6 * k6 + β7 * k7 + + β8 * k8 + ) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) f(k9, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 8) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * (β1tilde * k1 + β4tilde * k4 + - β5tilde * k5 + - β6tilde * k6 + β7tilde * k7 + - β8tilde * k8 + - β9tilde * k9) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * ( + β1tilde * k1 + β4tilde * k4 + + β5tilde * k5 + + β6tilde * k6 + β7tilde * k7 + + β8tilde * k8 + + β9tilde * k9 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end return nothing @@ -962,7 +1081,7 @@ function initialize!(integrator, cache::RKMConstantCache) @inbounds for i in 2:(integrator.kshortsize - 1) integrator.k[i] = zero(integrator.fsalfirst) end - integrator.k[integrator.kshortsize] = integrator.fsallast + return integrator.k[integrator.kshortsize] = integrator.fsallast end @muladd function perform_step!(integrator, cache::RKMConstantCache, repeat_step = false) @@ -1005,7 +1124,7 @@ function initialize!(integrator, cache::RKMCache) integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::RKMCache, repeat_step = false) @@ -1013,24 +1132,24 @@ end (; tmp, fsalfirst, k, k1, k2, k3, k4, k5, k6, stage_limiter!, step_limiter!, thread) = cache (; α2, α3, α4, α5, α6, β1, β2, β3, β4, β6, c2, c3, c4, c5, c6) = cache.tab - @.. broadcast=false thread=thread tmp=uprev + α2 * dt * k1 + @.. broadcast = false thread = thread tmp = uprev + α2 * dt * k1 stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + α3 * dt * k2 + @.. broadcast = false thread = thread tmp = uprev + α3 * dt * k2 stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + α4 * dt * k3 + @.. broadcast = false thread = thread tmp = uprev + α4 * dt * k3 stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k4, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + α5 * dt * k4 + @.. broadcast = false thread = thread tmp = uprev + α5 * dt * k4 stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k5, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=uprev + α6 * dt * k5 + @.. broadcast = false thread = thread tmp = uprev + α6 * dt * k5 stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k6, tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (β1 * k1 + β2 * k2 + β3 * k3 + β4 * k4 + β6 * k6) + @.. broadcast = false thread = thread u = uprev + + dt * + (β1 * k1 + β2 * k2 + β3 * k3 + β4 * k4 + β6 * k6) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) f(integrator.fsallast, u, p, t + dt) @@ -1049,7 +1168,7 @@ function initialize!(integrator, cache::PSRK4p7q6ConstantCache) integrator.k[3] = zero(integrator.fsalfirst) integrator.k[4] = zero(integrator.fsalfirst) integrator.k[5] = zero(integrator.fsalfirst) - integrator.k[6] = integrator.fsallast + return integrator.k[6] = integrator.fsallast end function perform_step!(integrator, cache::PSRK4p7q6ConstantCache, repeat_step = false) @@ -1078,7 +1197,7 @@ function perform_step!(integrator, cache::PSRK4p7q6ConstantCache, repeat_step = integrator.k[4] = k4 integrator.k[5] = k5 integrator.k[6] = k6 - integrator.u = u + return integrator.u = u end get_fsalfirstlast(cache::PSRK4p7q6Cache, u) = (cache.k1, cache.k6) @@ -1092,7 +1211,7 @@ function initialize!(integrator, cache::PSRK4p7q6Cache) integrator.k[3] = cache.k3 integrator.k[4] = cache.k4 integrator.k[5] = cache.k5 - integrator.k[6] = cache.k6 + return integrator.k[6] = cache.k6 end function perform_step!(integrator, cache::PSRK4p7q6Cache, repeat_step = false) @@ -1101,28 +1220,32 @@ function perform_step!(integrator, cache::PSRK4p7q6Cache, repeat_step = false) (; u, uprev, t, dt, f, p) = integrator f(k1, uprev, p, t) - @.. broadcast=false thread=thread tmp=uprev + dt * (a21 * k1) + @.. broadcast = false thread = thread tmp = uprev + dt * (a21 * k1) stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a31 * k1 + a32 * k2) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k4, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k5, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + - a65 * k5) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + + a65 * k5 + ) stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k6, tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (b1 * k1 + b2 * k2 + b3 * k3 + b4 * k4 + b5 * k5 + - b6 * k6) + @.. broadcast = false thread = thread u = uprev + + dt * + ( + b1 * k1 + b2 * k2 + b3 * k3 + b4 * k4 + b5 * k5 + + b6 * k6 + ) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 6) @@ -1140,7 +1263,7 @@ function initialize!(integrator, cache::PSRK3p6q5ConstantCache) integrator.k[2] = zero(integrator.fsalfirst) integrator.k[3] = zero(integrator.fsalfirst) integrator.k[4] = zero(integrator.fsalfirst) - integrator.k[5] = integrator.fsallast + return integrator.k[5] = integrator.fsallast end function perform_step!(integrator, cache::PSRK3p6q5ConstantCache, repeat_step = false) @@ -1166,7 +1289,7 @@ function perform_step!(integrator, cache::PSRK3p6q5ConstantCache, repeat_step = integrator.k[3] = k3 integrator.k[4] = k4 integrator.k[5] = k5 - integrator.u = u + return integrator.u = u end get_fsalfirstlast(cache::PSRK3p6q5Cache, u) = (cache.k1, cache.k5) @@ -1179,7 +1302,7 @@ function initialize!(integrator, cache::PSRK3p6q5Cache) integrator.k[2] = cache.k2 integrator.k[3] = cache.k3 integrator.k[4] = cache.k4 - integrator.k[5] = cache.k5 + return integrator.k[5] = cache.k5 end function perform_step!(integrator, cache::PSRK3p6q5Cache, repeat_step = false) @@ -1188,22 +1311,22 @@ function perform_step!(integrator, cache::PSRK3p6q5Cache, repeat_step = false) (; u, uprev, t, dt, f, p) = integrator f(k1, uprev, p, t) - @.. broadcast=false thread=thread tmp=uprev + dt * (a21 * k1) + @.. broadcast = false thread = thread tmp = uprev + dt * (a21 * k1) stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a31 * k1 + a32 * k2) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k4, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k5, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (b1 * k1 + b2 * k2 + b3 * k3 + b4 * k4 + b5 * k5) + @.. broadcast = false thread = thread u = uprev + + dt * + (b1 * k1 + b2 * k2 + b3 * k3 + b4 * k4 + b5 * k5) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 5) @@ -1220,7 +1343,7 @@ function initialize!(integrator, cache::PSRK3p5q4ConstantCache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = zero(integrator.fsalfirst) integrator.k[3] = zero(integrator.fsalfirst) - integrator.k[4] = integrator.fsallast + return integrator.k[4] = integrator.fsallast end function perform_step!(integrator, cache::PSRK3p5q4ConstantCache, repeat_step = false) @@ -1243,7 +1366,7 @@ function perform_step!(integrator, cache::PSRK3p5q4ConstantCache, repeat_step = integrator.k[2] = k2 integrator.k[3] = k3 integrator.k[4] = k4 - integrator.u = u + return integrator.u = u end get_fsalfirstlast(cache::PSRK3p5q4Cache, u) = (cache.k1, cache.k4) @@ -1257,7 +1380,7 @@ function initialize!(integrator, cache::PSRK3p5q4Cache) integrator.k[3] = cache.k3 integrator.k[4] = cache.k4 integrator.fsalfirst = cache.k1 - integrator.fsallast = cache.k4 + return integrator.fsallast = cache.k4 end function perform_step!(integrator, cache::PSRK3p5q4Cache, repeat_step = false) @@ -1266,18 +1389,18 @@ function perform_step!(integrator, cache::PSRK3p5q4Cache, repeat_step = false) (; u, uprev, t, dt, f, p) = integrator f(k1, uprev, p, t) - @.. broadcast=false thread=thread tmp=uprev + dt * (a21 * k1) + @.. broadcast = false thread = thread tmp = uprev + dt * (a21 * k1) stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a31 * k1 + a32 * k2) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k4, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (b1 * k1 + b2 * k2 + b3 * k3 + b4 * k4) + @.. broadcast = false thread = thread u = uprev + + dt * + (b1 * k1 + b2 * k2 + b3 * k3 + b4 * k4) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) @@ -1296,7 +1419,7 @@ function initialize!(integrator, cache::MSRK5ConstantCache) @inbounds for i in 2:(integrator.kshortsize - 1) integrator.k[i] = zero(integrator.fsalfirst) end - integrator.k[integrator.kshortsize] = integrator.fsallast + return integrator.k[integrator.kshortsize] = integrator.fsallast end function perform_step!(integrator, cache::MSRK5ConstantCache, repeat_step = false) @@ -1332,7 +1455,7 @@ function perform_step!(integrator, cache::MSRK5ConstantCache, repeat_step = fals integrator.k[7] = k7 integrator.k[8] = k8 integrator.k[9] = k9 - integrator.u = u + return integrator.u = u end get_fsalfirstlast(cache::MSRK5Cache, u) = (cache.k1, cache.k9) @@ -1354,7 +1477,7 @@ function initialize!(integrator, cache::MSRK5Cache) integrator.fsallast = cache.k9 f(integrator.fsalfirst, uprev, p, t) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::MSRK5Cache, repeat_step = false) @@ -1362,38 +1485,44 @@ function perform_step!(integrator, cache::MSRK5Cache, repeat_step = false) (; a21, a31, a32, a41, a43, a51, a53, a54, a61, a63, a64, a65, a71, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, b1, b4, b5, b6, b7, b8, c2, c3, c4, c5, c6, c7, c8) = cache.tab (; u, uprev, t, dt, f, p) = integrator - @.. broadcast=false thread=thread tmp=uprev + dt * (a21 * k1) + @.. broadcast = false thread = thread tmp = uprev + dt * (a21 * k1) stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a31 * k1 + a32 * k2) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a41 * k1 + a43 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a41 * k1 + a43 * k3) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k4, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a51 * k1 + a53 * k3 + a54 * k4) + @.. broadcast = false thread = thread tmp = uprev + dt * (a51 * k1 + a53 * k3 + a54 * k4) stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k5, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5) stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k6, tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + - a76 * k6) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + + a76 * k6 + ) stage_limiter!(tmp, integrator, p, t + c7 * dt) f(k7, tmp, p, t + c7 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + - a86 * k6 + - a87 * k7) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + + a86 * k6 + + a87 * k7 + ) stage_limiter!(tmp, integrator, p, t + c8 * dt) f(k8, tmp, p, t + c8 * dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (b1 * k1 + b4 * k4 + b5 * k5 + b6 * k6 + b7 * k7 + - b8 * k8) + @.. broadcast = false thread = thread u = uprev + + dt * + ( + b1 * k1 + b4 * k4 + b5 * k5 + b6 * k6 + b7 * k7 + + b8 * k8 + ) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) f(k9, u, p, t + dt) @@ -1413,7 +1542,7 @@ function initialize!(integrator, cache::MSRK6ConstantCache) @inbounds for i in 2:(integrator.kshortsize - 1) integrator.k[i] = zero(integrator.fsalfirst) end - integrator.k[integrator.kshortsize] = integrator.fsallast + return integrator.k[integrator.kshortsize] = integrator.fsallast end function perform_step!(integrator, cache::MSRK6ConstantCache, repeat_step = false) @@ -1449,7 +1578,7 @@ function perform_step!(integrator, cache::MSRK6ConstantCache, repeat_step = fals integrator.k[7] = k7 integrator.k[8] = k8 integrator.k[9] = k9 - integrator.u = u + return integrator.u = u end get_fsalfirstlast(cache::MSRK6Cache, u) = (cache.k1, cache.k9) @@ -1471,7 +1600,7 @@ function initialize!(integrator, cache::MSRK6Cache) integrator.fsallast = cache.k9 f(integrator.fsalfirst, uprev, p, t) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::MSRK6Cache, repeat_step = false) @@ -1479,37 +1608,43 @@ function perform_step!(integrator, cache::MSRK6Cache, repeat_step = false) (; a21, a32, a41, a43, a51, a53, a54, a61, a63, a64, a65, a71, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, b1, b4, b5, b6, b7, b8, c2, c3, c4, c5, c6, c7, c8) = cache.tab (; u, uprev, t, dt, f, p) = integrator - @.. broadcast=false thread=thread tmp=uprev + dt * (a21 * k1) + @.. broadcast = false thread = thread tmp = uprev + dt * (a21 * k1) stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a32 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a32 * k2) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a41 * k1 + a43 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a41 * k1 + a43 * k3) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k4, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a51 * k1 + a53 * k3 + a54 * k4) + @.. broadcast = false thread = thread tmp = uprev + dt * (a51 * k1 + a53 * k3 + a54 * k4) stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k5, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5) stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k6, tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + - a76 * k6) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + + a76 * k6 + ) stage_limiter!(tmp, integrator, p, t + c7 * dt) f(k7, tmp, p, t + c7 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + - a86 * k6 + - a87 * k7) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + + a86 * k6 + + a87 * k7 + ) stage_limiter!(tmp, integrator, p, t + c8 * dt) f(k8, tmp, p, t + c8 * dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (b1 * k1 + b4 * k4 + b5 * k5 + b6 * k6 + b7 * k7 + - b8 * k8) + @.. broadcast = false thread = thread u = uprev + + dt * + ( + b1 * k1 + b4 * k4 + b5 * k5 + b6 * k6 + b7 * k7 + + b8 * k8 + ) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) f(k9, u, p, t + dt) @@ -1529,7 +1664,7 @@ function initialize!(integrator, cache::Stepanov5ConstantCache) @inbounds for i in 2:(integrator.kshortsize - 1) integrator.k[i] = zero(integrator.fsalfirst) end - integrator.k[integrator.kshortsize] = integrator.fsallast + return integrator.k[integrator.kshortsize] = integrator.fsallast end function perform_step!(integrator, cache::Stepanov5ConstantCache, repeat_step = false) @@ -1553,12 +1688,16 @@ function perform_step!(integrator, cache::Stepanov5ConstantCache, repeat_step = OrdinaryDiffEqCore.increment_nf!(integrator.stats, 6) if integrator.opts.adaptive - utilde=dt * (btilde1 * k1 + btilde2 * k2 + - btilde3 * k3 + btilde4 * k4 + - btilde5 * k5 + btilde6 * k6 + - btilde7 * k7) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + utilde = dt * ( + btilde1 * k1 + btilde2 * k2 + + btilde3 * k3 + btilde4 * k4 + + btilde5 * k5 + btilde6 * k6 + + btilde7 * k7 + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -1569,7 +1708,7 @@ function perform_step!(integrator, cache::Stepanov5ConstantCache, repeat_step = integrator.k[5] = k5 integrator.k[6] = k6 integrator.k[7] = k7 - integrator.u = u + return integrator.u = u end get_fsalfirstlast(cache::Stepanov5Cache, u) = (cache.k1, cache.k7) @@ -1589,7 +1728,7 @@ function initialize!(integrator, cache::Stepanov5Cache) integrator.fsallast = cache.k7 f(integrator.fsalfirst, uprev, p, t) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::Stepanov5Cache, repeat_step = false) @@ -1597,27 +1736,29 @@ function perform_step!(integrator, cache::Stepanov5Cache, repeat_step = false) (; a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, b1, b3, b4, b5, b6, btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7, c2, c3, c4, c5, c6) = cache.tab (; u, uprev, t, dt, f, p) = integrator - @.. broadcast=false thread=thread tmp=uprev + dt * (a21 * k1) + @.. broadcast = false thread = thread tmp = uprev + dt * (a21 * k1) stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a31 * k1 + a32 * k2) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k4, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k5, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + - a65 * k5) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + + a65 * k5 + ) stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k6, tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (b1 * k1 + b3 * k3 + b4 * k4 + b5 * k5 + b6 * k6) + @.. broadcast = false thread = thread u = uprev + + dt * + (b1 * k1 + b3 * k3 + b4 * k4 + b5 * k5 + b6 * k6) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) f(k7, u, p, t + dt) @@ -1626,11 +1767,15 @@ function perform_step!(integrator, cache::Stepanov5Cache, repeat_step = false) if integrator.opts.adaptive utilde = dt * - (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + - btilde6 * k6 + - btilde7 * k7) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + ( + btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + + btilde6 * k6 + + btilde7 * k7 + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -1647,7 +1792,7 @@ function initialize!(integrator, cache::SIR54ConstantCache) @inbounds for i in 2:(integrator.kshortsize - 1) integrator.k[i] = zero(integrator.fsalfirst) end - integrator.k[integrator.kshortsize] = integrator.fsallast + return integrator.k[integrator.kshortsize] = integrator.fsallast end function perform_step!(integrator, cache::SIR54ConstantCache, repeat_step = false) @@ -1673,12 +1818,16 @@ function perform_step!(integrator, cache::SIR54ConstantCache, repeat_step = fals OrdinaryDiffEqCore.increment_nf!(integrator.stats, 7) if integrator.opts.adaptive - utilde = dt * (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + - btilde4 * k4 + - btilde5 * k5 + btilde6 * k6 + - btilde7 * k7) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + utilde = dt * ( + btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + + btilde4 * k4 + + btilde5 * k5 + btilde6 * k6 + + btilde7 * k7 + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -1690,7 +1839,7 @@ function perform_step!(integrator, cache::SIR54ConstantCache, repeat_step = fals integrator.k[6] = k6 integrator.k[7] = k7 integrator.k[8] = k8 - integrator.u = u + return integrator.u = u end get_fsalfirstlast(cache::SIR54Cache, u) = (cache.k1, cache.k8) @@ -1711,7 +1860,7 @@ function initialize!(integrator, cache::SIR54Cache) integrator.fsallast = cache.k8 f(integrator.fsalfirst, uprev, p, t) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::SIR54Cache, repeat_step = false) @@ -1719,33 +1868,39 @@ function perform_step!(integrator, cache::SIR54Cache, repeat_step = false) (; a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, b1, b2, b3, b4, b5, b6, btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7, c2, c3, c4, c5, c6, c7) = cache.tab (; u, uprev, t, dt, f, p) = integrator - @.. broadcast=false thread=thread tmp=uprev + dt * (a21 * k1) + @.. broadcast = false thread = thread tmp = uprev + dt * (a21 * k1) stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a31 * k1 + a32 * k2) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k4, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k5, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + - a65 * k5) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + + a65 * k5 + ) stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k6, tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + - a75 * k5 + a76 * k6) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + + a75 * k5 + a76 * k6 + ) stage_limiter!(tmp, integrator, p, t + c7 * dt) f(k7, tmp, p, t + c7 * dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (b1 * k1 + b2 * k2 + b3 * k3 + b4 * k4 + b5 * k5 + - b6 * k6) + @.. broadcast = false thread = thread u = uprev + + dt * + ( + b1 * k1 + b2 * k2 + b3 * k3 + b4 * k4 + b5 * k5 + + b6 * k6 + ) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) f(k8, u, p, t + dt) @@ -1753,14 +1908,18 @@ function perform_step!(integrator, cache::SIR54Cache, repeat_step = false) integrator.fsallast = k8 if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * - (btilde1 * k1 + btilde2 * k2 + - btilde3 * k3 + btilde4 * k4 + - btilde5 * k5 + btilde6 * k6 + - btilde7 * k7) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * + ( + btilde1 * k1 + btilde2 * k2 + + btilde3 * k3 + btilde4 * k4 + + btilde5 * k5 + btilde6 * k6 + + btilde7 * k7 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -1774,7 +1933,7 @@ function initialize!(integrator, cache::Alshina2ConstantCache) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end function perform_step!(integrator, cache::Alshina2ConstantCache, repeat_step = false) @@ -1788,8 +1947,10 @@ function perform_step!(integrator, cache::Alshina2ConstantCache, repeat_step = f if integrator.opts.adaptive utilde = dt * (b1tilde * k1) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -1798,7 +1959,7 @@ function perform_step!(integrator, cache::Alshina2ConstantCache, repeat_step = f integrator.k[1] = k1 integrator.k[2] = k2 - integrator.u = u + return integrator.u = u end get_fsalfirstlast(cache::Alshina2Cache, u) = (cache.k1, cache.k2) @@ -1813,7 +1974,7 @@ function initialize!(integrator, cache::Alshina2Cache) integrator.fsallast = cache.k2 f(integrator.fsalfirst, uprev, p, t) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::Alshina2Cache, repeat_step = false) @@ -1822,20 +1983,22 @@ function perform_step!(integrator, cache::Alshina2Cache, repeat_step = false) (; u, uprev, t, dt, f, p) = integrator f(k1, uprev, p, t) - @.. broadcast=false thread=thread tmp=uprev + dt * (a21 * integrator.fsalfirst) + @.. broadcast = false thread = thread tmp = uprev + dt * (a21 * integrator.fsalfirst) stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread u=uprev + - dt * (b1 * k1 + b2 * k2) + @.. broadcast = false thread = thread u = uprev + + dt * (b1 * k1 + b2 * k2) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * (b1tilde * k1) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * (b1tilde * k1) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 2) @@ -1852,7 +2015,7 @@ function initialize!(integrator, cache::Alshina3ConstantCache) integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst integrator.k[2] = zero(integrator.fsalfirst) - integrator.k[3] = integrator.fsallast + return integrator.k[3] = integrator.fsallast end function perform_step!(integrator, cache::Alshina3ConstantCache, repeat_step = false) @@ -1868,8 +2031,10 @@ function perform_step!(integrator, cache::Alshina3ConstantCache, repeat_step = f if integrator.opts.adaptive utilde = dt * (b2tilde * k2) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -1879,7 +2044,7 @@ function perform_step!(integrator, cache::Alshina3ConstantCache, repeat_step = f integrator.k[1] = k1 integrator.k[2] = k2 integrator.k[3] = k3 - integrator.u = u + return integrator.u = u end get_fsalfirstlast(cache::Alshina3Cache, u) = (cache.k1, cache.k3) @@ -1895,7 +2060,7 @@ function initialize!(integrator, cache::Alshina3Cache) integrator.fsallast = cache.k3 f(integrator.fsalfirst, uprev, p, t) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end function perform_step!(integrator, cache::Alshina3Cache, repeat_step = false) @@ -1904,21 +2069,23 @@ function perform_step!(integrator, cache::Alshina3Cache, repeat_step = false) (; u, uprev, t, dt, f, p) = integrator f(k1, uprev, p, t) - @.. broadcast=false thread=thread tmp=uprev + dt * (a21 * k1) + @.. broadcast = false thread = thread tmp = uprev + dt * (a21 * k1) stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a32 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a32 * k2) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread u=uprev + - dt * (b1 * k1 + b2 * k2 + b3 * k3) + @.. broadcast = false thread = thread u = uprev + + dt * (b1 * k1 + b2 * k2 + b3 * k3) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * (b2tilde * k2) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * (b2tilde * k2) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -1940,13 +2107,15 @@ function initialize!(integrator, cache::Alshina6ConstantCache) integrator.k[4] = zero(integrator.fsalfirst) integrator.k[5] = zero(integrator.fsalfirst) integrator.k[6] = zero(integrator.fsalfirst) - integrator.k[7] = integrator.fsallast + return integrator.k[7] = integrator.fsallast end function perform_step!(integrator, cache::Alshina6ConstantCache, repeat_step = false) (; u, uprev, f, p, dt, t) = integrator - (; a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, - b1, b5, b6, b7, c2, c3, c4, c5, c6, c7) = cache + (; + a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, + b1, b5, b6, b7, c2, c3, c4, c5, c6, c7, + ) = cache k1 = f(uprev, p, t) tmp = uprev + dt * (a21 * k1) @@ -1975,7 +2144,7 @@ function perform_step!(integrator, cache::Alshina6ConstantCache, repeat_step = f integrator.k[5] = k5 integrator.k[6] = k6 integrator.k[7] = k7 - integrator.u = u + return integrator.u = u end get_fsalfirstlast(cache::Alshina6Cache, u) = (cache.k1, cache.k7) @@ -1992,45 +2161,51 @@ function initialize!(integrator, cache::Alshina6Cache) integrator.k[6] = cache.k6 integrator.k[7] = cache.k7 integrator.fsalfirst = cache.k1 - integrator.fsallast = cache.k7 + return integrator.fsallast = cache.k7 end function perform_step!(integrator, cache::Alshina6Cache, repeat_step = false) (; k1, k2, k3, k4, k5, k6, k7, tmp, stage_limiter!, step_limiter!, thread) = cache - (; a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, - b1, b5, b6, b7, c2, c3, c4, c5, c6, c7) = cache.tab + (; + a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, + b1, b5, b6, b7, c2, c3, c4, c5, c6, c7, + ) = cache.tab (; u, uprev, t, dt, f, p) = integrator f(k1, uprev, p, t) - @.. broadcast=false thread=thread tmp=uprev + dt * (a21 * k1) + @.. broadcast = false thread = thread tmp = uprev + dt * (a21 * k1) stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a31 * k1 + a32 * k2) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k4, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k5, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + - a65 * k5) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + + a65 * k5 + ) stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k6, tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + - a75 * k5 + a76 * k6) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + + a75 * k5 + a76 * k6 + ) stage_limiter!(tmp, integrator, p, t + c7 * dt) f(k7, tmp, p, t + c7 * dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (b1 * k1 + b5 * k5 + b6 * k6 + b7 * k7) + @.. broadcast = false thread = thread u = uprev + + dt * + (b1 * k1 + b5 * k5 + b6 * k6 + b7 * k7) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 7) integrator.fsallast = k7 return nothing -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_tableaus.jl b/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_tableaus.jl index 6586daf89f..7efb4ed3c4 100644 --- a/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_tableaus.jl +++ b/lib/OrdinaryDiffEqLowOrderRK/src/low_order_rk_tableaus.jl @@ -33,7 +33,7 @@ function BS3ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) btilde2 = convert(T, -0.08333333333333333) btilde3 = convert(T, -0.1111111111111111) btilde4 = convert(T, 0.125) - BS3ConstantCache(a21, a32, a41, a42, a43, c1, c2, btilde1, btilde2, btilde3, btilde4) + return BS3ConstantCache(a21, a32, a41, a42, a43, c1, c2, btilde1, btilde2, btilde3, btilde4) end """ @@ -57,7 +57,7 @@ function BS3ConstantCache(T::Type, T2::Type) btilde2 = convert(T, -1 // 12) btilde3 = convert(T, -1 // 9) btilde4 = convert(T, 1 // 8) - BS3ConstantCache(a21, a32, a41, a42, a43, c1, c2, btilde1, btilde2, btilde3, btilde4) + return BS3ConstantCache(a21, a32, a41, a42, a43, c1, c2, btilde1, btilde2, btilde3, btilde4) end struct OwrenZen3ConstantCache{T, T2} <: OrdinaryDiffEqConstantCache @@ -100,8 +100,10 @@ function OwrenZen3ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFl r22 = convert(T, 1.3776041666666667) r33 = convert(T, -0.6510416666666666) r32 = convert(T, 0.9765625) - OwrenZen3ConstantCache(a21, a31, a32, a41, a42, a43, c1, c2, btilde1, btilde2, btilde3, - r13, r12, r23, r22, r33, r32) + return OwrenZen3ConstantCache( + a21, a31, a32, a41, a42, a43, c1, c2, btilde1, btilde2, btilde3, + r13, r12, r23, r22, r33, r32 + ) end function OwrenZen3ConstantCache(T, T2) @@ -124,8 +126,10 @@ function OwrenZen3ConstantCache(T, T2) r22 = convert(T, 529 // 384) r33 = convert(T, -125 // 192) r32 = convert(T, 125 // 128) - OwrenZen3ConstantCache(a21, a31, a32, a41, a42, a43, c1, c2, btilde1, btilde2, btilde3, - r13, r12, r23, r22, r33, r32) + return OwrenZen3ConstantCache( + a21, a31, a32, a41, a42, a43, c1, c2, btilde1, btilde2, btilde3, + r13, r12, r23, r22, r33, r32 + ) end struct OwrenZen4ConstantCache{T, T2} <: OrdinaryDiffEqConstantCache @@ -209,11 +213,13 @@ function OwrenZen4ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFl r64 = convert(T, 2.2595419847328246) r63 = convert(T, -3.519083969465649) r62 = convert(T, 1.2595419847328244) - OwrenZen4ConstantCache(a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, + return OwrenZen4ConstantCache( + a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a63, a64, a65, c1, c2, c3, c4, btilde1, btilde3, btilde4, btilde5, r14, r13, r12, r34, r33, r32, r44, r43, r42, - r54, r53, r52, r64, r63, r62) + r54, r53, r52, r64, r63, r62 + ) end function OwrenZen4ConstantCache(T, T2) @@ -257,11 +263,13 @@ function OwrenZen4ConstantCache(T, T2) r64 = convert(T, 296 // 131) r63 = convert(T, -461 // 131) r62 = convert(T, 165 // 131) - OwrenZen4ConstantCache(a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, + return OwrenZen4ConstantCache( + a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a63, a64, a65, c1, c2, c3, c4, btilde1, btilde3, btilde4, btilde5, r14, r13, r12, r34, r33, r32, r44, r43, r42, - r54, r53, r52, r64, r63, r62) + r54, r53, r52, r64, r63, r62 + ) end struct OwrenZen5ConstantCache{T, T2} <: OrdinaryDiffEqConstantCache @@ -405,14 +413,16 @@ function OwrenZen5ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFl r84 = convert(T, -8.384615384615385) r83 = convert(T, 5.769230769230769) r82 = convert(T, -1.3846153846153846) - OwrenZen5ConstantCache(a21, a31, a32, a41, a42, a51, a52, a53, + return OwrenZen5ConstantCache( + a21, a31, a32, a41, a42, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, c1, c2, c3, c4, c5, c6, btilde1, btilde3, btilde4, btilde5, btilde6, btilde7, r15, r14, r13, r12, r35, r34, r33, r32, r45, r44, r43, r42, r55, r54, r53, r52, r65, r64, r63, - r62, r75, r74, r73, r72, r85, r84, r83, r82) + r62, r75, r74, r73, r72, r85, r84, r83, r82 + ) end function OwrenZen5ConstantCache(T, T2) @@ -488,14 +498,16 @@ function OwrenZen5ConstantCache(T, T2) r84 = convert(T, -109 // 13) r83 = convert(T, 75 // 13) r82 = convert(T, -18 // 13) - OwrenZen5ConstantCache(a21, a31, a32, a41, a42, a51, a52, a53, + return OwrenZen5ConstantCache( + a21, a31, a32, a41, a42, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, c1, c2, c3, c4, c5, c6, btilde1, btilde3, btilde4, btilde5, btilde6, btilde7, r15, r14, r13, r12, r35, r34, r33, r32, r45, r44, r43, r42, r55, r54, r53, r52, r65, r64, r63, - r62, r75, r74, r73, r72, r85, r84, r83, r82) + r62, r75, r74, r73, r72, r85, r84, r83, r82 + ) end struct BS5ConstantCache{T, T2} <: OrdinaryDiffEqConstantCache @@ -684,9 +696,11 @@ function BS5ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) btilde8 = convert(T, 0.005912495780636172) c6, c7, c8, a91, a92, a93, a94, a95, a96, a97, a98, a101, a102, a103, a104, a105, a106, a107, a108, a109, a111, a112, a113, a114, a115, a116, a117, a118, a119, a1110 = BS5Interp( T, - T2) + T2 + ) r016, r015, r014, r013, r012, r036, r035, r034, r033, r032, r046, r045, r044, r043, r042, r056, r055, r054, r053, r052, r066, r065, r064, r063, r062, r076, r075, r074, r073, r072, r086, r085, r084, r083, r082, r096, r095, r094, r093, r106, r105, r104, r103, r102, r116, r115, r114, r113, r112 = BS5Interp_polyweights(T) - BS5ConstantCache(c1, c2, c3, c4, c5, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, + return BS5ConstantCache( + c1, c2, c3, c4, c5, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, bhat1, bhat3, bhat4, bhat5, bhat6, btilde1, btilde3, btilde4, btilde5, btilde6, btilde7, btilde8, c6, c7, c8, a91, a92, a93, @@ -696,7 +710,8 @@ function BS5ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) r046, r045, r044, r043, r042, r056, r055, r054, r053, r052, r066, r065, r064, r063, r062, r076, r075, r074, r073, r072, r086, r085, r084, r083, r082, r096, r095, r094, r093, r106, r105, r104, r103, r102, r116, r115, - r114, r113, r112) + r114, r113, r112 + ) end """ @@ -759,9 +774,11 @@ function BS5ConstantCache(T::Type, T2::Type) btilde8 = convert(T, 3293 // 556956) c6, c7, c8, a91, a92, a93, a94, a95, a96, a97, a98, a101, a102, a103, a104, a105, a106, a107, a108, a109, a111, a112, a113, a114, a115, a116, a117, a118, a119, a1110 = BS5Interp( T, - T2) + T2 + ) r016, r015, r014, r013, r012, r036, r035, r034, r033, r032, r046, r045, r044, r043, r042, r056, r055, r054, r053, r052, r066, r065, r064, r063, r062, r076, r075, r074, r073, r072, r086, r085, r084, r083, r082, r096, r095, r094, r093, r106, r105, r104, r103, r102, r116, r115, r114, r113, r112 = BS5Interp_polyweights(T) - BS5ConstantCache(c1, c2, c3, c4, c5, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, + return BS5ConstantCache( + c1, c2, c3, c4, c5, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, bhat1, bhat3, bhat4, bhat5, bhat6, btilde1, btilde3, btilde4, btilde5, btilde6, btilde7, btilde8, c6, c7, c8, a91, a92, a93, @@ -771,7 +788,8 @@ function BS5ConstantCache(T::Type, T2::Type) r046, r045, r044, r043, r042, r056, r055, r054, r053, r052, r066, r065, r064, r063, r062, r076, r075, r074, r073, r072, r086, r085, r084, r083, r082, r096, r095, r094, r093, r106, r105, r104, r103, r102, r116, r115, - r114, r113, r112) + r114, r113, r112 + ) end """ @@ -815,9 +833,9 @@ function BS5Interp(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) a1110 = convert(T, -0.12340531043086005) return c6, - c7, c8, a91, a92, a93, a94, a95, a96, a97, a98, a101, a102, a103, a104, a105, - a106, a107, a108, a109, a111, a112, a113, a114, a115, a116, a117, a118, a119, - a1110 + c7, c8, a91, a92, a93, a94, a95, a96, a97, a98, a101, a102, a103, a104, a105, + a106, a107, a108, a109, a111, a112, a113, a114, a115, a116, a117, a118, a119, + a1110 end """ @@ -861,9 +879,9 @@ function BS5Interp(T::Type, T2::Type) a1110 = convert(T, -1403317093 // 11371610250) return c6, - c7, c8, a91, a92, a93, a94, a95, a96, a97, a98, a101, a102, a103, a104, a105, - a106, a107, a108, a109, a111, a112, a113, a114, a115, a116, a117, a118, a119, - a1110 + c7, c8, a91, a92, a93, a94, a95, a96, a97, a98, a101, a102, a103, a104, a105, + a106, a107, a108, a109, a111, a112, a113, a114, a115, a116, a117, a118, a119, + a1110 end """ @@ -937,9 +955,9 @@ function BS5Interp_polyweights(T::Type{<:CompiledFloats}) r112 = convert(T, 12) return r016, r015, r014, r013, r012, r036, r035, r034, r033, r032, r046, r045, r044, - r043, r042, r056, r055, r054, r053, r052, r066, r065, r064, r063, r062, r076, - r075, r074, r073, r072, r086, r085, r084, r083, r082, r096, r095, r094, r093, - r106, r105, r104, r103, r102, r116, r115, r114, r113, r112 + r043, r042, r056, r055, r054, r053, r052, r066, r065, r064, r063, r062, r076, + r075, r074, r073, r072, r086, r085, r084, r083, r082, r096, r095, r094, r093, + r106, r105, r104, r103, r102, r116, r115, r114, r113, r112 end """ @@ -1013,9 +1031,9 @@ function BS5Interp_polyweights(T::Type) r112 = convert(T, 12) return r016, r015, r014, r013, r012, r036, r035, r034, r033, r032, r046, r045, r044, - r043, r042, r056, r055, r054, r053, r052, r066, r065, r064, r063, r062, r076, - r075, r074, r073, r072, r086, r085, r084, r083, r082, r096, r095, r094, r093, - r106, r105, r104, r103, r102, r116, r115, r114, r113, r112 + r043, r042, r056, r055, r054, r053, r052, r066, r065, r064, r063, r062, r076, + r075, r074, r073, r072, r086, r085, r084, r083, r082, r096, r095, r094, r093, + r106, r105, r104, r103, r102, r116, r115, r114, r113, r112 end struct DP5ConstantCache <: OrdinaryDiffEqConstantCache end @@ -1060,10 +1078,14 @@ struct DP5ConstantCacheActual{T, T2} d7::T end -@fold function DP5ConstantCacheActual(::Type{T}, - ::Type{T2}) where {T <: CompiledFloats, +@fold function DP5ConstantCacheActual( + ::Type{T}, + ::Type{T2} + ) where { + T <: CompiledFloats, T2 <: - CompiledFloats} + CompiledFloats, + } a21 = convert(T, 0.2) a31 = convert(T, 0.075) a32 = convert(T, 0.225) @@ -1103,10 +1125,12 @@ end c5 = convert(T2, 1) c6 = convert(T2, 1) d1, d3, d4, d5, d6, d7 = DP5_dense_ds(T) - DP5ConstantCacheActual(a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, + DP5ConstantCacheActual( + a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a73, a74, a75, a76, btilde1, btilde3, btilde4, btilde5, - btilde6, btilde7, c1, c2, c3, c4, c5, c6, d1, d3, d4, d5, d6, d7) + btilde6, btilde7, c1, c2, c3, c4, c5, c6, d1, d3, d4, d5, d6, d7 + ) end @fold function DP5_dense_ds(::Type{T}) where {T <: CompiledFloats} @@ -1159,10 +1183,12 @@ end c5 = convert(T2, 1) c6 = convert(T2, 1) d1, d3, d4, d5, d6, d7 = DP5_dense_ds(T) - DP5ConstantCacheActual(a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, + DP5ConstantCacheActual( + a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a73, a74, a75, a76, btilde1, btilde3, btilde4, btilde5, - btilde6, btilde7, c1, c2, c3, c4, c5, c6, d1, d3, d4, d5, d6, d7) + btilde6, btilde7, c1, c2, c3, c4, c5, c6, d1, d3, d4, d5, d6, d7 + ) end @fold function DP5_dense_ds(::Type{T}) where {T} @@ -1246,9 +1272,10 @@ function Anas5ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats b4 = convert(T, 0.1607142857142857) b5 = convert(T, 0.3112356053532524) b6 = convert(T, -0.04166666666666667) - Anas5ConstantCache( + return Anas5ConstantCache( a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, - a65, c2, c3, c4, c5, c6, b1, b3, b4, b5, b6) + a65, c2, c3, c4, c5, c6, b1, b3, b4, b5, b6 + ) end function Anas5ConstantCache(T, T2) @@ -1277,9 +1304,10 @@ function Anas5ConstantCache(T, T2) b4 = convert(T, 9 // 56) b5 = convert(T, 1000 // 3213) b6 = convert(T, -1 // 24) - Anas5ConstantCache( + return Anas5ConstantCache( a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, - a65, c2, c3, c4, c5, c6, b1, b3, b4, b5, b6) + a65, c2, c3, c4, c5, c6, b1, b3, b4, b5, b6 + ) end struct PSRK4p7q6ConstantCache{T, T1} <: OrdinaryDiffEqConstantCache @@ -1343,10 +1371,11 @@ function PSRK4p7q6ConstantCache(T::Type{<:CompiledFloats}, T1::Type{<:CompiledFl c5 = convert(T1, 0.76406623463348) c6 = convert(T1, 1.0) - PSRK4p7q6ConstantCache( + return PSRK4p7q6ConstantCache( a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, b1, b2, b3, b4, b5, b6, - c2, c3, c4, c5, c6) + c2, c3, c4, c5, c6 + ) end struct PSRK3p6q5ConstantCache{T, T1} <: OrdinaryDiffEqConstantCache @@ -1396,10 +1425,11 @@ function PSRK3p6q5ConstantCache(T::Type{<:CompiledFloats}, T1::Type{<:CompiledFl c4 = convert(T1, 0.57332577194528) c5 = convert(T1, 1.0) - PSRK3p6q5ConstantCache( + return PSRK3p6q5ConstantCache( a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, b1, b2, b3, b4, b5, - c2, c3, c4, c5) + c2, c3, c4, c5 + ) end struct PSRK3p5q4ConstantCache{T, T1} <: OrdinaryDiffEqConstantCache @@ -1437,10 +1467,11 @@ function PSRK3p5q4ConstantCache(T::Type, T1::Type) c3 = T1(1 // 4) c4 = T1(1) - PSRK3p5q4ConstantCache( + return PSRK3p5q4ConstantCache( a21, a31, a32, a41, a42, a43, b1, b2, b3, b4, - c2, c3, c4) + c2, c3, c4 + ) end struct MSRK5ConstantCache{T, T1} <: OrdinaryDiffEqConstantCache @@ -1523,10 +1554,11 @@ function MSRK5ConstantCache(T::Type, T1::Type) c7 = T1(5 // 6) c8 = T1(19 // 20) - MSRK5ConstantCache( + return MSRK5ConstantCache( a21, a31, a32, a41, a43, a51, a53, a54, a61, a63, a64, a65, a71, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, b1, b4, b5, b6, b7, b8, - c2, c3, c4, c5, c6, c7, c8) + c2, c3, c4, c5, c6, c7, c8 + ) end struct MSRK6ConstantCache{T, T1} <: OrdinaryDiffEqConstantCache @@ -1606,10 +1638,11 @@ function MSRK6ConstantCache(T::Type, T1::Type) c7 = T1(6 // 7) c8 = T1(1) - MSRK6ConstantCache( + return MSRK6ConstantCache( a21, a32, a41, a43, a51, a53, a54, a61, a63, a64, a65, a71, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, b1, b4, b5, b6, b7, b8, c2, - c3, c4, c5, c6, c7, c8) + c3, c4, c5, c6, c7, c8 + ) end struct Stepanov5ConstantCache{T, T1} <: OrdinaryDiffEqConstantCache @@ -1689,10 +1722,12 @@ function Stepanov5ConstantCache(T::Type, T1::Type) c5 = T1(39 // 40) c6 = T1(1 // 1) - Stepanov5ConstantCache(a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, + return Stepanov5ConstantCache( + a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, b1, b3, b4, b5, b6, btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7, - c2, c3, c4, c5, c6) + c2, c3, c4, c5, c6 + ) end struct SIR54ConstantCache{T, T2} <: OrdinaryDiffEqConstantCache @@ -1756,7 +1791,7 @@ function SIR54ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats a62 = convert(T, -7.91467977711770718) a63 = convert(T, 7.07985467092264069) a64 = convert(T, -0.0244945338238275367) - a65 = convert(T, -0.0148094761792934300) + a65 = convert(T, -0.01480947617929343) a71 = convert(T, 0.0986971498551664256) a72 = convert(T, 0.00100729346874150652) a73 = convert(T, 0.495118366873759549) @@ -1782,15 +1817,16 @@ function SIR54ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats c2 = convert(T2, 0.224991857145594237) c3 = convert(T2, 0.328113572148955663) c4 = convert(T2, 0.944378303037342471) - c5 = convert(T2, 0.988998101750166470) + c5 = convert(T2, 0.98899810175016647) c6 = convert(T2, 1.0) c7 = convert(T2, 1.0) - SIR54ConstantCache( + return SIR54ConstantCache( a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, b1, b2, b3, b4, b5, b6, btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7, c2, - c3, c4, c5, c6, c7) + c3, c4, c5, c6, c7 + ) end struct Alshina2ConstantCache{T, T2} <: OrdinaryDiffEqConstantCache @@ -1812,7 +1848,7 @@ function Alshina2ConstantCache(T, T2) c2 = convert(T2, 0.666666666666666) - Alshina2ConstantCache(a21, b1, b2, b1tilde, c2) + return Alshina2ConstantCache(a21, b1, b2, b1tilde, c2) end struct Alshina3ConstantCache{T, T2} <: OrdinaryDiffEqConstantCache @@ -1842,7 +1878,7 @@ function Alshina3ConstantCache(T, T2) c2 = convert(T2, 0.5) c3 = convert(T2, 0.75) - Alshina3ConstantCache(a21, a32, b1, b2, b3, b2tilde, c2, c3) + return Alshina3ConstantCache(a21, a32, b1, b2, b3, b2tilde, c2, c3) end struct Alshina6ConstantCache{T, T2} <: OrdinaryDiffEqConstantCache @@ -1922,7 +1958,9 @@ function Alshina6ConstantCache(T, T2) c6 = convert(T2, 0.7236067977499789) c7 = convert(T2, 1.0) - Alshina6ConstantCache(a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, + return Alshina6ConstantCache( + a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, - b1, b5, b6, b7, c2, c3, c4, c5, c6, c7) + b1, b5, b6, b7, c2, c3, c4, c5, c6, c7 + ) end diff --git a/lib/OrdinaryDiffEqLowOrderRK/src/split_perform_step.jl b/lib/OrdinaryDiffEqLowOrderRK/src/split_perform_step.jl index 992a9f25e6..b08b09afc9 100644 --- a/lib/OrdinaryDiffEqLowOrderRK/src/split_perform_step.jl +++ b/lib/OrdinaryDiffEqLowOrderRK/src/split_perform_step.jl @@ -2,20 +2,22 @@ function initialize!(integrator, cache::SplitEulerConstantCache) integrator.kshortsize = 2 integrator.k = typeof(integrator.k)(undef, integrator.kshortsize) integrator.fsalfirst = integrator.f.f1(integrator.uprev, integrator.p, integrator.t) + - integrator.f.f2(integrator.uprev, integrator.p, integrator.t) # Pre-start fsal + integrator.f.f2(integrator.uprev, integrator.p, integrator.t) # Pre-start fsal OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.stats.nf2 += 1 # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -@muladd function perform_step!(integrator, cache::SplitEulerConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::SplitEulerConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator - u = @.. broadcast=false uprev+dt * integrator.fsalfirst + u = @.. broadcast = false uprev + dt * integrator.fsalfirst integrator.fsallast = f.f1(u, p, t + dt) + f.f2(u, p, t + dt) # For the interpolation, needs k at the updated point OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.stats.nf2 += 1 @@ -37,12 +39,12 @@ function initialize!(integrator, cache::SplitEulerCache) integrator.f.f2(cache.tmp, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.stats.nf2 += 1 - integrator.fsalfirst .+= cache.tmp + return integrator.fsalfirst .+= cache.tmp end @muladd function perform_step!(integrator, cache::SplitEulerCache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator - @.. broadcast=false u=uprev + dt * integrator.fsalfirst + @.. broadcast = false u = uprev + dt * integrator.fsalfirst f.f1(integrator.fsallast, u, p, t + dt) # For the interpolation, needs k at the updated point f.f2(cache.tmp, u, p, t + dt) # For the interpolation, needs k at the updated point integrator.stats.nf2 += 1 diff --git a/lib/OrdinaryDiffEqLowOrderRK/test/allocation_tests.jl b/lib/OrdinaryDiffEqLowOrderRK/test/allocation_tests.jl index 11474c11f3..3638aece25 100644 --- a/lib/OrdinaryDiffEqLowOrderRK/test/allocation_tests.jl +++ b/lib/OrdinaryDiffEqLowOrderRK/test/allocation_tests.jl @@ -15,32 +15,34 @@ These tests verify that the step! operation does not allocate during stepping. du[2] = -1.5 * u[2] end prob = ODEProblem(simple_system!, [1.0, 1.0], (0.0, 1.0)) - + # Test all exported LowOrderRK solvers for allocation-free behavior - low_order_solvers = [Euler(), Heun(), Ralston(), Midpoint(), RK4(), - BS3(), OwrenZen3(), OwrenZen4(), OwrenZen5(), BS5(), - DP5(), Anas5(), RKO65(), FRK65(), RKM(), MSRK5(), MSRK6(), - PSRK4p7q6(), PSRK3p5q4(), PSRK3p6q5(), Stepanov5(), SIR54(), - Alshina2(), Alshina3(), Alshina6(), AutoDP5(DP5())] - + low_order_solvers = [ + Euler(), Heun(), Ralston(), Midpoint(), RK4(), + BS3(), OwrenZen3(), OwrenZen4(), OwrenZen5(), BS5(), + DP5(), Anas5(), RKO65(), FRK65(), RKM(), MSRK5(), MSRK6(), + PSRK4p7q6(), PSRK3p5q4(), PSRK3p6q5(), Stepanov5(), SIR54(), + Alshina2(), Alshina3(), Alshina6(), AutoDP5(DP5()), + ] + @testset "LowOrderRK Solver Allocation Analysis" begin for solver in low_order_solvers @testset "$(typeof(solver)) allocation check" begin # Some solvers need fixed timestep if solver isa Euler || solver isa Midpoint || solver isa Heun - integrator = init(prob, solver, dt=0.1, save_everystep=false, adaptive=false) + integrator = init(prob, solver, dt = 0.1, save_everystep = false, adaptive = false) else - integrator = init(prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) + integrator = init(prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) end step!(integrator) # Setup step may allocate - + # Use AllocCheck to verify step! is allocation-free allocs = check_allocs(step!, (typeof(integrator),)) - + # These solvers should be allocation-free, but mark as broken for now # to verify with AllocCheck (more accurate than @allocated) - @test length(allocs) == 0 broken=true - + @test length(allocs) == 0 broken = true + if length(allocs) > 0 println("AllocCheck found $(length(allocs)) allocation sites in $(typeof(solver)) step!:") for (i, alloc) in enumerate(allocs[1:min(3, end)]) # Show first 3 @@ -52,4 +54,4 @@ These tests verify that the step! operation does not allocate during stepping. end end end -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqLowOrderRK/test/euler_ssp.jl b/lib/OrdinaryDiffEqLowOrderRK/test/euler_ssp.jl index 79c09ec0f2..008bc690c8 100644 --- a/lib/OrdinaryDiffEqLowOrderRK/test/euler_ssp.jl +++ b/lib/OrdinaryDiffEqLowOrderRK/test/euler_ssp.jl @@ -3,14 +3,17 @@ f_ssp = (u, p, t) -> begin sin(10t) * u * (1 - u) end test_problem_ssp = ODEProblem(f_ssp, 0.1, (0.0, 8.0)) -test_problem_ssp_long = ODEProblem(f_ssp, 0.1, (0.0, 1.e3)) +test_problem_ssp_long = ODEProblem(f_ssp, 0.1, (0.0, 1.0e3)) # test SSP coefficient for explicit Euler alg = Euler() -sol = solve(test_problem_ssp_long, alg, dt = OrdinaryDiffEqLowOrderRK.ssp_coefficient(alg), - dense = false) +sol = solve( + test_problem_ssp_long, alg, dt = OrdinaryDiffEqLowOrderRK.ssp_coefficient(alg), + dense = false +) @test all(sol.u .>= 0) sol = solve( - test_problem_ssp_long, alg, dt = OrdinaryDiffEqLowOrderRK.ssp_coefficient(alg) + 1.e-3, - dense = false) + test_problem_ssp_long, alg, dt = OrdinaryDiffEqLowOrderRK.ssp_coefficient(alg) + 1.0e-3, + dense = false +) @test any(sol.u .< 0) diff --git a/lib/OrdinaryDiffEqLowOrderRK/test/jet.jl b/lib/OrdinaryDiffEqLowOrderRK/test/jet.jl index 1a105c85c9..f0c9ad3a42 100644 --- a/lib/OrdinaryDiffEqLowOrderRK/test/jet.jl +++ b/lib/OrdinaryDiffEqLowOrderRK/test/jet.jl @@ -1,5 +1,5 @@ import OrdinaryDiffEqLowOrderRK -using OrdinaryDiffEqLowOrderRK +using OrdinaryDiffEqLowOrderRK using OrdinaryDiffEqCore using JET using Test @@ -8,7 +8,7 @@ using Test # Test package for typos (commented out due to false positive) # test_package( # OrdinaryDiffEqLowOrderRK, target_defined_modules = true, mode = :typo) - + # Test individual solver type stability @testset "Solver Type Stability Tests" begin # Test problem @@ -17,26 +17,28 @@ using Test du[2] = -1.5 * u[2] end prob = ODEProblem(simple_system!, [1.0, 1.0], (0.0, 1.0)) - + # Test all exported LowOrderRK solvers - low_order_solvers = [Euler(), Heun(), Ralston(), Midpoint(), RK4(), - BS3(), OwrenZen3(), OwrenZen4(), OwrenZen5(), BS5(), - DP5(), Anas5(), RKO65(), FRK65(), RKM(), MSRK5(), MSRK6(), - PSRK4p7q6(), PSRK3p5q4(), PSRK3p6q5(), Stepanov5(), SIR54(), - Alshina2(), Alshina3(), Alshina6(), AutoDP5(DP5())] - + low_order_solvers = [ + Euler(), Heun(), Ralston(), Midpoint(), RK4(), + BS3(), OwrenZen3(), OwrenZen4(), OwrenZen5(), BS5(), + DP5(), Anas5(), RKO65(), FRK65(), RKM(), MSRK5(), MSRK6(), + PSRK4p7q6(), PSRK3p5q4(), PSRK3p6q5(), Stepanov5(), SIR54(), + Alshina2(), Alshina3(), Alshina6(), AutoDP5(DP5()), + ] + for solver in low_order_solvers @testset "$(typeof(solver)) type stability" begin try # Some solvers need fixed timestep if solver isa Euler || solver isa Midpoint || solver isa Heun - @test_opt broken=true init(prob, solver, dt=0.1, save_everystep=false, adaptive=false) - integrator = init(prob, solver, dt=0.1, save_everystep=false, adaptive=false) + @test_opt broken = true init(prob, solver, dt = 0.1, save_everystep = false, adaptive = false) + integrator = init(prob, solver, dt = 0.1, save_everystep = false, adaptive = false) else - @test_opt broken=true init(prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) - integrator = init(prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) + @test_opt broken = true init(prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) + integrator = init(prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) end - @test_opt broken=true step!(integrator) + @test_opt broken = true step!(integrator) catch e @test_broken false # Mark as broken if solver fails to initialize println("$(typeof(solver)) failed with: $e") @@ -44,4 +46,4 @@ using Test end end end -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqLowOrderRK/test/low_order_erk_convergence_tests.jl b/lib/OrdinaryDiffEqLowOrderRK/test/low_order_erk_convergence_tests.jl index 6f8041376d..af317d3502 100644 --- a/lib/OrdinaryDiffEqLowOrderRK/test/low_order_erk_convergence_tests.jl +++ b/lib/OrdinaryDiffEqLowOrderRK/test/low_order_erk_convergence_tests.jl @@ -14,69 +14,76 @@ testTol = 0.2 f = (u, p, t) -> sin(u) prob_ode_nonlinear = ODEProblem( - ODEFunction(f; - analytic = (u0, p, t) -> 2 * acot(exp(-t) * - cot(0.5))), 1.0, - (0.0, 0.5)) + ODEFunction( + f; + analytic = (u0, p, t) -> 2 * acot( + exp(-t) * + cot(0.5) + ) + ), 1.0, + (0.0, 0.5) +) @testset "Explicit Solver Convergence Tests ($(["out-of-place", "in-place"][i]))" for i in 1:2 - prob = (ODEProblemLibrary.prob_ode_linear, - ODEProblemLibrary.prob_ode_2Dlinear)[i] + prob = ( + ODEProblemLibrary.prob_ode_linear, + ODEProblemLibrary.prob_ode_2Dlinear, + )[i] dts = 1 .// 2 .^ (8:-1:4) @info "Very low order" sim = test_convergence(dts, prob, Euler()) - @test sim.𝒪est[:final]≈1 atol=testTol + @test sim.𝒪est[:final] ≈ 1 atol = testTol sim2 = test_convergence(dts, prob, Heun()) - @test sim2.𝒪est[:l∞]≈2 atol=testTol + @test sim2.𝒪est[:l∞] ≈ 2 atol = testTol sim2 = test_convergence(dts, prob, Ralston()) - @test sim2.𝒪est[:l∞]≈2 atol=testTol + @test sim2.𝒪est[:l∞] ≈ 2 atol = testTol sim2 = test_convergence(dts, prob, Midpoint()) - @test sim2.𝒪est[:l∞]≈2 atol=testTol + @test sim2.𝒪est[:l∞] ≈ 2 atol = testTol sim3 = test_convergence(dts, prob, RK4()) - @test sim3.𝒪est[:l∞]≈4 atol=testTol + @test sim3.𝒪est[:l∞] ≈ 4 atol = testTol sim3 = test_convergence(dts2, prob, RKO65()) - @test sim3.𝒪est[:l∞]≈5 atol=testTol + @test sim3.𝒪est[:l∞] ≈ 5 atol = testTol sim3 = test_convergence(dts4, prob, FRK65()) - @test sim3.𝒪est[:l∞]≈6 atol=0.6 + @test sim3.𝒪est[:l∞] ≈ 6 atol = 0.6 sim3 = test_convergence(dts, prob, RKM()) - @test sim3.𝒪est[:l∞]≈4 atol=0.2 + @test sim3.𝒪est[:l∞] ≈ 4 atol = 0.2 sim_ps6 = test_convergence(dts2, prob_ode_nonlinear, PSRK4p7q6()) - @test sim_ps6.𝒪est[:l∞]≈4 atol=testTol + @test sim_ps6.𝒪est[:l∞] ≈ 4 atol = testTol sim_ps5 = test_convergence(dts2, prob_ode_nonlinear, PSRK3p6q5()) - @test sim_ps5.𝒪est[:l∞]≈3 atol=testTol + @test sim_ps5.𝒪est[:l∞] ≈ 3 atol = testTol sim_ps4 = test_convergence(dts2, prob_ode_nonlinear, PSRK3p5q4()) - @test sim_ps4.𝒪est[:l∞]≈3 atol=testTol + @test sim_ps4.𝒪est[:l∞] ≈ 3 atol = testTol sim_ms5 = test_convergence(dts2, prob, MSRK5()) - @test sim_ms5.𝒪est[:l∞]≈5 atol=testTol + @test sim_ms5.𝒪est[:l∞] ≈ 5 atol = testTol sim_ms6 = test_convergence(dts4, prob, MSRK6()) - @test sim_ms6.𝒪est[:l∞]≈6 atol=testTol + @test sim_ms6.𝒪est[:l∞] ≈ 6 atol = testTol sim_ms54 = test_convergence(dts2, prob, Stepanov5()) - @test sim_ms54.𝒪est[:l∞]≈5 atol=0.5 + @test sim_ms54.𝒪est[:l∞] ≈ 5 atol = 0.5 sim4 = test_convergence(dts, prob, BS3()) - @test sim4.𝒪est[:l2]≈3 atol=testTol + @test sim4.𝒪est[:l2] ≈ 3 atol = testTol sim4 = test_convergence(dts2, prob, SIR54()) - @test sim4.𝒪est[:l2]≈4.4 atol=testTol + @test sim4.𝒪est[:l2] ≈ 4.4 atol = testTol sim2 = test_convergence(dts, prob, Alshina2()) - @test sim2.𝒪est[:l∞]≈2 atol=testTol + @test sim2.𝒪est[:l∞] ≈ 2 atol = testTol sim3 = test_convergence(dts, prob, Alshina3()) - @test sim3.𝒪est[:l∞]≈3 atol=testTol + @test sim3.𝒪est[:l∞] ≈ 3 atol = testTol sim6 = test_convergence(dts4, prob, Alshina6()) - @test sim6.𝒪est[:l∞]≈6 atol=testTol + @test sim6.𝒪est[:l∞] ≈ 6 atol = testTol sim160 = test_convergence(dts, prob, Anas5(w = 2)) - @test sim160.𝒪est[:l2]≈4 atol=2 * testTol + @test sim160.𝒪est[:l2] ≈ 4 atol = 2 * testTol end diff --git a/lib/OrdinaryDiffEqLowOrderRK/test/owrenzen_tests.jl b/lib/OrdinaryDiffEqLowOrderRK/test/owrenzen_tests.jl index 19c9137693..e1104f1076 100644 --- a/lib/OrdinaryDiffEqLowOrderRK/test/owrenzen_tests.jl +++ b/lib/OrdinaryDiffEqLowOrderRK/test/owrenzen_tests.jl @@ -18,14 +18,14 @@ sol = solve(prob, OwrenZen5()) @test SciMLBase.successful_retcode(sol) sim = test_convergence(dts, prob, OwrenZen3(), dense_errors = true) -@test sim.𝒪est[:final]≈3 atol=testTol -@test sim.𝒪est[:L2]≈3 atol=testTol +@test sim.𝒪est[:final] ≈ 3 atol = testTol +@test sim.𝒪est[:L2] ≈ 3 atol = testTol sim = test_convergence(dts, prob, OwrenZen4(), dense_errors = true) -@test sim.𝒪est[:final]≈4 atol=testTol -@test sim.𝒪est[:L2]≈4 atol=testTol +@test sim.𝒪est[:final] ≈ 4 atol = testTol +@test sim.𝒪est[:L2] ≈ 4 atol = testTol sim = test_convergence(dts, prob, OwrenZen5(), dense_errors = true) -@test sim.𝒪est[:final]≈5 atol=testTol -@test sim.𝒪est[:L2]≈5 atol=testTol +@test sim.𝒪est[:final] ≈ 5 atol = testTol +@test sim.𝒪est[:L2] ≈ 5 atol = testTol prob = prob_ode_2Dlinear sol = solve(prob, OwrenZen3()) @@ -39,11 +39,11 @@ sol = solve(prob, OwrenZen5()) @test SciMLBase.successful_retcode(sol) sim = test_convergence(dts, prob, OwrenZen3(), dense_errors = true) -@test sim.𝒪est[:final]≈3 atol=testTol -@test sim.𝒪est[:L2]≈3 atol=testTol +@test sim.𝒪est[:final] ≈ 3 atol = testTol +@test sim.𝒪est[:L2] ≈ 3 atol = testTol sim = test_convergence(dts, prob, OwrenZen4(), dense_errors = true) -@test sim.𝒪est[:final]≈4 atol=testTol -@test sim.𝒪est[:L2]≈4 atol=testTol +@test sim.𝒪est[:final] ≈ 4 atol = testTol +@test sim.𝒪est[:L2] ≈ 4 atol = testTol sim = test_convergence(dts, prob, OwrenZen5(), dense_errors = true) -@test sim.𝒪est[:final]≈5 atol=testTol -@test sim.𝒪est[:L2]≈5 atol=testTol +@test sim.𝒪est[:final] ≈ 5 atol = testTol +@test sim.𝒪est[:L2] ≈ 5 atol = testTol diff --git a/lib/OrdinaryDiffEqLowOrderRK/test/qa.jl b/lib/OrdinaryDiffEqLowOrderRK/test/qa.jl index bba8bb41bb..d4e8d474cc 100644 --- a/lib/OrdinaryDiffEqLowOrderRK/test/qa.jl +++ b/lib/OrdinaryDiffEqLowOrderRK/test/qa.jl @@ -5,4 +5,4 @@ using Aqua Aqua.test_all( OrdinaryDiffEqLowOrderRK ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqLowOrderRK/test/runtests.jl b/lib/OrdinaryDiffEqLowOrderRK/test/runtests.jl index 98cfca762b..16700d75dc 100644 --- a/lib/OrdinaryDiffEqLowOrderRK/test/runtests.jl +++ b/lib/OrdinaryDiffEqLowOrderRK/test/runtests.jl @@ -9,4 +9,4 @@ if isempty(VERSION.prerelease) @time @safetestset "JET Tests" include("jet.jl") @time @safetestset "Aqua" include("qa.jl") @time @safetestset "Allocation Tests" include("allocation_tests.jl") -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqLowStorageRK/src/OrdinaryDiffEqLowStorageRK.jl b/lib/OrdinaryDiffEqLowStorageRK/src/OrdinaryDiffEqLowStorageRK.jl index 483646209a..5bc3c0cd3e 100644 --- a/lib/OrdinaryDiffEqLowStorageRK/src/OrdinaryDiffEqLowStorageRK.jl +++ b/lib/OrdinaryDiffEqLowStorageRK/src/OrdinaryDiffEqLowStorageRK.jl @@ -1,17 +1,17 @@ module OrdinaryDiffEqLowStorageRK import OrdinaryDiffEqCore: alg_order, alg_adaptive_order, calculate_residuals!, - beta2_default, beta1_default, gamma_default, - initialize!, perform_step!, unwrap_alg, - calculate_residuals, ssp_coefficient, - OrdinaryDiffEqAlgorithm, ispredictive, - OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, - OrdinaryDiffEqAdaptiveAlgorithm, uses_uprev, - default_controller, PIDController, - alg_cache, _vec, _reshape, @cache, isfsal, full_cache, - constvalue, _unwrap_val, - trivial_limiter!, perform_step!, initialize!, - explicit_rk_docstring, get_fsalfirstlast + beta2_default, beta1_default, gamma_default, + initialize!, perform_step!, unwrap_alg, + calculate_residuals, ssp_coefficient, + OrdinaryDiffEqAlgorithm, ispredictive, + OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, + OrdinaryDiffEqAdaptiveAlgorithm, uses_uprev, + default_controller, PIDController, + alg_cache, _vec, _reshape, @cache, isfsal, full_cache, + constvalue, _unwrap_val, + trivial_limiter!, perform_step!, initialize!, + explicit_rk_docstring, get_fsalfirstlast using FastBroadcast, Polyester, MuladdMacro, RecursiveArrayTools, Adapt import StaticArrays: SArray, MVector, SVector, @SVector, StaticArray, MMatrix, SA import Static: False @@ -37,11 +37,11 @@ PrecompileTools.@compile_workload begin prob_list = [] low_storage = [ - RDPK3SpFSAL35(), RDPK3SpFSAL49() + RDPK3SpFSAL35(), RDPK3SpFSAL49(), ] low_storage_nonadaptive = [ - CarpenterKennedy2N54(williamson_condition = false) + CarpenterKennedy2N54(williamson_condition = false), ] if Preferences.@load_preference("PrecompileLowStorage", false) @@ -55,29 +55,51 @@ PrecompileTools.@compile_workload begin end if Preferences.@load_preference("PrecompileAutoSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.AutoSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.AutoSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0), Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.AutoSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0) + ) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.AutoSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0), Float64[] + ) + ) end if Preferences.@load_preference("PrecompileFunctionWrapperSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0), Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0) + ) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0), Float64[] + ) + ) end if Preferences.@load_preference("PrecompileNoSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), - Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0)) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.NoSpecialize}( + lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), + Float64[] + ) + ) end for prob in prob_list, solver in solver_list @@ -93,16 +115,16 @@ PrecompileTools.@compile_workload begin end export ORK256, CarpenterKennedy2N54, SHLDDRK64, HSLDDRK64, DGLDDRK73_C, DGLDDRK84_C, - DGLDDRK84_F, NDBLSRK124, NDBLSRK134, NDBLSRK144, - CFRLDDRK64, TSLDDRK74, CKLLSRK43_2, CKLLSRK54_3C, - CKLLSRK95_4S, CKLLSRK95_4C, CKLLSRK95_4M, - CKLLSRK54_3C_3R, CKLLSRK54_3M_3R, CKLLSRK54_3N_3R, CKLLSRK85_4C_3R, CKLLSRK85_4M_3R, - CKLLSRK85_4P_3R, - CKLLSRK54_3N_4R, CKLLSRK54_3M_4R, CKLLSRK65_4M_4R, CKLLSRK85_4FM_4R, CKLLSRK75_4M_5R, - ParsaniKetchesonDeconinck3S32, ParsaniKetchesonDeconinck3S82, - ParsaniKetchesonDeconinck3S53, ParsaniKetchesonDeconinck3S173, - ParsaniKetchesonDeconinck3S94, ParsaniKetchesonDeconinck3S184, - ParsaniKetchesonDeconinck3S105, ParsaniKetchesonDeconinck3S205, - RDPK3Sp35, RDPK3SpFSAL35, RDPK3Sp49, RDPK3SpFSAL49, RDPK3Sp510, RDPK3SpFSAL510, - RK46NL, SHLDDRK_2N, SHLDDRK52 + DGLDDRK84_F, NDBLSRK124, NDBLSRK134, NDBLSRK144, + CFRLDDRK64, TSLDDRK74, CKLLSRK43_2, CKLLSRK54_3C, + CKLLSRK95_4S, CKLLSRK95_4C, CKLLSRK95_4M, + CKLLSRK54_3C_3R, CKLLSRK54_3M_3R, CKLLSRK54_3N_3R, CKLLSRK85_4C_3R, CKLLSRK85_4M_3R, + CKLLSRK85_4P_3R, + CKLLSRK54_3N_4R, CKLLSRK54_3M_4R, CKLLSRK65_4M_4R, CKLLSRK85_4FM_4R, CKLLSRK75_4M_5R, + ParsaniKetchesonDeconinck3S32, ParsaniKetchesonDeconinck3S82, + ParsaniKetchesonDeconinck3S53, ParsaniKetchesonDeconinck3S173, + ParsaniKetchesonDeconinck3S94, ParsaniKetchesonDeconinck3S184, + ParsaniKetchesonDeconinck3S105, ParsaniKetchesonDeconinck3S205, + RDPK3Sp35, RDPK3SpFSAL35, RDPK3Sp49, RDPK3SpFSAL49, RDPK3Sp510, RDPK3SpFSAL510, + RK46NL, SHLDDRK_2N, SHLDDRK52 end diff --git a/lib/OrdinaryDiffEqLowStorageRK/src/alg_utils.jl b/lib/OrdinaryDiffEqLowStorageRK/src/alg_utils.jl index 1dc1a9e81a..4e88dcd222 100644 --- a/lib/OrdinaryDiffEqLowStorageRK/src/alg_utils.jl +++ b/lib/OrdinaryDiffEqLowStorageRK/src/alg_utils.jl @@ -91,12 +91,12 @@ end function default_controller(alg::RDPK3SpFSAL35, cache, qoldinit, args...) QT = typeof(qoldinit) - return PIDController(map(Base.Fix1(convert, QT), (0.70, -0.23, 0.00))...) + return PIDController(map(Base.Fix1(convert, QT), (0.7, -0.23, 0.0))...) end function default_controller(alg::RDPK3Sp49, cache, qoldinit, args...) QT = typeof(qoldinit) - return PIDController(map(Base.Fix1(convert, QT), (0.25, -0.12, 0.00))...) + return PIDController(map(Base.Fix1(convert, QT), (0.25, -0.12, 0.0))...) end function default_controller(alg::RDPK3SpFSAL49, cache, qoldinit, args...) @@ -106,10 +106,10 @@ end function default_controller(alg::RDPK3Sp510, cache, qoldinit, args...) QT = typeof(qoldinit) - return PIDController(map(Base.Fix1(convert, QT), (0.47, -0.20, 0.06))...) + return PIDController(map(Base.Fix1(convert, QT), (0.47, -0.2, 0.06))...) end function default_controller(alg::RDPK3SpFSAL510, cache, qoldinit, args...) QT = typeof(qoldinit) - return PIDController(map(Base.Fix1(convert, QT), (0.45, -0.13, 0.00))...) + return PIDController(map(Base.Fix1(convert, QT), (0.45, -0.13, 0.0))...) end diff --git a/lib/OrdinaryDiffEqLowStorageRK/src/algorithms.jl b/lib/OrdinaryDiffEqLowStorageRK/src/algorithms.jl index 0fab550bd5..dda860ab34 100644 --- a/lib/OrdinaryDiffEqLowStorageRK/src/algorithms.jl +++ b/lib/OrdinaryDiffEqLowStorageRK/src/algorithms.jl @@ -7,8 +7,9 @@ equations. Fixed timestep only.", "ORK256", Journal of Computational Physics, 228(11), pp 4182-4199, 2009. doi: https://doi.org/10.1016/j.jcp.2009.02.032", extra_keyword_description = """- `williamson_condition`: allows for an optimization that allows fusing broadcast expressions with the function call `f`. However, it only works for `Array` types. - """, - extra_keyword_default = "williamson_condition = true") + """, + extra_keyword_default = "williamson_condition = true" +) Base.@kwdef struct ORK256{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -16,10 +17,12 @@ Base.@kwdef struct ORK256{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAl williamson_condition::Bool = true end # for backwards compatibility -function ORK256(stage_limiter!, +function ORK256( + stage_limiter!, step_limiter! = trivial_limiter!; - williamson_condition = true) - ORK256(stage_limiter!, step_limiter!, False(), williamson_condition) + williamson_condition = true + ) + return ORK256(stage_limiter!, step_limiter!, False(), williamson_condition) end @doc explicit_rk_docstring( @@ -34,8 +37,9 @@ geometric features of computational domain. Fixed timestep only.", Journal of Computational Physics, 231(4), pp 2067-2091, 2012. doi: https://doi.org/10.1016/j.jcp.2011.11.024", extra_keyword_description = """- `williamson_condition`: allows for an optimization that allows fusing broadcast expressions with the function call `f`. However, it only works for `Array` types. - """, - extra_keyword_default = "williamson_condition = true") + """, + extra_keyword_default = "williamson_condition = true" +) Base.@kwdef struct DGLDDRK73_C{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -43,12 +47,16 @@ Base.@kwdef struct DGLDDRK73_C{StageLimiter, StepLimiter, Thread} <: OrdinaryDif williamson_condition::Bool = true end # for backwards compatibility -function DGLDDRK73_C(stage_limiter!, step_limiter! = trivial_limiter!; - williamson_condition = true) - DGLDDRK73_C(stage_limiter!, +function DGLDDRK73_C( + stage_limiter!, step_limiter! = trivial_limiter!; + williamson_condition = true + ) + return DGLDDRK73_C( + stage_limiter!, step_limiter!, False(), - williamson_condition) + williamson_condition + ) end @doc explicit_rk_docstring( @@ -62,20 +70,23 @@ hyperbolic PDEs (stability properties).", year={1994} }", extra_keyword_description = """- `williamson_condition`: allows for an optimization that allows fusing broadcast expressions with the function call `f`. However, it only works for `Array` types. - """, - extra_keyword_default = "williamson_condition = true") + """, + extra_keyword_default = "williamson_condition = true" +) Base.@kwdef struct CarpenterKennedy2N54{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAlgorithm + OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() williamson_condition::Bool = true end # for backwards compatibility -function CarpenterKennedy2N54(stage_limiter!, +function CarpenterKennedy2N54( + stage_limiter!, step_limiter! = trivial_limiter!; - williamson_condition = true) - CarpenterKennedy2N54(stage_limiter!, step_limiter!, False(), williamson_condition) + williamson_condition = true + ) + return CarpenterKennedy2N54(stage_limiter!, step_limiter!, False(), williamson_condition) end @doc explicit_rk_docstring( @@ -87,8 +98,9 @@ advection-dominated problems. Fixed timestep only.", Journal of Computational Physics, 231, pp 364-372, 2012. doi: https://doi.org/10.1016/j.jcp.2011.09.003", extra_keyword_description = """- `williamson_condition`: allows for an optimization that allows fusing broadcast expressions with the function call `f`. However, it only works for `Array` types. - """, - extra_keyword_default = "williamson_condition = true") + """, + extra_keyword_default = "williamson_condition = true" +) Base.@kwdef struct NDBLSRK124{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -96,11 +108,15 @@ Base.@kwdef struct NDBLSRK124{StageLimiter, StepLimiter, Thread} <: OrdinaryDiff williamson_condition::Bool = true end # for backwards compatibility -function NDBLSRK124(stage_limiter!, step_limiter! = trivial_limiter!; - williamson_condition = true) - NDBLSRK124(stage_limiter!, +function NDBLSRK124( + stage_limiter!, step_limiter! = trivial_limiter!; + williamson_condition = true + ) + return NDBLSRK124( + stage_limiter!, step_limiter!, False(), - williamson_condition) + williamson_condition + ) end @doc explicit_rk_docstring( @@ -112,8 +128,9 @@ advection-dominated problems. Fixed timestep only.", Journal of Computational Physics, 231, pp 364-372, 2012. doi: https://doi.org/10.1016/j.jcp.2011.09.003", extra_keyword_description = """- `williamson_condition`: allows for an optimization that allows fusing broadcast expressions with the function call `f`. However, it only works for `Array` types. - """, - extra_keyword_default = "williamson_condition = true") + """, + extra_keyword_default = "williamson_condition = true" +) Base.@kwdef struct NDBLSRK144{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -121,19 +138,25 @@ Base.@kwdef struct NDBLSRK144{StageLimiter, StepLimiter, Thread} <: OrdinaryDiff williamson_condition::Bool = true end # for backwards compatibility -function NDBLSRK144(stage_limiter!, step_limiter! = trivial_limiter!; - williamson_condition = true) - NDBLSRK144{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, +function NDBLSRK144( + stage_limiter!, step_limiter! = trivial_limiter!; + williamson_condition = true + ) + return NDBLSRK144{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, step_limiter!, False(), - williamson_condition) + williamson_condition + ) end -@doc explicit_rk_docstring("Low-Storage Method +@doc explicit_rk_docstring( + "Low-Storage Method 6-stage, fourth order low-storage, low-dissipation, low-dispersion scheme. Fixed timestep only.", "CFRLDDRK64", references = "M. Calvo, J. M. Franco, L. Randez. A New Minimum Storage Runge–Kutta Scheme for Computational Acoustics. Journal of Computational Physics, 201, pp 1-12, 2004. - doi: https://doi.org/10.1016/j.jcp.2004.05.012") + doi: https://doi.org/10.1016/j.jcp.2004.05.012" +) Base.@kwdef struct CFRLDDRK64{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -141,9 +164,11 @@ Base.@kwdef struct CFRLDDRK64{StageLimiter, StepLimiter, Thread} <: OrdinaryDiff end # for backwards compatibility function CFRLDDRK64(stage_limiter!, step_limiter! = trivial_limiter!) - CFRLDDRK64(stage_limiter!, + return CFRLDDRK64( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -153,7 +178,8 @@ Fixed timestep only.", "TSLDDRK74", references = "Kostas Tselios, T. E. Simos. Optimized Runge–Kutta Methods with Minimal Dispersion and Dissipation for Problems arising from Computational Acoustics. Physics Letters A, 393(1-2), pp 38-47, 2007. - doi: https://doi.org/10.1016/j.physleta.2006.10.072") + doi: https://doi.org/10.1016/j.physleta.2006.10.072" +) Base.@kwdef struct TSLDDRK74{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -161,9 +187,11 @@ Base.@kwdef struct TSLDDRK74{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffE end # for backwards compatibility function TSLDDRK74(stage_limiter!, step_limiter! = trivial_limiter!) - TSLDDRK74(stage_limiter!, + return TSLDDRK74( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -178,8 +206,9 @@ geometric features of computational domain. Fixed timestep only.", Journal of Computational Physics, 231(4), pp 2067-2091, 2012. doi: https://doi.org/10.1016/j.jcp.2011.11.024", extra_keyword_description = """- `williamson_condition`: allows for an optimization that allows fusing broadcast expressions with the function call `f`. However, it only works for `Array` types. - """, - extra_keyword_default = "williamson_condition = true") + """, + extra_keyword_default = "williamson_condition = true" +) Base.@kwdef struct DGLDDRK84_C{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -187,12 +216,16 @@ Base.@kwdef struct DGLDDRK84_C{StageLimiter, StepLimiter, Thread} <: OrdinaryDif williamson_condition::Bool = true end # for backwards compatibility -function DGLDDRK84_C(stage_limiter!, step_limiter! = trivial_limiter!; - williamson_condition = true) - DGLDDRK84_C(stage_limiter!, +function DGLDDRK84_C( + stage_limiter!, step_limiter! = trivial_limiter!; + williamson_condition = true + ) + return DGLDDRK84_C( + stage_limiter!, step_limiter!, False(), - williamson_condition) + williamson_condition + ) end @doc explicit_rk_docstring( @@ -207,8 +240,9 @@ constrained. Fixed timestep only.", Journal of Computational Physics, 231(4), pp 2067-2091, 2012. doi: https://doi.org/10.1016/j.jcp.2011.11.024", extra_keyword_description = """- `williamson_condition`: allows for an optimization that allows fusing broadcast expressions with the function call `f`. However, it only works for `Array` types. - """, - extra_keyword_default = "williamson_condition = true") + """, + extra_keyword_default = "williamson_condition = true" +) Base.@kwdef struct DGLDDRK84_F{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -216,12 +250,16 @@ Base.@kwdef struct DGLDDRK84_F{StageLimiter, StepLimiter, Thread} <: OrdinaryDif williamson_condition::Bool = true end # for backwards compatibility -function DGLDDRK84_F(stage_limiter!, step_limiter! = trivial_limiter!; - williamson_condition = true) - DGLDDRK84_F(stage_limiter!, +function DGLDDRK84_F( + stage_limiter!, step_limiter! = trivial_limiter!; + williamson_condition = true + ) + return DGLDDRK84_F( + stage_limiter!, step_limiter!, False(), - williamson_condition) + williamson_condition + ) end @doc explicit_rk_docstring( @@ -234,8 +272,9 @@ end doi: https://doi.org/10.1006/jcph.1998.5986 }", extra_keyword_description = """- `williamson_condition`: allows for an optimization that allows fusing broadcast expressions with the function call `f`. However, it only works for `Array` types. - """, - extra_keyword_default = "williamson_condition = true") + """, + extra_keyword_default = "williamson_condition = true" +) Base.@kwdef struct SHLDDRK64{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -243,16 +282,19 @@ Base.@kwdef struct SHLDDRK64{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffE williamson_condition::Bool = true end # for backwards compatibility -function SHLDDRK64(stage_limiter!, +function SHLDDRK64( + stage_limiter!, step_limiter! = trivial_limiter!; - williamson_condition = true) - SHLDDRK64(stage_limiter!, step_limiter!, False(), williamson_condition) + williamson_condition = true + ) + return SHLDDRK64(stage_limiter!, step_limiter!, False(), williamson_condition) end @doc explicit_rk_docstring( "6-stage, fourth order low-stage, low-dissipation, low-dispersion scheme. Fixed timestep only.", "RK46NL", - references = "Julien Berland, Christophe Bogey, Christophe Bailly. Low-Dissipation and Low-Dispersion Fourth-Order Runge-Kutta Algorithm. Computers & Fluids, 35(10), pp 1459-1463, 2006. doi: https://doi.org/10.1016/j.compfluid.2005.04.003") + references = "Julien Berland, Christophe Bogey, Christophe Bailly. Low-Dissipation and Low-Dispersion Fourth-Order Runge-Kutta Algorithm. Computers & Fluids, 35(10), pp 1459-1463, 2006. doi: https://doi.org/10.1016/j.compfluid.2005.04.003" +) Base.@kwdef struct RK46NL{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -260,7 +302,7 @@ Base.@kwdef struct RK46NL{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAl end # for backwards compatibility function RK46NL(stage_limiter!, step_limiter! = trivial_limiter!) - RK46NL(stage_limiter!, step_limiter!, False()) + return RK46NL(stage_limiter!, step_limiter!, False()) end @doc explicit_rk_docstring( @@ -270,19 +312,21 @@ end references = "Parsani, Matteo, David I. Ketcheson, and W. Deconinck. Optimized explicit Runge--Kutta schemes for the spectral difference method applied to wave propagation problems. SIAM Journal on Scientific Computing 35.2 (2013): A957-A986. - doi: https://doi.org/10.1137/120885899") + doi: https://doi.org/10.1137/120885899" +) Base.@kwdef struct ParsaniKetchesonDeconinck3S32{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAlgorithm + OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function ParsaniKetchesonDeconinck3S32(stage_limiter!, step_limiter! = trivial_limiter!) - ParsaniKetchesonDeconinck3S32{typeof(stage_limiter!), typeof(step_limiter!), False}( + return ParsaniKetchesonDeconinck3S32{typeof(stage_limiter!), typeof(step_limiter!), False}( stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -292,19 +336,21 @@ end references = "Parsani, Matteo, David I. Ketcheson, and W. Deconinck. Optimized explicit Runge--Kutta schemes for the spectral difference method applied to wave propagation problems. SIAM Journal on Scientific Computing 35.2 (2013): A957-A986. - doi: https://doi.org/10.1137/120885899") + doi: https://doi.org/10.1137/120885899" +) Base.@kwdef struct ParsaniKetchesonDeconinck3S82{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAlgorithm + OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function ParsaniKetchesonDeconinck3S82(stage_limiter!, step_limiter! = trivial_limiter!) - ParsaniKetchesonDeconinck3S82{typeof(stage_limiter!), typeof(step_limiter!), False}( + return ParsaniKetchesonDeconinck3S82{typeof(stage_limiter!), typeof(step_limiter!), False}( stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -314,19 +360,21 @@ end references = "Parsani, Matteo, David I. Ketcheson, and W. Deconinck. Optimized explicit Runge--Kutta schemes for the spectral difference method applied to wave propagation problems. SIAM Journal on Scientific Computing 35.2 (2013): A957-A986. - doi: https://doi.org/10.1137/120885899") + doi: https://doi.org/10.1137/120885899" +) Base.@kwdef struct ParsaniKetchesonDeconinck3S53{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAlgorithm + OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function ParsaniKetchesonDeconinck3S53(stage_limiter!, step_limiter! = trivial_limiter!) - ParsaniKetchesonDeconinck3S53{typeof(stage_limiter!), typeof(step_limiter!), False}( + return ParsaniKetchesonDeconinck3S53{typeof(stage_limiter!), typeof(step_limiter!), False}( stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -336,19 +384,21 @@ end references = "Parsani, Matteo, David I. Ketcheson, and W. Deconinck. Optimized explicit Runge--Kutta schemes for the spectral difference method applied to wave propagation problems. SIAM Journal on Scientific Computing 35.2 (2013): A957-A986. - doi: https://doi.org/10.1137/120885899") + doi: https://doi.org/10.1137/120885899" +) Base.@kwdef struct ParsaniKetchesonDeconinck3S173{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAlgorithm + OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function ParsaniKetchesonDeconinck3S173(stage_limiter!, step_limiter! = trivial_limiter!) - ParsaniKetchesonDeconinck3S173{typeof(stage_limiter!), typeof(step_limiter!), False}( + return ParsaniKetchesonDeconinck3S173{typeof(stage_limiter!), typeof(step_limiter!), False}( stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -358,19 +408,21 @@ end references = "Parsani, Matteo, David I. Ketcheson, and W. Deconinck. Optimized explicit Runge--Kutta schemes for the spectral difference method applied to wave propagation problems. SIAM Journal on Scientific Computing 35.2 (2013): A957-A986. - doi: https://doi.org/10.1137/120885899") + doi: https://doi.org/10.1137/120885899" +) Base.@kwdef struct ParsaniKetchesonDeconinck3S94{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAlgorithm + OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function ParsaniKetchesonDeconinck3S94(stage_limiter!, step_limiter! = trivial_limiter!) - ParsaniKetchesonDeconinck3S94{typeof(stage_limiter!), typeof(step_limiter!), False}( + return ParsaniKetchesonDeconinck3S94{typeof(stage_limiter!), typeof(step_limiter!), False}( stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -380,19 +432,21 @@ end references = "Parsani, Matteo, David I. Ketcheson, and W. Deconinck. Optimized explicit Runge--Kutta schemes for the spectral difference method applied to wave propagation problems. SIAM Journal on Scientific Computing 35.2 (2013): A957-A986. - doi: https://doi.org/10.1137/120885899") + doi: https://doi.org/10.1137/120885899" +) Base.@kwdef struct ParsaniKetchesonDeconinck3S184{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAlgorithm + OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function ParsaniKetchesonDeconinck3S184(stage_limiter!, step_limiter! = trivial_limiter!) - ParsaniKetchesonDeconinck3S184{typeof(stage_limiter!), typeof(step_limiter!), False}( + return ParsaniKetchesonDeconinck3S184{typeof(stage_limiter!), typeof(step_limiter!), False}( stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -402,19 +456,21 @@ end references = "Parsani, Matteo, David I. Ketcheson, and W. Deconinck. Optimized explicit Runge--Kutta schemes for the spectral difference method applied to wave propagation problems. SIAM Journal on Scientific Computing 35.2 (2013): A957-A986. - doi: https://doi.org/10.1137/120885899") + doi: https://doi.org/10.1137/120885899" +) Base.@kwdef struct ParsaniKetchesonDeconinck3S105{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAlgorithm + OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function ParsaniKetchesonDeconinck3S105(stage_limiter!, step_limiter! = trivial_limiter!) - ParsaniKetchesonDeconinck3S105{typeof(stage_limiter!), typeof(step_limiter!), False}( + return ParsaniKetchesonDeconinck3S105{typeof(stage_limiter!), typeof(step_limiter!), False}( stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -424,19 +480,21 @@ end references = "Parsani, Matteo, David I. Ketcheson, and W. Deconinck. Optimized explicit Runge--Kutta schemes for the spectral difference method applied to wave propagation problems. SIAM Journal on Scientific Computing 35.2 (2013): A957-A986. - doi: https://doi.org/10.1137/120885899") + doi: https://doi.org/10.1137/120885899" +) Base.@kwdef struct ParsaniKetchesonDeconinck3S205{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAlgorithm + OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function ParsaniKetchesonDeconinck3S205(stage_limiter!, step_limiter! = trivial_limiter!) - ParsaniKetchesonDeconinck3S205{typeof(stage_limiter!), typeof(step_limiter!), False}( + return ParsaniKetchesonDeconinck3S205{typeof(stage_limiter!), typeof(step_limiter!), False}( stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -444,25 +502,28 @@ end 4-stage, third order low-storage scheme, optimized for compressible Navier–Stokes equations. ", "CKLLSRK43_2", references = """@article{kennedy2000low, - title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, - author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, - journal={Applied numerical mathematics}, - volume={35}, - number={3}, - pages={177--219}, - year={2000}, - publisher={Elsevier}}""") + title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, + author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, + journal={Applied numerical mathematics}, + volume={35}, + number={3}, + pages={177--219}, + year={2000}, + publisher={Elsevier}}""" +) Base.@kwdef struct CKLLSRK43_2{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function CKLLSRK43_2(stage_limiter!, step_limiter! = trivial_limiter!) - CKLLSRK43_2{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, + return CKLLSRK43_2{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -470,25 +531,28 @@ end 5-stage, fourth order low-storage scheme, optimized for compressible Navier–Stokes equations. ", "CKLLSRK54_3C", references = """@article{kennedy2000low, - title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, - author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, - journal={Applied numerical mathematics}, - volume={35}, - number={3}, - pages={177--219}, - year={2000}, - publisher={Elsevier}}""") + title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, + author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, + journal={Applied numerical mathematics}, + volume={35}, + number={3}, + pages={177--219}, + year={2000}, + publisher={Elsevier}}""" +) Base.@kwdef struct CKLLSRK54_3C{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function CKLLSRK54_3C(stage_limiter!, step_limiter! = trivial_limiter!) - CKLLSRK54_3C{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, + return CKLLSRK54_3C{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -496,25 +560,28 @@ end 9-stage, fifth order low-storage scheme, optimized for compressible Navier–Stokes equations. ", "CKLLSRK95_4S", references = """@article{kennedy2000low, - title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, - author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, - journal={Applied numerical mathematics}, - volume={35}, - number={3}, - pages={177--219}, - year={2000}, - publisher={Elsevier}}""") + title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, + author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, + journal={Applied numerical mathematics}, + volume={35}, + number={3}, + pages={177--219}, + year={2000}, + publisher={Elsevier}}""" +) Base.@kwdef struct CKLLSRK95_4S{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function CKLLSRK95_4S(stage_limiter!, step_limiter! = trivial_limiter!) - CKLLSRK95_4S{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, + return CKLLSRK95_4S{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -522,25 +589,28 @@ end 9-stage, fifth order low-storage scheme, optimized for compressible Navier–Stokes equations. ", "CKLLSRK95_4C", references = """@article{kennedy2000low, - title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, - author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, - journal={Applied numerical mathematics}, - volume={35}, - number={3}, - pages={177--219}, - year={2000}, - publisher={Elsevier}}""") + title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, + author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, + journal={Applied numerical mathematics}, + volume={35}, + number={3}, + pages={177--219}, + year={2000}, + publisher={Elsevier}}""" +) Base.@kwdef struct CKLLSRK95_4C{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function CKLLSRK95_4C(stage_limiter!, step_limiter! = trivial_limiter!) - CKLLSRK95_4C{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, + return CKLLSRK95_4C{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -548,25 +618,28 @@ end 9-stage, fifth order low-storage scheme, optimized for compressible Navier–Stokes equations. ", "CKLLSRK95_4M", references = """@article{kennedy2000low, - title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, - author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, - journal={Applied numerical mathematics}, - volume={35}, - number={3}, - pages={177--219}, - year={2000}, - publisher={Elsevier}}""") + title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, + author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, + journal={Applied numerical mathematics}, + volume={35}, + number={3}, + pages={177--219}, + year={2000}, + publisher={Elsevier}}""" +) Base.@kwdef struct CKLLSRK95_4M{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function CKLLSRK95_4M(stage_limiter!, step_limiter! = trivial_limiter!) - CKLLSRK95_4M{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, + return CKLLSRK95_4M{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -574,25 +647,28 @@ end 5-stage, fourth order low-storage scheme, optimized for compressible Navier–Stokes equations. ", "CKLLSRK54_3C_3R", references = """@article{kennedy2000low, - title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, - author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, - journal={Applied numerical mathematics}, - volume={35}, - number={3}, - pages={177--219}, - year={2000}, - publisher={Elsevier}}""") + title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, + author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, + journal={Applied numerical mathematics}, + volume={35}, + number={3}, + pages={177--219}, + year={2000}, + publisher={Elsevier}}""" +) Base.@kwdef struct CKLLSRK54_3C_3R{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function CKLLSRK54_3C_3R(stage_limiter!, step_limiter! = trivial_limiter!) - CKLLSRK54_3C_3R{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, + return CKLLSRK54_3C_3R{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -600,25 +676,28 @@ end 5-stage, fourth order low-storage scheme, optimized for compressible Navier–Stokes equations. ", "CKLLSRK54_3M_3R", references = """@article{kennedy2000low, - title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, - author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, - journal={Applied numerical mathematics}, - volume={35}, - number={3}, - pages={177--219}, - year={2000}, - publisher={Elsevier}}""") + title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, + author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, + journal={Applied numerical mathematics}, + volume={35}, + number={3}, + pages={177--219}, + year={2000}, + publisher={Elsevier}}""" +) Base.@kwdef struct CKLLSRK54_3M_3R{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function CKLLSRK54_3M_3R(stage_limiter!, step_limiter! = trivial_limiter!) - CKLLSRK54_3M_3R{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, + return CKLLSRK54_3M_3R{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -626,25 +705,28 @@ end 5-stage, fourth order low-storage scheme, optimized for compressible Navier–Stokes equations. ", "CKLLSRK54_3N_3R", references = """@article{kennedy2000low, - title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, - author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, - journal={Applied numerical mathematics}, - volume={35}, - number={3}, - pages={177--219}, - year={2000}, - publisher={Elsevier}}""") + title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, + author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, + journal={Applied numerical mathematics}, + volume={35}, + number={3}, + pages={177--219}, + year={2000}, + publisher={Elsevier}}""" +) Base.@kwdef struct CKLLSRK54_3N_3R{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function CKLLSRK54_3N_3R(stage_limiter!, step_limiter! = trivial_limiter!) - CKLLSRK54_3N_3R{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, + return CKLLSRK54_3N_3R{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -652,25 +734,28 @@ end 8-stage, fifth order low-storage scheme, optimized for compressible Navier–Stokes equations. ", "CKLLSRK85_4C_3R", references = """@article{kennedy2000low, - title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, - author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, - journal={Applied numerical mathematics}, - volume={35}, - number={3}, - pages={177--219}, - year={2000}, - publisher={Elsevier}}""") + title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, + author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, + journal={Applied numerical mathematics}, + volume={35}, + number={3}, + pages={177--219}, + year={2000}, + publisher={Elsevier}}""" +) Base.@kwdef struct CKLLSRK85_4C_3R{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function CKLLSRK85_4C_3R(stage_limiter!, step_limiter! = trivial_limiter!) - CKLLSRK85_4C_3R{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, + return CKLLSRK85_4C_3R{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -678,25 +763,28 @@ end 8-stage, fifth order low-storage scheme, optimized for compressible Navier–Stokes equations. ", "CKLLSRK85_4M_3R", references = """@article{kennedy2000low, - title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, - author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, - journal={Applied numerical mathematics}, - volume={35}, - number={3}, - pages={177--219}, - year={2000}, - publisher={Elsevier}}""") + title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, + author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, + journal={Applied numerical mathematics}, + volume={35}, + number={3}, + pages={177--219}, + year={2000}, + publisher={Elsevier}}""" +) Base.@kwdef struct CKLLSRK85_4M_3R{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function CKLLSRK85_4M_3R(stage_limiter!, step_limiter! = trivial_limiter!) - CKLLSRK85_4M_3R{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, + return CKLLSRK85_4M_3R{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -704,25 +792,28 @@ end 8-stage, fifth order low-storage scheme, optimized for compressible Navier–Stokes equations. ", "CKLLSRK85_4P_3R", references = """@article{kennedy2000low, - title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, - author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, - journal={Applied numerical mathematics}, - volume={35}, - number={3}, - pages={177--219}, - year={2000}, - publisher={Elsevier}}""") + title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, + author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, + journal={Applied numerical mathematics}, + volume={35}, + number={3}, + pages={177--219}, + year={2000}, + publisher={Elsevier}}""" +) Base.@kwdef struct CKLLSRK85_4P_3R{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function CKLLSRK85_4P_3R(stage_limiter!, step_limiter! = trivial_limiter!) - CKLLSRK85_4P_3R{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, + return CKLLSRK85_4P_3R{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -730,25 +821,28 @@ end 5-stage, fourth order low-storage scheme, optimized for compressible Navier–Stokes equations. ", "CKLLSRK54_3N_4R", references = """@article{kennedy2000low, - title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, - author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, - journal={Applied numerical mathematics}, - volume={35}, - number={3}, - pages={177--219}, - year={2000}, - publisher={Elsevier}}""") + title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, + author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, + journal={Applied numerical mathematics}, + volume={35}, + number={3}, + pages={177--219}, + year={2000}, + publisher={Elsevier}}""" +) Base.@kwdef struct CKLLSRK54_3N_4R{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function CKLLSRK54_3N_4R(stage_limiter!, step_limiter! = trivial_limiter!) - CKLLSRK54_3N_4R{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, + return CKLLSRK54_3N_4R{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -756,50 +850,56 @@ end 5-stage, fourth order low-storage scheme, optimized for compressible Navier–Stokes equations. ", "CKLLSRK54_3M_4R", references = """@article{kennedy2000low, - title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, - author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, - journal={Applied numerical mathematics}, - volume={35}, - number={3}, - pages={177--219}, - year={2000}, - publisher={Elsevier}}""") + title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, + author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, + journal={Applied numerical mathematics}, + volume={35}, + number={3}, + pages={177--219}, + year={2000}, + publisher={Elsevier}}""" +) Base.@kwdef struct CKLLSRK54_3M_4R{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function CKLLSRK54_3M_4R(stage_limiter!, step_limiter! = trivial_limiter!) - CKLLSRK54_3M_4R{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, + return CKLLSRK54_3M_4R{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( "6-stage, fifth order low-storage scheme, optimized for compressible Navier–Stokes equations.", "CKLLSRK65_4M_4R", references = """@article{kennedy2000low, - title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, - author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, - journal={Applied numerical mathematics}, - volume={35}, - number={3}, - pages={177--219}, - year={2000}, - publisher={Elsevier}}""") + title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, + author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, + journal={Applied numerical mathematics}, + volume={35}, + number={3}, + pages={177--219}, + year={2000}, + publisher={Elsevier}}""" +) Base.@kwdef struct CKLLSRK65_4M_4R{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function CKLLSRK65_4M_4R(stage_limiter!, step_limiter! = trivial_limiter!) - CKLLSRK65_4M_4R(stage_limiter!, + return CKLLSRK65_4M_4R( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -807,25 +907,28 @@ end 8-stage, fifth order low-storage scheme, optimized for compressible Navier–Stokes equations.", "CKLLSRK85_4FM_4R", references = """@article{kennedy2000low, - title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, - author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, - journal={Applied numerical mathematics}, - volume={35}, - number={3}, - pages={177--219}, - year={2000}, - publisher={Elsevier}}""") + title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, + author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, + journal={Applied numerical mathematics}, + volume={35}, + number={3}, + pages={177--219}, + year={2000}, + publisher={Elsevier}}""" +) Base.@kwdef struct CKLLSRK85_4FM_4R{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function CKLLSRK85_4FM_4R(stage_limiter!, step_limiter! = trivial_limiter!) - CKLLSRK85_4FM_4R(stage_limiter!, + return CKLLSRK85_4FM_4R( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -833,25 +936,28 @@ end 7-stage, fifth order low-storage scheme, optimized for compressible Navier–Stokes equations.", "CKLLSRK75_4M_5R", references = """@article{kennedy2000low, - title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, - author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, - journal={Applied numerical mathematics}, - volume={35}, - number={3}, - pages={177--219}, - year={2000}, - publisher={Elsevier}}""") + title={Low-storage, explicit Runge--Kutta schemes for the compressible Navier--Stokes equations}, + author={Kennedy, Christopher A and Carpenter, Mark H and Lewis, R Michael}, + journal={Applied numerical mathematics}, + volume={35}, + number={3}, + pages={177--219}, + year={2000}, + publisher={Elsevier}}""" +) Base.@kwdef struct CKLLSRK75_4M_5R{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function CKLLSRK75_4M_5R(stage_limiter!, step_limiter! = trivial_limiter!) - CKLLSRK75_4M_5R{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, + return CKLLSRK75_4M_5R{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -861,17 +967,20 @@ designed for spectral element discretizations of compressible fluid mechanics.", references = "Ranocha, Dalcin, Parsani, Ketcheson (2021) Optimized Runge-Kutta Methods with Automatic Step Size Control for Compressible Computational Fluid Dynamics - [arXiv:2104.06836](https://arxiv.org/abs/2104.06836)") + [arXiv:2104.06836](https://arxiv.org/abs/2104.06836)" +) Base.@kwdef struct RDPK3Sp35{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function RDPK3Sp35(stage_limiter!, step_limiter! = trivial_limiter!) - RDPK3Sp35{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, - step_limiter!, False()) + return RDPK3Sp35{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, + step_limiter!, False() + ) end @doc explicit_rk_docstring( @@ -882,18 +991,21 @@ compressible fluid mechanics.", references = "Ranocha, Dalcin, Parsani, Ketcheson (2021) Optimized Runge-Kutta Methods with Automatic Step Size Control for Compressible Computational Fluid Dynamics - [arXiv:2104.06836](https://arxiv.org/abs/2104.06836)") + [arXiv:2104.06836](https://arxiv.org/abs/2104.06836)" +) Base.@kwdef struct RDPK3SpFSAL35{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function RDPK3SpFSAL35(stage_limiter!, step_limiter! = trivial_limiter!) - RDPK3SpFSAL35{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, + return RDPK3SpFSAL35{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -903,17 +1015,20 @@ designed for spectral element discretizations of compressible fluid mechanics.", references = "Ranocha, Dalcin, Parsani, Ketcheson (2021) Optimized Runge-Kutta Methods with Automatic Step Size Control for Compressible Computational Fluid Dynamics - [arXiv:2104.06836](https://arxiv.org/abs/2104.06836)") + [arXiv:2104.06836](https://arxiv.org/abs/2104.06836)" +) Base.@kwdef struct RDPK3Sp49{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function RDPK3Sp49(stage_limiter!, step_limiter! = trivial_limiter!) - RDPK3Sp49{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, - step_limiter!, False()) + return RDPK3Sp49{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, + step_limiter!, False() + ) end @doc explicit_rk_docstring( @@ -924,18 +1039,21 @@ compressible fluid mechanics.", references = "Ranocha, Dalcin, Parsani, Ketcheson (2021) Optimized Runge-Kutta Methods with Automatic Step Size Control for Compressible Computational Fluid Dynamics - [arXiv:2104.06836](https://arxiv.org/abs/2104.06836)") + [arXiv:2104.06836](https://arxiv.org/abs/2104.06836)" +) Base.@kwdef struct RDPK3SpFSAL49{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function RDPK3SpFSAL49(stage_limiter!, step_limiter! = trivial_limiter!) - RDPK3SpFSAL49{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, + return RDPK3SpFSAL49{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -945,17 +1063,20 @@ designed for spectral element discretizations of compressible fluid mechanics.", references = "Ranocha, Dalcin, Parsani, Ketcheson (2021) Optimized Runge-Kutta Methods with Automatic Step Size Control for Compressible Computational Fluid Dynamics - [arXiv:2104.06836](https://arxiv.org/abs/2104.06836)") + [arXiv:2104.06836](https://arxiv.org/abs/2104.06836)" +) Base.@kwdef struct RDPK3Sp510{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function RDPK3Sp510(stage_limiter!, step_limiter! = trivial_limiter!) - RDPK3Sp510{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, - step_limiter!, False()) + return RDPK3Sp510{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, + step_limiter!, False() + ) end @doc explicit_rk_docstring( @@ -966,23 +1087,27 @@ compressible fluid mechanics.", references = "Ranocha, Dalcin, Parsani, Ketcheson (2021) Optimized Runge-Kutta Methods with Automatic Step Size Control for Compressible Computational Fluid Dynamics - [arXiv:2104.06836](https://arxiv.org/abs/2104.06836)") + [arXiv:2104.06836](https://arxiv.org/abs/2104.06836)" +) Base.@kwdef struct RDPK3SpFSAL510{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function RDPK3SpFSAL510(stage_limiter!, step_limiter! = trivial_limiter!) - RDPK3SpFSAL510{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, + return RDPK3SpFSAL510{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, step_limiter!, - False()) + False() + ) end #Low Storage Explicit Runge-Kutta Methods -@doc explicit_rk_docstring("Low-Storage Method +@doc explicit_rk_docstring( + "Low-Storage Method 6-stage, fourth order low-stage, low-dissipation, low-dispersion scheme. Fixed timestep only.", "HSLDDRK64", references = "D. Stanescu, W. G. Habashi. @@ -992,17 +1117,20 @@ Fixed timestep only.", "HSLDDRK64", doi: https://doi.org/10.1006/jcph.1998.5986 }", extra_keyword_description = """- `williamson_condition`: allows for an optimization that allows fusing broadcast expressions with the function call `f`. However, it only works for `Array` types. - """, - extra_keyword_default = "williamson_condition = true") + """, + extra_keyword_default = "williamson_condition = true" +) struct HSLDDRK64{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter step_limiter!::StepLimiter thread::Thread williamson_condition::Bool - function HSLDDRK64(stage_limiter! = trivial_limiter!, step_limiter! = trivial_limiter!; - williamson_condition = true, thread = False()) + function HSLDDRK64( + stage_limiter! = trivial_limiter!, step_limiter! = trivial_limiter!; + williamson_condition = true, thread = False() + ) Base.depwarn("HSLDDRK64 is deprecated, use SHLDDRK64 instead.", :HSLDDRK64) - SHLDDRK64(; stage_limiter!, step_limiter!, thread, williamson_condition) + return SHLDDRK64(; stage_limiter!, step_limiter!, thread, williamson_condition) end end @@ -1015,8 +1143,9 @@ advection-dominated problems. Fixed timestep only.", Journal of Computational Physics, 231, pp 364-372, 2012. doi: https://doi.org/10.1016/j.jcp.2011.09.003", extra_keyword_description = """- `williamson_condition`: allows for an optimization that allows fusing broadcast expressions with the function call `f`. However, it only works for `Array` types. - """, - extra_keyword_default = "williamson_condition = true") + """, + extra_keyword_default = "williamson_condition = true" +) Base.@kwdef struct NDBLSRK134{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -1024,11 +1153,15 @@ Base.@kwdef struct NDBLSRK134{StageLimiter, StepLimiter, Thread} <: OrdinaryDiff williamson_condition::Bool = true end # for backwards compatibility -function NDBLSRK134(stage_limiter!, step_limiter! = trivial_limiter!; - williamson_condition = true) - NDBLSRK134(stage_limiter!, +function NDBLSRK134( + stage_limiter!, step_limiter! = trivial_limiter!; + williamson_condition = true + ) + return NDBLSRK134( + stage_limiter!, step_limiter!, False(), - williamson_condition) + williamson_condition + ) end @doc explicit_rk_docstring( @@ -1042,7 +1175,8 @@ end number={2}, pages={674--681}, year={1998}, - publisher={Elsevier}}") + publisher={Elsevier}}" +) Base.@kwdef struct SHLDDRK_2N{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -1050,9 +1184,11 @@ Base.@kwdef struct SHLDDRK_2N{StageLimiter, StepLimiter, Thread} <: OrdinaryDiff end # for backwards compatibility function SHLDDRK_2N(stage_limiter!, step_limiter! = trivial_limiter!) - SHLDDRK_2N(stage_limiter!, + return SHLDDRK_2N( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -1066,7 +1202,8 @@ end number={2}, pages={674--681}, year={1998}, - publisher={Elsevier}}") + publisher={Elsevier}}" +) Base.@kwdef struct SHLDDRK52{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -1074,7 +1211,9 @@ Base.@kwdef struct SHLDDRK52{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffE end # for backwards compatibility function SHLDDRK52(stage_limiter!, step_limiter! = trivial_limiter!) - SHLDDRK52(stage_limiter!, + return SHLDDRK52( + stage_limiter!, step_limiter!, - False()) + False() + ) end diff --git a/lib/OrdinaryDiffEqLowStorageRK/src/arrayfuse.jl b/lib/OrdinaryDiffEqLowStorageRK/src/arrayfuse.jl index ecf7633565..7a402a559c 100644 --- a/lib/OrdinaryDiffEqLowStorageRK/src/arrayfuse.jl +++ b/lib/OrdinaryDiffEqLowStorageRK/src/arrayfuse.jl @@ -20,16 +20,16 @@ end Base.ndims(::Type{<:ArrayFuse{AT}}) where {AT} = ndims(AT) function ArrayFuse(visible::AT, hidden::AT, p) where {AT} - ArrayFuse{AT, eltype(visible), typeof(p)}(visible, hidden, p) + return ArrayFuse{AT, eltype(visible), typeof(p)}(visible, hidden, p) end @inline function Base.copyto!(af::ArrayFuse, src::Broadcast.Broadcasted) @. af.visible = af.p[1] * af.visible + af.p[2] * src - @. af.hidden = af.hidden + af.p[3] * af.visible + return @. af.hidden = af.hidden + af.p[3] * af.visible end @inline function Base.materialize!(af::ArrayFuse, src::Broadcast.Broadcasted) - copyto!(af, src) + return copyto!(af, src) end # not recommended but good to have @@ -39,12 +39,12 @@ end @inline function Base.setindex!(af::ArrayFuse, value, index::Int) af.visible[index] = af.p[1] * af.visible[index] + af.p[2] * value - af.hidden[index] = muladd(af.p[3], af.visible[index], af.hidden[index]) + return af.hidden[index] = muladd(af.p[3], af.visible[index], af.hidden[index]) end @inline Base.size(af::ArrayFuse) = length(af.visible) @inline Base.axes(af::ArrayFuse) = axes(af.visible) function Adapt.adapt_structure(to, af::ArrayFuse{AT, T, P}) where {AT, T, P} - ArrayFuse(adapt(to, af.visible), adapt(to, af.hidden), af.p) + return ArrayFuse(adapt(to, af.visible), adapt(to, af.hidden), af.p) end diff --git a/lib/OrdinaryDiffEqLowStorageRK/src/low_storage_rk_caches.jl b/lib/OrdinaryDiffEqLowStorageRK/src/low_storage_rk_caches.jl index 41a85c5726..3b0fd49149 100644 --- a/lib/OrdinaryDiffEqLowStorageRK/src/low_storage_rk_caches.jl +++ b/lib/OrdinaryDiffEqLowStorageRK/src/low_storage_rk_caches.jl @@ -2,8 +2,10 @@ abstract type LowStorageRKMutableCache <: OrdinaryDiffEqMutableCache end get_fsalfirstlast(cache::LowStorageRKMutableCache, u) = (cache.fsalfirst, cache.k) # 2N low storage methods introduced by Williamson -@cache struct LowStorageRK2NCache{uType, rateType, TabType, StageLimiter, StepLimiter, - Thread} <: LowStorageRKMutableCache +@cache struct LowStorageRK2NCache{ + uType, rateType, TabType, StageLimiter, StepLimiter, + Thread, + } <: LowStorageRKMutableCache u::uType uprev::uType k::rateType @@ -42,13 +44,15 @@ function ORK256ConstantCache(T, T2) c5 = convert(T2, 0.8) c2end = SVector(c2, c3, c4, c5) - LowStorageRK2NConstantCache{4, T, T2}(A2end, B1, B2end, c2end) + return LowStorageRK2NConstantCache{4, T, T2}(A2end, B1, B2end, c2end) end -function alg_cache(alg::ORK256, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ORK256, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = ORK256ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) tmp = zero(u) williamson_condition = alg.williamson_condition @@ -62,22 +66,28 @@ function alg_cache(alg::ORK256, u, rate_prototype, ::Type{uEltypeNoUnits}, k = zero(rate_prototype) end end - LowStorageRK2NCache(u, uprev, k, tmp, tab, williamson_condition, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return LowStorageRK2NCache( + u, uprev, k, tmp, tab, williamson_condition, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::ORK256, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ORK256, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - ORK256ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return ORK256ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -function alg_cache(alg::RK46NL, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RK46NL, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - RK46NLConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return RK46NLConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end struct RK46NLConstantCache{T, T2} <: OrdinaryDiffEqConstantCache @@ -101,12 +111,12 @@ struct RK46NLConstantCache{T, T2} <: OrdinaryDiffEqConstantCache function RK46NLConstantCache(T, T2) α2 = T(-0.737101392796) α3 = T(-1.634740794343) - α4 = T(-0.744739003780) + α4 = T(-0.74473900378) α5 = T(-1.469897351522) α6 = T(-2.813971388035) β1 = T(0.032918605146) - β2 = T(0.823256998200) - β3 = T(0.381530948900) + β2 = T(0.8232569982) + β3 = T(0.3815309489) β4 = T(0.200092213184) β5 = T(1.718581042715) β6 = T(0.27) @@ -115,24 +125,28 @@ struct RK46NLConstantCache{T, T2} <: OrdinaryDiffEqConstantCache c4 = T2(0.466911705055) c5 = T2(0.582030414044) c6 = T2(0.847252983783) - new{T, T2}(α2, α3, α4, α5, α6, β1, β2, β3, β4, β5, β6, c2, c3, c4, c5, c6) + return new{T, T2}(α2, α3, α4, α5, α6, β1, β2, β3, β4, β5, β6, c2, c3, c4, c5, c6) end end -function alg_cache(alg::RK46NL, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RK46NL, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) tab = RK46NLConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - RK46NLCache(u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, alg.step_limiter!, - alg.thread) + return RK46NLCache( + u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, alg.step_limiter!, + alg.thread + ) end @cache struct RK46NLCache{uType, rateType, TabType, StageLimiter, StepLimiter, Thread} <: - LowStorageRKMutableCache + LowStorageRKMutableCache u::uType uprev::uType k::rateType @@ -164,11 +178,13 @@ function CarpenterKennedy2N54ConstantCache(T, T2) c5 = convert(T2, 2802321613138 // 2924317926251) c2end = SVector(c2, c3, c4, c5) - LowStorageRK2NConstantCache{4, T, T2}(A2end, B1, B2end, c2end) + return LowStorageRK2NConstantCache{4, T, T2}(A2end, B1, B2end, c2end) end -@cache mutable struct SHLDDRK_2NCache{uType, rateType, TabType, StageLimiter, StepLimiter, - Thread} <: LowStorageRKMutableCache +@cache mutable struct SHLDDRK_2NCache{ + uType, rateType, TabType, StageLimiter, StepLimiter, + Thread, + } <: LowStorageRKMutableCache u::uType uprev::uType k::rateType @@ -223,58 +239,67 @@ function SHLDDRK_2NConstantCache(T1, T2) α51 = T1(-4.4231765) β11 = T1(0.2687454) β21 = T1(0.8014706) - β31 = T1(0.5051570) + β31 = T1(0.505157) β41 = T1(0.5623568) β51 = T1(0.0590065) c21 = T2(0.2687454) - c31 = T2(0.5852280) + c31 = T2(0.585228) c41 = T2(0.6827066) c51 = T2(1.1646854) α22 = T1(-0.4412737) - α32 = T1(-1.0739820) - α42 = T1(-1.7063570) + α32 = T1(-1.073982) + α42 = T1(-1.706357) α52 = T1(-2.7979293) α62 = T1(-4.0913537) β12 = T1(0.1158488) β22 = T1(0.3728769) β32 = T1(0.7379536) - β42 = T1(0.5798110) + β42 = T1(0.579811) β52 = T1(1.0312849) β62 = T1(0.15) c22 = T2(0.1158485) - c32 = T2(0.3241850) + c32 = T2(0.324185) c42 = T2(0.6193208) c52 = T2(0.8034472) c62 = T2(0.9184166) - SHLDDRK_2NConstantCache( + return SHLDDRK_2NConstantCache( α21, α31, α41, α51, β11, β21, β31, β41, β51, c21, c31, c41, c51, α22, α32, α42, α52, α62, β12, β22, β32, β42, β52, β62, c22, c32, - c42, c52, c62, 1) + c42, c52, c62, 1 + ) end -function alg_cache(alg::SHLDDRK_2N, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SHLDDRK_2N, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SHLDDRK_2NConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SHLDDRK_2NConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -function alg_cache(alg::SHLDDRK_2N, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SHLDDRK_2N, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) - tab = SHLDDRK_2NConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - SHLDDRK_2NCache(u, uprev, k, tmp, fsalfirst, tab, 1, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + tab = SHLDDRK_2NConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return SHLDDRK_2NCache( + u, uprev, k, tmp, fsalfirst, tab, 1, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end @cache struct SHLDDRK52Cache{uType, rateType, TabType, StageLimiter, StepLimiter, Thread} <: - LowStorageRKMutableCache + LowStorageRKMutableCache u::uType uprev::uType k::rateType @@ -316,34 +341,44 @@ function SHLDDRK52ConstantCache(T1, T2) c3 = T2(0.3315201) c4 = T2(0.4577796) c5 = T2(0.8666528) - SHLDDRK52ConstantCache(α2, α3, α4, α5, β1, β2, β3, β4, β5, c2, c3, c4, c5) + return SHLDDRK52ConstantCache(α2, α3, α4, α5, β1, β2, β3, β4, β5, c2, c3, c4, c5) end -function alg_cache(alg::SHLDDRK52, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SHLDDRK52, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SHLDDRK52ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SHLDDRK52ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -function alg_cache(alg::SHLDDRK52, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SHLDDRK52, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) tab = SHLDDRK52ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - SHLDDRK52Cache(u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, alg.step_limiter!, - alg.thread) + return SHLDDRK52Cache( + u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, alg.step_limiter!, + alg.thread + ) end -function alg_cache(alg::CarpenterKennedy2N54, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CarpenterKennedy2N54, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - tab = CarpenterKennedy2N54ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + tab = CarpenterKennedy2N54ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) tmp = zero(u) williamson_condition = alg.williamson_condition if calck @@ -356,16 +391,22 @@ function alg_cache(alg::CarpenterKennedy2N54, u, rate_prototype, ::Type{uEltypeN k = zero(rate_prototype) end end - LowStorageRK2NCache(u, uprev, k, tmp, tab, williamson_condition, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return LowStorageRK2NCache( + u, uprev, k, tmp, tab, williamson_condition, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::CarpenterKennedy2N54, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CarpenterKennedy2N54, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CarpenterKennedy2N54ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CarpenterKennedy2N54ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) end function SHLDDRK64ConstantCache(T, T2) @@ -374,7 +415,7 @@ function SHLDDRK64ConstantCache(T, T2) A3 = convert(T, -0.8946264) A4 = convert(T, -1.5526678) A5 = convert(T, -3.4077973) - A6 = convert(T, -1.0742640) + A6 = convert(T, -1.074264) A2end = SVector(A2, A3, A4, A5, A6) B1 = convert(T, 0.1453095) @@ -392,13 +433,15 @@ function SHLDDRK64ConstantCache(T, T2) c6 = convert(T2, 0.9271047) c2end = SVector(c2, c3, c4, c5, c6) - LowStorageRK2NConstantCache{5, T, T2}(A2end, B1, B2end, c2end) + return LowStorageRK2NConstantCache{5, T, T2}(A2end, B1, B2end, c2end) end -function alg_cache(alg::SHLDDRK64, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SHLDDRK64, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = SHLDDRK64ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) tmp = zero(u) williamson_condition = alg.williamson_condition @@ -412,52 +455,60 @@ function alg_cache(alg::SHLDDRK64, u, rate_prototype, ::Type{uEltypeNoUnits}, k = zero(rate_prototype) end end - LowStorageRK2NCache(u, uprev, k, tmp, tab, williamson_condition, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return LowStorageRK2NCache( + u, uprev, k, tmp, tab, williamson_condition, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::SHLDDRK64, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SHLDDRK64, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SHLDDRK64ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SHLDDRK64ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function DGLDDRK73_CConstantCache(T, T2) - A2 = convert(T, -0.8083163874983830) + A2 = convert(T, -0.808316387498383) A3 = convert(T, -1.503407858773331) A4 = convert(T, -1.053064525050744) A5 = convert(T, -1.463149119280508) - A6 = convert(T, -0.6592881281087830) + A6 = convert(T, -0.659288128108783) A7 = convert(T, -1.667891931891068) A2end = SVector(A2, A3, A4, A5, A6, A7) - B1 = convert(T, 0.01197052673097840) + B1 = convert(T, 0.0119705267309784) B2 = convert(T, 0.8886897793820711) B3 = convert(T, 0.4578382089261419) B4 = convert(T, 0.5790045253338471) B5 = convert(T, 0.3160214638138484) B6 = convert(T, 0.2483525368264122) - B7 = convert(T, 0.06771230959408840) + B7 = convert(T, 0.0677123095940884) B2end = SVector(B2, B3, B4, B5, B6, B7) - c2 = convert(T2, 0.01197052673097840) - c3 = convert(T2, 0.1823177940361990) + c2 = convert(T2, 0.0119705267309784) + c3 = convert(T2, 0.182317794036199) c4 = convert(T2, 0.5082168062551849) - c5 = convert(T2, 0.6532031220148590) - c6 = convert(T2, 0.8534401385678250) - c7 = convert(T2, 0.9980466084623790) + c5 = convert(T2, 0.653203122014859) + c6 = convert(T2, 0.853440138567825) + c7 = convert(T2, 0.998046608462379) c2end = SVector(c2, c3, c4, c5, c6, c7) - LowStorageRK2NConstantCache{6, T, T2}(A2end, B1, B2end, c2end) + return LowStorageRK2NConstantCache{6, T, T2}(A2end, B1, B2end, c2end) end -function alg_cache(alg::DGLDDRK73_C, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DGLDDRK73_C, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - tab = DGLDDRK73_CConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + tab = DGLDDRK73_CConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) tmp = zero(u) williamson_condition = alg.williamson_condition if calck @@ -470,55 +521,63 @@ function alg_cache(alg::DGLDDRK73_C, u, rate_prototype, ::Type{uEltypeNoUnits}, k = zero(rate_prototype) end end - LowStorageRK2NCache(u, uprev, k, tmp, tab, williamson_condition, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return LowStorageRK2NCache( + u, uprev, k, tmp, tab, williamson_condition, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::DGLDDRK73_C, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DGLDDRK73_C, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - DGLDDRK73_CConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return DGLDDRK73_CConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function DGLDDRK84_CConstantCache(T, T2) - A2 = convert(T, -0.7212962482279240) - A3 = convert(T, -0.01077336571612980) - A4 = convert(T, -0.5162584698930970) + A2 = convert(T, -0.721296248227924) + A3 = convert(T, -0.0107733657161298) + A4 = convert(T, -0.516258469893097) A5 = convert(T, -1.730100286632201) A6 = convert(T, -5.200129304403076) - A7 = convert(T, 0.7837058945416420) - A8 = convert(T, -0.5445836094332190) + A7 = convert(T, 0.783705894541642) + A8 = convert(T, -0.544583609433219) A2end = SVector(A2, A3, A4, A5, A6, A7, A8) B1 = convert(T, 0.2165936736758085) B2 = convert(T, 0.1773950826411583) - B3 = convert(T, 0.01802538611623290) - B4 = convert(T, 0.08473476372541490) + B3 = convert(T, 0.0180253861162329) + B4 = convert(T, 0.0847347637254149) B5 = convert(T, 0.8129106974622483) - B6 = convert(T, 1.903416030422760) + B6 = convert(T, 1.90341603042276) B7 = convert(T, 0.1314841743399048) B8 = convert(T, 0.2082583170674149) B2end = SVector(B2, B3, B4, B5, B6, B7, B8) c2 = convert(T2, 0.2165936736758085) - c3 = convert(T2, 0.2660343487538170) - c4 = convert(T2, 0.2840056122522720) - c5 = convert(T2, 0.3251266843788570) - c6 = convert(T2, 0.4555149599187530) - c7 = convert(T2, 0.7713219317101170) - c8 = convert(T2, 0.9199028964538660) + c3 = convert(T2, 0.266034348753817) + c4 = convert(T2, 0.284005612252272) + c5 = convert(T2, 0.325126684378857) + c6 = convert(T2, 0.455514959918753) + c7 = convert(T2, 0.771321931710117) + c8 = convert(T2, 0.919902896453866) c2end = SVector(c2, c3, c4, c5, c6, c7, c8) - LowStorageRK2NConstantCache{7, T, T2}(A2end, B1, B2end, c2end) + return LowStorageRK2NConstantCache{7, T, T2}(A2end, B1, B2end, c2end) end -function alg_cache(alg::DGLDDRK84_C, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DGLDDRK84_C, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - tab = DGLDDRK84_CConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + tab = DGLDDRK84_CConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) tmp = zero(u) williamson_condition = alg.williamson_condition if calck @@ -531,55 +590,63 @@ function alg_cache(alg::DGLDDRK84_C, u, rate_prototype, ::Type{uEltypeNoUnits}, k = zero(rate_prototype) end end - LowStorageRK2NCache(u, uprev, k, tmp, tab, williamson_condition, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return LowStorageRK2NCache( + u, uprev, k, tmp, tab, williamson_condition, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::DGLDDRK84_C, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DGLDDRK84_C, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - DGLDDRK84_CConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return DGLDDRK84_CConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function DGLDDRK84_FConstantCache(T, T2) A2 = convert(T, -0.5534431294501569) - A3 = convert(T, 0.01065987570203490) - A4 = convert(T, -0.5515812888932000) + A3 = convert(T, 0.0106598757020349) + A4 = convert(T, -0.5515812888932) A5 = convert(T, -1.885790377558741) A6 = convert(T, -5.701295742793264) A7 = convert(T, 2.113903965664793) - A8 = convert(T, -0.5339578826675280) + A8 = convert(T, -0.533957882667528) A2end = SVector(A2, A3, A4, A5, A6, A7, A8) - B1 = convert(T, 0.08037936882736950) + B1 = convert(T, 0.0803793688273695) B2 = convert(T, 0.5388497458569843) - B3 = convert(T, 0.01974974409031960) - B4 = convert(T, 0.09911841297339970) + B3 = convert(T, 0.0197497440903196) + B4 = convert(T, 0.0991184129733997) B5 = convert(T, 0.7466920411064123) B6 = convert(T, 1.679584245618894) B7 = convert(T, 0.2433728067008188) B8 = convert(T, 0.1422730459001373) B2end = SVector(B2, B3, B4, B5, B6, B7, B8) - c2 = convert(T2, 0.08037936882736950) - c3 = convert(T2, 0.3210064250338430) - c4 = convert(T2, 0.3408501826604660) - c5 = convert(T2, 0.3850364824285470) - c6 = convert(T2, 0.5040052477534100) - c7 = convert(T2, 0.6578977561168540) + c2 = convert(T2, 0.0803793688273695) + c3 = convert(T2, 0.321006425033843) + c4 = convert(T2, 0.340850182660466) + c5 = convert(T2, 0.385036482428547) + c6 = convert(T2, 0.50400524775341) + c7 = convert(T2, 0.657897756116854) c8 = convert(T2, 0.9484087623348481) c2end = SVector(c2, c3, c4, c5, c6, c7, c8) - LowStorageRK2NConstantCache{7, T, T2}(A2end, B1, B2end, c2end) + return LowStorageRK2NConstantCache{7, T, T2}(A2end, B1, B2end, c2end) end -function alg_cache(alg::DGLDDRK84_F, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DGLDDRK84_F, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - tab = DGLDDRK84_FConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + tab = DGLDDRK84_FConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) tmp = zero(u) williamson_condition = alg.williamson_condition if calck @@ -592,15 +659,19 @@ function alg_cache(alg::DGLDDRK84_F, u, rate_prototype, ::Type{uEltypeNoUnits}, k = zero(rate_prototype) end end - LowStorageRK2NCache(u, uprev, k, tmp, tab, williamson_condition, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return LowStorageRK2NCache( + u, uprev, k, tmp, tab, williamson_condition, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::DGLDDRK84_F, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DGLDDRK84_F, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - DGLDDRK84_FConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return DGLDDRK84_FConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function NDBLSRK124ConstantCache(T, T2) @@ -611,7 +682,7 @@ function NDBLSRK124ConstantCache(T, T2) A6 = convert(T, -0.9770727190189062) A7 = convert(T, -0.7581835342571139) A8 = convert(T, -1.7977525470825499) - A9 = convert(T, -2.6915667972700770) + A9 = convert(T, -2.691566797270077) A10 = convert(T, -4.6466798960268143) A11 = convert(T, -0.1539613783825189) A12 = convert(T, -0.5943293901830616) @@ -640,19 +711,23 @@ function NDBLSRK124ConstantCache(T, T2) c8 = convert(T2, 0.4094724050198658) c9 = convert(T2, 0.6356954475753369) c10 = convert(T2, 0.6806551557645497) - c11 = convert(T2, 0.7143773712418350) + c11 = convert(T2, 0.714377371241835) c12 = convert(T2, 0.9032588871651854) c2end = SVector(c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12) - LowStorageRK2NConstantCache{11, T, T2}(A2end, B1, B2end, c2end) + return LowStorageRK2NConstantCache{11, T, T2}(A2end, B1, B2end, c2end) end -function alg_cache(alg::NDBLSRK124, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::NDBLSRK124, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - tab = NDBLSRK124ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + tab = NDBLSRK124ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) tmp = zero(u) williamson_condition = alg.williamson_condition if calck @@ -665,15 +740,19 @@ function alg_cache(alg::NDBLSRK124, u, rate_prototype, ::Type{uEltypeNoUnits}, k = zero(rate_prototype) end end - LowStorageRK2NCache(u, uprev, k, tmp, tab, williamson_condition, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return LowStorageRK2NCache( + u, uprev, k, tmp, tab, williamson_condition, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::NDBLSRK124, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::NDBLSRK124, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - NDBLSRK124ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return NDBLSRK124ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function NDBLSRK134ConstantCache(T, T2) @@ -683,7 +762,7 @@ function NDBLSRK134ConstantCache(T, T2) A5 = convert(T, -1.2256030785959187) A6 = convert(T, -0.2740182222332805) A7 = convert(T, -0.0411952089052647) - A8 = convert(T, -0.1797084899153560) + A8 = convert(T, -0.179708489915356) A9 = convert(T, -1.1771530652064288) A10 = convert(T, -0.4078831463120878) A11 = convert(T, -0.8295636426191777) @@ -695,7 +774,7 @@ function NDBLSRK134ConstantCache(T, T2) B2 = convert(T, 0.1772488819905108) B3 = convert(T, 0.0378528418949694) B4 = convert(T, 0.6086431830142991) - B5 = convert(T, 0.2154313974316100) + B5 = convert(T, 0.21543139743161) B6 = convert(T, 0.2066152563885843) B7 = convert(T, 0.0415864076069797) B8 = convert(T, 0.0219891884310925) @@ -720,15 +799,19 @@ function NDBLSRK134ConstantCache(T, T2) c13 = convert(T2, 0.9126827615920843) c2end = SVector(c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13) - LowStorageRK2NConstantCache{12, T, T2}(A2end, B1, B2end, c2end) + return LowStorageRK2NConstantCache{12, T, T2}(A2end, B1, B2end, c2end) end -function alg_cache(alg::NDBLSRK134, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::NDBLSRK134, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - tab = NDBLSRK134ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + tab = NDBLSRK134ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) tmp = zero(u) williamson_condition = alg.williamson_condition if calck @@ -741,29 +824,33 @@ function alg_cache(alg::NDBLSRK134, u, rate_prototype, ::Type{uEltypeNoUnits}, k = zero(rate_prototype) end end - LowStorageRK2NCache(u, uprev, k, tmp, tab, williamson_condition, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return LowStorageRK2NCache( + u, uprev, k, tmp, tab, williamson_condition, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::NDBLSRK134, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::NDBLSRK134, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - NDBLSRK134ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return NDBLSRK134ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function NDBLSRK144ConstantCache(T, T2) - A2 = convert(T, -0.7188012108672410) - A3 = convert(T, -0.7785331173421570) + A2 = convert(T, -0.718801210867241) + A3 = convert(T, -0.778533117342157) A4 = convert(T, -0.0053282796654044) A5 = convert(T, -0.8552979934029281) A6 = convert(T, -3.9564138245774565) A7 = convert(T, -1.5780575380587385) A8 = convert(T, -2.0837094552574054) - A9 = convert(T, -0.7483334182761610) + A9 = convert(T, -0.748333418276161) A10 = convert(T, -0.7032861106563359) A11 = convert(T, 0.0013917096117681) - A12 = convert(T, -0.0932075369637460) + A12 = convert(T, -0.093207536963746) A13 = convert(T, -0.9514200470875948) A14 = convert(T, -7.1151571693922548) A2end = SVector(A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14) @@ -772,7 +859,7 @@ function NDBLSRK144ConstantCache(T, T2) B2 = convert(T, 0.3136296607553959) B3 = convert(T, 0.1531848691869027) B4 = convert(T, 0.0030097086818182) - B5 = convert(T, 0.3326293790646110) + B5 = convert(T, 0.332629379064611) B6 = convert(T, 0.2440251405350864) B7 = convert(T, 0.3718879239592277) B8 = convert(T, 0.6204126221582444) @@ -787,7 +874,7 @@ function NDBLSRK144ConstantCache(T, T2) c2 = convert(T2, 0.0367762454319673) c3 = convert(T2, 0.1249685262725025) c4 = convert(T2, 0.2446177702277698) - c5 = convert(T2, 0.2476149531070420) + c5 = convert(T2, 0.247614953107042) c6 = convert(T2, 0.2969311120382472) c7 = convert(T2, 0.3978149645802642) c8 = convert(T2, 0.5270854589440328) @@ -799,15 +886,19 @@ function NDBLSRK144ConstantCache(T, T2) c14 = convert(T2, 0.8734213127600976) c2end = SVector(c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14) - LowStorageRK2NConstantCache{13, T, T2}(A2end, B1, B2end, c2end) + return LowStorageRK2NConstantCache{13, T, T2}(A2end, B1, B2end, c2end) end -function alg_cache(alg::NDBLSRK144, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::NDBLSRK144, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - tab = NDBLSRK144ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + tab = NDBLSRK144ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) tmp = zero(u) williamson_condition = alg.williamson_condition if calck @@ -820,20 +911,26 @@ function alg_cache(alg::NDBLSRK144, u, rate_prototype, ::Type{uEltypeNoUnits}, k = zero(rate_prototype) end end - LowStorageRK2NCache(u, uprev, k, tmp, tab, williamson_condition, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return LowStorageRK2NCache( + u, uprev, k, tmp, tab, williamson_condition, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::NDBLSRK144, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::NDBLSRK144, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - NDBLSRK144ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return NDBLSRK144ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end # 2C low storage methods introduced by Calvo, Franco, Rández (2004) -@cache struct LowStorageRK2CCache{uType, rateType, TabType, StageLimiter, StepLimiter, - Thread} <: LowStorageRKMutableCache +@cache struct LowStorageRK2CCache{ + uType, rateType, TabType, StageLimiter, StepLimiter, + Thread, + } <: LowStorageRKMutableCache u::uType uprev::uType k::rateType @@ -875,13 +972,15 @@ function CFRLDDRK64ConstantCache(T, T2) c6 = convert(T2, 0.83050587987157) c2end = SVector(c2, c3, c4, c5, c6) - LowStorageRK2CConstantCache{5, T, T2}(A2end, B1, B2end, c2end) + return LowStorageRK2CConstantCache{5, T, T2}(A2end, B1, B2end, c2end) end -function alg_cache(alg::CFRLDDRK64, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CFRLDDRK64, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) if calck @@ -889,17 +988,23 @@ function alg_cache(alg::CFRLDDRK64, u, rate_prototype, ::Type{uEltypeNoUnits}, else fsalfirst = k end - tab = CFRLDDRK64ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK2CCache(u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::CFRLDDRK64, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = CFRLDDRK64ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK2CCache( + u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::CFRLDDRK64, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CFRLDDRK64ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CFRLDDRK64ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function TSLDDRK74ConstantCache(T, T2) @@ -908,7 +1013,7 @@ function TSLDDRK74ConstantCache(T, T2) A4 = convert(T, 0.215602732678803776) A5 = convert(T, 0.232328007537583987) A6 = convert(T, 0.256223412574146438) - A7 = convert(T, 0.0978694102142697230) + A7 = convert(T, 0.097869410214269723) A2end = SVector(A2, A3, A4, A5, A6, A7) B1 = convert(T, 0.0941840925477795334) @@ -917,7 +1022,7 @@ function TSLDDRK74ConstantCache(T, T2) B4 = convert(T, -0.122201846148053668) B5 = convert(T, 0.0605151571191401122) B6 = convert(T, 0.345986987898399296) - B7 = convert(T, 0.186627171718797670) + B7 = convert(T, 0.18662717171879767) B2end = SVector(B2, B3, B4, B5, B6, B7) c2 = convert(T2, 0.335750742677426401) @@ -928,13 +1033,15 @@ function TSLDDRK74ConstantCache(T, T2) c7 = convert(T2, 0.91124223849547205) c2end = SVector(c2, c3, c4, c5, c6, c7) - LowStorageRK2CConstantCache{6, T, T2}(A2end, B1, B2end, c2end) + return LowStorageRK2CConstantCache{6, T, T2}(A2end, B1, B2end, c2end) end -function alg_cache(alg::TSLDDRK74, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::TSLDDRK74, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) if calck @@ -943,20 +1050,26 @@ function alg_cache(alg::TSLDDRK74, u, rate_prototype, ::Type{uEltypeNoUnits}, fsalfirst = k end tab = TSLDDRK74ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - LowStorageRK2CCache(u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return LowStorageRK2CCache( + u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::TSLDDRK74, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::TSLDDRK74, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - TSLDDRK74ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return TSLDDRK74ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end # 3S low storage methods introduced by Ketcheson -@cache struct LowStorageRK3SCache{uType, rateType, TabType, StageLimiter, StepLimiter, - Thread} <: LowStorageRKMutableCache +@cache struct LowStorageRK3SCache{ + uType, rateType, TabType, StageLimiter, StepLimiter, + Thread, + } <: LowStorageRKMutableCache u::uType uprev::uType k::rateType @@ -984,16 +1097,16 @@ function ParsaniKetchesonDeconinck3S32ConstantCache(T, T2) γ103 = convert(T, 1.1426980685848858e+0) γ12end = SVector(γ102, γ103) - γ202 = convert(T, 6.5427782599406470e-1) + γ202 = convert(T, 6.542778259940647e-1) γ203 = convert(T, -8.2869287683723744e-2) γ22end = SVector(γ202, γ203) - γ302 = convert(T, 0.0000000000000000e+0) - γ303 = convert(T, 0.0000000000000000e+0) + γ302 = convert(T, 0.0e+0) + γ303 = convert(T, 0.0e+0) γ32end = SVector(γ302, γ303) δ02 = convert(T, 7.2196567116037724e-1) - δ03 = convert(T, 0.0000000000000000e+0) + δ03 = convert(T, 0.0e+0) δ2end = SVector(δ02, δ03) β1 = convert(T, 7.2366074728360086e-1) @@ -1005,13 +1118,15 @@ function ParsaniKetchesonDeconinck3S32ConstantCache(T, T2) c03 = convert(T2, 5.9236433182015646e-1) c2end = SVector(c02, c03) - LowStorageRK3SConstantCache{2, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end) + return LowStorageRK3SConstantCache{2, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end) end -function alg_cache(alg::ParsaniKetchesonDeconinck3S32, u, rate_prototype, +function alg_cache( + alg::ParsaniKetchesonDeconinck3S32, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) if calck @@ -1019,18 +1134,26 @@ function alg_cache(alg::ParsaniKetchesonDeconinck3S32, u, rate_prototype, else fsalfirst = k end - tab = ParsaniKetchesonDeconinck3S32ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK3SCache(u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::ParsaniKetchesonDeconinck3S32, u, rate_prototype, + tab = ParsaniKetchesonDeconinck3S32ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK3SCache( + u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::ParsaniKetchesonDeconinck3S32, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - ParsaniKetchesonDeconinck3S32ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return ParsaniKetchesonDeconinck3S32ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) end function ParsaniKetchesonDeconinck3S82ConstantCache(T, T2) @@ -1052,8 +1175,8 @@ function ParsaniKetchesonDeconinck3S82ConstantCache(T, T2) γ208 = convert(T, 4.0185379950224559e-1) γ22end = SVector(γ202, γ203, γ204, γ205, γ206, γ207, γ208) - γ302 = convert(T, 0.0000000000000000e+0) - γ303 = convert(T, 0.0000000000000000e+0) + γ302 = convert(T, 0.0e+0) + γ303 = convert(T, 0.0e+0) γ304 = convert(T, 5.8415358412023582e-2) γ305 = convert(T, 6.4219008773865116e-1) γ306 = convert(T, 6.8770305706885126e-1) @@ -1067,17 +1190,17 @@ function ParsaniKetchesonDeconinck3S82ConstantCache(T, T2) δ05 = convert(T, 4.1350769551529132e-1) δ06 = convert(T, -1.4040672669058066e-1) δ07 = convert(T, 2.1249567092409008e-1) - δ08 = convert(T, 0.0000000000000000e+0) + δ08 = convert(T, 0.0e+0) δ2end = SVector(δ02, δ03, δ04, δ05, δ06, δ07, δ08) β1 = convert(T, 9.9292229393265474e-1) β02 = convert(T, 5.2108385130005974e-1) β03 = convert(T, 3.8505327083543915e-3) β04 = convert(T, 7.9714199213087467e-1) - β05 = convert(T, -8.1822460276649120e-2) + β05 = convert(T, -8.182246027664912e-2) β06 = convert(T, 8.4604310411858186e-1) β07 = convert(T, -1.0191166090841246e-1) - β08 = convert(T, 6.3190236038107500e-2) + β08 = convert(T, 6.31902360381075e-2) β2end = SVector(β02, β03, β04, β05, β06, β07, β08) c02 = convert(T2, 9.9292229393265474e-1) @@ -1089,13 +1212,15 @@ function ParsaniKetchesonDeconinck3S82ConstantCache(T, T2) c08 = convert(T2, 2.1138242369563969e+0) c2end = SVector(c02, c03, c04, c05, c06, c07, c08) - LowStorageRK3SConstantCache{7, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end) + return LowStorageRK3SConstantCache{7, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end) end -function alg_cache(alg::ParsaniKetchesonDeconinck3S82, u, rate_prototype, +function alg_cache( + alg::ParsaniKetchesonDeconinck3S82, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) if calck @@ -1103,18 +1228,26 @@ function alg_cache(alg::ParsaniKetchesonDeconinck3S82, u, rate_prototype, else fsalfirst = k end - tab = ParsaniKetchesonDeconinck3S82ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK3SCache(u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::ParsaniKetchesonDeconinck3S82, u, rate_prototype, + tab = ParsaniKetchesonDeconinck3S82ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK3SCache( + u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::ParsaniKetchesonDeconinck3S82, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - ParsaniKetchesonDeconinck3S82ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return ParsaniKetchesonDeconinck3S82ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) end function ParsaniKetchesonDeconinck3S53ConstantCache(T, T2) @@ -1130,8 +1263,8 @@ function ParsaniKetchesonDeconinck3S53ConstantCache(T, T2) γ205 = convert(T, 5.5215115815918758e-1) γ22end = SVector(γ202, γ203, γ204, γ205) - γ302 = convert(T, 0.0000000000000000e+0) - γ303 = convert(T, 0.0000000000000000e+0) + γ302 = convert(T, 0.0e+0) + γ303 = convert(T, 0.0e+0) γ304 = convert(T, 2.7525797946334213e-1) γ305 = convert(T, -8.9505445022148511e-1) γ32end = SVector(γ302, γ303, γ304, γ305) @@ -1139,7 +1272,7 @@ function ParsaniKetchesonDeconinck3S53ConstantCache(T, T2) δ02 = convert(T, 3.4076878915216791e-1) δ03 = convert(T, 3.4143871647890728e-1) δ04 = convert(T, 7.2292984084963252e-1) - δ05 = convert(T, 0.0000000000000000e+0) + δ05 = convert(T, 0.0e+0) δ2end = SVector(δ02, δ03, δ04, δ05) β1 = convert(T, 2.3002859824852059e-1) @@ -1155,13 +1288,15 @@ function ParsaniKetchesonDeconinck3S53ConstantCache(T, T2) c05 = convert(T2, 7.2351146275625733e-1) c2end = SVector(c02, c03, c04, c05) - LowStorageRK3SConstantCache{4, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end) + return LowStorageRK3SConstantCache{4, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end) end -function alg_cache(alg::ParsaniKetchesonDeconinck3S53, u, rate_prototype, +function alg_cache( + alg::ParsaniKetchesonDeconinck3S53, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) if calck @@ -1169,18 +1304,26 @@ function alg_cache(alg::ParsaniKetchesonDeconinck3S53, u, rate_prototype, else fsalfirst = k end - tab = ParsaniKetchesonDeconinck3S53ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK3SCache(u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::ParsaniKetchesonDeconinck3S53, u, rate_prototype, + tab = ParsaniKetchesonDeconinck3S53ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK3SCache( + u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::ParsaniKetchesonDeconinck3S53, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - ParsaniKetchesonDeconinck3S53ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return ParsaniKetchesonDeconinck3S53ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) end function ParsaniKetchesonDeconinck3S173ConstantCache(T, T2) @@ -1188,7 +1331,7 @@ function ParsaniKetchesonDeconinck3S173ConstantCache(T, T2) γ103 = convert(T, -8.3475116244241754e-2) γ104 = convert(T, -1.6706337980062214e-2) γ105 = convert(T, 3.6410691500331427e-1) - γ106 = convert(T, 6.9178255181542780e-1) + γ106 = convert(T, 6.917825518154278e-1) γ107 = convert(T, 1.4887115004739182e+0) γ108 = convert(T, 4.5336125560871188e-1) γ109 = convert(T, -1.2705776046458739e-1) @@ -1196,15 +1339,16 @@ function ParsaniKetchesonDeconinck3S173ConstantCache(T, T2) γ111 = convert(T, 1.5709218393361746e-1) γ112 = convert(T, -5.7768207086288348e-1) γ113 = convert(T, -5.7340394122375393e-1) - γ114 = convert(T, -1.2050734846514470e+0) + γ114 = convert(T, -1.205073484651447e+0) γ115 = convert(T, -2.8100719513641002e+0) γ116 = convert(T, 1.6142798657609492e-1) γ117 = convert(T, -2.5801264756641613e+0) γ12end = SVector( γ102, γ103, γ104, γ105, γ106, γ107, γ108, γ109, γ110, γ111, γ112, γ113, - γ114, γ115, γ116, γ117) + γ114, γ115, γ116, γ117 + ) - γ202 = convert(T, 3.2857861940811250e-1) + γ202 = convert(T, 3.285786194081125e-1) γ203 = convert(T, 1.1276843361180819e+0) γ204 = convert(T, 1.3149447395238016e+0) γ205 = convert(T, 5.2062891534209055e-1) @@ -1222,10 +1366,11 @@ function ParsaniKetchesonDeconinck3S173ConstantCache(T, T2) γ217 = convert(T, 1.3350583594705518e+0) γ22end = SVector( γ202, γ203, γ204, γ205, γ206, γ207, γ208, γ209, γ210, γ211, γ212, γ213, - γ214, γ215, γ216, γ217) + γ214, γ215, γ216, γ217 + ) - γ302 = convert(T, 0.0000000000000000e+0) - γ303 = convert(T, 0.0000000000000000e+0) + γ302 = convert(T, 0.0e+0) + γ303 = convert(T, 0.0e+0) γ304 = convert(T, 8.4034574578399479e-1) γ305 = convert(T, 8.5047738439705145e-1) γ306 = convert(T, 1.4082448501410852e-1) @@ -1242,46 +1387,51 @@ function ParsaniKetchesonDeconinck3S173ConstantCache(T, T2) γ317 = convert(T, -1.2200245424704212e+0) γ32end = SVector( γ302, γ303, γ304, γ305, γ306, γ307, γ308, γ309, γ310, γ311, γ312, γ313, - γ314, γ315, γ316, γ317) + γ314, γ315, γ316, γ317 + ) δ02 = convert(T, -3.7235794357769936e-1) δ03 = convert(T, 3.3315440189685536e-1) - δ04 = convert(T, -8.2667630338402520e-1) + δ04 = convert(T, -8.266763033840252e-1) δ05 = convert(T, -5.4628377681035534e-1) δ06 = convert(T, 6.0210777634642887e-1) δ07 = convert(T, -5.7528717894031067e-1) δ08 = convert(T, 5.0914861529202782e-1) δ09 = convert(T, 3.8258114767897194e-1) - δ10 = convert(T, -4.6279063221185290e-1) + δ10 = convert(T, -4.627906322118529e-1) δ11 = convert(T, -2.0820434288562648e-1) δ12 = convert(T, 1.4398056081552713e+0) δ13 = convert(T, -2.8056600927348752e-1) δ14 = convert(T, 2.2767189929551406e+0) δ15 = convert(T, -5.8917530100546356e-1) δ16 = convert(T, 9.1328651048418164e-1) - δ17 = convert(T, 0.0000000000000000e+0) - δ2end = SVector(δ02, δ03, δ04, δ05, δ06, δ07, δ08, δ09, δ10, δ11, δ12, δ13, δ14, δ15, - δ16, δ17) + δ17 = convert(T, 0.0e+0) + δ2end = SVector( + δ02, δ03, δ04, δ05, δ06, δ07, δ08, δ09, δ10, δ11, δ12, δ13, δ14, δ15, + δ16, δ17 + ) β1 = convert(T, 4.9565403010221741e-2) β02 = convert(T, 9.7408718698159397e-2) - β03 = convert(T, -1.7620737976801870e-1) - β04 = convert(T, 1.4852069175460250e-1) + β03 = convert(T, -1.762073797680187e-1) + β04 = convert(T, 1.485206917546025e-1) β05 = convert(T, -3.3127657103714951e-2) β06 = convert(T, 4.8294609330498492e-2) β07 = convert(T, 4.9622612199980112e-2) β08 = convert(T, 8.7340766269850378e-1) - β09 = convert(T, -2.8692804399085370e-1) + β09 = convert(T, -2.869280439908537e-1) β10 = convert(T, 1.2679897532256112e+0) β11 = convert(T, -1.0217436118953449e-2) - β12 = convert(T, 8.4665570032598350e-2) + β12 = convert(T, 8.466557003259835e-2) β13 = convert(T, 2.8253854742588246e-2) β14 = convert(T, -9.2936733010804407e-2) β15 = convert(T, -8.4798124766803512e-2) β16 = convert(T, -1.6923145636158564e-2) β17 = convert(T, -4.7305106233879957e-2) - β2end = SVector(β02, β03, β04, β05, β06, β07, β08, β09, β10, β11, β12, β13, β14, β15, - β16, β17) + β2end = SVector( + β02, β03, β04, β05, β06, β07, β08, β09, β10, β11, β12, β13, β14, β15, + β16, β17 + ) c02 = convert(T2, 4.9565403010221741e-2) c03 = convert(T2, 1.3068799001687578e-1) @@ -1293,22 +1443,26 @@ function ParsaniKetchesonDeconinck3S173ConstantCache(T, T2) c09 = convert(T2, 9.6162976936182631e-1) c10 = convert(T2, -2.2760719867560897e-1) c11 = convert(T2, 1.1115681606027146e+0) - c12 = convert(T2, 6.1266845427676520e-1) + c12 = convert(T2, 6.126684542767652e-1) c13 = convert(T2, 1.0729473245077408e+0) c14 = convert(T2, 3.7824186468104548e-1) - c15 = convert(T2, 7.9041891347646720e-1) + c15 = convert(T2, 7.904189134764672e-1) c16 = convert(T2, -1.0406955693161675e+0) c17 = convert(T2, -2.4607146824557105e-1) - c2end = SVector(c02, c03, c04, c05, c06, c07, c08, c09, c10, c11, c12, c13, c14, c15, - c16, c17) + c2end = SVector( + c02, c03, c04, c05, c06, c07, c08, c09, c10, c11, c12, c13, c14, c15, + c16, c17 + ) - LowStorageRK3SConstantCache{16, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end) + return LowStorageRK3SConstantCache{16, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end) end -function alg_cache(alg::ParsaniKetchesonDeconinck3S173, u, rate_prototype, +function alg_cache( + alg::ParsaniKetchesonDeconinck3S173, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) if calck @@ -1316,18 +1470,26 @@ function alg_cache(alg::ParsaniKetchesonDeconinck3S173, u, rate_prototype, else fsalfirst = k end - tab = ParsaniKetchesonDeconinck3S173ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK3SCache(u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::ParsaniKetchesonDeconinck3S173, u, rate_prototype, + tab = ParsaniKetchesonDeconinck3S173ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK3SCache( + u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::ParsaniKetchesonDeconinck3S173, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - ParsaniKetchesonDeconinck3S173ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return ParsaniKetchesonDeconinck3S173ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) end function ParsaniKetchesonDeconinck3S94ConstantCache(T, T2) @@ -1338,7 +1500,7 @@ function ParsaniKetchesonDeconinck3S94ConstantCache(T, T2) γ106 = convert(T, -2.4350219407769953e+0) γ107 = convert(T, 1.9856336960249132e-2) γ108 = convert(T, -2.8107894116913812e-1) - γ109 = convert(T, 1.6894354373677900e-1) + γ109 = convert(T, 1.68943543736779e-1) γ12end = SVector(γ102, γ103, γ104, γ105, γ106, γ107, γ108, γ109) γ202 = convert(T, 2.4992627683300688e+0) @@ -1351,10 +1513,10 @@ function ParsaniKetchesonDeconinck3S94ConstantCache(T, T2) γ209 = convert(T, 2.3596980658341213e-1) γ22end = SVector(γ202, γ203, γ204, γ205, γ206, γ207, γ208, γ209) - γ302 = convert(T, 0.0000000000000000e+0) - γ303 = convert(T, 0.0000000000000000e+0) + γ302 = convert(T, 0.0e+0) + γ303 = convert(T, 0.0e+0) γ304 = convert(T, 7.6209857891449362e-1) - γ305 = convert(T, -1.9811817832965520e-1) + γ305 = convert(T, -1.981181783296552e-1) γ306 = convert(T, -6.2289587091629484e-1) γ307 = convert(T, -3.7522475499063573e-1) γ308 = convert(T, -3.3554373281046146e-1) @@ -1367,8 +1529,8 @@ function ParsaniKetchesonDeconinck3S94ConstantCache(T, T2) δ05 = convert(T, -2.7463346616574083e-2) δ06 = convert(T, -4.3826743572318672e-1) δ07 = convert(T, 1.2735870231839268e+0) - δ08 = convert(T, -6.2947382217730230e-1) - δ09 = convert(T, 0.0000000000000000e+0) + δ08 = convert(T, -6.294738221773023e-1) + δ09 = convert(T, 0.0e+0) δ2end = SVector(δ02, δ03, δ04, δ05, δ06, δ07, δ08, δ09) β1 = convert(T, 2.8363432481011769e-1) @@ -1392,13 +1554,15 @@ function ParsaniKetchesonDeconinck3S94ConstantCache(T, T2) c09 = convert(T2, 9.0515694340066954e-1) c2end = SVector(c02, c03, c04, c05, c06, c07, c08, c09) - LowStorageRK3SConstantCache{8, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end) + return LowStorageRK3SConstantCache{8, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end) end -function alg_cache(alg::ParsaniKetchesonDeconinck3S94, u, rate_prototype, +function alg_cache( + alg::ParsaniKetchesonDeconinck3S94, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) if calck @@ -1406,18 +1570,26 @@ function alg_cache(alg::ParsaniKetchesonDeconinck3S94, u, rate_prototype, else fsalfirst = k end - tab = ParsaniKetchesonDeconinck3S94ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK3SCache(u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::ParsaniKetchesonDeconinck3S94, u, rate_prototype, + tab = ParsaniKetchesonDeconinck3S94ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK3SCache( + u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::ParsaniKetchesonDeconinck3S94, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - ParsaniKetchesonDeconinck3S94ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return ParsaniKetchesonDeconinck3S94ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) end function ParsaniKetchesonDeconinck3S184ConstantCache(T, T2) @@ -1436,11 +1608,12 @@ function ParsaniKetchesonDeconinck3S184ConstantCache(T, T2) γ114 = convert(T, -6.8532953752099512e-1) γ115 = convert(T, 1.0488165551884063e+0) γ116 = convert(T, 8.3647761371829943e-1) - γ117 = convert(T, 1.3087909830445710e+0) + γ117 = convert(T, 1.308790983044571e+0) γ118 = convert(T, 9.0419681700177323e-1) γ12end = SVector( γ102, γ103, γ104, γ105, γ106, γ107, γ108, γ109, γ110, γ111, γ112, γ113, - γ114, γ115, γ116, γ117, γ118) + γ114, γ115, γ116, γ117, γ118 + ) γ202 = convert(T, -1.2891068509748144e-1) γ203 = convert(T, 3.5609406666728954e-1) @@ -1461,10 +1634,11 @@ function ParsaniKetchesonDeconinck3S184ConstantCache(T, T2) γ218 = convert(T, 1.3661459065331649e-1) γ22end = SVector( γ202, γ203, γ204, γ205, γ206, γ207, γ208, γ209, γ210, γ211, γ212, γ213, - γ214, γ215, γ216, γ217, γ218) + γ214, γ215, γ216, γ217, γ218 + ) - γ302 = convert(T, 0.0000000000000000e+0) - γ303 = convert(T, 0.0000000000000000e+0) + γ302 = convert(T, 0.0e+0) + γ303 = convert(T, 0.0e+0) γ304 = convert(T, 2.5583378537249163e-1) γ305 = convert(T, 5.2676794366988289e-1) γ306 = convert(T, -2.5648375621792202e-1) @@ -1477,12 +1651,13 @@ function ParsaniKetchesonDeconinck3S184ConstantCache(T, T2) γ313 = convert(T, 7.5923980038397509e-2) γ314 = convert(T, 2.0635456088664017e-1) γ315 = convert(T, -8.9741032556032857e-2) - γ316 = convert(T, 2.6899932505676190e-2) + γ316 = convert(T, 2.689993250567619e-2) γ317 = convert(T, 4.1882069379552307e-2) γ318 = convert(T, 6.2016148912381761e-2) γ32end = SVector( γ302, γ303, γ304, γ305, γ306, γ307, γ308, γ309, γ310, γ311, γ312, γ313, - γ314, γ315, γ316, γ317, γ318) + γ314, γ315, γ316, γ317, γ318 + ) δ02 = convert(T, 3.5816500441970289e-1) δ03 = convert(T, 5.8208024465093577e-1) @@ -1500,9 +1675,11 @@ function ParsaniKetchesonDeconinck3S184ConstantCache(T, T2) δ15 = convert(T, -3.3874970570335106e-1) δ16 = convert(T, -7.3071238125137772e-1) δ17 = convert(T, 8.3936016960374532e-2) - δ18 = convert(T, 0.0000000000000000e+0) - δ2end = SVector(δ02, δ03, δ04, δ05, δ06, δ07, δ08, δ09, δ10, δ11, δ12, δ13, δ14, δ15, - δ16, δ17, δ18) + δ18 = convert(T, 0.0e+0) + δ2end = SVector( + δ02, δ03, δ04, δ05, δ06, δ07, δ08, δ09, δ10, δ11, δ12, δ13, δ14, δ15, + δ16, δ17, δ18 + ) β1 = convert(T, 1.2384169480626298e-1) β02 = convert(T, 1.0176262534280349e+0) @@ -1522,8 +1699,10 @@ function ParsaniKetchesonDeconinck3S184ConstantCache(T, T2) β16 = convert(T, -1.5508175395461857e-2) β17 = convert(T, -4.0095737929274988e-1) β18 = convert(T, 1.4949678367038011e-1) - β2end = SVector(β02, β03, β04, β05, β06, β07, β08, β09, β10, β11, β12, β13, β14, β15, - β16, β17, β18) + β2end = SVector( + β02, β03, β04, β05, β06, β07, β08, β09, β10, β11, β12, β13, β14, β15, + β16, β17, β18 + ) c02 = convert(T2, 1.2384169480626298e-1) c03 = convert(T2, 1.1574324659554065e+0) @@ -1542,16 +1721,20 @@ function ParsaniKetchesonDeconinck3S184ConstantCache(T, T2) c16 = convert(T2, 1.2755351018003545e+0) c17 = convert(T2, 8.0422507946168564e-1) c18 = convert(T2, 9.7508680250761848e-1) - c2end = SVector(c02, c03, c04, c05, c06, c07, c08, c09, c10, c11, c12, c13, c14, c15, - c16, c17, c18) + c2end = SVector( + c02, c03, c04, c05, c06, c07, c08, c09, c10, c11, c12, c13, c14, c15, + c16, c17, c18 + ) - LowStorageRK3SConstantCache{17, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end) + return LowStorageRK3SConstantCache{17, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end) end -function alg_cache(alg::ParsaniKetchesonDeconinck3S184, u, rate_prototype, +function alg_cache( + alg::ParsaniKetchesonDeconinck3S184, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) if calck @@ -1559,18 +1742,26 @@ function alg_cache(alg::ParsaniKetchesonDeconinck3S184, u, rate_prototype, else fsalfirst = k end - tab = ParsaniKetchesonDeconinck3S184ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK3SCache(u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::ParsaniKetchesonDeconinck3S184, u, rate_prototype, + tab = ParsaniKetchesonDeconinck3S184ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK3SCache( + u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::ParsaniKetchesonDeconinck3S184, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - ParsaniKetchesonDeconinck3S184ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return ParsaniKetchesonDeconinck3S184ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) end function ParsaniKetchesonDeconinck3S105ConstantCache(T, T2) @@ -1582,13 +1773,13 @@ function ParsaniKetchesonDeconinck3S105ConstantCache(T, T2) γ107 = convert(T, 2.5457448699988827e-1) γ108 = convert(T, 3.1258317336761454e-1) γ109 = convert(T, -7.0071148003175443e-1) - γ110 = convert(T, 4.8396209710057070e-1) + γ110 = convert(T, 4.839620971005707e-1) γ12end = SVector(γ102, γ103, γ104, γ105, γ106, γ107, γ108, γ109, γ110) γ202 = convert(T, 6.8714670697294733e-1) γ203 = convert(T, 1.0930247604585732e+0) γ204 = convert(T, 3.2259753823377983e+0) - γ205 = convert(T, 1.0411537008416110e+0) + γ205 = convert(T, 1.041153700841611e+0) γ206 = convert(T, 1.2928214888638039e+0) γ207 = convert(T, 7.3914627692888835e-1) γ208 = convert(T, 1.2391292570651462e-1) @@ -1596,15 +1787,15 @@ function ParsaniKetchesonDeconinck3S105ConstantCache(T, T2) γ210 = convert(T, 5.7127889427161162e-2) γ22end = SVector(γ202, γ203, γ204, γ205, γ206, γ207, γ208, γ209, γ210) - γ302 = convert(T, 0.0000000000000000e+0) - γ303 = convert(T, 0.0000000000000000e+0) + γ302 = convert(T, 0.0e+0) + γ303 = convert(T, 0.0e+0) γ304 = convert(T, -2.3934051593398129e+0) γ305 = convert(T, -1.9028544220991284e+0) γ306 = convert(T, -2.8200422105835639e+0) γ307 = convert(T, -1.8326984641282289e+0) - γ308 = convert(T, -2.1990945108072310e-1) + γ308 = convert(T, -2.199094510807231e-1) γ309 = convert(T, -4.0824306603783045e-1) - γ310 = convert(T, -1.3776697911236280e-1) + γ310 = convert(T, -1.377669791123628e-1) γ32end = SVector(γ302, γ303, γ304, γ305, γ306, γ307, γ308, γ309, γ310) δ02 = convert(T, -1.3317784091400336e-1) @@ -1615,7 +1806,7 @@ function ParsaniKetchesonDeconinck3S105ConstantCache(T, T2) δ07 = convert(T, -1.4494582670831953e+0) δ08 = convert(T, 3.8343138733685103e+0) δ09 = convert(T, 4.1222939718018692e+0) - δ10 = convert(T, 0.0000000000000000e+0) + δ10 = convert(T, 0.0e+0) δ2end = SVector(δ02, δ03, δ04, δ05, δ06, δ07, δ08, δ09, δ10) β1 = convert(T, 2.5978835757039448e-1) @@ -1633,21 +1824,23 @@ function ParsaniKetchesonDeconinck3S105ConstantCache(T, T2) c02 = convert(T2, 2.5978835757039448e-1) c03 = convert(T2, 9.9045731158085557e-2) c04 = convert(T2, 2.1555118823045644e-1) - c05 = convert(T2, 5.0079500784155040e-1) - c06 = convert(T2, 5.5922519148547800e-1) + c05 = convert(T2, 5.007950078415504e-1) + c06 = convert(T2, 5.59225191485478e-1) c07 = convert(T2, 5.4499869734044426e-1) c08 = convert(T2, 7.6152246625852738e-1) c09 = convert(T2, 8.4270620830633836e-1) c10 = convert(T2, 9.1522098071770008e-1) c2end = SVector(c02, c03, c04, c05, c06, c07, c08, c09, c10) - LowStorageRK3SConstantCache{9, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end) + return LowStorageRK3SConstantCache{9, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end) end -function alg_cache(alg::ParsaniKetchesonDeconinck3S105, u, rate_prototype, +function alg_cache( + alg::ParsaniKetchesonDeconinck3S105, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) if calck @@ -1655,30 +1848,38 @@ function alg_cache(alg::ParsaniKetchesonDeconinck3S105, u, rate_prototype, else fsalfirst = k end - tab = ParsaniKetchesonDeconinck3S105ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK3SCache(u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::ParsaniKetchesonDeconinck3S105, u, rate_prototype, + tab = ParsaniKetchesonDeconinck3S105ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK3SCache( + u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::ParsaniKetchesonDeconinck3S105, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - ParsaniKetchesonDeconinck3S105ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return ParsaniKetchesonDeconinck3S105ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) end function ParsaniKetchesonDeconinck3S205ConstantCache(T, T2) - γ102 = convert(T, -1.1682479703229380e+0) + γ102 = convert(T, -1.168247970322938e+0) γ103 = convert(T, -2.5112155037089772e+0) γ104 = convert(T, -5.5259960154735988e-1) - γ105 = convert(T, 2.9243033509511740e-3) + γ105 = convert(T, 2.924303350951174e-3) γ106 = convert(T, -4.7948973385386493e+0) γ107 = convert(T, -5.3095533497183016e+0) γ108 = convert(T, -2.3624194456630736e+0) γ109 = convert(T, 2.0068995756589547e-1) - γ110 = convert(T, -1.4985808661597710e+0) + γ110 = convert(T, -1.498580866159771e+0) γ111 = convert(T, 4.8941228502377687e-1) γ112 = convert(T, -1.0387512755259576e-1) γ113 = convert(T, -1.3287664273288191e-1) @@ -1691,7 +1892,8 @@ function ParsaniKetchesonDeconinck3S205ConstantCache(T, T2) γ120 = convert(T, 1.5297157134040762e+0) γ12end = SVector( γ102, γ103, γ104, γ105, γ106, γ107, γ108, γ109, γ110, γ111, γ112, γ113, - γ114, γ115, γ116, γ117, γ118, γ119, γ120) + γ114, γ115, γ116, γ117, γ118, γ119, γ120 + ) γ202 = convert(T, 8.8952052154583572e-1) γ203 = convert(T, 8.8988129100385194e-1) @@ -1703,9 +1905,9 @@ function ParsaniKetchesonDeconinck3S205ConstantCache(T, T2) γ209 = convert(T, 1.1181089682044856e-1) γ210 = convert(T, 2.7881272382085232e-1) γ211 = convert(T, 4.9032886260666715e-2) - γ212 = convert(T, 4.1871051065897870e-2) + γ212 = convert(T, 4.187105106589787e-2) γ213 = convert(T, 4.4602463796686219e-2) - γ214 = convert(T, 1.4897271251154750e-2) + γ214 = convert(T, 1.489727125115475e-2) γ215 = convert(T, 2.6244269699436817e-1) γ216 = convert(T, -4.7486056986590294e-3) γ217 = convert(T, 2.3219312682036197e-2) @@ -1714,13 +1916,14 @@ function ParsaniKetchesonDeconinck3S205ConstantCache(T, T2) γ220 = convert(T, 2.4345446089014514e-2) γ22end = SVector( γ202, γ203, γ204, γ205, γ206, γ207, γ208, γ209, γ210, γ211, γ212, γ213, - γ214, γ215, γ216, γ217, γ218, γ219, γ220) + γ214, γ215, γ216, γ217, γ218, γ219, γ220 + ) - γ302 = convert(T, 0.0000000000000000e+0) - γ303 = convert(T, 0.0000000000000000e+0) + γ302 = convert(T, 0.0e+0) + γ303 = convert(T, 0.0e+0) γ304 = convert(T, 1.9595487007932735e-1) γ305 = convert(T, -6.9871675039100595e-5) - γ306 = convert(T, 1.0592231169810050e-1) + γ306 = convert(T, 1.059223116981005e-1) γ307 = convert(T, 1.0730426871909635e+0) γ308 = convert(T, 8.9257826744389124e-1) γ309 = convert(T, -1.4078912484894415e-1) @@ -1737,29 +1940,32 @@ function ParsaniKetchesonDeconinck3S205ConstantCache(T, T2) γ320 = convert(T, -1.0558095282893749e+0) γ32end = SVector( γ302, γ303, γ304, γ305, γ306, γ307, γ308, γ309, γ310, γ311, γ312, γ313, - γ314, γ315, γ316, γ317, γ318, γ319, γ320) + γ314, γ315, γ316, γ317, γ318, γ319, γ320 + ) δ02 = convert(T, 1.4375468781258596e+0) δ03 = convert(T, 1.5081653637261594e+0) δ04 = convert(T, -1.4575347066062688e-1) δ05 = convert(T, 3.1495761082838158e-1) δ06 = convert(T, 3.5505919368536931e-1) - δ07 = convert(T, 2.3616389374566960e-1) + δ07 = convert(T, 2.361638937456696e-1) δ08 = convert(T, 1.0267488547302055e-1) δ09 = convert(T, 3.5991243524519438e+0) δ10 = convert(T, 1.5172890003890782e+0) δ11 = convert(T, 1.8171662741779953e+0) δ12 = convert(T, 2.8762263521436831e+0) δ13 = convert(T, 4.6350154228218754e-1) - δ14 = convert(T, 1.5573122110727220e+0) + δ14 = convert(T, 1.557312211072722e+0) δ15 = convert(T, 2.0001066778080254e+0) δ16 = convert(T, 9.1690694855534305e-1) δ17 = convert(T, 2.0474618401365854e+0) δ18 = convert(T, -3.2336329115436924e-1) δ19 = convert(T, 3.2899060754742177e-1) - δ20 = convert(T, 0.0000000000000000e+0) - δ2end = SVector(δ02, δ03, δ04, δ05, δ06, δ07, δ08, δ09, δ10, δ11, δ12, δ13, δ14, δ15, - δ16, δ17, δ18, δ19, δ20) + δ20 = convert(T, 0.0e+0) + δ2end = SVector( + δ02, δ03, δ04, δ05, δ06, δ07, δ08, δ09, δ10, δ11, δ12, δ13, δ14, δ15, + δ16, δ17, δ18, δ19, δ20 + ) β1 = convert(T, 1.7342385375780556e-1) β02 = convert(T, 2.8569004728564801e-1) @@ -1768,7 +1974,7 @@ function ParsaniKetchesonDeconinck3S205ConstantCache(T, T2) β05 = convert(T, 4.9137180740403122e-4) β06 = convert(T, 4.7033584446956857e-2) β07 = convert(T, 4.4539998128170821e-1) - β08 = convert(T, 1.2259824887343720e+0) + β08 = convert(T, 1.225982488734372e+0) β09 = convert(T, 2.0616463985024421e-2) β10 = convert(T, 1.5941162575324802e-1) β11 = convert(T, 1.2953803678226099e+0) @@ -1780,9 +1986,11 @@ function ParsaniKetchesonDeconinck3S205ConstantCache(T, T2) β17 = convert(T, 6.5891625628040993e-4) β18 = convert(T, 8.3534647700054046e-2) β19 = convert(T, 9.8972579458252483e-2) - β20 = convert(T, 4.3010116145097040e-2) - β2end = SVector(β02, β03, β04, β05, β06, β07, β08, β09, β10, β11, β12, β13, β14, β15, - β16, β17, β18, β19, β20) + β20 = convert(T, 4.301011614509704e-2) + β2end = SVector( + β02, β03, β04, β05, β06, β07, β08, β09, β10, β11, β12, β13, β14, β15, + β16, β17, β18, β19, β20 + ) c02 = convert(T2, 1.7342385375780556e-1) c03 = convert(T2, 3.0484982420032158e-1) @@ -1792,27 +2000,31 @@ function ParsaniKetchesonDeconinck3S205ConstantCache(T, T2) c07 = convert(T2, 1.8602224049074517e-1) c08 = convert(T2, 2.8426620035751449e-1) c09 = convert(T2, 9.5094727548792268e-1) - c10 = convert(T2, 6.8046501070096010e-1) + c10 = convert(T2, 6.804650107009601e-1) c11 = convert(T2, 5.9705366562360063e-1) c12 = convert(T2, 1.8970821645077285e+0) c13 = convert(T2, 2.9742664004529606e-1) - c14 = convert(T2, 6.0813463700134940e-1) + c14 = convert(T2, 6.081346370013494e-1) c15 = convert(T2, 7.3080004188477765e-1) c16 = convert(T2, 9.1656999044951792e-1) - c17 = convert(T2, 1.4309687554614530e+0) + c17 = convert(T2, 1.430968755461453e+0) c18 = convert(T2, 4.1043824968249148e-1) c19 = convert(T2, 8.4898255952298962e-1) c20 = convert(T2, 3.3543896258348421e-1) - c2end = SVector(c02, c03, c04, c05, c06, c07, c08, c09, c10, c11, c12, c13, c14, c15, - c16, c17, c18, c19, c20) + c2end = SVector( + c02, c03, c04, c05, c06, c07, c08, c09, c10, c11, c12, c13, c14, c15, + c16, c17, c18, c19, c20 + ) - LowStorageRK3SConstantCache{19, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end) + return LowStorageRK3SConstantCache{19, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end) end -function alg_cache(alg::ParsaniKetchesonDeconinck3S205, u, rate_prototype, +function alg_cache( + alg::ParsaniKetchesonDeconinck3S205, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) if calck @@ -1820,18 +2032,26 @@ function alg_cache(alg::ParsaniKetchesonDeconinck3S205, u, rate_prototype, else fsalfirst = k end - tab = ParsaniKetchesonDeconinck3S205ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK3SCache(u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::ParsaniKetchesonDeconinck3S205, u, rate_prototype, + tab = ParsaniKetchesonDeconinck3S205ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK3SCache( + u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::ParsaniKetchesonDeconinck3S205, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - ParsaniKetchesonDeconinck3S205ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return ParsaniKetchesonDeconinck3S205ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) end # 3S+ low storage methods: 3S methods adding another memory location for the embedded method (non-FSAL version) @@ -1840,8 +2060,10 @@ end # Optimized Runge-Kutta Methods with Automatic Step Size Control for # Compressible Computational Fluid Dynamics # [arXiv:2104.06836](https://arxiv.org/abs/2104.06836) -@cache struct LowStorageRK3SpCache{uType, rateType, uNoUnitsType, TabType, StageLimiter, - StepLimiter, Thread} <: LowStorageRKMutableCache +@cache struct LowStorageRK3SpCache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, + StepLimiter, Thread, + } <: LowStorageRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -1869,68 +2091,95 @@ struct LowStorageRK3SpConstantCache{N, T, T2} <: OrdinaryDiffEqConstantCache end function RDPK3Sp35ConstantCache(T, T2) - γ12end = SVector(convert(T, big"2.587669070352079020144955303389306026e-01"), + γ12end = SVector( + convert(T, big"2.587669070352079020144955303389306026e-01"), convert(T, big"-1.324366873994502973977035353758550057e-01"), convert(T, big"5.055601231460399101814291350373559483e-02"), - convert(T, big"5.670552807902877312521811889846000976e-01")) + convert(T, big"5.670552807902877312521811889846000976e-01") + ) - γ22end = SVector(convert(T, big"5.528418745102160639901976698795928733e-01"), + γ22end = SVector( + convert(T, big"5.528418745102160639901976698795928733e-01"), convert(T, big"6.731844400389673824374042790213570079e-01"), convert(T, big"2.803103804507635075215805236096803381e-01"), - convert(T, big"5.521508873507393276457754945308880998e-01")) + convert(T, big"5.521508873507393276457754945308880998e-01") + ) - γ32end = SVector(convert(T, big"0.000000000000000000000000000000000000e+00"), + γ32end = SVector( + convert(T, big"0.000000000000000000000000000000000000e+00"), convert(T, big"0.000000000000000000000000000000000000e+00"), convert(T, big"2.752585813446636957256614568573008811e-01"), - convert(T, big"-8.950548709279785077579454232514633376e-01")) + convert(T, big"-8.950548709279785077579454232514633376e-01") + ) - δ2end = SVector(convert(T, big"3.407687209321455242558804921815861422e-01"), + δ2end = SVector( + convert(T, big"3.407687209321455242558804921815861422e-01"), convert(T, big"3.414399280584625023244387687873774697e-01"), convert(T, big"7.229302732875589702087936723400941329e-01"), - convert(T, big"0.000000000000000000000000000000000000e+00")) + convert(T, big"0.000000000000000000000000000000000000e+00") + ) β1 = convert(T, big"2.300285062878154351930669430512780706e-01") - β2end = SVector(convert(T, big"3.021457892454169700189445968126242994e-01"), + β2end = SVector( + convert(T, big"3.021457892454169700189445968126242994e-01"), convert(T, big"8.025601039472704213300183888573974531e-01"), convert(T, big"4.362158997637629844305216319994356355e-01"), - convert(T, big"1.129268494470295369172265188216779157e-01")) + convert(T, big"1.129268494470295369172265188216779157e-01") + ) - c2end = SVector(convert(T, big"2.300285062878154351930669430512780706e-01"), + c2end = SVector( + convert(T, big"2.300285062878154351930669430512780706e-01"), convert(T, big"4.050049049262914975700372321130661410e-01"), convert(T, big"8.947823877926760224705450466361360720e-01"), - convert(T, big"7.235108137218888081489570284485201518e-01")) + convert(T, big"7.235108137218888081489570284485201518e-01") + ) # difference of the usual bhat coefficients and the main b coefficients - bhat1 = convert(T, + bhat1 = convert( + T, big"1.046363371354093758897668305991705199e-01" - - - big"1.147931563369900682037379182772608287e-01") + - + big"1.147931563369900682037379182772608287e-01" + ) bhat2end = SVector( - convert(T, + convert( + T, big"9.520431574956758809511173383346476348e-02" - - - big"8.933559295232859013880114997436974196e-02"), - convert(T, + - + big"8.933559295232859013880114997436974196e-02" + ), + convert( + T, big"4.482446645568668405072421350300379357e-01" - - - big"4.355858717379231779899161991033964256e-01"), - convert(T, + - + big"4.355858717379231779899161991033964256e-01" + ), + convert( + T, big"2.449030295461310135957132640369862245e-01" - - - big"2.473585295257286267503182138232950881e-01"), - convert(T, + - + big"2.473585295257286267503182138232950881e-01" + ), + convert( + T, big"1.070116530120251819121660365003405564e-01" - - - big"1.129268494470295369172265188216779157e-01")) + - + big"1.129268494470295369172265188216779157e-01" + ) + ) - LowStorageRK3SpConstantCache{4, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end, - bhat1, bhat2end) + return LowStorageRK3SpConstantCache{4, T, T2}( + γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end, + bhat1, bhat2end + ) end -function alg_cache(alg::RDPK3Sp35, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RDPK3Sp35, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k = zero(rate_prototype) if calck fsalfirst = zero(rate_prototype) @@ -1946,121 +2195,159 @@ function alg_cache(alg::RDPK3Sp35, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmp, false) end tab = RDPK3Sp35ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - LowStorageRK3SpCache( + return LowStorageRK3SpCache( u, uprev, fsalfirst, k, utilde, tmp, atmp, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::RDPK3Sp35, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RDPK3Sp35, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - RDPK3Sp35ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return RDPK3Sp35ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function RDPK3Sp49ConstantCache(T, T2) - γ12end = SVector(convert(T, big"-4.655641301259180308677051498071354582e+00"), + γ12end = SVector( + convert(T, big"-4.655641301259180308677051498071354582e+00"), convert(T, big"-7.720264924836063859141482018013692338e-01"), convert(T, big"-4.024423213419724605695005429153112050e+00"), convert(T, big"-2.129685246739018613087466942802498152e-02"), convert(T, big"-2.435022519234470128602335652131234586e+00"), convert(T, big"1.985627480986167686791439120784668251e-02"), convert(T, big"-2.810790112885283952929218377438668784e-01"), - convert(T, big"1.689434895835535695524003319503844110e-01")) + convert(T, big"1.689434895835535695524003319503844110e-01") + ) - γ22end = SVector(convert(T, big"2.499262752607825957145627300817258023e+00"), + γ22end = SVector( + convert(T, big"2.499262752607825957145627300817258023e+00"), convert(T, big"5.866820365436136799319929406678132638e-01"), convert(T, big"1.205141365412670762568835277881144391e+00"), convert(T, big"3.474793796700868848597960521248007941e-01"), convert(T, big"1.321346140128723105871355808477092220e+00"), convert(T, big"3.119636324379370564023292317172847140e-01"), convert(T, big"4.351419055894087609560896967082486864e-01"), - convert(T, big"2.359698299440788299161958168555704234e-01")) + convert(T, big"2.359698299440788299161958168555704234e-01") + ) - γ32end = SVector(convert(T, big"0.000000000000000000000000000000000000e+00"), + γ32end = SVector( + convert(T, big"0.000000000000000000000000000000000000e+00"), convert(T, big"0.000000000000000000000000000000000000e+00"), convert(T, big"7.621037111138170045618771082985664430e-01"), convert(T, big"-1.981182159087218433914909510116664154e-01"), convert(T, big"-6.228960706317566993192689455719570179e-01"), convert(T, big"-3.752246993432626328289874575355102038e-01"), convert(T, big"-3.355436539000946543242869676125143358e-01"), - convert(T, big"-4.560963110717484359015342341157302403e-02")) + convert(T, big"-4.560963110717484359015342341157302403e-02") + ) - δ2end = SVector(convert(T, big"1.262923854387806460989545005598562667e+00"), + δ2end = SVector( + convert(T, big"1.262923854387806460989545005598562667e+00"), convert(T, big"7.574967177560872438940839460448329992e-01"), convert(T, big"5.163591158111222863455531895152351544e-01"), convert(T, big"-2.746333792042827389548936599648122146e-02"), convert(T, big"-4.382674653941770848797864513655752318e-01"), convert(T, big"1.273587103668392811985704533534301656e+00"), convert(T, big"-6.294740045442794829622796613103492913e-01"), - convert(T, big"0.000000000000000000000000000000000000e+00")) + convert(T, big"0.000000000000000000000000000000000000e+00") + ) β1 = convert(T, big"2.836343531977826022543660465926414772e-01") - β2end = SVector(convert(T, big"9.736497978646965372894268287659773644e-01"), + β2end = SVector( + convert(T, big"9.736497978646965372894268287659773644e-01"), convert(T, big"3.382358566377620380505126936670933370e-01"), convert(T, big"-3.584937820217850715182820651063453804e-01"), convert(T, big"-4.113955814725134294322006403954822487e-03"), convert(T, big"1.427968962196019024010757034274849198e+00"), convert(T, big"1.808467712038743032991177525728915926e-02"), convert(T, big"1.605771316794521018947553625079465692e-01"), - convert(T, big"2.952226811394310028003810072027839487e-01")) + convert(T, big"2.952226811394310028003810072027839487e-01") + ) - c2end = SVector(convert(T, big"2.836343531977826022543660465926414772e-01"), + c2end = SVector( + convert(T, big"2.836343531977826022543660465926414772e-01"), convert(T, big"5.484073767552486705240014599676811834e-01"), convert(T, big"3.687229456675706936558667052479014150e-01"), convert(T, big"-6.806119916032093175251948474173648331e-01"), convert(T, big"3.518526451892056368706593492732753284e-01"), convert(T, big"1.665941920204672094647868254892387293e+00"), convert(T, big"9.715276989307335935187466054546761665e-01"), - convert(T, big"9.051569554420045339601721625247585643e-01")) + convert(T, big"9.051569554420045339601721625247585643e-01") + ) # difference of the usual bhat coefficients and the main b coefficients - bhat1 = convert(T, + bhat1 = convert( + T, big"4.550655927970944948340364817140593012e-02" - - - big"4.503731969165884304041981629148469971e-02") + - + big"4.503731969165884304041981629148469971e-02" + ) bhat2end = SVector( - convert(T, + convert( + T, big"1.175968310492638562142460384341959193e-01" - - - big"1.859217322011968812563859888433403777e-01"), - convert(T, + - + big"1.859217322011968812563859888433403777e-01" + ), + convert( + T, big"3.658257330515213200375475084421083608e-02" - - - big"3.329727509207630932171676116314110008e-02"), - convert(T, + - + big"3.329727509207630932171676116314110008e-02" + ), + convert( + T, big"-5.311555834355629559010061596928357525e-03" - - - big"-4.784222621050198909820741390895649698e-03"), - convert(T, + - + big"-4.784222621050198909820741390895649698e-03" + ), + convert( + T, big"5.178250012713127329531367677410650996e-03" - - - big"4.055848062637567925908043629915811671e-03"), - convert(T, + - + big"4.055848062637567925908043629915811671e-03" + ), + convert( + T, big"4.954639022118682638697706200022961443e-01" - - - big"4.185027999682794463309031355073933444e-01"), - convert(T, + - + big"4.185027999682794463309031355073933444e-01" + ), + convert( + T, big"-5.999303132737865921441409466809521699e-03" - - - big"-4.381894507474277848407591859322000026e-03"), - convert(T, + - + big"-4.381894507474277848407591859322000026e-03" + ), + convert( + T, big"9.405093434568315929035250835218733824e-02" - - - big"2.712846097324442608251358061215836749e-02"), - convert(T, + - + big"2.712846097324442608251358061215836749e-02" + ), + convert( + T, big"2.169318087627035072893925375820310602e-01" - - - big"2.952226811394310028003810072027839487e-01")) + - + big"2.952226811394310028003810072027839487e-01" + ) + ) - LowStorageRK3SpConstantCache{8, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end, - bhat1, bhat2end) + return LowStorageRK3SpConstantCache{8, T, T2}( + γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end, + bhat1, bhat2end + ) end -function alg_cache(alg::RDPK3Sp49, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RDPK3Sp49, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k = zero(rate_prototype) if calck fsalfirst = zero(rate_prototype) @@ -2076,20 +2363,24 @@ function alg_cache(alg::RDPK3Sp49, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmp, false) end tab = RDPK3Sp49ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - LowStorageRK3SpCache( + return LowStorageRK3SpCache( u, uprev, fsalfirst, k, utilde, tmp, atmp, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::RDPK3Sp49, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RDPK3Sp49, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - RDPK3Sp49ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return RDPK3Sp49ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function RDPK3Sp510ConstantCache(T, T2) - γ12end = SVector(convert(T, big"4.043660078504695837542588769963326988e-01"), + γ12end = SVector( + convert(T, big"4.043660078504695837542588769963326988e-01"), convert(T, big"-8.503427464263185087039788184485627962e-01"), convert(T, big"-6.950894167072419998080989313353063399e+00"), convert(T, big"9.238765225328278557805080247596562995e-01"), @@ -2097,9 +2388,11 @@ function RDPK3Sp510ConstantCache(T, T2) convert(T, big"2.545744869966347362604059848503340890e-01"), convert(T, big"3.125831733863168874151935287174374515e-01"), convert(T, big"-7.007114800567584871263283872289072079e-01"), - convert(T, big"4.839620970980726631935174740648996010e-01")) + convert(T, big"4.839620970980726631935174740648996010e-01") + ) - γ22end = SVector(convert(T, big"6.871467069752345566001768382316915820e-01"), + γ22end = SVector( + convert(T, big"6.871467069752345566001768382316915820e-01"), convert(T, big"1.093024760468898686510433898645775908e+00"), convert(T, big"3.225975382330161123625348062949430509e+00"), convert(T, big"1.041153700841396427100436517666787823e+00"), @@ -2107,9 +2400,11 @@ function RDPK3Sp510ConstantCache(T, T2) convert(T, big"7.391462769297006312785029455392854586e-01"), convert(T, big"1.239129257039300081860496157739352186e-01"), convert(T, big"1.842753479366766790220633908793933781e-01"), - convert(T, big"5.712788942697077644959290025755003720e-02")) + convert(T, big"5.712788942697077644959290025755003720e-02") + ) - γ32end = SVector(convert(T, big"0.000000000000000000000000000000000000e+00"), + γ32end = SVector( + convert(T, big"0.000000000000000000000000000000000000e+00"), convert(T, big"0.000000000000000000000000000000000000e+00"), convert(T, big"-2.393405159342139386425044844626597490e+00"), convert(T, big"-1.902854422095986544338294743445530533e+00"), @@ -2117,9 +2412,11 @@ function RDPK3Sp510ConstantCache(T, T2) convert(T, big"-1.832698464130564949123807896975136336e+00"), convert(T, big"-2.199094510750697865007677774395365522e-01"), convert(T, big"-4.082430660384876496971887725512427800e-01"), - convert(T, big"-1.377669791121207993339861855818881150e-01")) + convert(T, big"-1.377669791121207993339861855818881150e-01") + ) - δ2end = SVector(convert(T, big"-1.331778409133849616712007380176762548e-01"), + δ2end = SVector( + convert(T, big"-1.331778409133849616712007380176762548e-01"), convert(T, big"8.260422785246030254485064732649153253e-01"), convert(T, big"1.513700430513332405798616943654007796e+00"), convert(T, big"-1.305810063177048110528482211982726539e+00"), @@ -2127,10 +2424,12 @@ function RDPK3Sp510ConstantCache(T, T2) convert(T, big"-1.449458267074592489788800461540171106e+00"), convert(T, big"3.834313873320957483471400258279635203e+00"), convert(T, big"4.122293971923324492772059928094971199e+00"), - convert(T, big"0.000000000000000000000000000000000000e+00")) + convert(T, big"0.000000000000000000000000000000000000e+00") + ) β1 = convert(T, big"2.597883575710995826783320802193635406e-01") - β2end = SVector(convert(T, big"1.777008800169541694837687556103565007e-02"), + β2end = SVector( + convert(T, big"1.777008800169541694837687556103565007e-02"), convert(T, big"2.481636637328140606807905234325691851e-01"), convert(T, big"7.941736827560429420202759490815682546e-01"), convert(T, big"3.885391296871822541486945325814526190e-01"), @@ -2138,9 +2437,11 @@ function RDPK3Sp510ConstantCache(T, T2) convert(T, big"1.587517379462528932413419955691782412e-01"), convert(T, big"1.650605631567659573994022720500446501e-01"), convert(T, big"2.118093299943235065178000892467421832e-01"), - convert(T, big"1.559392340339606299335442956580114440e-01")) + convert(T, big"1.559392340339606299335442956580114440e-01") + ) - c2end = SVector(convert(T, big"2.597883575710995826783320802193635406e-01"), + c2end = SVector( + convert(T, big"2.597883575710995826783320802193635406e-01"), convert(T, big"9.904573115730917688557891428202061598e-02"), convert(T, big"2.155511882303785204133426661931565216e-01"), convert(T, big"5.007950078421880417512789524851012021e-01"), @@ -2148,59 +2449,85 @@ function RDPK3Sp510ConstantCache(T, T2) convert(T, big"5.449986973408778242805929551952000165e-01"), convert(T, big"7.615224662599497796472095353126697300e-01"), convert(T, big"8.427062083059167761623893618875787414e-01"), - convert(T, big"9.152209807185253394871325258038753352e-01")) + convert(T, big"9.152209807185253394871325258038753352e-01") + ) # difference of the usual bhat coefficients and the main b coefficients - bhat1 = convert(T, + bhat1 = convert( + T, big"5.734588484676193812418453938089759359e-02" - - - big"-2.280102305596364773323878383881954511e-03") + - + big"-2.280102305596364773323878383881954511e-03" + ) bhat2end = SVector( - convert(T, + convert( + T, big"1.971447518039733870541652912891291496e-02" - - - big"1.407393020823230537861040991952849386e-02"), - convert(T, + - + big"1.407393020823230537861040991952849386e-02" + ), + convert( + T, big"7.215296605683716720707226840456658773e-02" - - - big"2.332691794172822486743039657924919496e-01"), - convert(T, + - + big"2.332691794172822486743039657924919496e-01" + ), + convert( + T, big"1.739659489807939956977075317768151880e-01" - - - big"4.808266700465181307162297999657715930e-02"), - convert(T, + - + big"4.808266700465181307162297999657715930e-02" + ), + convert( + T, big"3.703693600445487815015171515640585668e-01" - - - big"4.119003221139622842134291677033040683e-01"), - convert(T, + - + big"4.119003221139622842134291677033040683e-01" + ), + convert( + T, big"-1.215599039055065009827765147821222534e-01" - - - big"-1.291461071364752805327361051196128312e-01"), - convert(T, + - + big"-1.291461071364752805327361051196128312e-01" + ), + convert( + T, big"1.180372945491121604465067725859678821e-01" - - - big"1.220746011038579789984601943748468541e-01"), - convert(T, + - + big"1.220746011038579789984601943748468541e-01" + ), + convert( + T, big"4.155688823364870056536983972605056553e-02" - - - big"4.357858803113387764356338334851554715e-02"), - convert(T, + - + big"4.357858803113387764356338334851554715e-02" + ), + convert( + T, big"1.227886627910379901351569893551486490e-01" - - - big"1.025076875289905073925255867102192694e-01"), - convert(T, + - + big"1.025076875289905073925255867102192694e-01" + ), + convert( + T, big"1.456284232223684285998448928597043056e-01" - - - big"1.559392340339606299335442956580114440e-01")) + - + big"1.559392340339606299335442956580114440e-01" + ) + ) - LowStorageRK3SpConstantCache{9, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end, - bhat1, bhat2end) + return LowStorageRK3SpConstantCache{9, T, T2}( + γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end, + bhat1, bhat2end + ) end -function alg_cache(alg::RDPK3Sp510, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RDPK3Sp510, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k = zero(rate_prototype) if calck fsalfirst = zero(rate_prototype) @@ -2215,18 +2542,23 @@ function alg_cache(alg::RDPK3Sp510, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) end - tab = RDPK3Sp510ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK3SpCache( + tab = RDPK3Sp510ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK3SpCache( u, uprev, fsalfirst, k, utilde, tmp, atmp, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::RDPK3Sp510, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RDPK3Sp510, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - RDPK3Sp510ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return RDPK3Sp510ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end # 3S+ FSAL low storage methods: 3S methods adding another memory location for the embedded method (FSAL version) @@ -2236,8 +2568,9 @@ end # Compressible Computational Fluid Dynamics # [arXiv:2104.06836](https://arxiv.org/abs/2104.06836) @cache struct LowStorageRK3SpFSALCache{ - uType, rateType, uNoUnitsType, TabType, StageLimiter, - StepLimiter, Thread} <: LowStorageRKMutableCache + uType, rateType, uNoUnitsType, TabType, StageLimiter, + StepLimiter, Thread, + } <: LowStorageRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -2266,69 +2599,96 @@ struct LowStorageRK3SpFSALConstantCache{N, T, T2} <: OrdinaryDiffEqConstantCache end function RDPK3SpFSAL35ConstantCache(T, T2) - γ12end = SVector(convert(T, big"2.587771979725733308135192812685323706e-01"), + γ12end = SVector( + convert(T, big"2.587771979725733308135192812685323706e-01"), convert(T, big"-1.324380360140723382965420909764953437e-01"), convert(T, big"5.056033948190826045833606441415585735e-02"), - convert(T, big"5.670532000739313812633197158607642990e-01")) + convert(T, big"5.670532000739313812633197158607642990e-01") + ) - γ22end = SVector(convert(T, big"5.528354909301389892439698870483746541e-01"), + γ22end = SVector( + convert(T, big"5.528354909301389892439698870483746541e-01"), convert(T, big"6.731871608203061824849561782794643600e-01"), convert(T, big"2.803103963297672407841316576323901761e-01"), - convert(T, big"5.521525447020610386070346724931300367e-01")) + convert(T, big"5.521525447020610386070346724931300367e-01") + ) - γ32end = SVector(convert(T, big"0.000000000000000000000000000000000000e+00"), + γ32end = SVector( + convert(T, big"0.000000000000000000000000000000000000e+00"), convert(T, big"0.000000000000000000000000000000000000e+00"), convert(T, big"2.752563273304676380891217287572780582e-01"), - convert(T, big"-8.950526174674033822276061734289327568e-01")) + convert(T, big"-8.950526174674033822276061734289327568e-01") + ) - δ2end = SVector(convert(T, big"3.407655879334525365094815965895763636e-01"), + δ2end = SVector( + convert(T, big"3.407655879334525365094815965895763636e-01"), convert(T, big"3.414382655003386206551709871126405331e-01"), convert(T, big"7.229275366787987419692007421895451953e-01"), - convert(T, big"0.000000000000000000000000000000000000e+00")) + convert(T, big"0.000000000000000000000000000000000000e+00") + ) β1 = convert(T, big"2.300298624518076223899418286314123354e-01") - β2end = SVector(convert(T, big"3.021434166948288809034402119555380003e-01"), + β2end = SVector( + convert(T, big"3.021434166948288809034402119555380003e-01"), convert(T, big"8.025606185416310937583009085873554681e-01"), convert(T, big"4.362158943603440930655148245148766471e-01"), - convert(T, big"1.129272530455059129782111662594436580e-01")) + convert(T, big"1.129272530455059129782111662594436580e-01") + ) - c2end = SVector(convert(T, big"2.300298624518076223899418286314123354e-01"), + c2end = SVector( + convert(T, big"2.300298624518076223899418286314123354e-01"), convert(T, big"4.050046072094990912268498160116125481e-01"), convert(T, big"8.947822893693433545220710894560512805e-01"), - convert(T, big"7.235136928826589010272834603680114769e-01")) + convert(T, big"7.235136928826589010272834603680114769e-01") + ) # difference of the usual bhat coefficients and the main b coefficients - bhat1 = convert(T, + bhat1 = convert( + T, big"9.484166705035703392326247283838082847e-02" - - - big"1.147935971023541171733601324486904546e-01") + - + big"1.147935971023541171733601324486904546e-01" + ) bhat2end = SVector( - convert(T, + convert( + T, big"1.726371339430353766966762629176676070e-01" - - - big"8.933442853113315592708384523126474636e-02"), - convert(T, + - + big"8.933442853113315592708384523126474636e-02" + ), + convert( + T, big"3.998243189084371024483169698618455770e-01" - - - big"4.355871025008616992483722693795608738e-01"), - convert(T, + - + big"4.355871025008616992483722693795608738e-01" + ), + convert( + T, big"1.718016807580178450618829007973835152e-01" - - - big"2.473576188201451146729725866810402672e-01"), - convert(T, + - + big"2.473576188201451146729725866810402672e-01" + ), + convert( + T, big"5.881914422155740300718268359027168467e-02" - - - big"1.129272530455059129782111662594436580e-01")) + - + big"1.129272530455059129782111662594436580e-01" + ) + ) bhatfsal = convert(T, big"1.020760551185952388626787099944507877e-01") - LowStorageRK3SpFSALConstantCache{4, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, - c2end, bhat1, bhat2end, bhatfsal) + return LowStorageRK3SpFSALConstantCache{4, T, T2}( + γ12end, γ22end, γ32end, δ2end, β1, β2end, + c2end, bhat1, bhat2end, bhatfsal + ) end -function alg_cache(alg::RDPK3SpFSAL35, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RDPK3SpFSAL35, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k = zero(rate_prototype) if calck fsalfirst = zero(rate_prototype) @@ -2343,123 +2703,164 @@ function alg_cache(alg::RDPK3SpFSAL35, u, rate_prototype, ::Type{uEltypeNoUnits} atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) end - tab = RDPK3SpFSAL35ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK3SpFSALCache(u, uprev, fsalfirst, k, utilde, tmp, atmp, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::RDPK3SpFSAL35, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = RDPK3SpFSAL35ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK3SpFSALCache( + u, uprev, fsalfirst, k, utilde, tmp, atmp, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::RDPK3SpFSAL35, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - RDPK3SpFSAL35ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return RDPK3SpFSAL35ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function RDPK3SpFSAL49ConstantCache(T, T2) - γ12end = SVector(convert(T, big"-4.655641447335068552684422206224169103e+00"), + γ12end = SVector( + convert(T, big"-4.655641447335068552684422206224169103e+00"), convert(T, big"-7.720265099645871829248487209517314217e-01"), convert(T, big"-4.024436690519806086742256154738379161e+00"), convert(T, big"-2.129676284018530966221583708648634733e-02"), convert(T, big"-2.435022509790109546199372365866450709e+00"), convert(T, big"1.985627297131987000579523283542615256e-02"), convert(T, big"-2.810791146791038566946663374735713961e-01"), - convert(T, big"1.689434168754859644351230590422137972e-01")) + convert(T, big"1.689434168754859644351230590422137972e-01") + ) - γ22end = SVector(convert(T, big"2.499262792574495009336242992898153462e+00"), + γ22end = SVector( + convert(T, big"2.499262792574495009336242992898153462e+00"), convert(T, big"5.866820377718875577451517985847920081e-01"), convert(T, big"1.205146086523094569925592464380295241e+00"), convert(T, big"3.474793722186732780030762737753849272e-01"), convert(T, big"1.321346060965113109321230804210670518e+00"), convert(T, big"3.119636464694193615946633676950358444e-01"), convert(T, big"4.351419539684379261368971206040518552e-01"), - convert(T, big"2.359698130028753572503744518147537768e-01")) + convert(T, big"2.359698130028753572503744518147537768e-01") + ) - γ32end = SVector(convert(T, big"0.000000000000000000000000000000000000e+00"), + γ32end = SVector( + convert(T, big"0.000000000000000000000000000000000000e+00"), convert(T, big"0.000000000000000000000000000000000000e+00"), convert(T, big"7.621006678721315291614677352949377871e-01"), convert(T, big"-1.981182504339400567765766904309673119e-01"), convert(T, big"-6.228959218699007450469629366684127462e-01"), convert(T, big"-3.752248380775956442989480369774937099e-01"), convert(T, big"-3.355438309135169811915662336248989661e-01"), - convert(T, big"-4.560955005031121479972862973705108039e-02")) + convert(T, big"-4.560955005031121479972862973705108039e-02") + ) - δ2end = SVector(convert(T, big"1.262923876648114432874834923838556100e+00"), + δ2end = SVector( + convert(T, big"1.262923876648114432874834923838556100e+00"), convert(T, big"7.574967189685911558308119415539596711e-01"), convert(T, big"5.163589453140728104667573195005629833e-01"), convert(T, big"-2.746327421802609557034437892013640319e-02"), convert(T, big"-4.382673178127944142238606608356542890e-01"), convert(T, big"1.273587294602656522645691372699677063e+00"), convert(T, big"-6.294740283927400326554066998751383342e-01"), - convert(T, big"0.000000000000000000000000000000000000e+00")) + convert(T, big"0.000000000000000000000000000000000000e+00") + ) β1 = convert(T, big"2.836343005184365275160654678626695428e-01") - β2end = SVector(convert(T, big"9.736500104654741223716056170419660217e-01"), + β2end = SVector( + convert(T, big"9.736500104654741223716056170419660217e-01"), convert(T, big"3.382359225242515288768487569778320563e-01"), convert(T, big"-3.584943611106183357043212309791897386e-01"), convert(T, big"-4.113944068471528211627210454497620358e-03"), convert(T, big"1.427968894048586363415504654313371031e+00"), convert(T, big"1.808470948394314017665968411915568633e-02"), convert(T, big"1.605770645946802213926893453819236685e-01"), - convert(T, big"2.952227015964591648775833803635147962e-01")) + convert(T, big"2.952227015964591648775833803635147962e-01") + ) - c2end = SVector(convert(T, big"2.836343005184365275160654678626695428e-01"), + c2end = SVector( + convert(T, big"2.836343005184365275160654678626695428e-01"), convert(T, big"5.484076570002894365286665352032296535e-01"), convert(T, big"3.687228761669438493478872632332010073e-01"), convert(T, big"-6.806126440140844191258463830024463902e-01"), convert(T, big"3.518526124230705801739919476290327750e-01"), convert(T, big"1.665941994879593315477304663913129942e+00"), convert(T, big"9.715279295934715835299192116436237065e-01"), - convert(T, big"9.051569840159589594903399929316959062e-01")) + convert(T, big"9.051569840159589594903399929316959062e-01") + ) # difference of the usual bhat coefficients and the main b coefficients - bhat1 = convert(T, + bhat1 = convert( + T, big"2.483675912451591196775756814283216443e-02" - - - big"4.503732627263753698356970706617404465e-02") + - + big"4.503732627263753698356970706617404465e-02" + ) bhat2end = SVector( - convert(T, + convert( + T, big"1.866327774562103796990092260942180726e-01" - - - big"1.859217303699847950262276860012454333e-01"), - convert(T, + - + big"1.859217303699847950262276860012454333e-01" + ), + convert( + T, big"5.671080795936984495604436622517631183e-02" - - - big"3.329729672569717599759560403851202805e-02"), - convert(T, + - + big"3.329729672569717599759560403851202805e-02" + ), + convert( + T, big"-3.447695439149287702616943808570747099e-03" - - - big"-4.784204180958975587114459316829942677e-03"), - convert(T, + - + big"-4.784204180958975587114459316829942677e-03" + ), + convert( + T, big"3.602245056516636472203469198006404016e-03" - - - big"4.055835961031310727671557609188874328e-03"), - convert(T, + - + big"4.055835961031310727671557609188874328e-03" + ), + convert( + T, big"4.545570622145088936800484247980581766e-01" - - - big"4.185027772596074197662616795629003544e-01"), - convert(T, + - + big"4.185027772596074197662616795629003544e-01" + ), + convert( + T, big"-2.434665289427612407531544765622888855e-04" - - - big"-4.381901968919326084347037216500072323e-03 "), - convert(T, + - + big"-4.381901968919326084347037216500072323e-03 " + ), + convert( + T, big"6.642755361103549971517945063138312147e-02" - - - big"2.712843796446089829255188189179448399e-02"), - convert(T, + - + big"2.712843796446089829255188189179448399e-02" + ), + convert( + T, big"1.613697079523505006226025497715177578e-01" - - - big"2.952227015964591648775833803635147962e-01")) + - + big"2.952227015964591648775833803635147962e-01" + ) + ) bhatfsal = convert(T, big"4.955424859358438183052504342394102722e-02") - LowStorageRK3SpFSALConstantCache{8, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, - c2end, bhat1, bhat2end, bhatfsal) + return LowStorageRK3SpFSALConstantCache{8, T, T2}( + γ12end, γ22end, γ32end, δ2end, β1, β2end, + c2end, bhat1, bhat2end, bhatfsal + ) end -function alg_cache(alg::RDPK3SpFSAL49, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RDPK3SpFSAL49, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k = zero(rate_prototype) if calck fsalfirst = zero(rate_prototype) @@ -2474,21 +2875,28 @@ function alg_cache(alg::RDPK3SpFSAL49, u, rate_prototype, ::Type{uEltypeNoUnits} atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) end - tab = RDPK3SpFSAL49ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK3SpFSALCache(u, uprev, fsalfirst, k, utilde, tmp, atmp, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::RDPK3SpFSAL49, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = RDPK3SpFSAL49ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK3SpFSALCache( + u, uprev, fsalfirst, k, utilde, tmp, atmp, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::RDPK3SpFSAL49, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - RDPK3SpFSAL49ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return RDPK3SpFSAL49ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function RDPK3SpFSAL510ConstantCache(T, T2) - γ12end = SVector(convert(T, big"4.043660121685749695640462197806189975e-01"), + γ12end = SVector( + convert(T, big"4.043660121685749695640462197806189975e-01"), convert(T, big"-8.503427289575839690883191973980814832e-01"), convert(T, big"-6.950894175262117526410215315179482885e+00"), convert(T, big"9.238765192731084931855438934978371889e-01"), @@ -2496,9 +2904,11 @@ function RDPK3SpFSAL510ConstantCache(T, T2) convert(T, big"2.545744879365226143946122067064118430e-01"), convert(T, big"3.125831707411998258746812355492206137e-01"), convert(T, big"-7.007114414440507927791249989236719346e-01"), - convert(T, big"4.839621016023833375810172323297465039e-01")) + convert(T, big"4.839621016023833375810172323297465039e-01") + ) - γ22end = SVector(convert(T, big"6.871467028161416909922221357014564412e-01"), + γ22end = SVector( + convert(T, big"6.871467028161416909922221357014564412e-01"), convert(T, big"1.093024748914750833700799552463885117e+00"), convert(T, big"3.225975379607193001678365742708874597e+00"), convert(T, big"1.041153702510101386914019859778740444e+00"), @@ -2506,9 +2916,11 @@ function RDPK3SpFSAL510ConstantCache(T, T2) convert(T, big"7.391462755788122847651304143259254381e-01"), convert(T, big"1.239129251371800313941948224441873274e-01"), convert(T, big"1.842753472370123193132193302369345580e-01"), - convert(T, big"5.712788998796583446479387686662738843e-02")) + convert(T, big"5.712788998796583446479387686662738843e-02") + ) - γ32end = SVector(convert(T, big"0.000000000000000000000000000000000000e+00"), + γ32end = SVector( + convert(T, big"0.000000000000000000000000000000000000e+00"), convert(T, big"0.000000000000000000000000000000000000e+00"), convert(T, big"-2.393405133244194727221124311276648940e+00"), convert(T, big"-1.902854422421760920850597670305403139e+00"), @@ -2516,9 +2928,11 @@ function RDPK3SpFSAL510ConstantCache(T, T2) convert(T, big"-1.832698465277380999601896111079977378e+00"), convert(T, big"-2.199094483084671192328083958346519535e-01"), convert(T, big"-4.082430635847870963724591602173546218e-01"), - convert(T, big"-1.377669797880289713535665985132703979e-01")) + convert(T, big"-1.377669797880289713535665985132703979e-01") + ) - δ2end = SVector(convert(T, big"-1.331778419508803397033287009506932673e-01"), + δ2end = SVector( + convert(T, big"-1.331778419508803397033287009506932673e-01"), convert(T, big"8.260422814750207498262063505871077303e-01"), convert(T, big"1.513700425755728332485300719652378197e+00"), convert(T, big"-1.305810059935023735972298885749903694e+00"), @@ -2526,10 +2940,12 @@ function RDPK3SpFSAL510ConstantCache(T, T2) convert(T, big"-1.449458274398895177922690618003584514e+00"), convert(T, big"3.834313899176362315089976408899373409e+00"), convert(T, big"4.122293760012985409330881631526514714e+00"), - convert(T, big"0.000000000000000000000000000000000000e+00")) + convert(T, big"0.000000000000000000000000000000000000e+00") + ) β1 = convert(T, big"2.597883554788674084039539165398464630e-01") - β2end = SVector(convert(T, big"1.777008889438867858759149597539211023e-02"), + β2end = SVector( + convert(T, big"1.777008889438867858759149597539211023e-02"), convert(T, big"2.481636629715501931294746189266601496e-01"), convert(T, big"7.941736871152005775821844297293296135e-01"), convert(T, big"3.885391285642019129575902994397298066e-01"), @@ -2537,9 +2953,11 @@ function RDPK3SpFSAL510ConstantCache(T, T2) convert(T, big"1.587517385964749337690916959584348979e-01"), convert(T, big"1.650605617880053419242434594242509601e-01"), convert(T, big"2.118093284937153836908655490906875007e-01"), - convert(T, big"1.559392342362059886106995325687547506e-01")) + convert(T, big"1.559392342362059886106995325687547506e-01") + ) - c2end = SVector(convert(T, big"2.597883554788674084039539165398464630e-01"), + c2end = SVector( + convert(T, big"2.597883554788674084039539165398464630e-01"), convert(T, big"9.904573247592460887087003212056568980e-02"), convert(T, big"2.155511890524058691860390281856497503e-01"), convert(T, big"5.007950088969676776844289399972611534e-01"), @@ -2547,60 +2965,86 @@ function RDPK3SpFSAL510ConstantCache(T, T2) convert(T, big"5.449986978853637084972622392134732553e-01"), convert(T, big"7.615224694532590139829150720490417596e-01"), convert(T, big"8.427062083267360939805493320684741215e-01"), - convert(T, big"9.152209805057669959657927210873423883e-01")) + convert(T, big"9.152209805057669959657927210873423883e-01") + ) # difference of the usual bhat coefficients and the main b coefficients - bhat1 = convert(T, + bhat1 = convert( + T, big"-2.019255440012066080909442770590267512e-02" - - - big"-2.280100321836980811830528665041532799e-03") + - + big"-2.280100321836980811830528665041532799e-03" + ) bhat2end = SVector( - convert(T, + convert( + T, big"2.737903480959184339932730854141598275e-02" - - - big"1.407393115790186300730580636032878435e-02"), - convert(T, + - + big"1.407393115790186300730580636032878435e-02" + ), + convert( + T, big"3.028818636145965534365173822296811090e-01" - - - big"2.332691775508456597719992034291118324e-01"), - convert(T, + - + big"2.332691775508456597719992034291118324e-01" + ), + convert( + T, big"-3.656843880622222190071445247906780540e-02" - - - big"4.808266741353862546318531020856621860e-02"), - convert(T, + - + big"4.808266741353862546318531020856621860e-02" + ), + convert( + T, big"3.982664774676767729863101188528827405e-01" - - - big"4.119003217706951892385733111000873172e-01"), - convert(T, + - + big"4.119003217706951892385733111000873172e-01" + ), + convert( + T, big"-5.715959421140685436681459970502471634e-02" - - - big"-1.291461067807736321056740833501596735e-01"), - convert(T, + - + big"-1.291461067807736321056740833501596735e-01" + ), + convert( + T, big"9.849855103848558320961101178888983150e-02" - - - big"1.220746013848710098878384114422516148e-01"), - convert(T, + - + big"1.220746013848710098878384114422516148e-01" + ), + convert( + T, big"6.654601552456084978615342374581437947e-02" - - - big"4.357858583174420432201228508067333299e-02"), - convert(T, + - + big"4.357858583174420432201228508067333299e-02" + ), + convert( + T, big"9.073479542748112726465375642050504556e-02" - - - big"1.025076877568080726158907518254273554e-01"), - convert(T, + - + big"1.025076877568080726158907518254273554e-01" + ), + convert( + T, big"8.432289325330803924891866923939606351e-02" - - - big"1.559392342362059886106995325687547506e-01")) + - + big"1.559392342362059886106995325687547506e-01" + ) + ) bhatfsal = convert(T, big"4.529095628204896774513180907141004447e-02") - LowStorageRK3SpFSALConstantCache{9, T, T2}(γ12end, γ22end, γ32end, δ2end, β1, β2end, - c2end, bhat1, bhat2end, bhatfsal) + return LowStorageRK3SpFSALConstantCache{9, T, T2}( + γ12end, γ22end, γ32end, δ2end, β1, β2end, + c2end, bhat1, bhat2end, bhatfsal + ) end -function alg_cache(alg::RDPK3SpFSAL510, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RDPK3SpFSAL510, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k = zero(rate_prototype) if calck fsalfirst = zero(rate_prototype) @@ -2615,23 +3059,31 @@ function alg_cache(alg::RDPK3SpFSAL510, u, rate_prototype, ::Type{uEltypeNoUnits atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) end - tab = RDPK3SpFSAL510ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK3SpFSALCache(u, uprev, fsalfirst, k, utilde, tmp, atmp, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::RDPK3SpFSAL510, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = RDPK3SpFSAL510ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK3SpFSALCache( + u, uprev, fsalfirst, k, utilde, tmp, atmp, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::RDPK3SpFSAL510, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - RDPK3SpFSAL510ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return RDPK3SpFSAL510ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end # 2R+ low storage methods introduced by van der Houwen -@cache struct LowStorageRK2RPCache{uType, rateType, uNoUnitsType, TabType, StageLimiter, - StepLimiter, Thread} <: - LowStorageRKMutableCache +@cache struct LowStorageRK2RPCache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, + StepLimiter, Thread, + } <: + LowStorageRKMutableCache u::uType uprev::uType k::rateType @@ -2675,18 +3127,22 @@ function CKLLSRK43_2ConstantCache(T, T2) C1 = convert(T2, Int128(11847461282814) // Int128(36547543011857)) # A1 C2 = convert(T2, Int128(2079258608735161403527719) // Int128(3144780143828896577027540)) # A2 + B1 - C3 = convert(T2, + C3 = convert( + T2, Int128(41775191021672206476512620310545281003) // - Int128(67383242951014563804622635478530729598)) # A3 + B1 + B2 + Int128(67383242951014563804622635478530729598) + ) # A3 + B1 + B2 Cᵢ = SVector(C1, C2, C3) - LowStorageRK2RPConstantCache{3, T, T2}(Aᵢ, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) + return LowStorageRK2RPConstantCache{3, T, T2}(Aᵢ, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) end -function alg_cache(alg::CKLLSRK43_2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CKLLSRK43_2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) @@ -2697,17 +3153,23 @@ function alg_cache(alg::CKLLSRK43_2, u, rate_prototype, ::Type{uEltypeNoUnits}, else fsalfirst = k end - tab = CKLLSRK43_2ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK2RPCache(u, uprev, k, gprev, fsalfirst, tmp, atmp, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::CKLLSRK43_2, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = CKLLSRK43_2ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK2RPCache( + u, uprev, k, gprev, fsalfirst, tmp, atmp, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::CKLLSRK43_2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CKLLSRK43_2ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CKLLSRK43_2ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function CKLLSRK54_3CConstantCache(T, T2) @@ -2733,23 +3195,31 @@ function CKLLSRK54_3CConstantCache(T, T2) B̂ₗ = convert(T, BigInt(1097981568119) // BigInt(3980877426909)) C1 = convert(T2, BigInt(970286171893) // BigInt(4311952581923)) # A1 - C2 = convert(T2, - BigInt(18020302501594987297224499) // BigInt(30272352378568762325374449)) # A2 + B1 - C3 = convert(T2, + C2 = convert( + T2, + BigInt(18020302501594987297224499) // BigInt(30272352378568762325374449) + ) # A2 + B1 + C3 = convert( + T2, BigInt(940957347754451928235896289983310398260) // - BigInt(1631475460071027605339136597003329167263)) # A3 + B1 + B2 - C4 = convert(T2, + BigInt(1631475460071027605339136597003329167263) + ) # A3 + B1 + B2 + C4 = convert( + T2, BigInt(8054848232572758807908657851968985615984276476412066) // - BigInt(8139155613487734148190408375391604039319069461908135)) # A4 + B1 + B2 + B3 + BigInt(8139155613487734148190408375391604039319069461908135) + ) # A4 + B1 + B2 + B3 Cᵢ = SVector(C1, C2, C3, C4) - LowStorageRK2RPConstantCache{4, T, T2}(Aᵢ, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) + return LowStorageRK2RPConstantCache{4, T, T2}(Aᵢ, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) end -function alg_cache(alg::CKLLSRK54_3C, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CKLLSRK54_3C, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) @@ -2760,17 +3230,23 @@ function alg_cache(alg::CKLLSRK54_3C, u, rate_prototype, ::Type{uEltypeNoUnits}, else fsalfirst = k end - tab = CKLLSRK54_3CConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK2RPCache(u, uprev, k, gprev, fsalfirst, tmp, atmp, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::CKLLSRK54_3C, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = CKLLSRK54_3CConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK2RPCache( + u, uprev, k, gprev, fsalfirst, tmp, atmp, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::CKLLSRK54_3C, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CKLLSRK54_3CConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CKLLSRK54_3CConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function CKLLSRK95_4SConstantCache(T, T2) @@ -2808,35 +3284,51 @@ function CKLLSRK95_4SConstantCache(T, T2) B̂ₗ = convert(T, BigInt(277420604269) // BigInt(1857595682219)) C1 = convert(T2, BigInt(1107026461565) // BigInt(5417078080134)) # A1 - C2 = convert(T2, - BigInt(248859529315327119359384971) // BigInt(246283290687986423455311497)) # A2 + B1 - C3 = convert(T2, + C2 = convert( + T2, + BigInt(248859529315327119359384971) // BigInt(246283290687986423455311497) + ) # A2 + B1 + C3 = convert( + T2, BigInt(676645811244741430568548054467096184193) // - BigInt(3494367591912647069105975861901917224854)) # A3 + B1 + B2 - C4 = convert(T2, + BigInt(3494367591912647069105975861901917224854) + ) # A3 + B1 + B2 + C4 = convert( + T2, BigInt(974370561662349106845723178377944301517533305964589) // - BigInt(2263290880944514209862892217007179742168288737673791)) # A4 + B1 + B2 + B3 - C5 = convert(T2, + BigInt(2263290880944514209862892217007179742168288737673791) + ) # A4 + B1 + B2 + B3 + C5 = convert( + T2, BigInt(23738915426186839814576142955255044211724736499516359049188590711) // - BigInt(67203160149331519751012175988216621571869262839903428488408759604)) # A5 + B1 + B2 + B3 + B4 - C6 = convert(T2, + BigInt(67203160149331519751012175988216621571869262839903428488408759604) + ) # A5 + B1 + B2 + B3 + B4 + C6 = convert( + T2, BigInt(1882683585832901544671586749377753597775777511029847145277760106172106584376955) // - BigInt(1901663903553486696887572033100456166564493852721284994300276200102719954709068)) # A6 + B1 + B2 + B3 + B4 + B5 - C7 = convert(T2, + BigInt(1901663903553486696887572033100456166564493852721284994300276200102719954709068) + ) # A6 + B1 + B2 + B3 + B4 + B5 + C7 = convert( + T2, BigInt(61872982955093233917984290421186995265732234396821660871734841970091372539489172106504162637) // - BigInt(81207728164913218881758751120099941603350662788460257311895072645631357391473675997419584220)) # A7 + B1 + B2 + B3 + B4 + B5 + B6 - C8 = convert(T2, + BigInt(81207728164913218881758751120099941603350662788460257311895072645631357391473675997419584220) + ) # A7 + B1 + B2 + B3 + B4 + B5 + B6 + C8 = convert( + T2, BigInt(197565042693102647130189450792520184956129841555961940530192020871289515369046683661585184411130637357) // - BigInt(232196202198018941876505157326935602816917261769279531369710269478309137067357703513986211472070374865)) # A8 + B1 + B2 + B3 + B4 + B5 + B6 + B7 + BigInt(232196202198018941876505157326935602816917261769279531369710269478309137067357703513986211472070374865) + ) # A8 + B1 + B2 + B3 + B4 + B5 + B6 + B7 Cᵢ = SVector(C1, C2, C3, C4, C5, C6, C7, C8) - LowStorageRK2RPConstantCache{8, T, T2}(Aᵢ, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) + return LowStorageRK2RPConstantCache{8, T, T2}(Aᵢ, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) end -function alg_cache(alg::CKLLSRK95_4S, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CKLLSRK95_4S, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) @@ -2847,17 +3339,23 @@ function alg_cache(alg::CKLLSRK95_4S, u, rate_prototype, ::Type{uEltypeNoUnits}, else fsalfirst = k end - tab = CKLLSRK95_4SConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK2RPCache(u, uprev, k, gprev, fsalfirst, tmp, atmp, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::CKLLSRK95_4S, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = CKLLSRK95_4SConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK2RPCache( + u, uprev, k, gprev, fsalfirst, tmp, atmp, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::CKLLSRK95_4S, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CKLLSRK95_4SConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CKLLSRK95_4SConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function CKLLSRK95_4CConstantCache(T, T2) @@ -2895,35 +3393,51 @@ function CKLLSRK95_4CConstantCache(T, T2) B̂ₗ = convert(T, BigInt(638483435745) // BigInt(4187244659458)) C1 = convert(T2, BigInt(2756167973529) // BigInt(16886029417639)) # A1 - C2 = convert(T2, - BigInt(178130064075748009421121134) // BigInt(194737282992122861693942999)) # A2 + B1 - C3 = convert(T2, + C2 = convert( + T2, + BigInt(178130064075748009421121134) // BigInt(194737282992122861693942999) + ) # A2 + B1 + C3 = convert( + T2, BigInt(57818276708998807530478158133449099851) // - BigInt(238238895426494403638887583424360627580)) # A3 + B1 + B2 - C4 = convert(T2, + BigInt(238238895426494403638887583424360627580) + ) # A3 + B1 + B2 + C4 = convert( + T2, BigInt(3432454166457135667348375590572529790194124848059104) // - BigInt(6662096512485931545803670383440459769502981926779993)) # A4 + B1 + B2 + B3 - C5 = convert(T2, + BigInt(6662096512485931545803670383440459769502981926779993) + ) # A4 + B1 + B2 + B3 + C5 = convert( + T2, BigInt(11915126765643872062053118401193741919814944004335534493046474237) // - BigInt(39923715169802034300462756237193519081954994679332637422466438119)) # A5 + B1 + B2 + B3 + B4 - C6 = convert(T2, + BigInt(39923715169802034300462756237193519081954994679332637422466438119) + ) # A5 + B1 + B2 + B3 + B4 + C6 = convert( + T2, BigInt(4583883621300589683158355859163890943947800555246686854224916208836514024614442) // - BigInt(4506922925096139856045533451931734406235454975594364558624038359246205017801029)) # A6 + B1 + B2 + B3 + B4 + B5 - C7 = convert(T2, + BigInt(4506922925096139856045533451931734406235454975594364558624038359246205017801029) + ) # A6 + B1 + B2 + B3 + B4 + B5 + C7 = convert( + T2, BigInt(52423219056629312880725209686636192777075511202228566787042655312097949192300218484424118619) // - BigInt(84615702680158836756876794083943762639542619835321175569533203672153042594634924742431352650)) # A7 + B1 + B2 + B3 + B4 + B5 + B6 - C8 = convert(T2, + BigInt(84615702680158836756876794083943762639542619835321175569533203672153042594634924742431352650) + ) # A7 + B1 + B2 + B3 + B4 + B5 + B6 + C8 = convert( + T2, BigInt(1385843715228499555828057735261132084759031703937678116167963792224108372724503731226480538087331079769069) // - BigInt(1573111845759510782008384284066606688388217112071821912231287750254246452350240904652428530379336814559998)) # A8 + B1 + B2 + B3 + B4 + B5 + B6 + B7 + BigInt(1573111845759510782008384284066606688388217112071821912231287750254246452350240904652428530379336814559998) + ) # A8 + B1 + B2 + B3 + B4 + B5 + B6 + B7 Cᵢ = SVector(C1, C2, C3, C4, C5, C6, C7, C8) - LowStorageRK2RPConstantCache{8, T, T2}(Aᵢ, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) + return LowStorageRK2RPConstantCache{8, T, T2}(Aᵢ, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) end -function alg_cache(alg::CKLLSRK95_4C, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CKLLSRK95_4C, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) @@ -2934,17 +3448,23 @@ function alg_cache(alg::CKLLSRK95_4C, u, rate_prototype, ::Type{uEltypeNoUnits}, else fsalfirst = k end - tab = CKLLSRK95_4CConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK2RPCache(u, uprev, k, gprev, fsalfirst, tmp, atmp, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::CKLLSRK95_4C, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = CKLLSRK95_4CConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK2RPCache( + u, uprev, k, gprev, fsalfirst, tmp, atmp, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::CKLLSRK95_4C, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CKLLSRK95_4CConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CKLLSRK95_4CConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function CKLLSRK95_4MConstantCache(T, T2) @@ -2982,35 +3502,51 @@ function CKLLSRK95_4MConstantCache(T, T2) B̂ₗ = convert(T, BigInt(866868642257) // BigInt(42331321870877)) C1 = convert(T2, BigInt(5573095071601) // BigInt(11304125995793)) - C2 = convert(T2, - BigInt(4461661993774357683398167) // BigInt(27904730031895199210773871)) - C3 = convert(T2, + C2 = convert( + T2, + BigInt(4461661993774357683398167) // BigInt(27904730031895199210773871) + ) + C3 = convert( + T2, BigInt(543425730194107827015264404954831354769) // - BigInt(1692482454734045499140692116457071506026)) - C4 = convert(T2, + BigInt(1692482454734045499140692116457071506026) + ) + C4 = convert( + T2, BigInt(6429586327013850295560537918723231687699697140756067) // - BigInt(10818243561353065593628044468492745774799533452459554)) - C5 = convert(T2, + BigInt(10818243561353065593628044468492745774799533452459554) + ) + C5 = convert( + T2, BigInt(555984804780268998022260997164198311752115182012221553157164786) // - BigInt(852213854337283773231630192518719827415190771786411558523853399)) - C6 = convert(T2, + BigInt(852213854337283773231630192518719827415190771786411558523853399) + ) + C6 = convert( + T2, BigInt(1789345671284476461332539715762783748132668223013904373945129499237446392572) // - BigInt(2114764997945705573761804541148983827155257005191540481884326639410208291635)) - C7 = convert(T2, + BigInt(2114764997945705573761804541148983827155257005191540481884326639410208291635) + ) + C7 = convert( + T2, BigInt(2972211964132922642906704796208250552795647483819924111704054115070043529037601892705217) // - BigInt(6517454043294174770082798998332814729652497865130816822916618330047242844192616374937270)) - C8 = convert(T2, + BigInt(6517454043294174770082798998332814729652497865130816822916618330047242844192616374937270) + ) + C8 = convert( + T2, BigInt(22038106775746116973750004935225594022265950105933360206617843987546593773108577078867914238620973639) // - BigInt(228770596964454885481304478061363897900267080665965044117230250287302271092811814450282133504194141850)) + BigInt(228770596964454885481304478061363897900267080665965044117230250287302271092811814450282133504194141850) + ) Cᵢ = SVector(C1, C2, C3, C4, C5, C6, C7, C8) - LowStorageRK2RPConstantCache{8, T, T2}(Aᵢ, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) + return LowStorageRK2RPConstantCache{8, T, T2}(Aᵢ, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) end -function alg_cache(alg::CKLLSRK95_4M, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CKLLSRK95_4M, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) @@ -3021,23 +3557,31 @@ function alg_cache(alg::CKLLSRK95_4M, u, rate_prototype, ::Type{uEltypeNoUnits}, else fsalfirst = k end - tab = CKLLSRK95_4MConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK2RPCache(u, uprev, k, gprev, fsalfirst, tmp, atmp, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::CKLLSRK95_4M, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = CKLLSRK95_4MConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK2RPCache( + u, uprev, k, gprev, fsalfirst, tmp, atmp, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::CKLLSRK95_4M, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CKLLSRK95_4MConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CKLLSRK95_4MConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end # 3R+ low storage methods introduced by van der Houwen -@cache struct LowStorageRK3RPCache{uType, rateType, uNoUnitsType, TabType, StageLimiter, - StepLimiter, Thread} <: - LowStorageRKMutableCache +@cache struct LowStorageRK3RPCache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, + StepLimiter, Thread, + } <: + LowStorageRKMutableCache u::uType uprev::uType k::rateType @@ -3093,23 +3637,31 @@ function CKLLSRK54_3C_3RConstantCache(T, T2) B̂ₗ = convert(T, BigInt(328334985361) // BigInt(2316973589007)) C1 = convert(T2, BigInt(2365592473904) // BigInt(8146167614645)) - C2 = convert(T2, - BigInt(41579400703344293287237655) // BigInt(74172066799272566561857858)) - C3 = convert(T2, + C2 = convert( + T2, + BigInt(41579400703344293287237655) // BigInt(74172066799272566561857858) + ) + C3 = convert( + T2, BigInt(299308060739053880467044545349561265546) // - BigInt(497993456493513966629488516767096447823)) - C4 = convert(T2, + BigInt(497993456493513966629488516767096447823) + ) + C4 = convert( + T2, BigInt(5468330126750791548369684419304733938034170906513585) // - BigInt(5444638279732761024893610553331663911104849888809108)) + BigInt(5444638279732761024893610553331663911104849888809108) + ) Cᵢ = SVector(C1, C2, C3, C4) - LowStorageRK3RPConstantCache{4, T, T2}(Aᵢ₁, Aᵢ₂, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) + return LowStorageRK3RPConstantCache{4, T, T2}(Aᵢ₁, Aᵢ₂, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) end -function alg_cache(alg::CKLLSRK54_3C_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CKLLSRK54_3C_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) @@ -3123,17 +3675,23 @@ function alg_cache(alg::CKLLSRK54_3C_3R, u, rate_prototype, ::Type{uEltypeNoUnit else fsalfirst = k end - tab = CKLLSRK54_3C_3RConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK3RPCache(u, uprev, k, uᵢ₋₁, uᵢ₋₂, fᵢ₋₂, gprev, fsalfirst, tmp, atmp, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::CKLLSRK54_3C_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = CKLLSRK54_3C_3RConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK3RPCache( + u, uprev, k, uᵢ₋₁, uᵢ₋₂, fᵢ₋₂, gprev, fsalfirst, tmp, atmp, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::CKLLSRK54_3C_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CKLLSRK54_3C_3RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CKLLSRK54_3C_3RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function CKLLSRK54_3M_3RConstantCache(T, T2) @@ -3166,21 +3724,27 @@ function CKLLSRK54_3M_3RConstantCache(T, T2) C1 = convert(T2, BigInt(17396840518954) // BigInt(49788467287365)) C2 = convert(T2, BigInt(2546271293606266795002053) // BigInt(6227754966395669782804057)) - C3 = convert(T2, + C3 = convert( + T2, BigInt(3043453778831534771251734214272440269577) // - BigInt(3561810617861654942925591050154818470872)) - C4 = convert(T2, + BigInt(3561810617861654942925591050154818470872) + ) + C4 = convert( + T2, BigInt(10963106193663894855575270257133723083246622141340761) // - BigInt(12121458300971454511596914396147459030814063072954120)) + BigInt(12121458300971454511596914396147459030814063072954120) + ) Cᵢ = SVector(C1, C2, C3, C4) - LowStorageRK3RPConstantCache{4, T, T2}(Aᵢ₁, Aᵢ₂, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) + return LowStorageRK3RPConstantCache{4, T, T2}(Aᵢ₁, Aᵢ₂, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) end -function alg_cache(alg::CKLLSRK54_3M_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CKLLSRK54_3M_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) @@ -3194,17 +3758,23 @@ function alg_cache(alg::CKLLSRK54_3M_3R, u, rate_prototype, ::Type{uEltypeNoUnit else fsalfirst = k end - tab = CKLLSRK54_3M_3RConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK3RPCache(u, uprev, k, uᵢ₋₁, uᵢ₋₂, fᵢ₋₂, gprev, fsalfirst, tmp, atmp, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::CKLLSRK54_3M_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = CKLLSRK54_3M_3RConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK3RPCache( + u, uprev, k, uᵢ₋₁, uᵢ₋₂, fᵢ₋₂, gprev, fsalfirst, tmp, atmp, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::CKLLSRK54_3M_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CKLLSRK54_3M_3RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CKLLSRK54_3M_3RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function CKLLSRK54_3N_3RConstantCache(T, T2) @@ -3236,23 +3806,31 @@ function CKLLSRK54_3N_3RConstantCache(T, T2) B̂ₗ = convert(T, BigInt(606464709716) // BigInt(2447238536635)) C1 = convert(T2, BigInt(4745337637855) // BigInt(22386579876409)) - C2 = convert(T2, - BigInt(6320253019873211389522417) // BigInt(10980921945492108365568747)) - C3 = convert(T2, + C2 = convert( + T2, + BigInt(6320253019873211389522417) // BigInt(10980921945492108365568747) + ) + C3 = convert( + T2, BigInt(231699760563456147635097088564862719039) // - BigInt(400094496217566390613617613962197753808)) - C4 = convert(T2, + BigInt(400094496217566390613617613962197753808) + ) + C4 = convert( + T2, BigInt(2565873674791335200443549967376635530873909687156071) // - BigInt(2970969302106648098855751120425897741072516011514170)) + BigInt(2970969302106648098855751120425897741072516011514170) + ) Cᵢ = SVector(C1, C2, C3, C4) - LowStorageRK3RPConstantCache{4, T, T2}(Aᵢ₁, Aᵢ₂, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) + return LowStorageRK3RPConstantCache{4, T, T2}(Aᵢ₁, Aᵢ₂, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) end -function alg_cache(alg::CKLLSRK54_3N_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CKLLSRK54_3N_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) @@ -3266,17 +3844,23 @@ function alg_cache(alg::CKLLSRK54_3N_3R, u, rate_prototype, ::Type{uEltypeNoUnit else fsalfirst = k end - tab = CKLLSRK54_3N_3RConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK3RPCache(u, uprev, k, uᵢ₋₁, uᵢ₋₂, fᵢ₋₂, gprev, fsalfirst, tmp, atmp, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::CKLLSRK54_3N_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = CKLLSRK54_3N_3RConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK3RPCache( + u, uprev, k, uᵢ₋₁, uᵢ₋₂, fᵢ₋₂, gprev, fsalfirst, tmp, atmp, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::CKLLSRK54_3N_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CKLLSRK54_3N_3RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CKLLSRK54_3N_3RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function CKLLSRK85_4C_3RConstantCache(T, T2) @@ -3320,32 +3904,46 @@ function CKLLSRK85_4C_3RConstantCache(T, T2) B̂ₗ = convert(T, BigInt(-3808726110015) // BigInt(23644487528593)) C1 = convert(T2, BigInt(141236061735) // BigInt(3636543850841)) - C2 = convert(T2, - BigInt(4855329627204641469273019) // BigInt(32651870171503411731843480)) - C3 = convert(T2, + C2 = convert( + T2, + BigInt(4855329627204641469273019) // BigInt(32651870171503411731843480) + ) + C3 = convert( + T2, BigInt(395246570619540395679764439681768625174) // - BigInt(1150568172675067443707820382013045349637)) - C4 = convert(T2, + BigInt(1150568172675067443707820382013045349637) + ) + C4 = convert( + T2, BigInt(103533040647279909858308372897770021461) // - BigInt(286797987459862321650077169609703051387)) - C5 = convert(T2, + BigInt(286797987459862321650077169609703051387) + ) + C5 = convert( + T2, BigInt(890342029406775514852349518244920625309) // - BigInt(1135377348321966192554675673174478190626)) - C6 = convert(T2, + BigInt(1135377348321966192554675673174478190626) + ) + C6 = convert( + T2, BigInt(82180664649829640456237722943611531408) // - BigInt(97244490215364259564723087293866304345)) - C7 = convert(T2, + BigInt(97244490215364259564723087293866304345) + ) + C7 = convert( + T2, BigInt(1524044277359326675923410465291452002169116939509651) // - BigInt(4415279581486844959297591640758696961331751174567964)) + BigInt(4415279581486844959297591640758696961331751174567964) + ) Cᵢ = SVector(C1, C2, C3, C4, C5, C6, C7) - LowStorageRK3RPConstantCache{7, T, T2}(Aᵢ₁, Aᵢ₂, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) + return LowStorageRK3RPConstantCache{7, T, T2}(Aᵢ₁, Aᵢ₂, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) end -function alg_cache(alg::CKLLSRK85_4C_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CKLLSRK85_4C_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) @@ -3359,17 +3957,23 @@ function alg_cache(alg::CKLLSRK85_4C_3R, u, rate_prototype, ::Type{uEltypeNoUnit else fsalfirst = k end - tab = CKLLSRK85_4C_3RConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK3RPCache(u, uprev, k, uᵢ₋₁, uᵢ₋₂, fᵢ₋₂, gprev, fsalfirst, tmp, atmp, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::CKLLSRK85_4C_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = CKLLSRK85_4C_3RConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK3RPCache( + u, uprev, k, uᵢ₋₁, uᵢ₋₂, fᵢ₋₂, gprev, fsalfirst, tmp, atmp, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::CKLLSRK85_4C_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CKLLSRK85_4C_3RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CKLLSRK85_4C_3RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function CKLLSRK85_4M_3RConstantCache(T, T2) @@ -3413,32 +4017,46 @@ function CKLLSRK85_4M_3RConstantCache(T, T2) B̂ₗ = convert(T, BigInt(624338737541) // BigInt(7691046757191)) C1 = convert(T2, BigInt(967290102210) // BigInt(6283494269639)) - C2 = convert(T2, - BigInt(8972214919142352493858707) // BigInt(41446148478994088895191128)) - C3 = convert(T2, + C2 = convert( + T2, + BigInt(8972214919142352493858707) // BigInt(41446148478994088895191128) + ) + C3 = convert( + T2, BigInt(35682660731882055122214991891899678815) // - BigInt(72242678055272695781813348615158920272)) - C4 = convert(T2, + BigInt(72242678055272695781813348615158920272) + ) + C4 = convert( + T2, BigInt(24151963894889409757443700144610337197) // - BigInt(88316684951621554188239538678367088186)) - C5 = convert(T2, + BigInt(88316684951621554188239538678367088186) + ) + C5 = convert( + T2, BigInt(20396803294876689925555603189127802602) // - BigInt(29355195069529377650856010387665377655)) - C6 = convert(T2, + BigInt(29355195069529377650856010387665377655) + ) + C6 = convert( + T2, BigInt(104860372573190455963699691732496938387) // - BigInt(144152676952392296448858925279884773652)) - C7 = convert(T2, + BigInt(144152676952392296448858925279884773652) + ) + C7 = convert( + T2, BigInt(1648260218501227913212294426176971326433416596592133) // - BigInt(1649556119556299790473636959153132604082083356090490)) + BigInt(1649556119556299790473636959153132604082083356090490) + ) Cᵢ = SVector(C1, C2, C3, C4, C5, C6, C7) - LowStorageRK3RPConstantCache{7, T, T2}(Aᵢ₁, Aᵢ₂, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) + return LowStorageRK3RPConstantCache{7, T, T2}(Aᵢ₁, Aᵢ₂, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) end -function alg_cache(alg::CKLLSRK85_4M_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CKLLSRK85_4M_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) @@ -3452,17 +4070,23 @@ function alg_cache(alg::CKLLSRK85_4M_3R, u, rate_prototype, ::Type{uEltypeNoUnit else fsalfirst = k end - tab = CKLLSRK85_4M_3RConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK3RPCache(u, uprev, k, uᵢ₋₁, uᵢ₋₂, fᵢ₋₂, gprev, fsalfirst, tmp, atmp, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::CKLLSRK85_4M_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = CKLLSRK85_4M_3RConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK3RPCache( + u, uprev, k, uᵢ₋₁, uᵢ₋₂, fᵢ₋₂, gprev, fsalfirst, tmp, atmp, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::CKLLSRK85_4M_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CKLLSRK85_4M_3RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CKLLSRK85_4M_3RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function CKLLSRK85_4P_3RConstantCache(T, T2) @@ -3506,32 +4130,46 @@ function CKLLSRK85_4P_3RConstantCache(T, T2) B̂ₗ = convert(T, BigInt(-1307718103703) // BigInt(13694144003901)) C1 = convert(T2, BigInt(1298271176151) // BigInt(60748409385661)) - C2 = convert(T2, - BigInt(57828749177833338114741189) // BigInt(482418531105044571804353902)) - C3 = convert(T2, + C2 = convert( + T2, + BigInt(57828749177833338114741189) // BigInt(482418531105044571804353902) + ) + C3 = convert( + T2, BigInt(16431909216114342992530887716659137419) // - BigInt(50972944352640941110022041298448213332)) - C4 = convert(T2, + BigInt(50972944352640941110022041298448213332) + ) + C4 = convert( + T2, BigInt(843711271601954807241466442429582743082) // - BigInt(2361379786784371499429045948205315798717)) - C5 = convert(T2, + BigInt(2361379786784371499429045948205315798717) + ) + C5 = convert( + T2, BigInt(45377346645618697840609101263059649515) // - BigInt(57769368855607143441437855651622233424)) - C6 = convert(T2, + BigInt(57769368855607143441437855651622233424) + ) + C6 = convert( + T2, BigInt(147132600561369761792017800077859262701) // - BigInt(173834563932749284125206995856250290771)) - C7 = convert(T2, + BigInt(173834563932749284125206995856250290771) + ) + C7 = convert( + T2, BigInt(123785620236259768586332555932209432529705897037921) // - BigInt(353351523019265026737831367789312912172448045683187)) + BigInt(353351523019265026737831367789312912172448045683187) + ) Cᵢ = SVector(C1, C2, C3, C4, C5, C6, C7) - LowStorageRK3RPConstantCache{7, T, T2}(Aᵢ₁, Aᵢ₂, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) + return LowStorageRK3RPConstantCache{7, T, T2}(Aᵢ₁, Aᵢ₂, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) end -function alg_cache(alg::CKLLSRK85_4P_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CKLLSRK85_4P_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) @@ -3545,23 +4183,31 @@ function alg_cache(alg::CKLLSRK85_4P_3R, u, rate_prototype, ::Type{uEltypeNoUnit else fsalfirst = k end - tab = CKLLSRK85_4P_3RConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK3RPCache(u, uprev, k, uᵢ₋₁, uᵢ₋₂, fᵢ₋₂, gprev, fsalfirst, tmp, atmp, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::CKLLSRK85_4P_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = CKLLSRK85_4P_3RConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK3RPCache( + u, uprev, k, uᵢ₋₁, uᵢ₋₂, fᵢ₋₂, gprev, fsalfirst, tmp, atmp, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::CKLLSRK85_4P_3R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CKLLSRK85_4P_3RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CKLLSRK85_4P_3RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end # 4R+ low storage methods introduced by van der Houwen -@cache struct LowStorageRK4RPCache{uType, rateType, uNoUnitsType, TabType, StageLimiter, - StepLimiter, Thread} <: - LowStorageRKMutableCache +@cache struct LowStorageRK4RPCache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, + StepLimiter, Thread, + } <: + LowStorageRKMutableCache u::uType uprev::uType k::rateType @@ -3626,23 +4272,31 @@ function CKLLSRK54_3N_4RConstantCache(T, T2) B̂ₗ = convert(T, BigInt(3636375423974) // BigInt(16547514622827)) C1 = convert(T2, BigInt(9435338793489) // BigInt(32856462503258)) - C2 = convert(T2, - BigInt(147231987957505837822553443) // BigInt(244401207824228867478118222)) - C3 = convert(T2, + C2 = convert( + T2, + BigInt(147231987957505837822553443) // BigInt(244401207824228867478118222) + ) + C3 = convert( + T2, BigInt(401086457089554669663078760253749450489) // - BigInt(812866282711293513804077001645679258017)) - C4 = convert(T2, + BigInt(812866282711293513804077001645679258017) + ) + C4 = convert( + T2, BigInt(153823244836258719400905156342054669945035476219421) // - BigInt(172160249040778711548900853819650745575758693592285)) + BigInt(172160249040778711548900853819650745575758693592285) + ) Cᵢ = SVector(C1, C2, C3, C4) - LowStorageRK4RPConstantCache{4, T, T2}(Aᵢ₁, Aᵢ₂, Aᵢ₃, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) + return LowStorageRK4RPConstantCache{4, T, T2}(Aᵢ₁, Aᵢ₂, Aᵢ₃, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) end -function alg_cache(alg::CKLLSRK54_3N_4R, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CKLLSRK54_3N_4R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) @@ -3658,17 +4312,23 @@ function alg_cache(alg::CKLLSRK54_3N_4R, u, rate_prototype, ::Type{uEltypeNoUnit else fsalfirst = k end - tab = CKLLSRK54_3N_4RConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK4RPCache(u, uprev, k, uᵢ₋₁, uᵢ₋₂, uᵢ₋₃, fᵢ₋₂, fᵢ₋₃, gprev, fsalfirst, tmp, - atmp, tab, alg.stage_limiter!, alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::CKLLSRK54_3N_4R, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = CKLLSRK54_3N_4RConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK4RPCache( + u, uprev, k, uᵢ₋₁, uᵢ₋₂, uᵢ₋₃, fᵢ₋₂, fᵢ₋₃, gprev, fsalfirst, tmp, + atmp, tab, alg.stage_limiter!, alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::CKLLSRK54_3N_4R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CKLLSRK54_3N_4RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CKLLSRK54_3N_4RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function CKLLSRK54_3M_4RConstantCache(T, T2) @@ -3711,13 +4371,15 @@ function CKLLSRK54_3M_4RConstantCache(T, T2) C4 = convert(T2, BigInt(1) // BigInt(1)) Cᵢ = SVector(C1, C2, C3, C4) - LowStorageRK4RPConstantCache{4, T, T2}(Aᵢ₁, Aᵢ₂, Aᵢ₃, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) + return LowStorageRK4RPConstantCache{4, T, T2}(Aᵢ₁, Aᵢ₂, Aᵢ₃, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) end -function alg_cache(alg::CKLLSRK54_3M_4R, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CKLLSRK54_3M_4R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) @@ -3733,17 +4395,23 @@ function alg_cache(alg::CKLLSRK54_3M_4R, u, rate_prototype, ::Type{uEltypeNoUnit else fsalfirst = k end - tab = CKLLSRK54_3M_4RConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK4RPCache(u, uprev, k, uᵢ₋₁, uᵢ₋₂, uᵢ₋₃, fᵢ₋₂, fᵢ₋₃, gprev, fsalfirst, tmp, - atmp, tab, alg.stage_limiter!, alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::CKLLSRK54_3M_4R, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = CKLLSRK54_3M_4RConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK4RPCache( + u, uprev, k, uᵢ₋₁, uᵢ₋₂, uᵢ₋₃, fᵢ₋₂, fᵢ₋₃, gprev, fsalfirst, tmp, + atmp, tab, alg.stage_limiter!, alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::CKLLSRK54_3M_4R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CKLLSRK54_3M_4RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CKLLSRK54_3M_4RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function CKLLSRK65_4M_4RConstantCache(T, T2) @@ -3786,26 +4454,36 @@ function CKLLSRK65_4M_4RConstantCache(T, T2) B̂ₗ = convert(T, BigInt(5058427127221) // BigInt(7651806618075)) C1 = convert(T2, BigInt(1811061732419) // BigInt(6538712036350)) - C2 = convert(T2, - BigInt(12851630287335503073915984) // BigInt(45531389003311376172753773)) - C3 = convert(T2, + C2 = convert( + T2, + BigInt(12851630287335503073915984) // BigInt(45531389003311376172753773) + ) + C3 = convert( + T2, BigInt(468994575306978457607500930904657513641) // - BigInt(894975528626103930282351283769588361564)) - C4 = convert(T2, + BigInt(894975528626103930282351283769588361564) + ) + C4 = convert( + T2, BigInt(4735520442856752193881763097298943558246492547269018) // - BigInt(6433166018040288425494806218280078848936316641536447)) - C5 = convert(T2, + BigInt(6433166018040288425494806218280078848936316641536447) + ) + C5 = convert( + T2, BigInt(25828983228256103590265182981008154883102570637999497) // - BigInt(30568689961801519095090666149791133914967119469889228)) + BigInt(30568689961801519095090666149791133914967119469889228) + ) Cᵢ = SVector(C1, C2, C3, C4, C5) - LowStorageRK4RPConstantCache{5, T, T2}(Aᵢ₁, Aᵢ₂, Aᵢ₃, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) + return LowStorageRK4RPConstantCache{5, T, T2}(Aᵢ₁, Aᵢ₂, Aᵢ₃, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) end -function alg_cache(alg::CKLLSRK65_4M_4R, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CKLLSRK65_4M_4R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) @@ -3821,17 +4499,23 @@ function alg_cache(alg::CKLLSRK65_4M_4R, u, rate_prototype, ::Type{uEltypeNoUnit else fsalfirst = k end - tab = CKLLSRK65_4M_4RConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK4RPCache(u, uprev, k, uᵢ₋₁, uᵢ₋₂, uᵢ₋₃, fᵢ₋₂, fᵢ₋₃, gprev, fsalfirst, tmp, - atmp, tab, alg.stage_limiter!, alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::CKLLSRK65_4M_4R, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = CKLLSRK65_4M_4RConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK4RPCache( + u, uprev, k, uᵢ₋₁, uᵢ₋₂, uᵢ₋₃, fᵢ₋₂, fᵢ₋₃, gprev, fsalfirst, tmp, + atmp, tab, alg.stage_limiter!, alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::CKLLSRK65_4M_4R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CKLLSRK65_4M_4RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CKLLSRK65_4M_4RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function CKLLSRK85_4FM_4RConstantCache(T, T2) @@ -3884,32 +4568,46 @@ function CKLLSRK85_4FM_4RConstantCache(T, T2) B̂ₗ = convert(T, BigInt(-2393889703871) // BigInt(16641202878460)) C1 = convert(T2, BigInt(319960152914) // BigInt(39034091721739)) - C2 = convert(T2, - BigInt(10916931475666701983218135) // BigInt(56630581182979020764713442)) - C3 = convert(T2, + C2 = convert( + T2, + BigInt(10916931475666701983218135) // BigInt(56630581182979020764713442) + ) + C3 = convert( + T2, BigInt(31845189551971545944223680050155078355) // - BigInt(113561670251926090809438891701398790454)) - C4 = convert(T2, + BigInt(113561670251926090809438891701398790454) + ) + C4 = convert( + T2, BigInt(585892393366635581491792016142825500310911249371223) // - BigInt(871432942801472160798333604371480303171919616321325)) - C5 = convert(T2, + BigInt(871432942801472160798333604371480303171919616321325) + ) + C5 = convert( + T2, BigInt(6030664727234996630401450278844701818157369618311237) // - BigInt(8305630304762506786823923305099106403075216590053000)) - C6 = convert(T2, + BigInt(8305630304762506786823923305099106403075216590053000) + ) + C6 = convert( + T2, BigInt(190737487565451971541550207118478711767748834018874068552898297) // - BigInt(190737487565451971541550204260359567420033302718711745345318816)) - C7 = convert(T2, + BigInt(190737487565451971541550204260359567420033302718711745345318816) + ) + C7 = convert( + T2, BigInt(194373043039840208108258122050794558876) // - BigInt(388106905684556737922360607016380520227)) + BigInt(388106905684556737922360607016380520227) + ) Cᵢ = SVector(C1, C2, C3, C4, C5, C6, C7) - LowStorageRK4RPConstantCache{7, T, T2}(Aᵢ₁, Aᵢ₂, Aᵢ₃, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) + return LowStorageRK4RPConstantCache{7, T, T2}(Aᵢ₁, Aᵢ₂, Aᵢ₃, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) end -function alg_cache(alg::CKLLSRK85_4FM_4R, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CKLLSRK85_4FM_4R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) @@ -3925,24 +4623,34 @@ function alg_cache(alg::CKLLSRK85_4FM_4R, u, rate_prototype, ::Type{uEltypeNoUni else fsalfirst = k end - tab = CKLLSRK85_4FM_4RConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK4RPCache(u, uprev, k, uᵢ₋₁, uᵢ₋₂, uᵢ₋₃, fᵢ₋₂, fᵢ₋₃, gprev, fsalfirst, tmp, - atmp, tab, alg.stage_limiter!, alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::CKLLSRK85_4FM_4R, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = CKLLSRK85_4FM_4RConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK4RPCache( + u, uprev, k, uᵢ₋₁, uᵢ₋₂, uᵢ₋₃, fᵢ₋₂, fᵢ₋₃, gprev, fsalfirst, tmp, + atmp, tab, alg.stage_limiter!, alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::CKLLSRK85_4FM_4R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CKLLSRK85_4FM_4RConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CKLLSRK85_4FM_4RConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) end # 5R+ low storage methods introduced by van der Houwen -@cache struct LowStorageRK5RPCache{uType, rateType, uNoUnitsType, TabType, StageLimiter, - StepLimiter, Thread} <: - LowStorageRKMutableCache +@cache struct LowStorageRK5RPCache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, + StepLimiter, Thread, + } <: + LowStorageRKMutableCache u::uType uprev::uType k::rateType @@ -4028,29 +4736,41 @@ function CKLLSRK75_4M_5RConstantCache(T, T2) B̂ₗ = convert(T, BigInt(930770261899) // BigInt(11134660916874)) C1 = convert(T2, BigInt(984894634849) // BigInt(6216792334776)) - C2 = convert(T2, - BigInt(19691532261044641782999041) // BigInt(82863799157714161922926528)) - C3 = convert(T2, + C2 = convert( + T2, + BigInt(19691532261044641782999041) // BigInt(82863799157714161922926528) + ) + C3 = convert( + T2, BigInt(579140763944732527715749105230082493541) // - BigInt(1146776047854201324825397010814855303604)) - C4 = convert(T2, + BigInt(1146776047854201324825397010814855303604) + ) + C4 = convert( + T2, BigInt(1904235205010770769196995566618512437342488019008993) // - BigInt(2620260981179174237577004881164696841381017975634264)) - C5 = convert(T2, + BigInt(2620260981179174237577004881164696841381017975634264) + ) + C5 = convert( + T2, BigInt(4745866356039511505795256436748010529615723318082554645080208661) // - BigInt(46784744516176933667763632070461960177241008032286254911869725672)) - C6 = convert(T2, + BigInt(46784744516176933667763632070461960177241008032286254911869725672) + ) + C6 = convert( + T2, BigInt(309879595293732553069368807532997606922999693101104106883289601491) // - BigInt(309879595293732553069368804305686805880909932549908997963514738540)) + BigInt(309879595293732553069368804305686805880909932549908997963514738540) + ) Cᵢ = SVector(C1, C2, C3, C4, C5, C6) - LowStorageRK5RPConstantCache{6, T, T2}(Aᵢ₁, Aᵢ₂, Aᵢ₃, Aᵢ₄, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) + return LowStorageRK5RPConstantCache{6, T, T2}(Aᵢ₁, Aᵢ₂, Aᵢ₃, Aᵢ₄, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) end -function alg_cache(alg::CKLLSRK75_4M_5R, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CKLLSRK75_4M_5R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) @@ -4068,16 +4788,22 @@ function alg_cache(alg::CKLLSRK75_4M_5R, u, rate_prototype, ::Type{uEltypeNoUnit else fsalfirst = k end - tab = CKLLSRK75_4M_5RConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - LowStorageRK5RPCache(u, uprev, k, uᵢ₋₁, uᵢ₋₂, uᵢ₋₃, uᵢ₋₄, fᵢ₋₂, fᵢ₋₃, fᵢ₋₄, gprev, + tab = CKLLSRK75_4M_5RConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return LowStorageRK5RPCache( + u, uprev, k, uᵢ₋₁, uᵢ₋₂, uᵢ₋₃, uᵢ₋₄, fᵢ₋₂, fᵢ₋₃, fᵢ₋₄, gprev, fsalfirst, tmp, atmp, tab, alg.stage_limiter!, alg.step_limiter!, - alg.thread) + alg.thread + ) end -function alg_cache(alg::CKLLSRK75_4M_5R, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CKLLSRK75_4M_5R, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CKLLSRK75_4M_5RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CKLLSRK75_4M_5RConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end diff --git a/lib/OrdinaryDiffEqLowStorageRK/src/low_storage_rk_perform_step.jl b/lib/OrdinaryDiffEqLowStorageRK/src/low_storage_rk_perform_step.jl index f963c494fe..badbac4d15 100644 --- a/lib/OrdinaryDiffEqLowStorageRK/src/low_storage_rk_perform_step.jl +++ b/lib/OrdinaryDiffEqLowStorageRK/src/low_storage_rk_perform_step.jl @@ -7,11 +7,13 @@ function initialize!(integrator, cache::LowStorageRK2NConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end -@muladd function perform_step!(integrator, cache::LowStorageRK2NConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::LowStorageRK2NConstantCache, + repeat_step = false + ) (; t, dt, u, f, p) = integrator (; A2end, B1, B2end, c2end) = cache @@ -41,7 +43,7 @@ function initialize!(integrator, cache::LowStorageRK2NCache) resize!(integrator.k, integrator.kshortsize) integrator.k[1] = k integrator.f(k, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::LowStorageRK2NCache, repeat_step = false) @@ -52,18 +54,18 @@ end # u1 f(k, u, p, t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false thread=thread tmp=dt*k - @.. broadcast=false thread=thread u=u+B1*tmp + @.. broadcast = false thread = thread tmp = dt * k + @.. broadcast = false thread = thread u = u + B1 * tmp # other stages for i in eachindex(A2end) if williamson_condition f(ArrayFuse(tmp, u, (A2end[i], dt, B2end[i])), u, p, t + c2end[i] * dt) else - @.. broadcast=false thread=thread tmp=A2end[i]*tmp + @.. broadcast = false thread = thread tmp = A2end[i] * tmp stage_limiter!(u, integrator, p, t + c2end[i] * dt) f(k, u, p, t + c2end[i] * dt) - @.. broadcast=false thread=thread tmp=tmp+dt*k - @.. broadcast=false thread=thread u=u+B2end[i]*tmp + @.. broadcast = false thread = thread tmp = tmp + dt * k + @.. broadcast = false thread = thread u = u + B2end[i] * tmp end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @@ -80,11 +82,13 @@ function initialize!(integrator, cache::LowStorageRK2CConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end -@muladd function perform_step!(integrator, cache::LowStorageRK2CConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::LowStorageRK2CConstantCache, + repeat_step = false + ) (; t, dt, u, f, p) = integrator (; A2end, B1, B2end, c2end) = cache @@ -112,7 +116,7 @@ function initialize!(integrator, cache::LowStorageRK2CCache) resize!(integrator.k, integrator.kshortsize) integrator.k[1] = integrator.fsalfirst integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::LowStorageRK2CCache, repeat_step = false) @@ -121,15 +125,15 @@ end (; A2end, B1, B2end, c2end) = cache.tab # u1 - @.. broadcast=false thread=thread k=integrator.fsalfirst - @.. broadcast=false thread=thread u=u+B1*dt*k + @.. broadcast = false thread = thread k = integrator.fsalfirst + @.. broadcast = false thread = thread u = u + B1 * dt * k # other stages for i in eachindex(A2end) - @.. broadcast=false thread=thread tmp=u+A2end[i]*dt*k + @.. broadcast = false thread = thread tmp = u + A2end[i] * dt * k f(k, tmp, p, t + c2end[i] * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false thread=thread u=u+B2end[i]*dt*k + @.. broadcast = false thread = thread u = u + B2end[i] * dt * k end step_limiter!(u, integrator, p, t + dt) f(k, u, p, t + dt) @@ -145,11 +149,13 @@ function initialize!(integrator, cache::LowStorageRK3SConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end -@muladd function perform_step!(integrator, cache::LowStorageRK3SConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::LowStorageRK3SConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end) = cache @@ -178,7 +184,7 @@ function initialize!(integrator, cache::LowStorageRK3SCache) resize!(integrator.k, integrator.kshortsize) integrator.k[1] = integrator.fsalfirst integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::LowStorageRK3SCache, repeat_step = false) @@ -187,17 +193,17 @@ end (; γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end) = cache.tab # u1 - @.. broadcast=false thread=thread tmp=u - @.. broadcast=false thread=thread u=tmp+β1*dt*integrator.fsalfirst + @.. broadcast = false thread = thread tmp = u + @.. broadcast = false thread = thread u = tmp + β1 * dt * integrator.fsalfirst # other stages for i in eachindex(γ12end) f(k, u, p, t + c2end[i] * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false thread=thread tmp=tmp+δ2end[i]*u - @.. broadcast=false thread=thread u=γ12end[i]*u+γ22end[i]*tmp+ - γ32end[i]*uprev+ - β2end[i]*dt*k + @.. broadcast = false thread = thread tmp = tmp + δ2end[i] * u + @.. broadcast = false thread = thread u = γ12end[i] * u + γ22end[i] * tmp + + γ32end[i] * uprev + + β2end[i] * dt * k end step_limiter!(u, integrator, p, t + dt) @@ -214,11 +220,13 @@ function initialize!(integrator, cache::LowStorageRK3SpConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end -@muladd function perform_step!(integrator, cache::LowStorageRK3SpConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::LowStorageRK3SpConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end, bhat1, bhat2end) = cache @@ -246,8 +254,10 @@ end end if integrator.opts.adaptive - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -259,7 +269,7 @@ function initialize!(integrator, cache::LowStorageRK3SpCache) integrator.kshortsize = 1 resize!(integrator.k, integrator.kshortsize) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::LowStorageRK3SpCache, repeat_step = false) @@ -270,10 +280,10 @@ end # u1 f(integrator.fsalfirst, uprev, p, t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false thread=thread tmp=uprev - @.. broadcast=false thread=thread u=tmp+β1*dt*integrator.fsalfirst + @.. broadcast = false thread = thread tmp = uprev + @.. broadcast = false thread = thread u = tmp + β1 * dt * integrator.fsalfirst if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=bhat1*dt*integrator.fsalfirst + @.. broadcast = false thread = thread utilde = bhat1 * dt * integrator.fsalfirst end # other stages @@ -281,11 +291,11 @@ end stage_limiter!(u, integrator, p, t + c2end[i] * dt) f(k, u, p, t + c2end[i] * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false thread=thread tmp=tmp+δ2end[i]*u - @.. broadcast=false thread=thread u=γ12end[i]*u+γ22end[i]*tmp+ - γ32end[i]*uprev+β2end[i]*dt*k + @.. broadcast = false thread = thread tmp = tmp + δ2end[i] * u + @.. broadcast = false thread = thread u = γ12end[i] * u + γ22end[i] * tmp + + γ32end[i] * uprev + β2end[i] * dt * k if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=utilde+bhat2end[i]*dt*k + @.. broadcast = false thread = thread utilde = utilde + bhat2end[i] * dt * k end end @@ -293,9 +303,11 @@ end step_limiter!(u, integrator, p, t + dt) if integrator.opts.adaptive - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -310,11 +322,13 @@ function initialize!(integrator, cache::LowStorageRK3SpFSALConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -@muladd function perform_step!(integrator, cache::LowStorageRK3SpFSALConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::LowStorageRK3SpFSALConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; γ12end, γ22end, γ32end, δ2end, β1, β2end, c2end, bhat1, bhat2end, bhatfsal) = cache @@ -344,8 +358,10 @@ end if integrator.opts.adaptive utilde = utilde + bhatfsal * dt * integrator.fsallast - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -362,21 +378,25 @@ function initialize!(integrator, cache::LowStorageRK3SpFSALCache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end -@muladd function perform_step!(integrator, cache::LowStorageRK3SpFSALCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::LowStorageRK3SpFSALCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; k, tmp, utilde, atmp, stage_limiter!, step_limiter!, thread) = cache - (; γ12end, γ22end, γ32end, δ2end, β1, β2end, - c2end, bhat1, bhat2end, bhatfsal) = cache.tab + (; + γ12end, γ22end, γ32end, δ2end, β1, β2end, + c2end, bhat1, bhat2end, bhatfsal, + ) = cache.tab # u1 - @.. broadcast=false thread=thread tmp=uprev - @.. broadcast=false thread=thread u=tmp+β1*dt*integrator.fsalfirst + @.. broadcast = false thread = thread tmp = uprev + @.. broadcast = false thread = thread u = tmp + β1 * dt * integrator.fsalfirst if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=bhat1*dt*integrator.fsalfirst + @.. broadcast = false thread = thread utilde = bhat1 * dt * integrator.fsalfirst end # other stages @@ -384,11 +404,11 @@ end stage_limiter!(u, integrator, p, t + c2end[i] * dt) f(k, u, p, t + c2end[i] * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false thread=thread tmp=tmp+δ2end[i]*u - @.. broadcast=false thread=thread u=γ12end[i]*u+γ22end[i]*tmp+ - γ32end[i]*uprev+β2end[i]*dt*k + @.. broadcast = false thread = thread tmp = tmp + δ2end[i] * u + @.. broadcast = false thread = thread u = γ12end[i] * u + γ22end[i] * tmp + + γ32end[i] * uprev + β2end[i] * dt * k if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=utilde+bhat2end[i]*dt*k + @.. broadcast = false thread = thread utilde = utilde + bhat2end[i] * dt * k end end @@ -400,10 +420,12 @@ end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=utilde+bhatfsal*dt*k - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = utilde + bhatfsal * dt * k + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -417,11 +439,13 @@ function initialize!(integrator, cache::LowStorageRK2RPConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end -@muladd function perform_step!(integrator, cache::LowStorageRK2RPConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::LowStorageRK2RPConstantCache, + repeat_step = false + ) (; t, dt, u, uprev, f, fsalfirst, p) = integrator (; Aᵢ, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) = cache @@ -445,8 +469,10 @@ end #Error estimate if integrator.opts.adaptive - atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -463,7 +489,7 @@ function initialize!(integrator, cache::LowStorageRK2RPCache) resize!(integrator.k, integrator.kshortsize) integrator.k[1] = integrator.fsalfirst integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::LowStorageRK2RPCache, repeat_step = false) @@ -471,29 +497,31 @@ end (; k, gprev, tmp, atmp, stage_limiter!, step_limiter!, thread) = cache (; Aᵢ, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) = cache.tab - @.. broadcast=false thread=thread k=fsalfirst - integrator.opts.adaptive && (@.. broadcast=false tmp=zero(uprev)) + @.. broadcast = false thread = thread k = fsalfirst + integrator.opts.adaptive && (@.. broadcast = false tmp = zero(uprev)) #stages 1 to s-1 for i in eachindex(Aᵢ) integrator.opts.adaptive && - (@.. broadcast=false thread=thread tmp=tmp+(Bᵢ[i]-B̂ᵢ[i])*dt*k) - @.. broadcast=false thread=thread gprev=u+Aᵢ[i]*dt*k - @.. broadcast=false thread=thread u=u+Bᵢ[i]*dt*k + (@.. broadcast = false thread = thread tmp = tmp + (Bᵢ[i] - B̂ᵢ[i]) * dt * k) + @.. broadcast = false thread = thread gprev = u + Aᵢ[i] * dt * k + @.. broadcast = false thread = thread u = u + Bᵢ[i] * dt * k f(k, gprev, p, t + Cᵢ[i] * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end #last stage integrator.opts.adaptive && - (@.. broadcast=false thread=thread tmp=tmp+(Bₗ-B̂ₗ)*dt*k) - @.. broadcast=false thread=thread u=u+Bₗ*dt*k + (@.. broadcast = false thread = thread tmp = tmp + (Bₗ - B̂ₗ) * dt * k) + @.. broadcast = false thread = thread u = u + Bₗ * dt * k #Error estimate if integrator.opts.adaptive - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -511,11 +539,13 @@ function initialize!(integrator, cache::LowStorageRK3RPConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end -@muladd function perform_step!(integrator, cache::LowStorageRK3RPConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::LowStorageRK3RPConstantCache, + repeat_step = false + ) (; t, dt, u, uprev, f, fsalfirst, p) = integrator (; Aᵢ₁, Aᵢ₂, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) = cache @@ -545,8 +575,10 @@ end #Error estimate if integrator.opts.adaptive - atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -563,7 +595,7 @@ function initialize!(integrator, cache::LowStorageRK3RPCache) resize!(integrator.k, integrator.kshortsize) integrator.k[1] = integrator.fsalfirst integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::LowStorageRK3RPCache, repeat_step = false) @@ -571,37 +603,39 @@ end (; k, uᵢ₋₁, uᵢ₋₂, gprev, fᵢ₋₂, tmp, atmp, stage_limiter!, step_limiter!, thread) = cache (; Aᵢ₁, Aᵢ₂, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) = cache.tab - @.. broadcast=false thread=thread fᵢ₋₂=zero(fsalfirst) - @.. broadcast=false thread=thread k=fsalfirst - integrator.opts.adaptive && (@.. broadcast=false thread=thread tmp=zero(uprev)) - @.. broadcast=false thread=thread uᵢ₋₁=uprev - @.. broadcast=false thread=thread uᵢ₋₂=uprev + @.. broadcast = false thread = thread fᵢ₋₂ = zero(fsalfirst) + @.. broadcast = false thread = thread k = fsalfirst + integrator.opts.adaptive && (@.. broadcast = false thread = thread tmp = zero(uprev)) + @.. broadcast = false thread = thread uᵢ₋₁ = uprev + @.. broadcast = false thread = thread uᵢ₋₂ = uprev #stages 1 to s-1 for i in eachindex(Aᵢ₁) integrator.opts.adaptive && - (@.. broadcast=false thread=thread tmp=tmp+(Bᵢ[i]-B̂ᵢ[i])*dt*k) - @.. broadcast=false thread=thread gprev=uᵢ₋₂+(Aᵢ₁[i]*k+Aᵢ₂[i]*fᵢ₋₂)*dt - @.. broadcast=false thread=thread u=u+Bᵢ[i]*dt*k - @.. broadcast=false thread=thread fᵢ₋₂=k - @.. broadcast=false thread=thread uᵢ₋₂=uᵢ₋₁ - @.. broadcast=false thread=thread uᵢ₋₁=u + (@.. broadcast = false thread = thread tmp = tmp + (Bᵢ[i] - B̂ᵢ[i]) * dt * k) + @.. broadcast = false thread = thread gprev = uᵢ₋₂ + (Aᵢ₁[i] * k + Aᵢ₂[i] * fᵢ₋₂) * dt + @.. broadcast = false thread = thread u = u + Bᵢ[i] * dt * k + @.. broadcast = false thread = thread fᵢ₋₂ = k + @.. broadcast = false thread = thread uᵢ₋₂ = uᵢ₋₁ + @.. broadcast = false thread = thread uᵢ₋₁ = u f(k, gprev, p, t + Cᵢ[i] * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end #last stage integrator.opts.adaptive && - (@.. broadcast=false thread=thread tmp=tmp+(Bₗ-B̂ₗ)*dt*k) - @.. broadcast=false thread=thread u=u+Bₗ*dt*k + (@.. broadcast = false thread = thread tmp = tmp + (Bₗ - B̂ₗ) * dt * k) + @.. broadcast = false thread = thread u = u + Bₗ * dt * k step_limiter!(u, integrator, p, t + dt) #Error estimate if integrator.opts.adaptive - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -618,11 +652,13 @@ function initialize!(integrator, cache::LowStorageRK4RPConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end -@muladd function perform_step!(integrator, cache::LowStorageRK4RPConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::LowStorageRK4RPConstantCache, + repeat_step = false + ) (; t, dt, u, uprev, f, fsalfirst, p) = integrator (; Aᵢ₁, Aᵢ₂, Aᵢ₃, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) = cache @@ -656,8 +692,10 @@ end #Error estimate if integrator.opts.adaptive - atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -674,53 +712,59 @@ function initialize!(integrator, cache::LowStorageRK4RPCache) resize!(integrator.k, integrator.kshortsize) integrator.k[1] = integrator.fsalfirst integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::LowStorageRK4RPCache, repeat_step = false) (; t, dt, u, uprev, f, fsalfirst, p) = integrator - (; k, uᵢ₋₁, uᵢ₋₂, uᵢ₋₃, gprev, fᵢ₋₂, fᵢ₋₃, tmp, atmp, - stage_limiter!, step_limiter!, thread) = cache + (; + k, uᵢ₋₁, uᵢ₋₂, uᵢ₋₃, gprev, fᵢ₋₂, fᵢ₋₃, tmp, atmp, + stage_limiter!, step_limiter!, thread, + ) = cache (; Aᵢ₁, Aᵢ₂, Aᵢ₃, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) = cache.tab - @.. broadcast=false thread=thread fᵢ₋₂=zero(fsalfirst) - @.. broadcast=false thread=thread fᵢ₋₃=zero(fsalfirst) - @.. broadcast=false thread=thread k=fsalfirst - integrator.opts.adaptive && (@.. broadcast=false thread=thread tmp=zero(uprev)) - @.. broadcast=false thread=thread uᵢ₋₁=uprev - @.. broadcast=false thread=thread uᵢ₋₂=uprev - @.. broadcast=false thread=thread uᵢ₋₃=uprev + @.. broadcast = false thread = thread fᵢ₋₂ = zero(fsalfirst) + @.. broadcast = false thread = thread fᵢ₋₃ = zero(fsalfirst) + @.. broadcast = false thread = thread k = fsalfirst + integrator.opts.adaptive && (@.. broadcast = false thread = thread tmp = zero(uprev)) + @.. broadcast = false thread = thread uᵢ₋₁ = uprev + @.. broadcast = false thread = thread uᵢ₋₂ = uprev + @.. broadcast = false thread = thread uᵢ₋₃ = uprev #stages 1 to s-1 for i in eachindex(Aᵢ₁) integrator.opts.adaptive && - (@.. broadcast=false thread=thread tmp=tmp+(Bᵢ[i]-B̂ᵢ[i])*dt*k) - @.. broadcast=false thread=thread gprev=uᵢ₋₃+ - (Aᵢ₁[i]*k+Aᵢ₂[i]*fᵢ₋₂+ - Aᵢ₃[i]*fᵢ₋₃)* - dt - @.. broadcast=false thread=thread u=u+Bᵢ[i]*dt*k - @.. broadcast=false thread=thread fᵢ₋₃=fᵢ₋₂ - @.. broadcast=false thread=thread fᵢ₋₂=k - @.. broadcast=false thread=thread uᵢ₋₃=uᵢ₋₂ - @.. broadcast=false thread=thread uᵢ₋₂=uᵢ₋₁ - @.. broadcast=false thread=thread uᵢ₋₁=u + (@.. broadcast = false thread = thread tmp = tmp + (Bᵢ[i] - B̂ᵢ[i]) * dt * k) + @.. broadcast = false thread = thread gprev = uᵢ₋₃ + + ( + Aᵢ₁[i] * k + Aᵢ₂[i] * fᵢ₋₂ + + Aᵢ₃[i] * fᵢ₋₃ + ) * + dt + @.. broadcast = false thread = thread u = u + Bᵢ[i] * dt * k + @.. broadcast = false thread = thread fᵢ₋₃ = fᵢ₋₂ + @.. broadcast = false thread = thread fᵢ₋₂ = k + @.. broadcast = false thread = thread uᵢ₋₃ = uᵢ₋₂ + @.. broadcast = false thread = thread uᵢ₋₂ = uᵢ₋₁ + @.. broadcast = false thread = thread uᵢ₋₁ = u f(k, gprev, p, t + Cᵢ[i] * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end #last stage integrator.opts.adaptive && - (@.. broadcast=false thread=thread tmp=tmp+(Bₗ-B̂ₗ)*dt*k) - @.. broadcast=false thread=thread u=u+Bₗ*dt*k + (@.. broadcast = false thread = thread tmp = tmp + (Bₗ - B̂ₗ) * dt * k) + @.. broadcast = false thread = thread u = u + Bₗ * dt * k step_limiter!(u, integrator, p, t + dt) #Error estimate if integrator.opts.adaptive - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -737,11 +781,13 @@ function initialize!(integrator, cache::LowStorageRK5RPConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end -@muladd function perform_step!(integrator, cache::LowStorageRK5RPConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::LowStorageRK5RPConstantCache, + repeat_step = false + ) (; t, dt, u, uprev, f, fsalfirst, p) = integrator (; Aᵢ₁, Aᵢ₂, Aᵢ₃, Aᵢ₄, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) = cache @@ -779,8 +825,10 @@ end #Error estimate if integrator.opts.adaptive - atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -797,57 +845,63 @@ function initialize!(integrator, cache::LowStorageRK5RPCache) resize!(integrator.k, integrator.kshortsize) integrator.k[1] = integrator.fsalfirst integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::LowStorageRK5RPCache, repeat_step = false) (; t, dt, u, uprev, f, fsalfirst, p) = integrator - (; k, uᵢ₋₁, uᵢ₋₂, uᵢ₋₃, uᵢ₋₄, gprev, fᵢ₋₂, fᵢ₋₃, fᵢ₋₄, tmp, - atmp, stage_limiter!, step_limiter!, thread) = cache + (; + k, uᵢ₋₁, uᵢ₋₂, uᵢ₋₃, uᵢ₋₄, gprev, fᵢ₋₂, fᵢ₋₃, fᵢ₋₄, tmp, + atmp, stage_limiter!, step_limiter!, thread, + ) = cache (; Aᵢ₁, Aᵢ₂, Aᵢ₃, Aᵢ₄, Bₗ, B̂ₗ, Bᵢ, B̂ᵢ, Cᵢ) = cache.tab - @.. broadcast=false thread=thread fᵢ₋₂=zero(fsalfirst) - @.. broadcast=false thread=thread fᵢ₋₃=zero(fsalfirst) - @.. broadcast=false thread=thread fᵢ₋₄=zero(fsalfirst) - @.. broadcast=false thread=thread k=fsalfirst - integrator.opts.adaptive && (@.. broadcast=false thread=thread tmp=zero(uprev)) - @.. broadcast=false thread=thread uᵢ₋₁=uprev - @.. broadcast=false thread=thread uᵢ₋₂=uprev - @.. broadcast=false thread=thread uᵢ₋₃=uprev - @.. broadcast=false thread=thread uᵢ₋₄=uprev + @.. broadcast = false thread = thread fᵢ₋₂ = zero(fsalfirst) + @.. broadcast = false thread = thread fᵢ₋₃ = zero(fsalfirst) + @.. broadcast = false thread = thread fᵢ₋₄ = zero(fsalfirst) + @.. broadcast = false thread = thread k = fsalfirst + integrator.opts.adaptive && (@.. broadcast = false thread = thread tmp = zero(uprev)) + @.. broadcast = false thread = thread uᵢ₋₁ = uprev + @.. broadcast = false thread = thread uᵢ₋₂ = uprev + @.. broadcast = false thread = thread uᵢ₋₃ = uprev + @.. broadcast = false thread = thread uᵢ₋₄ = uprev #stages 1 to s-1 for i in eachindex(Aᵢ₁) integrator.opts.adaptive && - (@.. broadcast=false thread=thread tmp=tmp+(Bᵢ[i]-B̂ᵢ[i])*dt*k) - @.. broadcast=false thread=thread gprev=uᵢ₋₄+ - (Aᵢ₁[i]*k+Aᵢ₂[i]*fᵢ₋₂+ - Aᵢ₃[i]*fᵢ₋₃+ - Aᵢ₄[i]*fᵢ₋₄)*dt - @.. broadcast=false thread=thread u=u+Bᵢ[i]*dt*k - @.. broadcast=false thread=thread fᵢ₋₄=fᵢ₋₃ - @.. broadcast=false thread=thread fᵢ₋₃=fᵢ₋₂ - @.. broadcast=false thread=thread fᵢ₋₂=k - @.. broadcast=false thread=thread uᵢ₋₄=uᵢ₋₃ - @.. broadcast=false thread=thread uᵢ₋₃=uᵢ₋₂ - @.. broadcast=false thread=thread uᵢ₋₂=uᵢ₋₁ - @.. broadcast=false thread=thread uᵢ₋₁=u + (@.. broadcast = false thread = thread tmp = tmp + (Bᵢ[i] - B̂ᵢ[i]) * dt * k) + @.. broadcast = false thread = thread gprev = uᵢ₋₄ + + ( + Aᵢ₁[i] * k + Aᵢ₂[i] * fᵢ₋₂ + + Aᵢ₃[i] * fᵢ₋₃ + + Aᵢ₄[i] * fᵢ₋₄ + ) * dt + @.. broadcast = false thread = thread u = u + Bᵢ[i] * dt * k + @.. broadcast = false thread = thread fᵢ₋₄ = fᵢ₋₃ + @.. broadcast = false thread = thread fᵢ₋₃ = fᵢ₋₂ + @.. broadcast = false thread = thread fᵢ₋₂ = k + @.. broadcast = false thread = thread uᵢ₋₄ = uᵢ₋₃ + @.. broadcast = false thread = thread uᵢ₋₃ = uᵢ₋₂ + @.. broadcast = false thread = thread uᵢ₋₂ = uᵢ₋₁ + @.. broadcast = false thread = thread uᵢ₋₁ = u f(k, gprev, p, t + Cᵢ[i] * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end #last stage integrator.opts.adaptive && - (@.. broadcast=false thread=thread tmp=tmp+(Bₗ-B̂ₗ)*dt*k) - @.. broadcast=false thread=thread u=u+Bₗ*dt*k + (@.. broadcast = false thread = thread tmp = tmp + (Bₗ - B̂ₗ) * dt * k) + @.. broadcast = false thread = thread u = u + Bₗ * dt * k step_limiter!(u, integrator, p, t + dt) #Error estimate if integrator.opts.adaptive - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -862,7 +916,7 @@ function initialize!(integrator, cache::RK46NLCache) resize!(integrator.k, integrator.kshortsize) integrator.k[1] = integrator.fsalfirst integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::RK46NLCache, repeat_step = false) @@ -871,33 +925,33 @@ end (; α2, α3, α4, α5, α6, β1, β2, β3, β4, β5, β6, c2, c3, c4, c5, c6) = cache.tab # u1 - @.. broadcast=false thread=thread tmp=dt*fsalfirst - @.. broadcast=false thread=thread u=uprev+β1*tmp + @.. broadcast = false thread = thread tmp = dt * fsalfirst + @.. broadcast = false thread = thread u = uprev + β1 * tmp stage_limiter!(u, integrator, p, t + c2 * dt) # u2 f(k, u, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=α2*tmp+dt*k - @.. broadcast=false thread=thread u=u+β2*tmp + @.. broadcast = false thread = thread tmp = α2 * tmp + dt * k + @.. broadcast = false thread = thread u = u + β2 * tmp stage_limiter!(u, integrator, p, t + c3 * dt) # u3 f(k, u, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=α3*tmp+dt*k - @.. broadcast=false thread=thread u=u+β3*tmp + @.. broadcast = false thread = thread tmp = α3 * tmp + dt * k + @.. broadcast = false thread = thread u = u + β3 * tmp stage_limiter!(u, integrator, p, t + c4 * dt) # u4 f(k, u, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=α4*tmp+dt*k - @.. broadcast=false thread=thread u=u+β4*tmp + @.. broadcast = false thread = thread tmp = α4 * tmp + dt * k + @.. broadcast = false thread = thread u = u + β4 * tmp stage_limiter!(u, integrator, p, t + c5 * dt) # u5 = u f(k, u, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=α5*tmp+dt*k - @.. broadcast=false thread=thread u=u+β5*tmp + @.. broadcast = false thread = thread tmp = α5 * tmp + dt * k + @.. broadcast = false thread = thread u = u + β5 * tmp stage_limiter!(u, integrator, p, t + c6 * dt) f(k, u, p, t + c6 * dt) - @.. broadcast=false thread=thread tmp=α6*tmp+dt*k - @.. broadcast=false thread=thread u=u+β6*tmp + @.. broadcast = false thread = thread tmp = α6 * tmp + dt * k + @.. broadcast = false thread = thread u = u + β6 * tmp stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) @@ -913,7 +967,7 @@ function initialize!(integrator, cache::RK46NLConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::RK46NLConstantCache, repeat_step = false) @@ -954,11 +1008,13 @@ function initialize!(integrator, cache::SHLDDRK52ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -@muladd function perform_step!(integrator, cache::SHLDDRK52ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::SHLDDRK52ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; α2, α3, α4, α5, β1, β2, β3, β4, β5, c2, c3, c4, c5) = cache @@ -993,7 +1049,7 @@ function initialize!(integrator, cache::SHLDDRK52Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::SHLDDRK52Cache, repeat_step = false) @@ -1002,28 +1058,28 @@ end (; α2, α3, α4, α5, β1, β2, β3, β4, β5, c2, c3, c4, c5) = cache.tab # u1 - @.. thread=thread tmp=dt*fsalfirst - @.. thread=thread u=uprev+β1*tmp + @.. thread = thread tmp = dt * fsalfirst + @.. thread = thread u = uprev + β1 * tmp stage_limiter!(u, integrator, p, t + c2 * dt) # u2 f(k, u, p, t + c2 * dt) - @.. thread=thread tmp=α2*tmp+dt*k - @.. thread=thread u=u+β2*tmp + @.. thread = thread tmp = α2 * tmp + dt * k + @.. thread = thread u = u + β2 * tmp stage_limiter!(u, integrator, p, t + c3 * dt) # u3 f(k, u, p, t + c3 * dt) - @.. thread=thread tmp=α3*tmp+dt*k - @.. thread=thread u=u+β3*tmp + @.. thread = thread tmp = α3 * tmp + dt * k + @.. thread = thread u = u + β3 * tmp stage_limiter!(u, integrator, p, t + c4 * dt) # u4 f(k, u, p, t + c4 * dt) - @.. thread=thread tmp=α4*tmp+dt*k - @.. thread=thread u=u+β4*tmp + @.. thread = thread tmp = α4 * tmp + dt * k + @.. thread = thread u = u + β4 * tmp stage_limiter!(u, integrator, p, t + c5 * dt) # u5 = u f(k, u, p, t + c5 * dt) - @.. thread=thread tmp=α5*tmp+dt*k - @.. thread=thread u=u+β5*tmp + @.. thread = thread tmp = α5 * tmp + dt * k + @.. thread = thread u = u + β5 * tmp stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) @@ -1040,14 +1096,18 @@ function initialize!(integrator, cache::SHLDDRK_2NConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -@muladd function perform_step!(integrator, cache::SHLDDRK_2NConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::SHLDDRK_2NConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator - (; α21, α31, α41, α51, β11, β21, β31, β41, β51, c21, c31, c41, c51, α22, α32, - α42, α52, α62, β12, β22, β32, β42, β52, β62, c22, c32, c42, c52, c62) = cache + (; + α21, α31, α41, α51, β11, β21, β31, β41, β51, c21, c31, c41, c51, α22, α32, + α42, α52, α62, β12, β22, β32, β42, β52, β62, c22, c32, c42, c52, c62, + ) = cache if integrator.u_modified cache.step = 1 @@ -1109,14 +1169,16 @@ function initialize!(integrator, cache::SHLDDRK_2NCache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::SHLDDRK_2NCache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator (; k, fsalfirst, tmp, stage_limiter!, step_limiter!, thread) = cache - (; α21, α31, α41, α51, β11, β21, β31, β41, β51, c21, c31, c41, c51, α22, α32, α42, - α52, α62, β12, β22, β32, β42, β52, β62, c22, c32, c42, c52, c62) = cache.tab + (; + α21, α31, α41, α51, β11, β21, β31, β41, β51, c21, c31, c41, c51, α22, α32, α42, + α52, α62, β12, β22, β32, β42, β52, β62, c22, c32, c42, c52, c62, + ) = cache.tab if integrator.u_modified cache.step = 1 @@ -1124,28 +1186,28 @@ end if cache.step % 2 == 1 # u1 - @.. thread=thread tmp=dt*fsalfirst - @.. thread=thread u=uprev+β11*tmp + @.. thread = thread tmp = dt * fsalfirst + @.. thread = thread u = uprev + β11 * tmp stage_limiter!(u, integrator, p, t + c21 * dt) # u2 f(k, u, p, t + c21 * dt) - @.. thread=thread tmp=α21*tmp+dt*k - @.. thread=thread u=u+β21*tmp + @.. thread = thread tmp = α21 * tmp + dt * k + @.. thread = thread u = u + β21 * tmp stage_limiter!(u, integrator, p, t + c31 * dt) # u3 f(k, u, p, t + c31 * dt) - @.. thread=thread tmp=α31*tmp+dt*k - @.. thread=thread u=u+β31*tmp + @.. thread = thread tmp = α31 * tmp + dt * k + @.. thread = thread u = u + β31 * tmp stage_limiter!(u, integrator, p, t + c41 * dt) # u4 f(k, u, p, t + c41 * dt) - @.. thread=thread tmp=α41*tmp+dt*k - @.. thread=thread u=u+β41*tmp + @.. thread = thread tmp = α41 * tmp + dt * k + @.. thread = thread u = u + β41 * tmp stage_limiter!(u, integrator, p, t + c51 * dt) # u5 = u f(k, u, p, t + c51 * dt) - @.. thread=thread tmp=α51*tmp+dt*k - @.. thread=thread u=u+β51*tmp + @.. thread = thread tmp = α51 * tmp + dt * k + @.. thread = thread u = u + β51 * tmp stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) @@ -1153,33 +1215,33 @@ end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 5) else # u1 - @.. thread=thread tmp=dt*fsalfirst - @.. thread=thread u=uprev+β12*tmp + @.. thread = thread tmp = dt * fsalfirst + @.. thread = thread u = uprev + β12 * tmp stage_limiter!(u, integrator, p, t + c22 * dt) # u2 f(k, u, p, t + c22 * dt) - @.. thread=thread tmp=α22*tmp+dt*k - @.. thread=thread u=u+β22*tmp + @.. thread = thread tmp = α22 * tmp + dt * k + @.. thread = thread u = u + β22 * tmp stage_limiter!(u, integrator, p, t + c32 * dt) # u3 f(k, u, p, t + c32 * dt) - @.. thread=thread tmp=α32*tmp+dt*k - @.. thread=thread u=u+β32*tmp + @.. thread = thread tmp = α32 * tmp + dt * k + @.. thread = thread u = u + β32 * tmp stage_limiter!(u, integrator, p, t + c42 * dt) # u4 f(k, u, p, t + c42 * dt) - @.. thread=thread tmp=α42*tmp+dt*k - @.. thread=thread u=u+β42*tmp + @.. thread = thread tmp = α42 * tmp + dt * k + @.. thread = thread u = u + β42 * tmp stage_limiter!(u, integrator, p, t + c52 * dt) # u5 = u f(k, u, p, t + c52 * dt) - @.. thread=thread tmp=α52*tmp+dt*k - @.. thread=thread u=u+β52*tmp + @.. thread = thread tmp = α52 * tmp + dt * k + @.. thread = thread u = u + β52 * tmp stage_limiter!(u, integrator, p, t + c62 * dt) # u6 = u f(k, u, p, t + c62 * dt) - @.. thread=thread tmp=α62*tmp+dt*k - @.. thread=thread u=u+β62*tmp + @.. thread = thread tmp = α62 * tmp + dt * k + @.. thread = thread u = u + β62 * tmp stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) diff --git a/lib/OrdinaryDiffEqLowStorageRK/test/jet.jl b/lib/OrdinaryDiffEqLowStorageRK/test/jet.jl index a3916b9fac..3b609347a0 100644 --- a/lib/OrdinaryDiffEqLowStorageRK/test/jet.jl +++ b/lib/OrdinaryDiffEqLowStorageRK/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqLowStorageRK, target_defined_modules = true, mode = :typo) -end \ No newline at end of file + OrdinaryDiffEqLowStorageRK, target_defined_modules = true, mode = :typo + ) +end diff --git a/lib/OrdinaryDiffEqLowStorageRK/test/ode_low_storage_rk_tests.jl b/lib/OrdinaryDiffEqLowStorageRK/test/ode_low_storage_rk_tests.jl index 8257d245a0..e333177b81 100644 --- a/lib/OrdinaryDiffEqLowStorageRK/test/ode_low_storage_rk_tests.jl +++ b/lib/OrdinaryDiffEqLowStorageRK/test/ode_low_storage_rk_tests.jl @@ -9,23 +9,33 @@ f = (u, p, t) -> cos(t) prob_ode_sin = ODEProblem(ODEFunction(f; analytic = (u0, p, t) -> sin(t)), 0.0, (0.0, 1.0)) f = (du, u, p, t) -> du[1] = cos(t) -prob_ode_sin_inplace = ODEProblem(ODEFunction(f; analytic = (u0, p, t) -> [sin(t)]), [0.0], - (0.0, 1.0)) +prob_ode_sin_inplace = ODEProblem( + ODEFunction(f; analytic = (u0, p, t) -> [sin(t)]), [0.0], + (0.0, 1.0) +) f = (u, p, t) -> sin(u) prob_ode_nonlinear = ODEProblem( - ODEFunction(f; - analytic = (u0, p, t) -> 2 * acot(exp(-t) * - cot(0.5))), 1.0, - (0.0, 0.5)) + ODEFunction( + f; + analytic = (u0, p, t) -> 2 * acot( + exp(-t) * + cot(0.5) + ) + ), 1.0, + (0.0, 0.5) +) f = (du, u, p, t) -> du[1] = sin(u[1]) prob_ode_nonlinear_inplace = ODEProblem( - ODEFunction(f; + ODEFunction( + f; analytic = (u0, p, t) -> [ - 2 * acot(exp(-t) * cot(0.5)) - ]), - [1.0], (0.0, 0.5)) + 2 * acot(exp(-t) * cot(0.5)), + ] + ), + [1.0], (0.0, 0.5) +) test_problems_only_time = [prob_ode_sin, prob_ode_sin_inplace] test_problems_linear = [prob_ode_linear, prob_ode_2Dlinear, prob_ode_bigfloat2Dlinear] @@ -46,15 +56,15 @@ dts_SHLDDRK_2N = (1 / 2) .^ (0:3) alg = SHLDDRK_2N() for prob in test_problems_only_time sim = test_convergence(dts_SHLDDRK_2N, prob, alg) - @test sim.𝒪est[:final]≈4 atol=0.46 + @test sim.𝒪est[:final] ≈ 4 atol = 0.46 end for prob in test_problems_linear sim = test_convergence(dts_SHLDDRK_2N, prob, alg) - @test sim.𝒪est[:final]≈4 atol=0.46 + @test sim.𝒪est[:final] ≈ 4 atol = 0.46 end for prob in test_problems_nonlinear sim = test_convergence(dts_SHLDDRK_2N, prob, alg) - @test sim.𝒪est[:final]≈4 atol=1 + @test sim.𝒪est[:final] ≈ 4 atol = 1 # due to unusual saturation towards high dts(0.5 and onwards) and # saturation towards low dts due to less precision in the provided values of weights , tolerance is kept so high end @@ -64,15 +74,15 @@ dts = 1 .// 2 .^ (8:-1:4) alg = SHLDDRK52() for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test_broken sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test_broken sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test_broken sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test_broken sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test_broken sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test_broken sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end @testset "ORK256" begin @@ -81,42 +91,55 @@ end dts = 1 ./ 2 .^ (8:-1:4) for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 2 - integ = init(prob_ode_large, alg2, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg2, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 - integ = init(prob_ode_large, alg2, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg2, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -126,42 +149,55 @@ end dts = 1 ./ 2 .^ (7:-1:3) for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 2 - integ = init(prob_ode_large, alg2, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg2, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 - integ = init(prob_ode_large, alg2, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg2, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -177,42 +213,55 @@ end dts = 1 ./ 2 .^ (8:-1:4) for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test_broken sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test_broken sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test_broken sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test_broken sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test_broken sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test_broken sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test_broken sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test_broken sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test_broken sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test_broken sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test_broken sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test_broken sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 2 - integ = init(prob_ode_large, alg2, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg2, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 - integ = init(prob_ode_large, alg2, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg2, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -222,42 +271,55 @@ end dts = 1 ./ 2 .^ (8:-1:4) for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 2 - integ = init(prob_ode_large, alg2, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg2, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 - integ = init(prob_ode_large, alg2, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg2, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -267,42 +329,55 @@ end dts = 1 ./ 2 .^ (8:-1:4) for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 2 - integ = init(prob_ode_large, alg2, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg2, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 - integ = init(prob_ode_large, alg2, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg2, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -312,42 +387,55 @@ end dts = 1 ./ 2 .^ (8:-1:4) for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 2 - integ = init(prob_ode_large, alg2, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg2, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 - integ = init(prob_ode_large, alg2, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg2, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -357,42 +445,55 @@ end dts = 1 ./ 2 .^ (7:-1:3) for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 2 - integ = init(prob_ode_large, alg2, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg2, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 - integ = init(prob_ode_large, alg2, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg2, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -402,42 +503,55 @@ end dts = 1 ./ 2 .^ (8:-1:4) for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 2 - integ = init(prob_ode_large, alg2, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg2, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 - integ = init(prob_ode_large, alg2, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg2, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -447,42 +561,55 @@ end dts = 1 ./ 2 .^ (8:-1:4) for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol sim = test_convergence(dts, prob, alg2) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 2 - integ = init(prob_ode_large, alg2, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg2, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 - integ = init(prob_ode_large, alg2, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg2, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -491,30 +618,39 @@ end dts = 1 ./ 2 .^ (7:-1:4) for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -523,30 +659,39 @@ end dts = 1 ./ 2 .^ (8:-1:4) for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -555,26 +700,34 @@ end function RemakeNew(p::ODEProblem) u1 = @. BigFloat(p.u0) tsp1 = @. BigFloat(p.tspan) - remake(p; u0 = u1, tspan = tsp1) + return remake(p; u0 = u1, tspan = tsp1) end test_problems_only_time_BigFloat = @. RemakeNew(test_problems_only_time) test_problems_linear_BigFloat = @. RemakeNew(test_problems_linear) f = (u, p, t) -> sin(u) prob_nonlinear_A = ODEProblem( - ODEFunction(f; - analytic = (u0, p, t) -> 2 * acot(exp(-t) * - cot(BigFloat(0.5)))), - BigFloat(1.0), (BigFloat(0.0), BigFloat(0.5))) + ODEFunction( + f; + analytic = (u0, p, t) -> 2 * acot( + exp(-t) * + cot(BigFloat(0.5)) + ) + ), + BigFloat(1.0), (BigFloat(0.0), BigFloat(0.5)) +) f = (du, u, p, t) -> du[1] = sin(u[1]) prob_nonlinear_B = ODEProblem( - ODEFunction(f; + ODEFunction( + f; analytic = (u0, p, t) -> [ - 2 * acot(exp(-t) * cot(BigFloat(0.5))) - ]), + 2 * acot(exp(-t) * cot(BigFloat(0.5))), + ] + ), [BigFloat(1.0)], - (BigFloat(0.0), BigFloat(0.5))) + (BigFloat(0.0), BigFloat(0.5)) +) test_problems_nonlinear_BigFloat = [prob_nonlinear_A, prob_nonlinear_B] @testset "CKLLSRK43_2" begin @@ -582,33 +735,44 @@ test_problems_nonlinear_BigFloat = [prob_nonlinear_A, prob_nonlinear_B] dts = BigFloat(1) ./ 2 .^ (8:-1:4) for prob in test_problems_only_time_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol=testTol # This scheme has linear order of 4 + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol = testTol # This scheme has linear order of 4 end for prob in test_problems_nonlinear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, adaptive = false, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = false, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 - integ = init(prob_ode_large, alg, adaptive = true, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = true, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 7 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -617,33 +781,44 @@ end dts = BigFloat(1) ./ 2 .^ (8:-1:4) for prob in test_problems_only_time_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈1 atol=testTol # The CI plot is linear but the evaluated order is 1 + @test sim.𝒪est[:final] ≈ 1 atol = testTol # The CI plot is linear but the evaluated order is 1 end for prob in test_problems_linear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, adaptive = false, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = false, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 - integ = init(prob_ode_large, alg, adaptive = true, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = true, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 7 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -652,33 +827,44 @@ end dts = BigFloat(1) ./ 2 .^ (8:-1:4) for prob in test_problems_only_time_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, adaptive = false, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = false, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 - integ = init(prob_ode_large, alg, adaptive = true, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = true, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 7 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -687,33 +873,44 @@ end dts = BigFloat(1) ./ 2 .^ (8:-1:4) for prob in test_problems_only_time_BigFloat sim = test_convergence(dts, prob, alg) - @test_broken sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test_broken sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear_BigFloat sim = test_convergence(dts, prob, alg) - @test_broken sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test_broken sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear_BigFloat sim = test_convergence(dts, prob, alg) - @test_broken sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test_broken sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, adaptive = false, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = false, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 - integ = init(prob_ode_large, alg, adaptive = true, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = true, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 7 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -722,33 +919,44 @@ end dts = BigFloat(1) ./ 2 .^ (8:-1:4) for prob in test_problems_only_time_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, adaptive = false, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = false, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 - integ = init(prob_ode_large, alg, adaptive = true, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = true, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 7 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -757,33 +965,44 @@ end dts = BigFloat(1) ./ 2 .^ (8:-1:4) for prob in test_problems_only_time_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, adaptive = false, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = false, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 9 - integ = init(prob_ode_large, alg, adaptive = true, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = true, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 10 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 9 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -792,33 +1011,44 @@ end dts = BigFloat(1) ./ 2 .^ (8:-1:4) for prob in test_problems_only_time_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol = testTol end for prob in test_problems_nonlinear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) + 0.5 atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) + 0.5 atol = testTol end - integ = init(prob_ode_large, alg, adaptive = false, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = false, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 9 - integ = init(prob_ode_large, alg, adaptive = true, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = true, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 10 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 9 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -827,33 +1057,44 @@ end dts = BigFloat(1) ./ 2 .^ (8:-1:4) for prob in test_problems_only_time_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, adaptive = false, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = false, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 9 - integ = init(prob_ode_large, alg, adaptive = true, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = true, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 10 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 9 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -862,33 +1103,44 @@ end dts = BigFloat(1) ./ 2 .^ (8:-1:4) for prob in test_problems_only_time_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, adaptive = false, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = false, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 9 - integ = init(prob_ode_large, alg, adaptive = true, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = true, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 10 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 9 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -897,33 +1149,44 @@ end dts = BigFloat(1) ./ 2 .^ (8:-1:4) for prob in test_problems_only_time_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, adaptive = false, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = false, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 9 - integ = init(prob_ode_large, alg, adaptive = true, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = true, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 10 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 9 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -932,33 +1195,44 @@ end dts = BigFloat(1) ./ 2 .^ (8:-1:4) for prob in test_problems_only_time_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) + 2 atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) + 2 atol = testTol end for prob in test_problems_nonlinear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, adaptive = false, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = false, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 9 - integ = init(prob_ode_large, alg, adaptive = true, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = true, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 10 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 9 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -967,33 +1241,44 @@ end dts = BigFloat(1) ./ 2 .^ (8:-1:4) for prob in test_problems_only_time_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, adaptive = false, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = false, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 11 - integ = init(prob_ode_large, alg, adaptive = true, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = true, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 12 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 11 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -1002,33 +1287,44 @@ end dts = BigFloat(1) ./ 2 .^ (8:-1:4) for prob in test_problems_only_time_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) + 0.5 atol=testTol # This scheme has linear orderof 4.5 + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) + 0.5 atol = testTol # This scheme has linear orderof 4.5 end for prob in test_problems_nonlinear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, adaptive = false, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = false, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 11 - integ = init(prob_ode_large, alg, adaptive = true, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = true, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 12 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 11 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -1037,33 +1333,44 @@ end dts = BigFloat(1) ./ 2 .^ (8:-1:4) for prob in test_problems_only_time_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, adaptive = false, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = false, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 11 - integ = init(prob_ode_large, alg, adaptive = true, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = true, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 12 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 11 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -1072,33 +1379,44 @@ end dts = BigFloat(1) ./ 2 .^ (10:-1:6) for prob in test_problems_only_time_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol = testTol end for prob in test_problems_nonlinear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, adaptive = false, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = false, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 11 - integ = init(prob_ode_large, alg, adaptive = true, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = true, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 12 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 11 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -1107,33 +1425,44 @@ end dts = BigFloat(1) ./ 2 .^ (8:-1:4) for prob in test_problems_only_time_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear_BigFloat sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, adaptive = false, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = false, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 13 - integ = init(prob_ode_large, alg, adaptive = true, dt = 1.e-2, save_start = false, - save_end = false, save_everystep = false) + integ = init( + prob_ode_large, alg, adaptive = true, dt = 1.0e-2, save_start = false, + save_end = false, save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 14 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 13 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -1145,30 +1474,39 @@ end for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) # higher order as pure quadrature - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -1178,30 +1516,39 @@ end for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) # higher order as pure quadrature - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -1211,30 +1558,39 @@ end for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) # higher order as pure quadrature - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -1244,32 +1600,41 @@ end for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) # higher order as pure quadrature - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end dts = 1 ./ 2 .^ (6:-1:3) for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=1 + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = 1 end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -1278,30 +1643,39 @@ end dts = 1 ./ 2 .^ (7:-1:3) for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -1310,31 +1684,40 @@ end dts = 1 ./ 2 .^ (6:-1:2) for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end dts = 1 ./ 2 .^ (7:-1:2) for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -1343,32 +1726,41 @@ end dts = 1 ./ 1.95 .^ (5:-1:1) for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end dts = 1 ./ 2 .^ (5:-1:2) for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end dts = 1.5 ./ 2 .^ (5:-1:2) for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -1377,32 +1769,41 @@ end dts = 1 ./ 1.95 .^ (5:-1:1) for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end dts = 1 ./ 2 .^ (5:-1:2) for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=0.33 + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = 0.33 end dts = 1.5 ./ 2 .^ (5:-1:2) for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -1414,30 +1815,39 @@ end for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) # higher order as pure quadrature - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -1447,31 +1857,40 @@ end for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) # higher order as pure quadrature - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end dts = 1 ./ 2 .^ (8:-1:2) for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -1480,30 +1899,39 @@ end dts = 1 ./ 2 .^ (4.5:-1:1.5) for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -1513,30 +1941,39 @@ end for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) # higher order as pure quadrature - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -1546,31 +1983,40 @@ end for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) # higher order as pure quadrature - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) + 1 atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end dts = 1 ./ 2 .^ (8:-1:2) for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -1579,30 +2025,39 @@ end dts = 1 ./ 2 .^ (4.5:-1:1.5) for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqLowStorageRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqLowStorageRK.alg_order(alg) atol = testTol end - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 - integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) + integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 # test whether aliasing u0 is bad - new_prob_ode_nonlinear_inplace = ODEProblem(prob_ode_nonlinear_inplace.f, [1.0], - (0.0, 0.5)) - sol_old = solve(prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false) + new_prob_ode_nonlinear_inplace = ODEProblem( + prob_ode_nonlinear_inplace.f, [1.0], + (0.0, 0.5) + ) + sol_old = solve( + prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false + ) sol_new = solve( - new_prob_ode_nonlinear_inplace, alg, dt = 1.e-4, save_everystep = false, - save_start = false, alias = ODEAliasSpecifier(alias_u0 = true)) + new_prob_ode_nonlinear_inplace, alg, dt = 1.0e-4, save_everystep = false, + save_start = false, alias = ODEAliasSpecifier(alias_u0 = true) + ) @test sol_old[end] ≈ sol_new[end] end @@ -1627,7 +2082,7 @@ end @test sol_SA ≈ sol_SV @test sol_SV.stats.naccept == sol_SA.stats.naccept - + # Plain vector u = [1.0, 2.0] ode = ODEProblem(rhs!, u, (0, 0.7)) diff --git a/lib/OrdinaryDiffEqLowStorageRK/test/qa.jl b/lib/OrdinaryDiffEqLowStorageRK/test/qa.jl index 146604d4f3..1c6ae493bf 100644 --- a/lib/OrdinaryDiffEqLowStorageRK/test/qa.jl +++ b/lib/OrdinaryDiffEqLowStorageRK/test/qa.jl @@ -5,4 +5,4 @@ using Aqua Aqua.test_all( OrdinaryDiffEqLowStorageRK ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqLowStorageRK/test/runtests.jl b/lib/OrdinaryDiffEqLowStorageRK/test/runtests.jl index f39a42edb5..d4f899d710 100644 --- a/lib/OrdinaryDiffEqLowStorageRK/test/runtests.jl +++ b/lib/OrdinaryDiffEqLowStorageRK/test/runtests.jl @@ -2,4 +2,4 @@ using SafeTestsets @time @safetestset "Low Storage RK Tests" include("ode_low_storage_rk_tests.jl") @time @safetestset "JET Tests" include("jet.jl") -@time @safetestset "Aqua" include("qa.jl") \ No newline at end of file +@time @safetestset "Aqua" include("qa.jl") diff --git a/lib/OrdinaryDiffEqNewmark/src/OrdinaryDiffEqNewmark.jl b/lib/OrdinaryDiffEqNewmark/src/OrdinaryDiffEqNewmark.jl index 9d39a9c087..92166eebed 100644 --- a/lib/OrdinaryDiffEqNewmark/src/OrdinaryDiffEqNewmark.jl +++ b/lib/OrdinaryDiffEqNewmark/src/OrdinaryDiffEqNewmark.jl @@ -1,18 +1,18 @@ module OrdinaryDiffEqNewmark import OrdinaryDiffEqCore: initialize!, perform_step!, unwrap_alg, - alg_extrapolates, isadaptive, alg_order, - OrdinaryDiffEqAlgorithm, OrdinaryDiffEqNewtonAlgorithm, - OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, - OrdinaryDiffEqNewtonAdaptiveAlgorithm, - OrdinaryDiffEqImplicitSecondOrderAlgorithm, - OrdinaryDiffEqAdaptiveImplicitSecondOrderAlgorithm, - OrdinaryDiffEqAdaptiveAlgorithm, CompiledFloats, uses_uprev, - alg_cache, _vec, _reshape, @cache, isfsal, full_cache, - constvalue, _unwrap_val, _ode_interpolant, - trivial_limiter!, _ode_interpolant!, - get_fsalfirstlast, generic_solver_docstring, - OrdinaryDiffEqCore + alg_extrapolates, isadaptive, alg_order, + OrdinaryDiffEqAlgorithm, OrdinaryDiffEqNewtonAlgorithm, + OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, + OrdinaryDiffEqNewtonAdaptiveAlgorithm, + OrdinaryDiffEqImplicitSecondOrderAlgorithm, + OrdinaryDiffEqAdaptiveImplicitSecondOrderAlgorithm, + OrdinaryDiffEqAdaptiveAlgorithm, CompiledFloats, uses_uprev, + alg_cache, _vec, _reshape, @cache, isfsal, full_cache, + constvalue, _unwrap_val, _ode_interpolant, + trivial_limiter!, _ode_interpolant!, + get_fsalfirstlast, generic_solver_docstring, + OrdinaryDiffEqCore import PreallocationTools: DiffCache, get_tmp using TruncatedStacktraces, MuladdMacro, MacroTools, FastBroadcast, RecursiveArrayTools using SciMLBase: DynamicalODEFunction diff --git a/lib/OrdinaryDiffEqNewmark/src/algorithms.jl b/lib/OrdinaryDiffEqNewmark/src/algorithms.jl index 4335a7c484..49b1bd8a70 100644 --- a/lib/OrdinaryDiffEqNewmark/src/algorithms.jl +++ b/lib/OrdinaryDiffEqNewmark/src/algorithms.jl @@ -1,4 +1,3 @@ - """ NewmarkBeta @@ -17,7 +16,7 @@ structural dynamics 20.9 (1991): 871-887, doi: https://doi.org/10.1002/eqe.4290200907 """ struct NewmarkBeta{PT, F, CS, AD, FDT, ST, CJ, Thread} <: - OrdinaryDiffEqAdaptiveImplicitSecondOrderAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqAdaptiveImplicitSecondOrderAlgorithm{CS, AD, FDT, ST, CJ} β::PT γ::PT nlsolve::F @@ -26,26 +25,29 @@ struct NewmarkBeta{PT, F, CS, AD, FDT, ST, CJ, Thread} <: end function NewmarkBeta(β, γ; kwargs...) - NewmarkBeta(; β, γ, kwargs...) + return NewmarkBeta(; β, γ, kwargs...) end # Needed for remake -function NewmarkBeta(; β = 0.25, γ = 0.5, chunk_size = Val{0}(), +function NewmarkBeta(; + β = 0.25, γ = 0.5, chunk_size = Val{0}(), autodiff = Val{true}(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}, - nlsolve = NewtonRaphson(), thread = Val{false}()) + nlsolve = NewtonRaphson(), thread = Val{false}() + ) AD_choice, chunk_size, diff_type = OrdinaryDiffEqCore._process_AD_choice( - autodiff, chunk_size, diff_type) + autodiff, chunk_size, diff_type + ) - @assert concrete_jac===nothing "Using a aser-defined Jacobian in Newmark-β is not yet possible." - @assert 0.0≤β≤0.5 "Beta outside admissible range [0, 0.5]" - @assert 0.0≤γ≤1.0 "Gamma outside admissible range [0, 1.0]" + @assert concrete_jac === nothing "Using a aser-defined Jacobian in Newmark-β is not yet possible." + @assert 0.0 ≤ β ≤ 0.5 "Beta outside admissible range [0, 0.5]" + @assert 0.0 ≤ γ ≤ 1.0 "Gamma outside admissible range [0, 1.0]" - NewmarkBeta{ + return NewmarkBeta{ typeof(β), typeof(nlsolve), _unwrap_val(chunk_size), typeof(AD_choice), autodiff, _unwrap_val(standardtag), _unwrap_val(concrete_jac), typeof(thread), - }( + }( β, γ, nlsolve, AD_choice, diff --git a/lib/OrdinaryDiffEqNewmark/src/newmark_caches.jl b/lib/OrdinaryDiffEqNewmark/src/newmark_caches.jl index 5fac2895ef..94bc7131b4 100644 --- a/lib/OrdinaryDiffEqNewmark/src/newmark_caches.jl +++ b/lib/OrdinaryDiffEqNewmark/src/newmark_caches.jl @@ -1,5 +1,5 @@ @cache struct NewmarkBetaCache{uType, rateType, parameterType, N, Thread} <: - OrdinaryDiffEqMutableCache + OrdinaryDiffEqMutableCache u::uType # Current solution uprev::uType # Previous solution fsalfirst::rateType @@ -11,10 +11,12 @@ thread::Thread end -function alg_cache(alg::NewmarkBeta, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::NewmarkBeta, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} (; β, γ, thread) = alg fsalfirst = zero(rate_prototype) @@ -35,11 +37,11 @@ function alg_cache(alg::NewmarkBeta, u, rate_prototype, ::Type{uEltypeNoUnits}, tmp = zero(u) atmp = zero(u) - NewmarkBetaCache(u, uprev, fsalfirst, β, γ, nlcache, tmp, atmp, thread) + return NewmarkBetaCache(u, uprev, fsalfirst, β, γ, nlcache, tmp, atmp, thread) end @cache struct NewmarkBetaConstantCache{uType, rateType, parameterType, N, Thread} <: - OrdinaryDiffEqConstantCache + OrdinaryDiffEqConstantCache u::uType # Current solution uprev::uType # Previous solution fsalfirst::rateType @@ -51,10 +53,12 @@ end thread::Thread end -function alg_cache(alg::NewmarkBeta, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::NewmarkBeta, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} (; β, γ, thread) = alg fsalfirst = zero(rate_prototype) @@ -70,9 +74,9 @@ function alg_cache(alg::NewmarkBeta, u, rate_prototype, ::Type{uEltypeNoUnits}, tmp = zero(u) atmp = zero(u) - NewmarkBetaConstantCache(u, uprev, fsalfirst, β, γ, alg.nlsolve, tmp, atmp, thread) + return NewmarkBetaConstantCache(u, uprev, fsalfirst, β, γ, alg.nlsolve, tmp, atmp, thread) end function get_fsalfirstlast(cache::Union{NewmarkBetaCache, NewmarkBetaConstantCache}, u) - (cache.fsalfirst, cache.fsalfirst) + return (cache.fsalfirst, cache.fsalfirst) end diff --git a/lib/OrdinaryDiffEqNewmark/src/newmark_nlsolve.jl b/lib/OrdinaryDiffEqNewmark/src/newmark_nlsolve.jl index 8fe9ea74bc..96626c7638 100644 --- a/lib/OrdinaryDiffEqNewmark/src/newmark_nlsolve.jl +++ b/lib/OrdinaryDiffEqNewmark/src/newmark_nlsolve.jl @@ -25,9 +25,9 @@ end # with a₁ = 1-2β and a₂ = 1-γ, such that # uₙ₊₁ = uₙ + Δtₙ vₙ + Δtₙ²/2 [(1-2β)aₙ + 2βaₙ₊₁] # vₙ₊₁ = vₙ + Δtₙ [(1-γ)aₙ + γaₙ₊₁] -# +# # This allows us to reduce the implicit discretization to have only aₙ₊₁ as the unknown: -# Maₙ₊₁ = f(vₙ₊₁(aₙ₊₁), uₙ₊₁(aₙ₊₁), tₙ₊₁) +# Maₙ₊₁ = f(vₙ₊₁(aₙ₊₁), uₙ₊₁(aₙ₊₁), tₙ₊₁) # = f(vₙ + Δtₙ [(1-γ)aₙ + γaₙ₊₁], uₙ + Δtₙ vₙ + Δtₙ²/2 [(1-2β)aₙ + 2βaₙ₊₁], tₙ₊₁) # Such that we have to solve the nonlinear problem # Maₙ₊₁ - f(vₙ₊₁(aₙ₊₁), uₙ₊₁(aₙ₊₁), tₙ₊₁) = 0 @@ -39,7 +39,8 @@ end # Inplace variant @muladd function newmark_discretized_residual!( - residual, aₙ₊₁, p_newmark::NewmarkDiscretizationCache) + residual, aₙ₊₁, p_newmark::NewmarkDiscretizationCache + ) (; f, dt, t, p) = p_newmark (; γ, β, aₙ, vₙ, uₙ) = p_newmark diff --git a/lib/OrdinaryDiffEqNewmark/src/newmark_perform_step.jl b/lib/OrdinaryDiffEqNewmark/src/newmark_perform_step.jl index 4df0922033..a4750c1431 100644 --- a/lib/OrdinaryDiffEqNewmark/src/newmark_perform_step.jl +++ b/lib/OrdinaryDiffEqNewmark/src/newmark_perform_step.jl @@ -22,7 +22,7 @@ end f, t, p, dt, β, γ, aₙ, vₙ, uₙ, - nlcache.p.atmp, nlcache.p.vₙ₊₁, nlcache.p.uₙ₊₁, + nlcache.p.atmp, nlcache.p.vₙ₊₁, nlcache.p.uₙ₊₁, ) SciMLBase.reinit!(nlcache, aₙ, p = evalcache) solve!(nlcache) @@ -32,8 +32,8 @@ end end aₙ₊₁ = nlcache.u - @.. thread=thread u.x[1] = vₙ + dt * ((1 - γ) * aₙ + γ * aₙ₊₁) - @.. thread=thread u.x[2] = uₙ + dt * vₙ + dt^2 / 2 * ((1 - 2β) * aₙ + 2β * aₙ₊₁) + @.. thread = thread u.x[1] = vₙ + dt * ((1 - γ) * aₙ + γ * aₙ₊₁) + @.. thread = thread u.x[2] = uₙ + dt * vₙ + dt^2 / 2 * ((1 - 2β) * aₙ + 2β * aₙ₊₁) if integrator.opts.adaptive f(integrator.fsallast, u, p, t + dt) @@ -43,9 +43,9 @@ end integrator.EEst = one(integrator.EEst) else # Zienkiewicz and Xie (1991) Eq. 21 - @.. thread=thread atmp = (integrator.fsallast - aₙ₊₁) + @.. thread = thread atmp = (integrator.fsallast - aₙ₊₁) integrator.EEst = dt * dt * (β - 1 // 6) * - integrator.opts.internalnorm(atmp, t) + integrator.opts.internalnorm(atmp, t) end end @@ -61,7 +61,8 @@ function initialize!(integrator, cache::NewmarkBetaConstantCache) end @muladd function perform_step!( - integrator, cache::NewmarkBetaConstantCache, repeat_step = false) + integrator, cache::NewmarkBetaConstantCache, repeat_step = false + ) (; t, u, dt, f, p) = integrator (; β, γ, thread, nlsolver, atmp) = cache @@ -88,8 +89,8 @@ end aₙ₊₁ = nlsol.u # The velocity component in uprev and u is shadowed, so the order of these two operation below matter. - @.. thread=thread u.x[2] = uₙ + dt * vₙ + dt^2 / 2 * ((1 - 2β) * aₙ + 2β * aₙ₊₁) - @.. thread=thread u.x[1] = vₙ + dt * ((1 - γ) * aₙ + γ * aₙ₊₁) + @.. thread = thread u.x[2] = uₙ + dt * vₙ + dt^2 / 2 * ((1 - 2β) * aₙ + 2β * aₙ₊₁) + @.. thread = thread u.x[1] = vₙ + dt * ((1 - γ) * aₙ + γ * aₙ₊₁) # @info "A", integrator.opts.internalnorm(aₙ₊₁,t), integrator.opts.internalnorm(vₙ,t), integrator.opts.internalnorm(aₙ,t) # u .= ArrayPartition( @@ -110,9 +111,9 @@ end integrator.EEst = one(integrator.EEst) else # Zienkiewicz and Xie (1991) Eq. 21 - @.. thread=thread atmp = (integrator.fsallast.x[1] - aₙ₊₁) + @.. thread = thread atmp = (integrator.fsallast.x[1] - aₙ₊₁) integrator.EEst = dt * dt * (β - 1 // 6) * - integrator.opts.internalnorm(atmp, t) + integrator.opts.internalnorm(atmp, t) end end diff --git a/lib/OrdinaryDiffEqNewmark/test/jet.jl b/lib/OrdinaryDiffEqNewmark/test/jet.jl index 1095e2d00f..5089b4d8bb 100644 --- a/lib/OrdinaryDiffEqNewmark/test/jet.jl +++ b/lib/OrdinaryDiffEqNewmark/test/jet.jl @@ -7,5 +7,6 @@ using Test @testset "JET Tests" begin # Test package for typos test_package( - OrdinaryDiffEqNewmark, target_modules = (OrdinaryDiffEqNewmark,), mode = :typo) + OrdinaryDiffEqNewmark, target_modules = (OrdinaryDiffEqNewmark,), mode = :typo + ) end diff --git a/lib/OrdinaryDiffEqNewmark/test/runtests.jl b/lib/OrdinaryDiffEqNewmark/test/runtests.jl index 48aaf41412..dabee29eb7 100644 --- a/lib/OrdinaryDiffEqNewmark/test/runtests.jl +++ b/lib/OrdinaryDiffEqNewmark/test/runtests.jl @@ -23,12 +23,13 @@ using SafeTestsets end ff_harmonic! = DynamicalODEFunction( - f1_harmonic!, f2_harmonic!; analytic = harmonic_analytic) + f1_harmonic!, f2_harmonic!; analytic = harmonic_analytic + ) prob = DynamicalODEProblem(ff_harmonic!, v0, u0, (0.0, 5.0)) dts = 1.0 ./ 2.0 .^ (5:-1:0) sim = test_convergence(dts, prob, NewmarkBeta(), dense_errors = true) - @test sim.𝒪est[:l2]≈2 rtol=1e-1 + @test sim.𝒪est[:l2] ≈ 2 rtol = 1.0e-1 function f1_harmonic(v, u, p, t) -u @@ -38,12 +39,13 @@ using SafeTestsets end ff_harmonic = DynamicalODEFunction( - f1_harmonic, f2_harmonic; analytic = harmonic_analytic) + f1_harmonic, f2_harmonic; analytic = harmonic_analytic + ) prob = DynamicalODEProblem(ff_harmonic, v0, u0, (0.0, 5.0)) dts = 1.0 ./ 2.0 .^ (5:-1:0) sim = test_convergence(dts, prob, NewmarkBeta(), dense_errors = true) - @test sim.𝒪est[:l2]≈2 rtol=1e-1 + @test sim.𝒪est[:l2] ≈ 2 rtol = 1.0e-1 end # Newmark methods with damped oscillator @@ -58,12 +60,16 @@ end function damped_oscillator_analytic(du0_u0, p, t) ArrayPartition( [ - exp(-t / 4) / 15 * (15 * du0_u0[1] * cos(sqrt(15) * t / 4) - - sqrt(15) * (du0_u0[1] + 4 * du0_u0[2]) * sin(sqrt(15) * t / 4)) + exp(-t / 4) / 15 * ( + 15 * du0_u0[1] * cos(sqrt(15) * t / 4) - + sqrt(15) * (du0_u0[1] + 4 * du0_u0[2]) * sin(sqrt(15) * t / 4) + ), ], # du [ - exp(-t / 4) / 15 * (15 * du0_u0[2] * cos(sqrt(15) * t / 4) + - sqrt(15) * (4 * du0_u0[1] + du0_u0[2]) * sin(sqrt(15) * t / 4)) + exp(-t / 4) / 15 * ( + 15 * du0_u0[2] * cos(sqrt(15) * t / 4) + + sqrt(15) * (4 * du0_u0[1] + du0_u0[2]) * sin(sqrt(15) * t / 4) + ), ] ) end @@ -77,7 +83,7 @@ end dts = 1.0 ./ 2.0 .^ (5:-1:0) sim = test_convergence(dts, prob, NewmarkBeta(), dense_errors = true) - @test sim.𝒪est[:l2]≈2 rtol=1e-1 + @test sim.𝒪est[:l2] ≈ 2 rtol = 1.0e-1 function damped_oscillator(v, u, p, t) -u - 0.5 * v @@ -92,7 +98,7 @@ end dts = 1.0 ./ 2.0 .^ (5:-1:0) sim = test_convergence(dts, prob, NewmarkBeta(), dense_errors = true) - @test sim.𝒪est[:l2]≈2 rtol=1e-1 + @test sim.𝒪est[:l2] ≈ 2 rtol = 1.0e-1 end # Only run JET tests on stable Julia versions diff --git a/lib/OrdinaryDiffEqNonlinearSolve/src/OrdinaryDiffEqNonlinearSolve.jl b/lib/OrdinaryDiffEqNonlinearSolve/src/OrdinaryDiffEqNonlinearSolve.jl index 8ea0a67c3e..b6cb515a4a 100644 --- a/lib/OrdinaryDiffEqNonlinearSolve/src/OrdinaryDiffEqNonlinearSolve.jl +++ b/lib/OrdinaryDiffEqNonlinearSolve/src/OrdinaryDiffEqNonlinearSolve.jl @@ -5,14 +5,14 @@ using ADTypes: ADTypes, dense_ad, AutoForwardDiff, AutoFiniteDiff import SciMLBase import SciMLBase: init, solve, solve!, remake using SciMLBase: DAEFunction, DEIntegrator, NonlinearFunction, NonlinearProblem, - NonlinearLeastSquaresProblem, LinearProblem, ODEProblem, DAEProblem, - update_coefficients!, get_tmp_cache, AbstractSciMLOperator, ReturnCode, - AbstractNonlinearProblem, LinearAliasSpecifier + NonlinearLeastSquaresProblem, LinearProblem, ODEProblem, DAEProblem, + update_coefficients!, get_tmp_cache, AbstractSciMLOperator, ReturnCode, + AbstractNonlinearProblem, LinearAliasSpecifier import DiffEqBase import PreallocationTools: dualcache, get_tmp using SimpleNonlinearSolve: SimpleTrustRegion, SimpleGaussNewton using NonlinearSolve: FastShortcutNonlinearPolyalg, FastShortcutNLLSPolyalg, NewtonRaphson, - step! + step! using MuladdMacro: @muladd using FastBroadcast: @.. import FastClosures: @closure @@ -37,29 +37,29 @@ import OrdinaryDiffEqCore: nlsolve_f, set_new_W!, set_W_γdt! end using OrdinaryDiffEqCore: resize_nlsolver!, _initialize_dae!, - AbstractNLSolverAlgorithm, AbstractNLSolverCache, - AbstractNLSolver, NewtonAlgorithm, - OverrideInit, ShampineCollocationInit, BrownFullBasicInit, - _vec, _unwrap_val, DAEAlgorithm, - _reshape, calculate_residuals, calculate_residuals!, - has_special_newton_error, isadaptive, - TryAgain, DIRK, COEFFICIENT_MULTISTEP, NORDSIECK_MULTISTEP, GLM, - FastConvergence, Convergence, - SlowConvergence, VerySlowConvergence, Divergence, NLStatus, - MethodType, alg_order, error_constant, - alg_extrapolates, resize_J_W!, has_autodiff + AbstractNLSolverAlgorithm, AbstractNLSolverCache, + AbstractNLSolver, NewtonAlgorithm, + OverrideInit, ShampineCollocationInit, BrownFullBasicInit, + _vec, _unwrap_val, DAEAlgorithm, + _reshape, calculate_residuals, calculate_residuals!, + has_special_newton_error, isadaptive, + TryAgain, DIRK, COEFFICIENT_MULTISTEP, NORDSIECK_MULTISTEP, GLM, + FastConvergence, Convergence, + SlowConvergence, VerySlowConvergence, Divergence, NLStatus, + MethodType, alg_order, error_constant, + alg_extrapolates, resize_J_W!, has_autodiff import OrdinaryDiffEqCore: _initialize_dae!, isnewton, get_W, isfirstcall, isfirststage, - isJcurrent, get_new_W_γdt_cutoff, resize_nlsolver!, apply_step!, - postamble! + isJcurrent, get_new_W_γdt_cutoff, resize_nlsolver!, apply_step!, + postamble! import OrdinaryDiffEqDifferentiation: update_W!, is_always_new, build_uf, build_J_W, - WOperator, StaticWOperator, wrapprecs, - build_jac_config, dolinsolve, alg_autodiff, - resize_jac_config! + WOperator, StaticWOperator, wrapprecs, + build_jac_config, dolinsolve, alg_autodiff, + resize_jac_config! import StaticArrays: SArray, MVector, SVector, @SVector, StaticArray, MMatrix, SA, - StaticMatrix + StaticMatrix include("type.jl") include("utils.jl") diff --git a/lib/OrdinaryDiffEqNonlinearSolve/src/functional.jl b/lib/OrdinaryDiffEqNonlinearSolve/src/functional.jl index a7d569e217..e24780663b 100644 --- a/lib/OrdinaryDiffEqNonlinearSolve/src/functional.jl +++ b/lib/OrdinaryDiffEqNonlinearSolve/src/functional.jl @@ -1,14 +1,18 @@ ## initialize! -@muladd function initialize!(nlsolver::NLSolver{<:NLFunctional}, - integrator::SciMLBase.DEIntegrator) +@muladd function initialize!( + nlsolver::NLSolver{<:NLFunctional}, + integrator::SciMLBase.DEIntegrator + ) nlsolver.cache.tstep = integrator.t + nlsolver.c * integrator.dt nothing end -@muladd function initialize!(nlsolver::NLSolver{<:NLAnderson}, - integrator::SciMLBase.DEIntegrator) +@muladd function initialize!( + nlsolver::NLSolver{<:NLAnderson}, + integrator::SciMLBase.DEIntegrator + ) (; cache) = nlsolver cache.history = 0 @@ -20,7 +24,7 @@ end ## initial_η function initial_η(nlsolver::NLSolver{<:Union{NLFunctional, NLAnderson}}, integrator) - nlsolver.ηold + return nlsolver.ηold end ## compute_step! @@ -44,7 +48,7 @@ Equations II, Springer Series in Computational Mathematics. ISBN [doi:10.1007/978-3-642-05221-7](https://doi.org/10.1007/978-3-642-05221-7). """ function compute_step!(nlsolver::NLSolver{<:NLFunctional}, integrator) - compute_step_fixedpoint!(nlsolver, integrator) + return compute_step_fixedpoint!(nlsolver, integrator) end @muladd function compute_step!(nlsolver::NLSolver{<:NLAnderson, false}, integrator) @@ -77,8 +81,8 @@ end previter = nlsolver.iter - 1 if previter == aa_start # update cached values for next step of Anderson acceleration - @.. broadcast=false cache.dzold=cache.dz - @.. broadcast=false cache.z₊old=nlsolver.z + @.. broadcast = false cache.dzold = cache.dz + @.. broadcast = false cache.z₊old = nlsolver.z elseif previter > aa_start # actually perform Anderson acceleration anderson!(nlsolver.z, cache) @@ -93,9 +97,13 @@ end @muladd function compute_step_fixedpoint!( nlsolver::NLSolver{ - <:Union{NLFunctional, - NLAnderson}, false}, - integrator) + <:Union{ + NLFunctional, + NLAnderson, + }, false, + }, + integrator + ) (; uprev, t, p, dt, opts) = integrator (; z, γ, α, cache, tmp) = nlsolver (; tstep) = cache @@ -105,11 +113,11 @@ end γdt = γ * dt if isdae - ustep = @.. broadcast=false uprev+z + ustep = @.. broadcast = false uprev + z invγdt = inv(γdt) - dustep = @.. broadcast=false (tmp + α * z)*invγdt + dustep = @.. broadcast = false (tmp + α * z) * invγdt dz = f(dustep, ustep, p, t) - ztmp = @.. broadcast=false z+dz + ztmp = @.. broadcast = false z + dz else mass_matrix = integrator.f.mass_matrix if nlsolver.method === COEFFICIENT_MULTISTEP @@ -123,7 +131,7 @@ end ztmp = dz .+ z end else - ustep = @.. broadcast=false tmp+γ * z + ustep = @.. broadcast = false tmp + γ * z if mass_matrix === I ztmp = dt .* f(ustep, p, tstep) dz = ztmp .- z @@ -139,8 +147,10 @@ end end # compute norm of residuals - atmp = calculate_residuals(dz, uprev, ustep, opts.abstol, opts.reltol, - opts.internalnorm, t) + atmp = calculate_residuals( + dz, uprev, ustep, opts.abstol, opts.reltol, + opts.internalnorm, t + ) ndz = opts.internalnorm(atmp, t) # cache results @@ -154,9 +164,13 @@ end @muladd function compute_step_fixedpoint!( nlsolver::NLSolver{ - <:Union{NLFunctional, - NLAnderson}, true}, - integrator) + <:Union{ + NLFunctional, + NLAnderson, + }, true, + }, + integrator + ) (; uprev, t, p, dt, opts) = integrator (; z, tmp, ztmp, γ, α, cache) = nlsolver (; ustep, tstep, k, atmp, dz) = cache @@ -166,36 +180,36 @@ end γdt = γ * dt if isdae - @.. broadcast=false ustep=uprev + z - @.. broadcast=false ztmp=(tmp + α * z) * inv(γdt) + @.. broadcast = false ustep = uprev + z + @.. broadcast = false ztmp = (tmp + α * z) * inv(γdt) f(k, ztmp, ustep, p, tstep) - @.. broadcast=false dz=k - @.. broadcast=false ztmp=z + dz + @.. broadcast = false dz = k + @.. broadcast = false ztmp = z + dz else mass_matrix = integrator.f.mass_matrix if nlsolver.method === COEFFICIENT_MULTISTEP ustep = z f(k, ustep, p, tstep) if mass_matrix === I - @.. broadcast=false ztmp=(tmp + k) * (γdt / α) - @.. broadcast=false dz=ztmp - z + @.. broadcast = false ztmp = (tmp + k) * (γdt / α) + @.. broadcast = false dz = ztmp - z else update_coefficients!(mass_matrix, ustep, p, tstep) mul!(_vec(ztmp), mass_matrix, _vec(z)) - @.. broadcast=false dz=(tmp + k) * γdt - α * ztmp - @.. broadcast=false ztmp=dz + z + @.. broadcast = false dz = (tmp + k) * γdt - α * ztmp + @.. broadcast = false ztmp = dz + z end else - @.. broadcast=false ustep=tmp + γ * z + @.. broadcast = false ustep = tmp + γ * z f(k, ustep, p, tstep) if mass_matrix === I - @.. broadcast=false ztmp=dt * k - @.. broadcast=false dz=ztmp - z + @.. broadcast = false ztmp = dt * k + @.. broadcast = false dz = ztmp - z else update_coefficients!(mass_matrix, ustep, p, tstep) mul!(_vec(ztmp), mass_matrix, _vec(z)) - @.. broadcast=false dz=dt * k - ztmp - @.. broadcast=false ztmp=z + dz + @.. broadcast = false dz = dt * k - ztmp + @.. broadcast = false ztmp = z + dz end end end @@ -205,8 +219,10 @@ end end # compute norm of residuals - calculate_residuals!(atmp, dz, uprev, ustep, opts.abstol, opts.reltol, - opts.internalnorm, t) + calculate_residuals!( + atmp, dz, uprev, ustep, opts.abstol, opts.reltol, + opts.internalnorm, t + ) ndz = opts.internalnorm(atmp, t) ndz @@ -219,12 +235,14 @@ function Base.resize!(nlcache::NLFunctionalCache, i::Int) resize!(nlcache.k, i) resize!(nlcache.atmp, i) resize!(nlcache.dz, i) - nothing + return nothing end -function Base.resize!(nlcache::NLAndersonCache, nlsolver::NLSolver{<:NLAnderson}, - integrator, i::Int) - resize!(nlcache, nlsolver.alg, i) +function Base.resize!( + nlcache::NLAndersonCache, nlsolver::NLSolver{<:NLAnderson}, + integrator, i::Int + ) + return resize!(nlcache, nlsolver.alg, i) end function Base.resize!(nlcache::NLAndersonCache, nlalg::NLAnderson, i::Int) @@ -256,5 +274,5 @@ function Base.resize!(nlcache::NLAndersonCache, nlalg::NLAnderson, i::Int) end end - nothing + return nothing end diff --git a/lib/OrdinaryDiffEqNonlinearSolve/src/initialize_dae.jl b/lib/OrdinaryDiffEqNonlinearSolve/src/initialize_dae.jl index 9fdc8a5189..013ad52669 100644 --- a/lib/OrdinaryDiffEqNonlinearSolve/src/initialize_dae.jl +++ b/lib/OrdinaryDiffEqNonlinearSolve/src/initialize_dae.jl @@ -60,30 +60,40 @@ end end function default_nlsolve( - ::Nothing, isinplace::Val{true}, u, ::AbstractNonlinearProblem, autodiff = false) - FastShortcutNonlinearPolyalg(; - autodiff = autodiff ? AutoForwardDiff() : AutoFiniteDiff()) + ::Nothing, isinplace::Val{true}, u, ::AbstractNonlinearProblem, autodiff = false + ) + return FastShortcutNonlinearPolyalg(; + autodiff = autodiff ? AutoForwardDiff() : AutoFiniteDiff() + ) end function default_nlsolve( - ::Nothing, isinplace::Val{true}, u, ::NonlinearLeastSquaresProblem, autodiff = false) - FastShortcutNLLSPolyalg(; autodiff = autodiff ? AutoForwardDiff() : AutoFiniteDiff()) + ::Nothing, isinplace::Val{true}, u, ::NonlinearLeastSquaresProblem, autodiff = false + ) + return FastShortcutNLLSPolyalg(; autodiff = autodiff ? AutoForwardDiff() : AutoFiniteDiff()) end function default_nlsolve( - ::Nothing, isinplace::Val{false}, u, ::AbstractNonlinearProblem, autodiff = false) - FastShortcutNonlinearPolyalg(; - autodiff = autodiff ? AutoForwardDiff() : AutoFiniteDiff()) + ::Nothing, isinplace::Val{false}, u, ::AbstractNonlinearProblem, autodiff = false + ) + return FastShortcutNonlinearPolyalg(; + autodiff = autodiff ? AutoForwardDiff() : AutoFiniteDiff() + ) end function default_nlsolve( - ::Nothing, isinplace::Val{false}, u, ::NonlinearLeastSquaresProblem, autodiff = false) - FastShortcutNLLSPolyalg(; autodiff = autodiff ? AutoForwardDiff() : AutoFiniteDiff()) + ::Nothing, isinplace::Val{false}, u, ::NonlinearLeastSquaresProblem, autodiff = false + ) + return FastShortcutNLLSPolyalg(; autodiff = autodiff ? AutoForwardDiff() : AutoFiniteDiff()) end -function default_nlsolve(::Nothing, isinplace::Val{false}, u::StaticArray, - ::AbstractNonlinearProblem, autodiff = false) - SimpleTrustRegion(autodiff = autodiff ? AutoForwardDiff() : AutoFiniteDiff()) +function default_nlsolve( + ::Nothing, isinplace::Val{false}, u::StaticArray, + ::AbstractNonlinearProblem, autodiff = false + ) + return SimpleTrustRegion(autodiff = autodiff ? AutoForwardDiff() : AutoFiniteDiff()) end -function default_nlsolve(::Nothing, isinplace::Val{false}, u::StaticArray, - ::NonlinearLeastSquaresProblem, autodiff = false) - SimpleGaussNewton(autodiff = autodiff ? AutoForwardDiff() : AutoFiniteDiff()) +function default_nlsolve( + ::Nothing, isinplace::Val{false}, u::StaticArray, + ::NonlinearLeastSquaresProblem, autodiff = false + ) + return SimpleGaussNewton(autodiff = autodiff ? AutoForwardDiff() : AutoFiniteDiff()) end ## ShampineCollocationInit @@ -96,9 +106,11 @@ Solve for `u` =# -function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, +function _initialize_dae!( + integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::ODEProblem, alg::DiffEqBase.ShampineCollocationInit, - isinplace::Val{true}) + isinplace::Val{true} + ) (; p, t, f) = integrator M = integrator.f.mass_matrix dtmax = integrator.opts.dtmax @@ -108,7 +120,7 @@ function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, initdt = alg.initdt dt = if initdt === nothing integrator.dt != 0 ? min(integrator.dt / 5, dtmax) : - (prob.tspan[end] - prob.tspan[begin]) / 1000 # Haven't implemented norm reduction + (prob.tspan[end] - prob.tspan[begin]) / 1000 # Haven't implemented norm reduction else initdt end @@ -125,18 +137,18 @@ function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, # backward Euler nlsolver = integrator.cache.nlsolver oldγ, oldc, oldmethod, - olddt = nlsolver.γ, nlsolver.c, nlsolver.method, - integrator.dt + olddt = nlsolver.γ, nlsolver.c, nlsolver.method, + integrator.dt nlsolver.tmp .= integrator.uprev nlsolver.γ, nlsolver.c = 1, 1 nlsolver.method = DIRK integrator.dt = dt z = nlsolve!(nlsolver, integrator, integrator.cache) nlsolver.γ, nlsolver.c, nlsolver.method, - integrator.dt = oldγ, oldc, oldmethod, - olddt + integrator.dt = oldγ, oldc, oldmethod, + olddt failed = nlsolvefail(nlsolver) - @.. broadcast=false integrator.u=integrator.uprev+z + @.. broadcast = false integrator.u = integrator.uprev + z else # _u0 should be non-dual since NonlinearSolve does not differentiate the solver @@ -152,7 +164,7 @@ function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, end isAD = alg_autodiff(integrator.alg) isa AutoForwardDiff || - typeof(u0) !== typeof(_u0) + typeof(u0) !== typeof(_u0) if isAD chunk = ForwardDiff.pickchunksize(length(tmp)) _tmp = dualcache(tmp, chunk) @@ -189,13 +201,17 @@ function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, end end - nlfunc = NonlinearFunction(nlequation!; + nlfunc = NonlinearFunction( + nlequation!; jac_prototype = f.jac_prototype, - jac = jac) + jac = jac + ) nlprob = NonlinearProblem(nlfunc, integrator.u, p) nlsolve = default_nlsolve(alg.nlsolve, isinplace, u0, nlprob, isAD) - nlsol = solve(nlprob, nlsolve; abstol = integrator.opts.abstol, - reltol = integrator.opts.reltol) + nlsol = solve( + nlprob, nlsolve; abstol = integrator.opts.abstol, + reltol = integrator.opts.reltol + ) integrator.u .= nlsol.u failed = nlsol.retcode != ReturnCode.Success end @@ -206,15 +222,19 @@ function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, if failed @warn "ShampineCollocationInit DAE initialization algorithm failed with dt=$dt. Try to adjust initdt like `ShampineCollocationInit(initdt)`." - integrator.sol = SciMLBase.solution_new_retcode(integrator.sol, - ReturnCode.InitialFailure) + integrator.sol = SciMLBase.solution_new_retcode( + integrator.sol, + ReturnCode.InitialFailure + ) end return end -function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, +function _initialize_dae!( + integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::ODEProblem, alg::DiffEqBase.ShampineCollocationInit, - isinplace::Val{false}) + isinplace::Val{false} + ) (; p, t, f) = integrator u0 = integrator.u M = integrator.f.mass_matrix @@ -223,7 +243,7 @@ function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, initdt = alg.initdt dt = if initdt === nothing integrator.dt != 0 ? min(integrator.dt / 5, dtmax) : - (prob.tspan[end] - prob.tspan[begin]) / 1000 # Haven't implemented norm reduction + (prob.tspan[end] - prob.tspan[begin]) / 1000 # Haven't implemented norm reduction else initdt end @@ -240,18 +260,18 @@ function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, # backward Euler nlsolver = integrator.cache.nlsolver oldγ, oldc, oldmethod, - olddt = nlsolver.γ, nlsolver.c, nlsolver.method, - integrator.dt + olddt = nlsolver.γ, nlsolver.c, nlsolver.method, + integrator.dt nlsolver.tmp .= integrator.uprev nlsolver.γ, nlsolver.c = 1, 1 nlsolver.method = DIRK integrator.dt = dt z = nlsolve!(nlsolver, integrator, integrator.cache) nlsolver.γ, nlsolver.c, nlsolver.method, - integrator.dt = oldγ, oldc, oldmethod, - olddt + integrator.dt = oldγ, oldc, oldmethod, + olddt failed = nlsolvefail(nlsolver) - @.. broadcast=false integrator.u=integrator.uprev+z + @.. broadcast = false integrator.u = integrator.uprev + z else nlequation_oop = @closure (u, _) -> begin update_coefficients!(M, u, p, t) @@ -266,14 +286,18 @@ function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, end end - nlfunc = NonlinearFunction(nlequation_oop; + nlfunc = NonlinearFunction( + nlequation_oop; jac_prototype = f.jac_prototype, - jac = jac) + jac = jac + ) nlprob = NonlinearProblem(nlfunc, u0) nlsolve = default_nlsolve(alg.nlsolve, isinplace, nlprob, u0) - nlsol = solve(nlprob, nlsolve; abstol = integrator.opts.abstol, - reltol = integrator.opts.reltol) + nlsol = solve( + nlprob, nlsolve; abstol = integrator.opts.abstol, + reltol = integrator.opts.reltol + ) integrator.u = nlsol.u failed = nlsol.retcode != ReturnCode.Success end @@ -285,14 +309,18 @@ function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, if failed @warn "ShampineCollocationInit DAE initialization algorithm failed with dt=$dt. Try to adjust initdt like `ShampineCollocationInit(initdt)`." - integrator.sol = SciMLBase.solution_new_retcode(integrator.sol, - ReturnCode.InitialFailure) + integrator.sol = SciMLBase.solution_new_retcode( + integrator.sol, + ReturnCode.InitialFailure + ) end return end -function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::DAEProblem, - alg::ShampineCollocationInit, isinplace::Val{true}) +function _initialize_dae!( + integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::DAEProblem, + alg::ShampineCollocationInit, isinplace::Val{true} + ) (; p, t, f) = integrator u0 = integrator.u @@ -347,13 +375,17 @@ function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::DA end end - nlfunc = NonlinearFunction(nlequation!; + nlfunc = NonlinearFunction( + nlequation!; jac_prototype = f.jac_prototype, - jac = jac) + jac = jac + ) nlprob = NonlinearProblem(nlfunc, u0, p) nlsolve = default_nlsolve(alg.nlsolve, isinplace, u0, nlprob, isAD) - nlsol = solve(nlprob, nlsolve; abstol = integrator.opts.abstol, - reltol = integrator.opts.reltol) + nlsol = solve( + nlprob, nlsolve; abstol = integrator.opts.abstol, + reltol = integrator.opts.reltol + ) integrator.u = nlsol.u recursivecopy!(integrator.uprev, integrator.u) @@ -362,14 +394,18 @@ function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::DA end if nlsol.retcode != ReturnCode.Success @warn "ShampineCollocationInit DAE initialization algorithm failed with dt=$dt. Try to adjust initdt like `ShampineCollocationInit(initdt)`." - integrator.sol = SciMLBase.solution_new_retcode(integrator.sol, - ReturnCode.InitialFailure) + integrator.sol = SciMLBase.solution_new_retcode( + integrator.sol, + ReturnCode.InitialFailure + ) end return end -function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::DAEProblem, - alg::ShampineCollocationInit, isinplace::Val{false}) +function _initialize_dae!( + integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::DAEProblem, + alg::ShampineCollocationInit, isinplace::Val{false} + ) (; p, t, f) = integrator u0 = integrator.u dtmax = integrator.opts.dtmax @@ -392,15 +428,19 @@ function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::DA return f.jac(u, p, inv(dt), t) end end - nlfunc = NonlinearFunction(nlequation; jac_prototype = f.jac_prototype, - jac = jac) + nlfunc = NonlinearFunction( + nlequation; jac_prototype = f.jac_prototype, + jac = jac + ) nlprob = NonlinearProblem(nlfunc, u0) nlsolve = default_nlsolve(alg.nlsolve, isinplace, nlprob, u0) nlfunc = NonlinearFunction(nlequation; jac_prototype = f.jac_prototype) nlprob = NonlinearProblem(nlfunc, u0) - nlsol = solve(nlprob, nlsolve; abstol = integrator.opts.abstol, - reltol = integrator.opts.reltol) + nlsol = solve( + nlprob, nlsolve; abstol = integrator.opts.abstol, + reltol = integrator.opts.reltol + ) integrator.u = nlsol.u @@ -410,8 +450,10 @@ function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::DA end if nlsol.retcode != ReturnCode.Success @warn "ShampineCollocationInit DAE initialization algorithm failed with dt=$dt. Try to adjust initdt like `ShampineCollocationInit(initdt)`." - integrator.sol = SciMLBase.solution_new_retcode(integrator.sol, - ReturnCode.InitialFailure) + integrator.sol = SciMLBase.solution_new_retcode( + integrator.sol, + ReturnCode.InitialFailure + ) end return end @@ -427,13 +469,17 @@ Solve for the algebraic variables =# algebraic_jacobian(::Nothing, algebraic_eqs, algebraic_vars) = nothing -function algebraic_jacobian(jac_prototype::T, algebraic_eqs, - algebraic_vars) where {T <: AbstractMatrix} - jac_prototype[algebraic_eqs, algebraic_vars] +function algebraic_jacobian( + jac_prototype::T, algebraic_eqs, + algebraic_vars + ) where {T <: AbstractMatrix} + return jac_prototype[algebraic_eqs, algebraic_vars] end -function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::ODEProblem, - alg::DiffEqBase.BrownFullBasicInit, isinplace::Val{true}) +function _initialize_dae!( + integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::ODEProblem, + alg::DiffEqBase.BrownFullBasicInit, isinplace::Val{true} + ) (; p, t, f) = integrator u = integrator.u M = integrator.f.mass_matrix @@ -507,14 +553,18 @@ function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::OD end if nlsol.retcode != ReturnCode.Success - integrator.sol = SciMLBase.solution_new_retcode(integrator.sol, - ReturnCode.InitialFailure) + integrator.sol = SciMLBase.solution_new_retcode( + integrator.sol, + ReturnCode.InitialFailure + ) end return end -function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::ODEProblem, - alg::DiffEqBase.BrownFullBasicInit, isinplace::Val{false}) +function _initialize_dae!( + integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::ODEProblem, + alg::DiffEqBase.BrownFullBasicInit, isinplace::Val{false} + ) (; p, t, f) = integrator u0 = integrator.u @@ -574,14 +624,18 @@ function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::OD end if nlsol.retcode != ReturnCode.Success - integrator.sol = SciMLBase.solution_new_retcode(integrator.sol, - ReturnCode.InitialFailure) + integrator.sol = SciMLBase.solution_new_retcode( + integrator.sol, + ReturnCode.InitialFailure + ) end return end -function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::DAEProblem, - alg::DiffEqBase.BrownFullBasicInit, isinplace::Val{true}) +function _initialize_dae!( + integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::DAEProblem, + alg::DiffEqBase.BrownFullBasicInit, isinplace::Val{true} + ) (; p, t, f) = integrator differential_vars = prob.differential_vars u = integrator.u @@ -656,19 +710,24 @@ function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::DA end if nlsol.retcode != ReturnCode.Success - integrator.sol = SciMLBase.solution_new_retcode(integrator.sol, - ReturnCode.InitialFailure) + integrator.sol = SciMLBase.solution_new_retcode( + integrator.sol, + ReturnCode.InitialFailure + ) end return end -function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::DAEProblem, - alg::DiffEqBase.BrownFullBasicInit, isinplace::Val{false}) +function _initialize_dae!( + integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::DAEProblem, + alg::DiffEqBase.BrownFullBasicInit, isinplace::Val{false} + ) (; p, t, f) = integrator differential_vars = prob.differential_vars if check_dae_tolerance( - integrator, f(integrator.du, integrator.u, p, t), alg.abstol, t, isinplace) + integrator, f(integrator.du, integrator.u, p, t), alg.abstol, t, isinplace + ) return elseif differential_vars === nothing error("differential_vars must be set for DAE initialization to occur. Either set consistent initial conditions, differential_vars, or use a different initialization algorithm.") @@ -716,8 +775,10 @@ function _initialize_dae!(integrator::OrdinaryDiffEqCore.ODEIntegrator, prob::DA end if nlsol.retcode != ReturnCode.Success - integrator.sol = SciMLBase.solution_new_retcode(integrator.sol, - ReturnCode.InitialFailure) + integrator.sol = SciMLBase.solution_new_retcode( + integrator.sol, + ReturnCode.InitialFailure + ) end return end diff --git a/lib/OrdinaryDiffEqNonlinearSolve/src/newton.jl b/lib/OrdinaryDiffEqNonlinearSolve/src/newton.jl index b7d7e7faa6..6e62f8896a 100644 --- a/lib/OrdinaryDiffEqNonlinearSolve/src/newton.jl +++ b/lib/OrdinaryDiffEqNonlinearSolve/src/newton.jl @@ -1,7 +1,9 @@ ## initialize! -@muladd function initialize!(nlsolver::NLSolver{<:NLNewton, false}, - integrator::SciMLBase.DEIntegrator) +@muladd function initialize!( + nlsolver::NLSolver{<:NLNewton, false}, + integrator::SciMLBase.DEIntegrator + ) (; dt) = integrator (; cache) = nlsolver @@ -11,22 +13,28 @@ nothing end -@muladd function initialize!(nlsolver::NLSolver{<:NLNewton, true}, - integrator::SciMLBase.DEIntegrator) +@muladd function initialize!( + nlsolver::NLSolver{<:NLNewton, true}, + integrator::SciMLBase.DEIntegrator + ) (; u, uprev, t, dt, opts) = integrator (; cache) = nlsolver (; weight) = cache cache.invγdt = inv(dt * nlsolver.γ) cache.tstep = integrator.t + nlsolver.c * dt - calculate_residuals!(weight, fill!(weight, one(eltype(u))), uprev, u, - opts.abstol, opts.reltol, opts.internalnorm, t) + calculate_residuals!( + weight, fill!(weight, one(eltype(u))), uprev, u, + opts.abstol, opts.reltol, opts.internalnorm, t + ) nothing end -function initialize!(nlsolver::NLSolver{<:NonlinearSolveAlg, false}, - integrator::SciMLBase.DEIntegrator) +function initialize!( + nlsolver::NLSolver{<:NonlinearSolveAlg, false}, + integrator::SciMLBase.DEIntegrator + ) (; uprev, t, p, dt, opts, f) = integrator (; z, tmp, ztmp, γ, α, iter, cache, method, alg) = nlsolver cache.invγdt = inv(dt * nlsolver.γ) @@ -45,11 +53,13 @@ function initialize!(nlsolver::NLSolver{<:NonlinearSolveAlg, false}, end new_prob = remake(cache.prob, p = nlp_params, u0 = z) cache.cache = init(new_prob, alg.alg) - nothing + return nothing end -function initialize!(nlsolver::NLSolver{<:NonlinearSolveAlg, true}, - integrator::SciMLBase.DEIntegrator) +function initialize!( + nlsolver::NLSolver{<:NonlinearSolveAlg, true}, + integrator::SciMLBase.DEIntegrator + ) (; uprev, t, p, dt, opts, f) = integrator (; z, tmp, ztmp, γ, α, iter, cache, method, alg) = nlsolver @@ -77,16 +87,16 @@ function initialize!(nlsolver::NLSolver{<:NonlinearSolveAlg, true}, nlstep_data.set_outer_tmp(nlstep_data.nlprob, atmp) end nlstep_data.nlprob.u0 .= @view z[nlstep_data.u0perm] - SciMLBase.reinit!(cache.cache, nlstep_data.nlprob.u0, p=nlstep_data.nlprob.p) + SciMLBase.reinit!(cache.cache, nlstep_data.nlprob.u0, p = nlstep_data.nlprob.p) else if f isa DAEFunction nlp_params = (tmp, ztmp, ustep, γ, α, tstep, k, invγdt, p, dt, f) else nlp_params = (tmp, ustep, γ, α, tstep, k, invγdt, method, p, dt, f) end - SciMLBase.reinit!(cache.cache, z, p=nlp_params) + SciMLBase.reinit!(cache.cache, z, p = nlp_params) end - nothing + return nothing end ## compute_step! @@ -101,8 +111,10 @@ end nlsolver.ztmp = nlcache.u ustep = compute_ustep(tmp, γ, z, method) - atmp = calculate_residuals(nlcache.fu, uprev, ustep, opts.abstol, opts.reltol, - opts.internalnorm, t) + atmp = calculate_residuals( + nlcache.fu, uprev, ustep, opts.abstol, opts.reltol, + opts.internalnorm, t + ) ndz = opts.internalnorm(atmp, t) #ndz = opts.internalnorm(nlcache.fu, t) # NDF and BDF are special because the truncation error is directly @@ -129,16 +141,20 @@ end ) nlstep_data.nlprobmap(ztmp, nlstepsol) ustep = compute_ustep!(ustep, tmp, γ, z, method) - calculate_residuals!(@view(atmp[nlstep_data.u0perm]), nlcache.fu, - @view(uprev[nlstep_data.u0perm]), - @view(ustep[nlstep_data.u0perm]), opts.abstol, - opts.reltol, opts.internalnorm, t) + calculate_residuals!( + @view(atmp[nlstep_data.u0perm]), nlcache.fu, + @view(uprev[nlstep_data.u0perm]), + @view(ustep[nlstep_data.u0perm]), opts.abstol, + opts.reltol, opts.internalnorm, t + ) ndz = opts.internalnorm(atmp, t) else - @.. broadcast=false ztmp=nlcache.u + @.. broadcast = false ztmp = nlcache.u ustep = compute_ustep!(ustep, tmp, γ, z, method) - calculate_residuals!(atmp, nlcache.fu, uprev, ustep, opts.abstol, opts.reltol, - opts.internalnorm, t) + calculate_residuals!( + atmp, nlcache.fu, uprev, ustep, opts.abstol, opts.reltol, + opts.internalnorm, t + ) ndz = opts.internalnorm(atmp, t) end @@ -203,8 +219,10 @@ Equations II, Springer Series in Computational Mathematics. ISBN integrator.stats.nsolve += 1 end - atmp = calculate_residuals(dz, uprev, ustep, opts.abstol, opts.reltol, - opts.internalnorm, t) + atmp = calculate_residuals( + dz, uprev, ustep, opts.abstol, opts.reltol, + opts.internalnorm, t + ) ndz = opts.internalnorm(atmp, t) # NDF and BDF are special because the truncation error is directly # proportional to the total displacement. @@ -235,7 +253,8 @@ end b, ustep = _compute_rhs!(tmp, ztmp, ustep, α, tstep, k, invγdt, p, _uprev, f, z) else b, ustep = _compute_rhs!( - tmp, ztmp, ustep, γ, α, tstep, k, invγdt, method, p, dt, f, z) + tmp, ztmp, ustep, γ, α, tstep, k, invγdt, method, p, dt, f, z + ) end # update W @@ -253,17 +272,20 @@ end end if is_always_new(nlsolver) || (iter == 1 && new_W) - linres = dolinsolve(integrator, linsolve; A = W, b = _vec(b), linu = _vec(dz), - reltol = reltol) + linres = dolinsolve( + integrator, linsolve; A = W, b = _vec(b), linu = _vec(dz), + reltol = reltol + ) else linres = dolinsolve( integrator, linsolve; A = nothing, b = _vec(b), linu = _vec(dz), - reltol = reltol) + reltol = reltol + ) end if !SciMLBase.successful_retcode(linres.retcode) && - linres.retcode != SciMLBase.ReturnCode.Default - return convert(eltype(atmp,), Inf) + linres.retcode != SciMLBase.ReturnCode.Default + return convert(eltype(atmp), Inf) end cache.linsolve = linres.cache @@ -281,8 +303,10 @@ end !(W_γdt ≈ γdt) && (rmul!(dz, 2 / (1 + γdt / W_γdt))) relax!(dz, nlsolver, integrator, f) - calculate_residuals!(atmp, dz, uprev, ustep, opts.abstol, opts.reltol, - opts.internalnorm, t) + calculate_residuals!( + atmp, dz, uprev, ustep, opts.abstol, opts.reltol, + opts.internalnorm, t + ) ndz = opts.internalnorm(atmp, t) # NDF and BDF are special because the truncation error is directly @@ -292,14 +316,14 @@ end end # compute next iterate - @.. broadcast=false ztmp=z - dz + @.. broadcast = false ztmp = z - dz ndz end function get_dae_uprev(integrator, uprev) # not all predictors are uprev, for other forms of predictors, defined in u₀ - if isdefined(integrator.cache, :u₀) + return if isdefined(integrator.cache, :u₀) integrator.cache.u₀ else uprev @@ -314,7 +338,7 @@ function _compute_rhs(tmp, α, tstep, invγdt, p, uprev, f::TF, z) where {TF <: end function compute_ustep(tmp, γ, z, method) - if method === COEFFICIENT_MULTISTEP + return if method === COEFFICIENT_MULTISTEP z else @. tmp + γ * z @@ -327,10 +351,10 @@ function compute_ustep!(ustep, tmp, γ, z, method) else @.. ustep = tmp + γ * z end - ustep + return ustep end -function _compute_rhs(tmp, γ, α, tstep, invγdt, method::MethodType, p, dt, f::F, z) where F +function _compute_rhs(tmp, γ, α, tstep, invγdt, method::MethodType, p, dt, f::F, z) where {F} mass_matrix = f.mass_matrix ustep = compute_ustep(tmp, γ, z, method) if method === COEFFICIENT_MULTISTEP @@ -352,26 +376,30 @@ function _compute_rhs(tmp, γ, α, tstep, invγdt, method::MethodType, p, dt, f: return ztmp, ustep end -function _compute_rhs!(tmp, ztmp, ustep, α, tstep, k, - invγdt, p, uprev, f::TF, z) where {TF <: DAEFunction} - @.. broadcast=false ztmp=(tmp + α * z) * invγdt +function _compute_rhs!( + tmp, ztmp, ustep, α, tstep, k, + invγdt, p, uprev, f::TF, z + ) where {TF <: DAEFunction} + @.. broadcast = false ztmp = (tmp + α * z) * invγdt @.. ustep = uprev + z f(k, ztmp, ustep, p, tstep) return _vec(k), ustep end -function _compute_rhs!(tmp, ztmp, ustep, γ, α, tstep, k, - invγdt, method::MethodType, p, dt, f, z) +function _compute_rhs!( + tmp, ztmp, ustep, γ, α, tstep, k, + invγdt, method::MethodType, p, dt, f, z + ) mass_matrix = f.mass_matrix ustep = compute_ustep!(ustep, tmp, γ, z, method) if method === COEFFICIENT_MULTISTEP f(k, z, p, tstep) if mass_matrix === I - @.. broadcast=false ztmp=tmp + k - (α * invγdt) * z + @.. broadcast = false ztmp = tmp + k - (α * invγdt) * z else update_coefficients!(mass_matrix, ustep, p, tstep) mul!(_vec(ztmp), mass_matrix, _vec(z)) - @.. broadcast=false ztmp=tmp + k - (α * invγdt) * ztmp + @.. broadcast = false ztmp = tmp + k - (α * invγdt) * ztmp end else f(k, ustep, p, tstep) @@ -386,8 +414,10 @@ function _compute_rhs!(tmp, ztmp, ustep, γ, α, tstep, k, return _vec(ztmp), ustep end -function _compute_rhs!(tmp::Array, ztmp::Array, ustep::Array, α, tstep, k, - invγdt, p, uprev, f::TF, z) where {TF <: DAEFunction} +function _compute_rhs!( + tmp::Array, ztmp::Array, ustep::Array, α, tstep, k, + invγdt, p, uprev, f::TF, z + ) where {TF <: DAEFunction} @inbounds @simd ivdep for i in eachindex(z) ztmp[i] = (tmp[i] + α * z[i]) * invγdt end @@ -399,8 +429,10 @@ function _compute_rhs!(tmp::Array, ztmp::Array, ustep::Array, α, tstep, k, return _vec(k), ustep end -function _compute_rhs!(tmp::Array, ztmp::Array, ustep::Array, γ, α, tstep, k, - invγdt, method::MethodType, p, dt, f, z) +function _compute_rhs!( + tmp::Array, ztmp::Array, ustep::Array, γ, α, tstep, k, + invγdt, method::MethodType, p, dt, f, z + ) mass_matrix = f.mass_matrix ustep = compute_ustep!(ustep, tmp, γ, z, method) if method === COEFFICIENT_MULTISTEP @@ -437,30 +469,36 @@ end ## relax! function relax!(dz, nlsolver::AbstractNLSolver, integrator::DEIntegrator, f::TF) where {TF} - relax!(dz, nlsolver, integrator, f, relax(nlsolver)) + return relax!(dz, nlsolver, integrator, f, relax(nlsolver)) end function relax(dz, nlsolver::AbstractNLSolver, integrator::DEIntegrator, f::TF) where {TF} - relax(dz, nlsolver, integrator, f, relax(nlsolver)) + return relax(dz, nlsolver, integrator, f, relax(nlsolver)) end -function relax!(dz, nlsolver::AbstractNLSolver, integrator::DEIntegrator, f::TF, - r::Nothing) where {TF} - dz +function relax!( + dz, nlsolver::AbstractNLSolver, integrator::DEIntegrator, f::TF, + r::Nothing + ) where {TF} + return dz end -function relax!(dz, nlsolver::AbstractNLSolver, integrator::DEIntegrator, f::TF, - r::Number) where {TF} +function relax!( + dz, nlsolver::AbstractNLSolver, integrator::DEIntegrator, f::TF, + r::Number + ) where {TF} if !iszero(r) rmul!(dz, 1 - r) end - dz + return dz end -function relax!(dz, nlsolver::AbstractNLSolver, integrator::DEIntegrator, f::TF, - linesearch) where {TF} +function relax!( + dz, nlsolver::AbstractNLSolver, integrator::DEIntegrator, f::TF, + linesearch + ) where {TF} let dz = dz, - integrator = integrator, - nlsolver = nlsolver, - f = f, - linesearch = linesearch + integrator = integrator, + nlsolver = nlsolver, + f = f, + linesearch = linesearch (; uprev, t, p, dt, opts, isdae) = integrator (; z, tmp, ztmp, γ, iter, α, cache, method) = nlsolver @@ -470,13 +508,17 @@ function relax!(dz, nlsolver::AbstractNLSolver, integrator::DEIntegrator, f::TF, if isdae _uprev = get_dae_uprev(integrator, uprev) b, ustep2 = _compute_rhs!( - tmp, ztmp, ustep, α, tstep, k, invγdt, p, _uprev, f::TF, z) + tmp, ztmp, ustep, α, tstep, k, invγdt, p, _uprev, f::TF, z + ) else b, ustep2 = _compute_rhs!( - tmp, ztmp, ustep, γ, α, tstep, k, invγdt, method, p, dt, f, z) + tmp, ztmp, ustep, γ, α, tstep, k, invγdt, method, p, dt, f, z + ) end - calculate_residuals!(atmp, b, uprev, ustep2, opts.abstol, opts.reltol, - opts.internalnorm, t) + calculate_residuals!( + atmp, b, uprev, ustep2, opts.abstol, opts.reltol, + opts.internalnorm, t + ) ndz = opts.internalnorm(atmp, t) return ndz end @@ -504,26 +546,32 @@ function relax!(dz, nlsolver::AbstractNLSolver, integrator::DEIntegrator, f::TF, end end -function relax(dz, nlsolver::AbstractNLSolver, integrator::DEIntegrator, f::TF, - r::Number) where {TF} +function relax( + dz, nlsolver::AbstractNLSolver, integrator::DEIntegrator, f::TF, + r::Number + ) where {TF} if !iszero(r) dz = (1 - r) * dz end return dz end -function relax(dz, nlsolver::AbstractNLSolver, integrator::DEIntegrator, f::TF, - r::Nothing) where {TF} +function relax( + dz, nlsolver::AbstractNLSolver, integrator::DEIntegrator, f::TF, + r::Nothing + ) where {TF} return dz end -function relax(dz, nlsolver::AbstractNLSolver, integrator::DEIntegrator, f::TF, - linesearch) where {TF} +function relax( + dz, nlsolver::AbstractNLSolver, integrator::DEIntegrator, f::TF, + linesearch + ) where {TF} let dz = dz, - integrator = integrator, - nlsolver = nlsolver, - f = f, - linesearch = linesearch + integrator = integrator, + nlsolver = nlsolver, + f = f, + linesearch = linesearch (; uprev, t, p, dt, opts) = integrator (; z, tmp, ztmp, γ, iter, cache, method) = nlsolver @@ -536,8 +584,10 @@ function relax(dz, nlsolver::AbstractNLSolver, integrator::DEIntegrator, f::TF, else ztmp, ustep2 = _compute_rhs(tmp, γ, α, tstep, invγdt, method, p, f, z) end - atmp = calculate_residuals(b, uprev, ustep2, opts.abstol, opts.reltol, - opts.internalnorm, t) + atmp = calculate_residuals( + b, uprev, ustep2, opts.abstol, opts.reltol, + opts.internalnorm, t + ) ndz = opts.internalnorm(atmp, t) return ndz end @@ -579,6 +629,5 @@ function Base.resize!(nlcache::NLNewtonCache, ::AbstractNLSolver, integrator, i: # resize J and W (or rather create new ones of appropriate size and type) resize_J_W!(nlcache, integrator, i) - nothing + return nothing end - diff --git a/lib/OrdinaryDiffEqNonlinearSolve/src/nlsolve.jl b/lib/OrdinaryDiffEqNonlinearSolve/src/nlsolve.jl index a382a0af44..8d6a5286f6 100644 --- a/lib/OrdinaryDiffEqNonlinearSolve/src/nlsolve.jl +++ b/lib/OrdinaryDiffEqNonlinearSolve/src/nlsolve.jl @@ -14,8 +14,10 @@ where `dt` is the step size and `γ` and `c` are constants, and return the solut Whether `innertmp` and `outertmp` is used for the evaluation is controlled by setting `nlsolver.method`. In both cases the variable name is actually `nlsolver.tmp`. """ -function nlsolve!(nlsolver::NL, integrator::SciMLBase.DEIntegrator, - cache = nothing, repeat_step = false) where {NL <: AbstractNLSolver} +function nlsolve!( + nlsolver::NL, integrator::SciMLBase.DEIntegrator, + cache = nothing, repeat_step = false + ) where {NL <: AbstractNLSolver} always_new = is_always_new(nlsolver) check_div′ = check_div(nlsolver) @label REDO @@ -109,10 +111,12 @@ function nlsolve!(nlsolver::NL, integrator::SciMLBase.DEIntegrator, η = DiffEqBase.value(θ / (1 - θ)) # don't trust θ for non-adaptive on first iter because the solver doesn't provide feedback # for us to know whether our previous nlsolve converged sufficiently well - check_η_convergence = (iter > 1 || - (isnewton(nlsolver) && isadaptive(integrator.alg))) - if (iter == 1 && ndz < 1e-5) || - (check_η_convergence && η >= zero(η) && η * ndz < κ) + check_η_convergence = ( + iter > 1 || + (isnewton(nlsolver) && isadaptive(integrator.alg)) + ) + if (iter == 1 && ndz < 1.0e-5) || + (check_η_convergence && η >= zero(η) && η * ndz < κ) nlsolver.status = Convergence nlsolver.nfails = 0 break @@ -120,14 +124,14 @@ function nlsolve!(nlsolver::NL, integrator::SciMLBase.DEIntegrator, end if isnewton(nlsolver) && nlsolver.status == Divergence && - !isJcurrent(nlsolver, integrator) + !isJcurrent(nlsolver, integrator) nlsolver.status = TryAgain nlsolver.nfails += 1 always_new || @goto REDO end nlsolver.ηold = η - postamble!(nlsolver, integrator) + return postamble!(nlsolver, integrator) end ## default implementations @@ -135,18 +139,20 @@ end initialize!(::AbstractNLSolver, integrator::SciMLBase.DEIntegrator) = nothing function initial_η(nlsolver::NLSolver, integrator) - max(nlsolver.ηold, eps(eltype(integrator.opts.reltol)))^(0.8) + return max(nlsolver.ηold, eps(eltype(integrator.opts.reltol)))^(0.8) end -function apply_step!(nlsolver::NLSolver{algType, iip}, - integrator::SciMLBase.DEIntegrator) where {algType, iip} +function apply_step!( + nlsolver::NLSolver{algType, iip}, + integrator::SciMLBase.DEIntegrator + ) where {algType, iip} if iip - @.. broadcast=false nlsolver.z=nlsolver.ztmp + @.. broadcast = false nlsolver.z = nlsolver.ztmp else nlsolver.z = nlsolver.ztmp end - nothing + return nothing end function postamble!(nlsolver::NLSolver, integrator::SciMLBase.DEIntegrator) @@ -161,5 +167,5 @@ function postamble!(nlsolver::NLSolver, integrator::SciMLBase.DEIntegrator) setfirststage!(nlsolver, false) isnewton(nlsolver) && (nlsolver.cache.firstcall = false) - nlsolver.z + return nlsolver.z end diff --git a/lib/OrdinaryDiffEqNonlinearSolve/src/type.jl b/lib/OrdinaryDiffEqNonlinearSolve/src/type.jl index 7b41c54903..c7a2325a3f 100644 --- a/lib/OrdinaryDiffEqNonlinearSolve/src/type.jl +++ b/lib/OrdinaryDiffEqNonlinearSolve/src/type.jl @@ -6,7 +6,7 @@ struct NLFunctional{K, C} <: AbstractNLSolverAlgorithm end function NLFunctional(; κ = 1 // 100, max_iter = 10, fast_convergence_cutoff = 1 // 5) - NLFunctional(κ, fast_convergence_cutoff, max_iter) + return NLFunctional(κ, fast_convergence_cutoff, max_iter) end struct NLAnderson{K, D, C} <: AbstractNLSolverAlgorithm @@ -18,9 +18,11 @@ struct NLAnderson{K, D, C} <: AbstractNLSolverAlgorithm droptol::D end -function NLAnderson(; κ = 1 // 100, max_iter = 10, max_history::Int = 5, aa_start::Int = 1, - droptol = nothing, fast_convergence_cutoff = 1 // 5) - NLAnderson(κ, fast_convergence_cutoff, max_iter, max_history, aa_start, droptol) +function NLAnderson(; + κ = 1 // 100, max_iter = 10, max_history::Int = 5, aa_start::Int = 1, + droptol = nothing, fast_convergence_cutoff = 1 // 5 + ) + return NLAnderson(κ, fast_convergence_cutoff, max_iter, max_history, aa_start, droptol) end struct NLNewton{K, C1, C2, R} <: AbstractNLSolverAlgorithm @@ -33,15 +35,19 @@ struct NLNewton{K, C1, C2, R} <: AbstractNLSolverAlgorithm relax::R end -function NLNewton(; κ = 1 // 100, max_iter = 10, fast_convergence_cutoff = 1 // 5, +function NLNewton(; + κ = 1 // 100, max_iter = 10, fast_convergence_cutoff = 1 // 5, new_W_dt_cutoff = 1 // 5, always_new = false, check_div = true, - relax = nothing) + relax = nothing + ) if relax isa Number && !(0 <= relax < 1) throw(ArgumentError("The relaxation parameter must be in [0, 1), got `relax = $relax`")) end - NLNewton(κ, max_iter, fast_convergence_cutoff, new_W_dt_cutoff, always_new, check_div, - relax) + return NLNewton( + κ, max_iter, fast_convergence_cutoff, new_W_dt_cutoff, always_new, check_div, + relax + ) end struct NonlinearSolveAlg{K, C1, C2, A} <: AbstractNLSolverAlgorithm @@ -54,18 +60,23 @@ struct NonlinearSolveAlg{K, C1, C2, A} <: AbstractNLSolverAlgorithm alg::A end -function NonlinearSolveAlg(alg = NewtonRaphson(autodiff = AutoFiniteDiff()); +function NonlinearSolveAlg( + alg = NewtonRaphson(autodiff = AutoFiniteDiff()); κ = 1 // 100, max_iter = 10, fast_convergence_cutoff = 1 // 5, - new_W_dt_cutoff = 1 // 5, always_new = false, check_div = true) - NonlinearSolveAlg( + new_W_dt_cutoff = 1 // 5, always_new = false, check_div = true + ) + return NonlinearSolveAlg( κ, max_iter, fast_convergence_cutoff, new_W_dt_cutoff, always_new, check_div, - alg) + alg + ) end # solver -mutable struct NLSolver{algType, iip, uType, gamType, tmpType, tType, - C <: AbstractNLSolverCache, E} <: AbstractNLSolver{algType, iip} +mutable struct NLSolver{ + algType, iip, uType, gamType, tmpType, tType, + C <: AbstractNLSolverCache, E, + } <: AbstractNLSolver{algType, iip} z::uType tmp::uType # DIRK and multistep methods only use tmp tmp2::tmpType # for GLM if necessary @@ -87,11 +98,13 @@ mutable struct NLSolver{algType, iip, uType, gamType, tmpType, tType, end # default to DIRK -function NLSolver{iip, tType}(z, tmp, ztmp, γ, c, α, alg, κ, fast_convergence_cutoff, ηold, +function NLSolver{iip, tType}( + z, tmp, ztmp, γ, c, α, alg, κ, fast_convergence_cutoff, ηold, iter, maxiters, status, cache, method = DIRK, tmp2 = nothing, - nfails::Int = 0) where {iip, tType} + nfails::Int = 0 + ) where {iip, tType} RT = real(eltype(z)) - NLSolver{typeof(alg), iip, typeof(z), typeof(γ), typeof(tmp2), tType, typeof(cache), RT}( + return NLSolver{typeof(alg), iip, typeof(z), typeof(γ), typeof(tmp2), tType, typeof(cache), RT}( z, tmp, tmp2, @@ -109,22 +122,23 @@ function NLSolver{iip, tType}(z, tmp, ztmp, γ, c, α, alg, κ, fast_convergence cache, method, nfails, - one(RT)) + one(RT) + ) end # caches mutable struct NLNewtonCache{ - uType, - tType, - tType2, - rateType, - J, - W, - ufType, - jcType, - lsType -} <: AbstractNLSolverCache + uType, + tType, + tType2, + rateType, + J, + W, + ufType, + jcType, + lsType, + } <: AbstractNLSolverCache ustep::uType tstep::tType k::rateType @@ -173,7 +187,7 @@ mutable struct NLFunctionalConstantCache{tType} <: AbstractNLSolverCache end mutable struct NLAndersonCache{uType, tType, rateType, uEltypeNoUnits} <: - AbstractNLSolverCache + AbstractNLSolverCache ustep::uType tstep::tType k::rateType @@ -193,7 +207,7 @@ mutable struct NLAndersonCache{uType, tType, rateType, uEltypeNoUnits} <: end mutable struct NLAndersonConstantCache{uType, tType, uEltypeNoUnits} <: - AbstractNLSolverCache + AbstractNLSolverCache tstep::tType dz::uType """residuals `g(zprev) - zprev` of previous fixed-point iteration""" @@ -210,7 +224,7 @@ mutable struct NLAndersonConstantCache{uType, tType, uEltypeNoUnits} <: end mutable struct NonlinearSolveCache{uType, tType, rateType, tType2, P, C} <: - AbstractNLSolverCache + AbstractNLSolverCache ustep::uType tstep::tType k::rateType diff --git a/lib/OrdinaryDiffEqNonlinearSolve/src/utils.jl b/lib/OrdinaryDiffEqNonlinearSolve/src/utils.jl index f1c05a7337..83bafe3975 100644 --- a/lib/OrdinaryDiffEqNonlinearSolve/src/utils.jl +++ b/lib/OrdinaryDiffEqNonlinearSolve/src/utils.jl @@ -23,7 +23,7 @@ isfirstcall(nlsolver::AbstractNLSolver) = nlsolver.cache.firstcall isfirststage(nlsolver::AbstractNLSolver) = nlsolver.cache.firststage setfirststage!(nlsolver::AbstractNLSolver, val::Bool) = setfirststage!(nlsolver.cache, val) function setfirststage!(nlcache::Union{NLNewtonCache, NLNewtonConstantCache}, val::Bool) - (nlcache.firststage = val) + return (nlcache.firststage = val) end setfirststage!(::Any, val::Bool) = nothing markfirststage!(nlsolver::AbstractNLSolver) = setfirststage!(nlsolver, true) @@ -43,7 +43,7 @@ get_W(nlcache::Union{NLNewtonCache, NLNewtonConstantCache}) = nlcache.W set_W_γdt!(nlsolver::AbstractNLSolver, W_γdt) = set_W_γdt!(nlsolver.cache, W_γdt) function set_W_γdt!(nlcache::Union{NLNewtonCache, NLNewtonConstantCache}, W_γdt) nlcache.W_γdt = W_γdt - W_γdt + return W_γdt end du_cache(nlsolver::AbstractNLSolver) = du_cache(nlsolver.cache) @@ -52,16 +52,18 @@ du_cache(nlcache::Union{NLFunctionalCache, NLAndersonCache, NLNewtonCache}) = (n function du_alias_or_new(nlsolver::AbstractNLSolver, rate_prototype) _du_cache = du_cache(nlsolver) - if _du_cache === nothing + return if _du_cache === nothing zero(rate_prototype) else first(_du_cache) end end -mutable struct DAEResidualJacobianWrapper{isAD, F, pType, duType, uType, alphaType, - gammaType, - tmpType, uprevType, tType} <: Function +mutable struct DAEResidualJacobianWrapper{ + isAD, F, pType, duType, uType, alphaType, + gammaType, + tmpType, uprevType, tType, + } <: Function f::F p::pType tmp_du::duType @@ -81,9 +83,13 @@ mutable struct DAEResidualJacobianWrapper{isAD, F, pType, duType, uType, alphaTy tmp_du = similar(uprev) tmp_u = similar(uprev) end - new{isautodiff, typeof(f), typeof(p), typeof(tmp_du), typeof(tmp_u), typeof(α), - typeof(invγdt), typeof(tmp), typeof(uprev), typeof(t)}(f, p, tmp_du, tmp_u, α, - invγdt, tmp, uprev, t) + return new{ + isautodiff, typeof(f), typeof(p), typeof(tmp_du), typeof(tmp_u), typeof(α), + typeof(invγdt), typeof(tmp), typeof(uprev), typeof(t), + }( + f, p, tmp_du, tmp_u, α, + invγdt, tmp, uprev, t + ) end end @@ -106,11 +112,13 @@ function (m::DAEResidualJacobianWrapper)(out, x) end @. tmp_du = (m.α * x + m.tmp) * m.invγdt @. tmp_u = x + m.uprev - m.f(out, tmp_du, tmp_u, m.p, m.t) + return m.f(out, tmp_du, tmp_u, m.p, m.t) end -mutable struct DAEResidualDerivativeWrapper{F, pType, alphaType, gammaType, tmpType, - uprevType, tType} +mutable struct DAEResidualDerivativeWrapper{ + F, pType, alphaType, gammaType, tmpType, + uprevType, tType, + } f::F p::pType α::alphaType @@ -123,7 +131,7 @@ end function (m::DAEResidualDerivativeWrapper)(x) tmp_du = (m.α * x + m.tmp) * m.invγdt tmp_u = x + m.uprev - m.f(tmp_du, tmp_u, m.p, m.t) + return m.f(tmp_du, tmp_u, m.p, m.t) end SciMLBase.has_jac(f::DAEResidualJacobianWrapper) = SciMLBase.has_jac(f.f) @@ -134,34 +142,43 @@ SciMLBase.has_jac(f::DAEResidualDerivativeWrapper) = SciMLBase.has_jac(f.f) SciMLBase.has_Wfact(f::DAEResidualDerivativeWrapper) = SciMLBase.has_Wfact(f.f) SciMLBase.has_Wfact_t(f::DAEResidualDerivativeWrapper) = SciMLBase.has_Wfact_t(f.f) -function build_nlsolver(alg, u, uprev, p, t, dt, f::F, rate_prototype, +function build_nlsolver( + alg, u, uprev, p, t, dt, f::F, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, γ, c, - iip) where {F, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + iip + ) where {F, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, - tTypeNoUnits, γ, c, 1, iip) + tTypeNoUnits, γ, c, 1, iip + ) end -function build_nlsolver(alg, u, uprev, p, t, dt, f::F, rate_prototype, +function build_nlsolver( + alg, u, uprev, p, t, dt, f::F, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, γ, c, α, - iip) where {F, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - build_nlsolver(alg, alg.nlsolve, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, α, iip) + iip + ) where {F, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return build_nlsolver( + alg, alg.nlsolve, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, α, iip + ) end function daenlf(ztmp, z, p) tmp, ustep, γ, α, tstep, k, invγdt, _p, dt, f = p - _compute_rhs!(tmp, ztmp, ustep, γ, α, tstep, k, invγdt, _p, dt, f, z)[1] + return _compute_rhs!(tmp, ztmp, ustep, γ, α, tstep, k, invγdt, _p, dt, f, z)[1] end function odenlf(ztmp, z, p) tmp, ustep, γ, α, tstep, k, invγdt, method, _p, dt, f = p - _compute_rhs!( - tmp, ztmp, ustep, γ, α, tstep, k, invγdt, method, _p, dt, f, z)[1] + return _compute_rhs!( + tmp, ztmp, ustep, γ, α, tstep, k, invγdt, method, _p, dt, f, z + )[1] end function build_nlsolver( @@ -170,8 +187,11 @@ function build_nlsolver( f::F, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, γ, c, α, - ::Val{true}) where {F, uEltypeNoUnits, uBottomEltypeNoUnits, - tTypeNoUnits} + ::Val{true} + ) where { + F, uEltypeNoUnits, uBottomEltypeNoUnits, + tTypeNoUnits, + } #TODO #nlalg = SciMLBase.handle_defaults(alg, nlalg) # define unitless type @@ -213,14 +233,19 @@ function build_nlsolver( J, W = build_J_W(alg, u, uprev, p, t, dt, f, jac_config, uEltypeNoUnits, Val(true)) linprob = LinearProblem(W, _vec(k); u0 = _vec(dz)) Pl, - Pr = wrapprecs( - alg.precs(W, nothing, u, p, t, nothing, nothing, nothing, - nothing)..., - weight, dz) - linsolve = init(linprob, alg.linsolve, + Pr = wrapprecs( + alg.precs( + W, nothing, u, p, t, nothing, nothing, nothing, + nothing + )..., + weight, dz + ) + linsolve = init( + linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true), Pl = Pl, Pr = Pr, - assumptions = LinearSolve.OperatorAssumptions(true)) + assumptions = LinearSolve.OperatorAssumptions(true) + ) tType = typeof(t) invγdt = inv(oneunit(t) * one(uTolType)) @@ -243,9 +268,11 @@ function build_nlsolver( cache = init(prob, nlalg.alg) nlcache = NonlinearSolveCache(ustep, tstep, k, atmp, invγdt, prob, cache) else - nlcache = NLNewtonCache(ustep, tstep, k, atmp, dz, J, W, true, + nlcache = NLNewtonCache( + ustep, tstep, k, atmp, dz, J, W, true, true, true, tType(dt), du1, uf, jac_config, - linsolve, weight, invγdt, tType(nlalg.new_W_dt_cutoff), t) + linsolve, weight, invγdt, tType(nlalg.new_W_dt_cutoff), t + ) end elseif nlalg isa NLFunctional nlcache = NLFunctionalCache(ustep, tstep, k, atmp, dz) @@ -259,27 +286,31 @@ function build_nlsolver( dzold = zero(z) z₊old = zero(z) - nlcache = NLAndersonCache(ustep, tstep, atmp, k, dz, dzold, z₊old, Δz₊s, Q, R, γs, + nlcache = NLAndersonCache( + ustep, tstep, atmp, k, dz, dzold, z₊old, Δz₊s, Q, R, γs, 0, - nlalg.aa_start, nlalg.droptol) + nlalg.aa_start, nlalg.droptol + ) end # build non-linear solver ηold = one(t) - NLSolver{true, tTypeNoUnits}(z, tmp, ztmp, tTypeNoUnits(γ), c, α, nlalg, nlalg.κ, + return NLSolver{true, tTypeNoUnits}( + z, tmp, ztmp, tTypeNoUnits(γ), c, α, nlalg, nlalg.κ, nlalg.fast_convergence_cutoff, ηold, 0, nlalg.max_iter, - Divergence, nlcache) + Divergence, nlcache + ) end function oopdaenlf(z, p) tmp, α, tstep, invγdt, _p, dt, uprev, f = p - _compute_rhs(tmp, α, tstep, invγdt, p, dt, uprev, f, z)[1] + return _compute_rhs(tmp, α, tstep, invγdt, p, dt, uprev, f, z)[1] end function oopodenlf(z, p) tmp, γ, α, tstep, invγdt, method, _p, dt, f = p - _compute_rhs(tmp, γ, α, tstep, invγdt, method, _p, dt, f, z)[1] + return _compute_rhs(tmp, γ, α, tstep, invγdt, method, _p, dt, f, z)[1] end function build_nlsolver( @@ -289,8 +320,11 @@ function build_nlsolver( f::F, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, γ, c, α, - ::Val{false}) where {F, uEltypeNoUnits, uBottomEltypeNoUnits, - tTypeNoUnits} + ::Val{false} + ) where { + F, uEltypeNoUnits, uBottomEltypeNoUnits, + tTypeNoUnits, + } #TODO #nlalg = SciMLBase.handle_defaults(alg, nlalg) # define unitless type @@ -330,10 +364,13 @@ function build_nlsolver( prob = NonlinearProblem(NonlinearFunction{false}(nlf), copy(ztmp), nlp_params) cache = init(prob, nlalg.alg) nlcache = NonlinearSolveCache( - nothing, tstep, nothing, nothing, invγdt, prob, cache) + nothing, tstep, nothing, nothing, invγdt, prob, cache + ) else - nlcache = NLNewtonConstantCache(tstep, J, W, true, true, true, tType(dt), uf, - invγdt, tType(nlalg.new_W_dt_cutoff), t) + nlcache = NLNewtonConstantCache( + tstep, J, W, true, true, true, tType(dt), uf, + invγdt, tType(nlalg.new_W_dt_cutoff), t + ) end elseif nlalg isa NLFunctional nlcache = NLFunctionalConstantCache(tstep) @@ -348,16 +385,20 @@ function build_nlsolver( dzold = u z₊old = u - nlcache = NLAndersonConstantCache(tstep, dz, dzold, z₊old, Δz₊s, Q, R, γs, 0, - nlalg.aa_start, nlalg.droptol) + nlcache = NLAndersonConstantCache( + tstep, dz, dzold, z₊old, Δz₊s, Q, R, γs, 0, + nlalg.aa_start, nlalg.droptol + ) end # build non-linear solver ηold = one(tTypeNoUnits) - NLSolver{false, tTypeNoUnits}(z, tmp, ztmp, tTypeNoUnits(γ), c, α, nlalg, nlalg.κ, + return NLSolver{false, tTypeNoUnits}( + z, tmp, ztmp, tTypeNoUnits(γ), c, α, nlalg, nlalg.κ, nlalg.fast_convergence_cutoff, ηold, 0, nlalg.max_iter, Divergence, - nlcache) + nlcache + ) end ## Anderson acceleration @@ -390,7 +431,7 @@ acceleration based on the current iterate `z` and the settings and history in th end # update history of differences of z₊ - Δz₊s[history] = @.. broadcast=false z-z₊old + Δz₊s[history] = @.. broadcast = false z - z₊old # replace/add difference of residuals as right-most column to QR decomposition qradd!(Q, R, _vec(dz .- dzold), history) @@ -408,8 +449,8 @@ acceleration based on the current iterate `z` and the settings and history in th qrdelete!(Q, R, history) history -= 1 Qcur, - Rcur = view(Q, :, 1:history), - UpperTriangular(view(R, 1:history, 1:history)) + Rcur = view(Q, :, 1:history), + UpperTriangular(view(R, 1:history, 1:history)) end end @@ -422,7 +463,7 @@ acceleration based on the current iterate `z` and the settings and history in th # update next iterate for i in 1:history - z = @.. broadcast=false z-γs[i] * Δz₊s[i] + z = @.. broadcast = false z - γs[i] * Δz₊s[i] end z @@ -458,15 +499,15 @@ by performing Anderson acceleration based on the settings and history in the `ca end # update history of differences of z₊ - @.. broadcast=false Δz₊s[history]=z-z₊old + @.. broadcast = false Δz₊s[history] = z - z₊old # replace/add difference of residuals as right-most column to QR decomposition - @.. broadcast=false dzold=dz-dzold + @.. broadcast = false dzold = dz - dzold qradd!(Q, R, _vec(dzold), history) # update cached values - @.. broadcast=false dzold=dz - @.. broadcast=false z₊old=z + @.. broadcast = false dzold = dz + @.. broadcast = false z₊old = z # define current Q and R matrices Qcur, Rcur = view(Q, :, 1:history), UpperTriangular(view(R, 1:history, 1:history)) @@ -477,8 +518,8 @@ by performing Anderson acceleration based on the settings and history in the `ca qrdelete!(Q, R, history) history -= 1 Qcur, - Rcur = view(Q, :, 1:history), - UpperTriangular(view(R, 1:history, 1:history)) + Rcur = view(Q, :, 1:history), + UpperTriangular(view(R, 1:history, 1:history)) end end @@ -491,7 +532,7 @@ by performing Anderson acceleration based on the settings and history in the `ca # update next iterate for i in 1:history - @.. broadcast=false z=z-γs[i]*Δz₊s[i] + @.. broadcast = false z = z - γs[i] * Δz₊s[i] end nothing @@ -517,7 +558,7 @@ function resize_nlsolver!(integrator::SciMLBase.DEIntegrator, i::Int) # make it reset everything since the caches changed size! nlsolver.cache.firstcall = true - nothing + return nothing end function Base.resize!(nlsolver::AbstractNLSolver, integrator, i::Int) @@ -525,12 +566,12 @@ function Base.resize!(nlsolver::AbstractNLSolver, integrator, i::Int) resize!(nlsolver.tmp, i) resize!(nlsolver.ztmp, i) - resize!(nlsolver.cache, nlsolver, integrator, i) + return resize!(nlsolver.cache, nlsolver, integrator, i) end ## default: dispatch only on the cache function Base.resize!(cache::AbstractNLSolverCache, nlsolver, integrator, i::Int) - Base.resize!(cache, i) + return Base.resize!(cache, i) end """ @@ -558,7 +599,7 @@ function qrdelete!(Q::AbstractMatrix, R::AbstractMatrix, k::Int) end end - Q, R + return Q, R end """ @@ -585,10 +626,10 @@ function qradd!(Q::AbstractMatrix, R::AbstractMatrix, v::AbstractVector, k::Int) @inbounds begin d = norm(v) R[k, k] = d - @.. broadcast=false @view(Q[:, k])=v/d + @.. broadcast = false @view(Q[:, k]) = v / d end - Q, R + return Q, R end function qradd!(Q::AbstractMatrix, R::AbstractMatrix, v::Number, k::Int) @@ -599,5 +640,5 @@ function qradd!(Q::AbstractMatrix, R::AbstractMatrix, v::Number, k::Int) R[1, 1] = abs(v) Q[1, 1] = one(v) - Q, R + return Q, R end diff --git a/lib/OrdinaryDiffEqNonlinearSolve/test/jet.jl b/lib/OrdinaryDiffEqNonlinearSolve/test/jet.jl index ac28aad6f9..ea07bfbfcb 100644 --- a/lib/OrdinaryDiffEqNonlinearSolve/test/jet.jl +++ b/lib/OrdinaryDiffEqNonlinearSolve/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqNonlinearSolve, target_defined_modules = true, mode = :typo) -end \ No newline at end of file + OrdinaryDiffEqNonlinearSolve, target_defined_modules = true, mode = :typo + ) +end diff --git a/lib/OrdinaryDiffEqNonlinearSolve/test/newton_tests.jl b/lib/OrdinaryDiffEqNonlinearSolve/test/newton_tests.jl index 312c718dde..dad530518e 100644 --- a/lib/OrdinaryDiffEqNonlinearSolve/test/newton_tests.jl +++ b/lib/OrdinaryDiffEqNonlinearSolve/test/newton_tests.jl @@ -9,10 +9,12 @@ using Test using ODEProblemLibrary: prob_ode_lorenz, prob_ode_orego for prob in (prob_ode_lorenz, prob_ode_orego) - sol1 = solve(prob, Trapezoid(), reltol = 1e-12, abstol = 1e-12) + sol1 = solve(prob, Trapezoid(), reltol = 1.0e-12, abstol = 1.0e-12) @test sol1.retcode == SciMLBase.ReturnCode.Success - sol2 = solve(prob, Trapezoid(nlsolve = NLNewton(relax = BackTracking())), - reltol = 1e-12, abstol = 1e-12) + sol2 = solve( + prob, Trapezoid(nlsolve = NLNewton(relax = BackTracking())), + reltol = 1.0e-12, abstol = 1.0e-12 + ) @test sol2.retcode == SciMLBase.ReturnCode.Success @test sol2.stats.nf <= sol1.stats.nf + 20 end diff --git a/lib/OrdinaryDiffEqNonlinearSolve/test/qa.jl b/lib/OrdinaryDiffEqNonlinearSolve/test/qa.jl index f380854776..d4e7ff9d2a 100644 --- a/lib/OrdinaryDiffEqNonlinearSolve/test/qa.jl +++ b/lib/OrdinaryDiffEqNonlinearSolve/test/qa.jl @@ -6,4 +6,4 @@ using Aqua OrdinaryDiffEqNonlinearSolve; piracies = false ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqNonlinearSolve/test/runtests.jl b/lib/OrdinaryDiffEqNonlinearSolve/test/runtests.jl index 6ea0ee1905..12c7a3a457 100644 --- a/lib/OrdinaryDiffEqNonlinearSolve/test/runtests.jl +++ b/lib/OrdinaryDiffEqNonlinearSolve/test/runtests.jl @@ -3,4 +3,4 @@ using SafeTestsets @time @safetestset "Newton Tests" include("newton_tests.jl") @time @safetestset "Sparse Algebraic Detection" include("sparse_algebraic_detection_tests.jl") @time @safetestset "JET Tests" include("jet.jl") -@time @safetestset "Aqua" include("qa.jl") \ No newline at end of file +@time @safetestset "Aqua" include("qa.jl") diff --git a/lib/OrdinaryDiffEqNordsieck/src/OrdinaryDiffEqNordsieck.jl b/lib/OrdinaryDiffEqNordsieck/src/OrdinaryDiffEqNordsieck.jl index ee1172dadc..ca12c93df5 100644 --- a/lib/OrdinaryDiffEqNordsieck/src/OrdinaryDiffEqNordsieck.jl +++ b/lib/OrdinaryDiffEqNordsieck/src/OrdinaryDiffEqNordsieck.jl @@ -1,17 +1,17 @@ module OrdinaryDiffEqNordsieck import OrdinaryDiffEqCore: alg_order, alg_adaptive_order, qsteady_max_default, - get_current_alg_order, - AbstractController, OrdinaryDiffEqAdaptiveAlgorithm, - OrdinaryDiffEqAdamsVarOrderVarStepAlgorithm, - alg_cache, OrdinaryDiffEqMutableCache, - OrdinaryDiffEqConstantCache, initialize!, - initialize!, perform_step!, stepsize_controller!, - step_accept_controller!, step_reject_controller!, - calculate_residuals, calculate_residuals!, - get_current_adaptive_order, get_fsalfirstlast, - ode_interpolant, ode_interpolant!, trivial_limiter!, - generic_solver_docstring + get_current_alg_order, + AbstractController, OrdinaryDiffEqAdaptiveAlgorithm, + OrdinaryDiffEqAdamsVarOrderVarStepAlgorithm, + alg_cache, OrdinaryDiffEqMutableCache, + OrdinaryDiffEqConstantCache, initialize!, + initialize!, perform_step!, stepsize_controller!, + step_accept_controller!, step_reject_controller!, + calculate_residuals, calculate_residuals!, + get_current_adaptive_order, get_fsalfirstlast, + ode_interpolant, ode_interpolant!, trivial_limiter!, + generic_solver_docstring using MuladdMacro, FastBroadcast, RecursiveArrayTools import LinearAlgebra: rmul! import Static: False diff --git a/lib/OrdinaryDiffEqNordsieck/src/alg_utils.jl b/lib/OrdinaryDiffEqNordsieck/src/alg_utils.jl index 7083340c99..718b989b2b 100644 --- a/lib/OrdinaryDiffEqNordsieck/src/alg_utils.jl +++ b/lib/OrdinaryDiffEqNordsieck/src/alg_utils.jl @@ -9,5 +9,5 @@ qsteady_max_default(alg::JVODE) = 3 // 2 get_current_alg_order(alg::JVODE, cache) = get_current_adaptive_order(alg, cache) function default_controller(alg::Union{JVODE}, args...) - DummyController() + return DummyController() end diff --git a/lib/OrdinaryDiffEqNordsieck/src/algorithms.jl b/lib/OrdinaryDiffEqNordsieck/src/algorithms.jl index c8e49d97a7..ec3707781f 100644 --- a/lib/OrdinaryDiffEqNordsieck/src/algorithms.jl +++ b/lib/OrdinaryDiffEqNordsieck/src/algorithms.jl @@ -1,14 +1,15 @@ # Adams/BDF methods in Nordsieck forms @doc generic_solver_docstring( """An adaptive 5th order fixed-leading coefficient Adams method in Nordsieck form. -!!! warning "Experimental" - `AN5` is experimental, the solver `VCABM` is generally preferred. -""", + !!! warning "Experimental" + `AN5` is experimental, the solver `VCABM` is generally preferred. + """, "AN5", "Adaptive step size Adams explicit Method", "", "", - "") + "" +) struct AN5 <: OrdinaryDiffEqAdaptiveAlgorithm end """ !!! warning "Experimental" @@ -23,9 +24,11 @@ struct JVODE{bType, aType} <: OrdinaryDiffEqAdamsVarOrderVarStepAlgorithm addon::aType end -function JVODE(algorithm = :Adams; bias1 = 6, bias2 = 6, bias3 = 10, - addon = 1 // 10^6) - JVODE(algorithm, bias1, bias2, bias3, addon) +function JVODE( + algorithm = :Adams; bias1 = 6, bias2 = 6, bias3 = 10, + addon = 1 // 10^6 + ) + return JVODE(algorithm, bias1, bias2, bias3, addon) end """ !!! warning "Experimental" diff --git a/lib/OrdinaryDiffEqNordsieck/src/controllers.jl b/lib/OrdinaryDiffEqNordsieck/src/controllers.jl index 216eb36168..1b9b06164f 100644 --- a/lib/OrdinaryDiffEqNordsieck/src/controllers.jl +++ b/lib/OrdinaryDiffEqNordsieck/src/controllers.jl @@ -9,7 +9,7 @@ function stepsize_controller!(integrator, alg::JVODE) η = integrator.cache.η integrator.qold = η end - η + return η end function step_accept_controller!(integrator, alg::JVODE, η) @@ -21,5 +21,5 @@ function step_accept_controller!(integrator, alg::JVODE, η) end function step_reject_controller!(integrator, alg::JVODE) - integrator.dt *= integrator.qold + return integrator.dt *= integrator.qold end diff --git a/lib/OrdinaryDiffEqNordsieck/src/nordsieck_caches.jl b/lib/OrdinaryDiffEqNordsieck/src/nordsieck_caches.jl index a9ecb45215..d3d5e3e51d 100644 --- a/lib/OrdinaryDiffEqNordsieck/src/nordsieck_caches.jl +++ b/lib/OrdinaryDiffEqNordsieck/src/nordsieck_caches.jl @@ -1,6 +1,6 @@ # TODO: Optimize cache size mutable struct AN5ConstantCache{zType, lType, dtsType, dType, tsit5Type} <: - OrdinaryDiffEqConstantCache + OrdinaryDiffEqConstantCache # `z` is the Nordsieck vector z::zType # `l` is used for the corrector iteration @@ -19,10 +19,12 @@ mutable struct AN5ConstantCache{zType, lType, dtsType, dType, tsit5Type} <: order::Int end -function alg_cache(alg::AN5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::AN5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} N = 5 z = [zero(rate_prototype) for i in 1:(N + 1)] Δ = u @@ -31,11 +33,11 @@ function alg_cache(alg::AN5, u, rate_prototype, ::Type{uEltypeNoUnits}, c_LTE = c_conv = zero(tTypeNoUnits) dts = fill(zero(dt), 6) tsit5tab = Tsit5ConstantCache() - AN5ConstantCache(z, l, m, c_LTE, c_conv, dts, Δ, tsit5tab, 1) + return AN5ConstantCache(z, l, m, c_LTE, c_conv, dts, Δ, tsit5tab, 1) end mutable struct AN5Cache{uType, dType, rateType, zType, lType, dtsType, tsit5Type} <: - OrdinaryDiffEqMutableCache + OrdinaryDiffEqMutableCache u::uType uprev::uType tmp::uType @@ -60,10 +62,12 @@ mutable struct AN5Cache{uType, dType, rateType, zType, lType, dtsType, tsit5Type order::Int end -function alg_cache(alg::AN5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::AN5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} ################################################# # Tsit5 # Cannot alias pointers, since we have to use `k`s to start the Nordsieck vector @@ -78,8 +82,10 @@ function alg_cache(alg::AN5, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - tsit5cache = Tsit5Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, utilde, tmp, atmp, - trivial_limiter!, trivial_limiter!, False()) + tsit5cache = Tsit5Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, utilde, tmp, atmp, + trivial_limiter!, trivial_limiter!, False() + ) ################################################# N = 5 Δ = similar(atmp) @@ -95,13 +101,15 @@ function alg_cache(alg::AN5, u, rate_prototype, ::Type{uEltypeNoUnits}, end ratetmp = zero(rate_prototype) - AN5Cache(u, uprev, tmp, Δ, atmp, fsalfirst, ratetmp, + return AN5Cache( + u, uprev, tmp, Δ, atmp, fsalfirst, ratetmp, z, l, m, c_LTE, c_conv, dts, - tsit5cache, 1) + tsit5cache, 1 + ) end mutable struct JVODEConstantCache{zType, lType, dtsType, dType, tsit5Type, etaType} <: - OrdinaryDiffEqConstantCache + OrdinaryDiffEqConstantCache # `z` is the Nordsieck vector z::zType # `l` is used for the corrector iteration @@ -139,10 +147,12 @@ mutable struct JVODEConstantCache{zType, lType, dtsType, dType, tsit5Type, etaTy maxη::etaType end -function alg_cache(alg::JVODE, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::JVODE, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} N = 12 z = [rate_prototype for i in 1:(N + 1)] Δ = u @@ -152,21 +162,23 @@ function alg_cache(alg::JVODE, u, rate_prototype, ::Type{uEltypeNoUnits}, dts = fill(zero(dt), N + 1) tsit5tab = Tsit5ConstantCache() η = zero(dt / dt) - JVODEConstantCache(z, l, m, + return JVODEConstantCache( + z, l, m, c_LTE₊₁, c_LTE, c_LTE₋₁, c_conv, c_𝒟, prev_𝒟, - dts, Δ, tsit5tab, 2, 1, 1, 2, η, η, η, η, η) + dts, Δ, tsit5tab, 2, 1, 1, 2, η, η, η, η, η + ) end mutable struct JVODECache{ - uType, - rateType, - zType, - lType, - dtsType, - dType, - etaType, - tsit5Type -} <: OrdinaryDiffEqMutableCache + uType, + rateType, + zType, + lType, + dtsType, + dType, + etaType, + tsit5Type, + } <: OrdinaryDiffEqMutableCache u::uType uprev::uType tmp::uType @@ -211,10 +223,12 @@ mutable struct JVODECache{ maxη::etaType end -function alg_cache(alg::JVODE, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::JVODE, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} ################################################# # Tsit5 # Cannot alias pointers, since we have to use `k`s to start the Nordsieck vector @@ -229,8 +243,10 @@ function alg_cache(alg::JVODE, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - tsit5cache = Tsit5Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, utilde, tmp, atmp, - trivial_limiter!, trivial_limiter!, False()) + tsit5cache = Tsit5Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, utilde, tmp, atmp, + trivial_limiter!, trivial_limiter!, False() + ) ################################################# fsalfirst = zero(rate_prototype) N = 12 @@ -259,12 +275,14 @@ function alg_cache(alg::JVODE, u, rate_prototype, ::Type{uEltypeNoUnits}, z[13] = zero(rate_prototype) ratetmp = zero(rate_prototype) ################################################# - JVODECache(u, uprev, tmp, fsalfirst, ratetmp, + return JVODECache( + u, uprev, tmp, fsalfirst, ratetmp, z, l, m, c_LTE₊₁, c_LTE, c_LTE₋₁, c_conv, c_𝒟, prev_𝒟, - dts, Δ, atmp, tsit5cache, 2, 1, 1, 2, η, η, η, η, η) + dts, Δ, atmp, tsit5cache, 2, 1, 1, 2, η, η, η, η, η + ) end function get_fsalfirstlast(cache::Union{JVODECache, AN5Cache}, u) - get_fsalfirstlast(cache.tsit5cache, u) + return get_fsalfirstlast(cache.tsit5cache, u) end diff --git a/lib/OrdinaryDiffEqNordsieck/src/nordsieck_perform_step.jl b/lib/OrdinaryDiffEqNordsieck/src/nordsieck_perform_step.jl index 3bd4304d6a..a26168d925 100644 --- a/lib/OrdinaryDiffEqNordsieck/src/nordsieck_perform_step.jl +++ b/lib/OrdinaryDiffEqNordsieck/src/nordsieck_perform_step.jl @@ -10,7 +10,7 @@ function initialize!(integrator, cache::AN5ConstantCache) @inbounds for i in 2:(integrator.kshortsize - 1) integrator.k[i] = zero(integrator.fsalfirst) end - integrator.k[integrator.kshortsize] = integrator.fsallast + return integrator.k[integrator.kshortsize] = integrator.fsallast end @muladd function perform_step!(integrator, cache::AN5ConstantCache, repeat_step = false) @@ -27,12 +27,18 @@ end cache.order = 4 z[1] = integrator.uprev z[2] = integrator.k[1] * dt - z[3] = ode_interpolant(t, dt, nothing, nothing, integrator.k, tsit5tab, nothing, - Val{2}, differential_vars) * dt^2 / 2 - z[4] = ode_interpolant(t, dt, nothing, nothing, integrator.k, tsit5tab, nothing, - Val{3}, differential_vars) * dt^3 / 6 - z[5] = ode_interpolant(t, dt, nothing, nothing, integrator.k, tsit5tab, nothing, - Val{4}, differential_vars) * dt^4 / 24 + z[3] = ode_interpolant( + t, dt, nothing, nothing, integrator.k, tsit5tab, nothing, + Val{2}, differential_vars + ) * dt^2 / 2 + z[4] = ode_interpolant( + t, dt, nothing, nothing, integrator.k, tsit5tab, nothing, + Val{3}, differential_vars + ) * dt^3 / 6 + z[5] = ode_interpolant( + t, dt, nothing, nothing, integrator.k, tsit5tab, nothing, + Val{4}, differential_vars + ) * dt^4 / 24 z[6] = zero(cache.z[6]) fill!(dts, dt) perform_predict!(cache) @@ -67,7 +73,8 @@ end atmp = calculate_residuals( cache.Δ, uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) * cache.c_LTE if integrator.EEst > one(integrator.EEst) for i in 1:5 @@ -100,7 +107,7 @@ function initialize!(integrator, cache::AN5Cache) integrator.k[6] = cache.tsit5cache.k6 integrator.k[7] = cache.tsit5cache.k7 integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::AN5Cache, repeat_step = false) @@ -116,21 +123,27 @@ end perform_step!(integrator, tsit5cache, repeat_step) copyto!(tmp, integrator.u) cache.order = 4 - @.. broadcast=false z[1]=integrator.uprev - @.. broadcast=false z[2]=integrator.k[1] * dt - ode_interpolant!(z[3], t, dt, nothing, nothing, integrator.k, tsit5cache, nothing, - Val{2}, differential_vars) - ode_interpolant!(z[4], t, dt, nothing, nothing, integrator.k, tsit5cache, nothing, - Val{3}, differential_vars) - ode_interpolant!(z[5], t, dt, nothing, nothing, integrator.k, tsit5cache, nothing, - Val{4}, differential_vars) - @.. broadcast=false z[3]=z[3] * dt^2 / 2 - @.. broadcast=false z[4]=z[4] * dt^3 / 6 - @.. broadcast=false z[5]=z[5] * dt^4 / 24 + @.. broadcast = false z[1] = integrator.uprev + @.. broadcast = false z[2] = integrator.k[1] * dt + ode_interpolant!( + z[3], t, dt, nothing, nothing, integrator.k, tsit5cache, nothing, + Val{2}, differential_vars + ) + ode_interpolant!( + z[4], t, dt, nothing, nothing, integrator.k, tsit5cache, nothing, + Val{3}, differential_vars + ) + ode_interpolant!( + z[5], t, dt, nothing, nothing, integrator.k, tsit5cache, nothing, + Val{4}, differential_vars + ) + @.. broadcast = false z[3] = z[3] * dt^2 / 2 + @.. broadcast = false z[4] = z[4] * dt^3 / 6 + @.. broadcast = false z[5] = z[5] * dt^4 / 24 fill!(z[6], 0) fill!(dts, dt) perform_predict!(cache) - @.. broadcast=false cache.Δ=integrator.u - integrator.uprev + @.. broadcast = false cache.Δ = integrator.u - integrator.uprev update_nordsieck_vector!(cache) if integrator.opts.adaptive && integrator.EEst >= one(integrator.EEst) cache.order = 1 @@ -144,7 +157,7 @@ end dts[1] = dt # Rescale dt != dts[2] && nordsieck_rescale!(cache) - @.. broadcast=false integrator.k[1]=z[2] / dt + @.. broadcast = false integrator.k[1] = z[2] / dt # Perform 5th order Adams method in Nordsieck form perform_predict!(cache) calc_coeff!(cache) @@ -161,7 +174,8 @@ end if integrator.opts.adaptive calculate_residuals!( atmp, cache.Δ, uprev, integrator.u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) * cache.c_LTE if integrator.EEst > one(integrator.EEst) for i in 1:5 @@ -177,7 +191,7 @@ end ################################### Finalize - @.. broadcast=false integrator.k[2]=cache.z[2] / dt + @.. broadcast = false integrator.k[2] = cache.z[2] / dt end return nothing end @@ -194,7 +208,7 @@ function initialize!(integrator, cache::JVODEConstantCache) @inbounds for i in 2:(integrator.kshortsize - 1) integrator.k[i] = zero(integrator.fsalfirst) end - integrator.k[integrator.kshortsize] = integrator.fsallast + return integrator.k[integrator.kshortsize] = integrator.fsallast end @muladd function perform_step!(integrator, cache::JVODEConstantCache, repeat_step = false) @@ -229,8 +243,10 @@ end ################################### Error estimation if integrator.opts.adaptive - atmp = calculate_residuals(cache.Δ, uprev, integrator.u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + cache.Δ, uprev, integrator.u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) * cache.c_LTE if integrator.EEst > one(integrator.EEst) for i in 1:12 @@ -259,7 +275,7 @@ function initialize!(integrator, cache::JVODECache) integrator.k[6] = cache.tsit5cache.k6 integrator.k[7] = cache.tsit5cache.k7 integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::JVODECache, repeat_step = false) @@ -268,10 +284,10 @@ end # handle callbacks, rewind back to order one. if integrator.u_modified || integrator.iter == 1 cache.order = 1 - @.. broadcast=false z[1]=integrator.uprev + @.. broadcast = false z[1] = integrator.uprev f(z[2], uprev, p, t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false z[2]=z[2] * dt + @.. broadcast = false z[2] = z[2] * dt dts[1] = dt end # Reset time @@ -282,7 +298,7 @@ end dts[1] = dt # Rescale dt != dts[2] && nordsieck_adjust!(integrator, cache) - @.. broadcast=false integrator.k[1]=z[2] / dt + @.. broadcast = false integrator.k[1] = z[2] / dt perform_predict!(cache) calc_coeff!(cache) @@ -298,8 +314,10 @@ end ################################### Error estimation if integrator.opts.adaptive - calculate_residuals!(atmp, cache.Δ, uprev, integrator.u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, cache.Δ, uprev, integrator.u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) * cache.c_LTE if integrator.EEst > one(integrator.EEst) for i in 1:12 @@ -313,6 +331,6 @@ end nordsieck_finalize!(integrator, cache) nordsieck_prepare_next!(integrator, cache) - @.. broadcast=false integrator.k[2]=cache.z[2] / dt + @.. broadcast = false integrator.k[2] = cache.z[2] / dt return nothing end diff --git a/lib/OrdinaryDiffEqNordsieck/src/nordsieck_utils.jl b/lib/OrdinaryDiffEqNordsieck/src/nordsieck_utils.jl index 9d6d36e020..402c140b78 100644 --- a/lib/OrdinaryDiffEqNordsieck/src/nordsieck_utils.jl +++ b/lib/OrdinaryDiffEqNordsieck/src/nordsieck_utils.jl @@ -18,11 +18,11 @@ function nordsieck_finalize!(integrator, cache::T) where {T} (; order, dts) = cache update_nordsieck_vector!(cache) cache.n_wait -= 1 - if is_nordsieck_change_order(cache, 1) && cache.order != 12 + return if is_nordsieck_change_order(cache, 1) && cache.order != 12 if isconst cache.z[end] = cache.Δ else - @.. broadcast=false cache.z[end]=cache.Δ + @.. broadcast = false cache.z[end] = cache.Δ end cache.prev_𝒟 = cache.c_𝒟 end @@ -59,7 +59,7 @@ function nordsieck_prepare_next!(integrator, cache::T) where {T} if isconst cache.Δ = cache.c_LTE * cache.Δ else - @.. broadcast=false cache.Δ=cache.c_LTE*cache.Δ + @.. broadcast = false cache.Δ = cache.c_LTE * cache.Δ end return nothing end @@ -158,7 +158,7 @@ end # Apply the Pascal linear operator function perform_predict!(cache::T, rewind = false) where {T} - @inbounds begin + return @inbounds begin isconst = T <: OrdinaryDiffEqConstantCache (; z, order) = cache # This can be parallelized @@ -171,7 +171,7 @@ function perform_predict!(cache::T, rewind = false) where {T} else for i in 1:order, j in order:-1:i - @.. broadcast=false z[j]=z[j]+z[j + 1] + @.. broadcast = false z[j] = z[j] + z[j + 1] end end # endif const cache else @@ -183,7 +183,7 @@ function perform_predict!(cache::T, rewind = false) where {T} else for i in 1:order, j in order:-1:i - @.. broadcast=false z[j]=z[j]-z[j + 1] + @.. broadcast = false z[j] = z[j] - z[j + 1] end end # endif const cache end # endif !rewind @@ -193,7 +193,7 @@ end # Apply corrections on the Nordsieck vector function update_nordsieck_vector!(cache::T) where {T} isvode = (T <: JVODECache || T <: JVODEConstantCache) - @inbounds begin + return @inbounds begin isconst = T <: OrdinaryDiffEqConstantCache (; z, Δ, l, order) = cache if isconst @@ -202,7 +202,7 @@ function update_nordsieck_vector!(cache::T) where {T} end else for i in 1:(order + 1) - @.. broadcast=false z[i]=muladd(l[i], Δ, z[i]) + @.. broadcast = false z[i] = muladd(l[i], Δ, z[i]) end end # endif not const cache end # end @inbounds @@ -236,10 +236,10 @@ function nlsolve_functional!(integrator, cache::T) where {T} integrator.u = ratetmp + z[1] cache.Δ = ratetmp - cache.Δ else - @.. broadcast=false integrator.u=-z[2] - @.. broadcast=false ratetmp=inv(l[2])*muladd(dt, ratetmp, integrator.u) - @.. broadcast=false integrator.u=ratetmp+z[1] - @.. broadcast=false cache.Δ=ratetmp-cache.Δ + @.. broadcast = false integrator.u = -z[2] + @.. broadcast = false ratetmp = inv(l[2]) * muladd(dt, ratetmp, integrator.u) + @.. broadcast = false integrator.u = ratetmp + z[1] + @.. broadcast = false cache.Δ = ratetmp - cache.Δ end # @show norm(dt*ratetmp - ( z[2] + (integrator.u - z[1])*l[2] )) # @show norm(cache.Δ - (integrator.u - z[1])) @@ -260,8 +260,9 @@ function nlsolve_functional!(integrator, cache::T) where {T} δ_prev = δ OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) isconstcache ? (ratetmp = integrator.f(integrator.u, p, dt + t)) : - integrator.f(ratetmp, integrator.u, p, dt + t) + integrator.f(ratetmp, integrator.u, p, dt + t) end + return end function nordsieck_rescale!(cache::T, rewind = false) where {T} @@ -282,14 +283,14 @@ end function nordsieck_rewind!(cache) perform_predict!(cache, true) - nordsieck_rescale!(cache, true) + return nordsieck_rescale!(cache, true) end function is_nordsieck_change_order(cache::T, n = 0) where {T} isconstcache = T <: OrdinaryDiffEqConstantCache isvode = (T <: JVODECache || T <: JVODEConstantCache) isvode || return false - cache.n_wait == 0 + n + return cache.n_wait == 0 + n end function nordsieck_decrement_wait!(cache::T) where {T} @@ -305,7 +306,7 @@ function nordsieck_adjust_order!(cache::T, dorder) where {T} (; order, dts) = cache # WIP: uncomment when finished #@inbound begin - begin + return begin # Adams order increase if dorder == 1 if isconstcache @@ -336,8 +337,10 @@ function nordsieck_adjust_order!(cache::T, dorder) where {T} if isconstcache cache.z[j] = muladd.(-cache.l[j], cache.z[order + 1], cache.z[j]) else - @.. broadcast=false cache.z[j]=muladd(-cache.l[j], cache.z[order + 1], - cache.z[j]) + @.. broadcast = false cache.z[j] = muladd( + -cache.l[j], cache.z[order + 1], + cache.z[j] + ) end end # for j end # else @@ -351,7 +354,7 @@ function setη!(integrator, cache::T) where {T} else # TODO: Not the same with SUNDIALS (integrator.iter == 1 || integrator.u_modified) && - (cache.η = min(1e5, cache.η); return nothing) + (cache.η = min(1.0e5, cache.η); return nothing) cache.η = min(integrator.opts.qmax, max(integrator.opts.qmin, cache.η)) end return nothing @@ -380,7 +383,7 @@ function chooseη!(integrator, cache::T) where {T} if isconst z[end] = Δ else - @.. broadcast=false z[end]=Δ + @.. broadcast = false z[end] = Δ end end #endif BDF end # endif η == ηq @@ -413,13 +416,17 @@ function stepsize_η₊₁!(integrator, cache::T, order) where {T} cquot = (c_𝒟 / cache.prev_𝒟) * (dts[1] / dts[2])^L if isconstcache atmp = muladd.(-cquot, z[end], cache.Δ) - atmp = calculate_residuals(atmp, uprev, u, integrator.opts.abstol, + atmp = calculate_residuals( + atmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) else - @.. broadcast=false ratetmp=muladd(-cquot, z[end], cache.Δ) - calculate_residuals!(atmp, ratetmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false ratetmp = muladd(-cquot, z[end], cache.Δ) + calculate_residuals!( + atmp, ratetmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) end dup = integrator.opts.internalnorm(atmp, t) * c_LTE₊₁ cache.η₊₁ = inv((bias3 * dup)^inv(L + 1) + addon) @@ -438,12 +445,16 @@ function stepsize_η₋₁!(integrator, cache::T, order) where {T} cache.η₋₁ = 0 if order > 1 if isconstcache - atmp = calculate_residuals(z[order + 1], uprev, u, integrator.opts.abstol, + atmp = calculate_residuals( + z[order + 1], uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) else - calculate_residuals!(atmp, z[order + 1], uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, z[order + 1], uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) end approx = integrator.opts.internalnorm(atmp, t) * c_LTE₋₁ cache.η₋₁ = inv((bias1 * approx)^inv(order) + addon) diff --git a/lib/OrdinaryDiffEqNordsieck/test/jet.jl b/lib/OrdinaryDiffEqNordsieck/test/jet.jl index a814b9561d..978f63448b 100644 --- a/lib/OrdinaryDiffEqNordsieck/test/jet.jl +++ b/lib/OrdinaryDiffEqNordsieck/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqNordsieck, target_defined_modules = true, mode = :typo) -end \ No newline at end of file + OrdinaryDiffEqNordsieck, target_defined_modules = true, mode = :typo + ) +end diff --git a/lib/OrdinaryDiffEqNordsieck/test/nordsieck_tests.jl b/lib/OrdinaryDiffEqNordsieck/test/nordsieck_tests.jl index 0cbd302597..f44bee000d 100644 --- a/lib/OrdinaryDiffEqNordsieck/test/nordsieck_tests.jl +++ b/lib/OrdinaryDiffEqNordsieck/test/nordsieck_tests.jl @@ -1,7 +1,7 @@ using OrdinaryDiffEqNordsieck, DiffEqDevTools, Test, LinearAlgebra import ODEProblemLibrary: prob_ode_bigfloatlinear, - prob_ode_bigfloat2Dlinear, - prob_ode_linear, prob_ode_2Dlinear + prob_ode_bigfloat2Dlinear, + prob_ode_linear, prob_ode_2Dlinear probArr = [prob_ode_bigfloatlinear, prob_ode_bigfloat2Dlinear] testTol = 0.25 @@ -10,34 +10,36 @@ dts = 1 .// (2 .^ (10:-1:5)) @testset "Nordsieck Convergence Tests" begin for i in eachindex(probArr) sim = test_convergence(dts, probArr[i], AN5()) - @test sim.𝒪est[:final]≈5 atol=testTol - @test sim.𝒪est[:l2]≈5 atol=testTol - @test sim.𝒪est[:l∞]≈5 atol=testTol + @test sim.𝒪est[:final] ≈ 5 atol = testTol + @test sim.𝒪est[:l2] ≈ 5 atol = testTol + @test sim.𝒪est[:l∞] ≈ 5 atol = testTol end end -probArr = [prob_ode_linear, - prob_ode_2Dlinear] +probArr = [ + prob_ode_linear, + prob_ode_2Dlinear, +] @testset "Nordsieck Adaptivity Tests: AN5" begin for i in eachindex(probArr) prob = probArr[i] - sol = solve(prob, AN5(), reltol = 1e-6) + sol = solve(prob, AN5(), reltol = 1.0e-6) @test length(sol.t) < 11 @test SciMLBase.successful_retcode(sol) exact = prob.f.analytic(prob.u0, prob.p, prob.tspan[end]) - @test exact≈sol[end] atol=1e-5 + @test exact ≈ sol[end] atol = 1.0e-5 end end @testset "Nordsieck Adaptivity Tests: JVODE" begin for i in eachindex(probArr), - sol in [JVODE_Adams(), JVODE_BDF()] + sol in [JVODE_Adams(), JVODE_BDF()] prob = probArr[i] - sol = solve(prob, sol, reltol = 1e-4, abstol = 1e-7) + sol = solve(prob, sol, reltol = 1.0e-4, abstol = 1.0e-7) @test length(sol.t) < 22 @test SciMLBase.successful_retcode(sol) exact = prob.f.analytic(prob.u0, prob.p, prob.tspan[end]) - @test norm(exact - sol[end], Inf) < 3e-3 + @test norm(exact - sol[end], Inf) < 3.0e-3 end end diff --git a/lib/OrdinaryDiffEqNordsieck/test/qa.jl b/lib/OrdinaryDiffEqNordsieck/test/qa.jl index a357974639..2e713c847a 100644 --- a/lib/OrdinaryDiffEqNordsieck/test/qa.jl +++ b/lib/OrdinaryDiffEqNordsieck/test/qa.jl @@ -5,4 +5,4 @@ using Aqua Aqua.test_all( OrdinaryDiffEqNordsieck ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqNordsieck/test/runtests.jl b/lib/OrdinaryDiffEqNordsieck/test/runtests.jl index 169879e28d..e99cde628e 100644 --- a/lib/OrdinaryDiffEqNordsieck/test/runtests.jl +++ b/lib/OrdinaryDiffEqNordsieck/test/runtests.jl @@ -2,4 +2,4 @@ using SafeTestsets @time @safetestset "Nordsieck Tests" include("nordsieck_tests.jl") @time @safetestset "JET Tests" include("jet.jl") -@time @safetestset "Aqua" include("qa.jl") \ No newline at end of file +@time @safetestset "Aqua" include("qa.jl") diff --git a/lib/OrdinaryDiffEqPDIRK/src/OrdinaryDiffEqPDIRK.jl b/lib/OrdinaryDiffEqPDIRK/src/OrdinaryDiffEqPDIRK.jl index f1e87c549b..32d421fc06 100644 --- a/lib/OrdinaryDiffEqPDIRK/src/OrdinaryDiffEqPDIRK.jl +++ b/lib/OrdinaryDiffEqPDIRK/src/OrdinaryDiffEqPDIRK.jl @@ -1,12 +1,12 @@ module OrdinaryDiffEqPDIRK import OrdinaryDiffEqCore: isfsal, alg_order, _unwrap_val, - OrdinaryDiffEqNewtonAlgorithm, OrdinaryDiffEqConstantCache, - OrdinaryDiffEqMutableCache, constvalue, alg_cache, - uses_uprev, unwrap_alg, @cache, DEFAULT_PRECS, - @threaded, initialize!, perform_step!, isthreaded, - full_cache, get_fsalfirstlast, differentiation_rk_docstring, - _bool_to_ADType, _process_AD_choice + OrdinaryDiffEqNewtonAlgorithm, OrdinaryDiffEqConstantCache, + OrdinaryDiffEqMutableCache, constvalue, alg_cache, + uses_uprev, unwrap_alg, @cache, DEFAULT_PRECS, + @threaded, initialize!, perform_step!, isthreaded, + full_cache, get_fsalfirstlast, differentiation_rk_docstring, + _bool_to_ADType, _process_AD_choice import StaticArrays: SVector import MuladdMacro: @muladd import FastBroadcast: @.. @@ -17,7 +17,7 @@ using Reexport using OrdinaryDiffEqDifferentiation: dolinsolve using OrdinaryDiffEqNonlinearSolve: NLNewton, build_nlsolver, nlsolve!, nlsolvefail, - markfirststage! + markfirststage! import ADTypes: AutoForwardDiff, AbstractADType diff --git a/lib/OrdinaryDiffEqPDIRK/src/algorithms.jl b/lib/OrdinaryDiffEqPDIRK/src/algorithms.jl index e98895aaac..e7a855eda8 100644 --- a/lib/OrdinaryDiffEqPDIRK/src/algorithms.jl +++ b/lib/OrdinaryDiffEqPDIRK/src/algorithms.jl @@ -20,9 +20,10 @@ nlsolve = NLNewton(), extrapolant = :constant, thread = OrdinaryDiffEq.True(), - """) + """ +) struct PDIRK44{CS, AD, F, F2, P, FDT, ST, CJ, TO} <: - OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -34,11 +35,16 @@ function PDIRK44(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), - extrapolant = :constant, threading = true) + extrapolant = :constant, threading = true + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - PDIRK44{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return PDIRK44{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac), typeof(threading)}(linsolve, nlsolve, precs, - extrapolant, threading, AD_choice) + _unwrap_val(concrete_jac), typeof(threading), + }( + linsolve, nlsolve, precs, + extrapolant, threading, AD_choice + ) end diff --git a/lib/OrdinaryDiffEqPDIRK/src/pdirk_caches.jl b/lib/OrdinaryDiffEqPDIRK/src/pdirk_caches.jl index 2818424697..abf2d805e2 100644 --- a/lib/OrdinaryDiffEqPDIRK/src/pdirk_caches.jl +++ b/lib/OrdinaryDiffEqPDIRK/src/pdirk_caches.jl @@ -45,53 +45,69 @@ function PDIRK44Tableau(T, T2) b2 = convert(T, -1 // 1) b3 = convert(T, 3 // 2) b4 = convert(T, 3 // 2) - PDIRK44Tableau{T, T2}(γs, cs, α1, α2, b1, b2, b3, b4) + return PDIRK44Tableau{T, T2}(γs, cs, α1, α2, b1, b2, b3, b4) end -function alg_cache(alg::PDIRK44, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::PDIRK44, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1.0, 1.0 if alg.threading - nlsolver1 = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, + nlsolver1 = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits, γ, c, - Val(true)) - nlsolver2 = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, + Val(true) + ) + nlsolver2 = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits, γ, c, - Val(true)) + Val(true) + ) nlsolver = [nlsolver1, nlsolver2] else - _nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, + _nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits, γ, c, - Val(true)) + Val(true) + ) nlsolver = [_nlsolver] end tab = PDIRK44Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = [zero(rate_prototype) for i in 1:2] k2 = [zero(rate_prototype) for i in 1:2] - PDIRK44Cache(u, uprev, k1, k2, nlsolver, tab) + return PDIRK44Cache(u, uprev, k1, k2, nlsolver, tab) end -function alg_cache(alg::PDIRK44, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::PDIRK44, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1.0, 1.0 if alg.threading - nlsolver1 = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, + nlsolver1 = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits, γ, c, - Val(false)) - nlsolver2 = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, + Val(false) + ) + nlsolver2 = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits, γ, c, - Val(false)) + Val(false) + ) nlsolver = [nlsolver1, nlsolver2] else - _nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, + _nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits, γ, c, - Val(false)) + Val(false) + ) nlsolver = [_nlsolver] end tab = PDIRK44Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - PDIRK44ConstantCache(nlsolver, tab) + return PDIRK44ConstantCache(nlsolver, tab) end diff --git a/lib/OrdinaryDiffEqPDIRK/src/pdirk_perform_step.jl b/lib/OrdinaryDiffEqPDIRK/src/pdirk_perform_step.jl index e7b1104174..8769d4c53a 100644 --- a/lib/OrdinaryDiffEqPDIRK/src/pdirk_perform_step.jl +++ b/lib/OrdinaryDiffEqPDIRK/src/pdirk_perform_step.jl @@ -10,8 +10,8 @@ function initialize!(integrator, cache::PDIRK44ConstantCache) end k2 = Array{typeof(u)}(undef, 2) k1 = Array{typeof(u)}(undef, 2) let nlsolver = nlsolver, u = u, uprev = uprev, integrator = integrator, - cache = cache, dt = dt, repeat_step = repeat_step, - k1 = k1 + cache = cache, dt = dt, repeat_step = repeat_step, + k1 = k1 @threaded alg.threading for i in 1:2 nlsolver[i].z = zero(u) @@ -25,8 +25,8 @@ function initialize!(integrator, cache::PDIRK44ConstantCache) end nlsolvefail(nlsolver[1]) && return nlsolvefail(nlsolver[2]) && return let nlsolver = nlsolver, u = u, uprev = uprev, integrator = integrator, - cache = cache, dt = dt, repeat_step = repeat_step, - k1 = k1, k2 = k2 + cache = cache, dt = dt, repeat_step = repeat_step, + k1 = k1, k2 = k2 @threaded alg.threading for i in 1:2 nlsolver[i].c = cs[2 + i] @@ -81,8 +81,8 @@ function initialize!(integrator, cache::PDIRK44Cache) end (; γs, cs, α1, α2, b1, b2, b3, b4) = tab if isthreaded(alg.threading) let nlsolver = nlsolver, u = u, uprev = uprev, integrator = integrator, - cache = cache, dt = dt, repeat_step = repeat_step, - k1 = k1 + cache = cache, dt = dt, repeat_step = repeat_step, + k1 = k1 @threaded alg.threading for i in 1:2 nlsolver[i].z .= zero(eltype(u)) @@ -96,13 +96,13 @@ function initialize!(integrator, cache::PDIRK44Cache) end nlsolvefail(nlsolver[1]) && return nlsolvefail(nlsolver[2]) && return let nlsolver = nlsolver, u = u, uprev = uprev, integrator = integrator, - cache = cache, dt = dt, repeat_step = repeat_step, - k1 = k1, k2 = k2 + cache = cache, dt = dt, repeat_step = repeat_step, + k1 = k1, k2 = k2 @threaded alg.threading for i in 1:2 nlsolver[i].c = cs[2 + i] nlsolver[i].z .= zero(eltype(u)) - @.. broadcast=false nlsolver[i].tmp=uprev + α1[i] * k1[1] + α2[i] * k1[2] + @.. broadcast = false nlsolver[i].tmp = uprev + α1[i] * k1[1] + α2[i] * k1[2] k2[i] .= nlsolve!(nlsolver[i], integrator, cache, repeat_step) end end @@ -125,19 +125,19 @@ function initialize!(integrator, cache::PDIRK44Cache) end k1[2] .= nlsolve!(_nlsolver, integrator, cache, repeat_step) nlsolvefail(_nlsolver) && return _nlsolver.z .= zero(eltype(u)) - @.. broadcast=false _nlsolver.tmp=uprev + α1[1] * k1[1] + α2[1] * k1[2] + @.. broadcast = false _nlsolver.tmp = uprev + α1[1] * k1[1] + α2[1] * k1[2] _nlsolver.γ = γs[1] _nlsolver.c = cs[3] markfirststage!(_nlsolver) k2[1] .= nlsolve!(_nlsolver, integrator, cache, repeat_step) nlsolvefail(_nlsolver) && return _nlsolver.z .= zero(eltype(u)) - @.. broadcast=false _nlsolver.tmp=uprev + α1[2] * k1[1] + α2[2] * k1[2] + @.. broadcast = false _nlsolver.tmp = uprev + α1[2] * k1[1] + α2[2] * k1[2] _nlsolver.γ = γs[2] _nlsolver.c = cs[4] markfirststage!(_nlsolver) k2[2] .= nlsolve!(_nlsolver, integrator, cache, repeat_step) nlsolvefail(_nlsolver) && return end - @.. broadcast=false u=uprev + b1 * k1[1] + b2 * k2[1] + b3 * k1[2] + b4 * k2[2] + @.. broadcast = false u = uprev + b1 * k1[1] + b2 * k2[1] + b3 * k1[2] + b4 * k2[2] end diff --git a/lib/OrdinaryDiffEqPDIRK/test/jet.jl b/lib/OrdinaryDiffEqPDIRK/test/jet.jl index b4fb46b7ff..fb14784047 100644 --- a/lib/OrdinaryDiffEqPDIRK/test/jet.jl +++ b/lib/OrdinaryDiffEqPDIRK/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqPDIRK, target_defined_modules = true, mode = :typo) + OrdinaryDiffEqPDIRK, target_defined_modules = true, mode = :typo + ) end diff --git a/lib/OrdinaryDiffEqPDIRK/test/qa.jl b/lib/OrdinaryDiffEqPDIRK/test/qa.jl index 78304ff879..588e4c58b8 100644 --- a/lib/OrdinaryDiffEqPDIRK/test/qa.jl +++ b/lib/OrdinaryDiffEqPDIRK/test/qa.jl @@ -5,4 +5,4 @@ using Aqua Aqua.test_all( OrdinaryDiffEqPDIRK ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqPDIRK/test/runtests.jl b/lib/OrdinaryDiffEqPDIRK/test/runtests.jl index 68d9fbc840..c7c52ee9d0 100644 --- a/lib/OrdinaryDiffEqPDIRK/test/runtests.jl +++ b/lib/OrdinaryDiffEqPDIRK/test/runtests.jl @@ -1,3 +1,3 @@ using SafeTestsets -@time @safetestset "JET Tests" include("jet.jl") \ No newline at end of file +@time @safetestset "JET Tests" include("jet.jl") diff --git a/lib/OrdinaryDiffEqPRK/src/OrdinaryDiffEqPRK.jl b/lib/OrdinaryDiffEqPRK/src/OrdinaryDiffEqPRK.jl index fc85df597e..ce25fa4f4f 100644 --- a/lib/OrdinaryDiffEqPRK/src/OrdinaryDiffEqPRK.jl +++ b/lib/OrdinaryDiffEqPRK/src/OrdinaryDiffEqPRK.jl @@ -1,10 +1,10 @@ module OrdinaryDiffEqPRK import OrdinaryDiffEqCore: OrdinaryDiffEqAlgorithm, alg_order, OrdinaryDiffEqMutableCache, - OrdinaryDiffEqConstantCache, constvalue, @cache, - alg_cache, get_fsalfirstlast, - unwrap_alg, perform_step!, @threaded, initialize!, isthreaded, - full_cache, generic_solver_docstring + OrdinaryDiffEqConstantCache, constvalue, @cache, + alg_cache, get_fsalfirstlast, + unwrap_alg, perform_step!, @threaded, initialize!, isthreaded, + full_cache, generic_solver_docstring import MuladdMacro: @muladd import FastBroadcast: @.. using Polyester diff --git a/lib/OrdinaryDiffEqPRK/src/algorithms.jl b/lib/OrdinaryDiffEqPRK/src/algorithms.jl index 5d69e69f29..2468c606db 100644 --- a/lib/OrdinaryDiffEqPRK/src/algorithms.jl +++ b/lib/OrdinaryDiffEqPRK/src/algorithms.jl @@ -1,4 +1,5 @@ -@doc generic_solver_docstring("A 5 parallel, 2 processor method of 5th order.", +@doc generic_solver_docstring( + "A 5 parallel, 2 processor method of 5th order.", "KuttaPRK2p5", "Explicit Runge-Kutta Method", """@article{jackson1995potential, @@ -11,7 +12,8 @@ year={1995}, publisher={SIAM}}""", "- `thread`: determines whether internal broadcasting on appropriate CPU arrays should be serial (`thread = OrdinaryDiffEq.False()`) or use multiple threads (`thread = OrdinaryDiffEq.True()`) when Julia is started with multiple threads.", - "thread = OrdinaryDiffEq.True(),") + "thread = OrdinaryDiffEq.True()," +) Base.@kwdef struct KuttaPRK2p5{TO} <: OrdinaryDiffEqAlgorithm threading::TO = true end diff --git a/lib/OrdinaryDiffEqPRK/src/prk_caches.jl b/lib/OrdinaryDiffEqPRK/src/prk_caches.jl index 059fffcbaa..8fd0c27480 100644 --- a/lib/OrdinaryDiffEqPRK/src/prk_caches.jl +++ b/lib/OrdinaryDiffEqPRK/src/prk_caches.jl @@ -58,15 +58,19 @@ struct KuttaPRK2p5ConstantCache{T, T2} <: OrdinaryDiffEqConstantCache c5_6 = Array{T2}(undef, 2) c5_6[1] = T2(2 // 3) c5_6[2] = T2(4 // 5) - new{T, T2}(α21, α31, α32, α41, α42, α43, α5_6, β1, β3, β5, β6, c2, c3, c4, - c5_6) + return new{T, T2}( + α21, α31, α32, α41, α42, α43, α5_6, β1, β3, β5, β6, c2, c3, c4, + c5_6 + ) end end -function alg_cache(alg::KuttaPRK2p5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::KuttaPRK2p5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) k1 = zero(rate_prototype) @@ -77,14 +81,18 @@ function alg_cache(alg::KuttaPRK2p5, u, rate_prototype, ::Type{uEltypeNoUnits}, k5_6[1] = zero(rate_prototype) k5_6[2] = zero(rate_prototype) fsalfirst = zero(rate_prototype) - tab = KuttaPRK2p5ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - KuttaPRK2p5Cache(u, uprev, k, k1, k2, k3, k4, k5_6, tmp, fsalfirst, tab) + tab = KuttaPRK2p5ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return KuttaPRK2p5Cache(u, uprev, k, k1, k2, k3, k4, k5_6, tmp, fsalfirst, tab) end -function alg_cache(alg::KuttaPRK2p5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::KuttaPRK2p5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - KuttaPRK2p5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return KuttaPRK2p5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end diff --git a/lib/OrdinaryDiffEqPRK/src/prk_perform_step.jl b/lib/OrdinaryDiffEqPRK/src/prk_perform_step.jl index eb3e71584f..d04364f089 100644 --- a/lib/OrdinaryDiffEqPRK/src/prk_perform_step.jl +++ b/lib/OrdinaryDiffEqPRK/src/prk_perform_step.jl @@ -6,11 +6,13 @@ function initialize!(integrator, cache::KuttaPRK2p5ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -@muladd function perform_step!(integrator, cache::KuttaPRK2p5ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::KuttaPRK2p5ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator alg = unwrap_alg(integrator, false) (; α21, α31, α32, α41, α42, α43, α5_6) = cache @@ -26,23 +28,28 @@ end if !isthreaded(alg.threading) k5_6[1] = f( uprev + - dt * - (α5_6[1, 1] * k1 + α5_6[1, 2] * k2 + α5_6[1, 3] * k3 + α5_6[1, 4] * k4), - p, t + c5_6[1] * dt) + dt * + (α5_6[1, 1] * k1 + α5_6[1, 2] * k2 + α5_6[1, 3] * k3 + α5_6[1, 4] * k4), + p, t + c5_6[1] * dt + ) k5_6[2] = f( uprev + - dt * - (α5_6[2, 1] * k1 + α5_6[2, 2] * k2 + α5_6[2, 3] * k3 + α5_6[2, 4] * k4), - p, t + c5_6[2] * dt) + dt * + (α5_6[2, 1] * k1 + α5_6[2, 2] * k2 + α5_6[2, 3] * k3 + α5_6[2, 4] * k4), + p, t + c5_6[2] * dt + ) else let @threaded alg.threading for i in [1, 2] k5_6[i] = f( uprev + - dt * (α5_6[i, 1] * k1 + α5_6[i, 2] * k2 + α5_6[i, 3] * k3 + - α5_6[i, 4] * k4), + dt * ( + α5_6[i, 1] * k1 + α5_6[i, 2] * k2 + α5_6[i, 3] * k3 + + α5_6[i, 4] * k4 + ), p, - t + c5_6[i] * dt) + t + c5_6[i] * dt + ) end end end @@ -62,7 +69,7 @@ function initialize!(integrator, cache::KuttaPRK2p5Cache) resize!(integrator.k, integrator.kshortsize) integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::KuttaPRK2p5Cache, repeat_step = false) @@ -74,37 +81,43 @@ end f(k1, uprev, p, t) - @.. broadcast=false u=uprev + dt * α21 * k1 + @.. broadcast = false u = uprev + dt * α21 * k1 f(k2, u, p, t + c2 * dt) - @.. broadcast=false u=uprev + dt * (α31 * k1 + α32 * k2) + @.. broadcast = false u = uprev + dt * (α31 * k1 + α32 * k2) f(k3, u, p, t + c3 * dt) - @.. broadcast=false u=uprev + dt * (α41 * k1 + α42 * k2 + α43 * k3) + @.. broadcast = false u = uprev + dt * (α41 * k1 + α42 * k2 + α43 * k3) f(k4, u, p, t + c4 * dt) if !isthreaded(alg.threading) - @.. broadcast=false u=uprev + - dt * (α5_6[1, 1] * k1 + α5_6[1, 2] * k2 + α5_6[1, 3] * k3 + - α5_6[1, 4] * k4) + @.. broadcast = false u = uprev + + dt * ( + α5_6[1, 1] * k1 + α5_6[1, 2] * k2 + α5_6[1, 3] * k3 + + α5_6[1, 4] * k4 + ) f(k5_6[1], u, p, t + c5_6[1] * dt) - @.. broadcast=false u=uprev + - dt * (α5_6[2, 1] * k1 + α5_6[2, 2] * k2 + α5_6[2, 3] * k3 + - α5_6[2, 4] * k4) + @.. broadcast = false u = uprev + + dt * ( + α5_6[2, 1] * k1 + α5_6[2, 2] * k2 + α5_6[2, 3] * k3 + + α5_6[2, 4] * k4 + ) f(k5_6[2], u, p, t + c5_6[2] * dt) else tmps = (u, tmp) let @threaded alg.threading for i in [1, 2] - @.. broadcast=false tmps[i]=uprev + - dt * (α5_6[i, 1] * k1 + α5_6[i, 2] * k2 + - α5_6[i, 3] * k3 + α5_6[i, 4] * k4) + @.. broadcast = false tmps[i] = uprev + + dt * ( + α5_6[i, 1] * k1 + α5_6[i, 2] * k2 + + α5_6[i, 3] * k3 + α5_6[i, 4] * k4 + ) f(k5_6[i], tmps[i], p, t + c5_6[i] * dt) end end end - @.. broadcast=false u=uprev + dt * (β1 * k1 + β3 * k3 + β5 * k5_6[1] + β6 * k5_6[2]) + @.. broadcast = false u = uprev + dt * (β1 * k1 + β3 * k3 + β5 * k5_6[1] + β6 * k5_6[2]) f(k, u, p, t + dt) end diff --git a/lib/OrdinaryDiffEqPRK/test/jet.jl b/lib/OrdinaryDiffEqPRK/test/jet.jl index a776622e8f..20248bd0cd 100644 --- a/lib/OrdinaryDiffEqPRK/test/jet.jl +++ b/lib/OrdinaryDiffEqPRK/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqPRK, target_defined_modules = true, mode = :typo) + OrdinaryDiffEqPRK, target_defined_modules = true, mode = :typo + ) end diff --git a/lib/OrdinaryDiffEqPRK/test/prk_convergence.jl b/lib/OrdinaryDiffEqPRK/test/prk_convergence.jl index 333696ccb4..2f1d5c4d0d 100644 --- a/lib/OrdinaryDiffEqPRK/test/prk_convergence.jl +++ b/lib/OrdinaryDiffEqPRK/test/prk_convergence.jl @@ -7,11 +7,13 @@ dts2 = 1 .// 2 .^ (7:-1:3) testTol = 0.2 @testset "Explicit Solver Convergence Tests ($(["out-of-place", "in-place"][i]))" for i in 1:2 - prob = (ODEProblemLibrary.prob_ode_linear, - ODEProblemLibrary.prob_ode_2Dlinear)[i] + prob = ( + ODEProblemLibrary.prob_ode_linear, + ODEProblemLibrary.prob_ode_2Dlinear, + )[i] sim3 = test_convergence(dts2, prob, KuttaPRK2p5(threading = true)) - @test sim3.𝒪est[:l∞]≈5 atol=testTol + @test sim3.𝒪est[:l∞] ≈ 5 atol = testTol sim3 = test_convergence(dts2, prob, KuttaPRK2p5(threading = false)) - @test sim3.𝒪est[:l∞]≈5 atol=testTol + @test sim3.𝒪est[:l∞] ≈ 5 atol = testTol end diff --git a/lib/OrdinaryDiffEqPRK/test/qa.jl b/lib/OrdinaryDiffEqPRK/test/qa.jl index 826d01c760..ce2afd1e8b 100644 --- a/lib/OrdinaryDiffEqPRK/test/qa.jl +++ b/lib/OrdinaryDiffEqPRK/test/qa.jl @@ -5,4 +5,4 @@ using Aqua Aqua.test_all( OrdinaryDiffEqPRK ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqPRK/test/runtests.jl b/lib/OrdinaryDiffEqPRK/test/runtests.jl index f971e6442f..75ab3bccf9 100644 --- a/lib/OrdinaryDiffEqPRK/test/runtests.jl +++ b/lib/OrdinaryDiffEqPRK/test/runtests.jl @@ -1,4 +1,4 @@ using SafeTestsets @time @safetestset "JET Tests" include("jet.jl") -@time @safetestset "Aqua" include("qa.jl") \ No newline at end of file +@time @safetestset "Aqua" include("qa.jl") diff --git a/lib/OrdinaryDiffEqQPRK/src/OrdinaryDiffEqQPRK.jl b/lib/OrdinaryDiffEqQPRK/src/OrdinaryDiffEqQPRK.jl index 5c01c740ef..e94e0e41a9 100644 --- a/lib/OrdinaryDiffEqQPRK/src/OrdinaryDiffEqQPRK.jl +++ b/lib/OrdinaryDiffEqQPRK/src/OrdinaryDiffEqQPRK.jl @@ -1,13 +1,13 @@ module OrdinaryDiffEqQPRK import OrdinaryDiffEqCore: OrdinaryDiffEqAdaptiveAlgorithm, OrdinaryDiffEqConstantCache, - explicit_rk_docstring, @cache, - OrdinaryDiffEqMutableCache, - OrdinaryDiffEqAdaptiveAlgorithm, @fold, @OnDemandTableauExtract, - trivial_limiter!, alg_cache, alg_order, initialize!, - perform_step!, get_fsalfirstlast, - constvalue, calculate_residuals!, calculate_residuals, - full_cache + explicit_rk_docstring, @cache, + OrdinaryDiffEqMutableCache, + OrdinaryDiffEqAdaptiveAlgorithm, @fold, @OnDemandTableauExtract, + trivial_limiter!, alg_cache, alg_order, initialize!, + perform_step!, get_fsalfirstlast, + constvalue, calculate_residuals!, calculate_residuals, + full_cache using Static: False using MuladdMacro, FastBroadcast using RecursiveArrayTools: recursive_unitless_bottom_eltype, recursivefill! diff --git a/lib/OrdinaryDiffEqQPRK/src/algorithms.jl b/lib/OrdinaryDiffEqQPRK/src/algorithms.jl index 8a5ef377ea..d03724e02f 100644 --- a/lib/OrdinaryDiffEqQPRK/src/algorithms.jl +++ b/lib/OrdinaryDiffEqQPRK/src/algorithms.jl @@ -2,14 +2,15 @@ "Runge–Kutta pairs of orders 9(8) for use in quadruple precision computations", "QPRK98", references = "Kovalnogov VN, Fedorov RV, Karpukhina TV, Simos TE, Tsitouras C. Runge–Kutta pairs of orders 9 (8) for use in quadruple precision computations. Numerical Algorithms, 2023. - doi: https://doi.org/10.1007/s11075-023-01632-8") + doi: https://doi.org/10.1007/s11075-023-01632-8" +) Base.@kwdef struct QPRK98{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function QPRK98(stage_limiter!, step_limiter! = trivial_limiter!) - QPRK98(stage_limiter!, step_limiter!, False()) + return QPRK98(stage_limiter!, step_limiter!, False()) end diff --git a/lib/OrdinaryDiffEqQPRK/src/qprk_caches.jl b/lib/OrdinaryDiffEqQPRK/src/qprk_caches.jl index 8ceb2bc451..0a02eaa339 100644 --- a/lib/OrdinaryDiffEqQPRK/src/qprk_caches.jl +++ b/lib/OrdinaryDiffEqQPRK/src/qprk_caches.jl @@ -1,8 +1,9 @@ struct QPRK98ConstantCache <: OrdinaryDiffEqConstantCache end @cache struct QPRK98Cache{ - uType, rateType, uNoUnitsType, StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqMutableCache + uType, rateType, uNoUnitsType, StageLimiter, StepLimiter, Thread, + } <: + OrdinaryDiffEqMutableCache u::uType uprev::uType fsalfirst::rateType @@ -32,10 +33,12 @@ end get_fsalfirstlast(cache::QPRK98Cache, u) = (cache.fsalfirst, cache.k) -function alg_cache(alg::QPRK98, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::QPRK98, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k1 = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) @@ -57,14 +60,18 @@ function alg_cache(alg::QPRK98, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) k = zero(rate_prototype) recursivefill!(atmp, false) - QPRK98Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, + return QPRK98Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, utilde, tmp, atmp, k, alg.stage_limiter!, alg.step_limiter!, - alg.thread) + alg.thread + ) end -function alg_cache(::QPRK98, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + ::QPRK98, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - QPRK98ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return QPRK98ConstantCache() end diff --git a/lib/OrdinaryDiffEqQPRK/src/qprk_perform_step.jl b/lib/OrdinaryDiffEqQPRK/src/qprk_perform_step.jl index 7b125a9a71..85484caaeb 100644 --- a/lib/OrdinaryDiffEqQPRK/src/qprk_perform_step.jl +++ b/lib/OrdinaryDiffEqQPRK/src/qprk_perform_step.jl @@ -7,7 +7,7 @@ function initialize!(integrator, ::QPRK98ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, ::QPRK98ConstantCache, repeat_step = false) @@ -25,52 +25,78 @@ end k7 = f(uprev + dt * (b71 * k1 + b74 * k4 + b75 * k5 + b76 * k6), p, t + d7 * dt) k8 = f(uprev + dt * (b81 * k1 + b86 * k6 + b87 * k7), p, t + d8 * dt) k9 = f(uprev + dt * (b91 * k1 + b96 * k6 + b97 * k7 + b98 * k8), p, t + d9 * dt) - k10 = f(uprev + dt * (b10_1 * k1 + b10_6 * k6 + b10_7 * k7 + b10_8 * k8 + b10_9 * k9), - p, t + d10 * dt) + k10 = f( + uprev + dt * (b10_1 * k1 + b10_6 * k6 + b10_7 * k7 + b10_8 * k8 + b10_9 * k9), + p, t + d10 * dt + ) k11 = f( uprev + - dt * (b11_1 * k1 + b11_6 * k6 + b11_7 * k7 + b11_8 * k8 + b11_9 * k9 - + b11_10 * k10), + dt * ( + b11_1 * k1 + b11_6 * k6 + b11_7 * k7 + b11_8 * k8 + b11_9 * k9 + + b11_10 * k10 + ), p, - t + d11 * dt) + t + d11 * dt + ) k12 = f( uprev + - dt * (b12_1 * k1 + b12_6 * k6 + b12_7 * k7 + b12_8 * k8 + b12_9 * k9 - + b12_10 * k10 + b12_11 * k11), + dt * ( + b12_1 * k1 + b12_6 * k6 + b12_7 * k7 + b12_8 * k8 + b12_9 * k9 + + b12_10 * k10 + b12_11 * k11 + ), p, - t + d12 * dt) + t + d12 * dt + ) k13 = f( uprev + - dt * (b13_1 * k1 + b13_6 * k6 + b13_7 * k7 + b13_8 * k8 + b13_9 * k9 - + b13_10 * k10 + b13_11 * k11 + b13_12 * k12), + dt * ( + b13_1 * k1 + b13_6 * k6 + b13_7 * k7 + b13_8 * k8 + b13_9 * k9 + + b13_10 * k10 + b13_11 * k11 + b13_12 * k12 + ), p, - t + d13 * dt) + t + d13 * dt + ) k14 = f( uprev + - dt * (b14_1 * k1 + b14_6 * k6 + b14_7 * k7 + b14_8 * k8 + b14_9 * k9 - + b14_10 * k10 + b14_11 * k11 + b14_12 * k12 + b14_13 * k13), + dt * ( + b14_1 * k1 + b14_6 * k6 + b14_7 * k7 + b14_8 * k8 + b14_9 * k9 + + b14_10 * k10 + b14_11 * k11 + b14_12 * k12 + b14_13 * k13 + ), p, - t + d14 * dt) + t + d14 * dt + ) k15 = f( uprev + - dt * (b15_1 * k1 + b15_6 * k6 + b15_7 * k7 + b15_8 * k8 + b15_9 * k9 - + b15_10 * k10 + b15_11 * k11 + b15_12 * k12 + b15_13 * k13 + b15_14 * k14), - p, t + dt) + dt * ( + b15_1 * k1 + b15_6 * k6 + b15_7 * k7 + b15_8 * k8 + b15_9 * k9 + + b15_10 * k10 + b15_11 * k11 + b15_12 * k12 + b15_13 * k13 + b15_14 * k14 + ), + p, t + dt + ) k16 = f( uprev + - dt * (b16_1 * k1 + b16_6 * k6 + b16_7 * k7 + b16_8 * k8 + b16_9 * k9 - + b16_10 * k10 + b16_11 * k11 + b16_12 * k12 + b16_13 * k13 + b16_14 * k14), - p, t + dt) + dt * ( + b16_1 * k1 + b16_6 * k6 + b16_7 * k7 + b16_8 * k8 + b16_9 * k9 + + b16_10 * k10 + b16_11 * k11 + b16_12 * k12 + b16_13 * k13 + b16_14 * k14 + ), + p, t + dt + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 15) u = uprev + - dt * (w1 * k1 + w8 * k8 + w9 * k9 + w10 * k10 + w11 * k11 + w12 * k12 + - w13 * k13 + w14 * k14 + w15 * k15 + w16 * k16) + dt * ( + w1 * k1 + w8 * k8 + w9 * k9 + w10 * k10 + w11 * k11 + w12 * k12 + + w13 * k13 + w14 * k14 + w15 * k15 + w16 * k16 + ) if integrator.opts.adaptive - utilde = dt * (ϵ1 * k1 + ϵ8 * k8 + ϵ9 * k9 + ϵ10 * k10 + ϵ11 * k11 + ϵ12 * k12 + - ϵ13 * k13 + ϵ14 * k14 + ϵ15 * k15) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + utilde = dt * ( + ϵ1 * k1 + ϵ8 * k8 + ϵ9 * k9 + ϵ10 * k10 + ϵ11 * k11 + ϵ12 * k12 + + ϵ13 * k13 + ϵ14 * k14 + ϵ15 * k15 + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.fsallast = f(u, p, t + dt) @@ -86,7 +112,7 @@ function initialize!(integrator, cache::QPRK98Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::QPRK98Cache, repeat_step = false) @@ -94,102 +120,128 @@ end T = constvalue(recursive_unitless_bottom_eltype(u)) T2 = constvalue(typeof(one(t))) @OnDemandTableauExtract QPRK98Tableau T T2 - (; fsalfirst, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, - utilde, tmp, atmp, k, stage_limiter!, step_limiter!, thread) = cache + (; + fsalfirst, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, + utilde, tmp, atmp, k, stage_limiter!, step_limiter!, thread, + ) = cache k1 = fsalfirst f(k1, uprev, p, t) - @.. broadcast=false thread=thread tmp=uprev + dt * b21 * k1 + @.. broadcast = false thread = thread tmp = uprev + dt * b21 * k1 stage_limiter!(tmp, integrator, p, t + d2 * dt) f(k2, tmp, p, t + d2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (b31 * k1 + b32 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (b31 * k1 + b32 * k2) stage_limiter!(tmp, integrator, p, t + d3 * dt) f(k3, tmp, p, t + d3 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (b41 * k1 + b43 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (b41 * k1 + b43 * k3) stage_limiter!(tmp, integrator, p, t + d4 * dt) f(k4, tmp, p, t + d4 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (b51 * k1 + b53 * k3 + b54 * k4) + @.. broadcast = false thread = thread tmp = uprev + dt * (b51 * k1 + b53 * k3 + b54 * k4) stage_limiter!(uprev, integrator, p, t + d5 * dt) f(k5, tmp, p, t + d5 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (b61 * k1 + b64 * k4 + b65 * k5) + @.. broadcast = false thread = thread tmp = uprev + dt * (b61 * k1 + b64 * k4 + b65 * k5) stage_limiter!(tmp, integrator, p, t + d6 * dt) f(k6, tmp, p, t + d6 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (b71 * k1 + b74 * k4 + b75 * k5 - + b76 * k6) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + b71 * k1 + b74 * k4 + b75 * k5 + + b76 * k6 + ) stage_limiter!(tmp, integrator, p, t + d7 * dt) f(k7, tmp, p, t + d7 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (b81 * k1 + b86 * k6 + b87 * k7) + @.. broadcast = false thread = thread tmp = uprev + dt * (b81 * k1 + b86 * k6 + b87 * k7) stage_limiter!(tmp, integrator, p, t + d8 * dt) f(k8, tmp, p, t + d8 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (b91 * k1 + b96 * k6 + b97 * k7 - + b98 * k8) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + b91 * k1 + b96 * k6 + b97 * k7 + + b98 * k8 + ) stage_limiter!(tmp, integrator, p, t + d9 * dt) f(k9, tmp, p, t + d9 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (b10_1 * k1 + b10_6 * k6 - + b10_7 * k7 + b10_8 * k8 + b10_9 * k9) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + b10_1 * k1 + b10_6 * k6 + + b10_7 * k7 + b10_8 * k8 + b10_9 * k9 + ) stage_limiter!(tmp, integrator, p, t + d10 * dt) f(k10, tmp, p, t + d10 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (b11_1 * k1 + b11_6 * k6 - + b11_7 * k7 + b11_8 * k8 + b11_9 * k9 - + b11_10 * k10) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + b11_1 * k1 + b11_6 * k6 + + b11_7 * k7 + b11_8 * k8 + b11_9 * k9 + + b11_10 * k10 + ) stage_limiter!(tmp, integrator, p, t + d11 * dt) f(k11, tmp, p, t + d11 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (b12_1 * k1 + b12_6 * k6 - + b12_7 * k7 + b12_8 * k8 + b12_9 * k9 - + b12_10 * k10 + b12_11 * k11) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + b12_1 * k1 + b12_6 * k6 + + b12_7 * k7 + b12_8 * k8 + b12_9 * k9 + + b12_10 * k10 + b12_11 * k11 + ) stage_limiter!(tmp, integrator, p, t + d12 * dt) f(k12, tmp, p, t + d12 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (b13_1 * k1 + b13_6 * k6 - + b13_7 * k7 + b13_8 * k8 + b13_9 * k9 - + b13_10 * k10 + b13_11 * k11 + b13_12 * k12) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + b13_1 * k1 + b13_6 * k6 + + b13_7 * k7 + b13_8 * k8 + b13_9 * k9 + + b13_10 * k10 + b13_11 * k11 + b13_12 * k12 + ) stage_limiter!(tmp, integrator, p, t + d13 * dt) f(k13, tmp, p, t + d13 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (b14_1 * k1 + b14_6 * k6 - + b14_7 * k7 + b14_8 * k8 + b14_9 * k9 - + b14_10 * k10 + b14_11 * k11 + b14_12 * k12 - + b14_13 * k13) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + b14_1 * k1 + b14_6 * k6 + + b14_7 * k7 + b14_8 * k8 + b14_9 * k9 + + b14_10 * k10 + b14_11 * k11 + b14_12 * k12 + + b14_13 * k13 + ) stage_limiter!(tmp, integrator, p, t + d14 * dt) f(k14, tmp, p, t + d14 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (b15_1 * k1 + b15_6 * k6 - + b15_7 * k7 + b15_8 * k8 + b15_9 * k9 - + b15_10 * k10 + b15_11 * k11 + b15_12 * k12 - + b15_13 * k13 + b15_14 * k14) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + b15_1 * k1 + b15_6 * k6 + + b15_7 * k7 + b15_8 * k8 + b15_9 * k9 + + b15_10 * k10 + b15_11 * k11 + b15_12 * k12 + + b15_13 * k13 + b15_14 * k14 + ) stage_limiter!(tmp, integrator, p, t + dt) f(k15, tmp, p, t + dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (b16_1 * k1 + b16_6 * k6 - + b16_7 * k7 + b16_8 * k8 + b16_9 * k9 - + b16_10 * k10 + b16_11 * k11 + b16_12 * k12 - + b16_13 * k13 + b16_14 * k14) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + b16_1 * k1 + b16_6 * k6 + + b16_7 * k7 + b16_8 * k8 + b16_9 * k9 + + b16_10 * k10 + b16_11 * k11 + b16_12 * k12 + + b16_13 * k13 + b16_14 * k14 + ) stage_limiter!(u, integrator, p, t + dt) f(k16, tmp, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 16) - @.. broadcast=false thread=thread u=uprev + - dt * (w1 * k1 + w8 * k8 + w9 * k9 - + w10 * k10 + w11 * k11 + w12 * k12 + w13 * k13 - + w14 * k14 + w15 * k15 + w16 * k16) + @.. broadcast = false thread = thread u = uprev + + dt * ( + w1 * k1 + w8 * k8 + w9 * k9 + + w10 * k10 + w11 * k11 + w12 * k12 + w13 * k13 + + w14 * k14 + w15 * k15 + w16 * k16 + ) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * (ϵ1 * k1 + ϵ8 * k8 + - ϵ9 * k9 + - ϵ10 * k10 + ϵ11 * k11 + - ϵ12 * k12 + - ϵ13 * k13 + ϵ14 * k14 + - ϵ15 * k15) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * ( + ϵ1 * k1 + ϵ8 * k8 + + ϵ9 * k9 + + ϵ10 * k10 + ϵ11 * k11 + + ϵ12 * k12 + + ϵ13 * k13 + ϵ14 * k14 + + ϵ15 * k15 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end f(k, u, p, t + dt) diff --git a/lib/OrdinaryDiffEqQPRK/src/qprk_tableaus.jl b/lib/OrdinaryDiffEqQPRK/src/qprk_tableaus.jl index 6dd35f332b..b1ee9c4ea3 100644 --- a/lib/OrdinaryDiffEqQPRK/src/qprk_tableaus.jl +++ b/lib/OrdinaryDiffEqQPRK/src/qprk_tableaus.jl @@ -221,7 +221,8 @@ end b16_13 = convert(T2, BigInt(165211034625068) // BigInt(39884924026051713)) b16_14 = convert(T2, BigInt(-38387832271169) // BigInt(18010889018302554)) - QPRK98Tableau(d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, + QPRK98Tableau( + d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, ϵ1, ϵ8, ϵ9, ϵ10, ϵ11, ϵ12, ϵ13, ϵ14, ϵ15, w1, w8, w9, w10, w11, w12, w13, w14, w15, w16, b21, b31, b32, b41, b43, b51, b53, b54, b61, b64, b65, b71, b74, b75, @@ -231,5 +232,6 @@ end b13_11, b13_12, b14_1, b14_6, b14_7, b14_8, b14_9, b14_10, b14_11, b14_12, b14_13, b15_1, b15_6, b15_7, b15_8, b15_9, b15_10, b15_11, b15_12, b15_13, b15_14, b16_1, b16_6, b16_7, b16_8, b16_9, b16_10, b16_11, b16_12, b16_13, - b16_14) + b16_14 + ) end diff --git a/lib/OrdinaryDiffEqQPRK/test/jet.jl b/lib/OrdinaryDiffEqQPRK/test/jet.jl index 4d53c40fc8..3aa2386521 100644 --- a/lib/OrdinaryDiffEqQPRK/test/jet.jl +++ b/lib/OrdinaryDiffEqQPRK/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqQPRK, target_defined_modules = true, mode = :typo) + OrdinaryDiffEqQPRK, target_defined_modules = true, mode = :typo + ) end diff --git a/lib/OrdinaryDiffEqQPRK/test/ode_quadruple_precision_tests.jl b/lib/OrdinaryDiffEqQPRK/test/ode_quadruple_precision_tests.jl index 61ae1d7f44..c8ad42024f 100644 --- a/lib/OrdinaryDiffEqQPRK/test/ode_quadruple_precision_tests.jl +++ b/lib/OrdinaryDiffEqQPRK/test/ode_quadruple_precision_tests.jl @@ -12,29 +12,41 @@ f = (u, p, t) -> cos(t) prob_ode_sin = ODEProblem( ODEFunction(f; analytic = (u0, p, t) -> sin(t)), BigFloat(0.0), - (BigFloat(0.0), BigFloat(1.0))) + (BigFloat(0.0), BigFloat(1.0)) +) f = (du, u, p, t) -> du[1] = cos(t) prob_ode_sin_inplace = ODEProblem( ODEFunction(f; analytic = (u0, p, t) -> [sin(t)]), [BigFloat(0.0)], - (BigFloat(0.0), BigFloat(1.0))) + (BigFloat(0.0), BigFloat(1.0)) +) f = (u, p, t) -> sin(u) prob_ode_nonlinear = ODEProblem( ODEFunction( - f; analytic = (u0, p, t) -> BigFloat(2.0) * acot(exp(-t) - * cot(BigFloat(0.5)))), + f; analytic = (u0, p, t) -> BigFloat(2.0) * acot( + exp(-t) + * cot(BigFloat(0.5)) + ) + ), BigFloat(1.0), - (BigFloat(0.0), BigFloat(0.5))) + (BigFloat(0.0), BigFloat(0.5)) +) f = (du, u, p, t) -> du[1] = sin(u[1]) prob_ode_nonlinear_inplace = ODEProblem( ODEFunction( - f; analytic = (u0, p, t) -> [BigFloat(2.0) * acot(exp(-t) - * cot(BigFloat(0.5)))]), + f; analytic = (u0, p, t) -> [ + BigFloat(2.0) * acot( + exp(-t) + * cot(BigFloat(0.5)) + ), + ] + ), [BigFloat(1.0)], - (BigFloat(0.0), BigFloat(0.5))) + (BigFloat(0.0), BigFloat(0.5)) +) test_problems_only_time = [prob_ode_sin, prob_ode_sin_inplace] test_problems_linear = [prob_ode_bigfloat2Dlinear] @@ -46,32 +58,32 @@ alg = QPRK98() for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) sim.𝒪est[:final] - @test sim.𝒪est[:final]≈OrdinaryDiffEqQPRK.alg_order(alg) + 1 atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqQPRK.alg_order(alg) + 1 atol = testTol sol = solve(prob, alg, adaptive = true, save_everystep = true) sol_exact = prob.f.analytic(prob.u0, prob.p, sol.t[end]) @test length(sol) < 7 @test SciMLBase.successful_retcode(sol) - @test minimum(abs.(sol.u[end] .- sol_exact) .< 1e-12) + @test minimum(abs.(sol.u[end] .- sol_exact) .< 1.0e-12) end for prob in test_problems_linear sim = test_convergence(BigFloat.(dts), prob, alg) sim.𝒪est[:final] - @test sim.𝒪est[:final]≈OrdinaryDiffEqQPRK.alg_order(alg) + 1 atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqQPRK.alg_order(alg) + 1 atol = testTol sol = solve(prob, alg, adaptive = true, save_everystep = true) sol_exact = prob.f.analytic(prob.u0, prob.p, sol.t[end]) @test length(sol) < 5 @test SciMLBase.successful_retcode(sol) - @test minimum(abs.(sol.u[end] .- sol_exact) .< 1e-8) + @test minimum(abs.(sol.u[end] .- sol_exact) .< 1.0e-8) end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) sim.𝒪est[:final] - @test sim.𝒪est[:final]≈OrdinaryDiffEqQPRK.alg_order(alg) + 2.5 atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqQPRK.alg_order(alg) + 2.5 atol = testTol sol = solve(prob, alg, adaptive = true, save_everystep = true) sol_exact = prob.f.analytic(prob.u0, prob.p, sol.t[end]) @test length(sol) < 5 @test SciMLBase.successful_retcode(sol) - @test minimum(abs.(sol.u[end] .- sol_exact) .< 1e-11) + @test minimum(abs.(sol.u[end] .- sol_exact) .< 1.0e-11) end diff --git a/lib/OrdinaryDiffEqQPRK/test/qa.jl b/lib/OrdinaryDiffEqQPRK/test/qa.jl index d401caeb73..79f03b7c4c 100644 --- a/lib/OrdinaryDiffEqQPRK/test/qa.jl +++ b/lib/OrdinaryDiffEqQPRK/test/qa.jl @@ -5,4 +5,4 @@ using Aqua Aqua.test_all( OrdinaryDiffEqQPRK ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqQPRK/test/runtests.jl b/lib/OrdinaryDiffEqQPRK/test/runtests.jl index afb6e0ed86..ddd22ba317 100644 --- a/lib/OrdinaryDiffEqQPRK/test/runtests.jl +++ b/lib/OrdinaryDiffEqQPRK/test/runtests.jl @@ -2,4 +2,4 @@ using SafeTestsets @time @safetestset "Quadruple Precision Tests" include("ode_quadruple_precision_tests.jl") @time @safetestset "JET Tests" include("jet.jl") -@time @safetestset "Aqua" include("qa.jl") \ No newline at end of file +@time @safetestset "Aqua" include("qa.jl") diff --git a/lib/OrdinaryDiffEqRKIP/src/OrdinaryDiffEqRKIP.jl b/lib/OrdinaryDiffEqRKIP/src/OrdinaryDiffEqRKIP.jl index 73a4910bec..6893e014c3 100644 --- a/lib/OrdinaryDiffEqRKIP/src/OrdinaryDiffEqRKIP.jl +++ b/lib/OrdinaryDiffEqRKIP/src/OrdinaryDiffEqRKIP.jl @@ -9,12 +9,12 @@ using DiffEqBase: ExplicitRKTableau using DiffEqDevTools: constructVerner6 import OrdinaryDiffEqCore: OrdinaryDiffEqAdaptiveExponentialAlgorithm, alg_adaptive_order, - alg_order, alg_cache, @cache, SplitFunction, get_fsalfirstlast, - initialize!, perform_step!, - has_dtnew_modification, calculate_residuals, - calculate_residuals!, increment_nf!, - OrdinaryDiffEqAdaptiveAlgorithm, OrdinaryDiffEqMutableCache, - dtnew_modification, generic_solver_docstring + alg_order, alg_cache, @cache, SplitFunction, get_fsalfirstlast, + initialize!, perform_step!, + has_dtnew_modification, calculate_residuals, + calculate_residuals!, increment_nf!, + OrdinaryDiffEqAdaptiveAlgorithm, OrdinaryDiffEqMutableCache, + dtnew_modification, generic_solver_docstring include("rkip_cache.jl") include("algorithms.jl") diff --git a/lib/OrdinaryDiffEqRKIP/src/algorithms.jl b/lib/OrdinaryDiffEqRKIP/src/algorithms.jl index 5bf2fbb1f0..4e9b545488 100644 --- a/lib/OrdinaryDiffEqRKIP/src/algorithms.jl +++ b/lib/OrdinaryDiffEqRKIP/src/algorithms.jl @@ -68,10 +68,12 @@ KEYWORD_DESCRIPTION = """ @doc generic_solver_docstring( METHOD_DESCRIPTION, "RKIP", "Adaptative Exponential Runge-Kutta", - REFERENCE, KEYWORD_DESCRIPTION, "") + REFERENCE, KEYWORD_DESCRIPTION, "" +) mutable struct RKIP{ - tableauType <: ExplicitRKTableau, elType, dtType <: AbstractVector{elType}} <: - OrdinaryDiffEqAdaptiveAlgorithm + tableauType <: ExplicitRKTableau, elType, dtType <: AbstractVector{elType}, + } <: + OrdinaryDiffEqAdaptiveAlgorithm tableau::tableauType dt_for_expÂ_caching::dtType clamp_lower_dt::Bool @@ -80,11 +82,14 @@ mutable struct RKIP{ cache::Union{Nothing, RKIPCache} end -function RKIP(dtmin::T = 1e-3, dtmax::T = 1.0; nb_of_cache_step::Int = 100, +function RKIP( + dtmin::T = 1.0e-3, dtmax::T = 1.0; nb_of_cache_step::Int = 100, tableau = constructVerner6(T), clamp_lower_dt::Bool = false, - clamp_higher_dt::Bool = true, use_ldiv = false) where {T} - RKIP{ - typeof(tableau), T, Vector{T}}( + clamp_higher_dt::Bool = true, use_ldiv = false + ) where {T} + return RKIP{ + typeof(tableau), T, Vector{T}, + }( tableau, logrange(dtmin, dtmax, nb_of_cache_step), clamp_lower_dt, @@ -99,8 +104,10 @@ alg_adaptive_order(alg::RKIP) = alg.tableau.adaptiveorder has_dtnew_modification(alg::RKIP) = true -function dtnew_modification(alg::RKIP{tableauType, elType, dtType}, - dtnew) where {tableauType, elType, dtType} +function dtnew_modification( + alg::RKIP{tableauType, elType, dtType}, + dtnew + ) where {tableauType, elType, dtType} (; dt_for_expÂ_caching) = alg if first(alg.dt_for_expÂ_caching) > dtnew && alg.clamp_lower_dt dtnew = first(alg.dt_for_expÂ_caching) @@ -116,13 +123,14 @@ dtnew_modification(_, alg::RKIP, dtnew) = dtnew_modification(alg, dtnew) function alg_cache( alg::RKIP, u::uType, rate_prototype, uEltypeNoUnits, uBottomEltypeNoUnits, - tTypeNoUnits, uprev, uprev2, f, t, dt, reltol, p, calck, iip) where {uType} + tTypeNoUnits, uprev, uprev2, f, t, dt, reltol, p, calck, iip + ) where {uType} tmp = zero(u) utilde = zero(u) kk = [zero(u) for _ in 1:(alg.tableau.stages)] Â = isa(f, SplitFunction) ? f.f1.f : - throw(ArgumentError("RKIP is only implemented for semilinear problems")) + throw(ArgumentError("RKIP is only implemented for semilinear problems")) opType = typeof(Â) expOpType = typeof(exp(Â, 1.0)) @@ -136,14 +144,19 @@ function alg_cache( exp_cache = ExpCache{expOpType}( Array{expOpType, 2}(undef, length(alg.dt_for_expÂ_caching), length(c_unique)), - Vector{expOpType}(undef, length(c_unique))) + Vector{expOpType}(undef, length(c_unique)) + ) if !alg.use_ldiv - exp_cache = ExpCacheNoLdiv(exp_cache, + exp_cache = ExpCacheNoLdiv( + exp_cache, ExpCache{expOpType}( Array{expOpType, 2}( - undef, length(alg.dt_for_expÂ_caching), length(c_unique)), - Vector{expOpType}(undef, length(c_unique)))) + undef, length(alg.dt_for_expÂ_caching), length(c_unique) + ), + Vector{expOpType}(undef, length(c_unique)) + ) + ) expCacheType = ExpCacheNoLdiv{expOpType} else expCacheType = ExpCache{expOpType} @@ -161,7 +174,8 @@ function alg_cache( ) else # cache recycling alg.cache = RKIPCache{ - expOpType, typeof(alg.cache.exp_cache), tTypeNoUnits, opType, uType, iip}( + expOpType, typeof(alg.cache.exp_cache), tTypeNoUnits, opType, uType, iip, + }( alg.cache.exp_cache, alg.cache.last_step, alg.cache.cached, diff --git a/lib/OrdinaryDiffEqRKIP/src/rkip_cache.jl b/lib/OrdinaryDiffEqRKIP/src/rkip_cache.jl index d915f0a9fc..a6a8985944 100644 --- a/lib/OrdinaryDiffEqRKIP/src/rkip_cache.jl +++ b/lib/OrdinaryDiffEqRKIP/src/rkip_cache.jl @@ -10,18 +10,21 @@ struct ExpCacheNoLdiv{expOpType} <: AbstractExpCache{expOpType} end function get_op_for_this_step(cache::ExpCache{expOpType}, index::Int) where {expOpType} - cache.expÂ_for_this_step[index] + return cache.expÂ_for_this_step[index] end -function get_op_for_this_step(cache_no_ldiv::ExpCacheNoLdiv{expOpType}, - positive::Bool, index::Int) where {expOpType} - positive ? cache_no_ldiv.exp_cache.expÂ_for_this_step[index] : - cache_no_ldiv.exp_cache_inv.expÂ_for_this_step[index] +function get_op_for_this_step( + cache_no_ldiv::ExpCacheNoLdiv{expOpType}, + positive::Bool, index::Int + ) where {expOpType} + return positive ? cache_no_ldiv.exp_cache.expÂ_for_this_step[index] : + cache_no_ldiv.exp_cache_inv.expÂ_for_this_step[index] end mutable struct RKIPCache{ - expOpType <: AbstractSciMLOperator, cacheType <: AbstractExpCache{expOpType}, - tType <: Number, opType <: AbstractSciMLOperator, uType, iip} <: - OrdinaryDiffEqMutableCache + expOpType <: AbstractSciMLOperator, cacheType <: AbstractExpCache{expOpType}, + tType <: Number, opType <: AbstractSciMLOperator, uType, iip, + } <: + OrdinaryDiffEqMutableCache exp_cache::cacheType last_step::tType cached::Vector{Bool} @@ -34,31 +37,37 @@ end get_fsalfirstlast(cache::RKIPCache, u) = (zero(cache.tmp), zero(cache.tmp)) -@inline function cache_exp!(cache::ExpCache{expOpType}, +@inline function cache_exp!( + cache::ExpCache{expOpType}, A::opType, h::T, action::Symbol, step_index::Int, - unique_stage_index::Int) where { - expOpType <: AbstractSciMLOperator, opType <: AbstractSciMLOperator, T <: Number} + unique_stage_index::Int + ) where { + expOpType <: AbstractSciMLOperator, opType <: AbstractSciMLOperator, T <: Number, + } (; expÂ_for_this_step, expÂ_cached) = cache expÂ_for_this_step[unique_stage_index] = (action == :use_cached) ? - expÂ_cached[step_index, unique_stage_index] : - exp(A, h) # fetching or generating exp(Â*c_i*dt) - if action == :cache + expÂ_cached[step_index, unique_stage_index] : + exp(A, h) # fetching or generating exp(Â*c_i*dt) + return if action == :cache expÂ_cached[step_index, unique_stage_index] = expÂ_for_this_step[unique_stage_index] # storing exp(Â*c_i*dt) end end -@inline function cache_exp!(cache::ExpCacheNoLdiv{expOpType}, +@inline function cache_exp!( + cache::ExpCacheNoLdiv{expOpType}, Â::opType, h::T, action::Symbol, step_index::Int, - unique_stage_index::Int) where { - expOpType <: AbstractSciMLOperator, opType <: AbstractSciMLOperator, T <: Number} + unique_stage_index::Int + ) where { + expOpType <: AbstractSciMLOperator, opType <: AbstractSciMLOperator, T <: Number, + } cache_exp!(cache.exp_cache, Â, h, action, step_index, unique_stage_index) - cache_exp!(cache.exp_cache_inv, Â, -h, action, step_index, unique_stage_index) + return cache_exp!(cache.exp_cache_inv, Â, -h, action, step_index, unique_stage_index) end """ @@ -67,15 +76,18 @@ end @inline function cache_exp_op_for_this_step!( cache::RKIPCache{expOpType, cacheType, tType, opType, uType, iip}, Â::opType, dt::tType, - alg::algType) where {expOpType, cacheType, tType, opType, uType, algType, iip} + alg::algType + ) where {expOpType, cacheType, tType, opType, uType, algType, iip} (; dt_for_expÂ_caching) = alg if !iszero(dt) && !(dt ≈ cache.last_step) # we check that new exp(A dt) are needed dt_abs = abs(dt) # only the positive dt are used for indexing action = :single_use # exp(A*dt) is only computed for this step - step_index = clamp(searchsortedlast(dt_for_expÂ_caching, dt_abs), - 1, lastindex(dt_for_expÂ_caching)) # fetching the index corresponding to the step size + step_index = clamp( + searchsortedlast(dt_for_expÂ_caching, dt_abs), + 1, lastindex(dt_for_expÂ_caching) + ) # fetching the index corresponding to the step size if dt_for_expÂ_caching[step_index] ≈ dt_abs # if dt corresponds to a caching step action = (cache.cached[step_index] ? :use_cached : :cache) # if already present, we reuse the cached, otherwise it is generated @@ -83,10 +95,11 @@ end for (unique_stage_index, c) in enumerate(cache.c_unique) # iterating over all unique c_i of the RK tableau cache_exp!( - cache.exp_cache, Â, abs(dt * c), action, step_index, unique_stage_index) # generating and caching + cache.exp_cache, Â, abs(dt * c), action, step_index, unique_stage_index + ) # generating and caching end cache.cached[step_index] |= (action == :cache) # set the flag that we have already cached exp(Â*c_i*dt) for this dt end - cache.last_step = dt + return cache.last_step = dt end diff --git a/lib/OrdinaryDiffEqRKIP/src/rkip_perform_step.jl b/lib/OrdinaryDiffEqRKIP/src/rkip_perform_step.jl index 231b6db649..7e8faeafbc 100644 --- a/lib/OrdinaryDiffEqRKIP/src/rkip_perform_step.jl +++ b/lib/OrdinaryDiffEqRKIP/src/rkip_perform_step.jl @@ -4,21 +4,24 @@ Overwrite compute f(u, p, t) and if possible, overwrite u with the result. Same principle of operation as `matvec_prod_mip` for mutability/in-place handling. """ function nl_part_mip( - tmp::uType, f!, u::uType, p, t::tType, ::Val{true}) where {tType, uType} + tmp::uType, f!, u::uType, p, t::tType, ::Val{true} + ) where {tType, uType} f!(tmp, u, p, t) copyto!(u, tmp) return u end function nl_part_mip(_::uType, f, u::uType, p, t::tType, ::Val{false}) where {tType, uType} - f(u, p, t) + return f(u, p, t) end """ Helper function to compute Au + f(u, p, t) and if in place, store the result in res. Return res if in place, otherwise return Au + f(u, p, t) """ -function f_mip!(res::uType, tmp::uType, A::opType, f, u::uType, p, - t::tType, ::Val{true}) where {tType, uType, opType} +function f_mip!( + res::uType, tmp::uType, A::opType, f, u::uType, p, + t::tType, ::Val{true} + ) where {tType, uType, opType} res .= u res = matvec_prod_mip(tmp, A, res, Val(true), p, t) f(tmp, u, p, t) @@ -26,28 +29,37 @@ function f_mip!(res::uType, tmp::uType, A::opType, f, u::uType, p, return res end -function f_mip!(_::uType, tmp::uType, A::opType, f, u::uType, p, - t::tType, ::Val{false}) where {tType, uType, opType} - matvec_prod_mip(tmp, A, u, Val(false), p, t) + f(u, p, t) +function f_mip!( + _::uType, tmp::uType, A::opType, f, u::uType, p, + t::tType, ::Val{false} + ) where {tType, uType, opType} + return matvec_prod_mip(tmp, A, u, Val(false), p, t) + f(u, p, t) end """ Helper function for the residual maybe in place. Same principle of operation as `_safe_matvec_prod` for mutability/in-place handling. """ -function calculate_residuals_mip(tmp::uType, utilde::uType, uprev::uType, u::uType, abstol, - reltol, internalnorm, t, ::Val{true}) where {uType} +function calculate_residuals_mip( + tmp::uType, utilde::uType, uprev::uType, u::uType, abstol, + reltol, internalnorm, t, ::Val{true} + ) where {uType} calculate_residuals!(tmp, utilde, uprev, u, abstol, reltol, internalnorm, t) return tmp end -function calculate_residuals_mip(_::uType, utilde::uType, uprev::uType, u::uType, abstol, - reltol, internalnorm, t, ::Val{false}) where {uType} - calculate_residuals(utilde, uprev, u, abstol, reltol, internalnorm, t) +function calculate_residuals_mip( + _::uType, utilde::uType, uprev::uType, u::uType, abstol, + reltol, internalnorm, t, ::Val{false} + ) where {uType} + return calculate_residuals(utilde, uprev, u, abstol, reltol, internalnorm, t) end -@fastmath function perform_step!(integrator, - cache::RKIPCache{expOpType, cacheType, tType, opType, uType, iip}) where { - expOpType, cacheType, tType, opType, uType, iip} +@fastmath function perform_step!( + integrator, + cache::RKIPCache{expOpType, cacheType, tType, opType, uType, iip} + ) where { + expOpType, cacheType, tType, opType, uType, iip, + } (; t, dt, uprev, u, f, p, fsalfirst, fsallast, alg) = integrator (; c, α, αEEst, stages, A) = alg.tableau (; kk, utilde, tmp) = cache @@ -95,7 +107,8 @@ end if adaptive utilde = expmv_rkip_mip(cache, utilde, dt, p, t) # stepping forward into the interaction ũ = exp(Â dt)*ũ tmp = calculate_residuals_mip( - tmp, utilde, uprev, u, abstol, reltol, internalnorm, t, iip) # error computation maybe in place + tmp, utilde, uprev, u, abstol, reltol, internalnorm, t, iip + ) # error computation maybe in place integrator.EEst = internalnorm(tmp, t) end @@ -110,9 +123,12 @@ end @bb copyto!(integrator.k[2], fsallast) end -function initialize!(integrator, - cache::RKIPCache{expOpType, cacheType, tType, opType, uType, iip}) where { - expOpType, cacheType, tType, opType, uType, iip} +function initialize!( + integrator, + cache::RKIPCache{expOpType, cacheType, tType, opType, uType, iip} + ) where { + expOpType, cacheType, tType, opType, uType, iip, + } (; f, u, p, t, fsalfirst, fsallast) = integrator kshortsize = 2 @@ -128,5 +144,5 @@ function initialize!(integrator, integrator.fsallast = fsallast @bb copyto!(integrator.k[1], fsalfirst) - @bb copyto!(integrator.k[2], fsallast) + return @bb copyto!(integrator.k[2], fsallast) end diff --git a/lib/OrdinaryDiffEqRKIP/src/rkip_utils.jl b/lib/OrdinaryDiffEqRKIP/src/rkip_utils.jl index 0eff0d5e69..0809839d31 100644 --- a/lib/OrdinaryDiffEqRKIP/src/rkip_utils.jl +++ b/lib/OrdinaryDiffEqRKIP/src/rkip_utils.jl @@ -8,12 +8,15 @@ Safe function for computing the matrix exponential vector product for both mutab Same principle of operation as `_safe_matvec_prod` for mutability/in-place handling. """ @inline expmv_rkip_mip(cache::RKIPCache{expOpType, cacheType, tType, opType, uType, iip}, v::uType, h::tType, p, t) where {expOpType, cacheType, tType, opType, uType, iip} = expmv_rkip_mip( - cache, v, h, lastindex(cache.c_mapping), p, t) # If i is not precised, this is the final step in the RKIP -> h = dt + cache, v, h, lastindex(cache.c_mapping), p, t +) # If i is not precised, this is the final step in the RKIP -> h = dt @inline function expmv_rkip_mip( cache::RKIPCache{expOpType, cacheType, tType, opType, uType, iip}, v::uType, - h::tType, stage_index::Int, p, t) where { - expOpType, cacheType, tType, opType, uType, iip} + h::tType, stage_index::Int, p, t + ) where { + expOpType, cacheType, tType, opType, uType, iip, + } if !(h ≈ tType(0.0)) c = cache.c_mapping[stage_index] exp_cache = cache.exp_cache @@ -25,7 +28,8 @@ end @inline function _expmv_rkip_mip( cache::ExpCacheNoLdiv{expOpType}, tmp::vType, v::vType, stage_index::Integer, - positive, iip, p, t) where {expOpType <: AbstractSciMLOperator, vType} + positive, iip, p, t + ) where {expOpType <: AbstractSciMLOperator, vType} op = get_op_for_this_step(cache, positive, stage_index) v = matvec_prod_mip(tmp, op, v, iip, p, t) return v @@ -33,7 +37,8 @@ end @inline function _expmv_rkip_mip( cache::ExpCache{expOpType}, tmp::vType, v::vType, stage_index::Integer, - positive, ::Val{true}, p, t) where {expOpType <: AbstractSciMLOperator, vType} + positive, ::Val{true}, p, t + ) where {expOpType <: AbstractSciMLOperator, vType} op = get_op_for_this_step(cache, stage_index) if positive matvec_prod_mip(tmp, op, v, Val(true), p, t) @@ -51,14 +56,16 @@ For mutable type, overwrite `v` with `mat*v` and return `v`. Otherwise return ` Use the dispatch between ::Val{true} (in place) and ::Val{false} immutable to decide """ @inline function matvec_prod_mip( - tmp::V, mat::M, v::V, ::Val{true}, p, t) where {V, M <: AbstractSciMLOperator} + tmp::V, mat::M, v::V, ::Val{true}, p, t + ) where {V, M <: AbstractSciMLOperator} mat(tmp, v, v, p, t) copyto!(v, tmp) return v end @inline function matvec_prod_mip( - _::V, mat::M, v::V, ::Val{false}, p, t) where {V, M <: AbstractSciMLOperator} + _::V, mat::M, v::V, ::Val{false}, p, t + ) where {V, M <: AbstractSciMLOperator} v = mat(v, v, p, t) return v end diff --git a/lib/OrdinaryDiffEqRKIP/test/cache_recycling_test.jl b/lib/OrdinaryDiffEqRKIP/test/cache_recycling_test.jl index 2e51e5ee7f..a58b8c3392 100644 --- a/lib/OrdinaryDiffEqRKIP/test/cache_recycling_test.jl +++ b/lib/OrdinaryDiffEqRKIP/test/cache_recycling_test.jl @@ -10,7 +10,7 @@ import LinearAlgebra u0 = [0.0, 0.0, 0.0] f! = (dx, x, p, t) -> dx .= cos.(x) - alg = RKIP(1e-2, 1e1) + alg = RKIP(1.0e-2, 1.0e1) splfc = SplitFunction{true}(Â, f!) spltode = SplitODEProblem(splfc, u0, (0, 1.0)) diff --git a/lib/OrdinaryDiffEqRKIP/test/jet.jl b/lib/OrdinaryDiffEqRKIP/test/jet.jl index 5744352f66..ed78871744 100644 --- a/lib/OrdinaryDiffEqRKIP/test/jet.jl +++ b/lib/OrdinaryDiffEqRKIP/test/jet.jl @@ -7,5 +7,6 @@ using Test @testset "JET Tests" begin # Test package for typos test_package( - OrdinaryDiffEqRKIP, target_modules = (OrdinaryDiffEqRKIP,), mode = :typo) + OrdinaryDiffEqRKIP, target_modules = (OrdinaryDiffEqRKIP,), mode = :typo + ) end diff --git a/lib/OrdinaryDiffEqRKIP/test/semilinear_fft.jl b/lib/OrdinaryDiffEqRKIP/test/semilinear_fft.jl index 7e22e2d695..9d6776df43 100644 --- a/lib/OrdinaryDiffEqRKIP/test/semilinear_fft.jl +++ b/lib/OrdinaryDiffEqRKIP/test/semilinear_fft.jl @@ -6,7 +6,7 @@ using SciMLBase: SplitODEProblem, SplitFunction, solve using SciMLOperators: AbstractSciMLOperator struct DiagonalFourierOperator{T, uType <: AbstractVector{T}, fftType, ifftType} <: - AbstractSciMLOperator{T} + AbstractSciMLOperator{T} diag::uType plan_fft!::fftType plan_ifft!::ifftType @@ -16,11 +16,12 @@ end function DiagonalFourierOperator(diag, plan_fft!_prototype, plan_ifft!_prototype) tmp = similar(diag) return DiagonalFourierOperator( - diag, plan_fft!_prototype(tmp), plan_ifft!_prototype(tmp), tmp) + diag, plan_fft!_prototype(tmp), plan_ifft!_prototype(tmp), tmp + ) end function DiagonalFourierOperator(diag::Vector{T}) where {T <: Complex} - DiagonalFourierOperator(diag, FFTW.plan_fft!, FFTW.plan_ifft!) + return DiagonalFourierOperator(diag, FFTW.plan_fft!, FFTW.plan_ifft!) end function LinearAlgebra.exp(D::DiagonalFourierOperator, t) @@ -28,7 +29,7 @@ function LinearAlgebra.exp(D::DiagonalFourierOperator, t) D.tmp .= D.diag D.tmp .*= t exp_kernel .= exp.(D.tmp) - DiagonalFourierOperator(exp_kernel, D.plan_fft!, D.plan_ifft!, D.tmp) + return DiagonalFourierOperator(exp_kernel, D.plan_fft!, D.plan_ifft!, D.tmp) end @inline @fastmath function apply_kernel!(du, u, tmp, kernel, op_fft!, op_ifft!) @@ -40,7 +41,7 @@ end end function (D::DiagonalFourierOperator)(du, u, _, _, _) - apply_kernel!(du, u, D.tmp, D.diag, D.plan_fft!, D.plan_ifft!) + return apply_kernel!(du, u, D.tmp, D.diag, D.plan_fft!, D.plan_ifft!) end cpu_init(u0::Vector, ::Vector{T}) where {T <: Real} = u0 @@ -53,7 +54,7 @@ function create_semilinear_problem( u0, semilinear_fourier_part::Function, nonlinear_part!::Function -) where {T <: Real} + ) where {T <: Real} domain_size = dτ * nb_pts τ = Vector{T}(range(-domain_size / 2.0, domain_size / 2.0, nb_pts)) @@ -83,23 +84,31 @@ end end function create_nlse( - nb_pts::Int, dτ::T, integration_limit::T, u0) where {T <: Real} - create_semilinear_problem(nb_pts, dτ, integration_limit, u0, ω -> -0.5im * ω^2, - (du, u, t) -> nlse_non_linpart(du, u)) + nb_pts::Int, dτ::T, integration_limit::T, u0 + ) where {T <: Real} + return create_semilinear_problem( + nb_pts, dτ, integration_limit, u0, ω -> -0.5im * ω^2, + (du, u, t) -> nlse_non_linpart(du, u) + ) end -function create_lle_scan(nb_pts::Int, dτ::T, scan_time::T, u0, - Δ_min::T, Δ_max::T, S::T) where {T <: Real} - create_semilinear_problem(nb_pts, dτ, scan_time, u0, ω -> -1 - 1im * ω^2, - (du, u, t) -> lle_non_linpart!(du, u, Δ_min + (Δ_max - Δ_min) * t / scan_time, S)) +function create_lle_scan( + nb_pts::Int, dτ::T, scan_time::T, u0, + Δ_min::T, Δ_max::T, S::T + ) where {T <: Real} + return create_semilinear_problem( + nb_pts, dτ, scan_time, u0, ω -> -1 - 1im * ω^2, + (du, u, t) -> lle_non_linpart!(du, u, Δ_min + (Δ_max - Δ_min) * t / scan_time, S) + ) end """ Test function of the NLSE on a conservative soliton """ function nlse_test( - ::Type{T}; B = 5.0, nb_pts = 512, dτ = 5e-3, propag_dist = 10.0, - save_everystep = false, reltol = 1e-6) where {T <: Real} + ::Type{T}; B = 5.0, nb_pts = 512, dτ = 5.0e-3, propag_dist = 10.0, + save_everystep = false, reltol = 1.0e-6 + ) where {T <: Real} B = T(B) problem = create_nlse( @@ -108,7 +117,7 @@ function nlse_test( T(propag_dist), τ -> B * sech(B * τ) ) - return solve(problem, RKIP(T(1e-4), T(1.0)); save_everystep, reltol = T(reltol)) + return solve(problem, RKIP(T(1.0e-4), T(1.0)); save_everystep, reltol = T(reltol)) end nlse_test(; kwargs...) = nlse_test(Float64; kwargs...) @@ -117,18 +126,19 @@ nlse_test(; kwargs...) = nlse_test(Float64; kwargs...) Lugiato-Lefever equation test. Useful for benchmark due to its particular dynamic """ function lle_scan_test( - ::Type{T}; nb_pts = 1024, dτ = 5e-2, save_everystep = false, - reltol = 1e-6, S = 3, Δ_min = -2.0, Δ_max = 12.0, t_max = 10) where {T <: Real} + ::Type{T}; nb_pts = 1024, dτ = 5.0e-2, save_everystep = false, + reltol = 1.0e-6, S = 3, Δ_min = -2.0, Δ_max = 12.0, t_max = 10 + ) where {T <: Real} problem = create_lle_scan( nb_pts, T(dτ), T(t_max), - 1e-1 * exp.(2im * π * rand(T, nb_pts)), + 1.0e-1 * exp.(2im * π * rand(T, nb_pts)), T(Δ_min), T(Δ_max), T(S) ) - return solve(problem, RKIP(T(1e-4), T(1.0)); save_everystep, reltol = T(reltol)) + return solve(problem, RKIP(T(1.0e-4), T(1.0)); save_everystep, reltol = T(reltol)) end lle_scan_test(; kwargs...) = lle_scan_test(Float64; kwargs...) diff --git a/lib/OrdinaryDiffEqRKIP/test/semilinear_pde_test_cpu.jl b/lib/OrdinaryDiffEqRKIP/test/semilinear_pde_test_cpu.jl index c322c2e1d1..ddd5ad0b1a 100644 --- a/lib/OrdinaryDiffEqRKIP/test/semilinear_pde_test_cpu.jl +++ b/lib/OrdinaryDiffEqRKIP/test/semilinear_pde_test_cpu.jl @@ -18,7 +18,7 @@ end p1 = abs2.(sol.u[1]) p2 = abs2.(sol.u[end]) - @test norm(p1 .- p2) / norm(p1) < 1e-2 # small difference with analytical solution due to boundary periodic condition + @test norm(p1 .- p2) / norm(p1) < 1.0e-2 # small difference with analytical solution due to boundary periodic condition end @testset "NLSE test - Float32" begin @@ -28,5 +28,5 @@ end p1 = abs2.(sol.u[1]) p2 = abs2.(sol.u[end]) - @test norm(p1 .- p2) / norm(p1) < 1e-2 # small difference with analytical solution due to boundary periodic condition + @test norm(p1 .- p2) / norm(p1) < 1.0e-2 # small difference with analytical solution due to boundary periodic condition end diff --git a/lib/OrdinaryDiffEqRKIP/test/type_test.jl b/lib/OrdinaryDiffEqRKIP/test/type_test.jl index 4779f10eb9..c39ae1d0d2 100644 --- a/lib/OrdinaryDiffEqRKIP/test/type_test.jl +++ b/lib/OrdinaryDiffEqRKIP/test/type_test.jl @@ -2,7 +2,7 @@ using Test using OrdinaryDiffEqRKIP: RKIP using SciMLBase: SplitODEProblem, SplitFunction, solve using SciMLOperators: ScalarOperator, DiagonalOperator, MatrixOperator, - AbstractSciMLOperator + AbstractSciMLOperator using StaticArrays @@ -12,8 +12,8 @@ LinearAlgebra.exp(d::ScalarOperator, t) = ScalarOperator(exp(t * d.val)) # Tempo LinearAlgebra.exp(d::MatrixOperator, t) = MatrixOperator(exp(t * d.A)) function test(A_prototype, u_prototype, iip; use_ldiv = false, broken = false) - for reltol in [1e-3, 1e-6, 1e-8, 1e-10, 1e-12], - μ in 1.05 + for reltol in [1.0e-3, 1.0e-6, 1.0e-8, 1.0e-10, 1.0e-12], + μ in 1.05 analytic = (u0, _, t) -> u0 .* exp(2μ * t) @@ -35,20 +35,27 @@ function test(A_prototype, u_prototype, iip; use_ldiv = false, broken = false) # Wrap in try-catch since broken tests may throw during solve try sol = solve( - spltode, RKIP(; use_ldiv = use_ldiv); reltol = reltol, abstol = 1e-10) - @test_broken isapprox(sol(t[end]), splfc.analytic(u0, nothing, t[end]); - rtol = 1e2 * reltol, atol = 1e-8) + spltode, RKIP(; use_ldiv = use_ldiv); reltol = reltol, abstol = 1.0e-10 + ) + @test_broken isapprox( + sol(t[end]), splfc.analytic(u0, nothing, t[end]); + rtol = 1.0e2 * reltol, atol = 1.0e-8 + ) catch @test_broken false # Expected to fail end else sol = solve( - spltode, RKIP(; use_ldiv = use_ldiv); reltol = reltol, abstol = 1e-10) - @test isapprox(sol(t[end]), splfc.analytic(u0, nothing, t[end]); - rtol = 1e2 * reltol, atol = 1e-8) + spltode, RKIP(; use_ldiv = use_ldiv); reltol = reltol, abstol = 1.0e-10 + ) + @test isapprox( + sol(t[end]), splfc.analytic(u0, nothing, t[end]); + rtol = 1.0e2 * reltol, atol = 1.0e-8 + ) end end end + return end @testset "In-Place ScalarOperator Vector Adaptative Ldiv" begin @@ -84,15 +91,15 @@ end # fails as calling a MatrixOperator on a StaticVector change its type to Vector, causing a type instability @testset "Out-of-place Diagonal 1x1 Operator SVector Adaptative" begin - test((μ) -> DiagonalOperator([μ]), u0 -> SVector(u0), false, broken=true) + test((μ) -> DiagonalOperator([μ]), u0 -> SVector(u0), false, broken = true) end @testset "Out-of-place Matrix 1x1 Operator SVector Adaptative" begin - test((μ) -> MatrixOperator([μ;;]), u0 -> SVector(u0), false, broken=true) + test((μ) -> MatrixOperator([μ;;]), u0 -> SVector(u0), false, broken = true) end # Fails for a strange reason as calling ldiv!(a, B, c) on a MatrixOperator dispatch toward an inexisting method @testset "In-Place MatrixOperator Vector Float Adaptative Ldiv" begin - test(μ -> MatrixOperator([μ;;]), u0 -> [u0], true; use_ldiv=true, broken=true) + test(μ -> MatrixOperator([μ;;]), u0 -> [u0], true; use_ldiv = true, broken = true) end diff --git a/lib/OrdinaryDiffEqRKN/src/OrdinaryDiffEqRKN.jl b/lib/OrdinaryDiffEqRKN/src/OrdinaryDiffEqRKN.jl index 76c4e33970..bea847d3ca 100644 --- a/lib/OrdinaryDiffEqRKN/src/OrdinaryDiffEqRKN.jl +++ b/lib/OrdinaryDiffEqRKN/src/OrdinaryDiffEqRKN.jl @@ -1,18 +1,18 @@ module OrdinaryDiffEqRKN import OrdinaryDiffEqCore: alg_order, calculate_residuals!, - initialize!, perform_step!, unwrap_alg, - calculate_residuals, alg_extrapolates, - OrdinaryDiffEqAlgorithm, - OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, - OrdinaryDiffEqAdaptivePartitionedAlgorithm, - OrdinaryDiffEqPartitionedAlgorithm, - OrdinaryDiffEqAdaptiveAlgorithm, CompiledFloats, uses_uprev, - alg_cache, _vec, _reshape, @cache, isfsal, full_cache, - constvalue, _unwrap_val, _ode_interpolant, - get_fsalfirstlast, - trivial_limiter!, _ode_interpolant!, _ode_addsteps!, - generic_solver_docstring + initialize!, perform_step!, unwrap_alg, + calculate_residuals, alg_extrapolates, + OrdinaryDiffEqAlgorithm, + OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, + OrdinaryDiffEqAdaptivePartitionedAlgorithm, + OrdinaryDiffEqPartitionedAlgorithm, + OrdinaryDiffEqAdaptiveAlgorithm, CompiledFloats, uses_uprev, + alg_cache, _vec, _reshape, @cache, isfsal, full_cache, + constvalue, _unwrap_val, _ode_interpolant, + get_fsalfirstlast, + trivial_limiter!, _ode_interpolant!, _ode_addsteps!, + generic_solver_docstring using FastBroadcast, Polyester, MuladdMacro, RecursiveArrayTools using DiffEqBase: @def, @tight_loop_macros import OrdinaryDiffEqCore @@ -29,8 +29,8 @@ include("interpolants.jl") include("rkn_perform_step.jl") export Nystrom4, FineRKN4, FineRKN5, Nystrom4VelocityIndependent, - Nystrom5VelocityIndependent, - IRKN3, IRKN4, DPRKN4, DPRKN5, DPRKN6, DPRKN6FM, DPRKN8, DPRKN12, ERKN4, ERKN5, ERKN7, - RKN4 + Nystrom5VelocityIndependent, + IRKN3, IRKN4, DPRKN4, DPRKN5, DPRKN6, DPRKN6FM, DPRKN8, DPRKN12, ERKN4, ERKN5, ERKN7, + RKN4 end diff --git a/lib/OrdinaryDiffEqRKN/src/algorithms.jl b/lib/OrdinaryDiffEqRKN/src/algorithms.jl index 6694d4fd13..84fd2082a1 100644 --- a/lib/OrdinaryDiffEqRKN/src/algorithms.jl +++ b/lib/OrdinaryDiffEqRKN/src/algorithms.jl @@ -6,7 +6,8 @@ Second order ODE should not depend on the first derivative.", "@article{rabiei2012numerical, title={Numerical Solution of Second-Order Ordinary Differential Equations by Improved Runge-Kutta Nystrom Method}, author={Rabiei, Faranak and Ismail, Fudziah and Norazak, S and Emadi, Saeid}, - publisher={Citeseer}}", "", "") + publisher={Citeseer}}", "", "" +) struct IRKN3 <: OrdinaryDiffEqPartitionedAlgorithm end @doc generic_solver_docstring( @@ -15,7 +16,8 @@ struct IRKN3 <: OrdinaryDiffEqPartitionedAlgorithm end "Improved Runge-Kutta-Nyström method", "E. Hairer, S.P. Norsett, G. Wanner, (1993) Solving Ordinary Differential Equations I. Nonstiff Problems. 2nd Edition. Springer Series in Computational Mathematics, - Springer-Verlag.", "", "") + Springer-Verlag.", "", "" +) struct Nystrom4 <: OrdinaryDiffEqPartitionedAlgorithm end @doc generic_solver_docstring( @@ -31,7 +33,8 @@ In particular, this method allows the acceleration equation to depend on the vel number={4}, pages={281--297}, year={1987}, - publisher={Springer}}", "", "") + publisher={Springer}}", "", "" +) struct FineRKN4 <: OrdinaryDiffEqAdaptivePartitionedAlgorithm end @doc generic_solver_docstring( @@ -47,7 +50,8 @@ In particular, this method allows the acceleration equation to depend on the vel number={4}, pages={281--297}, year={1987}, - publisher={Springer}}", "", "") + publisher={Springer}}", "", "" +) struct FineRKN5 <: OrdinaryDiffEqAdaptivePartitionedAlgorithm end @doc generic_solver_docstring( @@ -58,10 +62,12 @@ Used directly on second order ODEs, where the acceleration is independent from v "Improved Runge-Kutta-Nyström method", "E. Hairer, S.P. Norsett, G. Wanner, (1993) Solving Ordinary Differential Equations I. Nonstiff Problems. 2nd Edition. Springer Series in Computational Mathematics, - Springer-Verlag.", "", "") + Springer-Verlag.", "", "" +) struct Nystrom4VelocityIndependent <: OrdinaryDiffEqPartitionedAlgorithm end -@doc generic_solver_docstring("Improves Runge-Kutta-Nyström method of order four, +@doc generic_solver_docstring( + "Improves Runge-Kutta-Nyström method of order four, which minimizes the amount of evaluated functions in each step. Fixed time steps only. Second order ODE should not be dependent on the first derivative. @@ -71,7 +77,8 @@ struct Nystrom4VelocityIndependent <: OrdinaryDiffEqPartitionedAlgorithm end "@article{rabiei2012numerical, title={Numerical Solution of Second-Order Ordinary Differential Equations by Improved Runge-Kutta Nystrom Method}, author={Rabiei, Faranak and Ismail, Fudziah and Norazak, S and Emadi, Saeid}, - publisher={Citeseer}}", "", "") + publisher={Citeseer}}", "", "" +) struct IRKN4 <: OrdinaryDiffEqPartitionedAlgorithm end @doc generic_solver_docstring( @@ -82,10 +89,12 @@ Used directly on second order ODEs, where the acceleration is independent from v "Improved Runge-Kutta-Nyström method", "E. Hairer, S.P. Norsett, G. Wanner, (1993) Solving Ordinary Differential Equations I. Nonstiff Problems. 2nd Edition. Springer Series in Computational Mathematics, - Springer-Verlag.", "", "") + Springer-Verlag.", "", "" +) struct Nystrom5VelocityIndependent <: OrdinaryDiffEqPartitionedAlgorithm end -@doc generic_solver_docstring("4th order explicit method. +@doc generic_solver_docstring( + "4th order explicit method. The second order ODE should not depend on the first derivative.", "DPRKN4", "Improved Runge-Kutta-Nyström method", @@ -95,10 +104,12 @@ struct Nystrom5VelocityIndependent <: OrdinaryDiffEqPartitionedAlgorithm end journal={Ima Journal of Numerical Analysis}, year={1987}, volume={7}, - pages={235-250}}", "", "") + pages={235-250}}", "", "" +) struct DPRKN4 <: OrdinaryDiffEqAdaptivePartitionedAlgorithm end -@doc generic_solver_docstring("5th order explicit method. +@doc generic_solver_docstring( + "5th order explicit method. The second order ODE should not depend on the first derivative.", "DPRKN5", "Improved Runge-Kutta-Nyström method", @@ -109,7 +120,8 @@ struct DPRKN4 <: OrdinaryDiffEqAdaptivePartitionedAlgorithm end year={1973}, volume={8}, pages={229-233}, - publisher={Springer}}", "", "") + publisher={Springer}}", "", "" +) struct DPRKN5 <: OrdinaryDiffEqAdaptivePartitionedAlgorithm end @doc generic_solver_docstring( @@ -123,10 +135,12 @@ The second order ODE should not depend on the first derivative. Free 6th order i journal={Ima Journal of Numerical Analysis}, year={1987}, volume={7}, - pages={235-250}}", "", "") + pages={235-250}}", "", "" +) struct DPRKN6 <: OrdinaryDiffEqAdaptivePartitionedAlgorithm end -@doc generic_solver_docstring("6th order explicit method. +@doc generic_solver_docstring( + "6th order explicit method. The second order ODE should not depend on the first derivative. Compared to [`DPRKN6`](@ref), this method has smaller truncation error coefficients which leads to performance gain when only the main solution points are considered.", @@ -138,10 +152,12 @@ struct DPRKN6 <: OrdinaryDiffEqAdaptivePartitionedAlgorithm end journal={Ima Journal of Numerical Analysis}, year={1987}, volume={7}, - pages={235-250}}", "", "") + pages={235-250}}", "", "" +) struct DPRKN6FM <: OrdinaryDiffEqAdaptivePartitionedAlgorithm end -@doc generic_solver_docstring("8th order explicit method. +@doc generic_solver_docstring( + "8th order explicit method. The second order ODE should not depend on the first derivative. Not as efficient as [`DPRKN12`](@ref) when high accuracy is needed, however this solver is competitive with [`DPRKN6`](@ref) at lax tolerances and, @@ -156,10 +172,12 @@ struct DPRKN6FM <: OrdinaryDiffEqAdaptivePartitionedAlgorithm end number={4}, pages={423--430}, year={1987}, - publisher={Oxford University Press}}", "", "") + publisher={Oxford University Press}}", "", "" +) struct DPRKN8 <: OrdinaryDiffEqAdaptivePartitionedAlgorithm end -@doc generic_solver_docstring("12th order explicit method. +@doc generic_solver_docstring( + "12th order explicit method. The second order ODE should not depend on the first derivative. Most efficient when high accuracy is needed.", "DPRKN12", @@ -172,10 +190,12 @@ struct DPRKN8 <: OrdinaryDiffEqAdaptivePartitionedAlgorithm end number={4}, pages={423--430}, year={1987}, - publisher={Oxford University Press}}", "", "") + publisher={Oxford University Press}}", "", "" +) struct DPRKN12 <: OrdinaryDiffEqAdaptivePartitionedAlgorithm end -@doc generic_solver_docstring("Embedded 4(3) pair of explicit methods. +@doc generic_solver_docstring( + "Embedded 4(3) pair of explicit methods. Integrates the periodic properties of the harmonic oscillator exactly. The second order ODE should not depend on the first derivative. Uses adaptive step size control. This method is extra efficient on periodic problems.", @@ -188,10 +208,12 @@ struct DPRKN12 <: OrdinaryDiffEqAdaptivePartitionedAlgorithm end volume={11}, number={17}, pages={819--838}, - year={2017}}", "", "") + year={2017}}", "", "" +) struct ERKN4 <: OrdinaryDiffEqAdaptivePartitionedAlgorithm end -@doc generic_solver_docstring("Embedded 5(4) pair of explicit methods. +@doc generic_solver_docstring( + "Embedded 5(4) pair of explicit methods. Integrates the periodic properties of the harmonic oscillator exactly. The second order ODE should not depend on the first derivative. Uses adaptive step size control. This method is extra efficient on periodic problems.", @@ -205,10 +227,12 @@ struct ERKN4 <: OrdinaryDiffEqAdaptivePartitionedAlgorithm end number={4}, pages={46}, year={2016}, - publisher={Multidisciplinary Digital Publishing Institute}}", "", "") + publisher={Multidisciplinary Digital Publishing Institute}}", "", "" +) struct ERKN5 <: OrdinaryDiffEqAdaptivePartitionedAlgorithm end -@doc generic_solver_docstring("Embedded pair of explicit methods. +@doc generic_solver_docstring( + "Embedded pair of explicit methods. Integrates the periodic properties of the harmonic oscillator exactly. The second order ODE should not depend on the first derivative. Uses adaptive step size control. This method is extra efficient on periodic problems.", @@ -219,7 +243,8 @@ struct ERKN5 <: OrdinaryDiffEqAdaptivePartitionedAlgorithm end author={Theodore E. Simos and Ch. Tsitouras}, journal={J. Comput. Appl. Math.}, volume={400}, - pages={113753}}", "", "") + pages={113753}}", "", "" +) struct ERKN7 <: OrdinaryDiffEqAdaptivePartitionedAlgorithm end @doc generic_solver_docstring( @@ -236,5 +261,6 @@ This method is only fourth order for these systems, the method is second order o journal = {Journal of Computational and Applied Mathematics}, volume = {438}, pages = {115533}, - year = {2024},}", "", "") + year = {2024},}", "", "" +) struct RKN4 <: OrdinaryDiffEqAlgorithm end diff --git a/lib/OrdinaryDiffEqRKN/src/interp_func.jl b/lib/OrdinaryDiffEqRKN/src/interp_func.jl index ed60ba1b2f..71a0be1cf1 100644 --- a/lib/OrdinaryDiffEqRKN/src/interp_func.jl +++ b/lib/OrdinaryDiffEqRKN/src/interp_func.jl @@ -1,7 +1,12 @@ -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where { +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where { cacheType <: - Union{DPRKN6ConstantCache, - DPRKN6Cache}} - dense ? "specialized 6th order interpolation" : "1st order linear" + Union{ + DPRKN6ConstantCache, + DPRKN6Cache, + }, + } + return dense ? "specialized 6th order interpolation" : "1st order linear" end diff --git a/lib/OrdinaryDiffEqRKN/src/interpolants.jl b/lib/OrdinaryDiffEqRKN/src/interpolants.jl index 1d01cad210..8323fc5972 100644 --- a/lib/OrdinaryDiffEqRKN/src/interpolants.jl +++ b/lib/OrdinaryDiffEqRKN/src/interpolants.jl @@ -29,77 +29,111 @@ end dtsq = dt^2 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{DPRKN6ConstantCache, DPRKN6Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @dprkn6pre0 return ArrayPartition( duprev + - dt * Θ * - (bp1Θ * k1 + bp3Θ * k3 + - bp4Θ * k4 + bp5Θ * k5 + bp6Θ * k6), + dt * Θ * + ( + bp1Θ * k1 + bp3Θ * k3 + + bp4Θ * k4 + bp5Θ * k5 + bp6Θ * k6 + ), uprev + - dt * Θ * - (duprev + - dt * Θ * (b1Θ * k1 + b3Θ * k3 + - b4Θ * k4 + b5Θ * k5 + b6Θ * k6))) + dt * Θ * + ( + duprev + + dt * Θ * ( + b1Θ * k1 + b3Θ * k3 + + b4Θ * k4 + b5Θ * k5 + b6Θ * k6 + ) + ) + ) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{DPRKN6ConstantCache, DPRKN6Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @dprkn6pre0 return ArrayPartition( duprev[idxs] + - dt * Θ * - (bp1Θ * k1[idxs] + bp3Θ * k3[idxs] + - bp4Θ * k4[idxs] + bp5Θ * k5[idxs] + bp6Θ * k6[idxs]), + dt * Θ * + ( + bp1Θ * k1[idxs] + bp3Θ * k3[idxs] + + bp4Θ * k4[idxs] + bp5Θ * k5[idxs] + bp6Θ * k6[idxs] + ), uprev[idxs] + - dt * Θ * - (duprev[idxs] + - dt * Θ * - (b1Θ * k1[idxs] + - b3Θ * k3[idxs] + - b4Θ * k4[idxs] + b5Θ * k5[idxs] + b6Θ * k6[idxs]))) + dt * Θ * + ( + duprev[idxs] + + dt * Θ * + ( + b1Θ * k1[idxs] + + b3Θ * k3[idxs] + + b4Θ * k4[idxs] + b5Θ * k5[idxs] + b6Θ * k6[idxs] + ) + ) + ) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{DPRKN6ConstantCache, DPRKN6Cache}, idxs::Number, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @dprkn6pre0 halfsize = length(y₀) ÷ 2 if idxs <= halfsize duprev[idxs] + - dt * Θ * - (bp1Θ * k1[idxs] + bp3Θ * k3[idxs] + - bp4Θ * k4[idxs] + bp5Θ * k5[idxs] + bp6Θ * k6[idxs]) + dt * Θ * + ( + bp1Θ * k1[idxs] + bp3Θ * k3[idxs] + + bp4Θ * k4[idxs] + bp5Θ * k5[idxs] + bp6Θ * k6[idxs] + ) else idxs = idxs - halfsize uprev[idxs] + - dt * Θ * - (duprev[idxs] + - dt * Θ * - (b1Θ * k1[idxs] + - b3Θ * k3[idxs] + - b4Θ * k4[idxs] + b5Θ * k5[idxs] + b6Θ * k6[idxs])) + dt * Θ * + ( + duprev[idxs] + + dt * Θ * + ( + b1Θ * k1[idxs] + + b3Θ * k3[idxs] + + b4Θ * k4[idxs] + b5Θ * k5[idxs] + b6Θ * k6[idxs] + ) + ) end end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{DPRKN6ConstantCache, DPRKN6Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @dprkn6pre0 - @inbounds @.. broadcast=false out.x[2]=uprev + - dt * Θ * - (duprev + - dt * Θ * - (b1Θ * k1 + - b3Θ * k3 + - b4Θ * k4 + b5Θ * k5 + b6Θ * k6)) - @inbounds @.. broadcast=false out.x[1]=duprev + - dt * Θ * - (bp1Θ * k1 + bp3Θ * k3 + - bp4Θ * k4 + bp5Θ * k5 + bp6Θ * k6) + @inbounds @.. broadcast = false out.x[2] = uprev + + dt * Θ * + ( + duprev + + dt * Θ * + ( + b1Θ * k1 + + b3Θ * k3 + + b4Θ * k4 + b5Θ * k5 + b6Θ * k6 + ) + ) + @inbounds @.. broadcast = false out.x[1] = duprev + + dt * Θ * + ( + bp1Θ * k1 + bp3Θ * k3 + + bp4Θ * k4 + bp5Θ * k5 + bp6Θ * k6 + ) #for i in eachindex(out.x[1]) # out.x[2][i] = uprev[i] + dt*Θ*(duprev[i] + dt*Θ*(b1Θ*k1[i] + # b3Θ*k3[i] + @@ -110,9 +144,11 @@ end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{DPRKN6ConstantCache, DPRKN6Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @dprkn6pre0 halfsize = length(y₀) ÷ 2 isfirsthalf = idxs .<= halfsize @@ -121,21 +157,27 @@ end secondidxs_shifted = idxs[secondhalf] secondidxs = secondidxs_shifted .- halfsize - @views @.. broadcast=false out[secondhalf]=uprev[secondidxs] + - dt * Θ * - (duprev[secondidxs] + - dt * Θ * - (b1Θ * k1[secondidxs] + - b3Θ * k3[secondidxs] + - b4Θ * k4[secondidxs] + - b5Θ * k5[secondidxs] + - b6Θ * k6[secondidxs])) - @views @.. broadcast=false out[isfirsthalf]=duprev[firstidxs] + - dt * Θ * - (bp1Θ * k1[firstidxs] + - bp3Θ * k3[firstidxs] + - bp4Θ * k4[firstidxs] + - bp5Θ * k5[firstidxs] + - bp6Θ * k6[firstidxs]) + @views @.. broadcast = false out[secondhalf] = uprev[secondidxs] + + dt * Θ * + ( + duprev[secondidxs] + + dt * Θ * + ( + b1Θ * k1[secondidxs] + + b3Θ * k3[secondidxs] + + b4Θ * k4[secondidxs] + + b5Θ * k5[secondidxs] + + b6Θ * k6[secondidxs] + ) + ) + @views @.. broadcast = false out[isfirsthalf] = duprev[firstidxs] + + dt * Θ * + ( + bp1Θ * k1[firstidxs] + + bp3Θ * k3[firstidxs] + + bp4Θ * k4[firstidxs] + + bp5Θ * k5[firstidxs] + + bp6Θ * k6[firstidxs] + ) out end diff --git a/lib/OrdinaryDiffEqRKN/src/rkn_caches.jl b/lib/OrdinaryDiffEqRKN/src/rkn_caches.jl index e259a1e6ed..527b3e9f2e 100644 --- a/lib/OrdinaryDiffEqRKN/src/rkn_caches.jl +++ b/lib/OrdinaryDiffEqRKN/src/rkn_caches.jl @@ -14,10 +14,12 @@ end # struct Nystrom4ConstantCache <: NystromConstantCache end -function alg_cache(alg::Nystrom4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Nystrom4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} reduced_rate_prototype = rate_prototype.x[2] k₁ = zero(rate_prototype) k₂ = zero(reduced_rate_prototype) @@ -25,22 +27,24 @@ function alg_cache(alg::Nystrom4, u, rate_prototype, ::Type{uEltypeNoUnits}, k₄ = zero(reduced_rate_prototype) k = zero(rate_prototype) tmp = zero(u) - Nystrom4Cache(u, uprev, k₁, k₂, k₃, k₄, k, tmp) + return Nystrom4Cache(u, uprev, k₁, k₂, k₃, k₄, k, tmp) end struct Nystrom4ConstantCache <: NystromConstantCache end -function alg_cache(alg::Nystrom4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Nystrom4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - Nystrom4ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return Nystrom4ConstantCache() end # alg_cache(alg::Nystrom4,u,rate_prototype,::Type{uEltypeNoUnits},::Type{uBottomEltypeNoUnits},::Type{tTypeNoUnits},uprev,uprev2,f,t,dt,reltol,p,calck,::Val{false}) where {uEltypeNoUnits,uBottomEltypeNoUnits,tTypeNoUnits} = Nystrom4ConstantCache(constvalue(uBottomEltypeNoUnits),constvalue(tTypeNoUnits)) @cache struct FineRKN4Cache{uType, rateType, reducedRateType, uNoUnitsType, TabType} <: - NystromMutableCache + NystromMutableCache u::uType uprev::uType fsalfirst::rateType @@ -55,10 +59,12 @@ end tab::TabType end -function alg_cache(alg::FineRKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::FineRKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} reduced_rate_prototype = rate_prototype.x[2] tab = FineRKN4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) @@ -71,18 +77,20 @@ function alg_cache(alg::FineRKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - FineRKN4Cache(u, uprev, k1, k2, k3, k4, k5, k, utilde, tmp, atmp, tab) + return FineRKN4Cache(u, uprev, k1, k2, k3, k4, k5, k, utilde, tmp, atmp, tab) end -function alg_cache(alg::FineRKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::FineRKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - FineRKN4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return FineRKN4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct FineRKN5Cache{uType, rateType, reducedRateType, uNoUnitsType, TabType} <: - NystromMutableCache + NystromMutableCache u::uType uprev::uType fsalfirst::rateType @@ -99,10 +107,12 @@ end tab::TabType end -function alg_cache(alg::FineRKN5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::FineRKN5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} reduced_rate_prototype = rate_prototype.x[2] tab = FineRKN5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) @@ -117,18 +127,20 @@ function alg_cache(alg::FineRKN5, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - FineRKN5Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k, utilde, tmp, atmp, tab) + return FineRKN5Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k, utilde, tmp, atmp, tab) end -function alg_cache(alg::FineRKN5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::FineRKN5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - FineRKN5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return FineRKN5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct Nystrom4VelocityIndependentCache{uType, rateType, reducedRateType} <: - NystromMutableCache + NystromMutableCache u::uType uprev::uType fsalfirst::rateType @@ -138,26 +150,30 @@ end tmp::uType end -function alg_cache(alg::Nystrom4VelocityIndependent, u, rate_prototype, +function alg_cache( + alg::Nystrom4VelocityIndependent, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} reduced_rate_prototype = rate_prototype.x[2] k₁ = zero(rate_prototype) k₂ = zero(reduced_rate_prototype) k₃ = zero(reduced_rate_prototype) k = zero(rate_prototype) tmp = zero(u) - Nystrom4VelocityIndependentCache(u, uprev, k₁, k₂, k₃, k, tmp) + return Nystrom4VelocityIndependentCache(u, uprev, k₁, k₂, k₃, k, tmp) end struct Nystrom4VelocityIndependentConstantCache <: NystromConstantCache end -function alg_cache(alg::Nystrom4VelocityIndependent, u, rate_prototype, +function alg_cache( + alg::Nystrom4VelocityIndependent, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - Nystrom4VelocityIndependentConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return Nystrom4VelocityIndependentConstantCache() end @cache struct IRKN3Cache{uType, rateType, TabType} <: NystromMutableCache @@ -173,26 +189,32 @@ end tab::TabType end -function alg_cache(alg::IRKN3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::IRKN3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k₁ = zero(rate_prototype) k₂ = zero(rate_prototype) k₃ = zero(rate_prototype) k = zero(rate_prototype) tmp = zero(u) tab = IRKN3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - IRKN3Cache(u, uprev, uprev2, k₁, k₂, k, tmp, k₃, + return IRKN3Cache( + u, uprev, uprev2, k₁, k₂, k, tmp, k₃, Nystrom4VelocityIndependentCache(u, uprev, k₁, k₂.x[2], k₃.x[2], k, tmp), - tab) + tab + ) end -function alg_cache(alg::IRKN3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::IRKN3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - IRKN3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return IRKN3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct IRKN4Cache{uType, rateType, TabType} <: NystromMutableCache @@ -209,10 +231,12 @@ end tab::TabType end -function alg_cache(alg::IRKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::IRKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k₁ = zero(rate_prototype) k₂ = zero(rate_prototype) k₃ = zero(rate_prototype) @@ -220,20 +244,24 @@ function alg_cache(alg::IRKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, tmp = zero(u) tmp2 = zero(rate_prototype) tab = IRKN4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - IRKN4Cache(u, uprev, uprev2, k₁, k₂, k₃, k, tmp, tmp2, + return IRKN4Cache( + u, uprev, uprev2, k₁, k₂, k₃, k, tmp, tmp2, Nystrom4VelocityIndependentCache(u, uprev, k₁, k₂.x[2], k₃.x[2], k, tmp), - tab) + tab + ) end -function alg_cache(alg::IRKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::IRKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - IRKN4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return IRKN4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct Nystrom5VelocityIndependentCache{uType, rateType, reducedRateType, TabType} <: - NystromMutableCache + NystromMutableCache u::uType uprev::uType fsalfirst::rateType @@ -245,10 +273,12 @@ end tab::TabType end -function alg_cache(alg::Nystrom5VelocityIndependent, u, rate_prototype, +function alg_cache( + alg::Nystrom5VelocityIndependent, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} reduced_rate_prototype = rate_prototype.x[2] k₁ = zero(rate_prototype) k₂ = zero(reduced_rate_prototype) @@ -256,21 +286,27 @@ function alg_cache(alg::Nystrom5VelocityIndependent, u, rate_prototype, k₄ = zero(reduced_rate_prototype) k = zero(rate_prototype) tmp = zero(u) - tab = Nystrom5VelocityIndependentConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - Nystrom5VelocityIndependentCache(u, uprev, k₁, k₂, k₃, k₄, k, tmp, tab) + tab = Nystrom5VelocityIndependentConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return Nystrom5VelocityIndependentCache(u, uprev, k₁, k₂, k₃, k₄, k, tmp, tab) end -function alg_cache(alg::Nystrom5VelocityIndependent, u, rate_prototype, +function alg_cache( + alg::Nystrom5VelocityIndependent, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - Nystrom5VelocityIndependentConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return Nystrom5VelocityIndependentConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) end struct DPRKN4Cache{uType, rateType, reducedRateType, uNoUnitsType, TabType} <: - NystromMutableCache + NystromMutableCache u::uType uprev::uType fsalfirst::rateType @@ -284,10 +320,12 @@ struct DPRKN4Cache{uType, rateType, reducedRateType, uNoUnitsType, TabType} <: tab::TabType end -function alg_cache(alg::DPRKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DPRKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} reduced_rate_prototype = rate_prototype.x[2] tab = DPRKN4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) @@ -299,18 +337,20 @@ function alg_cache(alg::DPRKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - DPRKN4Cache(u, uprev, k1, k2, k3, k4, k, utilde, tmp, atmp, tab) + return DPRKN4Cache(u, uprev, k1, k2, k3, k4, k, utilde, tmp, atmp, tab) end -function alg_cache(alg::DPRKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DPRKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - DPRKN4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return DPRKN4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct DPRKN5Cache{uType, rateType, reducedRateType, uNoUnitsType, TabType} <: - NystromMutableCache + NystromMutableCache u::uType uprev::uType fsalfirst::rateType @@ -326,10 +366,12 @@ end tab::TabType end -function alg_cache(alg::DPRKN5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DPRKN5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} reduced_rate_prototype = rate_prototype.x[2] tab = DPRKN5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) @@ -343,18 +385,20 @@ function alg_cache(alg::DPRKN5, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - DPRKN5Cache(u, uprev, k1, k2, k3, k4, k5, k6, k, utilde, tmp, atmp, tab) + return DPRKN5Cache(u, uprev, k1, k2, k3, k4, k5, k6, k, utilde, tmp, atmp, tab) end -function alg_cache(alg::DPRKN5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DPRKN5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - DPRKN5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return DPRKN5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct DPRKN6Cache{uType, rateType, reducedRateType, uNoUnitsType, TabType} <: - NystromMutableCache + NystromMutableCache u::uType uprev::uType fsalfirst::rateType @@ -370,10 +414,12 @@ end tab::TabType end -function alg_cache(alg::DPRKN6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DPRKN6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} reduced_rate_prototype = rate_prototype.x[2] tab = DPRKN6ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) @@ -387,18 +433,20 @@ function alg_cache(alg::DPRKN6, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - DPRKN6Cache(u, uprev, k1, k2, k3, k4, k5, k6, k, utilde, tmp, atmp, tab) + return DPRKN6Cache(u, uprev, k1, k2, k3, k4, k5, k6, k, utilde, tmp, atmp, tab) end -function alg_cache(alg::DPRKN6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DPRKN6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - DPRKN6ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return DPRKN6ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct DPRKN6FMCache{uType, rateType, reducedRateType, uNoUnitsType, TabType} <: - NystromMutableCache + NystromMutableCache u::uType uprev::uType fsalfirst::rateType @@ -414,10 +462,12 @@ end tab::TabType end -function alg_cache(alg::DPRKN6FM, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DPRKN6FM, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} reduced_rate_prototype = rate_prototype.x[2] tab = DPRKN6FMConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) @@ -431,18 +481,20 @@ function alg_cache(alg::DPRKN6FM, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - DPRKN6FMCache(u, uprev, k1, k2, k3, k4, k5, k6, k, utilde, tmp, atmp, tab) + return DPRKN6FMCache(u, uprev, k1, k2, k3, k4, k5, k6, k, utilde, tmp, atmp, tab) end -function alg_cache(alg::DPRKN6FM, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DPRKN6FM, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - DPRKN6FMConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return DPRKN6FMConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct DPRKN8Cache{uType, rateType, reducedRateType, uNoUnitsType, TabType} <: - NystromMutableCache + NystromMutableCache u::uType uprev::uType fsalfirst::rateType @@ -461,10 +513,12 @@ end tab::TabType end -function alg_cache(alg::DPRKN8, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DPRKN8, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} reduced_rate_prototype = rate_prototype.x[2] tab = DPRKN8ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) @@ -481,18 +535,20 @@ function alg_cache(alg::DPRKN8, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - DPRKN8Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k, utilde, tmp, atmp, tab) + return DPRKN8Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k, utilde, tmp, atmp, tab) end -function alg_cache(alg::DPRKN8, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DPRKN8, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - DPRKN8ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return DPRKN8ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct DPRKN12Cache{uType, rateType, reducedRateType, uNoUnitsType, TabType} <: - NystromMutableCache + NystromMutableCache u::uType uprev::uType fsalfirst::rateType @@ -519,10 +575,12 @@ end tab::TabType end -function alg_cache(alg::DPRKN12, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DPRKN12, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} reduced_rate_prototype = rate_prototype.x[2] tab = DPRKN12ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) @@ -547,20 +605,23 @@ function alg_cache(alg::DPRKN12, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - DPRKN12Cache( + return DPRKN12Cache( u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, - k16, k17, k, utilde, tmp, atmp, tab) + k16, k17, k, utilde, tmp, atmp, tab + ) end -function alg_cache(alg::DPRKN12, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::DPRKN12, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - DPRKN12ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return DPRKN12ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct ERKN4Cache{uType, rateType, reducedRateType, uNoUnitsType, TabType} <: - NystromMutableCache + NystromMutableCache u::uType uprev::uType fsalfirst::rateType @@ -574,10 +635,12 @@ end tab::TabType end -function alg_cache(alg::ERKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ERKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} reduced_rate_prototype = rate_prototype.x[2] tab = ERKN4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) @@ -589,18 +652,20 @@ function alg_cache(alg::ERKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - ERKN4Cache(u, uprev, k1, k2, k3, k4, k, utilde, tmp, atmp, tab) + return ERKN4Cache(u, uprev, k1, k2, k3, k4, k, utilde, tmp, atmp, tab) end -function alg_cache(alg::ERKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ERKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - ERKN4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return ERKN4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct ERKN5Cache{uType, rateType, reducedRateType, uNoUnitsType, TabType} <: - NystromMutableCache + NystromMutableCache u::uType uprev::uType fsalfirst::rateType @@ -614,10 +679,12 @@ end tab::TabType end -function alg_cache(alg::ERKN5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ERKN5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} reduced_rate_prototype = rate_prototype.x[2] tab = ERKN5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) @@ -629,18 +696,20 @@ function alg_cache(alg::ERKN5, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - ERKN5Cache(u, uprev, k1, k2, k3, k4, k, utilde, tmp, atmp, tab) + return ERKN5Cache(u, uprev, k1, k2, k3, k4, k, utilde, tmp, atmp, tab) end -function alg_cache(alg::ERKN5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ERKN5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - ERKN5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return ERKN5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct ERKN7Cache{uType, rateType, reducedRateType, uNoUnitsType, TabType} <: - NystromMutableCache + NystromMutableCache u::uType uprev::uType fsalfirst::rateType @@ -657,10 +726,12 @@ end tab::TabType end -function alg_cache(alg::ERKN7, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ERKN7, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} reduced_rate_prototype = rate_prototype.x[2] tab = ERKN7ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) @@ -675,14 +746,16 @@ function alg_cache(alg::ERKN7, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - ERKN7Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k, utilde, tmp, atmp, tab) + return ERKN7Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k, utilde, tmp, atmp, tab) end -function alg_cache(alg::ERKN7, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ERKN7, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - ERKN7ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return ERKN7ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct RKN4Cache{uType, rateType, reducedRateType} <: NystromMutableCache @@ -695,24 +768,28 @@ end tmp::uType end -function alg_cache(alg::RKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} reduced_rate_prototype = rate_prototype.x[2] k₁ = zero(rate_prototype) k₂ = zero(reduced_rate_prototype) k₃ = zero(reduced_rate_prototype) k = zero(rate_prototype) tmp = zero(u) - RKN4Cache(u, uprev, k₁, k₂, k₃, k, tmp) + return RKN4Cache(u, uprev, k₁, k₂, k₃, k, tmp) end struct RKN4ConstantCache <: NystromConstantCache end -function alg_cache(alg::RKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RKN4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - RKN4ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return RKN4ConstantCache() end diff --git a/lib/OrdinaryDiffEqRKN/src/rkn_perform_step.jl b/lib/OrdinaryDiffEqRKN/src/rkn_perform_step.jl index eebc9ca595..abf4b71615 100644 --- a/lib/OrdinaryDiffEqRKN/src/rkn_perform_step.jl +++ b/lib/OrdinaryDiffEqRKN/src/rkn_perform_step.jl @@ -4,7 +4,8 @@ ## y₁ = y₀ + hy'₀ + h²∑b̄ᵢk'ᵢ ## y'₁ = y'₀ + h∑bᵢk'ᵢ -const NystromCCDefaultInitialization = Union{Nystrom4ConstantCache, FineRKN4ConstantCache, +const NystromCCDefaultInitialization = Union{ + Nystrom4ConstantCache, FineRKN4ConstantCache, FineRKN5ConstantCache, Nystrom4VelocityIndependentConstantCache, Nystrom5VelocityIndependentConstantCache, @@ -12,7 +13,8 @@ const NystromCCDefaultInitialization = Union{Nystrom4ConstantCache, FineRKN4Cons DPRKN4ConstantCache, DPRKN5ConstantCache, DPRKN6FMConstantCache, DPRKN8ConstantCache, DPRKN12ConstantCache, ERKN4ConstantCache, - ERKN5ConstantCache, ERKN7ConstantCache, RKN4ConstantCache} + ERKN5ConstantCache, ERKN7ConstantCache, RKN4ConstantCache, +} function initialize!(integrator, cache::NystromCCDefaultInitialization) integrator.kshortsize = 2 @@ -23,17 +25,19 @@ function initialize!(integrator, cache::NystromCCDefaultInitialization) ku = integrator.f.f2(duprev, uprev, integrator.p, integrator.t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.stats.nf2 += 1 - integrator.fsalfirst = ArrayPartition((kdu, ku)) + return integrator.fsalfirst = ArrayPartition((kdu, ku)) end -const NystromDefaultInitialization = Union{Nystrom4Cache, FineRKN4Cache, FineRKN5Cache, +const NystromDefaultInitialization = Union{ + Nystrom4Cache, FineRKN4Cache, FineRKN5Cache, Nystrom4VelocityIndependentCache, Nystrom5VelocityIndependentCache, IRKN3Cache, IRKN4Cache, DPRKN4Cache, DPRKN5Cache, DPRKN6FMCache, DPRKN8Cache, DPRKN12Cache, ERKN4Cache, - ERKN5Cache, ERKN7Cache} + ERKN5Cache, ERKN7Cache, +} function initialize!(integrator, cache::NystromDefaultInitialization) (; fsalfirst, k) = cache @@ -45,11 +49,13 @@ function initialize!(integrator, cache::NystromDefaultInitialization) integrator.f.f1(integrator.k[1].x[1], duprev, uprev, integrator.p, integrator.t) integrator.f.f2(integrator.k[1].x[2], duprev, uprev, integrator.p, integrator.t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - integrator.stats.nf2 += 1 + return integrator.stats.nf2 += 1 end -@muladd function perform_step!(integrator, cache::Nystrom4ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Nystrom4ConstantCache, + repeat_step = false + ) (; t, dt, f, p) = integrator duprev, uprev = integrator.uprev.x k₁ = integrator.fsalfirst.x[1] @@ -98,21 +104,21 @@ end ttmp = t + halfdt ## y₁ = y₀ + hy'₀ + h²∑b̄ᵢk'ᵢ - @.. broadcast=false ku=uprev + halfdt * duprev + eighth_dtsq * k₁ + @.. broadcast = false ku = uprev + halfdt * duprev + eighth_dtsq * k₁ ## y'₁ = y'₀ + h∑bᵢk'ᵢ - @.. broadcast=false kdu=duprev + halfdt * k₁ + @.. broadcast = false kdu = duprev + halfdt * k₁ f.f1(k₂, kdu, ku, p, ttmp) - @.. broadcast=false ku=uprev + halfdt * duprev + eighth_dtsq * k₁ - @.. broadcast=false kdu=duprev + halfdt * k₂ + @.. broadcast = false ku = uprev + halfdt * duprev + eighth_dtsq * k₁ + @.. broadcast = false kdu = duprev + halfdt * k₂ f.f1(k₃, kdu, ku, p, ttmp) - @.. broadcast=false ku=uprev + dt * duprev + half_dtsq * k₃ - @.. broadcast=false kdu=duprev + dt * k₃ + @.. broadcast = false ku = uprev + dt * duprev + half_dtsq * k₃ + @.. broadcast = false kdu = duprev + dt * k₃ f.f1(k₄, kdu, ku, p, t + dt) - @.. broadcast=false u=uprev + (dtsq / 6) * (k₁ + k₂ + k₃) + dt * duprev - @.. broadcast=false du=duprev + (dt / 6) * (k₁ + k₄ + 2 * (k₂ + k₃)) + @.. broadcast = false u = uprev + (dtsq / 6) * (k₁ + k₂ + k₃) + dt * duprev + @.. broadcast = false du = duprev + (dt / 6) * (k₁ + k₄ + 2 * (k₂ + k₃)) f.f1(k.x[1], du, u, p, t + dt) f.f2(k.x[2], du, u, p, t + dt) @@ -120,14 +126,18 @@ end integrator.stats.nf2 += 1 end -@muladd function perform_step!(integrator, cache::FineRKN4ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::FineRKN4ConstantCache, + repeat_step = false + ) (; t, dt, f, p) = integrator duprev, uprev = integrator.uprev.x - (; c2, c3, c4, c5, a21, a31, a32, a41, a43, a51, - a52, a53, a54, abar21, abar31, abar32, abar41, abar42, abar43, abar51, - abar52, abar53, abar54, b1, b3, b4, b5, bbar1, bbar3, bbar4, bbar5, btilde1, btilde3, btilde4, btilde5, bptilde1, - bptilde3, bptilde4, bptilde5) = cache + (; + c2, c3, c4, c5, a21, a31, a32, a41, a43, a51, + a52, a53, a54, abar21, abar31, abar32, abar41, abar42, abar43, abar51, + abar52, abar53, abar54, b1, b3, b4, b5, bbar1, bbar3, bbar4, bbar5, btilde1, btilde3, btilde4, btilde5, bptilde1, + bptilde3, bptilde4, bptilde5, + ) = cache k1 = integrator.fsalfirst.x[1] ku = uprev + dt * (c2 * duprev + dt * (a21 * k1)) @@ -162,9 +172,11 @@ end uhat = dtsq * (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5) # btilde2 = 0 duhat = dt * (bptilde1 * k1 + bptilde3 * k3 + bptilde4 * k4 + bptilde5 * k5) # bptilde2 = 0 utilde = ArrayPartition((duhat, uhat)) - atmp = calculate_residuals(utilde, integrator.uprev, integrator.u, + atmp = calculate_residuals( + utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -174,39 +186,41 @@ end du, u = integrator.u.x duprev, uprev = integrator.uprev.x (; tmp, atmp, fsalfirst, k2, k3, k4, k5, k, utilde) = cache - (; c2, c3, c4, c5, a21, a31, a32, a41, a43, a51, - a52, a53, a54, abar21, abar31, abar32, abar41, abar42, abar43, abar51, - abar52, abar53, abar54, b1, b3, b4, b5, bbar1, bbar3, bbar4, bbar5, btilde1, btilde3, btilde4, btilde5, bptilde1, - bptilde3, bptilde4, bptilde5) = cache.tab + (; + c2, c3, c4, c5, a21, a31, a32, a41, a43, a51, + a52, a53, a54, abar21, abar31, abar32, abar41, abar42, abar43, abar51, + abar52, abar53, abar54, b1, b3, b4, b5, bbar1, bbar3, bbar4, bbar5, btilde1, btilde3, btilde4, btilde5, bptilde1, + bptilde3, bptilde4, bptilde5, + ) = cache.tab kdu, ku = integrator.cache.tmp.x[1], integrator.cache.tmp.x[2] uidx = eachindex(integrator.uprev.x[2]) k1 = integrator.fsalfirst.x[1] - @.. broadcast=false ku=uprev + dt * (c2 * duprev + dt * (a21 * k1)) - @.. broadcast=false kdu=duprev + dt * (abar21 * k1) + @.. broadcast = false ku = uprev + dt * (c2 * duprev + dt * (a21 * k1)) + @.. broadcast = false kdu = duprev + dt * (abar21 * k1) f.f1(k2, kdu, ku, p, t + dt * c2) - @.. broadcast=false ku=uprev + dt * (c3 * duprev + dt * (a31 * k1 + a32 * k2)) - @.. broadcast=false kdu=duprev + dt * (abar31 * k1 + abar32 * k2) + @.. broadcast = false ku = uprev + dt * (c3 * duprev + dt * (a31 * k1 + a32 * k2)) + @.. broadcast = false kdu = duprev + dt * (abar31 * k1 + abar32 * k2) f.f1(k3, kdu, ku, p, t + dt * c3) - @.. broadcast=false ku=uprev + - dt * (c4 * duprev + dt * (a41 * k1 + a43 * k3)) # a42 = 0 - @.. broadcast=false kdu=duprev + dt * (abar41 * k1 + abar42 * k2 + abar43 * k3) + @.. broadcast = false ku = uprev + + dt * (c4 * duprev + dt * (a41 * k1 + a43 * k3)) # a42 = 0 + @.. broadcast = false kdu = duprev + dt * (abar41 * k1 + abar42 * k2 + abar43 * k3) f.f1(k4, kdu, ku, p, t + dt * c4) - @.. broadcast=false ku=uprev + - dt * - (c5 * duprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4)) - @.. broadcast=false kdu=duprev + - dt * (abar51 * k1 + abar52 * k2 + abar53 * k3 + abar54 * k4) + @.. broadcast = false ku = uprev + + dt * + (c5 * duprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4)) + @.. broadcast = false kdu = duprev + + dt * (abar51 * k1 + abar52 * k2 + abar53 * k3 + abar54 * k4) f.f1(k5, kdu, ku, p, t + dt * c5) - @.. broadcast=false u=uprev + - dt * (duprev + dt * (b1 * k1 + b3 * k3 + b4 * k4 + b5 * k5)) # b2 = 0 - @.. broadcast=false du=duprev + - dt * - (bbar1 * k1 + bbar3 * k3 + bbar4 * k4 + bbar5 * k5) # bbar2 = 0 + @.. broadcast = false u = uprev + + dt * (duprev + dt * (b1 * k1 + b3 * k3 + b4 * k4 + b5 * k5)) # b2 = 0 + @.. broadcast = false du = duprev + + dt * + (bbar1 * k1 + bbar3 * k3 + bbar4 * k4 + bbar5 * k5) # bbar2 = 0 f.f1(k.x[1], du, u, p, t + dt) f.f2(k.x[2], du, u, p, t + dt) @@ -215,22 +229,30 @@ end if integrator.opts.adaptive duhat, uhat = utilde.x dtsq = dt^2 - @.. broadcast=false uhat=dtsq * - (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + - btilde5 * k5) # btilde2 = 0 - @.. broadcast=false duhat=dt * - (bptilde1 * k1 + bptilde3 * k3 + bptilde4 * k4 + - bptilde5 * k5) # bptilde2 = 0 - - calculate_residuals!(atmp, utilde, integrator.uprev, integrator.u, + @.. broadcast = false uhat = dtsq * + ( + btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + + btilde5 * k5 + ) # btilde2 = 0 + @.. broadcast = false duhat = dt * + ( + bptilde1 * k1 + bptilde3 * k3 + bptilde4 * k4 + + bptilde5 * k5 + ) # bptilde2 = 0 + + calculate_residuals!( + atmp, utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end -@muladd function perform_step!(integrator, cache::FineRKN5ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::FineRKN5ConstantCache, + repeat_step = false + ) (; t, dt, f, p) = integrator duprev, uprev = integrator.uprev.x (; c2, c3, c4, c5, c6, c7, a21, a31, a32, a41, a43, a51, a52, a53, a54, a61, a62, a63, a64, a71, a73, a74, a75, abar21, abar31, abar32, abar41, abar42, abar43, abar51, abar52, abar53, abar54, abar61, abar62, abar63, abar64, abar65, abar71, abar73, abar74, abar75, abar76, b1, b3, b4, b5, bbar1, bbar3, bbar4, bbar5, bbar6, btilde1, btilde3, btilde4, btilde5, bptilde1, bptilde3, bptilde4, bptilde5, bptilde6, bptilde7) = cache @@ -253,17 +275,21 @@ end k5 = f.f1(kdu, ku, p, t + dt * c5) ku = uprev + - dt * (c6 * duprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4)) # a65 = 0 + dt * (c6 * duprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4)) # a65 = 0 kdu = duprev + - dt * (abar61 * k1 + abar62 * k2 + abar63 * k3 + abar64 * k4 + abar65 * k5) + dt * (abar61 * k1 + abar62 * k2 + abar63 * k3 + abar64 * k4 + abar65 * k5) k6 = f.f1(kdu, ku, p, t + dt * c6) ku = uprev + - dt * (c7 * duprev + - dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5)) # a72 = a76 = 0 + dt * ( + c7 * duprev + + dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5) + ) # a72 = a76 = 0 kdu = duprev + - dt * (abar71 * k1 + abar73 * k3 + abar74 * k4 + abar75 * k5 + - abar76 * k6) # abar72 = 0 + dt * ( + abar71 * k1 + abar73 * k3 + abar74 * k4 + abar75 * k5 + + abar76 * k6 + ) # abar72 = 0 k7 = f.f1(kdu, ku, p, t + dt * c7) u = uprev + dt * (duprev + dt * (b1 * k1 + b3 * k3 + b4 * k4 + b5 * k5)) # no b6, b7 @@ -279,12 +305,16 @@ end if integrator.opts.adaptive dtsq = dt^2 uhat = dtsq * (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5) - duhat = dt * (bptilde1 * k1 + bptilde3 * k3 + bptilde4 * k4 + bptilde5 * k5 + - bptilde6 * k6 + bptilde7 * k7) + duhat = dt * ( + bptilde1 * k1 + bptilde3 * k3 + bptilde4 * k4 + bptilde5 * k5 + + bptilde6 * k6 + bptilde7 * k7 + ) utilde = ArrayPartition((duhat, uhat)) - atmp = calculate_residuals(utilde, integrator.uprev, integrator.u, + atmp = calculate_residuals( + utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -299,47 +329,55 @@ end uidx = eachindex(integrator.uprev.x[2]) k1 = integrator.fsalfirst.x[1] - @.. broadcast=false ku=uprev + dt * (c2 * duprev + dt * (a21 * k1)) - @.. broadcast=false kdu=duprev + dt * (abar21 * k1) + @.. broadcast = false ku = uprev + dt * (c2 * duprev + dt * (a21 * k1)) + @.. broadcast = false kdu = duprev + dt * (abar21 * k1) f.f1(k2, kdu, ku, p, t + dt * c2) - @.. broadcast=false ku=uprev + dt * (c3 * duprev + dt * (a31 * k1 + a32 * k2)) - @.. broadcast=false kdu=duprev + dt * (abar31 * k1 + abar32 * k2) + @.. broadcast = false ku = uprev + dt * (c3 * duprev + dt * (a31 * k1 + a32 * k2)) + @.. broadcast = false kdu = duprev + dt * (abar31 * k1 + abar32 * k2) f.f1(k3, kdu, ku, p, t + dt * c3) - @.. broadcast=false ku=uprev + - dt * (c4 * duprev + dt * (a41 * k1 + a43 * k3)) # a42 = 0 - @.. broadcast=false kdu=duprev + dt * (abar41 * k1 + abar42 * k2 + abar43 * k3) + @.. broadcast = false ku = uprev + + dt * (c4 * duprev + dt * (a41 * k1 + a43 * k3)) # a42 = 0 + @.. broadcast = false kdu = duprev + dt * (abar41 * k1 + abar42 * k2 + abar43 * k3) f.f1(k4, kdu, ku, p, t + dt * c4) - @.. broadcast=false ku=uprev + - dt * - (c5 * duprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4)) - @.. broadcast=false kdu=duprev + - dt * (abar51 * k1 + abar52 * k2 + abar53 * k3 + abar54 * k4) + @.. broadcast = false ku = uprev + + dt * + (c5 * duprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4)) + @.. broadcast = false kdu = duprev + + dt * (abar51 * k1 + abar52 * k2 + abar53 * k3 + abar54 * k4) f.f1(k5, kdu, ku, p, t + dt * c5) - @.. broadcast=false ku=uprev + - dt * (c6 * duprev + - dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4)) # a65 = 0 - @.. broadcast=false kdu=duprev + - dt * (abar61 * k1 + abar62 * k2 + abar63 * k3 + abar64 * k4 + - abar65 * k5) + @.. broadcast = false ku = uprev + + dt * ( + c6 * duprev + + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4) + ) # a65 = 0 + @.. broadcast = false kdu = duprev + + dt * ( + abar61 * k1 + abar62 * k2 + abar63 * k3 + abar64 * k4 + + abar65 * k5 + ) f.f1(k6, kdu, ku, p, t + dt * c6) - @.. broadcast=false ku=uprev + - dt * (c7 * duprev + - dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5)) # a72 = a76 = 0 - @.. broadcast=false kdu=duprev + - dt * (abar71 * k1 + abar73 * k3 + abar74 * k4 + - abar75 * k5 + abar76 * k6) # abar72 = 0 + @.. broadcast = false ku = uprev + + dt * ( + c7 * duprev + + dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5) + ) # a72 = a76 = 0 + @.. broadcast = false kdu = duprev + + dt * ( + abar71 * k1 + abar73 * k3 + abar74 * k4 + + abar75 * k5 + abar76 * k6 + ) # abar72 = 0 f.f1(k7, kdu, ku, p, t + dt * c7) - @.. broadcast=false u=uprev + - dt * (duprev + dt * (b1 * k1 + b3 * k3 + b4 * k4 + b5 * k5)) - @.. broadcast=false du=duprev + - dt * - (bbar1 * k1 + bbar3 * k3 + bbar4 * k4 + bbar5 * k5 + bbar6 * k6) + @.. broadcast = false u = uprev + + dt * (duprev + dt * (b1 * k1 + b3 * k3 + b4 * k4 + b5 * k5)) + @.. broadcast = false du = duprev + + dt * + (bbar1 * k1 + bbar3 * k3 + bbar4 * k4 + bbar5 * k5 + bbar6 * k6) f.f1(k.x[1], du, u, p, t + dt) f.f2(k.x[2], du, u, p, t + dt) @@ -348,22 +386,30 @@ end if integrator.opts.adaptive duhat, uhat = utilde.x dtsq = dt^2 - @.. broadcast=false uhat=dtsq * - (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + - btilde5 * k5) - @.. broadcast=false duhat=dt * - (bptilde1 * k1 + bptilde3 * k3 + bptilde4 * k4 + - bptilde5 * k5 + bptilde6 * k6 + bptilde7 * k7) - - calculate_residuals!(atmp, utilde, integrator.uprev, integrator.u, + @.. broadcast = false uhat = dtsq * + ( + btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + + btilde5 * k5 + ) + @.. broadcast = false duhat = dt * + ( + bptilde1 * k1 + bptilde3 * k3 + bptilde4 * k4 + + bptilde5 * k5 + bptilde6 * k6 + bptilde7 * k7 + ) + + calculate_residuals!( + atmp, utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end -@muladd function perform_step!(integrator, cache::Nystrom4VelocityIndependentConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Nystrom4VelocityIndependentConstantCache, + repeat_step = false + ) (; t, dt, f, p) = integrator duprev, uprev = integrator.uprev.x k₁ = integrator.fsalfirst.x[1] @@ -391,8 +437,10 @@ end integrator.k[2] = integrator.fsallast end -@muladd function perform_step!(integrator, cache::Nystrom4VelocityIndependentCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Nystrom4VelocityIndependentCache, + repeat_step = false + ) (; t, dt, f, p) = integrator du, u = integrator.u.x duprev, uprev = integrator.uprev.x @@ -406,14 +454,14 @@ end ttmp = t + halfdt ## y₁ = y₀ + hy'₀ + h²∑b̄ᵢk'ᵢ - @.. broadcast=false ku=uprev + halfdt * duprev + eighth_dtsq * k₁ + @.. broadcast = false ku = uprev + halfdt * duprev + eighth_dtsq * k₁ f.f1(k₂, duprev, ku, p, ttmp) - @.. broadcast=false ku=uprev + dt * duprev + half_dtsq * k₂ + @.. broadcast = false ku = uprev + dt * duprev + half_dtsq * k₂ f.f1(k₃, duprev, ku, p, t + dt) - @.. broadcast=false u=uprev + (dtsq / 6) * (k₁ + 2 * k₂) + dt * duprev - @.. broadcast=false du=duprev + (dt / 6) * (k₁ + k₃ + 4 * k₂) + @.. broadcast = false u = uprev + (dtsq / 6) * (k₁ + 2 * k₂) + dt * duprev + @.. broadcast = false du = duprev + (dt / 6) * (k₁ + k₃ + 4 * k₂) f.f1(k.x[1], du, u, p, t + dt) f.f2(k.x[2], du, u, p, t + dt) @@ -441,12 +489,16 @@ end k₂x1 = f.f1(duprev, ku, p, t + c1 * dt) du = duprev + - dt * (b1 * k1cache.x[1] + bbar1 * k1cache.x[1] + b2 * (k₂x1 - k₂.x[1])) + dt * (b1 * k1cache.x[1] + bbar1 * k1cache.x[1] + b2 * (k₂x1 - k₂.x[1])) u = uprev + bconst1 * dt * duprev + dt * (bconst2 * duprev2 + dt * bbar2 * (k₂x1 - k₂.x[1])) - integrator.fsallast = ArrayPartition((f.f1(du, u, p, t + dt), - f.f2(du, u, p, t + dt))) + integrator.fsallast = ArrayPartition( + ( + f.f1(du, u, p, t + dt), + f.f2(du, u, p, t + dt), + ) + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) integrator.stats.nf2 += 1 copyto!(k₂.x[1], k₂.x[2]) @@ -470,21 +522,23 @@ end perform_step!(integrator, integrator.cache.onestep_cache) copyto!(k1cache.x[1], k.x[1]) f.f1(k1cache.x[2], duprev, uprev, p, t + c1 * dt) - @.. broadcast=false kdu=uprev + dt * (c1 * duprev + dt * a21 * k1cache.x[2]) + @.. broadcast = false kdu = uprev + dt * (c1 * duprev + dt * a21 * k1cache.x[2]) f.f1(k₂.x[1], duprev, kdu, p, t + c1 * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 2) else - @.. broadcast=false kdu=uprev2 + dt * (c1 * duprev2 + dt * a21 * k1cache.x[1]) - @.. broadcast=false ku=uprev + dt * (c1 * duprev + dt * a21 * k1cache.x[2]) + @.. broadcast = false kdu = uprev2 + dt * (c1 * duprev2 + dt * a21 * k1cache.x[1]) + @.. broadcast = false ku = uprev + dt * (c1 * duprev + dt * a21 * k1cache.x[2]) f.f1(k₂.x[2], duprev, ku, p, t + c1 * dt) @tight_loop_macros for i in uidx @inbounds u[i] = uprev[i] + bconst1 * dt * duprev[i] + - dt * - (bconst2 * duprev2[i] + dt * bbar2 * (k₂.x[2][i] - k₂.x[1][i])) + dt * + (bconst2 * duprev2[i] + dt * bbar2 * (k₂.x[2][i] - k₂.x[1][i])) @inbounds du[i] = duprev[i] + - dt * (b1 * k1cache.x[1][i] + bbar1 * k1cache.x[2][i] + - b2 * (k₂.x[2][i] - k₂.x[1][i])) + dt * ( + b1 * k1cache.x[1][i] + bbar1 * k1cache.x[2][i] + + b2 * (k₂.x[2][i] - k₂.x[1][i]) + ) end f.f1(k.x[1], du, u, p, t + dt) f.f2(k.x[2], du, u, p, t + dt) @@ -512,29 +566,35 @@ end perform_step!(integrator, integrator.cache.onestep_cache) copyto!(k1cache.x[1], k.x[1]) f.f1(k1cache.x[2], duprev, uprev, p, t + c1 * dt) - @.. broadcast=false kdu=uprev + dt * (c1 * duprev + dt * a21 * k1cache.x[1]) + @.. broadcast = false kdu = uprev + dt * (c1 * duprev + dt * a21 * k1cache.x[1]) f.f1(k₂.x[1], duprev, kdu, p, t + c1 * dt) - @.. broadcast=false kdu=uprev + dt * (c2 * duprev + dt * a32 * k1cache.x[2]) + @.. broadcast = false kdu = uprev + dt * (c2 * duprev + dt * a32 * k1cache.x[2]) f.f1(k₃.x[1], duprev, kdu, p, t + c1 * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) else - @.. broadcast=false ku=uprev + dt * (c1 * duprev + dt * a21 * k1cache.x[1]) - @.. broadcast=false kdu=uprev2 + dt * (c1 * duprev2 + dt * a21 * k1cache.x[2]) + @.. broadcast = false ku = uprev + dt * (c1 * duprev + dt * a21 * k1cache.x[1]) + @.. broadcast = false kdu = uprev2 + dt * (c1 * duprev2 + dt * a21 * k1cache.x[2]) f.f1(k₂.x[2], duprev, ku, p, t + c1 * dt) - @.. broadcast=false ku=uprev + dt * (c2 * duprev + dt * a32 * k₂.x[2]) - @.. broadcast=false kdu=uprev2 + dt * (c2 * duprev2 + dt * a32 * k₂.x[1]) + @.. broadcast = false ku = uprev + dt * (c2 * duprev + dt * a32 * k₂.x[2]) + @.. broadcast = false kdu = uprev2 + dt * (c2 * duprev2 + dt * a32 * k₂.x[1]) f.f1(k₃.x[2], duprev, ku, p, t + c2 * dt) @tight_loop_macros for i in uidx @inbounds u[i] = uprev[i] + dt * bconst1 * duprev[i] + - dt * (bconst2 * duprev2[i] + - dt * (bbar2 * (k₂.x[2][i] - k₂.x[1][i]) + - bbar3 * (k₃.x[2][i] - k₃.x[1][i]))) + dt * ( + bconst2 * duprev2[i] + + dt * ( + bbar2 * (k₂.x[2][i] - k₂.x[1][i]) + + bbar3 * (k₃.x[2][i] - k₃.x[1][i]) + ) + ) @inbounds du[i] = duprev[i] + - dt * (b1 * k1cache.x[1][i] + bbar1 * k1cache.x[2][i] + - b2 * (k₂.x[2][i] - k₂.x[1][i]) + - b3 * (k₃.x[2][i] - k₃.x[1][i])) + dt * ( + b1 * k1cache.x[1][i] + bbar1 * k1cache.x[2][i] + + b2 * (k₂.x[2][i] - k₂.x[1][i]) + + b3 * (k₃.x[2][i] - k₃.x[1][i]) + ) end f.f1(k.x[1], du, u, p, t + dt) f.f2(k.x[2], du, u, p, t + dt) @@ -547,8 +607,10 @@ end end # end if end -@muladd function perform_step!(integrator, cache::Nystrom5VelocityIndependentConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Nystrom5VelocityIndependentConstantCache, + repeat_step = false + ) (; t, dt, f, p) = integrator duprev, uprev = integrator.uprev.x (; c1, c2, a21, a31, a32, a41, a42, a43, bbar1, bbar2, bbar3, b1, b2, b3, b4) = cache @@ -574,8 +636,10 @@ end integrator.k[2] = integrator.fsallast end -@muladd function perform_step!(integrator, cache::Nystrom5VelocityIndependentCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Nystrom5VelocityIndependentCache, + repeat_step = false + ) (; t, dt, f, p) = integrator du, u = integrator.u.x duprev, uprev = integrator.uprev.x @@ -585,25 +649,25 @@ end kdu, ku = integrator.cache.tmp.x[1], integrator.cache.tmp.x[2] k₁ = integrator.fsalfirst.x[1] - @.. broadcast=false ku=uprev + dt * (c1 * duprev + dt * a21 * k₁) + @.. broadcast = false ku = uprev + dt * (c1 * duprev + dt * a21 * k₁) f.f1(k₂, du, ku, p, t + c1 * dt) - @.. broadcast=false ku=uprev + dt * (c2 * duprev + dt * (a31 * k₁ + a32 * k₂)) + @.. broadcast = false ku = uprev + dt * (c2 * duprev + dt * (a31 * k₁ + a32 * k₂)) f.f1(k₃, du, ku, p, t + c2 * dt) #@tight_loop_macros for i in uidx # @inbounds ku[i] = uprev[i] + dt*(duprev[i] + dt*(a41*k₁[i] + a42*k₂[i] + a43*k₃[i])) #end - @.. broadcast=false ku=uprev + dt * (duprev + dt * (a41 * k₁ + a42 * k₂ + a43 * k₃)) + @.. broadcast = false ku = uprev + dt * (duprev + dt * (a41 * k₁ + a42 * k₂ + a43 * k₃)) f.f1(k₄, duprev, ku, p, t + dt) #@tight_loop_macros for i in uidx # @inbounds u[i] = uprev[i] + dt*(duprev[i] + dt*(bbar1*k₁[i] + bbar2*k₂[i] + bbar3*k₃[i])) # @inbounds du[i] = duprev[i] + dt*(b1*k₁[i] + b2*k₂[i] + b3*k₃[i] + b4*k₄[i]) #end - @.. broadcast=false u=uprev + - dt * (duprev + dt * (bbar1 * k₁ + bbar2 * k₂ + bbar3 * k₃)) - @.. broadcast=false du=duprev + dt * (b1 * k₁ + b2 * k₂ + b3 * k₃ + b4 * k₄) + @.. broadcast = false u = uprev + + dt * (duprev + dt * (bbar1 * k₁ + bbar2 * k₂ + bbar3 * k₃)) + @.. broadcast = false du = duprev + dt * (b1 * k₁ + b2 * k₂ + b3 * k₃ + b4 * k₄) f.f1(k.x[1], du, u, p, t + dt) f.f2(k.x[2], du, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 4) @@ -642,9 +706,11 @@ end uhat = dtsq * (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4) duhat = dt * (bptilde1 * k1 + bptilde2 * k2 + bptilde3 * k3 + bptilde4 * k4) utilde = ArrayPartition((duhat, uhat)) - atmp = calculate_residuals(utilde, integrator.uprev, integrator.u, + atmp = calculate_residuals( + utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -659,22 +725,24 @@ end uidx = eachindex(integrator.uprev.x[2]) k1 = integrator.fsalfirst.x[1] - @.. broadcast=false ku=uprev + dt * (c1 * duprev + dt * a21 * k1) + @.. broadcast = false ku = uprev + dt * (c1 * duprev + dt * a21 * k1) f.f1(k2, duprev, ku, p, t + dt * c1) - @.. broadcast=false ku=uprev + dt * (c2 * duprev + dt * (a31 * k1 + a32 * k2)) + @.. broadcast = false ku = uprev + dt * (c2 * duprev + dt * (a31 * k1 + a32 * k2)) f.f1(k3, duprev, ku, p, t + dt * c2) - @.. broadcast=false ku=uprev + - dt * (c3 * duprev + dt * (a41 * k1 + a42 * k2 + a43 * k3)) + @.. broadcast = false ku = uprev + + dt * (c3 * duprev + dt * (a41 * k1 + a42 * k2 + a43 * k3)) f.f1(k4, duprev, ku, p, t + dt * c3) @tight_loop_macros for i in uidx @inbounds u[i] = uprev[i] + - dt * (duprev[i] + - dt * (b1 * k1[i] + b2 * k2[i] + b3 * k3[i])) + dt * ( + duprev[i] + + dt * (b1 * k1[i] + b2 * k2[i] + b3 * k3[i]) + ) @inbounds du[i] = duprev[i] + - dt * (bp1 * k1[i] + bp2 * k2[i] + bp3 * k3[i] + bp4 * k4[i]) + dt * (bp1 * k1[i] + bp2 * k2[i] + bp3 * k3[i] + bp4 * k4[i]) end f.f1(k.x[1], du, u, p, t + dt) @@ -686,15 +754,21 @@ end dtsq = dt^2 @tight_loop_macros for i in uidx @inbounds uhat[i] = dtsq * - (btilde1 * k1[i] + btilde2 * k2[i] + btilde3 * k3[i] + - btilde4 * k4[i]) + ( + btilde1 * k1[i] + btilde2 * k2[i] + btilde3 * k3[i] + + btilde4 * k4[i] + ) @inbounds duhat[i] = dt * - (bptilde1 * k1[i] + bptilde2 * k2[i] + bptilde3 * k3[i] + - bptilde4 * k4[i]) + ( + bptilde1 * k1[i] + bptilde2 * k2[i] + bptilde3 * k3[i] + + bptilde4 * k4[i] + ) end - calculate_residuals!(atmp, utilde, integrator.uprev, integrator.u, + calculate_residuals!( + atmp, utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -718,13 +792,13 @@ end k5 = f.f1(duprev, ku, p, t + dt * c4) ku = uprev + - dt * (c5 * duprev + dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5)) + dt * (c5 * duprev + dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5)) k6 = f.f1(duprev, ku, p, t + dt * c5) u = uprev + dt * (duprev + dt * (b1 * k1 + b3 * k3 + b4 * k4 + b5 * k5)) du = duprev + - dt * (bp1 * k1 + bp3 * k3 + bp4 * k4 + bp5 * k5 + bp6 * k6) + dt * (bp1 * k1 + bp3 * k3 + bp4 * k4 + bp5 * k5 + bp6 * k6) integrator.u = ArrayPartition((du, u)) integrator.fsallast = ArrayPartition((f.f1(du, u, p, t + dt), f.f2(du, u, p, t + dt))) @@ -736,12 +810,16 @@ end if integrator.opts.adaptive dtsq = dt^2 uhat = dtsq * (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5) - duhat = dt * (bptilde1 * k1 + bptilde3 * k3 + bptilde4 * k4 + bptilde5 * k5 + - bptilde6 * k6) + duhat = dt * ( + bptilde1 * k1 + bptilde3 * k3 + bptilde4 * k4 + bptilde5 * k5 + + bptilde6 * k6 + ) utilde = ArrayPartition((duhat, uhat)) - atmp = calculate_residuals(utilde, integrator.uprev, integrator.u, + atmp = calculate_residuals( + utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -756,37 +834,45 @@ end uidx = eachindex(integrator.uprev.x[2]) k1 = integrator.fsalfirst.x[1] - @.. broadcast=false ku=uprev + dt * (c1 * duprev + dt * a21 * k1) + @.. broadcast = false ku = uprev + dt * (c1 * duprev + dt * a21 * k1) f.f1(k2, duprev, ku, p, t + dt * c1) - @.. broadcast=false ku=uprev + dt * (c2 * duprev + dt * (a31 * k1 + a32 * k2)) + @.. broadcast = false ku = uprev + dt * (c2 * duprev + dt * (a31 * k1 + a32 * k2)) f.f1(k3, duprev, ku, p, t + dt * c2) - @.. broadcast=false ku=uprev + - dt * (c3 * duprev + dt * (a41 * k1 + a43 * k3)) + @.. broadcast = false ku = uprev + + dt * (c3 * duprev + dt * (a41 * k1 + a43 * k3)) f.f1(k4, duprev, ku, p, t + dt * c3) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c4 * duprev[i] + - dt * (a51 * k1[i] + a53 * k3[i] + a54 * k4[i])) + dt * ( + c4 * duprev[i] + + dt * (a51 * k1[i] + a53 * k3[i] + a54 * k4[i]) + ) end f.f1(k5, duprev, ku, p, t + dt * c4) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c5 * duprev[i] + - dt * (a61 * k1[i] + a63 * k3[i] + a64 * k4[i] + a65 * k5[i])) + dt * ( + c5 * duprev[i] + + dt * (a61 * k1[i] + a63 * k3[i] + a64 * k4[i] + a65 * k5[i]) + ) end f.f1(k6, duprev, ku, p, t + dt * c5) @tight_loop_macros for i in uidx @inbounds u[i] = uprev[i] + - dt * (duprev[i] + - dt * (b1 * k1[i] + b3 * k3[i] + b4 * k4[i] + b5 * k5[i])) + dt * ( + duprev[i] + + dt * (b1 * k1[i] + b3 * k3[i] + b4 * k4[i] + b5 * k5[i]) + ) @inbounds du[i] = duprev[i] + - dt * (bp1 * k1[i] + bp3 * k3[i] + bp4 * k4[i] + bp5 * k5[i] + - bp6 * k6[i]) + dt * ( + bp1 * k1[i] + bp3 * k3[i] + bp4 * k4[i] + bp5 * k5[i] + + bp6 * k6[i] + ) end f.f1(k.x[1], du, u, p, t + dt) @@ -798,15 +884,21 @@ end dtsq = dt^2 @tight_loop_macros for i in uidx @inbounds uhat[i] = dtsq * - (btilde1 * k1[i] + btilde3 * k3[i] + btilde4 * k4[i] + - btilde5 * k5[i]) + ( + btilde1 * k1[i] + btilde3 * k3[i] + btilde4 * k4[i] + + btilde5 * k5[i] + ) @inbounds duhat[i] = dt * - (bptilde1 * k1[i] + bptilde3 * k3[i] + bptilde4 * k4[i] + - bptilde5 * k5[i] + bptilde6 * k6[i]) + ( + bptilde1 * k1[i] + bptilde3 * k3[i] + bptilde4 * k4[i] + + bptilde5 * k5[i] + bptilde6 * k6[i] + ) end - calculate_residuals!(atmp, utilde, integrator.uprev, integrator.u, + calculate_residuals!( + atmp, utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -827,7 +919,7 @@ function initialize!(integrator, cache::DPRKN6ConstantCache) @inbounds for i in 2:(integrator.kshortsize - 1) integrator.k[i] = zero(integrator.fsalfirst) end - integrator.k[integrator.kshortsize] = integrator.fsallast + return integrator.k[integrator.kshortsize] = integrator.fsallast end @muladd function perform_step!(integrator, cache::DPRKN6ConstantCache, repeat_step = false) @@ -872,13 +964,17 @@ end if integrator.opts.adaptive dtsq = dt^2 uhat = dtsq * - (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5) - duhat = dt * (bptilde1 * k1 + bptilde3 * k3 + bptilde4 * k4 + bptilde5 * k5 + - bptilde6 * k6) + (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5) + duhat = dt * ( + bptilde1 * k1 + bptilde3 * k3 + bptilde4 * k4 + bptilde5 * k5 + + bptilde6 * k6 + ) utilde = ArrayPartition((duhat, uhat)) - atmp = calculate_residuals(utilde, integrator.uprev, integrator.u, + atmp = calculate_residuals( + utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -894,7 +990,7 @@ function initialize!(integrator, cache::DPRKN6Cache) integrator.f.f1(integrator.fsallast.x[1], duprev, uprev, integrator.p, integrator.t) integrator.f.f2(integrator.fsallast.x[2], duprev, uprev, integrator.p, integrator.t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - integrator.stats.nf2 += 1 + return integrator.stats.nf2 += 1 end @muladd function perform_step!(integrator, cache::DPRKN6Cache, repeat_step = false) @@ -907,31 +1003,31 @@ end uidx = eachindex(integrator.uprev.x[2]) k1 = integrator.fsalfirst.x[1] - @.. broadcast=false ku=uprev + dt * (c1 * duprev + dt * a21 * k1) + @.. broadcast = false ku = uprev + dt * (c1 * duprev + dt * a21 * k1) f.f1(k2, du, ku, p, t + dt * c1) - @.. broadcast=false ku=uprev + dt * (c2 * duprev + dt * (a31 * k1 + a32 * k2)) + @.. broadcast = false ku = uprev + dt * (c2 * duprev + dt * (a31 * k1 + a32 * k2)) f.f1(k3, du, ku, p, t + dt * c2) - @.. broadcast=false ku=uprev + - dt * (c3 * duprev + dt * (a41 * k1 + a42 * k2 + a43 * k3)) + @.. broadcast = false ku = uprev + + dt * (c3 * duprev + dt * (a41 * k1 + a42 * k2 + a43 * k3)) f.f1(k4, du, ku, p, t + dt * c3) - @.. broadcast=false ku=uprev + - dt * - (c4 * duprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4)) + @.. broadcast = false ku = uprev + + dt * + (c4 * duprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4)) f.f1(k5, du, ku, p, t + dt * c4) - @.. broadcast=false ku=uprev + - dt * - (c5 * duprev + dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5)) # no a62 + @.. broadcast = false ku = uprev + + dt * + (c5 * duprev + dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5)) # no a62 f.f1(k6, du, ku, p, t + dt * c5) - @.. broadcast=false u=uprev + - dt * (duprev + dt * (b1 * k1 + b3 * k3 + b4 * k4 + b5 * k5)) # b1 -- b5, no b2 - @.. broadcast=false du=duprev + - dt * (bp1 * k1 + bp3 * k3 + bp4 * k4 + bp5 * k5 + bp6 * k6) # bp1 -- bp6, no bp2 + @.. broadcast = false u = uprev + + dt * (duprev + dt * (b1 * k1 + b3 * k3 + b4 * k4 + b5 * k5)) # b1 -- b5, no b2 + @.. broadcast = false du = duprev + + dt * (bp1 * k1 + bp3 * k3 + bp4 * k4 + bp5 * k5 + bp6 * k6) # bp1 -- bp6, no bp2 #= @tight_loop_macros for i in uidx @@ -947,19 +1043,27 @@ end if integrator.opts.adaptive duhat, uhat = utilde.x dtsq = dt^2 - @.. broadcast=false uhat=dtsq * (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + - btilde4 * k4 + btilde5 * k5) - @.. broadcast=false duhat=dt * (bptilde1 * k1 + bptilde3 * k3 + bptilde4 * k4 + - bptilde5 * k5 + bptilde6 * k6) - calculate_residuals!(atmp, utilde, integrator.uprev, integrator.u, + @.. broadcast = false uhat = dtsq * ( + btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + + btilde4 * k4 + btilde5 * k5 + ) + @.. broadcast = false duhat = dt * ( + bptilde1 * k1 + bptilde3 * k3 + bptilde4 * k4 + + bptilde5 * k5 + bptilde6 * k6 + ) + calculate_residuals!( + atmp, utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end -@muladd function perform_step!(integrator, cache::DPRKN6FMConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::DPRKN6FMConstantCache, + repeat_step = false + ) (; t, dt, f, p) = integrator duprev, uprev = integrator.uprev.x (; c1, c2, c3, c4, c5, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, b1, b2, b3, b4, b5, bp1, bp2, bp3, bp4, bp5, bp6, btilde1, btilde2, btilde3, btilde4, btilde5, bptilde1, bptilde2, bptilde3, bptilde4, bptilde5) = cache @@ -978,13 +1082,13 @@ end k5 = f.f1(duprev, ku, p, t + dt * c4) ku = uprev + - dt * (c5 * duprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5)) + dt * (c5 * duprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5)) k6 = f.f1(duprev, ku, p, t + dt * c5) u = uprev + dt * (duprev + dt * (b1 * k1 + b2 * k2 + b3 * k3 + b4 * k4 + b5 * k5)) du = duprev + - dt * (bp1 * k1 + bp2 * k2 + bp3 * k3 + bp4 * k4 + bp5 * k5 + bp6 * k6) + dt * (bp1 * k1 + bp2 * k2 + bp3 * k3 + bp4 * k4 + bp5 * k5 + bp6 * k6) integrator.u = ArrayPartition((du, u)) integrator.fsallast = ArrayPartition((f.f1(du, u, p, t + dt), f.f2(du, u, p, t + dt))) @@ -996,13 +1100,17 @@ end if integrator.opts.adaptive dtsq = dt^2 uhat = dtsq * - (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5) - duhat = dt * (bptilde1 * k1 + bptilde2 * k2 + bptilde3 * k3 + bptilde4 * k4 + - bptilde5 * k5) + (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5) + duhat = dt * ( + bptilde1 * k1 + bptilde2 * k2 + bptilde3 * k3 + bptilde4 * k4 + + bptilde5 * k5 + ) utilde = ArrayPartition((duhat, uhat)) - atmp = calculate_residuals(utilde, integrator.uprev, integrator.u, + atmp = calculate_residuals( + utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -1017,39 +1125,49 @@ end uidx = eachindex(integrator.uprev.x[2]) k1 = integrator.fsalfirst.x[1] - @.. broadcast=false ku=uprev + dt * (c1 * duprev + dt * a21 * k1) + @.. broadcast = false ku = uprev + dt * (c1 * duprev + dt * a21 * k1) f.f1(k2, duprev, ku, p, t + dt * c1) - @.. broadcast=false ku=uprev + dt * (c2 * duprev + dt * (a31 * k1 + a32 * k2)) + @.. broadcast = false ku = uprev + dt * (c2 * duprev + dt * (a31 * k1 + a32 * k2)) f.f1(k3, duprev, ku, p, t + dt * c2) - @.. broadcast=false ku=uprev + - dt * (c3 * duprev + dt * (a41 * k1 + a42 * k2 + a43 * k3)) + @.. broadcast = false ku = uprev + + dt * (c3 * duprev + dt * (a41 * k1 + a42 * k2 + a43 * k3)) f.f1(k4, duprev, ku, p, t + dt * c3) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c4 * duprev[i] + - dt * (a51 * k1[i] + a52 * k2[i] + a53 * k3[i] + a54 * k4[i])) + dt * ( + c4 * duprev[i] + + dt * (a51 * k1[i] + a52 * k2[i] + a53 * k3[i] + a54 * k4[i]) + ) end f.f1(k5, duprev, ku, p, t + dt * c4) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c5 * duprev[i] + - dt * (a61 * k1[i] + a62 * k2[i] + a63 * k3[i] + a64 * k4[i] + - a65 * k5[i])) + dt * ( + c5 * duprev[i] + + dt * ( + a61 * k1[i] + a62 * k2[i] + a63 * k3[i] + a64 * k4[i] + + a65 * k5[i] + ) + ) end f.f1(k6, duprev, ku, p, t + dt * c5) @tight_loop_macros for i in uidx @inbounds u[i] = uprev[i] + - dt * (duprev[i] + - dt * - (b1 * k1[i] + b2 * k2[i] + b3 * k3[i] + b4 * k4[i] + b5 * k5[i])) + dt * ( + duprev[i] + + dt * + (b1 * k1[i] + b2 * k2[i] + b3 * k3[i] + b4 * k4[i] + b5 * k5[i]) + ) @inbounds du[i] = duprev[i] + - dt * (bp1 * k1[i] + bp2 * k2[i] + bp3 * k3[i] + bp4 * k4[i] + - bp5 * k5[i] + bp6 * k6[i]) + dt * ( + bp1 * k1[i] + bp2 * k2[i] + bp3 * k3[i] + bp4 * k4[i] + + bp5 * k5[i] + bp6 * k6[i] + ) end f.f1(k.x[1], du, u, p, t + dt) @@ -1061,15 +1179,21 @@ end dtsq = dt^2 @tight_loop_macros for i in uidx @inbounds uhat[i] = dtsq * - (btilde1 * k1[i] + btilde2 * k2[i] + btilde3 * k3[i] + - btilde4 * k4[i] + btilde5 * k5[i]) + ( + btilde1 * k1[i] + btilde2 * k2[i] + btilde3 * k3[i] + + btilde4 * k4[i] + btilde5 * k5[i] + ) @inbounds duhat[i] = dt * - (bptilde1 * k1[i] + bptilde2 * k2[i] + bptilde3 * k3[i] + - bptilde4 * k4[i] + bptilde5 * k5[i]) + ( + bptilde1 * k1[i] + bptilde2 * k2[i] + bptilde3 * k3[i] + + bptilde4 * k4[i] + bptilde5 * k5[i] + ) end - calculate_residuals!(atmp, utilde, integrator.uprev, integrator.u, + calculate_residuals!( + atmp, utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -1093,28 +1217,34 @@ end k5 = f.f1(duprev, ku, p, t + dt * c4) ku = uprev + - dt * (c5 * duprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5)) + dt * (c5 * duprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5)) k6 = f.f1(duprev, ku, p, t + dt * c5) ku = uprev + - dt * (c6 * duprev + - dt * (a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6)) + dt * ( + c6 * duprev + + dt * (a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6) + ) k7 = f.f1(duprev, ku, p, t + dt * c6) ku = uprev + - dt * (c7 * duprev + - dt * (a81 * k1 + a82 * k2 + a83 * k3 + a84 * k4 + a85 * k5 + a86 * k6 + a87 * k7)) + dt * ( + c7 * duprev + + dt * (a81 * k1 + a82 * k2 + a83 * k3 + a84 * k4 + a85 * k5 + a86 * k6 + a87 * k7) + ) k8 = f.f1(duprev, ku, p, t + dt * c7) ku = uprev + - dt * (c8 * duprev + - dt * (a91 * k1 + a93 * k3 + a94 * k4 + a95 * k5 + a96 * k6 + a97 * k7)) # no a92 & a98 + dt * ( + c8 * duprev + + dt * (a91 * k1 + a93 * k3 + a94 * k4 + a95 * k5 + a96 * k6 + a97 * k7) + ) # no a92 & a98 k9 = f.f1(duprev, ku, p, t + dt * c8) u = uprev + dt * (duprev + dt * (b1 * k1 + b3 * k3 + b4 * k4 + b5 * k5 + b6 * k6 + b7 * k7)) # b1 -- b7, no b2 du = duprev + - dt * (bp1 * k1 + bp3 * k3 + bp4 * k4 + bp5 * k5 + bp6 * k6 + bp7 * k7 + bp8 * k8) # bp1 -- bp8, no bp2 + dt * (bp1 * k1 + bp3 * k3 + bp4 * k4 + bp5 * k5 + bp6 * k6 + bp7 * k7 + bp8 * k8) # bp1 -- bp8, no bp2 integrator.u = ArrayPartition((du, u)) integrator.fsallast = ArrayPartition((f.f1(du, u, p, t + dt), f.f2(du, u, p, t + dt))) @@ -1126,14 +1256,20 @@ end if integrator.opts.adaptive dtsq = dt^2 uhat = dtsq * - (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + - btilde7 * k7) - duhat = dt * (bptilde1 * k1 + bptilde3 * k3 + bptilde4 * k4 + bptilde5 * k5 + - bptilde6 * k6 + bptilde7 * k7 + bptilde8 * k8 + bptilde9 * k9) + ( + btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + + btilde7 * k7 + ) + duhat = dt * ( + bptilde1 * k1 + bptilde3 * k3 + bptilde4 * k4 + bptilde5 * k5 + + bptilde6 * k6 + bptilde7 * k7 + bptilde8 * k8 + bptilde9 * k9 + ) utilde = ArrayPartition((duhat, uhat)) - atmp = calculate_residuals(utilde, integrator.uprev, integrator.u, + atmp = calculate_residuals( + utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -1148,64 +1284,88 @@ end uidx = eachindex(integrator.uprev.x[2]) k1 = integrator.fsalfirst.x[1] - @.. broadcast=false ku=uprev + dt * (c1 * duprev + dt * a21 * k1) + @.. broadcast = false ku = uprev + dt * (c1 * duprev + dt * a21 * k1) f.f1(k2, duprev, ku, p, t + dt * c1) - @.. broadcast=false ku=uprev + dt * (c2 * duprev + dt * (a31 * k1 + a32 * k2)) + @.. broadcast = false ku = uprev + dt * (c2 * duprev + dt * (a31 * k1 + a32 * k2)) f.f1(k3, duprev, ku, p, t + dt * c2) - @.. broadcast=false ku=uprev + - dt * (c3 * duprev + dt * (a41 * k1 + a42 * k2 + a43 * k3)) + @.. broadcast = false ku = uprev + + dt * (c3 * duprev + dt * (a41 * k1 + a42 * k2 + a43 * k3)) f.f1(k4, duprev, ku, p, t + dt * c3) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c4 * duprev[i] + - dt * (a51 * k1[i] + a52 * k2[i] + a53 * k3[i] + a54 * k4[i])) + dt * ( + c4 * duprev[i] + + dt * (a51 * k1[i] + a52 * k2[i] + a53 * k3[i] + a54 * k4[i]) + ) end f.f1(k5, duprev, ku, p, t + dt * c4) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c5 * duprev[i] + - dt * (a61 * k1[i] + a62 * k2[i] + a63 * k3[i] + a64 * k4[i] + - a65 * k5[i])) + dt * ( + c5 * duprev[i] + + dt * ( + a61 * k1[i] + a62 * k2[i] + a63 * k3[i] + a64 * k4[i] + + a65 * k5[i] + ) + ) end f.f1(k6, duprev, ku, p, t + dt * c5) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c6 * duprev[i] + - dt * (a71 * k1[i] + a72 * k2[i] + a73 * k3[i] + a74 * k4[i] + - a75 * k5[i] + a76 * k6[i])) + dt * ( + c6 * duprev[i] + + dt * ( + a71 * k1[i] + a72 * k2[i] + a73 * k3[i] + a74 * k4[i] + + a75 * k5[i] + a76 * k6[i] + ) + ) end f.f1(k7, duprev, ku, p, t + dt * c6) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c7 * duprev[i] + - dt * (a81 * k1[i] + a82 * k2[i] + a83 * k3[i] + a84 * k4[i] + - a85 * k5[i] + a86 * k6[i] + a87 * k7[i])) + dt * ( + c7 * duprev[i] + + dt * ( + a81 * k1[i] + a82 * k2[i] + a83 * k3[i] + a84 * k4[i] + + a85 * k5[i] + a86 * k6[i] + a87 * k7[i] + ) + ) end f.f1(k8, duprev, ku, p, t + dt * c7) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c8 * duprev[i] + - dt * (a91 * k1[i] + a93 * k3[i] + a94 * k4[i] + a95 * k5[i] + - a96 * k6[i] + a97 * k7[i])) # no a92 & a98 + dt * ( + c8 * duprev[i] + + dt * ( + a91 * k1[i] + a93 * k3[i] + a94 * k4[i] + a95 * k5[i] + + a96 * k6[i] + a97 * k7[i] + ) + ) # no a92 & a98 end f.f1(k9, duprev, ku, p, t + dt * c8) @tight_loop_macros for i in uidx @inbounds u[i] = uprev[i] + - dt * (duprev[i] + - dt * - (b1 * k1[i] + b3 * k3[i] + b4 * k4[i] + b5 * k5[i] + b6 * k6[i] + - b7 * k7[i])) # b1 -- b7, no b2 + dt * ( + duprev[i] + + dt * + ( + b1 * k1[i] + b3 * k3[i] + b4 * k4[i] + b5 * k5[i] + b6 * k6[i] + + b7 * k7[i] + ) + ) # b1 -- b7, no b2 @inbounds du[i] = duprev[i] + - dt * (bp1 * k1[i] + bp3 * k3[i] + bp4 * k4[i] + bp5 * k5[i] + - bp6 * k6[i] + bp7 * k7[i] + bp8 * k8[i]) # bp1 -- bp8, no bp2 + dt * ( + bp1 * k1[i] + bp3 * k3[i] + bp4 * k4[i] + bp5 * k5[i] + + bp6 * k6[i] + bp7 * k7[i] + bp8 * k8[i] + ) # bp1 -- bp8, no bp2 end f.f1(k.x[1], du, u, p, t + dt) @@ -1217,16 +1377,22 @@ end dtsq = dt^2 @tight_loop_macros for i in uidx @inbounds uhat[i] = dtsq * - (btilde1 * k1[i] + btilde3 * k3[i] + btilde4 * k4[i] + - btilde5 * k5[i] + btilde6 * k6[i] + btilde7 * k7[i]) + ( + btilde1 * k1[i] + btilde3 * k3[i] + btilde4 * k4[i] + + btilde5 * k5[i] + btilde6 * k6[i] + btilde7 * k7[i] + ) @inbounds duhat[i] = dt * - (bptilde1 * k1[i] + bptilde3 * k3[i] + bptilde4 * k4[i] + - bptilde5 * k5[i] + bptilde6 * k6[i] + bptilde7 * k7[i] + - bptilde8 * k8[i] + bptilde9 * k9[i]) + ( + bptilde1 * k1[i] + bptilde3 * k3[i] + bptilde4 * k4[i] + + bptilde5 * k5[i] + bptilde6 * k6[i] + bptilde7 * k7[i] + + bptilde8 * k8[i] + bptilde9 * k9[i] + ) end - calculate_residuals!(atmp, utilde, integrator.uprev, integrator.u, + calculate_residuals!( + atmp, utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -1253,77 +1419,117 @@ end k6 = f.f1(duprev, ku, p, t + dt * c5) ku = uprev + - dt * (c6 * duprev + dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6)) # no a72 + dt * (c6 * duprev + dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6)) # no a72 k7 = f.f1(duprev, ku, p, t + dt * c6) ku = uprev + - dt * (c7 * duprev + dt * (a81 * k1 + a84 * k4 + a85 * k5 + a86 * k6 + a87 * k7)) # no a82, a83 + dt * (c7 * duprev + dt * (a81 * k1 + a84 * k4 + a85 * k5 + a86 * k6 + a87 * k7)) # no a82, a83 k8 = f.f1(duprev, ku, p, t + dt * c7) ku = uprev + - dt * (c8 * duprev + - dt * (a91 * k1 + a93 * k3 + a94 * k4 + a95 * k5 + a96 * k6 + a97 * k7 + a98 * k8)) # no a92 + dt * ( + c8 * duprev + + dt * (a91 * k1 + a93 * k3 + a94 * k4 + a95 * k5 + a96 * k6 + a97 * k7 + a98 * k8) + ) # no a92 k9 = f.f1(duprev, ku, p, t + dt * c8) ku = uprev + - dt * (c9 * duprev + - dt * (a101 * k1 + a103 * k3 + a104 * k4 + a105 * k5 + a106 * k6 + a107 * k7 + - a108 * k8 + a109 * k9)) # no a102 + dt * ( + c9 * duprev + + dt * ( + a101 * k1 + a103 * k3 + a104 * k4 + a105 * k5 + a106 * k6 + a107 * k7 + + a108 * k8 + a109 * k9 + ) + ) # no a102 k10 = f.f1(duprev, ku, p, t + dt * c9) ku = uprev + - dt * (c10 * duprev + - dt * (a111 * k1 + a113 * k3 + a114 * k4 + a115 * k5 + a116 * k6 + a117 * k7 + - a118 * k8 + a119 * k9 + a1110 * k10)) # no a112 + dt * ( + c10 * duprev + + dt * ( + a111 * k1 + a113 * k3 + a114 * k4 + a115 * k5 + a116 * k6 + a117 * k7 + + a118 * k8 + a119 * k9 + a1110 * k10 + ) + ) # no a112 k11 = f.f1(duprev, ku, p, t + dt * c10) ku = uprev + - dt * (c11 * duprev + - dt * (a121 * k1 + a123 * k3 + a124 * k4 + a125 * k5 + a126 * k6 + a127 * k7 + - a128 * k8 + a129 * k9 + a1210 * k10 + a1211 * k11)) # no a122 + dt * ( + c11 * duprev + + dt * ( + a121 * k1 + a123 * k3 + a124 * k4 + a125 * k5 + a126 * k6 + a127 * k7 + + a128 * k8 + a129 * k9 + a1210 * k10 + a1211 * k11 + ) + ) # no a122 k12 = f.f1(duprev, ku, p, t + dt * c11) ku = uprev + - dt * (c12 * duprev + - dt * (a131 * k1 + a133 * k3 + a134 * k4 + a135 * k5 + a136 * k6 + a137 * k7 + - a138 * k8 + a139 * k9 + a1310 * k10 + a1311 * k11 + a1312 * k12)) # no a132 + dt * ( + c12 * duprev + + dt * ( + a131 * k1 + a133 * k3 + a134 * k4 + a135 * k5 + a136 * k6 + a137 * k7 + + a138 * k8 + a139 * k9 + a1310 * k10 + a1311 * k11 + a1312 * k12 + ) + ) # no a132 k13 = f.f1(duprev, ku, p, t + dt * c12) ku = uprev + - dt * (c13 * duprev + - dt * (a141 * k1 + a143 * k3 + a144 * k4 + a145 * k5 + a146 * k6 + a147 * k7 + - a148 * k8 + a149 * k9 + a1410 * k10 + a1411 * k11 + a1412 * k12 + a1413 * k13)) # no a142 + dt * ( + c13 * duprev + + dt * ( + a141 * k1 + a143 * k3 + a144 * k4 + a145 * k5 + a146 * k6 + a147 * k7 + + a148 * k8 + a149 * k9 + a1410 * k10 + a1411 * k11 + a1412 * k12 + a1413 * k13 + ) + ) # no a142 k14 = f.f1(duprev, ku, p, t + dt * c13) ku = uprev + - dt * (c14 * duprev + - dt * (a151 * k1 + a153 * k3 + a154 * k4 + a155 * k5 + a156 * k6 + a157 * k7 + - a158 * k8 + a159 * k9 + a1510 * k10 + a1511 * k11 + a1512 * k12 + a1513 * k13 + - a1514 * k14)) # no a152 + dt * ( + c14 * duprev + + dt * ( + a151 * k1 + a153 * k3 + a154 * k4 + a155 * k5 + a156 * k6 + a157 * k7 + + a158 * k8 + a159 * k9 + a1510 * k10 + a1511 * k11 + a1512 * k12 + a1513 * k13 + + a1514 * k14 + ) + ) # no a152 k15 = f.f1(duprev, ku, p, t + dt * c14) ku = uprev + - dt * (c15 * duprev + - dt * (a161 * k1 + a163 * k3 + a164 * k4 + a165 * k5 + a166 * k6 + a167 * k7 + - a168 * k8 + a169 * k9 + a1610 * k10 + a1611 * k11 + a1612 * k12 + a1613 * k13 + - a1614 * k14 + a1615 * k15)) # no a162 + dt * ( + c15 * duprev + + dt * ( + a161 * k1 + a163 * k3 + a164 * k4 + a165 * k5 + a166 * k6 + a167 * k7 + + a168 * k8 + a169 * k9 + a1610 * k10 + a1611 * k11 + a1612 * k12 + a1613 * k13 + + a1614 * k14 + a1615 * k15 + ) + ) # no a162 k16 = f.f1(duprev, ku, p, t + dt * c15) ku = uprev + - dt * (c16 * duprev + - dt * (a171 * k1 + a173 * k3 + a174 * k4 + a175 * k5 + a176 * k6 + a177 * k7 + - a178 * k8 + a179 * k9 + a1710 * k10 + a1711 * k11 + a1712 * k12 + a1713 * k13 + - a1714 * k14 + a1715 * k15)) # no a172, a1716 + dt * ( + c16 * duprev + + dt * ( + a171 * k1 + a173 * k3 + a174 * k4 + a175 * k5 + a176 * k6 + a177 * k7 + + a178 * k8 + a179 * k9 + a1710 * k10 + a1711 * k11 + a1712 * k12 + a1713 * k13 + + a1714 * k14 + a1715 * k15 + ) + ) # no a172, a1716 k17 = f.f1(duprev, ku, p, t + dt * c16) u = uprev + - dt * (duprev + - dt * (b1 * k1 + b7 * k7 + b8 * k8 + b9 * k9 + b10 * k10 + b11 * k11 + b12 * k12 + - b13 * k13 + b14 * k14 + b15 * k15)) # b1 & b7 -- b15 + dt * ( + duprev + + dt * ( + b1 * k1 + b7 * k7 + b8 * k8 + b9 * k9 + b10 * k10 + b11 * k11 + b12 * k12 + + b13 * k13 + b14 * k14 + b15 * k15 + ) + ) # b1 & b7 -- b15 du = duprev + - dt * - (bp1 * k1 + bp7 * k7 + bp8 * k8 + bp9 * k9 + bp10 * k10 + bp11 * k11 + bp12 * k12 + - bp13 * k13 + bp14 * k14 + bp15 * k15 + bp16 * k16 + bp17 * k17) # bp1 & bp7 -- bp17 + dt * + ( + bp1 * k1 + bp7 * k7 + bp8 * k8 + bp9 * k9 + bp10 * k10 + bp11 * k11 + bp12 * k12 + + bp13 * k13 + bp14 * k14 + bp15 * k15 + bp16 * k16 + bp17 * k17 + ) # bp1 & bp7 -- bp17 integrator.u = ArrayPartition((du, u)) integrator.fsallast = ArrayPartition((f.f1(du, u, p, t + dt), f.f2(du, u, p, t + dt))) @@ -1334,16 +1540,22 @@ end if integrator.opts.adaptive dtsq = dt^2 uhat = dtsq * - (btilde1 * k1 + btilde7 * k7 + btilde8 * k8 + btilde9 * k9 + btilde10 * k10 + + ( + btilde1 * k1 + btilde7 * k7 + btilde8 * k8 + btilde9 * k9 + btilde10 * k10 + btilde11 * k11 + btilde12 * k12 + btilde13 * k13 + btilde14 * k14 + - btilde15 * k15) # btilde1 & btilde7 -- btilde15 - duhat = dt * (bptilde1 * k1 + bptilde7 * k7 + bptilde8 * k8 + bptilde9 * k9 + - bptilde10 * k10 + bptilde11 * k11 + bptilde12 * k12 + bptilde13 * k13 + - bptilde14 * k14 + bptilde15 * k15 + bptilde16 * k16 + bptilde17 * k17) # bptilde1 & bptilde7 -- bptilde17 + btilde15 * k15 + ) # btilde1 & btilde7 -- btilde15 + duhat = dt * ( + bptilde1 * k1 + bptilde7 * k7 + bptilde8 * k8 + bptilde9 * k9 + + bptilde10 * k10 + bptilde11 * k11 + bptilde12 * k12 + bptilde13 * k13 + + bptilde14 * k14 + bptilde15 * k15 + bptilde16 * k16 + bptilde17 * k17 + ) # bptilde1 & bptilde7 -- bptilde17 utilde = ArrayPartition((duhat, uhat)) - atmp = calculate_residuals(utilde, integrator.uprev, integrator.u, + atmp = calculate_residuals( + utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -1358,147 +1570,199 @@ end uidx = eachindex(integrator.uprev.x[2]) k1 = integrator.fsalfirst.x[1] - @.. broadcast=false ku=uprev + dt * (c1 * duprev + dt * a21 * k1) + @.. broadcast = false ku = uprev + dt * (c1 * duprev + dt * a21 * k1) f.f1(k2, duprev, ku, p, t + dt * c1) - @.. broadcast=false ku=uprev + dt * (c2 * duprev + dt * (a31 * k1 + a32 * k2)) + @.. broadcast = false ku = uprev + dt * (c2 * duprev + dt * (a31 * k1 + a32 * k2)) f.f1(k3, duprev, ku, p, t + dt * c2) - @.. broadcast=false ku=uprev + - dt * (c3 * duprev + dt * (a41 * k1 + a42 * k2 + a43 * k3)) + @.. broadcast = false ku = uprev + + dt * (c3 * duprev + dt * (a41 * k1 + a42 * k2 + a43 * k3)) f.f1(k4, duprev, ku, p, t + dt * c3) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * - (c4 * duprev[i] + dt * (a51 * k1[i] + a53 * k3[i] + a54 * k4[i])) # no a52 + dt * + (c4 * duprev[i] + dt * (a51 * k1[i] + a53 * k3[i] + a54 * k4[i])) # no a52 end f.f1(k5, duprev, ku, p, t + dt * c4) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c5 * duprev[i] + - dt * (a61 * k1[i] + a63 * k3[i] + a64 * k4[i] + a65 * k5[i])) # no a62 + dt * ( + c5 * duprev[i] + + dt * (a61 * k1[i] + a63 * k3[i] + a64 * k4[i] + a65 * k5[i]) + ) # no a62 end f.f1(k6, duprev, ku, p, t + dt * c5) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c6 * duprev[i] + - dt * (a71 * k1[i] + a73 * k3[i] + a74 * k4[i] + a75 * k5[i] + - a76 * k6[i])) # no a72 + dt * ( + c6 * duprev[i] + + dt * ( + a71 * k1[i] + a73 * k3[i] + a74 * k4[i] + a75 * k5[i] + + a76 * k6[i] + ) + ) # no a72 end f.f1(k7, duprev, ku, p, t + dt * c6) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c7 * duprev[i] + - dt * (a81 * k1[i] + a84 * k4[i] + a85 * k5[i] + a86 * k6[i] + - a87 * k7[i])) # no a82, a83 + dt * ( + c7 * duprev[i] + + dt * ( + a81 * k1[i] + a84 * k4[i] + a85 * k5[i] + a86 * k6[i] + + a87 * k7[i] + ) + ) # no a82, a83 end f.f1(k8, duprev, ku, p, t + dt * c7) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c8 * duprev[i] + - dt * (a91 * k1[i] + a93 * k3[i] + a94 * k4[i] + a95 * k5[i] + - a96 * k6[i] + a97 * k7[i] + a98 * k8[i])) # no a92 + dt * ( + c8 * duprev[i] + + dt * ( + a91 * k1[i] + a93 * k3[i] + a94 * k4[i] + a95 * k5[i] + + a96 * k6[i] + a97 * k7[i] + a98 * k8[i] + ) + ) # no a92 end f.f1(k9, duprev, ku, p, t + dt * c8) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c9 * duprev[i] + - dt * - (a101 * k1[i] + a103 * k3[i] + a104 * k4[i] + a105 * k5[i] + - a106 * k6[i] + a107 * k7[i] + a108 * k8[i] + a109 * k9[i])) # no a102 + dt * ( + c9 * duprev[i] + + dt * + ( + a101 * k1[i] + a103 * k3[i] + a104 * k4[i] + a105 * k5[i] + + a106 * k6[i] + a107 * k7[i] + a108 * k8[i] + a109 * k9[i] + ) + ) # no a102 end f.f1(k10, duprev, ku, p, t + dt * c9) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c10 * duprev[i] + - dt * - (a111 * k1[i] + a113 * k3[i] + a114 * k4[i] + a115 * k5[i] + - a116 * k6[i] + a117 * k7[i] + a118 * k8[i] + a119 * k9[i] + - a1110 * k10[i])) # no a112 + dt * ( + c10 * duprev[i] + + dt * + ( + a111 * k1[i] + a113 * k3[i] + a114 * k4[i] + a115 * k5[i] + + a116 * k6[i] + a117 * k7[i] + a118 * k8[i] + a119 * k9[i] + + a1110 * k10[i] + ) + ) # no a112 end f.f1(k11, duprev, ku, p, t + dt * c10) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c11 * duprev[i] + - dt * - (a121 * k1[i] + a123 * k3[i] + a124 * k4[i] + a125 * k5[i] + - a126 * k6[i] + a127 * k7[i] + a128 * k8[i] + a129 * k9[i] + - a1210 * k10[i] + a1211 * k11[i])) # no a122 + dt * ( + c11 * duprev[i] + + dt * + ( + a121 * k1[i] + a123 * k3[i] + a124 * k4[i] + a125 * k5[i] + + a126 * k6[i] + a127 * k7[i] + a128 * k8[i] + a129 * k9[i] + + a1210 * k10[i] + a1211 * k11[i] + ) + ) # no a122 end f.f1(k12, duprev, ku, p, t + dt * c11) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c12 * duprev[i] + - dt * - (a131 * k1[i] + a133 * k3[i] + a134 * k4[i] + a135 * k5[i] + - a136 * k6[i] + a137 * k7[i] + a138 * k8[i] + a139 * k9[i] + - a1310 * k10[i] + a1311 * k11[i] + a1312 * k12[i])) # no a132 + dt * ( + c12 * duprev[i] + + dt * + ( + a131 * k1[i] + a133 * k3[i] + a134 * k4[i] + a135 * k5[i] + + a136 * k6[i] + a137 * k7[i] + a138 * k8[i] + a139 * k9[i] + + a1310 * k10[i] + a1311 * k11[i] + a1312 * k12[i] + ) + ) # no a132 end f.f1(k13, duprev, ku, p, t + dt * c12) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c13 * duprev[i] + - dt * - (a141 * k1[i] + a143 * k3[i] + a144 * k4[i] + a145 * k5[i] + - a146 * k6[i] + a147 * k7[i] + a148 * k8[i] + a149 * k9[i] + - a1410 * k10[i] + a1411 * k11[i] + a1412 * k12[i] + - a1413 * k13[i])) # no a142 + dt * ( + c13 * duprev[i] + + dt * + ( + a141 * k1[i] + a143 * k3[i] + a144 * k4[i] + a145 * k5[i] + + a146 * k6[i] + a147 * k7[i] + a148 * k8[i] + a149 * k9[i] + + a1410 * k10[i] + a1411 * k11[i] + a1412 * k12[i] + + a1413 * k13[i] + ) + ) # no a142 end f.f1(k14, duprev, ku, p, t + dt * c13) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c14 * duprev[i] + - dt * - (a151 * k1[i] + a153 * k3[i] + a154 * k4[i] + a155 * k5[i] + - a156 * k6[i] + a157 * k7[i] + a158 * k8[i] + a159 * k9[i] + - a1510 * k10[i] + a1511 * k11[i] + a1512 * k12[i] + - a1513 * k13[i] + a1514 * k14[i])) # no a152 + dt * ( + c14 * duprev[i] + + dt * + ( + a151 * k1[i] + a153 * k3[i] + a154 * k4[i] + a155 * k5[i] + + a156 * k6[i] + a157 * k7[i] + a158 * k8[i] + a159 * k9[i] + + a1510 * k10[i] + a1511 * k11[i] + a1512 * k12[i] + + a1513 * k13[i] + a1514 * k14[i] + ) + ) # no a152 end f.f1(k15, duprev, ku, p, t + dt * c14) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c15 * duprev[i] + - dt * - (a161 * k1[i] + a163 * k3[i] + a164 * k4[i] + a165 * k5[i] + - a166 * k6[i] + a167 * k7[i] + a168 * k8[i] + a169 * k9[i] + - a1610 * k10[i] + a1611 * k11[i] + a1612 * k12[i] + - a1613 * k13[i] + a1614 * k14[i] + a1615 * k15[i])) # no a162 + dt * ( + c15 * duprev[i] + + dt * + ( + a161 * k1[i] + a163 * k3[i] + a164 * k4[i] + a165 * k5[i] + + a166 * k6[i] + a167 * k7[i] + a168 * k8[i] + a169 * k9[i] + + a1610 * k10[i] + a1611 * k11[i] + a1612 * k12[i] + + a1613 * k13[i] + a1614 * k14[i] + a1615 * k15[i] + ) + ) # no a162 end f.f1(k16, duprev, ku, p, t + dt * c15) @tight_loop_macros for i in uidx @inbounds ku[i] = uprev[i] + - dt * (c16 * duprev[i] + - dt * - (a171 * k1[i] + a173 * k3[i] + a174 * k4[i] + a175 * k5[i] + - a176 * k6[i] + a177 * k7[i] + a178 * k8[i] + a179 * k9[i] + - a1710 * k10[i] + a1711 * k11[i] + a1712 * k12[i] + - a1713 * k13[i] + a1714 * k14[i] + a1715 * k15[i])) # no a172, a1716 + dt * ( + c16 * duprev[i] + + dt * + ( + a171 * k1[i] + a173 * k3[i] + a174 * k4[i] + a175 * k5[i] + + a176 * k6[i] + a177 * k7[i] + a178 * k8[i] + a179 * k9[i] + + a1710 * k10[i] + a1711 * k11[i] + a1712 * k12[i] + + a1713 * k13[i] + a1714 * k14[i] + a1715 * k15[i] + ) + ) # no a172, a1716 end f.f1(k17, duprev, ku, p, t + dt * c16) @tight_loop_macros for i in uidx @inbounds u[i] = uprev[i] + - dt * (duprev[i] + - dt * (b1 * k1[i] + b7 * k7[i] + b8 * k8[i] + b9 * k9[i] + - b10 * k10[i] + b11 * k11[i] + b12 * k12[i] + b13 * k13[i] + - b14 * k14[i] + b15 * k15[i])) # b1 & b7 -- b15 + dt * ( + duprev[i] + + dt * ( + b1 * k1[i] + b7 * k7[i] + b8 * k8[i] + b9 * k9[i] + + b10 * k10[i] + b11 * k11[i] + b12 * k12[i] + b13 * k13[i] + + b14 * k14[i] + b15 * k15[i] + ) + ) # b1 & b7 -- b15 @inbounds du[i] = duprev[i] + - dt * (bp1 * k1[i] + bp7 * k7[i] + bp8 * k8[i] + bp9 * k9[i] + - bp10 * k10[i] + bp11 * k11[i] + bp12 * k12[i] + bp13 * k13[i] + - bp14 * k14[i] + bp15 * k15[i] + bp16 * k16[i] + bp17 * k17[i]) # bp1 & bp7 -- bp17 + dt * ( + bp1 * k1[i] + bp7 * k7[i] + bp8 * k8[i] + bp9 * k9[i] + + bp10 * k10[i] + bp11 * k11[i] + bp12 * k12[i] + bp13 * k13[i] + + bp14 * k14[i] + bp15 * k15[i] + bp16 * k16[i] + bp17 * k17[i] + ) # bp1 & bp7 -- bp17 end f.f1(k.x[1], du, u, p, t + dt) @@ -1510,21 +1774,27 @@ end dtsq = dt^2 @tight_loop_macros for i in uidx @inbounds uhat[i] = dtsq * - (btilde1 * k1[i] + btilde7 * k7[i] + btilde8 * k8[i] + - btilde9 * k9[i] + btilde10 * k10[i] + btilde11 * k11[i] + - btilde12 * k12[i] + btilde13 * k13[i] + btilde14 * k14[i] + - btilde15 * k15[i]) # btilde1 & btilde7 -- btilde15 + ( + btilde1 * k1[i] + btilde7 * k7[i] + btilde8 * k8[i] + + btilde9 * k9[i] + btilde10 * k10[i] + btilde11 * k11[i] + + btilde12 * k12[i] + btilde13 * k13[i] + btilde14 * k14[i] + + btilde15 * k15[i] + ) # btilde1 & btilde7 -- btilde15 @inbounds duhat[i] = dt * - (bptilde1 * k1[i] + bptilde7 * k7[i] + bptilde8 * k8[i] + - bptilde9 * k9[i] + bptilde10 * k10[i] + - bptilde11 * k11[i] + bptilde12 * k12[i] + - bptilde13 * k13[i] + bptilde14 * k14[i] + - bptilde15 * k15[i] + bptilde16 * k16[i] + - bptilde17 * k17[i]) # bptilde1 & bptilde7 -- bptilde17 + ( + bptilde1 * k1[i] + bptilde7 * k7[i] + bptilde8 * k8[i] + + bptilde9 * k9[i] + bptilde10 * k10[i] + + bptilde11 * k11[i] + bptilde12 * k12[i] + + bptilde13 * k13[i] + bptilde14 * k14[i] + + bptilde15 * k15[i] + bptilde16 * k16[i] + + bptilde17 * k17[i] + ) # bptilde1 & bptilde7 -- bptilde17 end - calculate_residuals!(atmp, utilde, integrator.uprev, integrator.u, + calculate_residuals!( + atmp, utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -1559,9 +1829,11 @@ end uhat = dtsq * (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4) duhat = dt * (bptilde1 * k1 + bptilde2 * k2 + bptilde3 * k3 + bptilde4 * k4) utilde = ArrayPartition((duhat, uhat)) - atmp = calculate_residuals(utilde, integrator.uprev, integrator.u, + atmp = calculate_residuals( + utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -1576,22 +1848,24 @@ end uidx = eachindex(integrator.uprev.x[2]) k1 = integrator.fsalfirst.x[1] - @.. broadcast=false ku=uprev + dt * (c1 * duprev + dt * a21 * k1) + @.. broadcast = false ku = uprev + dt * (c1 * duprev + dt * a21 * k1) f.f1(k2, duprev, ku, p, t + dt * c1) - @.. broadcast=false ku=uprev + dt * (c2 * duprev + dt * (a31 * k1 + a32 * k2)) + @.. broadcast = false ku = uprev + dt * (c2 * duprev + dt * (a31 * k1 + a32 * k2)) f.f1(k3, duprev, ku, p, t + dt * c2) - @.. broadcast=false ku=uprev + - dt * (c3 * duprev + dt * (a41 * k1 + a42 * k2 + a43 * k3)) + @.. broadcast = false ku = uprev + + dt * (c3 * duprev + dt * (a41 * k1 + a42 * k2 + a43 * k3)) f.f1(k4, duprev, ku, p, t + dt * c3) @tight_loop_macros for i in uidx @inbounds u[i] = uprev[i] + - dt * (duprev[i] + - dt * (b1 * k1[i] + b2 * k2[i] + b3 * k3[i] + b4 * k4[i])) + dt * ( + duprev[i] + + dt * (b1 * k1[i] + b2 * k2[i] + b3 * k3[i] + b4 * k4[i]) + ) @inbounds du[i] = duprev[i] + - dt * (bp1 * k1[i] + bp2 * k2[i] + bp3 * k3[i] + bp4 * k4[i]) + dt * (bp1 * k1[i] + bp2 * k2[i] + bp3 * k3[i] + bp4 * k4[i]) end f.f1(k.x[1], du, u, p, t + dt) @@ -1603,15 +1877,21 @@ end dtsq = dt^2 @tight_loop_macros for i in uidx @inbounds uhat[i] = dtsq * - (btilde1 * k1[i] + btilde2 * k2[i] + btilde3 * k3[i] + - btilde4 * k4[i]) + ( + btilde1 * k1[i] + btilde2 * k2[i] + btilde3 * k3[i] + + btilde4 * k4[i] + ) @inbounds duhat[i] = dt * - (bptilde1 * k1[i] + bptilde2 * k2[i] + bptilde3 * k3[i] + - bptilde4 * k4[i]) + ( + bptilde1 * k1[i] + bptilde2 * k2[i] + bptilde3 * k3[i] + + bptilde4 * k4[i] + ) end - calculate_residuals!(atmp, utilde, integrator.uprev, integrator.u, + calculate_residuals!( + atmp, utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -1643,9 +1923,11 @@ end if integrator.opts.adaptive dtsq = dt^2 uhat = dtsq * (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4) - atmp = calculate_residuals(uhat, integrator.uprev.x[2], integrator.u.x[2], + atmp = calculate_residuals( + uhat, integrator.uprev.x[2], integrator.u.x[2], integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -1660,22 +1942,24 @@ end uidx = eachindex(integrator.uprev.x[2]) k1 = integrator.fsalfirst.x[1] - @.. broadcast=false ku=uprev + dt * (c1 * duprev + dt * a21 * k1) + @.. broadcast = false ku = uprev + dt * (c1 * duprev + dt * a21 * k1) f.f1(k2, duprev, ku, p, t + dt * c1) - @.. broadcast=false ku=uprev + dt * (c2 * duprev + dt * (a31 * k1 + a32 * k2)) + @.. broadcast = false ku = uprev + dt * (c2 * duprev + dt * (a31 * k1 + a32 * k2)) f.f1(k3, duprev, ku, p, t + dt * c2) - @.. broadcast=false ku=uprev + - dt * (c3 * duprev + dt * (a41 * k1 + a42 * k2 + a43 * k3)) + @.. broadcast = false ku = uprev + + dt * (c3 * duprev + dt * (a41 * k1 + a42 * k2 + a43 * k3)) f.f1(k4, duprev, ku, p, t + dt * c3) @tight_loop_macros for i in uidx @inbounds u[i] = uprev[i] + - dt * (duprev[i] + - dt * (b1 * k1[i] + b2 * k2[i] + b3 * k3[i] + b4 * k4[i])) + dt * ( + duprev[i] + + dt * (b1 * k1[i] + b2 * k2[i] + b3 * k3[i] + b4 * k4[i]) + ) @inbounds du[i] = duprev[i] + - dt * (bp1 * k1[i] + bp2 * k2[i] + bp3 * k3[i] + bp4 * k4[i]) + dt * (bp1 * k1[i] + bp2 * k2[i] + bp3 * k3[i] + bp4 * k4[i]) end f.f1(k.x[1], du, u, p, t + dt) @@ -1687,12 +1971,16 @@ end dtsq = dt^2 @tight_loop_macros for i in uidx @inbounds uhat[i] = dtsq * - (btilde1 * k1[i] + btilde2 * k2[i] + btilde3 * k3[i] + - btilde4 * k4[i]) + ( + btilde1 * k1[i] + btilde2 * k2[i] + btilde3 * k3[i] + + btilde4 * k4[i] + ) end - calculate_residuals!(atmp.x[2], uhat, integrator.uprev.x[2], integrator.u.x[2], + calculate_residuals!( + atmp.x[2], uhat, integrator.uprev.x[2], integrator.u.x[2], integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp.x[2], t) end end @@ -1716,11 +2004,11 @@ end k5 = f.f1(duprev, ku, p, t + dt * c4) ku = uprev + - dt * (c5 * duprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5)) + dt * (c5 * duprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5)) k6 = f.f1(duprev, ku, p, t + dt * c5) ku = uprev + - dt * (c6 * duprev + dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6)) + dt * (c6 * duprev + dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6)) k7 = f.f1(duprev, ku, p, t + dt * c6) u = uprev + dt * (duprev + dt * (b1 * k1 + b3 * k3 + b4 * k4 + b5 * k5 + b6 * k6)) @@ -1736,13 +2024,17 @@ end if integrator.opts.adaptive dtsq = dt^2 uhat = dtsq * - (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6) - duhat = dt * (bptilde1 * k1 + bptilde3 * k3 + bptilde4 * k4 + bptilde5 * k5 + - bptilde6 * k6 + bptilde7 * k7) + (btilde1 * k1 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6) + duhat = dt * ( + bptilde1 * k1 + bptilde3 * k3 + bptilde4 * k4 + bptilde5 * k5 + + bptilde6 * k6 + bptilde7 * k7 + ) utilde = ArrayPartition((duhat, uhat)) - atmp = calculate_residuals(utilde, integrator.uprev, integrator.u, + atmp = calculate_residuals( + utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -1757,39 +2049,47 @@ end uidx = eachindex(integrator.uprev.x[2]) k1 = integrator.fsalfirst.x[1] - @.. broadcast=false ku=uprev + dt * (c1 * duprev + dt * a21 * k1) + @.. broadcast = false ku = uprev + dt * (c1 * duprev + dt * a21 * k1) f.f1(k2, duprev, ku, p, t + dt * c1) - @.. broadcast=false ku=uprev + dt * (c2 * duprev + dt * (a31 * k1 + a32 * k2)) + @.. broadcast = false ku = uprev + dt * (c2 * duprev + dt * (a31 * k1 + a32 * k2)) f.f1(k3, duprev, ku, p, t + dt * c2) - @.. broadcast=false ku=uprev + - dt * (c3 * duprev + dt * (a41 * k1 + a42 * k2 + a43 * k3)) + @.. broadcast = false ku = uprev + + dt * (c3 * duprev + dt * (a41 * k1 + a42 * k2 + a43 * k3)) f.f1(k4, duprev, ku, p, t + dt * c3) - @.. broadcast=false ku=uprev + - dt * - (c4 * duprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4)) + @.. broadcast = false ku = uprev + + dt * + (c4 * duprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4)) f.f1(k5, duprev, ku, p, t + dt * c4) - @.. broadcast=false ku=uprev + - dt * (c5 * duprev + - dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5)) + @.. broadcast = false ku = uprev + + dt * ( + c5 * duprev + + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5) + ) f.f1(k6, duprev, ku, p, t + dt * c5) - @.. broadcast=false ku=uprev + - dt * (c6 * duprev + - dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6)) + @.. broadcast = false ku = uprev + + dt * ( + c6 * duprev + + dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6) + ) f.f1(k7, duprev, ku, p, t + dt * c6) @tight_loop_macros for i in uidx @inbounds u[i] = uprev[i] + - dt * (duprev[i] + - dt * - (b1 * k1[i] + b3 * k3[i] + b4 * k4[i] + b5 * k5[i] + b6 * k6[i])) + dt * ( + duprev[i] + + dt * + (b1 * k1[i] + b3 * k3[i] + b4 * k4[i] + b5 * k5[i] + b6 * k6[i]) + ) @inbounds du[i] = duprev[i] + - dt * (bp1 * k1[i] + bp3 * k3[i] + bp4 * k4[i] + bp5 * k5[i] + - bp6 * k6[i] + bp7 * k7[i]) + dt * ( + bp1 * k1[i] + bp3 * k3[i] + bp4 * k4[i] + bp5 * k5[i] + + bp6 * k6[i] + bp7 * k7[i] + ) end f.f1(k.x[1], du, u, p, t + dt) @@ -1801,15 +2101,21 @@ end dtsq = dt^2 @tight_loop_macros for i in uidx @inbounds uhat[i] = dtsq * - (btilde1 * k1[i] + btilde3 * k3[i] + btilde4 * k4[i] + - btilde5 * k5[i] + btilde6 * k6[i]) + ( + btilde1 * k1[i] + btilde3 * k3[i] + btilde4 * k4[i] + + btilde5 * k5[i] + btilde6 * k6[i] + ) @inbounds duhat[i] = dt * - (bptilde1 * k1[i] + bptilde3 * k3[i] + bptilde4 * k4[i] + - bptilde5 * k5[i] + bptilde6 * k6[i] + bptilde7 * k7[i]) + ( + bptilde1 * k1[i] + bptilde3 * k3[i] + bptilde4 * k4[i] + + bptilde5 * k5[i] + bptilde6 * k6[i] + bptilde7 * k7[i] + ) end - calculate_residuals!(atmp, utilde, integrator.uprev, integrator.u, + calculate_residuals!( + atmp, utilde, integrator.uprev, integrator.u, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -1824,7 +2130,7 @@ function initialize!(integrator, cache::RKN4Cache) integrator.f.f1(integrator.k[1].x[1], duprev, uprev, integrator.p, integrator.t) integrator.f.f2(integrator.k[1].x[2], duprev, uprev, integrator.p, integrator.t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - integrator.stats.nf2 += 1 + return integrator.stats.nf2 += 1 end @muladd function perform_step!(integrator, cache::RKN4ConstantCache, repeat_step = false) @@ -1881,18 +2187,18 @@ end #perform operations to find k values k₁ = integrator.fsalfirst.x[1] - @.. broadcast=false ku=uprev + halfdt * duprev + eightdtsq * k₁ - @.. broadcast=false kdu=duprev + halfdt * k₁ + @.. broadcast = false ku = uprev + halfdt * duprev + eightdtsq * k₁ + @.. broadcast = false kdu = duprev + halfdt * k₁ f.f1(k₂, kdu, ku, p, ttmp) - @.. broadcast=false ku=uprev + dt * duprev + halfdtsq * k₂ - @.. broadcast=false kdu=duprev + dt * k₂ + @.. broadcast = false ku = uprev + dt * duprev + halfdtsq * k₂ + @.. broadcast = false kdu = duprev + dt * k₂ f.f1(k₃, kdu, ku, p, t + dt) #perform final calculations to determine new y and y'. - @.. broadcast=false u=uprev + sixthdtsq * (1 * k₁ + 2 * k₂ + 0 * k₃) + dt * duprev - @.. broadcast=false du=duprev + sixthdt * (1 * k₁ + 4 * k₂ + 1 * k₃) + @.. broadcast = false u = uprev + sixthdtsq * (1 * k₁ + 2 * k₂ + 0 * k₃) + dt * duprev + @.. broadcast = false du = duprev + sixthdt * (1 * k₁ + 4 * k₂ + 1 * k₃) f.f1(k.x[1], du, u, p, t + dt) f.f2(k.x[2], du, u, p, t + dt) diff --git a/lib/OrdinaryDiffEqRKN/src/rkn_tableaus.jl b/lib/OrdinaryDiffEqRKN/src/rkn_tableaus.jl index c6a3ac5baa..da3968a02e 100644 --- a/lib/OrdinaryDiffEqRKN/src/rkn_tableaus.jl +++ b/lib/OrdinaryDiffEqRKN/src/rkn_tableaus.jl @@ -84,20 +84,22 @@ function FineRKN4ConstantCache(T::Type, T2::Type) bbar4 = convert(T, 16 // 45) bbar5 = convert(T, 1 // 12) btilde1 = convert(T, 25 // 1116) - #btilde2 = convert(T, 0 // 1) + #btilde2 = convert(T, 0 // 1) btilde3 = convert(T, -63 // 1240) btilde4 = convert(T, 64 // 1395) btilde5 = convert(T, -13 // 744) bptilde1 = convert(T, 2 // 125) - #bptilde2 = convert(T, 0 // 1) + #bptilde2 = convert(T, 0 // 1) bptilde3 = convert(T, -27 // 625) bptilde4 = convert(T, 32 // 625) bptilde5 = convert(T, -3 // 125) - FineRKN4ConstantCache(c1, c2, c3, c4, c5, a21, a31, a32, a41, a43, a51, + return FineRKN4ConstantCache( + c1, c2, c3, c4, c5, a21, a31, a32, a41, a43, a51, a52, a53, a54, abar21, abar31, abar32, abar41, abar42, abar43, abar51, abar52, abar53, abar54, b1, b3, b4, b5, bbar1, bbar3, bbar4, bbar5, btilde1, btilde3, btilde4, btilde5, bptilde1, - bptilde3, bptilde4, bptilde5) + bptilde3, bptilde4, bptilde5 + ) end struct FineRKN5ConstantCache{T, T2} <: NystromConstantCache @@ -245,26 +247,28 @@ function FineRKN5ConstantCache(T::Type, T2::Type) bbar6 = convert(T, 53 // 240) #bbar7 = convert(T, 0 // 1) btilde1 = convert(T, 8151 // 2633750) - #btilde2 = convert(T, 0 // 1) + #btilde2 = convert(T, 0 // 1) btilde3 = convert(T, -1377519 // 186334750) btilde4 = convert(T, 586872 // 28879375) btilde5 = convert(T, -36011118 // 2247378875) - #btilde6 = convert(T, 0 // 1) - #btilde7 = convert(T, 0 // 1) + #btilde6 = convert(T, 0 // 1) + #btilde7 = convert(T, 0 // 1) bptilde1 = convert(T, 8151 // 2633750) - #bptilde2 = convert(T, 0 // 1) + #bptilde2 = convert(T, 0 // 1) bptilde3 = convert(T, -5969249 // 559004250) bptilde4 = convert(T, 3521232 // 28879375) bptilde5 = convert(T, -846261273 // 4494757750) bptilde6 = convert(T, 4187 // 36750) bptilde7 = convert(T, -1 // 25) - FineRKN5ConstantCache(c1, c2, c3, c4, c5, c6, c7, a21, a31, a32, a41, a43, a51, + return FineRKN5ConstantCache( + c1, c2, c3, c4, c5, c6, c7, a21, a31, a32, a41, a43, a51, a52, a53, a54, a61, a62, a63, a64, a71, a73, a74, a75, abar21, abar31, abar32, abar41, abar42, abar43, abar51, abar52, abar53, abar54, abar61, abar62, abar63, abar64, abar65, abar71, abar73, abar74, abar75, abar76, b1, b3, b4, b5, bbar1, bbar3, bbar4, bbar5, bbar6, btilde1, btilde3, btilde4, btilde5, bptilde1, - bptilde3, bptilde4, bptilde5, bptilde6, bptilde7) + bptilde3, bptilde4, bptilde5, bptilde6, bptilde7 + ) end struct IRKN3ConstantCache{T, T2} <: NystromConstantCache @@ -287,7 +291,7 @@ function IRKN3ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats b2 = convert(T, 0.8333333333333334) bbar1 = convert(T, 0.3333333333333333) bbar2 = convert(T, 0.4166666666666667) - IRKN3ConstantCache(bconst1, bconst2, c1, a21, b1, b2, bbar1, bbar2) + return IRKN3ConstantCache(bconst1, bconst2, c1, a21, b1, b2, bbar1, bbar2) end function IRKN3ConstantCache(T::Type, T2::Type) @@ -299,7 +303,7 @@ function IRKN3ConstantCache(T::Type, T2::Type) b2 = convert(T, 5 // 6) bbar1 = convert(T, 1 // 3) bbar2 = convert(T, 5 // 12) - IRKN3ConstantCache(bconst1, bconst2, c1, a21, b1, b2, bbar1, bbar2) + return IRKN3ConstantCache(bconst1, bconst2, c1, a21, b1, b2, bbar1, bbar2) end struct IRKN4ConstantCache{T, T2} <: NystromConstantCache @@ -332,7 +336,7 @@ function IRKN4ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats bbar1 = convert(T, -0.05555555555555555) bbar2 = convert(T, 0.2916666666666667) bbar3 = convert(T, 0.125) - IRKN4ConstantCache(bconst1, bconst2, c1, c2, a21, a32, b1, b2, b3, bbar1, bbar2, bbar3) + return IRKN4ConstantCache(bconst1, bconst2, c1, c2, a21, a32, b1, b2, b3, bbar1, bbar2, bbar3) end function IRKN4ConstantCache(T::Type, T2::Type) @@ -349,7 +353,7 @@ function IRKN4ConstantCache(T::Type, T2::Type) bbar1 = convert(T, -1 // 18) bbar2 = convert(T, 7 // 24) bbar3 = convert(T, 1 // 8) - IRKN4ConstantCache(bconst1, bconst2, c1, c2, a21, a32, b1, b2, b3, bbar1, bbar2, bbar3) + return IRKN4ConstantCache(bconst1, bconst2, c1, c2, a21, a32, b1, b2, b3, bbar1, bbar2, bbar3) end struct Nystrom5VelocityIndependentConstantCache{T, T2} <: NystromConstantCache @@ -370,8 +374,10 @@ struct Nystrom5VelocityIndependentConstantCache{T, T2} <: NystromConstantCache b4::T end -function Nystrom5VelocityIndependentConstantCache(T::Type{<:CompiledFloats}, - T2::Type{<:CompiledFloats}) +function Nystrom5VelocityIndependentConstantCache( + T::Type{<:CompiledFloats}, + T2::Type{<:CompiledFloats} + ) c1 = convert(T2, 0.2) c2 = convert(T2, 0.6666666666666666) # c3 = convert(T2,1) @@ -388,8 +394,10 @@ function Nystrom5VelocityIndependentConstantCache(T::Type{<:CompiledFloats}, b2 = convert(T, 0.37202380952380953) b3 = convert(T, 0.48214285714285715) b4 = convert(T, 0.10416666666666667) - Nystrom5VelocityIndependentConstantCache(c1, c2, a21, a31, a32, a41, a42, a43, bbar1, - bbar2, bbar3, b1, b2, b3, b4) + return Nystrom5VelocityIndependentConstantCache( + c1, c2, a21, a31, a32, a41, a42, a43, bbar1, + bbar2, bbar3, b1, b2, b3, b4 + ) end function Nystrom5VelocityIndependentConstantCache(T::Type, T2::Type) @@ -409,8 +417,10 @@ function Nystrom5VelocityIndependentConstantCache(T::Type, T2::Type) b2 = convert(T, 125 // 336) b3 = convert(T, 162 // 336) b4 = convert(T, 35 // 336) - Nystrom5VelocityIndependentConstantCache(c1, c2, a21, a31, a32, a41, a42, a43, bbar1, - bbar2, bbar3, b1, b2, b3, b4) + return Nystrom5VelocityIndependentConstantCache( + c1, c2, a21, a31, a32, a41, a42, a43, bbar1, + bbar2, bbar3, b1, b2, b3, b4 + ) end struct ERKN4ConstantCache{T, T2} <: NystromConstantCache @@ -467,13 +477,16 @@ function ERKN4ConstantCache(T::Type, T2::Type) bp2 = convert(T, 32 // 81) bp3 = convert(T, 250 // 567) bp4 = convert(T, 5 // 54) - ERKN4ConstantCache(c1, c2, c3, a21, a31, a32, a41, a42, a43, b1, b2, b3, b4, bp1, bp2, + return ERKN4ConstantCache( + c1, c2, c3, a21, a31, a32, a41, a42, a43, b1, b2, b3, b4, bp1, bp2, bp3, bp4, btilde1, btilde2, btilde3, btilde4, bptilde1, bptilde2, - bptilde3, bptilde4) + bptilde3, bptilde4 + ) end function ERKN4ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) - ERKN4ConstantCache(convert(T2, 0.25), + return ERKN4ConstantCache( + convert(T2, 0.25), convert(T2, 0.7), convert(T2, 1.0), convert(T, 0.03125), @@ -497,7 +510,8 @@ function ERKN4ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats convert(T, -0.0021645021645021645), convert(T, 0.004489337822671156), convert(T, -0.004008337341670675), - convert(T, 0.0016835016835016834)) + convert(T, 0.0016835016835016834) + ) end struct ERKN5ConstantCache{T, T2} <: NystromConstantCache @@ -554,12 +568,15 @@ function ERKN5ConstantCache(T::Type, T2::Type) # bptilde2 = convert(T,0) # bptilde3 = convert(T,0) # bptilde4 = convert(T,0) - ERKN5ConstantCache(c1, c2, c3, a21, a31, a32, a41, a42, a43, b1, b2, b3, b4, bp1, bp2, - bp3, bp4, btilde1, btilde2, btilde3, btilde4) + return ERKN5ConstantCache( + c1, c2, c3, a21, a31, a32, a41, a42, a43, b1, b2, b3, b4, bp1, bp2, + bp3, bp4, btilde1, btilde2, btilde3, btilde4 + ) end function ERKN5ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) - ERKN5ConstantCache(convert(T2, 0.5), + return ERKN5ConstantCache( + convert(T2, 0.5), convert(T2, 0.2714285714285714), convert(T2, 0.8627450980392157), convert(T, 0.125), @@ -579,7 +596,8 @@ function ERKN5ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats convert(T, 0.004024782736060931), convert(T, 0.011367291781577495), convert(T, -0.012845558353486749), - convert(T, -0.0025465161641516788)) + convert(T, -0.0025465161641516788) + ) end struct ERKN7ConstantCache{T, T2} <: NystromConstantCache @@ -682,15 +700,18 @@ function ERKN7ConstantCache(T::Type, T2::Type) bptilde5 = convert(T, -45498718 // 926142189 - 170795979 // 811534085) bptilde6 = convert(T, 1625563237 // 4379140271 + 177906423 // 1116903503) bptilde7 = convert(T, 191595797 // 1038702495 + 655510901 // 2077404990) - ERKN7ConstantCache(c1, c2, c3, c4, c5, c6, a21, a31, a32, a41, a42, a43, a51, a52, a53, + return ERKN7ConstantCache( + c1, c2, c3, c4, c5, c6, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a73, a74, a75, a76, b1, b3, b4, b5, b6, bp1, bp3, bp4, bp5, bp6, bp7, btilde1, btilde3, btilde4, btilde5, - btilde6, bptilde1, bptilde3, bptilde4, bptilde5, bptilde6, bptilde7) + btilde6, bptilde1, bptilde3, bptilde4, bptilde5, bptilde6, bptilde7 + ) end function ERKN7ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) - ERKN7ConstantCache(convert(T2, 108816483 // 943181462), + return ERKN7ConstantCache( + convert(T2, 108816483 // 943181462), convert(T2, 0.23074347277618568), convert(T2, 0.7558997318449516), convert(T2, 1.0799829556599743), @@ -737,7 +758,8 @@ function ERKN7ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats convert(T, -0.7067938872093759), convert(T, -0.25958777628335805), convert(T, 0.5304914229443385), - convert(T, 0.5)) + convert(T, 0.5) + ) end struct DPRKN4ConstantCache{T, T2} <: NystromConstantCache @@ -793,9 +815,11 @@ function DPRKN4ConstantCache(T::Type, T2::Type) bptilde2 = convert(T, 32 // 81 + 20 // 27) bptilde3 = convert(T, 250 // 567 - 275 // 189) bptilde4 = convert(T, 5 // 54 + 1 // 3) - DPRKN4ConstantCache(c1, c2, c3, a21, a31, a32, a41, a42, a43, b1, b2, b3, + return DPRKN4ConstantCache( + c1, c2, c3, a21, a31, a32, a41, a42, a43, b1, b2, b3, bp1, bp2, bp3, bp4, btilde1, btilde2, btilde3, btilde4, - bptilde1, bptilde2, bptilde3, bptilde4) + bptilde1, bptilde2, bptilde3, bptilde4 + ) end function DPRKN4ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) @@ -823,9 +847,11 @@ function DPRKN4ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloat bptilde2 = convert(T, 1.1358024691358024) bptilde3 = convert(T, -1.0141093474426808) bptilde4 = convert(T, 0.42592592592592593) - DPRKN4ConstantCache(c1, c2, c3, a21, a31, a32, a41, a42, a43, b1, b2, b3, + return DPRKN4ConstantCache( + c1, c2, c3, a21, a31, a32, a41, a42, a43, b1, b2, b3, bp1, bp2, bp3, bp4, btilde1, btilde2, btilde3, btilde4, - bptilde1, bptilde2, bptilde3, bptilde4) + bptilde1, bptilde2, bptilde3, bptilde4 + ) end struct DPRKN5ConstantCache{T, T2} <: NystromConstantCache c1::T2 @@ -919,10 +945,12 @@ function DPRKN5ConstantCache(T::Type, T2::Type) bptilde4 = convert(T, 2 // 15 + 1 // 3) bptilde5 = convert(T, 16 // 45 - 2 // 3) bptilde6 = convert(T, 7 // 90) - DPRKN5ConstantCache(c1, c2, c3, c4, c5, a21, a31, a32, a41, a43, a51, + return DPRKN5ConstantCache( + c1, c2, c3, c4, c5, a21, a31, a32, a41, a43, a51, a53, a54, a61, a63, a64, a65, b1, b3, b4, b5, bp1, bp3, bp4, bp5, bp6, btilde1, btilde3, btilde4, btilde5, - bptilde1, bptilde3, bptilde4, bptilde5, bptilde6) + bptilde1, bptilde3, bptilde4, bptilde5, bptilde6 + ) end function DPRKN5ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) @@ -961,10 +989,12 @@ function DPRKN5ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloat bptilde4 = convert(T, 0.4666666666666667) bptilde5 = convert(T, -0.31111111111111106) bptilde6 = convert(T, 0.07777777777777778) - DPRKN5ConstantCache(c1, c2, c3, c4, c5, a21, a31, a32, a41, a43, a51, + return DPRKN5ConstantCache( + c1, c2, c3, c4, c5, a21, a31, a32, a41, a43, a51, a53, a54, a61, a63, a64, a65, b1, b3, b4, b5, bp1, bp3, bp4, bp5, bp6, btilde1, btilde3, btilde4, btilde5, - bptilde1, bptilde3, bptilde4, bptilde5, bptilde6) + bptilde1, bptilde3, bptilde4, bptilde5, bptilde6 + ) end struct DPRKN6ConstantCache{T, T2} <: NystromConstantCache @@ -1137,7 +1167,8 @@ function DPRKN6ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloat rp63 = convert(T, -18.704545454545453) rp62 = convert(T, 13.763636363636364) rp61 = convert(T, -3.190909090909091) - DPRKN6ConstantCache(c1, c2, c3, c4, c5, a21, a31, a32, a41, a42, a43, a51, + return DPRKN6ConstantCache( + c1, c2, c3, c4, c5, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a63, a64, a65, b1, b3, b4, b5, bp1, bp3, bp4, bp5, bp6, btilde1, btilde2, btilde3, btilde4, btilde5, bptilde1, bptilde3, bptilde4, bptilde5, bptilde6, @@ -1146,7 +1177,8 @@ function DPRKN6ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloat r53, r52, r51, r64, r63, r62, r61, rp14, rp13, rp12, rp11, rp10, rp34, rp33, rp32, rp31, rp44, rp43, rp42, rp41, rp54, rp53, rp52, rp51, - rp64, rp63, rp62, rp61) + rp64, rp63, rp62, rp61 + ) end function DPRKN6ConstantCache(T::Type, T2::Type) @@ -1191,12 +1223,16 @@ function DPRKN6ConstantCache(T::Type, T2::Type) # btilde6 = convert(T,0) bptilde1 = convert(T, 329 // 4212 - 115 // 2106) # btildep2 = convert(T,0) - bptilde3 = convert(T, + bptilde3 = convert( + T, (389225579 + 96856R) / 10_2405_6540 - - (8411_9543 + 366_727R) / 2560_14135) - bptilde4 = convert(T, + (8411_9543 + 366_727R) / 2560_14135 + ) + bptilde4 = convert( + T, (389225579 - 96856R) / 10_2405_6540 - - (8411_9543 - 366_727R) / 2560_14135) + (8411_9543 - 366_727R) / 2560_14135 + ) bptilde5 = convert(T, 2000 // 17901 - 6950 // 17901) bptilde6 = convert(T, 1 // 20 + 1 // 10) r14 = convert(T, 900 // 4212) @@ -1241,7 +1277,8 @@ function DPRKN6ConstantCache(T::Type, T2::Type) rp63 = convert(T, -4115 // 220) rp62 = convert(T, 3028 // 220) rp61 = convert(T, -702 // 220) - DPRKN6ConstantCache(c1, c2, c3, c4, c5, a21, a31, a32, a41, a42, a43, a51, + return DPRKN6ConstantCache( + c1, c2, c3, c4, c5, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a63, a64, a65, b1, b3, b4, b5, bp1, bp3, bp4, bp5, bp6, btilde1, btilde2, btilde3, btilde4, btilde5, bptilde1, bptilde3, bptilde4, bptilde5, bptilde6, @@ -1250,7 +1287,8 @@ function DPRKN6ConstantCache(T::Type, T2::Type) r53, r52, r51, r64, r63, r62, r61, rp14, rp13, rp12, rp11, rp10, rp34, rp33, rp32, rp31, rp44, rp43, rp42, rp41, rp54, rp53, rp52, rp51, - rp64, rp63, rp62, rp61) + rp64, rp63, rp62, rp61 + ) end struct DPRKN6FMConstantCache{T, T2} <: NystromConstantCache @@ -1345,10 +1383,12 @@ function DPRKN6FMConstantCache(T::Type, T2::Type) bptilde4 = convert(T, 275 // 252 - 521683 // 630000) bptilde5 = convert(T, -78125 // 112404 + 2 // 5) # bptilde6 = convert(T, 0) - DPRKN6FMConstantCache(c1, c2, c3, c4, c5, a21, a31, a32, a41, a42, a43, a51, a52, + return DPRKN6FMConstantCache( + c1, c2, c3, c4, c5, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, b1, b2, b3, b4, b5, bp1, bp2, bp3, bp4, bp5, bp6, btilde1, btilde2, btilde3, btilde4, btilde5, - bptilde1, bptilde2, bptilde3, bptilde4, bptilde5) + bptilde1, bptilde2, bptilde3, bptilde4, bptilde5 + ) end function DPRKN6FMConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) @@ -1393,10 +1433,12 @@ function DPRKN6FMConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo bptilde3 = convert(T, 0.0969690058479532) bptilde4 = convert(T, 0.26320158730158716) bptilde5 = convert(T, -0.2950375431479306) - DPRKN6FMConstantCache(c1, c2, c3, c4, c5, a21, a31, a32, a41, a42, a43, a51, a52, + return DPRKN6FMConstantCache( + c1, c2, c3, c4, c5, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, b1, b2, b3, b4, b5, bp1, bp2, bp3, bp4, bp5, bp6, btilde1, btilde2, btilde3, btilde4, btilde5, - bptilde1, bptilde2, bptilde3, bptilde4, bptilde5) + bptilde1, bptilde2, bptilde3, bptilde4, bptilde5 + ) end struct DPRKN8ConstantCache{T, T2} <: NystromConstantCache @@ -1563,17 +1605,20 @@ function DPRKN8ConstantCache(T::Type, T2::Type) bptilde7 = convert(T, 5875 // 36288 - 1610_737 // 40207_104) bptilde8 = convert(T, 223 // 7938 + 4251_941 // 5497_0650) bptilde9 = convert(T, -3 // 20) - DPRKN8ConstantCache(c1, c2, c3, c4, c5, c6, c7, c8, a21, a31, a32, a41, a42, a43, a51, + return DPRKN8ConstantCache( + c1, c2, c3, c4, c5, c6, c7, c8, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, a81, a82, a83, a84, a85, a86, a87, a91, a93, a94, a95, a96, a97, b1, b3, b4, b5, b6, b7, bp1, bp3, bp4, bp5, bp6, bp7, bp8, btilde1, btilde3, btilde4, btilde5, btilde6, btilde7, bptilde1, bptilde3, bptilde4, bptilde5, bptilde6, bptilde7, bptilde8, - bptilde9) + bptilde9 + ) end function DPRKN8ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) - DPRKN8ConstantCache(convert(T2, 0.05), + return DPRKN8ConstantCache( + convert(T2, 0.05), convert(T2, 0.1), convert(T2, 0.3), convert(T2, 0.5), @@ -1641,7 +1686,8 @@ function DPRKN8ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloat convert(T, -0.2088655633733638), convert(T, 0.12183824530112887), convert(T, 0.10544201314701572), - convert(T, -0.15)) + convert(T, -0.15) + ) end struct DPRKN12ConstantCache{T, T2} <: NystromConstantCache @@ -1934,222 +1980,388 @@ function DPRKN12ConstantCache(T::Type, T2::Type) a113 = convert(T, -1143766215625 // 132752960853408) a114 = convert(T, -6864570325 // 1185294293334) a115 = convert(T, 194348369382310456605879163404183 // 99893545535998594328205911551744) - a116 = convert(T, + a116 = convert( + T, -94634958447010580589908066176109375 // - 27549212808177898050085930321520256) + 27549212808177898050085930321520256 + ) a117 = convert(T, -17006472665356285286219618514 // 155584463413110817059022733377) a118 = convert(T, 33530528814694461893884349656345 // 14270506505142656332600844507392) a119 = convert(T, -13439782155791134368 // 17777268379678341919) a1110 = convert(T, 1441341768767571 // 13159456712985856) - a121 = convert(T, + a121 = convert( + T, parse(BigInt, "105854110734231079069010159870911189747853") // - parse(BigInt, "5156624149476760916008179453333467046288864")) + parse(BigInt, "5156624149476760916008179453333467046288864") + ) # a122 = convert(T,0) a123 = convert(T, -144579793509250000 // 19842290513127000261) a124 = convert(T, -101935644099967250 // 48188419817594143491) - a125 = convert(T, + a125 = convert( + T, parse(BigInt, "1585474394319811696785932424388196965") // - parse(BigInt, "1709257457318830856936350991091849456")) - a126 = convert(T, + parse(BigInt, "1709257457318830856936350991091849456") + ) + a126 = convert( + T, parse(BigInt, "-843499776333774172853009613469456309715703125") // - parse(BigInt, "510505790798199330684809765880013237582597536")) - a127 = convert(T, + parse(BigInt, "510505790798199330684809765880013237582597536") + ) + a127 = convert( + T, parse(BigInt, "-15057703799298260121553794369056896088480") // - parse(BigInt, "714327132646734138085088291809720015274157")) - a128 = convert(T, + parse(BigInt, "714327132646734138085088291809720015274157") + ) + a128 = convert( + T, parse(BigInt, "1749840442221344572962864758990584360232600") // - parse(BigInt, "1450300542040339007627300471250037606768743")) + parse(BigInt, "1450300542040339007627300471250037606768743") + ) a129 = convert(T, -11255775246405733991656178432768 // 27206626483067760480757659602193) a1210 = convert(T, 669010348769579696 // 7368057640845834597) a1211 = convert(T, 4598083098752 // 858563707934367) - a131 = convert(T, + a131 = convert( + T, parse(BigInt, "-1639758773684715326849438048667467886824967397") // - parse(BigInt, "11447568726280607813664651120965112496134881280")) + parse(BigInt, "11447568726280607813664651120965112496134881280") + ) # a132 = convert(T,0) a133 = convert(T, 3942453384375 // 314673684985856) a134 = convert(T, 11737114158175 // 1719466921529856) - a135 = convert(T, + a135 = convert( + T, -23710715033675876683332701739887457 // - 4940189888325748664958546898558976) - a136 = convert(T, + 4940189888325748664958546898558976 + ) + a136 = convert( + T, parse(BigInt, "498150575499633273684774666731162498301909124515625") // - parse(BigInt, "87415924307623977386706008889913792042985180430336")) - a137 = convert(T, + parse(BigInt, "87415924307623977386706008889913792042985180430336") + ) + a137 = convert( + T, parse(BigInt, "64881557768202140428371179540010005713998551") // - parse(BigInt, "85896810580242200654071863296887242202224768")) - a138 = convert(T, + parse(BigInt, "85896810580242200654071863296887242202224768") + ) + a138 = convert( + T, parse(BigInt, "-2336309182318568698279006266321563486172654055") // - parse(BigInt, "18316109962048972501863441793544179993815810048")) - a139 = convert(T, - -493399374030747471036018890494175 // 251658285736841065236836942273664) + parse(BigInt, "18316109962048972501863441793544179993815810048") + ) + a139 = convert( + T, + -493399374030747471036018890494175 // 251658285736841065236836942273664 + ) a1310 = convert(T, 418285003077108927126515545155 // 455369916679568501838710898688) a1311 = convert(T, -15171723902781457 // 63532954684873728) a1312 = convert(T, 1501203688494867 // 9434957026426880) - a141 = convert(T, + a141 = convert( + T, parse(BigInt, "34188549803371802849576690267872548602326398788953") // - parse(BigInt, "42496542183406636759747616530102745233754251202880")) + parse(BigInt, "42496542183406636759747616530102745233754251202880") + ) # a142 = convert(T,0) a143 = convert(T, -18971246281693750 // 1138830954584356089) a144 = convert(T, -59230464334542700 // 2765732318276293359) - a145 = convert(T, + a145 = convert( + T, parse(BigInt, "5147939981309774383134903239728881770043") // - parse(BigInt, "305929030949718561059100251282184099064")) - a146 = convert(T, - parse(BigInt, - "-3625720213550267723370658302114678215563058405229078120") // - parse(BigInt, "324512095420929759624784749347170583153994213035432256")) - a147 = convert(T, + parse(BigInt, "305929030949718561059100251282184099064") + ) + a146 = convert( + T, + parse( + BigInt, + "-3625720213550267723370658302114678215563058405229078120" + ) // + parse(BigInt, "324512095420929759624784749347170583153994213035432256") + ) + a147 = convert( + T, parse(BigInt, "-60305503318319653518547439098565661266182518307816") // - parse(BigInt, "17856872599361492097414471889911176856851308259643")) - a148 = convert(T, + parse(BigInt, "17856872599361492097414471889911176856851308259643") + ) + a148 = convert( + T, parse(BigInt, "-1036461878759982363277481306266144563833492657780645") // - parse(BigInt, "67994467493450618815596186448164392374006801924608")) - a149 = convert(T, + parse(BigInt, "67994467493450618815596186448164392374006801924608") + ) + a149 = convert( + T, parse(BigInt, "128398681100219349205889126776607047000") // - parse(BigInt, "7473801441221286756994805323613917077")) + parse(BigInt, "7473801441221286756994805323613917077") + ) a1410 = convert(T, -49156374556350058671822606102117 // 9039888303968618912866414995904) a1411 = convert(T, 12253036339964386945 // 8828680926314891943) a1412 = convert(T, -647188390508758231059 // 1092148506009694282240) a1413 = convert(T, 10915833599872 // 368729913707897) - a151 = convert(T, - parse(BigInt, - "-4939337286263213195547765488387521892799075623007291241961609516532") // - parse(BigInt, - "5408250052307451520718178852915698257207815452080611897685945761264")) + a151 = convert( + T, + parse( + BigInt, + "-4939337286263213195547765488387521892799075623007291241961609516532" + ) // + parse( + BigInt, + "5408250052307451520718178852915698257207815452080611897685945761264" + ) + ) # a152 = convert(T,0) - a153 = convert(T, + a153 = convert( + T, 7588799849596321243074032368290625 // - parse(BigInt, "3147217749590114939838670370597819616")) - a154 = convert(T, + parse(BigInt, "3147217749590114939838670370597819616") + ) + a154 = convert( + T, 16870665568420512953501332587233725 // - 955405388268427749593882076788623812) - a155 = convert(T, - parse(BigInt, - "-808642515918378014850308582271476014669568437579087796060") // - parse(BigInt, - "54447992506702009927986632715967769032585338753056786562")) - a156 = convert(T, - parse(BigInt, - "4610328329649866588704236006423149172472141907645890762410296050212") // - parse(BigInt, - "2135428689710103309390449198881479603148467934048051598947383737508")) - a157 = convert(T, - parse(BigInt, - "4159963831215576225909381034291748993887819834160487158570788681") // - parse(BigInt, - "1040533184037697645660563795162185415624171583014576682740416336")) - a158 = convert(T, - parse(BigInt, - "7381392142124351279433801934148706553542137071890521365664606664449580") // - parse(BigInt, - "259596002510757672994472584939953516345975141699869371088925396540699")) - a159 = convert(T, - parse(BigInt, - "-3336834334584052813468828675971359774694437229547862706920") // - parse(BigInt, - "132102862435303266640535426836147775872819092781208127980")) - a1510 = convert(T, - parse(BigInt, - "426619379967412086875039012957475466130081426048213491790") // - parse(BigInt, - "55162410119399855550108207148248549410926885937244965785")) - a1511 = convert(T, + 955405388268427749593882076788623812 + ) + a155 = convert( + T, + parse( + BigInt, + "-808642515918378014850308582271476014669568437579087796060" + ) // + parse( + BigInt, + "54447992506702009927986632715967769032585338753056786562" + ) + ) + a156 = convert( + T, + parse( + BigInt, + "4610328329649866588704236006423149172472141907645890762410296050212" + ) // + parse( + BigInt, + "2135428689710103309390449198881479603148467934048051598947383737508" + ) + ) + a157 = convert( + T, + parse( + BigInt, + "4159963831215576225909381034291748993887819834160487158570788681" + ) // + parse( + BigInt, + "1040533184037697645660563795162185415624171583014576682740416336" + ) + ) + a158 = convert( + T, + parse( + BigInt, + "7381392142124351279433801934148706553542137071890521365664606664449580" + ) // + parse( + BigInt, + "259596002510757672994472584939953516345975141699869371088925396540699" + ) + ) + a159 = convert( + T, + parse( + BigInt, + "-3336834334584052813468828675971359774694437229547862706920" + ) // + parse( + BigInt, + "132102862435303266640535426836147775872819092781208127980" + ) + ) + a1510 = convert( + T, + parse( + BigInt, + "426619379967412086875039012957475466130081426048213491790" + ) // + parse( + BigInt, + "55162410119399855550108207148248549410926885937244965785" + ) + ) + a1511 = convert( + T, parse(BigInt, "-630755628691078947314733435975762542732598947") // - parse(BigInt, "333503232300511886435069380727586592765317456")) - a1512 = convert(T, + parse(BigInt, "333503232300511886435069380727586592765317456") + ) + a1512 = convert( + T, parse(BigInt, "1522350657470125698997653827133798314909646891") // - parse(BigInt, "1520094067152619944607524353149267399623188480")) - a1513 = convert(T, + parse(BigInt, "1520094067152619944607524353149267399623188480") + ) + a1513 = convert( + T, 305575414262755427083262606101825880 // - parse(BigInt, "65839748482572312891297405431209259829")) - a1514 = convert(T, + parse(BigInt, "65839748482572312891297405431209259829") + ) + a1514 = convert( + T, parse(BigInt, "256624643108055110568255672032710477795") // - parse(BigInt, "22874609758516552135947898572671559986304")) - a161 = convert(T, - parse(BigInt, - "-571597862947184314270186718640978947715678864684269066846") // - parse(BigInt, - "2077055064880303907616135969012720011907767004397744786340")) + parse(BigInt, "22874609758516552135947898572671559986304") + ) + a161 = convert( + T, + parse( + BigInt, + "-571597862947184314270186718640978947715678864684269066846" + ) // + parse( + BigInt, + "2077055064880303907616135969012720011907767004397744786340" + ) + ) # a162 = convert(T,0) a163 = convert(T, 66981514290625 // 1829501741761029) a164 = convert(T, 43495576635800 // 4443075658562499) - a165 = convert(T, + a165 = convert( + T, -127865248353371207265315478623656127 // - 10401415428935853634424440540325344) - a166 = convert(T, - parse(BigInt, - "1316565142658075739557231574080234814338066993483960326560") // - parse(BigInt, - "92668695535091962564795912774190176478892159517481612467")) - a167 = convert(T, - parse(BigInt, - "3881494143728609118531066904799685950051960514138645179820") // - parse(BigInt, - "2446349095978358868919950548516272963929118212742344026549")) - a168 = convert(T, - parse(BigInt, - "162922667049680755852592453758428194006198229544701786842910") // - parse(BigInt, - "66288722243155885736983218667976563740242178853010092663614")) - a169 = convert(T, + 10401415428935853634424440540325344 + ) + a166 = convert( + T, + parse( + BigInt, + "1316565142658075739557231574080234814338066993483960326560" + ) // + parse( + BigInt, + "92668695535091962564795912774190176478892159517481612467" + ) + ) + a167 = convert( + T, + parse( + BigInt, + "3881494143728609118531066904799685950051960514138645179820" + ) // + parse( + BigInt, + "2446349095978358868919950548516272963929118212742344026549" + ) + ) + a168 = convert( + T, + parse( + BigInt, + "162922667049680755852592453758428194006198229544701786842910" + ) // + parse( + BigInt, + "66288722243155885736983218667976563740242178853010092663614" + ) + ) + a169 = convert( + T, parse(BigInt, "-43986024977384568043684084266385512680544563954") // - parse(BigInt, "4922783599524658241955780540171948284522386185")) - a1610 = convert(T, + parse(BigInt, "4922783599524658241955780540171948284522386185") + ) + a1610 = convert( + T, parse(BigInt, "285912200202585226675651763671663063668290787") // - parse(BigInt, "65371192072964016939690070594254881767827200")) + parse(BigInt, "65371192072964016939690070594254881767827200") + ) a1611 = convert(T, -6776815256667778089672518929 // 3693654613173093729492918708) - a1612 = convert(T, - 398946554885847045598775476868169 // 344154261237450078839899047372800) + a1612 = convert( + T, + 398946554885847045598775476868169 // 344154261237450078839899047372800 + ) a1613 = convert(T, -76630698033396272 // 4432017119727044925) a1614 = convert(T, 28401702316003037 // 1469612686944417840) - a1615 = convert(T, + a1615 = convert( + T, 66049942462586341419969330578128801 // - parse(BigInt, "12691068622536592094919763114637498325")) - a171 = convert(T, - parse(BigInt, - "83940754497395557520874219603241359529066454343054832302344735") // - parse(BigInt, - "64192596456995578553872477759926464976144474354415663868673233")) + parse(BigInt, "12691068622536592094919763114637498325") + ) + a171 = convert( + T, + parse( + BigInt, + "83940754497395557520874219603241359529066454343054832302344735" + ) // + parse( + BigInt, + "64192596456995578553872477759926464976144474354415663868673233" + ) + ) # a172 = convert(T,0) a173 = convert(T, 892543892035485503125 // 51401651664490002607536) a174 = convert(T, -12732238157949399705325 // 686579204375687891972088) - a175 = convert(T, + a175 = convert( + T, parse(BigInt, "5290376174838819557032232941734928484252549") // - parse(BigInt, "357179779572898187570048915214361602000384")) - a176 = convert(T, - parse(BigInt, - "26873229338017506937199991804717456666650215387938173031932210") // - parse(BigInt, - "2863980005760296740624015421425947092438943496681472214589916")) - a177 = convert(T, - parse(BigInt, - "-1976497866818803305857417297961598735637414137241493515492778650") // - parse(BigInt, - "378029217824623393200881653405474359138017953416246216408422692")) - a178 = convert(T, - parse(BigInt, - "-1002860756304839757040188283199900676042073362417943601440986856950") // - parse(BigInt, - "20486915674765670626893195919603679319429068544972409068469849579")) - a179 = convert(T, - parse(BigInt, - "87398661196965758104117684348440686081062878816711392590") // - parse(BigInt, "2282122412587168891929052689609009868137678763277087160")) - a1710 = convert(T, - parse(BigInt, - "-7922242431969626895355493632206885458496418610471389") // - parse(BigInt, "748272134517487495468365669337985635214015258726400")) - a1711 = convert(T, + parse(BigInt, "357179779572898187570048915214361602000384") + ) + a176 = convert( + T, + parse( + BigInt, + "26873229338017506937199991804717456666650215387938173031932210" + ) // + parse( + BigInt, + "2863980005760296740624015421425947092438943496681472214589916" + ) + ) + a177 = convert( + T, + parse( + BigInt, + "-1976497866818803305857417297961598735637414137241493515492778650" + ) // + parse( + BigInt, + "378029217824623393200881653405474359138017953416246216408422692" + ) + ) + a178 = convert( + T, + parse( + BigInt, + "-1002860756304839757040188283199900676042073362417943601440986856950" + ) // + parse( + BigInt, + "20486915674765670626893195919603679319429068544972409068469849579" + ) + ) + a179 = convert( + T, + parse( + BigInt, + "87398661196965758104117684348440686081062878816711392590" + ) // + parse(BigInt, "2282122412587168891929052689609009868137678763277087160") + ) + a1710 = convert( + T, + parse( + BigInt, + "-7922242431969626895355493632206885458496418610471389" + ) // + parse(BigInt, "748272134517487495468365669337985635214015258726400") + ) + a1711 = convert( + T, parse(BigInt, "2777643183645212014464950387658055285") // - parse(BigInt, "1141545470045611737197667093465955392")) - a1712 = convert(T, + parse(BigInt, "1141545470045611737197667093465955392") + ) + a1712 = convert( + T, parse(BigInt, "-1372659703515496442825084239977218110461") // - parse(BigInt, "1313121960368535725613950174847107891200")) + parse(BigInt, "1313121960368535725613950174847107891200") + ) a1713 = convert(T, 6144417902699179309851023 // 85608793932459282773805825) a1714 = convert(T, 140294243355138853053241 // 64884622846351585391642880) - a1715 = convert(T, + a1715 = convert( + T, parse(BigInt, "168671028523891369934964082754523881107337") // - parse(BigInt, "24062875279623260368388427013982199424119600")) + parse(BigInt, "24062875279623260368388427013982199424119600") + ) # a1716 = convert(T,0) b1 = convert(T, 63818747 // 5262156900) # b2 = convert(T,0) @@ -2165,9 +2377,11 @@ function DPRKN12ConstantCache(T::Type, T2::Type) b12 = convert(T, 16089185487681 // 146694672924800) b13 = convert(T, 1592709632 // 41841694125) b14 = convert(T, 52675701958271 // 4527711056573100) - b15 = convert(T, + b15 = convert( + T, parse(BigInt, "12540904472870916741199505796420811396") // - parse(BigInt, "2692319557780977037279406889319526430375")) + parse(BigInt, "2692319557780977037279406889319526430375") + ) # b16 = convert(T,0) # b17 = convert(T,0) bp1 = convert(T, 63818747 // 5262156900) @@ -2184,91 +2398,134 @@ function DPRKN12ConstantCache(T::Type, T2::Type) bp12 = convert(T, 144802669389129 // 586778691699200) bp13 = convert(T, 6370838528 // 41841694125) bp14 = convert(T, 368729913707897 // 4527711056573100) - bp15 = convert(T, + bp15 = convert( + T, parse(BigInt, "111940113324845802831946788738852162520696") // - parse(BigInt, "1316544263754897771229629968877248424453375")) + parse(BigInt, "1316544263754897771229629968877248424453375") + ) bp16 = convert(T, -113178587 // 12362232960) bp17 = convert(T, 1 // 40) - btilde1 = convert(T, + btilde1 = convert( + T, Int64(63818747) // Int64(5262156900) - - Int64(27121957) // Int64(1594593000)) + Int64(27121957) // Int64(1594593000) + ) # btilde2 = convert(T,0) # btilde3 = convert(T,0) # btilde4 = convert(T,0) # btilde5 = convert(T,0) # btilde6 = convert(T,0) - btilde7 = convert(T, + btilde7 = convert( + T, Int64(22555300000000) // Int64(261366897038247) - - Int64(4006163300000) // Int64(55441463008113)) - btilde8 = convert(T, + Int64(4006163300000) // Int64(55441463008113) + ) + btilde8 = convert( + T, Int64(1696514453125) // Int64(6717619827072) - - Int64(9466403125) // Int64(25445529648)) - btilde9 = convert(T, + Int64(9466403125) // Int64(25445529648) + ) + btilde9 = convert( + T, Int64(-45359872) // Int64(229764843) + - Int64(163199648) // Int64(406149975)) - btilde10 = convert(T, + Int64(163199648) // Int64(406149975) + ) + btilde10 = convert( + T, Int64(19174962087) // Int64(94371046000) - - Int64(23359833) // Int64(69636250)) - btilde11 = convert(T, + Int64(23359833) // Int64(69636250) + ) + btilde11 = convert( + T, Int64(-19310468) // Int64(929468925) + - Int64(18491714) // Int64(140828625)) - btilde12 = convert(T, + Int64(18491714) // Int64(140828625) + ) + btilde12 = convert( + T, Int64(16089185487681) // Int64(146694672924800) - - Int64(11052304606701) // Int64(58344472186000)) - btilde13 = convert(T, + Int64(11052304606701) // Int64(58344472186000) + ) + btilde13 = convert( + T, Int64(1592709632) // Int64(41841694125) - - Int64(1191129152) // Int64(44377554375)) - btilde14 = convert(T, + Int64(1191129152) // Int64(44377554375) + ) + btilde14 = convert( + T, Int64(52675701958271) // Int64(4527711056573100) - - Int64(2033811086741) // Int64(124730332137000)) - btilde15 = convert(T, + Int64(2033811086741) // Int64(124730332137000) + ) + btilde15 = convert( + T, parse(BigInt, "12540904472870916741199505796420811396") // - parse(BigInt, "2692319557780977037279406889319526430375") - - parse(BigInt, "3616943474975740389660406409450169802") // - parse(BigInt, "951830146690244407118982233597812374375")) + parse(BigInt, "2692319557780977037279406889319526430375") - + parse(BigInt, "3616943474975740389660406409450169802") // + parse(BigInt, "951830146690244407118982233597812374375") + ) # btilde16 = convert(T,0) # btilde17 = convert(T,0) - bptilde1 = convert(T, + bptilde1 = convert( + T, Int64(63818747) // Int64(5262156900) - - Int64(27121957) // Int64(1594593000)) + Int64(27121957) // Int64(1594593000) + ) # bptilde2 = convert(T,0) # bptilde3 = convert(T,0) # bptilde4 = convert(T,0) # bptilde5 = convert(T,0) # bptilde6 = convert(T,0) - bptilde7 = convert(T, + bptilde7 = convert( + T, Int64(451106000000000) // Int64(4965971043726693) - - Int64(4217014000000) // Int64(55441463008113)) - bptilde8 = convert(T, + Int64(4217014000000) // Int64(55441463008113) + ) + bptilde8 = convert( + T, Int64(8482572265625) // Int64(26870479308288) - - Int64(47332015625) // Int64(101782118592)) - bptilde9 = convert(T, + Int64(47332015625) // Int64(101782118592) + ) + bptilde9 = convert( + T, Int64(-181439488) // Int64(689294529) + - Int64(652798592) // Int64(1218449925)) - bptilde10 = convert(T, + Int64(652798592) // Int64(1218449925) + ) + bptilde10 = convert( + T, Int64(57524886261) // Int64(188742092000) - - Int64(70079499) // Int64(139272500)) - bptilde11 = convert(T, + Int64(70079499) // Int64(139272500) + ) + bptilde11 = convert( + T, Int64(-38620936) // Int64(929468925) + - Int64(36983428) // Int64(140828625)) - bptilde12 = convert(T, + Int64(36983428) // Int64(140828625) + ) + bptilde12 = convert( + T, Int64(144802669389129) // Int64(586778691699200) - - Int64(99470741460309) // Int64(233377888744000)) - bptilde13 = convert(T, + Int64(99470741460309) // Int64(233377888744000) + ) + bptilde13 = convert( + T, Int64(6370838528) // Int64(41841694125) - - Int64(4764516608) // Int64(44377554375)) - bptilde14 = convert(T, + Int64(4764516608) // Int64(44377554375) + ) + bptilde14 = convert( + T, Int64(368729913707897) // Int64(4527711056573100) - - Int64(14236677607187) // Int64(124730332137000)) - bptilde15 = convert(T, + Int64(14236677607187) // Int64(124730332137000) + ) + bptilde15 = convert( + T, parse(BigInt, "111940113324845802831946788738852162520696") // - parse(BigInt, "1316544263754897771229629968877248424453375") - - parse(BigInt, "198066487470143918516004831967805004004") // - parse(BigInt, "2855490440070733221356946700793437123125")) + parse(BigInt, "1316544263754897771229629968877248424453375") - + parse(BigInt, "198066487470143918516004831967805004004") // + parse(BigInt, "2855490440070733221356946700793437123125") + ) bptilde16 = convert(T, Int64(-113178587) // Int64(12362232960) - Int64(1) // Int64(50)) bptilde17 = convert(T, 1 // 40) - DPRKN12ConstantCache(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, + return DPRKN12ConstantCache( + c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, a21, a31, a32, a41, a42, a43, a51, a53, a54, a61, a63, a64, a65, a71, a73, a74, a75, a76, a81, a84, a85, a86, a87, a91, a93, a94, a95, a96, a97, a98, a101, a103, a104, a105, a106, a107, a108, @@ -2285,11 +2542,13 @@ function DPRKN12ConstantCache(T::Type, T2::Type) btilde1, btilde7, btilde8, btilde9, btilde10, btilde11, btilde12, btilde13, btilde14, btilde15, bptilde1, bptilde7, bptilde8, bptilde9, bptilde10, bptilde11, bptilde12, bptilde13, bptilde14, - bptilde15, bptilde16, bptilde17) + bptilde15, bptilde16, bptilde17 + ) end function DPRKN12ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) - DPRKN12ConstantCache(convert(T2, 2.0e-2), + return DPRKN12ConstantCache( + convert(T2, 2.0e-2), convert(T2, 4.0e-2), convert(T2, 1.0e-1), convert(T2, 1.33333333333333333333333333333e-1), @@ -2469,5 +2728,6 @@ function DPRKN12ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloa convert(T, -0.03270117761115586), convert(T, 0.015662325288859434), convert(T, -0.029155189630077964), - convert(T, 0.025)) + convert(T, 0.025) + ) end diff --git a/lib/OrdinaryDiffEqRKN/test/jet.jl b/lib/OrdinaryDiffEqRKN/test/jet.jl index c484423cd7..095c7c633e 100644 --- a/lib/OrdinaryDiffEqRKN/test/jet.jl +++ b/lib/OrdinaryDiffEqRKN/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqRKN, target_defined_modules = true, mode = :typo) + OrdinaryDiffEqRKN, target_defined_modules = true, mode = :typo + ) end diff --git a/lib/OrdinaryDiffEqRKN/test/nystrom_convergence_tests.jl b/lib/OrdinaryDiffEqRKN/test/nystrom_convergence_tests.jl index 26b03b3732..1bd173b366 100644 --- a/lib/OrdinaryDiffEqRKN/test/nystrom_convergence_tests.jl +++ b/lib/OrdinaryDiffEqRKN/test/nystrom_convergence_tests.jl @@ -3,49 +3,51 @@ using OrdinaryDiffEqRKN, Test, RecursiveArrayTools, DiffEqDevTools, Statistics u0 = fill(0.0, 2) v0 = ones(2) function f1_harmonic(dv, v, u, p, t) - dv .= -u + return dv .= -u end function f2_harmonic(du, v, u, p, t) - du .= v + return du .= v end function harmonic_analytic(y0, p, x) v0, u0 = y0.x - ArrayPartition(-u0 * sin(x) + v0 * cos(x), u0 * cos(x) + v0 * sin(x)) + return ArrayPartition(-u0 * sin(x) + v0 * cos(x), u0 * cos(x) + v0 * sin(x)) end ff_harmonic = DynamicalODEFunction(f1_harmonic, f2_harmonic; analytic = harmonic_analytic) prob = DynamicalODEProblem(ff_harmonic, v0, u0, (0.0, 5.0)) # Methods need BigFloat to test convergence rate dts = big"1.0" ./ big"2.0" .^ (5:-1:1) -prob_big = DynamicalODEProblem(ff_harmonic, [big"1.0", big"1.0"], - [big"0.0", big"0.0"], (big"0.", big"70.")) +prob_big = DynamicalODEProblem( + ff_harmonic, [big"1.0", big"1.0"], + [big"0.0", big"0.0"], (big"0.", big"70.") +) sim = test_convergence(dts, prob_big, DPRKN4(), dense_errors = true) -@test sim.𝒪est[:l2]≈4 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob_big, DPRKN5(), dense_errors = true) -@test sim.𝒪est[:l2]≈5 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 5 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob_big, DPRKN6(), dense_errors = true) -@test sim.𝒪est[:l2]≈6 rtol=1e-1 -@test sim.𝒪est[:L2]≈6 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 6 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 6 rtol = 1.0e-1 sim = test_convergence(dts, prob_big, DPRKN6FM(), dense_errors = true) -@test sim.𝒪est[:l2]≈6 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 6 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob_big, DPRKN8(), dense_errors = true) -@test sim.𝒪est[:l2]≈8 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 8 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob_big, DPRKN12(), dense_errors = true) -@test sim.𝒪est[:l2]≈12 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 12 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob_big, ERKN4(), dense_errors = true) -@test sim.𝒪est[:l2]≈5 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 5 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob_big, ERKN5(), dense_errors = true) -@test sim.𝒪est[:l2]≈5 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 5 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob_big, ERKN7(), dense_errors = true) -@test sim.𝒪est[:l2]≈7 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 7 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 # Float64 convergence tests for DPRKN methods # These tests ensure the CompiledFloats coefficients match the rational coefficients @@ -56,22 +58,22 @@ sim = test_convergence(dts, prob_big, ERKN7(), dense_errors = true) dts_f64 = 1.0 ./ 2.0 .^ (2:5) sim = test_convergence(dts_f64, prob_f64, DPRKN4()) - @test sim.𝒪est[:l2]≈4 rtol=1e-1 + @test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts_f64, prob_f64, DPRKN5()) - @test sim.𝒪est[:l2]≈5 rtol=1e-1 + @test sim.𝒪est[:l2] ≈ 5 rtol = 1.0e-1 sim = test_convergence(dts_f64, prob_f64, DPRKN6()) - @test sim.𝒪est[:l2]≈6 rtol=1e-1 + @test sim.𝒪est[:l2] ≈ 6 rtol = 1.0e-1 sim = test_convergence(dts_f64, prob_f64, DPRKN6FM()) - @test sim.𝒪est[:l2]≈6 rtol=1e-1 + @test sim.𝒪est[:l2] ≈ 6 rtol = 1.0e-1 # DPRKN8 needs larger timesteps and longer integration to avoid hitting machine precision prob_f64_long = DynamicalODEProblem(ff_harmonic, ones(2), fill(0.0, 2), (0.0, 50.0)) dts_f64_large = [1.0, 0.5, 0.25, 0.125] sim = test_convergence(dts_f64_large, prob_f64_long, DPRKN8()) - @test sim.𝒪est[:l2]≈8 rtol=1e-1 + @test sim.𝒪est[:l2] ≈ 8 rtol = 1.0e-1 # DPRKN12 is too accurate for Float64 convergence testing (hits machine precision # even at dt=1.0), so we only test it with BigFloat (see tests above) @@ -82,30 +84,30 @@ sol = solve(prob, Nystrom4(), dt = 1 / 1000) # Nyström method dts = 1 .// 2 .^ (9:-1:6) sim = test_convergence(dts, prob, RKN4(), dense_errors = true) -@test sim.𝒪est[:l2]≈4 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, Nystrom4(), dense_errors = true) -@test sim.𝒪est[:l2]≈4 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, Nystrom4VelocityIndependent(), dense_errors = true) -@test sim.𝒪est[:l2]≈4 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, IRKN3(), dense_errors = true) -@test sim.𝒪est[:l2]≈3 rtol=1e-1 -@test sim.𝒪est[:L2]≈3 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 3 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 3 rtol = 1.0e-1 sim = test_convergence(dts, prob, IRKN4(), dense_errors = true) -@test sim.𝒪est[:l2]≈4 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 dts = 1.0 ./ 2.0 .^ (5:-1:0) sim = test_convergence(dts, prob, Nystrom5VelocityIndependent(), dense_errors = true) -@test sim.𝒪est[:l2]≈5 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 5 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, FineRKN4(), dense_errors = true) -@test sim.𝒪est[:l2]≈5 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 5 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, FineRKN5(), dense_errors = true) -@test sim.𝒪est[:l2]≈6 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 6 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 # Adaptive methods regression test sol = solve(prob, FineRKN4()) @@ -132,87 +134,91 @@ sol = solve(prob, DPRKN8()) sol = solve(prob, DPRKN12()) @test length(sol.u) < 10 @test SciMLBase.successful_retcode(sol) -sol = solve(prob, ERKN4(), reltol = 1e-8) +sol = solve(prob, ERKN4(), reltol = 1.0e-8) @test length(sol.u) < 38 @test SciMLBase.successful_retcode(sol) -sol = solve(prob, ERKN5(), reltol = 1e-8) +sol = solve(prob, ERKN5(), reltol = 1.0e-8) @test length(sol.u) < 34 @test SciMLBase.successful_retcode(sol) -sol = solve(prob, ERKN7(), reltol = 1e-8) +sol = solve(prob, ERKN7(), reltol = 1.0e-8) @test length(sol.u) < 38 @test SciMLBase.successful_retcode(sol) u0 = 0.0 v0 = 1.0 function f1_harmonic_nip(v, u, p, t) - -u + return -u end function f2_harmonic_nip(v, u, p, t) - v + return v end -ff_harmonic_nip = DynamicalODEFunction(f1_harmonic_nip, f2_harmonic_nip; - analytic = harmonic_analytic) +ff_harmonic_nip = DynamicalODEFunction( + f1_harmonic_nip, f2_harmonic_nip; + analytic = harmonic_analytic +) prob = DynamicalODEProblem(ff_harmonic_nip, v0, u0, (0.0, 5.0)) dts = 1 .// 2 .^ (9:-1:6) sim = test_convergence(dts, prob, RKN4(), dense_errors = true) -@test sim.𝒪est[:l2]≈4 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, Nystrom4(), dense_errors = true) -@test sim.𝒪est[:l2]≈4 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, Nystrom4VelocityIndependent(), dense_errors = true) -@test sim.𝒪est[:l2]≈4 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 @test_broken sim = test_convergence(dts, prob, IRKN3(), dense_errors = true) -@test_broken sim.𝒪est[:l2]≈3 rtol=1e-1 -@test_broken sim.𝒪est[:L2]≈3 rtol=1e-1 +@test_broken sim.𝒪est[:l2] ≈ 3 rtol = 1.0e-1 +@test_broken sim.𝒪est[:L2] ≈ 3 rtol = 1.0e-1 @test_broken sim = test_convergence(dts, prob, IRKN4(), dense_errors = true) #@test_broken sim.𝒪est[:l2] ≈ 4 rtol = 1e-1 #@test_broken sim.𝒪est[:L2] ≈ 4 rtol = 1e-1 dts = 1.0 ./ 2.0 .^ (5:-1:0) sim = test_convergence(dts, prob, Nystrom5VelocityIndependent(), dense_errors = true) -@test sim.𝒪est[:l2]≈5 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 5 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, FineRKN4(), dense_errors = true) -@test sim.𝒪est[:l2]≈5 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 5 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, FineRKN5(), dense_errors = true) -@test sim.𝒪est[:l2]≈6 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 6 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 # Methods need BigFloat to test convergence rate dts = big"1.0" ./ big"2.0" .^ (5:-1:1) -prob_big = DynamicalODEProblem(ff_harmonic_nip, big"1.0", big"0.0", - (big"0.", big"70.")) +prob_big = DynamicalODEProblem( + ff_harmonic_nip, big"1.0", big"0.0", + (big"0.", big"70.") +) sim = test_convergence(dts, prob_big, DPRKN4(), dense_errors = true) -@test sim.𝒪est[:l2]≈4 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob_big, DPRKN5(), dense_errors = true) -@test sim.𝒪est[:l2]≈5 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 5 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob_big, DPRKN6(), dense_errors = true) -@test sim.𝒪est[:l2]≈6 rtol=1e-1 -@test sim.𝒪est[:L2]≈6 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 6 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 6 rtol = 1.0e-1 sim = test_convergence(dts, prob_big, DPRKN6FM(), dense_errors = true) -@test sim.𝒪est[:l2]≈6 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 6 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob_big, DPRKN8(), dense_errors = true) -@test sim.𝒪est[:l2]≈8 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 8 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob_big, DPRKN12(), dense_errors = true) -@test sim.𝒪est[:l2]≈12 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 12 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob_big, ERKN4(), dense_errors = true) -@test sim.𝒪est[:l2]≈5 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 5 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob_big, ERKN5(), dense_errors = true) -@test sim.𝒪est[:l2]≈5 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 5 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob_big, ERKN7(), dense_errors = true) -@test sim.𝒪est[:l2]≈7 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 7 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 # Adaptive methods regression test sol = solve(prob, FineRKN4()) @@ -239,13 +245,13 @@ sol = solve(prob, DPRKN8()) sol = solve(prob, DPRKN12()) @test length(sol.u) < 10 @test SciMLBase.successful_retcode(sol) -sol = solve(prob, ERKN4(), reltol = 1e-8) +sol = solve(prob, ERKN4(), reltol = 1.0e-8) @test length(sol.u) < 38 @test SciMLBase.successful_retcode(sol) -sol = solve(prob, ERKN5(), reltol = 1e-8) +sol = solve(prob, ERKN5(), reltol = 1.0e-8) @test length(sol.u) < 34 @test SciMLBase.successful_retcode(sol) -sol = solve(prob, ERKN7(), reltol = 1e-8) +sol = solve(prob, ERKN7(), reltol = 1.0e-8) @test length(sol.u) < 38 @test SciMLBase.successful_retcode(sol) @@ -254,32 +260,40 @@ println("Out of Place") # Damped oscillator prob = ODEProblem( - DynamicalODEFunction{false}((du, u, p, t) -> -u - 0.5 * du, + DynamicalODEFunction{false}( + (du, u, p, t) -> -u - 0.5 * du, (du, u, p, t) -> du, analytic = (du0_u0, p, t) -> ArrayPartition( [ - exp(-t / 4) / 15 * (15 * du0_u0[1] * cos(sqrt(15) * t / 4) - - sqrt(15) * (du0_u0[1] + 4 * du0_u0[2]) * sin(sqrt(15) * t / 4)) + exp(-t / 4) / 15 * ( + 15 * du0_u0[1] * cos(sqrt(15) * t / 4) - + sqrt(15) * (du0_u0[1] + 4 * du0_u0[2]) * sin(sqrt(15) * t / 4) + ), ], # du [ - exp(-t / 4) / 15 * (15 * du0_u0[2] * cos(sqrt(15) * t / 4) + - sqrt(15) * (4 * du0_u0[1] + du0_u0[2]) * sin(sqrt(15) * t / 4)) - ])), + exp(-t / 4) / 15 * ( + 15 * du0_u0[2] * cos(sqrt(15) * t / 4) + + sqrt(15) * (4 * du0_u0[1] + du0_u0[2]) * sin(sqrt(15) * t / 4) + ), + ] + ) + ), ArrayPartition([0.0], [1.0]), # du0, u0 (0.0, 10.0), # tspan SciMLBase.NullParameters(), # p - SecondOrderODEProblem{false}()) + SecondOrderODEProblem{false}() +) dts = 1.0 ./ 2.0 .^ (5:-1:0) sim = test_convergence(dts, prob, Nystrom4(), dense_errors = true) -@test sim.𝒪est[:l2]≈4 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, FineRKN4(), dense_errors = true) -@test sim.𝒪est[:l2]≈4 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, FineRKN5(), dense_errors = true) -@test sim.𝒪est[:l2]≈5 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 5 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 # Adaptive methods regression test @@ -293,32 +307,40 @@ sol = solve(prob, FineRKN5()) println("In Place") # Damped oscillator prob = ODEProblem( - DynamicalODEFunction{true}((d_du, du, u, p, t) -> @.(d_du=-u - 0.5 * du), + DynamicalODEFunction{true}( + (d_du, du, u, p, t) -> @.(d_du = -u - 0.5 * du), (d_u, du, u, p, t) -> d_u .= du, analytic = (du0_u0, p, t) -> ArrayPartition( [ - exp(-t / 4) / 15 * (15 * du0_u0[1] * cos(sqrt(15) * t / 4) - - sqrt(15) * (du0_u0[1] + 4 * du0_u0[2]) * sin(sqrt(15) * t / 4)) + exp(-t / 4) / 15 * ( + 15 * du0_u0[1] * cos(sqrt(15) * t / 4) - + sqrt(15) * (du0_u0[1] + 4 * du0_u0[2]) * sin(sqrt(15) * t / 4) + ), ], # du [ - exp(-t / 4) / 15 * (15 * du0_u0[2] * cos(sqrt(15) * t / 4) + - sqrt(15) * (4 * du0_u0[1] + du0_u0[2]) * sin(sqrt(15) * t / 4)) - ])), + exp(-t / 4) / 15 * ( + 15 * du0_u0[2] * cos(sqrt(15) * t / 4) + + sqrt(15) * (4 * du0_u0[1] + du0_u0[2]) * sin(sqrt(15) * t / 4) + ), + ] + ) + ), ArrayPartition([0.0], [1.0]), # du0, u0 (0.0, 10.0), # tspan SciMLBase.NullParameters(), # p - SecondOrderODEProblem{false}()) + SecondOrderODEProblem{false}() +) dts = 1.0 ./ 2.0 .^ (5:-1:0) sim = test_convergence(dts, prob, Nystrom4(), dense_errors = true) -@test sim.𝒪est[:l2]≈4 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, FineRKN4(), dense_errors = true) -@test sim.𝒪est[:l2]≈4 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, FineRKN5(), dense_errors = true) -@test sim.𝒪est[:l2]≈5 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 5 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 # Adaptive methods regression test sol = solve(prob, FineRKN4()) @@ -337,12 +359,16 @@ function damped_oscillator!(ddu, du, u, p, t) return nothing end @testset "in-place vs. out-of-place" begin - ode_i = SecondOrderODEProblem(damped_oscillator!, + ode_i = SecondOrderODEProblem( + damped_oscillator!, [0.0], [1.0], - (0.0, 10.0)) - ode_o = SecondOrderODEProblem(damped_oscillator, + (0.0, 10.0) + ) + ode_o = SecondOrderODEProblem( + damped_oscillator, [0.0], [1.0], - (0.0, 10.0)) + (0.0, 10.0) + ) @testset "Nystrom4" begin alg = Nystrom4() @@ -449,8 +475,8 @@ end # adaptive time step sol_i = solve(ode_i, alg) sol_o = solve(ode_o, alg) - @test sol_i.t ≈ sol_o.t rtol=1e-5 - @test sol_i.u ≈ sol_o.u rtol=1e-5 + @test sol_i.t ≈ sol_o.t rtol = 1.0e-5 + @test sol_i.u ≈ sol_o.u rtol = 1.0e-5 end @testset "DPRKN6" begin diff --git a/lib/OrdinaryDiffEqRKN/test/qa.jl b/lib/OrdinaryDiffEqRKN/test/qa.jl index 8038e73946..8ef2c30095 100644 --- a/lib/OrdinaryDiffEqRKN/test/qa.jl +++ b/lib/OrdinaryDiffEqRKN/test/qa.jl @@ -5,4 +5,4 @@ using Aqua Aqua.test_all( OrdinaryDiffEqRKN ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqRKN/test/runtests.jl b/lib/OrdinaryDiffEqRKN/test/runtests.jl index a9c45b07b2..571cb939d1 100644 --- a/lib/OrdinaryDiffEqRKN/test/runtests.jl +++ b/lib/OrdinaryDiffEqRKN/test/runtests.jl @@ -2,4 +2,4 @@ using SafeTestsets @time @safetestset "Nystrom Convergence Tests" include("nystrom_convergence_tests.jl") @time @safetestset "JET Tests" include("jet.jl") -@time @safetestset "Aqua" include("qa.jl") \ No newline at end of file +@time @safetestset "Aqua" include("qa.jl") diff --git a/lib/OrdinaryDiffEqRosenbrock/src/OrdinaryDiffEqRosenbrock.jl b/lib/OrdinaryDiffEqRosenbrock/src/OrdinaryDiffEqRosenbrock.jl index ef83c01821..9ef1b32e2a 100644 --- a/lib/OrdinaryDiffEqRosenbrock/src/OrdinaryDiffEqRosenbrock.jl +++ b/lib/OrdinaryDiffEqRosenbrock/src/OrdinaryDiffEqRosenbrock.jl @@ -1,19 +1,19 @@ module OrdinaryDiffEqRosenbrock import OrdinaryDiffEqCore: alg_order, alg_adaptive_order, isWmethod, isfsal, _unwrap_val, - DEFAULT_PRECS, OrdinaryDiffEqRosenbrockAlgorithm, @cache, - alg_cache, initialize!, - calculate_residuals!, OrdinaryDiffEqMutableCache, - OrdinaryDiffEqConstantCache, _ode_interpolant, _ode_interpolant!, - _vec, _reshape, perform_step!, trivial_limiter!, - OrdinaryDiffEqRosenbrockAdaptiveAlgorithm, - OrdinaryDiffEqRosenbrockAlgorithm, generic_solver_docstring, - initialize!, perform_step!, get_fsalfirstlast, - constvalue, only_diagonal_mass_matrix, - calculate_residuals, has_stiff_interpolation, ODEIntegrator, - resize_non_user_cache!, _ode_addsteps!, full_cache, - DerivativeOrderNotPossibleError, _bool_to_ADType, - _process_AD_choice, LinearAliasSpecifier, copyat_or_push! + DEFAULT_PRECS, OrdinaryDiffEqRosenbrockAlgorithm, @cache, + alg_cache, initialize!, + calculate_residuals!, OrdinaryDiffEqMutableCache, + OrdinaryDiffEqConstantCache, _ode_interpolant, _ode_interpolant!, + _vec, _reshape, perform_step!, trivial_limiter!, + OrdinaryDiffEqRosenbrockAdaptiveAlgorithm, + OrdinaryDiffEqRosenbrockAlgorithm, generic_solver_docstring, + initialize!, perform_step!, get_fsalfirstlast, + constvalue, only_diagonal_mass_matrix, + calculate_residuals, has_stiff_interpolation, ODEIntegrator, + resize_non_user_cache!, _ode_addsteps!, full_cache, + DerivativeOrderNotPossibleError, _bool_to_ADType, + _process_AD_choice, LinearAliasSpecifier, copyat_or_push! using MuladdMacro, FastBroadcast, RecursiveArrayTools import MacroTools: namify using MacroTools: @capture @@ -28,12 +28,12 @@ using ADTypes import OrdinaryDiffEqCore, OrdinaryDiffEqDifferentiation using OrdinaryDiffEqDifferentiation: TimeDerivativeWrapper, TimeGradientWrapper, - UDerivativeWrapper, UJacobianWrapper, - wrapprecs, calc_tderivative, build_grad_config, - build_jac_config, issuccess_W, jacobian2W!, - resize_jac_config!, resize_grad_config!, - calc_W, calc_rosenbrock_differentiation!, build_J_W, - UJacobianWrapper, dolinsolve, WOperator, resize_J_W! + UDerivativeWrapper, UJacobianWrapper, + wrapprecs, calc_tderivative, build_grad_config, + build_jac_config, issuccess_W, jacobian2W!, + resize_jac_config!, resize_grad_config!, + calc_W, calc_rosenbrock_differentiation!, build_J_W, + UJacobianWrapper, dolinsolve, WOperator, resize_J_W! using Reexport @reexport using SciMLBase @@ -41,167 +41,171 @@ using Reexport import OrdinaryDiffEqCore: alg_autodiff import OrdinaryDiffEqCore -function rosenbrock_wolfbrandt_docstring(description::String, +function rosenbrock_wolfbrandt_docstring( + description::String, name::String; references::String = "", extra_keyword_description = "", extra_keyword_default = "", - with_step_limiter = false) + with_step_limiter = false + ) keyword_default = """ - chunk_size = Val{0}(), - standardtag = Val{true}(), - autodiff = AutoForwardDiff(), - concrete_jac = nothing, - diff_type = Val{:forward}(), - linsolve = nothing, - precs = DEFAULT_PRECS, - """ * extra_keyword_default + chunk_size = Val{0}(), + standardtag = Val{true}(), + autodiff = AutoForwardDiff(), + concrete_jac = nothing, + diff_type = Val{:forward}(), + linsolve = nothing, + precs = DEFAULT_PRECS, + """ * extra_keyword_default keyword_default_description = """ - - `standardtag`: Specifies whether to use package-specific tags instead of the - ForwardDiff default function-specific tags. For more information, see - [this blog post](https://www.stochasticlifestyle.com/improved-forwarddiff-jl-stacktraces-with-package-tags/). - Defaults to `Val{true}()`. - - `autodiff`: Uses [ADTypes.jl](https://sciml.github.io/ADTypes.jl/stable/) - to specify whether to use automatic differentiation via - [ForwardDiff.jl](https://github.com/JuliaDiff/ForwardDiff.jl) or finite - differencing via [FiniteDiff.jl](https://github.com/JuliaDiff/FiniteDiff.jl). - Defaults to `AutoForwardDiff()` for automatic differentiation, which by default uses - `chunksize = 0`, and thus uses the internal ForwardDiff.jl algorithm for the choice. - To use `FiniteDiff.jl`, the `AutoFiniteDiff()` ADType can be used, which has a keyword argument - `fdtype` with default value `Val{:forward}()`, and alternatives `Val{:central}()` and `Val{:complex}()`. - - `concrete_jac`: Specifies whether a Jacobian should be constructed. Defaults to - `nothing`, which means it will be chosen true/false depending on circumstances - of the solver, such as whether a Krylov subspace method is used for `linsolve`. - - `linsolve`: Any [LinearSolve.jl](https://github.com/SciML/LinearSolve.jl) compatible linear solver. - For example, to use [KLU.jl](https://github.com/JuliaSparse/KLU.jl), specify - `$name(linsolve = KLUFactorization()`). - When `nothing` is passed, uses `DefaultLinearSolver`. - - `precs`: Any [LinearSolve.jl-compatible preconditioner](https://docs.sciml.ai/LinearSolve/stable/basics/Preconditioners/) - can be used as a left or right preconditioner. - Preconditioners are specified by the `Pl,Pr = precs(W,du,u,p,t,newW,Plprev,Prprev,solverdata)` - function where the arguments are defined as: - - `W`: the current Jacobian of the nonlinear system. Specified as either - ``I - \\gamma J`` or ``I/\\gamma - J`` depending on the algorithm. This will - commonly be a `WOperator` type defined by OrdinaryDiffEq.jl. It is a lazy - representation of the operator. Users can construct the W-matrix on demand - by calling `convert(AbstractMatrix,W)` to receive an `AbstractMatrix` matching - the `jac_prototype`. - - `du`: the current ODE derivative - - `u`: the current ODE state - - `p`: the ODE parameters - - `t`: the current ODE time - - `newW`: a `Bool` which specifies whether the `W` matrix has been updated since - the last call to `precs`. It is recommended that this is checked to only - update the preconditioner when `newW == true`. - - `Plprev`: the previous `Pl`. - - `Prprev`: the previous `Pr`. - - `solverdata`: Optional extra data the solvers can give to the `precs` function. - Solver-dependent and subject to change. - The return is a tuple `(Pl,Pr)` of the LinearSolve.jl-compatible preconditioners. - To specify one-sided preconditioning, simply return `nothing` for the preconditioner - which is not used. Additionally, `precs` must supply the dispatch: - ```julia - Pl, Pr = precs(W, du, u, p, t, ::Nothing, ::Nothing, ::Nothing, solverdata) - ``` - which is used in the solver setup phase to construct the integrator - type with the preconditioners `(Pl,Pr)`. - The default is `precs=DEFAULT_PRECS` where the default preconditioner function - is defined as: - ```julia - DEFAULT_PRECS(W, du, u, p, t, newW, Plprev, Prprev, solverdata) = nothing, nothing - ``` - """ * extra_keyword_description + - `standardtag`: Specifies whether to use package-specific tags instead of the + ForwardDiff default function-specific tags. For more information, see + [this blog post](https://www.stochasticlifestyle.com/improved-forwarddiff-jl-stacktraces-with-package-tags/). + Defaults to `Val{true}()`. + - `autodiff`: Uses [ADTypes.jl](https://sciml.github.io/ADTypes.jl/stable/) + to specify whether to use automatic differentiation via + [ForwardDiff.jl](https://github.com/JuliaDiff/ForwardDiff.jl) or finite + differencing via [FiniteDiff.jl](https://github.com/JuliaDiff/FiniteDiff.jl). + Defaults to `AutoForwardDiff()` for automatic differentiation, which by default uses + `chunksize = 0`, and thus uses the internal ForwardDiff.jl algorithm for the choice. + To use `FiniteDiff.jl`, the `AutoFiniteDiff()` ADType can be used, which has a keyword argument + `fdtype` with default value `Val{:forward}()`, and alternatives `Val{:central}()` and `Val{:complex}()`. + - `concrete_jac`: Specifies whether a Jacobian should be constructed. Defaults to + `nothing`, which means it will be chosen true/false depending on circumstances + of the solver, such as whether a Krylov subspace method is used for `linsolve`. + - `linsolve`: Any [LinearSolve.jl](https://github.com/SciML/LinearSolve.jl) compatible linear solver. + For example, to use [KLU.jl](https://github.com/JuliaSparse/KLU.jl), specify + `$name(linsolve = KLUFactorization()`). + When `nothing` is passed, uses `DefaultLinearSolver`. + - `precs`: Any [LinearSolve.jl-compatible preconditioner](https://docs.sciml.ai/LinearSolve/stable/basics/Preconditioners/) + can be used as a left or right preconditioner. + Preconditioners are specified by the `Pl,Pr = precs(W,du,u,p,t,newW,Plprev,Prprev,solverdata)` + function where the arguments are defined as: + - `W`: the current Jacobian of the nonlinear system. Specified as either + ``I - \\gamma J`` or ``I/\\gamma - J`` depending on the algorithm. This will + commonly be a `WOperator` type defined by OrdinaryDiffEq.jl. It is a lazy + representation of the operator. Users can construct the W-matrix on demand + by calling `convert(AbstractMatrix,W)` to receive an `AbstractMatrix` matching + the `jac_prototype`. + - `du`: the current ODE derivative + - `u`: the current ODE state + - `p`: the ODE parameters + - `t`: the current ODE time + - `newW`: a `Bool` which specifies whether the `W` matrix has been updated since + the last call to `precs`. It is recommended that this is checked to only + update the preconditioner when `newW == true`. + - `Plprev`: the previous `Pl`. + - `Prprev`: the previous `Pr`. + - `solverdata`: Optional extra data the solvers can give to the `precs` function. + Solver-dependent and subject to change. + The return is a tuple `(Pl,Pr)` of the LinearSolve.jl-compatible preconditioners. + To specify one-sided preconditioning, simply return `nothing` for the preconditioner + which is not used. Additionally, `precs` must supply the dispatch: + ```julia + Pl, Pr = precs(W, du, u, p, t, ::Nothing, ::Nothing, ::Nothing, solverdata) + ``` + which is used in the solver setup phase to construct the integrator + type with the preconditioners `(Pl,Pr)`. + The default is `precs=DEFAULT_PRECS` where the default preconditioner function + is defined as: + ```julia + DEFAULT_PRECS(W, du, u, p, t, newW, Plprev, Prprev, solverdata) = nothing, nothing + ``` + """ * extra_keyword_description if with_step_limiter keyword_default *= "step_limiter! = OrdinaryDiffEq.trivial_limiter!,\n" keyword_default_description *= "- `step_limiter!`: function of the form `limiter!(u, integrator, p, t)`\n" end - generic_solver_docstring( + return generic_solver_docstring( description, name, "Rosenbrock-Wanner-W(olfbrandt) Method. ", references, keyword_default_description, keyword_default ) end -function rosenbrock_docstring(description::String, +function rosenbrock_docstring( + description::String, name::String; references::String = "", extra_keyword_description = "", extra_keyword_default = "", - with_step_limiter = false) + with_step_limiter = false + ) keyword_default = """ - - `standardtag`: Specifies whether to use package-specific tags instead of the - ForwardDiff default function-specific tags. For more information, see - [this blog post](https://www.stochasticlifestyle.com/improved-forwarddiff-jl-stacktraces-with-package-tags/). - Defaults to `Val{true}()`. - - `autodiff`: Uses [ADTypes.jl](https://sciml.github.io/ADTypes.jl/stable/) - to specify whether to use automatic differentiation via - [ForwardDiff.jl](https://github.com/JuliaDiff/ForwardDiff.jl) or finite - differencing via [FiniteDiff.jl](https://github.com/JuliaDiff/FiniteDiff.jl). - Defaults to `AutoForwardDiff()` for automatic differentiation, which by default uses - `chunksize = 0`, and thus uses the internal ForwardDiff.jl algorithm for the choice. - To use `FiniteDiff.jl`, the `AutoFiniteDiff()` ADType can be used, which has a keyword argument - `fdtype` with default value `Val{:forward}()`, and alternatives `Val{:central}()` and `Val{:complex}()`. - - `concrete_jac`: Specifies whether a Jacobian should be constructed. Defaults to - `nothing`, which means it will be chosen true/false depending on circumstances - of the solver, such as whether a Krylov subspace method is used for `linsolve`. - - `linsolve`: Any [LinearSolve.jl](https://github.com/SciML/LinearSolve.jl) compatible linear solver. - For example, to use [KLU.jl](https://github.com/JuliaSparse/KLU.jl), specify - `$name(linsolve = KLUFactorization()`). - When `nothing` is passed, uses `DefaultLinearSolver`. - - `precs`: Any [LinearSolve.jl-compatible preconditioner](https://docs.sciml.ai/LinearSolve/stable/basics/Preconditioners/) - can be used as a left or right preconditioner. - Preconditioners are specified by the `Pl,Pr = precs(W,du,u,p,t,newW,Plprev,Prprev,solverdata)` - function where the arguments are defined as: - - `W`: the current Jacobian of the nonlinear system. Specified as either - ``I - \\gamma J`` or ``I/\\gamma - J`` depending on the algorithm. This will - commonly be a `WOperator` type defined by OrdinaryDiffEq.jl. It is a lazy - representation of the operator. Users can construct the W-matrix on demand - by calling `convert(AbstractMatrix,W)` to receive an `AbstractMatrix` matching - the `jac_prototype`. - - `du`: the current ODE derivative - - `u`: the current ODE state - - `p`: the ODE parameters - - `t`: the current ODE time - - `newW`: a `Bool` which specifies whether the `W` matrix has been updated since - the last call to `precs`. It is recommended that this is checked to only - update the preconditioner when `newW == true`. - - `Plprev`: the previous `Pl`. - - `Prprev`: the previous `Pr`. - - `solverdata`: Optional extra data the solvers can give to the `precs` function. - Solver-dependent and subject to change. - The return is a tuple `(Pl,Pr)` of the LinearSolve.jl-compatible preconditioners. - To specify one-sided preconditioning, simply return `nothing` for the preconditioner - which is not used. Additionally, `precs` must supply the dispatch: - ```julia - Pl, Pr = precs(W, du, u, p, t, ::Nothing, ::Nothing, ::Nothing, solverdata) - ``` - which is used in the solver setup phase to construct the integrator - type with the preconditioners `(Pl,Pr)`. - The default is `precs=DEFAULT_PRECS` where the default preconditioner function - is defined as: - ```julia - DEFAULT_PRECS(W, du, u, p, t, newW, Plprev, Prprev, solverdata) = nothing, nothing - ``` - """ * extra_keyword_default + - `standardtag`: Specifies whether to use package-specific tags instead of the + ForwardDiff default function-specific tags. For more information, see + [this blog post](https://www.stochasticlifestyle.com/improved-forwarddiff-jl-stacktraces-with-package-tags/). + Defaults to `Val{true}()`. + - `autodiff`: Uses [ADTypes.jl](https://sciml.github.io/ADTypes.jl/stable/) + to specify whether to use automatic differentiation via + [ForwardDiff.jl](https://github.com/JuliaDiff/ForwardDiff.jl) or finite + differencing via [FiniteDiff.jl](https://github.com/JuliaDiff/FiniteDiff.jl). + Defaults to `AutoForwardDiff()` for automatic differentiation, which by default uses + `chunksize = 0`, and thus uses the internal ForwardDiff.jl algorithm for the choice. + To use `FiniteDiff.jl`, the `AutoFiniteDiff()` ADType can be used, which has a keyword argument + `fdtype` with default value `Val{:forward}()`, and alternatives `Val{:central}()` and `Val{:complex}()`. + - `concrete_jac`: Specifies whether a Jacobian should be constructed. Defaults to + `nothing`, which means it will be chosen true/false depending on circumstances + of the solver, such as whether a Krylov subspace method is used for `linsolve`. + - `linsolve`: Any [LinearSolve.jl](https://github.com/SciML/LinearSolve.jl) compatible linear solver. + For example, to use [KLU.jl](https://github.com/JuliaSparse/KLU.jl), specify + `$name(linsolve = KLUFactorization()`). + When `nothing` is passed, uses `DefaultLinearSolver`. + - `precs`: Any [LinearSolve.jl-compatible preconditioner](https://docs.sciml.ai/LinearSolve/stable/basics/Preconditioners/) + can be used as a left or right preconditioner. + Preconditioners are specified by the `Pl,Pr = precs(W,du,u,p,t,newW,Plprev,Prprev,solverdata)` + function where the arguments are defined as: + - `W`: the current Jacobian of the nonlinear system. Specified as either + ``I - \\gamma J`` or ``I/\\gamma - J`` depending on the algorithm. This will + commonly be a `WOperator` type defined by OrdinaryDiffEq.jl. It is a lazy + representation of the operator. Users can construct the W-matrix on demand + by calling `convert(AbstractMatrix,W)` to receive an `AbstractMatrix` matching + the `jac_prototype`. + - `du`: the current ODE derivative + - `u`: the current ODE state + - `p`: the ODE parameters + - `t`: the current ODE time + - `newW`: a `Bool` which specifies whether the `W` matrix has been updated since + the last call to `precs`. It is recommended that this is checked to only + update the preconditioner when `newW == true`. + - `Plprev`: the previous `Pl`. + - `Prprev`: the previous `Pr`. + - `solverdata`: Optional extra data the solvers can give to the `precs` function. + Solver-dependent and subject to change. + The return is a tuple `(Pl,Pr)` of the LinearSolve.jl-compatible preconditioners. + To specify one-sided preconditioning, simply return `nothing` for the preconditioner + which is not used. Additionally, `precs` must supply the dispatch: + ```julia + Pl, Pr = precs(W, du, u, p, t, ::Nothing, ::Nothing, ::Nothing, solverdata) + ``` + which is used in the solver setup phase to construct the integrator + type with the preconditioners `(Pl,Pr)`. + The default is `precs=DEFAULT_PRECS` where the default preconditioner function + is defined as: + ```julia + DEFAULT_PRECS(W, du, u, p, t, newW, Plprev, Prprev, solverdata) = nothing, nothing + ``` + """ * extra_keyword_default keyword_default_description = """ - - `chunk_size`: TBD - - `standardtag`: TBD - - `autodiff`: boolean to control if the Jacobian should be computed via AD or not - - `concrete_jac`: function of the form `jac!(J, u, p, t)` - - `diff_type`: TBD - - `linsolve`: custom solver for the inner linear systems - - `precs`: custom preconditioner for the inner linear solver - """ * extra_keyword_description + - `chunk_size`: TBD + - `standardtag`: TBD + - `autodiff`: boolean to control if the Jacobian should be computed via AD or not + - `concrete_jac`: function of the form `jac!(J, u, p, t)` + - `diff_type`: TBD + - `linsolve`: custom solver for the inner linear systems + - `precs`: custom preconditioner for the inner linear solver + """ * extra_keyword_description if with_step_limiter keyword_default *= "step_limiter! = OrdinaryDiffEq.trivial_limiter!,\n" keyword_default_description *= "- `step_limiter!`: function of the form `limiter!(u, integrator, p, t)`\n" end - generic_solver_docstring( + return generic_solver_docstring( description, name, "Rosenbrock-Wanner Method. ", references, keyword_default_description, keyword_default ) @@ -232,29 +236,51 @@ PrecompileTools.@compile_workload begin end if Preferences.@load_preference("PrecompileAutoSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.AutoSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.AutoSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0), Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.AutoSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0) + ) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.AutoSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0), Float64[] + ) + ) end if Preferences.@load_preference("PrecompileFunctionWrapperSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0), Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0) + ) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0), Float64[] + ) + ) end if Preferences.@load_preference("PrecompileNoSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), - Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0)) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.NoSpecialize}( + lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), + Float64[] + ) + ) end for prob in prob_list, solver in solver_list @@ -266,10 +292,10 @@ PrecompileTools.@compile_workload begin end export Rosenbrock23, Rosenbrock32, RosShamp4, Veldd4, Velds4, GRK4T, GRK4A, - Ros4LStab, ROS3P, Rodas3, Rodas23W, Rodas3P, Rodas4, Rodas42, Rodas4P, Rodas4P2, - Rodas5, Rodas5P, Rodas5Pe, Rodas5Pr, Rodas6P, - RosenbrockW6S4OS, ROS34PW1a, ROS34PW1b, ROS34PW2, ROS34PW3, ROS34PRw, ROS3PRL, - ROS3PRL2, ROK4a, - ROS2, ROS2PR, ROS2S, ROS3, ROS3PR, Scholz4_7 + Ros4LStab, ROS3P, Rodas3, Rodas23W, Rodas3P, Rodas4, Rodas42, Rodas4P, Rodas4P2, + Rodas5, Rodas5P, Rodas5Pe, Rodas5Pr, Rodas6P, + RosenbrockW6S4OS, ROS34PW1a, ROS34PW1b, ROS34PW2, ROS34PW3, ROS34PRw, ROS3PRL, + ROS3PRL2, ROK4a, + ROS2, ROS2PR, ROS2S, ROS3, ROS3PR, Scholz4_7 end diff --git a/lib/OrdinaryDiffEqRosenbrock/src/alg_utils.jl b/lib/OrdinaryDiffEqRosenbrock/src/alg_utils.jl index 7e4e820cca..8a80f8120f 100644 --- a/lib/OrdinaryDiffEqRosenbrock/src/alg_utils.jl +++ b/lib/OrdinaryDiffEqRosenbrock/src/alg_utils.jl @@ -62,10 +62,14 @@ isfsal(alg::Rodas4P) = false isfsal(alg::Rodas4P2) = false isfsal(alg::Rodas6P) = false -function has_stiff_interpolation(::Union{Rosenbrock23, Rosenbrock32, Rodas23W, - Rodas3P, Rodas4, Rodas4P, Rodas4P2, Rodas5, - Rodas5P, Rodas5Pe, Rodas5Pr, Rodas6P}) - true +function has_stiff_interpolation( + ::Union{ + Rosenbrock23, Rosenbrock32, Rodas23W, + Rodas3P, Rodas4, Rodas4P, Rodas4P2, Rodas5, + Rodas5P, Rodas5Pe, Rodas5Pr, Rodas6P, + } + ) + return true end only_diagonal_mass_matrix(alg::Union{Rosenbrock23, Rosenbrock32}) = true diff --git a/lib/OrdinaryDiffEqRosenbrock/src/algorithms.jl b/lib/OrdinaryDiffEqRosenbrock/src/algorithms.jl index 7799769bd3..cc5a11dedd 100644 --- a/lib/OrdinaryDiffEqRosenbrock/src/algorithms.jl +++ b/lib/OrdinaryDiffEqRosenbrock/src/algorithms.jl @@ -2,118 +2,140 @@ # for Rosenbrock methods with step_limiter for (Alg, desc, refs, is_W) in [ - (:Rosenbrock23, "An Order 2/3 L-Stable Rosenbrock-W method which is good for very stiff equations with oscillations at low tolerances. 2nd order stiff-aware interpolation.", "- Shampine L.F. and Reichelt M., (1997) The MATLAB ODE Suite, SIAM Journal of\n Scientific Computing, 18 (1), pp. 1-22.", true), - (:Rosenbrock32, "An Order 3/2 A-Stable Rosenbrock-W method which is good for mildly stiff equations without oscillations at low tolerances. Note that this method is prone to instability in the presence of oscillations, so use with caution. 2nd order stiff-aware interpolation.", "- Shampine L.F. and Reichelt M., (1997) The MATLAB ODE Suite, SIAM Journal of\n Scientific Computing, 18 (1), pp. 1-22.", true), - (:ROS3P, "3rd order A-stable and stiffly stable Rosenbrock method. Keeps high accuracy on discretizations of nonlinear parabolic PDEs.", "- Lang, J. & Verwer, ROS3P—An Accurate Third-Order Rosenbrock Solver Designed for\n Parabolic Problems J. BIT Numerical Mathematics (2001) 41: 731. doi:10.1023/A:1021900219772", false), - (:Rodas3, "3rd order A-stable and stiffly stable Rosenbrock method.", "- Sandu, Verwer, Van Loon, Carmichael, Potra, Dabdub, Seinfeld, Benchmarking stiff ode solvers for atmospheric chemistry problems-I. \n implicit vs explicit, Atmospheric Environment, 31(19), 3151-3166, 1997.", false), - (:Rodas23W, "An Order 2/3 L-Stable Rosenbrock-W method for stiff ODEs and DAEs in mass matrix form. 2nd order stiff-aware interpolation and additional error test for interpolation.", "- Steinebach G., Rosenbrock methods within OrdinaryDiffEq.jl - Overview, recent developments and applications -\n Preprint 2024. Proceedings of the JuliaCon Conferences.\n https://proceedings.juliacon.org/papers/eb04326e1de8fa819a3595b376508a40", true), - (:Rodas3P, "3rd order A-stable and stiffly stable Rosenbrock method with a stiff-aware 3rd order interpolant\nand additional error test for interpolation. Keeps accuracy on discretizations of linear parabolic PDEs.", "- Steinebach G., Rosenbrock methods within OrdinaryDiffEq.jl - Overview, recent developments and applications -\n Preprint 2024. Proceedings of the JuliaCon Conferences.\n https://proceedings.juliacon.org/papers/eb04326e1de8fa819a3595b376508a40", false), - (:Rodas4, "A 4th order A-stable stiffly stable Rosenbrock method with a stiff-aware 3rd order interpolant", "- E. Hairer, G. Wanner, Solving ordinary differential equations II, stiff and\n differential-algebraic problems. Computational mathematics (2nd revised ed.), Springer (1996)", false), - (:Rodas42, "A 4th order A-stable stiffly stable Rosenbrock method with a stiff-aware 3rd order interpolant", "- E. Hairer, G. Wanner, Solving ordinary differential equations II, stiff and\n differential-algebraic problems. Computational mathematics (2nd revised ed.), Springer (1996)", false), - (:Rodas4P, "4th order A-stable stiffly stable Rosenbrock method with a stiff-aware 3rd order interpolant. 4th order\non linear parabolic problems and 3rd order accurate on nonlinear parabolic problems (as opposed to\nlower if not corrected).", "- Steinebach, G., Rentrop, P., An adaptive method of lines approach for modelling flow and transport in rivers. \n Adaptive method of lines , Wouver, A. Vande, Sauces, Ph., Schiesser, W.E. (ed.),S. 181-205,Chapman & Hall/CRC, 2001,\n- Steinebach, G., Order-reduction of ROW-methods for DAEs and method of lines applications. \n Preprint-Nr. 1741, FB Mathematik, TH Darmstadt, 1995.", false), - (:Rodas4P2, "A 4th order L-stable stiffly stable Rosenbrock method with a stiff-aware 3rd order interpolant. 4th order\non linear parabolic problems and 3rd order accurate on nonlinear parabolic problems. It is an improvement\nof Rodas4P and in case of inexact Jacobians a second order W method.", "- Steinebach G., Improvement of Rosenbrock-Wanner Method RODASP, In: Reis T., Grundel S., Schöps S. (eds) \n Progress in Differential-Algebraic Equations II. Differential-Algebraic Equations Forum. Springer, Cham., 165-184, 2020.", true), - (:Rodas5, "A 5th order A-stable stiffly stable Rosenbrock method with a stiff-aware 4th order interpolant.", "- Di Marzo G. RODAS5(4) – Méthodes de Rosenbrock d'ordre 5(4) adaptées aux problèmes\n différentiels-algébriques. MSc mathematics thesis, Faculty of Science,\n University of Geneva, Switzerland.", false), - (:Rodas5P, "A 5th order A-stable stiffly stable Rosenbrock method with a stiff-aware 4th order interpolant.\nHas improved stability in the adaptive time stepping embedding.", "- Steinebach G. Construction of Rosenbrock–Wanner method Rodas5P and numerical benchmarks\n within the Julia Differential Equations package.\n In: BIT Numerical Mathematics, 63(2), 2023. doi:10.1007/s10543-023-00967-x", true), - (:Rodas5Pe, "Variant of Rodas5P with modified embedded scheme.", "- Steinebach G. Rosenbrock methods within OrdinaryDiffEq.jl - Overview, recent developments and applications -\n Preprint 2024. Proceedings of the JuliaCon Conferences.\n https://proceedings.juliacon.org/papers/eb04326e1de8fa819a3595b376508a40", true), - (:Rodas5Pr, "Variant of Rodas5P with additional residual control.", "- Steinebach G. Rosenbrock methods within OrdinaryDiffEq.jl - Overview, recent developments and applications -\n Preprint 2024. Proceedings of the JuliaCon Conferences.\n https://proceedings.juliacon.org/papers/eb04326e1de8fa819a3595b376508a40", true), - (:Rodas6P, "A 6th order A-stable stiffly stable Rosenbrock method with a stiff-aware 5th order interpolant.", "- Steinebach G. Construction of Rosenbrock–Wanner method Rodas6P.\n to prepare, 2025", true) -] + (:Rosenbrock23, "An Order 2/3 L-Stable Rosenbrock-W method which is good for very stiff equations with oscillations at low tolerances. 2nd order stiff-aware interpolation.", "- Shampine L.F. and Reichelt M., (1997) The MATLAB ODE Suite, SIAM Journal of\n Scientific Computing, 18 (1), pp. 1-22.", true), + (:Rosenbrock32, "An Order 3/2 A-Stable Rosenbrock-W method which is good for mildly stiff equations without oscillations at low tolerances. Note that this method is prone to instability in the presence of oscillations, so use with caution. 2nd order stiff-aware interpolation.", "- Shampine L.F. and Reichelt M., (1997) The MATLAB ODE Suite, SIAM Journal of\n Scientific Computing, 18 (1), pp. 1-22.", true), + (:ROS3P, "3rd order A-stable and stiffly stable Rosenbrock method. Keeps high accuracy on discretizations of nonlinear parabolic PDEs.", "- Lang, J. & Verwer, ROS3P—An Accurate Third-Order Rosenbrock Solver Designed for\n Parabolic Problems J. BIT Numerical Mathematics (2001) 41: 731. doi:10.1023/A:1021900219772", false), + (:Rodas3, "3rd order A-stable and stiffly stable Rosenbrock method.", "- Sandu, Verwer, Van Loon, Carmichael, Potra, Dabdub, Seinfeld, Benchmarking stiff ode solvers for atmospheric chemistry problems-I. \n implicit vs explicit, Atmospheric Environment, 31(19), 3151-3166, 1997.", false), + (:Rodas23W, "An Order 2/3 L-Stable Rosenbrock-W method for stiff ODEs and DAEs in mass matrix form. 2nd order stiff-aware interpolation and additional error test for interpolation.", "- Steinebach G., Rosenbrock methods within OrdinaryDiffEq.jl - Overview, recent developments and applications -\n Preprint 2024. Proceedings of the JuliaCon Conferences.\n https://proceedings.juliacon.org/papers/eb04326e1de8fa819a3595b376508a40", true), + (:Rodas3P, "3rd order A-stable and stiffly stable Rosenbrock method with a stiff-aware 3rd order interpolant\nand additional error test for interpolation. Keeps accuracy on discretizations of linear parabolic PDEs.", "- Steinebach G., Rosenbrock methods within OrdinaryDiffEq.jl - Overview, recent developments and applications -\n Preprint 2024. Proceedings of the JuliaCon Conferences.\n https://proceedings.juliacon.org/papers/eb04326e1de8fa819a3595b376508a40", false), + (:Rodas4, "A 4th order A-stable stiffly stable Rosenbrock method with a stiff-aware 3rd order interpolant", "- E. Hairer, G. Wanner, Solving ordinary differential equations II, stiff and\n differential-algebraic problems. Computational mathematics (2nd revised ed.), Springer (1996)", false), + (:Rodas42, "A 4th order A-stable stiffly stable Rosenbrock method with a stiff-aware 3rd order interpolant", "- E. Hairer, G. Wanner, Solving ordinary differential equations II, stiff and\n differential-algebraic problems. Computational mathematics (2nd revised ed.), Springer (1996)", false), + (:Rodas4P, "4th order A-stable stiffly stable Rosenbrock method with a stiff-aware 3rd order interpolant. 4th order\non linear parabolic problems and 3rd order accurate on nonlinear parabolic problems (as opposed to\nlower if not corrected).", "- Steinebach, G., Rentrop, P., An adaptive method of lines approach for modelling flow and transport in rivers. \n Adaptive method of lines , Wouver, A. Vande, Sauces, Ph., Schiesser, W.E. (ed.),S. 181-205,Chapman & Hall/CRC, 2001,\n- Steinebach, G., Order-reduction of ROW-methods for DAEs and method of lines applications. \n Preprint-Nr. 1741, FB Mathematik, TH Darmstadt, 1995.", false), + (:Rodas4P2, "A 4th order L-stable stiffly stable Rosenbrock method with a stiff-aware 3rd order interpolant. 4th order\non linear parabolic problems and 3rd order accurate on nonlinear parabolic problems. It is an improvement\nof Rodas4P and in case of inexact Jacobians a second order W method.", "- Steinebach G., Improvement of Rosenbrock-Wanner Method RODASP, In: Reis T., Grundel S., Schöps S. (eds) \n Progress in Differential-Algebraic Equations II. Differential-Algebraic Equations Forum. Springer, Cham., 165-184, 2020.", true), + (:Rodas5, "A 5th order A-stable stiffly stable Rosenbrock method with a stiff-aware 4th order interpolant.", "- Di Marzo G. RODAS5(4) – Méthodes de Rosenbrock d'ordre 5(4) adaptées aux problèmes\n différentiels-algébriques. MSc mathematics thesis, Faculty of Science,\n University of Geneva, Switzerland.", false), + (:Rodas5P, "A 5th order A-stable stiffly stable Rosenbrock method with a stiff-aware 4th order interpolant.\nHas improved stability in the adaptive time stepping embedding.", "- Steinebach G. Construction of Rosenbrock–Wanner method Rodas5P and numerical benchmarks\n within the Julia Differential Equations package.\n In: BIT Numerical Mathematics, 63(2), 2023. doi:10.1007/s10543-023-00967-x", true), + (:Rodas5Pe, "Variant of Rodas5P with modified embedded scheme.", "- Steinebach G. Rosenbrock methods within OrdinaryDiffEq.jl - Overview, recent developments and applications -\n Preprint 2024. Proceedings of the JuliaCon Conferences.\n https://proceedings.juliacon.org/papers/eb04326e1de8fa819a3595b376508a40", true), + (:Rodas5Pr, "Variant of Rodas5P with additional residual control.", "- Steinebach G. Rosenbrock methods within OrdinaryDiffEq.jl - Overview, recent developments and applications -\n Preprint 2024. Proceedings of the JuliaCon Conferences.\n https://proceedings.juliacon.org/papers/eb04326e1de8fa819a3595b376508a40", true), + (:Rodas6P, "A 6th order A-stable stiffly stable Rosenbrock method with a stiff-aware 5th order interpolant.", "- Steinebach G. Construction of Rosenbrock–Wanner method Rodas6P.\n to prepare, 2025", true), + ] @eval begin @doc $(is_W ? rosenbrock_wolfbrandt_docstring(desc, String(Alg), references = refs, with_step_limiter = true) : rosenbrock_docstring(desc, String(Alg), references = refs, with_step_limiter = true)) struct $Alg{CS, AD, F, P, FDT, ST, CJ, StepLimiter, StageLimiter} <: - OrdinaryDiffEqRosenbrockAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqRosenbrockAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F precs::P step_limiter!::StepLimiter stage_limiter!::StageLimiter autodiff::AD end - function $Alg(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), + function $Alg(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, step_limiter! = trivial_limiter!, - stage_limiter! = trivial_limiter!) + stage_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice( - autodiff, chunk_size, diff_type) - $Alg{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + autodiff, chunk_size, diff_type + ) + return $Alg{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), typeof(step_limiter!), - typeof(stage_limiter!)}(linsolve, precs, step_limiter!, - stage_limiter!, AD_choice) + typeof(stage_limiter!), + }( + linsolve, precs, step_limiter!, + stage_limiter!, AD_choice + ) end end end """ -$(rosenbrock_wolfbrandt_docstring( - """ - A 4th order L-stable Rosenbrock-W method (fixed step only). - """, - "RosenbrockW6S4OS", - references = """ - https://doi.org/10.1016/j.cam.2009.09.017 - """)) +$( + rosenbrock_wolfbrandt_docstring( + """ + A 4th order L-stable Rosenbrock-W method (fixed step only). + """, + "RosenbrockW6S4OS", + references = """ + https://doi.org/10.1016/j.cam.2009.09.017 + """ + ) +) """ struct RosenbrockW6S4OS{CS, AD, F, P, FDT, ST, CJ} <: - OrdinaryDiffEqRosenbrockAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqRosenbrockAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F precs::P autodiff::AD end -function RosenbrockW6S4OS(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function RosenbrockW6S4OS(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, - precs = DEFAULT_PRECS) + precs = DEFAULT_PRECS + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - RosenbrockW6S4OS{_unwrap_val(chunk_size), + return RosenbrockW6S4OS{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(precs), diff_type, - _unwrap_val(standardtag), _unwrap_val(concrete_jac)}(linsolve, - precs, AD_choice) + _unwrap_val(standardtag), _unwrap_val(concrete_jac), + }( + linsolve, + precs, AD_choice + ) end # Documentation for Rosenbrock methods without step_limiter for (Alg, desc, refs, is_W) in [ - (:ROS2, "A 2nd order L-stable Rosenbrock method with 2 internal stages.", "- J. G. Verwer et al. (1999): A second-order Rosenbrock method applied to photochemical dispersion problems\n https://doi.org/10.1137/S1064827597326651", false), - (:ROS2PR, "2nd order stiffly accurate Rosenbrock method with 3 internal stages with (Rinf=0).\nFor problems with medium stiffness the convergence behaviour is very poor and it is recommended to use\n[`ROS2S`](@ref) instead.", "- Rang, Joachim (2014): The Prothero and Robinson example:\n Convergence studies for Runge-Kutta and Rosenbrock-Wanner methods.\n https://doi.org/10.24355/dbbs.084-201408121139-0", false), - (:ROS2S, "2nd order stiffly accurate Rosenbrock-Wanner W-method with 3 internal stages with B_PR consistent of order 2 with (Rinf=0).", "- Rang, Joachim (2014): The Prothero and Robinson example:\n Convergence studies for Runge-Kutta and Rosenbrock-Wanner methods.\n https://doi.org/10.24355/dbbs.084-201408121139-0", true), - (:ROS3, "3rd order L-stable Rosenbrock method with 3 internal stages with an embedded strongly\nA-stable 2nd order method.", "- E. Hairer, G. Wanner, Solving ordinary differential equations II, stiff and\n differential-algebraic problems. Computational mathematics (2nd revised ed.), Springer (1996)", false), - (:ROS3PR, "3nd order stiffly accurate Rosenbrock method with 3 internal stages with B_PR consistent of order 3, which is strongly A-stable with Rinf~=-0.73.", "- Rang, Joachim (2014): The Prothero and Robinson example:\n Convergence studies for Runge-Kutta and Rosenbrock-Wanner methods.\n https://doi.org/10.24355/dbbs.084-201408121139-0", false), - (:Scholz4_7, "3nd order stiffly accurate Rosenbrock method with 3 internal stages with B_PR consistent of order 3, which is strongly A-stable with Rinf~=-0.73.\nConvergence with order 4 for the stiff case, but has a poor accuracy.", "- Rang, Joachim (2014): The Prothero and Robinson example:\n Convergence studies for Runge-Kutta and Rosenbrock-Wanner methods.\n https://doi.org/10.24355/dbbs.084-201408121139-0", false), - (:ROS34PW1a, "A 4th order L-stable Rosenbrock-W method.", "- Rang, Joachim and Angermann, L (2005): New Rosenbrock W-methods of order 3 for partial differential algebraic equations of index 1.\n BIT Numerical Mathematics, 45, 761--787.", true), - (:ROS34PW1b, "A 4th order L-stable Rosenbrock-W method.", "- Rang, Joachim and Angermann, L (2005): New Rosenbrock W-methods of order 3 for partial differential algebraic equations of index 1.\n BIT Numerical Mathematics, 45, 761--787.", true), - (:ROS34PW2, "A 4th order stiffy accurate Rosenbrock-W method for PDAEs.", "- Rang, Joachim and Angermann, L (2005): New Rosenbrock W-methods of order 3 for partial differential algebraic equations of index 1.\n BIT Numerical Mathematics, 45, 761--787.", true), - (:ROS34PW3, "A 4th order strongly A-stable (Rinf~0.63) Rosenbrock-W method.", "- Rang, Joachim and Angermann, L (2005): New Rosenbrock W-methods of order 3 for partial differential algebraic equations of index 1.\n BIT Numerical Mathematics, 45, 761--787.", true), - (:ROS34PRw, "3rd order stiffly accurate Rosenbrock-Wanner W-method with 4 internal stages,\nB_PR consistent of order 2.\nThe order of convergence decreases if medium stiff problems are considered.", "- Joachim Rang, Improved traditional Rosenbrock–Wanner methods for stiff ODEs and DAEs,\n Journal of Computational and Applied Mathematics,\n https://doi.org/10.1016/j.cam.2015.03.010", true), - (:ROS3PRL, "3rd order stiffly accurate Rosenbrock method with 4 internal stages,\nB_PR consistent of order 2 with Rinf=0.\nThe order of convergence decreases if medium stiff problems are considered, but it has good results for very stiff cases.", "- Rang, Joachim (2014): The Prothero and Robinson example:\n Convergence studies for Runge-Kutta and Rosenbrock-Wanner methods.\n https://doi.org/10.24355/dbbs.084-201408121139-0", false), - (:ROS3PRL2, "3rd order stiffly accurate Rosenbrock method with 4 internal stages,\nB_PR consistent of order 3.\nThe order of convergence does NOT decreases if medium stiff problems are considered as it does for [`ROS3PRL`](@ref).", "- Rang, Joachim (2014): The Prothero and Robinson example:\n Convergence studies for Runge-Kutta and Rosenbrock-Wanner methods.\n https://doi.org/10.24355/dbbs.084-201408121139-0", false), - (:ROK4a, "4rd order L-stable Rosenbrock-Krylov method with 4 internal stages,\nwith a 3rd order embedded method which is strongly A-stable with Rinf~=0.55. (when using exact Jacobians)", "- Tranquilli, Paul and Sandu, Adrian (2014):\n Rosenbrock--Krylov Methods for Large Systems of Differential Equations\n https://doi.org/10.1137/130923336", true), - (:RosShamp4, "An A-stable 4th order Rosenbrock method.", "- L. F. Shampine, Implementation of Rosenbrock Methods, ACM Transactions on\n Mathematical Software (TOMS), 8: 2, 93-113. doi:10.1145/355993.355994", false), - (:Veldd4, "A 4th order D-stable Rosenbrock method.", "- van Veldhuizen, D-stability and Kaps-Rentrop-methods, M. Computing (1984) 32: 229.\n doi:10.1007/BF02243574", false), - (:Velds4, "A 4th order A-stable Rosenbrock method.", "- van Veldhuizen, D-stability and Kaps-Rentrop-methods, M. Computing (1984) 32: 229.\n doi:10.1007/BF02243574", true), - (:GRK4T, "An efficient 4th order Rosenbrock method.", "- Kaps, P. & Rentrop, Generalized Runge-Kutta methods of order four with stepsize control\n for stiff ordinary differential equations. P. Numer. Math. (1979) 33: 55. doi:10.1007/BF01396495", false), - (:GRK4A, "An A-stable 4th order Rosenbrock method. Essentially \"anti-L-stable\" but efficient.", "- Kaps, P. & Rentrop, Generalized Runge-Kutta methods of order four with stepsize control\n for stiff ordinary differential equations. P. Numer. Math. (1979) 33: 55. doi:10.1007/BF01396495", false), - (:Ros4LStab, "A 4th order A-stable stiffly stable Rosenbrock method with a stiff-aware 3rd order interpolant", "- E. Hairer, G. Wanner, Solving ordinary differential equations II, stiff and\n differential-algebraic problems. Computational mathematics (2nd revised ed.), Springer (1996)", false) -] + (:ROS2, "A 2nd order L-stable Rosenbrock method with 2 internal stages.", "- J. G. Verwer et al. (1999): A second-order Rosenbrock method applied to photochemical dispersion problems\n https://doi.org/10.1137/S1064827597326651", false), + (:ROS2PR, "2nd order stiffly accurate Rosenbrock method with 3 internal stages with (Rinf=0).\nFor problems with medium stiffness the convergence behaviour is very poor and it is recommended to use\n[`ROS2S`](@ref) instead.", "- Rang, Joachim (2014): The Prothero and Robinson example:\n Convergence studies for Runge-Kutta and Rosenbrock-Wanner methods.\n https://doi.org/10.24355/dbbs.084-201408121139-0", false), + (:ROS2S, "2nd order stiffly accurate Rosenbrock-Wanner W-method with 3 internal stages with B_PR consistent of order 2 with (Rinf=0).", "- Rang, Joachim (2014): The Prothero and Robinson example:\n Convergence studies for Runge-Kutta and Rosenbrock-Wanner methods.\n https://doi.org/10.24355/dbbs.084-201408121139-0", true), + (:ROS3, "3rd order L-stable Rosenbrock method with 3 internal stages with an embedded strongly\nA-stable 2nd order method.", "- E. Hairer, G. Wanner, Solving ordinary differential equations II, stiff and\n differential-algebraic problems. Computational mathematics (2nd revised ed.), Springer (1996)", false), + (:ROS3PR, "3nd order stiffly accurate Rosenbrock method with 3 internal stages with B_PR consistent of order 3, which is strongly A-stable with Rinf~=-0.73.", "- Rang, Joachim (2014): The Prothero and Robinson example:\n Convergence studies for Runge-Kutta and Rosenbrock-Wanner methods.\n https://doi.org/10.24355/dbbs.084-201408121139-0", false), + (:Scholz4_7, "3nd order stiffly accurate Rosenbrock method with 3 internal stages with B_PR consistent of order 3, which is strongly A-stable with Rinf~=-0.73.\nConvergence with order 4 for the stiff case, but has a poor accuracy.", "- Rang, Joachim (2014): The Prothero and Robinson example:\n Convergence studies for Runge-Kutta and Rosenbrock-Wanner methods.\n https://doi.org/10.24355/dbbs.084-201408121139-0", false), + (:ROS34PW1a, "A 4th order L-stable Rosenbrock-W method.", "- Rang, Joachim and Angermann, L (2005): New Rosenbrock W-methods of order 3 for partial differential algebraic equations of index 1.\n BIT Numerical Mathematics, 45, 761--787.", true), + (:ROS34PW1b, "A 4th order L-stable Rosenbrock-W method.", "- Rang, Joachim and Angermann, L (2005): New Rosenbrock W-methods of order 3 for partial differential algebraic equations of index 1.\n BIT Numerical Mathematics, 45, 761--787.", true), + (:ROS34PW2, "A 4th order stiffy accurate Rosenbrock-W method for PDAEs.", "- Rang, Joachim and Angermann, L (2005): New Rosenbrock W-methods of order 3 for partial differential algebraic equations of index 1.\n BIT Numerical Mathematics, 45, 761--787.", true), + (:ROS34PW3, "A 4th order strongly A-stable (Rinf~0.63) Rosenbrock-W method.", "- Rang, Joachim and Angermann, L (2005): New Rosenbrock W-methods of order 3 for partial differential algebraic equations of index 1.\n BIT Numerical Mathematics, 45, 761--787.", true), + (:ROS34PRw, "3rd order stiffly accurate Rosenbrock-Wanner W-method with 4 internal stages,\nB_PR consistent of order 2.\nThe order of convergence decreases if medium stiff problems are considered.", "- Joachim Rang, Improved traditional Rosenbrock–Wanner methods for stiff ODEs and DAEs,\n Journal of Computational and Applied Mathematics,\n https://doi.org/10.1016/j.cam.2015.03.010", true), + (:ROS3PRL, "3rd order stiffly accurate Rosenbrock method with 4 internal stages,\nB_PR consistent of order 2 with Rinf=0.\nThe order of convergence decreases if medium stiff problems are considered, but it has good results for very stiff cases.", "- Rang, Joachim (2014): The Prothero and Robinson example:\n Convergence studies for Runge-Kutta and Rosenbrock-Wanner methods.\n https://doi.org/10.24355/dbbs.084-201408121139-0", false), + (:ROS3PRL2, "3rd order stiffly accurate Rosenbrock method with 4 internal stages,\nB_PR consistent of order 3.\nThe order of convergence does NOT decreases if medium stiff problems are considered as it does for [`ROS3PRL`](@ref).", "- Rang, Joachim (2014): The Prothero and Robinson example:\n Convergence studies for Runge-Kutta and Rosenbrock-Wanner methods.\n https://doi.org/10.24355/dbbs.084-201408121139-0", false), + (:ROK4a, "4rd order L-stable Rosenbrock-Krylov method with 4 internal stages,\nwith a 3rd order embedded method which is strongly A-stable with Rinf~=0.55. (when using exact Jacobians)", "- Tranquilli, Paul and Sandu, Adrian (2014):\n Rosenbrock--Krylov Methods for Large Systems of Differential Equations\n https://doi.org/10.1137/130923336", true), + (:RosShamp4, "An A-stable 4th order Rosenbrock method.", "- L. F. Shampine, Implementation of Rosenbrock Methods, ACM Transactions on\n Mathematical Software (TOMS), 8: 2, 93-113. doi:10.1145/355993.355994", false), + (:Veldd4, "A 4th order D-stable Rosenbrock method.", "- van Veldhuizen, D-stability and Kaps-Rentrop-methods, M. Computing (1984) 32: 229.\n doi:10.1007/BF02243574", false), + (:Velds4, "A 4th order A-stable Rosenbrock method.", "- van Veldhuizen, D-stability and Kaps-Rentrop-methods, M. Computing (1984) 32: 229.\n doi:10.1007/BF02243574", true), + (:GRK4T, "An efficient 4th order Rosenbrock method.", "- Kaps, P. & Rentrop, Generalized Runge-Kutta methods of order four with stepsize control\n for stiff ordinary differential equations. P. Numer. Math. (1979) 33: 55. doi:10.1007/BF01396495", false), + (:GRK4A, "An A-stable 4th order Rosenbrock method. Essentially \"anti-L-stable\" but efficient.", "- Kaps, P. & Rentrop, Generalized Runge-Kutta methods of order four with stepsize control\n for stiff ordinary differential equations. P. Numer. Math. (1979) 33: 55. doi:10.1007/BF01396495", false), + (:Ros4LStab, "A 4th order A-stable stiffly stable Rosenbrock method with a stiff-aware 3rd order interpolant", "- E. Hairer, G. Wanner, Solving ordinary differential equations II, stiff and\n differential-algebraic problems. Computational mathematics (2nd revised ed.), Springer (1996)", false), + ] @eval begin @doc $(is_W ? rosenbrock_wolfbrandt_docstring(desc, String(Alg), references = refs, with_step_limiter = false) : rosenbrock_docstring(desc, String(Alg), references = refs, with_step_limiter = false)) struct $Alg{CS, AD, F, P, FDT, ST, CJ} <: - OrdinaryDiffEqRosenbrockAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqRosenbrockAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F precs::P autodiff::AD end - function $Alg(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), + function $Alg(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, - diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS) + diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS + ) AD_choice, chunk_size, diff_type = _process_AD_choice( - autodiff, chunk_size, diff_type) + autodiff, chunk_size, diff_type + ) - $Alg{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return $Alg{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, - precs, AD_choice) + _unwrap_val(concrete_jac), + }( + linsolve, + precs, AD_choice + ) end end end - diff --git a/lib/OrdinaryDiffEqRosenbrock/src/generic_rosenbrock.jl b/lib/OrdinaryDiffEqRosenbrock/src/generic_rosenbrock.jl index 82ae0809d7..ebdea754d1 100644 --- a/lib/OrdinaryDiffEqRosenbrock/src/generic_rosenbrock.jl +++ b/lib/OrdinaryDiffEqRosenbrock/src/generic_rosenbrock.jl @@ -891,8 +891,6 @@ function _transformtab(Alpha,Gamma,B,Bhat) end - - # 2 step ROS Methods """ ROS2Tableau() @@ -914,8 +912,6 @@ function ROS2Tableau() # 2nd order end - - """ @ROS2(part) @@ -982,8 +978,6 @@ function ROS2PRTableau() # 2nd order end - - """ ROS2STableau() @@ -1008,7 +1002,6 @@ function ROS2STableau() # 2nd order end - """ ROS3Tableau() E. Hairer, G. Wanner, Solving ordinary differential equations II, @@ -1031,7 +1024,6 @@ function ROS3Tableau() # 3rd order end - """ ROS3PRTableau() @@ -1055,8 +1047,6 @@ function ROS3PRTableau() # 3rd order end - - """ Scholz4_7Tableau() @@ -1081,7 +1071,6 @@ function Scholz4_7Tableau() # 3rd order end - """ @ROS23(part) @@ -1134,8 +1123,6 @@ macro ROS23(part) end - - # 4 step ROS Methods """ ROS34PW1aTableau() @@ -1288,7 +1275,6 @@ function ROS3PRLTableau() # 3rd order end - """ ROS3PRL2Tableau() @@ -1316,7 +1302,6 @@ function ROS3PRL2Tableau() # 3rd order end - """ ROK4aTableau() diff --git a/lib/OrdinaryDiffEqRosenbrock/src/integrator_interface.jl b/lib/OrdinaryDiffEqRosenbrock/src/integrator_interface.jl index 9cc3a7960b..b02534ca51 100644 --- a/lib/OrdinaryDiffEqRosenbrock/src/integrator_interface.jl +++ b/lib/OrdinaryDiffEqRosenbrock/src/integrator_interface.jl @@ -1,8 +1,10 @@ -function resize_non_user_cache!(integrator::ODEIntegrator, - cache::RosenbrockMutableCache, i) +function resize_non_user_cache!( + integrator::ODEIntegrator, + cache::RosenbrockMutableCache, i + ) resize_J_W!(cache, integrator, i) resize_jac_config!(cache, integrator) resize_grad_config!(cache, integrator) - nothing + return nothing end diff --git a/lib/OrdinaryDiffEqRosenbrock/src/interp_func.jl b/lib/OrdinaryDiffEqRosenbrock/src/interp_func.jl index 94e84f1471..8797a61b52 100644 --- a/lib/OrdinaryDiffEqRosenbrock/src/interp_func.jl +++ b/lib/OrdinaryDiffEqRosenbrock/src/interp_func.jl @@ -1,27 +1,42 @@ -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where { +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where { cacheType <: - Union{Rosenbrock23ConstantCache, - Rosenbrock32ConstantCache, - Rosenbrock23Cache, - Rosenbrock32Cache}} - dense ? "specialized 2nd order \"free\" stiffness-aware interpolation" : - "1st order linear" + Union{ + Rosenbrock23ConstantCache, + Rosenbrock32ConstantCache, + Rosenbrock23Cache, + Rosenbrock32Cache, + }, + } + return dense ? "specialized 2nd order \"free\" stiffness-aware interpolation" : + "1st order linear" end -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where { +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where { cacheType <: - Union{RosenbrockCombinedConstantCache, Rodas23WConstantCache, Rodas3PConstantCache, - RosenbrockCache, Rodas23WCache, Rodas3PCache}} - dense ? "specialized 3rd order \"free\" stiffness-aware interpolation" : - "1st order linear" + Union{ + RosenbrockCombinedConstantCache, Rodas23WConstantCache, Rodas3PConstantCache, + RosenbrockCache, Rodas23WCache, Rodas3PCache, + }, + } + return dense ? "specialized 3rd order \"free\" stiffness-aware interpolation" : + "1st order linear" end -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where { +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where { cacheType <: - Union{RosenbrockCombinedConstantCache, - RosenbrockCache}} - dense ? "specialized 4th (Rodas6P = 5th) order \"free\" stiffness-aware interpolation" : - "1st order linear" + Union{ + RosenbrockCombinedConstantCache, + RosenbrockCache, + }, + } + return dense ? "specialized 4th (Rodas6P = 5th) order \"free\" stiffness-aware interpolation" : + "1st order linear" end diff --git a/lib/OrdinaryDiffEqRosenbrock/src/rosenbrock_caches.jl b/lib/OrdinaryDiffEqRosenbrock/src/rosenbrock_caches.jl index 1764a14430..ca3636f9fe 100644 --- a/lib/OrdinaryDiffEqRosenbrock/src/rosenbrock_caches.jl +++ b/lib/OrdinaryDiffEqRosenbrock/src/rosenbrock_caches.jl @@ -5,16 +5,18 @@ abstract type RosenbrockConstantCache <: OrdinaryDiffEqConstantCache end # Fake values since non-FSAL get_fsalfirstlast(cache::RosenbrockMutableCache, u) = (nothing, nothing) function get_fsalfirstlast(cache::GenericRosenbrockMutableCache, u) - (cache.fsalfirst, cache.fsallast) + return (cache.fsalfirst, cache.fsallast) end ################################################################################ # Shampine's Low-order Rosenbrocks -mutable struct RosenbrockCache{uType, rateType, tabType, uNoUnitsType, JType, WType, TabType, - TFType, UFType, F, JCType, GCType, RTolType, A, StepLimiter, StageLimiter} <: - RosenbrockMutableCache +mutable struct RosenbrockCache{ + uType, rateType, tabType, uNoUnitsType, JType, WType, TabType, + TFType, UFType, F, JCType, GCType, RTolType, A, StepLimiter, StageLimiter, + } <: + RosenbrockMutableCache u::uType uprev::uType dense::Vector{rateType} @@ -46,12 +48,14 @@ mutable struct RosenbrockCache{uType, rateType, tabType, uNoUnitsType, JType, WT interp_order::Int end function full_cache(c::RosenbrockCache) - return [c.u, c.uprev, c.dense..., c.du, c.du1, c.du2, - c.ks..., c.fsalfirst, c.fsallast, c.dT, c.tmp, c.atmp, c.weight, c.linsolve_tmp] + return [ + c.u, c.uprev, c.dense..., c.du, c.du1, c.du2, + c.ks..., c.fsalfirst, c.fsallast, c.dT, c.tmp, c.atmp, c.weight, c.linsolve_tmp, + ] end struct RosenbrockCombinedConstantCache{TF, UF, Tab, JType, WType, F, AD} <: - RosenbrockConstantCache + RosenbrockConstantCache tf::TF uf::UF tab::Tab @@ -62,9 +66,11 @@ struct RosenbrockCombinedConstantCache{TF, UF, Tab, JType, WType, F, AD} <: interp_order::Int end -@cache mutable struct Rosenbrock23Cache{uType, rateType, uNoUnitsType, JType, WType, - TabType, TFType, UFType, F, JCType, GCType, - RTolType, A, AV, StepLimiter, StageLimiter} <: RosenbrockMutableCache +@cache mutable struct Rosenbrock23Cache{ + uType, rateType, uNoUnitsType, JType, WType, + TabType, TFType, UFType, F, JCType, GCType, + RTolType, A, AV, StepLimiter, StageLimiter, + } <: RosenbrockMutableCache u::uType uprev::uType k₁::rateType @@ -95,9 +101,11 @@ end stage_limiter!::StageLimiter end -@cache mutable struct Rosenbrock32Cache{uType, rateType, uNoUnitsType, JType, WType, - TabType, TFType, UFType, F, JCType, GCType, - RTolType, A, AV, StepLimiter, StageLimiter} <: RosenbrockMutableCache +@cache mutable struct Rosenbrock32Cache{ + uType, rateType, uNoUnitsType, JType, WType, + TabType, TFType, UFType, F, JCType, GCType, + RTolType, A, AV, StepLimiter, StageLimiter, + } <: RosenbrockMutableCache u::uType uprev::uType k₁::rateType @@ -128,10 +136,12 @@ end stage_limiter!::StageLimiter end -function alg_cache(alg::Rosenbrock23, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Rosenbrock23, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k₁ = zero(rate_prototype) k₂ = zero(rate_prototype) k₃ = zero(rate_prototype) @@ -159,28 +169,36 @@ function alg_cache(alg::Rosenbrock23, u, rate_prototype, ::Type{uEltypeNoUnits}, linprob = LinearProblem(W, _vec(linsolve_tmp); u0 = _vec(tmp)) Pl, Pr = wrapprecs( - alg.precs(W, nothing, u, p, t, nothing, nothing, nothing, - nothing)..., weight, tmp) + alg.precs( + W, nothing, u, p, t, nothing, nothing, nothing, + nothing + )..., weight, tmp + ) linsolve = init( linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true), Pl = Pl, Pr = Pr, - assumptions = LinearSolve.OperatorAssumptions(true)) + assumptions = LinearSolve.OperatorAssumptions(true) + ) + - algebraic_vars = f.mass_matrix === I ? nothing : - [all(iszero, x) for x in eachcol(f.mass_matrix)] + [all(iszero, x) for x in eachcol(f.mass_matrix)] - Rosenbrock23Cache(u, uprev, k₁, k₂, k₃, du1, du2, f₁, + return Rosenbrock23Cache( + u, uprev, k₁, k₂, k₃, du1, du2, f₁, fsalfirst, fsallast, dT, J, W, tmp, atmp, weight, tab, tf, uf, linsolve_tmp, linsolve, jac_config, grad_config, reltol, alg, algebraic_vars, alg.step_limiter!, - alg.stage_limiter!) + alg.stage_limiter! + ) end -function alg_cache(alg::Rosenbrock32, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Rosenbrock32, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k₁ = zero(rate_prototype) k₂ = zero(rate_prototype) k₃ = zero(rate_prototype) @@ -201,7 +219,7 @@ function alg_cache(alg::Rosenbrock32, u, rate_prototype, ::Type{uEltypeNoUnits}, tf = TimeGradientWrapper(f, uprev, p) uf = UJacobianWrapper(f, t, p) linsolve_tmp = zero(rate_prototype) - + grad_config = build_grad_config(alg, f, tf, du1, t) jac_config = build_jac_config(alg, f, uf, du1, uprev, u, tmp, du2) @@ -210,23 +228,29 @@ function alg_cache(alg::Rosenbrock32, u, rate_prototype, ::Type{uEltypeNoUnits}, linprob = LinearProblem(W, _vec(linsolve_tmp); u0 = _vec(tmp)) Pl, Pr = wrapprecs( - alg.precs(W, nothing, u, p, t, nothing, nothing, nothing, - nothing)..., weight, tmp) + alg.precs( + W, nothing, u, p, t, nothing, nothing, nothing, + nothing + )..., weight, tmp + ) linsolve = init( linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true), Pl = Pl, Pr = Pr, - assumptions = LinearSolve.OperatorAssumptions(true)) + assumptions = LinearSolve.OperatorAssumptions(true) + ) algebraic_vars = f.mass_matrix === I ? nothing : - [all(iszero, x) for x in eachcol(f.mass_matrix)] + [all(iszero, x) for x in eachcol(f.mass_matrix)] - Rosenbrock32Cache(u, uprev, k₁, k₂, k₃, du1, du2, f₁, fsalfirst, fsallast, dT, J, W, + return Rosenbrock32Cache( + u, uprev, k₁, k₂, k₃, du1, du2, f₁, fsalfirst, fsallast, dT, J, W, tmp, atmp, weight, tab, tf, uf, linsolve_tmp, linsolve, jac_config, - grad_config, reltol, alg, algebraic_vars, alg.step_limiter!, alg.stage_limiter!) + grad_config, reltol, alg, algebraic_vars, alg.step_limiter!, alg.stage_limiter! + ) end struct Rosenbrock23ConstantCache{T, TF, UF, JType, WType, F, AD} <: - RosenbrockConstantCache + RosenbrockConstantCache c₃₂::T d::T tf::TF @@ -239,24 +263,28 @@ end function Rosenbrock23ConstantCache(::Type{T}, tf, uf, J, W, linsolve, autodiff) where {T} tab = Rosenbrock23Tableau(T) - Rosenbrock23ConstantCache(tab.c₃₂, tab.d, tf, uf, J, W, linsolve, autodiff) + return Rosenbrock23ConstantCache(tab.c₃₂, tab.d, tf, uf, J, W, linsolve, autodiff) end -function alg_cache(alg::Rosenbrock23, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Rosenbrock23, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tf = TimeDerivativeWrapper(f, u, p) uf = UDerivativeWrapper(f, t, p) J, W = build_J_W(alg, u, uprev, p, t, dt, f, nothing, uEltypeNoUnits, Val(false)) linprob = nothing #LinearProblem(W,copy(u); u0=copy(u)) linsolve = nothing #init(linprob,alg.linsolve,alias_A=true,alias_b=true) - Rosenbrock23ConstantCache(constvalue(uBottomEltypeNoUnits), tf, uf, J, W, linsolve, - alg_autodiff(alg)) + return Rosenbrock23ConstantCache( + constvalue(uBottomEltypeNoUnits), tf, uf, J, W, linsolve, + alg_autodiff(alg) + ) end struct Rosenbrock32ConstantCache{T, TF, UF, JType, WType, F, AD} <: - RosenbrockConstantCache + RosenbrockConstantCache c₃₂::T d::T tf::TF @@ -269,20 +297,24 @@ end function Rosenbrock32ConstantCache(::Type{T}, tf, uf, J, W, linsolve, autodiff) where {T} tab = Rosenbrock32Tableau(T) - Rosenbrock32ConstantCache(tab.c₃₂, tab.d, tf, uf, J, W, linsolve, autodiff) + return Rosenbrock32ConstantCache(tab.c₃₂, tab.d, tf, uf, J, W, linsolve, autodiff) end -function alg_cache(alg::Rosenbrock32, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Rosenbrock32, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tf = TimeDerivativeWrapper(f, u, p) uf = UDerivativeWrapper(f, t, p) J, W = build_J_W(alg, u, uprev, p, t, dt, f, nothing, uEltypeNoUnits, Val(false)) linprob = nothing #LinearProblem(W,copy(u); u0=copy(u)) linsolve = nothing #init(linprob,alg.linsolve,alias_A=true,alias_b=true) - Rosenbrock32ConstantCache(constvalue(uBottomEltypeNoUnits), tf, uf, J, W, linsolve, - alg_autodiff(alg)) + return Rosenbrock32ConstantCache( + constvalue(uBottomEltypeNoUnits), tf, uf, J, W, linsolve, + alg_autodiff(alg) + ) end ################################################################################ @@ -290,7 +322,7 @@ end ### 3rd order specialized Rosenbrocks struct Rosenbrock33ConstantCache{TF, UF, Tab, JType, WType, F} <: - RosenbrockConstantCache + RosenbrockConstantCache tf::TF uf::UF tab::Tab @@ -299,9 +331,11 @@ struct Rosenbrock33ConstantCache{TF, UF, Tab, JType, WType, F} <: linsolve::F end -@cache mutable struct Rosenbrock33Cache{uType, rateType, uNoUnitsType, JType, WType, - TabType, TFType, UFType, F, JCType, GCType, - RTolType, A, StepLimiter, StageLimiter} <: RosenbrockMutableCache +@cache mutable struct Rosenbrock33Cache{ + uType, rateType, uNoUnitsType, JType, WType, + TabType, TFType, UFType, F, JCType, GCType, + RTolType, A, StepLimiter, StageLimiter, + } <: RosenbrockMutableCache u::uType uprev::uType du::rateType @@ -332,10 +366,12 @@ end stage_limiter!::StageLimiter end -function alg_cache(alg::ROS3P, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ROS3P, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} du = zero(rate_prototype) du1 = zero(rate_prototype) du2 = zero(rate_prototype) @@ -355,44 +391,58 @@ function alg_cache(alg::ROS3P, u, rate_prototype, ::Type{uEltypeNoUnits}, tf = TimeGradientWrapper(f, uprev, p) uf = UJacobianWrapper(f, t, p) linsolve_tmp = zero(rate_prototype) - + grad_config = build_grad_config(alg, f, tf, du1, t) jac_config = build_jac_config(alg, f, uf, du1, uprev, u, tmp, du2) J, W = build_J_W(alg, u, uprev, p, t, dt, f, jac_config, uEltypeNoUnits, Val(true)) linprob = LinearProblem(W, _vec(linsolve_tmp); u0 = _vec(tmp)) Pl, Pr = wrapprecs( - alg.precs(W, nothing, u, p, t, nothing, nothing, nothing, - nothing)..., weight, tmp) + alg.precs( + W, nothing, u, p, t, nothing, nothing, nothing, + nothing + )..., weight, tmp + ) linsolve = init( linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true), Pl = Pl, Pr = Pr, - assumptions = LinearSolve.OperatorAssumptions(true)) + assumptions = LinearSolve.OperatorAssumptions(true) + ) - Rosenbrock33Cache(u, uprev, du, du1, du2, k1, k2, k3, k4, + return Rosenbrock33Cache( + u, uprev, du, du1, du2, k1, k2, k3, k4, fsalfirst, fsallast, dT, J, W, tmp, atmp, weight, tab, tf, uf, linsolve_tmp, linsolve, jac_config, grad_config, reltol, alg, alg.step_limiter!, - alg.stage_limiter!) + alg.stage_limiter! + ) end -function alg_cache(alg::ROS3P, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ROS3P, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tf = TimeDerivativeWrapper(f, u, p) uf = UDerivativeWrapper(f, t, p) J, W = build_J_W(alg, u, uprev, p, t, dt, f, nothing, uEltypeNoUnits, Val(false)) linprob = nothing #LinearProblem(W,copy(u); u0=copy(u)) linsolve = nothing #init(linprob,alg.linsolve,alias_A=true,alias_b=true) - Rosenbrock33ConstantCache(tf, uf, - ROS3PTableau(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)), J, W, linsolve) -end - -@cache mutable struct Rosenbrock34Cache{uType, rateType, uNoUnitsType, JType, WType, - TabType, TFType, UFType, F, JCType, GCType, StepLimiter, StageLimiter} <: - RosenbrockMutableCache + return Rosenbrock33ConstantCache( + tf, uf, + ROS3PTableau( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ), J, W, linsolve + ) +end + +@cache mutable struct Rosenbrock34Cache{ + uType, rateType, uNoUnitsType, JType, WType, + TabType, TFType, UFType, F, JCType, GCType, StepLimiter, StageLimiter, + } <: + RosenbrockMutableCache u::uType uprev::uType du::rateType @@ -421,10 +471,12 @@ end stage_limiter!::StageLimiter end -function alg_cache(alg::Rodas3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Rodas3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} du = zero(rate_prototype) du1 = zero(rate_prototype) du2 = zero(rate_prototype) @@ -445,7 +497,7 @@ function alg_cache(alg::Rodas3, u, rate_prototype, ::Type{uEltypeNoUnits}, tf = TimeGradientWrapper(f, uprev, p) uf = UJacobianWrapper(f, t, p) linsolve_tmp = zero(rate_prototype) - + grad_config = build_grad_config(alg, f, tf, du1, t) jac_config = build_jac_config(alg, f, uf, du1, uprev, u, tmp, du2) @@ -453,22 +505,28 @@ function alg_cache(alg::Rodas3, u, rate_prototype, ::Type{uEltypeNoUnits}, linprob = LinearProblem(W, _vec(linsolve_tmp); u0 = _vec(tmp)) Pl, Pr = wrapprecs( - alg.precs(W, nothing, u, p, t, nothing, nothing, nothing, - nothing)..., weight, tmp) + alg.precs( + W, nothing, u, p, t, nothing, nothing, nothing, + nothing + )..., weight, tmp + ) linsolve = init( linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true), Pl = Pl, Pr = Pr, - assumptions = LinearSolve.OperatorAssumptions(true)) + assumptions = LinearSolve.OperatorAssumptions(true) + ) - Rosenbrock34Cache(u, uprev, du, du1, du2, k1, k2, k3, k4, + return Rosenbrock34Cache( + u, uprev, du, du1, du2, k1, k2, k3, k4, fsalfirst, fsallast, dT, J, W, tmp, atmp, weight, tab, tf, uf, linsolve_tmp, linsolve, jac_config, grad_config, alg.step_limiter!, - alg.stage_limiter!) + alg.stage_limiter! + ) end struct Rosenbrock34ConstantCache{TF, UF, Tab, JType, WType, F} <: - RosenbrockConstantCache + RosenbrockConstantCache tf::TF uf::UF tab::Tab @@ -477,18 +535,24 @@ struct Rosenbrock34ConstantCache{TF, UF, Tab, JType, WType, F} <: linsolve::F end -function alg_cache(alg::Rodas3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Rodas3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tf = TimeDerivativeWrapper(f, u, p) uf = UDerivativeWrapper(f, t, p) J, W = build_J_W(alg, u, uprev, p, t, dt, f, nothing, uEltypeNoUnits, Val(false)) linprob = nothing #LinearProblem(W,copy(u); u0=copy(u)) linsolve = nothing #init(linprob,alg.linsolve,alias_A=true,alias_b=true) - Rosenbrock34ConstantCache(tf, uf, - Rodas3Tableau(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)), J, W, linsolve) + return Rosenbrock34ConstantCache( + tf, uf, + Rodas3Tableau( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ), J, W, linsolve + ) end ################################################################################ @@ -521,7 +585,7 @@ jac_cache(c::Rosenbrock4Cache) = (c.J, c.W) ### Rodas methods struct Rodas23WConstantCache{TF, UF, Tab, JType, WType, F, AD} <: - RosenbrockConstantCache + RosenbrockConstantCache tf::TF uf::UF tab::Tab @@ -541,9 +605,11 @@ struct Rodas3PConstantCache{TF, UF, Tab, JType, WType, F, AD} <: RosenbrockConst autodiff::AD end -@cache mutable struct Rodas23WCache{uType, rateType, uNoUnitsType, JType, WType, TabType, - TFType, UFType, F, JCType, GCType, RTolType, A, StepLimiter, StageLimiter} <: - RosenbrockMutableCache +@cache mutable struct Rodas23WCache{ + uType, rateType, uNoUnitsType, JType, WType, TabType, + TFType, UFType, F, JCType, GCType, RTolType, A, StepLimiter, StageLimiter, + } <: + RosenbrockMutableCache u::uType uprev::uType dense1::rateType @@ -578,9 +644,11 @@ end stage_limiter!::StageLimiter end -@cache mutable struct Rodas3PCache{uType, rateType, uNoUnitsType, JType, WType, TabType, - TFType, UFType, F, JCType, GCType, RTolType, A, StepLimiter, StageLimiter} <: - RosenbrockMutableCache +@cache mutable struct Rodas3PCache{ + uType, rateType, uNoUnitsType, JType, WType, TabType, + TFType, UFType, F, JCType, GCType, RTolType, A, StepLimiter, StageLimiter, + } <: + RosenbrockMutableCache u::uType uprev::uType dense1::rateType @@ -615,10 +683,12 @@ end stage_limiter!::StageLimiter end -function alg_cache(alg::Rodas23W, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Rodas23W, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} dense1 = zero(rate_prototype) dense2 = zero(rate_prototype) dense3 = zero(rate_prototype) @@ -651,23 +721,31 @@ function alg_cache(alg::Rodas23W, u, rate_prototype, ::Type{uEltypeNoUnits}, linprob = LinearProblem(W, _vec(linsolve_tmp); u0 = _vec(tmp)) Pl, Pr = wrapprecs( - alg.precs(W, nothing, u, p, t, nothing, nothing, nothing, - nothing)..., weight, tmp) + alg.precs( + W, nothing, u, p, t, nothing, nothing, nothing, + nothing + )..., weight, tmp + ) linsolve = init( linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true), Pl = Pl, Pr = Pr, - assumptions = LinearSolve.OperatorAssumptions(true)) + assumptions = LinearSolve.OperatorAssumptions(true) + ) - Rodas23WCache(u, uprev, dense1, dense2, dense3, du, du1, du2, k1, k2, k3, k4, k5, + return Rodas23WCache( + u, uprev, dense1, dense2, dense3, du, du1, du2, k1, k2, k3, k4, k5, fsalfirst, fsallast, dT, J, W, tmp, atmp, weight, tab, tf, uf, linsolve_tmp, linsolve, jac_config, grad_config, reltol, alg, alg.step_limiter!, - alg.stage_limiter!) + alg.stage_limiter! + ) end -function alg_cache(alg::Rodas3P, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Rodas3P, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} dense1 = zero(rate_prototype) dense2 = zero(rate_prototype) dense3 = zero(rate_prototype) @@ -700,47 +778,65 @@ function alg_cache(alg::Rodas3P, u, rate_prototype, ::Type{uEltypeNoUnits}, linsolve_tmp = zero(rate_prototype) linprob = LinearProblem(W, _vec(linsolve_tmp); u0 = _vec(tmp)) Pl, Pr = wrapprecs( - alg.precs(W, nothing, u, p, t, nothing, nothing, nothing, - nothing)..., weight, tmp) + alg.precs( + W, nothing, u, p, t, nothing, nothing, nothing, + nothing + )..., weight, tmp + ) linsolve = init( linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true), Pl = Pl, Pr = Pr, - assumptions = LinearSolve.OperatorAssumptions(true)) + assumptions = LinearSolve.OperatorAssumptions(true) + ) - Rodas3PCache(u, uprev, dense1, dense2, dense3, du, du1, du2, k1, k2, k3, k4, k5, + return Rodas3PCache( + u, uprev, dense1, dense2, dense3, du, du1, du2, k1, k2, k3, k4, k5, fsalfirst, fsallast, dT, J, W, tmp, atmp, weight, tab, tf, uf, linsolve_tmp, linsolve, jac_config, grad_config, reltol, alg, alg.step_limiter!, - alg.stage_limiter!) + alg.stage_limiter! + ) end -function alg_cache(alg::Rodas23W, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Rodas23W, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tf = TimeDerivativeWrapper(f, u, p) uf = UDerivativeWrapper(f, t, p) J, W = build_J_W(alg, u, uprev, p, t, dt, f, nothing, uEltypeNoUnits, Val(false)) linprob = nothing #LinearProblem(W,copy(u); u0=copy(u)) linsolve = nothing #init(linprob,alg.linsolve,alias_A=true,alias_b=true) - Rodas23WConstantCache(tf, uf, - Rodas3PTableau(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)), J, W, linsolve, - alg_autodiff(alg)) + return Rodas23WConstantCache( + tf, uf, + Rodas3PTableau( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ), J, W, linsolve, + alg_autodiff(alg) + ) end -function alg_cache(alg::Rodas3P, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Rodas3P, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tf = TimeDerivativeWrapper(f, u, p) uf = UDerivativeWrapper(f, t, p) J, W = build_J_W(alg, u, uprev, p, t, dt, f, nothing, uEltypeNoUnits, Val(false)) linprob = nothing #LinearProblem(W,copy(u); u0=copy(u)) linsolve = nothing #init(linprob,alg.linsolve,alias_A=true,alias_b=true) - Rodas3PConstantCache(tf, uf, - Rodas3PTableau(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)), J, W, linsolve, - alg_autodiff(alg)) + return Rodas3PConstantCache( + tf, uf, + Rodas3PTableau( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ), J, W, linsolve, + alg_autodiff(alg) + ) end ### Rodas4 methods @@ -760,16 +856,19 @@ function alg_cache( u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tf = TimeDerivativeWrapper(f, u, p) uf = UDerivativeWrapper(f, t, p) J, W = build_J_W(alg, u, uprev, p, t, dt, f, nothing, uEltypeNoUnits, Val(false)) linprob = nothing #LinearProblem(W,copy(u); u0=copy(u)) linsolve = nothing #init(linprob,alg.linsolve,alias_A=true,alias_b=true) tab = tabtype(alg)(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - RosenbrockCombinedConstantCache(tf, uf, + return RosenbrockCombinedConstantCache( + tf, uf, tab, J, W, linsolve, - alg_autodiff(alg), size(tab.H, 1)) + alg_autodiff(alg), size(tab.H, 1) + ) end function alg_cache( @@ -777,7 +876,8 @@ function alg_cache( u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = tabtype(alg)(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) # Initialize vectors dense = [zero(rate_prototype) for _ in 1:size(tab.H, 1)] @@ -811,32 +911,40 @@ function alg_cache( J, W = build_J_W(alg, u, uprev, p, t, dt, f, jac_config, uEltypeNoUnits, Val(true)) Pl, Pr = wrapprecs( - alg.precs(W, nothing, u, p, t, nothing, nothing, nothing, - nothing)..., weight, tmp) + alg.precs( + W, nothing, u, p, t, nothing, nothing, nothing, + nothing + )..., weight, tmp + ) linsolve_tmp = zero(rate_prototype) - linprob = LinearProblem(W, _vec(linsolve_tmp); u0=_vec(tmp)) + linprob = LinearProblem(W, _vec(linsolve_tmp); u0 = _vec(tmp)) linsolve = init( - linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A=true, alias_b=true), - Pl=Pl, Pr=Pr, - assumptions=LinearSolve.OperatorAssumptions(true)) + linprob, alg.linsolve, alias = LinearAliasSpecifier(alias_A = true, alias_b = true), + Pl = Pl, Pr = Pr, + assumptions = LinearSolve.OperatorAssumptions(true) + ) + - # Return the cache struct with vectors - RosenbrockCache( + return RosenbrockCache( u, uprev, dense, du, du1, du2, dtC, dtd, ks, fsalfirst, fsallast, dT, J, W, tmp, atmp, weight, tab, tf, uf, linsolve_tmp, linsolve, jac_config, grad_config, reltol, alg, - alg.step_limiter!, alg.stage_limiter!, size(tab.H, 1)) + alg.step_limiter!, alg.stage_limiter!, size(tab.H, 1) + ) end function get_fsalfirstlast( - cache::Union{Rosenbrock23Cache, Rosenbrock32Cache, Rosenbrock33Cache, + cache::Union{ + Rosenbrock23Cache, Rosenbrock32Cache, Rosenbrock33Cache, Rosenbrock34Cache, - Rosenbrock4Cache}, - u) - (cache.fsalfirst, cache.fsallast) + Rosenbrock4Cache, + }, + u + ) + return (cache.fsalfirst, cache.fsallast) end ################################################################################ diff --git a/lib/OrdinaryDiffEqRosenbrock/src/rosenbrock_interpolants.jl b/lib/OrdinaryDiffEqRosenbrock/src/rosenbrock_interpolants.jl index 7857d4c58f..b9f4215fce 100644 --- a/lib/OrdinaryDiffEqRosenbrock/src/rosenbrock_interpolants.jl +++ b/lib/OrdinaryDiffEqRosenbrock/src/rosenbrock_interpolants.jl @@ -1,20 +1,26 @@ ### Fallbacks to capture -ROSENBROCKS_WITH_INTERPOLATIONS = Union{Rosenbrock23ConstantCache, Rosenbrock23Cache, +ROSENBROCKS_WITH_INTERPOLATIONS = Union{ + Rosenbrock23ConstantCache, Rosenbrock23Cache, Rosenbrock32ConstantCache, Rosenbrock32Cache, Rodas23WConstantCache, Rodas3PConstantCache, Rodas23WCache, Rodas3PCache, RosenbrockCombinedConstantCache, - RosenbrockCache} + RosenbrockCache, +} -function _ode_interpolant(Θ, dt, y₀, y₁, k, +function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::ROSENBROCKS_WITH_INTERPOLATIONS, - idxs, T::Type{Val{D}}, differential_vars) where {D} + idxs, T::Type{Val{D}}, differential_vars + ) where {D} throw(DerivativeOrderNotPossibleError()) end -function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::ROSENBROCKS_WITH_INTERPOLATIONS, - idxs, T::Type{Val{D}}, differential_vars) where {D} + idxs, T::Type{Val{D}}, differential_vars + ) where {D} throw(DerivativeOrderNotPossibleError()) end @@ -37,44 +43,59 @@ end c2 = Θ * (Θ - 2d) / (1 - 2d) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, - cache::Union{Rosenbrock23ConstantCache, - Rosenbrock32ConstantCache}, idxs::Nothing, - T::Type{Val{0}}, differential_vars) +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, + cache::Union{ + Rosenbrock23ConstantCache, + Rosenbrock32ConstantCache, + }, idxs::Nothing, + T::Type{Val{0}}, differential_vars + ) @rosenbrock2332pre0 @inbounds y₀ + dt * (c1 * k[1] + c2 * k[2]) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Rosenbrock23Cache, Rosenbrock32Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars) + idxs::Nothing, T::Type{Val{0}}, differential_vars + ) @rosenbrock2332pre0 @inbounds @.. y₀ + dt * (c1 * k[1] + c2 * k[2]) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, - cache::Union{Rosenbrock23ConstantCache, Rosenbrock23Cache, - Rosenbrock32ConstantCache, Rosenbrock32Cache - }, idxs, T::Type{Val{0}}, differential_vars) +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, + cache::Union{ + Rosenbrock23ConstantCache, Rosenbrock23Cache, + Rosenbrock32ConstantCache, Rosenbrock32Cache, + }, idxs, T::Type{Val{0}}, differential_vars + ) @rosenbrock2332pre0 @.. y₀[idxs] + dt * (c1 * k[1][idxs] + c2 * k[2][idxs]) end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, - cache::Union{Rosenbrock23ConstantCache, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, + cache::Union{ + Rosenbrock23ConstantCache, Rosenbrock23Cache, - Rosenbrock32ConstantCache, Rosenbrock32Cache - }, idxs::Nothing, T::Type{Val{0}}, differential_vars) + Rosenbrock32ConstantCache, Rosenbrock32Cache, + }, idxs::Nothing, T::Type{Val{0}}, differential_vars + ) @rosenbrock2332pre0 @inbounds @.. out = y₀ + dt * (c1 * k[1] + c2 * k[2]) out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, - cache::Union{Rosenbrock23ConstantCache, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, + cache::Union{ + Rosenbrock23ConstantCache, Rosenbrock23Cache, - Rosenbrock32ConstantCache, Rosenbrock32Cache - }, idxs, T::Type{Val{0}}, differential_vars) + Rosenbrock32ConstantCache, Rosenbrock32Cache, + }, idxs, T::Type{Val{0}}, differential_vars + ) @rosenbrock2332pre0 @views @.. out = y₀[idxs] + dt * (c1 * k[1][idxs] + c2 * k[2][idxs]) out @@ -87,37 +108,49 @@ end c2diff = (2 * Θ - 2 * d) / (1 - 2 * d) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, - cache::Union{Rosenbrock23ConstantCache, Rosenbrock23Cache, - Rosenbrock32ConstantCache, Rosenbrock32Cache - }, idxs::Nothing, T::Type{Val{1}}, differential_vars) +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, + cache::Union{ + Rosenbrock23ConstantCache, Rosenbrock23Cache, + Rosenbrock32ConstantCache, Rosenbrock32Cache, + }, idxs::Nothing, T::Type{Val{1}}, differential_vars + ) @rosenbrock2332pre1 @.. c1diff * k[1] + c2diff * k[2] end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, - cache::Union{Rosenbrock23ConstantCache, Rosenbrock23Cache, - Rosenbrock32ConstantCache, Rosenbrock32Cache - }, idxs, T::Type{Val{1}}, differential_vars) +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, + cache::Union{ + Rosenbrock23ConstantCache, Rosenbrock23Cache, + Rosenbrock32ConstantCache, Rosenbrock32Cache, + }, idxs, T::Type{Val{1}}, differential_vars + ) @rosenbrock2332pre1 @.. c1diff * k[1][idxs] + c2diff * k[2][idxs] end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, - cache::Union{Rosenbrock23ConstantCache, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, + cache::Union{ + Rosenbrock23ConstantCache, Rosenbrock23Cache, - Rosenbrock32ConstantCache, Rosenbrock32Cache - }, idxs::Nothing, T::Type{Val{1}}, differential_vars) + Rosenbrock32ConstantCache, Rosenbrock32Cache, + }, idxs::Nothing, T::Type{Val{1}}, differential_vars + ) @rosenbrock2332pre1 @.. out = c1diff * k[1] + c2diff * k[2] out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, - cache::Union{Rosenbrock23ConstantCache, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, + cache::Union{ + Rosenbrock23ConstantCache, Rosenbrock23Cache, - Rosenbrock32ConstantCache, Rosenbrock32Cache - }, idxs, T::Type{Val{1}}, differential_vars) + Rosenbrock32ConstantCache, Rosenbrock32Cache, + }, idxs, T::Type{Val{1}}, differential_vars + ) @rosenbrock2332pre1 @views @.. out = c1diff * k[1][idxs] + c2diff * k[2][idxs] out @@ -132,9 +165,12 @@ From MATLAB ODE Suite by Shampine y₀, y₁, k, - cache::Union{RosenbrockCombinedConstantCache, Rodas23WConstantCache, - Rodas3PConstantCache, RosenbrockCache, Rodas23WCache, Rodas3PCache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars) + cache::Union{ + RosenbrockCombinedConstantCache, Rodas23WConstantCache, + Rodas3PConstantCache, RosenbrockCache, Rodas23WCache, Rodas3PCache, + }, + idxs::Nothing, T::Type{Val{0}}, differential_vars + ) Θ1 = 1 - Θ if !hasproperty(cache, :interp_order) || cache.interp_order == 2 @.. Θ1 * y₀ + Θ * (y₁ + Θ1 * (k[1] + Θ * k[2])) @@ -145,28 +181,38 @@ From MATLAB ODE Suite by Shampine end end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{ RosenbrockCombinedConstantCache, RosenbrockCache, Rodas23WConstantCache, - Rodas23WCache, Rodas3PConstantCache, Rodas3PCache}, - idxs, T::Type{Val{0}}, differential_vars) + Rodas23WCache, Rodas3PConstantCache, Rodas3PCache, + }, + idxs, T::Type{Val{0}}, differential_vars + ) Θ1 = 1 - Θ if !hasproperty(cache, :interp_order) || cache.interp_order == 2 @views @.. Θ1 * y₀[idxs] + Θ * (y₁[idxs] + Θ1 * (k[1][idxs] + Θ * k[2][idxs])) elseif cache.interp_order == 4 - @views @.. Θ1 * y₀[idxs] + Θ * (y₁[idxs] + Θ1 * (k[1][idxs] + - Θ * (k[2][idxs] + Θ * (k[3][idxs] + Θ * k[4][idxs])))) + @views @.. Θ1 * y₀[idxs] + Θ * ( + y₁[idxs] + Θ1 * ( + k[1][idxs] + + Θ * (k[2][idxs] + Θ * (k[3][idxs] + Θ * k[4][idxs])) + ) + ) else @views @.. Θ1 * y₀[idxs] + - Θ * (y₁[idxs] + Θ1 * (k[1][idxs] + Θ * (k[2][idxs] + Θ * k[3][idxs]))) + Θ * (y₁[idxs] + Θ1 * (k[1][idxs] + Θ * (k[2][idxs] + Θ * k[3][idxs]))) end end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{ RosenbrockCombinedConstantCache, RosenbrockCache, Rodas23WConstantCache, - Rodas23WCache, Rodas3PConstantCache, Rodas3PCache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars) + Rodas23WCache, Rodas3PConstantCache, Rodas3PCache, + }, + idxs::Nothing, T::Type{Val{0}}, differential_vars + ) Θ1 = 1 - Θ if !hasproperty(cache, :interp_order) || cache.interp_order == 2 @.. out = Θ1 * y₀ + Θ * (y₁ + Θ1 * (k[1] + Θ * k[2])) @@ -178,21 +224,30 @@ end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{ RosenbrockCombinedConstantCache, RosenbrockCache, Rodas23WConstantCache, - Rodas23WCache, Rodas3PConstantCache, Rodas3PCache}, - idxs, T::Type{Val{0}}, differential_vars) + Rodas23WCache, Rodas3PConstantCache, Rodas3PCache, + }, + idxs, T::Type{Val{0}}, differential_vars + ) Θ1 = 1 - Θ if !hasproperty(cache, :interp_order) || cache.interp_order == 2 @views @.. out = Θ1 * y₀[idxs] + Θ * (y₁[idxs] + Θ1 * (k[1][idxs] + Θ * k[2][idxs])) elseif cache.interp_order == 4 - @views @.. out = Θ1 * y₀[idxs] + Θ * (y₁[idxs] + Θ1 * (k[1][idxs] + - Θ * (k[2][idxs] + Θ * (k[3][idxs] + Θ * k[4][idxs])))) + @views @.. out = Θ1 * y₀[idxs] + Θ * ( + y₁[idxs] + Θ1 * ( + k[1][idxs] + + Θ * (k[2][idxs] + Θ * (k[3][idxs] + Θ * k[4][idxs])) + ) + ) else @views @.. out = Θ1 * y₀[idxs] + - Θ * (y₁[idxs] + - Θ1 * (k[1][idxs] + Θ * (k[2][idxs] + Θ * k[3][idxs]))) + Θ * ( + y₁[idxs] + + Θ1 * (k[1][idxs] + Θ * (k[2][idxs] + Θ * k[3][idxs])) + ) end out end @@ -205,202 +260,315 @@ end k, cache::Union{ RosenbrockCache, Rodas23WCache, Rodas3PCache, RosenbrockCombinedConstantCache, - Rodas23WConstantCache, Rodas3PConstantCache}, - idxs::Nothing, T::Type{Val{1}}, differential_vars) + Rodas23WConstantCache, Rodas3PConstantCache, + }, + idxs::Nothing, T::Type{Val{1}}, differential_vars + ) if !hasproperty(cache, :interp_order) || cache.interp_order == 2 @.. (k[1] + Θ * (-2 * k[1] + 2 * k[2] - 3 * k[2] * Θ) - y₀ + y₁) / dt elseif cache.interp_order == 4 - @.. (k[1] + Θ * (-2 * k[1] + 2 * k[2] + - Θ * (-3 * k[2] + 3 * k[3] + - Θ * (-4 * k[3] + 4 * k[4] - 5 * Θ * k[4]))) - - y₀ + y₁) / dt + @.. ( + k[1] + Θ * ( + -2 * k[1] + 2 * k[2] + + Θ * ( + -3 * k[2] + 3 * k[3] + + Θ * (-4 * k[3] + 4 * k[4] - 5 * Θ * k[4]) + ) + ) - + y₀ + y₁ + ) / dt else - @.. (k[1] + Θ * (-2 * k[1] + 2 * k[2] + - Θ * (-3 * k[2] + 3 * k[3] - 4 * Θ * k[3])) - - y₀ + y₁) / dt + @.. ( + k[1] + Θ * ( + -2 * k[1] + 2 * k[2] + + Θ * (-3 * k[2] + 3 * k[3] - 4 * Θ * k[3]) + ) - + y₀ + y₁ + ) / dt end end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{ RosenbrockCombinedConstantCache, RosenbrockCache, Rodas23WConstantCache, - Rodas23WCache, Rodas3PConstantCache, Rodas3PCache}, - idxs, T::Type{Val{1}}, differential_vars) + Rodas23WCache, Rodas3PConstantCache, Rodas3PCache, + }, + idxs, T::Type{Val{1}}, differential_vars + ) if !hasproperty(cache, :interp_order) || cache.interp_order == 2 - @views @.. (k[1][idxs] + - Θ * (-2 * k[1][idxs] + 2 * k[2][idxs] - 3 * k[2][idxs] * Θ) - - y₀[idxs] + y₁[idxs]) / dt + @views @.. ( + k[1][idxs] + + Θ * (-2 * k[1][idxs] + 2 * k[2][idxs] - 3 * k[2][idxs] * Θ) - + y₀[idxs] + y₁[idxs] + ) / dt elseif cache.interp_order == 4 - @views @.. (k[1][idxs] + Θ * (-2 * k[1][idxs] + 2 * k[2][idxs] + - Θ * (-3 * k[2][idxs] + 3 * k[3][idxs] + - Θ * (-4 * k[3][idxs] + 4 * k[4][idxs] - 5 * Θ * k[4][idxs]))) - - y₀[idxs] + y₁[idxs]) / dt + @views @.. ( + k[1][idxs] + Θ * ( + -2 * k[1][idxs] + 2 * k[2][idxs] + + Θ * ( + -3 * k[2][idxs] + 3 * k[3][idxs] + + Θ * (-4 * k[3][idxs] + 4 * k[4][idxs] - 5 * Θ * k[4][idxs]) + ) + ) - + y₀[idxs] + y₁[idxs] + ) / dt else - @views @.. (k[1][idxs] + - Θ * (-2 * k[1][idxs] + 2 * k[2][idxs] + - Θ * (-3 * k[2][idxs] + 3 * k[3][idxs] - 4 * Θ * k[3][idxs])) - - y₀[idxs] + y₁[idxs]) / dt + @views @.. ( + k[1][idxs] + + Θ * ( + -2 * k[1][idxs] + 2 * k[2][idxs] + + Θ * (-3 * k[2][idxs] + 3 * k[3][idxs] - 4 * Θ * k[3][idxs]) + ) - + y₀[idxs] + y₁[idxs] + ) / dt end end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{ RosenbrockCombinedConstantCache, RosenbrockCache, Rodas23WConstantCache, - Rodas23WCache, Rodas3PConstantCache, Rodas3PCache}, - idxs::Nothing, T::Type{Val{1}}, differential_vars) + Rodas23WCache, Rodas3PConstantCache, Rodas3PCache, + }, + idxs::Nothing, T::Type{Val{1}}, differential_vars + ) if !hasproperty(cache, :interp_order) || cache.interp_order == 2 @.. out = (k[1] + Θ * (-2 * k[1] + 2 * k[2] - 3 * k[2] * Θ) - y₀ + y₁) / dt elseif cache.interp_order == 4 - @.. out = (k[1] + Θ * (-2 * k[1] + 2 * k[2] + - Θ * (-3 * k[2] + 3 * k[3] + - Θ * (-4 * k[3] + 4 * k[4] - 5 * Θ * k[4]))) - - y₀ + y₁) / dt + @.. out = ( + k[1] + Θ * ( + -2 * k[1] + 2 * k[2] + + Θ * ( + -3 * k[2] + 3 * k[3] + + Θ * (-4 * k[3] + 4 * k[4] - 5 * Θ * k[4]) + ) + ) - + y₀ + y₁ + ) / dt else - @.. out = (k[1] + - Θ * (-2 * k[1] + 2 * k[2] + - Θ * (-3 * k[2] + 3 * k[3] - 4 * Θ * k[3])) - y₀ + y₁) / dt + @.. out = ( + k[1] + + Θ * ( + -2 * k[1] + 2 * k[2] + + Θ * (-3 * k[2] + 3 * k[3] - 4 * Θ * k[3]) + ) - y₀ + y₁ + ) / dt end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{ RosenbrockCombinedConstantCache, RosenbrockCache, Rodas23WConstantCache, - Rodas23WCache, Rodas3PConstantCache, Rodas3PCache}, - idxs, T::Type{Val{1}}, differential_vars) + Rodas23WCache, Rodas3PConstantCache, Rodas3PCache, + }, + idxs, T::Type{Val{1}}, differential_vars + ) if !hasproperty(cache, :interp_order) || cache.interp_order == 2 - @views @.. out = (k[1][idxs] + - Θ * - (-2 * k[1][idxs] + 2 * k[2][idxs] - - 3 * k[2][idxs] * Θ) - - y₀[idxs] + y₁[idxs]) / dt + @views @.. out = ( + k[1][idxs] + + Θ * + ( + -2 * k[1][idxs] + 2 * k[2][idxs] - + 3 * k[2][idxs] * Θ + ) - + y₀[idxs] + y₁[idxs] + ) / dt elseif cache.interp_order == 4 - @views @.. out = (k[1][idxs] + Θ * (-2 * k[1][idxs] + 2 * k[2][idxs] + - Θ * (-3 * k[2][idxs] + 3 * k[3][idxs] + - Θ * (-4 * k[3][idxs] + 4 * k[4][idxs] - 5 * Θ * k[4][idxs]))) - - y₀[idxs] + y₁[idxs]) / dt + @views @.. out = ( + k[1][idxs] + Θ * ( + -2 * k[1][idxs] + 2 * k[2][idxs] + + Θ * ( + -3 * k[2][idxs] + 3 * k[3][idxs] + + Θ * (-4 * k[3][idxs] + 4 * k[4][idxs] - 5 * Θ * k[4][idxs]) + ) + ) - + y₀[idxs] + y₁[idxs] + ) / dt else - @views @.. broadcast=false out=(k[1][idxs] + - Θ * (-2 * k[1][idxs] + 2 * k[2][idxs] + - Θ * - (-3 * k[2][idxs] + 3 * k[3][idxs] - - 4 * Θ * k[3][idxs])) - - y₀[idxs] + y₁[idxs]) / dt + @views @.. broadcast = false out = ( + k[1][idxs] + + Θ * ( + -2 * k[1][idxs] + 2 * k[2][idxs] + + Θ * + ( + -3 * k[2][idxs] + 3 * k[3][idxs] - + 4 * Θ * k[3][idxs] + ) + ) - + y₀[idxs] + y₁[idxs] + ) / dt end out end # Second Derivative -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::RosenbrockCombinedConstantCache, - idxs::Nothing, T::Type{Val{2}}, differential_vars) +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::RosenbrockCombinedConstantCache, + idxs::Nothing, T::Type{Val{2}}, differential_vars + ) if cache.interp_order == 4 - @inbounds (-2 * k[1] + 2 * k[2] + Θ * (-6 * k[2] + 6 * k[3] + - Θ * (-12 * k[3] + 12 * k[4] - 20 * Θ * k[4]))) / dt^2 + @inbounds ( + -2 * k[1] + 2 * k[2] + Θ * ( + -6 * k[2] + 6 * k[3] + + Θ * (-12 * k[3] + 12 * k[4] - 20 * Θ * k[4]) + ) + ) / dt^2 else - @inbounds (-2 * k[1] + 2 * k[2] + Θ * (-6 * k[2] + 6 * k[3] - 12 * Θ * k[3])) / dt^2 + @inbounds (-2 * k[1] + 2 * k[2] + Θ * (-6 * k[2] + 6 * k[3] - 12 * Θ * k[3])) / dt^2 end end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::RosenbrockCache, idxs::Nothing, - T::Type{Val{2}}, differential_vars) +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::RosenbrockCache, idxs::Nothing, + T::Type{Val{2}}, differential_vars + ) if cache.interp_order == 4 - @inbounds @.. broadcast=false (-2 * k[1] + 2 * k[2] + Θ * (-6 * k[2] + 6 * k[3] + - Θ * (-12 * k[3] + 12 * k[4] - 20 * Θ * k[4]))) / dt^2 + @inbounds @.. broadcast = false ( + -2 * k[1] + 2 * k[2] + Θ * ( + -6 * k[2] + 6 * k[3] + + Θ * (-12 * k[3] + 12 * k[4] - 20 * Θ * k[4]) + ) + ) / dt^2 else - @inbounds @.. broadcast=false (-2 * k[1] + 2 * k[2] + - Θ * (-6 * k[2] + 6 * k[3] - 12 * Θ * k[3]))/dt^2 + @inbounds @.. broadcast = false ( + -2 * k[1] + 2 * k[2] + + Θ * (-6 * k[2] + 6 * k[3] - 12 * Θ * k[3]) + ) / dt^2 end end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{RosenbrockCombinedConstantCache, RosenbrockCache}, - idxs, T::Type{Val{2}}, differential_vars) + idxs, T::Type{Val{2}}, differential_vars + ) if cache.interp_order == 4 - @.. broadcast=false (-2 * k[1][idxs] + 2 * k[2][idxs] + Θ * (-6 * k[2][idxs] + 6 * k[3][idxs] + - Θ * (-12 * k[3][idxs] + 12 * k[4][idxs] - 20 * Θ * k[4][idxs]))) / dt^2 + @.. broadcast = false ( + -2 * k[1][idxs] + 2 * k[2][idxs] + Θ * ( + -6 * k[2][idxs] + 6 * k[3][idxs] + + Θ * (-12 * k[3][idxs] + 12 * k[4][idxs] - 20 * Θ * k[4][idxs]) + ) + ) / dt^2 else - @.. broadcast=false (-2 * k[1][idxs] + 2 * k[2][idxs] + - Θ * (-6 * k[2][idxs] + 6 * k[3][idxs] - 12 * Θ * k[3][idxs]))/dt^2 + @.. broadcast = false ( + -2 * k[1][idxs] + 2 * k[2][idxs] + + Θ * (-6 * k[2][idxs] + 6 * k[3][idxs] - 12 * Θ * k[3][idxs]) + ) / dt^2 end end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{RosenbrockCombinedConstantCache, RosenbrockCache}, - idxs::Nothing, T::Type{Val{2}}, differential_vars) + idxs::Nothing, T::Type{Val{2}}, differential_vars + ) if cache.interp_order == 4 - @.. broadcast=false out=(-2 * k[1] + 2 * k[2] + Θ * (-6 * k[2] + 6 * k[3] + - Θ * (-12 * k[3] + 12 * k[4] - 20 * Θ * k[4]))) / dt^2 + @.. broadcast = false out = ( + -2 * k[1] + 2 * k[2] + Θ * ( + -6 * k[2] + 6 * k[3] + + Θ * (-12 * k[3] + 12 * k[4] - 20 * Θ * k[4]) + ) + ) / dt^2 else - @.. broadcast=false out=(-2 * k[1] + 2 * k[2] + - Θ * (-6 * k[2] + 6 * k[3] - 12 * Θ * k[3])) / dt^2 + @.. broadcast = false out = ( + -2 * k[1] + 2 * k[2] + + Θ * (-6 * k[2] + 6 * k[3] - 12 * Θ * k[3]) + ) / dt^2 end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{RosenbrockCombinedConstantCache, RosenbrockCache}, - idxs, T::Type{Val{2}}, differential_vars) + idxs, T::Type{Val{2}}, differential_vars + ) if cache.interp_order == 4 - @views @.. broadcast=false out=(-2 * k[1][idxs] + 2 * k[2][idxs] + Θ * (-6 * k[2][idxs] + 6 * k[3][idxs] + - Θ * (-12 * k[3][idxs] + 12 * k[4][idxs] - 20 * Θ * k[4][idxs]))) / dt^2 + @views @.. broadcast = false out = ( + -2 * k[1][idxs] + 2 * k[2][idxs] + Θ * ( + -6 * k[2][idxs] + 6 * k[3][idxs] + + Θ * (-12 * k[3][idxs] + 12 * k[4][idxs] - 20 * Θ * k[4][idxs]) + ) + ) / dt^2 else - @views @.. broadcast=false out=(-2 * k[1][idxs] + 2 * k[2][idxs] + - Θ * - (-6 * k[2][idxs] + 6 * k[3][idxs] - 12 * Θ * k[3][idxs])) / - dt^2 + @views @.. broadcast = false out = ( + -2 * k[1][idxs] + 2 * k[2][idxs] + + Θ * + (-6 * k[2][idxs] + 6 * k[3][idxs] - 12 * Θ * k[3][idxs]) + ) / + dt^2 end out end # Third Derivative -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::RosenbrockCombinedConstantCache, - idxs::Nothing, T::Type{Val{3}}, differential_vars) +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::RosenbrockCombinedConstantCache, + idxs::Nothing, T::Type{Val{3}}, differential_vars + ) if cache.interp_order == 4 - @inbounds (-6 * k[2] + 6 * k[3] + Θ * (-24 * k[3] + 24 * k[4] - 60 * Θ * k[4])) / dt^3 + @inbounds (-6 * k[2] + 6 * k[3] + Θ * (-24 * k[3] + 24 * k[4] - 60 * Θ * k[4])) / dt^3 else - @inbounds (-6 * k[2] + 6 * k[3] - 24 * Θ * k[3]) / dt^3 + @inbounds (-6 * k[2] + 6 * k[3] - 24 * Θ * k[3]) / dt^3 end end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::RosenbrockCache, idxs::Nothing, - T::Type{Val{3}}, differential_vars) +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::RosenbrockCache, idxs::Nothing, + T::Type{Val{3}}, differential_vars + ) if cache.interp_order == 4 - @inbounds @.. broadcast=false (-6 * k[2] + 6 * k[3] + Θ * (-24 * k[3] + 24 * k[4] - 60 * Θ * k[4])) / dt^3 + @inbounds @.. broadcast = false (-6 * k[2] + 6 * k[3] + Θ * (-24 * k[3] + 24 * k[4] - 60 * Θ * k[4])) / dt^3 else - @inbounds @.. broadcast=false (-6 * k[2] + 6 * k[3] - 24 * Θ * k[3])/dt^3 + @inbounds @.. broadcast = false (-6 * k[2] + 6 * k[3] - 24 * Θ * k[3]) / dt^3 end end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{RosenbrockCombinedConstantCache, RosenbrockCache}, - idxs, T::Type{Val{3}}, differential_vars) + idxs, T::Type{Val{3}}, differential_vars + ) if cache.interp_order == 4 - @.. broadcast=false (-6 * k[2][idxs] + 6 * k[3][idxs] + - Θ * (-24 * k[3][idxs] + 24 * k[4][idxs] - 60 * Θ * k[4][idxs])) / dt^3 + @.. broadcast = false ( + -6 * k[2][idxs] + 6 * k[3][idxs] + + Θ * (-24 * k[3][idxs] + 24 * k[4][idxs] - 60 * Θ * k[4][idxs]) + ) / dt^3 else - @.. broadcast=false (-6 * k[2][idxs] + 6 * k[3][idxs] - 24 * Θ * k[3][idxs])/dt^3 + @.. broadcast = false (-6 * k[2][idxs] + 6 * k[3][idxs] - 24 * Θ * k[3][idxs]) / dt^3 end end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{RosenbrockCombinedConstantCache, RosenbrockCache}, - idxs::Nothing, T::Type{Val{3}}, differential_vars) + idxs::Nothing, T::Type{Val{3}}, differential_vars + ) if cache.interp_order == 4 - @.. broadcast=false out=(-6 * k[2] + 6 * k[3] + Θ * (-24 * k[3] + 24 * k[4] - 60 * Θ * k[4])) / dt^3 + @.. broadcast = false out = (-6 * k[2] + 6 * k[3] + Θ * (-24 * k[3] + 24 * k[4] - 60 * Θ * k[4])) / dt^3 else - @.. broadcast=false out=(-6 * k[2] + 6 * k[3] - 24 * Θ * k[3]) / dt^3 + @.. broadcast = false out = (-6 * k[2] + 6 * k[3] - 24 * Θ * k[3]) / dt^3 end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{RosenbrockCombinedConstantCache, RosenbrockCache}, - idxs, T::Type{Val{3}}, differential_vars) + idxs, T::Type{Val{3}}, differential_vars + ) if cache.interp_order == 4 - @views @.. broadcast=false out=(-6 * k[2][idxs] + 6 * k[3][idxs] + - Θ * (-24 * k[3][idxs] + 24 * k[4][idxs] - 60 * Θ * k[4][idxs])) / dt^3 + @views @.. broadcast = false out = ( + -6 * k[2][idxs] + 6 * k[3][idxs] + + Θ * (-24 * k[3][idxs] + 24 * k[4][idxs] - 60 * Θ * k[4][idxs]) + ) / dt^3 else - @views @.. broadcast=false out=(-6 * k[2][idxs] + 6 * k[3][idxs] - - 24 * Θ * k[3][idxs]) / dt^3 + @views @.. broadcast = false out = ( + -6 * k[2][idxs] + 6 * k[3][idxs] - + 24 * Θ * k[3][idxs] + ) / dt^3 end out end diff --git a/lib/OrdinaryDiffEqRosenbrock/src/rosenbrock_perform_step.jl b/lib/OrdinaryDiffEqRosenbrock/src/rosenbrock_perform_step.jl index 03557a12d3..0ad836ac44 100644 --- a/lib/OrdinaryDiffEqRosenbrock/src/rosenbrock_perform_step.jl +++ b/lib/OrdinaryDiffEqRosenbrock/src/rosenbrock_perform_step.jl @@ -1,17 +1,25 @@ -function initialize!(integrator, cache::Union{Rosenbrock23Cache, - Rosenbrock32Cache}) +function initialize!( + integrator, cache::Union{ + Rosenbrock23Cache, + Rosenbrock32Cache, + } + ) integrator.kshortsize = 2 (; k₁, k₂, fsalfirst, fsallast) = cache resize!(integrator.k, integrator.kshortsize) integrator.k[1] = k₁ integrator.k[2] = k₂ integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end -function initialize!(integrator, - cache::Union{Rosenbrock23ConstantCache, - Rosenbrock32ConstantCache}) +function initialize!( + integrator, + cache::Union{ + Rosenbrock23ConstantCache, + Rosenbrock32ConstantCache, + } + ) integrator.kshortsize = 2 integrator.k = typeof(integrator.k)(undef, integrator.kshortsize) integrator.fsalfirst = integrator.f(integrator.uprev, integrator.p, integrator.t) @@ -20,7 +28,7 @@ function initialize!(integrator, # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = zero(integrator.fsalfirst) - integrator.k[2] = zero(integrator.fsalfirst) + return integrator.k[2] = zero(integrator.fsalfirst) end @muladd function perform_step!(integrator, cache::Rosenbrock23Cache, repeat_step = false) @@ -45,19 +53,24 @@ end calc_rosenbrock_differentiation!(integrator, cache, dtγ, dtγ, repeat_step) - calculate_residuals!(weight, fill!(weight, one(eltype(u))), uprev, uprev, + calculate_residuals!( + weight, fill!(weight, one(eltype(u))), uprev, uprev, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) if repeat_step linres = dolinsolve( integrator, cache.linsolve; A = nothing, b = _vec(linsolve_tmp), du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, - solverdata = (; gamma = dtγ)) + solverdata = (; gamma = dtγ) + ) else - linres = dolinsolve(integrator, cache.linsolve; A = W, b = _vec(linsolve_tmp), + linres = dolinsolve( + integrator, cache.linsolve; A = W, b = _vec(linsolve_tmp), du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, - solverdata = (; gamma = dtγ)) + solverdata = (; gamma = dtγ) + ) end vecu = _vec(linres.u) @@ -95,13 +108,13 @@ end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if mass_matrix === I - @.. broadcast=false linsolve_tmp=fsallast - c₃₂ * (k₂ - f₁) - - 2(k₁ - fsalfirst) + dt * dT + @.. broadcast = false linsolve_tmp = fsallast - c₃₂ * (k₂ - f₁) - + 2(k₁ - fsalfirst) + dt * dT else - @.. broadcast=false du2=c₃₂ * k₂ + 2k₁ + @.. broadcast = false du2 = c₃₂ * k₂ + 2k₁ mul!(_vec(du1), mass_matrix, _vec(du2)) - @.. broadcast=false linsolve_tmp=fsallast - du1 + c₃₂ * f₁ + 2fsalfirst + - dt * dT + @.. broadcast = false linsolve_tmp = fsallast - du1 + c₃₂ * f₁ + 2fsalfirst + + dt * dT end linres = dolinsolve(integrator, linres.cache; b = _vec(linsolve_tmp)) @@ -112,17 +125,21 @@ end integrator.stats.nsolve += 1 if mass_matrix === I - @.. broadcast=false tmp=dto6 * (k₁ - 2 * k₂ + k₃) + @.. broadcast = false tmp = dto6 * (k₁ - 2 * k₂ + k₃) else veck₁ = _vec(k₁) veck₂ = _vec(k₂) veck₃ = _vec(k₃) vectmp = _vec(tmp) - @.. broadcast=false vectmp=ifelse(cache.algebraic_vars, - false, dto6 * (veck₁ - 2 * veck₂ + veck₃)) + @.. broadcast = false vectmp = ifelse( + cache.algebraic_vars, + false, dto6 * (veck₁ - 2 * veck₂ + veck₃) + ) end - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if mass_matrix !== I @@ -157,19 +174,24 @@ end calc_rosenbrock_differentiation!(integrator, cache, dtγ, dtγ, repeat_step) - calculate_residuals!(weight, fill!(weight, one(eltype(u))), uprev, uprev, + calculate_residuals!( + weight, fill!(weight, one(eltype(u))), uprev, uprev, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) if repeat_step linres = dolinsolve( integrator, cache.linsolve; A = nothing, b = _vec(linsolve_tmp), du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, - solverdata = (; gamma = dtγ)) + solverdata = (; gamma = dtγ) + ) else - linres = dolinsolve(integrator, cache.linsolve; A = W, b = _vec(linsolve_tmp), + linres = dolinsolve( + integrator, cache.linsolve; A = W, b = _vec(linsolve_tmp), du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, - solverdata = (; gamma = dtγ)) + solverdata = (; gamma = dtγ) + ) end vecu = _vec(linres.u) @@ -178,7 +200,7 @@ end @.. veck₁ = vecu * neginvdtγ integrator.stats.nsolve += 1 - @.. broadcast=false u=uprev + dto2 * k₁ + @.. broadcast = false u = uprev + dto2 * k₁ stage_limiter!(u, integrator, p, t + dto2) f(f₁, u, p, t + dto2) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) @@ -189,7 +211,7 @@ end mul!(_vec(tmp), mass_matrix, _vec(k₁)) end - @.. broadcast=false linsolve_tmp=f₁ - tmp + @.. broadcast = false linsolve_tmp = f₁ - tmp linres = dolinsolve(integrator, linres.cache; b = _vec(linsolve_tmp)) vecu = _vec(linres.u) @@ -204,12 +226,12 @@ end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if mass_matrix === I - @.. broadcast=false linsolve_tmp=fsallast - c₃₂ * (k₂ - f₁) - 2(k₁ - fsalfirst) + - dt * dT + @.. broadcast = false linsolve_tmp = fsallast - c₃₂ * (k₂ - f₁) - 2(k₁ - fsalfirst) + + dt * dT else - @.. broadcast=false du2=c₃₂ * k₂ + 2k₁ + @.. broadcast = false du2 = c₃₂ * k₂ + 2k₁ mul!(_vec(du1), mass_matrix, _vec(du2)) - @.. broadcast=false linsolve_tmp=fsallast - du1 + c₃₂ * f₁ + 2fsalfirst + dt * dT + @.. broadcast = false linsolve_tmp = fsallast - du1 + c₃₂ * f₁ + 2fsalfirst + dt * dT end linres = dolinsolve(integrator, linres.cache; b = _vec(linsolve_tmp)) @@ -219,14 +241,16 @@ end @.. veck3 = vecu * neginvdtγ integrator.stats.nsolve += 1 - @.. broadcast=false u=uprev + dto6 * (k₁ + 4k₂ + k₃) + @.. broadcast = false u = uprev + dto6 * (k₁ + 4k₂ + k₃) step_limiter!(u, integrator, p, t + dt) if integrator.opts.adaptive - @.. broadcast=false tmp=dto6 * (k₁ - 2 * k₂ + k₃) - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false tmp = dto6 * (k₁ - 2 * k₂ + k₃) + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if mass_matrix !== I @@ -238,8 +262,10 @@ end cache.linsolve = linres.cache end -@muladd function perform_step!(integrator, cache::Rosenbrock23ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Rosenbrock23ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; c₃₂, d, tf, uf) = cache @@ -285,12 +311,16 @@ end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if mass_matrix === I - linsolve_tmp = @.. (integrator.fsallast - c₃₂ * (k₂ - f₁) - - 2 * (k₁ - integrator.fsalfirst) + dt * dT) + linsolve_tmp = @.. ( + integrator.fsallast - c₃₂ * (k₂ - f₁) - + 2 * (k₁ - integrator.fsalfirst) + dt * dT + ) else linsolve_tmp = mass_matrix * (@.. c₃₂ * k₂ + 2 * k₁) - linsolve_tmp = @.. (integrator.fsallast - linsolve_tmp + - c₃₂ * f₁ + 2 * integrator.fsalfirst + dt * dT) + linsolve_tmp = @.. ( + integrator.fsallast - linsolve_tmp + + c₃₂ * f₁ + 2 * integrator.fsalfirst + dt * dT + ) end k₃ = _reshape(W \ _vec(linsolve_tmp), axes(uprev)) * neginvdtγ integrator.stats.nsolve += 1 @@ -300,14 +330,16 @@ end else utilde = f.mass_matrix * (@.. dto6 * (k₁ - 2 * k₂ + k₃)) end - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if mass_matrix !== I invatol = inv(integrator.opts.abstol) atmp = @. ifelse(integrator.differential_vars, false, integrator.fsallast) * - invatol + invatol integrator.EEst += integrator.opts.internalnorm(atmp, t) end end @@ -317,8 +349,10 @@ end return nothing end -@muladd function perform_step!(integrator, cache::Rosenbrock32ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Rosenbrock32ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; c₃₂, d, tf, uf) = cache @@ -364,12 +398,16 @@ end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if mass_matrix === I - linsolve_tmp = @.. (integrator.fsallast - c₃₂ * (k₂ - f₁) - - 2(k₁ - integrator.fsalfirst) + dt * dT) + linsolve_tmp = @.. ( + integrator.fsallast - c₃₂ * (k₂ - f₁) - + 2(k₁ - integrator.fsalfirst) + dt * dT + ) else linsolve_tmp = mass_matrix * (@.. c₃₂ * k₂ + 2 * k₁) - linsolve_tmp = @.. (integrator.fsallast - linsolve_tmp + - c₃₂ * f₁ + 2 * integrator.fsalfirst + dt * dT) + linsolve_tmp = @.. ( + integrator.fsallast - linsolve_tmp + + c₃₂ * f₁ + 2 * integrator.fsalfirst + dt * dT + ) end k₃ = _reshape(W \ _vec(linsolve_tmp), axes(uprev)) * neginvdtγ integrator.stats.nsolve += 1 @@ -377,8 +415,10 @@ end if integrator.opts.adaptive utilde = @.. dto6 * (k₁ - 2k₂ + k₃) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if mass_matrix !== I @@ -394,10 +434,14 @@ end return nothing end -function initialize!(integrator, - cache::Union{Rosenbrock33ConstantCache, +function initialize!( + integrator, + cache::Union{ + Rosenbrock33ConstantCache, Rosenbrock34ConstantCache, - Rosenbrock4ConstantCache}) + Rosenbrock4ConstantCache, + } + ) integrator.kshortsize = 2 integrator.k = typeof(integrator.k)(undef, integrator.kshortsize) integrator.fsalfirst = integrator.f(integrator.uprev, integrator.p, integrator.t) @@ -406,24 +450,30 @@ function initialize!(integrator, # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end -function initialize!(integrator, - cache::Union{Rosenbrock33Cache, +function initialize!( + integrator, + cache::Union{ + Rosenbrock33Cache, Rosenbrock34Cache, - Rosenbrock4Cache}) + Rosenbrock4Cache, + } + ) integrator.kshortsize = 2 (; fsalfirst, fsallast) = cache resize!(integrator.k, integrator.kshortsize) integrator.k[1] = fsalfirst integrator.k[2] = fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end -@muladd function perform_step!(integrator, cache::Rosenbrock33ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Rosenbrock33ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; tf, uf) = cache (; a21, a31, a32, C21, C31, C32, b1, b2, b3, btilde1, btilde2, btilde3, gamma, c2, c3, d1, d2, d3) = cache.tab @@ -483,8 +533,10 @@ end if integrator.opts.adaptive utilde = btilde1 * k1 + btilde2 * k2 + btilde3 * k3 - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -516,70 +568,75 @@ end calc_rosenbrock_differentiation!(integrator, cache, dtd1, dtgamma, repeat_step) - calculate_residuals!(weight, fill!(weight, one(eltype(u))), uprev, uprev, + calculate_residuals!( + weight, fill!(weight, one(eltype(u))), uprev, uprev, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) if repeat_step linres = dolinsolve( integrator, cache.linsolve; A = nothing, b = _vec(linsolve_tmp), du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, - solverdata = (; gamma = dtgamma)) + solverdata = (; gamma = dtgamma) + ) else - linres = dolinsolve(integrator, cache.linsolve; A = W, b = _vec(linsolve_tmp), + linres = dolinsolve( + integrator, cache.linsolve; A = W, b = _vec(linsolve_tmp), du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, - solverdata = (; gamma = dtgamma)) + solverdata = (; gamma = dtgamma) + ) end vecu = _vec(linres.u) veck1 = _vec(k1) - @.. broadcast=false veck1=-vecu + @.. broadcast = false veck1 = -vecu integrator.stats.nsolve += 1 - @.. broadcast=false u=uprev + a21 * k1 + @.. broadcast = false u = uprev + a21 * k1 stage_limiter!(u, integrator, p, t + c2 * dt) f(du, u, p, t + c2 * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if mass_matrix === I - @.. broadcast=false linsolve_tmp=du + dtd2 * dT + dtC21 * k1 + @.. broadcast = false linsolve_tmp = du + dtd2 * dT + dtC21 * k1 else - @.. broadcast=false du1=dtC21 * k1 + @.. broadcast = false du1 = dtC21 * k1 mul!(_vec(du2), mass_matrix, _vec(du1)) - @.. broadcast=false linsolve_tmp=du + dtd2 * dT + du2 + @.. broadcast = false linsolve_tmp = du + dtd2 * dT + du2 end linres = dolinsolve(integrator, linres.cache; b = _vec(linsolve_tmp)) vecu = _vec(linres.u) veck2 = _vec(k2) - @.. broadcast=false veck2=-vecu + @.. broadcast = false veck2 = -vecu integrator.stats.nsolve += 1 - @.. broadcast=false u=uprev + a31 * k1 + a32 * k2 + @.. broadcast = false u = uprev + a31 * k1 + a32 * k2 stage_limiter!(u, integrator, p, t + c3 * dt) f(du, u, p, t + c3 * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if mass_matrix === I - @.. broadcast=false linsolve_tmp=du + dtd3 * dT + dtC31 * k1 + dtC32 * k2 + @.. broadcast = false linsolve_tmp = du + dtd3 * dT + dtC31 * k1 + dtC32 * k2 else - @.. broadcast=false du1=dtC31 * k1 + dtC32 * k2 + @.. broadcast = false du1 = dtC31 * k1 + dtC32 * k2 mul!(_vec(du2), mass_matrix, _vec(du1)) - @.. broadcast=false linsolve_tmp=du + dtd3 * dT + du2 + @.. broadcast = false linsolve_tmp = du + dtd3 * dT + du2 end linres = dolinsolve(integrator, linres.cache; b = _vec(linsolve_tmp)) vecu = _vec(linres.u) veck3 = _vec(k3) - @.. broadcast=false veck3=-vecu + @.. broadcast = false veck3 = -vecu integrator.stats.nsolve += 1 - @.. broadcast=false u=uprev + b1 * k1 + b2 * k2 + b3 * k3 + @.. broadcast = false u = uprev + b1 * k1 + b2 * k2 + b3 * k3 step_limiter!(u, integrator, p, t + dt) @@ -587,9 +644,11 @@ end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if integrator.opts.adaptive - @.. broadcast=false utilde=btilde1 * k1 + btilde2 * k2 + btilde3 * k3 - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false utilde = btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end cache.linsolve = linres.cache @@ -597,8 +656,10 @@ end ################################################################################ -@muladd function perform_step!(integrator, cache::Rosenbrock34ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Rosenbrock34ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; tf, uf) = cache (; a21, a31, a32, a41, a42, a43, C21, C31, C32, C41, C42, C43, b1, b2, b3, b4, btilde1, btilde2, btilde3, btilde4, gamma, c2, c3, d1, d2, d3, d4) = cache.tab @@ -673,8 +734,10 @@ end if integrator.opts.adaptive utilde = btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4 - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -711,25 +774,30 @@ end calc_rosenbrock_differentiation!(integrator, cache, dtd1, dtgamma, repeat_step) - calculate_residuals!(weight, fill!(weight, one(eltype(u))), uprev, uprev, + calculate_residuals!( + weight, fill!(weight, one(eltype(u))), uprev, uprev, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) if repeat_step linres = dolinsolve( integrator, cache.linsolve; A = nothing, b = _vec(linsolve_tmp), du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, - solverdata = (; gamma = dtgamma)) + solverdata = (; gamma = dtgamma) + ) else - linres = dolinsolve(integrator, cache.linsolve; A = W, b = _vec(linsolve_tmp), + linres = dolinsolve( + integrator, cache.linsolve; A = W, b = _vec(linsolve_tmp), du = integrator.fsalfirst, u = u, p = p, t = t, weight = weight, - solverdata = (; gamma = dtgamma)) + solverdata = (; gamma = dtgamma) + ) end vecu = _vec(linres.u) veck1 = _vec(k1) - @.. broadcast=false veck1=-vecu + @.. broadcast = false veck1 = -vecu integrator.stats.nsolve += 1 #= @@ -741,55 +809,55 @@ end =# if mass_matrix === I - @.. broadcast=false linsolve_tmp=fsalfirst + dtd2 * dT + dtC21 * k1 + @.. broadcast = false linsolve_tmp = fsalfirst + dtd2 * dT + dtC21 * k1 else - @.. broadcast=false du1=dtC21 * k1 + @.. broadcast = false du1 = dtC21 * k1 mul!(_vec(du2), mass_matrix, _vec(du1)) - @.. broadcast=false linsolve_tmp=fsalfirst + dtd2 * dT + du2 + @.. broadcast = false linsolve_tmp = fsalfirst + dtd2 * dT + du2 end linres = dolinsolve(integrator, linres.cache; b = _vec(linsolve_tmp)) veck2 = _vec(k2) - @.. broadcast=false veck2=-vecu + @.. broadcast = false veck2 = -vecu integrator.stats.nsolve += 1 - @.. broadcast=false u=uprev + a31 * k1 + a32 * k2 + @.. broadcast = false u = uprev + a31 * k1 + a32 * k2 stage_limiter!(u, integrator, p, t + c3 * dt) f(du, u, p, t + c3 * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if mass_matrix === I - @.. broadcast=false linsolve_tmp=du + dtd3 * dT + dtC31 * k1 + dtC32 * k2 + @.. broadcast = false linsolve_tmp = du + dtd3 * dT + dtC31 * k1 + dtC32 * k2 else - @.. broadcast=false du1=dtC31 * k1 + dtC32 * k2 + @.. broadcast = false du1 = dtC31 * k1 + dtC32 * k2 mul!(_vec(du2), mass_matrix, _vec(du1)) - @.. broadcast=false linsolve_tmp=du + dtd3 * dT + du2 + @.. broadcast = false linsolve_tmp = du + dtd3 * dT + du2 end linres = dolinsolve(integrator, linres.cache; b = _vec(linsolve_tmp)) veck3 = _vec(k3) - @.. broadcast=false veck3=-vecu + @.. broadcast = false veck3 = -vecu integrator.stats.nsolve += 1 - @.. broadcast=false u=uprev + a41 * k1 + a42 * k2 + a43 * k3 + @.. broadcast = false u = uprev + a41 * k1 + a42 * k2 + a43 * k3 stage_limiter!(u, integrator, p, t + dt) f(du, u, p, t + dt) #-- c4 = 1 OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if mass_matrix === I - @.. broadcast=false linsolve_tmp=du + dtd4 * dT + dtC41 * k1 + dtC42 * k2 + - dtC43 * k3 + @.. broadcast = false linsolve_tmp = du + dtd4 * dT + dtC41 * k1 + dtC42 * k2 + + dtC43 * k3 else - @.. broadcast=false du1=dtC41 * k1 + dtC42 * k2 + dtC43 * k3 + @.. broadcast = false du1 = dtC41 * k1 + dtC42 * k2 + dtC43 * k3 mul!(_vec(du2), mass_matrix, _vec(du1)) - @.. broadcast=false linsolve_tmp=du + dtd4 * dT + du2 + @.. broadcast = false linsolve_tmp = du + dtd4 * dT + du2 end linres = dolinsolve(integrator, linres.cache; b = _vec(linsolve_tmp)) veck4 = _vec(k4) - @.. broadcast=false veck4=-vecu + @.. broadcast = false veck4 = -vecu integrator.stats.nsolve += 1 - @.. broadcast=false u=uprev + b1 * k1 + b2 * k2 + b3 * k3 + b4 * k4 + @.. broadcast = false u = uprev + b1 * k1 + b2 * k2 + b3 * k3 + b4 * k4 step_limiter!(u, integrator, p, t + dt) @@ -797,9 +865,11 @@ end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if integrator.opts.adaptive - @.. broadcast=false utilde=btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4 - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false utilde = btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4 + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end cache.linsolve = linres.cache @@ -842,12 +912,13 @@ function initialize!(integrator, cache::Union{Rodas23WConstantCache, Rodas3PCons # Avoid undefined entries if k is an array of arrays integrator.k[1] = zero(integrator.u) integrator.k[2] = zero(integrator.u) - integrator.k[3] = zero(integrator.u) + return integrator.k[3] = zero(integrator.u) end @muladd function perform_step!( integrator, cache::Union{Rodas23WConstantCache, Rodas3PConstantCache}, - repeat_step = false) + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; tf, uf) = cache (; a21, a41, a42, a43, C21, C31, C32, C41, C42, C43, C51, C52, C53, C54, gamma, c2, c3, d1, d2, d3) = cache.tab @@ -927,7 +998,7 @@ end linsolve_tmp = du + (dtC52 * k2 + dtC54 * k4 + dtC51 * k1 + dtC53 * k3) else linsolve_tmp = du + - mass_matrix * (dtC52 * k2 + dtC54 * k4 + dtC51 * k1 + dtC53 * k3) + mass_matrix * (dtC52 * k2 + dtC54 * k4 + dtC51 * k1 + dtC53 * k3) end k5 = _reshape(W \ -_vec(linsolve_tmp), axes(uprev)) @@ -944,15 +1015,20 @@ end if integrator.opts.adaptive if isa(linsolve_tmp, AbstractFloat) u_int, u_diff = calculate_interpoldiff( - uprev, du, u, integrator.k[1], integrator.k[2], integrator.k[3]) + uprev, du, u, integrator.k[1], integrator.k[2], integrator.k[3] + ) else u_int = linsolve_tmp u_diff = linsolve_tmp .+ 0 - calculate_interpoldiff!(u_int, u_diff, uprev, du, u, integrator.k[1], - integrator.k[2], integrator.k[3]) + calculate_interpoldiff!( + u_int, u_diff, uprev, du, u, integrator.k[1], + integrator.k[2], integrator.k[3] + ) end - atmp = calculate_residuals(u_diff, uprev, u_int, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + u_diff, uprev, u_int, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) EEst = max(EEst, integrator.opts.internalnorm(atmp, t)) #-- role of t unclear end end @@ -968,8 +1044,10 @@ end end if integrator.opts.adaptive - atmp = calculate_residuals(u - du, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + u - du, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = max(EEst, integrator.opts.internalnorm(atmp, t)) end @@ -983,11 +1061,12 @@ function initialize!(integrator, cache::Union{Rodas23WCache, Rodas3PCache}) resize!(integrator.k, integrator.kshortsize) integrator.k[1] = dense1 integrator.k[2] = dense2 - integrator.k[3] = dense3 + return integrator.k[3] = dense3 end @muladd function perform_step!( - integrator, cache::Union{Rodas23WCache, Rodas3PCache}, repeat_step = false) + integrator, cache::Union{Rodas23WCache, Rodas3PCache}, repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; du, du1, du2, dT, J, W, uf, tf, k1, k2, k3, k4, k5, linsolve_tmp, jac_config, atmp, weight, stage_limiter!, step_limiter!) = cache (; a21, a41, a42, a43, C21, C31, C32, C41, C42, C43, C51, C52, C53, C54, gamma, c2, c3, d1, d2, d3) = cache.tab @@ -1019,84 +1098,89 @@ end calc_rosenbrock_differentiation!(integrator, cache, dtd1, dtgamma, repeat_step) - calculate_residuals!(weight, fill!(weight, one(eltype(u))), uprev, uprev, + calculate_residuals!( + weight, fill!(weight, one(eltype(u))), uprev, uprev, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) if repeat_step linres = dolinsolve( integrator, cache.linsolve; A = nothing, b = _vec(linsolve_tmp), du = cache.fsalfirst, u = u, p = p, t = t, weight = weight, - solverdata = (; gamma = dtgamma)) + solverdata = (; gamma = dtgamma) + ) else - linres = dolinsolve(integrator, cache.linsolve; A = W, b = _vec(linsolve_tmp), + linres = dolinsolve( + integrator, cache.linsolve; A = W, b = _vec(linsolve_tmp), du = cache.fsalfirst, u = u, p = p, t = t, weight = weight, - solverdata = (; gamma = dtgamma)) + solverdata = (; gamma = dtgamma) + ) end - @.. broadcast=false $(_vec(k1))=-linres.u + @.. broadcast = false $(_vec(k1)) = -linres.u integrator.stats.nsolve += 1 - @.. broadcast=false u=uprev + a21 * k1 + @.. broadcast = false u = uprev + a21 * k1 stage_limiter!(u, integrator, p, t + c2 * dt) f(du, u, p, t + c2 * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if mass_matrix === I - @.. broadcast=false linsolve_tmp=du + dtd2 * dT + dtC21 * k1 + @.. broadcast = false linsolve_tmp = du + dtd2 * dT + dtC21 * k1 else - @.. broadcast=false du1=dtC21 * k1 + @.. broadcast = false du1 = dtC21 * k1 mul!(_vec(du2), mass_matrix, _vec(du1)) - @.. broadcast=false linsolve_tmp=du + dtd2 * dT + du2 + @.. broadcast = false linsolve_tmp = du + dtd2 * dT + du2 end linres = dolinsolve(integrator, linres.cache; b = _vec(linsolve_tmp)) - @.. broadcast=false $(_vec(k2))=-linres.u + @.. broadcast = false $(_vec(k2)) = -linres.u integrator.stats.nsolve += 1 if mass_matrix === I - @.. broadcast=false linsolve_tmp=cache.fsalfirst + dtd3 * dT + - (dtC31 * k1 + dtC32 * k2) + @.. broadcast = false linsolve_tmp = cache.fsalfirst + dtd3 * dT + + (dtC31 * k1 + dtC32 * k2) else - @.. broadcast=false du1=dtC31 * k1 + dtC32 * k2 + @.. broadcast = false du1 = dtC31 * k1 + dtC32 * k2 mul!(_vec(du2), mass_matrix, _vec(du1)) - @.. broadcast=false linsolve_tmp=cache.fsalfirst + dtd3 * dT + du2 + @.. broadcast = false linsolve_tmp = cache.fsalfirst + dtd3 * dT + du2 end linres = dolinsolve(integrator, linres.cache; b = _vec(linsolve_tmp)) - @.. broadcast=false $(_vec(k3))=-linres.u + @.. broadcast = false $(_vec(k3)) = -linres.u integrator.stats.nsolve += 1 - @.. broadcast=false u=uprev + a41 * k1 + a42 * k2 + a43 * k3 + @.. broadcast = false u = uprev + a41 * k1 + a42 * k2 + a43 * k3 stage_limiter!(u, integrator, p, t + c2 * dt) f(du, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if mass_matrix === I - @.. broadcast=false linsolve_tmp=du + - (dtC41 * k1 + dtC42 * k2 + dtC43 * k3) + @.. broadcast = false linsolve_tmp = du + + (dtC41 * k1 + dtC42 * k2 + dtC43 * k3) else - @.. broadcast=false du1=dtC41 * k1 + dtC42 * k2 + dtC43 * k3 + @.. broadcast = false du1 = dtC41 * k1 + dtC42 * k2 + dtC43 * k3 mul!(_vec(du2), mass_matrix, _vec(du1)) - @.. broadcast=false linsolve_tmp=du + du2 + @.. broadcast = false linsolve_tmp = du + du2 end linres = dolinsolve(integrator, linres.cache; b = _vec(linsolve_tmp)) - @.. broadcast=false $(_vec(k4))=-linres.u + @.. broadcast = false $(_vec(k4)) = -linres.u integrator.stats.nsolve += 1 if mass_matrix === I - @.. broadcast=false linsolve_tmp=du + - (dtC52 * k2 + dtC54 * k4 + dtC51 * k1 + dtC53 * k3) + @.. broadcast = false linsolve_tmp = du + + (dtC52 * k2 + dtC54 * k4 + dtC51 * k1 + dtC53 * k3) else - @.. broadcast=false du1=dtC52 * k2 + dtC54 * k4 + dtC51 * k1 + dtC53 * k3 + @.. broadcast = false du1 = dtC52 * k2 + dtC54 * k4 + dtC51 * k1 + dtC53 * k3 mul!(_vec(du2), mass_matrix, _vec(du1)) - @.. broadcast=false linsolve_tmp=du + du2 + @.. broadcast = false linsolve_tmp = du + du2 end linres = dolinsolve(integrator, linres.cache; b = _vec(linsolve_tmp)) - @.. broadcast=false $(_vec(k5))=-linres.u + @.. broadcast = false $(_vec(k5)) = -linres.u integrator.stats.nsolve += 1 du = u + k4 #-- p=2 solution @@ -1107,17 +1191,20 @@ end EEst = 0.0 if integrator.opts.calck (; h21, h22, h23, h24, h25, h31, h32, h33, h34, h35, h2_21, h2_22, h2_23, h2_24, h2_25) = cache.tab - @.. broadcast=false integrator.k[1]=h21 * k1 + h22 * k2 + h23 * k3 + h24 * k4 + - h25 * k5 - @.. broadcast=false integrator.k[2]=h31 * k1 + h32 * k2 + h33 * k3 + h34 * k4 + - h35 * k5 - @.. broadcast=false integrator.k[3]=h2_21 * k1 + h2_22 * k2 + h2_23 * k3 + - h2_24 * k4 + h2_25 * k5 + @.. broadcast = false integrator.k[1] = h21 * k1 + h22 * k2 + h23 * k3 + h24 * k4 + + h25 * k5 + @.. broadcast = false integrator.k[2] = h31 * k1 + h32 * k2 + h33 * k3 + h34 * k4 + + h35 * k5 + @.. broadcast = false integrator.k[3] = h2_21 * k1 + h2_22 * k2 + h2_23 * k3 + + h2_24 * k4 + h2_25 * k5 if integrator.opts.adaptive calculate_interpoldiff!( - du1, du2, uprev, du, u, integrator.k[1], integrator.k[2], integrator.k[3]) - calculate_residuals!(atmp, du2, uprev, du1, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + du1, du2, uprev, du, u, integrator.k[1], integrator.k[2], integrator.k[3] + ) + calculate_residuals!( + atmp, du2, uprev, du1, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) EEst = max(EEst, integrator.opts.internalnorm(atmp, t)) #-- role of t unclear end end @@ -1133,8 +1220,10 @@ end end if integrator.opts.adaptive - calculate_residuals!(atmp, u - du, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, u - du, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = max(EEst, integrator.opts.internalnorm(atmp, t)) end cache.linsolve = linres.cache @@ -1158,7 +1247,7 @@ function calculate_interpoldiff(uprev, up2, up3, c_koeff, d_koeff, c2_koeff) for tau in (tau1, tau2) if (tau > 0.0) && (tau < 1.0) y_tau = (1 - tau) * uprev + - tau * (up3 + (1 - tau) * (c_koeff + tau * d_koeff)) + tau * (up3 + (1 - tau) * (c_koeff + tau * d_koeff)) dy_tau = ((a3 * tau + a2) * tau + a1) * tau if abs(dy_tau) > abs(u_diff) u_diff = dy_tau @@ -1187,7 +1276,7 @@ function calculate_interpoldiff!(u_int, u_diff, uprev, up2, up3, c_koeff, d_koef for tau in (tau1, tau2) if (tau > 0.0) && (tau < 1.0) y_tau = (1 - tau) * uprev[i] + - tau * (up3[i] + (1 - tau) * (c_koeff[i] + tau * d_koeff[i])) + tau * (up3[i] + (1 - tau) * (c_koeff[i] + tau * d_koeff[i])) dy_tau = ((a3 * tau + a2) * tau + a1) * tau if abs(dy_tau) > abs(u_diff[i]) u_diff[i] = dy_tau @@ -1197,6 +1286,7 @@ function calculate_interpoldiff!(u_int, u_diff, uprev, up2, up3, c_koeff, d_koef end end end + return end #### Rodas4 type method @@ -1208,10 +1298,12 @@ function initialize!(integrator, cache::RosenbrockCombinedConstantCache) for i in 1:(integrator.kshortsize) integrator.k[i] = zero(integrator.u) end + return end @muladd function perform_step!( - integrator, cache::RosenbrockCombinedConstantCache, repeat_step = false) + integrator, cache::RosenbrockCombinedConstantCache, repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; tf, uf) = cache (; A, C, gamma, c, d, H) = cache.tab @@ -1269,26 +1361,28 @@ end integrator.stats.nsolve += 1 end if (integrator.alg isa Rodas6P) - du = ks[16] - u = uprev - for i in 1:15 - u = @.. u + A[16, i] * ks[i] - end - u = u .+ ks[16] + du = ks[16] + u = uprev + for i in 1:15 + u = @.. u + A[16, i] * ks[i] + end + u = u .+ ks[16] else - du = ks[num_stages] - u = u .+ ks[num_stages] + du = ks[num_stages] + u = u .+ ks[num_stages] end if integrator.opts.adaptive if (integrator.alg isa Rodas5Pe) du = 0.2606326497975715 * ks[1] - 0.005158627295444251 * ks[2] + - 1.3038988631109731 * ks[3] + 1.235000722062074 * ks[4] + + 1.3038988631109731 * ks[3] + 1.235000722062074 * ks[4] + -0.7931985603795049 * ks[5] - 1.005448461135913 * ks[6] - 0.18044626132120234 * ks[7] + 0.17051519239113755 * ks[8] end - atmp = calculate_residuals(du, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + du, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -1302,9 +1396,11 @@ end end end if (integrator.alg isa Rodas5Pr) && integrator.opts.adaptive && - (integrator.EEst < 1.0) - k2 = 0.5 * (uprev + u + - 0.5 * (integrator.k[1] + 0.5 * (integrator.k[2] + 0.5 * integrator.k[3]))) + (integrator.EEst < 1.0) + k2 = 0.5 * ( + uprev + u + + 0.5 * (integrator.k[1] + 0.5 * (integrator.k[2] + 0.5 * integrator.k[3])) + ) du1 = (0.25 * (integrator.k[2] + integrator.k[3]) - uprev + u) / dt du = f(k2, p, t + dt / 2) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) @@ -1328,6 +1424,7 @@ function initialize!(integrator, cache::RosenbrockCache) for i in 1:(integrator.kshortsize) integrator.k[i] = cache.dense[i] end + return end @muladd function perform_step!(integrator, cache::RosenbrockCache, repeat_step = false) @@ -1350,19 +1447,24 @@ end calc_rosenbrock_differentiation!(integrator, cache, dtd[1], dtgamma, repeat_step) - calculate_residuals!(weight, fill!(weight, one(eltype(u))), uprev, uprev, + calculate_residuals!( + weight, fill!(weight, one(eltype(u))), uprev, uprev, integrator.opts.abstol, integrator.opts.reltol, - integrator.opts.internalnorm, t) + integrator.opts.internalnorm, t + ) if repeat_step linres = dolinsolve( integrator, cache.linsolve; A = nothing, b = _vec(linsolve_tmp), du = cache.fsalfirst, u = u, p = p, t = t, weight = weight, - solverdata = (; gamma = dtgamma)) + solverdata = (; gamma = dtgamma) + ) else - linres = dolinsolve(integrator, cache.linsolve; A = W, b = _vec(linsolve_tmp), + linres = dolinsolve( + integrator, cache.linsolve; A = W, b = _vec(linsolve_tmp), du = cache.fsalfirst, u = u, p = p, t = t, weight = weight, - solverdata = (; gamma = dtgamma)) + solverdata = (; gamma = dtgamma) + ) end @.. $(_vec(ks[1])) = -linres.u @@ -1397,15 +1499,15 @@ end integrator.stats.nsolve += 1 end if (integrator.alg isa Rodas6P) - du .= ks[16] - u .= uprev - for i in 1:15 - @.. u += A[16, i] * ks[i] - end - u .+= ks[16] + du .= ks[16] + u .= uprev + for i in 1:15 + @.. u += A[16, i] * ks[i] + end + u .+= ks[16] else - du .= ks[end] - u .+= ks[end] + du .= ks[end] + u .+= ks[end] end step_limiter!(u, integrator, p, t + dt) @@ -1413,12 +1515,14 @@ end if integrator.opts.adaptive if (integrator.alg isa Rodas5Pe) @.. du = 0.2606326497975715 * ks[1] - 0.005158627295444251 * ks[2] + - 1.3038988631109731 * ks[3] + 1.235000722062074 * ks[4] + - -0.7931985603795049 * ks[5] - 1.005448461135913 * ks[6] - - 0.18044626132120234 * ks[7] + 0.17051519239113755 * ks[8] + 1.3038988631109731 * ks[3] + 1.235000722062074 * ks[4] + + -0.7931985603795049 * ks[5] - 1.005448461135913 * ks[6] - + 0.18044626132120234 * ks[7] + 0.17051519239113755 * ks[8] end - calculate_residuals!(atmp, du, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, du, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -1432,10 +1536,12 @@ end end end if (integrator.alg isa Rodas5Pr) && integrator.opts.adaptive && - (integrator.EEst < 1.0) - ks[2] = 0.5 * (uprev + u + - 0.5 * - (integrator.k[1] + 0.5 * (integrator.k[2] + 0.5 * integrator.k[3]))) + (integrator.EEst < 1.0) + ks[2] = 0.5 * ( + uprev + u + + 0.5 * + (integrator.k[1] + 0.5 * (integrator.k[2] + 0.5 * integrator.k[3])) + ) du1 = (0.25 * (integrator.k[2] + integrator.k[3]) - uprev + u) / dt f(du, ks[2], p, t + dt / 2) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) @@ -1446,7 +1552,7 @@ end @.. du2 -= du end EEst = norm(du2) / - norm(integrator.opts.abstol .+ integrator.opts.reltol .* ks[2]) + norm(integrator.opts.abstol .+ integrator.opts.reltol .* ks[2]) integrator.EEst = max(EEst, integrator.EEst) end end diff --git a/lib/OrdinaryDiffEqRosenbrock/src/rosenbrock_tableaus.jl b/lib/OrdinaryDiffEqRosenbrock/src/rosenbrock_tableaus.jl index bf0b14151f..ac1de65f93 100644 --- a/lib/OrdinaryDiffEqRosenbrock/src/rosenbrock_tableaus.jl +++ b/lib/OrdinaryDiffEqRosenbrock/src/rosenbrock_tableaus.jl @@ -6,7 +6,7 @@ end function Rosenbrock23Tableau(T) c₃₂ = convert(T, 6 + sqrt(2)) d = convert(T, 1 / (2 + sqrt(2))) - Rosenbrock23Tableau(c₃₂, d) + return Rosenbrock23Tableau(c₃₂, d) end struct Rosenbrock32Tableau{T} @@ -17,7 +17,7 @@ end function Rosenbrock32Tableau(T) c₃₂ = convert(T, 6 + sqrt(2)) d = convert(T, 1 / (2 + sqrt(2))) - Rosenbrock32Tableau(c₃₂, d) + return Rosenbrock32Tableau(c₃₂, d) end struct ROS3PTableau{T, T2} @@ -59,16 +59,17 @@ function ROS3PTableau(T, T2) # btilde2 = convert(T,1.000000000000000) # btilde3 = convert(T,0.4226497308103742) btilde1 = b1 - convert(T, 2.113248654051871) - btilde2 = b2 - convert(T, 1.000000000000000) + btilde2 = b2 - convert(T, 1.0) btilde3 = b3 - convert(T, 0.4226497308103742) c2 = convert(T, 1) c3 = convert(T, 1) d1 = convert(T, 0.7886751345948129) d2 = convert(T, -0.2113248654051871) d3 = convert(T, -1.077350269189626) - ROS3PTableau( + return ROS3PTableau( a21, a31, a32, C21, C31, C32, b1, b2, b3, btilde1, btilde2, btilde3, gamma, - c2, c3, d1, d2, d3) + c2, c3, d1, d2, d3 + ) end struct Rodas3Tableau{T, T2} @@ -130,8 +131,10 @@ function Rodas3Tableau(T, T2) d2 = convert(T, 3 // 2) d3 = convert(T, 0) d4 = convert(T, 0) - Rodas3Tableau(a21, a31, a32, a41, a42, a43, C21, C31, C32, C41, C42, C43, b1, b2, b3, - b4, btilde1, btilde2, btilde3, btilde4, gamma, c2, c3, d1, d2, d3, d4) + return Rodas3Tableau( + a21, a31, a32, a41, a42, a43, C21, C31, C32, C41, C42, C43, b1, b2, b3, + b4, btilde1, btilde2, btilde3, btilde4, gamma, c2, c3, d1, d2, d3, d4 + ) end struct Rodas3PTableau{T, T2} @@ -208,10 +211,12 @@ function Rodas3PTableau(T, T2) h2_23 = -convert(T, 1.63125) h2_24 = -convert(T, 1.7) h2_25 = -convert(T, 0.1) - Rodas3PTableau(a21, a41, a42, a43, + return Rodas3PTableau( + a21, a41, a42, a43, C21, C31, C32, C41, C42, C43, C51, C52, C53, C54, gamma, c2, c3, d1, d2, d3, - h21, h22, h23, h24, h25, h31, h32, h33, h34, h35, h2_21, h2_22, h2_23, h2_24, h2_25) + h21, h22, h23, h24, h25, h31, h32, h33, h34, h35, h2_21, h2_22, h2_23, h2_24, h2_25 + ) end @ROS2(:tableau) @@ -231,195 +236,243 @@ struct RodasTableau{T, T2} H::Matrix{T} end -const RODAS4A = [0 0 0 0 0 0 - 1.544 0 0 0 0 0 - 0.9466785280815826 0.2557011698983284 0 0 0 0 - 3.314825187068521 2.896124015972201 0.9986419139977817 0 0 0 - 1.221224509226641 6.019134481288629 12.53708332932087 -0.6878860361058950 0 0 - 1.221224509226641 6.019134481288629 12.53708332932087 -0.6878860361058950 1 0] -const RODAS4C = [0 0 0 0 0 - -5.6688 0 0 0 0 - -2.430093356833875 -0.2063599157091915 0 0 0 - -0.1073529058151375 -9.594562251023355 -20.47028614809616 0 0 - 7.496443313967647 -10.24680431464352 -33.99990352819905 11.70890893206160 0 - 8.083246795921522 -7.981132988064893 -31.52159432874371 16.31930543123136 -6.058818238834054] +const RODAS4A = [ + 0 0 0 0 0 0 + 1.544 0 0 0 0 0 + 0.9466785280815826 0.2557011698983284 0 0 0 0 + 3.314825187068521 2.896124015972201 0.9986419139977817 0 0 0 + 1.221224509226641 6.019134481288629 12.53708332932087 -0.687886036105895 0 0 + 1.221224509226641 6.019134481288629 12.53708332932087 -0.687886036105895 1 0 +] +const RODAS4C = [ + 0 0 0 0 0 + -5.6688 0 0 0 0 + -2.430093356833875 -0.2063599157091915 0 0 0 + -0.1073529058151375 -9.594562251023355 -20.47028614809616 0 0 + 7.496443313967647 -10.24680431464352 -33.99990352819905 11.7089089320616 0 + 8.083246795921522 -7.981132988064893 -31.52159432874371 16.31930543123136 -6.058818238834054 +] const RODAS4c = [0, 0.386, 0.21, 0.63, 1, 1] const RODAS4d = [0.25, -0.1043, 0.1035, -0.0362, 0, 0] -const RODAS4H = [10.12623508344586 -7.487995877610167 -34.80091861555747 -7.992771707568823 1.025137723295662 0 - -0.6762803392801253 6.087714651680015 16.43084320892478 24.76722511418386 -6.594389125716872 0] +const RODAS4H = [ + 10.12623508344586 -7.487995877610167 -34.80091861555747 -7.992771707568823 1.025137723295662 0 + -0.6762803392801253 6.087714651680015 16.43084320892478 24.76722511418386 -6.594389125716872 0 +] function Rodas4Tableau(T, T2) - gamma = .25 - RodasTableau{T, T2}(RODAS4A, RODAS4C, gamma, RODAS4c, RODAS4d, RODAS4H) + gamma = 0.25 + return RodasTableau{T, T2}(RODAS4A, RODAS4C, gamma, RODAS4c, RODAS4d, RODAS4H) end -const RODAS42A = [0 0 0 0 0 0 - 1.4028884 0 0 0 0 0 - 0.6581212688557198 -1.320936088384301 0 0 0 0 - 7.131197445744498 16.02964143958207 -5.561572550509766 0 0 0 - 22.73885722420363 67.38147284535289 -31.21877493038560 0.7285641833203814 0 0 - 22.73885722420363 67.38147284535289 -31.21877493038560 0.7285641833203814 1 0] -const RODAS42C = [0 0 0 0 0 - -5.1043536 0 0 0 0 - -2.899967805418783 4.040399359702244 0 0 0 - -32.64449927841361 -99.35311008728094 49.99119122405989 0 0 - -76.46023087151691 -278.5942120829058 153.9294840910643 10.97101866258358 0 - -76.29701586804983 -294.2795630511232 162.0029695867566 23.65166903095270 -7.652977706771382] +const RODAS42A = [ + 0 0 0 0 0 0 + 1.4028884 0 0 0 0 0 + 0.6581212688557198 -1.320936088384301 0 0 0 0 + 7.131197445744498 16.02964143958207 -5.561572550509766 0 0 0 + 22.73885722420363 67.38147284535289 -31.2187749303856 0.7285641833203814 0 0 + 22.73885722420363 67.38147284535289 -31.2187749303856 0.7285641833203814 1 0 +] +const RODAS42C = [ + 0 0 0 0 0 + -5.1043536 0 0 0 0 + -2.899967805418783 4.040399359702244 0 0 0 + -32.64449927841361 -99.35311008728094 49.99119122405989 0 0 + -76.46023087151691 -278.5942120829058 153.9294840910643 10.97101866258358 0 + -76.29701586804983 -294.2795630511232 162.0029695867566 23.6516690309527 -7.652977706771382 +] const RODAS42c = [0, 0.3507221, 0.2557041, 0.681779, 1, 1] const RODAS42d = [0.25, -0.0690221, -0.0009672, -0.087979, 0, 0] -const RODAS42H = [-38.71940424117216 -135.8025833007622 64.51068857505875 -4.192663174613162 -2.531932050335060 0 - -14.99268484949843 -76.30242396627033 58.65928432851416 16.61359034616402 -0.6758691794084156 0] +const RODAS42H = [ + -38.71940424117216 -135.8025833007622 64.51068857505875 -4.192663174613162 -2.53193205033506 0 + -14.99268484949843 -76.30242396627033 58.65928432851416 16.61359034616402 -0.6758691794084156 0 +] function Rodas42Tableau(T, T2) - gamma = .25 - RodasTableau{T, T2}(RODAS42A, RODAS42C, gamma, RODAS42c, RODAS42d, RODAS42H) + gamma = 0.25 + return RodasTableau{T, T2}(RODAS42A, RODAS42C, gamma, RODAS42c, RODAS42d, RODAS42H) end -const RODAS4PA = [0 0 0 0 0 0 - 3 0 0 0 0 0 - 1.831036793486759 0.4955183967433795 0 0 0 0 - 2.304376582692669 -0.05249275245743001 -1.176798761832782 0 0 0 - -7.170454962423024 -4.741636671481785 -16.31002631330971 -1.062004044111401 0 0 - -7.170454962423024 -4.741636671481785 -16.31002631330971 -1.062004044111401 1 0] -const RODAS4PC = [0 0 0 0 0 - -12 0 0 0 0 - -8.791795173947035 -2.207865586973518 0 0 0 - 10.81793056857153 6.780270611428266 19.53485944642410 0 0 - 34.19095006749676 15.49671153725963 54.74760875964130 14.16005392148534 0 - 34.62605830930532 15.30084976114473 56.99955578662667 18.40807009793095 -5.714285714285717] +const RODAS4PA = [ + 0 0 0 0 0 0 + 3 0 0 0 0 0 + 1.831036793486759 0.4955183967433795 0 0 0 0 + 2.304376582692669 -0.05249275245743001 -1.176798761832782 0 0 0 + -7.170454962423024 -4.741636671481785 -16.31002631330971 -1.062004044111401 0 0 + -7.170454962423024 -4.741636671481785 -16.31002631330971 -1.062004044111401 1 0 +] +const RODAS4PC = [ + 0 0 0 0 0 + -12 0 0 0 0 + -8.791795173947035 -2.207865586973518 0 0 0 + 10.81793056857153 6.780270611428266 19.5348594464241 0 0 + 34.19095006749676 15.49671153725963 54.7476087596413 14.16005392148534 0 + 34.62605830930532 15.30084976114473 56.99955578662667 18.40807009793095 -5.714285714285717 +] const RODAS4Pc = [0, 0.75, 0.21, 0.63, 1, 1] const RODAS4Pd = [0.25, -0.5, -0.023504, -0.0362, 0, 0] -const RODAS4PH = [25.09876703708589 11.62013104361867 28.49148307714626 -5.664021568594133 0 0 - 1.638054557396973 -0.7373619806678748 8.477918219238990 15.99253148779520 -1.882352941176471 0] +const RODAS4PH = [ + 25.09876703708589 11.62013104361867 28.49148307714626 -5.664021568594133 0 0 + 1.638054557396973 -0.7373619806678748 8.47791821923899 15.9925314877952 -1.882352941176471 0 +] function Rodas4PTableau(T, T2) - gamma = .25 - RodasTableau{T, T2}(RODAS4PA, RODAS4PC, gamma, RODAS4Pc, RODAS4Pd, RODAS4PH) + gamma = 0.25 + return RodasTableau{T, T2}(RODAS4PA, RODAS4PC, gamma, RODAS4Pc, RODAS4Pd, RODAS4PH) end -const RODAS4P2A = [0 0 0 0 0 0 - 3 0 0 0 0 0 - 0.906377755268814 -0.189707390391685 0 0 0 0 - 3.758617027739064 1.161741776019525 -0.849258085312803 0 0 0 - 7.089566927282776 4.573591406461604 -8.423496976860259 -0.959280113459775 0 0 - 7.089566927282776 4.573591406461604 -8.423496976860259 -0.959280113459775 1 0] -const RODAS4P2C = [0 0 0 0 0 - -12 0 0 0 0 - -6.354581592719008 0.338972550544623 0 0 0 - -8.575016317114033 -7.606483992117508 12.224997650124820 0 0 - -5.888975457523102 -8.157396617841821 24.805546872612922 12.790401512796979 0 - -4.408651676063871 -6.692003137674639 24.625568527593117 16.627521966636085 -5.714285714285718] +const RODAS4P2A = [ + 0 0 0 0 0 0 + 3 0 0 0 0 0 + 0.906377755268814 -0.189707390391685 0 0 0 0 + 3.758617027739064 1.161741776019525 -0.849258085312803 0 0 0 + 7.089566927282776 4.573591406461604 -8.423496976860259 -0.959280113459775 0 0 + 7.089566927282776 4.573591406461604 -8.423496976860259 -0.959280113459775 1 0 +] +const RODAS4P2C = [ + 0 0 0 0 0 + -12 0 0 0 0 + -6.354581592719008 0.338972550544623 0 0 0 + -8.575016317114033 -7.606483992117508 12.22499765012482 0 0 + -5.888975457523102 -8.157396617841821 24.805546872612922 12.790401512796979 0 + -4.408651676063871 -6.692003137674639 24.625568527593117 16.627521966636085 -5.714285714285718 +] const RODAS4P2c = [0, 0.75, 0.321448134013046, 0.519745732277726, 1, 1] const RODAS4P2d = [0.25, -0.5, -0.189532918363016, 0.085612108792769, 0, 0] -const RODAS4P2H = [-5.323528268423303 -10.042123754867493 17.175254928256965 -5.079931171878093 -0.016185991706112 0 - 6.984505741529879 6.914061169603662 -0.849178943070653 18.104410789349338 -3.516963011559032 0] +const RODAS4P2H = [ + -5.323528268423303 -10.042123754867493 17.175254928256965 -5.079931171878093 -0.016185991706112 0 + 6.984505741529879 6.914061169603662 -0.849178943070653 18.104410789349338 -3.516963011559032 0 +] function Rodas4P2Tableau(T, T2) - gamma = .25 - RodasTableau{T, T2}(RODAS4P2A, RODAS4P2C, gamma, RODAS4P2c, RODAS4P2d, RODAS4P2H) + gamma = 0.25 + return RodasTableau{T, T2}(RODAS4P2A, RODAS4P2C, gamma, RODAS4P2c, RODAS4P2d, RODAS4P2H) end -const RODAS5A = [0 0 0 0 0 0 0 0 - 2.0 0 0 0 0 0 0 0 - 3.040894194418781 1.041747909077569 0 0 0 0 0 0 - 2.576417536461461 1.622083060776640 -0.9089668560264532 0 0 0 0 0 - 2.760842080225597 1.446624659844071 -0.3036980084553738 0.2877498600325443 0 0 0 0 - -14.09640773051259 6.925207756232704 -41.47510893210728 2.343771018586405 24.13215229196062 0 0 0 - -14.09640773051259 6.925207756232704 -41.47510893210728 2.343771018586405 24.13215229196062 1 0 0 - -14.09640773051259 6.925207756232704 -41.47510893210728 2.343771018586405 24.13215229196062 1 1 0] -const RODAS5C = [0 0 0 0 0 0 0 - -10.31323885133993 0 0 0 0 0 0 - -21.04823117650003 -7.234992135176716 0 0 0 0 0 - 32.22751541853323 -4.943732386540191 19.44922031041879 0 0 0 0 - -20.69865579590063 -8.816374604402768 1.260436877740897 -0.7495647613787146 0 0 0 - -46.22004352711257 -17.49534862857472 -289.6389582892057 93.60855400400906 318.3822534212147 0 0 - 34.20013733472935 -14.15535402717690 57.82335640988400 25.83362985412365 1.408950972071624 -6.551835421242162 0 - 42.57076742291101 -13.80770672017997 93.98938432427124 18.77919633714503 -31.58359187223370 -6.685968952921985 -5.810979938412932] -const RODAS5c = [0, 0.38, 0.3878509998321533, 0.4839718937873840, 0.4570477008819580, 1, 1, 1] -const RODAS5d = [0.19, -0.1823079225333714636, -0.319231832186874912, - 0.3449828624725343, -0.377417564392089818, 0, 0, 0] +const RODAS5A = [ + 0 0 0 0 0 0 0 0 + 2.0 0 0 0 0 0 0 0 + 3.040894194418781 1.041747909077569 0 0 0 0 0 0 + 2.576417536461461 1.62208306077664 -0.9089668560264532 0 0 0 0 0 + 2.760842080225597 1.446624659844071 -0.3036980084553738 0.2877498600325443 0 0 0 0 + -14.09640773051259 6.925207756232704 -41.47510893210728 2.343771018586405 24.13215229196062 0 0 0 + -14.09640773051259 6.925207756232704 -41.47510893210728 2.343771018586405 24.13215229196062 1 0 0 + -14.09640773051259 6.925207756232704 -41.47510893210728 2.343771018586405 24.13215229196062 1 1 0 +] +const RODAS5C = [ + 0 0 0 0 0 0 0 + -10.31323885133993 0 0 0 0 0 0 + -21.04823117650003 -7.234992135176716 0 0 0 0 0 + 32.22751541853323 -4.943732386540191 19.44922031041879 0 0 0 0 + -20.69865579590063 -8.816374604402768 1.260436877740897 -0.7495647613787146 0 0 0 + -46.22004352711257 -17.49534862857472 -289.6389582892057 93.60855400400906 318.3822534212147 0 0 + 34.20013733472935 -14.1553540271769 57.823356409884 25.83362985412365 1.408950972071624 -6.551835421242162 0 + 42.57076742291101 -13.80770672017997 93.98938432427124 18.77919633714503 -31.5835918722337 -6.685968952921985 -5.810979938412932 +] +const RODAS5c = [0, 0.38, 0.3878509998321533, 0.483971893787384, 0.457047700881958, 1, 1, 1] +const RODAS5d = [ + 0.19, -0.1823079225333714636, -0.319231832186874912, + 0.3449828624725343, -0.377417564392089818, 0, 0, 0, +] -const RODAS5H = [27.354592673333357 -6.925207756232857 26.40037733258859 0.5635230501052979 -4.699151156849391 -1.6008677469422725 -1.5306074446748028 -1.3929872940716344 - 44.19024239501722 1.3677947663381929e-13 202.93261852171622 -35.5669339789154 -181.91095152160645 3.4116351403665033 2.5793540257308067 2.2435122582734066 - -44.0988150021747 -5.755396159656812e-13 -181.26175034586677 56.99302194811676 183.21182741427398 -7.480257918273637 -5.792426076169686 -5.32503859794143] +const RODAS5H = [ + 27.354592673333357 -6.925207756232857 26.40037733258859 0.5635230501052979 -4.699151156849391 -1.6008677469422725 -1.5306074446748028 -1.3929872940716344 + 44.19024239501722 1.3677947663381929e-13 202.93261852171622 -35.5669339789154 -181.91095152160645 3.4116351403665033 2.5793540257308067 2.2435122582734066 + -44.0988150021747 -5.755396159656812e-13 -181.26175034586677 56.99302194811676 183.21182741427398 -7.480257918273637 -5.792426076169686 -5.32503859794143 +] function Rodas5Tableau(T, T2) gamma = 0.19 - RodasTableau{T, T2}(RODAS5A, RODAS5C, gamma, RODAS5c, RODAS5d, RODAS5H) + return RodasTableau{T, T2}(RODAS5A, RODAS5C, gamma, RODAS5c, RODAS5d, RODAS5H) end -const RODAS5PA = [0 0 0 0 0 0 0 0 - 3.0 0 0 0 0 0 0 0 - 2.849394379747939 0.45842242204463923 0 0 0 0 0 0 - -6.954028509809101 2.489845061869568 -10.358996098473584 0 0 0 0 0 - 2.8029986275628964 0.5072464736228206 -0.3988312541770524 -0.04721187230404641 0 0 0 0 - -7.502846399306121 2.561846144803919 -11.627539656261098 -0.18268767659942256 0.030198172008377946 0 0 0 - -7.502846399306121 2.561846144803919 -11.627539656261098 -0.18268767659942256 0.030198172008377946 1 0 0 - -7.502846399306121 2.561846144803919 -11.627539656261098 -0.18268767659942256 0.030198172008377946 1 1 0] -const RODAS5PC = [0 0 0 0 0 0 0 - -14.155112264123755 0 0 0 0 0 0 - -17.97296035885952 -2.859693295451294 0 0 0 0 0 - 147.12150275711716 -1.41221402718213 71.68940251302358 0 0 0 0 - 165.43517024871676 -0.4592823456491126 42.90938336958603 -5.961986721573306 0 0 0 - 24.854864614690072 -3.0009227002832186 47.4931110020768 5.5814197821558125 -0.6610691825249471 0 0 - 30.91273214028599 -3.1208243349937974 77.79954646070892 34.28646028294783 -19.097331116725623 -28.087943162872662 0 - 37.80277123390563 -3.2571969029072276 112.26918849496327 66.9347231244047 -40.06618937091002 -54.66780262877968 -9.48861652309627] -const RODAS5Pc = [0, 0.6358126895828704, 0.4095798393397535, - 0.9769306725060716, 0.4288403609558664, 1, 1, 1] -const RODAS5Pd = [0.21193756319429014, -0.42387512638858027, -0.3384627126235924, - 1.8046452872882734, 2.325825639765069, 0, 0, 0] -const RODAS5PH = [25.948786856663858 -2.5579724845846235 10.433815404888879 -2.3679251022685204 0.524948541321073 1.1241088310450404 0.4272876194431874 -0.17202221070155493 - -9.91568850695171 -0.9689944594115154 3.0438037242978453 -24.495224566215796 20.176138334709044 15.98066361424651 -6.789040303419874 -6.710236069923372 - 11.419903575922262 2.8879645146136994 72.92137995996029 80.12511834622643 -52.072871366152654 -59.78993625266729 -0.15582684282751913 4.883087185713722] +const RODAS5PA = [ + 0 0 0 0 0 0 0 0 + 3.0 0 0 0 0 0 0 0 + 2.849394379747939 0.45842242204463923 0 0 0 0 0 0 + -6.954028509809101 2.489845061869568 -10.358996098473584 0 0 0 0 0 + 2.8029986275628964 0.5072464736228206 -0.3988312541770524 -0.04721187230404641 0 0 0 0 + -7.502846399306121 2.561846144803919 -11.627539656261098 -0.18268767659942256 0.030198172008377946 0 0 0 + -7.502846399306121 2.561846144803919 -11.627539656261098 -0.18268767659942256 0.030198172008377946 1 0 0 + -7.502846399306121 2.561846144803919 -11.627539656261098 -0.18268767659942256 0.030198172008377946 1 1 0 +] +const RODAS5PC = [ + 0 0 0 0 0 0 0 + -14.155112264123755 0 0 0 0 0 0 + -17.97296035885952 -2.859693295451294 0 0 0 0 0 + 147.12150275711716 -1.41221402718213 71.68940251302358 0 0 0 0 + 165.43517024871676 -0.4592823456491126 42.90938336958603 -5.961986721573306 0 0 0 + 24.854864614690072 -3.0009227002832186 47.4931110020768 5.5814197821558125 -0.6610691825249471 0 0 + 30.91273214028599 -3.1208243349937974 77.79954646070892 34.28646028294783 -19.097331116725623 -28.087943162872662 0 + 37.80277123390563 -3.2571969029072276 112.26918849496327 66.9347231244047 -40.06618937091002 -54.66780262877968 -9.48861652309627 +] +const RODAS5Pc = [ + 0, 0.6358126895828704, 0.4095798393397535, + 0.9769306725060716, 0.4288403609558664, 1, 1, 1, +] +const RODAS5Pd = [ + 0.21193756319429014, -0.42387512638858027, -0.3384627126235924, + 1.8046452872882734, 2.325825639765069, 0, 0, 0, +] +const RODAS5PH = [ + 25.948786856663858 -2.5579724845846235 10.433815404888879 -2.3679251022685204 0.524948541321073 1.1241088310450404 0.4272876194431874 -0.17202221070155493 + -9.91568850695171 -0.9689944594115154 3.0438037242978453 -24.495224566215796 20.176138334709044 15.98066361424651 -6.789040303419874 -6.710236069923372 + 11.419903575922262 2.8879645146136994 72.92137995996029 80.12511834622643 -52.072871366152654 -59.78993625266729 -0.15582684282751913 4.883087185713722 +] function Rodas5PTableau(T, T2) gamma = 0.21193756319429014 - RodasTableau{T, T2}(RODAS5PA, RODAS5PC, gamma, RODAS5Pc, RODAS5Pd, RODAS5PH) + return RodasTableau{T, T2}(RODAS5PA, RODAS5PC, gamma, RODAS5Pc, RODAS5Pd, RODAS5PH) end -const RODAS6PA = [0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 1.7111784962693573 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 3.338661438538325 1.7785154948506772 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 2.936071270275081 0.9182685464146361 0.3700626437020361 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 4.659498341685848 1.750740798902701 0.5870646872926452 0.8880273208834594 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 4.0197306615530755 2.839611966871549 -0.5985886977898102 0.08804800108767567 1.5622259206803966 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 1.988416726724047 -0.379547946940864 0.9004347186464728 1.4277449221484224 -0.7433508015345144 -0.042432590368607255 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 1.8376133238441654 1.9114959548124457 -0.6715227349230231 0.2358079620635186 3.6095202089874117 0.8151701113738031 0.9206065341545108 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - -0.766306772356088 3.209956697664864 -3.3123779344961592 -3.0203200762095332 4.800864725315542 1.1604579105760842 0.4424812765132964 0.3706918590956091 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 6.232416226700401 2.6089061288608786 -0.6004565639275875 -3.3845987889094653 0.42397260663019737 0.35421155529651493 0.30716464971632756 1.5008969261275715 0.5102657561692372 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 0.023392109748070492 1.4081998520657641 -0.7199787823918794 0.7361286083371824 2.4632772861278043 0.46923886035475726 0.1205787235019629 -0.8578747086506138 -0.2588726092696778 -0.4397748045492015 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 2.953951852943472 -0.5094757863221286 0.3109577019600045 -3.5298051247141733 -3.545755924579993 -0.33681829638738314 -0.5663219967973026 1.1332773651373889 0.15030559921640937 0.25755454716019555 0.29836356640198125 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 3.613614004197333 0.6635854700997046 0.021719370087612728 -1.4950066071478674 0.7257768429136315 -0.05542296424699332 0.6617050893162496 1.5916006835996634 0.004468857383033254 0.3492741589610665 -0.20270398239783438 0.6407744206145284 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 0.6650675322630164 3.8649437891996143 -3.5568168140908862 0.30445082364848014 6.687033712252074 1.7577448564663951 0.7252352806302017 0.8340620415656512 0.288756122559755 -0.014344518613253377 -0.9202387269679146 0.1235675186947092 0.5210532009614854 0.0 0.0 0.0 0.0 0.0 0.0 - 0.6650675322630163 3.864943789199614 -3.5568168140908876 0.30445082364847914 6.687033712252074 1.7577448564663951 0.7252352806302018 0.834062041565651 0.2887561225597551 -0.014344518613253487 -0.9202387269679145 0.12356751869470915 0.5210532009614851 1.0 0.0 0.0 0.0 0.0 0.0 - 0.6650675322630177 3.864943789199614 -3.5568168140908876 0.30445082364847964 6.687033712252074 1.7577448564663947 0.7252352806302018 0.8340620415656512 0.2887561225597553 -0.014344518613253388 -0.9202387269679146 0.12356751869470915 0.5210532009614847 0.9999999999999998 1.0 0.0 0.0 0.0 0.0 - 19.50552823691581 19.347153108620457 8.914549824296701 19.841538938728135 -30.357562810836335 -5.8051482228142195 -20.70248562796752 -21.376641384544037 -8.3987892732033 -7.736419267379574 2.0685219772918724 -8.760228330317224 5.418493374208782 1.6147496952752922 -2.4936078709750045 -2.2780749437287913 0.0 0.0 0.0 - 56.666079713903386 5.165818087889462 22.35860178936739 10.763846891315566 -12.19955923582867 -0.6557677952689249 6.699011373303813 8.198746354754231 1.677616608414471 3.1277285768268968 1.4179582645760416 -2.2744851263878836 -1.7540829181840385 -2.0011264405011304 -2.473136836317977 -1.8837562152980634 0.10307912091592847 0.0 0.0 - 0.4516803503254423 -1.1534041395134922 -4.845280220499032 -23.586737710513358 1.6878417137075876 0.7868554635343545 3.0270371561482805 6.0990245036017745 2.600755391135945 1.3246029905944345 2.0716827798306645 1.0885240892776982 -2.406764303616696 -1.0934035335348031 -0.08817028752603433 0.1628623060793163 -0.0494871328758008 -0.053891050773493175 0.0] -const RODAS6PC = [0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - -6.581455754882143 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - -17.99898897860265 -8.573983492685619 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - -9.381383431453385 -3.147640353879416 -1.3459246069197102 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - -2.6265331637613007 -4.114341661049238 2.3552716210903446 0.7916860595752533 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 13.234071865054425 -6.5531726714288245 10.73126008968739 7.881893740344428 -12.771533510641573 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 2.830906994202388 0.2604988641272497 1.2537810312593667 -3.3671244579321455 -10.786563365589606 -1.9308385166591397 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - -11.060311196714387 -1.3456656966931244 -0.7657970115506183 6.107723730659436 2.2037867523584938 -0.07238767937020778 -0.8050462039096485 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - -18.12844382677043 -8.753725825758918 2.21059342699439 11.608007179779365 -0.05812583279366939 -0.5568300956262869 0.22469855334210373 -3.2370311176417705 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - -27.976343920035056 -8.591555353546772 0.7281452536154736 17.638493457476986 -5.306189757628467 -3.0476569146401444 -5.904770682441327 -11.929084037829442 -5.050568446376497 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 16.354749252471326 1.4669223994142209 5.928484441955681 10.74513480723443 10.673355125609953 3.688805562318594 9.180717730517506 10.247712646451996 1.465303310058304 2.6508985881732774 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 6.914935441832399 5.38984958631352 5.862037438875566 5.348681436005972 -7.013382408252529 -1.0246660674824237 -2.9837100715597376 -5.836566084094612 -1.6109549842142277 -1.1760399923017764 1.9280128334739643 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 4.198711896534994 0.6181084056782703 0.8167077246607498 -11.236495255410707 -4.824409089261172 0.7728367826492113 1.3033341851336357 3.1220057171705977 1.917167519177393 0.740911936448596 2.3884839541537675 -1.0646261824518854 0.0 0.0 0.0 0.0 0.0 0.0 0.0 - 8.439457273665866 -12.395217711948733 8.717809686910918 -22.620864451522902 -20.113605406532766 -4.689776805197894 1.6982447341017708 4.543406791431926 1.613366829028557 1.9707273458768597 5.732578765805261 1.7624664316708778 -5.245856774591262 0.0 0.0 0.0 0.0 0.0 0.0 - 1.71450490512272 -13.840042084553074 6.437347401872298 -39.22048912909508 -25.603335547270504 -8.064795628637777 -0.0416146802576695 1.2346482358729156 2.7009872115209252 0.896525973043981 11.303609670096813 1.7547024586563815 -10.02276713006834 -6.93945857648056 0.0 0.0 0.0 0.0 0.0 - 19.61213176916848 -14.311603723508286 12.96694128305561 -28.107332490598257 -27.192311861144052 -4.26577843330566 4.2210733410202135 10.487402162301366 0.8300940888935481 2.8025411207314455 8.878715452726594 1.4612348690788786 -9.853595041510669 -7.6808377648250294 -6.870056791600298 0.0 0.0 0.0 0.0 - -371.4374434114548 -183.45541467767708 -245.2624549214238 -955.0201586246473 19.423673137681643 -0.9607917923114558 84.24290713671253 150.79467360315542 63.95986343894305 44.75849836276605 140.71019894715903 48.45923399488863 -146.47504553991118 -81.54609927566207 -25.07839993898753 3.829875020371404 0.0 0.0 0.0 - -164.17333724090065 -123.20834760012879 41.95443520088893 -239.77049586199965 -114.21790985713952 -12.341946126859007 15.750890701780254 39.790586318490696 -15.10728752295998 -12.824535901748304 16.73312629333741 -11.045750202895642 -14.639022723428816 -4.819493713790297 0.12987727446051117 0.04274137296376776 1.204312390836273 0.0 0.0 - 461.9368267656361 52.53840694165619 144.8183760448168 455.9093893534564 35.81740627464267 40.776479432911195 17.76376684531324 -7.606209560029927 -15.381956921574087 3.9317973949968428 -41.37771137941743 -44.920577584346 53.37495929469229 10.211466474320808 -15.84128439059478 -19.507483543094224 1.884309895179932 5.745356704710484 0.0] +const RODAS6PA = [ + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.7111784962693573 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 3.338661438538325 1.7785154948506772 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 2.936071270275081 0.9182685464146361 0.3700626437020361 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 4.659498341685848 1.750740798902701 0.5870646872926452 0.8880273208834594 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 4.0197306615530755 2.839611966871549 -0.5985886977898102 0.08804800108767567 1.5622259206803966 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.988416726724047 -0.379547946940864 0.9004347186464728 1.4277449221484224 -0.7433508015345144 -0.042432590368607255 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 1.8376133238441654 1.9114959548124457 -0.6715227349230231 0.2358079620635186 3.6095202089874117 0.8151701113738031 0.9206065341545108 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -0.766306772356088 3.209956697664864 -3.3123779344961592 -3.0203200762095332 4.800864725315542 1.1604579105760842 0.4424812765132964 0.3706918590956091 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 6.232416226700401 2.6089061288608786 -0.6004565639275875 -3.3845987889094653 0.42397260663019737 0.35421155529651493 0.30716464971632756 1.5008969261275715 0.5102657561692372 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.023392109748070492 1.4081998520657641 -0.7199787823918794 0.7361286083371824 2.4632772861278043 0.46923886035475726 0.1205787235019629 -0.8578747086506138 -0.2588726092696778 -0.4397748045492015 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 2.953951852943472 -0.5094757863221286 0.3109577019600045 -3.5298051247141733 -3.545755924579993 -0.33681829638738314 -0.5663219967973026 1.1332773651373889 0.15030559921640937 0.25755454716019555 0.29836356640198125 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 3.613614004197333 0.6635854700997046 0.021719370087612728 -1.4950066071478674 0.7257768429136315 -0.05542296424699332 0.6617050893162496 1.5916006835996634 0.004468857383033254 0.3492741589610665 -0.20270398239783438 0.6407744206145284 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 0.6650675322630164 3.8649437891996143 -3.5568168140908862 0.30445082364848014 6.687033712252074 1.7577448564663951 0.7252352806302017 0.8340620415656512 0.288756122559755 -0.014344518613253377 -0.9202387269679146 0.1235675186947092 0.5210532009614854 0.0 0.0 0.0 0.0 0.0 0.0 + 0.6650675322630163 3.864943789199614 -3.5568168140908876 0.30445082364847914 6.687033712252074 1.7577448564663951 0.7252352806302018 0.834062041565651 0.2887561225597551 -0.014344518613253487 -0.9202387269679145 0.12356751869470915 0.5210532009614851 1.0 0.0 0.0 0.0 0.0 0.0 + 0.6650675322630177 3.864943789199614 -3.5568168140908876 0.30445082364847964 6.687033712252074 1.7577448564663947 0.7252352806302018 0.8340620415656512 0.2887561225597553 -0.014344518613253388 -0.9202387269679146 0.12356751869470915 0.5210532009614847 0.9999999999999998 1.0 0.0 0.0 0.0 0.0 + 19.50552823691581 19.347153108620457 8.914549824296701 19.841538938728135 -30.357562810836335 -5.8051482228142195 -20.70248562796752 -21.376641384544037 -8.3987892732033 -7.736419267379574 2.0685219772918724 -8.760228330317224 5.418493374208782 1.6147496952752922 -2.4936078709750045 -2.2780749437287913 0.0 0.0 0.0 + 56.666079713903386 5.165818087889462 22.35860178936739 10.763846891315566 -12.19955923582867 -0.6557677952689249 6.699011373303813 8.198746354754231 1.677616608414471 3.1277285768268968 1.4179582645760416 -2.2744851263878836 -1.7540829181840385 -2.0011264405011304 -2.473136836317977 -1.8837562152980634 0.10307912091592847 0.0 0.0 + 0.4516803503254423 -1.1534041395134922 -4.845280220499032 -23.586737710513358 1.6878417137075876 0.7868554635343545 3.0270371561482805 6.0990245036017745 2.600755391135945 1.3246029905944345 2.0716827798306645 1.0885240892776982 -2.406764303616696 -1.0934035335348031 -0.08817028752603433 0.1628623060793163 -0.0494871328758008 -0.053891050773493175 0.0 +] +const RODAS6PC = [ + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -6.581455754882143 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -17.99898897860265 -8.573983492685619 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -9.381383431453385 -3.147640353879416 -1.3459246069197102 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -2.6265331637613007 -4.114341661049238 2.3552716210903446 0.7916860595752533 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 13.234071865054425 -6.5531726714288245 10.73126008968739 7.881893740344428 -12.771533510641573 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 2.830906994202388 0.2604988641272497 1.2537810312593667 -3.3671244579321455 -10.786563365589606 -1.9308385166591397 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -11.060311196714387 -1.3456656966931244 -0.7657970115506183 6.107723730659436 2.2037867523584938 -0.07238767937020778 -0.8050462039096485 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -18.12844382677043 -8.753725825758918 2.21059342699439 11.608007179779365 -0.05812583279366939 -0.5568300956262869 0.22469855334210373 -3.2370311176417705 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + -27.976343920035056 -8.591555353546772 0.7281452536154736 17.638493457476986 -5.306189757628467 -3.0476569146401444 -5.904770682441327 -11.929084037829442 -5.050568446376497 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 16.354749252471326 1.4669223994142209 5.928484441955681 10.74513480723443 10.673355125609953 3.688805562318594 9.180717730517506 10.247712646451996 1.465303310058304 2.6508985881732774 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 6.914935441832399 5.38984958631352 5.862037438875566 5.348681436005972 -7.013382408252529 -1.0246660674824237 -2.9837100715597376 -5.836566084094612 -1.6109549842142277 -1.1760399923017764 1.9280128334739643 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 4.198711896534994 0.6181084056782703 0.8167077246607498 -11.236495255410707 -4.824409089261172 0.7728367826492113 1.3033341851336357 3.1220057171705977 1.917167519177393 0.740911936448596 2.3884839541537675 -1.0646261824518854 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + 8.439457273665866 -12.395217711948733 8.717809686910918 -22.620864451522902 -20.113605406532766 -4.689776805197894 1.6982447341017708 4.543406791431926 1.613366829028557 1.9707273458768597 5.732578765805261 1.7624664316708778 -5.245856774591262 0.0 0.0 0.0 0.0 0.0 0.0 + 1.71450490512272 -13.840042084553074 6.437347401872298 -39.22048912909508 -25.603335547270504 -8.064795628637777 -0.0416146802576695 1.2346482358729156 2.7009872115209252 0.896525973043981 11.303609670096813 1.7547024586563815 -10.02276713006834 -6.93945857648056 0.0 0.0 0.0 0.0 0.0 + 19.61213176916848 -14.311603723508286 12.96694128305561 -28.107332490598257 -27.192311861144052 -4.26577843330566 4.2210733410202135 10.487402162301366 0.8300940888935481 2.8025411207314455 8.878715452726594 1.4612348690788786 -9.853595041510669 -7.6808377648250294 -6.870056791600298 0.0 0.0 0.0 0.0 + -371.4374434114548 -183.45541467767708 -245.2624549214238 -955.0201586246473 19.423673137681643 -0.9607917923114558 84.24290713671253 150.79467360315542 63.95986343894305 44.75849836276605 140.71019894715903 48.45923399488863 -146.47504553991118 -81.54609927566207 -25.07839993898753 3.829875020371404 0.0 0.0 0.0 + -164.17333724090065 -123.20834760012879 41.95443520088893 -239.77049586199965 -114.21790985713952 -12.341946126859007 15.750890701780254 39.790586318490696 -15.10728752295998 -12.824535901748304 16.73312629333741 -11.045750202895642 -14.639022723428816 -4.819493713790297 0.12987727446051117 0.04274137296376776 1.204312390836273 0.0 0.0 + 461.9368267656361 52.53840694165619 144.8183760448168 455.9093893534564 35.81740627464267 40.776479432911195 17.76376684531324 -7.606209560029927 -15.381956921574087 3.9317973949968428 -41.37771137941743 -44.920577584346 53.37495929469229 10.211466474320808 -15.84128439059478 -19.507483543094224 1.884309895179932 5.745356704710484 0.0 +] const RODAS6Pc = [0.0, 0.4449064090300329, 0.5391930604628539, 0.3920739557917205, 0.5393851240464334, 0.7496615946466092, 0.09171052879621677, 0.716762001806476, 0.9201684737037024, 0.7017495611178288, 0.5587152179138446, 0.10896187906446, 0.5073827520419607, 0.9999999999999999, 0.9999999999999999, 1.0000000000000002, 0.19999999999999996, 0.4999999999999998, 0.8] const RODAS6Pd = [0.26, -0.18490640903003291, -0.5445316852875675, -0.03230297796648507, -0.05985832397786847, 0.08292573124960323, 0.4158601113780379, -0.4887636036121086, -0.5305551731438798, 0.12166683722729399, -0.14899579330238244, 0.20995126195089908, -0.06287825975966793, -1.1102230246251565e-16, 1.1102230246251565e-16, 2.220446049250313e-16, 8.520155173756681, -7.34858003171262, 1.5593201340906078] -const RODAS6PH = [17.587737160518465 -4.506717064391614 3.246011776864481 -5.070180845870549 -6.923968603369673 -1.6592466655000042 0.8383525386642399 1.2720777724693832 2.2171542815286456 1.2791183755209752 3.3596716472022443 -0.5508890465808383 -2.0565074886981494 -2.6056952102687827 -2.100871100634552 -1.8776167550373888 -0.022326222735958842 0.25936621048769365 -0.12973178185863266 - -27.32817833553187 2.3528275077734033 7.155223685651038 10.820120934865187 -25.034320788396975 -8.268316122429903 -11.20195859714455 -5.95292555000712 -4.350123484395559 -3.4923279797567224 -7.522667509591013 6.313357154108988 3.434436480929646 4.500204746140061 3.6478467450775045 2.888705712728512 -0.031277730738519756 -1.0511708104283997 0.7378677397843861 - 48.135250596372614 1.6152029264444003 8.745836243957392 11.94240783069938 21.81240388443989 13.3043522805227 15.272804908450944 7.036607939296541 -2.212585956007379 3.686601637356048 8.623872556251557 -9.029595886738495 -6.643976834766214 -6.745850399987328 -7.810160738277424 -3.8140189856964035 0.04030442810903404 1.0072680387990685 -1.0126127084529764 - -12.232391324631207 1.7643387246585114 -0.8009754670601623 -2.893944757628759 -7.972815842366974 1.309554861689306 -4.604493120665954 1.8134270309595735 -3.751773417632513 -0.5811994801517248 -2.741530578462468 0.300651942632877 2.0061263661214994 1.8521005591286555 -0.2324954254701126 0.6873479719072509 0.12936879836252782 -0.17980608456604885 0.32290862251165836] +const RODAS6PH = [ + 17.587737160518465 -4.506717064391614 3.246011776864481 -5.070180845870549 -6.923968603369673 -1.6592466655000042 0.8383525386642399 1.2720777724693832 2.2171542815286456 1.2791183755209752 3.3596716472022443 -0.5508890465808383 -2.0565074886981494 -2.6056952102687827 -2.100871100634552 -1.8776167550373888 -0.022326222735958842 0.25936621048769365 -0.12973178185863266 + -27.32817833553187 2.3528275077734033 7.155223685651038 10.820120934865187 -25.034320788396975 -8.268316122429903 -11.20195859714455 -5.95292555000712 -4.350123484395559 -3.4923279797567224 -7.522667509591013 6.313357154108988 3.434436480929646 4.500204746140061 3.6478467450775045 2.888705712728512 -0.031277730738519756 -1.0511708104283997 0.7378677397843861 + 48.135250596372614 1.6152029264444003 8.745836243957392 11.94240783069938 21.81240388443989 13.3043522805227 15.272804908450944 7.036607939296541 -2.212585956007379 3.686601637356048 8.623872556251557 -9.029595886738495 -6.643976834766214 -6.745850399987328 -7.810160738277424 -3.8140189856964035 0.04030442810903404 1.0072680387990685 -1.0126127084529764 + -12.232391324631207 1.7643387246585114 -0.8009754670601623 -2.893944757628759 -7.972815842366974 1.309554861689306 -4.604493120665954 1.8134270309595735 -3.751773417632513 -0.5811994801517248 -2.741530578462468 0.300651942632877 2.0061263661214994 1.8521005591286555 -0.2324954254701126 0.6873479719072509 0.12936879836252782 -0.17980608456604885 0.32290862251165836 +] function Rodas6PTableau(T, T2) gamma = 0.26 - RodasTableau{T, T2}(RODAS6PA, RODAS6PC, gamma, RODAS6Pc, RODAS6Pd, RODAS6PH) + return RodasTableau{T, T2}(RODAS6PA, RODAS6PC, gamma, RODAS6Pc, RODAS6Pd, RODAS6PH) end @RosenbrockW6S4OS(:tableau) diff --git a/lib/OrdinaryDiffEqRosenbrock/src/stiff_addsteps.jl b/lib/OrdinaryDiffEqRosenbrock/src/stiff_addsteps.jl index 4eceacb59b..6f7c69a2d1 100644 --- a/lib/OrdinaryDiffEqRosenbrock/src/stiff_addsteps.jl +++ b/lib/OrdinaryDiffEqRosenbrock/src/stiff_addsteps.jl @@ -1,8 +1,12 @@ -function _ode_addsteps!(k, t, uprev, u, dt, f, p, - cache::Union{Rosenbrock23ConstantCache, - Rosenbrock32ConstantCache}, +function _ode_addsteps!( + k, t, uprev, u, dt, f, p, + cache::Union{ + Rosenbrock23ConstantCache, + Rosenbrock32ConstantCache, + }, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 2 || always_calc_begin (; tf, uf, d) = cache dtγ = dt * d @@ -16,7 +20,7 @@ function _ode_addsteps!(k, t, uprev, u, dt, f, p, autodiff_alg = SciMLBase.@set autodiff_alg.dir = sign(dt) end - dT = DI.derivative(tf, autodiff_alg,t) + dT = DI.derivative(tf, autodiff_alg, t) mass_matrix = f.mass_matrix if uprev isa Number @@ -43,12 +47,14 @@ function _ode_addsteps!(k, t, uprev, u, dt, f, p, copyat_or_push!(k, 1, k₁) copyat_or_push!(k, 2, k₂) end - nothing + return nothing end -function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::RosenbrockCombinedConstantCache, +function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::RosenbrockCombinedConstantCache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < size(cache.tab.H, 1) || always_calc_begin (; tf, uf) = cache (; A, C, gamma, c, d, H) = cache.tab @@ -120,12 +126,14 @@ function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::RosenbrockCombinedConst copyat_or_push!(k, j, kj) end end - nothing + return nothing end -function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::RosenbrockCache, +function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::RosenbrockCache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 2 || always_calc_begin (; du, du1, du2, tmp, ks, dT, J, W, uf, tf, linsolve_tmp, jac_config, fsalfirst, weight) = cache (; A, C, gamma, c, d, H) = cache.tab @@ -149,7 +157,8 @@ function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::RosenbrockCache, linsolve = cache.linsolve linres = dolinsolve( - cache, linsolve; A = W, b = _vec(linsolve_tmp), reltol = cache.reltol) + cache, linsolve; A = W, b = _vec(linsolve_tmp), reltol = cache.reltol + ) @.. $(_vec(ks[1])) = -linres.u # Last stage affect's ks for Rodas5,5P,6P for stage in 2:length(ks) @@ -174,7 +183,8 @@ function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::RosenbrockCache, end linres = dolinsolve( - cache, linres.cache; b = _vec(linsolve_tmp), reltol = cache.reltol) + cache, linres.cache; b = _vec(linsolve_tmp), reltol = cache.reltol + ) @.. $(_vec(ks[stage])) = -linres.u end @@ -186,5 +196,5 @@ function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::RosenbrockCache, end end end - nothing + return nothing end diff --git a/lib/OrdinaryDiffEqRosenbrock/test/allocation_tests.jl b/lib/OrdinaryDiffEqRosenbrock/test/allocation_tests.jl index 8cd370f0ab..62b28cacfa 100644 --- a/lib/OrdinaryDiffEqRosenbrock/test/allocation_tests.jl +++ b/lib/OrdinaryDiffEqRosenbrock/test/allocation_tests.jl @@ -24,13 +24,16 @@ Currently, Rosenbrock solvers are allocating and marked with @test_broken. rosenbrock_solvers = [ Rosenbrock23(), Rosenbrock32(), RosShamp4(), Veldd4(), Velds4(), GRK4T(), GRK4A(), Rodas3(), Rodas23W(), Rodas3P(), Rodas4(), Rodas42(), Rodas4P(), Rodas4P2(), Rodas5(), - Rodas5P(), Rodas5Pe(), Rodas5Pr(), Rodas6P()] + Rodas5P(), Rodas5Pe(), Rodas5Pr(), Rodas6P(), + ] @testset "Rosenbrock Solver Allocation Analysis" begin for solver in rosenbrock_solvers @testset "$(typeof(solver)) allocation check" begin - integrator = init(linear_prob, solver, dt = 0.1, - save_everystep = false, abstol = 1e-6, reltol = 1e-6) + integrator = init( + linear_prob, solver, dt = 0.1, + save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6 + ) step!(integrator) # Setup step may allocate # Use AllocCheck for accurate allocation detection @@ -43,7 +46,7 @@ Currently, Rosenbrock solvers are allocating and marked with @test_broken. # However, we don't want to allow any dynamic dispatch from this module @test count( t -> t isa AllocCheck.DynamicDispatch && - any(s -> contains(string(s.file), "Rosenbrock"), t.backtrace), + any(s -> contains(string(s.file), "Rosenbrock"), t.backtrace), allocs ) == 0 diff --git a/lib/OrdinaryDiffEqRosenbrock/test/dae_rosenbrock_ad_tests.jl b/lib/OrdinaryDiffEqRosenbrock/test/dae_rosenbrock_ad_tests.jl index 049d541b54..3f121e01c6 100644 --- a/lib/OrdinaryDiffEqRosenbrock/test/dae_rosenbrock_ad_tests.jl +++ b/lib/OrdinaryDiffEqRosenbrock/test/dae_rosenbrock_ad_tests.jl @@ -2,42 +2,47 @@ using OrdinaryDiffEqRosenbrock, LinearAlgebra, ForwardDiff, Test using OrdinaryDiffEqNonlinearSolve: BrownFullBasicInit, ShampineCollocationInit using ADTypes: AutoForwardDiff, AutoFiniteDiff -afd_cs3 = AutoForwardDiff(chunksize=3) +afd_cs3 = AutoForwardDiff(chunksize = 3) function rober(du, u, p, t) y₁, y₂, y₃ = u k₁, k₂, k₃ = p du[1] = -k₁ * y₁ + k₃ * y₂ * y₃ du[2] = k₁ * y₁ - k₃ * y₂ * y₃ - k₂ * y₂^2 du[3] = y₁ + y₂ + y₃ - 1 - nothing + return nothing end function rober(u, p, t) y₁, y₂, y₃ = u k₁, k₂, k₃ = p - [-k₁ * y₁ + k₃ * y₂ * y₃, + return [ + -k₁ * y₁ + k₃ * y₂ * y₃, k₁ * y₁ - k₃ * y₂ * y₃ - k₂ * y₂^2, - y₁ + y₂ + y₃ - 1] + y₁ + y₂ + y₃ - 1, + ] end M = Diagonal([1.0, 1.0, 0.0]) roberf = ODEFunction{true, SciMLBase.AutoSpecialize}(rober, mass_matrix = M) roberf_oop = ODEFunction{false, SciMLBase.AutoSpecialize}(rober, mass_matrix = M) -prob_mm = ODEProblem(roberf, [1.0, 0.0, 0.2], (0.0, 1e5), (0.04, 3e7, 1e4)) -prob_mm_oop = ODEProblem(roberf_oop, [1.0, 0.0, 0.2], (0.0, 1e5), (0.04, 3e7, 1e4)) +prob_mm = ODEProblem(roberf, [1.0, 0.0, 0.2], (0.0, 1.0e5), (0.04, 3.0e7, 1.0e4)) +prob_mm_oop = ODEProblem(roberf_oop, [1.0, 0.0, 0.2], (0.0, 1.0e5), (0.04, 3.0e7, 1.0e4)) # Both should be inferable so long as AutoSpecialize is used... -@test_broken sol = @inferred solve(prob_mm, Rodas5P(), reltol = 1e-8, abstol = 1e-8) -sol = @inferred solve(prob_mm_oop, Rodas5P(), reltol = 1e-8, abstol = 1e-8) +@test_broken sol = @inferred solve(prob_mm, Rodas5P(), reltol = 1.0e-8, abstol = 1.0e-8) +sol = @inferred solve(prob_mm_oop, Rodas5P(), reltol = 1.0e-8, abstol = 1.0e-8) # These tests flex differentiation of the solver and through the initialization # To only test the solver part and isolate potential issues, set the initialization to consistent @testset "Inplace: $(isinplace(_prob)), BrownBasic: $(initalg isa BrownFullBasicInit), Autodiff: $autodiff" for _prob in [ - prob_mm, prob_mm_oop], - initalg in [BrownFullBasicInit(), ShampineCollocationInit()], autodiff in [AutoForwardDiff(chunksize=3), AutoFiniteDiff()] + prob_mm, prob_mm_oop, + ], + initalg in [BrownFullBasicInit(), ShampineCollocationInit()], autodiff in [AutoForwardDiff(chunksize = 3), AutoFiniteDiff()] alg = Rodas5P(; autodiff) function f(p) - sol = @inferred solve(remake(_prob, p = p), alg, abstol = 1e-14, - reltol = 1e-14, initializealg = initalg) + sol = @inferred solve( + remake(_prob, p = p), alg, abstol = 1.0e-14, + reltol = 1.0e-14, initializealg = initalg + ) sum(sol) end - @test ForwardDiff.gradient(f, [0.04, 3e7, 1e4])≈[0, 0, 0] atol=1e-8 + @test ForwardDiff.gradient(f, [0.04, 3.0e7, 1.0e4]) ≈ [0, 0, 0] atol = 1.0e-8 end diff --git a/lib/OrdinaryDiffEqRosenbrock/test/jet.jl b/lib/OrdinaryDiffEqRosenbrock/test/jet.jl index 8477ef79d0..940dd2c115 100644 --- a/lib/OrdinaryDiffEqRosenbrock/test/jet.jl +++ b/lib/OrdinaryDiffEqRosenbrock/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqRosenbrock, target_defined_modules = true, mode = :typo) + OrdinaryDiffEqRosenbrock, target_defined_modules = true, mode = :typo + ) end diff --git a/lib/OrdinaryDiffEqRosenbrock/test/ode_rosenbrock_tests.jl b/lib/OrdinaryDiffEqRosenbrock/test/ode_rosenbrock_tests.jl index a19791cb47..c817b6f38c 100644 --- a/lib/OrdinaryDiffEqRosenbrock/test/ode_rosenbrock_tests.jl +++ b/lib/OrdinaryDiffEqRosenbrock/test/ode_rosenbrock_tests.jl @@ -1,7 +1,7 @@ using OrdinaryDiffEqRosenbrock, DiffEqDevTools, Test, LinearAlgebra, LinearSolve, ADTypes import ODEProblemLibrary: prob_ode_linear, - prob_ode_2Dlinear, - prob_ode_bigfloatlinear, prob_ode_bigfloat2Dlinear + prob_ode_2Dlinear, + prob_ode_bigfloatlinear, prob_ode_bigfloat2Dlinear import LinearSolve if isempty(VERSION.prerelease) @@ -19,7 +19,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, Rosenbrock23()) - @test sim.𝒪est[:final]≈2 atol=testTol + @test sim.𝒪est[:final] ≈ 2 atol = testTol sol = solve(prob, Rosenbrock23()) @test length(sol) < 20 @@ -28,27 +28,37 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, Rosenbrock23()) - @test sim.𝒪est[:final]≈2 atol=testTol + @test sim.𝒪est[:final] ≈ 2 atol = testTol sol = solve(prob, Rosenbrock23()) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) if isempty(VERSION.prerelease) - sim = test_convergence(dts, prob, Rosenbrock23(autodiff = AutoEnzyme( - mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const))) - @test sim.𝒪est[:final]≈2 atol=testTol + sim = test_convergence( + dts, prob, Rosenbrock23( + autodiff = AutoEnzyme( + mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const + ) + ) + ) + @test sim.𝒪est[:final] ≈ 2 atol = testTol - sol = solve(prob, Rosenbrock23(autodiff = AutoEnzyme( - mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const))) + sol = solve( + prob, Rosenbrock23( + autodiff = AutoEnzyme( + mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const + ) + ) + ) @test length(sol) < 20 - @test SciMLBase.successful_retcode(sol) + @test SciMLBase.successful_retcode(sol) end prob = prob_ode_bigfloat2Dlinear sim = test_convergence(dts, prob, Rosenbrock23(linsolve = QRFactorization())) - @test sim.𝒪est[:final]≈2 atol=testTol + @test sim.𝒪est[:final] ≈ 2 atol = testTol sol = solve(prob, Rosenbrock23(linsolve = QRFactorization())) @test length(sol) < 20 @@ -59,7 +69,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, Rosenbrock32()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, Rosenbrock32()) @test length(sol) < 20 @@ -68,34 +78,54 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, Rosenbrock32()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, Rosenbrock32()) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) if isempty(VERSION.prerelease) - sim = test_convergence(dts, + sim = test_convergence( + dts, prob, - Rosenbrock32(autodiff = AutoEnzyme( - mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const))) - @test sim.𝒪est[:final]≈3 atol=testTol + Rosenbrock32( + autodiff = AutoEnzyme( + mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const + ) + ) + ) + @test sim.𝒪est[:final] ≈ 3 atol = testTol - sol = solve(prob, - Rosenbrock32(autodiff = AutoEnzyme( - mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const))) + sol = solve( + prob, + Rosenbrock32( + autodiff = AutoEnzyme( + mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const + ) + ) + ) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) - sim = test_convergence(dts, + sim = test_convergence( + dts, prob, - Rosenbrock32(autodiff = AutoEnzyme( - mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const), linsolve = LinearSolve.KrylovJL())) - @test sim.𝒪est[:final]≈3 atol=testTol + Rosenbrock32( + autodiff = AutoEnzyme( + mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const + ), linsolve = LinearSolve.KrylovJL() + ) + ) + @test sim.𝒪est[:final] ≈ 3 atol = testTol - sol = solve(prob, - Rosenbrock32(autodiff = AutoEnzyme( - mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const), linsolve = LinearSolve.KrylovJL())) + sol = solve( + prob, + Rosenbrock32( + autodiff = AutoEnzyme( + mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const + ), linsolve = LinearSolve.KrylovJL() + ) + ) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) end @@ -104,7 +134,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, ROS3P()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, ROS3P()) @test length(sol) < 20 @@ -113,26 +143,34 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, ROS3P()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, ROS3P()) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) if isempty(VERSION.prerelease) - sim = test_convergence(dts, + sim = test_convergence( + dts, prob, ROS3P( autodiff = AutoEnzyme( - mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const), - linsolve = LinearSolve.KrylovJL())) - @test sim.𝒪est[:final]≈3 atol=testTol - - sol = solve(prob, + mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const + ), + linsolve = LinearSolve.KrylovJL() + ) + ) + @test sim.𝒪est[:final] ≈ 3 atol = testTol + + sol = solve( + prob, ROS3P( autodiff = AutoEnzyme( - mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const), - linsolve = LinearSolve.KrylovJL())) + mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const + ), + linsolve = LinearSolve.KrylovJL() + ) + ) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) end @@ -142,7 +180,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, Rodas3()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, Rodas3()) @test length(sol) < 20 @@ -151,26 +189,34 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, Rodas3()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, Rodas3()) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) if isempty(VERSION.prerelease) - sim = test_convergence(dts, + sim = test_convergence( + dts, prob, Rodas3( autodiff = AutoEnzyme( - mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const), - linsolve = LinearSolve.KrylovJL())) - @test sim.𝒪est[:final]≈3 atol=testTol - - sol = solve(prob, + mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const + ), + linsolve = LinearSolve.KrylovJL() + ) + ) + @test sim.𝒪est[:final] ≈ 3 atol = testTol + + sol = solve( + prob, Rodas3( autodiff = AutoEnzyme( - mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const), - linsolve = LinearSolve.KrylovJL())) + mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const + ), + linsolve = LinearSolve.KrylovJL() + ) + ) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) end @@ -179,7 +225,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, ROS2()) - @test sim.𝒪est[:final]≈2 atol=testTol + @test sim.𝒪est[:final] ≈ 2 atol = testTol sol = solve(prob, ROS2()) @test length(sol) < 61 @@ -188,7 +234,7 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, ROS2()) - @test sim.𝒪est[:final]≈2 atol=testTol + @test sim.𝒪est[:final] ≈ 2 atol = testTol sol = solve(prob, ROS2PR()) @test length(sol) < 60 @@ -198,7 +244,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, ROS2PR()) - @test sim.𝒪est[:final]≈2 atol=testTol + @test sim.𝒪est[:final] ≈ 2 atol = testTol sol = solve(prob, ROS2PR()) @test length(sol) < 30 @@ -207,7 +253,7 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, ROS2PR()) - @test sim.𝒪est[:final]≈2 atol=testTol + @test sim.𝒪est[:final] ≈ 2 atol = testTol sol = solve(prob, ROS2PR()) @test length(sol) < 30 @@ -217,7 +263,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, ROS2S()) - @test sim.𝒪est[:final]≈2 atol=testTol + @test sim.𝒪est[:final] ≈ 2 atol = testTol sol = solve(prob, ROS2S()) @test length(sol) < 20 @@ -226,7 +272,7 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, ROS2S()) - @test sim.𝒪est[:final]≈2 atol=testTol + @test sim.𝒪est[:final] ≈ 2 atol = testTol sol = solve(prob, ROS2S()) @test length(sol) < 20 @@ -236,7 +282,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, ROS3()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, ROS3()) @test length(sol) < 20 @@ -245,7 +291,7 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, ROS3()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, ROS3()) @test length(sol) < 20 @@ -255,7 +301,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, ROS3PR()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, ROS3PR()) @test length(sol) < 20 @@ -264,7 +310,7 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, ROS3PR()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, ROS3PR()) @test length(sol) < 20 @@ -274,7 +320,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, Scholz4_7()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, Scholz4_7()) @test length(sol) < 30 @@ -283,7 +329,7 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, Scholz4_7()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, Scholz4_7()) @test length(sol) < 30 @@ -296,7 +342,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, RosShamp4()) - @test sim.𝒪est[:final]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol sol = solve(prob, RosShamp4()) @test length(sol) < 20 @@ -305,7 +351,7 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, RosShamp4()) - @test sim.𝒪est[:final]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol sol = solve(prob, RosShamp4()) @test length(sol) < 20 @@ -316,7 +362,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, Veldd4()) - @test sim.𝒪est[:final]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol sol = solve(prob, Veldd4()) @test length(sol) < 20 @@ -325,7 +371,7 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, Veldd4()) - @test sim.𝒪est[:final]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol sol = solve(prob, Veldd4()) @test length(sol) < 20 @@ -336,7 +382,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, Velds4()) - @test sim.𝒪est[:final]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol sol = solve(prob, Velds4()) @test length(sol) < 20 @@ -345,7 +391,7 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, Velds4()) - @test sim.𝒪est[:final]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol sol = solve(prob, Velds4()) @test length(sol) < 20 @@ -356,7 +402,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, GRK4T()) - @test sim.𝒪est[:final]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol sol = solve(prob, GRK4T()) @test length(sol) < 20 @@ -365,7 +411,7 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, GRK4T()) - @test sim.𝒪est[:final]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol sol = solve(prob, GRK4T()) @test length(sol) < 20 @@ -377,7 +423,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, GRK4A()) - @test sim.𝒪est[:final]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol sol = solve(prob, GRK4A()) @test length(sol) < 20 @@ -386,7 +432,7 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, GRK4A()) - @test sim.𝒪est[:final]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol sol = solve(prob, GRK4A()) @test length(sol) < 20 @@ -397,7 +443,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, Ros4LStab()) - @test sim.𝒪est[:final]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol sol = solve(prob, Ros4LStab()) @test length(sol) < 20 @@ -406,7 +452,7 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, Ros4LStab()) - @test sim.𝒪est[:final]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol sol = solve(prob, Ros4LStab()) @test length(sol) < 20 @@ -420,7 +466,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, ROS34PW1a()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, ROS34PW1a()) @test length(sol) < 20 @@ -429,7 +475,7 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, ROS34PW1a()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, ROS34PW1a()) @test length(sol) < 20 @@ -439,7 +485,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, ROS34PW1b()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, ROS34PW1b()) @test length(sol) < 20 @@ -448,7 +494,7 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, ROS34PW1b()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, ROS34PW1b()) @test length(sol) < 20 @@ -458,7 +504,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, ROS34PW2()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, ROS34PW2()) @test length(sol) < 20 @@ -467,7 +513,7 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, ROS34PW2()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, ROS34PW2()) @test length(sol) < 20 @@ -477,7 +523,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, ROS34PW3()) - @test sim.𝒪est[:final]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol sol = solve(prob, ROS34PW3()) @test length(sol) < 20 @@ -486,7 +532,7 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, ROS34PW3()) - @test sim.𝒪est[:final]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol sol = solve(prob, ROS34PW3()) @test length(sol) < 20 @@ -496,7 +542,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, ROS34PRw()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, ROS34PRw()) @test length(sol) < 20 @@ -505,7 +551,7 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, ROS34PRw()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, ROS34PRw()) @test length(sol) < 20 @@ -515,7 +561,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, ROS3PRL()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, ROS3PRL()) @test length(sol) < 20 @@ -524,7 +570,7 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, ROS3PRL()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, ROS3PRL()) @test length(sol) < 20 @@ -534,7 +580,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, ROS3PRL2()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, ROS3PRL2()) @test length(sol) < 20 @@ -543,7 +589,7 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, ROS3PRL2()) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol sol = solve(prob, ROS3PRL2()) @test length(sol) < 20 @@ -553,7 +599,7 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, ROK4a()) - @test sim.𝒪est[:final]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol sol = solve(prob, ROK4a()) @test length(sol) < 20 @@ -562,20 +608,20 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, ROK4a()) - @test sim.𝒪est[:final]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol sol = solve(prob, ROK4a()) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) ### RosenbrockW6S4OS - sim = test_convergence(dts, prob, RosenbrockW6S4OS())#test inplace - @test sim.𝒪est[:final]≈4 atol=testTol + sim = test_convergence(dts, prob, RosenbrockW6S4OS()) #test inplace + @test sim.𝒪est[:final] ≈ 4 atol = testTol prob = prob_ode_linear - sim = test_convergence(dts, prob, RosenbrockW6S4OS())#test non-inplace - @test sim.𝒪est[:final]≈4 atol=testTol + sim = test_convergence(dts, prob, RosenbrockW6S4OS()) #test non-inplace + @test sim.𝒪est[:final] ≈ 4 atol = testTol ### Rodas23W, Rodas3P @@ -585,8 +631,8 @@ end dts = (1 / 2) .^ (6:-1:3) sim = test_convergence(dts, prob, Rodas23W(), dense_errors = true) - @test sim.𝒪est[:final]≈2 atol=testTol - @test sim.𝒪est[:L2]≈2 atol=testTol + @test sim.𝒪est[:final] ≈ 2 atol = testTol + @test sim.𝒪est[:L2] ≈ 2 atol = testTol sol = solve(prob, Rodas23W()) @test length(sol) < 20 @@ -595,27 +641,35 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, Rodas23W(), dense_errors = true) - @test sim.𝒪est[:final]≈2 atol=testTol - @test sim.𝒪est[:L2]≈2 atol=testTol + @test sim.𝒪est[:final] ≈ 2 atol = testTol + @test sim.𝒪est[:L2] ≈ 2 atol = testTol sol = solve(prob, Rodas23W()) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) if isempty(VERSION.prerelease) - sim = test_convergence(dts, + sim = test_convergence( + dts, prob, Rodas23W( autodiff = AutoEnzyme( - mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const), - linsolve = LinearSolve.KrylovJL())) + mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const + ), + linsolve = LinearSolve.KrylovJL() + ) + ) @test sim.𝒪est[:final] ≈ 2 atol = testTol - sol = solve(prob, + sol = solve( + prob, Rodas23W( autodiff = AutoEnzyme( - mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const), - linsolve = LinearSolve.KrylovJL())) + mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const + ), + linsolve = LinearSolve.KrylovJL() + ) + ) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) end @@ -625,8 +679,8 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, Rodas3P(), dense_errors = true) - @test sim.𝒪est[:final]≈3 atol=testTol - @test sim.𝒪est[:L2]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol + @test sim.𝒪est[:L2] ≈ 3 atol = testTol sol = solve(prob, Rodas3P()) @test length(sol) < 20 @@ -635,27 +689,35 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, Rodas3P(), dense_errors = true) - @test sim.𝒪est[:final]≈3 atol=testTol - @test sim.𝒪est[:L2]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol + @test sim.𝒪est[:L2] ≈ 3 atol = testTol sol = solve(prob, Rodas3P()) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) if isempty(VERSION.prerelease) - sim = test_convergence(dts, + sim = test_convergence( + dts, prob, Rodas3P( autodiff = AutoEnzyme( - mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const), - linsolve = LinearSolve.KrylovJL())) - @test sim.𝒪est[:final]≈3 atol=testTol - - sol = solve(prob, + mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const + ), + linsolve = LinearSolve.KrylovJL() + ) + ) + @test sim.𝒪est[:final] ≈ 3 atol = testTol + + sol = solve( + prob, Rodas3P( autodiff = AutoEnzyme( - mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const), - linsolve = LinearSolve.KrylovJL())) + mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const + ), + linsolve = LinearSolve.KrylovJL() + ) + ) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) end @@ -669,49 +731,55 @@ end prob = prob_ode_linear sim = test_convergence(dts, prob, Rodas4(), dense_errors = true) - @test sim.𝒪est[:final]≈4 atol=testTol - @test sim.𝒪est[:L2]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol + @test sim.𝒪est[:L2] ≈ 4 atol = testTol sol = solve(prob, Rodas4()) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) sim = test_convergence( - dts, prob, Rodas4(autodiff = AutoFiniteDiff()), dense_errors = true) - @test sim.𝒪est[:final]≈4 atol=testTol - @test sim.𝒪est[:L2]≈4 atol=testTol + dts, prob, Rodas4(autodiff = AutoFiniteDiff()), dense_errors = true + ) + @test sim.𝒪est[:final] ≈ 4 atol = testTol + @test sim.𝒪est[:L2] ≈ 4 atol = testTol sol = solve(prob, Rodas4(autodiff = AutoFiniteDiff())) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) if isempty(VERSION.prerelease) - sol = solve(prob, - Rodas4(autodiff = AutoEnzyme( - mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const))) + sol = solve( + prob, + Rodas4( + autodiff = AutoEnzyme( + mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const + ) + ) + ) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) end sim = test_convergence(dts, prob, Rodas42(), dense_errors = true) - @test sim.𝒪est[:final]≈5.1 atol=testTol - @test sim.𝒪est[:L2]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 5.1 atol = testTol + @test sim.𝒪est[:L2] ≈ 4 atol = testTol sol = solve(prob, Rodas42()) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) sim = test_convergence(dts, prob, Rodas4P(), dense_errors = true) - @test sim.𝒪est[:final]≈4 atol=testTol - @test sim.𝒪est[:L2]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol + @test sim.𝒪est[:L2] ≈ 4 atol = testTol sol = solve(prob, Rodas4P()) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) sim = test_convergence(dts, prob, Rodas4P2(), dense_errors = true) - @test sim.𝒪est[:final]≈4 atol=testTol - @test sim.𝒪est[:L2]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol + @test sim.𝒪est[:L2] ≈ 4 atol = testTol sol = solve(prob, Rodas4P2()) @test length(sol) < 20 @@ -720,8 +788,8 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, Rodas4(), dense_errors = true) - @test sim.𝒪est[:final]≈4 atol=testTol - @test sim.𝒪est[:L2]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol + @test sim.𝒪est[:L2] ≈ 4 atol = testTol sol = solve(prob, Rodas4()) @test length(sol) < 20 @@ -730,9 +798,10 @@ end println("Rodas4 with finite diff") sim = test_convergence( - dts, prob, Rodas4(autodiff = AutoFiniteDiff()), dense_errors = true) - @test sim.𝒪est[:final]≈4 atol=testTol - @test sim.𝒪est[:L2]≈4 atol=testTol + dts, prob, Rodas4(autodiff = AutoFiniteDiff()), dense_errors = true + ) + @test sim.𝒪est[:final] ≈ 4 atol = testTol + @test sim.𝒪est[:L2] ≈ 4 atol = testTol sol = solve(prob, Rodas4(autodiff = AutoFiniteDiff())) @test length(sol) < 20 @@ -740,9 +809,10 @@ end sim = test_convergence( dts, prob, Rodas4(autodiff = AutoFiniteDiff(fdtype = Val(:forward))), - dense_errors = true) - @test sim.𝒪est[:final]≈4 atol=testTol - @test sim.𝒪est[:L2]≈4 atol=testTol + dense_errors = true + ) + @test sim.𝒪est[:final] ≈ 4 atol = testTol + @test sim.𝒪est[:L2] ≈ 4 atol = testTol sol = solve(prob, Rodas4(autodiff = AutoFiniteDiff(fdtype = Val(:forward)))) @test length(sol) < 20 @@ -750,33 +820,34 @@ end sim = test_convergence( dts, prob, Rodas4(autodiff = AutoFiniteDiff(fdtype = Val(:complex))), - dense_errors = true) - @test sim.𝒪est[:final]≈4 atol=testTol - @test sim.𝒪est[:L2]≈4 atol=testTol + dense_errors = true + ) + @test sim.𝒪est[:final] ≈ 4 atol = testTol + @test sim.𝒪est[:L2] ≈ 4 atol = testTol sol = solve(prob, Rodas4(autodiff = AutoFiniteDiff(fdtype = Val(:forward)))) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) sim = test_convergence(dts, prob, Rodas42(), dense_errors = true) - @test sim.𝒪est[:final]≈5 atol=testTol - @test sim.𝒪est[:L2]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 5 atol = testTol + @test sim.𝒪est[:L2] ≈ 4 atol = testTol sol = solve(prob, Rodas42()) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) sim = test_convergence(dts, prob, Rodas4P(), dense_errors = true) - @test sim.𝒪est[:final]≈4 atol=testTol - @test sim.𝒪est[:L2]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol + @test sim.𝒪est[:L2] ≈ 4 atol = testTol sol = solve(prob, Rodas4P()) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) sim = test_convergence(dts, prob, Rodas4P2(), dense_errors = true) - @test sim.𝒪est[:final]≈4 atol=testTol - @test sim.𝒪est[:L2]≈4 atol=testTol + @test sim.𝒪est[:final] ≈ 4 atol = testTol + @test sim.𝒪est[:L2] ≈ 4 atol = testTol sol = solve(prob, Rodas4P2()) @test length(sol) < 20 @@ -785,9 +856,10 @@ end println("Rodas4P2 with finite diff") sim = test_convergence( - dts, prob, Rodas4P2(autodiff = AutoFiniteDiff()), dense_errors = true) - @test sim.𝒪est[:final]≈4 atol=testTol - @test sim.𝒪est[:L2]≈4 atol=testTol + dts, prob, Rodas4P2(autodiff = AutoFiniteDiff()), dense_errors = true + ) + @test sim.𝒪est[:final] ≈ 4 atol = testTol + @test sim.𝒪est[:L2] ≈ 4 atol = testTol sol = solve(prob, Rodas4P2(autodiff = AutoFiniteDiff())) @test length(sol) < 20 @@ -800,8 +872,8 @@ end dts = (1 / 2) .^ (5:-1:2) sim = test_convergence(dts, prob, Rodas5(), dense_errors = true) - @test sim.𝒪est[:final]≈5 atol=testTol - @test sim.𝒪est[:L2]≈5 atol=testTol + @test sim.𝒪est[:final] ≈ 5 atol = testTol + @test sim.𝒪est[:L2] ≈ 5 atol = testTol sol = solve(prob, Rodas5()) @test length(sol) < 20 @@ -810,8 +882,8 @@ end prob = prob_ode_2Dlinear sim = test_convergence(dts, prob, Rodas5(), dense_errors = true) - @test sim.𝒪est[:final]≈5 atol=testTol - @test sim.𝒪est[:L2]≈5 atol=testTol + @test sim.𝒪est[:final] ≈ 5 atol = testTol + @test sim.𝒪est[:L2] ≈ 5 atol = testTol sol = solve(prob, Rodas5()) @test length(sol) < 20 @@ -823,7 +895,7 @@ end sim = test_convergence(dts, prob, Rodas5P(), dense_errors = true) #@test sim.𝒪est[:final]≈5 atol=testTol #-- observed order > 6 - @test sim.𝒪est[:L2]≈5 atol=testTol + @test sim.𝒪est[:L2] ≈ 5 atol = testTol sol = solve(prob, Rodas5P()) @test length(sol) < 20 @@ -833,7 +905,7 @@ end sim = test_convergence(dts, prob, Rodas5P(), dense_errors = true) #@test sim.𝒪est[:final]≈5 atol=testTol #-- observed order > 6 - @test sim.𝒪est[:L2]≈5 atol=testTol + @test sim.𝒪est[:L2] ≈ 5 atol = testTol sol = solve(prob, Rodas5P()) @test length(sol) < 20 @@ -845,7 +917,7 @@ end sim = test_convergence(dts, prob, Rodas5Pe(), dense_errors = true) #@test sim.𝒪est[:final]≈5 atol=testTol #-- observed order > 6 - @test sim.𝒪est[:L2]≈5 atol=testTol + @test sim.𝒪est[:L2] ≈ 5 atol = testTol sol = solve(prob, Rodas5Pe()) @test length(sol) < 20 @@ -855,7 +927,7 @@ end sim = test_convergence(dts, prob, Rodas5Pe(), dense_errors = true) #@test sim.𝒪est[:final]≈5 atol=testTol #-- observed order > 6 - @test sim.𝒪est[:L2]≈5 atol=testTol + @test sim.𝒪est[:L2] ≈ 5 atol = testTol sol = solve(prob, Rodas5Pe()) @test length(sol) < 20 @@ -867,7 +939,7 @@ end sim = test_convergence(dts, prob, Rodas6P(), dense_errors = true) #@test sim.𝒪est[:final]≈5 atol=testTol #-- observed order > 6 - @test sim.𝒪est[:L2]≈6 atol=testTol + @test sim.𝒪est[:L2] ≈ 6 atol = testTol sol = solve(prob, Rodas6P()) @test length(sol) < 20 @@ -877,66 +949,93 @@ end sim = test_convergence(dts, prob, Rodas6P(), dense_errors = true) #@test sim.𝒪est[:final]≈5 atol=testTol #-- observed order > 6 - @test sim.𝒪est[:L2]≈6 atol=testTol + @test sim.𝒪est[:L2] ≈ 6 atol = testTol sol = solve(prob, Rodas6P()) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) - println("Rodas5P Enzyme Forward") prob = prob_ode_linear if isempty(VERSION.prerelease) - sim = test_convergence(dts, prob, + sim = test_convergence( + dts, prob, Rodas5P(autodiff = AutoEnzyme(mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const)), - dense_errors = true) + dense_errors = true + ) #@test sim.𝒪est[:final]≈5 atol=testTol #-- observed order > 6 - @test sim.𝒪est[:L2]≈5 atol=testTol + @test sim.𝒪est[:L2] ≈ 5 atol = testTol - sol = solve(prob, - Rodas5P(autodiff = AutoEnzyme(mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const))) + sol = solve( + prob, + Rodas5P(autodiff = AutoEnzyme(mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const)) + ) @test length(sol) < 20 - @test SciMLBase.successful_retcode(sol) + @test SciMLBase.successful_retcode(sol) prob = prob_ode_2Dlinear - sim = test_convergence(dts, prob, + sim = test_convergence( + dts, prob, Rodas5P(autodiff = AutoEnzyme(mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const)), - dense_errors = true) + dense_errors = true + ) #@test sim.𝒪est[:final]≈5 atol=testTol #-- observed order > 6 - @test sim.𝒪est[:L2]≈5 atol=testTol + @test sim.𝒪est[:L2] ≈ 5 atol = testTol - sim = test_convergence(dts, prob, - Rodas5P(autodiff = AutoEnzyme( - mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const), - linsolve = LinearSolve.KrylovJL()), - dense_errors = true) + sim = test_convergence( + dts, prob, + Rodas5P( + autodiff = AutoEnzyme( + mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const + ), + linsolve = LinearSolve.KrylovJL() + ), + dense_errors = true + ) #@test sim.𝒪est[:final]≈5 atol=testTol #-- observed order > 6 - @test sim.𝒪est[:L2]≈5 atol=testTol + @test sim.𝒪est[:L2] ≈ 5 atol = testTol - sim = test_convergence(dts, prob, - Rodas5P(autodiff = AutoEnzyme( - mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const), - linsolve = LinearSolve.KrylovJL_GMRES()), - dense_errors = true) + sim = test_convergence( + dts, prob, + Rodas5P( + autodiff = AutoEnzyme( + mode = set_runtime_activity(Enzyme.Forward), function_annotation = Enzyme.Const + ), + linsolve = LinearSolve.KrylovJL_GMRES() + ), + dense_errors = true + ) #@test sim.𝒪est[:final]≈5 atol=testTol #-- observed order > 6 - @test sim.𝒪est[:L2]≈5 atol=testTol + @test sim.𝒪est[:L2] ≈ 5 atol = testTol - sol = solve(prob, - Rodas5P(autodiff = AutoEnzyme(mode = set_runtime_activity(Enzyme.Forward), - function_annotation = Enzyme.Const))) + sol = solve( + prob, + Rodas5P( + autodiff = AutoEnzyme( + mode = set_runtime_activity(Enzyme.Forward), + function_annotation = Enzyme.Const + ) + ) + ) @test length(sol) < 20 - @test SciMLBase.successful_retcode(sol) + @test SciMLBase.successful_retcode(sol) prob = ODEProblem((u, p, t) -> 0.9u, 0.1, (0.0, 1.0)) @test_nowarn solve(prob, Rosenbrock23(autodiff = AutoFiniteDiff())) - @test_nowarn solve(prob, - Rosenbrock23(autodiff = AutoEnzyme(mode = set_runtime_activity(Enzyme.Forward), - function_annotation = Enzyme.Const))) + @test_nowarn solve( + prob, + Rosenbrock23( + autodiff = AutoEnzyme( + mode = set_runtime_activity(Enzyme.Forward), + function_annotation = Enzyme.Const + ) + ) + ) end end @@ -951,50 +1050,50 @@ end # Check convergence of Rodas3 with time-dependent matrix-free Jacobian. # Primarily to check that the Jacobian is being updated correctly as t changes. sim = test_convergence(dts, prob, Rodas3(linsolve = LinearSolve.KrylovJL())) - @test sim.𝒪est[:final]≈3 atol=testTol + @test sim.𝒪est[:final] ≈ 3 atol = testTol end @testset "ADTypes" begin for T in [ - Rosenbrock23, - Rosenbrock32, - RosShamp4, - Veldd4, - Velds4, - GRK4T, - GRK4A, - Ros4LStab, - ROS3P, - Rodas3, - Rodas23W, - Rodas3P, - Rodas4, - Rodas42, - Rodas4P, - Rodas4P2, - Rodas5, - Rodas5P, - Rodas5Pe, - Rodas5Pr, - Rodas6P, - RosenbrockW6S4OS, - ROS34PW1a, - ROS34PW1b, - ROS34PW2, - ROS34PW3, - ROS34PRw, - ROS3PRL, - ROS3PRL2, - ROK4a, - ROS2, - ROS2PR, - ROS2S, - ROS3, - ROS3PR, - Scholz4_7 - ] + Rosenbrock23, + Rosenbrock32, + RosShamp4, + Veldd4, + Velds4, + GRK4T, + GRK4A, + Ros4LStab, + ROS3P, + Rodas3, + Rodas23W, + Rodas3P, + Rodas4, + Rodas42, + Rodas4P, + Rodas4P2, + Rodas5, + Rodas5P, + Rodas5Pe, + Rodas5Pr, + Rodas6P, + RosenbrockW6S4OS, + ROS34PW1a, + ROS34PW1b, + ROS34PW2, + ROS34PW3, + ROS34PRw, + ROS3PRL, + ROS3PRL2, + ROK4a, + ROS2, + ROS2PR, + ROS2S, + ROS3, + ROS3PR, + Scholz4_7, + ] RosenbrockAlgorithm = if T <: - OrdinaryDiffEqRosenbrock.OrdinaryDiffEqRosenbrockAlgorithm + OrdinaryDiffEqRosenbrock.OrdinaryDiffEqRosenbrockAlgorithm OrdinaryDiffEqRosenbrock.OrdinaryDiffEqRosenbrockAlgorithm else OrdinaryDiffEqRosenbrock.OrdinaryDiffEqRosenbrockAdaptiveAlgorithm @@ -1006,26 +1105,32 @@ end @test OrdinaryDiffEqRosenbrock.OrdinaryDiffEqCore.alg_autodiff(alg) === ad @test OrdinaryDiffEqRosenbrock.OrdinaryDiffEqCore.get_chunksize(alg) === Val{3}() - alg = @test_logs (:warn, r"The `chunk_size` keyword is deprecated") match_mode=:any @inferred(T(; - autodiff = ad, chunk_size = Val{4}())) + alg = @test_logs (:warn, r"The `chunk_size` keyword is deprecated") match_mode = :any @inferred( + T(; + autodiff = ad, chunk_size = Val{4}() + ) + ) @test alg isa RosenbrockAlgorithm{4, <:AutoForwardDiff{4}, Val{:forward}()} @test OrdinaryDiffEqRosenbrock.OrdinaryDiffEqCore.alg_autodiff(alg) isa - AutoForwardDiff{4} + AutoForwardDiff{4} @test OrdinaryDiffEqRosenbrock.OrdinaryDiffEqCore.get_chunksize(alg) === Val{4}() ad = AutoFiniteDiff(; fdtype = Val{:central}()) alg = @test_logs @inferred(T(; autodiff = ad)) @test alg isa - RosenbrockAlgorithm{0, <:AutoFiniteDiff{Val{:central}}, Val{:central}()} + RosenbrockAlgorithm{0, <:AutoFiniteDiff{Val{:central}}, Val{:central}()} @test OrdinaryDiffEqRosenbrock.OrdinaryDiffEqCore.alg_autodiff(alg) isa AutoFiniteDiff{Val{:central}} @test OrdinaryDiffEqRosenbrock.OrdinaryDiffEqCore.get_chunksize(alg) === Val{0}() - alg = @test_logs (:warn, r"The `diff_type` keyword is deprecated") match_mode=:any @inferred(T(; - autodiff = ad, diff_type = Val{:complex}())) + alg = @test_logs (:warn, r"The `diff_type` keyword is deprecated") match_mode = :any @inferred( + T(; + autodiff = ad, diff_type = Val{:complex}() + ) + ) @test alg isa - RosenbrockAlgorithm{0, <:AutoFiniteDiff{Val{:complex}}, Val{:complex}()} + RosenbrockAlgorithm{0, <:AutoFiniteDiff{Val{:complex}}, Val{:complex}()} @test OrdinaryDiffEqRosenbrock.OrdinaryDiffEqCore.alg_autodiff(alg) isa - AutoFiniteDiff{Val{:complex}} + AutoFiniteDiff{Val{:complex}} @test OrdinaryDiffEqRosenbrock.OrdinaryDiffEqCore.get_chunksize(alg) === Val{0}() # issue #2613 diff --git a/lib/OrdinaryDiffEqRosenbrock/test/qa.jl b/lib/OrdinaryDiffEqRosenbrock/test/qa.jl index 956cb89095..c9e65b9ee8 100644 --- a/lib/OrdinaryDiffEqRosenbrock/test/qa.jl +++ b/lib/OrdinaryDiffEqRosenbrock/test/qa.jl @@ -5,4 +5,4 @@ using Aqua Aqua.test_all( OrdinaryDiffEqRosenbrock ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqRosenbrock/test/runtests.jl b/lib/OrdinaryDiffEqRosenbrock/test/runtests.jl index f5011a7768..f1ae1433ce 100644 --- a/lib/OrdinaryDiffEqRosenbrock/test/runtests.jl +++ b/lib/OrdinaryDiffEqRosenbrock/test/runtests.jl @@ -8,4 +8,4 @@ if isempty(VERSION.prerelease) @time @safetestset "JET Tests" include("jet.jl") @time @safetestset "Aqua" include("qa.jl") @time @safetestset "Allocation Tests" include("allocation_tests.jl") -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqSDIRK/src/OrdinaryDiffEqSDIRK.jl b/lib/OrdinaryDiffEqSDIRK/src/OrdinaryDiffEqSDIRK.jl index 25dedf9306..dc2670790e 100644 --- a/lib/OrdinaryDiffEqSDIRK/src/OrdinaryDiffEqSDIRK.jl +++ b/lib/OrdinaryDiffEqSDIRK/src/OrdinaryDiffEqSDIRK.jl @@ -1,20 +1,20 @@ module OrdinaryDiffEqSDIRK import OrdinaryDiffEqCore: alg_order, calculate_residuals!, - initialize!, perform_step!, unwrap_alg, - calculate_residuals, alg_extrapolates, - OrdinaryDiffEqAlgorithm, - OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, - OrdinaryDiffEqNewtonAdaptiveAlgorithm, - OrdinaryDiffEqNewtonAlgorithm, - DEFAULT_PRECS, - OrdinaryDiffEqAdaptiveAlgorithm, CompiledFloats, uses_uprev, - alg_cache, _vec, _reshape, @cache, isfsal, full_cache, - constvalue, _unwrap_val, _ode_interpolant, - trivial_limiter!, _ode_interpolant!, - isesdirk, issplit, - ssp_coefficient, get_fsalfirstlast, generic_solver_docstring, - _bool_to_ADType, _process_AD_choice, current_extrapolant! + initialize!, perform_step!, unwrap_alg, + calculate_residuals, alg_extrapolates, + OrdinaryDiffEqAlgorithm, + OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, + OrdinaryDiffEqNewtonAdaptiveAlgorithm, + OrdinaryDiffEqNewtonAlgorithm, + DEFAULT_PRECS, + OrdinaryDiffEqAdaptiveAlgorithm, CompiledFloats, uses_uprev, + alg_cache, _vec, _reshape, @cache, isfsal, full_cache, + constvalue, _unwrap_val, _ode_interpolant, + trivial_limiter!, _ode_interpolant!, + isesdirk, issplit, + ssp_coefficient, get_fsalfirstlast, generic_solver_docstring, + _bool_to_ADType, _process_AD_choice, current_extrapolant! using TruncatedStacktraces: @truncate_stacktrace using MuladdMacro, MacroTools, FastBroadcast, RecursiveArrayTools using SciMLBase: SplitFunction @@ -23,8 +23,8 @@ import OrdinaryDiffEqCore using OrdinaryDiffEqDifferentiation: UJacobianWrapper, dolinsolve using OrdinaryDiffEqNonlinearSolve: du_alias_or_new, markfirststage!, build_nlsolver, - nlsolve!, nlsolvefail, isnewton, get_W, set_new_W!, - NLNewton, COEFFICIENT_MULTISTEP + nlsolve!, nlsolvefail, isnewton, get_W, set_new_W!, + NLNewton, COEFFICIENT_MULTISTEP import ADTypes: AutoForwardDiff using Reexport @@ -39,10 +39,10 @@ include("kencarp_kvaerno_perform_step.jl") include("sdirk_tableaus.jl") export ImplicitEuler, ImplicitMidpoint, Trapezoid, TRBDF2, SDIRK2, SDIRK22, - Kvaerno3, KenCarp3, Cash4, Hairer4, Hairer42, SSPSDIRK2, Kvaerno4, - Kvaerno5, KenCarp4, KenCarp47, KenCarp5, KenCarp58, ESDIRK54I8L2SA, SFSDIRK4, - SFSDIRK5, CFNLIRK3, SFSDIRK6, SFSDIRK7, SFSDIRK8, Kvaerno5, KenCarp4, KenCarp5, - SFSDIRK4, SFSDIRK5, CFNLIRK3, SFSDIRK6, - SFSDIRK7, SFSDIRK8, ESDIRK436L2SA2, ESDIRK437L2SA, ESDIRK547L2SA2, ESDIRK659L2SA + Kvaerno3, KenCarp3, Cash4, Hairer4, Hairer42, SSPSDIRK2, Kvaerno4, + Kvaerno5, KenCarp4, KenCarp47, KenCarp5, KenCarp58, ESDIRK54I8L2SA, SFSDIRK4, + SFSDIRK5, CFNLIRK3, SFSDIRK6, SFSDIRK7, SFSDIRK8, Kvaerno5, KenCarp4, KenCarp5, + SFSDIRK4, SFSDIRK5, CFNLIRK3, SFSDIRK6, + SFSDIRK7, SFSDIRK8, ESDIRK436L2SA2, ESDIRK437L2SA, ESDIRK547L2SA2, ESDIRK659L2SA end diff --git a/lib/OrdinaryDiffEqSDIRK/src/alg_utils.jl b/lib/OrdinaryDiffEqSDIRK/src/alg_utils.jl index a4ac5fee51..1477c80f3b 100644 --- a/lib/OrdinaryDiffEqSDIRK/src/alg_utils.jl +++ b/lib/OrdinaryDiffEqSDIRK/src/alg_utils.jl @@ -32,11 +32,15 @@ alg_order(alg::SFSDIRK8) = 4 alg_order(alg::Hairer4) = 4 alg_order(alg::Hairer42) = 4 -function isesdirk(alg::Union{KenCarp3, KenCarp4, KenCarp5, KenCarp58, - Kvaerno3, Kvaerno4, Kvaerno5, ESDIRK437L2SA, - ESDIRK54I8L2SA, ESDIRK436L2SA2, ESDIRK547L2SA2, - ESDIRK659L2SA, CFNLIRK3}) - true +function isesdirk( + alg::Union{ + KenCarp3, KenCarp4, KenCarp5, KenCarp58, + Kvaerno3, Kvaerno4, Kvaerno5, ESDIRK437L2SA, + ESDIRK54I8L2SA, ESDIRK436L2SA2, ESDIRK547L2SA2, + ESDIRK659L2SA, CFNLIRK3, + } + ) + return true end alg_adaptive_order(alg::Trapezoid) = 1 diff --git a/lib/OrdinaryDiffEqSDIRK/src/algorithms.jl b/lib/OrdinaryDiffEqSDIRK/src/algorithms.jl index e1f74a4d57..56d80a25fb 100644 --- a/lib/OrdinaryDiffEqSDIRK/src/algorithms.jl +++ b/lib/OrdinaryDiffEqSDIRK/src/algorithms.jl @@ -1,8 +1,10 @@ -function SDIRK_docstring(description::String, +function SDIRK_docstring( + description::String, name::String; references::String = "", extra_keyword_description::String = "", - extra_keyword_default::String = "") + extra_keyword_default::String = "" + ) keyword_default = """ chunk_size = Val{0}(), autodiff = AutoForwardDiff(), @@ -15,69 +17,70 @@ function SDIRK_docstring(description::String, """ * extra_keyword_default keyword_default_description = """ - - `autodiff`: Uses [ADTypes.jl](https://sciml.github.io/ADTypes.jl/stable/) - to specify whether to use automatic differentiation via - [ForwardDiff.jl](https://github.com/JuliaDiff/ForwardDiff.jl) or finite - differencing via [FiniteDiff.jl](https://github.com/JuliaDiff/FiniteDiff.jl). - Defaults to `AutoForwardDiff()` for automatic differentiation, which by default uses - `chunksize = 0`, and thus uses the internal ForwardDiff.jl algorithm for the choice. - To use `FiniteDiff.jl`, the `AutoFiniteDiff()` ADType can be used, which has a keyword argument - `fdtype` with default value `Val{:forward}()`, and alternatives `Val{:central}()` and `Val{:complex}()`. - - `standardtag`: Specifies whether to use package-specific tags instead of the - ForwardDiff default function-specific tags. For more information, see - [this blog post](https://www.stochasticlifestyle.com/improved-forwarddiff-jl-stacktraces-with-package-tags/). - Defaults to `Val{true}()`. - - `concrete_jac`: Specifies whether a Jacobian should be constructed. Defaults to - `nothing`, which means it will be chosen true/false depending on circumstances - of the solver, such as whether a Krylov subspace method is used for `linsolve`. - - `linsolve`: Any [LinearSolve.jl](https://github.com/SciML/LinearSolve.jl) compatible linear solver. - For example, to use [KLU.jl](https://github.com/JuliaSparse/KLU.jl), specify - `$name(linsolve = KLUFactorization()`). - When `nothing` is passed, uses `DefaultLinearSolver`. - - `precs`: Any [LinearSolve.jl-compatible preconditioner](https://docs.sciml.ai/LinearSolve/stable/basics/Preconditioners/) - can be used as a left or right preconditioner. - Preconditioners are specified by the `Pl,Pr = precs(W,du,u,p,t,newW,Plprev,Prprev,solverdata)` - function where the arguments are defined as: - - `W`: the current Jacobian of the nonlinear system. Specified as either - ``I - \\gamma J`` or ``I/\\gamma - J`` depending on the algorithm. This will - commonly be a `WOperator` type defined by OrdinaryDiffEq.jl. It is a lazy - representation of the operator. Users can construct the W-matrix on demand - by calling `convert(AbstractMatrix,W)` to receive an `AbstractMatrix` matching - the `jac_prototype`. - - `du`: the current ODE derivative - - `u`: the current ODE state - - `p`: the ODE parameters - - `t`: the current ODE time - - `newW`: a `Bool` which specifies whether the `W` matrix has been updated since - the last call to `precs`. It is recommended that this is checked to only - update the preconditioner when `newW == true`. - - `Plprev`: the previous `Pl`. - - `Prprev`: the previous `Pr`. - - `solverdata`: Optional extra data the solvers can give to the `precs` function. - Solver-dependent and subject to change. - The return is a tuple `(Pl,Pr)` of the LinearSolve.jl-compatible preconditioners. - To specify one-sided preconditioning, simply return `nothing` for the preconditioner - which is not used. Additionally, `precs` must supply the dispatch: - ```julia - Pl, Pr = precs(W, du, u, p, t, ::Nothing, ::Nothing, ::Nothing, solverdata) - ``` - which is used in the solver setup phase to construct the integrator - type with the preconditioners `(Pl,Pr)`. - The default is `precs=DEFAULT_PRECS` where the default preconditioner function - is defined as: - ```julia - DEFAULT_PRECS(W, du, u, p, t, newW, Plprev, Prprev, solverdata) = nothing, nothing - ``` - - `nlsolve`: TBD - """ * extra_keyword_description - - generic_solver_docstring( + - `autodiff`: Uses [ADTypes.jl](https://sciml.github.io/ADTypes.jl/stable/) + to specify whether to use automatic differentiation via + [ForwardDiff.jl](https://github.com/JuliaDiff/ForwardDiff.jl) or finite + differencing via [FiniteDiff.jl](https://github.com/JuliaDiff/FiniteDiff.jl). + Defaults to `AutoForwardDiff()` for automatic differentiation, which by default uses + `chunksize = 0`, and thus uses the internal ForwardDiff.jl algorithm for the choice. + To use `FiniteDiff.jl`, the `AutoFiniteDiff()` ADType can be used, which has a keyword argument + `fdtype` with default value `Val{:forward}()`, and alternatives `Val{:central}()` and `Val{:complex}()`. + - `standardtag`: Specifies whether to use package-specific tags instead of the + ForwardDiff default function-specific tags. For more information, see + [this blog post](https://www.stochasticlifestyle.com/improved-forwarddiff-jl-stacktraces-with-package-tags/). + Defaults to `Val{true}()`. + - `concrete_jac`: Specifies whether a Jacobian should be constructed. Defaults to + `nothing`, which means it will be chosen true/false depending on circumstances + of the solver, such as whether a Krylov subspace method is used for `linsolve`. + - `linsolve`: Any [LinearSolve.jl](https://github.com/SciML/LinearSolve.jl) compatible linear solver. + For example, to use [KLU.jl](https://github.com/JuliaSparse/KLU.jl), specify + `$name(linsolve = KLUFactorization()`). + When `nothing` is passed, uses `DefaultLinearSolver`. + - `precs`: Any [LinearSolve.jl-compatible preconditioner](https://docs.sciml.ai/LinearSolve/stable/basics/Preconditioners/) + can be used as a left or right preconditioner. + Preconditioners are specified by the `Pl,Pr = precs(W,du,u,p,t,newW,Plprev,Prprev,solverdata)` + function where the arguments are defined as: + - `W`: the current Jacobian of the nonlinear system. Specified as either + ``I - \\gamma J`` or ``I/\\gamma - J`` depending on the algorithm. This will + commonly be a `WOperator` type defined by OrdinaryDiffEq.jl. It is a lazy + representation of the operator. Users can construct the W-matrix on demand + by calling `convert(AbstractMatrix,W)` to receive an `AbstractMatrix` matching + the `jac_prototype`. + - `du`: the current ODE derivative + - `u`: the current ODE state + - `p`: the ODE parameters + - `t`: the current ODE time + - `newW`: a `Bool` which specifies whether the `W` matrix has been updated since + the last call to `precs`. It is recommended that this is checked to only + update the preconditioner when `newW == true`. + - `Plprev`: the previous `Pl`. + - `Prprev`: the previous `Pr`. + - `solverdata`: Optional extra data the solvers can give to the `precs` function. + Solver-dependent and subject to change. + The return is a tuple `(Pl,Pr)` of the LinearSolve.jl-compatible preconditioners. + To specify one-sided preconditioning, simply return `nothing` for the preconditioner + which is not used. Additionally, `precs` must supply the dispatch: + ```julia + Pl, Pr = precs(W, du, u, p, t, ::Nothing, ::Nothing, ::Nothing, solverdata) + ``` + which is used in the solver setup phase to construct the integrator + type with the preconditioners `(Pl,Pr)`. + The default is `precs=DEFAULT_PRECS` where the default preconditioner function + is defined as: + ```julia + DEFAULT_PRECS(W, du, u, p, t, newW, Plprev, Prprev, solverdata) = nothing, nothing + ``` + - `nlsolve`: TBD + """ * extra_keyword_description + + return generic_solver_docstring( description, name, "SDIRK Method.", references, keyword_default_description, keyword_default ) end -@doc SDIRK_docstring("A 1st order implicit solver. A-B-L-stable. Adaptive timestepping through a divided differences estimate. Strong-stability preserving (SSP). Good for highly stiff equations.", +@doc SDIRK_docstring( + "A 1st order implicit solver. A-B-L-stable. Adaptive timestepping through a divided differences estimate. Strong-stability preserving (SSP). Good for highly stiff equations.", "ImplicitEuler"; references = "@book{wanner1996solving, title={Solving ordinary differential equations II}, @@ -94,9 +97,10 @@ end extrapolant = :constant, controller = :PI, step_limiter! = trivial_limiter!, - """) + """ +) struct ImplicitEuler{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -106,21 +110,28 @@ struct ImplicitEuler{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: autodiff::AD end -function ImplicitEuler(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function ImplicitEuler(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), extrapolant = :constant, - controller = :PI, step_limiter! = trivial_limiter!) + controller = :PI, step_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - ImplicitEuler{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return ImplicitEuler{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac), typeof(step_limiter!)}(linsolve, - nlsolve, precs, extrapolant, controller, step_limiter!, AD_choice) + _unwrap_val(concrete_jac), typeof(step_limiter!), + }( + linsolve, + nlsolve, precs, extrapolant, controller, step_limiter!, AD_choice + ) end -@doc SDIRK_docstring("A second order A-stable symplectic and symmetric implicit solver. Excellent for Hamiltonian systems and highly stiff equations.", +@doc SDIRK_docstring( + "A second order A-stable symplectic and symmetric implicit solver. Excellent for Hamiltonian systems and highly stiff equations.", "ImplicitMidpoint"; references = "@book{wanner1996solving, title={Solving ordinary differential equations II}, @@ -135,9 +146,10 @@ end extra_keyword_default = """ extrapolant = :linear, step_limiter! = trivial_limiter!, - """) + """ +) struct ImplicitMidpoint{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: - OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -146,20 +158,26 @@ struct ImplicitMidpoint{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: autodiff::AD end -function ImplicitMidpoint(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function ImplicitMidpoint(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), - extrapolant = :linear, step_limiter! = trivial_limiter!) + extrapolant = :linear, step_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - ImplicitMidpoint{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return ImplicitMidpoint{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac), typeof(step_limiter!)}(linsolve, + _unwrap_val(concrete_jac), typeof(step_limiter!), + }( + linsolve, nlsolve, precs, extrapolant, - step_limiter!, AD_choice) + step_limiter!, AD_choice + ) end @doc SDIRK_docstring( @@ -175,9 +193,10 @@ end extrapolant = :linear, controller = :PI, step_limiter! = trivial_limiter!, - """) + """ +) struct Trapezoid{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -187,26 +206,33 @@ struct Trapezoid{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: autodiff::AD end -function Trapezoid(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function Trapezoid(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), extrapolant = :linear, - controller = :PI, step_limiter! = trivial_limiter!) + controller = :PI, step_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - Trapezoid{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return Trapezoid{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac), typeof(step_limiter!)}(linsolve, + _unwrap_val(concrete_jac), typeof(step_limiter!), + }( + linsolve, nlsolve, precs, extrapolant, controller, step_limiter!, - AD_choice) + AD_choice + ) end -@doc SDIRK_docstring("A second order A-B-L-S-stable one-step ESDIRK method. Includes stiffness-robust error estimates for accurate adaptive timestepping, smoothed derivatives for highly stiff and oscillatory problems. Good for high tolerances (>1e-2) on stiff problems.", +@doc SDIRK_docstring( + "A second order A-B-L-S-stable one-step ESDIRK method. Includes stiffness-robust error estimates for accurate adaptive timestepping, smoothed derivatives for highly stiff and oscillatory problems. Good for high tolerances (>1e-2) on stiff problems.", "TRBDF2"; references = "@article{hosea1996analysis, title={Analysis and implementation of TR-BDF2}, @@ -228,9 +254,10 @@ end extrapolant = :linear, controller = :PI, step_limiter! = trivial_limiter!, - """) + """ +) struct TRBDF2{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -246,18 +273,24 @@ function TRBDF2(; concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), smooth_est = true, extrapolant = :linear, - controller = :PI, step_limiter! = trivial_limiter!) + controller = :PI, step_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - TRBDF2{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return TRBDF2{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac), typeof(step_limiter!)}(linsolve, nlsolve, precs, - smooth_est, extrapolant, controller, step_limiter!, AD_choice) + _unwrap_val(concrete_jac), typeof(step_limiter!), + }( + linsolve, nlsolve, precs, + smooth_est, extrapolant, controller, step_limiter!, AD_choice + ) end @truncate_stacktrace TRBDF2 -@doc SDIRK_docstring("SDIRK2: SDIRK Method An A-B-L stable 2nd order SDIRK method", +@doc SDIRK_docstring( + "SDIRK2: SDIRK Method An A-B-L stable 2nd order SDIRK method", "SDIRK2"; references = "@article{hindmarsh2005sundials, title={{SUNDIALS}: Suite of nonlinear and differential/algebraic equation solvers}, @@ -279,9 +312,10 @@ end extrapolant = :linear, controller = :PI, step_limiter! = trivial_limiter!, - """) + """ +) struct SDIRK2{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -297,19 +331,24 @@ function SDIRK2(; concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), smooth_est = true, extrapolant = :linear, - controller = :PI, step_limiter! = trivial_limiter!) + controller = :PI, step_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - SDIRK2{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return SDIRK2{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac), typeof(step_limiter!)}( + _unwrap_val(concrete_jac), typeof(step_limiter!), + }( linsolve, nlsolve, precs, smooth_est, extrapolant, controller, step_limiter!, - AD_choice) + AD_choice + ) end -@doc SDIRK_docstring("Description TBD", +@doc SDIRK_docstring( + "Description TBD", "SDIRK22"; references = "@techreport{kennedy2016diagonally, title={Diagonally implicit Runge-Kutta methods for ordinary differential equations. A review}, @@ -326,9 +365,10 @@ end extrapolant = :linear, controller = :PI, step_limiter! = trivial_limiter!, - """) + """ +) struct SDIRK22{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -343,26 +383,31 @@ function SDIRK22(; concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), extrapolant = :linear, - controller = :PI, step_limiter! = trivial_limiter!) + controller = :PI, step_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - Trapezoid{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return Trapezoid{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac), typeof(step_limiter!)}(linsolve, + _unwrap_val(concrete_jac), typeof(step_limiter!), + }( + linsolve, nlsolve, precs, extrapolant, controller, step_limiter!, - AD_choice) + AD_choice + ) end @doc SDIRK_docstring( """SSPSDIRK is an SSP-optimized SDIRK method, -so it's an implicit SDIRK method for handling stiffness but if the `dt` is below the SSP `coefficient * dt`, -then the SSP property of the SSP integrators (the other page) is satisfied. -As such this is a method which is expected to be good on advection-dominated cases where an explicit SSP integrator would be used, -but where reaction equations are sufficient stiff to justify implicit integration.""", + so it's an implicit SDIRK method for handling stiffness but if the `dt` is below the SSP `coefficient * dt`, + then the SSP property of the SSP integrators (the other page) is satisfied. + As such this is a method which is expected to be good on advection-dominated cases where an explicit SSP integrator would be used, + but where reaction equations are sufficient stiff to justify implicit integration.""", "SSPSDIRK2"; references = "@article{ketcheson2009optimal, title={Optimal implicit strong stability preserving Runge--Kutta methods}, @@ -382,9 +427,10 @@ but where reaction equations are sufficient stiff to justify implicit integratio smooth_est = true, extrapolant = :constant, controller = :PI, - """) + """ +) struct SSPSDIRK2{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} # Not adaptive + OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} # Not adaptive linsolve::F nlsolve::F2 precs::P @@ -394,21 +440,28 @@ struct SSPSDIRK2{CS, AD, F, F2, P, FDT, ST, CJ} <: autodiff::AD end -function SSPSDIRK2(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function SSPSDIRK2(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), smooth_est = true, extrapolant = :constant, - controller = :PI) + controller = :PI + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - SSPSDIRK2{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return SSPSDIRK2{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, nlsolve, precs, smooth_est, extrapolant, - controller, AD_choice) + _unwrap_val(concrete_jac), + }( + linsolve, nlsolve, precs, smooth_est, extrapolant, + controller, AD_choice + ) end -@doc SDIRK_docstring("An A-L stable stiffly-accurate 3rd order ESDIRK method.", +@doc SDIRK_docstring( + "An A-L stable stiffly-accurate 3rd order ESDIRK method.", "Kvaerno3"; references = "@article{kvaerno2004singly, title={Singly diagonally implicit Runge--Kutta methods with an explicit first stage}, @@ -430,9 +483,10 @@ end extrapolant = :linear, controller = :PI, step_limiter! = trivial_limiter!, - """) + """ +) struct Kvaerno3{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -442,18 +496,24 @@ struct Kvaerno3{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: step_limiter!::StepLimiter autodiff::AD end -function Kvaerno3(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function Kvaerno3(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), smooth_est = true, extrapolant = :linear, - controller = :PI, step_limiter! = trivial_limiter!) + controller = :PI, step_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - Kvaerno3{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return Kvaerno3{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac), typeof(step_limiter!)}(linsolve, nlsolve, precs, - smooth_est, extrapolant, controller, step_limiter!, AD_choice) + _unwrap_val(concrete_jac), typeof(step_limiter!), + }( + linsolve, nlsolve, precs, + smooth_est, extrapolant, controller, step_limiter!, AD_choice + ) end @doc SDIRK_docstring( @@ -475,9 +535,10 @@ end extrapolant = :linear, controller = :PI, step_limiter! = trivial_limiter!, - """) + """ +) struct KenCarp3{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -487,21 +548,28 @@ struct KenCarp3{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: step_limiter!::StepLimiter autodiff::AD end -function KenCarp3(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function KenCarp3(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), smooth_est = true, extrapolant = :linear, - controller = :PI, step_limiter! = trivial_limiter!) + controller = :PI, step_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - KenCarp3{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return KenCarp3{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac), typeof(step_limiter!)}(linsolve, nlsolve, precs, - smooth_est, extrapolant, controller, step_limiter!, AD_choice) + _unwrap_val(concrete_jac), typeof(step_limiter!), + }( + linsolve, nlsolve, precs, + smooth_est, extrapolant, controller, step_limiter!, AD_choice + ) end -@doc SDIRK_docstring("Third order method.", +@doc SDIRK_docstring( + "Third order method.", "CFNLIRK3"; references = "@article{calvo2001linearly, title={Linearly implicit Runge--Kutta methods for advection--reaction--diffusion equations}, @@ -517,32 +585,40 @@ end """, extra_keyword_default = """ extrapolant = :linear, - """) + """ +) struct CFNLIRK3{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P extrapolant::Symbol autodiff::AD end -function CFNLIRK3(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function CFNLIRK3(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), - extrapolant = :linear) + extrapolant = :linear + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - CFNLIRK3{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return CFNLIRK3{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, + _unwrap_val(concrete_jac), + }( + linsolve, nlsolve, precs, extrapolant, - AD_choice) + AD_choice + ) end -@doc SDIRK_docstring("An A-L stable 4th order SDIRK method.", +@doc SDIRK_docstring( + "An A-L stable 4th order SDIRK method.", "Cash4"; references = "@article{hindmarsh2005sundials, title={{SUNDIALS}: Suite of nonlinear and differential/algebraic equation solvers}, @@ -564,9 +640,10 @@ end extrapolant = :linear, controller = :PI, embedding = 3, - """) + """ +) struct Cash4{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -581,12 +658,14 @@ function Cash4(; concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), smooth_est = true, extrapolant = :linear, - controller = :PI, embedding = 3) + controller = :PI, embedding = 3 + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - Cash4{ + return Cash4{ _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), - typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac)}( + typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), + }( linsolve, nlsolve, precs, @@ -594,10 +673,12 @@ function Cash4(; extrapolant, embedding, controller, - AD_choice) + AD_choice + ) end -@doc SDIRK_docstring("Method of order 4.", +@doc SDIRK_docstring( + "Method of order 4.", "SFSDIRK4"; references = "@article{ferracina2008strong, title={Strong stability of singly-diagonally-implicit Runge--Kutta methods}, @@ -613,32 +694,40 @@ end """, extra_keyword_default = """ extrapolant = :linear, - """) + """ +) struct SFSDIRK4{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P extrapolant::Symbol autodiff::AD end -function SFSDIRK4(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function SFSDIRK4(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), - extrapolant = :linear) + extrapolant = :linear + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - SFSDIRK4{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return SFSDIRK4{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, + _unwrap_val(concrete_jac), + }( + linsolve, nlsolve, precs, extrapolant, - AD_choice) + AD_choice + ) end -@doc SDIRK_docstring("Method of order 5.", +@doc SDIRK_docstring( + "Method of order 5.", "SFSDIRK5"; references = "@article{ferracina2008strong, title={Strong stability of singly-diagonally-implicit Runge--Kutta methods}, @@ -654,9 +743,10 @@ end """, extra_keyword_default = """ extrapolant = :linear, - """) + """ +) struct SFSDIRK5{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -664,23 +754,30 @@ struct SFSDIRK5{CS, AD, F, F2, P, FDT, ST, CJ} <: autodiff::AD end -function SFSDIRK5(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function SFSDIRK5(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), - extrapolant = :linear) + extrapolant = :linear + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - SFSDIRK5{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return SFSDIRK5{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, + _unwrap_val(concrete_jac), + }( + linsolve, nlsolve, precs, extrapolant, - AD_choice) + AD_choice + ) end -@doc SDIRK_docstring("Method of order 6.", +@doc SDIRK_docstring( + "Method of order 6.", "SFSDIRK6"; references = "@article{ferracina2008strong, title={Strong stability of singly-diagonally-implicit Runge--Kutta methods}, @@ -696,9 +793,10 @@ end """, extra_keyword_default = """ extrapolant = :linear, - """) + """ +) struct SFSDIRK6{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -706,23 +804,30 @@ struct SFSDIRK6{CS, AD, F, F2, P, FDT, ST, CJ} <: autodiff::AD end -function SFSDIRK6(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function SFSDIRK6(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), - extrapolant = :linear) + extrapolant = :linear + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - SFSDIRK6{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return SFSDIRK6{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, + _unwrap_val(concrete_jac), + }( + linsolve, nlsolve, precs, extrapolant, - AD_choice) + AD_choice + ) end -@doc SDIRK_docstring("Method of order 7.", +@doc SDIRK_docstring( + "Method of order 7.", "SFSDIRK7"; references = "@article{ferracina2008strong, title={Strong stability of singly-diagonally-implicit Runge--Kutta methods}, @@ -738,9 +843,10 @@ end """, extra_keyword_default = """ extrapolant = :linear, - """) + """ +) struct SFSDIRK7{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -748,23 +854,30 @@ struct SFSDIRK7{CS, AD, F, F2, P, FDT, ST, CJ} <: autodiff::AD end -function SFSDIRK7(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function SFSDIRK7(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), - extrapolant = :linear) + extrapolant = :linear + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - SFSDIRK7{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return SFSDIRK7{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, + _unwrap_val(concrete_jac), + }( + linsolve, nlsolve, precs, extrapolant, - AD_choice) + AD_choice + ) end -@doc SDIRK_docstring("Method of order 8.", +@doc SDIRK_docstring( + "Method of order 8.", "SFSDIRK8"; references = "@article{ferracina2008strong, title={Strong stability of singly-diagonally-implicit Runge--Kutta methods}, @@ -780,9 +893,10 @@ end """, extra_keyword_default = """ extrapolant = :linear, - """) + """ +) struct SFSDIRK8{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -790,23 +904,30 @@ struct SFSDIRK8{CS, AD, F, F2, P, FDT, ST, CJ} <: autodiff::AD end -function SFSDIRK8(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function SFSDIRK8(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), - extrapolant = :linear) + extrapolant = :linear + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - SFSDIRK8{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return SFSDIRK8{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, + _unwrap_val(concrete_jac), + }( + linsolve, nlsolve, precs, extrapolant, - AD_choice) + AD_choice + ) end -@doc SDIRK_docstring("An A-L stable 4th order SDIRK method.", +@doc SDIRK_docstring( + "An A-L stable 4th order SDIRK method.", "Hairer4"; references = "E. Hairer, G. Wanner, Solving ordinary differential equations II, stiff and differential-algebraic problems. Computational mathematics (2nd revised ed.), @@ -820,9 +941,10 @@ end smooth_est = true, extrapolant = :linear, controller = :PI, - """) + """ +) struct Hairer4{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -836,16 +958,22 @@ function Hairer4(; concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), smooth_est = true, extrapolant = :linear, - controller = :PI) + controller = :PI + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - Hairer4{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return Hairer4{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, nlsolve, precs, smooth_est, extrapolant, - controller, AD_choice) + _unwrap_val(concrete_jac), + }( + linsolve, nlsolve, precs, smooth_est, extrapolant, + controller, AD_choice + ) end -@doc SDIRK_docstring("An A-L stable 4th order SDIRK method.", +@doc SDIRK_docstring( + "An A-L stable 4th order SDIRK method.", "Hairer42"; references = "E. Hairer, G. Wanner, Solving ordinary differential equations II, stiff and differential-algebraic problems. Computational mathematics (2nd revised ed.), @@ -859,9 +987,10 @@ end smooth_est = true, extrapolant = :linear, controller = :PI, - """) + """ +) struct Hairer42{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -870,21 +999,28 @@ struct Hairer42{CS, AD, F, F2, P, FDT, ST, CJ} <: controller::Symbol autodiff::AD end -function Hairer42(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function Hairer42(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), smooth_est = true, extrapolant = :linear, - controller = :PI) + controller = :PI + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - Hairer42{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return Hairer42{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, nlsolve, precs, smooth_est, extrapolant, - controller, AD_choice) + _unwrap_val(concrete_jac), + }( + linsolve, nlsolve, precs, smooth_est, extrapolant, + controller, AD_choice + ) end -@doc SDIRK_docstring("An A-L stable stiffly-accurate 4th order ESDIRK method.", +@doc SDIRK_docstring( + "An A-L stable stiffly-accurate 4th order ESDIRK method.", "Kvaerno4"; references = "@article{kvaerno2004singly, title={Singly diagonally implicit Runge--Kutta methods with an explicit first stage}, @@ -906,9 +1042,10 @@ end extrapolant = :linear, controller = :PI, step_limiter! = trivial_limiter!, - """) + """ +) struct Kvaerno4{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -918,21 +1055,28 @@ struct Kvaerno4{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: step_limiter!::StepLimiter autodiff::AD end -function Kvaerno4(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function Kvaerno4(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), smooth_est = true, extrapolant = :linear, - controller = :PI, step_limiter! = trivial_limiter!) + controller = :PI, step_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - Kvaerno4{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return Kvaerno4{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac), typeof(step_limiter!)}(linsolve, nlsolve, precs, - smooth_est, extrapolant, controller, step_limiter!, AD_choice) + _unwrap_val(concrete_jac), typeof(step_limiter!), + }( + linsolve, nlsolve, precs, + smooth_est, extrapolant, controller, step_limiter!, AD_choice + ) end -@doc SDIRK_docstring("An A-L stable stiffly-accurate 5th order ESDIRK method.", +@doc SDIRK_docstring( + "An A-L stable stiffly-accurate 5th order ESDIRK method.", "Kvaerno5"; references = "@article{kvaerno2004singly, title={Singly diagonally implicit Runge--Kutta methods with an explicit first stage}, @@ -954,9 +1098,10 @@ end extrapolant = :linear, controller = :PI, step_limiter! = trivial_limiter!, - """) + """ +) struct Kvaerno5{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -966,18 +1111,24 @@ struct Kvaerno5{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: step_limiter!::StepLimiter autodiff::AD end -function Kvaerno5(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function Kvaerno5(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), smooth_est = true, extrapolant = :linear, - controller = :PI, step_limiter! = trivial_limiter!) + controller = :PI, step_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - Kvaerno5{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return Kvaerno5{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac), typeof(step_limiter!)}(linsolve, nlsolve, precs, - smooth_est, extrapolant, controller, step_limiter!, AD_choice) + _unwrap_val(concrete_jac), typeof(step_limiter!), + }( + linsolve, nlsolve, precs, + smooth_est, extrapolant, controller, step_limiter!, AD_choice + ) end @doc SDIRK_docstring( @@ -999,9 +1150,10 @@ end extrapolant = :linear, controller = :PI, step_limiter! = trivial_limiter!, - """) + """ +) struct KenCarp4{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -1011,18 +1163,24 @@ struct KenCarp4{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: step_limiter!::StepLimiter autodiff::AD end -function KenCarp4(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function KenCarp4(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), smooth_est = true, extrapolant = :linear, - controller = :PI, step_limiter! = trivial_limiter!) + controller = :PI, step_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - KenCarp4{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return KenCarp4{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac), typeof(step_limiter!)}(linsolve, nlsolve, precs, - smooth_est, extrapolant, controller, step_limiter!, AD_choice) + _unwrap_val(concrete_jac), typeof(step_limiter!), + }( + linsolve, nlsolve, precs, + smooth_est, extrapolant, controller, step_limiter!, AD_choice + ) end @truncate_stacktrace KenCarp4 @@ -1047,9 +1205,10 @@ end smooth_est = true, extrapolant = :linear, controller = :PI, - """) + """ +) struct KenCarp47{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -1058,18 +1217,24 @@ struct KenCarp47{CS, AD, F, F2, P, FDT, ST, CJ} <: controller::Symbol autodiff::AD end -function KenCarp47(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function KenCarp47(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), smooth_est = true, extrapolant = :linear, - controller = :PI) + controller = :PI + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - KenCarp47{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return KenCarp47{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, nlsolve, precs, smooth_est, extrapolant, - controller, AD_choice) + _unwrap_val(concrete_jac), + }( + linsolve, nlsolve, precs, smooth_est, extrapolant, + controller, AD_choice + ) end @doc SDIRK_docstring( @@ -1091,9 +1256,10 @@ end extrapolant = :linear, controller = :PI, step_limiter! = trivial_limiter!, - """) + """ +) struct KenCarp5{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -1103,18 +1269,24 @@ struct KenCarp5{CS, AD, F, F2, P, FDT, ST, CJ, StepLimiter} <: step_limiter!::StepLimiter autodiff::AD end -function KenCarp5(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function KenCarp5(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), smooth_est = true, extrapolant = :linear, - controller = :PI, step_limiter! = trivial_limiter!) + controller = :PI, step_limiter! = trivial_limiter! + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - KenCarp5{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return KenCarp5{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac), typeof(step_limiter!)}(linsolve, nlsolve, precs, - smooth_est, extrapolant, controller, step_limiter!, AD_choice) + _unwrap_val(concrete_jac), typeof(step_limiter!), + }( + linsolve, nlsolve, precs, + smooth_est, extrapolant, controller, step_limiter!, AD_choice + ) end @doc SDIRK_docstring( @@ -1137,9 +1309,10 @@ end smooth_est = true, extrapolant = :linear, controller = :PI, - """) + """ +) struct KenCarp58{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -1148,18 +1321,24 @@ struct KenCarp58{CS, AD, F, F2, P, FDT, ST, CJ} <: controller::Symbol autodiff::AD end -function KenCarp58(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function KenCarp58(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), smooth_est = true, extrapolant = :linear, - controller = :PI) + controller = :PI + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - KenCarp58{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return KenCarp58{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, nlsolve, precs, smooth_est, extrapolant, - controller, AD_choice) + _unwrap_val(concrete_jac), + }( + linsolve, nlsolve, precs, smooth_est, extrapolant, + controller, AD_choice + ) end # `smooth_est` is not necessary, as the embedded method is also L-stable @@ -1183,9 +1362,10 @@ but are still being fully evaluated in context.", extra_keyword_default = """ extrapolant = :linear, controller = :PI, - """) + """ +) struct ESDIRK54I8L2SA{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -1193,17 +1373,23 @@ struct ESDIRK54I8L2SA{CS, AD, F, F2, P, FDT, ST, CJ} <: controller::Symbol autodiff::AD end -function ESDIRK54I8L2SA(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function ESDIRK54I8L2SA(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), - extrapolant = :linear, controller = :PI) + extrapolant = :linear, controller = :PI + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - ESDIRK54I8L2SA{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return ESDIRK54I8L2SA{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, nlsolve, precs, extrapolant, - controller, AD_choice) + _unwrap_val(concrete_jac), + }( + linsolve, nlsolve, precs, extrapolant, + controller, AD_choice + ) end @doc SDIRK_docstring( @@ -1226,9 +1412,10 @@ but are still being fully evaluated in context.", extra_keyword_default = """ extrapolant = :linear, controller = :PI, - """) + """ +) struct ESDIRK436L2SA2{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -1236,17 +1423,23 @@ struct ESDIRK436L2SA2{CS, AD, F, F2, P, FDT, ST, CJ} <: controller::Symbol autodiff::AD end -function ESDIRK436L2SA2(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function ESDIRK436L2SA2(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), - extrapolant = :linear, controller = :PI) + extrapolant = :linear, controller = :PI + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - ESDIRK436L2SA2{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return ESDIRK436L2SA2{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, nlsolve, precs, extrapolant, - controller, AD_choice) + _unwrap_val(concrete_jac), + }( + linsolve, nlsolve, precs, extrapolant, + controller, AD_choice + ) end @doc SDIRK_docstring( @@ -1269,9 +1462,10 @@ but are still being fully evaluated in context.", extra_keyword_default = """ extrapolant = :linear, controller = :PI, - """) + """ +) struct ESDIRK437L2SA{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -1279,17 +1473,23 @@ struct ESDIRK437L2SA{CS, AD, F, F2, P, FDT, ST, CJ} <: controller::Symbol autodiff::AD end -function ESDIRK437L2SA(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function ESDIRK437L2SA(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), - extrapolant = :linear, controller = :PI) + extrapolant = :linear, controller = :PI + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - ESDIRK437L2SA{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return ESDIRK437L2SA{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, nlsolve, precs, extrapolant, - controller, AD_choice) + _unwrap_val(concrete_jac), + }( + linsolve, nlsolve, precs, extrapolant, + controller, AD_choice + ) end @doc SDIRK_docstring( @@ -1312,9 +1512,10 @@ but are still being fully evaluated in context.", extra_keyword_default = """ extrapolant = :linear, controller = :PI, - """) + """ +) struct ESDIRK547L2SA2{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -1322,17 +1523,23 @@ struct ESDIRK547L2SA2{CS, AD, F, F2, P, FDT, ST, CJ} <: controller::Symbol autodiff::AD end -function ESDIRK547L2SA2(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function ESDIRK547L2SA2(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), - extrapolant = :linear, controller = :PI) + extrapolant = :linear, controller = :PI + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - ESDIRK547L2SA2{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return ESDIRK547L2SA2{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, nlsolve, precs, extrapolant, - controller, AD_choice) + _unwrap_val(concrete_jac), + }( + linsolve, nlsolve, precs, extrapolant, + controller, AD_choice + ) end @doc SDIRK_docstring( @@ -1357,9 +1564,10 @@ Check issue https://github.com/SciML/OrdinaryDiffEq.jl/issues/1933 for more deta extra_keyword_default = """ extrapolant = :linear, controller = :PI, - """) + """ +) struct ESDIRK659L2SA{CS, AD, F, F2, P, FDT, ST, CJ} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -1367,15 +1575,21 @@ struct ESDIRK659L2SA{CS, AD, F, F2, P, FDT, ST, CJ} <: controller::Symbol autodiff::AD end -function ESDIRK659L2SA(; chunk_size = Val{0}(), autodiff = AutoForwardDiff(), +function ESDIRK659L2SA(; + chunk_size = Val{0}(), autodiff = AutoForwardDiff(), standardtag = Val{true}(), concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), - extrapolant = :linear, controller = :PI) + extrapolant = :linear, controller = :PI + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - ESDIRK659L2SA{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), + return ESDIRK659L2SA{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), - _unwrap_val(concrete_jac)}(linsolve, nlsolve, precs, extrapolant, - controller, AD_choice) + _unwrap_val(concrete_jac), + }( + linsolve, nlsolve, precs, extrapolant, + controller, AD_choice + ) end diff --git a/lib/OrdinaryDiffEqSDIRK/src/kencarp_kvaerno_caches.jl b/lib/OrdinaryDiffEqSDIRK/src/kencarp_kvaerno_caches.jl index 4a09a83fed..1f4abf5903 100644 --- a/lib/OrdinaryDiffEqSDIRK/src/kencarp_kvaerno_caches.jl +++ b/lib/OrdinaryDiffEqSDIRK/src/kencarp_kvaerno_caches.jl @@ -3,19 +3,23 @@ mutable struct Kvaerno3ConstantCache{Tab, N} <: SDIRKConstantCache tab::Tab end -function alg_cache(alg::Kvaerno3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Kvaerno3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = Kvaerno3Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, 2tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - Kvaerno3ConstantCache(nlsolver, tab) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return Kvaerno3ConstantCache(nlsolver, tab) end @cache mutable struct Kvaerno3Cache{uType, rateType, uNoUnitsType, Tab, N, StepLimiter} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -29,14 +33,18 @@ end step_limiter!::StepLimiter end -function alg_cache(alg::Kvaerno3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Kvaerno3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = Kvaerno3Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, 2tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) z₁ = zero(u) @@ -46,8 +54,9 @@ function alg_cache(alg::Kvaerno3, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - Kvaerno3Cache( - u, uprev, fsalfirst, z₁, z₂, z₃, z₄, atmp, nlsolver, tab, alg.step_limiter!) + return Kvaerno3Cache( + u, uprev, fsalfirst, z₁, z₂, z₃, z₄, atmp, nlsolver, tab, alg.step_limiter! + ) end @cache mutable struct KenCarp3ConstantCache{N, Tab} <: SDIRKConstantCache @@ -55,21 +64,26 @@ end tab::Tab end -function alg_cache(alg::KenCarp3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::KenCarp3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = KenCarp3Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.c3 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) - KenCarp3ConstantCache(nlsolver, tab) + return KenCarp3ConstantCache(nlsolver, tab) end @cache mutable struct KenCarp3Cache{ - uType, rateType, uNoUnitsType, N, Tab, kType, StepLimiter} <: - SDIRKMutableCache + uType, rateType, uNoUnitsType, N, Tab, kType, StepLimiter, + } <: + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -87,14 +101,18 @@ end step_limiter!::StepLimiter end -function alg_cache(alg::KenCarp3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::KenCarp3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = KenCarp3Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.c3 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) if f isa SplitFunction @@ -117,8 +135,10 @@ function alg_cache(alg::KenCarp3, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - KenCarp3Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, k1, k2, - k3, k4, atmp, nlsolver, tab, alg.step_limiter!) + return KenCarp3Cache( + u, uprev, fsalfirst, z₁, z₂, z₃, z₄, k1, k2, + k3, k4, atmp, nlsolver, tab, alg.step_limiter! + ) end @cache mutable struct CFNLIRK3ConstantCache{N, Tab} <: SDIRKConstantCache @@ -126,20 +146,24 @@ end tab::Tab end -function alg_cache(alg::CFNLIRK3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CFNLIRK3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = CFNLIRK3Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.c3 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) - CFNLIRK3ConstantCache(nlsolver, tab) + return CFNLIRK3ConstantCache(nlsolver, tab) end @cache mutable struct CFNLIRK3Cache{uType, rateType, uNoUnitsType, N, Tab, kType} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -156,14 +180,18 @@ end tab::Tab end -function alg_cache(alg::CFNLIRK3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CFNLIRK3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = CFNLIRK3Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.c3 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) k1 = zero(u) @@ -178,7 +206,7 @@ function alg_cache(alg::CFNLIRK3, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - CFNLIRK3Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, k1, k2, k3, k4, atmp, nlsolver, tab) + return CFNLIRK3Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, k1, k2, k3, k4, atmp, nlsolver, tab) end @cache mutable struct Kvaerno4ConstantCache{N, Tab} <: SDIRKConstantCache @@ -186,19 +214,23 @@ end tab::Tab end -function alg_cache(alg::Kvaerno4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Kvaerno4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = Kvaerno4Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.c3 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - Kvaerno4ConstantCache(nlsolver, tab) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return Kvaerno4ConstantCache(nlsolver, tab) end @cache mutable struct Kvaerno4Cache{uType, rateType, uNoUnitsType, N, Tab, StepLimiter} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -213,14 +245,18 @@ end step_limiter!::StepLimiter end -function alg_cache(alg::Kvaerno4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Kvaerno4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = Kvaerno4Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.c3 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) z₁ = zero(u) @@ -231,8 +267,9 @@ function alg_cache(alg::Kvaerno4, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - Kvaerno4Cache( - u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, atmp, nlsolver, tab, alg.step_limiter!) + return Kvaerno4Cache( + u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, atmp, nlsolver, tab, alg.step_limiter! + ) end @cache mutable struct KenCarp4ConstantCache{N, Tab} <: SDIRKConstantCache @@ -240,20 +277,25 @@ end tab::Tab end -function alg_cache(alg::KenCarp4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::KenCarp4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = KenCarp4Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.c3 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - KenCarp4ConstantCache(nlsolver, tab) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return KenCarp4ConstantCache(nlsolver, tab) end @cache mutable struct KenCarp4Cache{ - uType, rateType, uNoUnitsType, N, Tab, kType, StepLimiter} <: - SDIRKMutableCache + uType, rateType, uNoUnitsType, N, Tab, kType, StepLimiter, + } <: + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -277,14 +319,18 @@ end @truncate_stacktrace KenCarp4Cache 1 -function alg_cache(alg::KenCarp4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::KenCarp4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = KenCarp4Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.c3 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) if f isa SplitFunction @@ -313,9 +359,10 @@ function alg_cache(alg::KenCarp4, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - KenCarp4Cache( + return KenCarp4Cache( u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, k1, k2, k3, k4, k5, k6, atmp, - nlsolver, tab, alg.step_limiter!) + nlsolver, tab, alg.step_limiter! + ) end @cache mutable struct Kvaerno5ConstantCache{N, Tab} <: SDIRKConstantCache @@ -323,20 +370,24 @@ end tab::Tab end -function alg_cache(alg::Kvaerno5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Kvaerno5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = Kvaerno5Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.c3 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) - Kvaerno5ConstantCache(nlsolver, tab) + return Kvaerno5ConstantCache(nlsolver, tab) end @cache mutable struct Kvaerno5Cache{uType, rateType, uNoUnitsType, N, Tab, StepLimiter} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -353,14 +404,18 @@ end step_limiter!::StepLimiter end -function alg_cache(alg::Kvaerno5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Kvaerno5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = Kvaerno5Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.c3 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) z₁ = zero(u) @@ -373,8 +428,10 @@ function alg_cache(alg::Kvaerno5, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - Kvaerno5Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, - z₇, atmp, nlsolver, tab, alg.step_limiter!) + return Kvaerno5Cache( + u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, + z₇, atmp, nlsolver, tab, alg.step_limiter! + ) end @cache mutable struct KenCarp5ConstantCache{N, Tab} <: SDIRKConstantCache @@ -382,21 +439,26 @@ end tab::Tab end -function alg_cache(alg::KenCarp5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::KenCarp5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = KenCarp5Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.c3 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) - KenCarp5ConstantCache(nlsolver, tab) + return KenCarp5ConstantCache(nlsolver, tab) end @cache mutable struct KenCarp5Cache{ - uType, rateType, uNoUnitsType, N, Tab, kType, StepLimiter} <: - SDIRKMutableCache + uType, rateType, uNoUnitsType, N, Tab, kType, StepLimiter, + } <: + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -422,14 +484,18 @@ end step_limiter!::StepLimiter end -function alg_cache(alg::KenCarp5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::KenCarp5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = KenCarp5Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.c3 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) if f isa SplitFunction @@ -463,8 +529,10 @@ function alg_cache(alg::KenCarp5, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - KenCarp5Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, z₇, z₈, - k1, k2, k3, k4, k5, k6, k7, k8, atmp, nlsolver, tab, alg.step_limiter!) + return KenCarp5Cache( + u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, z₇, z₈, + k1, k2, k3, k4, k5, k6, k7, k8, atmp, nlsolver, tab, alg.step_limiter! + ) end @cache mutable struct KenCarp47ConstantCache{N, Tab} <: SDIRKConstantCache @@ -472,20 +540,24 @@ end tab::Tab end -function alg_cache(alg::KenCarp47, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::KenCarp47, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = KenCarp47Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.c3 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) - KenCarp47ConstantCache(nlsolver, tab) + return KenCarp47ConstantCache(nlsolver, tab) end @cache mutable struct KenCarp47Cache{uType, rateType, uNoUnitsType, N, Tab, kType} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -509,14 +581,18 @@ end end @truncate_stacktrace KenCarp47Cache 1 -function alg_cache(alg::KenCarp47, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::KenCarp47, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = KenCarp47Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.c3 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) if f isa SplitFunction @@ -547,8 +623,10 @@ function alg_cache(alg::KenCarp47, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - KenCarp47Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, z₇, - k1, k2, k3, k4, k5, k6, k7, atmp, nlsolver, tab) + return KenCarp47Cache( + u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, z₇, + k1, k2, k3, k4, k5, k6, k7, atmp, nlsolver, tab + ) end @cache mutable struct KenCarp58ConstantCache{N, Tab} <: SDIRKConstantCache @@ -556,20 +634,24 @@ end tab::Tab end -function alg_cache(alg::KenCarp58, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::KenCarp58, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = KenCarp58Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.c3 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) - KenCarp58ConstantCache(nlsolver, tab) + return KenCarp58ConstantCache(nlsolver, tab) end @cache mutable struct KenCarp58Cache{uType, rateType, uNoUnitsType, N, Tab, kType} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -596,14 +678,18 @@ end @truncate_stacktrace KenCarp58Cache 1 -function alg_cache(alg::KenCarp58, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::KenCarp58, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = KenCarp58Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.c3 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) if f isa SplitFunction @@ -637,6 +723,8 @@ function alg_cache(alg::KenCarp58, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - KenCarp58Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, z₇, z₈, - k1, k2, k3, k4, k5, k6, k7, k8, atmp, nlsolver, tab) + return KenCarp58Cache( + u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, z₇, z₈, + k1, k2, k3, k4, k5, k6, k7, k8, atmp, nlsolver, tab + ) end diff --git a/lib/OrdinaryDiffEqSDIRK/src/kencarp_kvaerno_perform_step.jl b/lib/OrdinaryDiffEqSDIRK/src/kencarp_kvaerno_perform_step.jl index 0491e70048..c4a8110d3e 100644 --- a/lib/OrdinaryDiffEqSDIRK/src/kencarp_kvaerno_perform_step.jl +++ b/lib/OrdinaryDiffEqSDIRK/src/kencarp_kvaerno_perform_step.jl @@ -1,5 +1,7 @@ -@muladd function perform_step!(integrator, cache::Kvaerno3ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Kvaerno3ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator nlsolver = cache.nlsolver (; γ, a31, a32, a41, a42, a43, btilde1, btilde2, btilde3, btilde4, c3, α31, α32) = cache.tab @@ -52,8 +54,10 @@ else est = tmp end - atmp = calculate_residuals(est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -76,7 +80,7 @@ end markfirststage!(nlsolver) # FSAL Step 1 - @.. broadcast=false z₁=dt * integrator.fsalfirst + @.. broadcast = false z₁ = dt * integrator.fsalfirst ##### Step 2 @@ -84,7 +88,7 @@ end copyto!(z₂, z₁) nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + γ * z₁ + @.. broadcast = false tmp = uprev + γ * z₁ nlsolver.c = γ z₂ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -93,10 +97,10 @@ end ################################## Solve Step 3 # Guess is from Hermite derivative on z₁ and z₂ - @.. broadcast=false z₃=α31 * z₁ + α32 * z₂ + @.. broadcast = false z₃ = α31 * z₁ + α32 * z₂ nlsolver.z = z₃ - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ nlsolver.c = c3 z₃ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -104,45 +108,51 @@ end ################################## Solve Step 4 if cache isa Kvaerno3Cache - @.. broadcast=false z₄=a31 * z₁ + a32 * z₂ + γ * z₃ # use yhat as prediction + @.. broadcast = false z₄ = a31 * z₁ + a32 * z₂ + γ * z₃ # use yhat as prediction elseif cache isa KenCarp3Cache (; α41, α42) = cache.tab - @.. broadcast=false z₄=α41 * z₁ + α42 * z₂ + @.. broadcast = false z₄ = α41 * z₁ + α42 * z₂ end nlsolver.z = z₄ - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ nlsolver.c = 1 z₄ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + γ * z₄ + @.. broadcast = false u = tmp + γ * z₄ step_limiter!(u, integrator, p, t + dt) ################################### Finalize if integrator.opts.adaptive - @.. broadcast=false tmp=btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + @.. broadcast = false tmp = btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ if isnewton(nlsolver) && alg.smooth_est # From Shampine est = nlsolver.cache.dz - linres = dolinsolve(integrator, nlsolver.cache.linsolve; b = _vec(tmp), - linu = _vec(est)) + linres = dolinsolve( + integrator, nlsolver.cache.linsolve; b = _vec(tmp), + linu = _vec(est) + ) integrator.stats.nsolve += 1 else est = tmp end - calculate_residuals!(atmp, est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end - @.. broadcast=false integrator.fsallast=z₄ / dt + @.. broadcast = false integrator.fsallast = z₄ / dt end -@muladd function perform_step!(integrator, cache::KenCarp3ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::KenCarp3ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, p) = integrator nlsolver = cache.nlsolver (; γ, a31, a32, a41, a42, a43, btilde1, btilde2, btilde3, btilde4, c3, α31, α32, ea21, ea31, ea32, ea41, ea42, ea43, eb1, eb2, eb3, eb4, ebtilde1, ebtilde2, ebtilde3, ebtilde4) = cache.tab @@ -245,7 +255,7 @@ end if integrator.opts.adaptive if integrator.f isa SplitFunction tmp = btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + - ebtilde1 * k1 + ebtilde2 * k2 + ebtilde3 * k3 + ebtilde4 * k4 + ebtilde1 * k1 + ebtilde2 * k2 + ebtilde3 * k3 + ebtilde4 * k4 else tmp = btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ end @@ -255,8 +265,10 @@ end else est = tmp end - atmp = calculate_residuals(est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -301,7 +313,7 @@ end z₁ .*= dt else # FSAL Step 1 - @.. broadcast=false z₁=dt * integrator.fsalfirst + @.. broadcast = false z₁ = dt * integrator.fsalfirst end ##### Step 2 @@ -310,12 +322,12 @@ end copyto!(z₂, z₁) nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + γ * z₁ + @.. broadcast = false tmp = uprev + γ * z₁ if integrator.f isa SplitFunction # This assumes the implicit part is cheaper than the explicit part - @.. broadcast=false k1=dt * integrator.fsalfirst - z₁ - @.. broadcast=false tmp+=ea21 * k1 + @.. broadcast = false k1 = dt * integrator.fsalfirst - z₁ + @.. broadcast = false tmp += ea21 * k1 end nlsolver.c = 2γ @@ -327,15 +339,15 @@ end if integrator.f isa SplitFunction z₃ .= z₂ - @.. broadcast=false u=tmp + γ * z₂ + @.. broadcast = false u = tmp + γ * z₂ f2(k2, u, p, t + 2γdt) k2 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + ea31 * k1 + ea32 * k2 + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ + ea31 * k1 + ea32 * k2 else # Guess is from Hermite derivative on z₁ and z₂ - @.. broadcast=false z₃=α31 * z₁ + α32 * z₂ - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false z₃ = α31 * z₁ + α32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ end nlsolver.z = z₃ @@ -347,16 +359,16 @@ end if integrator.f isa SplitFunction z₄ .= z₂ - @.. broadcast=false u=tmp + γ * z₃ + @.. broadcast = false u = tmp + γ * z₃ f2(k3, u, p, t + c3 * dt) k3 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + ea41 * k1 + - ea42 * k2 + ea43 * k3 + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + ea41 * k1 + + ea42 * k2 + ea43 * k3 else (; α41, α42) = cache.tab - @.. broadcast=false z₄=α41 * z₁ + α42 * z₂ - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false z₄ = α41 * z₁ + α42 * z₂ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ end nlsolver.z = z₄ @@ -364,13 +376,13 @@ end z₄ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + γ * z₄ + @.. broadcast = false u = tmp + γ * z₄ if integrator.f isa SplitFunction f2(k4, u, p, t + dt) k4 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false u=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + γ * z₄ + eb1 * k1 + - eb2 * k2 + eb3 * k3 + eb4 * k4 + @.. broadcast = false u = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + γ * z₄ + eb1 * k1 + + eb2 * k2 + eb3 * k3 + eb4 * k4 end step_limiter!(u, integrator, p, t + dt) @@ -379,37 +391,43 @@ end if integrator.opts.adaptive if integrator.f isa SplitFunction - @.. broadcast=false tmp=btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + - btilde4 * z₄ + ebtilde1 * k1 + ebtilde2 * k2 + - ebtilde3 * k3 + ebtilde4 * k4 + @.. broadcast = false tmp = btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + + btilde4 * z₄ + ebtilde1 * k1 + ebtilde2 * k2 + + ebtilde3 * k3 + ebtilde4 * k4 else - @.. broadcast=false tmp=btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + - btilde4 * z₄ + @.. broadcast = false tmp = btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + + btilde4 * z₄ end if isnewton(nlsolver) && alg.smooth_est # From Shampine est = nlsolver.cache.dz - linres = dolinsolve(integrator, nlsolver.cache.linsolve; b = _vec(tmp), - linu = _vec(est)) + linres = dolinsolve( + integrator, nlsolver.cache.linsolve; b = _vec(tmp), + linu = _vec(est) + ) integrator.stats.nsolve += 1 else est = tmp end - calculate_residuals!(atmp, est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end if integrator.f isa SplitFunction integrator.f(integrator.fsallast, u, p, t + dt) else - @.. broadcast=false integrator.fsallast=z₄ / dt + @.. broadcast = false integrator.fsallast = z₄ / dt end end -@muladd function perform_step!(integrator, cache::CFNLIRK3ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::CFNLIRK3ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, p) = integrator nlsolver = cache.nlsolver (; γ, a31, a32, a41, a42, a43, c2, c3, ea21, ea31, ea32, ea41, ea42, ea43, eb1, eb2, eb3, eb4) = cache.tab @@ -545,7 +563,7 @@ end z₁ .*= dt else # FSAL Step 1 - @.. broadcast=false z₁=dt * integrator.fsalfirst + @.. broadcast = false z₁ = dt * integrator.fsalfirst end ##### Step 2 @@ -554,12 +572,12 @@ end copyto!(z₂, z₁) nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + @.. broadcast = false tmp = uprev if integrator.f isa SplitFunction # This assumes the implicit part is cheaper than the explicit part - @.. broadcast=false k1=dt * integrator.fsalfirst - z₁ - @.. broadcast=false tmp+=ea21 * k1 + @.. broadcast = false k1 = dt * integrator.fsalfirst - z₁ + @.. broadcast = false tmp += ea21 * k1 end nlsolver.c = c2 @@ -571,14 +589,14 @@ end if integrator.f isa SplitFunction z₃ .= z₂ - @.. broadcast=false u=tmp + γ * z₂ + @.. broadcast = false u = tmp + γ * z₂ f2(k2, u, p, t + c2 * dt) k2 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + ea31 * k1 + ea32 * k2 + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ + ea31 * k1 + ea32 * k2 else - @.. broadcast=false z₃=z₂ - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false z₃ = z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ end nlsolver.z = z₃ @@ -590,15 +608,15 @@ end if integrator.f isa SplitFunction z₄ .= z₂ - @.. broadcast=false u=tmp + γ * z₃ + @.. broadcast = false u = tmp + γ * z₃ f2(k3, u, p, t + c3 * dt) k3 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + ea41 * k1 + - ea42 * k2 + ea43 * k3 + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + ea41 * k1 + + ea42 * k2 + ea43 * k3 else - @.. broadcast=false z₄=z₂ - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false z₄ = z₂ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ end nlsolver.z = z₄ @@ -606,24 +624,26 @@ end z₄ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + γ * z₄ + @.. broadcast = false u = tmp + γ * z₄ if integrator.f isa SplitFunction f2(k4, u, p, t + dt) k4 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false u=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + γ * z₄ + eb1 * k1 + - eb2 * k2 + eb3 * k3 + eb4 * k4 + @.. broadcast = false u = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + γ * z₄ + eb1 * k1 + + eb2 * k2 + eb3 * k3 + eb4 * k4 end if integrator.f isa SplitFunction integrator.f(integrator.fsallast, u, p, t + dt) else - @.. broadcast=false integrator.fsallast=z₄ / dt + @.. broadcast = false integrator.fsallast = z₄ / dt end end -@muladd function perform_step!(integrator, cache::Kvaerno4ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Kvaerno4ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator nlsolver = cache.nlsolver (; γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, c3, c4) = cache.tab @@ -691,8 +711,10 @@ end else est = tmp end - atmp = calculate_residuals(est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -718,7 +740,7 @@ end ##### Step 1 - @.. broadcast=false z₁=dt * integrator.fsalfirst + @.. broadcast = false z₁ = dt * integrator.fsalfirst ##### Step 2 @@ -726,7 +748,7 @@ end z₂ .= zero(eltype(u)) nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + γ * z₁ + @.. broadcast = false tmp = uprev + γ * z₁ nlsolver.c = γ z₂ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -734,10 +756,10 @@ end ################################## Solve Step 3 - @.. broadcast=false z₃=α31 * z₁ + α32 * z₂ + @.. broadcast = false z₃ = α31 * z₁ + α32 * z₂ nlsolver.z = z₃ - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ nlsolver.c = c3 z₃ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -745,10 +767,10 @@ end ################################## Solve Step 4 # Use constant z prediction - @.. broadcast=false z₄=α41 * z₁ + α42 * z₂ + @.. broadcast = false z₄ = α41 * z₁ + α42 * z₂ nlsolver.z = z₄ - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ nlsolver.c = c4 z₄ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -756,43 +778,49 @@ end ################################## Solve Step 5 # Use yhat prediction - @.. broadcast=false z₅=a41 * z₁ + a42 * z₂ + a43 * z₃ + γ * z₄ + @.. broadcast = false z₅ = a41 * z₁ + a42 * z₂ + a43 * z₃ + γ * z₄ nlsolver.z = z₅ - @.. broadcast=false tmp=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + @.. broadcast = false tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ nlsolver.c = 1 z₅ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + γ * z₅ + @.. broadcast = false u = tmp + γ * z₅ step_limiter!(u, integrator, p, t + dt) ################################### Finalize if integrator.opts.adaptive - @.. broadcast=false tmp=btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + - btilde5 * z₅ + @.. broadcast = false tmp = btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + + btilde5 * z₅ if isnewton(nlsolver) && alg.smooth_est # From Shampine est = nlsolver.cache.dz - linres = dolinsolve(integrator, nlsolver.cache.linsolve; b = _vec(tmp), - linu = _vec(est)) + linres = dolinsolve( + integrator, nlsolver.cache.linsolve; b = _vec(tmp), + linu = _vec(est) + ) integrator.stats.nsolve += 1 else est = tmp end - calculate_residuals!(atmp, est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end - @.. broadcast=false integrator.fsallast=z₅ / dt + @.. broadcast = false integrator.fsallast = z₅ / dt end -@muladd function perform_step!(integrator, cache::KenCarp4ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::KenCarp4ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, p) = integrator nlsolver = cache.nlsolver (; γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a63, a64, a65, c3, c4, c5) = cache.tab @@ -897,7 +925,7 @@ end k4 = dt * f2(u, p, t + c4 * dt) integrator.stats.nf2 += 1 tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + ea51 * k1 + ea52 * k2 + - ea53 * k3 + ea54 * k4 + ea53 * k3 + ea54 * k4 else z₅ = α51 * z₁ + α52 * z₂ + α53 * z₃ + α54 * z₄ tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ @@ -918,7 +946,7 @@ end k5 = dt * f2(u, p, t + c5 * dt) integrator.stats.nf2 += 1 tmp = uprev + a61 * z₁ + a63 * z₃ + a64 * z₄ + a65 * z₅ + ea61 * k1 + ea62 * k2 + - ea63 * k3 + ea64 * k4 + ea65 * k5 + ea63 * k3 + ea64 * k4 + ea65 * k5 else z₆ = α61 * z₁ + α62 * z₂ + α63 * z₃ + α64 * z₄ + α65 * z₅ tmp = uprev + a61 * z₁ + a63 * z₃ + a64 * z₄ + a65 * z₅ @@ -943,8 +971,8 @@ end if integrator.opts.adaptive if integrator.f isa SplitFunction tmp = btilde1 * z₁ + btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + btilde6 * z₆ + - ebtilde1 * k1 + ebtilde3 * k3 + ebtilde4 * k4 + ebtilde5 * k5 + - ebtilde6 * k6 + ebtilde1 * k1 + ebtilde3 * k3 + ebtilde4 * k4 + ebtilde5 * k5 + + ebtilde6 * k6 else tmp = btilde1 * z₁ + btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + btilde6 * z₆ end @@ -954,8 +982,10 @@ end else est = tmp end - atmp = calculate_residuals(est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -1006,7 +1036,7 @@ end z₁ .*= dt else # FSAL Step 1 - @.. broadcast=false z₁=dt * integrator.fsalfirst + @.. broadcast = false z₁ = dt * integrator.fsalfirst end ##### Step 2 @@ -1015,12 +1045,12 @@ end copyto!(z₂, z₁) nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + γ * z₁ + @.. broadcast = false tmp = uprev + γ * z₁ if integrator.f isa SplitFunction # This assumes the implicit part is cheaper than the explicit part - @.. broadcast=false k1=dt * integrator.fsalfirst - z₁ - @.. broadcast=false tmp+=ea21 * k1 + @.. broadcast = false k1 = dt * integrator.fsalfirst - z₁ + @.. broadcast = false tmp += ea21 * k1 end nlsolver.c = 2γ @@ -1033,15 +1063,15 @@ end if integrator.f isa SplitFunction z₃ .= z₂ - @.. broadcast=false u=tmp + γ * z₂ + @.. broadcast = false u = tmp + γ * z₂ f2(k2, u, p, t + 2γdt) k2 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + ea31 * k1 + ea32 * k2 + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ + ea31 * k1 + ea32 * k2 else # Guess is from Hermite derivative on z₁ and z₂ - @.. broadcast=false z₃=α31 * z₁ + α32 * z₂ - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false z₃ = α31 * z₁ + α32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ end nlsolver.z = z₃ @@ -1053,15 +1083,15 @@ end if integrator.f isa SplitFunction z₄ .= z₂ - @.. broadcast=false u=tmp + γ * z₃ + @.. broadcast = false u = tmp + γ * z₃ f2(k3, u, p, t + c3 * dt) k3 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + ea41 * k1 + - ea42 * k2 + ea43 * k3 + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + ea41 * k1 + + ea42 * k2 + ea43 * k3 else - @.. broadcast=false z₄=α41 * z₁ + α42 * z₂ - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false z₄ = α41 * z₁ + α42 * z₂ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ end nlsolver.z = z₄ @@ -1073,15 +1103,15 @@ end if integrator.f isa SplitFunction z₅ .= z₄ - @.. broadcast=false u=tmp + γ * z₄ + @.. broadcast = false u = tmp + γ * z₄ f2(k4, u, p, t + c4 * dt) k4 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + - ea51 * k1 + ea52 * k2 + ea53 * k3 + ea54 * k4 + @.. broadcast = false tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + + ea51 * k1 + ea52 * k2 + ea53 * k3 + ea54 * k4 else - @.. broadcast=false z₅=α51 * z₁ + α52 * z₂ + α53 * z₃ + α54 * z₄ - @.. broadcast=false tmp=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + @.. broadcast = false z₅ = α51 * z₁ + α52 * z₂ + α53 * z₃ + α54 * z₄ + @.. broadcast = false tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ end nlsolver.z = z₅ @@ -1093,15 +1123,15 @@ end if integrator.f isa SplitFunction z₆ .= z₅ - @.. broadcast=false u=tmp + γ * z₅ + @.. broadcast = false u = tmp + γ * z₅ f2(k5, u, p, t + c5 * dt) k5 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a61 * z₁ + a63 * z₃ + a64 * z₄ + a65 * z₅ + - ea61 * k1 + ea62 * k2 + ea63 * k3 + ea64 * k4 + ea65 * k5 + @.. broadcast = false tmp = uprev + a61 * z₁ + a63 * z₃ + a64 * z₄ + a65 * z₅ + + ea61 * k1 + ea62 * k2 + ea63 * k3 + ea64 * k4 + ea65 * k5 else - @.. broadcast=false z₆=α61 * z₁ + α62 * z₂ + α63 * z₃ + α64 * z₄ + α65 * z₅ - @.. broadcast=false tmp=uprev + a61 * z₁ + a63 * z₃ + a64 * z₄ + a65 * z₅ + @.. broadcast = false z₆ = α61 * z₁ + α62 * z₂ + α63 * z₃ + α64 * z₄ + α65 * z₅ + @.. broadcast = false tmp = uprev + a61 * z₁ + a63 * z₃ + a64 * z₄ + a65 * z₅ end nlsolver.z = z₆ @@ -1109,13 +1139,13 @@ end z₆ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + γ * z₆ + @.. broadcast = false u = tmp + γ * z₆ if integrator.f isa SplitFunction f2(k6, u, p, t + dt) k6 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false u=uprev + a61 * z₁ + a63 * z₃ + a64 * z₄ + a65 * z₅ + γ * z₆ + - eb1 * k1 + eb3 * k3 + eb4 * k4 + eb5 * k5 + eb6 * k6 + @.. broadcast = false u = uprev + a61 * z₁ + a63 * z₃ + a64 * z₄ + a65 * z₅ + γ * z₆ + + eb1 * k1 + eb3 * k3 + eb4 * k4 + eb5 * k5 + eb6 * k6 end step_limiter!(u, integrator, p, t + dt) @@ -1123,39 +1153,45 @@ end if integrator.opts.adaptive if integrator.f isa SplitFunction - @.. broadcast=false tmp=btilde1 * z₁ + btilde3 * z₃ + btilde4 * z₄ + - btilde5 * z₅ + btilde6 * z₆ + ebtilde1 * k1 + - ebtilde3 * k3 + ebtilde4 * k4 + ebtilde5 * k5 + - ebtilde6 * k6 + @.. broadcast = false tmp = btilde1 * z₁ + btilde3 * z₃ + btilde4 * z₄ + + btilde5 * z₅ + btilde6 * z₆ + ebtilde1 * k1 + + ebtilde3 * k3 + ebtilde4 * k4 + ebtilde5 * k5 + + ebtilde6 * k6 else - @.. broadcast=false tmp=btilde1 * z₁ + btilde3 * z₃ + btilde4 * z₄ + - btilde5 * z₅ + btilde6 * z₆ + @.. broadcast = false tmp = btilde1 * z₁ + btilde3 * z₃ + btilde4 * z₄ + + btilde5 * z₅ + btilde6 * z₆ end if isnewton(nlsolver) && alg.smooth_est # From Shampine est = nlsolver.cache.dz - linres = dolinsolve(integrator, nlsolver.cache.linsolve; b = _vec(tmp), - linu = _vec(est)) + linres = dolinsolve( + integrator, nlsolver.cache.linsolve; b = _vec(tmp), + linu = _vec(est) + ) integrator.stats.nsolve += 1 else est = tmp end - calculate_residuals!(atmp, est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end if integrator.f isa SplitFunction integrator.f(integrator.fsallast, u, p, t + dt) else - @.. broadcast=false integrator.fsallast=z₆ / dt + @.. broadcast = false integrator.fsallast = z₆ / dt end end -@muladd function perform_step!(integrator, cache::Kvaerno5ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Kvaerno5ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator nlsolver = cache.nlsolver (; γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a63, a64, a65, a71, a73, a74, a75, a76, c3, c4, c5, c6) = cache.tab @@ -1235,15 +1271,17 @@ end if integrator.opts.adaptive tmp = btilde1 * z₁ + btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + btilde6 * z₆ + - btilde7 * z₇ + btilde7 * z₇ if isnewton(nlsolver) && alg.smooth_est # From Shampine integrator.stats.nsolve += 1 est = _reshape(get_W(nlsolver) \ _vec(tmp), axes(tmp)) else est = tmp end - atmp = calculate_residuals(est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -1269,7 +1307,7 @@ end ##### Step 1 - @.. broadcast=false z₁=dt * integrator.fsalfirst + @.. broadcast = false z₁ = dt * integrator.fsalfirst ##### Step 2 @@ -1277,7 +1315,7 @@ end copyto!(z₂, z₁) nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + γ * z₁ + @.. broadcast = false tmp = uprev + γ * z₁ nlsolver.c = γ z₂ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1285,10 +1323,10 @@ end ################################## Solve Step 3 - @.. broadcast=false z₃=α31 * z₁ + α32 * z₂ + @.. broadcast = false z₃ = α31 * z₁ + α32 * z₂ nlsolver.z = z₃ - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ nlsolver.c = c3 z₃ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1296,30 +1334,30 @@ end ################################## Solve Step 4 # Use constant z prediction - @.. broadcast=false z₄=α41 * z₁ + α42 * z₂ + α43 * z₃ + @.. broadcast = false z₄ = α41 * z₁ + α42 * z₂ + α43 * z₃ nlsolver.z = z₄ - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ nlsolver.c = c4 z₄ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return ################################## Solve Step 5 - @.. broadcast=false z₅=α51 * z₁ + α52 * z₂ + α53 * z₃ + @.. broadcast = false z₅ = α51 * z₁ + α52 * z₂ + α53 * z₃ nlsolver.z = z₅ - @.. broadcast=false tmp=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + @.. broadcast = false tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ nlsolver.c = c5 z₅ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return ################################## Solve Step 6 - @.. broadcast=false z₆=α61 * z₁ + α62 * z₂ + α63 * z₃ + @.. broadcast = false z₆ = α61 * z₁ + α62 * z₂ + α63 * z₃ nlsolver.z = z₆ - @.. broadcast=false tmp=uprev + a61 * z₁ + a63 * z₃ + a64 * z₄ + a65 * z₅ + @.. broadcast = false tmp = uprev + a61 * z₁ + a63 * z₃ + a64 * z₄ + a65 * z₅ nlsolver.c = c6 z₆ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1327,42 +1365,48 @@ end ################################## Solve Step 7 # Prediction is embedded method - @.. broadcast=false z₇=a61 * z₁ + a63 * z₃ + a64 * z₄ + a65 * z₅ + γ * z₆ + @.. broadcast = false z₇ = a61 * z₁ + a63 * z₃ + a64 * z₄ + a65 * z₅ + γ * z₆ nlsolver.z = z₇ - @.. broadcast=false tmp=uprev + a71 * z₁ + a73 * z₃ + a74 * z₄ + a75 * z₅ + a76 * z₆ + @.. broadcast = false tmp = uprev + a71 * z₁ + a73 * z₃ + a74 * z₄ + a75 * z₅ + a76 * z₆ nlsolver.c = 1 z₇ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + γ * z₇ + @.. broadcast = false u = tmp + γ * z₇ step_limiter!(u, integrator, p, t + dt) ################################### Finalize if integrator.opts.adaptive - @.. broadcast=false tmp=btilde1 * z₁ + btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + - btilde6 * z₆ + btilde7 * z₇ + @.. broadcast = false tmp = btilde1 * z₁ + btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + + btilde6 * z₆ + btilde7 * z₇ if isnewton(nlsolver) && alg.smooth_est # From Shampine est = nlsolver.cache.dz - linres = dolinsolve(integrator, nlsolver.cache.linsolve; b = _vec(tmp), - linu = _vec(est)) + linres = dolinsolve( + integrator, nlsolver.cache.linsolve; b = _vec(tmp), + linu = _vec(est) + ) integrator.stats.nsolve += 1 else est = tmp end - calculate_residuals!(atmp, est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end - @.. broadcast=false integrator.fsallast=z₇ / dt + @.. broadcast = false integrator.fsallast = z₇ / dt end -@muladd function perform_step!(integrator, cache::KenCarp5ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::KenCarp5ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, p) = integrator nlsolver = cache.nlsolver (; γ, a31, a32, a41, a43, a51, a53, a54, a61, a63, a64, a65, a71, a73, a74, a75, a76, a81, a84, a85, a86, a87, c3, c4, c5, c6, c7) = cache.tab @@ -1491,7 +1535,7 @@ end k5 = dt * f2(u, p, t + c5 * dt) integrator.stats.nf2 += 1 tmp = uprev + a61 * z₁ + a63 * z₃ + a64 * z₄ + a65 * z₅ + ea61 * k1 + ea63 * k3 + - ea64 * k4 + ea65 * k5 + ea64 * k4 + ea65 * k5 else z₆ = α61 * z₁ + α62 * z₂ tmp = uprev + a61 * z₁ + a63 * z₃ + a64 * z₄ + a65 * z₅ @@ -1511,7 +1555,7 @@ end k6 = dt * f2(u, p, t + c6 * dt) integrator.stats.nf2 += 1 tmp = uprev + a71 * z₁ + a73 * z₃ + a74 * z₄ + a75 * z₅ + a76 * z₆ + ea71 * k1 + - ea73 * k3 + ea74 * k4 + ea75 * k5 + ea76 * k6 + ea73 * k3 + ea74 * k4 + ea75 * k5 + ea76 * k6 else z₇ = α71 * z₁ + α72 * z₂ + α73 * z₃ + α74 * z₄ + α75 * z₅ tmp = uprev + a71 * z₁ + a73 * z₃ + a74 * z₄ + a75 * z₅ + a76 * z₆ @@ -1531,7 +1575,7 @@ end k7 = dt * f2(u, p, t + c7 * dt) integrator.stats.nf2 += 1 tmp = uprev + a81 * z₁ + a84 * z₄ + a85 * z₅ + a86 * z₆ + a87 * z₇ + ea81 * k1 + - ea83 * k3 + ea84 * k4 + ea85 * k5 + ea86 * k6 + ea87 * k7 + ea83 * k3 + ea84 * k4 + ea85 * k5 + ea86 * k6 + ea87 * k7 else z₈ = α81 * z₁ + α82 * z₂ + α83 * z₃ + α84 * z₄ + α85 * z₅ tmp = uprev + a81 * z₁ + a84 * z₄ + a85 * z₅ + a86 * z₆ + a87 * z₇ @@ -1556,11 +1600,11 @@ end if integrator.opts.adaptive if integrator.f isa SplitFunction tmp = btilde1 * z₁ + btilde4 * z₄ + btilde5 * z₅ + btilde6 * z₆ + btilde7 * z₇ + - btilde8 * z₈ + ebtilde1 * k1 + ebtilde4 * k4 + ebtilde5 * k5 + - ebtilde6 * k6 + ebtilde7 * k7 + ebtilde8 * k8 + btilde8 * z₈ + ebtilde1 * k1 + ebtilde4 * k4 + ebtilde5 * k5 + + ebtilde6 * k6 + ebtilde7 * k7 + ebtilde8 * k8 else tmp = btilde1 * z₁ + btilde4 * z₄ + btilde5 * z₅ + btilde6 * z₆ + btilde7 * z₇ + - btilde8 * z₈ + btilde8 * z₈ end if isnewton(nlsolver) && alg.smooth_est # From Shampine integrator.stats.nsolve += 1 @@ -1568,8 +1612,10 @@ end else est = tmp end - atmp = calculate_residuals(est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -1621,7 +1667,7 @@ end z₁ .*= dt else # FSAL Step 1 - @.. broadcast=false z₁=dt * integrator.fsalfirst + @.. broadcast = false z₁ = dt * integrator.fsalfirst end ##### Step 2 @@ -1630,12 +1676,12 @@ end copyto!(z₂, z₁) nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + γ * z₁ + @.. broadcast = false tmp = uprev + γ * z₁ if integrator.f isa SplitFunction # This assumes the implicit part is cheaper than the explicit part - @.. broadcast=false k1=dt * integrator.fsalfirst - z₁ - @.. broadcast=false tmp+=ea21 * k1 + @.. broadcast = false k1 = dt * integrator.fsalfirst - z₁ + @.. broadcast = false tmp += ea21 * k1 end nlsolver.c = 2γ @@ -1647,15 +1693,15 @@ end if integrator.f isa SplitFunction z₃ .= z₂ - @.. broadcast=false u=tmp + γ * z₂ + @.. broadcast = false u = tmp + γ * z₂ f2(k2, u, p, t + 2γdt) k2 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + ea31 * k1 + ea32 * k2 + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ + ea31 * k1 + ea32 * k2 else # Guess is from Hermite derivative on z₁ and z₂ - @.. broadcast=false z₃=a31 * z₁ + α32 * z₂ - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false z₃ = a31 * z₁ + α32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ end nlsolver.z = z₃ @@ -1667,14 +1713,14 @@ end if integrator.f isa SplitFunction z₄ .= z₃ - @.. broadcast=false u=tmp + γ * z₃ + @.. broadcast = false u = tmp + γ * z₃ f2(k3, u, p, t + c3 * dt) k3 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a41 * z₁ + a43 * z₃ + ea41 * k1 + ea43 * k3 + @.. broadcast = false tmp = uprev + a41 * z₁ + a43 * z₃ + ea41 * k1 + ea43 * k3 else - @.. broadcast=false z₄=α41 * z₁ + α42 * z₂ - @.. broadcast=false tmp=uprev + a41 * z₁ + a43 * z₃ + @.. broadcast = false z₄ = α41 * z₁ + α42 * z₂ + @.. broadcast = false tmp = uprev + a41 * z₁ + a43 * z₃ end nlsolver.z = z₄ @@ -1686,15 +1732,15 @@ end if integrator.f isa SplitFunction z₅ .= z₂ - @.. broadcast=false u=tmp + γ * z₄ + @.. broadcast = false u = tmp + γ * z₄ f2(k4, u, p, t + c4 * dt) k4 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a51 * z₁ + a53 * z₃ + a54 * z₄ + ea51 * k1 + - ea53 * k3 + ea54 * k4 + @.. broadcast = false tmp = uprev + a51 * z₁ + a53 * z₃ + a54 * z₄ + ea51 * k1 + + ea53 * k3 + ea54 * k4 else - @.. broadcast=false z₅=α51 * z₁ + α52 * z₂ - @.. broadcast=false tmp=uprev + a51 * z₁ + a53 * z₃ + a54 * z₄ + @.. broadcast = false z₅ = α51 * z₁ + α52 * z₂ + @.. broadcast = false tmp = uprev + a51 * z₁ + a53 * z₃ + a54 * z₄ end nlsolver.z = z₅ @@ -1706,15 +1752,15 @@ end if integrator.f isa SplitFunction z₆ .= z₃ - @.. broadcast=false u=tmp + γ * z₅ + @.. broadcast = false u = tmp + γ * z₅ f2(k5, u, p, t + c5 * dt) k5 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a61 * z₁ + a63 * z₃ + a64 * z₄ + a65 * z₅ + - ea61 * k1 + ea63 * k3 + ea64 * k4 + ea65 * k5 + @.. broadcast = false tmp = uprev + a61 * z₁ + a63 * z₃ + a64 * z₄ + a65 * z₅ + + ea61 * k1 + ea63 * k3 + ea64 * k4 + ea65 * k5 else - @.. broadcast=false z₆=α61 * z₁ + α62 * z₂ - @.. broadcast=false tmp=uprev + a61 * z₁ + a63 * z₃ + a64 * z₄ + a65 * z₅ + @.. broadcast = false z₆ = α61 * z₁ + α62 * z₂ + @.. broadcast = false tmp = uprev + a61 * z₁ + a63 * z₃ + a64 * z₄ + a65 * z₅ end nlsolver.z = z₆ @@ -1726,16 +1772,16 @@ end if integrator.f isa SplitFunction z₇ .= z₂ - @.. broadcast=false u=tmp + γ * z₆ + @.. broadcast = false u = tmp + γ * z₆ f2(k6, u, p, t + c6 * dt) k6 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a71 * z₁ + a73 * z₃ + a74 * z₄ + a75 * z₅ + - a76 * z₆ + ea71 * k1 + ea73 * k3 + ea74 * k4 + ea75 * k5 + - ea76 * k6 + @.. broadcast = false tmp = uprev + a71 * z₁ + a73 * z₃ + a74 * z₄ + a75 * z₅ + + a76 * z₆ + ea71 * k1 + ea73 * k3 + ea74 * k4 + ea75 * k5 + + ea76 * k6 else - @.. broadcast=false z₇=α71 * z₁ + α72 * z₂ + α73 * z₃ + α74 * z₄ + α75 * z₅ - @.. broadcast=false tmp=uprev + a71 * z₁ + a73 * z₃ + a74 * z₄ + a75 * z₅ + a76 * z₆ + @.. broadcast = false z₇ = α71 * z₁ + α72 * z₂ + α73 * z₃ + α74 * z₄ + α75 * z₅ + @.. broadcast = false tmp = uprev + a71 * z₁ + a73 * z₃ + a74 * z₄ + a75 * z₅ + a76 * z₆ end nlsolver.z = z₇ @@ -1747,16 +1793,16 @@ end if integrator.f isa SplitFunction z₈ .= z₅ - @.. broadcast=false u=tmp + γ * z₇ + @.. broadcast = false u = tmp + γ * z₇ f2(k7, u, p, t + c7 * dt) k7 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a81 * z₁ + a84 * z₄ + a85 * z₅ + a86 * z₆ + - a87 * z₇ + ea81 * k1 + ea83 * k3 + ea84 * k4 + ea85 * k5 + - ea86 * k6 + ea87 * k7 + @.. broadcast = false tmp = uprev + a81 * z₁ + a84 * z₄ + a85 * z₅ + a86 * z₆ + + a87 * z₇ + ea81 * k1 + ea83 * k3 + ea84 * k4 + ea85 * k5 + + ea86 * k6 + ea87 * k7 else - @.. broadcast=false z₈=α81 * z₁ + α82 * z₂ + α83 * z₃ + α84 * z₄ + α85 * z₅ - @.. broadcast=false tmp=uprev + a81 * z₁ + a84 * z₄ + a85 * z₅ + a86 * z₆ + a87 * z₇ + @.. broadcast = false z₈ = α81 * z₁ + α82 * z₂ + α83 * z₃ + α84 * z₄ + α85 * z₅ + @.. broadcast = false tmp = uprev + a81 * z₁ + a84 * z₄ + a85 * z₅ + a86 * z₆ + a87 * z₇ end nlsolver.z = z₈ @@ -1764,14 +1810,14 @@ end z₈ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + γ * z₈ + @.. broadcast = false u = tmp + γ * z₈ if integrator.f isa SplitFunction f2(k8, u, p, t + dt) k8 .*= dt OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false u=uprev + a81 * z₁ + a84 * z₄ + a85 * z₅ + a86 * z₆ + a87 * z₇ + - γ * z₈ + eb1 * k1 + eb4 * k4 + eb5 * k5 + eb6 * k6 + - eb7 * k7 + eb8 * k8 + @.. broadcast = false u = uprev + a81 * z₁ + a84 * z₄ + a85 * z₅ + a86 * z₆ + a87 * z₇ + + γ * z₈ + eb1 * k1 + eb4 * k4 + eb5 * k5 + eb6 * k6 + + eb7 * k7 + eb8 * k8 end step_limiter!(u, integrator, p, t + dt) @@ -1779,39 +1825,45 @@ end if integrator.opts.adaptive if integrator.f isa SplitFunction - @.. broadcast=false tmp=btilde1 * z₁ + btilde4 * z₄ + btilde5 * z₅ + - btilde6 * z₆ + btilde7 * z₇ + btilde8 * z₈ + - ebtilde1 * k1 + ebtilde4 * k4 + ebtilde5 * k5 + - ebtilde6 * k6 + ebtilde7 * k7 + ebtilde8 * k8 + @.. broadcast = false tmp = btilde1 * z₁ + btilde4 * z₄ + btilde5 * z₅ + + btilde6 * z₆ + btilde7 * z₇ + btilde8 * z₈ + + ebtilde1 * k1 + ebtilde4 * k4 + ebtilde5 * k5 + + ebtilde6 * k6 + ebtilde7 * k7 + ebtilde8 * k8 else - @.. broadcast=false tmp=btilde1 * z₁ + btilde4 * z₄ + btilde5 * z₅ + - btilde6 * z₆ + btilde7 * z₇ + btilde8 * z₈ + @.. broadcast = false tmp = btilde1 * z₁ + btilde4 * z₄ + btilde5 * z₅ + + btilde6 * z₆ + btilde7 * z₇ + btilde8 * z₈ end if isnewton(nlsolver) && alg.smooth_est # From Shampine est = nlsolver.cache.dz - linres = dolinsolve(integrator, nlsolver.cache.linsolve; b = _vec(tmp), - linu = _vec(est)) + linres = dolinsolve( + integrator, nlsolver.cache.linsolve; b = _vec(tmp), + linu = _vec(est) + ) integrator.stats.nsolve += 1 else est = tmp end - calculate_residuals!(atmp, est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end if integrator.f isa SplitFunction integrator.f(integrator.fsallast, u, p, t + dt) else - @.. broadcast=false integrator.fsallast=z₈ / dt + @.. broadcast = false integrator.fsallast = z₈ / dt end end -@muladd function perform_step!(integrator, cache::KenCarp47ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::KenCarp47ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, p) = integrator nlsolver = cache.nlsolver (; γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a73, a74, a75, a76, c3, c4, c5, c6) = cache.tab @@ -1919,7 +1971,7 @@ end k4 = dt * f2(u, p, t + c4 * dt) integrator.stats.nf2 += 1 tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + ea51 * k1 + ea52 * k2 + - ea53 * k3 + ea54 * k4 + ea53 * k3 + ea54 * k4 else z₅ = α51 * z₁ + α52 * z₂ tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ @@ -1939,7 +1991,7 @@ end k5 = dt * f2(u, p, t + c5 * dt) integrator.stats.nf2 += 1 tmp = uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ + ea61 * k1 + - ea62 * k2 + ea63 * k3 + ea64 * k4 + ea65 * k5 + ea62 * k2 + ea63 * k3 + ea64 * k4 + ea65 * k5 else z₆ = α61 * z₁ + α62 * z₂ + α63 * z₃ tmp = uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ @@ -1959,7 +2011,7 @@ end k6 = dt * f2(u, p, t + c6 * dt) integrator.stats.nf2 += 1 tmp = uprev + a73 * z₃ + a74 * z₄ + a75 * z₅ + a76 * z₆ + ea71 * k1 + ea72 * k2 + - ea73 * k3 + ea74 * k4 + ea75 * k5 + ea76 * k6 + ea73 * k3 + ea74 * k4 + ea75 * k5 + ea76 * k6 else z₇ = α71 * z₁ + α72 * z₂ + α73 * z₃ + α74 * z₄ + α75 * z₅ + +α76 * z₆ tmp = uprev + a73 * z₃ + a74 * z₄ + a75 * z₅ + a76 * z₆ @@ -1983,8 +2035,8 @@ end if integrator.opts.adaptive if integrator.f isa SplitFunction tmp = btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + btilde6 * z₆ + btilde7 * z₇ + - ebtilde3 * k3 + ebtilde4 * k4 + ebtilde5 * k5 + ebtilde6 * k6 + - ebtilde7 * k7 + ebtilde3 * k3 + ebtilde4 * k4 + ebtilde5 * k5 + ebtilde6 * k6 + + ebtilde7 * k7 else tmp = btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + btilde6 * z₆ + btilde7 * z₇ end @@ -1994,8 +2046,10 @@ end else est = tmp end - atmp = calculate_residuals(est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -2046,7 +2100,7 @@ end z₁ .*= dt else # FSAL Step 1 - @.. broadcast=false z₁=dt * integrator.fsalfirst + @.. broadcast = false z₁ = dt * integrator.fsalfirst end ##### Step 2 @@ -2055,12 +2109,12 @@ end z₂ .= z₁ nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + γ * z₁ + @.. broadcast = false tmp = uprev + γ * z₁ if integrator.f isa SplitFunction # This assumes the implicit part is cheaper than the explicit part - @.. broadcast=false k1=dt * integrator.fsalfirst - z₁ - @.. broadcast=false tmp+=ea21 * k1 + @.. broadcast = false k1 = dt * integrator.fsalfirst - z₁ + @.. broadcast = false tmp += ea21 * k1 end nlsolver.c = 2γ @@ -2072,15 +2126,15 @@ end if integrator.f isa SplitFunction z₃ .= z₂ - @.. broadcast=false u=tmp + γ * z₂ + @.. broadcast = false u = tmp + γ * z₂ f2(k2, u, p, t + 2γdt) k2 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + ea31 * k1 + ea32 * k2 + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ + ea31 * k1 + ea32 * k2 else #Guess is from Hermite derivative on z₁ and z₂ - @.. broadcast=false z₃=a31 * z₁ + α32 * z₂ - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false z₃ = a31 * z₁ + α32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ end nlsolver.z = z₃ @@ -2092,15 +2146,15 @@ end if integrator.f isa SplitFunction z₄ .= z₃ - @.. broadcast=false u=tmp + γ * z₃ + @.. broadcast = false u = tmp + γ * z₃ f2(k3, u, p, t + c3 * dt) k3 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + ea41 * k1 + - ea42 * k2 + ea43 * k3 + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + ea41 * k1 + + ea42 * k2 + ea43 * k3 else - @.. broadcast=false z₄=α41 * z₁ + α42 * z₂ + α43 * z₃ - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false z₄ = α41 * z₁ + α42 * z₂ + α43 * z₃ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ end nlsolver.z = z₄ @@ -2112,15 +2166,15 @@ end if integrator.f isa SplitFunction z₅ .= z₁ - @.. broadcast=false u=tmp + γ * z₄ + @.. broadcast = false u = tmp + γ * z₄ f2(k4, u, p, t + c4 * dt) k4 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + - ea51 * k1 + ea52 * k2 + ea53 * k3 + ea54 * k4 + @.. broadcast = false tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + + ea51 * k1 + ea52 * k2 + ea53 * k3 + ea54 * k4 else - @.. broadcast=false z₅=α51 * z₁ + α52 * z₂ - @.. broadcast=false tmp=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + @.. broadcast = false z₅ = α51 * z₁ + α52 * z₂ + @.. broadcast = false tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ end nlsolver.z = z₅ @@ -2132,16 +2186,16 @@ end if integrator.f isa SplitFunction z₆ .= z₃ - @.. broadcast=false u=tmp + γ * z₅ + @.. broadcast = false u = tmp + γ * z₅ f2(k5, u, p, t + c5 * dt) k5 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + - a65 * z₅ + ea61 * k1 + ea62 * k2 + ea63 * k3 + ea64 * k4 + - ea65 * k5 + @.. broadcast = false tmp = uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + + a65 * z₅ + ea61 * k1 + ea62 * k2 + ea63 * k3 + ea64 * k4 + + ea65 * k5 else - @.. broadcast=false z₆=α61 * z₁ + α62 * z₂ + α63 * z₃ - @.. broadcast=false tmp=uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ + @.. broadcast = false z₆ = α61 * z₁ + α62 * z₂ + α63 * z₃ + @.. broadcast = false tmp = uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ end nlsolver.z = z₆ @@ -2153,17 +2207,17 @@ end if integrator.f isa SplitFunction z₇ .= z₆ - @.. broadcast=false u=tmp + γ * z₆ + @.. broadcast = false u = tmp + γ * z₆ f2(k6, u, p, t + c6 * dt) k6 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a73 * z₃ + a74 * z₄ + a75 * z₅ + a76 * z₆ + - ea71 * k1 + ea72 * k2 + ea73 * k3 + ea74 * k4 + ea75 * k5 + - ea76 * k6 + @.. broadcast = false tmp = uprev + a73 * z₃ + a74 * z₄ + a75 * z₅ + a76 * z₆ + + ea71 * k1 + ea72 * k2 + ea73 * k3 + ea74 * k4 + ea75 * k5 + + ea76 * k6 else - @.. broadcast=false z₇=α71 * z₁ + α72 * z₂ + α73 * z₃ + α74 * z₄ + α75 * z₅ + - α76 * z₆ - @.. broadcast=false tmp=uprev + a73 * z₃ + a74 * z₄ + a75 * z₅ + a76 * z₆ + @.. broadcast = false z₇ = α71 * z₁ + α72 * z₂ + α73 * z₃ + α74 * z₄ + α75 * z₅ + + α76 * z₆ + @.. broadcast = false tmp = uprev + a73 * z₃ + a74 * z₄ + a75 * z₅ + a76 * z₆ end nlsolver.z = z₇ @@ -2171,52 +2225,58 @@ end z₇ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + γ * z₇ + @.. broadcast = false u = tmp + γ * z₇ if integrator.f isa SplitFunction f2(k7, u, p, t + dt) k7 .*= dt OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false u=uprev + a73 * z₃ + a74 * z₄ + a75 * z₅ + a76 * z₆ + γ * z₇ + - eb3 * k3 + eb4 * k4 + eb5 * k5 + eb6 * k6 + eb7 * k7 + @.. broadcast = false u = uprev + a73 * z₃ + a74 * z₄ + a75 * z₅ + a76 * z₆ + γ * z₇ + + eb3 * k3 + eb4 * k4 + eb5 * k5 + eb6 * k6 + eb7 * k7 end ################################### Finalize if integrator.opts.adaptive if integrator.f isa SplitFunction - @.. broadcast=false tmp=btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + - btilde6 * z₆ + btilde7 * z₇ + ebtilde3 * k3 + - ebtilde4 * k4 + ebtilde5 * k5 + ebtilde6 * k6 + - ebtilde7 * k7 + @.. broadcast = false tmp = btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + + btilde6 * z₆ + btilde7 * z₇ + ebtilde3 * k3 + + ebtilde4 * k4 + ebtilde5 * k5 + ebtilde6 * k6 + + ebtilde7 * k7 else - @.. broadcast=false tmp=btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + - btilde6 * z₆ + btilde7 * z₇ + @.. broadcast = false tmp = btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + + btilde6 * z₆ + btilde7 * z₇ end if isnewton(nlsolver) && alg.smooth_est # From Shampine est = nlsolver.cache.dz - linres = dolinsolve(integrator, nlsolver.cache.linsolve; b = _vec(tmp), - linu = _vec(est)) + linres = dolinsolve( + integrator, nlsolver.cache.linsolve; b = _vec(tmp), + linu = _vec(est) + ) integrator.stats.nsolve += 1 else est = tmp end - calculate_residuals!(atmp, est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end if integrator.f isa SplitFunction integrator.f(integrator.fsallast, u, p, t + dt) else - @.. broadcast=false integrator.fsallast=z₇ / dt + @.. broadcast = false integrator.fsallast = z₇ / dt end end -@muladd function perform_step!(integrator, cache::KenCarp58ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::KenCarp58ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, p) = integrator nlsolver = cache.nlsolver (; γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, a83, a84, a85, a86, a87, c3, c4, c5, c6, c7) = cache.tab @@ -2327,7 +2387,7 @@ end k4 = dt * f2(u, p, t + c4 * dt) integrator.stats.nf2 += 1 tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + ea51 * k1 + ea52 * k2 + - ea53 * k3 + ea54 * k4 + ea53 * k3 + ea54 * k4 else z₅ = α51 * z₁ + α52 * z₂ tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ @@ -2347,7 +2407,7 @@ end k5 = dt * f2(u, p, t + c5 * dt) integrator.stats.nf2 += 1 tmp = uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ + ea61 * k1 + - ea62 * k2 + ea63 * k3 + ea64 * k4 + ea65 * k5 + ea62 * k2 + ea63 * k3 + ea64 * k4 + ea65 * k5 else z₆ = α61 * z₁ + α62 * z₂ + α63 * z₃ tmp = uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ @@ -2367,7 +2427,7 @@ end k6 = dt * f2(u, p, t + c6 * dt) integrator.stats.nf2 += 1 tmp = uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + a75 * z₅ + a76 * z₆ + - ea71 * k1 + ea72 * k2 + ea73 * k3 + ea74 * k4 + ea75 * k5 + ea76 * k6 + ea71 * k1 + ea72 * k2 + ea73 * k3 + ea74 * k4 + ea75 * k5 + ea76 * k6 else z₇ = α71 * z₁ + α72 * z₂ + α73 * z₃ tmp = uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + a75 * z₅ + a76 * z₆ @@ -2387,7 +2447,7 @@ end k7 = dt * f2(u, p, t + c7 * dt) integrator.stats.nf2 += 1 tmp = uprev + a83 * z₃ + a84 * z₄ + a85 * z₅ + a86 * z₆ + a87 * z₇ + ea81 * k1 + - ea82 * k2 + ea83 * k3 + ea84 * k4 + ea85 * k5 + ea86 * k6 + ea87 * k7 + ea82 * k2 + ea83 * k3 + ea84 * k4 + ea85 * k5 + ea86 * k6 + ea87 * k7 else z₈ = α81 * z₁ + α82 * z₂ + α83 * z₃ + α84 * z₄ + α85 * z₅ + α86 * z₆ + α87 * z₇ tmp = uprev + a83 * z₃ + a84 * z₄ + a85 * z₅ + a86 * z₆ + a87 * z₇ @@ -2412,11 +2472,11 @@ end if integrator.opts.adaptive if integrator.f isa SplitFunction tmp = btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + btilde6 * z₆ + btilde7 * z₇ + - btilde8 * z₈ + ebtilde3 * k3 + ebtilde4 * k4 + ebtilde5 * k5 + - ebtilde6 * k6 + ebtilde7 * k7 + ebtilde8 * k8 + btilde8 * z₈ + ebtilde3 * k3 + ebtilde4 * k4 + ebtilde5 * k5 + + ebtilde6 * k6 + ebtilde7 * k7 + ebtilde8 * k8 else tmp = btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + btilde6 * z₆ + btilde7 * z₇ + - btilde8 * z₈ + btilde8 * z₈ end if isnewton(nlsolver) && alg.smooth_est # From Shampine integrator.stats.nsolve += 1 @@ -2424,8 +2484,10 @@ end else est = tmp end - atmp = calculate_residuals(est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -2477,7 +2539,7 @@ end z₁ .*= dt else # FSAL Step 1 - @.. broadcast=false z₁=dt * integrator.fsalfirst + @.. broadcast = false z₁ = dt * integrator.fsalfirst end ##### Step 2 @@ -2486,12 +2548,12 @@ end z₂ .= z₁ nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + γ * z₁ + @.. broadcast = false tmp = uprev + γ * z₁ if integrator.f isa SplitFunction # This assumes the implicit part is cheaper than the explicit part - @.. broadcast=false k1=dt * integrator.fsalfirst - z₁ - @.. broadcast=false tmp+=ea21 * k1 + @.. broadcast = false k1 = dt * integrator.fsalfirst - z₁ + @.. broadcast = false tmp += ea21 * k1 end nlsolver.c = 2γ @@ -2503,15 +2565,15 @@ end if integrator.f isa SplitFunction z₃ .= z₂ - @.. broadcast=false u=tmp + γ * z₂ + @.. broadcast = false u = tmp + γ * z₂ f2(k2, u, p, t + 2γdt) k2 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + ea31 * k1 + ea32 * k2 + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ + ea31 * k1 + ea32 * k2 else # Guess is from Hermite derivative on z₁ and z₂ - @.. broadcast=false z₃=α31 * z₁ + α32 * z₂ - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false z₃ = α31 * z₁ + α32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ end nlsolver.z = z₃ @@ -2523,15 +2585,15 @@ end if integrator.f isa SplitFunction z₄ .= z₁ - @.. broadcast=false u=tmp + γ * z₃ + @.. broadcast = false u = tmp + γ * z₃ f2(k3, u, p, t + c3 * dt) k3 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + ea41 * k1 + - ea42 * k2 + ea43 * k3 + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + ea41 * k1 + + ea42 * k2 + ea43 * k3 else - @.. broadcast=false z₄=α41 * z₁ + α42 * z₂ - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false z₄ = α41 * z₁ + α42 * z₂ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ end nlsolver.z = z₄ @@ -2543,15 +2605,15 @@ end if integrator.f isa SplitFunction z₅ .= z₂ - @.. broadcast=false u=tmp + γ * z₄ + @.. broadcast = false u = tmp + γ * z₄ f2(k4, u, p, t + c4 * dt) k4 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + - ea51 * k1 + ea52 * k2 + ea53 * k3 + ea54 * k4 + @.. broadcast = false tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + + ea51 * k1 + ea52 * k2 + ea53 * k3 + ea54 * k4 else - @.. broadcast=false z₅=α51 * z₁ + α52 * z₂ - @.. broadcast=false tmp=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + @.. broadcast = false z₅ = α51 * z₁ + α52 * z₂ + @.. broadcast = false tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ end nlsolver.z = z₅ @@ -2563,16 +2625,16 @@ end if integrator.f isa SplitFunction z₆ .= z₃ - @.. broadcast=false u=tmp + γ * z₅ + @.. broadcast = false u = tmp + γ * z₅ f2(k5, u, p, t + c5 * dt) k5 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + - a65 * z₅ + ea61 * k1 + ea62 * k2 + ea63 * k3 + ea64 * k4 + - ea65 * k5 + @.. broadcast = false tmp = uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + + a65 * z₅ + ea61 * k1 + ea62 * k2 + ea63 * k3 + ea64 * k4 + + ea65 * k5 else - @.. broadcast=false z₆=α61 * z₁ + α62 * z₂ + α63 * z₃ - @.. broadcast=false tmp=uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ + @.. broadcast = false z₆ = α61 * z₁ + α62 * z₂ + α63 * z₃ + @.. broadcast = false tmp = uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ end nlsolver.z = z₆ @@ -2584,17 +2646,17 @@ end if integrator.f isa SplitFunction z₇ .= z₃ - @.. broadcast=false u=tmp + γ * z₆ + @.. broadcast = false u = tmp + γ * z₆ f2(k6, u, p, t + c6 * dt) k6 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + - a75 * z₅ + a76 * z₆ + ea71 * k1 + ea72 * k2 + ea73 * k3 + - ea74 * k4 + ea75 * k5 + ea76 * k6 + @.. broadcast = false tmp = uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + + a75 * z₅ + a76 * z₆ + ea71 * k1 + ea72 * k2 + ea73 * k3 + + ea74 * k4 + ea75 * k5 + ea76 * k6 else - @.. broadcast=false z₇=α71 * z₁ + α72 * z₂ + α73 * z₃ - @.. broadcast=false tmp=uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + - a75 * z₅ + a76 * z₆ + @.. broadcast = false z₇ = α71 * z₁ + α72 * z₂ + α73 * z₃ + @.. broadcast = false tmp = uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + + a75 * z₅ + a76 * z₆ end nlsolver.z = z₇ @@ -2606,17 +2668,17 @@ end if integrator.f isa SplitFunction z₈ .= z₇ - @.. broadcast=false u=tmp + γ * z₇ + @.. broadcast = false u = tmp + γ * z₇ f2(k7, u, p, t + c7 * dt) k7 .*= dt integrator.stats.nf2 += 1 - @.. broadcast=false tmp=uprev + a83 * z₃ + a84 * z₄ + a85 * z₅ + a86 * z₆ + - a87 * z₇ + ea81 * k1 + ea82 * k2 + ea83 * k3 + ea84 * k4 + - ea85 * k5 + ea86 * k6 + ea87 * k7 + @.. broadcast = false tmp = uprev + a83 * z₃ + a84 * z₄ + a85 * z₅ + a86 * z₆ + + a87 * z₇ + ea81 * k1 + ea82 * k2 + ea83 * k3 + ea84 * k4 + + ea85 * k5 + ea86 * k6 + ea87 * k7 else - @.. broadcast=false z₈=α81 * z₁ + α82 * z₂ + α83 * z₃ + α84 * z₄ + α85 * z₅ + - α86 * z₆ + α87 * z₇ - @.. broadcast=false tmp=uprev + a83 * z₃ + a84 * z₄ + a85 * z₅ + a86 * z₆ + a87 * z₇ + @.. broadcast = false z₈ = α81 * z₁ + α82 * z₂ + α83 * z₃ + α84 * z₄ + α85 * z₅ + + α86 * z₆ + α87 * z₇ + @.. broadcast = false tmp = uprev + a83 * z₃ + a84 * z₄ + a85 * z₅ + a86 * z₆ + a87 * z₇ end nlsolver.z = z₈ @@ -2624,47 +2686,51 @@ end z₈ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + γ * z₈ + @.. broadcast = false u = tmp + γ * z₈ if integrator.f isa SplitFunction f2(k8, u, p, t + dt) k8 .*= dt OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false u=uprev + a83 * z₃ + a84 * z₄ + a85 * z₅ + a86 * z₆ + a87 * z₇ + - γ * z₈ + eb3 * k3 + eb4 * k4 + eb5 * k5 + eb6 * k6 + - eb7 * k7 + eb8 * k8 + @.. broadcast = false u = uprev + a83 * z₃ + a84 * z₄ + a85 * z₅ + a86 * z₆ + a87 * z₇ + + γ * z₈ + eb3 * k3 + eb4 * k4 + eb5 * k5 + eb6 * k6 + + eb7 * k7 + eb8 * k8 end ################################### Finalize if integrator.opts.adaptive if integrator.f isa SplitFunction - @.. broadcast=false tmp=btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + - btilde6 * z₆ + btilde7 * z₇ + btilde8 * z₈ + - ebtilde3 * k3 + ebtilde4 * k4 + ebtilde5 * k5 + - ebtilde6 * k6 + ebtilde7 * k7 + ebtilde8 * k8 + @.. broadcast = false tmp = btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + + btilde6 * z₆ + btilde7 * z₇ + btilde8 * z₈ + + ebtilde3 * k3 + ebtilde4 * k4 + ebtilde5 * k5 + + ebtilde6 * k6 + ebtilde7 * k7 + ebtilde8 * k8 else - @.. broadcast=false tmp=btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + - btilde6 * z₆ + btilde7 * z₇ + btilde8 * z₈ + @.. broadcast = false tmp = btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + + btilde6 * z₆ + btilde7 * z₇ + btilde8 * z₈ end if isnewton(nlsolver) && alg.smooth_est # From Shampine est = nlsolver.cache.dz - linres = dolinsolve(integrator, nlsolver.cache.linsolve; b = _vec(tmp), - linu = _vec(est)) + linres = dolinsolve( + integrator, nlsolver.cache.linsolve; b = _vec(tmp), + linu = _vec(est) + ) integrator.stats.nsolve += 1 else est = tmp end - calculate_residuals!(atmp, est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end if integrator.f isa SplitFunction integrator.f(integrator.fsallast, u, p, t + dt) else - @.. broadcast=false integrator.fsallast=z₈ / dt + @.. broadcast = false integrator.fsallast = z₈ / dt end end diff --git a/lib/OrdinaryDiffEqSDIRK/src/sdirk_caches.jl b/lib/OrdinaryDiffEqSDIRK/src/sdirk_caches.jl index 75a6453fcf..96a6586a41 100644 --- a/lib/OrdinaryDiffEqSDIRK/src/sdirk_caches.jl +++ b/lib/OrdinaryDiffEqSDIRK/src/sdirk_caches.jl @@ -1,12 +1,13 @@ abstract type SDIRKMutableCache <: OrdinaryDiffEqMutableCache end abstract type SDIRKConstantCache <: OrdinaryDiffEqConstantCache end function get_fsalfirstlast(cache::SDIRKMutableCache, u) - (cache.fsalfirst, du_alias_or_new(cache.nlsolver, cache.fsalfirst)) + return (cache.fsalfirst, du_alias_or_new(cache.nlsolver, cache.fsalfirst)) end @cache mutable struct ImplicitEulerCache{ - uType, rateType, uNoUnitsType, N, AV, StepLimiter} <: - SDIRKMutableCache + uType, rateType, uNoUnitsType, N, AV, StepLimiter, + } <: + SDIRKMutableCache u::uType uprev::uType uprev2::uType @@ -17,55 +18,68 @@ end step_limiter!::StepLimiter end -function alg_cache(alg::ImplicitEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ImplicitEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) algebraic_vars = f.mass_matrix === I ? nothing : - [all(iszero, x) for x in eachcol(f.mass_matrix)] + [all(iszero, x) for x in eachcol(f.mass_matrix)] - ImplicitEulerCache( - u, uprev, uprev2, fsalfirst, atmp, nlsolver, algebraic_vars, alg.step_limiter!) + return ImplicitEulerCache( + u, uprev, uprev2, fsalfirst, atmp, nlsolver, algebraic_vars, alg.step_limiter! + ) end mutable struct ImplicitEulerConstantCache{N} <: SDIRKConstantCache nlsolver::N end -function alg_cache(alg::ImplicitEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ImplicitEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - ImplicitEulerConstantCache(nlsolver) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return ImplicitEulerConstantCache(nlsolver) end mutable struct ImplicitMidpointConstantCache{N} <: SDIRKConstantCache nlsolver::N end -function alg_cache(alg::ImplicitMidpoint, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ImplicitMidpoint, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1 // 2, 1 // 2 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - ImplicitMidpointConstantCache(nlsolver) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return ImplicitMidpointConstantCache(nlsolver) end @cache mutable struct ImplicitMidpointCache{uType, rateType, N, StepLimiter} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -73,15 +87,19 @@ end step_limiter!::StepLimiter end -function alg_cache(alg::ImplicitMidpoint, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ImplicitMidpoint, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1 // 2, 1 // 2 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) - ImplicitMidpointCache(u, uprev, fsalfirst, nlsolver, alg.step_limiter!) + return ImplicitMidpointCache(u, uprev, fsalfirst, nlsolver, alg.step_limiter!) end mutable struct TrapezoidConstantCache{uType, tType, N} <: SDIRKConstantCache @@ -90,23 +108,28 @@ mutable struct TrapezoidConstantCache{uType, tType, N} <: SDIRKConstantCache nlsolver::N end -function alg_cache(alg::Trapezoid, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Trapezoid, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1 // 2, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) uprev3 = u tprev2 = t - TrapezoidConstantCache(uprev3, tprev2, nlsolver) + return TrapezoidConstantCache(uprev3, tprev2, nlsolver) end @cache mutable struct TrapezoidCache{ - uType, rateType, uNoUnitsType, tType, N, StepLimiter} <: - SDIRKMutableCache + uType, rateType, uNoUnitsType, tType, N, StepLimiter, + } <: + SDIRKMutableCache u::uType uprev::uType uprev2::uType @@ -118,13 +141,17 @@ end step_limiter!::StepLimiter end -function alg_cache(alg::Trapezoid, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Trapezoid, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1 // 2, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) uprev3 = zero(u) @@ -132,8 +159,9 @@ function alg_cache(alg::Trapezoid, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - TrapezoidCache( - u, uprev, uprev2, fsalfirst, atmp, uprev3, tprev2, nlsolver, alg.step_limiter!) + return TrapezoidCache( + u, uprev, uprev2, fsalfirst, atmp, uprev3, tprev2, nlsolver, alg.step_limiter! + ) end mutable struct TRBDF2ConstantCache{Tab, N} <: SDIRKConstantCache @@ -141,19 +169,23 @@ mutable struct TRBDF2ConstantCache{Tab, N} <: SDIRKConstantCache tab::Tab end -function alg_cache(alg::TRBDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::TRBDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = TRBDF2Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.d, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - TRBDF2ConstantCache(nlsolver, tab) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return TRBDF2ConstantCache(nlsolver, tab) end @cache mutable struct TRBDF2Cache{uType, rateType, uNoUnitsType, Tab, N, StepLimiter} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -165,14 +197,18 @@ end step_limiter!::StepLimiter end -function alg_cache(alg::TRBDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::TRBDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = TRBDF2Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.d, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) atmp = similar(u, uEltypeNoUnits) @@ -180,25 +216,29 @@ function alg_cache(alg::TRBDF2, u, rate_prototype, ::Type{uEltypeNoUnits}, zprev = zero(u) zᵧ = zero(u) - TRBDF2Cache(u, uprev, fsalfirst, zprev, zᵧ, atmp, nlsolver, tab, alg.step_limiter!) + return TRBDF2Cache(u, uprev, fsalfirst, zprev, zᵧ, atmp, nlsolver, tab, alg.step_limiter!) end mutable struct SDIRK2ConstantCache{N} <: SDIRKConstantCache nlsolver::N end -function alg_cache(alg::SDIRK2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SDIRK2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - SDIRK2ConstantCache(nlsolver) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return SDIRK2ConstantCache(nlsolver) end @cache mutable struct SDIRK2Cache{uType, rateType, uNoUnitsType, N, StepLimiter} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -209,13 +249,17 @@ end step_limiter!::StepLimiter end -function alg_cache(alg::SDIRK2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SDIRK2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) z₁ = zero(u) @@ -223,7 +267,7 @@ function alg_cache(alg::SDIRK2, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - SDIRK2Cache(u, uprev, fsalfirst, z₁, z₂, atmp, nlsolver, alg.step_limiter!) + return SDIRK2Cache(u, uprev, fsalfirst, z₁, z₂, atmp, nlsolver, alg.step_limiter!) end struct SDIRK22ConstantCache{uType, tType, N, Tab} <: SDIRKConstantCache @@ -233,24 +277,29 @@ struct SDIRK22ConstantCache{uType, tType, N, Tab} <: SDIRKConstantCache tab::Tab end -function alg_cache(alg::SDIRK22, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SDIRK22, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{tTypeNoUnits}, ::Type{uBottomEltypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = SDIRK22Tableau(constvalue(uBottomEltypeNoUnits)) uprev3 = u tprev2 = t γ, c = 1, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) - SDIRK22ConstantCache(uprev3, tprev2, nlsolver) + return SDIRK22ConstantCache(uprev3, tprev2, nlsolver) end @cache mutable struct SDIRK22Cache{ - uType, rateType, uNoUnitsType, tType, N, Tab, StepLimiter} <: - SDIRKMutableCache + uType, rateType, uNoUnitsType, tType, N, Tab, StepLimiter, + } <: + SDIRKMutableCache u::uType uprev::uType uprev2::uType @@ -263,14 +312,18 @@ end step_limiter!::StepLimiter end -function alg_cache(alg::SDIRK22, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SDIRK22, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = SDIRK22Tableau(constvalue(uBottomEltypeNoUnits)) γ, c = 1, 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) uprev3 = zero(u) @@ -278,22 +331,27 @@ function alg_cache(alg::SDIRK22, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - SDIRK22Cache( - u, uprev, uprev2, fsalfirst, atmp, uprev3, tprev2, nlsolver, tab, alg.step_limiter!) # shouldn't this be SDIRK22Cache instead of SDIRK22? + return SDIRK22Cache( + u, uprev, uprev2, fsalfirst, atmp, uprev3, tprev2, nlsolver, tab, alg.step_limiter! + ) # shouldn't this be SDIRK22Cache instead of SDIRK22? end mutable struct SSPSDIRK2ConstantCache{N} <: SDIRKConstantCache nlsolver::N end -function alg_cache(alg::SSPSDIRK2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPSDIRK2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1 // 4, 1 // 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - SSPSDIRK2ConstantCache(nlsolver) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return SSPSDIRK2ConstantCache(nlsolver) end @cache mutable struct SSPSDIRK2Cache{uType, rateType, N} <: SDIRKMutableCache @@ -305,13 +363,17 @@ end nlsolver::N end -function alg_cache(alg::SSPSDIRK2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPSDIRK2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1 // 4, 1 // 1 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) z₁ = zero(u) @@ -319,7 +381,7 @@ function alg_cache(alg::SSPSDIRK2, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - SSPSDIRK2Cache(u, uprev, fsalfirst, z₁, z₂, nlsolver) + return SSPSDIRK2Cache(u, uprev, fsalfirst, z₁, z₂, nlsolver) end mutable struct Cash4ConstantCache{N, Tab} <: SDIRKConstantCache @@ -327,15 +389,19 @@ mutable struct Cash4ConstantCache{N, Tab} <: SDIRKConstantCache tab::Tab end -function alg_cache(alg::Cash4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Cash4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = Cash4Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - Cash4ConstantCache(nlsolver, tab) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return Cash4ConstantCache(nlsolver, tab) end @cache mutable struct Cash4Cache{uType, rateType, uNoUnitsType, N, Tab} <: SDIRKMutableCache @@ -352,14 +418,18 @@ end tab::Tab end -function alg_cache(alg::Cash4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Cash4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = Cash4Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) z₁ = zero(u) @@ -370,7 +440,7 @@ function alg_cache(alg::Cash4, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - Cash4Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, atmp, nlsolver, tab) + return Cash4Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, atmp, nlsolver, tab) end mutable struct SFSDIRK4ConstantCache{N, Tab} <: SDIRKConstantCache @@ -378,19 +448,23 @@ mutable struct SFSDIRK4ConstantCache{N, Tab} <: SDIRKConstantCache tab::Tab end -function alg_cache(alg::SFSDIRK4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SFSDIRK4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = SFSDIRK4Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - SFSDIRK4ConstantCache(nlsolver, tab) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return SFSDIRK4ConstantCache(nlsolver, tab) end @cache mutable struct SFSDIRK4Cache{uType, rateType, uNoUnitsType, N, Tab} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -404,14 +478,18 @@ end tab::Tab end -function alg_cache(alg::SFSDIRK4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SFSDIRK4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = SFSDIRK4Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) z₁ = zero(u) @@ -422,7 +500,7 @@ function alg_cache(alg::SFSDIRK4, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - SFSDIRK4Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, atmp, nlsolver, tab) + return SFSDIRK4Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, atmp, nlsolver, tab) end mutable struct SFSDIRK5ConstantCache{N, Tab} <: SDIRKConstantCache @@ -430,19 +508,23 @@ mutable struct SFSDIRK5ConstantCache{N, Tab} <: SDIRKConstantCache tab::Tab end -function alg_cache(alg::SFSDIRK5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SFSDIRK5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = SFSDIRK5Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - SFSDIRK5ConstantCache(nlsolver, tab) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return SFSDIRK5ConstantCache(nlsolver, tab) end @cache mutable struct SFSDIRK5Cache{uType, rateType, uNoUnitsType, N, Tab} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -457,14 +539,18 @@ end tab::Tab end -function alg_cache(alg::SFSDIRK5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SFSDIRK5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = SFSDIRK5Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) z₁ = zero(u) @@ -476,7 +562,7 @@ function alg_cache(alg::SFSDIRK5, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - SFSDIRK5Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, atmp, nlsolver, tab) + return SFSDIRK5Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, atmp, nlsolver, tab) end mutable struct SFSDIRK6ConstantCache{N, Tab} <: SDIRKConstantCache @@ -484,19 +570,23 @@ mutable struct SFSDIRK6ConstantCache{N, Tab} <: SDIRKConstantCache tab::Tab end -function alg_cache(alg::SFSDIRK6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SFSDIRK6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = SFSDIRK6Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - SFSDIRK6ConstantCache(nlsolver, tab) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return SFSDIRK6ConstantCache(nlsolver, tab) end @cache mutable struct SFSDIRK6Cache{uType, rateType, uNoUnitsType, N, Tab} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -511,14 +601,18 @@ end tab::Tab end -function alg_cache(alg::SFSDIRK6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SFSDIRK6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = SFSDIRK6Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) z₁ = zero(u) @@ -530,7 +624,7 @@ function alg_cache(alg::SFSDIRK6, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - SFSDIRK6Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, atmp, nlsolver, tab) + return SFSDIRK6Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, atmp, nlsolver, tab) end mutable struct SFSDIRK7ConstantCache{N, Tab} <: SDIRKConstantCache @@ -538,19 +632,23 @@ mutable struct SFSDIRK7ConstantCache{N, Tab} <: SDIRKConstantCache tab::Tab end -function alg_cache(alg::SFSDIRK7, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SFSDIRK7, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = SFSDIRK7Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - SFSDIRK7ConstantCache(nlsolver, tab) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return SFSDIRK7ConstantCache(nlsolver, tab) end @cache mutable struct SFSDIRK7Cache{uType, rateType, uNoUnitsType, N, Tab} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -566,14 +664,18 @@ end tab::Tab end -function alg_cache(alg::SFSDIRK7, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SFSDIRK7, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = SFSDIRK7Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) z₁ = zero(u) @@ -586,7 +688,7 @@ function alg_cache(alg::SFSDIRK7, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - SFSDIRK7Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, z₇, atmp, nlsolver, tab) + return SFSDIRK7Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, z₇, atmp, nlsolver, tab) end mutable struct SFSDIRK8ConstantCache{N, Tab} <: SDIRKConstantCache @@ -594,19 +696,23 @@ mutable struct SFSDIRK8ConstantCache{N, Tab} <: SDIRKConstantCache tab::Tab end -function alg_cache(alg::SFSDIRK8, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SFSDIRK8, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = SFSDIRK8Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - SFSDIRK8ConstantCache(nlsolver, tab) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return SFSDIRK8ConstantCache(nlsolver, tab) end @cache mutable struct SFSDIRK8Cache{uType, rateType, uNoUnitsType, N, Tab} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -623,14 +729,18 @@ end tab::Tab end -function alg_cache(alg::SFSDIRK8, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SFSDIRK8, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = SFSDIRK8Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) z₁ = zero(u) @@ -644,7 +754,7 @@ function alg_cache(alg::SFSDIRK8, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - SFSDIRK8Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, z₇, z₈, atmp, nlsolver, tab) + return SFSDIRK8Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, z₇, z₈, atmp, nlsolver, tab) end mutable struct Hairer4ConstantCache{N, Tab} <: SDIRKConstantCache @@ -656,20 +766,23 @@ function alg_cache( alg::Union{Hairer4, Hairer42}, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} if alg isa Hairer4 tab = Hairer4Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) else tab = Hairer42Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - Hairer4ConstantCache(nlsolver, tab) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return Hairer4ConstantCache(nlsolver, tab) end @cache mutable struct Hairer4Cache{uType, rateType, uNoUnitsType, Tab, N} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -687,15 +800,18 @@ function alg_cache( alg::Union{Hairer4, Hairer42}, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} if alg isa Hairer4 tab = Hairer4Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) else # Hairer42 tab = Hairer42Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) z₁ = zero(u) @@ -706,11 +822,11 @@ function alg_cache( atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - Hairer4Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, atmp, nlsolver, tab) + return Hairer4Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, atmp, nlsolver, tab) end @cache mutable struct ESDIRK54I8L2SACache{uType, rateType, uNoUnitsType, Tab, N} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -727,14 +843,18 @@ end tab::Tab end -function alg_cache(alg::ESDIRK54I8L2SA, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ESDIRK54I8L2SA, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = ESDIRK54I8L2SATableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) z₁ = zero(u) @@ -748,9 +868,10 @@ function alg_cache(alg::ESDIRK54I8L2SA, u, rate_prototype, ::Type{uEltypeNoUnits atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - ESDIRK54I8L2SACache( + return ESDIRK54I8L2SACache( u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, z₇, z₈, atmp, nlsolver, - tab) + tab + ) end mutable struct ESDIRK54I8L2SAConstantCache{N, Tab} <: SDIRKConstantCache @@ -758,19 +879,23 @@ mutable struct ESDIRK54I8L2SAConstantCache{N, Tab} <: SDIRKConstantCache tab::Tab end -function alg_cache(alg::ESDIRK54I8L2SA, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ESDIRK54I8L2SA, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = ESDIRK54I8L2SATableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - ESDIRK54I8L2SAConstantCache(nlsolver, tab) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return ESDIRK54I8L2SAConstantCache(nlsolver, tab) end @cache mutable struct ESDIRK436L2SA2Cache{uType, rateType, uNoUnitsType, Tab, N} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -785,14 +910,18 @@ end tab::Tab end -function alg_cache(alg::ESDIRK436L2SA2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ESDIRK436L2SA2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = ESDIRK436L2SA2Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) z₁ = zero(u) @@ -804,8 +933,10 @@ function alg_cache(alg::ESDIRK436L2SA2, u, rate_prototype, ::Type{uEltypeNoUnits atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - ESDIRK436L2SA2Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, atmp, nlsolver, - tab) + return ESDIRK436L2SA2Cache( + u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, atmp, nlsolver, + tab + ) end mutable struct ESDIRK436L2SA2ConstantCache{N, Tab} <: SDIRKConstantCache @@ -813,19 +944,23 @@ mutable struct ESDIRK436L2SA2ConstantCache{N, Tab} <: SDIRKConstantCache tab::Tab end -function alg_cache(alg::ESDIRK436L2SA2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ESDIRK436L2SA2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = ESDIRK436L2SA2Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - ESDIRK436L2SA2ConstantCache(nlsolver, tab) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return ESDIRK436L2SA2ConstantCache(nlsolver, tab) end @cache mutable struct ESDIRK437L2SACache{uType, rateType, uNoUnitsType, Tab, N} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -841,14 +976,18 @@ end tab::Tab end -function alg_cache(alg::ESDIRK437L2SA, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ESDIRK437L2SA, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = ESDIRK437L2SATableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) z₁ = zero(u) @@ -861,8 +1000,10 @@ function alg_cache(alg::ESDIRK437L2SA, u, rate_prototype, ::Type{uEltypeNoUnits} atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - ESDIRK437L2SACache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, z₇, atmp, nlsolver, - tab) + return ESDIRK437L2SACache( + u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, z₇, atmp, nlsolver, + tab + ) end mutable struct ESDIRK437L2SAConstantCache{N, Tab} <: SDIRKConstantCache @@ -870,19 +1011,23 @@ mutable struct ESDIRK437L2SAConstantCache{N, Tab} <: SDIRKConstantCache tab::Tab end -function alg_cache(alg::ESDIRK437L2SA, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ESDIRK437L2SA, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = ESDIRK437L2SATableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - ESDIRK437L2SAConstantCache(nlsolver, tab) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return ESDIRK437L2SAConstantCache(nlsolver, tab) end @cache mutable struct ESDIRK547L2SA2Cache{uType, rateType, uNoUnitsType, Tab, N} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -898,14 +1043,18 @@ end tab::Tab end -function alg_cache(alg::ESDIRK547L2SA2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ESDIRK547L2SA2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = ESDIRK547L2SA2Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) z₁ = zero(u) @@ -918,8 +1067,10 @@ function alg_cache(alg::ESDIRK547L2SA2, u, rate_prototype, ::Type{uEltypeNoUnits atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - ESDIRK547L2SA2Cache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, z₇, atmp, nlsolver, - tab) + return ESDIRK547L2SA2Cache( + u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, z₇, atmp, nlsolver, + tab + ) end mutable struct ESDIRK547L2SA2ConstantCache{N, Tab} <: SDIRKConstantCache @@ -927,19 +1078,23 @@ mutable struct ESDIRK547L2SA2ConstantCache{N, Tab} <: SDIRKConstantCache tab::Tab end -function alg_cache(alg::ESDIRK547L2SA2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ESDIRK547L2SA2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = ESDIRK547L2SA2Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - ESDIRK547L2SA2ConstantCache(nlsolver, tab) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return ESDIRK547L2SA2ConstantCache(nlsolver, tab) end @cache mutable struct ESDIRK659L2SACache{uType, rateType, uNoUnitsType, Tab, N} <: - SDIRKMutableCache + SDIRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -957,15 +1112,19 @@ end tab::Tab end -function alg_cache(alg::ESDIRK659L2SA, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ESDIRK659L2SA, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = ESDIRK659L2SATableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) fsalfirst = zero(rate_prototype) z₁ = zero(u) @@ -980,8 +1139,10 @@ function alg_cache(alg::ESDIRK659L2SA, u, rate_prototype, ::Type{uEltypeNoUnits} atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - ESDIRK659L2SACache(u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, z₇, z₈, z₉, atmp, - nlsolver, tab) + return ESDIRK659L2SACache( + u, uprev, fsalfirst, z₁, z₂, z₃, z₄, z₅, z₆, z₇, z₈, z₉, atmp, + nlsolver, tab + ) end mutable struct ESDIRK659L2SAConstantCache{N, Tab} <: SDIRKConstantCache @@ -989,14 +1150,18 @@ mutable struct ESDIRK659L2SAConstantCache{N, Tab} <: SDIRKConstantCache tab::Tab end -function alg_cache(alg::ESDIRK659L2SA, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ESDIRK659L2SA, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where - {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where + {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = ESDIRK659L2SATableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) γ, c = tab.γ, tab.γ - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) - ESDIRK659L2SAConstantCache(nlsolver, tab) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) + return ESDIRK659L2SAConstantCache(nlsolver, tab) end diff --git a/lib/OrdinaryDiffEqSDIRK/src/sdirk_perform_step.jl b/lib/OrdinaryDiffEqSDIRK/src/sdirk_perform_step.jl index 0998ac0a8c..283b8817a7 100644 --- a/lib/OrdinaryDiffEqSDIRK/src/sdirk_perform_step.jl +++ b/lib/OrdinaryDiffEqSDIRK/src/sdirk_perform_step.jl @@ -7,7 +7,7 @@ function initialize!(integrator, cache::SDIRKConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end function initialize!(integrator, cache::SDIRKMutableCache) @@ -16,11 +16,13 @@ function initialize!(integrator, cache::SDIRKMutableCache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # For the interpolation, needs k at the updated point - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end -@muladd function perform_step!(integrator, cache::ImplicitEulerConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::ImplicitEulerConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator nlsolver = cache.nlsolver alg = unwrap_alg(integrator, true) @@ -53,9 +55,11 @@ end r = c * dt^2 # by mean value theorem 2nd DD equals y''(s)/2 for some s tmp = r * - integrator.opts.internalnorm.((u - uprev) / dt1 - (uprev - uprev2) / dt2, t) - atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + integrator.opts.internalnorm.((u - uprev) / dt1 - (uprev - uprev2) / dt2, t) + atmp = calculate_residuals( + tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) else integrator.EEst = 1 @@ -65,7 +69,7 @@ end if integrator.opts.adaptive && integrator.differential_vars !== nothing atmp = @. ifelse(!integrator.differential_vars, integrator.fsallast, false) ./ - integrator.opts.abstol + integrator.opts.abstol integrator.EEst += integrator.opts.internalnorm(atmp, t) end @@ -84,7 +88,7 @@ end # initial guess if alg.extrapolant == :linear - @.. broadcast=false z=dt * integrator.fsalfirst + @.. broadcast = false z = dt * integrator.fsalfirst else # :constant z .= zero(eltype(u)) end @@ -93,7 +97,7 @@ end nlsolver.γ = 1 z = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=uprev + z + @.. broadcast = false u = uprev + z step_limiter!(u, integrator, p, t + dt) @@ -110,11 +114,14 @@ end c = 7 / 12 # default correction factor in SPICE (LTE overestimated by DD) r = c * dt^2 # by mean value theorem 2nd DD equals y''(s)/2 for some s - @.. broadcast=false tmp=r * integrator.opts.internalnorm( + @.. broadcast = false tmp = r * integrator.opts.internalnorm( (u - uprev) / dt1 - - (uprev - uprev2) / dt2, t) - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + (uprev - uprev2) / dt2, t + ) + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) else integrator.EEst = 1 @@ -123,14 +130,16 @@ end f(integrator.fsallast, u, p, t + dt) if integrator.opts.adaptive && integrator.differential_vars !== nothing - @.. broadcast=false atmp=ifelse(cache.algebraic_vars, integrator.fsallast, false) / - integrator.opts.abstol + @.. broadcast = false atmp = ifelse(cache.algebraic_vars, integrator.fsallast, false) / + integrator.opts.abstol integrator.EEst += integrator.opts.internalnorm(atmp, t) end end -@muladd function perform_step!(integrator, cache::ImplicitMidpointConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::ImplicitMidpointConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator nlsolver = cache.nlsolver alg = unwrap_alg(integrator, true) @@ -156,8 +165,10 @@ end integrator.u = u end -@muladd function perform_step!(integrator, cache::ImplicitMidpointCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::ImplicitMidpointCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; nlsolver, step_limiter!) = cache (; z, tmp) = nlsolver @@ -168,7 +179,7 @@ end # initial guess if alg.extrapolant == :linear - @.. broadcast=false z=dt * integrator.fsalfirst + @.. broadcast = false z = dt * integrator.fsalfirst else # :constant z .= zero(eltype(u)) end @@ -176,7 +187,7 @@ end nlsolver.tmp = uprev z = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=nlsolver.tmp + z + @.. broadcast = false u = nlsolver.tmp + z step_limiter!(u, integrator, p, t + dt) @@ -184,8 +195,10 @@ end f(integrator.fsallast, u, p, t + dt) end -@muladd function perform_step!(integrator, cache::TrapezoidConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::TrapezoidConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator nlsolver = cache.nlsolver alg = unwrap_alg(integrator, true) @@ -198,7 +211,7 @@ end nlsolver.z = uprev if f.mass_matrix === I - nlsolver.tmp = @.. broadcast=false uprev * inv(γdt)+integrator.fsalfirst + nlsolver.tmp = @.. broadcast = false uprev * inv(γdt) + integrator.fsalfirst else nlsolver.tmp = (f.mass_matrix * uprev) .* inv(γdt) .+ integrator.fsalfirst end @@ -231,9 +244,11 @@ end DD31 = (u - uprev) / dt1 - (uprev - uprev2) / dt2 DD30 = (uprev - uprev2) / dt3 - (uprev2 - uprev3) / dt4 tmp = r * integrator.opts.internalnorm((DD31 - DD30) / dt5, t) - atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, + atmp = calculate_residuals( + tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if integrator.EEst <= 1 cache.uprev3 = uprev2 @@ -268,20 +283,20 @@ end markfirststage!(nlsolver) # initial guess: constant extrapolation - @.. broadcast=false z=uprev + @.. broadcast = false z = uprev invγdt = inv(γdt) if mass_matrix === I - @.. broadcast=false tmp=uprev * invγdt + integrator.fsalfirst + @.. broadcast = false tmp = uprev * invγdt + integrator.fsalfirst else mul!(u, mass_matrix, uprev) - @.. broadcast=false tmp=u * invγdt + integrator.fsalfirst + @.. broadcast = false tmp = u * invγdt + integrator.fsalfirst end nlsolver.α = 1 nlsolver.γ = γ nlsolver.method = COEFFICIENT_MULTISTEP z = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=z + @.. broadcast = false u = z step_limiter!(u, integrator, p, t + dt) @@ -305,17 +320,26 @@ end r = c * dt^3 / 2 # by mean value theorem 3rd DD equals y'''(s)/6 for some s # @.. broadcast=false tmp = r*abs(((u - uprev)/dt1 - (uprev - uprev2)/dt2) - ((uprev - uprev2)/dt3 - (uprev2 - uprev3)/dt4)/dt5) - @.. broadcast=false tmp=r * integrator.opts.internalnorm( - (((u - uprev) / dt1 - - (uprev - uprev2) / dt2) #DD31 - - - ((uprev - uprev2) / dt3 - - (uprev2 - uprev3) / - dt4)) / - dt5, - t) - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false tmp = r * integrator.opts.internalnorm( + ( + ( + (u - uprev) / dt1 - + (uprev - uprev2) / dt2 + ) #DD31 + - + ( + (uprev - uprev2) / dt3 - + (uprev2 - uprev3) / + dt4 + ) + ) / + dt5, + t + ) + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if integrator.EEst <= 1 copyto!(cache.uprev3, uprev2) @@ -378,8 +402,10 @@ end else est = tmp end - atmp = calculate_residuals(est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -399,15 +425,15 @@ end alg = unwrap_alg(integrator, true) # FSAL - @.. broadcast=false zprev=dt * integrator.fsalfirst + @.. broadcast = false zprev = dt * integrator.fsalfirst markfirststage!(nlsolver) ##### Solve Trapezoid Step # TODO: Add extrapolation - @.. broadcast=false zᵧ=zprev + @.. broadcast = false zᵧ = zprev z .= zᵧ - @.. broadcast=false tmp=uprev + d * zprev + @.. broadcast = false tmp = uprev + d * zprev nlsolver.c = γ zᵧ .= nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -415,36 +441,40 @@ end ################################## Solve BDF2 Step ### Initial Guess From Shampine - @.. broadcast=false z=α1 * zprev + α2 * zᵧ - @.. broadcast=false tmp=uprev + ω * zprev + ω * zᵧ + @.. broadcast = false z = α1 * zprev + α2 * zᵧ + @.. broadcast = false tmp = uprev + ω * zprev + ω * zᵧ nlsolver.c = 1 isnewton(nlsolver) && set_new_W!(nlsolver, false) nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + d * z + @.. broadcast = false u = tmp + d * z step_limiter!(u, integrator, p, t + dt) ################################### Finalize if integrator.opts.adaptive - @.. broadcast=false tmp=btilde1 * zprev + btilde2 * zᵧ + btilde3 * z + @.. broadcast = false tmp = btilde1 * zprev + btilde2 * zᵧ + btilde3 * z if alg.smooth_est && isnewton(nlsolver) # From Shampine est = nlsolver.cache.dz - linres = dolinsolve(integrator, nlsolver.cache.linsolve; b = _vec(tmp), - linu = _vec(est)) + linres = dolinsolve( + integrator, nlsolver.cache.linsolve; b = _vec(tmp), + linu = _vec(est) + ) integrator.stats.nsolve += 1 else est = tmp end - calculate_residuals!(atmp, est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end - @.. broadcast=false integrator.fsallast=z / dt + @.. broadcast = false integrator.fsallast = z / dt end @muladd function perform_step!(integrator, cache::TRBDF2Cache{<:Array}, repeat_step = false) @@ -503,15 +533,19 @@ end if alg.smooth_est && isnewton(nlsolver) # From Shampine est = nlsolver.cache.dz - linres = dolinsolve(integrator, nlsolver.cache.linsolve; b = _vec(tmp), - linu = _vec(est)) + linres = dolinsolve( + integrator, nlsolver.cache.linsolve; b = _vec(tmp), + linu = _vec(est) + ) integrator.stats.nsolve += 1 else est = tmp end - calculate_residuals!(atmp, est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -528,7 +562,7 @@ end # initial guess if integrator.success_iter > 0 && !integrator.reeval_fsal && - alg.extrapolant == :interpolant + alg.extrapolant == :interpolant current_extrapolant!(u, t + dt, integrator) z₁ = u - uprev elseif alg.extrapolant == :linear @@ -560,8 +594,10 @@ end else est = tmp end - atmp = calculate_residuals(est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -582,11 +618,11 @@ end # initial guess if integrator.success_iter > 0 && !integrator.reeval_fsal && - alg.extrapolant == :interpolant + alg.extrapolant == :interpolant current_extrapolant!(u, t + dt, integrator) - @.. broadcast=false z₁=u - uprev + @.. broadcast = false z₁ = u - uprev elseif alg.extrapolant == :linear - @.. broadcast=false z₁=dt * integrator.fsalfirst + @.. broadcast = false z₁ = dt * integrator.fsalfirst else z₁ .= zero(eltype(u)) end @@ -603,29 +639,33 @@ end z₂ .= zero(eltype(u)) nlsolver.z = z₂ isnewton(nlsolver) && set_new_W!(nlsolver, false) - @.. broadcast=false tmp=uprev - z₁ + @.. broadcast = false tmp = uprev - z₁ nlsolver.tmp = tmp z₂ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=uprev + z₁ / 2 + z₂ / 2 + @.. broadcast = false u = uprev + z₁ / 2 + z₂ / 2 step_limiter!(u, integrator, p, t + dt) ################################### Finalize if integrator.opts.adaptive - @.. broadcast=false tmp=z₁ / 2 - z₂ / 2 + @.. broadcast = false tmp = z₁ / 2 - z₂ / 2 if alg.smooth_est && isnewton(nlsolver) # From Shampine est = nlsolver.cache.dz - linres = dolinsolve(integrator, nlsolver.cache.linsolve; b = _vec(tmp), - linu = _vec(est)) + linres = dolinsolve( + integrator, nlsolver.cache.linsolve; b = _vec(tmp), + linu = _vec(est) + ) integrator.stats.nsolve += 1 else est = tmp end - calculate_residuals!(atmp, est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -685,9 +725,11 @@ end DD31 = (u - uprev) / dt1 - (uprev - uprev2) / dt2 DD30 = (uprev - uprev2) / dt3 - (uprev2 - uprev3) / dt4 tmp = r * abs((DD31 - DD30) / dt5) - atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, + atmp = calculate_residuals( + tmp, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, - t) + t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if integrator.EEst <= 1 cache.uprev3 = uprev2 @@ -722,20 +764,20 @@ end markfirststage!(nlsolver) # first stage - @.. broadcast=false z=dt * integrator.fsalfirst - @.. broadcast=false tmp=uprev + γdt * integrator.fsalfirst + @.. broadcast = false z = dt * integrator.fsalfirst + @.. broadcast = false tmp = uprev + γdt * integrator.fsalfirst z = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=α * tmp + β * z + @.. broadcast = false u = α * tmp + β * z # final stage γ = dt γdt = γ * dt markfirststage!(nlsolver) - @.. broadcast=false tmp=uprev + γdt * integrator.fsalfirst + @.. broadcast = false tmp = uprev + γdt * integrator.fsalfirst z = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=nlsolver.tmp + @.. broadcast = false u = nlsolver.tmp step_limiter!(u, integrator, p, t + dt) @@ -763,8 +805,10 @@ end DD30 = (uprev[i] - uprev2[i]) / dt3 - (uprev2[i] - uprev3[i]) / dt4 tmp[i] = r * abs((DD31 - DD30) / dt5) end - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) if integrator.EEst <= 1 copyto!(cache.uprev3, uprev2) @@ -783,8 +827,10 @@ end f(integrator.fsallast, u, p, t + dt) end -@muladd function perform_step!(integrator, cache::SSPSDIRK2ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::SSPSDIRK2ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator nlsolver = cache.nlsolver alg = unwrap_alg(integrator, true) @@ -796,7 +842,7 @@ end # initial guess if integrator.success_iter > 0 && !integrator.reeval_fsal && - alg.extrapolant == :interpolant + alg.extrapolant == :interpolant current_extrapolant!(u, t + dt, integrator) z₁ = u - uprev elseif alg.extrapolant == :linear @@ -850,11 +896,11 @@ end # initial guess if integrator.success_iter > 0 && !integrator.reeval_fsal && - alg.extrapolant == :interpolant + alg.extrapolant == :interpolant current_extrapolant!(u, t + dt, integrator) - @.. broadcast=false z₁=u - uprev + @.. broadcast = false z₁ = u - uprev elseif alg.extrapolant == :linear - @.. broadcast=false z₁=dt * integrator.fsalfirst + @.. broadcast = false z₁ = dt * integrator.fsalfirst else z₁ .= zero(eltype(u)) end @@ -868,16 +914,16 @@ end ################################## Solve Step 2 ### Initial Guess Is α₁ = c₂/γ - @.. broadcast=false z₂=c2 / γ + @.. broadcast = false z₂ = c2 / γ nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + z₁ / 2 + @.. broadcast = false tmp = uprev + z₁ / 2 nlsolver.tmp = tmp isnewton(nlsolver) && set_new_W!(nlsolver, false) z₂ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + z₂ / 2 + @.. broadcast = false u = tmp + z₂ / 2 ################################### Finalize @@ -974,8 +1020,10 @@ end else est = tmp end - atmp = calculate_residuals(est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -1013,7 +1061,7 @@ end z₂ .= zero(eltype(z₂)) nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + a21 * z₁ + @.. broadcast = false tmp = uprev + a21 * z₁ nlsolver.tmp = tmp isnewton(nlsolver) && set_new_W!(nlsolver, false) nlsolver.c = c2 @@ -1023,9 +1071,9 @@ end ################################## Solve Step 3 # Guess starts from z₁ - @.. broadcast=false z₃=z₁ + @.. broadcast = false z₃ = z₁ nlsolver.z = z₃ - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ nlsolver.c = c3 z₃ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1033,10 +1081,10 @@ end ################################## Solve Step 4 # Use constant z prediction - @.. broadcast=false z₄=z₃ + @.. broadcast = false z₄ = z₃ nlsolver.z = z₄ - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ nlsolver.c = c4 z₄ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1044,14 +1092,14 @@ end ################################## Solve Step 5 # Use constant z prediction - @.. broadcast=false z₅=b1hat2 * z₁ + b2hat2 * z₂ + b3hat2 * z₃ + b4hat2 * z₄ + @.. broadcast = false z₅ = b1hat2 * z₁ + b2hat2 * z₂ + b3hat2 * z₃ + b4hat2 * z₄ nlsolver.z = z₅ - @.. broadcast=false tmp=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + @.. broadcast = false tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ nlsolver.c = 1 z₅ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + γ * z₅ + @.. broadcast = false u = tmp + γ * z₅ ################################### Finalize @@ -1070,26 +1118,32 @@ end btilde5 = -γ end - @.. broadcast=false tmp=btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + - btilde5 * z₅ + @.. broadcast = false tmp = btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + + btilde5 * z₅ if alg.smooth_est && isnewton(nlsolver) # From Shampine est = nlsolver.cache.dz - linres = dolinsolve(integrator, nlsolver.cache.linsolve; b = _vec(tmp), - linu = _vec(est)) + linres = dolinsolve( + integrator, nlsolver.cache.linsolve; b = _vec(tmp), + linu = _vec(est) + ) integrator.stats.nsolve += 1 else est = tmp end - calculate_residuals!(atmp, est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end - @.. broadcast=false integrator.fsallast=z₅ / dt + @.. broadcast = false integrator.fsallast = z₅ / dt end -@muladd function perform_step!(integrator, cache::SFSDIRK4ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::SFSDIRK4ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; γ, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, c2, c3, c4) = cache.tab nlsolver = cache.nlsolver @@ -1176,7 +1230,7 @@ end z₂ .= zero(eltype(z₂)) nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + a21 * z₁ + @.. broadcast = false tmp = uprev + a21 * z₁ nlsolver.tmp = tmp isnewton(nlsolver) && set_new_W!(nlsolver, false) nlsolver.c = c2 @@ -1186,9 +1240,9 @@ end ################################## Solve Step 3 # Guess starts from z₁ - @.. broadcast=false z₃=z₁ + @.. broadcast = false z₃ = z₁ nlsolver.z = z₃ - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ nlsolver.c = c3 z₃ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1196,22 +1250,24 @@ end ################################## Solve Step 4 # Use constant z prediction - @.. broadcast=false z₄=z₃ + @.. broadcast = false z₄ = z₃ nlsolver.z = z₄ - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ nlsolver.c = c4 z₄ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + @.. broadcast = false u = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ ################################### Finalize - @.. broadcast=false integrator.fsallast=z₄ / dt + @.. broadcast = false integrator.fsallast = z₄ / dt end -@muladd function perform_step!(integrator, cache::SFSDIRK5ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::SFSDIRK5ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; γ, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, c2, c3, c4, c5) = cache.tab nlsolver = cache.nlsolver @@ -1309,7 +1365,7 @@ end z₂ .= zero(eltype(z₂)) nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + a21 * z₁ + @.. broadcast = false tmp = uprev + a21 * z₁ nlsolver.tmp = tmp isnewton(nlsolver) && set_new_W!(nlsolver, false) nlsolver.c = c2 @@ -1319,9 +1375,9 @@ end ################################## Solve Step 3 # Guess starts from z₁ - @.. broadcast=false z₃=z₁ + @.. broadcast = false z₃ = z₁ nlsolver.z = z₃ - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ nlsolver.c = c3 z₃ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1329,10 +1385,10 @@ end ################################## Solve Step 4 # Use constant z prediction - @.. broadcast=false z₄=z₃ + @.. broadcast = false z₄ = z₃ nlsolver.z = z₄ - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ nlsolver.c = c4 z₄ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1340,21 +1396,23 @@ end ################################## Solve Step 5 # Use constant z prediction - @.. broadcast=false z₅=z₄ + @.. broadcast = false z₅ = z₄ nlsolver.z = z₅ - @.. broadcast=false tmp=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + @.. broadcast = false tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ nlsolver.c = c5 z₅ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return ################################### Finalize - @.. broadcast=false u=uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ + @.. broadcast = false u = uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ - @.. broadcast=false integrator.fsallast=z₅ / dt + @.. broadcast = false integrator.fsallast = z₅ / dt end -@muladd function perform_step!(integrator, cache::SFSDIRK6ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::SFSDIRK6ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; γ, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, c2, c3, c4, c5, c6) = cache.tab nlsolver = cache.nlsolver @@ -1463,7 +1521,7 @@ end z₂ .= zero(eltype(z₂)) nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + a21 * z₁ + @.. broadcast = false tmp = uprev + a21 * z₁ nlsolver.tmp = tmp isnewton(nlsolver) && set_new_W!(nlsolver, false) nlsolver.c = c2 @@ -1473,9 +1531,9 @@ end ################################## Solve Step 3 # Guess starts from z₁ - @.. broadcast=false z₃=z₁ + @.. broadcast = false z₃ = z₁ nlsolver.z = z₃ - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ nlsolver.c = c3 z₃ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1483,10 +1541,10 @@ end ################################## Solve Step 4 # Use constant z prediction - @.. broadcast=false z₄=z₃ + @.. broadcast = false z₄ = z₃ nlsolver.z = z₄ - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ nlsolver.c = c4 z₄ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1494,10 +1552,10 @@ end ################################## Solve Step 5 # Use constant z prediction - @.. broadcast=false z₅=z₄ + @.. broadcast = false z₅ = z₄ nlsolver.z = z₅ - @.. broadcast=false tmp=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + @.. broadcast = false tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ nlsolver.c = c5 z₅ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1505,23 +1563,25 @@ end ################################## Solve Step 6 # Use constant z prediction - @.. broadcast=false z₆=z₅ + @.. broadcast = false z₆ = z₅ nlsolver.z = z₆ - @.. broadcast=false tmp=uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ + @.. broadcast = false tmp = uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ nlsolver.c = c6 z₆ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return ################################### Finalize - @.. broadcast=false u=uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + a75 * z₅ + - a76 * z₆ + @.. broadcast = false u = uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + a75 * z₅ + + a76 * z₆ - @.. broadcast=false integrator.fsallast=z₆ / dt + @.. broadcast = false integrator.fsallast = z₆ / dt end -@muladd function perform_step!(integrator, cache::SFSDIRK7ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::SFSDIRK7ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; γ, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, a81, a82, a83, a84, a85, a86, a87, c2, c3, c4, c5, c6, c7) = cache.tab nlsolver = cache.nlsolver @@ -1641,7 +1701,7 @@ end z₂ .= zero(eltype(z₂)) nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + a21 * z₁ + @.. broadcast = false tmp = uprev + a21 * z₁ nlsolver.tmp = tmp isnewton(nlsolver) && set_new_W!(nlsolver, false) nlsolver.c = c2 @@ -1651,9 +1711,9 @@ end ################################## Solve Step 3 # Guess starts from z₁ - @.. broadcast=false z₃=z₁ + @.. broadcast = false z₃ = z₁ nlsolver.z = z₃ - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ nlsolver.c = c3 z₃ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1661,10 +1721,10 @@ end ################################## Solve Step 4 # Use constant z prediction - @.. broadcast=false z₄=z₃ + @.. broadcast = false z₄ = z₃ nlsolver.z = z₄ - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ nlsolver.c = c4 z₄ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1672,10 +1732,10 @@ end ################################## Solve Step 5 # Use constant z prediction - @.. broadcast=false z₅=z₄ + @.. broadcast = false z₅ = z₄ nlsolver.z = z₅ - @.. broadcast=false tmp=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + @.. broadcast = false tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ nlsolver.c = c5 z₅ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1683,10 +1743,10 @@ end ################################## Solve Step 6 # Use constant z prediction - @.. broadcast=false z₆=z₅ + @.. broadcast = false z₆ = z₅ nlsolver.z = z₆ - @.. broadcast=false tmp=uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ + @.. broadcast = false tmp = uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ nlsolver.c = c6 z₆ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1694,24 +1754,26 @@ end ################################## Solve Step 7 # Use constant z prediction - @.. broadcast=false z₇=z₆ + @.. broadcast = false z₇ = z₆ nlsolver.z = z₇ - @.. broadcast=false tmp=uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + a75 * z₅ + - a76 * z₆ + @.. broadcast = false tmp = uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + a75 * z₅ + + a76 * z₆ nlsolver.c = c7 z₇ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return ################################### Finalize - @.. broadcast=false u=uprev + a81 * z₁ + a82 * z₂ + a83 * z₃ + a84 * z₄ + a85 * z₅ + - a86 * z₆ + a87 * z₇ + @.. broadcast = false u = uprev + a81 * z₁ + a82 * z₂ + a83 * z₃ + a84 * z₄ + a85 * z₅ + + a86 * z₆ + a87 * z₇ - @.. broadcast=false integrator.fsallast=z₇ / dt + @.. broadcast = false integrator.fsallast = z₇ / dt end -@muladd function perform_step!(integrator, cache::SFSDIRK8ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::SFSDIRK8ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; γ, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, a81, a82, a83, a84, a85, a86, a87, a91, a92, a93, a94, a95, a96, a97, a98, c2, c3, c4, c5, c6, c7, c8) = cache.tab nlsolver = cache.nlsolver @@ -1802,7 +1864,7 @@ end nlsolver.z = z₈ nlsolver.tmp = uprev + a81 * z₁ + a82 * z₂ + a83 * z₃ + a84 * z₄ + a85 * z₅ + a86 * z₆ + - a87 * z₇ + a87 * z₇ nlsolver.c = c8 z₈ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1844,7 +1906,7 @@ end z₂ .= zero(eltype(z₂)) nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + a21 * z₁ + @.. broadcast = false tmp = uprev + a21 * z₁ nlsolver.tmp = tmp isnewton(nlsolver) && set_new_W!(nlsolver, false) nlsolver.c = c2 @@ -1854,9 +1916,9 @@ end ################################## Solve Step 3 # Guess starts from z₁ - @.. broadcast=false z₃=z₁ + @.. broadcast = false z₃ = z₁ nlsolver.z = z₃ - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ nlsolver.c = c3 z₃ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1864,10 +1926,10 @@ end ################################## Solve Step 4 # Use constant z prediction - @.. broadcast=false z₄=z₃ + @.. broadcast = false z₄ = z₃ nlsolver.z = z₄ - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ nlsolver.c = c4 z₄ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1875,10 +1937,10 @@ end ################################## Solve Step 5 # Use constant z prediction - @.. broadcast=false z₅=z₄ + @.. broadcast = false z₅ = z₄ nlsolver.z = z₅ - @.. broadcast=false tmp=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + @.. broadcast = false tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ nlsolver.c = c5 z₅ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1886,10 +1948,10 @@ end ################################## Solve Step 6 # Use constant z prediction - @.. broadcast=false z₆=z₅ + @.. broadcast = false z₆ = z₅ nlsolver.z = z₆ - @.. broadcast=false tmp=uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ + @.. broadcast = false tmp = uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ nlsolver.c = c6 z₆ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1897,11 +1959,11 @@ end ################################## Solve Step 7 # Use constant z prediction - @.. broadcast=false z₇=z₆ + @.. broadcast = false z₇ = z₆ nlsolver.z = z₇ - @.. broadcast=false tmp=uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + a75 * z₅ + - a76 * z₆ + @.. broadcast = false tmp = uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + a75 * z₅ + + a76 * z₆ nlsolver.c = c7 z₇ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -1909,20 +1971,20 @@ end ################################## Solve Step 8 # Use constant z prediction - @.. broadcast=false z₈=z₇ + @.. broadcast = false z₈ = z₇ nlsolver.z = z₈ - @.. broadcast=false tmp=uprev + a81 * z₁ + a82 * z₂ + a83 * z₃ + a84 * z₄ + a85 * z₅ + - a86 * z₆ + a87 * z₇ + @.. broadcast = false tmp = uprev + a81 * z₁ + a82 * z₂ + a83 * z₃ + a84 * z₄ + a85 * z₅ + + a86 * z₆ + a87 * z₇ nlsolver.c = c8 z₈ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return ################################### Finalize - @.. broadcast=false u=uprev + a91 * z₁ + a92 * z₂ + a93 * z₃ + a94 * z₄ + a95 * z₅ + - a96 * z₆ + a97 * z₇ + a98 * z₈ + @.. broadcast = false u = uprev + a91 * z₁ + a92 * z₂ + a93 * z₃ + a94 * z₄ + a95 * z₅ + + a96 * z₆ + a97 * z₇ + a98 * z₈ - @.. broadcast=false integrator.fsallast=z₈ / dt + @.. broadcast = false integrator.fsallast = z₈ / dt end @muladd function perform_step!(integrator, cache::Hairer4ConstantCache, repeat_step = false) @@ -1993,8 +2055,10 @@ end else est = tmp end - atmp = calculate_residuals(est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -2016,11 +2080,11 @@ end # initial guess if integrator.success_iter > 0 && !integrator.reeval_fsal && - alg.extrapolant == :interpolant + alg.extrapolant == :interpolant current_extrapolant!(u, t + dt, integrator) - @.. broadcast=false z₁=u - uprev + @.. broadcast = false z₁ = u - uprev elseif alg.extrapolant == :linear - @.. broadcast=false z₁=dt * integrator.fsalfirst + @.. broadcast = false z₁ = dt * integrator.fsalfirst else z₁ .= zero(eltype(z₁)) end @@ -2035,9 +2099,9 @@ end ##### Step 2 - @.. broadcast=false z₂=α21 * z₁ + @.. broadcast = false z₂ = α21 * z₁ nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + a21 * z₁ + @.. broadcast = false tmp = uprev + a21 * z₁ nlsolver.tmp = tmp nlsolver.c = c2 isnewton(nlsolver) && set_new_W!(nlsolver, false) @@ -2046,9 +2110,9 @@ end ################################## Solve Step 3 - @.. broadcast=false z₃=α31 * z₁ + α32 * z₂ + @.. broadcast = false z₃ = α31 * z₁ + α32 * z₂ nlsolver.z = z₃ - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ nlsolver.c = c3 z₃ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2056,9 +2120,9 @@ end ################################## Solve Step 4 # Use constant z prediction - @.. broadcast=false z₄=α41 * z₁ + α43 * z₃ + @.. broadcast = false z₄ = α41 * z₁ + α43 * z₃ nlsolver.z = z₄ - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ nlsolver.c = c4 z₄ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2066,49 +2130,57 @@ end ################################## Solve Step 5 # Use yhat prediction - @.. broadcast=false z₅=bhat1 * z₁ + bhat2 * z₂ + bhat3 * z₃ + bhat4 * z₄ + @.. broadcast = false z₅ = bhat1 * z₁ + bhat2 * z₂ + bhat3 * z₃ + bhat4 * z₄ nlsolver.z = z₅ - @.. broadcast=false tmp=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + @.. broadcast = false tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ nlsolver.c = 1 z₅ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + γ * z₅ + @.. broadcast = false u = tmp + γ * z₅ ################################### Finalize if integrator.opts.adaptive - @.. broadcast=false tmp=btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + - btilde5 * z₅ + @.. broadcast = false tmp = btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + + btilde5 * z₅ if alg.smooth_est && isnewton(nlsolver) # From Shampine est = nlsolver.cache.dz - linres = dolinsolve(integrator, nlsolver.cache.linsolve; b = _vec(tmp), - linu = _vec(est)) + linres = dolinsolve( + integrator, nlsolver.cache.linsolve; b = _vec(tmp), + linu = _vec(est) + ) integrator.stats.nsolve += 1 else est = tmp end - calculate_residuals!(atmp, est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end - @.. broadcast=false integrator.fsallast=z₅ / dt + @.. broadcast = false integrator.fsallast = z₅ / dt end -@muladd function perform_step!(integrator, cache::ESDIRK54I8L2SAConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::ESDIRK54I8L2SAConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator - (; γ, - a31, a32, - a41, a42, a43, - a51, a52, a53, a54, - a61, a62, a63, a64, a65, - a71, a72, a73, a74, a75, a76, - a81, a82, a83, a84, a85, a86, a87, - c3, c4, c5, c6, c7, - btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7, btilde8) = cache.tab + (; + γ, + a31, a32, + a41, a42, a43, + a51, a52, a53, a54, + a61, a62, a63, a64, a65, + a71, a72, a73, a74, a75, a76, + a81, a82, a83, a84, a85, a86, a87, + c3, c4, c5, c6, c7, + btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7, btilde8, + ) = cache.tab nlsolver = cache.nlsolver alg = unwrap_alg(integrator, true) @@ -2182,7 +2254,7 @@ end nlsolver.z = z₈ = zero(z₇) nlsolver.tmp = uprev + a81 * z₁ + a82 * z₂ + a83 * z₃ + a84 * z₄ + a85 * z₅ + a86 * z₆ + - a87 * z₇ + a87 * z₇ nlsolver.c = 1 z₈ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2193,9 +2265,11 @@ end if integrator.opts.adaptive est = btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + - btilde6 * z₆ + btilde7 * z₇ + btilde8 * z₈ - atmp = calculate_residuals(est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + btilde6 * z₆ + btilde7 * z₇ + btilde8 * z₈ + atmp = calculate_residuals( + est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -2210,15 +2284,17 @@ end (; t, dt, uprev, u, f, p) = integrator (; z₁, z₂, z₃, z₄, z₅, z₆, z₇, z₈, atmp, nlsolver) = cache (; tmp) = nlsolver - (; γ, - a31, a32, - a41, a42, a43, - a51, a52, a53, a54, - a61, a62, a63, a64, a65, - a71, a72, a73, a74, a75, a76, - a81, a82, a83, a84, a85, a86, a87, - c3, c4, c5, c6, c7, - btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7, btilde8) = cache.tab + (; + γ, + a31, a32, + a41, a42, a43, + a51, a52, a53, a54, + a61, a62, a63, a64, a65, + a71, a72, a73, a74, a75, a76, + a81, a82, a83, a84, a85, a86, a87, + c3, c4, c5, c6, c7, + btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7, btilde8, + ) = cache.tab alg = unwrap_alg(integrator, true) # precalculations @@ -2227,7 +2303,7 @@ end ##### Step 1 - @.. broadcast=false z₁=dt * integrator.fsalfirst + @.. broadcast = false z₁ = dt * integrator.fsalfirst ##### Step 2 @@ -2235,7 +2311,7 @@ end z₂ .= zero(eltype(u)) nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + γ * z₁ + @.. broadcast = false tmp = uprev + γ * z₁ nlsolver.c = 2γ z₂ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2245,7 +2321,7 @@ end nlsolver.z = fill!(z₃, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ nlsolver.c = c3 z₃ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2255,7 +2331,7 @@ end # Use constant z prediction nlsolver.z = fill!(z₄, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ nlsolver.c = c4 z₄ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2264,7 +2340,7 @@ end nlsolver.z = fill!(z₅, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + @.. broadcast = false tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ nlsolver.c = c5 z₅ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2273,7 +2349,7 @@ end nlsolver.z = fill!(z₆, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ + @.. broadcast = false tmp = uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ nlsolver.c = c6 z₆ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2282,8 +2358,8 @@ end nlsolver.z = fill!(z₇, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + a75 * z₅ + - a76 * z₆ + @.. broadcast = false tmp = uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + a75 * z₅ + + a76 * z₆ nlsolver.c = c7 z₇ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2292,38 +2368,44 @@ end nlsolver.z = fill!(z₈, zero(eltype(u))) - @.. broadcast=false nlsolver.tmp=uprev + a81 * z₁ + a82 * z₂ + a83 * z₃ + a84 * z₄ + - a85 * z₅ + a86 * z₆ + a87 * z₇ + @.. broadcast = false nlsolver.tmp = uprev + a81 * z₁ + a82 * z₂ + a83 * z₃ + a84 * z₄ + + a85 * z₅ + a86 * z₆ + a87 * z₇ nlsolver.c = oneunit(nlsolver.c) z₈ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + γ * z₈ + @.. broadcast = false u = tmp + γ * z₈ ################################### Finalize if integrator.opts.adaptive - @.. broadcast=false tmp=btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + - btilde5 * z₅ + btilde6 * z₆ + btilde7 * z₇ + btilde8 * z₈ - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false tmp = btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + + btilde5 * z₅ + btilde6 * z₆ + btilde7 * z₇ + btilde8 * z₈ + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end - @.. broadcast=false integrator.fsallast=z₈ / dt + @.. broadcast = false integrator.fsallast = z₈ / dt return end -@muladd function perform_step!(integrator, cache::ESDIRK436L2SA2ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::ESDIRK436L2SA2ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator - (; γ, - a31, a32, - a41, a42, a43, - a51, a52, a53, a54, - a61, a62, a63, a64, a65, - c3, c4, c5, c6, - btilde1, btilde2, btilde3, btilde4, btilde5, btilde6) = cache.tab + (; + γ, + a31, a32, + a41, a42, a43, + a51, a52, a53, a54, + a61, a62, a63, a64, a65, + c3, c4, c5, c6, + btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, + ) = cache.tab nlsolver = cache.nlsolver alg = unwrap_alg(integrator, true) @@ -2389,9 +2471,11 @@ end if integrator.opts.adaptive est = btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + - btilde6 * z₆ - atmp = calculate_residuals(est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + btilde6 * z₆ + atmp = calculate_residuals( + est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -2406,13 +2490,15 @@ end (; t, dt, uprev, u, f, p) = integrator (; z₁, z₂, z₃, z₄, z₅, z₆, atmp, nlsolver) = cache (; tmp) = nlsolver - (; γ, - a31, a32, - a41, a42, a43, - a51, a52, a53, a54, - a61, a62, a63, a64, a65, - c3, c4, c5, c6, - btilde1, btilde2, btilde3, btilde4, btilde5, btilde6) = cache.tab + (; + γ, + a31, a32, + a41, a42, a43, + a51, a52, a53, a54, + a61, a62, a63, a64, a65, + c3, c4, c5, c6, + btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, + ) = cache.tab alg = unwrap_alg(integrator, true) # precalculations @@ -2421,7 +2507,7 @@ end ##### Step 1 - @.. broadcast=false z₁=dt * integrator.fsalfirst + @.. broadcast = false z₁ = dt * integrator.fsalfirst ##### Step 2 @@ -2429,7 +2515,7 @@ end z₂ .= zero(eltype(u)) nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + γ * z₁ + @.. broadcast = false tmp = uprev + γ * z₁ nlsolver.c = 2γ z₂ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2439,7 +2525,7 @@ end nlsolver.z = fill!(z₃, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ nlsolver.c = c3 z₃ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2449,7 +2535,7 @@ end # Use constant z prediction nlsolver.z = fill!(z₄, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ nlsolver.c = c4 z₄ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2458,7 +2544,7 @@ end nlsolver.z = fill!(z₅, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + @.. broadcast = false tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ nlsolver.c = c5 z₅ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2467,38 +2553,44 @@ end nlsolver.z = fill!(z₆, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ + @.. broadcast = false tmp = uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ nlsolver.c = c6 z₆ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + γ * z₆ + @.. broadcast = false u = tmp + γ * z₆ ################################### Finalize if integrator.opts.adaptive - @.. broadcast=false tmp=btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + - btilde5 * z₅ + btilde6 * z₆ - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false tmp = btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + + btilde5 * z₅ + btilde6 * z₆ + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end - @.. broadcast=false integrator.fsallast=z₆ / dt + @.. broadcast = false integrator.fsallast = z₆ / dt return end -@muladd function perform_step!(integrator, cache::ESDIRK437L2SAConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::ESDIRK437L2SAConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator - (; γ, - a31, a32, - a41, a42, a43, - a51, a52, a53, a54, - a61, a62, a63, a64, a65, - a71, a72, a73, a74, a75, a76, - c3, c4, c5, c6, c7, - btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7) = cache.tab + (; + γ, + a31, a32, + a41, a42, a43, + a51, a52, a53, a54, + a61, a62, a63, a64, a65, + a71, a72, a73, a74, a75, a76, + c3, c4, c5, c6, c7, + btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7, + ) = cache.tab nlsolver = cache.nlsolver alg = unwrap_alg(integrator, true) @@ -2573,9 +2665,11 @@ end if integrator.opts.adaptive est = btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + - btilde6 * z₆ + btilde7 * z₇ - atmp = calculate_residuals(est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + btilde6 * z₆ + btilde7 * z₇ + atmp = calculate_residuals( + est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -2590,14 +2684,16 @@ end (; t, dt, uprev, u, f, p) = integrator (; z₁, z₂, z₃, z₄, z₅, z₆, z₇, atmp, nlsolver) = cache (; tmp) = nlsolver - (; γ, - a31, a32, - a41, a42, a43, - a51, a52, a53, a54, - a61, a62, a63, a64, a65, - a71, a72, a73, a74, a75, a76, - c3, c4, c5, c6, c7, - btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7) = cache.tab + (; + γ, + a31, a32, + a41, a42, a43, + a51, a52, a53, a54, + a61, a62, a63, a64, a65, + a71, a72, a73, a74, a75, a76, + c3, c4, c5, c6, c7, + btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7, + ) = cache.tab alg = unwrap_alg(integrator, true) # precalculations @@ -2606,7 +2702,7 @@ end ##### Step 1 - @.. broadcast=false z₁=dt * integrator.fsalfirst + @.. broadcast = false z₁ = dt * integrator.fsalfirst ##### Step 2 @@ -2614,7 +2710,7 @@ end z₂ .= zero(eltype(u)) nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + γ * z₁ + @.. broadcast = false tmp = uprev + γ * z₁ nlsolver.c = 2γ z₂ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2624,7 +2720,7 @@ end nlsolver.z = fill!(z₃, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ nlsolver.c = c3 z₃ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2634,7 +2730,7 @@ end # Use constant z prediction nlsolver.z = fill!(z₄, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ nlsolver.c = c4 z₄ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2643,7 +2739,7 @@ end nlsolver.z = fill!(z₅, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + @.. broadcast = false tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ nlsolver.c = c5 z₅ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2652,7 +2748,7 @@ end nlsolver.z = fill!(z₆, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ + @.. broadcast = false tmp = uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ nlsolver.c = c6 z₆ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2661,39 +2757,45 @@ end nlsolver.z = fill!(z₇, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + a75 * z₅ + - a76 * z₆ + @.. broadcast = false tmp = uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + a75 * z₅ + + a76 * z₆ nlsolver.c = c7 z₇ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + γ * z₇ + @.. broadcast = false u = tmp + γ * z₇ ################################### Finalize if integrator.opts.adaptive - @.. broadcast=false tmp=btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + - btilde5 * z₅ + btilde6 * z₆ + btilde7 * z₇ - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false tmp = btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + + btilde5 * z₅ + btilde6 * z₆ + btilde7 * z₇ + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end - @.. broadcast=false integrator.fsallast=z₇ / dt + @.. broadcast = false integrator.fsallast = z₇ / dt return end -@muladd function perform_step!(integrator, cache::ESDIRK547L2SA2ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::ESDIRK547L2SA2ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator - (; γ, - a31, a32, - a41, a42, a43, - a51, a52, a53, a54, - a61, a62, a63, a64, a65, - a71, a72, a73, a74, a75, a76, - c3, c4, c5, c6, c7, - btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7) = cache.tab + (; + γ, + a31, a32, + a41, a42, a43, + a51, a52, a53, a54, + a61, a62, a63, a64, a65, + a71, a72, a73, a74, a75, a76, + c3, c4, c5, c6, c7, + btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7, + ) = cache.tab nlsolver = cache.nlsolver alg = unwrap_alg(integrator, true) @@ -2768,9 +2870,11 @@ end if integrator.opts.adaptive est = btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + - btilde6 * z₆ + btilde7 * z₇ - atmp = calculate_residuals(est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + btilde6 * z₆ + btilde7 * z₇ + atmp = calculate_residuals( + est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -2785,14 +2889,16 @@ end (; t, dt, uprev, u, f, p) = integrator (; z₁, z₂, z₃, z₄, z₅, z₆, z₇, atmp, nlsolver) = cache (; tmp) = nlsolver - (; γ, - a31, a32, - a41, a42, a43, - a51, a52, a53, a54, - a61, a62, a63, a64, a65, - a71, a72, a73, a74, a75, a76, - c3, c4, c5, c6, c7, - btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7) = cache.tab + (; + γ, + a31, a32, + a41, a42, a43, + a51, a52, a53, a54, + a61, a62, a63, a64, a65, + a71, a72, a73, a74, a75, a76, + c3, c4, c5, c6, c7, + btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7, + ) = cache.tab alg = unwrap_alg(integrator, true) # precalculations @@ -2801,7 +2907,7 @@ end ##### Step 1 - @.. broadcast=false z₁=dt * integrator.fsalfirst + @.. broadcast = false z₁ = dt * integrator.fsalfirst ##### Step 2 @@ -2809,7 +2915,7 @@ end z₂ .= zero(eltype(u)) nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + γ * z₁ + @.. broadcast = false tmp = uprev + γ * z₁ nlsolver.c = 2γ z₂ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2819,7 +2925,7 @@ end nlsolver.z = fill!(z₃, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ nlsolver.c = c3 z₃ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2829,7 +2935,7 @@ end # Use constant z prediction nlsolver.z = fill!(z₄, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ nlsolver.c = c4 z₄ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2838,7 +2944,7 @@ end nlsolver.z = fill!(z₅, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + @.. broadcast = false tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ nlsolver.c = c5 z₅ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2847,7 +2953,7 @@ end nlsolver.z = fill!(z₆, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ + @.. broadcast = false tmp = uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ nlsolver.c = c6 z₆ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2856,41 +2962,47 @@ end nlsolver.z = fill!(z₇, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + a75 * z₅ + - a76 * z₆ + @.. broadcast = false tmp = uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + a75 * z₅ + + a76 * z₆ nlsolver.c = c7 z₇ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + γ * z₇ + @.. broadcast = false u = tmp + γ * z₇ ################################### Finalize if integrator.opts.adaptive - @.. broadcast=false tmp=btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + - btilde5 * z₅ + btilde6 * z₆ + btilde7 * z₇ - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false tmp = btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + + btilde5 * z₅ + btilde6 * z₆ + btilde7 * z₇ + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end - @.. broadcast=false integrator.fsallast=z₇ / dt + @.. broadcast = false integrator.fsallast = z₇ / dt return end -@muladd function perform_step!(integrator, cache::ESDIRK659L2SAConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::ESDIRK659L2SAConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator - (; γ, - a31, a32, - a41, a42, a43, - a51, a52, a53, a54, - a61, a62, a63, a64, a65, - a71, a72, a73, a74, a75, a76, - a81, a82, a83, a84, a85, a86, a87, - a94, a95, a96, a97, a98, - c3, c4, c5, c6, c7, c8, c9, - btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7, btilde8, btilde9) = cache.tab + (; + γ, + a31, a32, + a41, a42, a43, + a51, a52, a53, a54, + a61, a62, a63, a64, a65, + a71, a72, a73, a74, a75, a76, + a81, a82, a83, a84, a85, a86, a87, + a94, a95, a96, a97, a98, + c3, c4, c5, c6, c7, c8, c9, + btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7, btilde8, btilde9, + ) = cache.tab nlsolver = cache.nlsolver alg = unwrap_alg(integrator, true) @@ -2963,7 +3075,7 @@ end nlsolver.z = z₈ = zero(z₇) nlsolver.tmp = uprev + a81 * z₁ + a82 * z₂ + a83 * z₃ + a84 * z₄ + a85 * z₅ + a86 * z₆ + - a87 * z₇ + a87 * z₇ nlsolver.c = c8 z₈ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -2982,9 +3094,11 @@ end if integrator.opts.adaptive est = btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + btilde5 * z₅ + - btilde6 * z₆ + btilde7 * z₇ + btilde8 * z₈ + btilde9 * z₉ - atmp = calculate_residuals(est, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + btilde6 * z₆ + btilde7 * z₇ + btilde8 * z₈ + btilde9 * z₉ + atmp = calculate_residuals( + est, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -2999,16 +3113,18 @@ end (; t, dt, uprev, u, f, p) = integrator (; z₁, z₂, z₃, z₄, z₅, z₆, z₇, z₈, z₉, atmp, nlsolver) = cache (; tmp) = nlsolver - (; γ, - a31, a32, - a41, a42, a43, - a51, a52, a53, a54, - a61, a62, a63, a64, a65, - a71, a72, a73, a74, a75, a76, - a81, a82, a83, a84, a85, a86, a87, - a94, a95, a96, a97, a98, - c3, c4, c5, c6, c7, c8, c9, - btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7, btilde8, btilde9) = cache.tab + (; + γ, + a31, a32, + a41, a42, a43, + a51, a52, a53, a54, + a61, a62, a63, a64, a65, + a71, a72, a73, a74, a75, a76, + a81, a82, a83, a84, a85, a86, a87, + a94, a95, a96, a97, a98, + c3, c4, c5, c6, c7, c8, c9, + btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7, btilde8, btilde9, + ) = cache.tab alg = unwrap_alg(integrator, true) # precalculations @@ -3017,7 +3133,7 @@ end ##### Step 1 - @.. broadcast=false z₁=dt * integrator.fsalfirst + @.. broadcast = false z₁ = dt * integrator.fsalfirst ##### Step 2 @@ -3025,7 +3141,7 @@ end z₂ .= zero(eltype(u)) nlsolver.z = z₂ - @.. broadcast=false tmp=uprev + γ * z₁ + @.. broadcast = false tmp = uprev + γ * z₁ nlsolver.c = 2γ z₂ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -3035,7 +3151,7 @@ end nlsolver.z = fill!(z₃, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a31 * z₁ + a32 * z₂ + @.. broadcast = false tmp = uprev + a31 * z₁ + a32 * z₂ nlsolver.c = c3 z₃ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -3045,7 +3161,7 @@ end # Use constant z prediction nlsolver.z = fill!(z₄, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ + @.. broadcast = false tmp = uprev + a41 * z₁ + a42 * z₂ + a43 * z₃ nlsolver.c = c4 z₄ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -3054,7 +3170,7 @@ end nlsolver.z = fill!(z₅, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ + @.. broadcast = false tmp = uprev + a51 * z₁ + a52 * z₂ + a53 * z₃ + a54 * z₄ nlsolver.c = c5 z₅ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -3063,7 +3179,7 @@ end nlsolver.z = fill!(z₆, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ + @.. broadcast = false tmp = uprev + a61 * z₁ + a62 * z₂ + a63 * z₃ + a64 * z₄ + a65 * z₅ nlsolver.c = c6 z₆ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -3072,8 +3188,8 @@ end nlsolver.z = fill!(z₇, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + a75 * z₅ + - a76 * z₆ + @.. broadcast = false tmp = uprev + a71 * z₁ + a72 * z₂ + a73 * z₃ + a74 * z₄ + a75 * z₅ + + a76 * z₆ nlsolver.c = c7 z₇ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -3082,8 +3198,8 @@ end nlsolver.z = fill!(z₈, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a81 * z₁ + a82 * z₂ + a83 * z₃ + a84 * z₄ + a85 * z₅ + - a86 * z₆ + a87 * z₇ + @.. broadcast = false tmp = uprev + a81 * z₁ + a82 * z₂ + a83 * z₃ + a84 * z₄ + a85 * z₅ + + a86 * z₆ + a87 * z₇ nlsolver.c = c8 z₈ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return @@ -3092,23 +3208,25 @@ end nlsolver.z = fill!(z₉, zero(eltype(u))) - @.. broadcast=false tmp=uprev + a94 * z₄ + a95 * z₅ + a96 * z₆ + a97 * z₇ + a98 * z₈ + @.. broadcast = false tmp = uprev + a94 * z₄ + a95 * z₅ + a96 * z₆ + a97 * z₇ + a98 * z₈ nlsolver.c = c9 z₉ = nlsolve!(nlsolver, integrator, cache, repeat_step) nlsolvefail(nlsolver) && return - @.. broadcast=false u=tmp + γ * z₉ + @.. broadcast = false u = tmp + γ * z₉ ################################### Finalize if integrator.opts.adaptive - @.. broadcast=false tmp=btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + - btilde5 * z₅ + - btilde6 * z₆ + btilde7 * z₇ + btilde8 * z₈ + btilde9 * z₉ - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false tmp = btilde1 * z₁ + btilde2 * z₂ + btilde3 * z₃ + btilde4 * z₄ + + btilde5 * z₅ + + btilde6 * z₆ + btilde7 * z₇ + btilde8 * z₈ + btilde9 * z₉ + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end - @.. broadcast=false integrator.fsallast=z₉ / dt + @.. broadcast = false integrator.fsallast = z₉ / dt return end diff --git a/lib/OrdinaryDiffEqSDIRK/src/sdirk_tableaus.jl b/lib/OrdinaryDiffEqSDIRK/src/sdirk_tableaus.jl index ed95cef957..ff7391848f 100644 --- a/lib/OrdinaryDiffEqSDIRK/src/sdirk_tableaus.jl +++ b/lib/OrdinaryDiffEqSDIRK/src/sdirk_tableaus.jl @@ -41,7 +41,7 @@ function TRBDF2Tableau(T, T2) btilde3 = convert(T, (sqrt(2) - 2) / 3) α1 = convert(T, -sqrt(2) / 2) α2 = convert(T, 1 + sqrt(2) / 2) - TRBDF2Tableau(γ, d, ω, btilde1, btilde2, btilde3, α1, α2) + return TRBDF2Tableau(γ, d, ω, btilde1, btilde2, btilde3, α1, α2) end struct ESDIRK4Tableau{T, T2} @@ -136,8 +136,10 @@ function Kvaerno3Tableau(T, T2) α32 = ((-2θ + 3θ^2) + (6θ * (1 - θ) / c2) * γ) α41 = convert(T2, 0.0) α42 = convert(T2, 0.0) - ESDIRK4Tableau(γ, a31, a32, a41, a42, a43, btilde1, btilde2, btilde3, btilde4, c3, α31, - α32, α41, α42) + return ESDIRK4Tableau( + γ, a31, a32, a41, a42, a43, btilde1, btilde2, btilde3, btilde4, c3, α31, + α32, α41, α42 + ) end struct KenCarp3Tableau{T, T2} @@ -223,10 +225,11 @@ function KenCarp3Tableau(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) ebtilde2 = convert(T, 0.11013520969201586) ebtilde3 = -convert(T, 0.10306492520138458) ebtilde4 = -convert(T, 0.0341695463672966) - KenCarp3Tableau( + return KenCarp3Tableau( γ, a31, a32, a41, a42, a43, btilde1, btilde2, btilde3, btilde4, c3, α31, α32, α41, α42, ea21, ea31, ea32, ea41, ea42, ea43, eb1, eb2, eb3, eb4, - ebtilde1, ebtilde2, ebtilde3, ebtilde4) + ebtilde1, ebtilde2, ebtilde3, ebtilde4 + ) end function KenCarp3Tableau(T, T2) @@ -240,17 +243,25 @@ function KenCarp3Tableau(T, T2) # bhat2 = -convert(T,10771552573575//22201958757719) # bhat3 = convert(T,9247589265047//10645013368117) # bhat4 = convert(T,2193209047091//5459859503100) - btilde1 = convert(T, + btilde1 = convert( + T, BigInt(681815649026867975666107) // - BigInt(25159934323302256049469295)) # bhat1-a41 - btilde2 = convert(T, + BigInt(25159934323302256049469295) + ) # bhat1-a41 + btilde2 = convert( + T, BigInt(18411887981491912264464127) // - BigInt(167175311446532472108584143)) # bhat2-a42 - btilde3 = convert(T, + BigInt(167175311446532472108584143) + ) # bhat2-a42 + btilde3 = convert( + T, BigInt(-12719313754959329011138489) // - BigInt(123410692144842870217698057)) # bhat3-a43 - btilde4 = convert(T, - BigInt(-47289384293135913063989) // BigInt(1383962894467812063558225)) # bhat4-γ + BigInt(123410692144842870217698057) + ) # bhat3-a43 + btilde4 = convert( + T, + BigInt(-47289384293135913063989) // BigInt(1383962894467812063558225) + ) # bhat4-γ c3 = convert(T2, 3 // 5) c2 = 2γ θ = c3 / c2 @@ -271,22 +282,31 @@ function KenCarp3Tableau(T, T2) eb2 = convert(T, -4482444167858 // 7529755066697) eb3 = convert(T, 11266239266428 // 11593286722821) eb4 = convert(T, 1767732205903 // 4055673282236) - ebtilde1 = convert(T, + ebtilde1 = convert( + T, BigInt(681815649026867975666107) // - BigInt(25159934323302256049469295)) - ebtilde2 = convert(T, + BigInt(25159934323302256049469295) + ) + ebtilde2 = convert( + T, BigInt(18411887981491912264464127) // - BigInt(167175311446532472108584143)) - ebtilde3 = -convert(T, + BigInt(167175311446532472108584143) + ) + ebtilde3 = -convert( + T, BigInt(12719313754959329011138489) // - BigInt(123410692144842870217698057)) - ebtilde4 = -convert(T, + BigInt(123410692144842870217698057) + ) + ebtilde4 = -convert( + T, BigInt(47289384293135913063989) // - BigInt(1383962894467812063558225)) - KenCarp3Tableau( + BigInt(1383962894467812063558225) + ) + return KenCarp3Tableau( γ, a31, a32, a41, a42, a43, btilde1, btilde2, btilde3, btilde4, c3, α31, α32, α41, α42, ea21, ea31, ea32, ea41, ea42, ea43, eb1, eb2, eb3, eb4, - ebtilde1, ebtilde2, ebtilde3, ebtilde4) + ebtilde1, ebtilde2, ebtilde3, ebtilde4 + ) end # Flip them all! @@ -363,7 +383,7 @@ Using constant extrapolations function Cash4Tableau(T, T2) γ = convert(T2, 0.435866521508) - a21 = convert(T, -1.13586652150) + a21 = convert(T, -1.1358665215) a31 = convert(T, 1.08543330679) a32 = -convert(T, 0.721299828287) a41 = convert(T, 0.416349501547) @@ -377,15 +397,17 @@ function Cash4Tableau(T, T2) b2hat1 = -convert(T, 0.0564621610705236) b3hat1 = convert(T, 0) b4hat1 = convert(T, 0) - b1hat2 = convert(T, 0.776691932910) + b1hat2 = convert(T, 0.77669193291) b2hat2 = convert(T, 0.0297472791484) b3hat2 = -convert(T, 0.0267440239074) b4hat2 = convert(T, 0.220304811849) c2 = -convert(T2, 0.7) c3 = convert(T2, 0.8) c4 = convert(T2, 0.924556761814) - Cash4Tableau(γ, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, - b1hat1, b2hat1, b3hat1, b4hat1, b1hat2, b2hat2, b3hat2, b4hat2, c2, c3, c4) + return Cash4Tableau( + γ, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, + b1hat1, b2hat1, b3hat1, b4hat1, b1hat2, b2hat2, b3hat2, b4hat2, c2, c3, c4 + ) end struct SFSDIRK4Tableau{T, T2} @@ -411,7 +433,7 @@ function SFSDIRK4Tableau(T, T2) a31 = convert(T, 0.230169419019) a32 = convert(T, 0.294466719347) a41 = convert(T, 0.210562684389) - a42 = convert(T, 0.269382888280) + a42 = convert(T, 0.26938288828) a43 = convert(T, 0.307008634881) a51 = convert(T, 0.222119403264) a52 = convert(T, 0.282060762166) @@ -420,7 +442,7 @@ function SFSDIRK4Tableau(T, T2) c2 = convert(T2, 0.360279152124) c3 = convert(T2, 0.622597221298) c4 = convert(T2, 0.884915290491) - SFSDIRK4Tableau(γ, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, c2, c3, c4) + return SFSDIRK4Tableau(γ, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, c2, c3, c4) end struct SFSDIRK5Tableau{T, T2} @@ -449,27 +471,28 @@ end function SFSDIRK5Tableau(T, T2) γ = convert(T2, 0.078752939968) a21 = convert(T, 0.222465723027) - a31 = convert(T, 0.203192361700) + a31 = convert(T, 0.2031923617) a32 = convert(T, 0.230847263068) a41 = convert(T, 0.188022704389) a42 = convert(T, 0.191735630027) a43 = convert(T, 0.209922288451) a51 = convert(T, 0.188025114093) a52 = convert(T, 0.191739898281) - a53 = convert(T, 0.209907601860) + a53 = convert(T, 0.20990760186) a54 = convert(T, 0.252726086329) a61 = convert(T, 0.192143833571) a62 = convert(T, 0.200935182974) a63 = convert(T, 0.205799262036) - a64 = convert(T, 0.200553844640) + a64 = convert(T, 0.20055384464) a65 = convert(T, 0.200567876778) c2 = convert(T2, 0.301218662995) c3 = convert(T2, 0.512792564736) c4 = convert(T2, 0.668433562835) c5 = convert(T2, 0.921151640531) - SFSDIRK5Tableau( + return SFSDIRK5Tableau( γ, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, - a65, c2, c3, c4, c5) + a65, c2, c3, c4, c5 + ) end struct SFSDIRK6Tableau{T, T2} @@ -508,18 +531,18 @@ function SFSDIRK6Tableau(T, T2) a31 = convert(T, 0.194216850802) a32 = convert(T, 0.199861501713) a41 = convert(T, 0.162188551749) - a42 = convert(T, 0.166902343330) + a42 = convert(T, 0.16690234333) a43 = convert(T, 0.145120313717) - a51 = convert(T, 0.165176818500) + a51 = convert(T, 0.1651768185) a52 = convert(T, 0.169977460026) a53 = convert(T, 0.150227711763) a54 = convert(T, 0.181214258555) - a61 = convert(T, 0.165176818500) + a61 = convert(T, 0.1651768185) a62 = convert(T, 0.169977460026) a63 = convert(T, 0.150227711763) a64 = convert(T, 0.181214258555) a65 = convert(T, 0.199861501713) - a71 = convert(T, 0.168954170460) + a71 = convert(T, 0.16895417046) a72 = convert(T, 0.173864595628) a73 = convert(T, 0.156683775305) a74 = convert(T, 0.157643002581) @@ -530,9 +553,10 @@ function SFSDIRK6Tableau(T, T2) c4 = convert(T2, 0.541621976015) c5 = convert(T2, 0.734007016063) c6 = convert(T2, 0.933868517776) - SFSDIRK6Tableau( + return SFSDIRK6Tableau( γ, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, - a65, a71, a72, a73, a74, a75, a76, c2, c3, c4, c5, c6) + a65, a71, a72, a73, a74, a75, a76, c2, c3, c4, c5, c6 + ) end struct SFSDIRK7Tableau{T, T2} @@ -588,9 +612,9 @@ function SFSDIRK7Tableau(T, T2) a61 = convert(T, 0.138004377067) a62 = convert(T, 0.133084723451) a63 = convert(T, 0.152274237527) - a64 = convert(T, 0.154005757170) - a65 = convert(T, 0.154005757170) - a71 = convert(T, 0.139433665640) + a64 = convert(T, 0.15400575717) + a65 = convert(T, 0.15400575717) + a71 = convert(T, 0.13943366564) a72 = convert(T, 0.134719607258) a73 = convert(T, 0.145910607076) a74 = convert(T, 0.147569765489) @@ -609,10 +633,11 @@ function SFSDIRK7Tableau(T, T2) c5 = convert(T2, 0.66727927408) c6 = convert(T2, 0.788253893977) c7 = convert(T2, 0.937091461185) - SFSDIRK7Tableau( + return SFSDIRK7Tableau( γ, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, a81, a82, a83, a84, a85, a86, a87, - c2, c3, c4, c5, c6, c7) + c2, c3, c4, c5, c6, c7 + ) end struct SFSDIRK8Tableau{T, T2} @@ -669,33 +694,33 @@ function SFSDIRK8Tableau(T, T2) a32 = convert(T, 0.114455029802) a41 = convert(T, 0.114147680771) a42 = convert(T, 0.114147680771) - a43 = convert(T, 0.147327977820) + a43 = convert(T, 0.14732797782) a51 = convert(T, 0.114163314686) a52 = convert(T, 0.114163314686) a53 = convert(T, 0.147259379853) - a54 = convert(T, 0.147655883990) + a54 = convert(T, 0.14765588399) a61 = convert(T, 0.114163314686) a62 = convert(T, 0.114163314686) a63 = convert(T, 0.147259379853) - a64 = convert(T, 0.147655883990) + a64 = convert(T, 0.14765588399) a65 = convert(T, 0.147724666662) a71 = convert(T, 0.118472990244) a72 = convert(T, 0.118472990244) a73 = convert(T, 0.128349529304) a74 = convert(T, 0.128695117609) - a75 = convert(T, 0.128755067770) - a76 = convert(T, 0.128755067770) + a75 = convert(T, 0.12875506777) + a76 = convert(T, 0.12875506777) a81 = convert(T, 0.118472990244) a82 = convert(T, 0.118472990244) a83 = convert(T, 0.128349529304) a84 = convert(T, 0.128695117609) - a85 = convert(T, 0.128755067770) - a86 = convert(T, 0.128755067770) + a85 = convert(T, 0.12875506777) + a86 = convert(T, 0.12875506777) a87 = convert(T, 0.147724666662) a91 = convert(T, 0.117592883046) a92 = convert(T, 0.117592883046) a93 = convert(T, 0.132211234288) - a94 = convert(T, 0.132567220450) + a94 = convert(T, 0.13256722045) a95 = convert(T, 0.132628974356) a96 = convert(T, 0.132293123539) a97 = convert(T, 0.117556840638) @@ -707,10 +732,11 @@ function SFSDIRK8Tableau(T, T2) c6 = convert(T2, 0.721319913284) c7 = convert(T2, 0.801854116348) c8 = convert(T2, 0.94957878301) - SFSDIRK8Tableau( + return SFSDIRK8Tableau( γ, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, a81, a82, a83, a84, a85, a86, a87, - a91, a92, a93, a94, a95, a96, a97, a98, c2, c3, c4, c5, c6, c7, c8) + a91, a92, a93, a94, a95, a96, a97, a98, c2, c3, c4, c5, c6, c7, c8 + ) end struct Hairer4Tableau{T, T2} @@ -918,11 +944,13 @@ function Hairer4Tableau(T, T2) α41 = convert(T2, 3 // 17) α43 = convert(T2, 155 // 187) - Hairer4Tableau(γ, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, + return Hairer4Tableau( + γ, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, bhat1, bhat2, bhat3, bhat4, btilde1, btilde2, btilde3, btilde4, btilde5, c2, c3, c4, r11, r12, r13, r14, r21, r22, r23, r24, r31, r32, r33, r34, r41, r42, r43, r44, r51, - r52, r53, r54, α21, α31, α32, α41, α43) + r52, r53, r54, α21, α31, α32, α41, α43 + ) end function Hairer42Tableau(T, T2) @@ -1041,11 +1069,13 @@ function Hairer42Tableau(T, T2) α41 = convert(T, 0.6563374010466914) α43 = convert(T, 0.3372498196189311) - Hairer4Tableau(γ, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, + return Hairer4Tableau( + γ, a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, bhat1, bhat2, bhat3, bhat4, btilde1, btilde2, btilde3, btilde4, btilde5, c2, c3, c4, r11, r12, r13, r14, r21, r22, r23, r24, r31, r32, r33, r34, r41, r42, r43, r44, r51, - r52, r53, r54, α21, α31, α32, α41, α43) + r52, r53, r54, α21, α31, α32, α41, α43 + ) end struct Kvaerno4Tableau{T, T2} @@ -1114,9 +1144,11 @@ function Kvaerno4Tableau(T, T2) α32 = convert(T2, 0.537135478129554) α41 = convert(T2, -0.14714018016178376) α42 = convert(T2, 1.1471401801617838) - Kvaerno4Tableau(γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, + return Kvaerno4Tableau( + γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, btilde1, btilde2, btilde3, btilde4, btilde5, - c3, c4, α21, α31, α32, α41, α42) + c3, c4, α21, α31, α32, α41, α42 + ) end struct KenCarp4Tableau{T, T2} @@ -1220,14 +1252,16 @@ function CFNLIRK3Tableau(T, T2) ea31 = convert(T, (1.7 + γ) / 2) ea32 = convert(T, -0.35) ea41 = convert(T, 0.0) - ea42 = convert(T, 1.9891757246798590) - ea43 = convert(T, -0.9891757246798590) + ea42 = convert(T, 1.989175724679859) + ea43 = convert(T, -0.989175724679859) eb1 = convert(T, 0.0) eb2 = convert(T, 1.20849664917601276) eb3 = convert(T, -0.64436317068447276) eb4 = convert(T, γ) - CFNLIRK3Tableau(γ, a31, a32, a41, a42, a43, c2, c3, ea21, ea31, ea32, ea41, ea42, ea43, - eb1, eb2, eb3, eb4) + return CFNLIRK3Tableau( + γ, a31, a32, a41, a42, a43, c2, c3, ea21, ea31, ea32, ea41, ea42, ea43, + eb1, eb2, eb3, eb4 + ) end #= @@ -1361,13 +1395,15 @@ function KenCarp4Tableau(T, T2) ebtilde5 = -convert(T, 169839 // 3864644) ebtilde6 = convert(T, 5247 // 225920) - KenCarp4Tableau(γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a63, a64, a65, + return KenCarp4Tableau( + γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a63, a64, a65, btilde1, btilde3, btilde4, btilde5, btilde6, c3, c4, c5, α21, α31, α32, α41, α42, α51, α52, α53, α54, α61, α62, α63, α64, α65, ea21, ea31, ea32, ea41, ea42, ea43, ea51, ea52, ea53, ea54, ea61, ea62, ea63, ea64, ea65, eb1, eb3, eb4, eb5, eb6, ebtilde1, ebtilde3, ebtilde4, - ebtilde5, ebtilde6) + ebtilde5, ebtilde6 + ) end # Flip them all! @@ -1473,7 +1509,7 @@ function Kvaerno5Tableau(T, T2) a42 = convert(T, 0.47675532319799699) a43 = -convert(T, 0.06470895363112615) a51 = convert(T, 0.16648564323248321) - a52 = convert(T, 0.10450018841591720) + a52 = convert(T, 0.1045001884159172) a53 = convert(T, 0.03631482272098715) a54 = -convert(T, 0.13090704451073998) a61 = convert(T, 0.13855640231268224) @@ -1507,11 +1543,13 @@ function Kvaerno5Tableau(T, T2) c4 = convert(T, 0.895765984350076) c5 = convert(T, 0.436393609858648) c6 = convert(T, 1) - Kvaerno5Tableau(γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, + return Kvaerno5Tableau( + γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a63, a64, a65, a71, a73, a74, a75, a76, btilde1, btilde3, btilde4, btilde5, btilde6, btilde7, c3, c4, c5, c6, α31, α32, α41, α42, α43, α51, α52, α53, - α61, α62, α63) + α61, α62, α63 + ) end struct KenCarp5Tableau{T, T2} @@ -1753,7 +1791,8 @@ function KenCarp5Tableau(T, T2) ebtilde7 = convert(T, 3333910710978735057753642 // 199750492790973993533703797) ebtilde8 = convert(T, 45448919757 // 3715198317040) - KenCarp5Tableau(γ, a31, a32, a41, a43, a51, a53, a54, a61, a63, a64, a65, + return KenCarp5Tableau( + γ, a31, a32, a41, a43, a51, a53, a54, a61, a63, a64, a65, a71, a73, a74, a75, a76, a81, a84, a85, a86, a87, c3, c4, c5, c6, c7, α31, α32, α41, α42, α51, α52, α61, α62, α71, α72, α73, α74, α75, α81, α82, α83, α84, α85, @@ -1761,7 +1800,8 @@ function KenCarp5Tableau(T, T2) ea21, ea31, ea32, ea41, ea43, ea51, ea53, ea54, ea61, ea63, ea64, ea65, ea71, ea73, ea74, ea75, ea76, ea81, ea83, ea84, ea85, ea86, ea87, eb1, eb4, eb5, eb6, eb7, eb8, ebtilde1, - ebtilde4, ebtilde5, ebtilde6, ebtilde7, ebtilde8) + ebtilde4, ebtilde5, ebtilde6, ebtilde7, ebtilde8 + ) end # Flip them all! @@ -1859,7 +1899,8 @@ function ESDIRK54I8L2SATableau(T, T2) btilde6 = convert(T, -401514321964993460839314379 // 150599863859115530598736650) btilde7 = convert(T, 17761325247710183915293664 // 33262552787523086832167825) btilde8 = convert(T, -25249389576073 // 51072051291964) - ESDIRK54I8L2SATableau(γ, + return ESDIRK54I8L2SATableau( + γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, @@ -1868,7 +1909,8 @@ function ESDIRK54I8L2SATableau(T, T2) a81, a82, a83, a84, a85, a86, a87, c3, c4, c5, c6, c7, btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7, - btilde8) + btilde8 + ) end struct ESDIRK436L2SA2Tableau{T, T2} @@ -1925,13 +1967,15 @@ function ESDIRK436L2SA2Tableau(T, T2) btilde4 = convert(T, -4098711186040344850920813 // 204021751328880889263048263) btilde5 = convert(T, -2403006641348284599749077 // 92621941821407359153398928) btilde6 = convert(T, 20990421664717 // 1109114971657125) - ESDIRK436L2SA2Tableau(γ, + return ESDIRK436L2SA2Tableau( + γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, c3, c4, c5, c6, - btilde1, btilde2, btilde3, btilde4, btilde5, btilde6) + btilde1, btilde2, btilde3, btilde4, btilde5, btilde6 + ) end struct ESDIRK437L2SATableau{T, T2} @@ -2004,14 +2048,16 @@ function ESDIRK437L2SATableau(T, T2) btilde5 = convert(T, 1195088015805686578873824 / 81172597762810000486866617) btilde6 = convert(T, 740420675674591594133033 / 49448254888661947436093061) btilde7 = convert(T, -3 / 280) - ESDIRK437L2SATableau(γ, + return ESDIRK437L2SATableau( + γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, c3, c4, c5, c6, c7, - btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7) + btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7 + ) end struct ESDIRK547L2SA2Tableau{T, T2} @@ -2084,14 +2130,16 @@ function ESDIRK547L2SA2Tableau(T, T2) btilde5 = convert(T, -2644586096629232150947109 // 35649179736979632279017232) btilde6 = convert(T, -4528233948360460577182037 // 78128560886623254313643924) btilde7 = convert(T, 77036761781598 // 1719282803550125) - ESDIRK547L2SA2Tableau(γ, + return ESDIRK547L2SA2Tableau( + γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, c3, c4, c5, c6, c7, - btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7) + btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7 + ) end struct ESDIRK659L2SATableau{T, T2} @@ -2196,7 +2244,8 @@ function ESDIRK659L2SATableau(T, T2) btilde7 = convert(T, -8547437843719087 // 4555265955453704) btilde8 = convert(T, -6600542869175559 // 6801491069014681) btilde9 = convert(T, 1602386750057009 // 6720377925948840) - ESDIRK659L2SATableau(γ, + return ESDIRK659L2SATableau( + γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, @@ -2206,7 +2255,8 @@ function ESDIRK659L2SATableau(T, T2) a94, a95, a96, a97, a98, c3, c4, c5, c6, c7, c8, c9, btilde1, btilde2, btilde3, btilde4, btilde5, btilde6, btilde7, - btilde8, btilde9) + btilde8, btilde9 + ) end struct SDIRK22Tableau{T} @@ -2219,7 +2269,7 @@ function SDIRK22Tableau(T) a = convert(T, 1 - 1 / sqrt(2)) α = convert(T, -sqrt(2)) β = convert(T, 1 + sqrt(2)) - SDIRK22Tableau(a, α, β) + return SDIRK22Tableau(a, α, β) end struct KenCarp47Tableau{T, T2} @@ -2467,7 +2517,8 @@ function KenCarp47Tableau(T, T2) ebtilde6 = convert(T, 4033362550194444079469 // 1083063207508329376479196) ebtilde7 = -convert(T, 29 // 20000) - KenCarp47Tableau(γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, + return KenCarp47Tableau( + γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a73, a74, a75, a76, btilde3, btilde4, btilde5, btilde6, btilde7, c3, c4, c5, c6, @@ -2476,7 +2527,8 @@ function KenCarp47Tableau(T, T2) ea21, ea31, ea32, ea41, ea42, ea43, ea51, ea52, ea53, ea54, ea61, ea62, ea63, ea64, ea65, ea71, ea72, ea73, ea74, ea75, ea76, eb3, eb4, eb5, eb6, eb7, ebtilde3, ebtilde4, - ebtilde5, ebtilde6, ebtilde7) + ebtilde5, ebtilde6, ebtilde7 + ) end struct KenCarp58Tableau{T, T2} γ::T2 @@ -2755,14 +2807,15 @@ function KenCarp58Tableau(T, T2) eb7 = -convert(T, 1142099968913 // 5710983926999) eb8 = convert(T, 2 // 9) - ebtilde3 = -convert(T, 18652552508630163520943320 // 168134443655105334713783643)#bhat3-eb3 + ebtilde3 = -convert(T, 18652552508630163520943320 // 168134443655105334713783643) #bhat3-eb3 ebtilde4 = convert(T, 141161430501477620145807 // 319735394533244397237135736) #bhat4-eb4 ebtilde5 = -convert(T, 207757214437709595456056 // 72283007456311581445415925) #bhat5-eb5 ebtilde6 = convert(T, 13674542533282477231637762 // 149163814411398370516486131) #bhat6-eb6 ebtilde7 = convert(T, 11939168497868428048898551 // 210101209758476969753215083) #bhat7-eb7 ebtilde8 = -convert(T, 1815023333875 // 51666766064334) #bhat8-eb8 - KenCarp58Tableau(γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, + return KenCarp58Tableau( + γ, a31, a32, a41, a42, a43, a51, a52, a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, a83, a84, a85, a86, a87, c3, c4, c5, c6, c7, α31, α32, α41, α42, α51, α52, @@ -2772,5 +2825,6 @@ function KenCarp58Tableau(T, T2) ea63, ea64, ea65, ea71, ea72, ea73, ea74, ea75, ea76, ea81, ea82, ea83, ea84, ea85, ea86, ea87, eb3, eb4, eb5, eb6, eb7, eb8, ebtilde3, - ebtilde4, ebtilde5, ebtilde6, ebtilde7, ebtilde8) + ebtilde4, ebtilde5, ebtilde6, ebtilde7, ebtilde8 + ) end diff --git a/lib/OrdinaryDiffEqSDIRK/test/jet.jl b/lib/OrdinaryDiffEqSDIRK/test/jet.jl index 673efe2f7e..de568c7828 100644 --- a/lib/OrdinaryDiffEqSDIRK/test/jet.jl +++ b/lib/OrdinaryDiffEqSDIRK/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqSDIRK, target_defined_modules = true, mode = :typo) + OrdinaryDiffEqSDIRK, target_defined_modules = true, mode = :typo + ) end diff --git a/lib/OrdinaryDiffEqSDIRK/test/qa.jl b/lib/OrdinaryDiffEqSDIRK/test/qa.jl index a1f9176802..ab500f0ccc 100644 --- a/lib/OrdinaryDiffEqSDIRK/test/qa.jl +++ b/lib/OrdinaryDiffEqSDIRK/test/qa.jl @@ -5,4 +5,4 @@ using Aqua Aqua.test_all( OrdinaryDiffEqSDIRK ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqSDIRK/test/runtests.jl b/lib/OrdinaryDiffEqSDIRK/test/runtests.jl index f971e6442f..75ab3bccf9 100644 --- a/lib/OrdinaryDiffEqSDIRK/test/runtests.jl +++ b/lib/OrdinaryDiffEqSDIRK/test/runtests.jl @@ -1,4 +1,4 @@ using SafeTestsets @time @safetestset "JET Tests" include("jet.jl") -@time @safetestset "Aqua" include("qa.jl") \ No newline at end of file +@time @safetestset "Aqua" include("qa.jl") diff --git a/lib/OrdinaryDiffEqSDIRK/test/sdirk_convergence_tests.jl b/lib/OrdinaryDiffEqSDIRK/test/sdirk_convergence_tests.jl index 884e8bc7f3..b92569f88f 100644 --- a/lib/OrdinaryDiffEqSDIRK/test/sdirk_convergence_tests.jl +++ b/lib/OrdinaryDiffEqSDIRK/test/sdirk_convergence_tests.jl @@ -7,154 +7,162 @@ Random.seed!(100) testTol = 0.2 @testset "Implicit Solver Convergence Tests ($(["out-of-place", "in-place"][i]))" for i in 1:2 - prob = (ODEProblemLibrary.prob_ode_linear, - ODEProblemLibrary.prob_ode_2Dlinear)[i] + prob = ( + ODEProblemLibrary.prob_ode_linear, + ODEProblemLibrary.prob_ode_2Dlinear, + )[i] dts = 1 .// 2 .^ (9:-1:5) @show "Very low order" sim11 = test_convergence(dts, prob, ImplicitEuler(extrapolant = :linear)) - @test sim11.𝒪est[:final]≈1 atol=testTol - - sim112 = test_convergence(dts, prob, ImplicitEuler(nlsolve = NLFunctional()), - reltol = 1e-2) - @test sim112.𝒪est[:final]≈1 atol=testTol - - sim113 = test_convergence(dts, prob, ImplicitEuler(nlsolve = NLAnderson()), - reltol = 1e-2) - @test sim113.𝒪est[:final]≈1 atol=testTol - - sim114 = test_convergence(dts, prob, ImplicitEuler(nlsolve = NonlinearSolveAlg()), - reltol = 1e-2) - @test sim114.𝒪est[:final]≈1 atol=testTol + @test sim11.𝒪est[:final] ≈ 1 atol = testTol + + sim112 = test_convergence( + dts, prob, ImplicitEuler(nlsolve = NLFunctional()), + reltol = 1.0e-2 + ) + @test sim112.𝒪est[:final] ≈ 1 atol = testTol + + sim113 = test_convergence( + dts, prob, ImplicitEuler(nlsolve = NLAnderson()), + reltol = 1.0e-2 + ) + @test sim113.𝒪est[:final] ≈ 1 atol = testTol + + sim114 = test_convergence( + dts, prob, ImplicitEuler(nlsolve = NonlinearSolveAlg()), + reltol = 1.0e-2 + ) + @test sim114.𝒪est[:final] ≈ 1 atol = testTol sim13 = test_convergence(dts, prob, ImplicitMidpoint()) - @test sim13.𝒪est[:final]≈2 atol=testTol + @test sim13.𝒪est[:final] ≈ 2 atol = testTol sim132 = test_convergence(dts, prob, ImplicitMidpoint(nlsolve = NLFunctional())) - @test sim132.𝒪est[:final]≈2 atol=testTol + @test sim132.𝒪est[:final] ≈ 2 atol = testTol sim134 = test_convergence(dts, prob, ImplicitMidpoint(nlsolve = NLAnderson())) - @test sim134.𝒪est[:final]≈2 atol=testTol + @test sim134.𝒪est[:final] ≈ 2 atol = testTol sim136 = test_convergence(dts, prob, ImplicitMidpoint(nlsolve = NonlinearSolveAlg())) - @test sim136.𝒪est[:final]≈2 atol=testTol + @test sim136.𝒪est[:final] ≈ 2 atol = testTol sim13 = test_convergence(dts, prob, Trapezoid()) - @test sim13.𝒪est[:final]≈2 atol=testTol + @test sim13.𝒪est[:final] ≈ 2 atol = testTol sim133 = test_convergence(dts, prob, Trapezoid(nlsolve = NLFunctional())) - @test sim133.𝒪est[:final]≈2 atol=testTol + @test sim133.𝒪est[:final] ≈ 2 atol = testTol sim135 = test_convergence(dts, prob, Trapezoid(nlsolve = NLAnderson())) - @test sim135.𝒪est[:final]≈2 atol=testTol + @test sim135.𝒪est[:final] ≈ 2 atol = testTol sim137 = test_convergence(dts, prob, Trapezoid(nlsolve = NonlinearSolveAlg())) - @test sim137.𝒪est[:final]≈2 atol=testTol + @test sim137.𝒪est[:final] ≈ 2 atol = testTol sim14 = test_convergence(dts, prob, TRBDF2()) - @test sim14.𝒪est[:final]≈2 atol=testTol + @test sim14.𝒪est[:final] ≈ 2 atol = testTol sim152 = test_convergence(dts, prob, TRBDF2(autodiff = AutoFiniteDiff())) - @test sim152.𝒪est[:final]≈2 atol=testTol + 0.1 + @test sim152.𝒪est[:final] ≈ 2 atol = testTol + 0.1 sim15 = test_convergence(dts, prob, SDIRK2()) - @test sim15.𝒪est[:final]≈2 atol=testTol + @test sim15.𝒪est[:final] ≈ 2 atol = testTol sim15 = test_convergence(dts, prob, SDIRK22()) - @test sim15.𝒪est[:final]≈2 atol=testTol + @test sim15.𝒪est[:final] ≈ 2 atol = testTol sim152 = test_convergence(dts, prob, SSPSDIRK2()) - @test sim152.𝒪est[:final]≈2 atol=testTol + @test sim152.𝒪est[:final] ≈ 2 atol = testTol @show "Mid SDIRKs" sim16 = test_convergence(dts, prob, Kvaerno3()) - @test sim16.𝒪est[:final]≈3 atol=testTol + @test sim16.𝒪est[:final] ≈ 3 atol = testTol sim162 = test_convergence(dts, prob, Kvaerno3(nlsolve = NLFunctional())) - @test sim162.𝒪est[:final]≈3 atol=testTol + @test sim162.𝒪est[:final] ≈ 3 atol = testTol sim17 = test_convergence(dts, prob, KenCarp3()) - @test sim17.𝒪est[:final]≈3 atol=testTol + @test sim17.𝒪est[:final] ≈ 3 atol = testTol sim019 = test_convergence(dts, prob, CFNLIRK3()) - @test sim019.𝒪est[:final]≈3 atol=testTol + @test sim019.𝒪est[:final] ≈ 3 atol = testTol sim18 = test_convergence(dts, prob, PDIRK44()) - @test sim18.𝒪est[:final]≈4 atol=testTol + @test sim18.𝒪est[:final] ≈ 4 atol = testTol sim182 = test_convergence(dts, prob, PDIRK44(; threading = false)) - @test sim182.𝒪est[:final]≈4 atol=testTol + @test sim182.𝒪est[:final] ≈ 4 atol = testTol dts = (1 / 2) .^ (5:-1:1) sim13 = test_convergence(dts, prob, SFSDIRK8()) - @test sim13.𝒪est[:final]≈4 atol=testTol + @test sim13.𝒪est[:final] ≈ 4 atol = testTol dts = (1 / 2) .^ (5:-1:1) sim14 = test_convergence(dts, prob, SFSDIRK7()) - @test sim14.𝒪est[:final]≈4 atol=testTol + @test sim14.𝒪est[:final] ≈ 4 atol = testTol dts = (1 / 2) .^ (8:-1:1) sim15 = test_convergence(dts, prob, SFSDIRK6()) - @test sim15.𝒪est[:final]≈4 atol=testTol + @test sim15.𝒪est[:final] ≈ 4 atol = testTol dts = (1 / 2) .^ (6:-1:1) sim16 = test_convergence(dts, prob, SFSDIRK5()) - @test sim16.𝒪est[:final]≈4 atol=testTol + @test sim16.𝒪est[:final] ≈ 4 atol = testTol dts = 1 .// 2 .^ (7:-1:4) sim17 = test_convergence(dts, prob, SFSDIRK4()) - @test sim17.𝒪est[:final]≈4 atol=testTol + @test sim17.𝒪est[:final] ≈ 4 atol = testTol sim18 = test_convergence(dts, prob, Cash4()) - @test sim18.𝒪est[:final]≈4 atol=testTol + @test sim18.𝒪est[:final] ≈ 4 atol = testTol sim19 = test_convergence(dts, prob, Hairer4()) - @test sim19.𝒪est[:final]≈4 atol=testTol + @test sim19.𝒪est[:final] ≈ 4 atol = testTol sim20 = test_convergence(dts, prob, RK46NL()) - @test sim20.𝒪est[:final]≈4 atol=testTol - @test sim20.𝒪est[:l2]≈4 atol=testTol - @test sim20.𝒪est[:l∞]≈4 atol=testTol + @test sim20.𝒪est[:final] ≈ 4 atol = testTol + @test sim20.𝒪est[:l2] ≈ 4 atol = testTol + @test sim20.𝒪est[:l∞] ≈ 4 atol = testTol sim110 = test_convergence(dts, prob, Hairer42()) - @test sim110.𝒪est[:final]≈4 atol=testTol + @test sim110.𝒪est[:final] ≈ 4 atol = testTol sim111 = test_convergence(dts, prob, Kvaerno4()) - @test sim111.𝒪est[:final]≈4 atol=testTol + @test sim111.𝒪est[:final] ≈ 4 atol = testTol sim112 = test_convergence(dts, prob, KenCarp4()) - @test sim112.𝒪est[:final]≈4 atol=testTol + @test sim112.𝒪est[:final] ≈ 4 atol = testTol sim113 = test_convergence(dts, prob, Kvaerno5()) - @test sim113.𝒪est[:final]≈5 atol=testTol + @test sim113.𝒪est[:final] ≈ 5 atol = testTol sim114 = test_convergence(dts, prob, KenCarp5()) - @test sim114.𝒪est[:final]≈5 atol=testTol + @test sim114.𝒪est[:final] ≈ 5 atol = testTol sim115 = test_convergence(dts, prob, KenCarp5(nlsolve = NLFunctional())) - @test_broken sim115.𝒪est[:final]≈5 atol=testTol + @test_broken sim115.𝒪est[:final] ≈ 5 atol = testTol sim116 = test_convergence(dts, prob, ESDIRK54I8L2SA()) - @test sim116.𝒪est[:final]≈5 atol=testTol + @test sim116.𝒪est[:final] ≈ 5 atol = testTol sim117 = test_convergence(dts, prob, KenCarp47()) - @test sim117.𝒪est[:final]≈4 atol=testTol + @test sim117.𝒪est[:final] ≈ 4 atol = testTol sim118 = test_convergence(dts, prob, KenCarp58()) - @test sim118.𝒪est[:final]≈5 atol=testTol + @test sim118.𝒪est[:final] ≈ 5 atol = testTol sim119 = test_convergence(dts, prob, ESDIRK436L2SA2()) - @test sim119.𝒪est[:final]≈4 atol=testTol + @test sim119.𝒪est[:final] ≈ 4 atol = testTol sim120 = test_convergence(dts, prob, ESDIRK437L2SA()) - @test sim120.𝒪est[:final]≈4 atol=testTol + @test sim120.𝒪est[:final] ≈ 4 atol = testTol sim121 = test_convergence(dts, prob, ESDIRK547L2SA2()) @test 5 - testTol <= sim121.𝒪est[:final] <= 6 dts = (1 / 2) .^ (5:-1:1) sim122 = test_convergence(dts, prob, ESDIRK659L2SA()) - @test sim122.𝒪est[:final]≈6 atol=testTol + @test sim122.𝒪est[:final] ≈ 6 atol = testTol end diff --git a/lib/OrdinaryDiffEqSIMDRK/src/OrdinaryDiffEqSIMDRK.jl b/lib/OrdinaryDiffEqSIMDRK/src/OrdinaryDiffEqSIMDRK.jl index 964e6272d4..e27a0f539d 100644 --- a/lib/OrdinaryDiffEqSIMDRK/src/OrdinaryDiffEqSIMDRK.jl +++ b/lib/OrdinaryDiffEqSIMDRK/src/OrdinaryDiffEqSIMDRK.jl @@ -2,7 +2,7 @@ module OrdinaryDiffEqSIMDRK using MuladdMacro, Static using OrdinaryDiffEqCore: OrdinaryDiffEqAdaptiveAlgorithm, OrdinaryDiffEqConstantCache, - trivial_limiter!, calculate_residuals, constvalue + trivial_limiter!, calculate_residuals, constvalue import OrdinaryDiffEqCore: initialize!, perform_step!, alg_cache using Reexport: @reexport diff --git a/lib/OrdinaryDiffEqSIMDRK/src/algorithms.jl b/lib/OrdinaryDiffEqSIMDRK/src/algorithms.jl index b70b186aef..09ce7b55fd 100644 --- a/lib/OrdinaryDiffEqSIMDRK/src/algorithms.jl +++ b/lib/OrdinaryDiffEqSIMDRK/src/algorithms.jl @@ -4,17 +4,23 @@ struct MER5v2{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAdaptiveAlgori thread::Thread end -function MER5v2(; stage_limiter! = trivial_limiter!, step_limiter! = trivial_limiter!, - thread = False()) - MER5v2{typeof(stage_limiter!), typeof(step_limiter!), typeof(thread)}(stage_limiter!, +function MER5v2(; + stage_limiter! = trivial_limiter!, step_limiter! = trivial_limiter!, + thread = False() + ) + return MER5v2{typeof(stage_limiter!), typeof(step_limiter!), typeof(thread)}( + stage_limiter!, step_limiter!, - thread) + thread + ) end # for backwards compatibility function MER5v2(stage_limiter!, step_limiter! = trivial_limiter!) - MER5v2{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, - step_limiter!, False()) + return MER5v2{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, + step_limiter!, False() + ) end struct MER6v2{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAdaptiveAlgorithm @@ -23,17 +29,23 @@ struct MER6v2{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAdaptiveAlgori thread::Thread end -function MER6v2(; stage_limiter! = trivial_limiter!, step_limiter! = trivial_limiter!, - thread = False()) - MER6v2{typeof(stage_limiter!), typeof(step_limiter!), typeof(thread)}(stage_limiter!, +function MER6v2(; + stage_limiter! = trivial_limiter!, step_limiter! = trivial_limiter!, + thread = False() + ) + return MER6v2{typeof(stage_limiter!), typeof(step_limiter!), typeof(thread)}( + stage_limiter!, step_limiter!, - thread) + thread + ) end # for backwards compatibility function MER6v2(stage_limiter!, step_limiter! = trivial_limiter!) - MER6v2{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, - step_limiter!, False()) + return MER6v2{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, + step_limiter!, False() + ) end struct RK6v4{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAdaptiveAlgorithm @@ -42,23 +54,31 @@ struct RK6v4{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAdaptiveAlgorit thread::Thread end -function RK6v4(; stage_limiter! = trivial_limiter!, step_limiter! = trivial_limiter!, - thread = False()) - RK6v4{typeof(stage_limiter!), typeof(step_limiter!), typeof(thread)}(stage_limiter!, +function RK6v4(; + stage_limiter! = trivial_limiter!, step_limiter! = trivial_limiter!, + thread = False() + ) + return RK6v4{typeof(stage_limiter!), typeof(step_limiter!), typeof(thread)}( + stage_limiter!, step_limiter!, - thread) + thread + ) end # for backwards compatibility function RK6v4(stage_limiter!, step_limiter! = trivial_limiter!) - RK6v4{typeof(stage_limiter!), typeof(step_limiter!), False}(stage_limiter!, - step_limiter!, False()) + return RK6v4{typeof(stage_limiter!), typeof(step_limiter!), False}( + stage_limiter!, + step_limiter!, False() + ) end function Base.show(io::IO, alg::Union{MER5v2, MER6v2, RK6v4}) - print(io, "$(nameof(typeof(alg)))(stage_limiter! = ", alg.stage_limiter!, + return print( + io, "$(nameof(typeof(alg)))(stage_limiter! = ", alg.stage_limiter!, ", step_limiter! = ", alg.step_limiter!, - ", thread = ", alg.thread, ")") + ", thread = ", alg.thread, ")" + ) end OrdinaryDiffEqCore.alg_order(alg::MER5v2) = 5 diff --git a/lib/OrdinaryDiffEqSIMDRK/src/caches.jl b/lib/OrdinaryDiffEqSIMDRK/src/caches.jl index 82eb59633d..9d89b00df0 100644 --- a/lib/OrdinaryDiffEqSIMDRK/src/caches.jl +++ b/lib/OrdinaryDiffEqSIMDRK/src/caches.jl @@ -229,7 +229,8 @@ function MER5v2ConstantCache(::Type{T}, ::Type{T2}) where {T, T2} btilde_12 = convert(T, 0.15118141529529247) btilde_13 = convert(T, 0.3043705741223895) btilde_14 = convert(T, -0.0827772936325406) - MER5v2ConstantCache(c_2, c_3, c_4, c_5, c_6, c_7, c_8, c_9, c_10, c_11, c_12, c_13, + return MER5v2ConstantCache( + c_2, c_3, c_4, c_5, c_6, c_7, c_8, c_9, c_10, c_11, c_12, c_13, c_14, a2_1, a3_1, a4_1, a5_1, a6_1, a7_1, a8_1, a9_1, a10_1, a11_1, a12_1, a13_1, a14_1, a4_2, a5_2, a6_2, a7_2, a8_2, a9_2, a10_2, a11_2, a12_2, @@ -243,14 +244,17 @@ function MER5v2ConstantCache(::Type{T}, ::Type{T2}) where {T, T2} btilde_3, btilde_4, btilde_5, btilde_6, btilde_7, btilde_8, btilde_9, btilde_10, - btilde_11, btilde_12, btilde_13, btilde_14) + btilde_11, btilde_12, btilde_13, btilde_14 + ) end -function alg_cache(alg::MER5v2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MER5v2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - MER5v2ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return MER5v2ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end struct MER6v2ConstantCache{T, T2} <: OrdinaryDiffEqConstantCache @@ -515,7 +519,8 @@ function MER6v2ConstantCache(::Type{T}, ::Type{T2}) where {T, T2} btilde_12 = convert(T, -1.5902737477948865e-5) btilde_13 = convert(T, -0.002650053713821432) btilde_14 = convert(T, 0.002076376586804707) - MER6v2ConstantCache(c_2, c_3, c_4, c_5, c_6, c_7, c_8, c_9, c_10, c_11, c_12, c_13, + return MER6v2ConstantCache( + c_2, c_3, c_4, c_5, c_6, c_7, c_8, c_9, c_10, c_11, c_12, c_13, c_14, c_15, a2_1, a3_1, a4_1, a5_1, a6_1, a7_1, a8_1, a9_1, a10_1, a11_1, a12_1, a13_1, a14_1, a15_1, a4_2, a5_2, a6_2, a7_2, a8_2, a9_2, a10_2, a11_2, a12_2, @@ -529,14 +534,17 @@ function MER6v2ConstantCache(::Type{T}, ::Type{T2}) where {T, T2} btilde_3, btilde_4, btilde_5, btilde_6, btilde_7, btilde_8, btilde_9, btilde_10, - btilde_11, btilde_12, btilde_13, btilde_14) + btilde_11, btilde_12, btilde_13, btilde_14 + ) end -function alg_cache(alg::MER6v2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::MER6v2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - MER6v2ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return MER6v2ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end struct RK6v4ConstantCache{T, T2} <: OrdinaryDiffEqConstantCache @@ -1035,7 +1043,7 @@ function RK6v4ConstantCache(::Type{T}, ::Type{T2}) where {T, T2} btilde_20 = convert(T, -0.05956848835084534) btilde_21 = convert(T, 0.028833209735199462) - RK6v4ConstantCache( + return RK6v4ConstantCache( c_2, c_3, c_4, c_5, c_6, c_7, c_8, c_9, c_10, c_11, c_12, c_13, c_14, c_15, c_16, c_17, c_18, c_19, c_20, c_21, c_22, a2_1, a3_1, a4_1, a5_1, @@ -1068,12 +1076,15 @@ function RK6v4ConstantCache(::Type{T}, ::Type{T2}) where {T, T2} a22_19, a22_20, a22_21, btilde_1, btilde_2, btilde_3, btilde_4, btilde_5, btilde_6, btilde_7, btilde_8, btilde_9, btilde_10, btilde_11, btilde_12, btilde_13, - btilde_14, btilde_15, btilde_16, btilde_17, btilde_18, btilde_19, btilde_20, btilde_21) + btilde_14, btilde_15, btilde_16, btilde_17, btilde_18, btilde_19, btilde_20, btilde_21 + ) end -function alg_cache(alg::RK6v4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RK6v4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - RK6v4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return RK6v4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end diff --git a/lib/OrdinaryDiffEqSIMDRK/src/perform_step.jl b/lib/OrdinaryDiffEqSIMDRK/src/perform_step.jl index ebca2532fa..4a94283187 100644 --- a/lib/OrdinaryDiffEqSIMDRK/src/perform_step.jl +++ b/lib/OrdinaryDiffEqSIMDRK/src/perform_step.jl @@ -1,5 +1,7 @@ -function initialize!(integrator, - cache::Union{MER5v2ConstantCache, MER6v2ConstantCache, RK6v4ConstantCache}) +function initialize!( + integrator, + cache::Union{MER5v2ConstantCache, MER6v2ConstantCache, RK6v4ConstantCache} + ) integrator.kshortsize = 2 integrator.k = typeof(integrator.k)(undef, integrator.kshortsize) integrator.fsalfirst = integrator.f(integrator.uprev, integrator.p, integrator.t) # Pre-start fsal @@ -8,7 +10,7 @@ function initialize!(integrator, # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[integrator.kshortsize] = integrator.fsallast + return integrator.k[integrator.kshortsize] = integrator.fsallast end using VectorizationBase, SLEEFPirates @@ -41,15 +43,18 @@ end # pirate @inline function (f::ODEFunction)( - v::AbstractArray{<:VectorizationBase.AbstractSIMD}, args...) - @inline f.f(v, args...) + v::AbstractArray{<:VectorizationBase.AbstractSIMD}, args... + ) + return @inline f.f(v, args...) end @muladd function perform_step!( integrator, cache::MER5v2ConstantCache, - repeat_step = false) + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator - (; c_2, c_3, c_4, c_5, c_6, c_7, c_8, c_9, c_10, c_11, c_12, c_13, c_14, a2_1, a3_1, + (; + c_2, c_3, c_4, c_5, c_6, c_7, c_8, c_9, c_10, c_11, c_12, c_13, c_14, a2_1, a3_1, a4_1, a5_1, a6_1, a7_1, a8_1, a9_1, a10_1, a11_1, a12_1, a13_1, a14_1, a4_2, a5_2, a6_2, a7_2, a8_2, a9_2, a10_2, a11_2, a12_2, a13_2, a14_2, a4_3, a5_3, a6_3, a7_3, a8_3, a9_3, a10_3, a11_3, @@ -60,7 +65,8 @@ end a14_8, a10_9, a11_9, a12_9, a13_9, a14_9, a12_10, a13_10, a14_10, a12_11, a13_11, a14_11, a14_12, a14_13, btilde_1, btilde_2, btilde_3, btilde_4, btilde_5, btilde_6, btilde_7, btilde_8, btilde_9, btilde_10, - btilde_11, btilde_12, btilde_13, btilde_14) = cache + btilde_11, btilde_12, btilde_13, btilde_14, + ) = cache k_1 = integrator.fsalfirst @@ -79,7 +85,8 @@ end c_4_5 = Vec(c_4, c_5) k_4_5 = @inline f( uprev + dt * (a_4_5_1 * k_1 + a_4_2_5_3 * k_2_3 + a_4_3_5_2 * k_3_2), p, - t + c_4_5 * dt) + t + c_4_5 * dt + ) #k_4 = f(uprev + dt * (a4_1 * k_1 + a4_2 * k_2 + a4_3 * k_3), p, t + c_4 * dt) #k_5 = f(uprev + dt * (a5_1 * k_1 + a5_2 * k_2 + a5_3 * k_3), p, t + c_5 * dt) @@ -98,11 +105,14 @@ end k_6_7 = @inline f( uprev + - dt * - (a6_7_1 * k_1 + a6_2_7_3 * k_2_3 + a6_3_7_2 * k_3_2 + a6_4_7_5 * k_4_5 + - a6_5_7_4 * k_5_4), + dt * + ( + a6_7_1 * k_1 + a6_2_7_3 * k_2_3 + a6_3_7_2 * k_3_2 + a6_4_7_5 * k_4_5 + + a6_5_7_4 * k_5_4 + ), p, - t + c_6_7 * dt) + t + c_6_7 * dt + ) k_7_6 = VectorizationBase.shufflevector.(k_6_7, Val{(1, 0)}()) c_8_9 = Vec(c_8, c_9) @@ -116,11 +126,14 @@ end k_7_6 = VectorizationBase.shufflevector.(k_6_7, Val{(1, 0)}()) k_8_9 = @inline f( uprev + - dt * - (a8_9_1 * k_1 + a8_2_9_3 * k_2_3 + a8_3_9_2 * k_3_2 + a8_4_9_5 * k_4_5 + - a8_5_9_4 * k_5_4 + a8_6_9_7 * k_6_7 + a8_7_9_6 * k_7_6), + dt * + ( + a8_9_1 * k_1 + a8_2_9_3 * k_2_3 + a8_3_9_2 * k_3_2 + a8_4_9_5 * k_4_5 + + a8_5_9_4 * k_5_4 + a8_6_9_7 * k_6_7 + a8_7_9_6 * k_7_6 + ), p, - t + c_8_9 * dt) + t + c_8_9 * dt + ) c_10_11 = Vec(c_10, c_11) a10_11_1 = Vec(a10_1, a11_1) @@ -135,11 +148,14 @@ end k_9_8 = VectorizationBase.shufflevector.(k_8_9, Val{(1, 0)}()) k_10_11 = @inline f( uprev + - dt * (a10_11_1 * k_1 + a10_2_11_3 * k_2_3 + a10_3_11_2 * k_3_2 + - a10_4_11_5 * k_4_5 + a10_5_11_4 * k_5_4 + a10_6_11_7 * k_6_7 + - a10_7_11_6 * k_7_6 + a10_8_11_9 * k_8_9 + a10_9_11_8 * k_9_8), + dt * ( + a10_11_1 * k_1 + a10_2_11_3 * k_2_3 + a10_3_11_2 * k_3_2 + + a10_4_11_5 * k_4_5 + a10_5_11_4 * k_5_4 + a10_6_11_7 * k_6_7 + + a10_7_11_6 * k_7_6 + a10_8_11_9 * k_8_9 + a10_9_11_8 * k_9_8 + ), p, - t + c_10_11 * dt) + t + c_10_11 * dt + ) c_12_13 = Vec(c_12, c_13) a12_13_1 = Vec(a12_1, a13_1) a12_2_13_3 = Vec(a12_2, a13_3) @@ -155,33 +171,46 @@ end k_11_10 = VectorizationBase.shufflevector.(k_10_11, Val{(1, 0)}()) k_12_13 = @inline f( uprev + - dt * (a12_13_1 * k_1 + a12_2_13_3 * k_2_3 + a12_3_13_2 * k_3_2 + - a12_4_13_5 * k_4_5 + a12_5_13_4 * k_5_4 + a12_6_13_7 * k_6_7 + - a12_7_13_6 * k_7_6 + a12_8_13_9 * k_8_9 + a12_9_13_8 * k_9_8 + - a12_10_13_11 * k_10_11 + a12_11_13_10 * k_11_10), + dt * ( + a12_13_1 * k_1 + a12_2_13_3 * k_2_3 + a12_3_13_2 * k_3_2 + + a12_4_13_5 * k_4_5 + a12_5_13_4 * k_5_4 + a12_6_13_7 * k_6_7 + + a12_7_13_6 * k_7_6 + a12_8_13_9 * k_8_9 + a12_9_13_8 * k_9_8 + + a12_10_13_11 * k_10_11 + a12_11_13_10 * k_11_10 + ), p, - t + c_12_13 * dt) + t + c_12_13 * dt + ) u = uprev + - dt * (a14_1 * k_1 + - VectorizationBase.vsum.(Vec(a14_2, a14_3) * k_2_3 + Vec(a14_4, a14_5) * k_4_5 + - Vec(a14_6, a14_7) * k_6_7 + Vec(a14_8, a14_9) * k_8_9 + - Vec(a14_10, a14_11) * k_10_11 + - Vec(a14_12, a14_13) * k_12_13)) + dt * ( + a14_1 * k_1 + + VectorizationBase.vsum.( + Vec(a14_2, a14_3) * k_2_3 + Vec(a14_4, a14_5) * k_4_5 + + Vec(a14_6, a14_7) * k_6_7 + Vec(a14_8, a14_9) * k_8_9 + + Vec(a14_10, a14_11) * k_10_11 + + Vec(a14_12, a14_13) * k_12_13 + ) + ) k_14 = integrator.fsallast = @inline f(u, p, t + dt) integrator.stats.nf += 12 if integrator.opts.adaptive - utilde = dt * (VectorizationBase.vsum.(Vec(btilde_2, btilde_3) * k_2_3 + - Vec(btilde_4, btilde_5) * k_4_5 + - Vec(btilde_6, btilde_7) * k_6_7 + - Vec(btilde_8, btilde_9) * k_8_9 + - Vec(btilde_10, btilde_11) * k_10_11 + - Vec(btilde_12, btilde_13) * k_12_13 + - Vec(btilde_1, btilde_14) * Vec.(k_1, k_14))) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + utilde = dt * ( + VectorizationBase.vsum.( + Vec(btilde_2, btilde_3) * k_2_3 + + Vec(btilde_4, btilde_5) * k_4_5 + + Vec(btilde_6, btilde_7) * k_6_7 + + Vec(btilde_8, btilde_9) * k_8_9 + + Vec(btilde_10, btilde_11) * k_10_11 + + Vec(btilde_12, btilde_13) * k_12_13 + + Vec(btilde_1, btilde_14) * Vec.(k_1, k_14) + ) + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.u = u @@ -189,9 +218,11 @@ end @muladd function perform_step!( integrator, cache::MER6v2ConstantCache, - repeat_step = false) + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator - (; c_2, c_3, c_4, c_5, c_6, c_7, c_8, c_9, c_10, + (; + c_2, c_3, c_4, c_5, c_6, c_7, c_8, c_9, c_10, c_11, c_12, c_13, c_14, c_15, a2_1, a3_1, a4_1, a5_1, a6_1, a7_1, a8_1, a9_1, a10_1, a11_1, a12_1, a13_1, a14_1, a15_1, a4_2, a5_2, a6_2, a7_2, a8_2, a9_2, a10_2, a11_2, a12_2, @@ -204,7 +235,8 @@ end a12_11, a13_11, a14_11, a15_11, a14_12, a15_12, a14_13, a15_13, a15_14, btilde_1, btilde_2, btilde_3, btilde_4, btilde_5, btilde_6, btilde_7, btilde_8, btilde_9, btilde_10, - btilde_11, btilde_12, btilde_13, btilde_14) = cache + btilde_11, btilde_12, btilde_13, btilde_14, + ) = cache k_1 = integrator.fsalfirst @@ -220,7 +252,8 @@ end c_4_5 = Vec(c_4, c_5) k_4_5 = @inline f( uprev + dt * (a_4_5_1 * k_1 + a_4_2_5_3 * k_2_3 + a_4_3_5_2 * k_3_2), p, - t + c_4_5 * dt) + t + c_4_5 * dt + ) k_5_4 = VectorizationBase.shufflevector.(k_4_5, Val{(1, 0)}()) a6_7_1 = Vec(a6_1, a7_1) @@ -231,11 +264,14 @@ end c_6_7 = Vec(c_6, c_7) k_6_7 = @inline f( uprev + - dt * - (a6_7_1 * k_1 + a6_2_7_3 * k_2_3 + a6_3_7_2 * k_3_2 + a6_4_7_5 * k_4_5 + - a6_5_7_4 * k_5_4), + dt * + ( + a6_7_1 * k_1 + a6_2_7_3 * k_2_3 + a6_3_7_2 * k_3_2 + a6_4_7_5 * k_4_5 + + a6_5_7_4 * k_5_4 + ), p, - t + c_6_7 * dt) + t + c_6_7 * dt + ) k_7_6 = VectorizationBase.shufflevector.(k_6_7, Val{(1, 0)}()) c_8_9 = Vec(c_8, c_9) @@ -249,11 +285,14 @@ end k_7_6 = VectorizationBase.shufflevector.(k_6_7, Val{(1, 0)}()) k_8_9 = @inline f( uprev + - dt * - (a8_9_1 * k_1 + a8_2_9_3 * k_2_3 + a8_3_9_2 * k_3_2 + a8_4_9_5 * k_4_5 + - a8_5_9_4 * k_5_4 + a8_6_9_7 * k_6_7 + a8_7_9_6 * k_7_6), + dt * + ( + a8_9_1 * k_1 + a8_2_9_3 * k_2_3 + a8_3_9_2 * k_3_2 + a8_4_9_5 * k_4_5 + + a8_5_9_4 * k_5_4 + a8_6_9_7 * k_6_7 + a8_7_9_6 * k_7_6 + ), p, - t + c_8_9 * dt) + t + c_8_9 * dt + ) c_10_11 = Vec(c_10, c_11) a10_11_1 = Vec(a10_1, a11_1) @@ -268,11 +307,14 @@ end k_9_8 = VectorizationBase.shufflevector.(k_8_9, Val{(1, 0)}()) k_10_11 = @inline f( uprev + - dt * (a10_11_1 * k_1 + a10_2_11_3 * k_2_3 + a10_3_11_2 * k_3_2 + - a10_4_11_5 * k_4_5 + a10_5_11_4 * k_5_4 + a10_6_11_7 * k_6_7 + - a10_7_11_6 * k_7_6 + a10_8_11_9 * k_8_9 + a10_9_11_8 * k_9_8), + dt * ( + a10_11_1 * k_1 + a10_2_11_3 * k_2_3 + a10_3_11_2 * k_3_2 + + a10_4_11_5 * k_4_5 + a10_5_11_4 * k_5_4 + a10_6_11_7 * k_6_7 + + a10_7_11_6 * k_7_6 + a10_8_11_9 * k_8_9 + a10_9_11_8 * k_9_8 + ), p, - t + c_10_11 * dt) + t + c_10_11 * dt + ) c_12_13 = Vec(c_12, c_13) a12_13_1 = Vec(a12_1, a13_1) a12_2_13_3 = Vec(a12_2, a13_3) @@ -288,12 +330,15 @@ end k_11_10 = VectorizationBase.shufflevector.(k_10_11, Val{(1, 0)}()) k_12_13 = @inline f( uprev + - dt * (a12_13_1 * k_1 + a12_2_13_3 * k_2_3 + a12_3_13_2 * k_3_2 + - a12_4_13_5 * k_4_5 + a12_5_13_4 * k_5_4 + a12_6_13_7 * k_6_7 + - a12_7_13_6 * k_7_6 + a12_8_13_9 * k_8_9 + a12_9_13_8 * k_9_8 + - a12_10_13_11 * k_10_11 + a12_11_13_10 * k_11_10), + dt * ( + a12_13_1 * k_1 + a12_2_13_3 * k_2_3 + a12_3_13_2 * k_3_2 + + a12_4_13_5 * k_4_5 + a12_5_13_4 * k_5_4 + a12_6_13_7 * k_6_7 + + a12_7_13_6 * k_7_6 + a12_8_13_9 * k_8_9 + a12_9_13_8 * k_9_8 + + a12_10_13_11 * k_10_11 + a12_11_13_10 * k_11_10 + ), p, - t + c_12_13 * dt) + t + c_12_13 * dt + ) a14_2_14_3 = Vec(a14_2, a14_3) a14_4_14_5 = Vec(a14_4, a14_5) @@ -304,34 +349,49 @@ end k_14 = @inline f( uprev + - dt * (a14_1 * k_1 + - VectorizationBase.vsum.(a14_2_14_3 * k_2_3 + a14_4_14_5 * k_4_5 - + a14_6_14_7 * k_6_7 + a14_8_14_9 * k_8_9 - + a14_10_14_11 * k_10_11 + a14_12_14_13 * k_12_13)), + dt * ( + a14_1 * k_1 + + VectorizationBase.vsum.( + a14_2_14_3 * k_2_3 + a14_4_14_5 * k_4_5 + + a14_6_14_7 * k_6_7 + a14_8_14_9 * k_8_9 + + a14_10_14_11 * k_10_11 + a14_12_14_13 * k_12_13 + ) + ), p, - t + c_14 * dt) + t + c_14 * dt + ) u = uprev + dt * - (VectorizationBase.vsum.(Vec(a15_2, a15_3) * k_2_3 + Vec(a15_4, a15_5) * k_4_5 + - Vec(a15_6, a15_7) * k_6_7 + Vec(a15_8, a15_9) * k_8_9 + - Vec(a15_10, a15_11) * k_10_11 + - Vec(a15_12, a15_13) * k_12_13 + - Vec(a15_1, a15_14) * Vec.(k_1, k_14))) + ( + VectorizationBase.vsum.( + Vec(a15_2, a15_3) * k_2_3 + Vec(a15_4, a15_5) * k_4_5 + + Vec(a15_6, a15_7) * k_6_7 + Vec(a15_8, a15_9) * k_8_9 + + Vec(a15_10, a15_11) * k_10_11 + + Vec(a15_12, a15_13) * k_12_13 + + Vec(a15_1, a15_14) * Vec.(k_1, k_14) + ) + ) integrator.fsallast = @inline f(u, p, t + dt) integrator.stats.nf += 14 if integrator.opts.adaptive - utilde = dt * (VectorizationBase.vsum.(Vec(btilde_2, btilde_3) * k_2_3 + - Vec(btilde_4, btilde_5) * k_4_5 + - Vec(btilde_6, btilde_7) * k_6_7 + - Vec(btilde_8, btilde_9) * k_8_9 + - Vec(btilde_10, btilde_11) * k_10_11 + - Vec(btilde_12, btilde_13) * k_12_13 + - Vec(btilde_1, btilde_14) * Vec.(k_1, k_14))) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + utilde = dt * ( + VectorizationBase.vsum.( + Vec(btilde_2, btilde_3) * k_2_3 + + Vec(btilde_4, btilde_5) * k_4_5 + + Vec(btilde_6, btilde_7) * k_6_7 + + Vec(btilde_8, btilde_9) * k_8_9 + + Vec(btilde_10, btilde_11) * k_10_11 + + Vec(btilde_12, btilde_13) * k_12_13 + + Vec(btilde_1, btilde_14) * Vec.(k_1, k_14) + ) + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.u = u @@ -339,49 +399,54 @@ end @muladd function perform_step!( integrator, cache::RK6v4ConstantCache, - repeat_step = false) + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator - (; c_2, c_3, c_4, c_5, c_6, c_7, c_8, c_9, c_10, c_11, c_12, c_13, c_14, c_15, - c_16, c_17, c_18, c_19, c_20, - c_21, c_22, a2_1, a3_1, a4_1, a5_1, - a6_1, a7_1, a8_1, a9_1, a10_1, a11_1, a12_1, - a13_1, a14_1, a15_1, a16_1, a17_1, a18_1, a19_1, a20_1, - a21_1, a22_1, a6_2, a7_2, a8_2, a9_2, a10_2, a11_2, a12_2, - a13_2, a14_2, a15_2, a16_2, a17_2, a18_2, a19_2, - a20_2, a21_2, a22_2, a6_3, a7_3, a8_3, a9_3, a10_3, a11_3, - a12_3, a13_3, a14_3, a15_3, a16_3, a17_3, a18_3, - a19_3, a20_3, a21_3, a22_3, a6_4, a7_4, a8_4, a9_4, a10_4, - a11_4, a12_4, a13_4, a14_4, a15_4, a16_4, a17_4, - a18_4, a19_4, a20_4, a21_4, - a22_4, a6_5, a7_5, a8_5, a9_5, a10_5, a11_5, a12_5, a13_5, - a14_5, a15_5, a16_5, a17_5, a18_5, a19_5, a20_5, - a21_5, a22_5, a10_6, a11_6, a12_6, a13_6, a14_6, a15_6, - a16_6, a17_6, a18_6, a19_6, a20_6, a21_6, a22_6, a10_7, - a11_7, a12_7, a13_7, a14_7, a15_7, a16_7, a17_7, a18_7, - a19_7, a20_7, a21_7, a22_7, a10_8, a11_8, a12_8, - a13_8, a14_8, a15_8, a16_8, a17_8, a18_8, a19_8, a20_8, - a21_8, a22_8, a10_9, a11_9, a12_9, a13_9, a14_9, a15_9, - a16_9, a17_9, a18_9, a19_9, a20_9, a21_9, a22_9, a14_10, - a15_10, a16_10, a17_10, a18_10, a19_10, a20_10, a21_10, - a22_10, a14_11, a15_11, a16_11, a17_11, a18_11, a19_11, - a20_11, a21_11, a22_11, a14_12, a15_12, a16_12, a17_12, - a18_12, a19_12, a20_12, a21_12, a22_12, a14_13, a15_13, - a16_13, a17_13, a18_13, a19_13, a20_13, a21_13, a22_13, - a18_14, a19_14, a20_14, a21_14, a22_14, a18_15, a19_15, - a20_15, a21_15, a22_15, a18_16, a19_16, a20_16, a21_16, - a22_16, a18_17, a19_17, a20_17, a21_17, a22_17, a22_18, - a22_19, a22_20, a22_21, btilde_1, btilde_2, btilde_3, - btilde_4, btilde_5, btilde_6, btilde_7, btilde_8, btilde_9, - btilde_10, btilde_11, btilde_12, btilde_13, - btilde_14, btilde_15, btilde_16, btilde_17, btilde_18, btilde_19, btilde_20, btilde_21) = cache + (; + c_2, c_3, c_4, c_5, c_6, c_7, c_8, c_9, c_10, c_11, c_12, c_13, c_14, c_15, + c_16, c_17, c_18, c_19, c_20, + c_21, c_22, a2_1, a3_1, a4_1, a5_1, + a6_1, a7_1, a8_1, a9_1, a10_1, a11_1, a12_1, + a13_1, a14_1, a15_1, a16_1, a17_1, a18_1, a19_1, a20_1, + a21_1, a22_1, a6_2, a7_2, a8_2, a9_2, a10_2, a11_2, a12_2, + a13_2, a14_2, a15_2, a16_2, a17_2, a18_2, a19_2, + a20_2, a21_2, a22_2, a6_3, a7_3, a8_3, a9_3, a10_3, a11_3, + a12_3, a13_3, a14_3, a15_3, a16_3, a17_3, a18_3, + a19_3, a20_3, a21_3, a22_3, a6_4, a7_4, a8_4, a9_4, a10_4, + a11_4, a12_4, a13_4, a14_4, a15_4, a16_4, a17_4, + a18_4, a19_4, a20_4, a21_4, + a22_4, a6_5, a7_5, a8_5, a9_5, a10_5, a11_5, a12_5, a13_5, + a14_5, a15_5, a16_5, a17_5, a18_5, a19_5, a20_5, + a21_5, a22_5, a10_6, a11_6, a12_6, a13_6, a14_6, a15_6, + a16_6, a17_6, a18_6, a19_6, a20_6, a21_6, a22_6, a10_7, + a11_7, a12_7, a13_7, a14_7, a15_7, a16_7, a17_7, a18_7, + a19_7, a20_7, a21_7, a22_7, a10_8, a11_8, a12_8, + a13_8, a14_8, a15_8, a16_8, a17_8, a18_8, a19_8, a20_8, + a21_8, a22_8, a10_9, a11_9, a12_9, a13_9, a14_9, a15_9, + a16_9, a17_9, a18_9, a19_9, a20_9, a21_9, a22_9, a14_10, + a15_10, a16_10, a17_10, a18_10, a19_10, a20_10, a21_10, + a22_10, a14_11, a15_11, a16_11, a17_11, a18_11, a19_11, + a20_11, a21_11, a22_11, a14_12, a15_12, a16_12, a17_12, + a18_12, a19_12, a20_12, a21_12, a22_12, a14_13, a15_13, + a16_13, a17_13, a18_13, a19_13, a20_13, a21_13, a22_13, + a18_14, a19_14, a20_14, a21_14, a22_14, a18_15, a19_15, + a20_15, a21_15, a22_15, a18_16, a19_16, a20_16, a21_16, + a22_16, a18_17, a19_17, a20_17, a21_17, a22_17, a22_18, + a22_19, a22_20, a22_21, btilde_1, btilde_2, btilde_3, + btilde_4, btilde_5, btilde_6, btilde_7, btilde_8, btilde_9, + btilde_10, btilde_11, btilde_12, btilde_13, + btilde_14, btilde_15, btilde_16, btilde_17, btilde_18, btilde_19, btilde_20, btilde_21, + ) = cache k_1 = integrator.fsalfirst c_2_3_4_5 = Vec(c_2, c_3, c_4, c_5) a_2_3_4_5_1 = Vec(a2_1, a3_1, a4_1, a5_1) - k_2_3_4_5 = @inline f(uprev + dt * (a_2_3_4_5_1 * k_1), p, t + - c_2_3_4_5 * dt) + k_2_3_4_5 = @inline f( + uprev + dt * (a_2_3_4_5_1 * k_1), p, t + + c_2_3_4_5 * dt + ) c_6_7_8_9 = Vec(c_6, c_7, c_8, c_9) a_6_7_8_9_1 = Vec(a6_1, a7_1, a8_1, a9_1) @@ -395,12 +460,15 @@ end k_5_2_3_4 = VectorizationBase.shufflevector.(k_2_3_4_5, Val{(3, 0, 1, 2)}()) k_6_7_8_9 = @inline f( uprev + - dt * - (a_6_7_8_9_1 * k_1 + a_6_2_7_3_8_4_9_5 * k_2_3_4_5 + a_6_3_7_4_8_5_9_2 * k_3_4_5_2 + - a_6_4_7_5_8_2_9_3 * k_4_5_2_3 + a_6_5_7_2_8_3_9_4 * k_5_2_3_4), + dt * + ( + a_6_7_8_9_1 * k_1 + a_6_2_7_3_8_4_9_5 * k_2_3_4_5 + a_6_3_7_4_8_5_9_2 * k_3_4_5_2 + + a_6_4_7_5_8_2_9_3 * k_4_5_2_3 + a_6_5_7_2_8_3_9_4 * k_5_2_3_4 + ), p, t + - c_6_7_8_9 * dt) + c_6_7_8_9 * dt + ) c_10_11_12_13 = Vec(c_10, c_11, c_12, c_13) a_10_11_12_13_1 = Vec(a10_1, a11_1, a12_1, a13_1) @@ -418,14 +486,17 @@ end k_9_6_7_8 = VectorizationBase.shufflevector.(k_6_7_8_9, Val{(3, 0, 1, 2)}()) k_10_11_12_13 = f( uprev + - dt * (a_10_11_12_13_1 * k_1 + a_10_2_11_3_12_4_13_5 * k_2_3_4_5 + - a_10_3_11_4_12_5_13_2 * k_3_4_5_2 + a_10_4_11_5_12_2_13_3 * k_4_5_2_3 + - a_10_5_11_2_12_3_13_4 * k_5_2_3_4 + a_10_6_11_7_12_8_13_9 * k_6_7_8_9 + - a_10_7_11_8_12_9_13_6 * k_7_8_9_6 + a_10_8_11_9_12_6_13_7 * k_8_9_6_7 + - a_10_9_11_6_12_7_13_8 * k_9_6_7_8), + dt * ( + a_10_11_12_13_1 * k_1 + a_10_2_11_3_12_4_13_5 * k_2_3_4_5 + + a_10_3_11_4_12_5_13_2 * k_3_4_5_2 + a_10_4_11_5_12_2_13_3 * k_4_5_2_3 + + a_10_5_11_2_12_3_13_4 * k_5_2_3_4 + a_10_6_11_7_12_8_13_9 * k_6_7_8_9 + + a_10_7_11_8_12_9_13_6 * k_7_8_9_6 + a_10_8_11_9_12_6_13_7 * k_8_9_6_7 + + a_10_9_11_6_12_7_13_8 * k_9_6_7_8 + ), p, t + - c_10_11_12_13 * dt) + c_10_11_12_13 * dt + ) c_14_15_16_17 = Vec(c_14, c_15, c_16, c_17) a_14_15_16_17_1 = Vec(a14_1, a15_1, a16_1, a17_1) @@ -447,17 +518,20 @@ end k_13_10_11_12 = VectorizationBase.shufflevector.(k_10_11_12_13, Val{(3, 0, 1, 2)}()) k_14_15_16_17 = f( uprev + - dt * (a_14_15_16_17_1 * k_1 + a_14_2_15_3_16_4_17_5 * k_2_3_4_5 + - a_14_3_15_4_16_5_17_2 * k_3_4_5_2 + a_14_4_15_5_16_2_17_3 * k_4_5_2_3 + - a_14_5_15_2_16_3_17_4 * k_5_2_3_4 + a_14_6_15_7_16_8_17_9 * k_6_7_8_9 + - a_14_7_15_8_16_9_17_6 * k_7_8_9_6 + a_14_8_15_9_16_6_17_7 * k_8_9_6_7 + - a_14_9_15_6_16_7_17_8 * k_9_6_7_8 + a_14_10_15_11_16_12_17_13 * k_10_11_12_13 + - a_14_11_15_12_16_13_17_10 * k_11_12_13_10 + - a_14_12_15_13_16_10_17_11 * k_12_13_10_11 + - a_14_13_15_10_16_11_17_12 * k_13_10_11_12), + dt * ( + a_14_15_16_17_1 * k_1 + a_14_2_15_3_16_4_17_5 * k_2_3_4_5 + + a_14_3_15_4_16_5_17_2 * k_3_4_5_2 + a_14_4_15_5_16_2_17_3 * k_4_5_2_3 + + a_14_5_15_2_16_3_17_4 * k_5_2_3_4 + a_14_6_15_7_16_8_17_9 * k_6_7_8_9 + + a_14_7_15_8_16_9_17_6 * k_7_8_9_6 + a_14_8_15_9_16_6_17_7 * k_8_9_6_7 + + a_14_9_15_6_16_7_17_8 * k_9_6_7_8 + a_14_10_15_11_16_12_17_13 * k_10_11_12_13 + + a_14_11_15_12_16_13_17_10 * k_11_12_13_10 + + a_14_12_15_13_16_10_17_11 * k_12_13_10_11 + + a_14_13_15_10_16_11_17_12 * k_13_10_11_12 + ), p, t + - c_14_15_16_17 * dt) + c_14_15_16_17 * dt + ) c_18_19_20_21 = Vec(c_18, c_19, c_20, c_21) a_18_19_20_21_1 = Vec(a18_1, a19_1, a20_1, a21_1) @@ -483,47 +557,60 @@ end k_17_14_15_16 = VectorizationBase.shufflevector.(k_14_15_16_17, Val{(3, 0, 1, 2)}()) k_18_19_20_21 = f( uprev + - dt * (a_18_19_20_21_1 * k_1 + a_18_2_19_3_20_4_21_5 * k_2_3_4_5 + - a_18_3_19_4_20_5_21_2 * k_3_4_5_2 + a_18_4_19_5_20_2_21_3 * k_4_5_2_3 + - a_18_5_19_2_20_3_21_4 * k_5_2_3_4 + a_18_6_19_7_20_8_21_9 * k_6_7_8_9 + - a_18_7_19_8_20_9_21_6 * k_7_8_9_6 + a_18_8_19_9_20_6_21_7 * k_8_9_6_7 + - a_18_9_19_6_20_7_21_8 * k_9_6_7_8 + a_18_10_19_11_20_12_21_13 * k_10_11_12_13 + - a_18_11_19_12_20_13_21_10 * k_11_12_13_10 + - a_18_12_19_13_20_10_21_11 * k_12_13_10_11 + - a_18_13_19_10_20_11_21_12 * k_13_10_11_12 + - a_18_14_19_15_20_16_21_17 * k_14_15_16_17 + - a_18_15_19_16_20_17_21_14 * k_15_16_17_14 + - a_18_16_19_17_20_14_21_15 * k_16_17_14_15 + - a_18_17_19_14_20_15_21_16 * k_17_14_15_16), + dt * ( + a_18_19_20_21_1 * k_1 + a_18_2_19_3_20_4_21_5 * k_2_3_4_5 + + a_18_3_19_4_20_5_21_2 * k_3_4_5_2 + a_18_4_19_5_20_2_21_3 * k_4_5_2_3 + + a_18_5_19_2_20_3_21_4 * k_5_2_3_4 + a_18_6_19_7_20_8_21_9 * k_6_7_8_9 + + a_18_7_19_8_20_9_21_6 * k_7_8_9_6 + a_18_8_19_9_20_6_21_7 * k_8_9_6_7 + + a_18_9_19_6_20_7_21_8 * k_9_6_7_8 + a_18_10_19_11_20_12_21_13 * k_10_11_12_13 + + a_18_11_19_12_20_13_21_10 * k_11_12_13_10 + + a_18_12_19_13_20_10_21_11 * k_12_13_10_11 + + a_18_13_19_10_20_11_21_12 * k_13_10_11_12 + + a_18_14_19_15_20_16_21_17 * k_14_15_16_17 + + a_18_15_19_16_20_17_21_14 * k_15_16_17_14 + + a_18_16_19_17_20_14_21_15 * k_16_17_14_15 + + a_18_17_19_14_20_15_21_16 * k_17_14_15_16 + ), p, t + - c_18_19_20_21 * dt) + c_18_19_20_21 * dt + ) u = uprev + - dt * (a22_1 * k_1 + - VectorizationBase.vsum.(Vec(a22_2, a22_3, a22_4, a22_5) * k_2_3_4_5 + - Vec(a22_6, a22_7, a22_8, a22_9) * k_6_7_8_9 + - Vec(a22_10, a22_11, a22_12, a22_13) * k_10_11_12_13 + - Vec(a22_14, a22_15, a22_16, a22_17) * k_14_15_16_17 + - Vec(a22_18, a22_19, a22_20, a22_21) * k_18_19_20_21)) + dt * ( + a22_1 * k_1 + + VectorizationBase.vsum.( + Vec(a22_2, a22_3, a22_4, a22_5) * k_2_3_4_5 + + Vec(a22_6, a22_7, a22_8, a22_9) * k_6_7_8_9 + + Vec(a22_10, a22_11, a22_12, a22_13) * k_10_11_12_13 + + Vec(a22_14, a22_15, a22_16, a22_17) * k_14_15_16_17 + + Vec(a22_18, a22_19, a22_20, a22_21) * k_18_19_20_21 + ) + ) integrator.fsallast = f(u, p, t + dt) integrator.stats.nf += 21 if integrator.opts.adaptive - utilde = dt * (btilde_1 * k_1 + - VectorizationBase.vsum.(Vec(btilde_2, btilde_3, btilde_4, btilde_5) * - k_2_3_4_5 + - Vec(btilde_6, btilde_7, btilde_8, btilde_9) * - k_6_7_8_9 + - Vec(btilde_10, btilde_11, btilde_12, btilde_13) * - k_10_11_12_13 + - Vec(btilde_14, btilde_15, btilde_16, btilde_17) * - k_14_15_16_17 + - Vec(btilde_18, btilde_19, btilde_20, btilde_21) * - k_18_19_20_21)) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + utilde = dt * ( + btilde_1 * k_1 + + VectorizationBase.vsum.( + Vec(btilde_2, btilde_3, btilde_4, btilde_5) * + k_2_3_4_5 + + Vec(btilde_6, btilde_7, btilde_8, btilde_9) * + k_6_7_8_9 + + Vec(btilde_10, btilde_11, btilde_12, btilde_13) * + k_10_11_12_13 + + Vec(btilde_14, btilde_15, btilde_16, btilde_17) * + k_14_15_16_17 + + Vec(btilde_18, btilde_19, btilde_20, btilde_21) * + k_18_19_20_21 + ) + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.u = u diff --git a/lib/OrdinaryDiffEqSIMDRK/test/adaptivity_tests.jl b/lib/OrdinaryDiffEqSIMDRK/test/adaptivity_tests.jl index a81e948463..e1aed8f414 100644 --- a/lib/OrdinaryDiffEqSIMDRK/test/adaptivity_tests.jl +++ b/lib/OrdinaryDiffEqSIMDRK/test/adaptivity_tests.jl @@ -1,7 +1,7 @@ using OrdinaryDiffEqSIMDRK, StaticArrays, Test function lorenz(u, p, t) - SA[10.0(u[2] - u[1]), u[1] * (28.0 - u[3]) - u[2], u[1] * u[2] - (8 / 3) * u[3]] + return SA[10.0(u[2] - u[1]), u[1] * (28.0 - u[3]) - u[2], u[1] * u[2] - (8 / 3) * u[3]] end u0 = SA[1.0; 0.0; 0.0] tspan = (0.0, 100.0) diff --git a/lib/OrdinaryDiffEqSIMDRK/test/convergence_tests.jl b/lib/OrdinaryDiffEqSIMDRK/test/convergence_tests.jl index f06b39b4a8..512af55e12 100644 --- a/lib/OrdinaryDiffEqSIMDRK/test/convergence_tests.jl +++ b/lib/OrdinaryDiffEqSIMDRK/test/convergence_tests.jl @@ -2,31 +2,37 @@ using OrdinaryDiffEqSIMDRK, DiffEqDevTools, Test function nonauto1(u, p, t) x, _ = u - [t * x, 0] + return [t * x, 0] end function nonauto2(u, p, t) _, y = u - [y, t * y] + return [y, t * y] end function analytic(u0, p, t) x0, y0 = u0 et = exp(t^2 / 2) - [et * (x0 + t * y0), et * y0] + return [et * (x0 + t * y0), et * y0] end u0 = [1.1, 2.2] tspan = (0.0, 1.0) prob1 = ODEProblem( - ODEFunction{true}((du, u, p, t) -> du .= nonauto1(u, p, t) .+ - nonauto2(u, p, t), - analytic = analytic), - u0, tspan) + ODEFunction{true}( + (du, u, p, t) -> du .= nonauto1(u, p, t) .+ + nonauto2(u, p, t), + analytic = analytic + ), + u0, tspan +) prob2 = ODEProblem( - ODEFunction{false}((u, p, t) -> nonauto1(u, p, t) .+ nonauto2(u, p, t), - analytic = analytic), - u0, tspan) + ODEFunction{false}( + (u, p, t) -> nonauto1(u, p, t) .+ nonauto2(u, p, t), + analytic = analytic + ), + u0, tspan +) for prob in [prob2] #=prob1,=# @@ -40,5 +46,5 @@ for prob in [prob2] @test 6 <= sim.𝒪est[:l∞] <= 7 sim = test_convergence(dts2, prob, RK6v4()) - @test sim.𝒪est[:l∞]≈6 atol=1e-2 + @test sim.𝒪est[:l∞] ≈ 6 atol = 1.0e-2 end diff --git a/lib/OrdinaryDiffEqSIMDRK/test/jet.jl b/lib/OrdinaryDiffEqSIMDRK/test/jet.jl index 330ced843c..6f3660f8c2 100644 --- a/lib/OrdinaryDiffEqSIMDRK/test/jet.jl +++ b/lib/OrdinaryDiffEqSIMDRK/test/jet.jl @@ -7,5 +7,6 @@ using Test @testset "JET Tests" begin # Test package for typos test_package( - OrdinaryDiffEqSIMDRK, target_modules = (OrdinaryDiffEqSIMDRK,), mode = :typo) + OrdinaryDiffEqSIMDRK, target_modules = (OrdinaryDiffEqSIMDRK,), mode = :typo + ) end diff --git a/lib/OrdinaryDiffEqSSPRK/src/OrdinaryDiffEqSSPRK.jl b/lib/OrdinaryDiffEqSSPRK/src/OrdinaryDiffEqSSPRK.jl index 36ea51ad77..cae87f5c29 100644 --- a/lib/OrdinaryDiffEqSSPRK/src/OrdinaryDiffEqSSPRK.jl +++ b/lib/OrdinaryDiffEqSSPRK/src/OrdinaryDiffEqSSPRK.jl @@ -1,18 +1,18 @@ module OrdinaryDiffEqSSPRK import OrdinaryDiffEqCore: alg_order, calculate_residuals!, - initialize!, perform_step!, unwrap_alg, - calculate_residuals, ssp_coefficient, - OrdinaryDiffEqAlgorithm, - OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, - OrdinaryDiffEqNewtonAdaptiveAlgorithm, - OrdinaryDiffEqRosenbrockAdaptiveAlgorithm, - OrdinaryDiffEqAdaptiveAlgorithm, uses_uprev, - alg_cache, _vec, _reshape, @cache, isfsal, full_cache, - constvalue, _unwrap_val, - explicit_rk_docstring, trivial_limiter!, - _ode_interpolant, _ode_interpolant!, - _ode_addsteps!, get_fsalfirstlast, copyat_or_push! + initialize!, perform_step!, unwrap_alg, + calculate_residuals, ssp_coefficient, + OrdinaryDiffEqAlgorithm, + OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, + OrdinaryDiffEqNewtonAdaptiveAlgorithm, + OrdinaryDiffEqRosenbrockAdaptiveAlgorithm, + OrdinaryDiffEqAdaptiveAlgorithm, uses_uprev, + alg_cache, _vec, _reshape, @cache, isfsal, full_cache, + constvalue, _unwrap_val, + explicit_rk_docstring, trivial_limiter!, + _ode_interpolant, _ode_interpolant!, + _ode_addsteps!, get_fsalfirstlast, copyat_or_push! using FastBroadcast, Polyester, MuladdMacro, RecursiveArrayTools using DiffEqBase: @def using Static: False @@ -42,7 +42,7 @@ PrecompileTools.@compile_workload begin prob_list = [] low_storage = [ - SSPRK43() + SSPRK43(), ] low_storage_nonadaptive = [ @@ -59,29 +59,51 @@ PrecompileTools.@compile_workload begin end if Preferences.@load_preference("PrecompileAutoSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.AutoSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.AutoSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0), Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.AutoSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0) + ) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.AutoSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0), Float64[] + ) + ) end if Preferences.@load_preference("PrecompileFunctionWrapperSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0), Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0) + ) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0), Float64[] + ) + ) end if Preferences.@load_preference("PrecompileNoSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), - Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0)) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.NoSpecialize}( + lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), + Float64[] + ) + ) end for prob in prob_list, solver in solver_list @@ -97,7 +119,7 @@ PrecompileTools.@compile_workload begin end export SSPRK53_2N2, SSPRK22, SSPRK53, SSPRK63, SSPRK83, SSPRK43, SSPRK432, SSPRKMSVS32, - SSPRK54, SSPRK53_2N1, SSPRK104, SSPRK932, SSPRKMSVS43, SSPRK73, SSPRK53_H, - SSPRK33, KYKSSPRK42, KYK2014DGSSPRK_3S2 + SSPRK54, SSPRK53_2N1, SSPRK104, SSPRK932, SSPRKMSVS43, SSPRK73, SSPRK53_H, + SSPRK33, KYKSSPRK42, KYK2014DGSSPRK_3S2 end diff --git a/lib/OrdinaryDiffEqSSPRK/src/addsteps.jl b/lib/OrdinaryDiffEqSSPRK/src/addsteps.jl index 1c63a29a75..7088011177 100644 --- a/lib/OrdinaryDiffEqSSPRK/src/addsteps.jl +++ b/lib/OrdinaryDiffEqSSPRK/src/addsteps.jl @@ -1,21 +1,29 @@ -function _ode_addsteps!(k, t, uprev, u, dt, f, p, - cache::Union{SSPRK22ConstantCache, SSPRK33ConstantCache, - SSPRK43ConstantCache, SSPRK432ConstantCache}, +function _ode_addsteps!( + k, t, uprev, u, dt, f, p, + cache::Union{ + SSPRK22ConstantCache, SSPRK33ConstantCache, + SSPRK43ConstantCache, SSPRK432ConstantCache, + }, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 1 || always_calc_begin copyat_or_push!(k, 1, f(uprev, p, t)) end - nothing + return nothing end -function _ode_addsteps!(k, t, uprev, u, dt, f, p, - cache::Union{SSPRK22Cache, SSPRK33Cache, SSPRK43Cache, - SSPRK432Cache}, always_calc_begin = false, - allow_calc_end = true, force_calc_end = false) +function _ode_addsteps!( + k, t, uprev, u, dt, f, p, + cache::Union{ + SSPRK22Cache, SSPRK33Cache, SSPRK43Cache, + SSPRK432Cache, + }, always_calc_begin = false, + allow_calc_end = true, force_calc_end = false + ) if length(k) < 1 || always_calc_begin f(cache.k, uprev, p, t) copyat_or_push!(k, 1, cache.k) end - nothing + return nothing end diff --git a/lib/OrdinaryDiffEqSSPRK/src/algorithms.jl b/lib/OrdinaryDiffEqSSPRK/src/algorithms.jl index f28ca2b71a..9e1c61cab0 100644 --- a/lib/OrdinaryDiffEqSSPRK/src/algorithms.jl +++ b/lib/OrdinaryDiffEqSSPRK/src/algorithms.jl @@ -4,7 +4,8 @@ Fixed timestep only.", "SSPRK53_2N2", references = "Higueras and T. Roldán. New third order low-storage SSP explicit Runge–Kutta methods - arXiv:1809.04807v1.") + arXiv:1809.04807v1." +) Base.@kwdef struct SSPRK53_2N2{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -12,9 +13,11 @@ Base.@kwdef struct SSPRK53_2N2{StageLimiter, StepLimiter, Thread} <: OrdinaryDif end # for backwards compatibility function SSPRK53_2N2(stage_limiter!, step_limiter! = trivial_limiter!) - SSPRK53_2N2(stage_limiter!, + return SSPRK53_2N2( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -24,7 +27,8 @@ Fixed timestep only.", references = "Shu, Chi-Wang, and Stanley Osher. Efficient implementation of essentially non-oscillatory shock-capturing schemes. Journal of Computational Physics 77.2 (1988): 439-471. - https://doi.org/10.1016/0021-9991(88)90177-5") + https://doi.org/10.1016/0021-9991(88)90177-5" +) Base.@kwdef struct SSPRK22{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -32,8 +36,10 @@ Base.@kwdef struct SSPRK22{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqA end # for backwards compatibility function SSPRK22(stage_limiter!, step_limiter! = trivial_limiter!) - SSPRK22(stage_limiter!, - step_limiter!, False()) + return SSPRK22( + stage_limiter!, + step_limiter!, False() + ) end @doc explicit_rk_docstring( @@ -42,7 +48,8 @@ Fixed timestep only.", "SSPRK53", references = "Ruuth, Steven. Global optimization of explicit strong-stability-preserving Runge-Kutta methods. - Mathematics of Computation 75.253 (2006): 183-207") + Mathematics of Computation 75.253 (2006): 183-207" +) Base.@kwdef struct SSPRK53{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -50,8 +57,10 @@ Base.@kwdef struct SSPRK53{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqA end # for backwards compatibility function SSPRK53(stage_limiter!, step_limiter! = trivial_limiter!) - SSPRK53(stage_limiter!, - step_limiter!, False()) + return SSPRK53( + stage_limiter!, + step_limiter!, False() + ) end @doc explicit_rk_docstring( @@ -60,7 +69,8 @@ Fixed timestep only.", "SSPRK63", references = "Ruuth, Steven. Global optimization of explicit strong-stability-preserving Runge-Kutta methods. - Mathematics of Computation 75.253 (2006): 183-207") + Mathematics of Computation 75.253 (2006): 183-207" +) Base.@kwdef struct SSPRK63{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -68,8 +78,10 @@ Base.@kwdef struct SSPRK63{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqA end # for backwards compatibility function SSPRK63(stage_limiter!, step_limiter! = trivial_limiter!) - SSPRK63(stage_limiter!, - step_limiter!, False()) + return SSPRK63( + stage_limiter!, + step_limiter!, False() + ) end @doc explicit_rk_docstring( @@ -78,7 +90,8 @@ Fixed timestep only.", "SSPRK83", references = "Ruuth, Steven. Global optimization of explicit strong-stability-preserving Runge-Kutta methods. - Mathematics of Computation 75.253 (2006): 183-207") + Mathematics of Computation 75.253 (2006): 183-207" +) Base.@kwdef struct SSPRK83{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -86,8 +99,10 @@ Base.@kwdef struct SSPRK83{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqA end # for backwards compatibility function SSPRK83(stage_limiter!, step_limiter! = trivial_limiter!) - SSPRK83(stage_limiter!, - step_limiter!, False()) + return SSPRK83( + stage_limiter!, + step_limiter!, False() + ) end @doc explicit_rk_docstring( @@ -95,34 +110,37 @@ end "SSPRK43", references = """Optimal third-order explicit SSP method with four stages discovered by - - J. F. B. M. Kraaijevanger. - "Contractivity of Runge-Kutta methods." - In: BIT Numerical Mathematics 31.3 (1991), pp. 482–528. - [DOI: 10.1007/BF01933264](https://doi.org/10.1007/BF01933264). + - J. F. B. M. Kraaijevanger. + "Contractivity of Runge-Kutta methods." + In: BIT Numerical Mathematics 31.3 (1991), pp. 482–528. + [DOI: 10.1007/BF01933264](https://doi.org/10.1007/BF01933264). - Embedded method constructed by + Embedded method constructed by - - Sidafa Conde, Imre Fekete, John N. Shadid. - "Embedded error estimation and adaptive step-size control for - optimal explicit strong stability preserving Runge–Kutta methods." - [arXiv: 1806.08693](https://arXiv.org/abs/1806.08693) + - Sidafa Conde, Imre Fekete, John N. Shadid. + "Embedded error estimation and adaptive step-size control for + optimal explicit strong stability preserving Runge–Kutta methods." + [arXiv: 1806.08693](https://arXiv.org/abs/1806.08693) - Efficient implementation (and optimized controller) developed by + Efficient implementation (and optimized controller) developed by - - Hendrik Ranocha, Lisandro Dalcin, Matteo Parsani, David I. Ketcheson (2021) - Optimized Runge-Kutta Methods with Automatic Step Size Control for - Compressible Computational Fluid Dynamics - [arXiv:2104.06836](https://arxiv.org/abs/2104.06836)""") + - Hendrik Ranocha, Lisandro Dalcin, Matteo Parsani, David I. Ketcheson (2021) + Optimized Runge-Kutta Methods with Automatic Step Size Control for + Compressible Computational Fluid Dynamics + [arXiv:2104.06836](https://arxiv.org/abs/2104.06836)""" +) Base.@kwdef struct SSPRK43{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function SSPRK43(stage_limiter!, step_limiter! = trivial_limiter!) - SSPRK43(stage_limiter!, - step_limiter!, False()) + return SSPRK43( + stage_limiter!, + step_limiter!, False() + ) end @doc explicit_rk_docstring( @@ -131,17 +149,20 @@ end references = "Gottlieb, Sigal, David I. Ketcheson, and Chi-Wang Shu. Strong stability preserving Runge-Kutta and multistep time discretizations. World Scientific, 2011. - Example 6.1") + Example 6.1" +) Base.@kwdef struct SSPRK432{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function SSPRK432(stage_limiter!, step_limiter! = trivial_limiter!) - SSPRK432(stage_limiter!, - step_limiter!, False()) + return SSPRK432( + stage_limiter!, + step_limiter!, False() + ) end @doc explicit_rk_docstring( @@ -152,18 +173,21 @@ size.", references = "Shu, Chi-Wang. Total-variation-diminishing time discretizations. SIAM Journal on Scientific and Statistical Computing 9, no. 6 (1988): 1073-1084. - [DOI: 10.1137/0909073](https://doi.org/10.1137/0909073)") + [DOI: 10.1137/0909073](https://doi.org/10.1137/0909073)" +) Base.@kwdef struct SSPRKMSVS32{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function SSPRKMSVS32(stage_limiter!, step_limiter! = trivial_limiter!) - SSPRKMSVS32(stage_limiter!, + return SSPRKMSVS32( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -172,7 +196,8 @@ Fixed timestep only.", "SSPRK54", references = "Ruuth, Steven. Global optimization of explicit strong-stability-preserving Runge-Kutta methods. - Mathematics of Computation 75.253 (2006): 183-207.") + Mathematics of Computation 75.253 (2006): 183-207." +) Base.@kwdef struct SSPRK54{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -180,8 +205,10 @@ Base.@kwdef struct SSPRK54{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqA end # for backwards compatibility function SSPRK54(stage_limiter!, step_limiter! = trivial_limiter!) - SSPRK54(stage_limiter!, - step_limiter!, False()) + return SSPRK54( + stage_limiter!, + step_limiter!, False() + ) end @doc explicit_rk_docstring( @@ -190,7 +217,8 @@ Fixed timestep only.", "SSPRK53_2N1", references = "Higueras and T. Roldán. New third order low-storage SSP explicit Runge–Kutta methods - arXiv:1809.04807v1.") + arXiv:1809.04807v1." +) Base.@kwdef struct SSPRK53_2N1{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -198,9 +226,11 @@ Base.@kwdef struct SSPRK53_2N1{StageLimiter, StepLimiter, Thread} <: OrdinaryDif end # for backwards compatibility function SSPRK53_2N1(stage_limiter!, step_limiter! = trivial_limiter!) - SSPRK53_2N1(stage_limiter!, + return SSPRK53_2N1( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -210,7 +240,8 @@ Fixed timestep only.", references = "Ketcheson, David I. Highly efficient strong stability-preserving Runge–Kutta methods with low-storage implementations. - SIAM Journal on Scientific Computing 30.4 (2008): 2113-2136.") + SIAM Journal on Scientific Computing 30.4 (2008): 2113-2136." +) Base.@kwdef struct SSPRK104{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -218,8 +249,10 @@ Base.@kwdef struct SSPRK104{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEq end # for backwards compatibility function SSPRK104(stage_limiter!, step_limiter! = trivial_limiter!) - SSPRK104(stage_limiter!, - step_limiter!, False()) + return SSPRK104( + stage_limiter!, + step_limiter!, False() + ) end @doc explicit_rk_docstring( @@ -230,17 +263,20 @@ improved embedded method.", "SSPRK932", references = "Gottlieb, Sigal, David I. Ketcheson, and Chi-Wang Shu. Strong stability preserving Runge-Kutta and multistep time discretizations. - World Scientific, 2011.") + World Scientific, 2011." +) Base.@kwdef struct SSPRK932{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function SSPRK932(stage_limiter!, step_limiter! = trivial_limiter!) - SSPRK932(stage_limiter!, - step_limiter!, False()) + return SSPRK932( + stage_limiter!, + step_limiter!, False() + ) end @doc explicit_rk_docstring( @@ -251,18 +287,21 @@ size.", references = "Shu, Chi-Wang. Total-variation-diminishing time discretizations. SIAM Journal on Scientific and Statistical Computing 9, no. 6 (1988): 1073-1084. - [DOI: 10.1137/0909073](https://doi.org/10.1137/0909073)") + [DOI: 10.1137/0909073](https://doi.org/10.1137/0909073)" +) Base.@kwdef struct SSPRKMSVS43{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function SSPRKMSVS43(stage_limiter!, step_limiter! = trivial_limiter!) - SSPRKMSVS43(stage_limiter!, + return SSPRKMSVS43( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -271,7 +310,8 @@ Fixed timestep only.", "SSPRK73", references = "Ruuth, Steven. Global optimization of explicit strong-stability-preserving Runge-Kutta methods. - Mathematics of Computation 75.253 (2006): 183-207") + Mathematics of Computation 75.253 (2006): 183-207" +) Base.@kwdef struct SSPRK73{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -279,8 +319,10 @@ Base.@kwdef struct SSPRK73{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqA end # for backwards compatibility function SSPRK73(stage_limiter!, step_limiter! = trivial_limiter!) - SSPRK73(stage_limiter!, - step_limiter!, False()) + return SSPRK73( + stage_limiter!, + step_limiter!, False() + ) end @doc explicit_rk_docstring( @@ -289,7 +331,8 @@ Fixed timestep only.", "SSPRK53_H", references = "Higueras and T. Roldán. New third order low-storage SSP explicit Runge–Kutta methods - arXiv:1809.04807v1.") + arXiv:1809.04807v1." +) Base.@kwdef struct SSPRK53_H{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -297,8 +340,10 @@ Base.@kwdef struct SSPRK53_H{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffE end # for backwards compatibility function SSPRK53_H(stage_limiter!, step_limiter! = trivial_limiter!) - SSPRK53_H(stage_limiter!, - step_limiter!, False()) + return SSPRK53_H( + stage_limiter!, + step_limiter!, False() + ) end @doc explicit_rk_docstring( @@ -308,7 +353,8 @@ Fixed timestep only.", references = "Shu, Chi-Wang, and Stanley Osher. Efficient implementation of essentially non-oscillatory shock-capturing schemes. Journal of Computational Physics 77.2 (1988): 439-471. - https://doi.org/10.1016/0021-9991(88)90177-5") + https://doi.org/10.1016/0021-9991(88)90177-5" +) Base.@kwdef struct SSPRK33{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -316,8 +362,10 @@ Base.@kwdef struct SSPRK33{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqA end # for backwards compatibility function SSPRK33(stage_limiter!, step_limiter! = trivial_limiter!) - SSPRK33(stage_limiter!, - step_limiter!, False()) + return SSPRK33( + stage_limiter!, + step_limiter!, False() + ) end @doc explicit_rk_docstring( @@ -330,7 +378,8 @@ end volume={60}, pages={313--344}, year={2014}, - publisher={Springer}}") + publisher={Springer}}" +) Base.@kwdef struct KYKSSPRK42{StageLimiter, StepLimiter, Thread} <: OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! @@ -338,9 +387,11 @@ Base.@kwdef struct KYKSSPRK42{StageLimiter, StepLimiter, Thread} <: OrdinaryDiff end # for backwards compatibility function KYKSSPRK42(stage_limiter!, step_limiter! = trivial_limiter!) - KYKSSPRK42(stage_limiter!, + return KYKSSPRK42( + stage_limiter!, step_limiter!, - False()) + False() + ) end @doc explicit_rk_docstring( @@ -353,16 +404,19 @@ end volume={60}, pages={313--344}, year={2014}, - publisher={Springer}}""") + publisher={Springer}}""" +) Base.@kwdef struct KYK2014DGSSPRK_3S2{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAlgorithm + OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() end # for backwards compatibility function KYK2014DGSSPRK_3S2(stage_limiter!, step_limiter! = trivial_limiter!) - KYK2014DGSSPRK_3S2(stage_limiter!, + return KYK2014DGSSPRK_3S2( + stage_limiter!, step_limiter!, - False()) + False() + ) end diff --git a/lib/OrdinaryDiffEqSSPRK/src/functions.jl b/lib/OrdinaryDiffEqSSPRK/src/functions.jl index de7421fb3e..36a8e87bef 100644 --- a/lib/OrdinaryDiffEqSSPRK/src/functions.jl +++ b/lib/OrdinaryDiffEqSSPRK/src/functions.jl @@ -1,7 +1,11 @@ -@inline function SciMLBase.get_tmp_cache(integrator, - alg::Union{SSPRK22, SSPRK33, SSPRK53_2N1, +@inline function SciMLBase.get_tmp_cache( + integrator, + alg::Union{ + SSPRK22, SSPRK33, SSPRK53_2N1, SSPRK53_2N2, SSPRK43, SSPRK432, - SSPRK932}, - cache::OrdinaryDiffEqMutableCache) - (cache.k,) + SSPRK932, + }, + cache::OrdinaryDiffEqMutableCache + ) + return (cache.k,) end diff --git a/lib/OrdinaryDiffEqSSPRK/src/interp_func.jl b/lib/OrdinaryDiffEqSSPRK/src/interp_func.jl index 0c6f1759f2..570c4184da 100644 --- a/lib/OrdinaryDiffEqSSPRK/src/interp_func.jl +++ b/lib/OrdinaryDiffEqSSPRK/src/interp_func.jl @@ -1,10 +1,14 @@ -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where { +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where { cacheType <: - Union{SSPRK22, SSPRK22ConstantCache, - SSPRK33, SSPRK33ConstantCache, - SSPRK43, SSPRK43ConstantCache, - SSPRK432, SSPRK432ConstantCache -}} - dense ? "2nd order \"free\" SSP interpolation" : "1st order linear" + Union{ + SSPRK22, SSPRK22ConstantCache, + SSPRK33, SSPRK33ConstantCache, + SSPRK43, SSPRK43ConstantCache, + SSPRK432, SSPRK432ConstantCache, + }, + } + return dense ? "2nd order \"free\" SSP interpolation" : "1st order linear" end diff --git a/lib/OrdinaryDiffEqSSPRK/src/interpolants.jl b/lib/OrdinaryDiffEqSSPRK/src/interpolants.jl index e42f34f169..e06dbf7e07 100644 --- a/lib/OrdinaryDiffEqSSPRK/src/interpolants.jl +++ b/lib/OrdinaryDiffEqSSPRK/src/interpolants.jl @@ -17,131 +17,179 @@ end c10diff2invdt2 = 2 * invdt^2 # = -c00diff2 * inv(dt)^2 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, - cache::Union{SSPRK22ConstantCache, SSPRK22Cache, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, + cache::Union{ + SSPRK22ConstantCache, SSPRK22Cache, SSPRK33ConstantCache, SSPRK33Cache, SSPRK43ConstantCache, SSPRK43Cache, - SSPRK432ConstantCache, SSPRK432Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + SSPRK432ConstantCache, SSPRK432Cache, + }, + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @ssprkpre0 - @inbounds @.. broadcast=false y₀*c00+y₁*c10+k[1]*b10dt + @inbounds @.. broadcast = false y₀ * c00 + y₁ * c10 + k[1] * b10dt end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, - cache::Union{SSPRK22ConstantCache, SSPRK22Cache, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, + cache::Union{ + SSPRK22ConstantCache, SSPRK22Cache, SSPRK33ConstantCache, SSPRK33Cache, SSPRK43ConstantCache, SSPRK43Cache, - SSPRK432ConstantCache, SSPRK432Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + SSPRK432ConstantCache, SSPRK432Cache, + }, idxs, + T::Type{Val{0}}, differential_vars::Nothing + ) @ssprkpre0 - @views @.. broadcast=false y₀[idxs]*c00+y₁[idxs]*c10+k[1][idxs]*b10dt + @views @.. broadcast = false y₀[idxs] * c00 + y₁[idxs] * c10 + k[1][idxs] * b10dt end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, - cache::Union{SSPRK22ConstantCache, SSPRK22Cache, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, + cache::Union{ + SSPRK22ConstantCache, SSPRK22Cache, SSPRK33ConstantCache, SSPRK33Cache, SSPRK43ConstantCache, SSPRK43Cache, - SSPRK432ConstantCache, SSPRK432Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + SSPRK432ConstantCache, SSPRK432Cache, + }, + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @ssprkpre0 - @inbounds @.. broadcast=false out=y₀ * c00 + y₁ * c10 + k[1] * b10dt + @inbounds @.. broadcast = false out = y₀ * c00 + y₁ * c10 + k[1] * b10dt out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, - cache::Union{SSPRK22ConstantCache, SSPRK22Cache, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, + cache::Union{ + SSPRK22ConstantCache, SSPRK22Cache, SSPRK33ConstantCache, SSPRK33Cache, SSPRK43ConstantCache, SSPRK43Cache, - SSPRK432ConstantCache, SSPRK432Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + SSPRK432ConstantCache, SSPRK432Cache, + }, idxs, + T::Type{Val{0}}, differential_vars::Nothing + ) @ssprkpre0 - @views @.. broadcast=false out=y₀[idxs] * c00 + y₁[idxs] * c10 + k[1][idxs] * b10dt + @views @.. broadcast = false out = y₀[idxs] * c00 + y₁[idxs] * c10 + k[1][idxs] * b10dt out end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, - cache::Union{SSPRK22ConstantCache, SSPRK22Cache, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, + cache::Union{ + SSPRK22ConstantCache, SSPRK22Cache, SSPRK33ConstantCache, SSPRK33Cache, SSPRK43ConstantCache, SSPRK43Cache, - SSPRK432ConstantCache, SSPRK432Cache}, - idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing) + SSPRK432ConstantCache, SSPRK432Cache, + }, + idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing + ) @ssprkpre1 - @inbounds @.. broadcast=false (y₁ - y₀) * c10diffinvdt+k[1] * b10diff + @inbounds @.. broadcast = false (y₁ - y₀) * c10diffinvdt + k[1] * b10diff end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, - cache::Union{SSPRK22ConstantCache, SSPRK22Cache, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, + cache::Union{ + SSPRK22ConstantCache, SSPRK22Cache, SSPRK33ConstantCache, SSPRK33Cache, SSPRK43ConstantCache, SSPRK43Cache, - SSPRK432ConstantCache, SSPRK432Cache}, idxs, - T::Type{Val{1}}, differential_vars::Nothing) + SSPRK432ConstantCache, SSPRK432Cache, + }, idxs, + T::Type{Val{1}}, differential_vars::Nothing + ) @ssprkpre1 - @views @.. broadcast=false (y₁[idxs] - y₀[idxs]) * c10diffinvdt+k[1][idxs] * b10diff + @views @.. broadcast = false (y₁[idxs] - y₀[idxs]) * c10diffinvdt + k[1][idxs] * b10diff end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, - cache::Union{SSPRK22ConstantCache, SSPRK22Cache, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, + cache::Union{ + SSPRK22ConstantCache, SSPRK22Cache, SSPRK33ConstantCache, SSPRK33Cache, SSPRK43ConstantCache, SSPRK43Cache, - SSPRK432ConstantCache, SSPRK432Cache}, - idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing) + SSPRK432ConstantCache, SSPRK432Cache, + }, + idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing + ) @ssprkpre1 - @inbounds @.. broadcast=false out=(y₁ - y₀) * c10diffinvdt + k[1] * b10diff + @inbounds @.. broadcast = false out = (y₁ - y₀) * c10diffinvdt + k[1] * b10diff out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, - cache::Union{SSPRK22ConstantCache, SSPRK22Cache, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, + cache::Union{ + SSPRK22ConstantCache, SSPRK22Cache, SSPRK33ConstantCache, SSPRK33Cache, SSPRK43ConstantCache, SSPRK43Cache, - SSPRK432ConstantCache, SSPRK432Cache}, idxs, - T::Type{Val{1}}, differential_vars::Nothing) + SSPRK432ConstantCache, SSPRK432Cache, + }, idxs, + T::Type{Val{1}}, differential_vars::Nothing + ) @ssprkpre1 - @views @.. broadcast=false out=(y₁[idxs] - y₀[idxs]) * c10diffinvdt + - k[1][idxs] * b10diff + @views @.. broadcast = false out = (y₁[idxs] - y₀[idxs]) * c10diffinvdt + + k[1][idxs] * b10diff out end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, - cache::Union{SSPRK22ConstantCache, SSPRK22Cache, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, + cache::Union{ + SSPRK22ConstantCache, SSPRK22Cache, SSPRK33ConstantCache, SSPRK33Cache, SSPRK43ConstantCache, SSPRK43Cache, - SSPRK432ConstantCache, SSPRK432Cache}, - idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing) + SSPRK432ConstantCache, SSPRK432Cache, + }, + idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing + ) @ssprkpre2 - @inbounds @.. broadcast=false (y₁ - y₀) * c10diff2invdt2+k[1] * b10diff2invdt + @inbounds @.. broadcast = false (y₁ - y₀) * c10diff2invdt2 + k[1] * b10diff2invdt end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, - cache::Union{SSPRK22ConstantCache, SSPRK22Cache, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, + cache::Union{ + SSPRK22ConstantCache, SSPRK22Cache, SSPRK33ConstantCache, SSPRK33Cache, SSPRK43ConstantCache, SSPRK43Cache, - SSPRK432ConstantCache, SSPRK432Cache}, idxs, - T::Type{Val{2}}, differential_vars::Nothing) + SSPRK432ConstantCache, SSPRK432Cache, + }, idxs, + T::Type{Val{2}}, differential_vars::Nothing + ) @ssprkpre2 - @views @.. broadcast=false (y₁[idxs] - y₀[idxs]) * - c10diff2invdt2+k[1][idxs] * b10diff2invdt + @views @.. broadcast = false (y₁[idxs] - y₀[idxs]) * + c10diff2invdt2 + k[1][idxs] * b10diff2invdt end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, - cache::Union{SSPRK22ConstantCache, SSPRK22Cache, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, + cache::Union{ + SSPRK22ConstantCache, SSPRK22Cache, SSPRK33ConstantCache, SSPRK33Cache, SSPRK43ConstantCache, SSPRK43Cache, - SSPRK432ConstantCache, SSPRK432Cache}, - idxs, T::Type{Val{2}}, differential_vars::Nothing) + SSPRK432ConstantCache, SSPRK432Cache, + }, + idxs, T::Type{Val{2}}, differential_vars::Nothing + ) @ssprkpre2 - @inbounds @.. broadcast=false out=(y₁[idxs] - y₀[idxs]) * c10diff2invdt2 + - k[1][idxs] * b10diff2invdt + @inbounds @.. broadcast = false out = (y₁[idxs] - y₀[idxs]) * c10diff2invdt2 + + k[1][idxs] * b10diff2invdt out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, - cache::Union{SSPRK22ConstantCache, SSPRK22Cache, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, + cache::Union{ + SSPRK22ConstantCache, SSPRK22Cache, SSPRK33ConstantCache, SSPRK33Cache, SSPRK43ConstantCache, SSPRK43Cache, - SSPRK432ConstantCache, SSPRK432Cache}, - idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing) + SSPRK432ConstantCache, SSPRK432Cache, + }, + idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing + ) @ssprkpre2 - @inbounds @.. broadcast=false out=(y₁ - y₀) * c10diff2invdt2 + k[1] * b10diff2invdt + @inbounds @.. broadcast = false out = (y₁ - y₀) * c10diff2invdt2 + k[1] * b10diff2invdt out end diff --git a/lib/OrdinaryDiffEqSSPRK/src/ssprk_caches.jl b/lib/OrdinaryDiffEqSSPRK/src/ssprk_caches.jl index e38f302891..3a9e07a5ce 100644 --- a/lib/OrdinaryDiffEqSSPRK/src/ssprk_caches.jl +++ b/lib/OrdinaryDiffEqSSPRK/src/ssprk_caches.jl @@ -3,7 +3,7 @@ abstract type SSPRKConstantCache <: OrdinaryDiffEqConstantCache end get_fsalfirstlast(cache::SSPRKMutableCache, u) = (cache.fsalfirst, cache.k) @cache struct SSPRK22Cache{uType, rateType, StageLimiter, StepLimiter, Thread} <: - SSPRKMutableCache + SSPRKMutableCache u::uType uprev::uType k::rateType @@ -15,28 +15,32 @@ end struct SSPRK22ConstantCache <: SSPRKConstantCache end -function alg_cache(alg::SSPRK22, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK22, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k = zero(rate_prototype) if calck fsalfirst = zero(k) else fsalfirst = k end - SSPRK22Cache(u, uprev, k, fsalfirst, alg.stage_limiter!, alg.step_limiter!, alg.thread) + return SSPRK22Cache(u, uprev, k, fsalfirst, alg.stage_limiter!, alg.step_limiter!, alg.thread) end -function alg_cache(alg::SSPRK22, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK22, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SSPRK22ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SSPRK22ConstantCache() end @cache struct SSPRK33Cache{uType, rateType, StageLimiter, StepLimiter, Thread} <: - SSPRKMutableCache + SSPRKMutableCache u::uType uprev::uType k::rateType @@ -48,34 +52,38 @@ end struct SSPRK33ConstantCache <: SSPRKConstantCache end -function alg_cache(alg::SSPRK33, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK33, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k = zero(rate_prototype) if calck fsalfirst = zero(k) else fsalfirst = k end - SSPRK33Cache(u, uprev, k, fsalfirst, alg.stage_limiter!, alg.step_limiter!, alg.thread) + return SSPRK33Cache(u, uprev, k, fsalfirst, alg.stage_limiter!, alg.step_limiter!, alg.thread) end -function alg_cache(alg::SSPRK33, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK33, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SSPRK33ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SSPRK33ConstantCache() end @cache struct KYKSSPRK42Cache{ - uType, - rateType, - TabType, - StageLimiter, - StepLimiter, - Thread -} <: SSPRKMutableCache + uType, + rateType, + TabType, + StageLimiter, + StepLimiter, + Thread, + } <: SSPRKMutableCache u::uType uprev::uType k::rateType @@ -108,8 +116,8 @@ end function KYKSSPRK42ConstantCache(T, T2) α20 = T(0.394806441339829) α21 = T(0.605193558660171) - α30 = T(0.002797307087390) - α32 = T(0.997202692912610) + α30 = T(0.00279730708739) + α32 = T(0.99720269291261) α40 = T(0.252860909354373) α43 = T(0.747139090645627) β10 = T(0.406584463657504) @@ -121,33 +129,42 @@ function KYKSSPRK42ConstantCache(T, T2) c1 = T2(0.406584463657504) c2 = T2(0.4921245969136438) c3 = T2(0.9098323119879613) - KYKSSPRK42ConstantCache(α20, α21, α30, α32, α40, α43, β10, β21, β30, β32, β40, β43, c1, - c2, c3) + return KYKSSPRK42ConstantCache( + α20, α21, α30, α32, α40, α43, β10, β21, β30, β32, β40, β43, c1, + c2, c3 + ) end -function alg_cache(alg::KYKSSPRK42, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::KYKSSPRK42, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) - tab = KYKSSPRK42ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - KYKSSPRK42Cache( + tab = KYKSSPRK42ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return KYKSSPRK42Cache( u, uprev, k, tmp, fsalfirst, tab, alg.stage_limiter!, alg.step_limiter!, - alg.thread) + alg.thread + ) end -function alg_cache(alg::KYKSSPRK42, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::KYKSSPRK42, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - KYKSSPRK42ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return KYKSSPRK42ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct SSPRK53Cache{uType, rateType, TabType, StageLimiter, StepLimiter, Thread} <: - SSPRKMutableCache + SSPRKMutableCache u::uType uprev::uType k::rateType @@ -186,21 +203,23 @@ struct SSPRK53ConstantCache{T, T2} <: SSPRKConstantCache β10 = T(0.377268915331368) β21 = T(0.377268915331368) β32 = T(0.242995220537396) - β43 = T(0.238458932846290) + β43 = T(0.23845893284629) β54 = T(0.287632146308408) c1 = T2(0.377268915331368) c2 = T2(0.754537830662736) c3 = T2(0.728985661612188) - c4 = T2(0.699226135931670) + c4 = T2(0.69922613593167) - new{T, T2}(α30, α32, α40, α43, α52, α54, β10, β21, β32, β43, β54, c1, c2, c3, c4) + return new{T, T2}(α30, α32, α40, α43, α52, α54, β10, β21, β32, β43, β54, c1, c2, c3, c4) end end -function alg_cache(alg::SSPRK53, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK53, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) if calck @@ -209,25 +228,29 @@ function alg_cache(alg::SSPRK53, u, rate_prototype, ::Type{uEltypeNoUnits}, fsalfirst = k end tab = SSPRK53ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - SSPRK53Cache(u, uprev, k, fsalfirst, tmp, tab, alg.stage_limiter!, alg.step_limiter!, - alg.thread) + return SSPRK53Cache( + u, uprev, k, fsalfirst, tmp, tab, alg.stage_limiter!, alg.step_limiter!, + alg.thread + ) end -function alg_cache(alg::SSPRK53, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK53, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SSPRK53ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SSPRK53ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct SSPRK53_2N1Cache{ - uType, - rateType, - TabType, - StageLimiter, - StepLimiter, - Thread -} <: SSPRKMutableCache + uType, + rateType, + TabType, + StageLimiter, + StepLimiter, + Thread, + } <: SSPRKMutableCache u::uType uprev::uType k::rateType @@ -264,41 +287,49 @@ struct SSPRK53_2N1ConstantCache{T, T2} <: SSPRKConstantCache c3 = T2(1.005292266294979) c4 = T2(0.541442494648948) - new{T, T2}(α40, α43, β10, β21, β32, β43, β54, c1, c2, c3, c4) + return new{T, T2}(α40, α43, β10, β21, β32, β43, β54, c1, c2, c3, c4) end end -function alg_cache(alg::SSPRK53_2N1, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK53_2N1, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k = zero(rate_prototype) if calck fsalfirst = zero(k) else fsalfirst = k end - tab = SSPRK53_2N1ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - SSPRK53_2N1Cache(u, uprev, k, fsalfirst, tab, alg.stage_limiter!, alg.step_limiter!, - alg.thread) -end - -function alg_cache(alg::SSPRK53_2N1, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = SSPRK53_2N1ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return SSPRK53_2N1Cache( + u, uprev, k, fsalfirst, tab, alg.stage_limiter!, alg.step_limiter!, + alg.thread + ) +end + +function alg_cache( + alg::SSPRK53_2N1, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SSPRK53_2N1ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SSPRK53_2N1ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct SSPRK53_2N2Cache{ - uType, - rateType, - TabType, - StageLimiter, - StepLimiter, - Thread -} <: SSPRKMutableCache + uType, + rateType, + TabType, + StageLimiter, + StepLimiter, + Thread, + } <: SSPRKMutableCache u::uType uprev::uType k::rateType @@ -327,8 +358,8 @@ struct SSPRK53_2N2ConstantCache{T, T2} <: SSPRKConstantCache function SSPRK53_2N2ConstantCache(T, T2) α30 = T(0.682342861037239) α32 = T(0.317657138962761) - α50 = T(0.045230974482400) - α54 = T(0.954769025517600) + α50 = T(0.0452309744824) + α54 = T(0.9547690255176) β10 = T(0.465388589249323) β21 = T(0.465388589249323) β32 = T(0.124745797313998) @@ -336,38 +367,46 @@ struct SSPRK53_2N2ConstantCache{T, T2} <: SSPRKConstantCache β54 = T(0.154263303748666) c1 = T2(0.465388589249323) c2 = T2(0.930777178498646) - c3 = T2(0.420413812847710) + c3 = T2(0.42041381284771) c4 = T2(0.885802402097033) - new{T, T2}(α30, α32, α50, α54, β10, β21, β32, β43, β54, c1, c2, c3, c4) + return new{T, T2}(α30, α32, α50, α54, β10, β21, β32, β43, β54, c1, c2, c3, c4) end end -function alg_cache(alg::SSPRK53_2N2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK53_2N2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k = zero(rate_prototype) if calck fsalfirst = zero(k) else fsalfirst = k end - tab = SSPRK53_2N2ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - SSPRK53_2N2Cache(u, uprev, k, fsalfirst, tab, alg.stage_limiter!, alg.step_limiter!, - alg.thread) -end - -function alg_cache(alg::SSPRK53_2N2, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = SSPRK53_2N2ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return SSPRK53_2N2Cache( + u, uprev, k, fsalfirst, tab, alg.stage_limiter!, alg.step_limiter!, + alg.thread + ) +end + +function alg_cache( + alg::SSPRK53_2N2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SSPRK53_2N2ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SSPRK53_2N2ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct SSPRK53_HCache{uType, rateType, TabType, StageLimiter, StepLimiter, Thread} <: - SSPRKMutableCache + SSPRKMutableCache u::uType uprev::uType k::rateType @@ -411,14 +450,16 @@ struct SSPRK53_HConstantCache{T, T2} <: SSPRKConstantCache c3 = T2(0.782435937433493) c4 = T2(0.622731084668631) - new{T, T2}(α30, α32, α40, α41, α43, β10, β21, β32, β43, β54, c1, c2, c3, c4) + return new{T, T2}(α30, α32, α40, α41, α43, β10, β21, β32, β43, β54, c1, c2, c3, c4) end end -function alg_cache(alg::SSPRK53_H, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK53_H, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) if calck @@ -427,19 +468,23 @@ function alg_cache(alg::SSPRK53_H, u, rate_prototype, ::Type{uEltypeNoUnits}, fsalfirst = k end tab = SSPRK53_HConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - SSPRK53_HCache(u, uprev, k, fsalfirst, tmp, tab, alg.stage_limiter!, alg.step_limiter!, - alg.thread) + return SSPRK53_HCache( + u, uprev, k, fsalfirst, tmp, tab, alg.stage_limiter!, alg.step_limiter!, + alg.thread + ) end -function alg_cache(alg::SSPRK53_H, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK53_H, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SSPRK53_HConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SSPRK53_HConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct SSPRK63Cache{uType, rateType, TabType, StageLimiter, StepLimiter, Thread} <: - SSPRKMutableCache + SSPRKMutableCache u::uType uprev::uType k::rateType @@ -473,30 +518,34 @@ struct SSPRK63ConstantCache{T, T2} <: SSPRKConstantCache function SSPRK63ConstantCache(T, T2) α40 = T(0.476769811285196) α41 = T(0.098511733286064) - α43 = T(0.424718455428740) + α43 = T(0.42471845542874) α62 = T(0.155221702560091) α65 = T(0.844778297439909) β10 = T(0.284220721334261) β21 = T(0.284220721334261) β32 = T(0.284220721334261) - β43 = T(0.120713785765930) + β43 = T(0.12071378576593) β54 = T(0.284220721334261) - β65 = T(0.240103497065900) + β65 = T(0.2401034970659) c1 = T2(0.284220721334261) c2 = T2(0.568441442668522) c3 = T2(0.852662164002783) c4 = T2(0.510854218958172) c5 = T2(0.795074940292433) - new{T, T2}(α40, α41, α43, α62, α65, β10, β21, β32, β43, β54, β65, c1, c2, c3, c4, - c5) + return new{T, T2}( + α40, α41, α43, α62, α65, β10, β21, β32, β43, β54, β65, c1, c2, c3, c4, + c5 + ) end end -function alg_cache(alg::SSPRK63, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK63, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) u₂ = zero(u) k = zero(rate_prototype) @@ -506,19 +555,23 @@ function alg_cache(alg::SSPRK63, u, rate_prototype, ::Type{uEltypeNoUnits}, fsalfirst = k end tab = SSPRK63ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - SSPRK63Cache(u, uprev, k, fsalfirst, tmp, u₂, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return SSPRK63Cache( + u, uprev, k, fsalfirst, tmp, u₂, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::SSPRK63, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK63, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SSPRK63ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SSPRK63ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct SSPRK73Cache{uType, rateType, TabType, StageLimiter, StepLimiter, Thread} <: - SSPRKMutableCache + SSPRKMutableCache u::uType uprev::uType k::rateType @@ -556,11 +609,11 @@ struct SSPRK73ConstantCache{T, T2} <: SSPRKConstantCache function SSPRK73ConstantCache(T, T2) α40 = T(0.184962588071072) α43 = T(0.815037411928928) - α50 = T(0.180718656570380) + α50 = T(0.18071865657038) α51 = T(0.314831034403793) α54 = T(0.504450309025826) - α73 = T(0.120199000000000) - α76 = T(0.879801000000000) + α73 = T(0.120199) + α76 = T(0.879801) β10 = T(0.233213863663009) β21 = T(0.233213863663009) β32 = T(0.233213863663009) @@ -575,16 +628,19 @@ struct SSPRK73ConstantCache{T, T2} <: SSPRKConstantCache c5 = T2(0.574607439040817) c6 = T2(0.807821302703826) - new{T, T2}( + return new{T, T2}( α40, α43, α50, α51, α54, α73, α76, β10, β21, β32, β43, β54, β65, β76, c1, - c2, c3, c4, c5, c6) + c2, c3, c4, c5, c6 + ) end end -function alg_cache(alg::SSPRK73, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK73, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) u₁ = zero(u) k = zero(rate_prototype) @@ -594,19 +650,23 @@ function alg_cache(alg::SSPRK73, u, rate_prototype, ::Type{uEltypeNoUnits}, fsalfirst = k end tab = SSPRK73ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - SSPRK73Cache(u, uprev, k, fsalfirst, tmp, u₁, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return SSPRK73Cache( + u, uprev, k, fsalfirst, tmp, u₁, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::SSPRK73, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK73, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SSPRK73ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SSPRK73ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct SSPRK83Cache{uType, rateType, TabType, StageLimiter, StepLimiter, Thread} <: - SSPRKMutableCache + SSPRKMutableCache u::uType uprev::uType k::rateType @@ -653,7 +713,7 @@ struct SSPRK83ConstantCache{T, T2} <: SSPRKConstantCache α65 = T(0.995745989333635) α72 = T(0.104380143093325) α73 = T(0.243265240906726) - α76 = T(0.652354615999950) + α76 = T(0.65235461599995) β10 = T(0.195804015330143) β21 = T(0.195804015330143) β32 = T(0.195804015330143) @@ -670,15 +730,19 @@ struct SSPRK83ConstantCache{T, T2} <: SSPRKConstantCache c6 = T2(0.755247658555329) c7 = T2(0.804195984669857) - new{T, T2}(α50, α51, α54, α61, α65, α72, α73, α76, β10, β21, β32, β43, β54, β65, - β76, β87, c1, c2, c3, c4, c5, c6, c7) + return new{T, T2}( + α50, α51, α54, α61, α65, α72, α73, α76, β10, β21, β32, β43, β54, β65, + β76, β87, c1, c2, c3, c4, c5, c6, c7 + ) end end -function alg_cache(alg::SSPRK83, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK83, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) u₂ = zero(u) u₃ = zero(u) @@ -689,19 +753,25 @@ function alg_cache(alg::SSPRK83, u, rate_prototype, ::Type{uEltypeNoUnits}, fsalfirst = k end tab = SSPRK83ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - SSPRK83Cache(u, uprev, k, fsalfirst, tmp, u₂, u₃, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return SSPRK83Cache( + u, uprev, k, fsalfirst, tmp, u₂, u₃, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::SSPRK83, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK83, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SSPRK83ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SSPRK83ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -@cache struct SSPRK43Cache{uType, rateType, uNoUnitsType, TabType, StageLimiter, - StepLimiter, Thread} <: SSPRKMutableCache +@cache struct SSPRK43Cache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, + StepLimiter, Thread, + } <: SSPRKMutableCache u::uType uprev::uType k::rateType @@ -726,14 +796,16 @@ struct SSPRK43ConstantCache{T, T2} <: SSPRKConstantCache half_u = T(0.5) half_t = T2(0.5) - new{T, T2}(one_third_u, two_thirds_u, half_u, half_t) + return new{T, T2}(one_third_u, two_thirds_u, half_u, half_t) end end -function alg_cache(alg::SSPRK43, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK43, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k = zero(rate_prototype) if calck fsalfirst = zero(k) @@ -744,25 +816,29 @@ function alg_cache(alg::SSPRK43, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tab = SSPRK43ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - SSPRK43Cache(u, uprev, k, fsalfirst, utilde, atmp, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return SSPRK43Cache( + u, uprev, k, fsalfirst, utilde, atmp, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::SSPRK43, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK43, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SSPRK43ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SSPRK43ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct SSPRK432Cache{ - uType, - rateType, - uNoUnitsType, - StageLimiter, - StepLimiter, - Thread -} <: SSPRKMutableCache + uType, + rateType, + uNoUnitsType, + StageLimiter, + StepLimiter, + Thread, + } <: SSPRKMutableCache u::uType uprev::uType k::rateType @@ -776,10 +852,12 @@ end struct SSPRK432ConstantCache <: SSPRKConstantCache end -function alg_cache(alg::SSPRK432, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK432, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k = zero(rate_prototype) if calck fsalfirst = zero(k) @@ -789,19 +867,25 @@ function alg_cache(alg::SSPRK432, u, rate_prototype, ::Type{uEltypeNoUnits}, utilde = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - SSPRK432Cache(u, uprev, k, fsalfirst, utilde, atmp, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return SSPRK432Cache( + u, uprev, k, fsalfirst, utilde, atmp, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::SSPRK432, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK432, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SSPRK432ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SSPRK432ConstantCache() end -@cache mutable struct SSPRKMSVS32Cache{uType, rateType, dtArrayType, dtType, StageLimiter, - StepLimiter, Thread} <: SSPRKMutableCache +@cache mutable struct SSPRKMSVS32Cache{ + uType, rateType, dtArrayType, dtType, StageLimiter, + StepLimiter, Thread, + } <: SSPRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -820,7 +904,7 @@ end end @cache mutable struct SSPRKMSVS32ConstantCache{uType, dtArrayType, dtType} <: - OrdinaryDiffEqConstantCache + OrdinaryDiffEqConstantCache u_2::uType u_1::uType dts::dtArrayType @@ -830,10 +914,12 @@ end step::Int end -function alg_cache(alg::SSPRKMSVS32, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRKMSVS32, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} fsalfirst = zero(rate_prototype) dts = fill(zero(dt), 3) dtf = fill(zero(dt), 2) @@ -842,29 +928,33 @@ function alg_cache(alg::SSPRKMSVS32, u, rate_prototype, ::Type{uEltypeNoUnits}, u_1 = zero(u) k = zero(rate_prototype) tmp = zero(u) - SSPRKMSVS32Cache(u, uprev, fsalfirst, u_2, u_1, k, tmp, dts, dtf, μ, 0.5, - alg.stage_limiter!, alg.step_limiter!, alg.thread, 1) + return SSPRKMSVS32Cache( + u, uprev, fsalfirst, u_2, u_1, k, tmp, dts, dtf, μ, 0.5, + alg.stage_limiter!, alg.step_limiter!, alg.thread, 1 + ) end -function alg_cache(alg::SSPRKMSVS32, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRKMSVS32, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} dts = fill(zero(dt), 3) dtf = fill(zero(dt), 2) μ = zero(dt) u_2 = u u_1 = u - SSPRKMSVS32ConstantCache(u_2, u_1, dts, dtf, μ, 0.5, 1) + return SSPRKMSVS32ConstantCache(u_2, u_1, dts, dtf, μ, 0.5, 1) end @cache mutable struct SSPRKMSVS43Cache{ - uType, - rateType, - StageLimiter, - StepLimiter, - Thread -} <: SSPRKMutableCache + uType, + rateType, + StageLimiter, + StepLimiter, + Thread, + } <: SSPRKMutableCache u::uType uprev::uType fsalfirst::rateType @@ -883,7 +973,7 @@ end end @cache mutable struct SSPRKMSVS43ConstantCache{uType, rateType} <: - OrdinaryDiffEqConstantCache + OrdinaryDiffEqConstantCache u_3::uType u_2::uType u_1::uType @@ -893,10 +983,12 @@ end step::Int end -function alg_cache(alg::SSPRKMSVS43, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRKMSVS43, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} fsalfirst = zero(rate_prototype) u_3 = zero(u) u_2 = zero(u) @@ -906,31 +998,35 @@ function alg_cache(alg::SSPRKMSVS43, u, rate_prototype, ::Type{uEltypeNoUnits}, k2 = zero(rate_prototype) k3 = zero(rate_prototype) tmp = zero(u) - SSPRKMSVS43Cache(u, uprev, fsalfirst, u_3, u_2, u_1, k, k1, k2, k3, tmp, - alg.stage_limiter!, alg.step_limiter!, alg.thread, 1) + return SSPRKMSVS43Cache( + u, uprev, fsalfirst, u_3, u_2, u_1, k, k1, k2, k3, tmp, + alg.stage_limiter!, alg.step_limiter!, alg.thread, 1 + ) end -function alg_cache(alg::SSPRKMSVS43, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRKMSVS43, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} u_3 = u u_2 = u u_1 = u k1 = rate_prototype k2 = rate_prototype k3 = rate_prototype - SSPRKMSVS43ConstantCache(u_3, u_2, u_1, k1, k2, k3, 1) + return SSPRKMSVS43ConstantCache(u_3, u_2, u_1, k1, k2, k3, 1) end @cache struct SSPRK932Cache{ - uType, - rateType, - uNoUnitsType, - StageLimiter, - StepLimiter, - Thread -} <: SSPRKMutableCache + uType, + rateType, + uNoUnitsType, + StageLimiter, + StepLimiter, + Thread, + } <: SSPRKMutableCache u::uType uprev::uType k::rateType @@ -944,10 +1040,12 @@ end struct SSPRK932ConstantCache <: SSPRKConstantCache end -function alg_cache(alg::SSPRK932, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK932, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k = zero(rate_prototype) if calck fsalfirst = zero(k) @@ -957,19 +1055,23 @@ function alg_cache(alg::SSPRK932, u, rate_prototype, ::Type{uEltypeNoUnits}, utilde = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) - SSPRK932Cache(u, uprev, k, fsalfirst, utilde, atmp, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return SSPRK932Cache( + u, uprev, k, fsalfirst, utilde, atmp, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::SSPRK932, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK932, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SSPRK932ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SSPRK932ConstantCache() end @cache struct SSPRK54Cache{uType, rateType, TabType, StageLimiter, StepLimiter, Thread} <: - SSPRKMutableCache + SSPRKMutableCache u::uType uprev::uType k::rateType @@ -1006,7 +1108,7 @@ struct SSPRK54ConstantCache{T, T2} <: SSPRKConstantCache c4::T2 function SSPRK54ConstantCache(T, T2) - β10 = T(0.391752226571890) + β10 = T(0.39175222657189) α20 = T(0.444370493651235) α21 = T(0.555629506348765) β21 = T(0.368410593050371) @@ -1018,23 +1120,27 @@ struct SSPRK54ConstantCache{T, T2} <: SSPRKConstantCache β43 = T(0.544974750228521) α52 = T(0.517231671970585) α53 = T(0.096059710526147) - β53 = T(0.063692468666290) + β53 = T(0.06369246866629) α54 = T(0.386708617503269) β54 = T(0.226007483236906) - c1 = T2(0.391752226571890) - c2 = T2(0.586079689311540) - c3 = T2(0.474542363121400) + c1 = T2(0.39175222657189) + c2 = T2(0.58607968931154) + c3 = T2(0.4745423631214) c4 = T2(0.935010630967653) - new{T, T2}(β10, α20, α21, β21, α30, α32, β32, α40, α43, β43, α52, α53, β53, α54, - β54, c1, c2, c3, c4) + return new{T, T2}( + β10, α20, α21, β21, α30, α32, β32, α40, α43, β43, α52, α53, β53, α54, + β54, c1, c2, c3, c4 + ) end end -function alg_cache(alg::SSPRK54, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK54, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} u₂ = zero(u) u₃ = zero(u) tmp = zero(u) @@ -1046,19 +1152,23 @@ function alg_cache(alg::SSPRK54, u, rate_prototype, ::Type{uEltypeNoUnits}, end k₃ = zero(rate_prototype) tab = SSPRK54ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - SSPRK54Cache(u, uprev, k, fsalfirst, k₃, u₂, u₃, tmp, tab, alg.stage_limiter!, - alg.step_limiter!, alg.thread) + return SSPRK54Cache( + u, uprev, k, fsalfirst, k₃, u₂, u₃, tmp, tab, alg.stage_limiter!, + alg.step_limiter!, alg.thread + ) end -function alg_cache(alg::SSPRK54, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK54, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SSPRK54ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SSPRK54ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct SSPRK104Cache{uType, rateType, StageLimiter, StepLimiter, Thread} <: - SSPRKMutableCache + SSPRKMutableCache u::uType uprev::uType k::rateType @@ -1072,10 +1182,12 @@ end struct SSPRK104ConstantCache <: SSPRKConstantCache end -function alg_cache(alg::SSPRK104, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK104, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) if calck @@ -1084,20 +1196,26 @@ function alg_cache(alg::SSPRK104, u, rate_prototype, ::Type{uEltypeNoUnits}, fsalfirst = k end k₄ = zero(rate_prototype) - SSPRK104Cache(u, uprev, k, fsalfirst, k₄, tmp, alg.stage_limiter!, alg.step_limiter!, - alg.thread) + return SSPRK104Cache( + u, uprev, k, fsalfirst, k₄, tmp, alg.stage_limiter!, alg.step_limiter!, + alg.thread + ) end -function alg_cache(alg::SSPRK104, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SSPRK104, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SSPRK104ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SSPRK104ConstantCache() end -@cache struct KYK2014DGSSPRK_3S2_Cache{uType, rateType, TabType, StageLimiter, StepLimiter, - Thread} <: - SSPRKMutableCache +@cache struct KYK2014DGSSPRK_3S2_Cache{ + uType, rateType, TabType, StageLimiter, StepLimiter, + Thread, + } <: + SSPRKMutableCache u::uType uprev::uType k::rateType @@ -1144,30 +1262,40 @@ struct KYK2014DGSSPRK_3S2_ConstantCache{T, T2} <: OrdinaryDiffEqConstantCache β_32 = T(0.345866039233415) c_1 = β_10 c_2 = α_21 * β_10 + β_21 # ==0.96376427726 - new{T, T2}(α_10, α_20, α_21, α_30, α_32, β_10, β_21, β_30, β_32, c_1, c_2) + return new{T, T2}(α_10, α_20, α_21, α_30, α_32, β_10, β_21, β_30, β_32, c_1, c_2) end end -function alg_cache(alg::KYK2014DGSSPRK_3S2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::KYK2014DGSSPRK_3S2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} u_1 = zero(u) u_2 = zero(u) kk_1 = zero(rate_prototype) kk_2 = zero(rate_prototype) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) - tab = KYK2014DGSSPRK_3S2_ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - KYK2014DGSSPRK_3S2_Cache(u, uprev, k, fsalfirst, tab, u_1, u_2, kk_1, kk_2, - alg.stage_limiter!, alg.step_limiter!, alg.thread) -end - -function alg_cache(alg::KYK2014DGSSPRK_3S2, u, rate_prototype, ::Type{uEltypeNoUnits}, + tab = KYK2014DGSSPRK_3S2_ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return KYK2014DGSSPRK_3S2_Cache( + u, uprev, k, fsalfirst, tab, u_1, u_2, kk_1, kk_2, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) +end + +function alg_cache( + alg::KYK2014DGSSPRK_3S2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - KYK2014DGSSPRK_3S2_ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return KYK2014DGSSPRK_3S2_ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) end diff --git a/lib/OrdinaryDiffEqSSPRK/src/ssprk_perform_step.jl b/lib/OrdinaryDiffEqSSPRK/src/ssprk_perform_step.jl index 09ab9dae39..94aa753c54 100644 --- a/lib/OrdinaryDiffEqSSPRK/src/ssprk_perform_step.jl +++ b/lib/OrdinaryDiffEqSSPRK/src/ssprk_perform_step.jl @@ -6,7 +6,7 @@ function initialize!(integrator, cache::SSPRK22ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK22ConstantCache, repeat_step = false) @@ -29,7 +29,7 @@ function initialize!(integrator, cache::SSPRK22Cache) integrator.kshortsize = 1 resize!(integrator.k, integrator.kshortsize) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK22Cache, repeat_step = false) @@ -38,11 +38,11 @@ end # u1 -> stored as u f(fsalfirst, uprev, p, t) - @.. broadcast=false thread=thread u=uprev+dt*fsalfirst + @.. broadcast = false thread = thread u = uprev + dt * fsalfirst stage_limiter!(u, integrator, p, t + dt) f(k, u, p, t + dt) # u - @.. broadcast=false thread=thread u=(uprev+u+dt*k)/2 + @.. broadcast = false thread = thread u = (uprev + u + dt * k) / 2 stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 2) @@ -54,7 +54,7 @@ function initialize!(integrator, cache::KYKSSPRK42Cache) integrator.kshortsize = 1 resize!(integrator.k, integrator.kshortsize) integrator.k[1] = integrator.fsalfirst - integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation + return integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # FSAL for interpolation end @muladd function perform_step!(integrator, cache::KYKSSPRK42Cache, repeat_step = false) @@ -64,21 +64,21 @@ end δ = fsalfirst # u1 -> stored as u - @.. broadcast=false thread=thread u=uprev+dt*β10*δ + @.. broadcast = false thread = thread u = uprev + dt * β10 * δ stage_limiter!(u, integrator, p, t + c1 * dt) f(k, u, p, t + c1 * dt) # u2 - @.. broadcast=false thread=thread tmp=α20*uprev+α21*u+dt*β21*k + @.. broadcast = false thread = thread tmp = α20 * uprev + α21 * u + dt * β21 * k stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k, tmp, p, t + c2 * dt) # u3 - @.. broadcast=false thread=thread tmp=α30*uprev+α32*tmp+dt*β30*δ+ - dt*β32*k + @.. broadcast = false thread = thread tmp = α30 * uprev + α32 * tmp + dt * β30 * δ + + dt * β32 * k stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k, tmp, p, t + c3 * dt) # u - @.. broadcast=false thread=thread u=α40*uprev+α43*tmp+dt*β40*δ+ - dt*β43*k + @.. broadcast = false thread = thread u = α40 * uprev + α43 * tmp + dt * β40 * δ + + dt * β43 * k stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) f(k, u, p, t + dt) @@ -92,7 +92,7 @@ function initialize!(integrator, cache::KYKSSPRK42ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::KYKSSPRK42ConstantCache) @@ -126,7 +126,7 @@ function initialize!(integrator, cache::SSPRK33ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK33ConstantCache, repeat_step = false) @@ -152,7 +152,7 @@ function initialize!(integrator, cache::SSPRK33Cache) integrator.kshortsize = 1 resize!(integrator.k, integrator.kshortsize) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK33Cache, repeat_step = false) @@ -161,15 +161,15 @@ end # u1 f(fsalfirst, uprev, p, t) - @.. broadcast=false thread=thread u=uprev+dt*fsalfirst + @.. broadcast = false thread = thread u = uprev + dt * fsalfirst stage_limiter!(u, integrator, p, t + dt) f(k, u, p, t + dt) # u2 - @.. broadcast=false thread=thread u=(3*uprev+u+dt*k)/4 + @.. broadcast = false thread = thread u = (3 * uprev + u + dt * k) / 4 stage_limiter!(u, integrator, p, t + dt / 2) f(k, u, p, t + dt / 2) # u - @.. broadcast=false thread=thread u=(uprev+2*u+2*dt*k)/3 + @.. broadcast = false thread = thread u = (uprev + 2 * u + 2 * dt * k) / 3 stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) @@ -183,7 +183,7 @@ function initialize!(integrator, cache::SSPRK53ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK53ConstantCache, repeat_step = false) @@ -216,7 +216,7 @@ function initialize!(integrator, cache::SSPRK53Cache) integrator.kshortsize = 1 resize!(integrator.k, integrator.kshortsize) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK53Cache, repeat_step = false) @@ -226,23 +226,23 @@ end # u1 f(fsalfirst, uprev, p, t) - @.. broadcast=false thread=thread tmp=uprev+β10*dt*fsalfirst + @.. broadcast = false thread = thread tmp = uprev + β10 * dt * fsalfirst stage_limiter!(tmp, integrator, p, t + c1 * dt) f(k, tmp, p, t + c1 * dt) # u2 -> stored as u - @.. broadcast=false thread=thread u=tmp+β21*dt*k + @.. broadcast = false thread = thread u = tmp + β21 * dt * k stage_limiter!(u, integrator, p, t + c2 * dt) f(k, u, p, t + c2 * dt) # u3 - @.. broadcast=false thread=thread tmp=α30*uprev+α32*u+β32*dt*k + @.. broadcast = false thread = thread tmp = α30 * uprev + α32 * u + β32 * dt * k stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k, tmp, p, t + c3 * dt) # u4 - @.. broadcast=false thread=thread tmp=α40*uprev+α43*tmp+β43*dt*k + @.. broadcast = false thread = thread tmp = α40 * uprev + α43 * tmp + β43 * dt * k stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k, tmp, p, t + c4 * dt) # u - @.. broadcast=false thread=thread u=α52*u+α54*tmp+β54*dt*k + @.. broadcast = false thread = thread u = α52 * u + α54 * tmp + β54 * dt * k stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 5) @@ -256,11 +256,13 @@ function initialize!(integrator, cache::SSPRK53_2N1ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end -@muladd function perform_step!(integrator, cache::SSPRK53_2N1ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::SSPRK53_2N1ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; α40, α43, β10, β21, β32, β43, β54, c1, c2, c3, c4) = cache #stores in u for all intermediate stages @@ -290,7 +292,7 @@ function initialize!(integrator, cache::SSPRK53_2N1Cache) integrator.kshortsize = 1 resize!(integrator.k, integrator.kshortsize) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK53_2N1Cache, repeat_step = false) @@ -301,23 +303,23 @@ end #stores in u for all intermediate stages # u1 f(fsalfirst, uprev, p, t) - @.. broadcast=false thread=thread u=uprev+β10*dt*fsalfirst + @.. broadcast = false thread = thread u = uprev + β10 * dt * fsalfirst stage_limiter!(u, integrator, p, t + c1 * dt) f(k, u, p, t + c1 * dt) # u2 - @.. broadcast=false thread=thread u=u+β21*dt*k + @.. broadcast = false thread = thread u = u + β21 * dt * k stage_limiter!(u, integrator, p, t + c2 * dt) f(k, u, p, t + c2 * dt) # u3 - @.. broadcast=false thread=thread u=u+β32*dt*k + @.. broadcast = false thread = thread u = u + β32 * dt * k stage_limiter!(u, integrator, p, t + c3 * dt) f(k, u, p, t + c3 * dt) # u4 - @.. broadcast=false thread=thread u=α40*uprev+α43*u+β43*dt*k + @.. broadcast = false thread = thread u = α40 * uprev + α43 * u + β43 * dt * k stage_limiter!(u, integrator, p, t + c4 * dt) f(k, u, p, t + c4 * dt) # u - @.. broadcast=false thread=thread u=u+β54*dt*k + @.. broadcast = false thread = thread u = u + β54 * dt * k stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 5) @@ -331,11 +333,13 @@ function initialize!(integrator, cache::SSPRK53_2N2ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end -@muladd function perform_step!(integrator, cache::SSPRK53_2N2ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::SSPRK53_2N2ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; α30, α32, α50, α54, β10, β21, β32, β43, β54, c1, c2, c3, c4) = cache #stores in u for all intermediate stages @@ -365,7 +369,7 @@ function initialize!(integrator, cache::SSPRK53_2N2Cache) integrator.kshortsize = 1 resize!(integrator.k, integrator.kshortsize) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK53_2N2Cache, repeat_step = false) @@ -375,23 +379,23 @@ end # u1 f(fsalfirst, uprev, p, t) - @.. broadcast=false thread=thread u=uprev+β10*dt*fsalfirst + @.. broadcast = false thread = thread u = uprev + β10 * dt * fsalfirst stage_limiter!(u, integrator, p, t + c1 * dt) f(k, u, p, t + c1 * dt) # u2 -> stored as u - @.. broadcast=false thread=thread u=u+β21*dt*k + @.. broadcast = false thread = thread u = u + β21 * dt * k stage_limiter!(u, integrator, p, t + c2 * dt) f(k, u, p, t + c2 * dt) # u3 - @.. broadcast=false thread=thread u=α30*uprev+α32*u+β32*dt*k + @.. broadcast = false thread = thread u = α30 * uprev + α32 * u + β32 * dt * k stage_limiter!(u, integrator, p, t + c3 * dt) f(k, u, p, t + c3 * dt) # u4 - @.. broadcast=false thread=thread u=u+β43*dt*k + @.. broadcast = false thread = thread u = u + β43 * dt * k stage_limiter!(u, integrator, p, t + c4 * dt) f(k, u, p, t + c4 * dt) # u - @.. broadcast=false thread=thread u=α50*uprev+α54*u+β54*dt*k + @.. broadcast = false thread = thread u = α50 * uprev + α54 * u + β54 * dt * k stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 5) @@ -404,11 +408,13 @@ function initialize!(integrator, cache::SSPRK53_HConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end -@muladd function perform_step!(integrator, cache::SSPRK53_HConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::SSPRK53_HConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; α30, α32, α40, α41, α43, β10, β21, β32, β43, β54, c1, c2, c3, c4) = cache #stores in u for all intermediate stages @@ -438,7 +444,7 @@ function initialize!(integrator, cache::SSPRK53_HCache) integrator.kshortsize = 1 resize!(integrator.k, integrator.kshortsize) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK53_HCache, repeat_step = false) @@ -448,23 +454,23 @@ end #stores in u for all intermediate stages # u1 f(fsalfirst, uprev, p, t) - @.. broadcast=false thread=thread tmp=uprev+β10*dt*fsalfirst + @.. broadcast = false thread = thread tmp = uprev + β10 * dt * fsalfirst stage_limiter!(tmp, integrator, p, t + c1 * dt) f(k, tmp, p, t + c1 * dt) # u2 - @.. broadcast=false thread=thread u=tmp+β21*dt*k + @.. broadcast = false thread = thread u = tmp + β21 * dt * k stage_limiter!(u, integrator, p, t + c2 * dt) f(k, u, p, t + c2 * dt) # u3 - @.. broadcast=false thread=thread u=α30*uprev+α32*u+β32*dt*k + @.. broadcast = false thread = thread u = α30 * uprev + α32 * u + β32 * dt * k stage_limiter!(u, integrator, p, t + c3 * dt) f(k, u, p, t + c3 * dt) # u4 - @.. broadcast=false thread=thread u=α40*uprev+α41*tmp+α43*u+β43*dt*k + @.. broadcast = false thread = thread u = α40 * uprev + α41 * tmp + α43 * u + β43 * dt * k stage_limiter!(u, integrator, p, t + c4 * dt) f(k, u, p, t + c4 * dt) # u - @.. broadcast=false thread=thread u=u+β54*dt*k + @.. broadcast = false thread = thread u = u + β54 * dt * k stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 5) @@ -478,7 +484,7 @@ function initialize!(integrator, cache::SSPRK63ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK63ConstantCache, repeat_step = false) @@ -514,38 +520,40 @@ function initialize!(integrator, cache::SSPRK63Cache) integrator.kshortsize = 1 resize!(integrator.k, integrator.kshortsize) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK63Cache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator (; k, fsalfirst, tmp, u₂, stage_limiter!, step_limiter!, thread) = cache - (; α40, α41, α43, α62, α65, β10, β21, β32, β43, - β54, β65, c1, c2, c3, c4, c5) = cache.tab + (; + α40, α41, α43, α62, α65, β10, β21, β32, β43, + β54, β65, c1, c2, c3, c4, c5, + ) = cache.tab # u1 -> stored as u f(fsalfirst, uprev, p, t) - @.. broadcast=false thread=thread u=uprev+β10*dt*fsalfirst + @.. broadcast = false thread = thread u = uprev + β10 * dt * fsalfirst stage_limiter!(u, integrator, p, t + c1 * dt) f(k, u, p, t + c1 * dt) # u2 - @.. broadcast=false thread=thread u₂=u+β21*dt*k + @.. broadcast = false thread = thread u₂ = u + β21 * dt * k stage_limiter!(u₂, integrator, p, t + c2 * dt) f(k, u₂, p, t + c2 * dt) # u3 - @.. broadcast=false thread=thread tmp=u₂+β32*dt*k + @.. broadcast = false thread = thread tmp = u₂ + β32 * dt * k stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k, tmp, p, t + c3 * dt) # u4 - @.. broadcast=false thread=thread tmp=α40*uprev+α41*u+α43*tmp+β43*dt*k + @.. broadcast = false thread = thread tmp = α40 * uprev + α41 * u + α43 * tmp + β43 * dt * k stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k, tmp, p, t + c4 * dt) # u5 - @.. broadcast=false thread=thread tmp=tmp+β54*dt*k + @.. broadcast = false thread = thread tmp = tmp + β54 * dt * k stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k, tmp, p, t + c5 * dt) # u - @.. broadcast=false thread=thread u=α62*u₂+α65*tmp+β65*dt*k + @.. broadcast = false thread = thread u = α62 * u₂ + α65 * tmp + β65 * dt * k stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 6) @@ -559,13 +567,15 @@ function initialize!(integrator, cache::SSPRK73ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK73ConstantCache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator - (; α40, α43, α50, α51, α54, α73, α76, β10, β21, β32, - β43, β54, β65, β76, c1, c2, c3, c4, c5, c6) = cache + (; + α40, α43, α50, α51, α54, α73, α76, β10, β21, β32, + β43, β54, β65, β76, c1, c2, c3, c4, c5, c6, + ) = cache # u1 integrator.fsalfirst = f(uprev, p, t) @@ -599,42 +609,44 @@ function initialize!(integrator, cache::SSPRK73Cache) integrator.kshortsize = 1 resize!(integrator.k, integrator.kshortsize) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK73Cache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator (; k, fsalfirst, tmp, u₁, stage_limiter!, step_limiter!, thread) = cache - (; α40, α43, α50, α51, α54, α73, α76, β10, β21, β32, β43, - β54, β65, β76, c1, c2, c3, c4, c5, c6) = cache.tab + (; + α40, α43, α50, α51, α54, α73, α76, β10, β21, β32, β43, + β54, β65, β76, c1, c2, c3, c4, c5, c6, + ) = cache.tab # u1 f(fsalfirst, uprev, p, t) - @.. broadcast=false thread=thread u₁=uprev+β10*dt*fsalfirst + @.. broadcast = false thread = thread u₁ = uprev + β10 * dt * fsalfirst stage_limiter!(u₁, integrator, p, t + c1 * dt) f(k, u₁, p, t + c1 * dt) # u2 - @.. broadcast=false thread=thread tmp=u₁+β21*dt*k + @.. broadcast = false thread = thread tmp = u₁ + β21 * dt * k stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k, tmp, p, t + c2 * dt) # u3 -> stored as u - @.. broadcast=false thread=thread u=tmp+β32*dt*k + @.. broadcast = false thread = thread u = tmp + β32 * dt * k stage_limiter!(u, integrator, p, t + c3 * dt) f(k, u, p, t + c3 * dt) # u4 - @.. broadcast=false thread=thread tmp=α40*uprev+α43*u+β43*dt*k + @.. broadcast = false thread = thread tmp = α40 * uprev + α43 * u + β43 * dt * k stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k, tmp, p, t + c4 * dt) # u5 - @.. broadcast=false thread=thread tmp=α50*uprev+α51*u₁+α54*tmp+β54*dt*k + @.. broadcast = false thread = thread tmp = α50 * uprev + α51 * u₁ + α54 * tmp + β54 * dt * k stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k, tmp, p, t + c5 * dt) # u6 - @.. broadcast=false thread=thread tmp=tmp+β65*dt*k + @.. broadcast = false thread = thread tmp = tmp + β65 * dt * k stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k, tmp, p, t + c6 * dt) # u - @.. broadcast=false thread=thread u=α73*u+α76*tmp+β76*dt*k + @.. broadcast = false thread = thread u = α73 * u + α76 * tmp + β76 * dt * k stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 7) @@ -648,13 +660,15 @@ function initialize!(integrator, cache::SSPRK83ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK83ConstantCache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator - (; α50, α51, α54, α61, α65, α72, α73, α76, β10, β21, β32, β43, - β54, β65, β76, β87, c1, c2, c3, c4, c5, c6, c7) = cache + (; + α50, α51, α54, α61, α65, α72, α73, α76, β10, β21, β32, β43, + β54, β65, β76, β87, c1, c2, c3, c4, c5, c6, c7, + ) = cache # u1 -> save as u integrator.fsalfirst = f(uprev, p, t) @@ -691,46 +705,48 @@ function initialize!(integrator, cache::SSPRK83Cache) integrator.kshortsize = 1 resize!(integrator.k, integrator.kshortsize) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK83Cache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator (; k, fsalfirst, tmp, u₂, u₃, stage_limiter!, step_limiter!, thread) = cache - (; α50, α51, α54, α61, α65, α72, α73, α76, β10, β21, β32, β43, - β54, β65, β76, β87, c1, c2, c3, c4, c5, c6, c7) = cache.tab + (; + α50, α51, α54, α61, α65, α72, α73, α76, β10, β21, β32, β43, + β54, β65, β76, β87, c1, c2, c3, c4, c5, c6, c7, + ) = cache.tab # u1 -> save as u f(fsalfirst, uprev, p, t) - @.. broadcast=false thread=thread u=uprev+β10*dt*fsalfirst + @.. broadcast = false thread = thread u = uprev + β10 * dt * fsalfirst stage_limiter!(u, integrator, p, t + c1 * dt) f(k, u, p, t + c1 * dt) # u2 - @.. broadcast=false thread=thread u₂=u+β21*dt*k + @.. broadcast = false thread = thread u₂ = u + β21 * dt * k stage_limiter!(u₂, integrator, p, t + c2 * dt) f(k, u₂, p, t + c2 * dt) # u3 - @.. broadcast=false thread=thread u₃=u₂+β32*dt*k + @.. broadcast = false thread = thread u₃ = u₂ + β32 * dt * k stage_limiter!(u₃, integrator, p, t + c3 * dt) f(k, u₃, p, t + c3 * dt) # u4 - @.. broadcast=false thread=thread tmp=u₃+β43*dt*k + @.. broadcast = false thread = thread tmp = u₃ + β43 * dt * k stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k, tmp, p, t + c4 * dt) # u5 - @.. broadcast=false thread=thread tmp=α50*uprev+α51*u+α54*tmp+β54*dt*k + @.. broadcast = false thread = thread tmp = α50 * uprev + α51 * u + α54 * tmp + β54 * dt * k stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k, tmp, p, t + c5 * dt) # u6 - @.. broadcast=false thread=thread tmp=α61*u+α65*tmp+β65*dt*k + @.. broadcast = false thread = thread tmp = α61 * u + α65 * tmp + β65 * dt * k stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k, tmp, p, t + c6 * dt) # u7 - @.. broadcast=false thread=thread tmp=α72*u₂+α73*u₃+α76*tmp+β76*dt*k + @.. broadcast = false thread = thread tmp = α72 * u₂ + α73 * u₃ + α76 * tmp + β76 * dt * k stage_limiter!(tmp, integrator, p, t + c7 * dt) f(k, tmp, p, t + c7 * dt) # u - @.. broadcast=false thread=thread u=tmp+β87*dt*k + @.. broadcast = false thread = thread u = tmp + β87 * dt * k stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 8) @@ -744,7 +760,7 @@ function initialize!(integrator, cache::SSPRK43ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK43ConstantCache, repeat_step = false) @@ -774,8 +790,10 @@ end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 4) if integrator.opts.adaptive utilde = half_u * (utilde - u) # corresponds to bhat = (1/4, 1/4, 1/4, 1/4) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.u = u @@ -786,7 +804,7 @@ function initialize!(integrator, cache::SSPRK43Cache) integrator.kshortsize = 1 resize!(integrator.k, integrator.kshortsize) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK43Cache, repeat_step = false) @@ -797,32 +815,34 @@ end # u1 f(fsalfirst, uprev, p, t) - @.. broadcast=false thread=thread u=uprev+dt_2*fsalfirst + @.. broadcast = false thread = thread u = uprev + dt_2 * fsalfirst stage_limiter!(u, integrator, p, t + dt_2) f(k, u, p, t + dt_2) # u2 - @.. broadcast=false thread=thread u=u+dt_2*k + @.. broadcast = false thread = thread u = u + dt_2 * k stage_limiter!(u, integrator, p, t + dt) f(k, u, p, t + dt) # - @.. broadcast=false thread=thread u=u+dt_2*k + @.. broadcast = false thread = thread u = u + dt_2 * k stage_limiter!(u, integrator, p, t + dt + dt_2) if integrator.opts.adaptive - @.. broadcast=false utilde=one_third_u*uprev+two_thirds_u*u # corresponds to bhat = (1/3, 1/3, 1/3, 0) + @.. broadcast = false utilde = one_third_u * uprev + two_thirds_u * u # corresponds to bhat = (1/3, 1/3, 1/3, 0) end # u3 - @.. broadcast=false thread=thread u=two_thirds_u*uprev+one_third_u*u + @.. broadcast = false thread = thread u = two_thirds_u * uprev + one_third_u * u f(k, u, p, t + dt_2) # - @.. broadcast=false thread=thread u=u+dt_2*k # corresponds to b = (1/6, 1/6, 1/6, 1/2) + @.. broadcast = false thread = thread u = u + dt_2 * k # corresponds to b = (1/6, 1/6, 1/6, 1/2) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=half_u*(utilde-u) # corresponds to bhat = (1/4, 1/4, 1/4, 1/4) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = half_u * (utilde - u) # corresponds to bhat = (1/4, 1/4, 1/4, 1/4) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 4) @@ -836,11 +856,13 @@ function initialize!(integrator, cache::SSPRK432ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end -@muladd function perform_step!(integrator, cache::SSPRK432ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::SSPRK432ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator dt_2 = dt / 2 @@ -866,8 +888,10 @@ end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 4) if integrator.opts.adaptive utilde = utilde - u - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.u = u @@ -878,7 +902,7 @@ function initialize!(integrator, cache::SSPRK432Cache) integrator.kshortsize = 1 resize!(integrator.k, integrator.kshortsize) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK432Cache, repeat_step = false) @@ -888,32 +912,34 @@ end # u1 f(fsalfirst, uprev, p, t) - @.. broadcast=false thread=thread u=uprev+dt_2*fsalfirst + @.. broadcast = false thread = thread u = uprev + dt_2 * fsalfirst stage_limiter!(u, integrator, p, t + dt_2) f(k, u, p, t + dt_2) # u2 - @.. broadcast=false thread=thread u=u+dt_2*k + @.. broadcast = false thread = thread u = u + dt_2 * k stage_limiter!(u, integrator, p, t + dt) f(k, u, p, t + dt) # - @.. broadcast=false thread=thread u=u+dt_2*k + @.. broadcast = false thread = thread u = u + dt_2 * k stage_limiter!(u, integrator, p, t + dt + dt_2) if integrator.opts.adaptive - @.. broadcast=false utilde=(uprev+2*u)/3 + @.. broadcast = false utilde = (uprev + 2 * u) / 3 end # u3 - @.. broadcast=false thread=thread u=(2*uprev+u)/3 + @.. broadcast = false thread = thread u = (2 * uprev + u) / 3 f(k, u, p, t + dt_2) # - @.. broadcast=false thread=thread u=u+dt_2*k + @.. broadcast = false thread = thread u = u + dt_2 * k stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=utilde-u - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = utilde - u + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 4) @@ -927,11 +953,13 @@ function initialize!(integrator, cache::SSPRKMSVS32ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end -@muladd function perform_step!(integrator, cache::SSPRKMSVS32ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::SSPRKMSVS32ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; u_1, u_2, dts, dtf, μ, v_n) = cache @@ -1012,7 +1040,7 @@ function initialize!(integrator, cache::SSPRKMSVS32Cache) integrator.fsallast = cache.k integrator.k[1] = integrator.fsalfirst integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::SSPRKMSVS32Cache, repeat_step = false) @@ -1020,11 +1048,11 @@ end (; k, fsalfirst, u_1, u_2, stage_limiter!, step_limiter!, thread) = cache if cache.step < 3 - @.. broadcast=false thread=thread u=uprev+dt*fsalfirst + @.. broadcast = false thread = thread u = uprev + dt * fsalfirst stage_limiter!(u, integrator, p, t + dt) f(k, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false thread=thread u=(uprev+u+dt*k)/2 + @.. broadcast = false thread = thread u = (uprev + u + dt * k) / 2 stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) @@ -1035,9 +1063,9 @@ end end else Ω = 2 - @.. broadcast=false thread=thread u=((Ω*Ω-1)/(Ω*Ω))* - (uprev+(Ω/(Ω-1))*dt*fsalfirst)+ - (1/(Ω*Ω))*cache.u_2 + @.. broadcast = false thread = thread u = ((Ω * Ω - 1) / (Ω * Ω)) * + (uprev + (Ω / (Ω - 1)) * dt * fsalfirst) + + (1 / (Ω * Ω)) * cache.u_2 cache.u_2 .= u_1 cache.u_1 .= uprev stage_limiter!(u, integrator, p, t + dt) @@ -1056,11 +1084,13 @@ function initialize!(integrator, cache::SSPRKMSVS43ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end -@muladd function perform_step!(integrator, cache::SSPRKMSVS43ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::SSPRKMSVS43ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; u_1, u_2, u_3, k1, k2, k3) = cache @@ -1111,20 +1141,22 @@ function initialize!(integrator, cache::SSPRKMSVS43Cache) integrator.fsallast = cache.k integrator.k[1] = integrator.fsalfirst integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::SSPRKMSVS43Cache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator - (; k, fsalfirst, u_1, u_2, u_3, stage_limiter!, - step_limiter!, thread, k1, k2, k3) = cache + (; + k, fsalfirst, u_1, u_2, u_3, stage_limiter!, + step_limiter!, thread, k1, k2, k3, + ) = cache if cache.step < 4 - @.. broadcast=false thread=thread u=uprev+dt*fsalfirst + @.. broadcast = false thread = thread u = uprev + dt * fsalfirst stage_limiter!(u, integrator, p, t + dt) f(k, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false thread=thread u=(uprev+u+dt*k)/2 + @.. broadcast = false thread = thread u = (uprev + u + dt * k) / 2 stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) if cache.step == 1 @@ -1144,8 +1176,8 @@ end end # u else - @.. broadcast=false thread=thread u=(16/27)*(uprev+3*dt*fsalfirst)+ - (11/27)*(u_3+(12/11)*dt*k3) + @.. broadcast = false thread = thread u = (16 / 27) * (uprev + 3 * dt * fsalfirst) + + (11 / 27) * (u_3 + (12 / 11) * dt * k3) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) cache.k3 .= k2 @@ -1168,11 +1200,13 @@ function initialize!(integrator, cache::SSPRK932ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end -@muladd function perform_step!(integrator, cache::SSPRK932ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::SSPRK932ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator dt_6 = dt / 6 dt_3 = dt / 3 @@ -1219,8 +1253,10 @@ end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) if integrator.opts.adaptive utilde = utilde - u - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.u = u @@ -1231,7 +1267,7 @@ function initialize!(integrator, cache::SSPRK932Cache) integrator.kshortsize = 1 resize!(integrator.k, integrator.kshortsize) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK932Cache, repeat_step = false) @@ -1243,58 +1279,60 @@ end # u1 f(fsalfirst, uprev, p, t) - @.. broadcast=false thread=thread u=uprev+dt_6*fsalfirst + @.. broadcast = false thread = thread u = uprev + dt_6 * fsalfirst stage_limiter!(u, integrator, p, t + dt_6) f(k, u, p, t + dt_6) # u2 - @.. broadcast=false thread=thread u=u+dt_6*k + @.. broadcast = false thread = thread u = u + dt_6 * k stage_limiter!(u, integrator, p, t + dt_3) f(k, u, p, t + dt_3) # u3 - @.. broadcast=false thread=thread u=u+dt_6*k + @.. broadcast = false thread = thread u = u + dt_6 * k stage_limiter!(u, integrator, p, t + dt_2) f(k, u, p, t + dt_2) # u4 - @.. broadcast=false thread=thread u=u+dt_6*k + @.. broadcast = false thread = thread u = u + dt_6 * k stage_limiter!(u, integrator, p, t + 2 * dt_3) f(k, u, p, t + 2 * dt_3) # u5 - @.. broadcast=false thread=thread u=u+dt_6*k + @.. broadcast = false thread = thread u = u + dt_6 * k stage_limiter!(u, integrator, p, t + 5 * dt_6) f(k, u, p, t + 5 * dt_6) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 6) # u6 - @.. broadcast=false thread=thread u=u+dt_6*k + @.. broadcast = false thread = thread u = u + dt_6 * k if integrator.opts.adaptive stage_limiter!(u, integrator, p, t + dt) f(k, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false thread=thread utilde=(uprev+6*u+6*dt*k)/7 + @.. broadcast = false thread = thread utilde = (uprev + 6 * u + 6 * dt * k) / 7 end # u6* - @.. broadcast=false thread=thread u=(3*uprev+dt_2*integrator.fsalfirst+2*u)/ - 5 + @.. broadcast = false thread = thread u = (3 * uprev + dt_2 * integrator.fsalfirst + 2 * u) / + 5 stage_limiter!(u, integrator, p, t + dt_6) f(k, u, p, t + dt_2) # u7* - @.. broadcast=false thread=thread u=u+dt_6*k + @.. broadcast = false thread = thread u = u + dt_6 * k stage_limiter!(u, integrator, p, t + 2 * dt_3) f(k, u, p, t + 2 * dt_3) # u8* - @.. broadcast=false thread=thread u=u+dt_6*k + @.. broadcast = false thread = thread u = u + dt_6 * k stage_limiter!(u, integrator, p, t + 5 * dt_6) f(k, u, p, t + 5 * dt_6) # u9* - @.. broadcast=false thread=thread u=u+dt_6*k + @.. broadcast = false thread = thread u = u + dt_6 * k stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=utilde-u - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = utilde - u + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end @@ -1307,13 +1345,15 @@ function initialize!(integrator, cache::SSPRK54ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK54ConstantCache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator - (; β10, α20, α21, β21, α30, α32, β32, α40, α43, β43, - α52, α53, β53, α54, β54, c1, c2, c3, c4) = cache + (; + β10, α20, α21, β21, α30, α32, β32, α40, α43, β43, + α52, α53, β53, α54, β54, c1, c2, c3, c4, + ) = cache # u₁ integrator.fsalfirst = f(uprev, p, t) @@ -1341,35 +1381,37 @@ function initialize!(integrator, cache::SSPRK54Cache) integrator.kshortsize = 1 resize!(integrator.k, integrator.kshortsize) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK54Cache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator (; k, fsalfirst, k₃, u₂, u₃, tmp, stage_limiter!, step_limiter!, thread) = cache - (; β10, α20, α21, β21, α30, α32, β32, α40, α43, β43, - α52, α53, β53, α54, β54, c1, c2, c3, c4) = cache.tab + (; + β10, α20, α21, β21, α30, α32, β32, α40, α43, β43, + α52, α53, β53, α54, β54, c1, c2, c3, c4, + ) = cache.tab # u₁ f(fsalfirst, uprev, p, t) - @.. broadcast=false thread=thread u₂=uprev+β10*dt*fsalfirst + @.. broadcast = false thread = thread u₂ = uprev + β10 * dt * fsalfirst stage_limiter!(u₂, integrator, p, t + c1 * dt) f(k, u₂, p, t + c1 * dt) # u₂ - @.. broadcast=false thread=thread u₂=α20*uprev+α21*u₂+β21*dt*k + @.. broadcast = false thread = thread u₂ = α20 * uprev + α21 * u₂ + β21 * dt * k stage_limiter!(u₂, integrator, p, t + c2 * dt) f(k, u₂, p, t + c2 * dt) # u₃ - @.. broadcast=false thread=thread u₃=α30*uprev+α32*u₂+β32*dt*k + @.. broadcast = false thread = thread u₃ = α30 * uprev + α32 * u₂ + β32 * dt * k stage_limiter!(u₃, integrator, p, t + c3 * dt) f(k₃, u₃, p, t + c3 * dt) # u₄ -> stored as tmp - @.. broadcast=false thread=thread tmp=α40*uprev+α43*u₃+β43*dt*k₃ + @.. broadcast = false thread = thread tmp = α40 * uprev + α43 * u₃ + β43 * dt * k₃ stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k, tmp, p, t + c4 * dt) # u - @.. broadcast=false thread=thread u=α52*u₂+α53*u₃+β53*dt*k₃+α54*tmp+ - β54*dt*k + @.. broadcast = false thread = thread u = α52 * u₂ + α53 * u₃ + β53 * dt * k₃ + α54 * tmp + + β54 * dt * k stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 5) @@ -1383,11 +1425,13 @@ function initialize!(integrator, cache::SSPRK104ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end -@muladd function perform_step!(integrator, cache::SSPRK104ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::SSPRK104ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator dt_6 = dt / 6 dt_3 = dt / 3 @@ -1424,7 +1468,7 @@ function initialize!(integrator, cache::SSPRK104Cache) integrator.kshortsize = 1 resize!(integrator.k, integrator.kshortsize) - integrator.k[1] = integrator.fsalfirst + return integrator.k[1] = integrator.fsalfirst end @muladd function perform_step!(integrator, cache::SSPRK104Cache, repeat_step = false) @@ -1435,35 +1479,37 @@ end dt_2 = dt / 2 f(fsalfirst, uprev, p, t) - @.. broadcast=false thread=thread tmp=uprev+dt_6*fsalfirst + @.. broadcast = false thread = thread tmp = uprev + dt_6 * fsalfirst stage_limiter!(tmp, integrator, p, t + dt_6) f(k, tmp, p, t + dt_6) - @.. broadcast=false tmp=tmp+dt_6*k + @.. broadcast = false tmp = tmp + dt_6 * k stage_limiter!(tmp, integrator, p, t + dt_3) f(k, tmp, p, t + dt_3) - @.. broadcast=false thread=thread tmp=tmp+dt_6*k + @.. broadcast = false thread = thread tmp = tmp + dt_6 * k stage_limiter!(tmp, integrator, p, t + dt_2) f(k, tmp, p, t + dt_2) - @.. broadcast=false thread=thread u=tmp+dt_6*k + @.. broadcast = false thread = thread u = tmp + dt_6 * k stage_limiter!(u, integrator, p, t + 2 * dt_3) f(k₄, u, p, t + 2 * dt_3) - @.. broadcast=false thread=thread tmp=(3*uprev+2*u+2*dt_6*k₄)/5 + @.. broadcast = false thread = thread tmp = (3 * uprev + 2 * u + 2 * dt_6 * k₄) / 5 stage_limiter!(tmp, integrator, p, t + dt_3) f(k, tmp, p, t + dt_3) - @.. broadcast=false thread=thread tmp=tmp+dt_6*k + @.. broadcast = false thread = thread tmp = tmp + dt_6 * k stage_limiter!(tmp, integrator, p, t + dt_2) f(k, tmp, p, t + dt_2) - @.. broadcast=false thread=thread tmp=tmp+dt_6*k + @.. broadcast = false thread = thread tmp = tmp + dt_6 * k stage_limiter!(tmp, integrator, p, t + 2 * dt_3) f(k, tmp, p, t + 2 * dt_3) - @.. broadcast=false thread=thread tmp=tmp+dt_6*k + @.. broadcast = false thread = thread tmp = tmp + dt_6 * k stage_limiter!(tmp, integrator, p, t + 5 * dt_6) f(k, tmp, p, t + 5 * dt_6) - @.. broadcast=false thread=thread tmp=tmp+dt_6*k + @.. broadcast = false thread = thread tmp = tmp + dt_6 * k stage_limiter!(tmp, integrator, p, t + dt) f(k, tmp, p, t + dt) - @.. broadcast=false thread=thread u=(uprev+9*(u+dt_6*k₄)+ - 15*(tmp+dt_6*k))/25 + @.. broadcast = false thread = thread u = ( + uprev + 9 * (u + dt_6 * k₄) + + 15 * (tmp + dt_6 * k) + ) / 25 stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 10) @@ -1480,15 +1526,21 @@ function initialize!(integrator, cache::KYK2014DGSSPRK_3S2_ConstantCache) return nothing end -@muladd function perform_step!(integrator, cache::KYK2014DGSSPRK_3S2_ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::KYK2014DGSSPRK_3S2_ConstantCache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; α_10, α_20, α_21, α_30, α_32, β_10, β_21, β_30, β_32, c_1, c_2) = cache u_1 = α_10 * uprev + dt * β_10 * integrator.fsalfirst - u_2 = (α_20 * uprev + - α_21 * u_1 + dt * β_21 * f(u_1, p, t + c_1 * dt)) - integrator.u = (α_30 * uprev + dt * β_30 * integrator.fsalfirst + - α_32 * u_2 + dt * β_32 * f(u_2, p, t + c_2 * dt)) + u_2 = ( + α_20 * uprev + + α_21 * u_1 + dt * β_21 * f(u_1, p, t + c_1 * dt) + ) + integrator.u = ( + α_30 * uprev + dt * β_30 * integrator.fsalfirst + + α_32 * u_2 + dt * β_32 * f(u_2, p, t + c_2 * dt) + ) integrator.k[1] = integrator.fsalfirst integrator.k[2] = f(integrator.u, p, t + dt) # For interpolation, then FSAL'd OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) @@ -1508,22 +1560,28 @@ function initialize!(integrator, cache::KYK2014DGSSPRK_3S2_Cache) return nothing end -@muladd function perform_step!(integrator, cache::KYK2014DGSSPRK_3S2_Cache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::KYK2014DGSSPRK_3S2_Cache, + repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator (; k, fsalfirst, u_1, u_2, kk_1, kk_2, stage_limiter!, step_limiter!, thread) = cache (; α_10, α_20, α_21, α_30, α_32, β_10, β_21, β_30, β_32, c_1, c_2) = cache.tab - @.. broadcast=false thread=thread u_1=α_10*uprev+dt*β_10*integrator.fsalfirst + @.. broadcast = false thread = thread u_1 = α_10 * uprev + dt * β_10 * integrator.fsalfirst stage_limiter!(u_1, integrator, p, t + c_1 * dt) f(kk_1, u_1, p, t + c_1 * dt) - @.. broadcast=false thread=thread u_2=(α_20*uprev+ - α_21*u_1+dt*β_21*kk_1) + @.. broadcast = false thread = thread u_2 = ( + α_20 * uprev + + α_21 * u_1 + dt * β_21 * kk_1 + ) stage_limiter!(u_2, integrator, p, t + c_2 * dt) f(kk_2, u_2, p, t + c_2 * dt) - @.. broadcast=false thread=thread u=(α_30*uprev+ - dt*β_30*integrator.fsalfirst+ - α_32*u_2+dt*β_32*kk_2) + @.. broadcast = false thread = thread u = ( + α_30 * uprev + + dt * β_30 * integrator.fsalfirst + + α_32 * u_2 + dt * β_32 * kk_2 + ) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) f(integrator.k[2], u, p, t + dt) # For interpolation, then FSAL'd diff --git a/lib/OrdinaryDiffEqSSPRK/test/allocation_tests.jl b/lib/OrdinaryDiffEqSSPRK/test/allocation_tests.jl index 5ca72c3bff..e50ac7ffd4 100644 --- a/lib/OrdinaryDiffEqSSPRK/test/allocation_tests.jl +++ b/lib/OrdinaryDiffEqSSPRK/test/allocation_tests.jl @@ -15,25 +15,27 @@ These tests verify that the step! operation does not allocate during stepping. du[2] = -1.5 * u[2] end prob = ODEProblem(simple_system!, [1.0, 1.0], (0.0, 1.0)) - + # Test all exported SSPRK solvers for allocation-free behavior - ssprk_solvers = [SSPRK53_2N2(), SSPRK22(), SSPRK53(), SSPRK63(), SSPRK83(), SSPRK43(), SSPRK432(), SSPRKMSVS32(), - SSPRK54(), SSPRK53_2N1(), SSPRK104(), SSPRK932(), SSPRKMSVS43(), SSPRK73(), SSPRK53_H(), - SSPRK33(), KYKSSPRK42(), KYK2014DGSSPRK_3S2()] - + ssprk_solvers = [ + SSPRK53_2N2(), SSPRK22(), SSPRK53(), SSPRK63(), SSPRK83(), SSPRK43(), SSPRK432(), SSPRKMSVS32(), + SSPRK54(), SSPRK53_2N1(), SSPRK104(), SSPRK932(), SSPRKMSVS43(), SSPRK73(), SSPRK53_H(), + SSPRK33(), KYKSSPRK42(), KYK2014DGSSPRK_3S2(), + ] + @testset "SSPRK Solver Allocation Analysis" begin for solver in ssprk_solvers @testset "$(typeof(solver)) allocation check" begin - integrator = init(prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) + integrator = init(prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) step!(integrator) # Setup step may allocate - + # Use AllocCheck to verify step! is allocation-free allocs = check_allocs(step!, (typeof(integrator),)) - + # These solvers should be allocation-free, but mark as broken for now # to verify with AllocCheck (more accurate than @allocated) @test_broken length(allocs) == 0 - + if length(allocs) > 0 println("AllocCheck found $(length(allocs)) allocation sites in $(typeof(solver)) step!:") for (i, alloc) in enumerate(allocs[1:min(3, end)]) # Show first 3 @@ -45,4 +47,4 @@ These tests verify that the step! operation does not allocate during stepping. end end end -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqSSPRK/test/jet.jl b/lib/OrdinaryDiffEqSSPRK/test/jet.jl index 99102b7790..da9ad417c8 100644 --- a/lib/OrdinaryDiffEqSSPRK/test/jet.jl +++ b/lib/OrdinaryDiffEqSSPRK/test/jet.jl @@ -7,8 +7,9 @@ using Test @testset "JET Tests" begin # Test package for typos - now passing test_package( - OrdinaryDiffEqSSPRK, target_defined_modules = true, mode = :typo) - + OrdinaryDiffEqSSPRK, target_defined_modules = true, mode = :typo + ) + # Test individual solver type stability @testset "Solver Type Stability Tests" begin # Test problem @@ -17,17 +18,19 @@ using Test du[2] = -1.5 * u[2] end prob = ODEProblem(simple_system!, [1.0, 1.0], (0.0, 1.0)) - + # Test main SSPRK solvers (mark as broken) - ssprk_solvers = [SSPRK22(), SSPRK33(), SSPRK43(), SSPRK432(), SSPRKMSVS32(), SSPRKMSVS43(), - SSPRK932(), SSPRK54(), SSPRK73(), SSPRK83(), SSPRK63()] - + ssprk_solvers = [ + SSPRK22(), SSPRK33(), SSPRK43(), SSPRK432(), SSPRKMSVS32(), SSPRKMSVS43(), + SSPRK932(), SSPRK54(), SSPRK73(), SSPRK83(), SSPRK63(), + ] + for solver in ssprk_solvers @testset "$(typeof(solver)) type stability" begin try - @test_opt broken=true init(prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) - integrator = init(prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) - @test_opt broken=true step!(integrator) + @test_opt broken = true init(prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) + integrator = init(prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) + @test_opt broken = true step!(integrator) catch e @test_broken false # Mark as broken if solver fails to initialize println("$(typeof(solver)) failed with: $e") diff --git a/lib/OrdinaryDiffEqSSPRK/test/ode_ssprk_tests.jl b/lib/OrdinaryDiffEqSSPRK/test/ode_ssprk_tests.jl index 8a29a3a764..1a73879c76 100644 --- a/lib/OrdinaryDiffEqSSPRK/test/ode_ssprk_tests.jl +++ b/lib/OrdinaryDiffEqSSPRK/test/ode_ssprk_tests.jl @@ -11,23 +11,33 @@ f = (u, p, t) -> cos(t) prob_ode_sin = ODEProblem(ODEFunction(f; analytic = (u0, p, t) -> sin(t)), 0.0, (0.0, 1.0)) f = (du, u, p, t) -> du[1] = cos(t) -prob_ode_sin_inplace = ODEProblem(ODEFunction(f; analytic = (u0, p, t) -> [sin(t)]), [0.0], - (0.0, 1.0)) +prob_ode_sin_inplace = ODEProblem( + ODEFunction(f; analytic = (u0, p, t) -> [sin(t)]), [0.0], + (0.0, 1.0) +) f = (u, p, t) -> sin(u) prob_ode_nonlinear = ODEProblem( - ODEFunction(f; - analytic = (u0, p, t) -> 2 * acot(exp(-t) * - cot(0.5))), 1.0, - (0.0, 0.5)) + ODEFunction( + f; + analytic = (u0, p, t) -> 2 * acot( + exp(-t) * + cot(0.5) + ) + ), 1.0, + (0.0, 0.5) +) f = (du, u, p, t) -> du[1] = sin(u[1]) prob_ode_nonlinear_inplace = ODEProblem( - ODEFunction(f; + ODEFunction( + f; analytic = (u0, p, t) -> [ - 2 * acot(exp(-t) * cot(0.5)) - ]), - [1.0], (0.0, 0.5)) + 2 * acot(exp(-t) * cot(0.5)), + ] + ), + [1.0], (0.0, 0.5) +) test_problems_only_time = [prob_ode_sin, prob_ode_sin_inplace] test_problems_linear = [prob_ode_linear, prob_ode_2Dlinear, prob_ode_bigfloat2Dlinear] @@ -37,7 +47,7 @@ f_ssp = (u, p, t) -> begin sin(10t) * u * (1 - u) end test_problem_ssp = ODEProblem(f_ssp, 0.1, (0.0, 8.0)) -test_problem_ssp_long = ODEProblem(f_ssp, 0.1, (0.0, 1.e3)) +test_problem_ssp_long = ODEProblem(f_ssp, 0.1, (0.0, 1.0e3)) f_ssp_inplace = (du, u, p, t) -> begin @. du = sin(10t) * u * (1 - u) @@ -54,52 +64,64 @@ println("SSPRK22") alg = SSPRK22() for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end # test SSP coefficient -sol = solve(test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), - dense = false) +sol = solve( + test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), + dense = false +) @test all(sol.u .>= 0) # test SSP property of dense output sol = solve(test_problem_ssp, alg, dt = 1.0) -@test mapreduce(t -> all(0 .<= sol(t) .<= 1), (u, v) -> u && v, - range(0, stop = 8, length = 50), init = true) +@test mapreduce( + t -> all(0 .<= sol(t) .<= 1), (u, v) -> u && v, + range(0, stop = 8, length = 50), init = true +) sol = solve(test_problem_ssp_inplace, alg, dt = 1.0) -@test mapreduce(t -> all(0 .<= sol(t) .<= 1), (u, v) -> u && v, - range(0, stop = 8, length = 50), init = true) +@test mapreduce( + t -> all(0 .<= sol(t) .<= 1), (u, v) -> u && v, + range(0, stop = 8, length = 50), init = true +) # test storage -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 println("KYKSSPRK42") alg = KYKSSPRK42() for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end # test SSP coefficient -sol = solve(test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), - dense = false) +sol = solve( + test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), + dense = false +) @test all(sol.u .>= 0) println("SSPRK33") @@ -112,81 +134,103 @@ for prob in test_problems_only_time end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end # test SSP coefficient -sol = solve(test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), - dense = false) +sol = solve( + test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), + dense = false +) @test all(sol.u .>= 0) # test SSP property of dense output sol = solve(test_problem_ssp, alg, dt = 1.0) -@test mapreduce(t -> all(0 .<= sol(t) .<= 1), (u, v) -> u && v, - range(0, stop = 8, length = 50), init = true) +@test mapreduce( + t -> all(0 .<= sol(t) .<= 1), (u, v) -> u && v, + range(0, stop = 8, length = 50), init = true +) sol = solve(test_problem_ssp_inplace, alg, dt = 1.0) -@test mapreduce(t -> all(0 .<= sol(t) .<= 1), (u, v) -> u && v, - range(0, stop = 8, length = 50), init = true) +@test mapreduce( + t -> all(0 .<= sol(t) .<= 1), (u, v) -> u && v, + range(0, stop = 8, length = 50), init = true +) # test storage -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 println("SSPRK53") alg = SSPRK53() for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end # test SSP coefficient -sol = solve(test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), - dense = false) +sol = solve( + test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), + dense = false +) @test all(sol.u .>= 0) # test storage -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 println("SSPRK53_2N1") alg = SSPRK53_2N1() for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end # test SSP coefficient -sol = solve(test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), - dense = false) +sol = solve( + test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), + dense = false +) @test all(sol.u .>= 0) # test storage -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 # for SSPRK53_2N2 to be in asymptotic range @@ -195,26 +239,32 @@ println("SSPRK53_2N2") alg = SSPRK53_2N2() for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end # test SSP coefficient -sol = solve(test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), - dense = false) +sol = solve( + test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), + dense = false +) @test all(sol.u .>= 0) # test storage -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 3 dts = 1 .// 2 .^ (9:-1:5) @@ -222,26 +272,32 @@ println("SSPRK53_H") alg = SSPRK53_H() for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=0.4 + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = 0.4 end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=0.4 + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = 0.4 end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=0.4 + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = 0.4 end # test SSP coefficient -sol = solve(test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), - dense = false) +sol = solve( + test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), + dense = false +) @test all(sol.u .>= 0) # test storage -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 4 #reverting back to original dts @@ -250,57 +306,63 @@ dts = 1 .// 2 .^ (8:-1:4) alg = SSPRK63() for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end # test SSP coefficient -sol = solve(test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), - dense = false) +sol = solve( + test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), + dense = false +) @test all(sol.u .>= 0) println("SSPRK73") alg = SSPRK73() for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end # test SSP coefficient -sol = solve(test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), - dense = false) +sol = solve( + test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), + dense = false +) @test all(sol.u .>= 0) println("SSPRK83") alg = SSPRK83() for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end # test SSP coefficient -sol = solve(test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), - dense = false) +sol = solve( + test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), + dense = false +) @test all(sol.u .>= 0) println("SSPRK43") @@ -312,29 +374,39 @@ for prob in test_problems_only_time end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end # test SSP coefficient -sol = solve(test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), - dense = false) +sol = solve( + test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), + dense = false +) @test all(sol.u .>= 0) # test SSP property of dense output sol = solve(test_problem_ssp, alg, dt = 8 / 5, adaptive = false) -@test mapreduce(t -> all(0 .<= sol(t) .<= 1), (u, v) -> u && v, - range(0, stop = 8, length = 50), init = true) +@test mapreduce( + t -> all(0 .<= sol(t) .<= 1), (u, v) -> u && v, + range(0, stop = 8, length = 50), init = true +) sol = solve(test_problem_ssp_inplace, alg, dt = 8 / 5, adaptive = false) -@test mapreduce(t -> all(0 .<= sol(t) .<= 1), (u, v) -> u && v, - range(0, stop = 8, length = 50), init = true) +@test mapreduce( + t -> all(0 .<= sol(t) .<= 1), (u, v) -> u && v, + range(0, stop = 8, length = 50), init = true +) # test storage -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 println("SSPRK432") @@ -346,54 +418,64 @@ for prob in test_problems_only_time end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end # test SSP coefficient -sol = solve(test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), - dense = false) +sol = solve( + test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), + dense = false +) @test all(sol.u .>= 0) # test SSP property of dense output sol = solve(test_problem_ssp, alg, dt = 8 / 5, adaptive = false) -@test mapreduce(t -> all(0 .<= sol(t) .<= 1), (u, v) -> u && v, - range(0, stop = 8, length = 50), init = true) +@test mapreduce( + t -> all(0 .<= sol(t) .<= 1), (u, v) -> u && v, + range(0, stop = 8, length = 50), init = true +) sol = solve(test_problem_ssp_inplace, alg, dt = 8 / 5, adaptive = false) -@test mapreduce(t -> all(0 .<= sol(t) .<= 1), (u, v) -> u && v, - range(0, stop = 8, length = 50), init = true) +@test mapreduce( + t -> all(0 .<= sol(t) .<= 1), (u, v) -> u && v, + range(0, stop = 8, length = 50), init = true +) # test storage -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 alg = SSPRKMSVS32() for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end println("SSPRKMSVS43") alg = SSPRKMSVS43() for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) #shows superconvergence to 4th order @@ -404,26 +486,32 @@ println("SSPRK932") alg = SSPRK932() for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end # test SSP coefficient -sol = solve(test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), - dense = false, maxiters = 1e7) +sol = solve( + test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), + dense = false, maxiters = 1.0e7 +) @test all(sol.u .>= 0) # test storage -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 println("SSPRK54") @@ -435,7 +523,7 @@ for prob in test_problems_only_time end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) @@ -443,34 +531,42 @@ for prob in test_problems_nonlinear @test abs(sim.𝒪est[:final] - 0.5 - OrdinaryDiffEqSSPRK.alg_order(alg)) < testTol end # test SSP coefficient -sol = solve(test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), - dense = false) +sol = solve( + test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), + dense = false +) @test all(sol.u .>= 0) println("SSPRK104") alg = SSPRK104() for prob in test_problems_only_time sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_linear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end for prob in test_problems_nonlinear sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈OrdinaryDiffEqSSPRK.alg_order(alg) atol=testTol + @test sim.𝒪est[:final] ≈ OrdinaryDiffEqSSPRK.alg_order(alg) atol = testTol end # test SSP coefficient -sol = solve(test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), - dense = false) +sol = solve( + test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), + dense = false +) @test all(sol.u .>= 0) # test storage -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 6 -integ = init(prob_ode_large, alg, dt = 1.e-2, save_start = false, save_end = false, - save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true)) +integ = init( + prob_ode_large, alg, dt = 1.0e-2, save_start = false, save_end = false, + save_everystep = false, alias = ODEAliasSpecifier(alias_u0 = true) +) @test Base.summarysize(integ) ÷ Base.summarysize(u0_large) <= 5 println("KYK2014DGSSPRK_3S2") @@ -488,8 +584,10 @@ for prob in test_problems_nonlinear @test abs(sim.𝒪est[:final] - OrdinaryDiffEqSSPRK.alg_order(alg)) < testTol end # test SSP coefficient -sol = solve(test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), - dense = false) +sol = solve( + test_problem_ssp_long, alg, dt = OrdinaryDiffEqSSPRK.ssp_coefficient(alg), + dense = false +) @test all(sol.u .>= 0) @testset "VectorOfArray/StructArray compatibility" begin diff --git a/lib/OrdinaryDiffEqSSPRK/test/qa.jl b/lib/OrdinaryDiffEqSSPRK/test/qa.jl index ae57485288..96363e95ad 100644 --- a/lib/OrdinaryDiffEqSSPRK/test/qa.jl +++ b/lib/OrdinaryDiffEqSSPRK/test/qa.jl @@ -5,4 +5,4 @@ using Aqua Aqua.test_all( OrdinaryDiffEqSSPRK ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqSSPRK/test/runtests.jl b/lib/OrdinaryDiffEqSSPRK/test/runtests.jl index 63814c4ac9..6a3ee829c9 100644 --- a/lib/OrdinaryDiffEqSSPRK/test/runtests.jl +++ b/lib/OrdinaryDiffEqSSPRK/test/runtests.jl @@ -7,4 +7,4 @@ if isempty(VERSION.prerelease) @time @safetestset "JET Tests" include("jet.jl") @time @safetestset "Aqua" include("qa.jl") @time @safetestset "Allocation Tests" include("allocation_tests.jl") -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqStabilizedIRK/src/OrdinaryDiffEqStabilizedIRK.jl b/lib/OrdinaryDiffEqStabilizedIRK/src/OrdinaryDiffEqStabilizedIRK.jl index 4aa0baf01a..295ad21042 100644 --- a/lib/OrdinaryDiffEqStabilizedIRK/src/OrdinaryDiffEqStabilizedIRK.jl +++ b/lib/OrdinaryDiffEqStabilizedIRK/src/OrdinaryDiffEqStabilizedIRK.jl @@ -1,21 +1,21 @@ module OrdinaryDiffEqStabilizedIRK import OrdinaryDiffEqCore: alg_order, alg_maximum_order, - calculate_residuals!, - beta2_default, beta1_default, gamma_default, issplit, - initialize!, perform_step!, unwrap_alg, - calculate_residuals, fac_default_gamma, - OrdinaryDiffEqAlgorithm, OrdinaryDiffEqNewtonAdaptiveAlgorithm, - OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, - OrdinaryDiffEqAdaptiveAlgorithm, - OrdinaryDiffEqAdaptiveImplicitAlgorithm, - alg_cache, _unwrap_val, DEFAULT_PRECS, @cache, - _reshape, _vec, full_cache, get_fsalfirstlast, - generic_solver_docstring, _bool_to_ADType, _process_AD_choice + calculate_residuals!, + beta2_default, beta1_default, gamma_default, issplit, + initialize!, perform_step!, unwrap_alg, + calculate_residuals, fac_default_gamma, + OrdinaryDiffEqAlgorithm, OrdinaryDiffEqNewtonAdaptiveAlgorithm, + OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, + OrdinaryDiffEqAdaptiveAlgorithm, + OrdinaryDiffEqAdaptiveImplicitAlgorithm, + alg_cache, _unwrap_val, DEFAULT_PRECS, @cache, + _reshape, _vec, full_cache, get_fsalfirstlast, + generic_solver_docstring, _bool_to_ADType, _process_AD_choice using OrdinaryDiffEqDifferentiation: dolinsolve, update_W! using OrdinaryDiffEqNonlinearSolve: NLNewton, nlsolve!, isnewton, build_nlsolver, - markfirststage!, du_alias_or_new, get_W + markfirststage!, du_alias_or_new, get_W using OrdinaryDiffEqStabilizedRK: ESERK4, ESERK5, RKC, SERK2 diff --git a/lib/OrdinaryDiffEqStabilizedIRK/src/algorithms.jl b/lib/OrdinaryDiffEqStabilizedIRK/src/algorithms.jl index 719cc9e566..36fb5374f4 100644 --- a/lib/OrdinaryDiffEqStabilizedIRK/src/algorithms.jl +++ b/lib/OrdinaryDiffEqStabilizedIRK/src/algorithms.jl @@ -1,4 +1,5 @@ -@doc generic_solver_docstring("Implicit Runge-Kutta-Chebyshev method.", +@doc generic_solver_docstring( + "Implicit Runge-Kutta-Chebyshev method.", "IRKC", "Stabilized Implicit Runge Kutta method.", "REF TBD", @@ -6,9 +7,10 @@ `(integrator) -> integrator.eigen_est = upper_bound`, where `upper_bound` is an estimated upper bound on the spectral radius of the Jacobian matrix. If `eigen_est` is not provided, `upper_bound` will be estimated using the power iteration.", - "eigen_est = nothing,") + "eigen_est = nothing," +) struct IRKC{CS, AD, F, F2, P, FDT, ST, CJ, K, T, E} <: - OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} + OrdinaryDiffEqNewtonAdaptiveAlgorithm{CS, AD, FDT, ST, CJ} linsolve::F nlsolve::F2 precs::P @@ -25,11 +27,16 @@ function IRKC(; concrete_jac = nothing, diff_type = Val{:forward}(), linsolve = nothing, precs = DEFAULT_PRECS, nlsolve = NLNewton(), κ = nothing, tol = nothing, - extrapolant = :linear, controller = :Standard, eigen_est = nothing) + extrapolant = :linear, controller = :Standard, eigen_est = nothing + ) AD_choice, chunk_size, diff_type = _process_AD_choice(autodiff, chunk_size, diff_type) - IRKC{_unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), + return IRKC{ + _unwrap_val(chunk_size), typeof(AD_choice), typeof(linsolve), typeof(nlsolve), typeof(precs), diff_type, _unwrap_val(standardtag), _unwrap_val(concrete_jac), - typeof(κ), typeof(tol), typeof(eigen_est)}(linsolve, nlsolve, precs, κ, tol, - extrapolant, controller, eigen_est, AD_choice) + typeof(κ), typeof(tol), typeof(eigen_est), + }( + linsolve, nlsolve, precs, κ, tol, + extrapolant, controller, eigen_est, AD_choice + ) end diff --git a/lib/OrdinaryDiffEqStabilizedIRK/src/irkc_caches.jl b/lib/OrdinaryDiffEqStabilizedIRK/src/irkc_caches.jl index 60239258c9..bb14e51c8d 100644 --- a/lib/OrdinaryDiffEqStabilizedIRK/src/irkc_caches.jl +++ b/lib/OrdinaryDiffEqStabilizedIRK/src/irkc_caches.jl @@ -7,7 +7,7 @@ end @cache mutable struct IRKCCache{uType, rateType, uNoUnitsType, N, C <: IRKCConstantCache} <: - OrdinaryDiffEqMutableCache + OrdinaryDiffEqMutableCache u::uType uprev::uType gprev::uType @@ -24,29 +24,37 @@ end end function get_fsalfirstlast(cache::IRKCCache, u) - (cache.fsalfirst, du_alias_or_new(cache.nlsolver, cache.fsalfirst)) + return (cache.fsalfirst, du_alias_or_new(cache.nlsolver, cache.fsalfirst)) end -function alg_cache(alg::IRKC, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::IRKC, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1.0, 1.0 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(false) + ) zprev = u du₁ = rate_prototype du₂ = rate_prototype - IRKCConstantCache(50, zprev, nlsolver, du₁, du₂) + return IRKCConstantCache(50, zprev, nlsolver, du₁, du₂) end -function alg_cache(alg::IRKC, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::IRKC, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} γ, c = 1.0, 1.0 - nlsolver = build_nlsolver(alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, - uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true)) + nlsolver = build_nlsolver( + alg, u, uprev, p, t, dt, f, rate_prototype, uEltypeNoUnits, + uBottomEltypeNoUnits, tTypeNoUnits, γ, c, Val(true) + ) gprev = zero(u) gprev2 = zero(u) @@ -60,6 +68,8 @@ function alg_cache(alg::IRKC, u, rate_prototype, ::Type{uEltypeNoUnits}, du₁ = zero(rate_prototype) du₂ = zero(rate_prototype) constantcache = IRKCConstantCache(50, zprev, nlsolver, du₁, du₂) - IRKCCache(u, uprev, gprev, gprev2, fsalfirst, f1ⱼ₋₁, f1ⱼ₋₂, f2ⱼ₋₁, atmp, nlsolver, du₁, - du₂, constantcache) + return IRKCCache( + u, uprev, gprev, gprev2, fsalfirst, f1ⱼ₋₁, f1ⱼ₋₂, f2ⱼ₋₁, atmp, nlsolver, du₁, + du₂, constantcache + ) end diff --git a/lib/OrdinaryDiffEqStabilizedIRK/src/irkc_perform_step.jl b/lib/OrdinaryDiffEqStabilizedIRK/src/irkc_perform_step.jl index 3f0df16e82..2cc83fbeb7 100644 --- a/lib/OrdinaryDiffEqStabilizedIRK/src/irkc_perform_step.jl +++ b/lib/OrdinaryDiffEqStabilizedIRK/src/irkc_perform_step.jl @@ -12,7 +12,7 @@ function initialize!(integrator, cache::IRKCConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end function perform_step!(integrator, cache::IRKCConstantCache, repeat_step = false) @@ -117,15 +117,17 @@ function perform_step!(integrator, cache::IRKCConstantCache, repeat_step = false update_W!(integrator, cache, dt, false) tmp = dt * (0.5 * (cache.du₂ - du₂) + (0.5 - μs₁) * (cache.du₁ - du₁)) tmp = _reshape(get_W(nlsolver) \ _vec(tmp), axes(tmp)) - atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.fsallast = cache.du₁ + cache.du₂ integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end function initialize!(integrator, cache::IRKCCache) @@ -139,7 +141,7 @@ function initialize!(integrator, cache::IRKCCache) f2(cache.du₂, uprev, p, t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.stats.nf2 += 1 - @.. broadcast=false integrator.fsalfirst=cache.du₁ + cache.du₂ + return @.. broadcast = false integrator.fsalfirst = cache.du₁ + cache.du₂ end function perform_step!(integrator, cache::IRKCCache, repeat_step = false) @@ -168,7 +170,7 @@ function perform_step!(integrator, cache::IRKCCache, repeat_step = false) #stage-1 f1ⱼ₋₂ = du₁ - @.. broadcast=false gprev2=uprev + @.. broadcast = false gprev2 = uprev μs = ω₁ * Bⱼ₋₁ μs₁ = μs @@ -178,16 +180,16 @@ function perform_step!(integrator, cache::IRKCCache, repeat_step = false) # else # :constant # @.. broadcast=false z = zero(eltype(u)) # end - @.. broadcast=false nlsolver.z=dt * du₁ + @.. broadcast = false nlsolver.z = dt * du₁ - @.. broadcast=false nlsolver.tmp=uprev + dt * μs₁ * du₂ + @.. broadcast = false nlsolver.tmp = uprev + dt * μs₁ * du₂ nlsolver.γ = μs₁ nlsolver.c = μs markfirststage!(nlsolver) z = nlsolve!(nlsolver, integrator, cache, false) # ignoring newton method's convergence failure # nlsolvefail(nlsolver) && return - @.. broadcast=false gprev=nlsolver.tmp + μs₁ * nlsolver.z + @.. broadcast = false gprev = nlsolver.tmp + μs₁ * nlsolver.z Cⱼ₋₂ = zero(eltype(u)) Cⱼ₋₁ = μs @@ -214,17 +216,17 @@ function perform_step!(integrator, cache::IRKCCache, repeat_step = false) f2(f2ⱼ₋₁, gprev, p, t + Cⱼ₋₁ * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.stats.nf2 += 1 - @.. broadcast=false nlsolver.tmp=(1 - μ - ν) * uprev + μ * gprev + ν * gprev2 + dt * μs * f2ⱼ₋₁ + dt * νs * du₂ + (νs - (1 - μ - ν) * μs₁) * dt * du₁ - ν * μs₁ * dt * f1ⱼ₋₂ - @.. broadcast=false nlsolver.z=dt * f1ⱼ₋₁ + @.. broadcast = false nlsolver.tmp = (1 - μ - ν) * uprev + μ * gprev + ν * gprev2 + dt * μs * f2ⱼ₋₁ + dt * νs * du₂ + (νs - (1 - μ - ν) * μs₁) * dt * du₁ - ν * μs₁ * dt * f1ⱼ₋₂ + @.. broadcast = false nlsolver.z = dt * f1ⱼ₋₁ nlsolver.c = Cⱼ z = nlsolve!(nlsolver, integrator, cache, false) # nlsolvefail(nlsolver) && return - @.. broadcast=false u=nlsolver.tmp + μs₁ * nlsolver.z + @.. broadcast = false u = nlsolver.tmp + μs₁ * nlsolver.z if (iter < mdeg) - @.. broadcast=false f1ⱼ₋₂=f1ⱼ₋₁ - @.. broadcast=false gprev2=gprev - @.. broadcast=false gprev=u + @.. broadcast = false f1ⱼ₋₂ = f1ⱼ₋₁ + @.. broadcast = false gprev2 = gprev + @.. broadcast = false gprev = u Cⱼ₋₂ = Cⱼ₋₁ Cⱼ₋₁ = Cⱼ Bⱼ₋₂ = Bⱼ₋₁ @@ -238,8 +240,8 @@ function perform_step!(integrator, cache::IRKCCache, repeat_step = false) end end - @.. broadcast=false f1ⱼ₋₁=du₁ - @.. broadcast=false f2ⱼ₋₁=du₂ + @.. broadcast = false f1ⱼ₋₁ = du₁ + @.. broadcast = false f2ⱼ₋₁ = du₂ f1(du₁, u, p, t + dt) f2(du₂, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) @@ -247,18 +249,20 @@ function perform_step!(integrator, cache::IRKCCache, repeat_step = false) # error estimate if isnewton(nlsolver) && integrator.opts.adaptive update_W!(integrator, cache, dt, false) - @.. broadcast=false gprev=dt * 0.5 * (du₂ - f2ⱼ₋₁) + dt * (0.5 - μs₁) * (du₁ - f1ⱼ₋₁) + @.. broadcast = false gprev = dt * 0.5 * (du₂ - f2ⱼ₋₁) + dt * (0.5 - μs₁) * (du₁ - f1ⱼ₋₁) linsolve = nlsolver.cache.linsolve linres = dolinsolve(integrator, linsolve; b = _vec(gprev), linu = _vec(tmp)) - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end - @.. broadcast=false integrator.fsallast=du₁ + du₂ + @.. broadcast = false integrator.fsallast = du₁ + du₂ integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - integrator.u = u + return integrator.u = u end diff --git a/lib/OrdinaryDiffEqStabilizedIRK/src/irkc_utils.jl b/lib/OrdinaryDiffEqStabilizedIRK/src/irkc_utils.jl index afe36d5256..8636144643 100644 --- a/lib/OrdinaryDiffEqStabilizedIRK/src/irkc_utils.jl +++ b/lib/OrdinaryDiffEqStabilizedIRK/src/irkc_utils.jl @@ -65,8 +65,8 @@ function maxeig!(integrator, cache::OrdinaryDiffEqConstantCache) # Convergence if integrator.alg isa IRKCAlgs # To match the constants given in the paper if iter >= 2 && - abs(eig_prev - integrator.eigen_est) < - max(integrator.eigen_est, 1.0 / integrator.opts.dtmax) * 0.01 + abs(eig_prev - integrator.eigen_est) < + max(integrator.eigen_est, 1.0 / integrator.opts.dtmax) * 0.01 integrator.eigen_est *= 1.2 # Store the eigenvector cache.zprev = z - uprev @@ -74,7 +74,7 @@ function maxeig!(integrator, cache::OrdinaryDiffEqConstantCache) end else if iter >= 2 && - abs(eig_prev - integrator.eigen_est) < integrator.eigen_est * 0.05 + abs(eig_prev - integrator.eigen_est) < integrator.eigen_est * 0.05 # Store the eigenvector cache.zprev = z - uprev return true @@ -115,17 +115,17 @@ function maxeig!(integrator, cache::OrdinaryDiffEqMutableCache) if isfirst if integrator.alg isa IRKCAlgs if integrator.alg isa IRKC - @.. broadcast=false z=cache.du₂ + @.. broadcast = false z = cache.du₂ else - @.. broadcast=false z=fsalfirst + @.. broadcast = false z = fsalfirst end else - @.. broadcast=false fz=fsalfirst + @.. broadcast = false fz = fsalfirst f(z, fz, p, t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end else - @.. broadcast=false z=ccache.zprev + @.. broadcast = false z = ccache.zprev end # Perturbation u_norm = integrator.opts.internalnorm(uprev, t) @@ -138,17 +138,17 @@ function maxeig!(integrator, cache::OrdinaryDiffEqMutableCache) if (!is_u_zero && !is_z_zero) dz_u = u_norm * sqrt_pert quot = dz_u / z_norm - @.. broadcast=false z=uprev + quot * z + @.. broadcast = false z = uprev + quot * z elseif !is_u_zero dz_u = u_norm * sqrt_pert - @.. broadcast=false z=uprev + uprev * dz_u + @.. broadcast = false z = uprev + uprev * dz_u elseif !is_z_zero dz_u = pert quot = dz_u / z_norm - @.. broadcast=false z*=quot + @.. broadcast = false z *= quot else dz_u = pert - @.. broadcast=false z=dz_u * one(eltype(z)) + @.. broadcast = false z = dz_u * one(eltype(z)) end # endif # Start power iteration integrator.eigen_est = 0 @@ -156,11 +156,11 @@ function maxeig!(integrator, cache::OrdinaryDiffEqMutableCache) if integrator.alg isa IRKC f.f2(fz, z, p, t) integrator.stats.nf2 += 1 - @.. broadcast=false atmp=fz - cache.du₂ + @.. broadcast = false atmp = fz - cache.du₂ else f(fz, z, p, t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false atmp=fz - fsalfirst + @.. broadcast = false atmp = fz - fsalfirst end Δ = integrator.opts.internalnorm(atmp, t) eig_prev = integrator.eigen_est @@ -168,25 +168,25 @@ function maxeig!(integrator, cache::OrdinaryDiffEqMutableCache) # Convergence if integrator.alg isa IRKCAlgs # To match the constants given in the paper if iter >= 2 && - abs(eig_prev - integrator.eigen_est) < - max(integrator.eigen_est, 1.0 / integrator.opts.dtmax) * 0.01 + abs(eig_prev - integrator.eigen_est) < + max(integrator.eigen_est, 1.0 / integrator.opts.dtmax) * 0.01 integrator.eigen_est *= 1.2 # Store the eigenvector - @.. broadcast=false ccache.zprev=z - uprev + @.. broadcast = false ccache.zprev = z - uprev return true end else if iter >= 2 && - abs(eig_prev - integrator.eigen_est) < integrator.eigen_est * 0.05 + abs(eig_prev - integrator.eigen_est) < integrator.eigen_est * 0.05 # Store the eigenvector - @.. broadcast=false ccache.zprev=z - uprev + @.. broadcast = false ccache.zprev = z - uprev return true end end # Next `z` if Δ != zero(Δ) quot = dz_u / Δ - @.. broadcast=false z=uprev + quot * atmp + @.. broadcast = false z = uprev + quot * atmp else # An arbitrary change on `z` nind = length(uprev) diff --git a/lib/OrdinaryDiffEqStabilizedIRK/test/irkc_tests.jl b/lib/OrdinaryDiffEqStabilizedIRK/test/irkc_tests.jl index 87a5ec3457..6726f88e86 100644 --- a/lib/OrdinaryDiffEqStabilizedIRK/test/irkc_tests.jl +++ b/lib/OrdinaryDiffEqStabilizedIRK/test/irkc_tests.jl @@ -17,12 +17,14 @@ using OrdinaryDiffEqStabilizedIRK: maxeig! eigm = maximum(abs.(eigvals(A))) maxeig!(integrator, integrator.cache) eigest = integrator.eigen_est - @test eigest≈eigm rtol=0.1eigm + @test eigest ≈ eigm rtol = 0.1eigm - A = A - 1e2I + A = A - 1.0e2I test_f1 = !iip ? (u, p, t) -> A * u : (du, u, p, t) -> mul!(du, A, u) - prob = SplitODEProblem{iip}(SplitFunction{iip}(test_f1, test_f2), ones(20), - (0.0, 1.0)) + prob = SplitODEProblem{iip}( + SplitFunction{iip}(test_f1, test_f2), ones(20), + (0.0, 1.0) + ) @test_nowarn solve(prob, alg) end end diff --git a/lib/OrdinaryDiffEqStabilizedIRK/test/jet.jl b/lib/OrdinaryDiffEqStabilizedIRK/test/jet.jl index 885c6e8e91..b7862f9dfe 100644 --- a/lib/OrdinaryDiffEqStabilizedIRK/test/jet.jl +++ b/lib/OrdinaryDiffEqStabilizedIRK/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqStabilizedIRK, target_defined_modules = true, mode = :typo) + OrdinaryDiffEqStabilizedIRK, target_defined_modules = true, mode = :typo + ) end diff --git a/lib/OrdinaryDiffEqStabilizedIRK/test/qa.jl b/lib/OrdinaryDiffEqStabilizedIRK/test/qa.jl index 8912b488b0..7f59882a00 100644 --- a/lib/OrdinaryDiffEqStabilizedIRK/test/qa.jl +++ b/lib/OrdinaryDiffEqStabilizedIRK/test/qa.jl @@ -5,4 +5,4 @@ using Aqua Aqua.test_all( OrdinaryDiffEqStabilizedIRK ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqStabilizedIRK/test/runtests.jl b/lib/OrdinaryDiffEqStabilizedIRK/test/runtests.jl index fcb0139b33..8fa20c5401 100644 --- a/lib/OrdinaryDiffEqStabilizedIRK/test/runtests.jl +++ b/lib/OrdinaryDiffEqStabilizedIRK/test/runtests.jl @@ -2,4 +2,4 @@ using SafeTestsets @time @safetestset "IRKC Tests" include("irkc_tests.jl") @time @safetestset "JET Tests" include("jet.jl") -@time @safetestset "Aqua" include("qa.jl") \ No newline at end of file +@time @safetestset "Aqua" include("qa.jl") diff --git a/lib/OrdinaryDiffEqStabilizedRK/src/OrdinaryDiffEqStabilizedRK.jl b/lib/OrdinaryDiffEqStabilizedRK/src/OrdinaryDiffEqStabilizedRK.jl index faaf8d862e..e0338f9b19 100644 --- a/lib/OrdinaryDiffEqStabilizedRK/src/OrdinaryDiffEqStabilizedRK.jl +++ b/lib/OrdinaryDiffEqStabilizedRK/src/OrdinaryDiffEqStabilizedRK.jl @@ -1,16 +1,16 @@ module OrdinaryDiffEqStabilizedRK import OrdinaryDiffEqCore: alg_order, alg_adaptive_order, calculate_residuals!, - beta2_default, beta1_default, gamma_default, - fac_default_gamma, has_dtnew_modification, - initialize!, perform_step!, unwrap_alg, - calculate_residuals, - OrdinaryDiffEqAlgorithm, ispredictive, - OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, - OrdinaryDiffEqAdaptiveAlgorithm, calc_dt_propose!, - alg_cache, _vec, _reshape, @cache, - constvalue, _unwrap_val, full_cache, get_fsalfirstlast, - generic_solver_docstring + beta2_default, beta1_default, gamma_default, + fac_default_gamma, has_dtnew_modification, + initialize!, perform_step!, unwrap_alg, + calculate_residuals, + OrdinaryDiffEqAlgorithm, ispredictive, + OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, + OrdinaryDiffEqAdaptiveAlgorithm, calc_dt_propose!, + alg_cache, _vec, _reshape, @cache, + constvalue, _unwrap_val, full_cache, get_fsalfirstlast, + generic_solver_docstring using FastBroadcast, MuladdMacro, RecursiveArrayTools import StaticArrays: SArray, MVector, SVector, @SVector, StaticArray, MMatrix, SA import OrdinaryDiffEqCore diff --git a/lib/OrdinaryDiffEqStabilizedRK/src/alg_utils.jl b/lib/OrdinaryDiffEqStabilizedRK/src/alg_utils.jl index b785e8e005..18396129e8 100644 --- a/lib/OrdinaryDiffEqStabilizedRK/src/alg_utils.jl +++ b/lib/OrdinaryDiffEqStabilizedRK/src/alg_utils.jl @@ -18,22 +18,38 @@ fac_default_gamma(alg::Union{RKC, SERK2}) = true has_dtnew_modification(alg::Union{ROCK2, ROCK4, SERK2, ESERK4, ESERK5}) = true function dtnew_modification(integrator, alg::ROCK2, dtnew) - min(dtnew, - typeof(dtnew)((((min(integrator.alg.max_stages, 200)^2) * 0.811 - - 1.5) / integrator.eigen_est))) + return min( + dtnew, + typeof(dtnew)( + ( + ( + (min(integrator.alg.max_stages, 200)^2) * 0.811 - + 1.5 + ) / integrator.eigen_est + ) + ) + ) end function dtnew_modification(integrator, alg::ROCK4, dtnew) - min(dtnew, - typeof(dtnew)((((min(integrator.alg.max_stages, 152)^2) * 0.353 - 3) / - integrator.eigen_est))) + return min( + dtnew, + typeof(dtnew)( + ( + ((min(integrator.alg.max_stages, 152)^2) * 0.353 - 3) / + integrator.eigen_est + ) + ) + ) end function dtnew_modification(integrator, alg::SERK2, dtnew) - min(dtnew, - typeof(dtnew)((0.8 * 250 * 250 / (integrator.eigen_est + 1)))) + return min( + dtnew, + typeof(dtnew)((0.8 * 250 * 250 / (integrator.eigen_est + 1))) + ) end function dtnew_modification(integrator, alg::ESERK4, dtnew) - min(dtnew, typeof(dtnew)((0.98 * 4000 * 4000 / integrator.eigen_est))) + return min(dtnew, typeof(dtnew)((0.98 * 4000 * 4000 / integrator.eigen_est))) end function dtnew_modification(integrator, alg::ESERK5, dtnew) - min(dtnew, typeof(dtnew)((0.98 * 2000 * 2000 / integrator.eigen_est))) + return min(dtnew, typeof(dtnew)((0.98 * 2000 * 2000 / integrator.eigen_est))) end diff --git a/lib/OrdinaryDiffEqStabilizedRK/src/algorithms.jl b/lib/OrdinaryDiffEqStabilizedRK/src/algorithms.jl index d74a71dc19..d52ed4316b 100644 --- a/lib/OrdinaryDiffEqStabilizedRK/src/algorithms.jl +++ b/lib/OrdinaryDiffEqStabilizedRK/src/algorithms.jl @@ -1,7 +1,6 @@ - @doc generic_solver_docstring( """High stability for real eigenvalues. Second order method. Exhibits high stability for real eigenvalues -and is smoothened to allow for moderate sized complex eigenvalues.""", + and is smoothened to allow for moderate sized complex eigenvalues.""", "ROCK2", "Stabilized Explicit Method.", """Assyr Abdulle, Alexei A. Medovikov. Second Order Chebyshev Methods based on Orthogonal Polynomials. @@ -18,19 +17,20 @@ and is smoothened to allow for moderate sized complex eigenvalues.""", min_stages = 0, max_stages = 200, eigen_est = nothing, - """) + """ +) struct ROCK2{E} <: OrdinaryDiffEqAdaptiveAlgorithm min_stages::Int max_stages::Int eigen_est::E end function ROCK2(; min_stages = 0, max_stages = 200, eigen_est = nothing) - ROCK2(min_stages, max_stages, eigen_est) + return ROCK2(min_stages, max_stages, eigen_est) end @doc generic_solver_docstring( """High stability for real eigenvalues. Fourth order method. Exhibits high stability for real eigenvalues -and is smoothened to allow for moderate sized complex eigenvalues.""", + and is smoothened to allow for moderate sized complex eigenvalues.""", "ROCK4", "Stabilized Explicit Method.", """Assyr Abdulle. Fourth Order Chebyshev Methods With Recurrence Relation. 2002 Society for @@ -48,14 +48,15 @@ and is smoothened to allow for moderate sized complex eigenvalues.""", min_stages = 0, max_stages = 152, eigen_est = nothing, - """) + """ +) struct ROCK4{E} <: OrdinaryDiffEqAdaptiveAlgorithm min_stages::Int max_stages::Int eigen_est::E end function ROCK4(; min_stages = 0, max_stages = 152, eigen_est = nothing) - ROCK4(min_stages, max_stages, eigen_est) + return ROCK4(min_stages, max_stages, eigen_est) end # SERK methods @@ -84,12 +85,13 @@ end """, """ eigen_est = nothing, - """) + """ +) function RKC end @doc generic_solver_docstring( """Fourth order method. Exhibits high stability for real eigenvalues -and is smoothened to allow for moderate sized complex eigenvalues.""", + and is smoothened to allow for moderate sized complex eigenvalues.""", "ESERK4", "Stabilized Explicit Method.", """J. Martín-Vaquero, B. Kleefeld. Extrapolated stabilized explicit Runge-Kutta methods, @@ -103,12 +105,13 @@ and is smoothened to allow for moderate sized complex eigenvalues.""", """, """ eigen_est = nothing, - """) + """ +) function ESERK4 end @doc generic_solver_docstring( """Fifth order method. Exhibits high stability for real eigenvalues -and is smoothened to allow for moderate sized complex eigenvalues.""", + and is smoothened to allow for moderate sized complex eigenvalues.""", "ESERK5", "Stabilized Explicit Method.", """J. Martín-Vaquero, A. Kleefeld. ESERK5: A fifth-order extrapolated stabilized explicit Runge-Kutta method, @@ -122,10 +125,12 @@ and is smoothened to allow for moderate sized complex eigenvalues.""", """, """ eigen_est = nothing, - """) + """ +) function ESERK5 end -@doc generic_solver_docstring("""Second order method.""", +@doc generic_solver_docstring( + """Second order method.""", "SERK2", "Stabilized Explicit Method.", """@article{kleefeld2013serk2v2, @@ -147,7 +152,8 @@ function ESERK5 end """ controller = :PI eigen_est = nothing, - """) + """ +) struct SERK2{E} <: OrdinaryDiffEqAdaptiveAlgorithm controller::Symbol eigen_est::E diff --git a/lib/OrdinaryDiffEqStabilizedRK/src/rkc_caches.jl b/lib/OrdinaryDiffEqStabilizedRK/src/rkc_caches.jl index e598d1243c..055e108724 100644 --- a/lib/OrdinaryDiffEqStabilizedRK/src/rkc_caches.jl +++ b/lib/OrdinaryDiffEqStabilizedRK/src/rkc_caches.jl @@ -14,7 +14,7 @@ mutable struct ROCK2ConstantCache{T, T2, zType} <: OrdinaryDiffEqConstantCache max_stage::Int end @cache struct ROCK2Cache{uType, rateType, uNoUnitsType, C <: ROCK2ConstantCache} <: - StabilizedRKMutableCache + StabilizedRKMutableCache u::uType uprev::uType uᵢ₋₁::uType @@ -26,13 +26,17 @@ end constantcache::C end -function alg_cache(alg::ROCK2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ROCK2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - constantcache = ROCK2ConstantCache(constvalue(uBottomEltypeNoUnits), + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + constantcache = ROCK2ConstantCache( + constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits), - u) + u + ) uᵢ₋₁ = zero(u) uᵢ₋₂ = zero(u) tmp = zero(u) @@ -40,14 +44,16 @@ function alg_cache(alg::ROCK2, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmp, false) fsalfirst = zero(rate_prototype) k = zero(rate_prototype) - ROCK2Cache(u, uprev, uᵢ₋₁, uᵢ₋₂, tmp, atmp, fsalfirst, k, constantcache) + return ROCK2Cache(u, uprev, uᵢ₋₁, uᵢ₋₂, tmp, atmp, fsalfirst, k, constantcache) end -function alg_cache(alg::ROCK2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ROCK2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - ROCK2ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits), u) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return ROCK2ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits), u) end mutable struct ROCK4ConstantCache{T, T2, T3, T4, zType} <: OrdinaryDiffEqConstantCache @@ -65,7 +71,7 @@ mutable struct ROCK4ConstantCache{T, T2, T3, T4, zType} <: OrdinaryDiffEqConstan end @cache struct ROCK4Cache{uType, rateType, uNoUnitsType, C <: ROCK4ConstantCache} <: - StabilizedRKMutableCache + StabilizedRKMutableCache u::uType uprev::uType uᵢ₋₁::uType @@ -78,13 +84,17 @@ end constantcache::C end -function alg_cache(alg::ROCK4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ROCK4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - constantcache = ROCK4ConstantCache(constvalue(uBottomEltypeNoUnits), + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + constantcache = ROCK4ConstantCache( + constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits), - u) + u + ) uᵢ₋₁ = zero(u) uᵢ₋₂ = zero(u) uᵢ₋₃ = zero(u) @@ -93,14 +103,16 @@ function alg_cache(alg::ROCK4, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmp, false) fsalfirst = zero(rate_prototype) k = zero(rate_prototype) - ROCK4Cache(u, uprev, uᵢ₋₁, uᵢ₋₂, uᵢ₋₃, tmp, atmp, fsalfirst, k, constantcache) + return ROCK4Cache(u, uprev, uᵢ₋₁, uᵢ₋₂, uᵢ₋₃, tmp, atmp, fsalfirst, k, constantcache) end -function alg_cache(alg::ROCK4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ROCK4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - ROCK4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits), u) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return ROCK4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits), u) end mutable struct RKCConstantCache{zType} <: OrdinaryDiffEqConstantCache @@ -108,7 +120,7 @@ mutable struct RKCConstantCache{zType} <: OrdinaryDiffEqConstantCache zprev::zType end @cache struct RKCCache{uType, rateType, uNoUnitsType, C <: RKCConstantCache} <: - StabilizedRKMutableCache + StabilizedRKMutableCache u::uType uprev::uType gprev::uType @@ -120,10 +132,12 @@ end constantcache::C end -function alg_cache(alg::RKC, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RKC, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} constantcache = RKCConstantCache(u) gprev = zero(u) gprev2 = zero(u) @@ -132,14 +146,16 @@ function alg_cache(alg::RKC, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmp, false) fsalfirst = zero(rate_prototype) k = zero(rate_prototype) - RKCCache(u, uprev, gprev, gprev2, tmp, atmp, fsalfirst, k, constantcache) + return RKCCache(u, uprev, gprev, gprev2, tmp, atmp, fsalfirst, k, constantcache) end -function alg_cache(alg::RKC, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RKC, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - RKCConstantCache(u) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return RKCConstantCache(u) end mutable struct ESERK4ConstantCache{T, zType} <: OrdinaryDiffEqConstantCache @@ -154,7 +170,7 @@ mutable struct ESERK4ConstantCache{T, zType} <: OrdinaryDiffEqConstantCache end @cache struct ESERK4Cache{uType, rateType, uNoUnitsType, C <: ESERK4ConstantCache} <: - StabilizedRKMutableCache + StabilizedRKMutableCache u::uType uprev::uType uᵢ::uType @@ -168,10 +184,12 @@ end constantcache::C end -function alg_cache(alg::ESERK4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ESERK4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} constantcache = ESERK4ConstantCache(u) uᵢ = zero(u) uᵢ₋₁ = zero(u) @@ -182,14 +200,16 @@ function alg_cache(alg::ESERK4, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmp, false) fsalfirst = zero(rate_prototype) k = zero(rate_prototype) - ESERK4Cache(u, uprev, uᵢ, uᵢ₋₁, uᵢ₋₂, Sᵢ, tmp, atmp, fsalfirst, k, constantcache) + return ESERK4Cache(u, uprev, uᵢ, uᵢ₋₁, uᵢ₋₂, Sᵢ, tmp, atmp, fsalfirst, k, constantcache) end -function alg_cache(alg::ESERK4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ESERK4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - ESERK4ConstantCache(u) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return ESERK4ConstantCache(u) end mutable struct ESERK5ConstantCache{T, zType} <: OrdinaryDiffEqConstantCache @@ -204,7 +224,7 @@ mutable struct ESERK5ConstantCache{T, zType} <: OrdinaryDiffEqConstantCache end @cache struct ESERK5Cache{uType, rateType, uNoUnitsType, C <: ESERK5ConstantCache} <: - StabilizedRKMutableCache + StabilizedRKMutableCache u::uType uprev::uType uᵢ::uType @@ -218,10 +238,12 @@ end constantcache::C end -function alg_cache(alg::ESERK5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ESERK5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} constantcache = ESERK5ConstantCache(u) uᵢ = zero(u) uᵢ₋₁ = zero(u) @@ -232,14 +254,16 @@ function alg_cache(alg::ESERK5, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmp, false) fsalfirst = zero(rate_prototype) k = zero(rate_prototype) - ESERK5Cache(u, uprev, uᵢ, uᵢ₋₁, uᵢ₋₂, Sᵢ, tmp, atmp, fsalfirst, k, constantcache) + return ESERK5Cache(u, uprev, uᵢ, uᵢ₋₁, uᵢ₋₂, Sᵢ, tmp, atmp, fsalfirst, k, constantcache) end -function alg_cache(alg::ESERK5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ESERK5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - ESERK5ConstantCache(u) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return ESERK5ConstantCache(u) end mutable struct SERK2ConstantCache{T, zType} <: OrdinaryDiffEqConstantCache @@ -252,7 +276,7 @@ mutable struct SERK2ConstantCache{T, zType} <: OrdinaryDiffEqConstantCache end @cache struct SERK2Cache{uType, rateType, uNoUnitsType, C <: SERK2ConstantCache} <: - StabilizedRKMutableCache + StabilizedRKMutableCache u::uType uprev::uType uᵢ₋₁::uType @@ -265,10 +289,12 @@ end constantcache::C end -function alg_cache(alg::SERK2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SERK2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} constantcache = SERK2ConstantCache(u) uᵢ₋₁ = zero(u) uᵢ₋₂ = zero(u) @@ -278,12 +304,14 @@ function alg_cache(alg::SERK2, u, rate_prototype, ::Type{uEltypeNoUnits}, recursivefill!(atmp, false) fsalfirst = zero(rate_prototype) k = zero(rate_prototype) - SERK2Cache(u, uprev, uᵢ₋₁, uᵢ₋₂, Sᵢ, tmp, atmp, fsalfirst, k, constantcache) + return SERK2Cache(u, uprev, uᵢ₋₁, uᵢ₋₂, Sᵢ, tmp, atmp, fsalfirst, k, constantcache) end -function alg_cache(alg::SERK2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SERK2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SERK2ConstantCache(u) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SERK2ConstantCache(u) end diff --git a/lib/OrdinaryDiffEqStabilizedRK/src/rkc_perform_step.jl b/lib/OrdinaryDiffEqStabilizedRK/src/rkc_perform_step.jl index 48a2160803..6e4ce0d115 100644 --- a/lib/OrdinaryDiffEqStabilizedRK/src/rkc_perform_step.jl +++ b/lib/OrdinaryDiffEqStabilizedRK/src/rkc_perform_step.jl @@ -9,7 +9,7 @@ function initialize!(integrator, cache::ROCK2ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::ROCK2ConstantCache, repeat_step = false) @@ -64,8 +64,10 @@ end end # error estimate if integrator.opts.adaptive - atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = integrator.fsalfirst @@ -79,14 +81,14 @@ function initialize!(integrator, cache::ROCK2Cache) resize!(integrator.k, integrator.kshortsize) alg = unwrap_alg(integrator, true) cache.constantcache.max_stage = (alg.max_stages < 1 || alg.max_stages > 200) ? 200 : - alg.max_stages + alg.max_stages cache.constantcache.min_stage = (alg.min_stages > cache.constantcache.max_stage) ? - cache.constantcache.max_stage : alg.min_stages + cache.constantcache.max_stage : alg.min_stages integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::ROCK2Cache, repeat_step = false) @@ -106,9 +108,9 @@ end tᵢ₋₁ = t + dt * recf[ccache.start] tᵢ₋₂ = t + dt * recf[ccache.start] tᵢ₋₃ = t - @.. broadcast=false uᵢ₋₂=uprev - @.. broadcast=false uᵢ₋₁=uprev+(dt*recf[ccache.start])*fsalfirst - ccache.mdeg < 2 && (@.. broadcast=false u=uᵢ₋₁) + @.. broadcast = false uᵢ₋₂ = uprev + @.. broadcast = false uᵢ₋₁ = uprev + (dt * recf[ccache.start]) * fsalfirst + ccache.mdeg < 2 && (@.. broadcast = false u = uᵢ₋₁) # for the second to the ms[ccache.mdeg] th stages for i in 2:(ccache.mdeg) μ, κ = recf[ccache.start + (i - 2) * 2 + 1], recf[ccache.start + (i - 2) * 2 + 2] @@ -116,10 +118,10 @@ end f(k, uᵢ₋₁, p, tᵢ₋₁) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) tᵢ₋₁ = dt * μ - ν * tᵢ₋₂ - κ * tᵢ₋₃ - @.. broadcast=false u=(dt*μ)*k-ν*uᵢ₋₁-κ*uᵢ₋₂ + @.. broadcast = false u = (dt * μ) * k - ν * uᵢ₋₁ - κ * uᵢ₋₂ if i < ccache.mdeg - @.. broadcast=false uᵢ₋₂=uᵢ₋₁ - @.. broadcast=false uᵢ₋₁=u + @.. broadcast = false uᵢ₋₂ = uᵢ₋₁ + @.. broadcast = false uᵢ₋₁ = u end tᵢ₋₃ = tᵢ₋₂ tᵢ₋₂ = tᵢ₋₁ @@ -129,11 +131,11 @@ end δt₂ = dt * fp2[ccache.deg_index] f(k, u, p, tᵢ₋₁) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false uᵢ₋₁=u+δt₁*k + @.. broadcast = false uᵢ₋₁ = u + δt₁ * k if integrator.opts.adaptive - @.. broadcast=false tmp=-δt₂*k + @.. broadcast = false tmp = -δt₂ * k else - @.. broadcast=false u=-δt₂*k + @.. broadcast = false u = -δt₂ * k end c = DiffEqBase.value(sign(δt₁)) * integrator.opts.internalnorm(δt₁, t) tᵢ₋₁ += c @@ -141,16 +143,18 @@ end OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if integrator.opts.adaptive - @.. broadcast=false tmp+=δt₂ * k - @.. broadcast=false u=uᵢ₋₁+δt₁*k+tmp + @.. broadcast = false tmp += δt₂ * k + @.. broadcast = false u = uᵢ₋₁ + δt₁ * k + tmp else - @.. broadcast=false u+=uᵢ₋₁ + (δt₁ + δt₂) * k + @.. broadcast = false u += uᵢ₋₁ + (δt₁ + δt₂) * k end # error estimate if integrator.opts.adaptive - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = integrator.fsalfirst @@ -170,7 +174,7 @@ function initialize!(integrator, cache::ROCK4ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::ROCK4ConstantCache, repeat_step = false) @@ -282,8 +286,10 @@ end #Error estimate (embedded method of order 3) if integrator.opts.adaptive tmp += B̂₅ * uᵢ₋₁ - atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = integrator.fsalfirst @@ -297,14 +303,14 @@ function initialize!(integrator, cache::ROCK4Cache) alg = unwrap_alg(integrator, true) cache.constantcache.max_stage = (alg.max_stages < 1 || alg.max_stages > 152) ? 152 : - alg.max_stages + alg.max_stages cache.constantcache.min_stage = (alg.min_stages > cache.constantcache.max_stage) ? - cache.constantcache.max_stage : alg.min_stages + cache.constantcache.max_stage : alg.min_stages integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::ROCK4Cache, repeat_step = false) @@ -324,10 +330,10 @@ end tᵢ₋₁ = t + dt * recf[ccache.start] tᵢ₋₂ = t + dt * recf[ccache.start] tᵢ₋₃ = t - @.. broadcast=false uᵢ₋₂=uprev - @.. broadcast=false uᵢ₋₁=uprev+(dt*recf[ccache.start])*fsalfirst + @.. broadcast = false uᵢ₋₂ = uprev + @.. broadcast = false uᵢ₋₁ = uprev + (dt * recf[ccache.start]) * fsalfirst if ccache.mdeg < 2 - @.. broadcast=false u=uᵢ₋₁ + @.. broadcast = false u = uᵢ₋₁ end # for the second to the ccache.mdeg th stages for i in 2:(ccache.mdeg) @@ -336,10 +342,10 @@ end f(k, uᵢ₋₁, p, tᵢ₋₁) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) tᵢ₋₁ = (dt * μ) - ν * tᵢ₋₂ - κ * tᵢ₋₃ - @.. broadcast=false u=(dt*μ)*k-ν*uᵢ₋₁-κ*uᵢ₋₂ + @.. broadcast = false u = (dt * μ) * k - ν * uᵢ₋₁ - κ * uᵢ₋₂ if i < ccache.mdeg - @.. broadcast=false uᵢ₋₂=uᵢ₋₁ - @.. broadcast=false uᵢ₋₁=u + @.. broadcast = false uᵢ₋₂ = uᵢ₋₁ + @.. broadcast = false uᵢ₋₁ = u end tᵢ₋₃ = tᵢ₋₂ tᵢ₋₂ = tᵢ₋₁ @@ -367,12 +373,12 @@ end # Stage-1 f(k, u, p, tᵢ₋₁) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false uᵢ₋₂=u+a₃₁*k - @.. broadcast=false uᵢ₋₃=u+a₄₁*k - @.. broadcast=false uᵢ₋₁=u+a₂₁*k - @.. broadcast=false u+=B₁ * k + @.. broadcast = false uᵢ₋₂ = u + a₃₁ * k + @.. broadcast = false uᵢ₋₃ = u + a₄₁ * k + @.. broadcast = false uᵢ₋₁ = u + a₂₁ * k + @.. broadcast = false u += B₁ * k if integrator.opts.adaptive - @.. broadcast=false tmp=B̂₁*k + @.. broadcast = false tmp = B̂₁ * k end # Stage-2 @@ -381,11 +387,11 @@ end tᵢ₋₂ = tᵢ₋₁ + _c₂ f(k, uᵢ₋₁, p, tᵢ₋₂) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false uᵢ₋₂+=a₃₂ * k - @.. broadcast=false uᵢ₋₃+=a₄₂ * k - @.. broadcast=false u+=B₂ * k + @.. broadcast = false uᵢ₋₂ += a₃₂ * k + @.. broadcast = false uᵢ₋₃ += a₄₂ * k + @.. broadcast = false u += B₂ * k if integrator.opts.adaptive - @.. broadcast=false tmp+=B̂₂ * k + @.. broadcast = false tmp += B̂₂ * k end # Stage-3 @@ -394,10 +400,10 @@ end tᵢ₋₂ = tᵢ₋₁ + _c₃ f(k, uᵢ₋₂, p, tᵢ₋₂) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false uᵢ₋₃+=a₄₃ * k - @.. broadcast=false u+=B₃ * k + @.. broadcast = false uᵢ₋₃ += a₄₃ * k + @.. broadcast = false u += B₃ * k if integrator.opts.adaptive - @.. broadcast=false tmp+=B̂₃ * k + @.. broadcast = false tmp += B̂₃ * k end #Stage-4 @@ -406,9 +412,9 @@ end tᵢ₋₂ = tᵢ₋₁ + _c₄ f(k, uᵢ₋₃, p, tᵢ₋₂) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false u+=B₄ * k + @.. broadcast = false u += B₄ * k if integrator.opts.adaptive - @.. broadcast=false tmp += B̂₄ * k + @.. broadcast = false tmp += B̂₄ * k end f(k, u, p, t + dt) @@ -416,12 +422,14 @@ end #Error estimate (embedded method of order 3) if integrator.opts.adaptive - @.. broadcast=false tmp += B̂₅ * k - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false tmp += B̂₅ * k + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end - @.. broadcast=false integrator.fsallast=k + @.. broadcast = false integrator.fsallast = k integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.u = u @@ -436,7 +444,7 @@ function initialize!(integrator, cache::RKCConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::RKCConstantCache, repeat_step = false) @@ -503,8 +511,10 @@ end # error estimate if integrator.opts.adaptive tmp = 0.8 * (uprev - u) + 0.4 * dt * (fsalfirst + gprev) - atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = integrator.fsalfirst @@ -519,7 +529,7 @@ function initialize!(integrator, cache::RKCCache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::RKCCache, repeat_step = false) @@ -542,9 +552,9 @@ end b2 = b1 # stage-1 - @.. broadcast=false gprev2=uprev + @.. broadcast = false gprev2 = uprev μs = w1 * b1 - @.. broadcast=false gprev=uprev+dt*μs*fsalfirst + @.. broadcast = false gprev = uprev + dt * μs * fsalfirst th2 = zero(eltype(u)) th1 = μs z1 = w0 @@ -566,8 +576,8 @@ end μs = μ * w1 / w0 f(k, gprev, p, t + dt * th1) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false u=μ*gprev+ν*gprev2+(1-μ-ν)*uprev+ - dt*μs*(k-νs*fsalfirst) + @.. broadcast = false u = μ * gprev + ν * gprev2 + (1 - μ - ν) * uprev + + dt * μs * (k - νs * fsalfirst) th = μ * th1 + ν * th2 + μs * (1 - νs) if (iter < mdeg) gprev2 = gprev @@ -586,9 +596,11 @@ end end # error estimate if integrator.opts.adaptive - @.. broadcast=false tmp=0.8*(uprev-u)+0.4*dt*(fsalfirst+gprev) - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false tmp = 0.8 * (uprev - u) + 0.4 * dt * (fsalfirst + gprev) + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = integrator.fsalfirst @@ -606,7 +618,7 @@ function initialize!(integrator, cache::ESERK4ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::ESERK4ConstantCache, repeat_step = false) @@ -667,8 +679,10 @@ end u = u / 6 if integrator.opts.adaptive tmp = tmp / 6 - atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = integrator.fsalfirst @@ -684,7 +698,7 @@ function initialize!(integrator, cache::ESERK4Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::ESERK4Cache, repeat_step = false) @@ -704,51 +718,53 @@ end internal_deg = ccache.internal_deg α = 2.0 / (mdeg^2) - @.. broadcast=false u=zero(uprev) - @.. broadcast=false tmp=zero(uprev) + @.. broadcast = false u = zero(uprev) + @.. broadcast = false tmp = zero(uprev) for i in 1:4 hᵢ = dt / i tᵢ = t - @.. broadcast=false Sᵢ=zero(u) - @.. broadcast=false uᵢ₋₁=uprev - @.. broadcast=false uᵢ₋₂=zero(u) + @.. broadcast = false Sᵢ = zero(u) + @.. broadcast = false uᵢ₋₁ = uprev + @.. broadcast = false uᵢ₋₂ = zero(u) for j in 1:i r = tᵢ - @.. broadcast=false Sᵢ=(cache.constantcache.Bᵢ[start])*uᵢ₋₁ + @.. broadcast = false Sᵢ = (cache.constantcache.Bᵢ[start]) * uᵢ₋₁ for st in 1:mdeg f(k, uᵢ₋₁, p, r) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if st % internal_deg == 1 - @.. broadcast=false uᵢ=uᵢ₋₁+α*hᵢ*k + @.. broadcast = false uᵢ = uᵢ₋₁ + α * hᵢ * k else - @.. broadcast=false uᵢ=2*uᵢ₋₁-uᵢ₋₂+2*α*hᵢ*k + @.. broadcast = false uᵢ = 2 * uᵢ₋₁ - uᵢ₋₂ + 2 * α * hᵢ * k end q = convert(Int, floor(st / internal_deg)) r = tᵢ + α * (st^2 + q * internal_deg^2) * hᵢ - @.. broadcast=false Sᵢ=Sᵢ+(cache.constantcache.Bᵢ[start + st])*uᵢ + @.. broadcast = false Sᵢ = Sᵢ + (cache.constantcache.Bᵢ[start + st]) * uᵢ if st < mdeg - @.. broadcast=false uᵢ₋₂=uᵢ₋₁ - @.. broadcast=false uᵢ₋₁=uᵢ + @.. broadcast = false uᵢ₋₂ = uᵢ₋₁ + @.. broadcast = false uᵢ₋₁ = uᵢ end end if j < i tᵢ = tᵢ + hᵢ - @.. broadcast=false uᵢ₋₁=Sᵢ + @.. broadcast = false uᵢ₋₁ = Sᵢ end end - @.. broadcast=false u=u+Cᵤ[i]*Sᵢ - integrator.opts.adaptive && (@.. broadcast=false tmp=tmp+Cₑ[i]*Sᵢ) + @.. broadcast = false u = u + Cᵤ[i] * Sᵢ + integrator.opts.adaptive && (@.. broadcast = false tmp = tmp + Cₑ[i] * Sᵢ) end - @.. broadcast=false u=u/6 + @.. broadcast = false u = u / 6 if integrator.opts.adaptive - @.. broadcast=false tmp=tmp/6 - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false tmp = tmp / 6 + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = integrator.fsalfirst @@ -766,7 +782,7 @@ function initialize!(integrator, cache::ESERK5ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::ESERK5ConstantCache, repeat_step = false) @@ -826,8 +842,10 @@ end u = u / 24 if integrator.opts.adaptive tmp = tmp / 24 - atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = integrator.fsalfirst @@ -843,7 +861,7 @@ function initialize!(integrator, cache::ESERK5Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::ESERK5Cache, repeat_step = false) @@ -863,51 +881,53 @@ end internal_deg = ccache.internal_deg α = 100.0 / (49.0 * mdeg^2) - @.. broadcast=false u=zero(uprev) - @.. broadcast=false tmp=zero(uprev) + @.. broadcast = false u = zero(uprev) + @.. broadcast = false tmp = zero(uprev) for i in 1:5 hᵢ = dt / i tᵢ = t - @.. broadcast=false Sᵢ=zero(u) - @.. broadcast=false uᵢ₋₁=uprev - @.. broadcast=false uᵢ₋₂=zero(u) + @.. broadcast = false Sᵢ = zero(u) + @.. broadcast = false uᵢ₋₁ = uprev + @.. broadcast = false uᵢ₋₂ = zero(u) for j in 1:i r = tᵢ - @.. broadcast=false Sᵢ=(Bᵢ[start])*uᵢ₋₁ + @.. broadcast = false Sᵢ = (Bᵢ[start]) * uᵢ₋₁ for st in 1:mdeg f(k, uᵢ₋₁, p, r) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if st % internal_deg == 1 - @.. broadcast=false uᵢ=uᵢ₋₁+α*hᵢ*k + @.. broadcast = false uᵢ = uᵢ₋₁ + α * hᵢ * k else - @.. broadcast=false uᵢ=2*uᵢ₋₁-uᵢ₋₂+2*α*hᵢ*k + @.. broadcast = false uᵢ = 2 * uᵢ₋₁ - uᵢ₋₂ + 2 * α * hᵢ * k end q = convert(Int, floor(st / internal_deg)) r = tᵢ + α * (st^2 + q * internal_deg^2) * hᵢ - @.. broadcast=false Sᵢ=Sᵢ+(Bᵢ[start + st])*uᵢ + @.. broadcast = false Sᵢ = Sᵢ + (Bᵢ[start + st]) * uᵢ if st < mdeg - @.. broadcast=false uᵢ₋₂=uᵢ₋₁ - @.. broadcast=false uᵢ₋₁=uᵢ + @.. broadcast = false uᵢ₋₂ = uᵢ₋₁ + @.. broadcast = false uᵢ₋₁ = uᵢ end end if j < i tᵢ = tᵢ + hᵢ - @.. broadcast=false uᵢ₋₁=Sᵢ + @.. broadcast = false uᵢ₋₁ = Sᵢ end end - @.. broadcast=false u=u+Cᵤ[i]*Sᵢ - integrator.opts.adaptive && (@.. broadcast=false tmp=tmp+Cₑ[i]*Sᵢ) + @.. broadcast = false u = u + Cᵤ[i] * Sᵢ + integrator.opts.adaptive && (@.. broadcast = false tmp = tmp + Cₑ[i] * Sᵢ) end - @.. broadcast=false u=u/24 + @.. broadcast = false u = u / 24 if integrator.opts.adaptive - @.. broadcast=false tmp=tmp/24 - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false tmp = tmp / 24 + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = integrator.fsalfirst @@ -925,7 +945,7 @@ function initialize!(integrator, cache::SERK2ConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = integrator.fsalfirst - integrator.k[2] = integrator.fsallast + return integrator.k[2] = integrator.fsallast end @muladd function perform_step!(integrator, cache::SERK2ConstantCache, repeat_step = false) @@ -970,8 +990,10 @@ end if integrator.opts.adaptive tmp = u - uprev - dt * k - atmp = calculate_residuals(tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = integrator.fsalfirst @@ -986,7 +1008,7 @@ function initialize!(integrator, cache::SERK2Cache) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::SERK2Cache, repeat_step = false) @@ -1006,35 +1028,37 @@ end internal_deg = ccache.internal_deg α = 1.0 / (0.4 * mdeg^2) - @.. broadcast=false uᵢ₋₁=uprev - @.. broadcast=false uᵢ₋₂=uprev - @.. broadcast=false Sᵢ=Bᵢ[start]*uprev + @.. broadcast = false uᵢ₋₁ = uprev + @.. broadcast = false uᵢ₋₂ = uprev + @.. broadcast = false Sᵢ = Bᵢ[start] * uprev for i in 1:10 f(k, uᵢ₋₁, p, t + (1 + (i - 1) * internal_deg^2) * α * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false u=uᵢ₋₁+α*dt*k - @.. broadcast=false Sᵢ=Sᵢ+Bᵢ[start + (i - 1) * internal_deg + 1]*u - @.. broadcast=false uᵢ₋₂=uᵢ₋₁ - @.. broadcast=false uᵢ₋₁=u + @.. broadcast = false u = uᵢ₋₁ + α * dt * k + @.. broadcast = false Sᵢ = Sᵢ + Bᵢ[start + (i - 1) * internal_deg + 1] * u + @.. broadcast = false uᵢ₋₂ = uᵢ₋₁ + @.. broadcast = false uᵢ₋₁ = u for j in 2:internal_deg f(k, uᵢ₋₂, p, t + (j^2 + (i - 1) * internal_deg^2) * α * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false u=2*uᵢ₋₁-uᵢ₋₂+2*α*dt*k - @.. broadcast=false Sᵢ=Sᵢ+Bᵢ[start + j + (i - 1) * internal_deg]*u + @.. broadcast = false u = 2 * uᵢ₋₁ - uᵢ₋₂ + 2 * α * dt * k + @.. broadcast = false Sᵢ = Sᵢ + Bᵢ[start + j + (i - 1) * internal_deg] * u if j < mdeg - @.. broadcast=false uᵢ₋₂=uᵢ₋₁ - @.. broadcast=false uᵢ₋₁=u + @.. broadcast = false uᵢ₋₂ = uᵢ₋₁ + @.. broadcast = false uᵢ₋₁ = u end end end - @.. broadcast=false u=Sᵢ + @.. broadcast = false u = Sᵢ f(k, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) if integrator.opts.adaptive - @.. broadcast=false tmp=u-uprev-dt*k - calculate_residuals!(atmp, tmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false tmp = u - uprev - dt * k + calculate_residuals!( + atmp, tmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = integrator.fsalfirst diff --git a/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_eserk4.jl b/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_eserk4.jl index d30c271708..f7c9a373f6 100644 --- a/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_eserk4.jl +++ b/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_eserk4.jl @@ -1,8 +1,10 @@ function ESERK4ConstantCache(zprev) - ms = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 30, 40, 50, 60, 70, 80, 90, 100, 150, 200, + ms = [ + 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 30, 40, 50, 60, 70, 80, 90, 100, 150, 200, 250, 300, 350, 400, 450, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2200, 2400, 2600, 2800, 3000, - 3200, 3400, 3600, 3800, 4000] + 3200, 3400, 3600, 3800, 4000, + ] Cᵤ = [-1, 24, -81, 64] Cₑ = [-1, 12, -27, 16] Bᵢ = [ @@ -12,7 +14,7 @@ function ESERK4ConstantCache(zprev) -0.25248538379384922845, 0.0065129464125214976767, 0.077186857588232424888, - 0.55518167170340454810, + 0.5551816717034045481, 0.61360390808969075779, 0.026821833388298651543, -0.23844614933200639399, @@ -37,13 +39,13 @@ function ESERK4ConstantCache(zprev) 0.50164054491810920617, -2.7931536927570665119, -4.5295780253657152091, - -0.67188363351729623860, + -0.6718836335172962386, -0.38028484476745363464, 3.5211542882361179678, 3.7011102612339237911, -0.22431641894434376622, -0.095212294131596456968, - -0.39596847648837331130, + -0.3959684764883733113, 1.5284841107814154297, 3.8039868210217295398, 1.2748002881339524556, @@ -66,19 +68,19 @@ function ESERK4ConstantCache(zprev) -19.298377373880449908, -21.679197201200411906, -4.5191317892538197684, - -1.9184207257501124480, + -1.918420725750112448, 14.733353242310913785, 12.733531622593032552, 0.18247485290633446391, 0.15274956187126426045, 0.64305376735887396864, -2.2301480378809042523, - -5.5912992223215940830, + -5.591299222321594083, -3.8785240908687354398, -4.5794572425185702147, 20.708131963663656349, - 27.955189820169577510, - 13.320032683463520330, + 27.95518982016957751, + 13.32003268346352033, 7.8389594854218088941, -47.067374517798599568, -45.775942402086720154, @@ -100,7 +102,7 @@ function ESERK4ConstantCache(zprev) 37.401422569058439149, 16.180781599286180762, -111.13869336487127875, - -95.226922191927817420, + -95.22692219192781742, -25.004904139630761658, -6.6651890801149859487, 61.495029689806802999, @@ -117,7 +119,7 @@ function ESERK4ConstantCache(zprev) -53.099690977542503108, -27.875819065008162801, 173.86926246376423709, - 163.22159290197214870, + 163.2215929019721487, 99.026615560070335116, 30.755338538621012402, -255.88882993067805104, @@ -127,7 +129,7 @@ function ESERK4ConstantCache(zprev) 124.82065890461286859, 82.127933848100201016, 0.043661038580818492087, - -0.11786144997441083010, + -0.1178614499744108301, 0.066386010208599287316, -0.076031148164367425586, 0.0052073294838449464829, @@ -147,7 +149,7 @@ function ESERK4ConstantCache(zprev) -0.022928853429258550581, 0.011338764099281519687, -0.038106847893825768972, - 0.23171435974630057980, + 0.2317143597463005798, -0.012156947119830843975, 0.10138743758292338331, 0.17465860724959391537, @@ -158,7 +160,7 @@ function ESERK4ConstantCache(zprev) 0.98271355984740181501, 0.45223415813273663023, 0.045126524529024613632, - 0.26532915906216275550, + 0.2653291590621627555, 0.021996861793286128399, -0.057924147207390446201, 0.0036025716824696587915, @@ -167,7 +169,7 @@ function ESERK4ConstantCache(zprev) 0.085428722842394614821, -0.070149538603092456705, 0.037984626965922970693, - 0.0089719536494690109650, + 0.008971953649469010965, -0.16938529603171254393, 0.086234986094373699425, -0.19219663363769314414, @@ -180,7 +182,7 @@ function ESERK4ConstantCache(zprev) -0.57436812706206905531, -0.92322606997908771585, -0.19096592046570434732, - 0.32522610362398168380, + 0.3252261036239816838, -0.079907821998929081122, -0.13345588758970735217, 0.29254598461201388601, @@ -191,7 +193,7 @@ function ESERK4ConstantCache(zprev) 0.42560595231126846861, -0.28909101750218811759, 0.55771112076481983847, - -0.20054726266246856720, + -0.2005472626624685672, 0.12994038256869652244, 0.56656407029191771199, -0.75764426376035423645, @@ -210,12 +212,12 @@ function ESERK4ConstantCache(zprev) 0.19943272338152142865, 0.36922567826266850194, 0.53468296617079583066, - 0.72757858122436401090, + 0.7275785812243640109, -0.54482189889790310681, 0.095679020051970023882, 0.18707872333802013766, -0.30107687800164710254, - 0.27363745032144109830, + 0.2736374503214410983, -0.19800713494168156727, 0.097681109738867545069, -0.31723563869336503622, @@ -228,7 +230,7 @@ function ESERK4ConstantCache(zprev) 1.0512407040783360836, -1.7702141811878387219, -2.3968091958953177048, - -1.1980393329125246040, + -1.198039332912524604, -1.2681616813537686847, -1.2537867100643880103, 0.91573716979804367089, @@ -236,7 +238,7 @@ function ESERK4ConstantCache(zprev) -0.50492821674189015384, 0.71396631202785057692, -0.62713589792147916293, - 0.45239831858058406800, + 0.452398318580584068, -0.22208580437388315058, 0.36847664003587996149, -0.032694306609767816928, @@ -244,7 +246,7 @@ function ESERK4ConstantCache(zprev) 0.93841953628338926484, -0.89763044227540880222, 1.1087000572263507359, - 0.17774834420006183100, + 0.177748344200061831, -1.3621389330867151409, 2.3469848594281749937, 3.2028114069644841802, @@ -257,7 +259,7 @@ function ESERK4ConstantCache(zprev) -0.091587946654389934797, 0.060889794336791781784, -0.017975856504789689924, - -0.0072533252693753219880, + -0.007253325269375321988, 0.011174540519950900819, 0.20812895083308917918, -0.25822851502078122257, @@ -275,7 +277,7 @@ function ESERK4ConstantCache(zprev) -0.88692368818718521813, -0.43379522048823197649, 0.70245161246825304813, - -0.38958663060921019490, + -0.3895866306092101949, -0.060557513665329318711, 0.27695094218973119868, -0.23268054744366943739, @@ -325,7 +327,7 @@ function ESERK4ConstantCache(zprev) -0.94547523544243892545, -0.085392665045559095633, 0.56155459074786879526, - -0.28092969801988681360, + -0.2809296980198868136, -0.20808688051766335869, 0.54588760642725054374, -0.58090114419366229813, @@ -335,7 +337,7 @@ function ESERK4ConstantCache(zprev) 1.5906283325637067331, -0.81124643437939964392, -0.0018638282010046069496, - 1.9345602288283783190, + 1.934560228828378319, -2.1344237711117083821, 0.12965432919981787068, 4.7769121625257998365, @@ -386,13 +388,13 @@ function ESERK4ConstantCache(zprev) 0.21658125274946897269, 0.025050190208787392397, -0.074789407421538908046, - -0.012597738304713382070, + -0.01259773830471338207, 0.10074130604319421562, -0.13490080932566635455, 0.11487428100252660293, -0.063851858313901752962, 0.29454575058294632794, - -0.48555596552115794090, + -0.4855559655211579409, -0.027475352066268696579, 0.27692218060686177692, -0.39327948516586911012, @@ -410,12 +412,12 @@ function ESERK4ConstantCache(zprev) -1.6620979848231786007, 2.6374840683322741653, -2.3376620862865713717, - 1.3185466927407968210, + 1.318546692740796821, -1.7807202985705074149, 2.1982036992984382965, 2.6785671839975290948, -4.4458571850504558332, - 4.7709428185382019040, + 4.770942818538201904, 1.6123239793517732485, -6.2704792794667881071, 2.9862972637232770709, @@ -440,7 +442,7 @@ function ESERK4ConstantCache(zprev) 17.153641006574680317, -9.3952997098367147036, -39.719282943103817992, - -20.931759781172247500, + -20.9317597811722475, -4.7044735383267948236, -8.0465504526754255824, -10.277373387477163187, @@ -455,7 +457,7 @@ function ESERK4ConstantCache(zprev) 0.87425831260165095593, 6.3578473904727334951, -7.7872474367177595341, - 6.8871468969976558150, + 6.887146896997655815, 4.6081961500097273622, -12.707906152910633393, 7.5460709401672719374, @@ -481,7 +483,7 @@ function ESERK4ConstantCache(zprev) 0.13709778672664356189, -0.13324516837985938985, -0.036230767761918766905, - 0.089056555794696388380, + 0.08905655579469638838, 1.9153434822670838853, -3.4746716705851267042, 0.52922558877594604751, @@ -492,8 +494,8 @@ function ESERK4ConstantCache(zprev) -3.3038725968666416886, -8.2221777905364356941, -3.2932732607160788503, - -2.5880905383251399760, - -5.1270291010827632600, + -2.588090538325139976, + -5.12702910108276326, -14.973312011308216458, -9.1450494297472823293, 10.281752294524574766, @@ -531,14 +533,14 @@ function ESERK4ConstantCache(zprev) 36.630740169747190368, -44.747656655509670721, -86.606738551185793425, - -39.727947580245115160, + -39.72794758024511516, -9.6717994226627911595, -8.2522426208222859283, -23.933426687233445504, -14.363811719301784808, 15.947221209813236054, -2.5435295919457214015, - -4.9907947770132689360, + -4.990794777013268936, 4.6362958739153537064, -1.2675683952842345073, -0.42567227382451010295, @@ -565,7 +567,7 @@ function ESERK4ConstantCache(zprev) -0.064126662399823968799, -0.21888710479227883349, 0.46583120285547371892, - 0.048668561864545275720, + 0.04866856186454527572, -0.60115170788842922226, 1.2076960222835286483, -0.74901132516988570132, @@ -574,24 +576,24 @@ function ESERK4ConstantCache(zprev) 1.5681406827159542751, 0.82683362130972237217, 1.4893391829977418502, - 0.49414494062351399620, + 0.4941449406235139962, 8.4010057856347229696, 4.5396551398316383506, -2.8344431330440804558, -1.0466568716453825182, 0.83394803054184489277, - 1.7318502805784921270, + 1.731850280578492127, -3.4263882583820437163, 2.6404133302964093971, 3.6625964146313102847, -9.7366154823440887798, 2.9467421782122569713, 5.4377968039685816291, - -15.751648789628294590, + -15.75164878962829459, 9.6095163263792998889, 10.488345349085048645, -24.651030245083102249, - -25.513102557896811310, + -25.51310255789681131, -12.864980602852338448, -7.8494937992843459278, -6.1224168943570893786, @@ -601,17 +603,17 @@ function ESERK4ConstantCache(zprev) 7.2315047299943392082, -6.2773455488135672548, -9.0894077038874956971, - 19.535534114215343990, + 19.53553411421534399, -15.275549454158758681, -13.912915921233138145, 43.298386583243155361, -18.708614471905227938, - -15.225018939402041220, + -15.22501893940204122, 60.250445224012715867, -37.629713796668452678, -43.371643850874185244, 100.68657390940036251, - 110.50565532059060350, + 110.5056553205906035, 51.880135237880854316, 16.670043729464257785, 13.400050756667063833, @@ -635,7 +637,7 @@ function ESERK4ConstantCache(zprev) -75.878764071490308276, -15.447805232439449909, -8.1104381363146287785, - -51.746862802359092390, + -51.74686280235909239, -28.063963826375837271, 14.969220747560510476, 11.385685891674647971, @@ -650,18 +652,18 @@ function ESERK4ConstantCache(zprev) 43.271751303451556655, -29.101988272414327231, -29.467700402997980153, - 71.503517666883489260, - 89.241605848026521890, + 71.50351766688348926, + 89.24160584802652189, 36.501489519284942902, 5.2263211502600324763, 0.0075286732088466998943, -0.030646730143694697776, -0.059078611860741873448, -0.17820949212822602617, - -0.099474352329214606300, + -0.0994743523292146063, 0.014719457502387433776, 0.11881352260383411422, - -0.098058399524044510300, + -0.0980583995240445103, 0.013944262941279636874, 0.020633362449683068153, 0.013973579201790970176, @@ -673,7 +675,7 @@ function ESERK4ConstantCache(zprev) -0.070188747831695645534, 0.070887321077826310957, -0.051528021073056585563, - 0.025637743365987380180, + 0.02563774336598738018, -0.0025980775496840571386, -0.011228814973464285786, 0.016079110654982612561, @@ -687,9 +689,9 @@ function ESERK4ConstantCache(zprev) -0.21338012375191200483, 0.20068945966542469338, -0.015381259174897907559, - -0.10464230734780934480, - 0.24267198904381930020, - -0.15994050169336385990, + -0.1046423073478093448, + 0.2426719890438193002, + -0.1599405016933638599, 0.032367457721279517542, 0.21198190452596731609, -0.24496833767077867046, @@ -697,26 +699,26 @@ function ESERK4ConstantCache(zprev) 0.22078546993051027309, -0.35378812496691022693, 0.14362953140390331962, - 0.46679109469113889010, + 0.4667910946911388901, -0.60148921689871591006, -0.10618732188955635914, 0.63313649353916942999, 1.0892147373891730654, 0.39407757747649586329, 0.16267406334603935361, - 0.066158765056913552860, + 0.06615876505691355286, 0.023848129334144905428, 1.0938092253737599548, 1.7120464320402468047, 1.6413555965235810921, - -0.63858946757041453770, + -0.6385894675704145377, -0.97326649544775402494, 0.74259560647069983642, 0.22675732844796953269, -0.59564345694047353179, 0.11885834861233112979, 0.54972637319903599494, - -0.85591200345465700730, + -0.8559120034546570073, 0.60404956623582261113, -0.050029495383104831793, -0.49838352959886647877, @@ -762,13 +764,13 @@ function ESERK4ConstantCache(zprev) 0.96655645652713100718, 1.1883052992493206095, -0.88561951858998118472, - -0.38361849361199167870, + -0.3836184936119916787, 0.85415957014633222823, -0.18318152430226861807, -0.73855116022995988552, 1.1854376432843320418, - -0.87978189149902899350, - 0.17422377112787568690, + -0.8797818914990289935, + 0.1742237711278756869, 0.53503897154526152696, -0.88297835760745738407, 0.84382199002698670683, @@ -788,7 +790,7 @@ function ESERK4ConstantCache(zprev) 0.74826133611197682452, 0.30499023668399369379, -0.86730356820739139599, - 1.4842655274128539390, + 1.484265527412853939, -0.86228520217743419249, 0.047224381615038309221, 1.3641620404086166742, @@ -804,14 +806,14 @@ function ESERK4ConstantCache(zprev) 5.1699446234055372616, 2.5762503550424518713, 0.61670156704450183152, - 0.058986994514378562890, + 0.05898699451437856289, 0.001374595157980362071951954087454071760518, -0.005449887205661835443417305896439392716977, 0.03769832969629001208043243390487314599155, 0.06295068655775774656476073121491496474155, - 0.1805842413137708421680974964621087581030, + 0.180584241313770842168097496462108758103, 0.07715736541494716561839915053649968862227, - 0.005322966420107040454280022509571150364440, + 0.00532296642010704045428002250957115036444, -0.1290684503456855007735040144000997128047, 0.07070439799488369619790611076407046842941, 0.02976179694283137033132868193812600718519, @@ -831,23 +833,23 @@ function ESERK4ConstantCache(zprev) 0.07672116842581836694434143886602003120168, -0.04828171526189606557069137361192937836501, -0.03949978224772771430513993620593278148876, - 0.06710054476727671655145644294912259717490, + 0.0671005447672767165514564429491225971749, -0.08267184375275475568036894456908488225254, -0.05630193336084654544187365280641995170684, 0.1523852004380723256940511104032266951938, -0.3026953924247076508582482362926922973723, - 0.2445343662645598120024262239977541583610, + 0.244534366264559812002426223997754158361, -0.1013023042060589090243508401817636618114, -0.2351436460866744127567109343648245777521, 0.4162668162647115785111474075620060600344, -0.4118141806940108653809920323006799923523, -0.0004666579610381427017309630278900052464528, 0.4300870714950427161667785959147056349716, - -0.6428786435961094141810220608167809633700, + -0.64287864359610941418102206081678096337, 0.2380464824980563795461649582977111604353, 0.3015164039313257475069899927028057453815, -0.4252536645211220857617794939543129640713, - -0.2611504859768792389433899664666889088690, + -0.261150485976879238943389966466688908869, 0.5423757337657242783248121080705944588953, 0.4913071914827518513531593974745081145726, -1.220199367049860514444566435191892031437, @@ -859,11 +861,11 @@ function ESERK4ConstantCache(zprev) -0.2503035301762253556360238902984731019069, -0.5772763196985143780566266291292304806365, -1.818399349501747708867707687616691673972, - -4.002370936504193915976331337365371826430, + -4.00237093650419391597633133736537182643, -2.229026913751350178809799661219617610891, 0.3160756432681814068130971297601627677382, 2.592636303900343675084557062868280093744, - -1.138444240140453233871488226718236211630, + -1.13844424014045323387148822671823621163, -1.296822285684466009218222423307239461294, 1.508407027516344291033916049885991564963, -0.02103262294901591957761003619407621587255, @@ -885,7 +887,7 @@ function ESERK4ConstantCache(zprev) 2.226917830390356463247114830688173891317, -0.8821241734224879992846971600974799998627, -0.3556255640307227132584845938268598832479, - 2.369689930738876588962931792185868942700, + 2.3696899307388765889629317921858689427, -2.309708727709781913808557349287728926056, 1.280631533952475649326065315042784714781, 1.933681043009270581750963991327215605699, @@ -898,7 +900,7 @@ function ESERK4ConstantCache(zprev) -3.378417670224283574676730633620877754688, 4.203777936732313808885201167405037098509, 3.155778476930495768881174119047501389522, - -6.440969656668893213534895765872973454390, + -6.44096965666889321353489576587297345439, -3.514598415454170758498341594057518144304, 10.59051897892115733838753946600127207624, 10.94738366234978094972073805124990385594, @@ -909,7 +911,7 @@ function ESERK4ConstantCache(zprev) 0.5418073975607787588843141490443580656127, 2.241757763442687108361987860207558849572, 5.774330156204059731388738575331409749528, - 13.50392476154269112620835109543983859990, + 13.5039247615426911262083510954398385999, 7.419974954252019594269116523796850250731, -1.240460555744341920035784701674846130917, -8.284345535389162155571878381782064499892, @@ -938,10 +940,10 @@ function ESERK4ConstantCache(zprev) -5.716637166092238462602452073945601003836, 6.320011602025798560192236876812615066393, -4.379097969748772518216182489709220652929, - -3.264883213134573784062176970712813493680, + -3.26488321313457378406217697071281349368, 8.116859046434390134435930806267978514979, -9.332808885975439799692747529711033261377, - 0.9706465390532275530395946382681489951000, + 0.9706465390532275530395946382681489951, 7.956469285647627163057416658111447898799, -12.35400618082036212334663624782504732915, 2.697912287418887984986370444064969547249, @@ -957,7 +959,7 @@ function ESERK4ConstantCache(zprev) -1.342180698903920713881155859959291789301, 0.3436678629850024076102505805298958434874, -0.2306513568929483995956154830386102095701, - -1.986936545095129759362142616572756534290, + -1.98693654509512975936214261657275653429, -4.455779931040966772639615366451876023318, -10.88235591484529452194430148004798934234, -5.947135603436423784913671417258917616056, @@ -967,12 +969,12 @@ function ESERK4ConstantCache(zprev) -4.295000650187657522253198870100236094919, 4.905362688088153818370158732760096718903, -0.8616179896064762750646750778427704108114, - -2.095780217755426353239485274888164769320, + -2.09578021775542635323948527488816476932, 1.617688732118253158298216973730835101157, 0.7784750234524995030358388337842196617599, -2.107148571991450820974501703150100401765, 1.192738982187645402816068607786886993586, - 1.209015723815499117743665027068585446870, + 1.20901572381549911774366502706858544687, -3.137247305276093240030479380015846359428, 3.286140998152077974088212158804384010617, -1.468129138944516856167280515942084744163, @@ -992,7 +994,7 @@ function ESERK4ConstantCache(zprev) -4.819927015139068671279345955654083977477, 6.000428262651025195785093719192325355167, -0.8277693249494475532603131240740117996669, - -4.741496855444318844990944537789295637090, + -4.74149685544431884499094453778929563709, 7.437631004296951046566977249467765175998, -0.9152756441657564135001204855257549640801, -6.981323268579185847472261585664922208959, @@ -1003,11 +1005,11 @@ function ESERK4ConstantCache(zprev) 15.04033902449239598819874178335054312367, 19.60086970698343665619602826593173032719, 11.19286675917265020837059368079980316853, - 3.512786021828323432693035336593149126350, + 3.51278602182832343269303533659314912635, 0.5939791784659484745106540737148525144669, 0.04264072481737340063817366839218979494743, 0.007333436981452604849459205432387011357761, - -0.008877754741741476887453286949279127038190, + -0.00887775474174147688745328694927912703819, -0.001868751019268655836940417879991266979926, -0.02880775145013251455334308261140386565995, -0.1006226837084563422481902080693471680358, @@ -1019,7 +1021,7 @@ function ESERK4ConstantCache(zprev) -0.03290751658656670521673503991134287931713, 0.001319226859261412340274197886766514074334, 0.07126090053626846272447533426993405494841, - -0.07986028182868423600013915864252159352410, + -0.0798602818286842360001391586425215935241, 0.02332962319534810987660826185260467857008, 0.02829822404793372348314648670391188399178, -0.02269799465252243581386604692040925346461, @@ -1035,16 +1037,16 @@ function ESERK4ConstantCache(zprev) -0.02408504844710162605249587994971082457942, -0.2126557018891825409944204554635595968617, 0.4363524011671252752446400839716573603869, - -0.3027320883045196606257703505210495995100, - 0.002104446950736410805027040999898037306020, + -0.30273208830451966062577035052104959951, + 0.00210444695073641080502704099989803730602, 0.4076491149754769794857688196783464451541, - -0.4855100728873807232469776992737857484810, + -0.485510072887380723246977699273785748481, 0.3300187828704264679433138477258035016276, -0.01656114085879245676525672140155154723594, 0.08504713947684088271191703211700165032136, -0.4404423908412334112625128107590784268835, 0.7886541296106687416924179978801402663729, - -0.3522851070731328963347287824327852109700, + -0.35228510707313289633472878243278521097, -0.5766586741178211263025305505567265325602, 1.051769612074908061937888495426752723674, -0.1714496967230236925979651078217329905186, @@ -1063,11 +1065,11 @@ function ESERK4ConstantCache(zprev) 4.306837072489053392755188348358403284416, 5.048616064108021516127553412765615848267, 4.725979840391034728125945136745110231074, - -1.441749528872697574288752608330713541040, + -1.44174952887269757428875260833071354104, -3.859752517437705740676557384214684898744, 1.414036519211360333304198301176944384744, 1.913282096802459688714638899695203034685, - -0.8299356663858061560521695924289713825740, + -0.829935666385806156052169592428971382574, -1.894410073964523931927940649338699308139, 2.076708574758634943505894849749840384163, 0.3029186122622356075365549527114142725517, @@ -1081,7 +1083,7 @@ function ESERK4ConstantCache(zprev) 1.703193173519907258692970732580926038376, -2.213317801574607662387175305887834426308, 1.490188713680464403274345693120396664182, - -1.980006986622130609300443063546912181650, + -1.98000698662213060930044306354691218165, 0.1031951524792276885836945707989465970021, 3.704078116681343015738913749367372688199, -6.895477995753734954703559967840518892923, @@ -1091,7 +1093,7 @@ function ESERK4ConstantCache(zprev) 6.047063248254987828757880666039719288536, -2.366479282848661642222324291283940898646, -3.428635131199396739756893266248856925253, - 2.382497348618584927462927031347597528260, + 2.38249734861858492746292703134759752826, 3.999840683526275674454490967626280128605, -10.85482836944743442724054575005519299933, 5.382541340155622750758168587366225772214, @@ -1109,7 +1111,7 @@ function ESERK4ConstantCache(zprev) 1.687270002699222374598948549078791859532, -0.9230593203909039134126667841313765903936, -2.245225203074972495734182170704058977237, - -4.934259737676585098776816087825313276190, + -4.93425973767658509877681608782531327619, -25.86011166281817308116455529920347245339, -30.52692739223138457321835125598129647444, -27.82446056415316291009207878218453345196, @@ -1139,7 +1141,7 @@ function ESERK4ConstantCache(zprev) -3.494709261303948396802080761813281716597, 25.97216013967591776396895357154747437496, -22.85287041301876441482319082344052378653, - 4.002083722334224763594518825134124589030, + 4.00208372233422476359451882513412458903, 22.69255121130057364100236439181030183524, -18.61929364499574342668720817272057919559, -9.928058133630087642542506967373551315221, @@ -1151,7 +1153,7 @@ function ESERK4ConstantCache(zprev) -52.13973584743567571345516671661999386381, -23.19171456193456675067675562972747178236, 71.56913330389692608286681085323929287897, - 102.0983629371847083657865184573980623430, + 102.098362937184708365786518457398062343, 56.72618012451507063293783364621281685505, 29.80030454647425351459861174505878377035, 0.08519053380809866209181644209447246418297, @@ -1176,7 +1178,7 @@ function ESERK4ConstantCache(zprev) -4.365683691248344345598867961006943160606, -21.32104758100881190714053177206337178422, 30.10216038472674520537001859850746682516, - -19.26499751236375927381640913957995069110, + -19.2649975123637592738164091395799506911, -1.728174263931246651628575137093895490951, 19.34266597694578868745981261862939005647, -24.80469997890297543101019746457081633978, @@ -1191,7 +1193,7 @@ function ESERK4ConstantCache(zprev) 33.61891661821661637248083405141899229898, -1.170966887011866803663182576213259088023, -42.22620310917620447208025449949379895294, - 36.53147063744150280507974825276649994630, + 36.5314706374415028050797482527664999463, 8.661013210031818585904151169217487028763, -61.22620498114692295214456003953339808293, 36.36062008966861294908069881986570021058, @@ -1206,14 +1208,14 @@ function ESERK4ConstantCache(zprev) -40.37338393914419942663925821453084699784, -4.409330975687005920855000113940713875391, -3.212830959582371383649104148210451669216, - 1.688551563889187687265712875899692395530, + 1.68855156388918768726571287589969239553, -0.002168855803858633905871785246788999527309, - -3.813918337973024237849497586508863031290, + -3.81391833797302423784949758650886303129, -3.714226936218825751939026842311176261839, -28.84874819496520287755072298049528852846, -31.73472001955263757463865132703890546653, -29.91871580996499407000909183641478268077, - 8.240851345554634274252188673184899636660, + 8.24085134555463427425218867318489963666, 26.11473672247428548355413323199532877847, -10.39327667455286968275102113274042655886, -11.27927536908780244613329665005178883153, @@ -1230,20 +1232,20 @@ function ESERK4ConstantCache(zprev) 0.6711074668428672675326837171229408323048, -10.74229085222780845658493979791184178347, 13.93039441196139115919300914951349969979, - -9.372754883423299178839518881079825327040, + -9.37275488342329917883951888107982532704, 6.388538712326769816976224905986892510306, 2.752780466181332114261087993209530123455, -13.74252161275012563840251934747267040378, 20.40397973442212692126683153374324990523, - -8.975457753954933655765987442688720605290, + -8.97545775395493365576598744268872060529, -6.468547586143977285083698042831969578645, 22.23428678799504673922470356292996151124, -16.82160418468611907299603152952487477561, - -0.8114045022097949510854281705392337688990, + -0.811404502209794951085428170539233768899, 23.58699957234646797587413790207501057786, -20.98727366331272888530211597893479155343, -2.170428225553633040082994972829395865702, - 29.70720453919633043734461207721365935720, + 29.7072045391963304373446120772136593572, -18.72703511847588077458905031652415841062, -18.50455321108190095064551571772984701251, 36.20208495369191125928959982817205521087, @@ -1253,13 +1255,13 @@ function ESERK4ConstantCache(zprev) 54.82670390568974995225365712103903542152, 75.02562897282795832768156971691346216487, 47.61157435226746550232288078851569620518, - 17.89383737204522183296020959622988385780, + 17.8938373720452218329602095962298838578, 4.106812602122547032480277287127803262527, 0.5367059636456148830893148773550436180916, 0.03083356446024644842839695373699042672601, 0.01926245671799036559594116135330739251713, -0.04093706416863719091863271651159608393332, - 0.03603414579857355879470697525993357653900, + 0.036034145798573558794706975259933576539, -0.01957912928100743012429162401407974104663, 0.06052761697176553940170708700315079495059, 0.08578315908831385965098365565055088064151, @@ -1268,8 +1270,8 @@ function ESERK4ConstantCache(zprev) -0.03883049546728450166408405636007578726685, -0.08574750446832493213043882913567387687132, 0.01416790345110810579134746686301466187816, - 0.05710062713389428236392730049603612845790, - -0.002614742264474623565574318977387946343200, + 0.0571006271338942823639273004960361284579, + -0.0026147422644746235655743189773879463432, -0.06558064639799391072743975994451411794582, 0.03951038124942991553073663436241010675136, 0.04130577250137878331858396353065011173833, @@ -1297,10 +1299,10 @@ function ESERK4ConstantCache(zprev) 0.5934952850234174200618542699167793883974, 0.1764942198907756725790580896743888916499, -0.6755349276288384754020599338270782100081, - -0.5086096989911953873331143374686368014380, + -0.508609698991195387333114337468636801438, 1.550864430958942705780289795973978881152, - -0.1554431206669765458383459911568270489730, - -0.8065825229260486336329051803632947213910, + -0.155443120666976545838345991156827048973, + -0.806582522926048633632905180363294721391, -1.797606874273262165699060240868125728478, -1.342978133870493344091596317828023824484, -0.1023041503385690440379276059907139764029, @@ -1312,7 +1314,7 @@ function ESERK4ConstantCache(zprev) -1.104721413416273072137477082900818176502, 0.3258388762588230084750527659747377249345, -2.889733867090635582971548853814573708303, - -5.861398697902637465782251259129944582180, + -5.86139869790263746578225125912994458218, -7.583987935193414002447676996747427136759, -6.888605827863210246165649264272229029192, 3.079456826426404468513133266700857341789, @@ -1347,7 +1349,7 @@ function ESERK4ConstantCache(zprev) -11.56317524198565279263500218837691900214, -7.078076561333905552206425228355857122645, 19.88012418026049115099834448843789472715, - 6.624293090524122043572076302757490087850, + 6.62429309052412204357207630275749008785, -30.40042735459230882518639395658797851373, -1.704152003479916852759937068111766817682, 22.65687759096684435698192936971029941457, @@ -1368,12 +1370,12 @@ function ESERK4ConstantCache(zprev) -28.44643548224858258171354518412661914828, -42.25532542157760893339578293565124193379, 3.948672363837943814122333095111029022686, - 33.61666371714049403472305190926677910860, + 33.6166637171404940347230519092667791086, -0.9262678814494056411679816270607740797692, - -38.73174747541936061482566948562076416700, + -38.731747475419360614825669485620764167, 24.27475068916056262041094210629761526518, 22.30999583074919293219253567683628592914, - -46.48344573982306563624055170335117038360, + -46.4834457398230656362405517033511703836, 28.13894487166162825913506419253276252831, 8.533394098534989985786722606772893556129, -31.39916625890929779654133344658977529345, @@ -1382,12 +1384,12 @@ function ESERK4ConstantCache(zprev) -3.485361816313652385544121403755600214476, 9.407572119251017344592724326343564458672, -6.767320001999154238638652609189314064942, - 42.21204936193729609190152016356092074940, + 42.2120493619372960919015201635609207494, -51.97162378633267598216993737827070403176, -29.39071149799753034984874991621828074693, 74.26395637569638599172742991505617424089, -63.46358103964252805627063496903112723885, - -17.22332765337711403798867522934145576210, + -17.2233276533771140379886752293414557621, 74.32313398287304863104032677845963668084, -66.53051541748692526469335539066340960764, -25.22693537224378138242842730712735769959, @@ -1406,7 +1408,7 @@ function ESERK4ConstantCache(zprev) -49.11040173003882054402304582930449883979, -53.55073706057818714168284866821373573795, 25.38523252853581707890382448153013121273, - -17.59479457014464061195039324413638277100, + -17.594794570144640611950393244136382771, -2.460777997813837159289753442070860953412, 28.15231446075092505324794933704768969876, -35.77778821410029394316525603539823547084, @@ -1424,15 +1426,15 @@ function ESERK4ConstantCache(zprev) -85.89416102459094027406767546038257176317, -64.25185134543152692958801807804908452534, 144.2854977060169422624843055372638535976, - -89.33874618689391860477818881195612389830, + -89.3387461868939186047781888119561238983, -23.72449263268665455488714242725914531313, 92.95760210513844100680439381590923823362, -82.27135944763600293897445212788799678733, 26.86965677261158260029114553577912705918, 22.25248555938068386648383475741702592414, - -38.72923018711476698903654416894444774130, + -38.7292301871147669890365441689444477413, 26.36950679337530713263432507461043920151, - -95.41898644089449641797170363994582621580, + -95.4189864408944964179717036399458262158, 108.0693097538529931081470848473932317239, 85.56191365121084112689886362919894720162, -182.0136398928969284652136174771612412383, @@ -1454,14 +1456,14 @@ function ESERK4ConstantCache(zprev) 658.9867044559173890996955095849264713762, 464.2728562231383160137016093004771594383, 156.9264274797675260009783785314053858171, - 100.7132556306529885749622664728947195470, + 100.713255630652988574962266472894719547, -32.41339592556741652042495075918928594969, 26.02919189559404110018518451297108585521, 1.528624971519443520348460163931437710943, -36.02052921707365838425947791905568086353, 48.01863457766457287802855500784309031019, -25.66933544286765662663360410722097695068, - 124.7150976188244514558662878981072534480, + 124.715097618824451455866287898107253448, 215.2392767731274769841822168872674775825, 294.3574530146522396652483530825396476891, 266.7039759343749244042428019288496622341, @@ -1488,7 +1490,7 @@ function ESERK4ConstantCache(zprev) 198.1890300932121867032468876487379397128, -147.6464693380346698306692576952122078438, -77.79520733755483590681288773464377453415, - 217.7600007818116227075370225498460774640, + 217.760000781811622707537022549846077464, -172.6650251476747361455320373146058673184, -98.80263401182677639635145410762295096852, 254.5887305502502600901775908280267590066, @@ -1517,7 +1519,7 @@ function ESERK4ConstantCache(zprev) -120.2751996896923397243522678562455396188, 56.51113374809279307140077110370336920464, 73.94001489089317825388480308968825236488, - -6.583217809806672294570259742082293608490, + -6.58321780980667229457025974208229360849, -58.18852954391493934503634953607738654072, -5.426180281538654994245900299195369471654, 80.98441262213414535062059699144103848875, @@ -1527,7 +1529,7 @@ function ESERK4ConstantCache(zprev) -49.29141390138763148155621256802554411935, -12.06769623338889907542725563637538650921, 48.56344697670210448585064773018528376163, - -40.07301792028663265452001129109456998630, + -40.0730179202866326545200112910945699863, 7.264164708201138833579793624986585628051, 20.55490165571172306399693613663337664984, -28.29330795514650698704383954604527213397, @@ -1540,7 +1542,7 @@ function ESERK4ConstantCache(zprev) 34.25404392419700821744807965775594192616, -87.26798188666453101898630835055214551656, 66.47434607440409112861020801382356658869, - 42.89362172275993078568518882081855860330, + 42.8936217227599307856851888208185586033, -103.1860668496251505763598651861041574533, 50.50327779525263138961355206973539819633, 90.29308885291176250983021672940314500884, @@ -1554,7 +1556,7 @@ function ESERK4ConstantCache(zprev) 288.3108089851766744844055715483817784572, 199.7141219060402867904761970665122631629, 85.84303170871729930845772456403999119485, - 24.15651649324571646118100646454492501730, + 24.1565164932457164611810064645449250173, 4.373092858528383792977356103636033389461, 0.4656974958153542592990950374794817325975, 0.02229914413009590810626901885877261843349, @@ -1569,14 +1571,14 @@ function ESERK4ConstantCache(zprev) -0.1200037364148762874166636511329673833562, 0.09364494357242659329857631261146255769083, 0.01744164650948180717622125325208971489854, - 0.05377265544584219678170235758697096812410, + 0.0537726554458421967817023575869709681241, -0.09483518437574528718357443561806585222054, -0.005621567548558017759437101874769462790636, 0.09306172453890293593022780621234983425053, -0.05830110480220834747369544474259016305824, -0.02594254399961326391718122521575175474085, 0.05276561216111141777028436839094705105098, - -0.01356747446089236604895255816436087576070, + -0.0135674744608923660489525581643608757607, -0.02710727865820064872829848871544966275762, 0.02493200144550438085597304607881172231589, 0.008318938283221342116676152515951727213554, @@ -1590,7 +1592,7 @@ function ESERK4ConstantCache(zprev) -0.5089212645330699279924600539024182635593, -0.4006981029077735047692517969463395869868, 1.059897094247874485675010517498418682832, - -0.6829668126822002676824546443034838360350, + -0.682966812682200267682454644303483836035, -0.1128843979596499220336888905921576367167, 0.4184169330213614293767779975744912679252, 0.1984283824626849398875046169397319636446, @@ -1598,20 +1600,20 @@ function ESERK4ConstantCache(zprev) -0.5268546005354924863048192125782766671676, 1.390995676863145680196664412878932021183, -0.1479229635121786063663232628810524418482, - -1.180145151115398900977234472754945296180, + -1.18014515111539890097723447275494529618, -0.3521402627862860632496369042228113434885, 1.139711152633523816379058591667296527972, 1.969902082893067104142760661245093971275, - 1.335068788454505508563767472575222063240, + 1.33506878845450550856376747257522206324, 0.8052768314309843793120429419650137526828, 0.02705344084309376976373803534750769715396, - 0.2895823170317758992902953347872592715290, + 0.289582317031775899290295334787259271529, -0.2167493595480997512314600925735417738521, 0.1368369283311672432620376933374890344229, 0.4459355561282920809670637666378016187678, - -0.8139122501360880532978652371429688906340, + -0.813912250136088053297865237142968890634, -0.5571088524444644946348920072299948946038, - 2.074105049484266126801616921634442253560, + 2.07410504948426612680161692163444225356, -1.762542676363650380495628397463505611727, 6.954618585033343572767101566391670218703, 6.503123615437872323926728234823761664219, @@ -1622,7 +1624,7 @@ function ESERK4ConstantCache(zprev) -3.230904916170260170784406243724478695784, 6.846669970510397750061702157128483759825, 1.269025201165505341004906373948299336297, - -8.249240384057447798173989800259720975220, + -8.24924038405744779817398980025972097522, 5.019401549057413918730144948517408874185, 2.237908658074977231872813585849502987324, -4.520052642850188965355454580519802668726, @@ -1651,14 +1653,14 @@ function ESERK4ConstantCache(zprev) 38.21578270513954397843348069745628142554, 12.03111417799967609520670101171899574546, -37.81315813197116956506316708686990202745, - -61.43130760969329656055444363044004969490, + -61.4313076096932965605544436304400496949, -44.65613724400413837282149624074681101193, -23.31727022273426474576428569745558375494, -3.863459773750509830921548675078642254227, -6.061054064450096248788574020921026316205, 4.167674185806559733821621091978908136996, -2.763248967497495942547592733059683714318, - -10.68922293892529884542469009585273955490, + -10.6892229389252988454246900958527395549, 21.58866184642058807650318131701908393079, -4.368608552176944895530316783768245438753, -15.78242273842237568746379674397295111245, @@ -1667,14 +1669,14 @@ function ESERK4ConstantCache(zprev) -88.09381149365887112687330095186695034289, -150.6394298980959643944474615847083739614, -122.2059647255146539041041053246372512408, - 80.89347456974786874554891621768920359780, + 80.8934745697478687455489162176892035978, 49.46256256574090698435368141490481830193, - 30.66386285023793785707349983600873452630, + 30.6638628502379378570734998360087345263, -82.09857166432132386333917100435482004426, -21.84167133759027983428208698376044577894, 110.7141905974213475893588381394216818587, - -64.40725350979281601383652049053277594960, - -33.97865636780882670664847215630608629020, + -64.4072535097928160138365204905327759496, + -33.9786563678088267066484721563060862902, 64.29297221462806237972864299293663369238, -17.34856748785051555395855811688709907725, -33.14814462588518490060384399364800993172, @@ -1695,11 +1697,11 @@ function ESERK4ConstantCache(zprev) 140.2829524867118167885019239179133375592, 93.38543681566582139416981804815120907462, -190.9533580170260090741778225143788674047, - -69.31767246850137723323699872491304921390, + -69.3176724685013772332369987249130492139, 335.8262251335982899652817582493779340879, -7.574027316331669434499223934003139636068, -347.0509960872070922755107594934419078411, - -111.6185273312939473731291273165675268650, + -111.618527331293947373129127316567526865, 345.7469918762934250288204633171370205865, 547.2477665534149269267354836422874224138, 408.7759424939188405349259423114521800189, @@ -1715,7 +1717,7 @@ function ESERK4ConstantCache(zprev) -41.42585111924403671239077446181065109905, 399.5260403108575452852899740721987209784, 423.1848052383440638522629662753803292092, - 738.3869633266183860907064072221823893310, + 738.386963326618386090706407222182389331, 557.3151535671357216220852180520084548699, -350.7696058437641860962789377768316347185, -275.7403832713350277707811146849584352551, @@ -1731,7 +1733,7 @@ function ESERK4ConstantCache(zprev) -180.0979487584645689829031172706503217523, 27.09529591697682084992745526064062950823, 115.0631623857314242346424122275702613596, - -145.7355946468449330621664230247060098060, + -145.735594646844933062166423024706009806, 88.10712305849400816041420721569009012455, -372.6885079681054168664590246182775484234, 282.3394745761241249210535422925441400841, @@ -1741,7 +1743,7 @@ function ESERK4ConstantCache(zprev) 351.7016170126744462854540347164854476737, -833.7248898953612617289302716693003967098, 305.3726922982044030403639719683826740758, - 478.1223975614940714413618197920624754500, + 478.12239756149407144136181979206247545, -569.6589373641546206357831099413340499887, -385.0851312699881080768926923058386930608, 800.8803539559476484598360471974033265414, @@ -1755,15 +1757,15 @@ function ESERK4ConstantCache(zprev) -1566.768349397488267310299893960056691267, -743.4215574697325010227485743346847650985, -217.0128743878056817569741353955159873192, - -104.7677253418692543704364511187426407750, - 47.01979991406266423368971334845559427850, + -104.767725341869254370436451118742640775, + 47.0197999140626642336897133484555942785, -36.68026553084685684478759335545720518562, - -124.5378326797966039031405108301817455050, + -124.537832679796603903140510830181745505, 267.6437995158561336867156969563814571868, -111.7290702855005594533544987443134580578, -80.77574080438665993882230058383890508195, 61.32373569721802475589332713095243133872, - -838.3994973557967691215407527028073785890, + -838.399497355796769121540752702807378589, -905.9064216507142279237288920086429411907, -1604.908897034832444026942510897935320698, -1152.086582630796540428680144525409658052, @@ -1775,7 +1777,7 @@ function ESERK4ConstantCache(zprev) 1082.180679457656518411499085890342715271, -569.4305029870325680144179908443697400322, -453.5034278917709612265765631002200311585, - 750.8519614314107281090128624457986600530, + 750.851961431410728109012862445798660053, -232.5833440197425117335126948585719295387, -332.3364171483944716323901224581817943757, 404.7717483761513447128076633363624164605, @@ -1791,7 +1793,7 @@ function ESERK4ConstantCache(zprev) -674.7754961059583774793329116939872279077, 1447.334504455607131961524842079068382432, -411.3051080666953874345355270588941972692, - -1014.073995899328009163073252401506814200, + -1014.0739958993280091630732524015068142, 1109.421407164801569712161451898733346191, 732.1017306508133296785066168701981983318, -1557.167136222843508300612011587859019647, @@ -1843,13 +1845,13 @@ function ESERK4ConstantCache(zprev) 255.8278929340721856788071251830952077981, 984.7418864609214977257527584081643465177, -1019.888412908829897440585459685608340674, - -649.9406781303639908661298775462135217640, + -649.940678130363990866129877546213521764, 1413.262736949897336197608195227225084834, 135.3865854880656764379125870463805352192, -1838.751016411155475387709560382359563462, -38.54678258820981153167676155390422289556, - 2098.769273077639284498607802064791047570, - 736.1065265915558173327460299914810489030, + 2098.76927307763928449860780206479104757, + 736.106526591555817332746029991481048903, -2151.221757354712800972565301568205517735, -3321.308190843114754885808374078075064089, -2498.529434192357000696770403773225530748, @@ -1872,13 +1874,13 @@ function ESERK4ConstantCache(zprev) 60.89342206788991559559938251765917603893, -277.3370789435772794311176176185604268639, -69.48241554457338772544897248878999811209, - 365.4181796683046133358070326915261370760, + 365.418179668304613335807032691526137076, -177.3426128704142151744927765298837015083, -185.9343207579091970792847384006520001738, 285.4811706606338376030364839460364359836, -90.50012011039540945566181535758233765813, -122.7160072536035693990812479069797702335, - 159.7489753832193612900078551945558987930, + 159.748975383219361290007855194555898793, -55.55869241010217895676076061749202258507, -49.12753443442322747907103975828543777795, 78.53627370407570614803916607002745605453, @@ -1888,7 +1890,7 @@ function ESERK4ConstantCache(zprev) -180.7344643216157806290808493371840979654, 357.4693690214119836625809481188427933039, -134.4076253919065221580782924581977196402, - -220.0879884420806009328479487805126822830, + -220.087988442080600932847948780512682283, 392.9590070265182477662001528624789113578, -57.87308409057537810674466486746656349062, -355.8060788293902788994142791797770367799, @@ -1898,7 +1900,7 @@ function ESERK4ConstantCache(zprev) -29.52498112974613811826726172017563278068, 602.9402160531685031298832323883338990038, 14.64251433361501911644145794621818009744, - -695.3953383173081220475964722305124748560, + -695.395338317308122047596472230512474856, -250.4450900528669916049812349807275727465, 719.1859994312066252583014264157328277252, 1109.060245334728924289477935758947351603, @@ -1911,7 +1913,7 @@ function ESERK4ConstantCache(zprev) 0.01612834966122454714630419727427763330186, -0.007980396110788104591529267382230513749611, 0.01339124700254699188129376493434687668248, - -0.01533733961282137145446276863466286588070, + -0.0153373396128213714544627686346628658807, 0.009402257210309715336041894324052082026979, 0.003751571642232546238188088815875052674646, 0.005485528455809003629715368718380518117558, @@ -1921,7 +1923,7 @@ function ESERK4ConstantCache(zprev) 0.06304819878714979084893351970935205173721, -0.03273113513472047287817555068205189153625, -0.08117612508866003608606823289907198289055, - -0.001350306927783572334726829221263469444500, + -0.0013503069277835723347268292212634694445, 0.05418480633862990385599678492652282661347, 0.03168469718939466376329606362059318335049, -0.08237291444152656634282786061452381577087, @@ -1929,25 +1931,25 @@ function ESERK4ConstantCache(zprev) 0.07208790806813183920491558238854773038988, -0.05617143158684640671000130352105768685837, -0.02755360162975794000541556401692596485796, - 0.08657528522042188768906991754029840706530, + 0.0865752852204218876890699175402984070653, -0.08182468535375644401839358684633129103004, 0.04238430376400515042468239257265697043808, -0.009771510072790894677147656249559838056609, -0.001722459993356310132263035387473457274826, - 0.9396248174663051193082448414156831868600, + 0.93962481746630511930824484141568318686, -1.292390734019956594611888427114530477694, -0.006402415139389588713810626396404753855509, - 0.6253604569773466186288945197470757091740, + 0.625360456977346618628894519747075709174, -0.2064730359104136665649474244986460392821, -0.6377362767356569315644139816438854819768, 0.5351758867410236420820028543033186512638, 0.4083906391961104710200001245180726688889, - -1.041128200779796667777560003882640407040, + -1.04112820077979666777756000388264040704, 0.3309135788993437900356856923025877191739, 0.3756130299128932197383800533914959336745, 0.2669856702948992757757811865615593654649, -1.136266355502587207343154574583622501716, - -0.3287494701187913914403455955856266898130, + -0.328749470118791391440345595585626689813, 1.824878993211624020919631160489707602507, 0.2291686643378286306463851103370940273462, -1.356816600325333789278115628782391113884, @@ -1957,17 +1959,17 @@ function ESERK4ConstantCache(zprev) -0.3971697140181584019286687203067266817805, -0.4713130357916703871883827324718957194115, 0.6886640476928349064942908638283338455698, - -0.7385544407539529284539922073229210861660, + -0.738554440753952928453992207322921086166, 0.4644193185385252300796612806834864375432, 0.5968994031939656482242607239992820426691, -1.422675590814355917021474913034218763718, 2.086168416824710189842699742751155047462, - -1.689678190221731005845464692487880000930, - 0.3200278449805864428146424301182284130470, + -1.68967819022173100584546469248788000093, + 0.320027844980586442814642430118228413047, -1.365730651738501090648327488606742104888, -8.038289563472913253146135281604808050654, -8.901970268728774881048736825883419655341, - -16.33225481601988188125971956982977050850, + -16.3322548160198818812597195698297705085, -8.328229889074789470360299850945403201528, 5.091075707581019102857626684699366437762, 7.632623019800912588396435236113580701502, @@ -1978,10 +1980,10 @@ function ESERK4ConstantCache(zprev) -0.3440008868536672033801760731984845393392, -9.057874390179420712218679291185169118252, 7.657719738076581775233379576186042995641, - 1.275742085746525292116862883116769255150, + 1.27574208574652529211686288311676925515, -7.516726392563546732938305540635119510952, 6.827944903165686453956585575896295406337, - -2.561392170887037829827594713465441050460, + -2.56139217088703782982759471346544105046, -0.6047107497472636213320421163811614295178, 1.123163946290714740571130595477636002132, -27.50122874259026581724838291496535176392, @@ -2001,7 +2003,7 @@ function ESERK4ConstantCache(zprev) -73.94618269428155775696855446318202934994, -10.66563740713000223195899962054041044272, 54.54840823572241931168314863873754314454, - 73.09810659565606700332474770996420214190, + 73.0981065956560670033247477099642021419, 89.89461035918267996180498274528704073472, 21.01975358546221443532668057713932642665, 16.82222817170874694563217961984229302445, @@ -2030,13 +2032,13 @@ function ESERK4ConstantCache(zprev) -139.0845557109969382911863580361453476677, -14.85803089081957449039181425597801941175, 120.7005348608005604111579327803667560628, - -104.0699426400220230897157761190469575130, + -104.069942640022023089715776119046957513, 26.64456042225550013048117842332140865892, 26.87245168933932436135413516436151456566, - -29.22344029854788693277275642261921193680, + -29.2234402985478869327727564226192119368, 263.6515722726362595417235907630369617045, -278.6245613178778975824286563701132857446, - -217.8710862763005229292160917102045047180, + -217.871086276300522929216091710204504718, 371.4431254745124945387414424173546358937, -85.05644186472218450339307089530067124306, -335.4890415549486062343695458660148028019, @@ -2045,27 +2047,27 @@ function ESERK4ConstantCache(zprev) -456.4533824530228856228408030071300530921, 29.75599954323654079744149130490136718821, 349.3849290001684671602668240085963359532, - 17.66433085686804659341630508605493256410, - -542.7619473441959657634776051785136652120, + 17.6643308568680465934163050860549325641, + -542.761947344195965763477605178513665212, -115.9937801627551073529425014683107249002, 842.3109247878282175981353801308736916707, 155.1067554302114873729860149892080654563, -645.1053572257162009702629094434337248499, -921.2321410821818284648662588516903886871, - -1021.657769796446048257432810666433741920, + -1021.65776979644604825743281066643374192, -292.8877023290694398631061485929549945252, -200.6450337797298931368913460807929009116, -133.5419432260832596957568208293775289552, 174.4767827983766455733188606415302263635, -196.8483717192273918376988417720696568333, - 124.7012307447431389137819085906742557430, + 124.701230744743138913781908590674255743, 15.94220467680877266872675960071636613462, -132.6001060561808714383645158908369953971, - 267.3285862290751249490312931503618595000, + 267.3285862290751249490312931503618595, -241.1366049995822634978451162591859401618, 70.06368265335551199825538599940486350765, -174.8508096801567961322640980361377824033, - -968.1907951797263568115370068121693942530, + -968.190795179726356811537006812169394253, -1066.573986868262185038632792925463663212, -1940.975427026011730748453382808017143845, -1046.067189466094467464460034714218067172, @@ -2079,18 +2081,18 @@ function ESERK4ConstantCache(zprev) -1018.258388561836904614617394127391252372, 912.4028492447434936603819747500100078539, 79.30856784053405292445396763721222430138, - -750.6554153797142828675057506475904329710, + -750.655415379714282867505750647590432971, 615.7074233011679427599515997433277362349, -92.72875449025295281304811382216913760995, -250.7177452382962523238630417081581023177, - 235.6602450609839129689453788925960138950, + 235.660245060983912968945378892596013895, -1168.157052864719630852959778326989261018, 1080.547051348270748449421987060316184437, 1281.866495115508407665886364283671072357, -1855.976621933974211527556204881098819464, 283.5345812664982643474120947620853376676, 1847.057897949353251014830900208536479321, - -1353.385851108238430826025684701805938290, + -1353.38585110823843082602568470180593829, -1063.046653575419558603836774012236638199, 2315.486497799073853427033612009343449303, 32.32747027243239029607443503262969350026, @@ -2100,7 +2102,7 @@ function ESERK4ConstantCache(zprev) 420.7247240988313935123365128558419691345, -4179.342774441035785325985932245576027848, -960.4954819863749367034483393204826173593, - 3360.175750286676582962374250044775229630, + 3360.17575028667658296237425004477522963, 5004.648609409653740421671363870496089218, 5104.136657171502652307622991980089753993, 1722.612118377725409153230816630424985532, @@ -2113,7 +2115,7 @@ function ESERK4ConstantCache(zprev) 416.1933556186380649646980249367690557849, -889.2285943870349021678101642155238205779, 816.3621990393115960545746180365054084241, - -257.4714569893396235750536719058966199270, + -257.471456989339623575053671905896619927, 552.1002285082944606726162313320678978352, 3063.529886544248272697388965914414869046, 3331.193507804645951485316989108102795372, @@ -2127,7 +2129,7 @@ function ESERK4ConstantCache(zprev) -3599.432072211049013686967419294033364038, 575.8929600429247540707524244018057777122, 3080.987975783229250951081678146959730418, - -2808.282756763201883263119412444206728890, + -2808.28275676320188326311941244420672889, -224.8073544300379892591376667527994885148, 2249.311974067226157436993980970359120424, -1762.977926086488704783316034034608835472, @@ -2140,7 +2142,7 @@ function ESERK4ConstantCache(zprev) 4716.252280169158999942302846343482502267, -404.4169894792527993255747017098821028867, -5085.745259695341712285369162432551503332, - 3534.238834870488151930774211504253289720, + 3534.23883487048815193077421150425328972, 2935.354189966899877399816926135068292629, -6071.733495502419746976637870337598486997, -445.3204579724679229482281035076160039482, @@ -2149,7 +2151,7 @@ function ESERK4ConstantCache(zprev) -7804.167565710939464685133972035449137316, -671.1785494536528319418239196327952098125, 10598.30624616454453477473879280409872707, - 2910.541733343045702480030281103259675490, + 2910.54173334304570248003028110325967549, -8926.525969057985689764373305336633577176, -13750.87004889382735530432532177803652403, -13038.04473934872817696271227565379119511, @@ -2157,7 +2159,7 @@ function ESERK4ConstantCache(zprev) -2616.659153801104980801265517973944974235, -1139.495384911588260725590545901572606383, 1073.878477518989820770254618157249567389, - -1312.899217251684849391443428264914863230, + -1312.89921725168484939144342826491486323, 832.5330064890660303304716913231684447049, -21.37932851264146554951627667246775284703, -674.4979460528740975680147894123030334405, @@ -2175,7 +2177,7 @@ function ESERK4ConstantCache(zprev) -4333.536538942463043399172720223636537286, -2049.399762064460667104613093896931137389, 5911.064485361076414484665441393404432752, - -1106.507202437165090995421404294935675140, + -1106.50720243716509099542140429493567514, -4764.488914488264549264556922826368458503, 4401.003577283561813756063918058167862062, 346.3240656004203419569912814862331218999, @@ -2187,9 +2189,9 @@ function ESERK4ConstantCache(zprev) -3443.944081689379416091971459315301947326, 2294.968916810113190209516254116172437754, 5410.120181181537974960574801182874233351, - -6401.592338840325707860529525942291614350, + -6401.59233884032570786052952594229161435, 175.6034484162850570641693840807726570906, - 7360.940451094347106051242258662862808320, + 7360.94045109434710605124225866286280832, -4869.596292653531668931380399677797104144, -4334.820892083988735088057571560625506254, 8531.462207616772819462045554954422539647, @@ -2206,7 +2208,7 @@ function ESERK4ConstantCache(zprev) 7743.294702321973536983728818139078081886, 3536.247121206383126868055534823341779386, 1300.201297055685545279025485607140242405, - -854.4024096130166109880305136841020604190, + -854.402409613016610988030513684102060419, 1136.541143450538770188917527915039715746, -716.4820762784167869557393077095957578623, 42.57065747740309648416062621620492654166, @@ -2222,13 +2224,13 @@ function ESERK4ConstantCache(zprev) -2922.020069144877523453367612199456153918, -3102.092046385043602330945469809231679714, -1065.925903399650953664166508913461257561, - 3427.499848241240410741584894697134428680, + 3427.49984824124041074158489469713442868, 1659.026964219120893256771702809352456158, -4752.877760535503214329035354725745056608, 992.8731644028296110887188718099143692185, 3642.040084773347086150856593198289765254, -3400.308186167725752810080662153373605374, - -272.9599181961668906023867311665235071850, + -272.959918196166890602386731166523507185, 2666.762902116265158377134115147202014133, -1934.877513283561065554100288645827814692, -209.1045611948613193616667090903762957329, @@ -2261,9 +2263,9 @@ function ESERK4ConstantCache(zprev) 236.0713933496544388586468818347926371812, -19.31570774659655939721004789353493034898, -170.1423319908662876772613470288840163153, - 390.0428910377344311849094415094475842880, + 390.042891037734431184909441509447584288, -363.4886574304160012204875540796821377862, - 123.9365362619098915311661749470596697550, + 123.936536261909891531166174947059669755, -205.4431507601081275518452701152654967875, -1217.293156310476182758639724793476012827, -1264.129088041152122252695448441214076216, @@ -2277,7 +2279,7 @@ function ESERK4ConstantCache(zprev) 1486.561261116493642701808345357412739042, -337.0794232725418025568828875093535081155, -1090.601139872344955960923706145152176533, - 1027.151166901393531180931879749663336200, + 1027.1511669013935311809318797496633362, 86.12657530798745395561910273575920968934, -804.2853347575566600990925956195096710388, 564.9394324172934079274648014042036397637, @@ -2292,7 +2294,7 @@ function ESERK4ConstantCache(zprev) 1543.071811944869462056511189641508417311, -935.9074950905521658044958851106209775494, -958.8482566078100908306487837095391299127, - 1732.967358077742115704633119132648111690, + 1732.96735807774211570463311913264811169, 336.9937526249140440151347168197218191633, -1982.588209461372278159858231314522030934, 249.1863801704568892855771007085850195586, @@ -2305,21 +2307,21 @@ function ESERK4ConstantCache(zprev) 3412.955765443745304190557307989509145215, 1785.235680587451934558988845584495865252, 658.5129162515001763953672603970390536958, - 174.5446977414379928438082746886999828540, + 174.544697741437992843808274688699982854, 32.81609847478195285317972884842638088166, 4.179408702049141274404928947159079052693, 0.3247817317585186406053000815075063633357, 0.01166581120969192897637727706816775916242, 0.024565685163243036854, - -0.032574638612603788680, + -0.03257463861260378868, -0.00030206563527581736163, 0.041387053863600343778, - -0.064234661858143896050, + -0.06423466185814389605, 0.054449175213825859756, -0.056651344370358974026, -0.062255233143239019617, -0.073488571605263780419, - -0.16445048944280008170, + -0.1644504894428000817, -0.035411253716312187729, 0.014781492472753049962, 0.10475475323348915076, @@ -2346,7 +2348,7 @@ function ESERK4ConstantCache(zprev) 0.097024125438710419624, -0.47950510719199458693, -0.69732001370986825658, - 2.0805468128125273810, + 2.080546812812527381, -0.36691752129129595965, -1.8156648146892041666, 0.059716954028533755567, @@ -2359,7 +2361,7 @@ function ESERK4ConstantCache(zprev) -0.27884794000358962264, 0.34458565703307031504, -0.28185308450757339828, - 0.15759594179989181430, + 0.1575959417998918143, -3.6100549847226604891, 4.9225443437397421943, -0.67798100311241820601, @@ -2369,13 +2371,13 @@ function ESERK4ConstantCache(zprev) 7.1384730440409961355, 8.9510233669927127913, 11.810922371400916928, - 21.308451617815811470, + 21.30845161781581147, 8.3419205730975387504, -5.8791483550329945658, -11.186150867856834971, - 0.55663185212383692130, + 0.5566318521238369213, 5.2205975036043698267, - 7.9466865585414239160, + 7.946686558541423916, -12.189599486123676456, -1.8936470792210137486, 12.880335587407730786, @@ -2400,7 +2402,7 @@ function ESERK4ConstantCache(zprev) 16.694287044312723404, 90.854147956690290926, 9.0602392830240345244, - -43.965371205069902730, + -43.96537120506990273, -131.19786511409182934, -103.05532526258864156, -50.510696527081056429, @@ -2414,7 +2416,7 @@ function ESERK4ConstantCache(zprev) -107.30070417909195831, 20.512131443486300787, 88.308802683637141958, - -144.05354724137775100, + -144.053547241377751, 109.03181210678786164, -135.91424290149904596, -226.76569597673223712, @@ -2428,14 +2430,14 @@ function ESERK4ConstantCache(zprev) -167.49223527858201935, 272.95749467282087624, 48.514565928715548647, - -297.05222392239410860, + -297.0522239223941086, 152.40007086375023385, - 134.17988853685514200, + 134.179888536855142, -194.54715534311978374, -0.36564883237165127296, 200.21599271804234787, -194.94903252062047583, - 255.37300739637030020, + 255.3730073963703002, 99.134373839318828911, -694.35103202293655957, 530.60937356181612465, @@ -2450,7 +2452,7 @@ function ESERK4ConstantCache(zprev) -195.30851499179605314, -1366.9851123090939706, -230.21361276237130571, - 776.14720889466868150, + 776.1472088946686815, 1948.1166581257985245, 1626.0789850788625624, 757.28063001449087193, @@ -2458,7 +2460,7 @@ function ESERK4ConstantCache(zprev) 65.477121403317159288, -10.282012089042785905, 83.525332613366536319, - -80.986129428526966430, + -80.98612942852696643, 49.189955792694296521, -617.05700601994215666, 824.30791140501985235, @@ -2468,12 +2470,12 @@ function ESERK4ConstantCache(zprev) -745.42793920478439111, 1003.4831157797820413, 2116.0305531870534922, - 2383.6945184061343660, + 2383.694518406134366, 4193.1683115883758577, 2054.5233020667253922, -1627.0132637993420893, -1873.4768174808307704, - -263.74601027224258110, + -263.7460102722425811, 1378.8723147703256504, 1404.8654087626602393, -2362.6919595707485735, @@ -2482,9 +2484,9 @@ function ESERK4ConstantCache(zprev) -1269.9940334670174235, -1289.3679700561338961, 1844.8854613917087799, - -131.95128219726556870, + -131.9512821972655687, -1651.1348797644061702, - 1653.0690380369679510, + 1653.069038036967951, -1723.5104105484267229, -878.64129971319622356, 4678.8284147904723961, @@ -2523,9 +2525,9 @@ function ESERK4ConstantCache(zprev) -9151.5955045751696948, 7381.8354622513155415, 7650.5368127408686094, - 1432.7962795560043670, + 1432.796279556004367, -6126.3949423690461814, - -5875.1455945445848860, + -5875.145594544584886, 10042.099843785042405, 1877.5933526675217671, -11003.495101427600166, @@ -2541,11 +2543,11 @@ function ESERK4ConstantCache(zprev) 10710.683727811881026, 10740.840971178066217, -16762.832721285862833, - 233.78482781500729640, + 233.7848278150072964, 15210.334228490905699, 324.86625685459135552, - -18507.434482384119260, - 134.19114359172008210, + -18507.43448238411926, + 134.1911435917200821, 30209.043181252961341, -3268.4751632790923464, -32280.733955748066796, @@ -2571,7 +2573,7 @@ function ESERK4ConstantCache(zprev) 23225.697592759037318, 40842.289699857104229, 21711.239826808781545, - -17690.466077091909390, + -17690.46607709190939, -17141.393017886904686, -3698.9867687335609701, 14403.555676429070898, @@ -2590,7 +2592,7 @@ function ESERK4ConstantCache(zprev) 33156.371928537305465, -19628.680857018503707, -23416.643262494970607, - 33094.494526806595900, + 33094.4945268065959, 2825.6499301964874201, -34266.547586071206147, 260.88951608143151875, @@ -2598,8 +2600,8 @@ function ESERK4ConstantCache(zprev) -3959.5587587696603254, -58484.066359095353189, 5857.4819855565306325, - 64215.445167495181400, - 20850.139817291683150, + 64215.4451674951814, + 20850.13981729168315, -47471.583089583705142, -94342.253942884549615, -81217.313504365390864, @@ -2610,7 +2612,7 @@ function ESERK4ConstantCache(zprev) -1841.0332804557600798, 1718.8753250098718281, -1067.7363327699828293, - 5514.9242451471710070, + 5514.924245147171007, -6336.0914761516419861, -54.723520403533131512, 7910.3986915670835957, @@ -2621,9 +2623,9 @@ function ESERK4ConstantCache(zprev) -29416.099940945342543, -51690.712590401246776, -28157.824477554580583, - 23067.158978943355360, + 23067.15897894335536, 21393.493088933365596, - 4958.9281486860951010, + 4958.928148686095101, -18446.036252743786403, -17024.990963807076457, 29352.027076144813917, @@ -2670,10 +2672,10 @@ function ESERK4ConstantCache(zprev) 19637.510528429657527, 19337.797599134589271, 33920.793340321737444, - 18830.604898818030520, + 18830.60489881803052, -15464.629130807981759, -13940.198146405023179, - -3332.6619091497865060, + -3332.661909149786506, 12154.600433554911805, 11245.585989700538132, -19347.196228067871871, @@ -2692,14 +2694,14 @@ function ESERK4ConstantCache(zprev) -18362.994406855349715, 22246.197210502774737, 5633.5014533588416238, - -27829.504529280523420, + -27829.50452928052342, 1320.8465780740651133, 30131.894835757552492, -6745.1263494733443398, - -37918.646072761755510, - 3393.2891942139780930, + -37918.64607276175551, + 3393.289194213978093, 43348.990669655525311, - 17613.693453787797250, + 17613.69345378779725, -35745.645495936029538, -65642.848041524484069, -56228.782992245277434, @@ -2712,7 +2714,7 @@ function ESERK4ConstantCache(zprev) -249.58704438992123603, 798.79674383223591693, -780.08490072791655626, - -205.43679932270060240, + -205.4367993227006024, 1391.5391003035658415, -1670.3424869744325556, 606.97955722134349406, @@ -2727,11 +2729,11 @@ function ESERK4ConstantCache(zprev) -3224.7987432360074357, -3014.6611221529343143, 5163.8586065844184662, - 1014.0833418814618230, + 1014.083341881461823, -5713.7029007406580842, 2682.9940709776852454, 3145.0415897020941003, - -4510.6636085245521310, + -4510.663608524552131, 771.37805187413419534, 3240.9056340974565734, -3419.1319538053109043, @@ -2742,15 +2744,15 @@ function ESERK4ConstantCache(zprev) 4789.0473281982162854, -5464.3838757676127965, -1774.2587815563586635, - 7336.3180336893150700, - -448.70174878712939530, - -7748.6290783694185880, + 7336.31803368931507, + -448.7017487871293953, + -7748.629078369418588, 2082.9195749069025483, 9159.1762553513399228, - -778.46343664594945840, + -778.4634366459494584, -10653.358535491945457, -4696.0346334271118317, - 9162.5651819712177900, + 9162.56518197121779, 16356.189707564698516, 13950.686857647472042, 7882.1212089803902689, @@ -2759,7 +2761,7 @@ function ESERK4ConstantCache(zprev) 215.63839331099369456, 34.799699271116436644, 3.8604823887216160406, - 0.26427960164765866260, + 0.2642796016476586626, 0.0084383098153366066481, 0.00024015344719524130475, 0.0036846128915942964145, @@ -2776,10 +2778,10 @@ function ESERK4ConstantCache(zprev) -0.11294312347310644894, -0.018302207777156739523, -0.035012304937071563122, - 0.063617191259302492930, - 0.025005827164503896320, + 0.06361719125930249293, + 0.02500582716450389632, -0.037969727341254891291, - -0.056841770837240721710, + -0.05684177083724072171, 0.091773433694621251225, -0.014297874065841030063, -0.046836722349716478608, @@ -2788,7 +2790,7 @@ function ESERK4ConstantCache(zprev) -0.099921187622905241315, 0.17492964903468022024, -0.010196462272847124719, - -0.38416740510674628950, + -0.3841674051067462895, 0.13351893439221068091, -0.0013764549195786469271, 0.46429023625395843005, @@ -2814,21 +2816,21 @@ function ESERK4ConstantCache(zprev) -0.19552207721962273629, -0.16521073051446920695, 3.3344360815409478589, - -5.4462898651676470790, - 5.5912597124479223960, + -5.446289865167647079, + 5.591259712447922396, -1.7869500536816395462, -6.6149286665962969514, 6.1591331985042370383, -24.713758522540839585, -10.098286868511493517, -22.050943178431698874, - -18.443931019818388680, - 18.424372499085442290, + -18.44393101981838868, + 18.42437249908544229, 6.2618990267987208399, 2.8706836691146929402, -7.9783442729485033177, -7.8422124320665227598, - 10.095262442237394690, + 10.09526244223739469, 6.8939362141193973965, -12.976305175996275993, -1.1594332265910948167, @@ -2836,9 +2838,9 @@ function ESERK4ConstantCache(zprev) -2.8700329778192581228, -14.319252441907142274, 16.597760454859345313, - -11.038279296796389270, + -11.03827929679638927, -8.3689772737987569731, - 29.813773790754480090, + 29.81377379075448009, -2.5121555218019707391, -10.784968935740622606, -26.020220110744704353, @@ -2851,29 +2853,29 @@ function ESERK4ConstantCache(zprev) -107.20880102881954111, -38.612622011840602848, 72.796140029313159967, - 151.53647324087428330, + 151.5364732408742833, 157.94094666445627292, - 75.783736061334462220, + 75.78373606133446222, 33.065486562008348807, 32.072945228971833524, -17.312503425939443686, 8.0132986588157290635, 11.098789635097477829, - -21.537793147816926150, + -21.53779314781692615, 16.714344453315151514, 24.808101671156959809, - -40.603222080025693110, + -40.60322208002569311, -54.200626626138667127, 132.01332075586877469, - -165.54401927129303560, + -165.5440192712930356, 89.115374202239922103, 127.22741237583303986, -99.099133468898673793, 648.76646425931524357, 348.77151842629788204, 628.01119770697143083, - 526.31403268341434590, - -501.53145106939633910, + 526.3140326834143459, + -501.5314510693963391, -233.04669547464454027, -37.456112409287151838, 197.85251021046924749, @@ -2892,7 +2894,7 @@ function ESERK4ConstantCache(zprev) -81.257611743521916828, 419.62268097546069493, 376.50639359146958034, - -1121.6596486222222060, + -1121.659648622222206, -261.41510836553520308, 1867.9248572932999002, -538.41951045880015297, @@ -2903,12 +2905,12 @@ function ESERK4ConstantCache(zprev) -1448.5549237682524641, -2924.9161141457846134, -2971.6041205038453764, - -1502.9556675143545220, + -1502.955667514354522, -647.57245920652760672, - -543.11407331283533900, + -543.114073312835339, 246.09172128171967942, -109.97969029865760885, - -190.71988994938104160, + -190.7198899493810416, 349.19446187383151105, -267.74898050060130893, -424.60475691033991295, @@ -2925,7 +2927,7 @@ function ESERK4ConstantCache(zprev) -5730.9349088576419704, 5288.1968072632888965, 2976.9343445164582617, - 130.63959963950539550, + 130.6395996395053955, -2069.0468801900841619, -2853.8916104176337896, 3425.9162209399935126, @@ -2943,20 +2945,20 @@ function ESERK4ConstantCache(zprev) -5088.2638773169067014, -2463.4464880841065766, 10108.332771460588105, - 1239.7117889031339860, + 1239.711788903133986, -15457.658697894046911, 4686.6621495054767086, - 17084.591878409599290, + 17084.59187840959929, -3455.2028931338332284, -17309.628446073107781, - -7533.1083723528080320, + -7533.108372352808032, 12800.708008024655018, 25539.352815098429704, 25273.038675975422347, - 13387.307821333565760, + 13387.30782133356576, 5697.4346426360564493, 4198.5191134543139046, - -1549.6961538447440230, + -1549.696153844744023, 703.45720775858939843, 1408.3930128327549494, -2485.1039122259518329, @@ -2968,33 +2970,33 @@ function ESERK4ConstantCache(zprev) -9536.0668491917007077, 7527.5827623256342773, 3512.8244818681507959, - -524.46493155947895190, + -524.4649315594789519, 35246.279296971489837, 25089.652948318638306, 38527.180294126397431, 30999.349896406108973, -27907.620745841337202, - -18173.189008607110490, + -18173.18900860711049, 366.88430563750626637, 11195.763097285058329, - 15506.021948912821440, + 15506.02194891282144, -18266.401295700299299, -12875.355272015588994, 22858.526815677004179, 4757.5470204335683021, - -26430.960127942497000, - 10098.065994912931950, + -26430.960127942497, + 10098.06599491293195, 21957.733527675211723, -27901.473118660919248, 6418.0298291477340163, 22386.009615562963814, - -29856.884779598017920, + -29856.88477959801792, -10449.199084809810702, 29353.267824690725094, 8560.4652112996151955, -49003.990099895267328, - -1456.8729560336736600, - 69114.864117795951990, + -1456.87295603367366, + 69114.86411779595199, -22026.344190336303697, -77582.793052180735893, 14458.686017469469802, @@ -3003,7 +3005,7 @@ function ESERK4ConstantCache(zprev) -60546.715938329149961, -119975.61465825447444, -116105.51755586457975, - -63774.213745904731120, + -63774.21374590473112, -27061.834806260859031, -17501.179907810860769, 4945.7621951510413241, @@ -3027,7 +3029,7 @@ function ESERK4ConstantCache(zprev) 60565.696351289231802, -3676.3298483005422216, -34441.851222873168914, - -46649.441366904604600, + -46649.4413669046046, 54114.612500973502644, 42746.302393844733528, -72755.988237766848095, @@ -3053,7 +3055,7 @@ function ESERK4ConstantCache(zprev) 166833.00581360163035, 329026.82468835523421, 312576.89621265294208, - 176646.09101633233210, + 176646.0910163323321, 75236.604607309453582, 42637.737445873846205, -8153.3223152391510196, @@ -3069,8 +3071,8 @@ function ESERK4ConstantCache(zprev) 47186.706607383660109, 6790.6947085002278333, 14342.377210324173892, - 183772.03330549821400, - 150455.18288356283110, + 183772.033305498214, + 150455.1828835628311, 218961.23966907712276, 165770.88292015407473, -143789.06074054460382, @@ -3078,7 +3080,7 @@ function ESERK4ConstantCache(zprev) 10211.927669996520875, 62536.034833922660618, 81801.814507558837405, - -93693.456443498199840, + -93693.45644349819984, -82253.740482500501129, 135027.16157394162803, 26688.004369958498936, @@ -3094,7 +3096,7 @@ function ESERK4ConstantCache(zprev) 18079.084115413752364, -234406.90892021651863, 26707.918005242075165, - 286272.71569499339800, + 286272.715694993398, -99755.115125688763802, -330420.08722546258669, 50572.456505924017707, @@ -3103,7 +3105,7 @@ function ESERK4ConstantCache(zprev) -276071.63921699137015, -542423.57549007227544, -507457.64666209580581, - -293332.78161343887710, + -293332.7816134388771, -125894.49589449890016, -62496.920810499790275, 5830.7129914518696784, @@ -3113,18 +3115,18 @@ function ESERK4ConstantCache(zprev) -17096.544631732130049, -19018.582683666108552, 47409.099102858950773, - -18994.420867524266430, + -18994.42086752426643, -16313.505442323583863, 50023.223157498951745, -51029.215666170467849, -2582.6469260559949415, -21407.131434329513402, -188247.13303961989711, - -161544.91408823803840, + -161544.9140882380384, -231932.09424151663083, - -170641.82485493576400, + -170641.824854935764, 145868.95827737916394, - 127787.53154508498630, + 127787.5315450849863, -13638.553679349192597, -66283.452359188091604, -83186.107718773275629, @@ -3163,22 +3165,22 @@ function ESERK4ConstantCache(zprev) 10596.145233929131733, 10670.195207686057411, -27842.265354340227482, - 12724.296997818548850, + 12724.29699781854885, 7130.1449143054886811, -27160.059219501806159, - 29345.613654487026260, - -576.09997028119248070, + 29345.61365448702626, + -576.0999702811924807, 15008.818858450740217, 104084.14327067155046, 92803.454541357199798, 131955.41764525920312, - 94614.002607164337070, + 94614.00260716433707, -79863.904461963296902, -74873.809516053591941, 8976.7576708112770927, 37884.507795251099809, 45458.614074690664931, - -51092.252743719521020, + -51092.25274371952102, -53722.558996096100799, 83311.754389473554645, 16090.838639234861453, @@ -3189,7 +3191,7 @@ function ESERK4ConstantCache(zprev) 8384.8861434421927527, 82858.515345531922791, -81290.881764833318522, - -47120.647197984328360, + -47120.64719798432836, 105209.96470035227183, 1243.4175216995165281, -127077.60952699621743, @@ -3201,11 +3203,11 @@ function ESERK4ConstantCache(zprev) 186822.89200794771056, 91042.436650155504146, -143889.43187750506396, - -280888.48579318232750, - -256671.98640447646250, + -280888.4857931823275, + -256671.9864044764625, -153362.96749699059694, -67175.744830644060584, - -25629.358402130852500, + -25629.3584021308525, -3288.3227007828047337, -1540.2470012503363492, -2415.1983804001896817, @@ -3218,26 +3220,26 @@ function ESERK4ConstantCache(zprev) 6121.0405592024350372, -6957.6915267274050039, 517.78042765473424285, - -4089.7296922240625100, + -4089.72969222406251, -23983.581343333760918, -22079.561387031961609, -31161.392032845793844, -21840.359753411227977, 18234.368119111484379, 18096.945669200460299, - -2336.8019882081211940, + -2336.801988208121194, -9012.8664240895096766, -10323.795659647739248, - 11525.100720696551350, - 13079.862092174791730, + 11525.10072069655135, + 13079.86209217479173, -19830.744647965719999, -3839.1746966974565769, - 22660.421641906310090, + 22660.42164190631009, -10563.668108589254035, -14999.656067517684626, 20693.645026580678273, -1598.8492545147770474, - -19604.208219856794160, + -19604.20821985679416, 18441.236576628632193, 11547.882714154383211, -25003.285338155391404, @@ -3255,11 +3257,11 @@ function ESERK4ConstantCache(zprev) 56668.553535551473223, 34280.522929521970989, 15179.126016695390955, - 5083.4828711366349760, + 5083.482871136634976, 1297.3750932960208735, 249.89055934076707023, 35.332943880510378778, - 3.4720980474669134410, + 3.472098047466913441, 0.21240145629815346475, 0.0061038919994897723186, 0.00079324314619947192, @@ -3270,7 +3272,7 @@ function ESERK4ConstantCache(zprev) 0.00026618271018770878, -0.000033477264130101266, -0.0032289340713040208, - -0.015319476042498880, + -0.01531947604249888, -0.034711019894679138, -0.076929942342731116, -0.10441063733723121, @@ -3281,8 +3283,8 @@ function ESERK4ConstantCache(zprev) 0.0039432287403740846, -0.060723230090485227, -0.029651096375257537, - 0.052105382990758120, - 0.029664020370576070, + 0.05210538299075812, + 0.02966402037057607, -0.046392141578960012, -0.022950456011878467, 0.049831525309103163, @@ -3300,15 +3302,15 @@ function ESERK4ConstantCache(zprev) -0.039624310403674176, 0.041144685877544089, -0.012398800827359843, - -0.013285899270350580, + -0.01328589927035058, 0.011864849143335127, 0.011665096651960289, - -0.029932420873144650, + -0.02993242087314465, 0.022658583172693165, 0.0077982126591344373, -0.038760887714173754, 0.049519927026454547, - -0.035519208114419380, + -0.03551920811441938, 0.011439175946759904, 0.0041382979090184648, -0.0013784362549420867, @@ -3327,10 +3329,10 @@ function ESERK4ConstantCache(zprev) 0.014357408276580446, -0.027356654399889173, 0.029795735371719667, - -0.022386147388273750, + -0.02238614738827375, 0.011564119137359849, -0.0040848967875794378, - 0.0044713311593481890, + 0.004471331159348189, -0.011633698071141837, 0.021051209943701391, -0.026356283170260593, @@ -3339,7 +3341,7 @@ function ESERK4ConstantCache(zprev) 0.00021353676887971602, 0.010525891193112598, -0.012960124595468376, - 0.0054100158644992310, + 0.005410015864499231, 0.010069312077539163, -0.027658028756323721, 0.040981363675245971, @@ -3384,17 +3386,17 @@ function ESERK4ConstantCache(zprev) 0.097484308183584373, -0.054235624540303451, 0.0086821868400092281, - 0.060631122693843730, - -0.084855987199134020, + 0.06063112269384373, + -0.08485598719913402, 0.089080354485310605, -0.029889535120346641, -0.029734872842272618, 0.099501806567833532, -0.10418238457632179, - 0.071763730279484920, + 0.07176373027948492, 0.028807414348610214, - -0.11798828549248870, - 0.19267966475587160, + -0.1179882854924887, + 0.1926796647558716, -0.17617482568697916, 0.10818786028256842, 0.022546748518733847, @@ -3431,7 +3433,7 @@ function ESERK4ConstantCache(zprev) -0.0059640745135155275, -0.16415189460586942, 0.13667996019121068, - 0.11134335205716330, + 0.1113433520571633, -0.25116979118508145, 0.10548406930983257, 0.20340797485660179, @@ -3441,7 +3443,7 @@ function ESERK4ConstantCache(zprev) 0.033152047302723301, -0.34670912658954563, 0.19719477023889966, - 0.24292857613700000, + 0.242928576137, -0.15357477883195366, -0.29484716190901781, 0.13814554520557204, @@ -3452,19 +3454,19 @@ function ESERK4ConstantCache(zprev) 0.36703885520372232, 0.56225179731895604, 0.72365139211353566, - 0.40666672003145010, + 0.4066667200314501, 0.24204507252333996, 0.10224527551471071, -0.0067341583157509894, 0.058944873435876237, - -0.060090876693502670, + -0.06009087669350267, 0.062781556427501021, -0.055572694486867966, 0.041450726375777506, -0.022120182297282063, -0.0083265658891659749, 0.013935169893817717, - -0.059871584473771600, + -0.0598715844737716, 0.050467994023902542, -0.083870197828537324, 0.061442318085931914, @@ -3476,10 +3478,10 @@ function ESERK4ConstantCache(zprev) 1.2273863154058457, 1.3813392882777654, 0.41468584255290123, - -0.45065719133823170, + -0.4506571913382317, -1.0178695316490503, -0.017243260132043871, - 0.71569754298482540, + 0.7156975429848254, 0.34552745242549242, -0.59136586581801423, -0.41555981888943524, @@ -3505,20 +3507,20 @@ function ESERK4ConstantCache(zprev) -0.16583237994480746, 0.40574149119051335, -0.34035838579962461, - -0.0063846851035543310, + -0.006384685103554331, 0.36107647743049382, -0.47907344279234494, 0.30394179881306184, -0.014937055792964119, -0.16737271571466217, - 0.12272908848484930, + 0.1227290884848493, 0.066741838193187255, -0.22914525689983227, 0.21180671579584874, -0.016532439142481203, -0.23874357302997927, 0.38070300041608951, - -0.32295354488924970, + -0.3229535448892497, 0.089390620720922151, 0.18258765219154934, -0.35526255790546802, @@ -3531,8 +3533,8 @@ function ESERK4ConstantCache(zprev) -0.0041197326966822964, -0.084009918147082012, 0.077409455788490928, - 0.0088796098899681970, - -0.12183494346015900, + 0.008879609889968197, + -0.121834943460159, 0.18349358718015952, -0.15183131182875811, 0.024894815965947265, @@ -3555,7 +3557,7 @@ function ESERK4ConstantCache(zprev) -0.17814300278416443, 0.29422023064029614, -0.30930516382405797, - 0.22067081948257540, + 0.2206708194825754, -0.060329668643805937, -0.12104517053764033, 0.26608546466670187, @@ -3569,7 +3571,7 @@ function ESERK4ConstantCache(zprev) -0.54193941230549605, 0.40423385244588039, -0.25040062147572025, - -0.091167736547233720, + -0.09116773654723372, 0.28202162431270182, -0.47498003897087358, 0.38116417309922554, @@ -3618,7 +3620,7 @@ function ESERK4ConstantCache(zprev) -0.48161314786820857, -0.34771784399201808, 0.82429300249050265, - -0.71589973660065650, + -0.7158997366006565, -0.10853321730634721, 0.76760326365770898, -0.82234507465885175, @@ -3636,7 +3638,7 @@ function ESERK4ConstantCache(zprev) -0.57186542326324199, -1.0201810954055938, 1.1745214870055734, - 0.29014543886556120, + 0.2901454388655612, -1.3758947501333174, 0.058712726130790017, 1.6224393713497055, @@ -3645,14 +3647,14 @@ function ESERK4ConstantCache(zprev) 0.85962971663358606, 1.6278649525268526, -0.89180023945922082, - -2.1477613375973780, + -2.147761337597378, 0.34031518682982726, 2.2684244382474201, 1.6197418195470137, -1.5790120687925734, -3.3362147146699707, - -3.5886108100460390, - -2.3561964873031450, + -3.588610810046039, + -2.356196487303145, -1.1961459108520773, -0.54950192114217587, -0.040083538827888108, @@ -3664,12 +3666,12 @@ function ESERK4ConstantCache(zprev) 0.050889514716654173, 0.0061020676393416643, -0.028233862196265593, - 0.11042052062866240, + 0.1104205206286624, -0.11186871541679599, 0.16880889225488815, -0.14261404455021699, 0.14205240334465655, - -0.17042611922207870, + -0.1704261192220787, -0.15450939676037792, -0.60550266440404522, -1.2170126365196081, @@ -3683,7 +3685,7 @@ function ESERK4ConstantCache(zprev) -0.45042514647147541, 0.76834115668192793, 0.58671194006761652, - -0.89185725741420880, + -0.8918572574142088, -0.18275257289344134, 0.59384456478837307, 0.25276786489333554, @@ -3694,11 +3696,11 @@ function ESERK4ConstantCache(zprev) -0.10570657258264888, 0.46027509586163284, -0.026349997714754502, - -0.58526991409577460, + -0.5852699140957746, 0.63418008143941378, -0.057091506943412355, -0.50551815488600427, - 0.53477705420661550, + 0.5347770542066155, -0.088283846371215716, -0.29372140454700751, 0.23679411817401895, @@ -3724,24 +3726,24 @@ function ESERK4ConstantCache(zprev) 0.49458695712265665, -0.48152098901105541, 0.26585436181404819, - 0.027572096702704220, + 0.02757209670270422, -0.23390968515866997, 0.27753509138744611, -0.16369882290306582, -0.0013478903118949053, 0.11532176434864277, -0.10257513778626762, - -0.014356498514578950, + -0.01435649851457895, 0.16672578078188265, -0.24845381002500619, 0.20554735364525595, -0.033624926780281015, - -0.18999591334670940, + -0.1899959133467094, 0.37226038299013757, -0.41971612849186107, - 0.30765136255449250, + 0.3076513625544925, -0.064861473593201646, - -0.21347794690552490, + -0.2134779469055249, 0.42888542331826758, -0.49523065249799569, 0.39301976066859827, @@ -3812,7 +3814,7 @@ function ESERK4ConstantCache(zprev) -0.31257814491890829, 0.80153643129699564, -0.63618369544929901, - 0.10043805972546640, + 0.1004380597254664, 0.63242507699766687, -0.81263971671946181, 0.46296834644318707, @@ -3841,7 +3843,7 @@ function ESERK4ConstantCache(zprev) -0.19761718897589942, -1.4771797294931435, 0.73038117869684133, - 1.5271062688315590, + 1.527106268831559, -0.92473908661013231, -1.6107647840596654, 0.92644573848400036, @@ -3863,117 +3865,117 @@ function ESERK4ConstantCache(zprev) 0.000010086274737906889, 5.0874914405982561e-7, 1.2184041231747859e-8, - -0.86559000981780345046e-02, - 0.10041502567226924178e-01, - 0.34445906468008923376e-02, - -0.23190998209551328541e-01, - 0.35861550365359463888e-01, - -0.41748641693979390843e-01, - 0.32944854385265606722e-01, - -0.18212696536742317699e-01, - -0.22238626779184631800e-02, - 0.15096782548603684612e-01, - -0.21159096488744595643e-01, - 0.13229749383200253496e-01, - -0.74833601182328426688e-03, - -0.15830902938573806343e-01, - 0.23745368266711100458e-01, - -0.24961809793816375214e-01, - 0.13785558945551081717e-01, - -0.67829414326339894110e-03, - -0.14058663189435721338e-01, - 0.19264045106455872369e-01, - -0.19493086855097440518e-01, - 0.11478841523206370634e-01, - -0.65645693559283771826e-02, - 0.34919985039709600799e-02, - -0.96495496924741096245e-02, - 0.16008392392499494472e-01, - -0.22897044269067943351e-01, - 0.19416302185060751312e-01, - -0.10944988324243369246e-01, - -0.38590736569026704711e-02, - 0.11172707296846166175e-01, - -0.10741098650191908265e-01, - -0.38124470446038133224e-02, - 0.19599956478547210514e-01, - -0.31793775899539106211e-01, - 0.25876147787575094067e-01, - -0.75388012230448277554e-02, - -0.20120239488718088400e-01, - 0.37231418607884175787e-01, - -0.39669723547834372102e-01, - 0.21759583141990453126e-01, - -0.62530436231115083673e-03, - -0.15156043833194979276e-01, - 0.11750956551330550559e-01, - -0.11352687957607976021e-03, - -0.11620519422935215656e-01, - 0.53477633181324597811e-02, - 0.12088605255706631747e-01, - -0.31909575840434294125e-01, - 0.30420655966715864915e-01, - -0.85874977111525790247e-02, - -0.25426189036355351103e-01, - 0.42021674765598808488e-01, - -0.34283163921841351696e-01, - 0.68222434415690464890e-02, - 0.80376676532282198551e-02, - 0.12661615163076559397e-02, - -0.30874772459379216938e-01, - 0.44984646870993585943e-01, - -0.30280419041860299340e-01, - -0.46916014877602984015e-02, - 0.17196310233212223212e-01, - 0.54533155256701647609e-02, - -0.44363170012545118104e-01, - 0.49031017773581736519e-01, - -0.14967942031211576431e-01, - -0.21790596036099486865e-01, - 0.10201234329098408243e-01, - 0.28489875371672208210e-01, - -0.37450702128169505167e-01, - -0.11820102800442953972e-01, - 0.51560898736909298312e-01, - -0.25678931155098578404e-01, - -0.30038508913460094246e-01, - 0.17562918337148378939e-01, - 0.40237668087045139198e-01, - -0.33111147744735267007e-01, - -0.48017286023506959569e-01, - 0.52098700030829371566e-01, - 0.25673855503207363565e-01, - -0.99870098192541643251e-02, - -0.84073524995518858494e-01, - 0.23109259682439362016e-01, - 0.55896172653117019713e-01, - 0.62337232230403140376e-01, - -0.34261970916794476372e-01, - -0.94669228718547673851e-01, + -0.86559000981780345046e-2, + 0.10041502567226924178e-1, + 0.34445906468008923376e-2, + -0.23190998209551328541e-1, + 0.35861550365359463888e-1, + -0.41748641693979390843e-1, + 0.32944854385265606722e-1, + -0.18212696536742317699e-1, + -0.222386267791846318e-2, + 0.15096782548603684612e-1, + -0.21159096488744595643e-1, + 0.13229749383200253496e-1, + -0.74833601182328426688e-3, + -0.15830902938573806343e-1, + 0.23745368266711100458e-1, + -0.24961809793816375214e-1, + 0.13785558945551081717e-1, + -0.6782941432633989411e-3, + -0.14058663189435721338e-1, + 0.19264045106455872369e-1, + -0.19493086855097440518e-1, + 0.11478841523206370634e-1, + -0.65645693559283771826e-2, + 0.34919985039709600799e-2, + -0.96495496924741096245e-2, + 0.16008392392499494472e-1, + -0.22897044269067943351e-1, + 0.19416302185060751312e-1, + -0.10944988324243369246e-1, + -0.38590736569026704711e-2, + 0.11172707296846166175e-1, + -0.10741098650191908265e-1, + -0.38124470446038133224e-2, + 0.19599956478547210514e-1, + -0.31793775899539106211e-1, + 0.25876147787575094067e-1, + -0.75388012230448277554e-2, + -0.201202394887180884e-1, + 0.37231418607884175787e-1, + -0.39669723547834372102e-1, + 0.21759583141990453126e-1, + -0.62530436231115083673e-3, + -0.15156043833194979276e-1, + 0.11750956551330550559e-1, + -0.11352687957607976021e-3, + -0.11620519422935215656e-1, + 0.53477633181324597811e-2, + 0.12088605255706631747e-1, + -0.31909575840434294125e-1, + 0.30420655966715864915e-1, + -0.85874977111525790247e-2, + -0.25426189036355351103e-1, + 0.42021674765598808488e-1, + -0.34283163921841351696e-1, + 0.6822243441569046489e-2, + 0.80376676532282198551e-2, + 0.12661615163076559397e-2, + -0.30874772459379216938e-1, + 0.44984646870993585943e-1, + -0.3028041904186029934e-1, + -0.46916014877602984015e-2, + 0.17196310233212223212e-1, + 0.54533155256701647609e-2, + -0.44363170012545118104e-1, + 0.49031017773581736519e-1, + -0.14967942031211576431e-1, + -0.21790596036099486865e-1, + 0.10201234329098408243e-1, + 0.2848987537167220821e-1, + -0.37450702128169505167e-1, + -0.11820102800442953972e-1, + 0.51560898736909298312e-1, + -0.25678931155098578404e-1, + -0.30038508913460094246e-1, + 0.17562918337148378939e-1, + 0.40237668087045139198e-1, + -0.33111147744735267007e-1, + -0.48017286023506959569e-1, + 0.52098700030829371566e-1, + 0.25673855503207363565e-1, + -0.99870098192541643251e-2, + -0.84073524995518858494e-1, + 0.23109259682439362016e-1, + 0.55896172653117019713e-1, + 0.62337232230403140376e-1, + -0.34261970916794476372e-1, + -0.94669228718547673851e-1, -0.10797463470121834717, - -0.83141435032371230340e-01, - -0.48428240707032693679e-01, - -0.15011104768187861352e-01, - -0.19773493826478867608e-01, - 0.16231002477369558396e-01, - -0.24987396718631541687e-01, - 0.28666609217507941360e-01, - -0.30724205228605763751e-01, - 0.29726606638143963923e-01, - -0.25685511845910821704e-01, - 0.18891930098528079279e-01, - -0.10005024649824906940e-01, - -0.14446299589989863507e-01, - 0.47440785532733460717e-01, - -0.40812686296160922972e-01, - 0.49844619766484590806e-01, - -0.33389414729883049038e-01, - 0.33357404336853357929e-01, - -0.10865226000935590545e-01, - 0.33160532620910496138e-02, - 0.24753815395164207105e-02, - -0.61703471489486606816e-01, - -0.96419933330778417879e-01, + -0.8314143503237123034e-1, + -0.48428240707032693679e-1, + -0.15011104768187861352e-1, + -0.19773493826478867608e-1, + 0.16231002477369558396e-1, + -0.24987396718631541687e-1, + 0.2866660921750794136e-1, + -0.30724205228605763751e-1, + 0.29726606638143963923e-1, + -0.25685511845910821704e-1, + 0.18891930098528079279e-1, + -0.1000502464982490694e-1, + -0.14446299589989863507e-1, + 0.47440785532733460717e-1, + -0.40812686296160922972e-1, + 0.49844619766484590806e-1, + -0.33389414729883049038e-1, + 0.33357404336853357929e-1, + -0.10865226000935590545e-1, + 0.33160532620910496138e-2, + 0.24753815395164207105e-2, + -0.61703471489486606816e-1, + -0.96419933330778417879e-1, -0.30009115446379608372, -0.47135618958453190386, -0.65384775241069836849, @@ -3981,88 +3983,88 @@ function ESERK4ConstantCache(zprev) -0.14472588097788333106, 0.28089365523672560343, 0.47605145835348905425, - -0.16489654270358665433e-01, + -0.16489654270358665433e-1, -0.33329241592890762602, -0.20550561655894983293, 0.27385731015733461025, 0.25429335111055778595, -0.27902857115173129721, -0.14022888153971416192, - 0.14711683269394251750, + 0.1471168326939425175, 0.23575261313167392152, -0.30165170266738794425, - -0.47708219971044206476e-01, + -0.47708219971044206476e-1, 0.26071197210406094058, - -0.75393725161956914871e-01, + -0.75393725161956914871e-1, -0.14196738591378962879, - 0.35665700028704470925e-01, + 0.35665700028704470925e-1, 0.25300527456728205689, -0.33631711019874793722, 0.12372310911164781377, 0.11586080963883213513, -0.11990409902136807407, - -0.55205903519542465219e-01, + -0.55205903519542465219e-1, 0.15711049376856076054, - -0.43140408019841244847e-01, + -0.43140408019841244847e-1, -0.16455539993022585965, 0.24709289861401076416, -0.11776382147973302184, - -0.95643092326521628177e-01, + -0.95643092326521628177e-1, 0.20550312306324630685, -0.13702645999618134898, - -0.11747233876114504883e-01, - 0.91444257977999127140e-01, - -0.34702928599788955555e-01, - -0.85552554883650058781e-01, + -0.11747233876114504883e-1, + 0.9144425797799912714e-1, + -0.34702928599788955555e-1, + -0.85552554883650058781e-1, 0.14340181822733327754, - -0.66830323226160184835e-01, - -0.96041924792727953464e-01, + -0.66830323226160184835e-1, + -0.96041924792727953464e-1, 0.23050991013802923923, -0.24088254776914536093, 0.12837942428140536322, - 0.25504959713384761644e-01, - -0.11680873030403957080, - 0.99917666292589024657e-01, - -0.39131309342692746980e-02, - -0.90450944713537526076e-01, + 0.25504959713384761644e-1, + -0.1168087303040395708, + 0.99917666292589024657e-1, + -0.3913130934269274698e-2, + -0.90450944713537526076e-1, 0.11869787783803942283, - -0.67475963754500351000e-01, - -0.16693809789885147299e-01, - 0.72165062864524398556e-01, - -0.59855020629255469011e-01, - -0.56027678006055348092e-02, - 0.74203865277587821581e-01, - -0.88926146842198433573e-01, - 0.28516286883013022141e-01, - 0.84587688672237010268e-01, + -0.67475963754500351e-1, + -0.16693809789885147299e-1, + 0.72165062864524398556e-1, + -0.59855020629255469011e-1, + -0.56027678006055348092e-2, + 0.74203865277587821581e-1, + -0.88926146842198433573e-1, + 0.28516286883013022141e-1, + 0.84587688672237010268e-1, -0.19153296264882616051, 0.23557440316167435612, - -0.18760630888301121910, - 0.65924471792089198163e-01, - 0.79055279245393919596e-01, + -0.1876063088830112191, + 0.65924471792089198163e-1, + 0.79055279245393919596e-1, -0.18578145178635047108, - 0.21533394604339969880, + 0.2153339460433996988, -0.16316175585252590263, - 0.62053814563568149287e-01, - 0.39870471382368967428e-01, - -0.98131293367368255254e-01, - 0.94065700557075734856e-01, - -0.36412656684465069534e-01, - -0.42670842943740058817e-01, + 0.62053814563568149287e-1, + 0.39870471382368967428e-1, + -0.98131293367368255254e-1, + 0.94065700557075734856e-1, + -0.36412656684465069534e-1, + -0.42670842943740058817e-1, 0.10685288919887249437, -0.12831084982810561645, 0.10035950631262087474, - -0.34849665362175250016e-01, - -0.42751378229681308296e-01, + -0.34849665362175250016e-1, + -0.42751378229681308296e-1, 0.10684606558074420668, -0.13908109726886644375, 0.13516502558019824476, -0.10227873812831908551, - 0.55807242243294502559e-01, - -0.11678217525237948038e-01, - -0.17716328970144159388e-01, - 0.27305540387113299422e-01, - -0.18874873084791417288e-01, + 0.55807242243294502559e-1, + -0.11678217525237948038e-1, + -0.17716328970144159388e-1, + 0.27305540387113299422e-1, + -0.18874873084791417288e-1, 0.26743470568937760534, -0.37336668335333111912, 0.12848861996552590758, @@ -4070,44 +4072,44 @@ function ESERK4ConstantCache(zprev) -0.43153138530984769261, 0.51458726713103730699, -0.31169733693275181174, - 0.37703984027690352898e-01, + 0.37703984027690352898e-1, 0.32980240823442869003, -0.50350628588228663052, 0.54290957650565652148, -0.29560273340282516852, - -0.14408346753546374432e-02, + -0.14408346753546374432e-2, 0.35624024557873146257, -0.48585594743642851467, 0.47405440718603120143, -0.20471500043965881743, - -0.56020832872177461770e-01, + -0.5602083287217746177e-1, 0.31228264306941833084, -0.31327724774473070246, - 0.20176101424973830190, - 0.77345583074276316737e-01, - -0.22929053845735791750, - 0.28441438945617869560, - -0.71679277433903745842e-01, + 0.2017610142497383019, + 0.77345583074276316737e-1, + -0.2292905384573579175, + 0.2844143894561786956, + -0.71679277433903745842e-1, -0.16698151657321483321, - 0.41832659857931986380, + 0.4183265985793198638, -0.39487478816666005121, 0.21697847588524440954, 0.15200585756391810088, - -0.36550161694972005400, + -0.365501616949720054, 0.40250770500915722394, - -0.85611032774603343376e-01, + -0.85611032774603343376e-1, -0.28880799791113648256, 0.61649540501198074605, -0.54270486125702321889, 0.19492507582820622902, - 0.37509576085034396220, + 0.3750957608503439622, -0.70776358743074752056, 0.72450154824426049593, -0.29509508992619215562, - -0.16678987755622803890, + -0.1667898775562280389, 0.46867498399895490824, -0.29269424649748165823, - -0.74746511615511601612e-01, + -0.74746511615511601612e-1, 0.42237222447329958452, -0.29895630486002333637, -0.13423319380493234365, @@ -4115,7 +4117,7 @@ function ESERK4ConstantCache(zprev) -0.71692140172919027741, 0.29594574593307748644, 0.41923490040511174337, - -0.72981274466410372970, + -0.7298127446641037297, 0.48200001241116996464, 0.21253486603103005637, -0.57796475689480641957, @@ -4128,97 +4130,97 @@ function ESERK4ConstantCache(zprev) 0.22286593710181368255, 0.70284678844867798375, -0.81786523638151520377, - 0.22676606135002840697e-01, + 0.22676606135002840697e-1, 0.81693858053223755711, -0.47558898631709872751, -0.52914707746975919722, 0.82572913868890907008, 0.28272685252961154978, - -0.11792712915633583037e+01, + -0.11792712915633583037e+1, 0.52804457493522516387, 0.80863985027862772537, -0.47643086024597569583, -0.96973364387259941566, 0.87639727807691758521, 0.98696746529272982862, - -0.10060547744332590803e+01, + -0.10060547744332590803e+1, -0.92244528759364952109, 0.58438390360324743433, - 0.16627859932211390692e+01, + 0.16627859932211390692e+1, -0.21517140482001090307, - -0.16443662889892161072e+01, - -0.12407974230613278976e+01, + -0.16443662889892161072e+1, + -0.12407974230613278976e+1, 0.61545759443295011692, - 0.24412178757116169692e+01, - 0.24409927019319663799e+01, - 0.21520809172580146473e+01, - 0.97400424714149858030, + 0.24412178757116169692e+1, + 0.24409927019319663799e+1, + 0.21520809172580146473e+1, + 0.9740042471414985803, 0.60223760221499256229, 0.16540156450190882098, - -0.10314612340536257959e-01, + -0.10314612340536257959e-1, 0.16053633483570151075, -0.21072089843153071764, 0.25392079863284272578, -0.26136376996763982516, 0.23468930934304588209, -0.17671214063266341143, - 0.94759324358638805097e-01, - 0.43660141741589969522e-01, + 0.94759324358638805097e-1, + 0.43660141741589969522e-1, -0.23240844388009365695, - 0.23777120574004828590, + 0.2377712057400482859, -0.32244935961943732572, 0.25421722993488549136, -0.26130646008149344128, 0.12832988573592601922, - -0.64233711683885572064e-01, - -0.46410947250512327167e-02, + -0.64233711683885572064e-1, + -0.46410947250512327167e-2, 0.35984634702030143805, 0.44170819146224243879, - 0.17041784109067350528e+01, - 0.23874327181933794328e+01, - 0.36178447504688358016e+01, - 0.29699462546614556757e+01, + 0.17041784109067350528e+1, + 0.23874327181933794328e+1, + 0.36178447504688358016e+1, + 0.29699462546614556757e+1, 0.86673383678537596619, - -0.15569844035442022001e+01, - -0.25268837089796556405e+01, + -0.15569844035442022001e+1, + -0.25268837089796556405e+1, 0.12135205226026410386, - 0.16993840726988964640e+01, - 0.12064014052201283977e+01, - -0.15926112124752140886e+01, - -0.12221125363346514447e+01, - 0.13662257160961754909e+01, + 0.1699384072698896464e+1, + 0.12064014052201283977e+1, + -0.15926112124752140886e+1, + -0.12221125363346514447e+1, + 0.13662257160961754909e+1, 0.83821819124574747928, -0.83277276539673716904, - -0.12638032761711723850e+01, - 0.16713574741717589500e+01, - 0.13383469729319114050, - -0.12206446932305534681e+01, + -0.1263803276171172385e+1, + 0.167135747417175895e+1, + 0.1338346972931911405, + -0.12206446932305534681e+1, 0.19052718288918035761, 0.99437328486705478525, -0.44086826208018770057, - -0.11029648229004935800e+01, - 0.15624889148484955026e+01, + -0.110296482290049358e+1, + 0.15624889148484955026e+1, -0.45745130412797174735, - -0.78658694141085538920, + -0.7865869414108553892, 0.76822915723484963557, 0.20290249423245002025, -0.78244857298044123706, 0.20201384280422082784, 0.88372860445256329331, - -0.13125749397111881045e+01, + -0.13125749397111881045e+1, 0.61679083774308585131, 0.51912468118448007459, - -0.11013002365504949154e+01, + -0.11013002365504949154e+1, 0.72915046323361620839, - 0.67382395836208322515e-01, + 0.67382395836208322515e-1, -0.49344682671275913455, 0.18377081637729322794, 0.46965308859696436317, -0.79933914120475224596, 0.41639493125454385414, 0.42045624252000679544, - -0.11056993584164516164e+01, - 0.11282201602997981027e+01, + -0.11056993584164516164e+1, + 0.11282201602997981027e+1, -0.50122775940309982623, -0.34123364200691175263, 0.83875416022716242637, @@ -4236,21 +4238,21 @@ function ESERK4ConstantCache(zprev) -0.33363006155231694772, -0.26878993578418536314, 0.85101126544661598317, - -0.11116263476105849861e+01, + -0.11116263476105849861e+1, 0.89124370751675774383, -0.28677970757074200403, -0.43825470886291911787, 0.95731290387580947332, - -0.10684183534368658641e+01, - 0.74902177325234964300, - -0.17874442399612733290, - -0.38505662010890534530, + -0.10684183534368658641e+1, + 0.749021773252349643, + -0.1787444239961273329, + -0.3850566201089053453, 0.70210837490050836962, -0.67380010715561500234, - 0.34578638121711863240, + 0.3457863812171186324, 0.10773544138157650774, - -0.49200573334341252130, - 0.65458541079239229710, + -0.4920057333434125213, + 0.6545854107923922971, -0.55752305640023991362, 0.25942537543033988845, 0.10655568711602582399, @@ -4258,102 +4260,102 @@ function ESERK4ConstantCache(zprev) 0.54928315550757134123, -0.51017097843292036341, 0.32975815763576987738, - -0.91037492284624862982e-01, + -0.91037492284624862982e-1, -0.12199413126331966339, 0.24430113929977304021, -0.25133279765526261862, 0.15528161377953753064, -0.75395662762892945441, - 0.94192732877716467410, + 0.9419273287771646741, -0.24310867402993757702, -0.77573533365685276575, - 0.12317741572182303589e+01, - -0.13919395709868904731e+01, + 0.12317741572182303589e+1, + -0.13919395709868904731e+1, 0.71090319999915918547, - 0.78412364019257052572e-01, - -0.11127960785104997754e+01, - 0.14874949431841748559e+01, - -0.14885186235460863280e+01, + 0.78412364019257052572e-1, + -0.11127960785104997754e+1, + 0.14874949431841748559e+1, + -0.1488518623546086328e+1, 0.63731685276552962893, 0.25164414826654585289, - -0.12537303086940878583e+01, - 0.14691501652002461054e+01, - -0.12606581434023804711e+01, + -0.12537303086940878583e+1, + 0.14691501652002461054e+1, + -0.12606581434023804711e+1, 0.27846707984374197142, 0.55083058491992964445, - -0.12685479793161944517e+01, - 0.10650291723100953067e+01, + -0.12685479793161944517e+1, + 0.10650291723100953067e+1, -0.48908711944967464547, -0.60245596985934091183, - 0.11747614596176152446e+01, - -0.13340992198783847567e+01, + 0.11747614596176152446e+1, + -0.13340992198783847567e+1, 0.51474843397897485087, 0.42244195165800663139, - -0.13995751719397517832e+01, - 0.14030173342670382297e+01, + -0.13995751719397517832e+1, + 0.14030173342670382297e+1, -0.82471091949507790986, -0.47010479438105129413, - 0.12890277756641208562e+01, - -0.15366404509626776509e+01, + 0.12890277756641208562e+1, + -0.15366404509626776509e+1, 0.56637022487469579346, - 0.65454586935163761030, - -0.18071235965151446479e+01, - 0.16902936147600300387e+01, + 0.6545458693516376103, + -0.18071235965151446479e+1, + 0.16902936147600300387e+1, -0.71509949114554727245, -0.99765796253717820008, - 0.19469333586596562213e+01, - -0.19183090139892049475e+01, + 0.19469333586596562213e+1, + -0.19183090139892049475e+1, 0.48640651441619503492, 0.95810518309611247822, - -0.18038174656307568444e+01, - 0.10136464237051787673e+01, + -0.18038174656307568444e+1, + 0.10136464237051787673e+1, 0.40682981668253481722, - -0.17262698727620557904e+01, - 0.14026106986861708315e+01, - 0.28534912665375299079e-01, - -0.18710896314077145597e+01, - 0.21575932178315149201e+01, + -0.17262698727620557904e+1, + 0.14026106986861708315e+1, + 0.28534912665375299079e-1, + -0.18710896314077145597e+1, + 0.21575932178315149201e+1, -0.90641166751250290545, - -0.13328835824136477939e+01, - 0.22483034378000232856e+01, - -0.13537064198477681831e+01, + -0.13328835824136477939e+1, + 0.22483034378000232856e+1, + -0.13537064198477681831e+1, -0.98230996168509321365, - 0.21714349542361035539e+01, - -0.13446073706437444706e+01, - -0.11540187129712258240e+01, - 0.23934393255492092401e+01, - -0.12866372610820064892e+01, - -0.15139072852348731679e+01, - 0.25663920216380673445e+01, + 0.21714349542361035539e+1, + -0.13446073706437444706e+1, + -0.1154018712971225824e+1, + 0.23934393255492092401e+1, + -0.12866372610820064892e+1, + -0.15139072852348731679e+1, + 0.25663920216380673445e+1, -0.84145815598551521042, - -0.22053084943629488457e+01, - 0.25637845136736299168e+01, - 0.76876495833090238707e-01, - -0.28300856540636565306e+01, - 0.16059395958942661586e+01, - 0.18540775311759134514e+01, - -0.29674380346986422019e+01, + -0.22053084943629488457e+1, + 0.25637845136736299168e+1, + 0.76876495833090238707e-1, + -0.28300856540636565306e+1, + 0.16059395958942661586e+1, + 0.18540775311759134514e+1, + -0.29674380346986422019e+1, -0.61536080132290393863, - 0.35191618493685750124e+01, - -0.13129221818026106661e+01, - -0.31254584604181161467e+01, - 0.19432841720960105647e+01, - 0.29949494200956303658e+01, - -0.28316395066531359070e+01, - -0.32287220003097316656e+01, - 0.31575864784841654043e+01, - 0.33644985179465982661e+01, - -0.22801455031603219403e+01, - -0.52284753925304103817e+01, - 0.47378809558544560110, - 0.56111460129796615348e+01, - 0.41389552779914602354e+01, - -0.21861011164817147900e+01, - -0.78988913779563896256e+01, - -0.84346920273278236380e+01, - -0.68751516707833513209e+01, - -0.34857228952737435712e+01, - -0.18830658484647713191e+01, + 0.35191618493685750124e+1, + -0.13129221818026106661e+1, + -0.31254584604181161467e+1, + 0.19432841720960105647e+1, + 0.29949494200956303658e+1, + -0.2831639506653135907e+1, + -0.32287220003097316656e+1, + 0.31575864784841654043e+1, + 0.33644985179465982661e+1, + -0.22801455031603219403e+1, + -0.52284753925304103817e+1, + 0.4737880955854456011, + 0.56111460129796615348e+1, + 0.41389552779914602354e+1, + -0.218610111648171479e+1, + -0.78988913779563896256e+1, + -0.8434692027327823638e+1, + -0.68751516707833513209e+1, + -0.34857228952737435712e+1, + -0.18830658484647713191e+1, -0.52336866698576112178, -0.16340990513790087935, -0.17689395140007269092, @@ -4362,66 +4364,66 @@ function ESERK4ConstantCache(zprev) 0.30412430871514289921, -0.27840123795957738562, 0.21198503138713131744, - -0.11432714081135339490, - -0.25238202831238013696e-01, + -0.1143271408113533949, + -0.25238202831238013696e-1, 0.21872731824913202447, -0.24215066042061370033, 0.34425890975989020815, - -0.28191829068610074760, + -0.2819182906861007476, 0.28981459482624660762, - -0.14454439397483770380, - 0.64241208671869942659e-01, - 0.29954102207385674417e-01, + -0.1445443939748377038, + 0.64241208671869942659e-1, + 0.29954102207385674417e-1, -0.40852704340971746078, -0.36774868030867291502, - -0.17942596947215228020e+01, - -0.22858553156504441972e+01, - -0.37170802260633233338e+01, - -0.28802198434191561560e+01, - -0.93333808041404076050, - 0.15959183806940515638e+01, - 0.25242539397645087362e+01, + -0.1794259694721522802e+1, + -0.22858553156504441972e+1, + -0.37170802260633233338e+1, + -0.2880219843419156156e+1, + -0.9333380804140407605, + 0.15959183806940515638e+1, + 0.25242539397645087362e+1, -0.15318979730578413667, - -0.16317676918291676991e+01, - -0.13008929849873525075e+01, - 0.17089717414783101024e+01, - 0.10973395359687587725e+01, - -0.12406936476658054769e+01, + -0.16317676918291676991e+1, + -0.13008929849873525075e+1, + 0.17089717414783101024e+1, + 0.10973395359687587725e+1, + -0.12406936476658054769e+1, -0.95085470729503762666, 0.92672317171174178885, - 0.11982473702839573360e+01, - -0.16347968738782729936e+01, + 0.1198247370283957336e+1, + -0.16347968738782729936e+1, -0.13781366695393640343, - 0.11974714835574471472e+01, + 0.11974714835574471472e+1, -0.14222076834111047061, - -0.10580946505864252671e+01, + -0.10580946505864252671e+1, 0.51508316396352538113, - 0.10289548176884848463e+01, - -0.14929961254600268017e+01, + 0.10289548176884848463e+1, + -0.14929961254600268017e+1, 0.40084128850914407804, 0.82936979599456650547, -0.79308406699560218822, -0.19261208334239970918, - 0.78665590365783710780, + 0.7866559036578371078, -0.21410994863412161071, -0.86612558284203255976, - 0.12969291844426922289e+01, + 0.12969291844426922289e+1, -0.60516938337160264272, -0.52096309860796075064, - 0.10938086247015155195e+01, + 0.10938086247015155195e+1, -0.70989176613980664587, - -0.94567095602891768080e-01, + -0.9456709560289176808e-1, 0.52762437080766277919, -0.21846361516068973918, -0.43730100092489893049, - 0.77647265171467472200, + 0.776472651714674722, -0.40552510853783407807, - -0.41383609760570239100, - 0.10815473428870614470e+01, - -0.10844048804689723209e+01, + -0.413836097605702391, + 0.1081547342887061447e+1, + -0.10844048804689723209e+1, 0.44130029559968908526, - 0.41561564087278585200, - -0.92075589224481391160, + 0.415615640872785852, + -0.9207558922448139116, 0.83483290792925024526, -0.30468896667696176994, -0.23230791910628081909, @@ -4429,311 +4431,311 @@ function ESERK4ConstantCache(zprev) -0.22870019051636167329, -0.14283799382380443777, 0.36012554070445385035, - -0.21474641774668318250, + -0.2147464177466831825, -0.20385429278767455696, 0.62914551460324075194, -0.74734151506458679215, 0.44710932456307173055, 0.15844321266142644133, -0.75058943161625601981, - 0.10296524842398877553e+01, + 0.10296524842398877553e+1, -0.83274523971493541463, 0.25732227358897918901, 0.43724261332393959956, -0.92456224424587896138, - 0.10068477421358408286e+01, - -0.66176632663577728000, - 0.72535757846015153083e-01, + 0.10068477421358408286e+1, + -0.66176632663577728, + 0.72535757846015153083e-1, 0.50380853176648388025, -0.82449442372583814365, 0.79215320387988885642, -0.45127097462754078849, - -0.21721938975875390576e-01, + -0.21721938975875390576e-1, 0.43199768349454237271, -0.62414223128593693257, 0.55928301133435254222, - -0.29279958304311420880, - -0.43369801626203997869e-01, + -0.2927995830431142088, + -0.43369801626203997869e-1, 0.31975214865947021448, -0.44146795584096071297, 0.39047526249876679527, -0.20599149416997553086, - -0.28190141359542321420e-01, + -0.2819014135954232142e-1, 0.22883741508630922601, -0.33138756268169827779, 0.31291339617674085449, -0.18712414176436853452, 0.50835482452315550184, -0.53444135021503402783, - 0.27749125006112068670e-01, + 0.2774912500611206867e-1, 0.69629387644243867506, -0.95851178212459531292, - 0.10282441773528869788e+01, + 0.10282441773528869788e+1, -0.47808550956251116837, - -0.91271868812275322447e-01, + -0.91271868812275322447e-1, 0.82755723013989357373, - -0.10294772269818550647e+01, - 0.97726357381142114900, - -0.29784145808889977980, + -0.10294772269818550647e+1, + 0.977263573811421149, + -0.2978414580888997798, -0.33981309028224998547, - 0.10279219262878651620e+01, - -0.10656156141031249973e+01, + 0.1027921926287865162e+1, + -0.10656156141031249973e+1, 0.79346329737694831774, - 0.52674818195920493358e-01, + 0.52674818195920493358e-1, -0.70502132881177437262, - 0.12157029622091790610e+01, + 0.1215702962209179061e+1, -0.94603610350820577235, 0.37862497150792684408, - 0.58402343765708431000, - -0.10812457921605085343e+01, - 0.12048760556830091506e+01, + 0.58402343765708431, + -0.10812457921605085343e+1, + 0.12048760556830091506e+1, -0.49966035899505878426, -0.31293332188104533431, - 0.11576123511315581371e+01, - -0.11903236817831199801e+01, + 0.11576123511315581371e+1, + -0.11903236817831199801e+1, 0.72457572671143188892, 0.35777966664132221375, - -0.10784137900258810028e+01, - 0.13511518321188205061e+01, + -0.10784137900258810028e+1, + 0.13511518321188205061e+1, -0.62506843332165173965, -0.33321699803560073105, - 0.12875745175188673119e+01, - -0.12632241718419130461e+01, + 0.12875745175188673119e+1, + -0.12632241718419130461e+1, 0.58507011636748407213, 0.68191273081973224901, - -0.13501584417654781678e+01, - 0.12775464992911402806e+01, - -0.12532511150964911750, + -0.13501584417654781678e+1, + 0.12775464992911402806e+1, + -0.1253251115096491175, -0.98373993655974689698, - 0.15796481778297528642e+01, + 0.15796481778297528642e+1, -0.84100103465599129748, -0.39752852038038138938, - 0.15398333791605816057e+01, - -0.13288528931398428945e+01, + 0.15398333791605816057e+1, + -0.13288528931398428945e+1, 0.19512669653745720599, - 0.13106816820095956722e+01, - -0.15964065487965009016e+01, + 0.13106816820095956722e+1, + -0.15964065487965009016e+1, 0.67012027614345093252, - 0.10525716633348642937e+01, - -0.17280578785480484871e+01, + 0.10525716633348642937e+1, + -0.17280578785480484871e+1, 0.98391054342774120212, 0.89010674591552063628, - -0.18198806962275375643e+01, - 0.11260529930066975890e+01, + -0.18198806962275375643e+1, + 0.1126052993006697589e+1, 0.91203971802431627047, - -0.19320572853548667602e+01, - 0.10633266514549186699e+01, - 0.11820062084462938934e+01, - -0.20423240115224601254e+01, + -0.19320572853548667602e+1, + 0.10633266514549186699e+1, + 0.11820062084462938934e+1, + -0.20423240115224601254e+1, 0.69423985747444816319, - 0.17127961889431841946e+01, - -0.19742684091236351041e+01, + 0.17127961889431841946e+1, + -0.19742684091236351041e+1, -0.14485969372145982015, - 0.23365683718968153215e+01, - -0.13236519646533566608e+01, - -0.14906037117425068317e+01, - 0.24368143638892143521e+01, + 0.23365683718968153215e+1, + -0.13236519646533566608e+1, + -0.14906037117425068317e+1, + 0.24368143638892143521e+1, 0.38015559206036064754, - -0.26658405705948946540e+01, - 0.88840970341141944910, - 0.26498509395452716220e+01, - -0.16627814334756845227e+01, - -0.23485634561245967156e+01, - 0.22927883479848372161e+01, - 0.24822662849451697653e+01, - -0.23624094454670632182e+01, - -0.28936174952078728140e+01, - 0.20360544591333966657e+01, - 0.39951068567073138027e+01, + -0.2665840570594894654e+1, + 0.8884097034114194491, + 0.2649850939545271622e+1, + -0.16627814334756845227e+1, + -0.23485634561245967156e+1, + 0.22927883479848372161e+1, + 0.24822662849451697653e+1, + -0.23624094454670632182e+1, + -0.2893617495207872814e+1, + 0.20360544591333966657e+1, + 0.39951068567073138027e+1, -0.24397789827780000382, - -0.45476546063382974339e+01, - -0.33383941805853147855e+01, - 0.18611676422282146248e+01, - 0.61381497297711193895e+01, - 0.69725000253407118933e+01, - 0.52655395555484147962e+01, - 0.29990860834769423882e+01, - 0.13524082664925787256e+01, + -0.45476546063382974339e+1, + -0.33383941805853147855e+1, + 0.18611676422282146248e+1, + 0.61381497297711193895e+1, + 0.69725000253407118933e+1, + 0.52655395555484147962e+1, + 0.29990860834769423882e+1, + 0.13524082664925787256e+1, 0.49367419649262489489, 0.14723889839422771297, - 0.35915784908828893296e-01, - 0.71233308570503662063e-02, - 0.11338796264995772232e-02, - 0.14168805326648085561e-03, - 0.13409149275074468800e-04, - 0.90475804744233835905e-06, - 0.38823235341215134477e-07, - 0.79697445282692847740e-09, - -0.41746260960424759132e-02, - 0.51341911175195702188e-02, - -0.16423480681247348747e-02, - -0.70677157694272940355e-02, - 0.13850615757978180370e-01, - -0.23053540559283103306e-01, - 0.27458464846916153662e-01, - -0.31766052045489420741e-01, - 0.30087502273629770227e-01, - -0.26252428268257993471e-01, - 0.23327130475708803686e-01, - -0.14095058540883587637e-02, - 0.31167884448448070212e-01, - 0.57161084475287379791e-01, - 0.80681548381293932692e-01, + 0.35915784908828893296e-1, + 0.71233308570503662063e-2, + 0.11338796264995772232e-2, + 0.14168805326648085561e-3, + 0.134091492750744688e-4, + 0.90475804744233835905e-6, + 0.38823235341215134477e-7, + 0.7969744528269284774e-9, + -0.41746260960424759132e-2, + 0.51341911175195702188e-2, + -0.16423480681247348747e-2, + -0.70677157694272940355e-2, + 0.1385061575797818037e-1, + -0.23053540559283103306e-1, + 0.27458464846916153662e-1, + -0.31766052045489420741e-1, + 0.30087502273629770227e-1, + -0.26252428268257993471e-1, + 0.23327130475708803686e-1, + -0.14095058540883587637e-2, + 0.31167884448448070212e-1, + 0.57161084475287379791e-1, + 0.80681548381293932692e-1, 0.11336551388799806506, - 0.76442300866603835052e-01, - 0.15011725576842384691e-01, - -0.54160248125865617652e-01, - -0.76803500078538297635e-01, - 0.14503438183903741635e-01, - 0.44032765737521968596e-01, - 0.46712447687227327819e-01, - -0.53699905391084053197e-01, - -0.36993305638780463185e-01, - 0.33432733472208299441e-01, - 0.31047319874314228960e-01, - -0.91489815729011696871e-02, - -0.59841309701170110336e-01, - 0.52273393045116849087e-01, - 0.81891186594369152346e-02, - -0.15858695783984490951e-01, - -0.32157570873240400033e-01, - 0.47932936226105553323e-01, - -0.39765350461229941048e-02, - -0.34455890153221299665e-01, - 0.15579158984820344266e-01, - 0.27240032447710102459e-01, - -0.33059566856806034407e-01, - -0.37824274270982834872e-02, - 0.33513084778386277585e-01, - -0.22054309138467443480e-01, - -0.99163252913878618955e-02, - 0.17793693889594851959e-01, - 0.10463533112675152750e-01, - -0.44276118210629454575e-01, - 0.47368981864250411795e-01, - -0.17938690342705166519e-01, - -0.14188995047751390768e-01, - 0.20487274337692377296e-01, - -0.23189544290055721931e-02, - -0.15631801052186897888e-01, - 0.12078299441290425015e-01, - 0.92906452280133531435e-02, - -0.26207742286737421150e-01, - 0.19478765024327809180e-01, - 0.84411403290580513947e-02, - -0.37147262802382799429e-01, - 0.45463835863614437960e-01, - -0.29230608468351161611e-01, - 0.21867975480828073104e-02, - 0.15673617536842699566e-01, - -0.14408865459832814054e-01, - -0.79880461254095574703e-03, - 0.15297975279345966612e-01, - -0.18207707317603249314e-01, - 0.96804725553798279258e-02, - -0.10936466242981798141e-03, - 0.36120567301786980947e-03, - -0.13663401834040023175e-01, - 0.32502473462951618488e-01, - -0.44714040561642985627e-01, - 0.41518976886702904650e-01, - -0.24146033981265021401e-01, - 0.25094911282589637581e-02, - 0.10578559965146901167e-01, - -0.78307567460665500336e-02, - -0.87881738773795542441e-02, - 0.28981326594487825249e-01, - -0.40681133396251789591e-01, - 0.36308553329946091637e-01, - -0.17028746962636145262e-01, - -0.87413993834505737679e-02, - 0.29655903431866564163e-01, - -0.37556141553174868242e-01, - 0.30691449542271653783e-01, - -0.14138687204949691376e-01, - -0.36663025170193754183e-02, - 0.14925393028966902134e-01, - -0.16145633758496369392e-01, - 0.88196230038882859198e-02, - 0.17817866907901230671e-02, - -0.97207794075016163565e-02, - 0.10939320853501443773e-01, - -0.49557354774080056639e-02, - -0.54910072129570859992e-02, - 0.15786718870856166624e-01, - -0.21573897245188190797e-01, - 0.20325904846484429966e-01, - -0.12243210304014011044e-01, - 0.88323550570376829771e-01, + 0.76442300866603835052e-1, + 0.15011725576842384691e-1, + -0.54160248125865617652e-1, + -0.76803500078538297635e-1, + 0.14503438183903741635e-1, + 0.44032765737521968596e-1, + 0.46712447687227327819e-1, + -0.53699905391084053197e-1, + -0.36993305638780463185e-1, + 0.33432733472208299441e-1, + 0.3104731987431422896e-1, + -0.91489815729011696871e-2, + -0.59841309701170110336e-1, + 0.52273393045116849087e-1, + 0.81891186594369152346e-2, + -0.15858695783984490951e-1, + -0.32157570873240400033e-1, + 0.47932936226105553323e-1, + -0.39765350461229941048e-2, + -0.34455890153221299665e-1, + 0.15579158984820344266e-1, + 0.27240032447710102459e-1, + -0.33059566856806034407e-1, + -0.37824274270982834872e-2, + 0.33513084778386277585e-1, + -0.2205430913846744348e-1, + -0.99163252913878618955e-2, + 0.17793693889594851959e-1, + 0.1046353311267515275e-1, + -0.44276118210629454575e-1, + 0.47368981864250411795e-1, + -0.17938690342705166519e-1, + -0.14188995047751390768e-1, + 0.20487274337692377296e-1, + -0.23189544290055721931e-2, + -0.15631801052186897888e-1, + 0.12078299441290425015e-1, + 0.92906452280133531435e-2, + -0.2620774228673742115e-1, + 0.1947876502432780918e-1, + 0.84411403290580513947e-2, + -0.37147262802382799429e-1, + 0.4546383586361443796e-1, + -0.29230608468351161611e-1, + 0.21867975480828073104e-2, + 0.15673617536842699566e-1, + -0.14408865459832814054e-1, + -0.79880461254095574703e-3, + 0.15297975279345966612e-1, + -0.18207707317603249314e-1, + 0.96804725553798279258e-2, + -0.10936466242981798141e-3, + 0.36120567301786980947e-3, + -0.13663401834040023175e-1, + 0.32502473462951618488e-1, + -0.44714040561642985627e-1, + 0.4151897688670290465e-1, + -0.24146033981265021401e-1, + 0.25094911282589637581e-2, + 0.10578559965146901167e-1, + -0.78307567460665500336e-2, + -0.87881738773795542441e-2, + 0.28981326594487825249e-1, + -0.40681133396251789591e-1, + 0.36308553329946091637e-1, + -0.17028746962636145262e-1, + -0.87413993834505737679e-2, + 0.29655903431866564163e-1, + -0.37556141553174868242e-1, + 0.30691449542271653783e-1, + -0.14138687204949691376e-1, + -0.36663025170193754183e-2, + 0.14925393028966902134e-1, + -0.16145633758496369392e-1, + 0.88196230038882859198e-2, + 0.17817866907901230671e-2, + -0.97207794075016163565e-2, + 0.10939320853501443773e-1, + -0.49557354774080056639e-2, + -0.54910072129570859992e-2, + 0.15786718870856166624e-1, + -0.21573897245188190797e-1, + 0.20325904846484429966e-1, + -0.12243210304014011044e-1, + 0.88323550570376829771e-1, -0.12965900349121572965, - -0.35206833928257694546e-02, + -0.35206833928257694546e-2, 0.12217562204714599305, -0.20638280009163864626, - 0.17599174902804709530, - -0.79836087399173777390e-01, - -0.77527450076180698391e-01, + 0.1759917490280470953, + -0.7983608739917377739e-1, + -0.77527450076180698391e-1, 0.18726656356042301055, -0.23886735768263411828, 0.17499657036052287951, - -0.68925664756420854107e-01, - -0.62408099272813037650e-01, + -0.68925664756420854107e-1, + -0.6240809927281303765e-1, 0.11873111599412541906, -0.11710945172904173306, - 0.34011063528850658810e-01, - 0.35834179793047322982e-01, - -0.80481080917768718641e-01, - 0.32256591567015033273e-01, - 0.46619704896482691558e-01, + 0.3401106352885065881e-1, + 0.35834179793047322982e-1, + -0.80481080917768718641e-1, + 0.32256591567015033273e-1, + 0.46619704896482691558e-1, -0.14641693833269725511, 0.17200286888044316602, -0.14740663620697724845, - 0.58755500925813664015e-01, - -0.69940852430047193572e-02, - -0.23381197633533419566e-02, - -0.74770045742478682960e-01, + 0.58755500925813664015e-1, + -0.69940852430047193572e-2, + -0.23381197633533419566e-2, + -0.7477004574247868296e-1, 0.14335275682657661056, -0.17137450606503948358, - 0.72373750745103951343e-01, - 0.85144838716366244569e-01, - -0.25379945942613257870, + 0.72373750745103951343e-1, + 0.85144838716366244569e-1, + -0.2537994594261325787, 0.29082482197671744029, -0.19807546743916742971, - -0.11591644633674081863e-01, + -0.11591644633674081863e-1, 0.17285941262379755923, -0.21967182830234913138, - 0.94448808593877942030e-01, - 0.66092674413254975940e-01, - -0.16857918627926224420, - 0.98778090338125706937e-01, - 0.47071893264740309604e-01, + 0.9444880859387794203e-1, + 0.6609267441325497594e-1, + -0.1685791862792622442, + 0.98778090338125706937e-1, + 0.47071893264740309604e-1, -0.17206614115120763553, 0.12650118772976193249, - 0.22021971103538862807e-01, + 0.22021971103538862807e-1, -0.16996467181645624756, 0.13557926900211261789, - 0.33079369665204805262e-01, + 0.33079369665204805262e-1, -0.21329072015510430749, 0.18137786021417734439, - 0.35537893097770015260e-01, + 0.3553789309777001526e-1, -0.29066916333470449452, 0.31706361096820157019, -0.12692406230537248146, -0.10971926288710046049, - 0.11133010673434999560, - 0.72092677384440403965e-01, + 0.1113301067343499956, + 0.72092677384440403965e-1, -0.21313713673454884323, - 0.43615912827615552216e-01, + 0.43615912827615552216e-1, 0.27541892253435718008, -0.41900025895164555445, - 0.17261270890657057220, + 0.1726127089065705722, 0.14030537261564091089, -0.15354103530402571365, - -0.14992800001736159010, + -0.1499280000173615901, 0.25369151046169813313, - 0.52203414438446373025e-01, + 0.52203414438446373025e-1, -0.39468742817020102676, 0.21047843956045117486, - 0.22378468016220315340, + 0.2237846801622031534, -0.23465574022251572961, -0.21622692351477498796, 0.25049155075318163544, @@ -4749,26 +4751,26 @@ function ESERK4ConstantCache(zprev) 0.56574706363408611143, -0.19468528735352921832, -0.61498131105398712304, - -0.86500741039323936210, - -0.72263562370053702200, + -0.8650074103932393621, + -0.722635623700537022, -0.39825153485943004528, -0.28517304865832676652, - -0.19626369323786679172e-01, + -0.19626369323786679172e-1, -0.10329520157195515306, - 0.55317976003197093238e-01, - -0.53836355868325892760e-01, - 0.36363015189069147759e-01, - -0.22092144928861908587e-01, - 0.95978842716089932119e-02, - -0.65577733016595606431e-03, - -0.41682328516644039443e-02, - 0.52541932967237452851e-02, - -0.34003898590073662958e-02, + 0.55317976003197093238e-1, + -0.5383635586832589276e-1, + 0.36363015189069147759e-1, + -0.22092144928861908587e-1, + 0.95978842716089932119e-2, + -0.65577733016595606431e-3, + -0.41682328516644039443e-2, + 0.52541932967237452851e-2, + -0.34003898590073662958e-2, 0.18452846973422198928, -0.29795874598803401279, - 0.24258898331103609380, - -0.76541008354601813846e-01, - -0.31993081367522067937e-01, + 0.2425889833110360938, + -0.76541008354601813846e-1, + -0.31993081367522067937e-1, 0.19975421834154086231, -0.25882989872778383589, 0.33335592304546435294, @@ -4777,25 +4779,25 @@ function ESERK4ConstantCache(zprev) -0.17299721705117762638, -0.29797195975257051437, -0.48037474419796566405, - -0.15706714990694727874e+01, - -0.18001918337654341240e+01, - -0.28034158744319919165e+01, - -0.17891714695695188908e+01, + -0.15706714990694727874e+1, + -0.1800191833765434124e+1, + -0.28034158744319919165e+1, + -0.17891714695695188908e+1, -0.38280461198522386379, - 0.13153037506709719384e+01, - 0.18261659798724558801e+01, + 0.13153037506709719384e+1, + 0.18261659798724558801e+1, -0.32304273118633541895, - -0.10867751652341728352e+01, - -0.10917895562433670431e+01, - 0.12730563206479144078e+01, + -0.10867751652341728352e+1, + -0.10917895562433670431e+1, + 0.12730563206479144078e+1, 0.87794832342129824898, -0.75222875971712821475, -0.84450507314693212813, 0.37509139849799849609, - 0.12266101916026408425e+01, - -0.99690290373520262790, + 0.12266101916026408425e+1, + -0.9969029037352026279, -0.48735542170736539935, - 0.68748690952409885480, + 0.6874869095240988548, 0.47146853150646472752, -0.87715864332051840524, -0.12954078590536582949, @@ -4803,12 +4805,12 @@ function ESERK4ConstantCache(zprev) -0.46194284500719229314, -0.64208830802511851488, 0.85605575679240930587, - -0.35631629479088204604e-01, + -0.35631629479088204604e-1, -0.62699800394565208261, 0.31917340180161396512, 0.46424152765477549876, -0.65160185144608206986, - -0.41063206920429216884e-01, + -0.41063206920429216884e-1, 0.87794062777178627499, -0.98157360387509573485, 0.30598231199445646844, @@ -4820,7 +4822,7 @@ function ESERK4ConstantCache(zprev) -0.31726662323229548601, 0.74449732835825810362, -0.60518907114913533807, - -0.42665633947180196806e-01, + -0.42665633947180196806e-1, 0.71319802298123202711, -0.89786446038142908588, 0.49883037084520009952, @@ -4830,12 +4832,12 @@ function ESERK4ConstantCache(zprev) -0.19787833345094330006, -0.14283706643044777329, 0.20111944420574701109, - 0.21549257448368837331e-01, + 0.21549257448368837331e-1, -0.27430316895398948462, 0.29651509353826049908, - -0.74563253991016204339e-02, + -0.74563253991016204339e-2, -0.41410711426127266854, - 0.68060520218750630850, + 0.6806052021875063085, -0.58351361018802760938, 0.15643383725233855897, 0.36135960523768873021, @@ -4850,16 +4852,16 @@ function ESERK4ConstantCache(zprev) -0.69195337523330191498, 0.84190027802966782566, -0.65086265122741238098, - 0.24215188465520653960, - 0.18273787530322338490, + 0.2421518846552065396, + 0.1827378753032233849, -0.43777446451125745508, 0.44229778675463299331, -0.23516167656314876377, - -0.52827411970591937884e-01, + -0.52827411970591937884e-1, 0.27557163180601695895, -0.33173291877920840776, 0.20709699510295959124, - 0.34837162114882157249e-01, + 0.34837162114882157249e-1, -0.28397570607620392646, 0.43557395072510113332, -0.42738377660139598158, @@ -4867,103 +4869,103 @@ function ESERK4ConstantCache(zprev) -0.71515624672094002534, 0.90875789272834006649, 0.29968775868252789385, - -0.12503341811929553629e+01, - 0.18776856997889646017e+01, - -0.14813315163624238835e+01, + -0.12503341811929553629e+1, + 0.18776856997889646017e+1, + -0.14813315163624238835e+1, 0.61522000776754970364, 0.71297722758990067504, - -0.14976336214319785345e+01, - 0.17662362527752819563e+01, - -0.10341765272920535601e+01, - 0.85388855146649358940e-01, + -0.14976336214319785345e+1, + 0.17662362527752819563e+1, + -0.10341765272920535601e+1, + 0.8538885514664935894e-1, 0.95337079975255312192, - -0.11567188627262623424e+01, + -0.11567188627262623424e+1, 0.81426271405615158194, 0.23204737904055081077, -0.98755606253604200084, - 0.13656172882274550950e+01, + 0.1365617288227455095e+1, -0.74758274030700089252, -0.15048584303249520899, - 0.11752026164054376611e+01, - -0.13423014222916755944e+01, + 0.11752026164054376611e+1, + -0.13423014222916755944e+1, 0.92878842357085156234, 0.14749955507148440614, -0.78773960889289851295, 0.88108898963310333663, - 0.48067618953478337407e-01, - -0.10196847503377104438e+01, - 0.16599289270439763211e+01, - -0.10117815663380151925e+01, + 0.48067618953478337407e-1, + -0.10196847503377104438e+1, + 0.16599289270439763211e+1, + -0.10117815663380151925e+1, -0.31020517625712884513, - 0.18922683053783821983e+01, - -0.23086865424817681891e+01, - 0.15551155617255436603e+01, + 0.18922683053783821983e+1, + -0.23086865424817681891e+1, + 0.15551155617255436603e+1, 0.30879310770328666225, - -0.16923352830526767754e+01, - 0.20021733456155867970e+01, + -0.16923352830526767754e+1, + 0.2002173345615586797e+1, -0.68689082974748993937, -0.87992926483163746987, - 0.18026916240171613204e+01, + 0.18026916240171613204e+1, -0.97884706013826361382, -0.57457527285462228761, - 0.18635809124032201023e+01, - -0.13764468495199861930e+01, + 0.18635809124032201023e+1, + -0.1376446849519986193e+1, -0.18574955969672607425, - 0.17576313026802978801e+01, - -0.14719623024797103827e+01, - -0.21918860780783566700, - 0.21107057091244931790e+01, - -0.19499087052269175047e+01, - -0.18813599305156546160e-01, - 0.23819959742688019411e+01, - -0.25150785257758068170e+01, + 0.17576313026802978801e+1, + -0.14719623024797103827e+1, + -0.219188607807835667, + 0.2110705709124493179e+1, + -0.19499087052269175047e+1, + -0.1881359930515654616e-1, + 0.23819959742688019411e+1, + -0.2515078525775806817e+1, 0.58627765016713451196, - 0.16908203514981978710e+01, - -0.15026679547848629248e+01, + 0.1690820351498197871e+1, + -0.15026679547848629248e+1, -0.61260544180565701389, - 0.23358382339011738438e+01, + 0.23358382339011738438e+1, -0.92304518193182749641, - -0.20607309520058891827e+01, - 0.34044786169342136084e+01, + -0.20607309520058891827e+1, + 0.34044786169342136084e+1, -0.96817391542167730023, - -0.20236303026828257323e+01, - 0.19483787243688199808e+01, - 0.13220524197354099893e+01, - -0.25713148623912096546e+01, + -0.20236303026828257323e+1, + 0.19483787243688199808e+1, + 0.13220524197354099893e+1, + -0.25713148623912096546e+1, -0.33465456063267523534, - 0.36916481312064939324e+01, - -0.18650302213685354680e+01, - -0.23916808109123839365e+01, - 0.23787600663545163115e+01, - 0.22536659170849300260e+01, - -0.26827405762651390653e+01, - -0.24867505490970658322e+01, - 0.38463302111853692189e+01, - 0.21254042991167199084e+01, - -0.30626549210226992059e+01, - -0.33769556751370064518e+01, - 0.24213137962107684764e+01, - 0.51942411888049440094e+01, + 0.36916481312064939324e+1, + -0.1865030221368535468e+1, + -0.23916808109123839365e+1, + 0.23787600663545163115e+1, + 0.2253665917084930026e+1, + -0.26827405762651390653e+1, + -0.24867505490970658322e+1, + 0.38463302111853692189e+1, + 0.21254042991167199084e+1, + -0.30626549210226992059e+1, + -0.33769556751370064518e+1, + 0.24213137962107684764e+1, + 0.51942411888049440094e+1, -0.33857422218442356776, - -0.48517213216279566623e+01, - -0.50098342938045092865e+01, - 0.14353079495821676748e+01, - 0.64838857334501662777e+01, - 0.85124449106680746269e+01, - 0.71748242771187369371e+01, - 0.41970671138487789520e+01, - 0.25162164407323666104e+01, + -0.48517213216279566623e+1, + -0.50098342938045092865e+1, + 0.14353079495821676748e+1, + 0.64838857334501662777e+1, + 0.85124449106680746269e+1, + 0.71748242771187369371e+1, + 0.4197067113848778952e+1, + 0.25162164407323666104e+1, 0.60543826370521780511, 0.59826863081358805374, - -0.13334467167786837050, + -0.1333446716778683705, 0.16442204367880469684, - -0.53453780385994860425e-01, - -0.18439237388978315518e-01, - 0.76005109816813076762e-01, + -0.53453780385994860425e-1, + -0.18439237388978315518e-1, + 0.76005109816813076762e-1, -0.10748787138689111509, - 0.11102728779709106210, - -0.89991804400502334316e-01, - 0.49945994369515640809e-01, + 0.1110272877970910621, + -0.89991804400502334316e-1, + 0.49945994369515640809e-1, -0.50639214340280558346, 0.75557824912382365312, -0.60169574222105948191, @@ -4975,511 +4977,511 @@ function ESERK4ConstantCache(zprev) 0.69893216758298293279, -0.44760571822209560544, 0.36481936061561254236, - 0.11411694047009284247e+01, - 0.15253183880226877100e+01, - 0.52339780358230489909e+01, - 0.60601079993192961126e+01, - 0.92463706683440349821e+01, - 0.60647414311530667419e+01, - 0.11985151030675111894e+01, - -0.43620481356925884242e+01, - -0.60429448014197371108e+01, + 0.11411694047009284247e+1, + 0.152531838802268771e+1, + 0.52339780358230489909e+1, + 0.60601079993192961126e+1, + 0.92463706683440349821e+1, + 0.60647414311530667419e+1, + 0.11985151030675111894e+1, + -0.43620481356925884242e+1, + -0.60429448014197371108e+1, 0.95648688862617414763, - 0.38041871684241512774e+01, - 0.34131299597221183006e+01, - -0.40091772031134054188e+01, - -0.31380722372066549575e+01, - 0.26556898975625871095e+01, - 0.27549882507945988586e+01, - -0.13032083274588783794e+01, - -0.39208560117059882977e+01, - 0.30427812832493641437e+01, - 0.19917793410727528958e+01, - -0.27190511634455947210e+01, - -0.11269233624291883356e+01, - 0.24981381710175076805e+01, + 0.38041871684241512774e+1, + 0.34131299597221183006e+1, + -0.40091772031134054188e+1, + -0.31380722372066549575e+1, + 0.26556898975625871095e+1, + 0.27549882507945988586e+1, + -0.13032083274588783794e+1, + -0.39208560117059882977e+1, + 0.30427812832493641437e+1, + 0.19917793410727528958e+1, + -0.2719051163445594721e+1, + -0.11269233624291883356e+1, + 0.24981381710175076805e+1, 0.79622942770971305571, - -0.35736173493424234771e+01, - 0.17036736086390202871e+01, - 0.20931029787067130243e+01, - -0.29226668880515216387e+01, + -0.35736173493424234771e+1, + 0.17036736086390202871e+1, + 0.20931029787067130243e+1, + -0.29226668880515216387e+1, 0.28416818440077906693, - 0.18493154666494167060e+01, + 0.1849315466649416706e+1, -0.78247121710770672909, - -0.18413244932510330898e+01, - 0.24443142763921481553e+01, - -0.92909926715987453671e-01, - -0.27598951018640827115e+01, - 0.31729465079122554094e+01, + -0.18413244932510330898e+1, + 0.24443142763921481553e+1, + -0.92909926715987453671e-1, + -0.27598951018640827115e+1, + 0.31729465079122554094e+1, -0.99119636004338518287, - -0.14352262196819047801e+01, - 0.18273087537164331984e+01, + -0.14352262196819047801e+1, + 0.18273087537164331984e+1, -0.31733932325631786231, - -0.11305697454063032836e+01, + -0.11305697454063032836e+1, 0.80512111197402114193, 0.97585615254309920896, - -0.24294778927262528079e+01, - 0.19929135228685661563e+01, + -0.24294778927262528079e+1, + 0.19929135228685661563e+1, 0.13991588599050874819, - -0.23595390346748028598e+01, - 0.29675289701834026701e+01, - -0.16438264880709334559e+01, + -0.23595390346748028598e+1, + 0.29675289701834026701e+1, + -0.16438264880709334559e+1, -0.52666606447859276585, - 0.19418145333830236776e+01, - -0.18275009518922309404e+01, + 0.19418145333830236776e+1, + -0.18275009518922309404e+1, 0.60056920256012891191, 0.54552476608403666081, -0.74068070124467144666, - -0.17202899295098664917e-01, + -0.17202899295098664917e-1, 0.88779021310732464389, - -0.10051497526331563126e+01, - 0.92356653054532916736e-01, - 0.12556396019525299934e+01, - -0.20904141423250397480e+01, - 0.17194096632457533946e+01, + -0.10051497526331563126e+1, + 0.92356653054532916736e-1, + 0.12556396019525299934e+1, + -0.2090414142325039748e+1, + 0.17194096632457533946e+1, -0.26439250134990677221, - -0.14758389780641423261e+01, - 0.24614853985892288790e+01, - -0.21141650824101705375e+01, + -0.14758389780641423261e+1, + 0.2461485398589228879e+1, + -0.21141650824101705375e+1, 0.58907947005232252913, - 0.12733317174691105578e+01, - -0.24975844776397391200e+01, - 0.24519333650565648952e+01, - -0.12130040627388023466e+01, + 0.12733317174691105578e+1, + -0.249758447763973912e+1, + 0.24519333650565648952e+1, + -0.12130040627388023466e+1, -0.57283448216936494468, - 0.20129355964762294384e+01, - -0.24750240826941047878e+01, - 0.18251589869898598995e+01, + 0.20129355964762294384e+1, + -0.24750240826941047878e+1, + 0.18251589869898598995e+1, -0.47747542199776793481, -0.89974177036788582917, - 0.16884059301992435653e+01, - -0.16271066996541843075e+01, + 0.16884059301992435653e+1, + -0.16271066996541843075e+1, 0.85107794297449812504, 0.19428934989103469055, - -0.10153096413662558994e+01, - 0.12659142217400347619e+01, + -0.10153096413662558994e+1, + 0.12659142217400347619e+1, -0.89404839166358296421, - 0.10687712647681675560, + 0.1068771264768167556, 0.72916034823746100901, - -0.12642934847212645710e+01, - 0.12869920328708595036e+01, + -0.1264293484721264571e+1, + 0.12869920328708595036e+1, -0.80022043800032038874, - 0.14941004088959275453e+01, - -0.17111740114449949246e+01, + 0.14941004088959275453e+1, + -0.17111740114449949246e+1, -0.93891966776334234712, - 0.27904476610400950065e+01, - -0.39167535221544960145e+01, - 0.27935174848388526492e+01, + 0.27904476610400950065e+1, + -0.39167535221544960145e+1, + 0.27935174848388526492e+1, -0.86955550132810255359, - -0.19050385083929834984e+01, - 0.32383192010119832283e+01, - -0.34196002210763696283e+01, - 0.14208818158414810995e+01, + -0.19050385083929834984e+1, + 0.32383192010119832283e+1, + -0.34196002210763696283e+1, + 0.14208818158414810995e+1, 0.78019287830366368386, - -0.29515450191054743989e+01, - 0.29800377393422361472e+01, - -0.17537559984784514278e+01, + -0.29515450191054743989e+1, + 0.29800377393422361472e+1, + -0.17537559984784514278e+1, -0.99879629791480939449, - 0.28112662301606325954e+01, - -0.35420201525783530094e+01, - 0.17935733278367536059e+01, + 0.28112662301606325954e+1, + -0.35420201525783530094e+1, + 0.17935733278367536059e+1, 0.55468194781000768057, - -0.30535495302419835006e+01, - 0.32808514067570815342e+01, - -0.19715726045530346244e+01, + -0.30535495302419835006e+1, + 0.32808514067570815342e+1, + -0.19715726045530346244e+1, -0.98543719331040957599, - 0.27968340812571170773e+01, - -0.31108827681933233222e+01, + 0.27968340812571170773e+1, + -0.31108827681933233222e+1, 0.71587033756093942927, - 0.19844056552102400381e+01, - -0.40194192972426057153e+01, - 0.29400658829378314429e+01, + 0.19844056552102400381e+1, + -0.40194192972426057153e+1, + 0.29400658829378314429e+1, -0.11850667123840782913, - -0.35547771452492642474e+01, - 0.46536747914587932584e+01, - -0.31396265750221736823e+01, + -0.35547771452492642474e+1, + 0.46536747914587932584e+1, + -0.31396265750221736823e+1, -0.95974669663569134315, - 0.39168416043149005823e+01, - -0.44191723464560555001e+01, - 0.11721693720763228796e+01, - 0.25135301973204597914e+01, - -0.45589344675813281427e+01, - 0.23769884649018804268e+01, - 0.14961929716616437780e+01, - -0.46410918328164374458e+01, - 0.34001922634336656515e+01, + 0.39168416043149005823e+1, + -0.44191723464560555001e+1, + 0.11721693720763228796e+1, + 0.25135301973204597914e+1, + -0.45589344675813281427e+1, + 0.23769884649018804268e+1, + 0.1496192971661643778e+1, + -0.46410918328164374458e+1, + 0.34001922634336656515e+1, 0.49635478779872677091, - -0.44478050184900581598e+01, - 0.38846983567390775960e+01, + -0.44478050184900581598e+1, + 0.3884698356739077596e+1, 0.15050011557409612162, - -0.48095457975422890584e+01, - 0.46576598181186454894e+01, + -0.48095457975422890584e+1, + 0.46576598181186454894e+1, -0.24643658131689202828, - -0.51224485993957378227e+01, - 0.52154974270080769472e+01, + -0.51224485993957378227e+1, + 0.52154974270080769472e+1, -0.51523529360085795759, - -0.48490659128232040942e+01, - 0.41213736850731761407e+01, - 0.13430600863972528280e+01, - -0.59138598580312891073e+01, - 0.29047716302407109445e+01, - 0.39925748197127517436e+01, - -0.71342908359486330028e+01, - 0.13844845853327092389e+01, - 0.55326984704621757771e+01, - -0.49933715459629173239e+01, - -0.32446040863118748021e+01, - 0.65732518573685032592e+01, + -0.48490659128232040942e+1, + 0.41213736850731761407e+1, + 0.1343060086397252828e+1, + -0.59138598580312891073e+1, + 0.29047716302407109445e+1, + 0.39925748197127517436e+1, + -0.71342908359486330028e+1, + 0.13844845853327092389e+1, + 0.55326984704621757771e+1, + -0.49933715459629173239e+1, + -0.32446040863118748021e+1, + 0.65732518573685032592e+1, 0.18087835204188035254, - -0.81731177275654847136e+01, - 0.38722165528901455467e+01, - 0.61329150281727633498e+01, - -0.58250992351153607629e+01, - -0.55809213878220003124e+01, - 0.68403636751645162661e+01, - 0.54329590962540104115e+01, - -0.86903563659381912743e+01, - -0.55301213579867463110e+01, - 0.75689775922055329005e+01, - 0.81452006036411628287e+01, - -0.61162261026860189617e+01, - -0.11945423472262913123e+02, + -0.81731177275654847136e+1, + 0.38722165528901455467e+1, + 0.61329150281727633498e+1, + -0.58250992351153607629e+1, + -0.55809213878220003124e+1, + 0.68403636751645162661e+1, + 0.54329590962540104115e+1, + -0.86903563659381912743e+1, + -0.5530121357986746311e+1, + 0.75689775922055329005e+1, + 0.81452006036411628287e+1, + -0.61162261026860189617e+1, + -0.11945423472262913123e+2, 0.15481780713109133396, - 0.12334624726992357679e+02, - 0.11399308305772963834e+02, - -0.29745668963712197375e+01, - -0.15823895258801080388e+02, - -0.20397975811847835814e+02, - -0.17037378678304822444e+02, - -0.10428233337983627393e+02, - -0.55743926790215514444e+01, - -0.19598516423060232672e+01, + 0.12334624726992357679e+2, + 0.11399308305772963834e+2, + -0.29745668963712197375e+1, + -0.15823895258801080388e+2, + -0.20397975811847835814e+2, + -0.17037378678304822444e+2, + -0.10428233337983627393e+2, + -0.55743926790215514444e+1, + -0.19598516423060232672e+1, -0.95291464119429014623, - -0.89339190925036102153e-01, - -0.92521394477215246344e-01, - -0.56093820304468230975e-01, + -0.89339190925036102153e-1, + -0.92521394477215246344e-1, + -0.56093820304468230975e-1, 0.11739247717412819305, -0.16775027295664204918, 0.18658158742784736184, -0.17381132298734824904, 0.13358823589097490458, - -0.72253686824003515721e-01, + -0.72253686824003515721e-1, 0.33474309916512701157, -0.44021285430810347394, 0.32306991250028999074, - 0.48361150779289339974e-01, + 0.48361150779289339974e-1, -0.22092753755692046136, - 0.54786884969425531100, + 0.547868849694255311, -0.58316293059779589214, 0.69757168459680840567, -0.51209421167822388732, 0.31197862227423889259, -0.25769614696010556543, -0.91847481645953255036, - -0.12438593656660448250e+01, - -0.41315264357076770807e+01, - -0.49222072793508067079e+01, - -0.73139705901002241006e+01, - -0.49222674418643981298e+01, + -0.1243859365666044825e+1, + -0.41315264357076770807e+1, + -0.49222072793508067079e+1, + -0.73139705901002241006e+1, + -0.49222674418643981298e+1, -0.91327202296173137785, - 0.34873744811350682049e+01, - 0.47895634695205551168e+01, + 0.34873744811350682049e+1, + 0.47895634695205551168e+1, -0.66775263593180922417, - -0.31826258187219313989e+01, - -0.25583829009567464752e+01, - 0.30251231301473420210e+01, - 0.26858445446284862079e+01, - -0.22680144196846487858e+01, - -0.21062264966241719399e+01, - 0.10069813729144292402e+01, - 0.31087426029608504763e+01, - -0.23412121931759992677e+01, - -0.17378473036279327157e+01, - 0.23590867955713927806e+01, + -0.31826258187219313989e+1, + -0.25583829009567464752e+1, + 0.3025123130147342021e+1, + 0.26858445446284862079e+1, + -0.22680144196846487858e+1, + -0.21062264966241719399e+1, + 0.10069813729144292402e+1, + 0.31087426029608504763e+1, + -0.23412121931759992677e+1, + -0.17378473036279327157e+1, + 0.23590867955713927806e+1, 0.70185915335431048323, - -0.18005666280686847269e+01, + -0.18005666280686847269e+1, -0.80934372271845511637, - 0.29925747510467863854e+01, - -0.14429528789089915985e+01, - -0.16497000088727982181e+01, - 0.23705148374034958891e+01, + 0.29925747510467863854e+1, + -0.14429528789089915985e+1, + -0.16497000088727982181e+1, + 0.23705148374034958891e+1, -0.30596277877630806419, - -0.13634683216669574168e+01, + -0.13634683216669574168e+1, 0.49108939986549698942, - 0.16140048818988794732e+01, - -0.20842680814914338328e+01, + 0.16140048818988794732e+1, + -0.20842680814914338328e+1, 0.18190324580118494291, - 0.21328923302167464016e+01, - -0.24964943874193363804e+01, + 0.21328923302167464016e+1, + -0.24964943874193363804e+1, 0.78623373152691478083, - 0.11276541716648342817e+01, - -0.14191397572773936098e+01, + 0.11276541716648342817e+1, + -0.14191397572773936098e+1, 0.20127258413863219344, 0.96007633703292571958, -0.69167633354636559595, -0.74458371891795738229, - 0.19246248284783349369e+01, - -0.15899009881152643686e+01, + 0.19246248284783349369e+1, + -0.15899009881152643686e+1, -0.10238005492381757611, - 0.18717674199219389575e+01, - -0.23560292874043273770e+01, - 0.13039422790962478249e+01, + 0.18717674199219389575e+1, + -0.2356029287404327377e+1, + 0.13039422790962478249e+1, 0.42206726201923222552, - -0.15377426573834169776e+01, - 0.14306768673494740796e+01, + -0.15377426573834169776e+1, + 0.14306768673494740796e+1, -0.43297177857934449063, - -0.49375453167958055500, + -0.493754531679580555, 0.65517887790057061093, - -0.44291860991563042349e-01, + -0.44291860991563042349e-1, -0.66326308976296877162, 0.77771802614612361992, - -0.72220390023209068975e-01, + -0.72220390023209068975e-1, -0.97642450829585702987, - 0.16159994223838121119e+01, - -0.12925988909139323191e+01, + 0.16159994223838121119e+1, + -0.12925988909139323191e+1, 0.10994370599970000602, - 0.12933369433324175546e+01, - -0.20807794507903691894e+01, - 0.17918707384674610328e+01, + 0.12933369433324175546e+1, + -0.20807794507903691894e+1, + 0.17918707384674610328e+1, -0.54868891095529370716, -0.97205364710899377911, - 0.19896411638700042257e+01, - -0.19927795469336893053e+01, - 0.10410946122244131296e+01, + 0.19896411638700042257e+1, + -0.19927795469336893053e+1, + 0.10410946122244131296e+1, 0.35436686368341741016, - -0.14809474280526480072e+01, - 0.18374539494339920953e+01, - -0.13165593554666188414e+01, + -0.14809474280526480072e+1, + 0.18374539494339920953e+1, + -0.13165593554666188414e+1, 0.25165728727069658355, 0.82513867191059819817, - -0.14200344608443060679e+01, - 0.13284662569207084104e+01, - -0.66128687895707038980, + -0.14200344608443060679e+1, + 0.13284662569207084104e+1, + -0.6612868789570703898, -0.21975094477458509412, 0.91650566502769736932, - -0.11474146164057126285e+01, + -0.11474146164057126285e+1, 0.86870852488506400402, -0.24357080433603658931, - -0.43478484084158081080, - 0.88622617428629002490, + -0.4347848408415808108, + 0.8862261742862900249, -0.93905664496950957965, 0.59274985291410919874, -0.88878639331104070109, 0.93970926692139067349, - 0.68461165844785631940, - -0.16887319912149305612e+01, - 0.22395679073817493787e+01, - -0.13909399704595528657e+01, + 0.6846116584478563194, + -0.16887319912149305612e+1, + 0.22395679073817493787e+1, + -0.13909399704595528657e+1, 0.17310860505636441187, - 0.14849740788896410582e+01, - -0.21067808695571441646e+01, - 0.19977227348878190405e+01, + 0.14849740788896410582e+1, + -0.21067808695571441646e+1, + 0.19977227348878190405e+1, -0.53152522097609322671, -0.92054473116278612288, - 0.22424301610557240139e+01, - -0.20692058675056483885e+01, - 0.10886959544107994713e+01, + 0.22424301610557240139e+1, + -0.20692058675056483885e+1, + 0.10886959544107994713e+1, 0.83617215888367713017, - -0.20195223379433033806e+01, - 0.24053419055194260601e+01, - -0.10990655710219836561e+01, + -0.20195223379433033806e+1, + 0.24053419055194260601e+1, + -0.10990655710219836561e+1, -0.56388599414103690588, - 0.22506565845780230894e+01, - -0.23130283388604802042e+01, - 0.12803083258118537202e+01, + 0.22506565845780230894e+1, + -0.23130283388604802042e+1, + 0.12803083258118537202e+1, 0.88469291639625513568, - -0.22390740241008861844e+01, - 0.25111266847332105456e+01, + -0.22390740241008861844e+1, + 0.25111266847332105456e+1, -0.85329898635365375448, - -0.11037054413600098091e+01, - 0.26838362406686977479e+01, - -0.21779769719806587602e+01, - 0.45715457900334449670, - 0.19381928974623434669e+01, - -0.27175037260456158528e+01, - 0.18465517572815230984e+01, - 0.71499623366778386480, - -0.25197922995185337847e+01, - 0.27492633333175016119e+01, + -0.11037054413600098091e+1, + 0.26838362406686977479e+1, + -0.21779769719806587602e+1, + 0.4571545790033444967, + 0.19381928974623434669e+1, + -0.27175037260456158528e+1, + 0.18465517572815230984e+1, + 0.7149962336677838648, + -0.25197922995185337847e+1, + 0.27492633333175016119e+1, -0.54891639704350114748, - -0.18642571458128749384e+01, - 0.31426623591587756756e+01, - -0.15863163507485704695e+01, - -0.10643769661741249166e+01, - 0.31840126510114434844e+01, - -0.23165975579869910739e+01, + -0.18642571458128749384e+1, + 0.31426623591587756756e+1, + -0.15863163507485704695e+1, + -0.10643769661741249166e+1, + 0.31840126510114434844e+1, + -0.23165975579869910739e+1, -0.35764383003789029791, - 0.30870793775421314642e+01, - -0.27790706910948865804e+01, - 0.11103732225622381380, - 0.30435468789425605962e+01, - -0.30454466998479263751e+01, + 0.30870793775421314642e+1, + -0.27790706910948865804e+1, + 0.1110373222562238138, + 0.30435468789425605962e+1, + -0.30454466998479263751e+1, 0.24987799763274218257, - 0.31878831403007659162e+01, - -0.31397032553179635705e+01, - -0.32219389278428108014e-01, - 0.35701160787486676540e+01, - -0.29649295690478130183e+01, - -0.84708429177802191390, - 0.40853432690181223919e+01, - -0.22424790329847978931e+01, - -0.22473397641434078587e+01, - 0.43196225082895693959e+01, + 0.31878831403007659162e+1, + -0.31397032553179635705e+1, + -0.32219389278428108014e-1, + 0.3570116078748667654e+1, + -0.29649295690478130183e+1, + -0.8470842917780219139, + 0.40853432690181223919e+1, + -0.22424790329847978931e+1, + -0.22473397641434078587e+1, + 0.43196225082895693959e+1, -0.54685950373759162346, - -0.39269136610605661630e+01, - 0.33891808436798402937e+01, - 0.22922191791129740146e+01, - -0.46669796862298307261e+01, + -0.3926913661060566163e+1, + 0.33891808436798402937e+1, + 0.22922191791129740146e+1, + -0.46669796862298307261e+1, 0.26373313405989229352, - 0.50447883048691277708e+01, - -0.22312731140178887479e+01, - -0.43195179297653680806e+01, - 0.39619854016661681939e+01, - 0.38024192422819949044e+01, - -0.47741612841492653274e+01, - -0.33214655288931131949e+01, - 0.54700164345106019326e+01, - 0.39755049713763321861e+01, - -0.52482736489283281500e+01, - -0.53411918291311293316e+01, - 0.41102981381865415500e+01, - 0.78276980792907933093e+01, + 0.50447883048691277708e+1, + -0.22312731140178887479e+1, + -0.43195179297653680806e+1, + 0.39619854016661681939e+1, + 0.38024192422819949044e+1, + -0.47741612841492653274e+1, + -0.33214655288931131949e+1, + 0.54700164345106019326e+1, + 0.39755049713763321861e+1, + -0.524827364892832815e+1, + -0.53411918291311293316e+1, + 0.411029813818654155e+1, + 0.78276980792907933093e+1, 0.10438642259341171514, - -0.84571648272750099551e+01, - -0.73808608114638785125e+01, - 0.18183521745399287006e+01, - 0.10638005959904399234e+02, - 0.13595490041589947339e+02, - 0.11284930752477881910e+02, - 0.70833729773850171441e+01, - 0.35562907460791968184e+01, - 0.14665625044341619176e+01, + -0.84571648272750099551e+1, + -0.73808608114638785125e+1, + 0.18183521745399287006e+1, + 0.10638005959904399234e+2, + 0.13595490041589947339e+2, + 0.1128493075247788191e+2, + 0.70833729773850171441e+1, + 0.35562907460791968184e+1, + 0.14665625044341619176e+1, 0.50336621143194004713, 0.14458887371963569102, - 0.34758437698520674997e-01, - 0.69599648153372386042e-02, - 0.11496894990368417607e-02, - 0.15423254526875698192e-03, - 0.16403810023698939410e-04, - 0.13324999337728216601e-05, - 0.77733620146298893135e-07, - 0.29022890712300697942e-08, + 0.34758437698520674997e-1, + 0.69599648153372386042e-2, + 0.11496894990368417607e-2, + 0.15423254526875698192e-3, + 0.1640381002369893941e-4, + 0.13324999337728216601e-5, + 0.77733620146298893135e-7, + 0.29022890712300697942e-8, 0.52132560022006839452e-10, - 0.10077978695169985401e-01, - -0.16114522272418340537e-01, - 0.10330049463047032143e-01, - -0.20460552473494310506e-02, - -0.32913267595104783985e-03, - 0.22838900399664124581e-03, - 0.51965541535286185679e-02, - -0.78069474390122083757e-02, - 0.97327347303859147731e-02, - -0.64939436177210178511e-02, - 0.55552595340343114555e-02, - -0.54358420955741715980e-02, - 0.11761721316202310150e-01, - -0.17352258557147750423e-01, - 0.22359890894089504143e-01, - -0.18847874772091762624e-01, - 0.12445138077027559365e-01, - -0.38038382665546801621e-02, - 0.40659827083895788702e-02, - -0.11247216748125791336e-01, - 0.25874335972975715664e-01, - -0.33740443880826871681e-01, - 0.30541421561665782480e-01, - -0.99584697519749468958e-02, - -0.14843915441527180329e-01, - 0.34062702367192776443e-01, - -0.31742866791216288458e-01, - 0.12833484547255068556e-01, - 0.14409683793310991071e-01, - -0.27636670943564815156e-01, - 0.21320849647781907332e-01, - 0.42808486334239758894e-02, - -0.27592820452279929327e-01, - 0.36974516707475049704e-01, - -0.24589175407473289059e-01, - 0.74468179668653235875e-02, - 0.19646496397479999707e-02, - 0.77586683504979846171e-02, - -0.21701403538410806576e-01, - 0.26498138584765743714e-01, - -0.93347957409756140978e-02, - -0.13455602386404764623e-01, - 0.24180422684157709678e-01, - -0.67219910679277494400e-02, - -0.20959082749090661435e-01, - 0.35443766673467498596e-01, - -0.16158021586861207042e-01, - -0.17966850198803032551e-01, - 0.39204033883956095063e-01, - -0.25333350889211007917e-01, - -0.18741007425264731047e-02, - 0.13443810781641961707e-01, - 0.60063419216679451995e-02, - -0.24081471214583791834e-01, - 0.11259914112800469693e-01, - 0.32107729630609233018e-01, - -0.56211370238690321066e-01, - 0.34180146275098570452e-01, - 0.12513554494961862812e-01, - -0.24953391643421328483e-01, - -0.68036538083342604222e-03, - 0.15728581437323693043e-01, - 0.22682728260118894398e-01, - -0.67321033029287505323e-01, - 0.55556670693905949032e-01, - 0.10775400428085075120e-03, - -0.91158620500159590061e-02, - -0.37619858965711371057e-01, - 0.51965723371207583892e-01, - 0.78599866163147225767e-02, - -0.33799349658709600119e-01, - -0.26617298406466698146e-01, - 0.57896125055536547255e-01, - 0.11937305795424938207e-01, - -0.29391268809323488342e-01, - -0.51629248264827093395e-01, - 0.39376331802460175224e-01, - 0.55981191011528291801e-01, - 0.62171495804247385933e-02, - -0.56209236518189847898e-01, - -0.68997965056944152162e-01, - 0.86682269649338058309e-02, - 0.61388316643284403240e-01, + 0.10077978695169985401e-1, + -0.16114522272418340537e-1, + 0.10330049463047032143e-1, + -0.20460552473494310506e-2, + -0.32913267595104783985e-3, + 0.22838900399664124581e-3, + 0.51965541535286185679e-2, + -0.78069474390122083757e-2, + 0.97327347303859147731e-2, + -0.64939436177210178511e-2, + 0.55552595340343114555e-2, + -0.5435842095574171598e-2, + 0.1176172131620231015e-1, + -0.17352258557147750423e-1, + 0.22359890894089504143e-1, + -0.18847874772091762624e-1, + 0.12445138077027559365e-1, + -0.38038382665546801621e-2, + 0.40659827083895788702e-2, + -0.11247216748125791336e-1, + 0.25874335972975715664e-1, + -0.33740443880826871681e-1, + 0.3054142156166578248e-1, + -0.99584697519749468958e-2, + -0.14843915441527180329e-1, + 0.34062702367192776443e-1, + -0.31742866791216288458e-1, + 0.12833484547255068556e-1, + 0.14409683793310991071e-1, + -0.27636670943564815156e-1, + 0.21320849647781907332e-1, + 0.42808486334239758894e-2, + -0.27592820452279929327e-1, + 0.36974516707475049704e-1, + -0.24589175407473289059e-1, + 0.74468179668653235875e-2, + 0.19646496397479999707e-2, + 0.77586683504979846171e-2, + -0.21701403538410806576e-1, + 0.26498138584765743714e-1, + -0.93347957409756140978e-2, + -0.13455602386404764623e-1, + 0.24180422684157709678e-1, + -0.672199106792774944e-2, + -0.20959082749090661435e-1, + 0.35443766673467498596e-1, + -0.16158021586861207042e-1, + -0.17966850198803032551e-1, + 0.39204033883956095063e-1, + -0.25333350889211007917e-1, + -0.18741007425264731047e-2, + 0.13443810781641961707e-1, + 0.60063419216679451995e-2, + -0.24081471214583791834e-1, + 0.11259914112800469693e-1, + 0.32107729630609233018e-1, + -0.56211370238690321066e-1, + 0.34180146275098570452e-1, + 0.12513554494961862812e-1, + -0.24953391643421328483e-1, + -0.68036538083342604222e-3, + 0.15728581437323693043e-1, + 0.22682728260118894398e-1, + -0.67321033029287505323e-1, + 0.55556670693905949032e-1, + 0.1077540042808507512e-3, + -0.91158620500159590061e-2, + -0.37619858965711371057e-1, + 0.51965723371207583892e-1, + 0.78599866163147225767e-2, + -0.33799349658709600119e-1, + -0.26617298406466698146e-1, + 0.57896125055536547255e-1, + 0.11937305795424938207e-1, + -0.29391268809323488342e-1, + -0.51629248264827093395e-1, + 0.39376331802460175224e-1, + 0.55981191011528291801e-1, + 0.62171495804247385933e-2, + -0.56209236518189847898e-1, + -0.68997965056944152162e-1, + 0.86682269649338058309e-2, + 0.6138831664328440324e-1, 0.10892560383020705173, - 0.86377945879432607712e-01, - 0.67688931768730684069e-01, - 0.31163673414011213575e-01, - 0.19127800855460477120e-01, - 0.27845808452961521261e-02, - 0.54559555362500150588e-02, - -0.27561117056127668913e-02, - 0.26772317243420810755e-02, - -0.10666501314346196316e-02, - -0.92849422489788338824e-03, - 0.31371837402116328590e-02, - -0.50542825267110048915e-02, - 0.61802610354290592534e-02, - -0.61969873393454182400e-02, - 0.49989996003497200877e-02, - -0.27897649225165281443e-02, - -0.58496083502820921118e-01, - 0.96269465647171051370e-01, - -0.72413991970242369556e-01, - 0.11884964815655436887e-01, - 0.32110734715634983716e-01, - -0.87991532901216765183e-01, + 0.86377945879432607712e-1, + 0.67688931768730684069e-1, + 0.31163673414011213575e-1, + 0.1912780085546047712e-1, + 0.27845808452961521261e-2, + 0.54559555362500150588e-2, + -0.27561117056127668913e-2, + 0.26772317243420810755e-2, + -0.10666501314346196316e-2, + -0.92849422489788338824e-3, + 0.3137183740211632859e-2, + -0.50542825267110048915e-2, + 0.61802610354290592534e-2, + -0.619698733934541824e-2, + 0.49989996003497200877e-2, + -0.27897649225165281443e-2, + -0.58496083502820921118e-1, + 0.9626946564717105137e-1, + -0.72413991970242369556e-1, + 0.11884964815655436887e-1, + 0.32110734715634983716e-1, + -0.87991532901216765183e-1, 0.10283615694895978376, -0.11070654091046104595, - 0.69061103315355421017e-01, - -0.22511199124181858339e-01, - -0.51505492294042151680e-01, + 0.69061103315355421017e-1, + -0.22511199124181858339e-1, + -0.5150549229404215168e-1, 0.13024474884361214588, -0.12924608232929316043, 0.32106184286999678301, - 0.81682621686992751275e-01, + 0.81682621686992751275e-1, 0.64968483283338740453, 0.65248245679309113676, 0.80497633673112523045, @@ -5487,16 +5489,16 @@ function ESERK4ConstantCache(zprev) -0.15110666784620721548, -0.31730785450856935359, -0.67263003641892071816, - 0.19863510746978779720, + 0.1986351074697877972, 0.38074795743219091992, 0.27239702756682449003, -0.29514287078198642167, - -0.41671827902055402770, + -0.4167182790205540277, 0.27989854558551208186, - 0.29397435451034215070, + 0.2939743545103421507, -0.10414545742953831842, -0.33442759827998075339, - 0.79575944545025423249e-01, + 0.79575944545025423249e-1, 0.39138985564691819441, -0.24714261612718069205, -0.21238501544743412786, @@ -5504,80 +5506,80 @@ function ESERK4ConstantCache(zprev) 0.12546249288972377567, -0.17809072835219769138, -0.18633170546845068127, - 0.42010400677233028510, + 0.4201040067723302851, -0.19464097719636103134, -0.16318828603090174134, 0.19180147872830963229, - 0.70846537664961115044e-01, + 0.70846537664961115044e-1, -0.21651565471064423973, - 0.40928528492896507074e-01, + 0.40928528492896507074e-1, 0.21254630298989776738, -0.21207643384564592304, - -0.49820130990383786063e-01, + -0.49820130990383786063e-1, 0.26483304033262300425, - -0.19317834763514718510, - -0.82997362178448982895e-01, + -0.1931783476351471851, + -0.82997362178448982895e-1, 0.27443670359144317628, - -0.21465505481200489180, - 0.68960508784066528939e-02, + -0.2146550548120048918, + 0.68960508784066528939e-2, 0.11429102536292451431, - -0.45341666517246533019e-01, + -0.45341666517246533019e-1, -0.10164857589928916193, - 0.13152525986343777120, - 0.20784740071638340558e-01, + 0.1315252598634377712, + 0.20784740071638340558e-1, -0.23169973301397162047, 0.30492366991217850769, -0.15819949883499354049, -0.11227926240448733719, - 0.31462678269552257770, + 0.3146267826955225777, -0.32469789828922085428, 0.16885719809569815775, - 0.12294822965012089724e-01, - -0.91529499765104910258e-01, - 0.44688006794929735488e-01, - 0.45267686655199708412e-01, - -0.75827449163078486372e-01, - 0.77528184075002668993e-02, + 0.12294822965012089724e-1, + -0.91529499765104910258e-1, + 0.44688006794929735488e-1, + 0.45267686655199708412e-1, + -0.75827449163078486372e-1, + 0.77528184075002668993e-2, 0.10581715465079849503, -0.17444343400639161779, 0.14364436682185804939, - -0.41749899173399822316e-01, - -0.47010319884251097755e-01, - 0.45330385858438376756e-01, - 0.53972030222609469752e-01, + -0.41749899173399822316e-1, + -0.47010319884251097755e-1, + 0.45330385858438376756e-1, + 0.53972030222609469752e-1, -0.18263875341242705175, 0.23966673932964843718, -0.16300629135671304559, - -0.29440520852132091856e-01, + -0.29440520852132091856e-1, 0.24485963155295981108, -0.37236058995477622213, 0.34563866021474359824, -0.18288440686713489103, - -0.26911813593597185001e-01, + -0.26911813593597185001e-1, 0.17305126714840124436, -0.18580591999849821461, - 0.70624309139907137656e-01, - 0.96770880520805194203e-01, + 0.70624309139907137656e-1, + 0.96770880520805194203e-1, -0.21540073753028876613, 0.21296841939399693833, - -0.84802397142562893628e-01, + -0.84802397142562893628e-1, -0.10578799325605502124, 0.26065349401694382081, - -0.29849294338291465500, + -0.298492943382914655, 0.19597797759318918986, -0.19088177342656237334, - 0.48615423567496297841e-01, + 0.48615423567496297841e-1, 0.22148583355927636829, -0.44900681010530657522, 0.34894227590370002767, -0.15678447799464739765, -0.15932685898217607834, 0.23177252425546301939, - -0.17354960859541554430, - -0.12829240062276195400, + -0.1735496085954155443, + -0.128292400622761954, 0.29133078406520085402, -0.32660321986940438199, - 0.37737205324967315438e-02, + 0.37737205324967315438e-2, 0.34000671049045610994, -0.64470041546271861232, 0.52967856564541770936, @@ -5590,81 +5592,81 @@ function ESERK4ConstantCache(zprev) -0.83566736005453756686, 0.23695331143314768418, 0.56889146520876754387, - -0.12355682814441160122e+01, - 0.11287645098360954421e+01, + -0.12355682814441160122e+1, + 0.11287645098360954421e+1, -0.42097379738219709022, -0.61102166200907137572, - 0.11212402058878123690e+01, + 0.1121240205887812369e+1, -0.92310078256589711554, - 0.24435534838544388514e-01, - 0.73861793506249351360, - -0.95129099619690837830, + 0.24435534838544388514e-1, + 0.7386179350624935136, + -0.9512909961969083783, 0.34548761701872721108, - 0.36448454568062038650, - -0.67787796283137025100, + 0.3644845456806203865, + -0.677877962831370251, 0.15910730765058539449, 0.55163457623082590153, -0.87869735015954120172, 0.27556758975586070903, 0.61146303495436182818, - -0.10634785781531279625e+01, + -0.10634785781531279625e+1, 0.40329875690926286769, 0.68246910757313539175, - -0.12847001608175785403e+01, + -0.12847001608175785403e+1, 0.58509677671624005235, 0.67089827592519057919, - -0.14068901912937989973e+01, + -0.14068901912937989973e+1, 0.76848965220436005197, 0.34093127273118384313, -0.75074242217643527564, -0.14820456490883340828, - 0.10293430413924460343e+01, + 0.10293430413924460343e+1, -0.67192507875427198716, -0.95567998711258594913, - 0.18931292126758791916e+01, - -0.10828265720227210345e+01, - -0.62493156947370587240, + 0.18931292126758791916e+1, + -0.10828265720227210345e+1, + -0.6249315694737058724, 0.89844474494248571794, 0.37392260438298519087, - -0.12052962177251682618e+01, + -0.12052962177251682618e+1, -0.15596016293665104779, - 0.18395062191140925112e+01, - -0.13447125514900228893e+01, + 0.18395062191140925112e+1, + -0.13447125514900228893e+1, -0.84284192403947688632, - 0.11231225025426838648e+01, + 0.11231225025426838648e+1, 0.83889915758178557059, - -0.14961302839980450408e+01, + -0.14961302839980450408e+1, -0.83798943146292559359, - 0.18424014209249388596e+01, + 0.18424014209249388596e+1, 0.58808056966151567302, - -0.18490468430454478632e+01, + -0.18490468430454478632e+1, -0.92420220052940660338, - 0.15789673224735774060e+01, - 0.17323506308560610023e+01, - -0.13376602484304231933e+01, - -0.23674604930221692101e+01, + 0.1578967322473577406e+1, + 0.17323506308560610023e+1, + -0.13376602484304231933e+1, + -0.23674604930221692101e+1, -0.23030909319705092364, - 0.23253791844507238906e+01, - 0.26118192458797335753e+01, + 0.23253791844507238906e+1, + 0.26118192458797335753e+1, -0.15768857500403574146, - -0.26575038206071117663e+01, - -0.41643757250808492998e+01, - -0.36262625232647835993e+01, - -0.25614728777566595497e+01, - -0.13714333419821762572e+01, + -0.26575038206071117663e+1, + -0.41643757250808492998e+1, + -0.36262625232647835993e+1, + -0.25614728777566595497e+1, + -0.13714333419821762572e+1, -0.65539882159240725468, - -0.21114263873310309960, + -0.2111426387331030996, -0.12806839559043595167, - 0.34114620649976119815e-01, - -0.53916816817535698214e-01, - 0.21994994953224246415e-01, - 0.18165556835146451364e-01, - -0.66129180104669088580e-01, + 0.34114620649976119815e-1, + -0.53916816817535698214e-1, + 0.21994994953224246415e-1, + 0.18165556835146451364e-1, + -0.6612918010466908858e-1, 0.10935030571578703562, -0.13570085277492699438, - 0.13741538266849834260, + 0.1374153826684983426, -0.11149915085393988234, - 0.62439718590176523927e-01, + 0.62439718590176523927e-1, 0.48032619529352710286, -0.80587241078080895651, 0.65139386368872986832, @@ -5672,762 +5674,762 @@ function ESERK4ConstantCache(zprev) -0.23528870678889401979, 0.76489158043592331282, -0.93302683588231560829, - 0.10920656005589362003e+01, + 0.10920656005589362003e+1, -0.79977925673739092005, 0.49166885150125860804, - 0.91926540586001054267e-01, + 0.91926540586001054267e-1, -0.74353911047865361983, 0.65164450208406121678, - -0.25513926413358976042e+01, - -0.14162738028048340588e+01, - -0.60227024454060735792e+01, - -0.68162542666017209569e+01, - -0.79671873441218048484e+01, - -0.62368014585319304643e+01, - 0.11920735405921432104e+01, - 0.36360335800981227194e+01, - 0.61829690445557421441e+01, - -0.14229951115794130523e+01, - -0.43292551714487457204e+01, - -0.22848063510662206532e+01, - 0.26241936058528669840e+01, - 0.43798144118132222857e+01, - -0.29053846286193381054e+01, - -0.29119555666357395118e+01, - 0.10652207887591262914e+01, - 0.33011984746080997866e+01, + -0.25513926413358976042e+1, + -0.14162738028048340588e+1, + -0.60227024454060735792e+1, + -0.68162542666017209569e+1, + -0.79671873441218048484e+1, + -0.62368014585319304643e+1, + 0.11920735405921432104e+1, + 0.36360335800981227194e+1, + 0.61829690445557421441e+1, + -0.14229951115794130523e+1, + -0.43292551714487457204e+1, + -0.22848063510662206532e+1, + 0.2624193605852866984e+1, + 0.43798144118132222857e+1, + -0.29053846286193381054e+1, + -0.29119555666357395118e+1, + 0.10652207887591262914e+1, + 0.33011984746080997866e+1, -0.75192460321221399333, - -0.39452472982507345023e+01, - 0.24961710904731342353e+01, - 0.20941988275089618021e+01, - -0.21795107130398685413e+01, - -0.13668926860809438306e+01, - 0.19699391286380505406e+01, - 0.15875602129423889153e+01, - -0.38356421932369264560e+01, - 0.15082222615897837859e+01, - 0.21180424116293945502e+01, - -0.24118715038690070607e+01, + -0.39452472982507345023e+1, + 0.24961710904731342353e+1, + 0.20941988275089618021e+1, + -0.21795107130398685413e+1, + -0.13668926860809438306e+1, + 0.19699391286380505406e+1, + 0.15875602129423889153e+1, + -0.3835642193236926456e+1, + 0.15082222615897837859e+1, + 0.21180424116293945502e+1, + -0.24118715038690070607e+1, -0.24701759688239816048, - 0.17803883645647007317e+01, - -0.13338448740460312480, - -0.22674405435634521488e+01, - 0.21240426053670207196e+01, + 0.17803883645647007317e+1, + -0.1333844874046031248, + -0.22674405435634521488e+1, + 0.21240426053670207196e+1, 0.62675929261629770295, - -0.28821300181571078980e+01, - 0.22373929242466208400e+01, + -0.2882130018157107898e+1, + 0.223739292424662084e+1, 0.49673930118450110305, - -0.24234460785170104380e+01, - 0.18764311409403573450e+01, - 0.12694101848173824920, - -0.12511922081797435258e+01, + -0.2423446078517010438e+1, + 0.1876431140940357345e+1, + 0.1269410184817382492, + -0.12511922081797435258e+1, 0.48015450204599174899, - 0.10548496573817365274e+01, - -0.13871770150988804726e+01, + 0.10548496573817365274e+1, + -0.13871770150988804726e+1, -0.13653837035803007005, - 0.22849513340978435672e+01, - -0.30864388575503816092e+01, - 0.17118448111207040796e+01, - 0.89414485042760749600, - -0.28248875573835579011e+01, - 0.28574044978126709182e+01, - -0.12649087243969392436e+01, + 0.22849513340978435672e+1, + -0.30864388575503816092e+1, + 0.17118448111207040796e+1, + 0.894144850427607496, + -0.28248875573835579011e+1, + 0.28574044978126709182e+1, + -0.12649087243969392436e+1, -0.53497779981141946326, - 0.12698702606695078110e+01, + 0.1269870260669507811e+1, -0.69811265837247871158, -0.33930966551010233179, 0.80673073293497288283, - -0.29260624160834075580, + -0.2926062416083407558, -0.68694457056626356817, - 0.12470634600123335911e+01, + 0.12470634600123335911e+1, -0.85491488988769648305, -0.19390676224514680204, - 0.10547489629987418791e+01, + 0.10547489629987418791e+1, -0.95384444456752626174, -0.17145361327331953838, - 0.16283797537784376885e+01, - -0.23893498712833749487e+01, - 0.18179919984545505063e+01, - -0.74011998652478552807e-01, - -0.19287495610921046030e+01, - 0.30953574741162315220e+01, - -0.27693059757005138444e+01, - 0.11365003260666610707e+01, - 0.91699146895313243810, - -0.22905492640669331550e+01, - 0.22993081833901856115e+01, - -0.10107537454176125369e+01, + 0.16283797537784376885e+1, + -0.23893498712833749487e+1, + 0.18179919984545505063e+1, + -0.74011998652478552807e-1, + -0.1928749561092104603e+1, + 0.3095357474116231522e+1, + -0.27693059757005138444e+1, + 0.11365003260666610707e+1, + 0.9169914689531324381, + -0.2290549264066933155e+1, + 0.22993081833901856115e+1, + -0.10107537454176125369e+1, -0.80211003740503550308, - 0.21159707963899041516e+01, - -0.21950556934937193176e+01, + 0.21159707963899041516e+1, + -0.21950556934937193176e+1, 0.98449122648641695932, 0.88762563202337763091, - -0.24392962041147834285e+01, - 0.28532485215073219997e+01, - -0.18875491202501490928e+01, + -0.24392962041147834285e+1, + 0.28532485215073219997e+1, + -0.18875491202501490928e+1, 0.92932878294951859477, 0.75722361189360154476, - -0.24731625474513236895e+01, - 0.33904570645018639041e+01, - -0.20004203969881837466e+01, + -0.24731625474513236895e+1, + 0.33904570645018639041e+1, + -0.20004203969881837466e+1, 0.11792330961352050223, - 0.21321594837977522197e+01, - -0.23744034555336552827e+01, - 0.14158979101995599059e+01, - 0.11538834550140200097e+01, - -0.26866578216087027009e+01, - 0.30556167956599700197e+01, + 0.21321594837977522197e+1, + -0.23744034555336552827e+1, + 0.14158979101995599059e+1, + 0.11538834550140200097e+1, + -0.26866578216087027009e+1, + 0.30556167956599700197e+1, -0.84394777623785310894, - -0.17196320759635546072e+01, - 0.40160917214706080003e+01, - -0.34951089750465977879e+01, - 0.13214656693717325986e+01, - 0.21523879769868381473e+01, - -0.36179430419092502014e+01, - 0.29091680650170435030e+01, + -0.17196320759635546072e+1, + 0.40160917214706080003e+1, + -0.34951089750465977879e+1, + 0.13214656693717325986e+1, + 0.21523879769868381473e+1, + -0.36179430419092502014e+1, + 0.2909168065017043503e+1, 0.62695326421294494956, - -0.36317401326990887966e+01, - 0.47843967637092550405e+01, - -0.19254061658803249824e+01, - -0.23796690134992468657e+01, - 0.62358411395254416121e+01, - -0.58347489179174933938e+01, - 0.21020307062292657996e+01, - 0.35380452161106510367e+01, - -0.62116548882048538971e+01, - 0.49594998329652346669e+01, + -0.36317401326990887966e+1, + 0.47843967637092550405e+1, + -0.19254061658803249824e+1, + -0.23796690134992468657e+1, + 0.62358411395254416121e+1, + -0.58347489179174933938e+1, + 0.21020307062292657996e+1, + 0.35380452161106510367e+1, + -0.62116548882048538971e+1, + 0.49594998329652346669e+1, 0.17374221083219257289, - -0.42616669274489753505e+01, - 0.50181474455001930934e+01, - -0.10070454686239487252e+01, - -0.33429045434585127339e+01, - 0.50230179750629249114e+01, - -0.14877029645092170185e+01, - -0.32528736847809502919e+01, - 0.55988554838849191597e+01, - -0.21427464722448283929e+01, - -0.32480736163929098126e+01, - 0.62099883933884658660e+01, - -0.25364937055417748901e+01, - -0.37801250239130634867e+01, - 0.74028239921744942720e+01, - -0.34342895062398031136e+01, - -0.36992455002014503762e+01, - 0.76814972930513283345e+01, - -0.35273239592937160047e+01, - -0.31990981723549780646e+01, - 0.54227340566574122604e+01, - 0.49965233051800733710, - -0.64880546583338771782e+01, - 0.50674511582485521899e+01, - 0.41366506072682458495e+01, - -0.94870007564570908443e+01, - 0.47144547954980406956e+01, - 0.51115319051744494416e+01, - -0.60885830759450696448e+01, - -0.22944680933409316026e+01, - 0.79686341964088995837e+01, + -0.42616669274489753505e+1, + 0.50181474455001930934e+1, + -0.10070454686239487252e+1, + -0.33429045434585127339e+1, + 0.50230179750629249114e+1, + -0.14877029645092170185e+1, + -0.32528736847809502919e+1, + 0.55988554838849191597e+1, + -0.21427464722448283929e+1, + -0.32480736163929098126e+1, + 0.6209988393388465866e+1, + -0.25364937055417748901e+1, + -0.37801250239130634867e+1, + 0.7402823992174494272e+1, + -0.34342895062398031136e+1, + -0.36992455002014503762e+1, + 0.76814972930513283345e+1, + -0.35273239592937160047e+1, + -0.31990981723549780646e+1, + 0.54227340566574122604e+1, + 0.4996523305180073371, + -0.64880546583338771782e+1, + 0.50674511582485521899e+1, + 0.41366506072682458495e+1, + -0.94870007564570908443e+1, + 0.47144547954980406956e+1, + 0.51115319051744494416e+1, + -0.60885830759450696448e+1, + -0.22944680933409316026e+1, + 0.79686341964088995837e+1, -0.28465006901361822322, - -0.95974849894728890831e+01, - 0.66864602491489222302e+01, - 0.61730791493281769178e+01, - -0.74718699351378718987e+01, - -0.46804050065213216314e+01, - 0.89169294459158319199e+01, - 0.49435874209615766617e+01, - -0.10972523818618578062e+02, - -0.34904791892644491114e+01, - 0.10890919109146436128e+02, - 0.58959391220997172667e+01, - -0.98898766812133320769e+01, - -0.10016880183867774790e+02, - 0.77942509364169341168e+01, - 0.14223290635349265187e+02, - 0.16005607062972351251e+01, - -0.14374948820006842709e+02, - -0.15111490112310484335e+02, + -0.95974849894728890831e+1, + 0.66864602491489222302e+1, + 0.61730791493281769178e+1, + -0.74718699351378718987e+1, + -0.46804050065213216314e+1, + 0.89169294459158319199e+1, + 0.49435874209615766617e+1, + -0.10972523818618578062e+2, + -0.34904791892644491114e+1, + 0.10890919109146436128e+2, + 0.58959391220997172667e+1, + -0.98898766812133320769e+1, + -0.1001688018386777479e+2, + 0.77942509364169341168e+1, + 0.14223290635349265187e+2, + 0.16005607062972351251e+1, + -0.14374948820006842709e+2, + -0.15111490112310484335e+2, 0.34060489555964518216, - 0.16516536607779098489e+02, - 0.24508748061645540872e+02, - 0.22120473151541837353e+02, - 0.15111604470500552111e+02, - 0.84160302503119890360e+01, - 0.37761242268165418068e+01, - 0.14239259038453373485e+01, + 0.16516536607779098489e+2, + 0.24508748061645540872e+2, + 0.22120473151541837353e+2, + 0.15111604470500552111e+2, + 0.8416030250311989036e+1, + 0.37761242268165418068e+1, + 0.14239259038453373485e+1, 0.60366249517437708949, - -0.47772013846262000036e-01, + -0.47772013846262000036e-1, 0.21236484795788132529, -0.10914598999644180288, - -0.76341732981356881863e-02, + -0.76341732981356881863e-2, 0.16029372942523875678, -0.30304237078818746509, 0.39520628368921867368, -0.41048526674013269266, 0.33755319565051955522, -0.19038100411715910831, - -0.10860316839664962973e+01, - 0.18714347403195781272e+01, - -0.16339211513713594037e+01, - 0.52789297313182326210, + -0.10860316839664962973e+1, + 0.18714347403195781272e+1, + -0.16339211513713594037e+1, + 0.5278929731318232621, 0.22373047599035728039, - -0.14320290572385916406e+01, - 0.18432816885479887947e+01, - -0.23315487862397974439e+01, - 0.18037532177919641807e+01, - -0.12977912469893702063e+01, + -0.14320290572385916406e+1, + 0.18432816885479887947e+1, + -0.23315487862397974439e+1, + 0.18037532177919641807e+1, + -0.12977912469893702063e+1, 0.13126108275812950477, - 0.12207681636182154961e+01, + 0.12207681636182154961e+1, -0.86888147224176004446, - 0.53848553861270831433e+01, - 0.40632318116422041498e+01, - 0.13955532289044050742e+02, - 0.16607344319918396991e+02, - 0.19153746832230126529e+02, - 0.14648508991624590081e+02, - -0.23061115176189703746e+01, - -0.94498875557175239237e+01, - -0.14050465722030576643e+02, - 0.26503566339243600503e+01, - 0.11036720049074336458e+02, - 0.50084978517083555971e+01, - -0.60328712768980619074e+01, - -0.10578489079738570666e+02, - 0.68659183922264670485e+01, - 0.72085829112846306899e+01, - -0.28352312678084130582e+01, - -0.76522301362328120078e+01, - 0.15798627233061872666e+01, - 0.96148525739476902174e+01, - -0.60644278888635261282e+01, - -0.50126940134609840882e+01, - 0.52349712150478779904e+01, - 0.32941074135402788059e+01, - -0.48059967821303084534e+01, - -0.36460916125669511345e+01, - 0.89384632674711053113e+01, - -0.32671986334261995388e+01, - -0.54968960854041819530e+01, - 0.62100225359041765216e+01, + 0.53848553861270831433e+1, + 0.40632318116422041498e+1, + 0.13955532289044050742e+2, + 0.16607344319918396991e+2, + 0.19153746832230126529e+2, + 0.14648508991624590081e+2, + -0.23061115176189703746e+1, + -0.94498875557175239237e+1, + -0.14050465722030576643e+2, + 0.26503566339243600503e+1, + 0.11036720049074336458e+2, + 0.50084978517083555971e+1, + -0.60328712768980619074e+1, + -0.10578489079738570666e+2, + 0.68659183922264670485e+1, + 0.72085829112846306899e+1, + -0.28352312678084130582e+1, + -0.76522301362328120078e+1, + 0.15798627233061872666e+1, + 0.96148525739476902174e+1, + -0.60644278888635261282e+1, + -0.50126940134609840882e+1, + 0.52349712150478779904e+1, + 0.32941074135402788059e+1, + -0.48059967821303084534e+1, + -0.36460916125669511345e+1, + 0.89384632674711053113e+1, + -0.32671986334261995388e+1, + -0.5496896085404181953e+1, + 0.62100225359041765216e+1, 0.21161922429311658123, - -0.39919233153390920599e+01, + -0.39919233153390920599e+1, 0.17656419757656091618, - 0.54162751691675650179e+01, - -0.49060312833205781402e+01, - -0.18467366446805135727e+01, - 0.73620379312521890824e+01, - -0.58642937946702753393e+01, + 0.54162751691675650179e+1, + -0.49060312833205781402e+1, + -0.18467366446805135727e+1, + 0.73620379312521890824e+1, + -0.58642937946702753393e+1, -0.71935795512772315874, - 0.54234471131239336827e+01, - -0.42480815553404758234e+01, + 0.54234471131239336827e+1, + -0.42480815553404758234e+1, -0.39481886771398877478, - 0.29140794301524515220e+01, + 0.2914079430152451522e+1, -0.90675409179244959024, - -0.28981692632275621868e+01, - 0.37529775075022002717e+01, - -0.88930642058211328838e-01, - -0.51484453668261940251e+01, - 0.72091527332092271152e+01, - -0.40943221362931510043e+01, - -0.19611145423820892653e+01, - 0.63997613921085170219e+01, - -0.63209186722786236956e+01, - 0.23949327612576363222e+01, - 0.19525711319930045828e+01, - -0.36683781863087912001e+01, - 0.21681110738552091810e+01, + -0.28981692632275621868e+1, + 0.37529775075022002717e+1, + -0.88930642058211328838e-1, + -0.51484453668261940251e+1, + 0.72091527332092271152e+1, + -0.40943221362931510043e+1, + -0.19611145423820892653e+1, + 0.63997613921085170219e+1, + -0.63209186722786236956e+1, + 0.23949327612576363222e+1, + 0.19525711319930045828e+1, + -0.36683781863087912001e+1, + 0.2168111073855209181e+1, 0.51074554384478876301, - -0.18692944672319780075e+01, - 0.88777455324495935240, - 0.12167941710300960168e+01, - -0.23539621160136459110e+01, - 0.12622046106648157071e+01, - 0.13268713170444224048e+01, - -0.33833985899973630929e+01, - 0.30462474523687554928e+01, + -0.18692944672319780075e+1, + 0.8877745532449593524, + 0.12167941710300960168e+1, + -0.2353962116013645911e+1, + 0.12622046106648157071e+1, + 0.13268713170444224048e+1, + -0.33833985899973630929e+1, + 0.30462474523687554928e+1, -0.18013863173692881703, - -0.35392236758970536670e+01, - 0.56176390366750323935e+01, - -0.45056959031111887271e+01, + -0.3539223675897053667e+1, + 0.56176390366750323935e+1, + -0.45056959031111887271e+1, 0.55612300169131367866, - 0.40576358698995793617e+01, - -0.67297213264157758061e+01, - 0.58922660827299582209e+01, - -0.19976434069412103423e+01, - -0.28358818168916766211e+01, - 0.59768948856258949931e+01, - -0.58030714471207422989e+01, - 0.24966655538578939044e+01, - 0.20611105969245078207e+01, - -0.53935993679147991031e+01, - 0.57144158509800533352e+01, - -0.28801158416225862702e+01, - -0.16092590942841273893e+01, - 0.53945166287138777150e+01, - -0.65062567240814930258e+01, - 0.43482709701658537327e+01, - -0.14149943000580651464e+01, - -0.27585870663870561970e+01, - 0.59817300437679152836e+01, - -0.70228381668232717772e+01, - 0.33240392904706030919e+01, - 0.11757823441402381892e+01, - -0.58395464489491804017e+01, - 0.59987795007898165878e+01, - -0.33547028349818810433e+01, - -0.25071255784208847928e+01, - 0.61482695087988314953e+01, - -0.70799467675529248467e+01, - 0.25913987748126068311e+01, - 0.28726358578164084001e+01, - -0.78247935896055027527e+01, - 0.71328519949648150345e+01, - -0.28771684727622361955e+01, - -0.42165733880662150668e+01, - 0.76357522279975524881e+01, - -0.67667786717073692415e+01, + 0.40576358698995793617e+1, + -0.67297213264157758061e+1, + 0.58922660827299582209e+1, + -0.19976434069412103423e+1, + -0.28358818168916766211e+1, + 0.59768948856258949931e+1, + -0.58030714471207422989e+1, + 0.24966655538578939044e+1, + 0.20611105969245078207e+1, + -0.53935993679147991031e+1, + 0.57144158509800533352e+1, + -0.28801158416225862702e+1, + -0.16092590942841273893e+1, + 0.5394516628713877715e+1, + -0.65062567240814930258e+1, + 0.43482709701658537327e+1, + -0.14149943000580651464e+1, + -0.2758587066387056197e+1, + 0.59817300437679152836e+1, + -0.70228381668232717772e+1, + 0.33240392904706030919e+1, + 0.11757823441402381892e+1, + -0.58395464489491804017e+1, + 0.59987795007898165878e+1, + -0.33547028349818810433e+1, + -0.25071255784208847928e+1, + 0.61482695087988314953e+1, + -0.70799467675529248467e+1, + 0.25913987748126068311e+1, + 0.28726358578164084001e+1, + -0.78247935896055027527e+1, + 0.71328519949648150345e+1, + -0.28771684727622361955e+1, + -0.42165733880662150668e+1, + 0.76357522279975524881e+1, + -0.67667786717073692415e+1, 0.11027335881943567397, - 0.60587042639274297784e+01, - -0.91295639557006040832e+01, - 0.47079075685965134923e+01, - 0.27126328491192621684e+01, - -0.98451880609826716295e+01, - 0.95584889857472195018e+01, - -0.34361069522724139169e+01, - -0.62006703694277014449e+01, - 0.10523854355386456305e+02, - -0.79777657820061493865e+01, - -0.13588779421640675427e+01, - 0.83935271154595731957e+01, - -0.91352990405912173344e+01, - 0.11225774048872896316e+01, - 0.71744676727384977255e+01, - -0.10138316746233490662e+02, - 0.30900005915543062862e+01, - 0.62596703194008576077e+01, - -0.11016458707966341635e+02, - 0.46499016868085032428e+01, - 0.56157261349763256675e+01, - -0.11568898882355073354e+02, - 0.51513779002946380459e+01, - 0.63491011287090373116e+01, - -0.13136081960364945687e+02, - 0.60739183126022080472e+01, - 0.66335565320128182520e+01, - -0.13400366255194752441e+02, - 0.51096490902025317737e+01, - 0.76432199009762475939e+01, - -0.11581502315660429758e+02, - -0.96097184913165684117e-01, - 0.12146146223952602128e+02, - -0.10427306255406161739e+02, - -0.60093663300848918496e+01, - 0.15599502775750030636e+02, - -0.67506629159730433543e+01, - -0.11120281403328093006e+02, - 0.12167454234624614173e+02, - 0.43524530133998604597e+01, - -0.15727659704252962669e+02, - 0.18958879621118094327e+01, - 0.16379721279216621355e+02, - -0.11130344101309898264e+02, - -0.12437445421258692235e+02, - 0.14293532095702758511e+02, - 0.89228219450848769156e+01, - -0.17218643134541821382e+02, - -0.84977348431740225010e+01, - 0.19815831828115669566e+02, - 0.69354723967636893178e+01, - -0.20426714667936032299e+02, - -0.11221986186332033597e+02, - 0.18885023904112514970e+02, - 0.18203998420956970961e+02, - -0.14135326029497814915e+02, - -0.26783844201526786577e+02, - -0.29838885078594707956e+01, - 0.27032204125743234613e+02, - 0.27873594504317974696e+02, + 0.60587042639274297784e+1, + -0.91295639557006040832e+1, + 0.47079075685965134923e+1, + 0.27126328491192621684e+1, + -0.98451880609826716295e+1, + 0.95584889857472195018e+1, + -0.34361069522724139169e+1, + -0.62006703694277014449e+1, + 0.10523854355386456305e+2, + -0.79777657820061493865e+1, + -0.13588779421640675427e+1, + 0.83935271154595731957e+1, + -0.91352990405912173344e+1, + 0.11225774048872896316e+1, + 0.71744676727384977255e+1, + -0.10138316746233490662e+2, + 0.30900005915543062862e+1, + 0.62596703194008576077e+1, + -0.11016458707966341635e+2, + 0.46499016868085032428e+1, + 0.56157261349763256675e+1, + -0.11568898882355073354e+2, + 0.51513779002946380459e+1, + 0.63491011287090373116e+1, + -0.13136081960364945687e+2, + 0.60739183126022080472e+1, + 0.6633556532012818252e+1, + -0.13400366255194752441e+2, + 0.51096490902025317737e+1, + 0.76432199009762475939e+1, + -0.11581502315660429758e+2, + -0.96097184913165684117e-1, + 0.12146146223952602128e+2, + -0.10427306255406161739e+2, + -0.60093663300848918496e+1, + 0.15599502775750030636e+2, + -0.67506629159730433543e+1, + -0.11120281403328093006e+2, + 0.12167454234624614173e+2, + 0.43524530133998604597e+1, + -0.15727659704252962669e+2, + 0.18958879621118094327e+1, + 0.16379721279216621355e+2, + -0.11130344101309898264e+2, + -0.12437445421258692235e+2, + 0.14293532095702758511e+2, + 0.89228219450848769156e+1, + -0.17218643134541821382e+2, + -0.8497734843174022501e+1, + 0.19815831828115669566e+2, + 0.69354723967636893178e+1, + -0.20426714667936032299e+2, + -0.11221986186332033597e+2, + 0.1888502390411251497e+2, + 0.18203998420956970961e+2, + -0.14135326029497814915e+2, + -0.26783844201526786577e+2, + -0.29838885078594707956e+1, + 0.27032204125743234613e+2, + 0.27873594504317974696e+2, -0.26667966501533851842, - -0.31150053728372011363e+02, - -0.45542525316529655299e+02, - -0.41377185775039549753e+02, - -0.28219928669459601878e+02, - -0.15659963238603603841e+02, - -0.70805268101092364574e+01, - -0.26903073704870861249e+01, - -0.10235094424725710294e+01, - -0.60794104392649851720e-01, + -0.31150053728372011363e+2, + -0.45542525316529655299e+2, + -0.41377185775039549753e+2, + -0.28219928669459601878e+2, + -0.15659963238603603841e+2, + -0.70805268101092364574e+1, + -0.26903073704870861249e+1, + -0.10235094424725710294e+1, + -0.6079410439264985172e-1, -0.25835093465366598675, 0.14284152769565180985, - -0.61023169065113291865e-01, - -0.62513921772917216413e-01, + -0.61023169065113291865e-1, + -0.62513921772917216413e-1, 0.18069937480072459368, - -0.26196651944337467910, + -0.2619665194433746791, 0.28491892455722661603, -0.23961410964634349829, - 0.13667952675226013870, + 0.1366795267522601387, 0.68437702879206274709, - -0.11927875247546047000e+01, - 0.10939917760172996886e+01, + -0.11927875247546047e+1, + 0.10939917760172996886e+1, -0.42044740777871025816, - -0.16551071694432206716e-01, + -0.16551071694432206716e-1, 0.78965988308022183606, - -0.10606965992895891482e+01, - 0.14309059229274114777e+01, - -0.11528535477553860655e+01, + -0.10606965992895891482e+1, + 0.14309059229274114777e+1, + -0.11528535477553860655e+1, 0.92002781296692337509, -0.24578140839772352755, -0.55920782889901188284, 0.26667263118798162358, - -0.32568331713208857892e+01, - -0.30068951497806688522e+01, - -0.90792706181658893172e+01, - -0.11182182691753128623e+02, - -0.12782602547502504464e+02, - -0.96248743919708736883e+01, - 0.12971557651573946135e+01, - 0.66094038053005563782e+01, - 0.90390148144067250513e+01, - -0.14600130083522027125e+01, - -0.75985602700370851181e+01, - -0.31855625123337008020e+01, - 0.39729585328587542215e+01, - 0.70072928920989001611e+01, - -0.44515640046270590346e+01, - -0.49778764688609573597e+01, - 0.20813380816543958218e+01, - 0.49277783186249610736e+01, + -0.32568331713208857892e+1, + -0.30068951497806688522e+1, + -0.90792706181658893172e+1, + -0.11182182691753128623e+2, + -0.12782602547502504464e+2, + -0.96248743919708736883e+1, + 0.12971557651573946135e+1, + 0.66094038053005563782e+1, + 0.90390148144067250513e+1, + -0.14600130083522027125e+1, + -0.75985602700370851181e+1, + -0.3185562512333700802e+1, + 0.39729585328587542215e+1, + 0.70072928920989001611e+1, + -0.44515640046270590346e+1, + -0.49778764688609573597e+1, + 0.20813380816543958218e+1, + 0.49277783186249610736e+1, -0.91594761897327070521, - -0.64917105218870867489e+01, - 0.40724045771580481556e+01, - 0.33608064801084815976e+01, - -0.35352399969235821509e+01, - -0.21409854699111643406e+01, - 0.31647961493144665113e+01, - 0.24427591478618473353e+01, - -0.59310856360676806887e+01, - 0.21165017172807334411e+01, - 0.37536312322819691545e+01, - -0.42337966088957879052e+01, - -0.60211567673912780307e-01, - 0.26194200157724409905e+01, - -0.12788792757804076650, - -0.35351634318207616481e+01, - 0.31344895623453514766e+01, - 0.14202429605818416292e+01, - -0.51248844691006123497e+01, - 0.41301420293127648620e+01, + -0.64917105218870867489e+1, + 0.40724045771580481556e+1, + 0.33608064801084815976e+1, + -0.35352399969235821509e+1, + -0.21409854699111643406e+1, + 0.31647961493144665113e+1, + 0.24427591478618473353e+1, + -0.59310856360676806887e+1, + 0.21165017172807334411e+1, + 0.37536312322819691545e+1, + -0.42337966088957879052e+1, + -0.60211567673912780307e-1, + 0.26194200157724409905e+1, + -0.1278879275780407665, + -0.35351634318207616481e+1, + 0.31344895623453514766e+1, + 0.14202429605818416292e+1, + -0.51248844691006123497e+1, + 0.4130142029312764862e+1, 0.28964691143642934401, - -0.34815690985436913429e+01, - 0.27802469596311087940e+01, + -0.34815690985436913429e+1, + 0.2780246959631108794e+1, 0.22331939002695172514, - -0.18066346978839751269e+01, + -0.18066346978839751269e+1, 0.38725603858550061709, - 0.22107829565432424168e+01, - -0.28070401153595736510e+01, + 0.22107829565432424168e+1, + -0.2807040115359573651e+1, 0.35743000080178000122, - 0.31806966350935321763e+01, - -0.46298387319076494961e+01, - 0.26545771712828365452e+01, - 0.12728330214823362354e+01, - -0.41218040328999734356e+01, - 0.39772619456409277205e+01, - -0.12920659460338126401e+01, - -0.16366869779885417913e+01, - 0.27747156880671153267e+01, - -0.17282767400278209458e+01, + 0.31806966350935321763e+1, + -0.46298387319076494961e+1, + 0.26545771712828365452e+1, + 0.12728330214823362354e+1, + -0.41218040328999734356e+1, + 0.39772619456409277205e+1, + -0.12920659460338126401e+1, + -0.16366869779885417913e+1, + 0.27747156880671153267e+1, + -0.17282767400278209458e+1, -0.13422215738099474436, - 0.11423337869704641712e+01, + 0.11423337869704641712e+1, -0.59988834421187042789, - -0.69055676704915069930, - 0.13523619611832560228e+01, + -0.6905567670491506993, + 0.13523619611832560228e+1, -0.55151500438663059178, - -0.12123913412754458996e+01, - 0.25857624141375805671e+01, - -0.23245199461318679646e+01, + -0.12123913412754458996e+1, + 0.25857624141375805671e+1, + -0.23245199461318679646e+1, 0.34634236050686251218, - 0.22268272043779160363e+01, - -0.37183622797965902862e+01, - 0.30861805569659361836e+01, + 0.22268272043779160363e+1, + -0.37183622797965902862e+1, + 0.30861805569659361836e+1, -0.55051550365259638298, - -0.24477835260938571871e+01, - 0.41822441711913853624e+01, - -0.36101566193976926122e+01, - 0.10363433981942979933e+01, - 0.21319259760685547178e+01, - -0.41448528896827312451e+01, - 0.39317785311717039498e+01, - -0.16234913966209054692e+01, - -0.15130093836505322802e+01, - 0.38171965620027044075e+01, - -0.40881409973686935189e+01, - 0.22251104091244005012e+01, - 0.77538944107047902410, - -0.33389047776641271881e+01, - 0.41485250628235341708e+01, - -0.27988573304610007142e+01, + -0.24477835260938571871e+1, + 0.41822441711913853624e+1, + -0.36101566193976926122e+1, + 0.10363433981942979933e+1, + 0.21319259760685547178e+1, + -0.41448528896827312451e+1, + 0.39317785311717039498e+1, + -0.16234913966209054692e+1, + -0.15130093836505322802e+1, + 0.38171965620027044075e+1, + -0.40881409973686935189e+1, + 0.22251104091244005012e+1, + 0.7753894410704790241, + -0.33389047776641271881e+1, + 0.41485250628235341708e+1, + -0.27988573304610007142e+1, 0.66527966470311894476, - 0.21294185993074448149e+01, - -0.39463624345173919927e+01, - 0.42328087517284940233e+01, - -0.16315239886220489485e+01, - -0.13627287451286269615e+01, - 0.42212085242892074533e+01, - -0.41702377806139638849e+01, - 0.22753004057570569429e+01, - 0.15539455451635744154e+01, - -0.39875199922154420662e+01, - 0.46425463005622615853e+01, - -0.19326219108658209134e+01, - -0.14747671473760821659e+01, - 0.45946763198297198016e+01, - -0.43277108656753613403e+01, - 0.18276609980599101135e+01, - 0.24705247142490485146e+01, - -0.46969975948332107762e+01, - 0.43801388997952610538e+01, + 0.21294185993074448149e+1, + -0.39463624345173919927e+1, + 0.42328087517284940233e+1, + -0.16315239886220489485e+1, + -0.13627287451286269615e+1, + 0.42212085242892074533e+1, + -0.41702377806139638849e+1, + 0.22753004057570569429e+1, + 0.15539455451635744154e+1, + -0.39875199922154420662e+1, + 0.46425463005622615853e+1, + -0.19326219108658209134e+1, + -0.14747671473760821659e+1, + 0.45946763198297198016e+1, + -0.43277108656753613403e+1, + 0.18276609980599101135e+1, + 0.24705247142490485146e+1, + -0.46969975948332107762e+1, + 0.43801388997952610538e+1, -0.53904537753890735541, - -0.32298094170351352439e+01, - 0.53773792171343952617e+01, - -0.32301790719074516822e+01, + -0.32298094170351352439e+1, + 0.53773792171343952617e+1, + -0.32301790719074516822e+1, -0.76413999103373531074, - 0.48394829896291318150e+01, - -0.49033335770793922137e+01, - 0.18020508881874985896e+01, - 0.32911769003633430941e+01, - -0.54446753651466384127e+01, - 0.38785841260018898424e+01, - 0.13673863718797245603e+01, - -0.51347280619847674998e+01, - 0.52660679639696947874e+01, + 0.4839482989629131815e+1, + -0.49033335770793922137e+1, + 0.18020508881874985896e+1, + 0.32911769003633430941e+1, + -0.54446753651466384127e+1, + 0.38785841260018898424e+1, + 0.13673863718797245603e+1, + -0.51347280619847674998e+1, + 0.52660679639696947874e+1, -0.44349925623510894068, - -0.43995504743876230336e+01, - 0.60558458530345387061e+01, - -0.18753269903569951271e+01, - -0.36372720319986986404e+01, - 0.64756851397483785604e+01, - -0.28337320702454960042e+01, - -0.31506022381936964472e+01, - 0.67590231636144135763e+01, - -0.32922145064657981628e+01, - -0.31522658649346171345e+01, - 0.70520793549654356980e+01, - -0.31842566284752855665e+01, - -0.37856197157536559672e+01, - 0.73309967515004634819e+01, - -0.23216189837582170696e+01, - -0.50915488768339454140e+01, - 0.72928735563603792613e+01, + -0.43995504743876230336e+1, + 0.60558458530345387061e+1, + -0.18753269903569951271e+1, + -0.36372720319986986404e+1, + 0.64756851397483785604e+1, + -0.28337320702454960042e+1, + -0.31506022381936964472e+1, + 0.67590231636144135763e+1, + -0.32922145064657981628e+1, + -0.31522658649346171345e+1, + 0.7052079354965435698e+1, + -0.31842566284752855665e+1, + -0.37856197157536559672e+1, + 0.73309967515004634819e+1, + -0.23216189837582170696e+1, + -0.5091548876833945414e+1, + 0.72928735563603792613e+1, -0.38902680347838652919, - -0.68390946692216809666e+01, - 0.62357417473652541062e+01, - 0.28509039522854928705e+01, - -0.81621855489638903691e+01, - 0.31246838145695714495e+01, - 0.69028653977592231428e+01, - -0.71917102759598146022e+01, - -0.25911284246747281479e+01, - 0.93944259045956410858e+01, - -0.16745140375455465076e+01, - -0.87281459736688979945e+01, - 0.58386277757180700121e+01, - 0.74168844911049065516e+01, - -0.82142711983109553131e+01, - -0.52913318110820712903e+01, - 0.10202659883083640580e+02, - 0.44293557218527457309e+01, - -0.10934047859387527879e+02, - -0.42300207812796033480e+01, - 0.11780641727680638553e+02, - 0.64629838882282832913e+01, - -0.10955612750110050868e+02, - -0.10182480386104151293e+02, - 0.78691426053339741387e+01, - 0.15456610772906703488e+02, - 0.16364915949840959097e+01, - -0.15453787511636463137e+02, - -0.15868226696382407681e+02, - 0.78795319560063192821e-01, - 0.17857320682504632003e+02, - 0.26006067004477042559e+02, - 0.23623697821893031801e+02, - 0.16172114066993120929e+02, - 0.89036762728116940480e+01, - 0.40649710338597460080e+01, - 0.15640309325765273663e+01, + -0.68390946692216809666e+1, + 0.62357417473652541062e+1, + 0.28509039522854928705e+1, + -0.81621855489638903691e+1, + 0.31246838145695714495e+1, + 0.69028653977592231428e+1, + -0.71917102759598146022e+1, + -0.25911284246747281479e+1, + 0.93944259045956410858e+1, + -0.16745140375455465076e+1, + -0.87281459736688979945e+1, + 0.58386277757180700121e+1, + 0.74168844911049065516e+1, + -0.82142711983109553131e+1, + -0.52913318110820712903e+1, + 0.1020265988308364058e+2, + 0.44293557218527457309e+1, + -0.10934047859387527879e+2, + -0.4230020781279603348e+1, + 0.11780641727680638553e+2, + 0.64629838882282832913e+1, + -0.10955612750110050868e+2, + -0.10182480386104151293e+2, + 0.78691426053339741387e+1, + 0.15456610772906703488e+2, + 0.16364915949840959097e+1, + -0.15453787511636463137e+2, + -0.15868226696382407681e+2, + 0.78795319560063192821e-1, + 0.17857320682504632003e+2, + 0.26006067004477042559e+2, + 0.23623697821893031801e+2, + 0.16172114066993120929e+2, + 0.8903676272811694048e+1, + 0.4064971033859746008e+1, + 0.15640309325765273663e+1, 0.51141453905055866969, 0.14259408813336410526, - 0.33886675304205436665e-01, - 0.68370177950773484976e-02, - 0.11624784700723395526e-02, - 0.16464010015032262821e-03, - 0.19092965438523148909e-04, - 0.17678880214955933705e-05, - 0.12579667215294839461e-06, - 0.64634863567973170360e-08, - 0.21357987585023239104e-09, + 0.33886675304205436665e-1, + 0.68370177950773484976e-2, + 0.11624784700723395526e-2, + 0.16464010015032262821e-3, + 0.19092965438523148909e-4, + 0.17678880214955933705e-5, + 0.12579667215294839461e-6, + 0.6463486356797317036e-8, + 0.21357987585023239104e-9, 0.34102125024444080676e-11, - 0.12750631045355715829e-01, - -0.22144729596657947157e-01, - 0.17254513495941165707e-01, - -0.79138435316197242031e-02, - 0.98056624553090224010e-03, - 0.58059755895780006812e-02, - -0.61363150425113041977e-02, - 0.39016020668778436491e-02, - 0.48886756151666566420e-02, - -0.13941949224919441067e-01, - 0.25227097045780643575e-01, - -0.32035969776386258312e-01, - 0.34754351932103813572e-01, - -0.34865789213776809952e-01, - 0.15361572382949970766e-01, - -0.31330144169185975001e-01, - -0.44521852292861527345e-01, - -0.53448809456819124097e-01, + 0.12750631045355715829e-1, + -0.22144729596657947157e-1, + 0.17254513495941165707e-1, + -0.79138435316197242031e-2, + 0.9805662455309022401e-3, + 0.58059755895780006812e-2, + -0.61363150425113041977e-2, + 0.39016020668778436491e-2, + 0.4888675615166656642e-2, + -0.13941949224919441067e-1, + 0.25227097045780643575e-1, + -0.32035969776386258312e-1, + 0.34754351932103813572e-1, + -0.34865789213776809952e-1, + 0.15361572382949970766e-1, + -0.31330144169185975001e-1, + -0.44521852292861527345e-1, + -0.53448809456819124097e-1, -0.11936964560370165456, - -0.65356733314175019522e-01, - -0.83217191586415564797e-01, - 0.34758404990272759316e-01, - 0.52267703931528658456e-01, - 0.59229205987848032589e-01, - -0.10295103818939959142e-01, - -0.63714313212935788644e-01, - -0.23819449250028931070e-01, - 0.39270953879317248292e-01, - 0.39689847586618420827e-01, - -0.13102107640755639509e-01, - -0.55495605434794051392e-01, - 0.16616585007991162976e-01, - 0.42637152394754483653e-01, - -0.89271485334297111941e-02, - -0.34652007311978545723e-01, - -0.23843057643236752891e-02, - 0.49079444018738788147e-01, - -0.20143312422368057218e-01, - -0.33700063772558151720e-01, - 0.27962985193788373467e-01, - 0.15559649611376357575e-01, - -0.18631616387095470411e-01, - -0.23002396862503691338e-01, - 0.42607178450533286784e-01, - -0.10353246400137959202e-01, - -0.25473436656077586698e-01, - 0.14238833389838426516e-01, - 0.28288189384193539871e-01, - -0.47532757551401939866e-01, - 0.25174643349396560316e-01, - 0.36446169050756518394e-02, - -0.16896371167336901153e-02, - -0.22601102029001562954e-01, - 0.30743692541025154780e-01, - -0.41580628902168721359e-02, - -0.32991941974927462000e-01, - 0.43253474970872431149e-01, - -0.16947210704182220226e-01, - -0.19365326424875983768e-01, - 0.33701344429896695765e-01, - -0.19978541439088160631e-01, - -0.22753774263416085867e-03, - 0.44824285128843869772e-02, - 0.77674535344907230661e-02, - -0.17013602359277700538e-01, - 0.66892777549126536396e-02, - 0.19326902259354197811e-01, - -0.39825524588054939112e-01, - 0.36950323374451490843e-01, - -0.12395814947666897871e-01, - -0.13834819733220328139e-01, - 0.21286775914961746092e-01, - -0.56513162101495427111e-02, - -0.18228889380298075873e-01, - 0.29518231340474387209e-01, - -0.17503671055133947915e-01, - -0.10827909424251486517e-01, - 0.37659881978499190613e-01, - -0.47620378938659176093e-01, - 0.38030670033522936957e-01, - -0.18217724902594958220e-01, - 0.11674524940012811006e-02, - 0.61664401930250087661e-02, - -0.58750431111141395227e-02, - 0.53547494291409760206e-02, - -0.10002796165430887301e-01, - 0.19167051218794434880e-01, - -0.27186380345256191265e-01, - 0.28683974511975865451e-01, - -0.22857046882702181101e-01, - 0.14123947877135903384e-01, - -0.83386670487236181498e-02, - 0.83020770894734717549e-02, - -0.11569088256443744653e-01, - 0.12608392236155847865e-01, - -0.71990383486966952678e-02, - -0.38919567221481978121e-02, - 0.15016422885765974213e-01, - -0.19268513602872777007e-01, - 0.13333677712458989750e-01, + -0.65356733314175019522e-1, + -0.83217191586415564797e-1, + 0.34758404990272759316e-1, + 0.52267703931528658456e-1, + 0.59229205987848032589e-1, + -0.10295103818939959142e-1, + -0.63714313212935788644e-1, + -0.2381944925002893107e-1, + 0.39270953879317248292e-1, + 0.39689847586618420827e-1, + -0.13102107640755639509e-1, + -0.55495605434794051392e-1, + 0.16616585007991162976e-1, + 0.42637152394754483653e-1, + -0.89271485334297111941e-2, + -0.34652007311978545723e-1, + -0.23843057643236752891e-2, + 0.49079444018738788147e-1, + -0.20143312422368057218e-1, + -0.3370006377255815172e-1, + 0.27962985193788373467e-1, + 0.15559649611376357575e-1, + -0.18631616387095470411e-1, + -0.23002396862503691338e-1, + 0.42607178450533286784e-1, + -0.10353246400137959202e-1, + -0.25473436656077586698e-1, + 0.14238833389838426516e-1, + 0.28288189384193539871e-1, + -0.47532757551401939866e-1, + 0.25174643349396560316e-1, + 0.36446169050756518394e-2, + -0.16896371167336901153e-2, + -0.22601102029001562954e-1, + 0.3074369254102515478e-1, + -0.41580628902168721359e-2, + -0.32991941974927462e-1, + 0.43253474970872431149e-1, + -0.16947210704182220226e-1, + -0.19365326424875983768e-1, + 0.33701344429896695765e-1, + -0.19978541439088160631e-1, + -0.22753774263416085867e-3, + 0.44824285128843869772e-2, + 0.77674535344907230661e-2, + -0.17013602359277700538e-1, + 0.66892777549126536396e-2, + 0.19326902259354197811e-1, + -0.39825524588054939112e-1, + 0.36950323374451490843e-1, + -0.12395814947666897871e-1, + -0.13834819733220328139e-1, + 0.21286775914961746092e-1, + -0.56513162101495427111e-2, + -0.18228889380298075873e-1, + 0.29518231340474387209e-1, + -0.17503671055133947915e-1, + -0.10827909424251486517e-1, + 0.37659881978499190613e-1, + -0.47620378938659176093e-1, + 0.38030670033522936957e-1, + -0.1821772490259495822e-1, + 0.11674524940012811006e-2, + 0.61664401930250087661e-2, + -0.58750431111141395227e-2, + 0.53547494291409760206e-2, + -0.10002796165430887301e-1, + 0.1916705121879443488e-1, + -0.27186380345256191265e-1, + 0.28683974511975865451e-1, + -0.22857046882702181101e-1, + 0.14123947877135903384e-1, + -0.83386670487236181498e-2, + 0.83020770894734717549e-2, + -0.11569088256443744653e-1, + 0.12608392236155847865e-1, + -0.71990383486966952678e-2, + -0.38919567221481978121e-2, + 0.15016422885765974213e-1, + -0.19268513602872777007e-1, + 0.1333367771245898975e-1, 0.12364226311525428059, -0.16965200114875716997, - -0.75385687956433904133e-02, + -0.75385687956433904133e-2, 0.21460104972784158073, -0.28897597910723671344, 0.21607076135582059528, - 0.39897605917408344653e-02, + 0.39897605917408344653e-2, -0.20728178221623091981, 0.30527802027643330396, -0.19421600956092155421, - -0.33583591085856075165e-01, + -0.33583591085856075165e-1, 0.28430585455537560335, -0.37321673620301054619, - 0.28350048335147315370, - -0.37278071478179589104e-01, - -0.17224848555625876800, + 0.2835004833514731537, + -0.37278071478179589104e-1, + -0.172248485556258768, 0.24701917181951910107, -0.10835689347320087705, -0.10654539791011556626, 0.27751784570264376173, -0.24498037449732146253, - 0.63628845303394465649e-01, + 0.63628845303394465649e-1, 0.17581959835625285415, -0.27582240011684250325, 0.21848043690647500625, - -0.39517400186773278536e-01, - -0.69732242598216753748e-01, - 0.58871250775130071209e-01, - 0.71121554983783238924e-01, + -0.39517400186773278536e-1, + -0.69732242598216753748e-1, + 0.58871250775130071209e-1, + 0.71121554983783238924e-1, -0.13896441244796403636, - 0.85292258382009572548e-01, - 0.89147786502288675625e-01, + 0.85292258382009572548e-1, + 0.89147786502288675625e-1, -0.17870839427982249115, - 0.92918950410829551090e-01, + 0.9291895041082955109e-1, 0.16842697273998272212, -0.35448028574969114857, 0.31160179472892507446, - -0.93241557133313425487e-02, + -0.93241557133313425487e-2, -0.27492775926557405652, 0.33239067624431856141, - -0.99595475530256313834e-01, - -0.14012380973629839920, + -0.99595475530256313834e-1, + -0.1401238097362983992, 0.16668617515467182288, - 0.64638587004404293723e-01, - -0.24195988578255697710, + 0.64638587004404293723e-1, + -0.2419598857825569771, 0.16722008676992247689, 0.11817128161657103336, -0.23570487324119085426, - 0.39865559640656890450e-01, + 0.3986555964065689045e-1, 0.28332718747296981032, -0.28430358995891341634, - -0.67897284045035505295e-01, + -0.67897284045035505295e-1, 0.41077660878263633215, -0.30313889095454676914, - -0.67326589166526479291e-01, + -0.67326589166526479291e-1, 0.21870165366450700084, - 0.58199179549712556914e-01, + 0.58199179549712556914e-1, -0.24371271333919347635, - -0.56985848583209257334e-01, + -0.56985848583209257334e-1, 0.54869440002072855656, -0.49451220683177193882, - -0.19554944547433131263e-01, + -0.19554944547433131263e-1, 0.23268413687190758754, 0.15659233638755293283, -0.30124964277885585284, @@ -6444,214 +6446,214 @@ function ESERK4ConstantCache(zprev) 0.51722799043254852336, 0.23659392541139734334, -0.66193938973750787724, - -0.54025031385578625720, + -0.5402503138557862572, -0.19900578953358627476, 0.58628905827818522667, - 0.97702038597220197680, - 0.87860930039454177010, + 0.9770203859722019768, + 0.8786093003945417701, 0.79526167132471703436, 0.31776616885878050667, 0.29979706709486031446, - 0.20500652062430797795e-01, - 0.71291405468592597416e-01, - -0.12670437729723864340e-02, - -0.74809863871092554741e-02, - 0.23420254687799908766e-01, - -0.26307227696116798621e-01, - 0.22867653294119754531e-01, - -0.15212779536751744672e-01, - 0.63585099072051729993e-02, - 0.11287475130512944141e-02, - -0.60218866921108154394e-02, - 0.77744341679011749399e-02, - -0.68395483080699566794e-02, - 0.39135356146939434194e-02, + 0.20500652062430797795e-1, + 0.71291405468592597416e-1, + -0.1267043772972386434e-2, + -0.74809863871092554741e-2, + 0.23420254687799908766e-1, + -0.26307227696116798621e-1, + 0.22867653294119754531e-1, + -0.15212779536751744672e-1, + 0.63585099072051729993e-2, + 0.11287475130512944141e-2, + -0.60218866921108154394e-2, + 0.77744341679011749399e-2, + -0.68395483080699566794e-2, + 0.39135356146939434194e-2, -0.27001394060616851212, 0.41494591343122416705, -0.25450091186224332862, - -0.72042892726213392240e-01, + -0.7204289272621339224e-1, 0.30261230603358918456, -0.54613148173312786593, 0.55839033642267543733, -0.50175577156006512247, 0.20846818751863047114, - 0.80117649876040641921e-01, + 0.80117649876040641921e-1, -0.46434105285431664933, 0.69303051367450385634, -0.80144335835221347519, 0.85626221669901525502, -0.18091114747063807844, 0.96759380381767023938, - 0.18893182602072966514e+01, - 0.22117101616306493739e+01, - 0.45335252839511754885e+01, - 0.29864914394517514395e+01, - 0.28722402369935395861e+01, + 0.18893182602072966514e+1, + 0.22117101616306493739e+1, + 0.45335252839511754885e+1, + 0.29864914394517514395e+1, + 0.28722402369935395861e+1, -0.90344343546882299734, - -0.25607917442825631760e+01, - -0.19546032370258912270e+01, - 0.73583334786373438829e-01, - 0.28037138673103489950e+01, + -0.2560791744282563176e+1, + -0.1954603237025891227e+1, + 0.73583334786373438829e-1, + 0.2803713867310348995e+1, 0.77061178307967170831, - -0.14440259063088625169e+01, - -0.16830355657849320750e+01, - 0.60802069336125574850, - 0.21316569185236264872e+01, + -0.14440259063088625169e+1, + -0.1683035565784932075e+1, + 0.6080206933612557485, + 0.21316569185236264872e+1, -0.56765168032053237024, - -0.18092811694157520108e+01, + -0.18092811694157520108e+1, 0.45681618469034512842, - 0.13018325646120254557e+01, + 0.13018325646120254557e+1, 0.15241695169065819226, - -0.19892932202888864435e+01, + -0.19892932202888864435e+1, 0.80378310278648668064, - 0.13637387099051707651e+01, - -0.11277712082502338031e+01, + 0.13637387099051707651e+1, + -0.11277712082502338031e+1, -0.64652444088021576718, 0.82791431058592857006, 0.75665539925070479654, - -0.14486248853060783581e+01, - 0.64774644237557243986e-01, - 0.14490630901739243175e+01, - -0.10580502529427577851e+01, + -0.14486248853060783581e+1, + 0.64774644237557243986e-1, + 0.14490630901739243175e+1, + -0.10580502529427577851e+1, -0.61676034374418042816, - 0.13940278955852734022e+01, + 0.13940278955852734022e+1, -0.54084208978442338545, -0.54529714184967104096, 0.38345172489699014262, 0.67538924100736363876, - -0.10817804275553375426e+01, - 0.81547900383917126810e-01, - 0.13630611809285708702e+01, - -0.17566757848927707641e+01, + -0.10817804275553375426e+1, + 0.8154790038391712681e-1, + 0.13630611809285708702e+1, + -0.17566757848927707641e+1, 0.70749261188156287172, 0.72759606982800650865, - -0.12799206748866331917e+01, + -0.12799206748866331917e+1, 0.71470902988557138968, - 0.95188809415528083391e-01, + 0.95188809415528083391e-1, -0.24802233238731907772, -0.28120214307220442462, 0.70816534284707999269, -0.36450985172315386595, -0.60562943863154083957, - 0.13641332398275203275e+01, - -0.12088249490019569166e+01, + 0.13641332398275203275e+1, + -0.12088249490019569166e+1, 0.21530276564571967923, 0.81011656075190041637, - -0.10496745591462077751e+01, + -0.10496745591462077751e+1, 0.33450380993783590533, - 0.73181117252494176650, - -0.13042702980891274223e+01, + 0.7318111725249417665, + -0.13042702980891274223e+1, 0.93914716977401513365, - 0.97690978620500829033e-01, - -0.11069661516430544523e+01, - 0.14822125029041248734e+01, - -0.11215204887552803203e+01, + 0.97690978620500829033e-1, + -0.11069661516430544523e+1, + 0.14822125029041248734e+1, + -0.11215204887552803203e+1, 0.39659347783121345898, - 0.17829444294460947140, + 0.1782944429446094714, -0.33582059269925179645, 0.17236368728206941103, - 0.84876801883073250792e-03, - 0.46080944020370509517e-01, + 0.84876801883073250792e-3, + 0.46080944020370509517e-1, -0.30012949133769423193, 0.54360491441978375793, -0.56680011839137445229, 0.33749636413108924371, - -0.28662936084371280765e-01, + -0.28662936084371280765e-1, -0.13366660582437314697, - 0.47423485756181590900e-01, + 0.474234857561815909e-1, 0.17801360938768084896, -0.31079767290397664059, 0.17289843904902491012, - 0.21088989594159723850, + 0.2108898959415972385, -0.61727866312026002937, 0.76871191900354973736, -0.52814390371693065163, - -0.18098960712682867769e+01, - 0.28941509147144586223e+01, - -0.69778061143821756840, - -0.22273457339022493251e+01, - 0.34872829362879653736e+01, - -0.28181449542904744021e+01, - -0.60648151249622292425e-01, - 0.28591673638945636071e+01, - -0.44039285317174954315e+01, - 0.30267801457066640936e+01, - -0.19609889301040899813e-02, - -0.34894956921153372775e+01, - 0.47225261166865504237e+01, - -0.34965793681484313993e+01, - 0.13770341024591419357e-01, - 0.28781104743698096016e+01, - -0.38507411862764460153e+01, - 0.17260343233595907275e+01, - 0.13778377566493327233e+01, - -0.37619409362685676257e+01, - 0.30924690787880129150e+01, - -0.38587806986962369660, - -0.29443946523852919661e+01, - 0.39006708405056991218e+01, - -0.24410607875793752797e+01, + -0.18098960712682867769e+1, + 0.28941509147144586223e+1, + -0.6977806114382175684, + -0.22273457339022493251e+1, + 0.34872829362879653736e+1, + -0.28181449542904744021e+1, + -0.60648151249622292425e-1, + 0.28591673638945636071e+1, + -0.44039285317174954315e+1, + 0.30267801457066640936e+1, + -0.19609889301040899813e-2, + -0.34894956921153372775e+1, + 0.47225261166865504237e+1, + -0.34965793681484313993e+1, + 0.13770341024591419357e-1, + 0.28781104743698096016e+1, + -0.38507411862764460153e+1, + 0.17260343233595907275e+1, + 0.13778377566493327233e+1, + -0.37619409362685676257e+1, + 0.3092469078788012915e+1, + -0.3858780698696236966, + -0.29443946523852919661e+1, + 0.39006708405056991218e+1, + -0.24410607875793752797e+1, -0.68132718857705365512, - 0.23314875668037959855e+01, - -0.17965124477977891804e+01, + 0.23314875668037959855e+1, + -0.17965124477977891804e+1, -0.72735961176521446436, - 0.21229805998622208740e+01, - -0.13131939556971723437e+01, - -0.17082021887520169035e+01, - 0.35271075312979172089e+01, - -0.25179378305126292048e+01, - -0.15080120600666970798e+01, - 0.46246440037728504535e+01, - -0.43601277775699331940e+01, - 0.93425587133049173283e-01, - 0.39055598235069068913e+01, - -0.44622528192512769252e+01, + 0.2122980599862220874e+1, + -0.13131939556971723437e+1, + -0.17082021887520169035e+1, + 0.35271075312979172089e+1, + -0.25179378305126292048e+1, + -0.15080120600666970798e+1, + 0.46246440037728504535e+1, + -0.4360127777569933194e+1, + 0.93425587133049173283e-1, + 0.39055598235069068913e+1, + -0.44622528192512769252e+1, 0.63557531960310076347, - 0.30518942176752963391e+01, - -0.31879974768460086487e+01, + 0.30518942176752963391e+1, + -0.31879974768460086487e+1, -0.81160308194953711958, - 0.38319690442126592700e+01, - -0.26587315262837774021e+01, - -0.20240178260678769462e+01, - 0.40626300780229094300e+01, - -0.10244852243391056046e+01, - -0.42022160242540778086e+01, - 0.44340037380724757199e+01, + 0.383196904421265927e+1, + -0.26587315262837774021e+1, + -0.20240178260678769462e+1, + 0.406263007802290943e+1, + -0.10244852243391056046e+1, + -0.42022160242540778086e+1, + 0.44340037380724757199e+1, 0.87847659957813883924, - -0.60580196700118733588e+01, - 0.41713703044383025897e+01, - 0.16741933597296851932e+01, - -0.37464328228577650215e+01, - -0.12487703965902507974e+01, - 0.48612420693482505385e+01, + -0.60580196700118733588e+1, + 0.41713703044383025897e+1, + 0.16741933597296851932e+1, + -0.37464328228577650215e+1, + -0.12487703965902507974e+1, + 0.48612420693482505385e+1, -0.61441642731150403201, - -0.69246796415152687132e+01, - 0.60542250499669041375e+01, - 0.18344050548922812283e+01, - -0.46467694730348361176e+01, - -0.23103196086870791959e+01, - 0.53230311101863332368e+01, - 0.26201936121797748669e+01, - -0.84567964641961328454e+01, + -0.69246796415152687132e+1, + 0.60542250499669041375e+1, + 0.18344050548922812283e+1, + -0.46467694730348361176e+1, + -0.23103196086870791959e+1, + 0.53230311101863332368e+1, + 0.26201936121797748669e+1, + -0.84567964641961328454e+1, 0.26487400138454580967, - 0.63852951775930151257e+01, - 0.15518767715910279925e+01, - -0.70748573036602770969e+01, - -0.42452074237383223831e+01, - 0.77926348816589321444e+01, - 0.56210479775840074268e+01, - -0.43217676083794822617e+01, - -0.92533571098733755633e+01, - -0.27053641981919849258e+01, - 0.95404741456437527347e+01, - 0.95132988248543242094e+01, - 0.26219560046890908467e+01, - -0.91997266978228697809e+01, - -0.15430224873924089479e+02, - -0.14580224542485600736e+02, - -0.11994234671908284184e+02, - -0.58908046995247724809e+01, - -0.40376557362445177901e+01, + 0.63852951775930151257e+1, + 0.15518767715910279925e+1, + -0.70748573036602770969e+1, + -0.42452074237383223831e+1, + 0.77926348816589321444e+1, + 0.56210479775840074268e+1, + -0.43217676083794822617e+1, + -0.92533571098733755633e+1, + -0.27053641981919849258e+1, + 0.95404741456437527347e+1, + 0.95132988248543242094e+1, + 0.26219560046890908467e+1, + -0.91997266978228697809e+1, + -0.15430224873924089479e+2, + -0.14580224542485600736e+2, + -0.11994234671908284184e+2, + -0.58908046995247724809e+1, + -0.40376557362445177901e+1, -0.94916174735181491062, -0.70601529402261731239, -0.22486945704559457848, @@ -6660,1037 +6662,1037 @@ function ESERK4ConstantCache(zprev) 0.34144979886680354442, -0.27596805469761670482, 0.17197504142190350729, - -0.61966741234123573490e-01, - -0.27277984037540309314e-01, - 0.83656597262803292225e-01, + -0.6196674123412357349e-1, + -0.27277984037540309314e-1, + 0.83656597262803292225e-1, -0.10189787613579752434, - 0.87854250361569352634e-01, - -0.49878751172002071257e-01, - 0.14695972621590340790e+01, - -0.22150811371669236749e+01, - 0.13915429692651410942e+01, + 0.87854250361569352634e-1, + -0.49878751172002071257e-1, + 0.1469597262159034079e+1, + -0.22150811371669236749e+1, + 0.13915429692651410942e+1, 0.37928674956870112034, - -0.15694549807929412122e+01, - 0.29166548485042773642e+01, - -0.29864823715133828053e+01, - 0.27917650122221124853e+01, - -0.12924710246626327503e+01, - -0.93319875356628501084e-01, - 0.20560421687119614376e+01, - -0.31482773629852522923e+01, - 0.36657529517790861107e+01, - -0.40325371284354618595e+01, + -0.15694549807929412122e+1, + 0.29166548485042773642e+1, + -0.29864823715133828053e+1, + 0.27917650122221124853e+1, + -0.12924710246626327503e+1, + -0.93319875356628501084e-1, + 0.20560421687119614376e+1, + -0.31482773629852522923e+1, + 0.36657529517790861107e+1, + -0.40325371284354618595e+1, 0.21275209055667076985, - -0.53127520554522078555e+01, - -0.11345033892795061803e+02, - -0.13753302474171173131e+02, - -0.26282658210470611237e+02, - -0.19131594291019059284e+02, - -0.15894959801030100977e+02, - 0.41507890171271304425e+01, - 0.16409446289430707822e+02, - 0.11031009932561218534e+02, + -0.53127520554522078555e+1, + -0.11345033892795061803e+2, + -0.13753302474171173131e+2, + -0.26282658210470611237e+2, + -0.19131594291019059284e+2, + -0.15894959801030100977e+2, + 0.41507890171271304425e+1, + 0.16409446289430707822e+2, + 0.11031009932561218534e+2, -0.13609420002179861697, - -0.16745497303183984883e+02, - -0.50022075414083611022e+01, - 0.92420344551745028383e+01, - 0.94490797556995804740e+01, - -0.30282090227199049970e+01, - -0.13299051304339972290e+02, - 0.37797356038575995463e+01, - 0.10611745518487339268e+02, - -0.25740911718213173032e+01, - -0.79578094770701541805e+01, + -0.16745497303183984883e+2, + -0.50022075414083611022e+1, + 0.92420344551745028383e+1, + 0.9449079755699580474e+1, + -0.3028209022719904997e+1, + -0.1329905130433997229e+2, + 0.37797356038575995463e+1, + 0.10611745518487339268e+2, + -0.25740911718213173032e+1, + -0.79578094770701541805e+1, -0.71928293190096459497, - 0.11656164668786960448e+02, - -0.44424132199417956102e+01, - -0.86302658657115500773e+01, - 0.72279025799086760173e+01, - 0.34921592435718804559e+01, - -0.47355747291657630527e+01, - -0.45378468076505820150e+01, - 0.84179170868612516188e+01, + 0.11656164668786960448e+2, + -0.44424132199417956102e+1, + -0.86302658657115500773e+1, + 0.72279025799086760173e+1, + 0.34921592435718804559e+1, + -0.47355747291657630527e+1, + -0.4537846807650582015e+1, + 0.84179170868612516188e+1, 0.16533847970255877158, - -0.94820457667464239648e+01, - 0.72951655817338494359e+01, - 0.27061777644622679873e+01, - -0.74326707084609546783e+01, - 0.24871013150306806594e+01, - 0.37831428397488475746e+01, - -0.25228340191564537776e+01, - -0.41064832042016261582e+01, - 0.67740284767028970947e+01, + -0.94820457667464239648e+1, + 0.72951655817338494359e+1, + 0.27061777644622679873e+1, + -0.74326707084609546783e+1, + 0.24871013150306806594e+1, + 0.37831428397488475746e+1, + -0.25228340191564537776e+1, + -0.41064832042016261582e+1, + 0.67740284767028970947e+1, -0.91177016782142039641, - -0.77157953370983758390e+01, - 0.10144803302405490442e+02, - -0.39968569572191574579e+01, - -0.44119998268060358626e+01, - 0.75208631862174692984e+01, - -0.39573494582362105376e+01, + -0.7715795337098375839e+1, + 0.10144803302405490442e+2, + -0.39968569572191574579e+1, + -0.44119998268060358626e+1, + 0.75208631862174692984e+1, + -0.39573494582362105376e+1, -0.99527787396102429529, - 0.19087415445648321377e+01, - 0.13826746401770788619e+01, - -0.41549925671795522319e+01, - 0.23768966151346031523e+01, - 0.31354174800698642045e+01, - -0.73951788361720547371e+01, - 0.62440996851364412024e+01, + 0.19087415445648321377e+1, + 0.13826746401770788619e+1, + -0.41549925671795522319e+1, + 0.23768966151346031523e+1, + 0.31354174800698642045e+1, + -0.73951788361720547371e+1, + 0.62440996851364412024e+1, -0.16970925178919896159, - -0.59578706136090557877e+01, - 0.72304349282193616233e+01, - -0.26413573694646519385e+01, - -0.41513416799209528207e+01, - 0.80375296350478944163e+01, - -0.62956635477828664094e+01, + -0.59578706136090557877e+1, + 0.72304349282193616233e+1, + -0.26413573694646519385e+1, + -0.41513416799209528207e+1, + 0.80375296350478944163e+1, + -0.62956635477828664094e+1, 0.47067352417047675361, - 0.52957070964774253241e+01, - -0.73966294820580218428e+01, - 0.52442435372442339769e+01, - -0.10640679698848074519e+01, - -0.20741882707022853971e+01, - 0.26070020627839003424e+01, - -0.11573878452353079105e+01, + 0.52957070964774253241e+1, + -0.73966294820580218428e+1, + 0.52442435372442339769e+1, + -0.10640679698848074519e+1, + -0.20741882707022853971e+1, + 0.26070020627839003424e+1, + -0.11573878452353079105e+1, -0.35005030017547289489, 0.48673015671492569911, - 0.71677232365705456640, - -0.19828026009667032437e+01, - 0.20704148168029536947e+01, + 0.7167723236570545664, + -0.19828026009667032437e+1, + 0.20704148168029536947e+1, -0.78058358674832417634, - -0.86674654837444664590, - 0.15512079086473720135e+01, + -0.8667465483744466459, + 0.15512079086473720135e+1, -0.70112816358019536267, - -0.97997134603651381290, - 0.20599452019401263136e+01, - -0.14353505405051951715e+01, + -0.9799713460365138129, + 0.20599452019401263136e+1, + -0.14353505405051951715e+1, -0.76519048245285381515, - 0.32088109349489450928e+01, - -0.42198340915840173437e+01, - 0.29528441123810522662e+01, - 0.66643857151476160183e+01, - -0.11622313104465733957e+02, - 0.41520090161860458977e+01, - 0.70801031066854225315e+01, - -0.12614464173255617752e+02, - 0.11266881758005876435e+02, - -0.10061811253563597290e+01, - -0.95154188229068150662e+01, - 0.16089844073313091855e+02, - -0.11647935740418413175e+02, + 0.32088109349489450928e+1, + -0.42198340915840173437e+1, + 0.29528441123810522662e+1, + 0.66643857151476160183e+1, + -0.11622313104465733957e+2, + 0.41520090161860458977e+1, + 0.70801031066854225315e+1, + -0.12614464173255617752e+2, + 0.11266881758005876435e+2, + -0.1006181125356359729e+1, + -0.95154188229068150662e+1, + 0.16089844073313091855e+2, + -0.11647935740418413175e+2, 0.92523469292419213694, - 0.12108690403449903883e+02, - -0.16694842678740812403e+02, - 0.12209521446769038278e+02, + 0.12108690403449903883e+2, + -0.16694842678740812403e+2, + 0.12209521446769038278e+2, 0.97783496664945823706, - -0.11641194616170249532e+02, - 0.14960640242698747926e+02, - -0.62430522693902883447e+01, - -0.58078571381251116179e+01, - 0.14720493597026255372e+02, - -0.11325184144625552563e+02, + -0.11641194616170249532e+2, + 0.14960640242698747926e+2, + -0.62430522693902883447e+1, + -0.58078571381251116179e+1, + 0.14720493597026255372e+2, + -0.11325184144625552563e+2, 0.32378711206726890071, - 0.12467809989511808411e+02, - -0.14919995801638451738e+02, - 0.75783219641545098710e+01, - 0.58918574755330572756e+01, - -0.12123582957540142147e+02, - 0.84471584962388988060e+01, - 0.37546887695964912268e+01, - -0.10706944074699066505e+02, - 0.75023228935717352073e+01, - 0.59532916089537968318e+01, - -0.14930601182654806180e+02, - 0.12061673154622056359e+02, - 0.40375628167492871867e+01, - -0.17158889954038478720e+02, - 0.16921509059604954217e+02, + 0.12467809989511808411e+2, + -0.14919995801638451738e+2, + 0.7578321964154509871e+1, + 0.58918574755330572756e+1, + -0.12123582957540142147e+2, + 0.8447158496238898806e+1, + 0.37546887695964912268e+1, + -0.10706944074699066505e+2, + 0.75023228935717352073e+1, + 0.59532916089537968318e+1, + -0.1493060118265480618e+2, + 0.12061673154622056359e+2, + 0.40375628167492871867e+1, + -0.1715888995403847872e+2, + 0.16921509059604954217e+2, -0.33624501559583525045, - -0.15133954799209945463e+02, - 0.16643143816613150676e+02, + -0.15133954799209945463e+2, + 0.16643143816613150676e+2, -0.44083415146244542271, - -0.14503597436865256043e+02, - 0.14190106473974898549e+02, - 0.34640690486877661058e+01, - -0.16612023896108713217e+02, - 0.11648427517651068541e+02, - 0.84744847582649374118e+01, - -0.17588771317138998995e+02, - 0.51553387446549301387e+01, - 0.16979589379315292774e+02, - -0.18670749808403733994e+02, - -0.25460096202091055950e+01, - 0.23212650202067724337e+02, - -0.14595565267890428629e+02, - -0.99138073009005989178e+01, - 0.17759774351620354338e+02, - 0.47648328295414854594e+01, - -0.21776709313419758018e+02, - 0.56201891668973766869e+01, - 0.24987111510460429997e+02, - -0.21152026874192394246e+02, - -0.11226882518927553178e+02, - 0.21585807044704150570e+02, - 0.94177840014988554174e+01, - -0.23716553797808170856e+02, - -0.85020556703405834043e+01, - 0.32610656082162847724e+02, - 0.14764962951388123091e+01, - -0.28537625848123798988e+02, - -0.58857363137688087917e+01, - 0.30061795305559275704e+02, - 0.16897070043828797736e+02, - -0.31720177842572837790e+02, - -0.24201146209018940425e+02, - 0.18020333450691918387e+02, - 0.39792960893291294155e+02, - 0.98244381471039901044e+01, - -0.38279946652941966079e+02, - -0.41557811610755891252e+02, - -0.99768268422466892531e+01, - 0.38413980382512640688e+02, - 0.64182882277671268412e+02, - 0.62569464638357587205e+02, - 0.48621745742818347935e+02, - 0.26582132559752263745e+02, - 0.15348055703275676365e+02, - 0.51478369903220020376e+01, - 0.23537601769644256322e+01, - 0.10352622384259273502e+01, + -0.14503597436865256043e+2, + 0.14190106473974898549e+2, + 0.34640690486877661058e+1, + -0.16612023896108713217e+2, + 0.11648427517651068541e+2, + 0.84744847582649374118e+1, + -0.17588771317138998995e+2, + 0.51553387446549301387e+1, + 0.16979589379315292774e+2, + -0.18670749808403733994e+2, + -0.2546009620209105595e+1, + 0.23212650202067724337e+2, + -0.14595565267890428629e+2, + -0.99138073009005989178e+1, + 0.17759774351620354338e+2, + 0.47648328295414854594e+1, + -0.21776709313419758018e+2, + 0.56201891668973766869e+1, + 0.24987111510460429997e+2, + -0.21152026874192394246e+2, + -0.11226882518927553178e+2, + 0.2158580704470415057e+2, + 0.94177840014988554174e+1, + -0.23716553797808170856e+2, + -0.85020556703405834043e+1, + 0.32610656082162847724e+2, + 0.14764962951388123091e+1, + -0.28537625848123798988e+2, + -0.58857363137688087917e+1, + 0.30061795305559275704e+2, + 0.16897070043828797736e+2, + -0.3172017784257283779e+2, + -0.24201146209018940425e+2, + 0.18020333450691918387e+2, + 0.39792960893291294155e+2, + 0.98244381471039901044e+1, + -0.38279946652941966079e+2, + -0.41557811610755891252e+2, + -0.99768268422466892531e+1, + 0.38413980382512640688e+2, + 0.64182882277671268412e+2, + 0.62569464638357587205e+2, + 0.48621745742818347935e+2, + 0.26582132559752263745e+2, + 0.15348055703275676365e+2, + 0.51478369903220020376e+1, + 0.23537601769644256322e+1, + 0.10352622384259273502e+1, -0.54797141463172216458, 0.92666040732920984535, -0.81683348039355263559, 0.60895635147699866963, -0.31691344004228272357, - 0.25709370807547496374e-01, + 0.25709370807547496374e-1, 0.19936953404296364756, -0.33037996354164322899, 0.35544484186779728985, -0.29172767097047386242, 0.16222583697510006839, - -0.26008831152044113999e+01, - 0.38552663899128991609e+01, - -0.24944092757194837873e+01, + -0.26008831152044113999e+1, + 0.38552663899128991609e+1, + -0.24944092757194837873e+1, -0.55895752784964081172, - 0.25023225299832132507e+01, - -0.48385052192155404427e+01, - 0.49241734779407373424e+01, - -0.47166698750980327048e+01, - 0.22243542194435272918e+01, - -0.69481564778534760096e-01, - -0.31606303516965179590e+01, - 0.48299966861277727759e+01, - -0.56107191481459013360e+01, - 0.63154917868453086527e+01, + 0.25023225299832132507e+1, + -0.48385052192155404427e+1, + 0.49241734779407373424e+1, + -0.47166698750980327048e+1, + 0.22243542194435272918e+1, + -0.69481564778534760096e-1, + -0.3160630351696517959e+1, + 0.48299966861277727759e+1, + -0.5610719148145901336e+1, + 0.63154917868453086527e+1, 0.54747612483849339426, - 0.94167327021169597856e+01, - 0.21102216977000427534e+02, - 0.26322636025065737186e+02, - 0.47910028615790437811e+02, - 0.37174121534723880700e+02, - 0.28109699804197223472e+02, - -0.63390204826273572891e+01, - -0.31701009219818583773e+02, - -0.20008526756941510172e+02, + 0.94167327021169597856e+1, + 0.21102216977000427534e+2, + 0.26322636025065737186e+2, + 0.47910028615790437811e+2, + 0.371741215347238807e+2, + 0.28109699804197223472e+2, + -0.63390204826273572891e+1, + -0.31701009219818583773e+2, + -0.20008526756941510172e+2, 0.19014089420749941128, - 0.30833098671492891185e+02, - 0.10119376579678027284e+02, - -0.18239839221893269894e+02, - -0.16633509873659601652e+02, - 0.47707916670742864795e+01, - 0.25466763907416563484e+02, - -0.74301337580909194713e+01, - -0.19690738186992682301e+02, - 0.48572628913158935049e+01, - 0.14721582675234310855e+02, - 0.14408628418375162283e+01, - -0.21754394512644179116e+02, - 0.81375518946371325768e+01, - 0.16391555778014701872e+02, - -0.13853405619372313851e+02, - -0.61798760096072280490e+01, - 0.86136571220360540480e+01, - 0.84844828701238785840e+01, - -0.15471448997223712141e+02, - -0.82317594911354241560, - 0.18429712208347993396e+02, - -0.14479781576223071937e+02, - -0.41915477486593530898e+01, - 0.13139700084593703977e+02, - -0.41605001335624383074e+01, - -0.72212541983245044364e+01, - 0.45103625096870603173e+01, - 0.81801138075044583786e+01, - -0.13395439558002061986e+02, - 0.25496790306087819822e+01, - 0.13598983191620042987e+02, - -0.18329218286530501558e+02, - 0.71542341205305373109e+01, - 0.81701635473118514597e+01, - -0.13608244274498497717e+02, - 0.66463325207288752594e+01, - 0.27836684154996533813e+01, - -0.45269860934232761807e+01, - -0.17527517754423118657e+01, - 0.72096949351758432556e+01, - -0.42940393573214441503e+01, - -0.55411272236800126478e+01, - 0.13041825312728963837e+02, - -0.10526180312165058339e+02, - -0.10500782709005442861e+01, - 0.12545023211265675656e+02, - -0.14793196273776031191e+02, - 0.59163232800582479243e+01, - 0.72098110477432459930e+01, - -0.14999846152753482542e+02, - 0.12294981037624786779e+02, - -0.19174640491778183193e+01, - -0.84745066605187506781e+01, - 0.12187397686952328613e+02, - -0.81581807353678073014e+01, + 0.30833098671492891185e+2, + 0.10119376579678027284e+2, + -0.18239839221893269894e+2, + -0.16633509873659601652e+2, + 0.47707916670742864795e+1, + 0.25466763907416563484e+2, + -0.74301337580909194713e+1, + -0.19690738186992682301e+2, + 0.48572628913158935049e+1, + 0.14721582675234310855e+2, + 0.14408628418375162283e+1, + -0.21754394512644179116e+2, + 0.81375518946371325768e+1, + 0.16391555778014701872e+2, + -0.13853405619372313851e+2, + -0.6179876009607228049e+1, + 0.8613657122036054048e+1, + 0.8484482870123878584e+1, + -0.15471448997223712141e+2, + -0.8231759491135424156, + 0.18429712208347993396e+2, + -0.14479781576223071937e+2, + -0.41915477486593530898e+1, + 0.13139700084593703977e+2, + -0.41605001335624383074e+1, + -0.72212541983245044364e+1, + 0.45103625096870603173e+1, + 0.81801138075044583786e+1, + -0.13395439558002061986e+2, + 0.25496790306087819822e+1, + 0.13598983191620042987e+2, + -0.18329218286530501558e+2, + 0.71542341205305373109e+1, + 0.81701635473118514597e+1, + -0.13608244274498497717e+2, + 0.66463325207288752594e+1, + 0.27836684154996533813e+1, + -0.45269860934232761807e+1, + -0.17527517754423118657e+1, + 0.72096949351758432556e+1, + -0.42940393573214441503e+1, + -0.55411272236800126478e+1, + 0.13041825312728963837e+2, + -0.10526180312165058339e+2, + -0.10500782709005442861e+1, + 0.12545023211265675656e+2, + -0.14793196273776031191e+2, + 0.59163232800582479243e+1, + 0.7209811047743245993e+1, + -0.14999846152753482542e+2, + 0.12294981037624786779e+2, + -0.19174640491778183193e+1, + -0.84745066605187506781e+1, + 0.12187397686952328613e+2, + -0.81581807353678073014e+1, 0.53367522114754895046, - 0.49728457178525715676e+01, - -0.54960456352742905750e+01, - 0.22529815631796585862e+01, - 0.10893921627793370366e+01, - -0.18048770994467469020e+01, + 0.49728457178525715676e+1, + -0.5496045635274290575e+1, + 0.22529815631796585862e+1, + 0.10893921627793370366e+1, + -0.1804877099446746902e+1, -0.11030157337909564375, - 0.23033174629667612088e+01, - -0.24783626921849335467e+01, + 0.23033174629667612088e+1, + -0.24783626921849335467e+1, 0.25136617186941084823, - 0.24992556126696388041e+01, - -0.33600337194693743470e+01, - 0.13185632278745837986e+01, - 0.22473279443025524493e+01, - -0.46106277994290323363e+01, - 0.36649031807297505203e+01, - 0.37411462928696226360, - -0.50254783255127133401e+01, - 0.71438739536386766105e+01, - -0.51169390944089974127e+01, - -0.91043607200213774178e+01, - 0.16919432555387661665e+02, - -0.73655974954609755301e+01, - -0.86795559271648823341e+01, - 0.17450841378328181719e+02, - -0.17077619583014552518e+02, - 0.34771618953643139704e+01, - 0.11234387544947445292e+02, - -0.21469689285193137351e+02, - 0.16344103563842871552e+02, - -0.23703333480717074799e+01, - -0.15569838722034141654e+02, - 0.21855489887308799268e+02, - -0.15807267047259600190e+02, - -0.25842758543579700259e+01, - 0.17045231043350504763e+02, - -0.21133428116818016917e+02, - 0.79888842828122816897e+01, - 0.93090764041246902849e+01, - -0.21660144063806015424e+02, - 0.15785594977170008590e+02, + 0.24992556126696388041e+1, + -0.3360033719469374347e+1, + 0.13185632278745837986e+1, + 0.22473279443025524493e+1, + -0.46106277994290323363e+1, + 0.36649031807297505203e+1, + 0.3741146292869622636, + -0.50254783255127133401e+1, + 0.71438739536386766105e+1, + -0.51169390944089974127e+1, + -0.91043607200213774178e+1, + 0.16919432555387661665e+2, + -0.73655974954609755301e+1, + -0.86795559271648823341e+1, + 0.17450841378328181719e+2, + -0.17077619583014552518e+2, + 0.34771618953643139704e+1, + 0.11234387544947445292e+2, + -0.21469689285193137351e+2, + 0.16344103563842871552e+2, + -0.23703333480717074799e+1, + -0.15569838722034141654e+2, + 0.21855489887308799268e+2, + -0.1580726704725960019e+2, + -0.25842758543579700259e+1, + 0.17045231043350504763e+2, + -0.21133428116818016917e+2, + 0.79888842828122816897e+1, + 0.93090764041246902849e+1, + -0.21660144063806015424e+2, + 0.1578559497717000859e+2, 0.64195890491968787828, - -0.18912497535972814688e+02, - 0.21042255522306579252e+02, - -0.86882728696236526389e+01, - -0.12026792610491852997e+02, - 0.20511174114019286918e+02, - -0.13105350940906204116e+02, - -0.74429226020005510023e+01, - 0.19333248289727784197e+02, - -0.14658562780193953756e+02, - -0.68173888247453193756e+01, - 0.22181275438751914209e+02, - -0.19588846791185968499e+02, - -0.37789847627282471265e+01, - 0.23553344215368614556e+02, - -0.23954277948803440523e+02, - -0.97683800033468611013e-03, - 0.22208419630548430490e+02, - -0.23651466977178930762e+02, - -0.11732514125218422851e+01, - 0.23374649472498518321e+02, - -0.22002664692831867654e+02, - -0.57185303028844955975e+01, - 0.26087822187241847871e+02, - -0.18286315713087368806e+02, - -0.13088071769470179362e+02, - 0.27760325027721336255e+02, - -0.92985286099446202712e+01, - -0.24593240692854756446e+02, - 0.28002115214546783761e+02, - 0.29961701822805468787e+01, - -0.33115426055441552933e+02, - 0.19014111540037600179e+02, - 0.18485435638230747202e+02, - -0.29674172698598720643e+02, - -0.62179687911102510256e+01, - 0.34071600598730540810e+02, - -0.11250933749157546515e+02, - -0.34249816369752480227e+02, - 0.28201863302602806272e+02, - 0.20336321192211851638e+02, - -0.34585799215342575508e+02, - -0.14523587863735695436e+02, - 0.37976747649092963854e+02, - 0.10047217031386072250e+02, - -0.46566058459569674710e+02, - -0.47819350366441035760e+01, - 0.44818042693645281815e+02, - 0.90408691623301091767e+01, - -0.47114174848889106784e+02, - -0.23719345690403777382e+02, - 0.46221778997617121831e+02, - 0.38454893525472137128e+02, - -0.28101001066029553499e+02, - -0.61058934380126650865e+02, - -0.13674307393517835862e+02, - 0.56550579254320382461e+02, - 0.65088749844607235673e+02, - 0.13898435379113006860e+02, - -0.57991464899612857664e+02, - -0.97514901743451517291e+02, - -0.96340744373161925296e+02, - -0.72674902125944655040e+02, - -0.41998957680450558883e+02, - -0.22144283854652979215e+02, - -0.86230505053764474610e+01, - -0.33633020028911713162e+01, - -0.12988554757753307811e+01, + -0.18912497535972814688e+2, + 0.21042255522306579252e+2, + -0.86882728696236526389e+1, + -0.12026792610491852997e+2, + 0.20511174114019286918e+2, + -0.13105350940906204116e+2, + -0.74429226020005510023e+1, + 0.19333248289727784197e+2, + -0.14658562780193953756e+2, + -0.68173888247453193756e+1, + 0.22181275438751914209e+2, + -0.19588846791185968499e+2, + -0.37789847627282471265e+1, + 0.23553344215368614556e+2, + -0.23954277948803440523e+2, + -0.97683800033468611013e-3, + 0.2220841963054843049e+2, + -0.23651466977178930762e+2, + -0.11732514125218422851e+1, + 0.23374649472498518321e+2, + -0.22002664692831867654e+2, + -0.57185303028844955975e+1, + 0.26087822187241847871e+2, + -0.18286315713087368806e+2, + -0.13088071769470179362e+2, + 0.27760325027721336255e+2, + -0.92985286099446202712e+1, + -0.24593240692854756446e+2, + 0.28002115214546783761e+2, + 0.29961701822805468787e+1, + -0.33115426055441552933e+2, + 0.19014111540037600179e+2, + 0.18485435638230747202e+2, + -0.29674172698598720643e+2, + -0.62179687911102510256e+1, + 0.3407160059873054081e+2, + -0.11250933749157546515e+2, + -0.34249816369752480227e+2, + 0.28201863302602806272e+2, + 0.20336321192211851638e+2, + -0.34585799215342575508e+2, + -0.14523587863735695436e+2, + 0.37976747649092963854e+2, + 0.1004721703138607225e+2, + -0.4656605845956967471e+2, + -0.4781935036644103576e+1, + 0.44818042693645281815e+2, + 0.90408691623301091767e+1, + -0.47114174848889106784e+2, + -0.23719345690403777382e+2, + 0.46221778997617121831e+2, + 0.38454893525472137128e+2, + -0.28101001066029553499e+2, + -0.61058934380126650865e+2, + -0.13674307393517835862e+2, + 0.56550579254320382461e+2, + 0.65088749844607235673e+2, + 0.1389843537911300686e+2, + -0.57991464899612857664e+2, + -0.97514901743451517291e+2, + -0.96340744373161925296e+2, + -0.7267490212594465504e+2, + -0.41998957680450558883e+2, + -0.22144283854652979215e+2, + -0.8623050505376447461e+1, + -0.33633020028911713162e+1, + -0.12988554757753307811e+1, 0.19575406764464498011, -0.60968577452414318696, 0.46179714550717348986, - -0.30837724916772113470, - 0.96848470425553043195e-01, + -0.3083772491677211347, + 0.96848470425553043195e-1, 0.10389585127672142095, - -0.25130099125529875570, + -0.2513009912552987557, 0.32744518259595090104, -0.32488501332071090255, 0.25692682655236348532, -0.14050385965297410018, - 0.14095012828752153666e+01, - -0.20346199289139783595e+01, - 0.13239123328649877731e+01, + 0.14095012828752153666e+1, + -0.20346199289139783595e+1, + 0.13239123328649877731e+1, 0.31852986992727433391, - -0.13071640598112315157e+01, - 0.25610005573593825901e+01, - -0.25797366843031070971e+01, - 0.25172824484379145993e+01, - -0.12100213395883085976e+01, + -0.13071640598112315157e+1, + 0.25610005573593825901e+1, + -0.25797366843031070971e+1, + 0.25172824484379145993e+1, + -0.12100213395883085976e+1, 0.15258858361662641645, - 0.15193524109963547630e+01, - -0.23213689838269790933e+01, - 0.26934058884694342950e+01, - -0.31033204027509198042e+01, + 0.1519352410996354763e+1, + -0.23213689838269790933e+1, + 0.2693405888469434295e+1, + -0.31033204027509198042e+1, -0.70689629168524581448, - -0.51679173995444704914e+01, - -0.12034800236612623436e+02, - -0.15296883449626928808e+02, - -0.26919910331547097115e+02, - -0.21818076372778726579e+02, - -0.15455026063648446666e+02, - 0.30894246007418835198e+01, - 0.18499134098325967557e+02, - 0.11258689025131545236e+02, + -0.51679173995444704914e+1, + -0.12034800236612623436e+2, + -0.15296883449626928808e+2, + -0.26919910331547097115e+2, + -0.21818076372778726579e+2, + -0.15455026063648446666e+2, + 0.30894246007418835198e+1, + 0.18499134098325967557e+2, + 0.11258689025131545236e+2, -0.14933215747031583498, - -0.17378651114398341093e+02, - -0.61584959309399858185e+01, - 0.10867874417795672315e+02, - 0.90770843544448016615e+01, - -0.23752857917862817416e+01, - -0.14773842214590739985e+02, - 0.43293353298177477129e+01, - 0.11300902394924902339e+02, - -0.29139091688039764350e+01, - -0.82265055033519054462e+01, - -0.99894995284424892290, - 0.12562716297553670586e+02, - -0.47077595831137220017e+01, - -0.93772107354133549251e+01, - 0.79828454980268501728e+01, - 0.34491999459176114762e+01, - -0.48575419261605370380e+01, - -0.48530868985575148500e+01, - 0.87694939251741743647e+01, + -0.17378651114398341093e+2, + -0.61584959309399858185e+1, + 0.10867874417795672315e+2, + 0.90770843544448016615e+1, + -0.23752857917862817416e+1, + -0.14773842214590739985e+2, + 0.43293353298177477129e+1, + 0.11300902394924902339e+2, + -0.2913909168803976435e+1, + -0.82265055033519054462e+1, + -0.9989499528442489229, + 0.12562716297553670586e+2, + -0.47077595831137220017e+1, + -0.93772107354133549251e+1, + 0.79828454980268501728e+1, + 0.34491999459176114762e+1, + -0.4857541926160537038e+1, + -0.485308689855751485e+1, + 0.87694939251741743647e+1, 0.62782041641130104104, - -0.10751428483913681333e+02, - 0.85273298347352337601e+01, - 0.21626099602389823318e+01, - -0.73411591112033205420e+01, - 0.23243403524319181663e+01, - 0.40442251538333051641e+01, - -0.23504428550155491706e+01, - -0.50194744761917817755e+01, - 0.80790960796579032177e+01, - -0.18952812731504649069e+01, - -0.73812915754828871684e+01, - 0.10201509849042171396e+02, - -0.39770909834760517221e+01, - -0.45880560242547145933e+01, - 0.75109204140396697014e+01, - -0.33746621902871272169e+01, - -0.21119345891677459015e+01, - 0.31381777274741402550e+01, + -0.10751428483913681333e+2, + 0.85273298347352337601e+1, + 0.21626099602389823318e+1, + -0.7341159111203320542e+1, + 0.23243403524319181663e+1, + 0.40442251538333051641e+1, + -0.23504428550155491706e+1, + -0.50194744761917817755e+1, + 0.80790960796579032177e+1, + -0.18952812731504649069e+1, + -0.73812915754828871684e+1, + 0.10201509849042171396e+2, + -0.39770909834760517221e+1, + -0.45880560242547145933e+1, + 0.75109204140396697014e+1, + -0.33746621902871272169e+1, + -0.21119345891677459015e+1, + 0.3138177727474140255e+1, 0.50251612004540013867, - -0.37414914449837386456e+01, - 0.22559963177486288544e+01, - 0.31563649101020798682e+01, - -0.72297586934861799435e+01, - 0.56118905573073529780e+01, - 0.11322437540447893856e+01, - -0.77536524753172155755e+01, - 0.90138331283427532981e+01, - -0.38366983102465876954e+01, - -0.38280455570445801605e+01, - 0.84859533586393283144e+01, - -0.71549365646259497353e+01, - 0.14235960965796181643e+01, - 0.43641317450629815156e+01, - -0.63985333503149783851e+01, - 0.40881648371220560279e+01, + -0.37414914449837386456e+1, + 0.22559963177486288544e+1, + 0.31563649101020798682e+1, + -0.72297586934861799435e+1, + 0.5611890557307352978e+1, + 0.11322437540447893856e+1, + -0.77536524753172155755e+1, + 0.90138331283427532981e+1, + -0.38366983102465876954e+1, + -0.38280455570445801605e+1, + 0.84859533586393283144e+1, + -0.71549365646259497353e+1, + 0.14235960965796181643e+1, + 0.43641317450629815156e+1, + -0.63985333503149783851e+1, + 0.40881648371220560279e+1, 0.20156578033006294914, - -0.32114433517357117154e+01, - 0.33273547182397975597e+01, - -0.12659446498805118075e+01, + -0.32114433517357117154e+1, + 0.33273547182397975597e+1, + -0.12659446498805118075e+1, -0.84555368437961420103, - 0.14259228979152513972e+01, + 0.14259228979152513972e+1, -0.44721158397320165401, -0.75785454255066231344, 0.88590214528974442487, 0.28964920527327392419, - -0.17065132536042502132e+01, - 0.20087886450454068843e+01, + -0.17065132536042502132e+1, + 0.20087886450454068843e+1, -0.64130114073616950598, - -0.15802220591384095183e+01, - 0.30749385221364184950e+01, - -0.26190360298360606528e+01, + -0.15802220591384095183e+1, + 0.3074938522136418495e+1, + -0.26190360298360606528e+1, 0.32613471443321701004, - 0.23887121241201958455e+01, - -0.37196969552752765509e+01, - 0.27299736093508291113e+01, - 0.41519132506008054051e+01, - -0.81002332206035454476e+01, - 0.39824980276237607058e+01, - 0.36643714419387531933e+01, - -0.81977914394659219255e+01, - 0.86662553648256874794e+01, - -0.26370079591286565979e+01, - -0.42335193201352829817e+01, - 0.94762907427256184434e+01, - -0.75898170712569736907e+01, - 0.15603656294962613416e+01, - 0.66388051628671709281e+01, - -0.94921452541188404695e+01, - 0.67753073888723012175e+01, - 0.17488435967989695019e+01, - -0.82612096690048240077e+01, - 0.99044561026595498987e+01, - -0.33583653571674969562e+01, - -0.48953851780755845979e+01, - 0.10606635457576304660e+02, - -0.73947018327408491345e+01, + 0.23887121241201958455e+1, + -0.37196969552752765509e+1, + 0.27299736093508291113e+1, + 0.41519132506008054051e+1, + -0.81002332206035454476e+1, + 0.39824980276237607058e+1, + 0.36643714419387531933e+1, + -0.81977914394659219255e+1, + 0.86662553648256874794e+1, + -0.26370079591286565979e+1, + -0.42335193201352829817e+1, + 0.94762907427256184434e+1, + -0.75898170712569736907e+1, + 0.15603656294962613416e+1, + 0.66388051628671709281e+1, + -0.94921452541188404695e+1, + 0.67753073888723012175e+1, + 0.17488435967989695019e+1, + -0.82612096690048240077e+1, + 0.99044561026595498987e+1, + -0.33583653571674969562e+1, + -0.48953851780755845979e+1, + 0.1060663545757630466e+2, + -0.73947018327408491345e+1, -0.69988472812242574772, - 0.93888278800466444807e+01, - -0.98642304670666653976e+01, - 0.32795973427385138876e+01, - 0.71075012384648861286e+01, - -0.10912381195410933543e+02, - 0.64770565246210081156e+01, - 0.45782355057770836027e+01, - -0.11027827422544721259e+02, - 0.87569854342732327268e+01, - 0.23950941215584857780e+01, - -0.10780013078943133209e+02, - 0.10238432470111877848e+02, - 0.92759669206364037120, - -0.10661260220847912805e+02, - 0.11100443302278842239e+02, - 0.41331231295871800890, - -0.11013809139350646760e+02, - 0.11413052597165863844e+02, - 0.10656895766112985946e+01, - -0.11975634238648080299e+02, - 0.10994054188674791561e+02, - 0.31225182653990364301e+01, - -0.13363686098869727914e+02, - 0.92981691938030532896e+01, - 0.67356709143180246713e+01, - -0.14433381274063469490e+02, - 0.54347371195980089809e+01, - 0.11551980170524677405e+02, - -0.13575693861777825333e+02, - -0.13866500466999374108e+01, - 0.15877500982618300895e+02, - -0.83969391508273609759e+01, - -0.10472521645791310618e+02, - 0.15836602624725598432e+02, - 0.26544625416267977336e+01, - -0.17270793291649084722e+02, - 0.65115719078479763482e+01, - 0.15831987011938910115e+02, - -0.12745958561714132884e+02, - -0.11209898742170835817e+02, - 0.17754722936180325377e+02, - 0.74952643294777603344e+01, - -0.19825170749915653090e+02, - -0.38203524563352528887e+01, - 0.22050251116823897490e+02, - 0.33400748406418405700e+01, - -0.22842520148427649218e+02, - -0.46716191005779981182e+01, - 0.24216667847918657230e+02, - 0.10904951585131396286e+02, - -0.22121194183773415176e+02, - -0.19995785960673320147e+02, - 0.14432295787388920161e+02, - 0.30594390413795423456e+02, - 0.63942426482517422670e+01, - -0.27601889863457230945e+02, - -0.33251131904041827170e+02, - -0.63826939688622621460e+01, - 0.28694207368896275767e+02, - 0.48758866904201617842e+02, - 0.48432029436523109212e+02, - 0.35916467199136100419e+02, - 0.21457935508545741499e+02, - 0.10695241834080455590e+02, - 0.45314692424798632686e+01, - 0.16493207104785898576e+01, + 0.93888278800466444807e+1, + -0.98642304670666653976e+1, + 0.32795973427385138876e+1, + 0.71075012384648861286e+1, + -0.10912381195410933543e+2, + 0.64770565246210081156e+1, + 0.45782355057770836027e+1, + -0.11027827422544721259e+2, + 0.87569854342732327268e+1, + 0.2395094121558485778e+1, + -0.10780013078943133209e+2, + 0.10238432470111877848e+2, + 0.9275966920636403712, + -0.10661260220847912805e+2, + 0.11100443302278842239e+2, + 0.4133123129587180089, + -0.1101380913935064676e+2, + 0.11413052597165863844e+2, + 0.10656895766112985946e+1, + -0.11975634238648080299e+2, + 0.10994054188674791561e+2, + 0.31225182653990364301e+1, + -0.13363686098869727914e+2, + 0.92981691938030532896e+1, + 0.67356709143180246713e+1, + -0.1443338127406346949e+2, + 0.54347371195980089809e+1, + 0.11551980170524677405e+2, + -0.13575693861777825333e+2, + -0.13866500466999374108e+1, + 0.15877500982618300895e+2, + -0.83969391508273609759e+1, + -0.10472521645791310618e+2, + 0.15836602624725598432e+2, + 0.26544625416267977336e+1, + -0.17270793291649084722e+2, + 0.65115719078479763482e+1, + 0.15831987011938910115e+2, + -0.12745958561714132884e+2, + -0.11209898742170835817e+2, + 0.17754722936180325377e+2, + 0.74952643294777603344e+1, + -0.1982517074991565309e+2, + -0.38203524563352528887e+1, + 0.2205025111682389749e+2, + 0.334007484064184057e+1, + -0.22842520148427649218e+2, + -0.46716191005779981182e+1, + 0.2421666784791865723e+2, + 0.10904951585131396286e+2, + -0.22121194183773415176e+2, + -0.19995785960673320147e+2, + 0.14432295787388920161e+2, + 0.30594390413795423456e+2, + 0.6394242648251742267e+1, + -0.27601889863457230945e+2, + -0.3325113190404182717e+2, + -0.6382693968862262146e+1, + 0.28694207368896275767e+2, + 0.48758866904201617842e+2, + 0.48432029436523109212e+2, + 0.35916467199136100419e+2, + 0.21457935508545741499e+2, + 0.1069524183408045559e+2, + 0.45314692424798632686e+1, + 0.16493207104785898576e+1, 0.51856843252354645202, 0.14114010914176919331, - 0.33230370460571811986e-01, - 0.67460267516357089873e-02, - 0.11738977767528271240e-02, - 0.17354149297386779294e-03, - 0.21518958043835073352e-04, - 0.21980971488110653872e-05, - 0.18022807140922190298e-06, - 0.11409868907934252407e-07, - 0.52379231167933531723e-09, + 0.33230370460571811986e-1, + 0.67460267516357089873e-2, + 0.1173897776752827124e-2, + 0.17354149297386779294e-3, + 0.21518958043835073352e-4, + 0.21980971488110653872e-5, + 0.18022807140922190298e-6, + 0.11409868907934252407e-7, + 0.52379231167933531723e-9, 0.15523579546090187169e-10, 0.22307928733991027162e-12, - -0.21252104566901156187e-02, - 0.47602122553875979988e-02, - -0.23319606108781606654e-02, - 0.11768397851523221178e-02, - 0.24395191980040244369e-02, - -0.41396947327879242765e-02, - 0.75687212100309722573e-02, - -0.83475970702223331599e-02, - 0.10207841402391585814e-01, - -0.89351572226610935512e-02, - 0.84834164965337972852e-02, - -0.48991692635455526619e-02, - 0.23677799310070218874e-02, - 0.27135547445318076998e-02, - -0.64717301109431550274e-02, - 0.10659451280552517324e-01, - -0.16971417451167515600e-01, - 0.11458394087556814447e-01, - -0.35302921455879751611e-01, - -0.11086415388940878274e-01, - -0.75527416611445574723e-01, - -0.61367174066608409788e-01, + -0.21252104566901156187e-2, + 0.47602122553875979988e-2, + -0.23319606108781606654e-2, + 0.11768397851523221178e-2, + 0.24395191980040244369e-2, + -0.41396947327879242765e-2, + 0.75687212100309722573e-2, + -0.83475970702223331599e-2, + 0.10207841402391585814e-1, + -0.89351572226610935512e-2, + 0.84834164965337972852e-2, + -0.48991692635455526619e-2, + 0.23677799310070218874e-2, + 0.27135547445318076998e-2, + -0.64717301109431550274e-2, + 0.10659451280552517324e-1, + -0.169714174511675156e-1, + 0.11458394087556814447e-1, + -0.35302921455879751611e-1, + -0.11086415388940878274e-1, + -0.75527416611445574723e-1, + -0.61367174066608409788e-1, -0.11018257437864688308, - -0.63360783416535379486e-01, - -0.39550425819924649173e-01, - 0.43616922375361903697e-01, - 0.59902335345140181322e-01, - 0.45043342700586887217e-01, - -0.29433566296546091051e-01, - -0.52472172215169601839e-01, - -0.25652616216350371259e-01, - 0.47075954687693773171e-01, - 0.34521019437932287666e-01, - -0.88893053138709085537e-02, - -0.55797544522345858542e-01, - 0.95583715466866191190e-02, - 0.35960944827956940750e-01, - 0.16063927637554816646e-01, - -0.45952286918157392304e-01, - -0.88816701305783323644e-02, - 0.37326400367320509976e-01, - 0.97411395498490319783e-02, - -0.33985009575695480921e-01, - -0.10538330070682151371e-01, - 0.41510181045428411195e-01, - -0.65143450534171686364e-02, - -0.29620295998649778801e-01, - 0.70347730936937786714e-02, - 0.32723706508838226736e-01, - -0.23420313866836944133e-01, - -0.18230329281837914096e-01, - 0.27319685029818203265e-01, - 0.78385729774184953467e-02, - -0.32808565083090102110e-01, - 0.12862293992634254644e-01, - 0.20808771694197800151e-01, - -0.19919354102434814330e-01, - -0.12275415140396319161e-01, - 0.30624866169513601660e-01, - -0.99711353423985599198e-02, - -0.23262987797499069115e-01, - 0.29851296154376306263e-01, - -0.65270255840256868538e-02, - -0.12396071956596532715e-01, - 0.75453705051479764282e-03, - 0.29675001756873195524e-01, - -0.44533277734601993403e-01, - 0.28622092608952171694e-01, - -0.42595662070896053416e-03, - -0.99799759062847819002e-02, - -0.46173188462212862160e-02, - 0.23815205922583619624e-01, - -0.22714672484254884444e-01, - -0.34249479864663991439e-03, - 0.24184182022102613391e-01, - -0.26482415141286377164e-01, - 0.67774649142295396997e-02, - 0.15599079332972831669e-01, - -0.20550053189079986460e-01, - 0.71199206140426960984e-02, - 0.82208827501868437376e-02, - -0.75722834470439053314e-02, - -0.10485611953535957375e-01, - 0.31178898964759019230e-01, - -0.36545824227925037542e-01, - 0.22257078731645979497e-01, - 0.31731252919616907736e-03, - -0.13690987567534241773e-01, - 0.10002228261296182768e-01, - 0.43049523079313218449e-02, - -0.14172695439649633450e-01, - 0.99642779631679227054e-02, - 0.57394342690901493237e-02, - -0.19931165813454075619e-01, - 0.20950246898905556386e-01, - -0.67992860987144861096e-02, - -0.12701184946166826223e-01, - 0.24554449426285498981e-01, - -0.21349445835906203511e-01, - 0.70722001758675729494e-02, - 0.73968344929492531661e-02, - -0.11691565619794407754e-01, - 0.40698824861837498701e-02, - 0.88487782598107179305e-02, - -0.16596021320167724661e-01, - 0.13371976169817362257e-01, - -0.11528188484496667589e-02, - -0.11169692288418981568e-01, - 0.14952691855655802014e-01, - -0.69054725847459740365e-02, - -0.79810216463340744042e-02, - 0.20581829142970728408e-01, - -0.22682493541005644550e-01, - 0.12747077010122887658e-01, - 0.42592992229895524151e-02, - -0.19462420696131580572e-01, - 0.26291805100786658222e-01, - -0.23355439194073606551e-01, - 0.15415646938757885526e-01, - -0.91784786271629850707e-02, - 0.96553674315550102464e-02, - -0.16422538483089471617e-01, - 0.24796161296061554336e-01, - -0.28163252356785514058e-01, - 0.22781504971281202332e-01, - -0.94141356893948195672e-02, - -0.62952756987398545210e-02, - 0.17552894445802696283e-01, - -0.19367135188568355975e-01, - 0.11782898580305321140e-01, - 0.92944312074773815461e-03, - -0.11940270866985770726e-01, - 0.15991319503711784455e-01, - -0.11251404494623735639e-01, - 0.55803100886407598809e-03, - 0.10928968884649312848e-01, - -0.17850115073577362684e-01, - 0.17830522115947596701e-01, - -0.11774113908287961450e-01, - 0.36163556618637872180e-02, - 0.25077284444097796764e-02, - -0.38748498133159871293e-02, - 0.10008919715141571631e-02, - 0.33737356094295069611e-02, - -0.53594224878799230638e-02, - 0.25886860093674358453e-02, - 0.49711439486794829767e-02, - -0.14375291332359412672e-01, - 0.21552449775387276520e-01, - -0.22733469066437455436e-01, - 0.16751007409954082883e-01, - -0.52081690382424217223e-02, - -0.76376124097290417139e-02, - 0.17085635251197568013e-01, - -0.19475706326756068998e-01, - 0.14121546976601114659e-01, - -0.31219844371610195807e-02, - -0.90895027037163431821e-02, - 0.17939401600751473526e-01, - -0.20066541746998230872e-01, - 0.14937585618971514420e-01, - -0.45277740558723649292e-02, - -0.71754412608005880073e-02, - 0.16120198134598258399e-01, - -0.19312004962230764488e-01, - 0.16149945896392042810e-01, - -0.81055950556462360440e-02, - -0.16711087839011357688e-02, - 0.99436799937837987151e-02, - -0.14235657634002588795e-01, - 0.13898232693989268777e-01, - -0.98238578828972033391e-02, - 0.41870457308884291223e-02, - 0.77690453029509627409e-03, - -0.33418215241949379181e-02, - 0.30841878380406650279e-02, - -0.60566182493274924037e-03, - -0.26412132796011086530e-02, - 0.52656575362954064976e-02, - -0.62822545075435151651e-02, - 0.56453855163302304673e-02, - -0.39479622784323355200e-02, - 0.22571547526715959875e-02, - -0.14156783908222409646e-02, - 0.18409284792721151893e-02, - -0.32049750246601243012e-02, - 0.47681506013522948623e-02, - -0.55909361963158606124e-02, - 0.51049781065244789410e-02, - -0.32571237024641226838e-02, - 0.67346390882999792541e-03, - 0.16917844889734539541e-02, - -0.28456402079619757400e-02, - 0.22609679144175529736e-02, - -0.34794895347951371005e-04, - -0.30448530961532734203e-02, - 0.58368242123408619129e-02, - -0.72160422367790830883e-02, - 0.65418737941593894242e-02, - -0.38762849123602635334e-02, - -0.70893556530817747330e-01, + -0.63360783416535379486e-1, + -0.39550425819924649173e-1, + 0.43616922375361903697e-1, + 0.59902335345140181322e-1, + 0.45043342700586887217e-1, + -0.29433566296546091051e-1, + -0.52472172215169601839e-1, + -0.25652616216350371259e-1, + 0.47075954687693773171e-1, + 0.34521019437932287666e-1, + -0.88893053138709085537e-2, + -0.55797544522345858542e-1, + 0.9558371546686619119e-2, + 0.3596094482795694075e-1, + 0.16063927637554816646e-1, + -0.45952286918157392304e-1, + -0.88816701305783323644e-2, + 0.37326400367320509976e-1, + 0.97411395498490319783e-2, + -0.33985009575695480921e-1, + -0.10538330070682151371e-1, + 0.41510181045428411195e-1, + -0.65143450534171686364e-2, + -0.29620295998649778801e-1, + 0.70347730936937786714e-2, + 0.32723706508838226736e-1, + -0.23420313866836944133e-1, + -0.18230329281837914096e-1, + 0.27319685029818203265e-1, + 0.78385729774184953467e-2, + -0.3280856508309010211e-1, + 0.12862293992634254644e-1, + 0.20808771694197800151e-1, + -0.1991935410243481433e-1, + -0.12275415140396319161e-1, + 0.3062486616951360166e-1, + -0.99711353423985599198e-2, + -0.23262987797499069115e-1, + 0.29851296154376306263e-1, + -0.65270255840256868538e-2, + -0.12396071956596532715e-1, + 0.75453705051479764282e-3, + 0.29675001756873195524e-1, + -0.44533277734601993403e-1, + 0.28622092608952171694e-1, + -0.42595662070896053416e-3, + -0.99799759062847819002e-2, + -0.4617318846221286216e-2, + 0.23815205922583619624e-1, + -0.22714672484254884444e-1, + -0.34249479864663991439e-3, + 0.24184182022102613391e-1, + -0.26482415141286377164e-1, + 0.67774649142295396997e-2, + 0.15599079332972831669e-1, + -0.2055005318907998646e-1, + 0.71199206140426960984e-2, + 0.82208827501868437376e-2, + -0.75722834470439053314e-2, + -0.10485611953535957375e-1, + 0.3117889896475901923e-1, + -0.36545824227925037542e-1, + 0.22257078731645979497e-1, + 0.31731252919616907736e-3, + -0.13690987567534241773e-1, + 0.10002228261296182768e-1, + 0.43049523079313218449e-2, + -0.1417269543964963345e-1, + 0.99642779631679227054e-2, + 0.57394342690901493237e-2, + -0.19931165813454075619e-1, + 0.20950246898905556386e-1, + -0.67992860987144861096e-2, + -0.12701184946166826223e-1, + 0.24554449426285498981e-1, + -0.21349445835906203511e-1, + 0.70722001758675729494e-2, + 0.73968344929492531661e-2, + -0.11691565619794407754e-1, + 0.40698824861837498701e-2, + 0.88487782598107179305e-2, + -0.16596021320167724661e-1, + 0.13371976169817362257e-1, + -0.11528188484496667589e-2, + -0.11169692288418981568e-1, + 0.14952691855655802014e-1, + -0.69054725847459740365e-2, + -0.79810216463340744042e-2, + 0.20581829142970728408e-1, + -0.2268249354100564455e-1, + 0.12747077010122887658e-1, + 0.42592992229895524151e-2, + -0.19462420696131580572e-1, + 0.26291805100786658222e-1, + -0.23355439194073606551e-1, + 0.15415646938757885526e-1, + -0.91784786271629850707e-2, + 0.96553674315550102464e-2, + -0.16422538483089471617e-1, + 0.24796161296061554336e-1, + -0.28163252356785514058e-1, + 0.22781504971281202332e-1, + -0.94141356893948195672e-2, + -0.6295275698739854521e-2, + 0.17552894445802696283e-1, + -0.19367135188568355975e-1, + 0.1178289858030532114e-1, + 0.92944312074773815461e-3, + -0.11940270866985770726e-1, + 0.15991319503711784455e-1, + -0.11251404494623735639e-1, + 0.55803100886407598809e-3, + 0.10928968884649312848e-1, + -0.17850115073577362684e-1, + 0.17830522115947596701e-1, + -0.1177411390828796145e-1, + 0.3616355661863787218e-2, + 0.25077284444097796764e-2, + -0.38748498133159871293e-2, + 0.10008919715141571631e-2, + 0.33737356094295069611e-2, + -0.53594224878799230638e-2, + 0.25886860093674358453e-2, + 0.49711439486794829767e-2, + -0.14375291332359412672e-1, + 0.2155244977538727652e-1, + -0.22733469066437455436e-1, + 0.16751007409954082883e-1, + -0.52081690382424217223e-2, + -0.76376124097290417139e-2, + 0.17085635251197568013e-1, + -0.19475706326756068998e-1, + 0.14121546976601114659e-1, + -0.31219844371610195807e-2, + -0.90895027037163431821e-2, + 0.17939401600751473526e-1, + -0.20066541746998230872e-1, + 0.1493758561897151442e-1, + -0.45277740558723649292e-2, + -0.71754412608005880073e-2, + 0.16120198134598258399e-1, + -0.19312004962230764488e-1, + 0.1614994589639204281e-1, + -0.8105595055646236044e-2, + -0.16711087839011357688e-2, + 0.99436799937837987151e-2, + -0.14235657634002588795e-1, + 0.13898232693989268777e-1, + -0.98238578828972033391e-2, + 0.41870457308884291223e-2, + 0.77690453029509627409e-3, + -0.33418215241949379181e-2, + 0.30841878380406650279e-2, + -0.60566182493274924037e-3, + -0.2641213279601108653e-2, + 0.52656575362954064976e-2, + -0.62822545075435151651e-2, + 0.56453855163302304673e-2, + -0.394796227843233552e-2, + 0.22571547526715959875e-2, + -0.14156783908222409646e-2, + 0.18409284792721151893e-2, + -0.32049750246601243012e-2, + 0.47681506013522948623e-2, + -0.55909361963158606124e-2, + 0.5104978106524478941e-2, + -0.32571237024641226838e-2, + 0.67346390882999792541e-3, + 0.16917844889734539541e-2, + -0.284564020796197574e-2, + 0.22609679144175529736e-2, + -0.34794895347951371005e-4, + -0.30448530961532734203e-2, + 0.58368242123408619129e-2, + -0.72160422367790830883e-2, + 0.65418737941593894242e-2, + -0.38762849123602635334e-2, + -0.7089355653081774733e-1, 0.13398109649301190305, - -0.85071480360113416186e-01, - 0.29752427136414381220e-01, - 0.35440497172347575072e-01, - -0.71136624315624619186e-01, - 0.87264077673286380432e-01, - -0.60188371776200587371e-01, - 0.19996949997653060832e-01, - 0.38667957527460626588e-01, - -0.75216937256910101905e-01, - 0.95796749477792750294e-01, - -0.71918776555518773574e-01, - 0.29464078311709183955e-01, - 0.38923272017097790276e-01, - -0.91761286403234887388e-01, + -0.85071480360113416186e-1, + 0.2975242713641438122e-1, + 0.35440497172347575072e-1, + -0.71136624315624619186e-1, + 0.87264077673286380432e-1, + -0.60188371776200587371e-1, + 0.19996949997653060832e-1, + 0.38667957527460626588e-1, + -0.75216937256910101905e-1, + 0.95796749477792750294e-1, + -0.71918776555518773574e-1, + 0.29464078311709183955e-1, + 0.38923272017097790276e-1, + -0.91761286403234887388e-1, 0.13162915042248535258, -0.12501222009527257484, - 0.92896021548972571025e-01, - -0.24770621004140493115e-01, - -0.38395207161627815939e-01, - 0.96940218776524339495e-01, + 0.92896021548972571025e-1, + -0.24770621004140493115e-1, + -0.38395207161627815939e-1, + 0.96940218776524339495e-1, -0.11321657075153740424, 0.10347531511695190476, - -0.53319920999565145747e-01, - 0.15996685107783994474e-02, - 0.52046774494811265388e-01, - -0.68375352072288619887e-01, - 0.61234342513097790583e-01, - -0.14000989318293436889e-01, - -0.35936645696454980192e-01, - 0.89389289504976501832e-01, - -0.10680875136597309250, + -0.53319920999565145747e-1, + 0.15996685107783994474e-2, + 0.52046774494811265388e-1, + -0.68375352072288619887e-1, + 0.61234342513097790583e-1, + -0.14000989318293436889e-1, + -0.35936645696454980192e-1, + 0.89389289504976501832e-1, + -0.1068087513659730925, 0.10130145170441941238, - -0.55404239627933025980e-01, - 0.55637686976075552414e-02, - 0.50141200578179820346e-01, - -0.73583618768017888812e-01, - 0.79345925302487380071e-01, - -0.50962324436512322634e-01, - 0.24513343672209364499e-01, - 0.42680506449474294589e-02, - -0.16813938589938042488e-02, - -0.12123376656330843784e-01, - 0.48562165269287985159e-01, - -0.69074734948808905188e-01, - 0.79391943736777464968e-01, - -0.51360282651451177882e-01, - 0.13118033409967106567e-01, - 0.39114458046614335174e-01, - -0.62602887010111615829e-01, - 0.64225553181455993790e-01, - -0.22127056356031786499e-01, - -0.26682412250668554460e-01, - 0.78367550061814506002e-01, - -0.87466895829414470498e-01, - 0.64491748662866957287e-01, - 0.37869681318754943970e-02, - -0.70721320190845371467e-01, + -0.5540423962793302598e-1, + 0.55637686976075552414e-2, + 0.50141200578179820346e-1, + -0.73583618768017888812e-1, + 0.79345925302487380071e-1, + -0.50962324436512322634e-1, + 0.24513343672209364499e-1, + 0.42680506449474294589e-2, + -0.16813938589938042488e-2, + -0.12123376656330843784e-1, + 0.48562165269287985159e-1, + -0.69074734948808905188e-1, + 0.79391943736777464968e-1, + -0.51360282651451177882e-1, + 0.13118033409967106567e-1, + 0.39114458046614335174e-1, + -0.62602887010111615829e-1, + 0.6422555318145599379e-1, + -0.22127056356031786499e-1, + -0.2668241225066855446e-1, + 0.78367550061814506002e-1, + -0.87466895829414470498e-1, + 0.64491748662866957287e-1, + 0.3786968131875494397e-2, + -0.70721320190845371467e-1, 0.12642516950401305742, - -0.12610194169684177390, - 0.87335029532095972971e-01, - -0.67088506847544533696e-02, - -0.62130018256824487421e-01, + -0.1261019416968417739, + 0.87335029532095972971e-1, + -0.67088506847544533696e-2, + -0.62130018256824487421e-1, 0.10944657424550746638, - -0.98474371324602072431e-01, - 0.58719294365202803765e-01, - 0.42656765923852670713e-02, - -0.37200387218424765812e-01, - 0.41953622921874059171e-01, - -0.40523952082700695704e-03, - -0.41354226572143652774e-01, - 0.72613856914738150738e-01, - -0.50919294608992804463e-01, - 0.11812543724142581403e-02, - 0.70341863441854210470e-01, + -0.98474371324602072431e-1, + 0.58719294365202803765e-1, + 0.42656765923852670713e-2, + -0.37200387218424765812e-1, + 0.41953622921874059171e-1, + -0.40523952082700695704e-3, + -0.41354226572143652774e-1, + 0.72613856914738150738e-1, + -0.50919294608992804463e-1, + 0.11812543724142581403e-2, + 0.7034186344185421047e-1, -0.10479418413573493574, - 0.97964564514589388966e-01, - -0.30734872977222955220e-01, - -0.44210884679536426034e-01, + 0.97964564514589388966e-1, + -0.3073487297722295522e-1, + -0.44210884679536426034e-1, 0.10427676950236117182, - -0.96134721495969965854e-01, - 0.40855623271761627724e-01, - 0.50050734515688803661e-01, - -0.10711873213213997380, + -0.96134721495969965854e-1, + 0.40855623271761627724e-1, + 0.50050734515688803661e-1, + -0.1071187321321399738, 0.11689979650837321878, - -0.57753758875942633189e-01, - -0.13713243090348449169e-01, - 0.69946727707522443618e-01, - -0.58220340120613361945e-01, - 0.74608964258409214004e-02, - 0.61153443440093331607e-01, - -0.76496388860153405331e-01, - 0.37763606276734779099e-01, - 0.53151709296893827339e-01, + -0.57753758875942633189e-1, + -0.13713243090348449169e-1, + 0.69946727707522443618e-1, + -0.58220340120613361945e-1, + 0.74608964258409214004e-2, + 0.61153443440093331607e-1, + -0.76496388860153405331e-1, + 0.37763606276734779099e-1, + 0.53151709296893827339e-1, -0.11877891915528322742, 0.12856911970345152874, - -0.50367293405615874702e-01, - -0.53447619468797641362e-01, + -0.50367293405615874702e-1, + -0.53447619468797641362e-1, 0.13708396773752429265, -0.13193618805823623119, - 0.66423327792284547755e-01, - 0.23257648132453241641e-01, - -0.49493322776255510576e-01, - 0.94308247316405718896e-02, - 0.79510619559665304812e-01, + 0.66423327792284547755e-1, + 0.23257648132453241641e-1, + -0.49493322776255510576e-1, + 0.94308247316405718896e-2, + 0.79510619559665304812e-1, -0.12186569824342373403, - 0.87691028629576645015e-01, - 0.28622003387247206552e-01, - -0.13012375416984420240, + 0.87691028629576645015e-1, + 0.28622003387247206552e-1, + -0.1301237541698442024, 0.15995747653670661093, - -0.80108387972453745651e-01, - -0.25774651905642865374e-01, - 0.85922368977866592221e-01, - -0.33129449292496469803e-01, - -0.67815711514269974569e-01, + -0.80108387972453745651e-1, + -0.25774651905642865374e-1, + 0.85922368977866592221e-1, + -0.33129449292496469803e-1, + -0.67815711514269974569e-1, 0.13971996304814027212, - -0.94236389756337704537e-01, - -0.18591016420986140184e-01, + -0.94236389756337704537e-1, + -0.18591016420986140184e-1, 0.11539413134691549334, - -0.87555382891990551908e-01, - -0.28653248813840907078e-01, + -0.87555382891990551908e-1, + -0.28653248813840907078e-1, 0.14381162220291271447, -0.13090012299192463341, - 0.14865158938054335441e-01, + 0.14865158938054335441e-1, 0.10932267159037299675, -0.10286626165608045436, - -0.97935880831555126302e-02, + -0.97935880831555126302e-2, 0.12124183866673587939, - -0.85662932354049967087e-01, - -0.58712940335700493366e-01, + -0.85662932354049967087e-1, + -0.58712940335700493366e-1, 0.18103987212720509814, -0.13178045747463498771, - -0.24807082198477766605e-01, + -0.24807082198477766605e-1, 0.13218140577382270218, - -0.54870693152015405369e-01, - -0.95351226409583100807e-01, + -0.54870693152015405369e-1, + -0.95351226409583100807e-1, 0.13957180090307649833, - 0.11882611023483535817e-01, + 0.11882611023483535817e-1, -0.17442169815390787257, 0.16211418411163480702, - 0.31086461487842404622e-01, + 0.31086461487842404622e-1, -0.14711912730059148458, - 0.50075900258857101999e-01, + 0.50075900258857101999e-1, 0.13472358632709369175, -0.11605956234823398832, - -0.98493936630772660479e-01, - 0.23917826823167684380, - -0.92416308478260864034e-01, - -0.11179493745827330520, - 0.70958122106552848352e-01, + -0.98493936630772660479e-1, + 0.2391782682316768438, + -0.92416308478260864034e-1, + -0.1117949374582733052, + 0.70958122106552848352e-1, 0.16912137005110366994, -0.19744199154928829265, - -0.59794394366290130882e-01, + -0.59794394366290130882e-1, 0.22533668806621021119, - -0.22893214601229991412e-01, + -0.22893214601229991412e-1, -0.16772274114127144751, - -0.16793250429639097754e-01, + -0.16793250429639097754e-1, 0.28467002831888948977, -0.11872900652642462416, -0.18014826681980303236, - 0.43059231713155017574e-01, + 0.43059231713155017574e-1, 0.26209799161526831091, - -0.48329623352471845488e-01, + -0.48329623352471845488e-1, -0.28204785322804676317, - 0.32207616357344460989e-01, + 0.32207616357344460989e-1, 0.24211462319158141843, 0.15232854831779185645, -0.29269506544534062975, -0.20449841671004342913, - 0.98973760334205782008e-01, - 0.35807881825401577380, + 0.98973760334205782008e-1, + 0.3580788182540157738, 0.15458914422923661358, -0.25268184421512684956, -0.36734335884921487381, -0.24397298091591176905, 0.21439683256268493583, 0.42621275451927714828, - 0.59993004845803266090, + 0.5999300484580326609, 0.45761751641518383371, 0.34921578302621686385, 0.19235358739753199986, - 0.83001128820574088252e-01, - 0.66489135144155858681e-01, - -0.18734430099268103986e-01, - 0.45206262017559013799e-01, - -0.39671807750387491631e-01, - 0.38505377932817781705e-01, - -0.31035526540500235626e-01, - 0.21037147056250385391e-01, - -0.90273203575737363813e-02, - -0.36324723405763616885e-02, - 0.15505495501739617950e-01, - -0.25430700395911453454e-01, - 0.32299365656893994081e-01, - -0.35498916485270030907e-01, - 0.34678094267692430308e-01, - -0.30027120754342297854e-01, - 0.22049609560914357892e-01, - -0.11665428086499958493e-01, - 0.28369706985476278449e-01, - -0.53264399346570311111e-01, - 0.17348305607486742830e-01, - -0.22828209142738810702e-02, - -0.39295123972900754261e-01, - 0.53352757859294303033e-01, - -0.87236860612480163213e-01, - 0.87728083075237064947e-01, + 0.83001128820574088252e-1, + 0.66489135144155858681e-1, + -0.18734430099268103986e-1, + 0.45206262017559013799e-1, + -0.39671807750387491631e-1, + 0.38505377932817781705e-1, + -0.31035526540500235626e-1, + 0.21037147056250385391e-1, + -0.90273203575737363813e-2, + -0.36324723405763616885e-2, + 0.1550549550173961795e-1, + -0.25430700395911453454e-1, + 0.32299365656893994081e-1, + -0.35498916485270030907e-1, + 0.34678094267692430308e-1, + -0.30027120754342297854e-1, + 0.22049609560914357892e-1, + -0.11665428086499958493e-1, + 0.28369706985476278449e-1, + -0.53264399346570311111e-1, + 0.1734830560748674283e-1, + -0.22828209142738810702e-2, + -0.39295123972900754261e-1, + 0.53352757859294303033e-1, + -0.87236860612480163213e-1, + 0.87728083075237064947e-1, -0.10364150730646809473, - 0.83811460130327863904e-01, - -0.79352180839357813746e-01, - 0.41549200511351046250e-01, - -0.23293230728166986615e-01, - -0.21044988257650727725e-01, - 0.43535153010593859169e-01, - -0.68690636127771723118e-01, + 0.83811460130327863904e-1, + -0.79352180839357813746e-1, + 0.4154920051135104625e-1, + -0.23293230728166986615e-1, + -0.21044988257650727725e-1, + 0.43535153010593859169e-1, + -0.68690636127771723118e-1, 0.11633099300993521297, - -0.23148647197768979639e-01, - 0.28311895138420489770, + -0.23148647197768979639e-1, + 0.2831189513842048977, 0.29488727701595202069, 0.72733477944606250709, 0.92516272699761537002, - 0.11294579747686248616e+01, - 0.94918973325642497230, + 0.11294579747686248616e+1, + 0.9491897332564249723, 0.29477261636601315153, -0.35876318832150466687, -0.86562286705741875448, @@ -7702,24 +7704,24 @@ function ESERK4ConstantCache(zprev) -0.46140606716690374389, 0.14844122689066582832, 0.62841583726164551571, - -0.72159738555753388800e-01, - -0.47831791806498230590, + -0.721597385557533888e-1, + -0.4783179180649823059, -0.14208954439610191334, 0.49658396608155630503, 0.16274421284057347115, -0.50349726974727848638, - -0.66338704424694000528e-01, + -0.66338704424694000528e-1, 0.36508993856749566431, 0.15686986460498977825, -0.51416554651553003641, - 0.76892899668045217032e-01, + 0.76892899668045217032e-1, 0.37395177765101716982, -0.12051967563330215349, -0.34184189946652748793, 0.21782175850867560585, 0.28911080165482655469, -0.40104045694667889155, - -0.24453382684365556482e-01, + -0.24453382684365556482e-1, 0.33238353584156032916, -0.10734422698831092013, -0.27889796801726363107, @@ -7729,148 +7731,148 @@ function ESERK4ConstantCache(zprev) 0.18202800490375484199, 0.19588064589972609131, -0.25835437242928149804, - -0.34620374080706090014e-01, + -0.34620374080706090014e-1, 0.26914950807448007053, -0.13278618895339391881, -0.23450892869268405438, 0.41822654815762461133, -0.23671182767062104446, - -0.90866509401354725317e-01, - 0.20320354192823816830, - -0.16470203487246853208e-01, + -0.90866509401354725317e-1, + 0.2032035419282381683, + -0.16470203487246853208e-1, -0.22496919515016261526, 0.21988958817251227917, - 0.50746216823122872186e-01, + 0.50746216823122872186e-1, -0.33475715413539403054, - 0.36277623978847622910, - -0.13054020684872794100, + 0.3627762397884762291, + -0.130540206848727941, -0.13195061891290496559, - 0.18278966448852237980, - -0.12835960096492635488e-01, - -0.18075761595936168380, + 0.1827896644885223798, + -0.12835960096492635488e-1, + -0.1807576159593616838, 0.18082321595213499132, - 0.29113816567791900997e-01, + 0.29113816567791900997e-1, -0.27386648451892225964, 0.33698512263050078852, -0.16813446388845451618, - -0.97642421858689029679e-01, + -0.97642421858689029679e-1, 0.24943842193276760666, -0.19477632816222079093, - 0.10355926512096061409e-01, + 0.10355926512096061409e-1, 0.12097305914464337451, - -0.83985783813898443051e-01, - -0.92528275849067254111e-01, + -0.83985783813898443051e-1, + -0.92528275849067254111e-1, 0.25199673559576374338, -0.25642287723576046021, - 0.81036241413910442555e-01, + 0.81036241413910442555e-1, 0.15483653018089910125, -0.29649427604041178608, 0.25404596312927063551, - -0.77037586228784774023e-01, + -0.77037586228784774023e-1, -0.10447819033950049572, 0.16408319279447122763, - -0.81137319755077930150e-01, - -0.67024525193215445107e-01, + -0.8113731975507793015e-1, + -0.67024525193215445107e-1, 0.15450325371254466922, -0.11360757382220698641, - -0.32489436910259218705e-01, + -0.32489436910259218705e-1, 0.17558819524614585617, -0.21294879819307935276, 0.10410588989261153336, - 0.89593074401016353780e-01, + 0.8959307440101635378e-1, -0.25912269943844701281, 0.30405553227923376447, -0.20607394084931063283, - 0.22697963240905970339e-01, + 0.22697963240905970339e-1, 0.13960327561981616951, -0.20400744501727571811, - 0.15371760961696770420, - -0.47629818014551662808e-01, - -0.34201000310585934205e-01, - 0.30336217859550696635e-01, - 0.53273869490940255200e-01, + 0.1537176096169677042, + -0.47629818014551662808e-1, + -0.34201000310585934205e-1, + 0.30336217859550696635e-1, + 0.532738694909402552e-1, -0.16121095444425173615, 0.21279802002844219744, -0.16344955399920058081, - 0.20647736540460315258e-01, + 0.20647736540460315258e-1, 0.14788161972540478373, -0.26246282523147546062, 0.26330876987041973436, -0.15276753030620657259, - -0.17902118856991500184e-01, + -0.17902118856991500184e-1, 0.16517398195587917886, -0.22620368551339506413, 0.17782133491817381232, - -0.54696000723155092926e-01, - -0.82025157451181010537e-01, + -0.54696000723155092926e-1, + -0.82025157451181010537e-1, 0.16704171904512232771, -0.17224209498938700125, 0.10720033115485977371, - -0.19260224691222196935e-01, - -0.43376843618535568248e-01, - 0.48025246245932372291e-01, - -0.22770993138703592672e-02, - -0.61036863949831640652e-01, - 0.94005072397579214627e-01, - -0.68447756007794846589e-01, - -0.16996583537062480429e-01, + -0.19260224691222196935e-1, + -0.43376843618535568248e-1, + 0.48025246245932372291e-1, + -0.22770993138703592672e-2, + -0.61036863949831640652e-1, + 0.94005072397579214627e-1, + -0.68447756007794846589e-1, + -0.16996583537062480429e-1, 0.12651397465457481228, -0.21191371297001898588, 0.22723844518348940147, -0.15886809577822144646, - 0.25117416832612982081e-01, + 0.25117416832612982081e-1, 0.12273383635679778469, - -0.22929764605322899840, + -0.2292976460532289984, 0.25055066306566298184, -0.17926388340434748492, - 0.40502495655629217053e-01, + 0.40502495655629217053e-1, 0.11163979264945952941, -0.22250736642962679057, - 0.25105633279340239250, + 0.2510563327934023925, -0.19126555331782846281, - 0.66334212947447443454e-01, - 0.75355480244353331698e-01, + 0.66334212947447443454e-1, + 0.75355480244353331698e-1, -0.18549837836842711369, 0.22751214828354349162, -0.19436980084295882309, - 0.10303034508001981950, - 0.85856607694709211748e-02, + 0.1030303450800198195, + 0.85856607694709211748e-2, -0.10231961690566671042, 0.14832619812451469654, -0.13941598018503922884, - 0.86112091634102203019e-01, - -0.14982801871029082647e-01, - -0.47417977373104089334e-01, - 0.80034183322444094055e-01, - -0.78132091599239159030e-01, - 0.48703927288702951459e-01, - -0.95785623655194520459e-02, - -0.22705420483264807108e-01, - 0.35917689547874546985e-01, - -0.29629812014462932751e-01, - 0.10588571221982227485e-01, - 0.82725329640415748433e-02, - -0.17138065831027480407e-01, - 0.10837916078621449151e-01, - 0.64823678913211134345e-02, - -0.26147546543213242426e-01, - 0.36755154921650989852e-01, - -0.31711242051316888835e-01, - 0.10310194933935082004e-01, - 0.19710665043937290047e-01, - -0.46939268558907870643e-01, - 0.59270057986509749881e-01, - -0.50417808173701450514e-01, - 0.21419080506647484446e-01, - 0.18205498117608017589e-01, - -0.54812840506767004922e-01, - 0.74806804675653745806e-01, - -0.70474916629457429185e-01, - 0.42444246373535915451e-01, + 0.86112091634102203019e-1, + -0.14982801871029082647e-1, + -0.47417977373104089334e-1, + 0.80034183322444094055e-1, + -0.7813209159923915903e-1, + 0.48703927288702951459e-1, + -0.95785623655194520459e-2, + -0.22705420483264807108e-1, + 0.35917689547874546985e-1, + -0.29629812014462932751e-1, + 0.10588571221982227485e-1, + 0.82725329640415748433e-2, + -0.17138065831027480407e-1, + 0.10837916078621449151e-1, + 0.64823678913211134345e-2, + -0.26147546543213242426e-1, + 0.36755154921650989852e-1, + -0.31711242051316888835e-1, + 0.10310194933935082004e-1, + 0.19710665043937290047e-1, + -0.46939268558907870643e-1, + 0.59270057986509749881e-1, + -0.50417808173701450514e-1, + 0.21419080506647484446e-1, + 0.18205498117608017589e-1, + -0.54812840506767004922e-1, + 0.74806804675653745806e-1, + -0.70474916629457429185e-1, + 0.42444246373535915451e-1, 0.22170700758627553961, -0.44990990909586736635, 0.26906169883844116564, - -0.68036427697527018799e-01, + -0.68036427697527018799e-1, -0.20267454158390166286, 0.34620425969158064028, -0.42871188628381001751, @@ -7879,14 +7881,14 @@ function ESERK4ConstantCache(zprev) -0.12277683385625350054, 0.29579065988448399738, -0.42213775508873291331, - 0.34476673697422877130, + 0.3447667369742287713, -0.19625379443187956907, - -0.87541487117571953336e-01, + -0.87541487117571953336e-1, 0.30175102221444788375, -0.48389344812443102484, 0.45920017911318722348, -0.34325726986490079362, - 0.62187928530564880181e-01, + 0.62187928530564880181e-1, 0.17951578442524004919, -0.41013173415392095711, 0.44070577277482103629, @@ -7896,48 +7898,48 @@ function ESERK4ConstantCache(zprev) -0.34498385849154972194, 0.38693345637602660769, -0.32855818147853599331, - 0.82419254974115202517e-01, - 0.14958397395666961360, + 0.82419254974115202517e-1, + 0.1495839739566696136, -0.38753837133313934205, 0.43117956343773644612, -0.37187416356898389536, 0.12426136132067350237, 0.10659132727107183125, -0.33870564379508472097, - 0.37456677531426718630, + 0.3745667753142671863, -0.31283324443321269825, - 0.78274965107287861055e-01, + 0.78274965107287861055e-1, 0.11710795519422245725, -0.29212514874658340736, 0.26137062154407703085, -0.14383364041661111932, - -0.11348699882099250180, + -0.1134869988209925018, 0.28510033102744974931, -0.39211771388641808445, 0.27000054443931587045, - -0.70004347489698096063e-01, + -0.70004347489698096063e-1, -0.22913134275974259002, 0.38586689792176737113, -0.42910689903364124254, 0.22554233548424859612, - 0.32253560569050557238e-01, + 0.32253560569050557238e-1, -0.33218587477406996689, 0.42514326865247936693, -0.36354584427326469553, - 0.60681459120820346875e-01, + 0.60681459120820346875e-1, 0.24337997813503184363, -0.51139822347591201712, 0.50719748019205079803, -0.32991923515107357545, - -0.47691357461994779432e-01, + -0.47691357461994779432e-1, 0.34524985249274742216, -0.52771580868459588842, 0.40796222904055812197, -0.15806940103838054701, -0.19012718083847035544, - 0.34776755171584411430, + 0.3477675517158441143, -0.33351537492425264997, - 0.55817408433019265190e-01, + 0.5581740843301926519e-1, 0.22431501621116173295, -0.44241574375832470878, 0.35934740025754186021, @@ -7951,19 +7953,19 @@ function ESERK4ConstantCache(zprev) 0.46988391643423038646, -0.20078473766776411269, -0.24745300835513292514, - 0.50866405799761249540, + 0.5086640579976124954, -0.52355689550608797145, 0.18149162214095476697, 0.20638542283108909925, -0.49426799072616406372, 0.39939431335880998253, - -0.84911115879330048561e-01, + -0.84911115879330048561e-1, -0.33130205458100348004, 0.45723998584584818472, -0.28305144867400727771, -0.19097361242128793601, 0.55164160250723937029, - -0.63833242432135828270, + -0.6383324243213582827, 0.27169336100321367367, 0.22030986694260851211, -0.60609435277488299398, @@ -7971,11 +7973,11 @@ function ESERK4ConstantCache(zprev) -0.14426270926392933958, -0.34488271447711338347, 0.46880838157438248226, - -0.21705289344021580500, + -0.217052893440215805, -0.31515419914404951829, 0.60816415005634594237, -0.49632675536001025218, - -0.61566474223606122707e-01, + -0.61566474223606122707e-1, 0.55260789531380616335, -0.68068165958334592158, 0.24168046098608406136, @@ -7988,13 +7990,13 @@ function ESERK4ConstantCache(zprev) 0.16058535978660140597, -0.68062501388281171355, 0.54121976159221285574, - 0.65949047932352400370e-01, - -0.67116330328126672100, + 0.6594904793235240037e-1, + -0.671163303281266721, 0.59912218474651746103, - 0.11523512753313595175e-01, + 0.11523512753313595175e-1, -0.65512510750379449043, 0.58991848253499157284, - 0.48655890107459465188e-01, + 0.48655890107459465188e-1, -0.68537453248528135141, 0.53487906904093074356, 0.20237063473720556805, @@ -8005,7 +8007,7 @@ function ESERK4ConstantCache(zprev) 0.35166196780291619772, 0.49213423390994415207, -0.77068464791282698112, - -0.26384510773138619005e-02, + -0.26384510773138619005e-2, 0.84704428889092220345, -0.77657805980863225948, -0.24128690452149068046, @@ -8013,115 +8015,115 @@ function ESERK4ConstantCache(zprev) -0.26837660931711548873, -0.76984099696725316608, 0.72351162052189377238, - 0.37251026093914768600, - -0.10877888122491918832e+01, + 0.372510260939147686, + -0.10877888122491918832e+1, 0.28685185886085340368, 0.79899568722627001272, -0.55742961742847985107, -0.76669992278425613819, 0.97547631866999495731, 0.32947094237748203449, - -0.11448256910527827568e+01, - 0.30497871340851487841e-02, - 0.10621656330580213634e+01, + -0.11448256910527827568e+1, + 0.30497871340851487841e-2, + 0.10621656330580213634e+1, -0.10941236888174374342, - -0.13094914596611328950e+01, + -0.1309491459661132895e+1, 0.43553774046351739768, - 0.11272350414067677793e+01, - -0.34997726411438007110, - -0.13339713543531519502e+01, + 0.11272350414067677793e+1, + -0.3499772641143800711, + -0.13339713543531519502e+1, 0.25281904895626772234, - 0.14534347560065070670e+01, - -0.75634708722876475839e-01, - -0.14185376228999859727e+01, + 0.1453434756006507067e+1, + -0.75634708722876475839e-1, + -0.14185376228999859727e+1, -0.67224106932379557033, - 0.14259831136309744082e+01, - 0.12028969654275618595e+01, - -0.60377173167034392520, - -0.18798501399971860870e+01, + 0.14259831136309744082e+1, + 0.12028969654275618595e+1, + -0.6037717316703439252, + -0.1879850139997186087e+1, -0.80522039082030449908, - 0.12811008934403309567e+01, - 0.20648330109748074257e+01, - 0.11681538796417076931e+01, + 0.12811008934403309567e+1, + 0.20648330109748074257e+1, + 0.11681538796417076931e+1, -0.99849584888498266189, - -0.24141439590133644266e+01, - -0.30784385239613758500e+01, - -0.25291879931924676761e+01, - -0.18162164788367136659e+01, - -0.10255235138436646913e+01, + -0.24141439590133644266e+1, + -0.307843852396137585e+1, + -0.25291879931924676761e+1, + -0.18162164788367136659e+1, + -0.10255235138436646913e+1, -0.48947886259385153807, -0.26703283313791065234, - -0.19043374801970228138e-01, + -0.19043374801970228138e-1, -0.10373851266315631259, - 0.70012178831407909096e-01, - -0.74312640392270923329e-01, - 0.57887183807103018141e-01, - -0.38461338071051343057e-01, - 0.14643638588107651607e-01, - 0.10395965890105392238e-01, - -0.33813723071120758978e-01, - 0.53350734194313430281e-01, - -0.66731798561500035860e-01, - 0.72792837180831515553e-01, - -0.70786318723999097635e-01, - 0.61134487572283201240e-01, - -0.44815263691894993703e-01, - 0.23691108807884515147e-01, - -0.36637133608117142258e-01, - 0.62666065685787086803e-01, - -0.10455770066929690604e-01, - -0.87091063041608799550e-02, - 0.61469344305943619811e-01, - -0.73063668723008595718e-01, + 0.70012178831407909096e-1, + -0.74312640392270923329e-1, + 0.57887183807103018141e-1, + -0.38461338071051343057e-1, + 0.14643638588107651607e-1, + 0.10395965890105392238e-1, + -0.33813723071120758978e-1, + 0.53350734194313430281e-1, + -0.6673179856150003586e-1, + 0.72792837180831515553e-1, + -0.70786318723999097635e-1, + 0.6113448757228320124e-1, + -0.44815263691894993703e-1, + 0.23691108807884515147e-1, + -0.36637133608117142258e-1, + 0.62666065685787086803e-1, + -0.10455770066929690604e-1, + -0.8709106304160879955e-2, + 0.61469344305943619811e-1, + -0.73063668723008595718e-1, 0.11081667179152418501, - -0.10164160169471134210, + -0.1016416016947113421, 0.11510555181775132538, - -0.80942145502972406845e-01, - 0.71530979237909256274e-01, - -0.19446946714571831938e-01, - -0.12415569895699585246e-02, - 0.54574045553442515621e-01, - -0.73922369767587384204e-01, - 0.95879899630696110990e-01, - -0.14479831357573011430, - 0.72342113473081171016e-02, + -0.80942145502972406845e-1, + 0.71530979237909256274e-1, + -0.19446946714571831938e-1, + -0.12415569895699585246e-2, + 0.54574045553442515621e-1, + -0.73922369767587384204e-1, + 0.9587989963069611099e-1, + -0.1447983135757301143, + 0.72342113473081171016e-2, -0.33997513513084076653, -0.44093441713555525663, -0.91334671380732668222, - -0.12934160909480101331e+01, - -0.14451916649411467031e+01, - -0.13217364750386593197e+01, + -0.12934160909480101331e+1, + -0.14451916649411467031e+1, + -0.13217364750386593197e+1, -0.34357087234329136693, 0.43991130917866594352, - 0.11811655122201123458e+01, + 0.11811655122201123458e+1, 0.53953129226393914397, - -0.32862265976879856400, + -0.328622659768798564, -0.94329899508269587916, -0.33674183484683212209, 0.70467235154954255272, - 0.58714773716350887600, + 0.587147737163508876, -0.16930461917339409417, -0.86282892368711994191, - 0.11663667748795837620, + 0.1166366774879583762, 0.62468526226101761534, 0.19601374182914171884, -0.66118312423625136276, -0.22279486311615084859, - 0.68140034374296420960, - 0.77904616293375583691e-01, + 0.6814003437429642096, + 0.77904616293375583691e-1, -0.47709008345271286533, -0.21407738732303135953, 0.68475656952785102227, - -0.93024087871587821108e-01, + -0.93024087871587821108e-1, -0.51640707175640776505, 0.18812725793827786425, 0.42089166052376503213, -0.24851941899871160535, -0.43068263339021300995, 0.58150831083720311288, - -0.11272374120177546669e-01, + -0.11272374120177546669e-1, -0.40421201648844007348, - 0.11328652077040166080, + 0.1132865207704016608, 0.39134365008699112387, -0.33457383349694475028, -0.22414836941696519856, @@ -8137,181 +8139,181 @@ function ESERK4ConstantCache(zprev) 0.28172382478773483339, 0.14442986941515095767, -0.28195234127989660111, - 0.22111113984333855692e-01, + 0.22111113984333855692e-1, 0.31071403774624212213, -0.31206665003429318039, - -0.41745974149179639057e-01, + -0.41745974149179639057e-1, 0.41691253530229960278, -0.45221737979343196168, 0.14396011949078707515, 0.20360716348282437149, -0.26632661820210007386, - 0.34647289833746520993e-01, + 0.34647289833746520993e-1, 0.22998400953173059325, -0.23535457612325907939, - -0.39056730122914593006e-01, + -0.39056730122914593006e-1, 0.36213532367088735464, -0.44363282059475706021, 0.21857124608247127662, 0.13494139858887632677, -0.33393473140328966409, 0.25734193793490434121, - -0.59756417392648258566e-02, + -0.59756417392648258566e-2, -0.17395655053410677415, 0.13012003564535923328, 0.10150273871766797573, -0.31081887384320250334, 0.31604985800835483367, - -0.82643989059759004334e-01, + -0.82643989059759004334e-1, -0.22839871639880268694, 0.41262174984469246475, -0.34863776237092020116, - 0.10460345487759178940, + 0.1046034548775917894, 0.14729728629022353914, -0.23622428463969741275, 0.13569718226411103812, - 0.53480910253497077056e-01, + 0.53480910253497077056e-1, -0.16240996776735014406, 0.10299539223767606444, - 0.95061833033070100574e-01, + 0.95061833033070100574e-1, -0.28563036745333347799, 0.33319632423122791387, -0.18231156549392132926, - -0.83446063380320664726e-01, + -0.83446063380320664726e-1, 0.31984523763562722198, -0.39094868514942482385, 0.27320515840085768389, - -0.41148374830713589645e-01, + -0.41148374830713589645e-1, -0.16250363042793605772, 0.23744247578514479646, -0.16045949584762503326, - 0.12007156810899130561e-01, + 0.12007156810899130561e-1, 0.10218193726632626706, - -0.98577114067504495454e-01, - -0.13603768167985334434e-01, + -0.98577114067504495454e-1, + -0.13603768167985334434e-1, 0.16172483341196938755, -0.23664909981818893492, 0.17985853265478879415, - 0.45518905325110827062e-03, + 0.45518905325110827062e-3, -0.21329089994545127884, 0.35429577686767671496, -0.34314726005785056717, 0.18481188585714194983, - 0.53018871227974259663e-01, + 0.53018871227974259663e-1, -0.25731753325298273305, 0.34510592784303206759, -0.28409857455012077487, 0.12155873818144194431, - 0.62076811529559579317e-01, + 0.62076811529559579317e-1, -0.17847775414782640624, 0.19098311574989590422, -0.11092457799933344575, - 0.20537600607028806167e-02, - 0.72871138504511892564e-01, - -0.69732510235465366977e-01, - 0.13099907008154101787e-03, - 0.92712958171967702059e-01, + 0.20537600607028806167e-2, + 0.72871138504511892564e-1, + -0.69732510235465366977e-1, + 0.13099907008154101787e-3, + 0.92712958171967702059e-1, -0.14357063971109185196, 0.11552528298961778352, - -0.56138283340772488980e-02, + -0.5613828334077248898e-2, -0.13760594398094219692, - 0.25080353817987938170, + 0.2508035381798793817, -0.27174440214283906991, 0.18298678598608558721, - -0.78775228014505982443e-02, + -0.78775228014505982443e-2, -0.18464422936640953465, 0.32185039212454891189, -0.34455693544793075667, 0.24422258845761815604, - -0.53788110710791869895e-01, + -0.53788110710791869895e-1, -0.15361662631352643316, 0.30564801799903018598, -0.34671399770061511747, 0.26939945862852621161, -0.10392427347122047687, - -0.84504903934795150278e-01, + -0.84504903934795150278e-1, 0.23205173374401594222, -0.28918381857525099488, 0.24699562434480323847, -0.12732668244182523964, - -0.18858633073250561513e-01, + -0.18858633073250561513e-1, 0.14142352313042744205, -0.20018498540402387964, 0.18622613852860611661, -0.11316864717790267592, - 0.17007740358457999752e-01, - 0.67296759327682809104e-01, + 0.17007740358457999752e-1, + 0.67296759327682809104e-1, -0.11120374356232770596, 0.10887990171348793655, - -0.69274284630577942501e-01, - 0.16650490954325861820e-01, - 0.27246624515773820024e-01, - -0.45633460930410076062e-01, - 0.38208214450458320710e-01, - -0.13534896624887616731e-01, - -0.10882653329769800821e-01, - 0.22321524637576698608e-01, - -0.13622381757706105571e-01, - -0.94008732719514619125e-02, - 0.35457387456138876602e-01, - -0.49132038579293595137e-01, - 0.41909937149108483778e-01, - -0.12698496673663694362e-01, - -0.27926450198044249634e-01, - 0.64861499864181271224e-01, - -0.81745938824111949450e-01, - 0.70294040435841503855e-01, - -0.31725968455575209726e-01, - -0.21172694140807732377e-01, - 0.70304751970411305528e-01, - -0.97448820819886899924e-01, - 0.92347515650799780196e-01, - -0.55748063151292229223e-01, + -0.69274284630577942501e-1, + 0.1665049095432586182e-1, + 0.27246624515773820024e-1, + -0.45633460930410076062e-1, + 0.3820821445045832071e-1, + -0.13534896624887616731e-1, + -0.10882653329769800821e-1, + 0.22321524637576698608e-1, + -0.13622381757706105571e-1, + -0.94008732719514619125e-2, + 0.35457387456138876602e-1, + -0.49132038579293595137e-1, + 0.41909937149108483778e-1, + -0.12698496673663694362e-1, + -0.27926450198044249634e-1, + 0.64861499864181271224e-1, + -0.8174593882411194945e-1, + 0.70294040435841503855e-1, + -0.31725968455575209726e-1, + -0.21172694140807732377e-1, + 0.70304751970411305528e-1, + -0.97448820819886899924e-1, + 0.92347515650799780196e-1, + -0.55748063151292229223e-1, -0.15808138811173549909, 0.35161985991170108257, -0.21583036464151814093, - 0.68148634328703189267e-01, + 0.68148634328703189267e-1, 0.16210685912005712295, -0.28294015388017068613, 0.37087111034034991874, -0.27827463141869285268, 0.15070687223338410932, - 0.87357493098844288260e-01, + 0.8735749309884428826e-1, -0.23991068429028583608, 0.37102123935385278308, -0.31815491572239107398, - 0.21342258002274253070, - 0.24762100140206726867e-01, + 0.2134225800227425307, + 0.24762100140206726867e-1, -0.19869509840192411954, - 0.36275438364908885180, + 0.3627543836490888518, -0.34205504436087313946, 0.25707672929161495823, - -0.20884246904724932531e-01, + -0.20884246904724932531e-1, -0.16767263511826246969, 0.35501611295199697604, -0.35650519702584421156, 0.28385571921989227739, - -0.47162251475284466817e-01, + -0.47162251475284466817e-1, -0.15247391753351186017, - 0.35422237246822313450, + 0.3542223724682231345, -0.36624339078364814837, 0.29528809685099965954, - -0.52341222141850184124e-01, - -0.15675356954685831790, + -0.52341222141850184124e-1, + -0.1567535695468583179, 0.36393122758824358876, - -0.37301658476338472870, + -0.3730165847633847287, 0.29072682723151571649, - -0.34188308997124362831e-01, + -0.34188308997124362831e-1, -0.18258852275975220869, 0.38436833609621057217, - -0.37457491771975265360, + -0.3745749177197526536, 0.26641290669980238759, - 0.10341376538304733468e-01, - -0.22995223251626537020, + 0.10341376538304733468e-1, + -0.2299522325162653702, 0.41135272216294971326, -0.36372428073086177092, 0.21537283393277481536, - 0.84030870641457436343e-01, + 0.84030870641457436343e-1, -0.29480510698462164543, 0.43451334287963494507, -0.32782101984253103621, @@ -8320,7 +8322,7 @@ function ESERK4ConstantCache(zprev) -0.36562849482213766183, 0.43542120352485441659, -0.24998300680260221451, - 0.85972399861796756915e-03, + 0.85972399861796756915e-3, 0.30716398855516990896, -0.41916988008897215767, 0.38766019681214608505, @@ -8329,15 +8331,15 @@ function ESERK4ConstantCache(zprev) 0.41997586185266372327, -0.41835954526080948446, 0.26287154732385675793, - 0.81184711393672517876e-01, + 0.81184711393672517876e-1, -0.33494931559146756683, 0.47542125068100371532, -0.31888647076570708627, - 0.48065502438972854127e-01, + 0.48065502438972854127e-1, 0.30587608672040561553, -0.44953269446550037092, 0.40880596476851172039, - -0.93530638137187011028e-01, + -0.93530638137187011028e-1, -0.22415216642962573768, 0.47700115485178923302, -0.41627203708109916658, @@ -8354,28 +8356,28 @@ function ESERK4ConstantCache(zprev) -0.47784326015818018307, 0.47604675473132507246, -0.12314375344205640006, - -0.26273884522109247630, + -0.2627388452210924763, 0.53825576294644728037, -0.41831490163213252975, - 0.73123256648452719664e-01, + 0.73123256648452719664e-1, 0.37786714585832958946, -0.53336780664421534759, 0.38158315838226825045, - 0.84693888946099221693e-01, + 0.84693888946099221693e-1, -0.45084456781698539762, 0.55916233731634001902, -0.22413249066956411615, -0.22767231571887591723, 0.57373226737266969089, -0.45750833249229383437, - 0.50148050602627960992e-01, + 0.50148050602627960992e-1, 0.45248057810701181047, -0.57374369486217946523, 0.30724082705354671674, 0.25192770610144260557, - -0.57665242278574535550, + -0.5766524227857453555, 0.49922011166085278333, - 0.29486374718561015468e-01, + 0.29486374718561015468e-1, -0.49758123642405105436, 0.61434063970830121715, -0.17342078031496416246, @@ -8388,14 +8390,14 @@ function ESERK4ConstantCache(zprev) -0.13824535182252362109, 0.66301425233121247249, -0.53198685423330771549, - -0.63172793878184335670e-01, + -0.6317279387818433567e-1, 0.65828069700981650669, -0.57833681271457137996, - -0.33425010457800115315e-01, + -0.33425010457800115315e-1, 0.67280437800600567666, -0.59592145094786386217, - -0.57833837207527376278e-01, - 0.71301279049946653110, + -0.57833837207527376278e-1, + 0.7130127904994665311, -0.57877801546025520185, -0.14533109869302532347, 0.77327283082956499438, @@ -8405,12 +8407,12 @@ function ESERK4ConstantCache(zprev) -0.35177489450382348757, -0.52030045971355209922, 0.82680349035091393883, - -0.75187003136627128530e-01, + -0.7518700313662712853e-1, -0.75508376484333450396, 0.68229666757219098461, 0.32713559444689338518, -0.89490490233446218227, - 0.30544710249855772100, + 0.305447102498557721, 0.76753540877403969578, -0.75639422370112630034, -0.30665356969758184036, @@ -8421,293 +8423,293 @@ function ESERK4ConstantCache(zprev) 0.69020746396054344363, -0.92938005371392817811, -0.33903869323415142256, - 0.11175520491220161112e+01, - 0.58472287136645643979e-01, - -0.11499323878099738661e+01, + 0.11175520491220161112e+1, + 0.58472287136645643979e-1, + -0.11499323878099738661e+1, 0.21380398417373458475, - 0.12012643313314756988e+01, + 0.12012643313314756988e+1, -0.33522631724052542879, - -0.12076917109135669737e+01, + -0.12076917109135669737e+1, 0.40237534277849246189, - 0.13156817141657444203e+01, + 0.13156817141657444203e+1, -0.26948031513160369821, - -0.14038313594192910472e+01, - -0.76756347246919405438e-04, - 0.15118113156182448886e+01, + -0.14038313594192910472e+1, + -0.76756347246919405438e-4, + 0.15118113156182448886e+1, 0.57279129491365288196, - -0.13311266527467906506e+01, - -0.12821868053519389630e+01, - 0.65952498660172098610, - 0.18536903989473954013e+01, + -0.13311266527467906506e+1, + -0.1282186805351938963e+1, + 0.6595249866017209861, + 0.18536903989473954013e+1, 0.80010468359797004556, - -0.12456828398725283691e+01, - -0.21253980033118113901e+01, - -0.10894251246391259969e+01, + -0.12456828398725283691e+1, + -0.21253980033118113901e+1, + -0.10894251246391259969e+1, 0.91117846613490305341, - 0.25005512651253738454e+01, - 0.30027917225107758625e+01, - 0.25863733621705251586e+01, - 0.17836154966344608397e+01, - 0.10309037598023147453e+01, + 0.25005512651253738454e+1, + 0.30027917225107758625e+1, + 0.25863733621705251586e+1, + 0.17836154966344608397e+1, + 0.10309037598023147453e+1, 0.51151173329461041561, 0.22095514968958859803, - 0.83806220359111852081e-01, - 0.28053583851759270745e-01, - 0.83100546627453714815e-02, - 0.21800455108916799024e-02, - 0.50607003182255875986e-03, - 0.10370758822076280362e-03, - 0.18687519726090166654e-04, - 0.29441396913748078328e-05, - 0.40239048831402609845e-06, - 0.47215792897576293867e-07, - 0.46903220183207893327e-08, - 0.38701018668045426273e-09, + 0.83806220359111852081e-1, + 0.28053583851759270745e-1, + 0.83100546627453714815e-2, + 0.21800455108916799024e-2, + 0.50607003182255875986e-3, + 0.10370758822076280362e-3, + 0.18687519726090166654e-4, + 0.29441396913748078328e-5, + 0.40239048831402609845e-6, + 0.47215792897576293867e-7, + 0.46903220183207893327e-8, + 0.38701018668045426273e-9, 0.25824193159045504188e-10, 0.13395016425071959023e-11, 0.50693140829289987958e-13, - 0.12455314367651110690e-14, + 0.1245531436765111069e-14, 0.14915771300255592861e-16, - -0.84763333218270831698e-02, - 0.15284808723217312848e-01, - -0.13609370141272395666e-01, - 0.97050999207225589760e-02, - -0.74857616533918740903e-02, - 0.45343498471286857940e-02, - -0.39193676048807565837e-02, - 0.21870353718285891198e-02, - -0.17291528564004189725e-02, - -0.86438084119778622015e-03, - 0.24626909125993164465e-02, - -0.54517874237773782456e-02, - 0.59851033770390712693e-02, - -0.65061910532213549849e-02, - 0.40704695470622845321e-02, - -0.24686587165372538867e-02, - -0.15264543540758948570e-03, - -0.17746407954137433517e-03, - 0.63017507911473078820e-03, - -0.34011437122686417715e-02, - 0.39386883036884130435e-02, - -0.37349193357645361392e-02, - -0.86087986246361489825e-03, - 0.60183886795126652694e-02, - -0.12567495950122263559e-01, - 0.14751352804589716594e-01, - -0.13529507274613477436e-01, - 0.56542390575450383189e-02, - 0.38361114842181322920e-02, - -0.14252926501553842692e-01, - 0.18666188847759456609e-01, - -0.17726037485023837109e-01, - 0.88660352010213380053e-02, - 0.15530286083638299328e-02, - -0.11558977164418700670e-01, - 0.13668084923750635495e-01, - -0.90567948060971455865e-02, - -0.34272683303010914070e-02, - 0.15794888200403086470e-01, - -0.25064166232571377657e-01, - 0.23922817758331802601e-01, - -0.14867097749336437643e-01, - -0.14420620653252979367e-02, - 0.15675384028992541546e-01, - -0.24745471528132181871e-01, - 0.22573777270009611623e-01, - -0.13548980578641216937e-01, - -0.26943847235979742627e-03, - 0.96484935237016386522e-02, - -0.13321203146366781753e-01, - 0.79640158118784200314e-02, - -0.16242092215350335837e-03, - -0.78003978843183717148e-02, - 0.89313796010716053897e-02, - -0.58027878202862618814e-02, - -0.13815662867850844828e-02, - 0.48167158158233698562e-02, - -0.42408374016014542540e-02, - -0.28779726220250507335e-02, - 0.93421043439266601011e-02, - -0.12743689355900002930e-01, - 0.69123960517802462283e-02, - 0.36401173222306722720e-02, - -0.16124581753250568500e-01, - 0.20568363261819769955e-01, - -0.16095007468957912150e-01, - 0.16160432364566430612e-02, - 0.12723187269868282620e-01, - -0.21467228853129613486e-01, - 0.16774780560921180583e-01, - -0.35130121659659547736e-02, - -0.13715620172889554651e-01, - 0.23035499759198930364e-01, - -0.22734629749291579426e-01, - 0.12024933279017980398e-01, - -0.14002509528240258616e-02, - -0.46160596569515422588e-02, - 0.68787333891517530790e-03, - 0.56305292683492338957e-02, - -0.92534658180493025575e-02, - 0.16610185764769833366e-02, - 0.12409164086267165591e-01, - -0.27455989660635223698e-01, - 0.30806679945610971477e-01, - -0.21738112366021220684e-01, - 0.27449634795267386332e-02, - 0.11675405325931380654e-01, - -0.15006823408302614672e-01, - 0.36370162648136131721e-02, - 0.10450074822534722793e-01, - -0.18299289631311006776e-01, - 0.11054301450473050239e-01, - 0.33700240434461842601e-02, - -0.16151433542122606984e-01, - 0.15149054542144163235e-01, - -0.47853350345496790258e-02, - -0.66877657775473702689e-02, - 0.44073488102733746063e-02, - 0.10515405150163650849e-01, - -0.30313107771858586320e-01, - 0.36701177669454396191e-01, - -0.25783156087235872822e-01, - 0.25437340455511793340e-02, - 0.13240261052873106631e-01, - -0.13302589222956099843e-01, - -0.11706990513580255598e-02, - 0.11300139831001211263e-01, - -0.75338737140969629438e-02, - -0.97636250876196786080e-02, - 0.20472724700627876332e-01, - -0.12917541959969977908e-01, - -0.12939502525257695273e-01, - 0.34606653856929264768e-01, - -0.37048203078761561546e-01, - 0.18545889213218199471e-01, - -0.20812663381411583216e-02, - 0.31878255580701955578e-02, - -0.22205041259587585817e-01, - 0.34196267012581174627e-01, - -0.24455481421694822558e-01, - -0.28161022685298420405e-02, - 0.18295356544768021090e-01, - -0.79499421294247259173e-02, - -0.18756481965490373609e-01, - 0.29332576709977117857e-01, - -0.13931390027494537989e-01, - -0.10469454474329512733e-01, - 0.10825507140341228060e-01, - 0.12678168343374618746e-01, - -0.32766158196516896595e-01, - 0.19477528487964888143e-01, - 0.12095204912575367728e-01, - -0.26441231471183847951e-01, - 0.49431940142692842519e-02, - 0.19412631720317902184e-01, - -0.12608711509889838562e-01, - -0.20330795372684146161e-01, - 0.31192366920694703653e-01, - -0.40615507636322231363e-02, - -0.25735729001795843579e-01, - 0.12259487068809769850e-01, - 0.23556548149309918666e-01, - -0.29024740234999020505e-01, - -0.63933676289135215817e-02, - 0.22523114285715895716e-01, - 0.98272536257848330105e-02, - -0.43048447942944004230e-01, - 0.19471207666498038108e-01, - 0.21072848847527785726e-01, - -0.10877717915127357862e-01, - -0.30809152367663246441e-01, - 0.18212757898968083559e-01, - 0.35397486909116607223e-01, - -0.38508504804406526456e-01, - -0.11306927148925781032e-01, - 0.69471439506960091376e-02, - 0.47828797911245730934e-01, - -0.38867064499584012827e-01, - -0.25381050388086627556e-01, - 0.11049790759939752058e-01, - 0.40877614849391452623e-01, - 0.32183395683785063351e-02, - -0.57394204061526808702e-01, - -0.42391122393791828837e-02, - 0.22282433215677969335e-01, - 0.57438451518726590939e-01, - -0.23144666057715423957e-01, - -0.45273973788468972745e-01, - -0.41383108549206869264e-01, - 0.23446530219191016181e-01, - 0.62918886470492332852e-01, - 0.47597402937538120515e-01, - -0.12614887949288406972e-02, - -0.55290828123572277608e-01, - -0.91555568539731638222e-01, - -0.76342229587037124805e-01, - -0.82201805067725189358e-01, - -0.25919281695509714669e-01, - -0.45931207997798435827e-01, - 0.90746180098731608898e-02, - -0.25269654482185006233e-01, - 0.14020722894924160171e-01, - -0.11426761534720022290e-01, - 0.38533871918399777157e-02, - 0.28451291314591331365e-02, - -0.94892273425009332488e-02, - 0.14858688629907865555e-01, - -0.18459793120308261999e-01, - 0.19927596363099004534e-01, - -0.19175308706756433175e-01, - 0.16441378275090238331e-01, - -0.12181751156793032762e-01, - 0.70710908910824226206e-02, - -0.18398820016304207742e-02, - -0.27722691390532688480e-02, - 0.61721329754366241471e-02, - -0.79504406340271584902e-02, - 0.79739165565084653420e-02, - -0.63687966406718345136e-02, - 0.35213463511609851241e-02, - -0.92859208842458774991e-02, - 0.18895739087340417822e-01, - -0.71498303945016468755e-02, - 0.51891524547139225923e-02, - 0.63280075118461428033e-02, - -0.55496460875896847301e-02, - 0.12239123597882720085e-01, - -0.53384680871836169558e-02, - 0.56388957757374852039e-02, - 0.68100838450276136166e-02, - -0.10230116004152314813e-01, - 0.23861302803622391755e-01, - -0.25635132251325739444e-01, - 0.34956535694780049850e-01, - -0.30428441876519881498e-01, - 0.32255601511362967659e-01, - -0.20961370329744231922e-01, - 0.15172519918726911151e-01, - -0.55905012053931888924e-02, - -0.16395537740755142947e-01, - -0.15620452340105924274e-01, - -0.91311887672188368770e-01, + -0.84763333218270831698e-2, + 0.15284808723217312848e-1, + -0.13609370141272395666e-1, + 0.9705099920722558976e-2, + -0.74857616533918740903e-2, + 0.4534349847128685794e-2, + -0.39193676048807565837e-2, + 0.21870353718285891198e-2, + -0.17291528564004189725e-2, + -0.86438084119778622015e-3, + 0.24626909125993164465e-2, + -0.54517874237773782456e-2, + 0.59851033770390712693e-2, + -0.65061910532213549849e-2, + 0.40704695470622845321e-2, + -0.24686587165372538867e-2, + -0.1526454354075894857e-3, + -0.17746407954137433517e-3, + 0.6301750791147307882e-3, + -0.34011437122686417715e-2, + 0.39386883036884130435e-2, + -0.37349193357645361392e-2, + -0.86087986246361489825e-3, + 0.60183886795126652694e-2, + -0.12567495950122263559e-1, + 0.14751352804589716594e-1, + -0.13529507274613477436e-1, + 0.56542390575450383189e-2, + 0.3836111484218132292e-2, + -0.14252926501553842692e-1, + 0.18666188847759456609e-1, + -0.17726037485023837109e-1, + 0.88660352010213380053e-2, + 0.15530286083638299328e-2, + -0.1155897716441870067e-1, + 0.13668084923750635495e-1, + -0.90567948060971455865e-2, + -0.3427268330301091407e-2, + 0.1579488820040308647e-1, + -0.25064166232571377657e-1, + 0.23922817758331802601e-1, + -0.14867097749336437643e-1, + -0.14420620653252979367e-2, + 0.15675384028992541546e-1, + -0.24745471528132181871e-1, + 0.22573777270009611623e-1, + -0.13548980578641216937e-1, + -0.26943847235979742627e-3, + 0.96484935237016386522e-2, + -0.13321203146366781753e-1, + 0.79640158118784200314e-2, + -0.16242092215350335837e-3, + -0.78003978843183717148e-2, + 0.89313796010716053897e-2, + -0.58027878202862618814e-2, + -0.13815662867850844828e-2, + 0.48167158158233698562e-2, + -0.4240837401601454254e-2, + -0.28779726220250507335e-2, + 0.93421043439266601011e-2, + -0.1274368935590000293e-1, + 0.69123960517802462283e-2, + 0.3640117322230672272e-2, + -0.161245817532505685e-1, + 0.20568363261819769955e-1, + -0.1609500746895791215e-1, + 0.16160432364566430612e-2, + 0.1272318726986828262e-1, + -0.21467228853129613486e-1, + 0.16774780560921180583e-1, + -0.35130121659659547736e-2, + -0.13715620172889554651e-1, + 0.23035499759198930364e-1, + -0.22734629749291579426e-1, + 0.12024933279017980398e-1, + -0.14002509528240258616e-2, + -0.46160596569515422588e-2, + 0.6878733389151753079e-3, + 0.56305292683492338957e-2, + -0.92534658180493025575e-2, + 0.16610185764769833366e-2, + 0.12409164086267165591e-1, + -0.27455989660635223698e-1, + 0.30806679945610971477e-1, + -0.21738112366021220684e-1, + 0.27449634795267386332e-2, + 0.11675405325931380654e-1, + -0.15006823408302614672e-1, + 0.36370162648136131721e-2, + 0.10450074822534722793e-1, + -0.18299289631311006776e-1, + 0.11054301450473050239e-1, + 0.33700240434461842601e-2, + -0.16151433542122606984e-1, + 0.15149054542144163235e-1, + -0.47853350345496790258e-2, + -0.66877657775473702689e-2, + 0.44073488102733746063e-2, + 0.10515405150163650849e-1, + -0.3031310777185858632e-1, + 0.36701177669454396191e-1, + -0.25783156087235872822e-1, + 0.2543734045551179334e-2, + 0.13240261052873106631e-1, + -0.13302589222956099843e-1, + -0.11706990513580255598e-2, + 0.11300139831001211263e-1, + -0.75338737140969629438e-2, + -0.9763625087619678608e-2, + 0.20472724700627876332e-1, + -0.12917541959969977908e-1, + -0.12939502525257695273e-1, + 0.34606653856929264768e-1, + -0.37048203078761561546e-1, + 0.18545889213218199471e-1, + -0.20812663381411583216e-2, + 0.31878255580701955578e-2, + -0.22205041259587585817e-1, + 0.34196267012581174627e-1, + -0.24455481421694822558e-1, + -0.28161022685298420405e-2, + 0.1829535654476802109e-1, + -0.79499421294247259173e-2, + -0.18756481965490373609e-1, + 0.29332576709977117857e-1, + -0.13931390027494537989e-1, + -0.10469454474329512733e-1, + 0.1082550714034122806e-1, + 0.12678168343374618746e-1, + -0.32766158196516896595e-1, + 0.19477528487964888143e-1, + 0.12095204912575367728e-1, + -0.26441231471183847951e-1, + 0.49431940142692842519e-2, + 0.19412631720317902184e-1, + -0.12608711509889838562e-1, + -0.20330795372684146161e-1, + 0.31192366920694703653e-1, + -0.40615507636322231363e-2, + -0.25735729001795843579e-1, + 0.1225948706880976985e-1, + 0.23556548149309918666e-1, + -0.29024740234999020505e-1, + -0.63933676289135215817e-2, + 0.22523114285715895716e-1, + 0.98272536257848330105e-2, + -0.4304844794294400423e-1, + 0.19471207666498038108e-1, + 0.21072848847527785726e-1, + -0.10877717915127357862e-1, + -0.30809152367663246441e-1, + 0.18212757898968083559e-1, + 0.35397486909116607223e-1, + -0.38508504804406526456e-1, + -0.11306927148925781032e-1, + 0.69471439506960091376e-2, + 0.47828797911245730934e-1, + -0.38867064499584012827e-1, + -0.25381050388086627556e-1, + 0.11049790759939752058e-1, + 0.40877614849391452623e-1, + 0.32183395683785063351e-2, + -0.57394204061526808702e-1, + -0.42391122393791828837e-2, + 0.22282433215677969335e-1, + 0.57438451518726590939e-1, + -0.23144666057715423957e-1, + -0.45273973788468972745e-1, + -0.41383108549206869264e-1, + 0.23446530219191016181e-1, + 0.62918886470492332852e-1, + 0.47597402937538120515e-1, + -0.12614887949288406972e-2, + -0.55290828123572277608e-1, + -0.91555568539731638222e-1, + -0.76342229587037124805e-1, + -0.82201805067725189358e-1, + -0.25919281695509714669e-1, + -0.45931207997798435827e-1, + 0.90746180098731608898e-2, + -0.25269654482185006233e-1, + 0.14020722894924160171e-1, + -0.1142676153472002229e-1, + 0.38533871918399777157e-2, + 0.28451291314591331365e-2, + -0.94892273425009332488e-2, + 0.14858688629907865555e-1, + -0.18459793120308261999e-1, + 0.19927596363099004534e-1, + -0.19175308706756433175e-1, + 0.16441378275090238331e-1, + -0.12181751156793032762e-1, + 0.70710908910824226206e-2, + -0.18398820016304207742e-2, + -0.2772269139053268848e-2, + 0.61721329754366241471e-2, + -0.79504406340271584902e-2, + 0.7973916556508465342e-2, + -0.63687966406718345136e-2, + 0.35213463511609851241e-2, + -0.92859208842458774991e-2, + 0.18895739087340417822e-1, + -0.71498303945016468755e-2, + 0.51891524547139225923e-2, + 0.63280075118461428033e-2, + -0.55496460875896847301e-2, + 0.12239123597882720085e-1, + -0.53384680871836169558e-2, + 0.56388957757374852039e-2, + 0.68100838450276136166e-2, + -0.10230116004152314813e-1, + 0.23861302803622391755e-1, + -0.25635132251325739444e-1, + 0.3495653569478004985e-1, + -0.30428441876519881498e-1, + 0.32255601511362967659e-1, + -0.20961370329744231922e-1, + 0.15172519918726911151e-1, + -0.55905012053931888924e-2, + -0.16395537740755142947e-1, + -0.15620452340105924274e-1, + -0.9131188767218836877e-1, -0.12632578889002341049, - -0.28310545565381006750, + -0.2831054556538100675, -0.38842404089733661987, -0.52381899244901564128, -0.51240350911190757355, -0.33554218018329640127, - -0.16161894549687087080e-01, + -0.1616189454968708708e-1, 0.30334607388555900886, 0.37450721453891294699, 0.12737185845376622351, -0.20107599692998653906, -0.34441986710751221201, - -0.34867988174120401190e-01, - 0.22965648589962789350, + -0.3486798817412040119e-1, + 0.2296564858996278935, 0.25546720280204382458, -0.12775096734668112131, -0.26674444534650193495, - -0.11630425083067696609e-01, + -0.11630425083067696609e-1, 0.23329322402181892904, 0.13073984026743618037, -0.25159974910391552649, @@ -8716,273 +8718,273 @@ function ESERK4ConstantCache(zprev) 0.17128312583564650473, -0.16527864293450469924, -0.16856166241513886872, - 0.20138035695299508210, - 0.79556595784463557397e-01, + 0.2013803569529950821, + 0.79556595784463557397e-1, -0.11203521206681200939, -0.15811423799459140005, 0.23328743534610468791, - 0.22064881393356980399e-01, + 0.22064881393356980399e-1, -0.17886316288575015987, - 0.12922183131728531141e-01, + 0.12922183131728531141e-1, 0.15624355084814203765, - -0.29636988354734147832e-01, - -0.19221039504242823370, + -0.29636988354734147832e-1, + -0.1922103950424282337, 0.16501217370683710084, - 0.68189362675710157857e-01, + 0.68189362675710157857e-1, -0.16861337078464330719, - 0.25285754799185957559e-01, + 0.25285754799185957559e-1, 0.11284442481285300586, - -0.20973584911219266685e-01, + -0.20973584911219266685e-1, -0.17970525878736026693, 0.21629685183861216413, - -0.38520205773433312257e-01, + -0.38520205773433312257e-1, -0.12666288154213184436, - 0.95247306036195633627e-01, - 0.48564018891775334597e-01, - -0.79994922655448247317e-01, - -0.64854465912378742032e-01, + 0.95247306036195633627e-1, + 0.48564018891775334597e-1, + -0.79994922655448247317e-1, + -0.64854465912378742032e-1, 0.22164270179647910242, -0.20608017644522583223, - 0.39566308763314878005e-01, - 0.93409565981588213446e-01, - -0.63321689788590818093e-01, - -0.59427348881728792040e-01, - 0.10665171121355274120, - -0.62013931935081907307e-02, + 0.39566308763314878005e-1, + 0.93409565981588213446e-1, + -0.63321689788590818093e-1, + -0.5942734888172879204e-1, + 0.1066517112135527412, + -0.62013931935081907307e-2, -0.13749948966263692007, - 0.17149940315586548190, - -0.57595078300975356689e-01, - -0.87777864948991965455e-01, + 0.1714994031558654819, + -0.57595078300975356689e-1, + -0.87777864948991965455e-1, 0.12587363985937843891, - -0.32147256148133233900e-01, - -0.84288186929477301734e-01, + -0.321472561481332339e-1, + -0.84288186929477301734e-1, 0.10452787309836000795, - -0.14449054952569734267e-01, - -0.84496613016181734701e-01, - 0.86975099722845283789e-01, - 0.16510454307529610213e-01, + -0.14449054952569734267e-1, + -0.84496613016181734701e-1, + 0.86975099722845283789e-1, + 0.16510454307529610213e-1, -0.12899588099684575204, 0.14588001249948903681, - -0.46994123797784240204e-01, - -0.84713341736330355358e-01, + -0.46994123797784240204e-1, + -0.84713341736330355358e-1, 0.14576535745584187631, - -0.98461131893536030235e-01, - 0.15307161608356912273e-02, - 0.53007604022272336586e-01, - -0.18442056463571290803e-01, - -0.65070910778241911054e-01, + -0.98461131893536030235e-1, + 0.15307161608356912273e-2, + 0.53007604022272336586e-1, + -0.18442056463571290803e-1, + -0.65070910778241911054e-1, 0.11442550523365849213, - -0.73869103688213796910e-01, - -0.33056138328296562345e-01, + -0.7386910368821379691e-1, + -0.33056138328296562345e-1, 0.12751175624447633195, -0.13564682200803979129, - 0.50405494046126715635e-01, - 0.69313023095282116914e-01, + 0.50405494046126715635e-1, + 0.69313023095282116914e-1, -0.14201334802289916626, 0.12850432068978107081, - -0.52708687199429969661e-01, - -0.18799110924813140083e-01, - 0.34440462064949391163e-01, - 0.80485112597410372187e-02, - -0.59984683815805649176e-01, - 0.65941364095180476923e-01, - -0.39638730987669535191e-02, - -0.93405461953624244198e-01, + -0.52708687199429969661e-1, + -0.18799110924813140083e-1, + 0.34440462064949391163e-1, + 0.80485112597410372187e-2, + -0.59984683815805649176e-1, + 0.65941364095180476923e-1, + -0.39638730987669535191e-2, + -0.93405461953624244198e-1, 0.16572191908288061435, -0.16380126895709884449, - 0.87310779144859088086e-01, - 0.18801435678428759374e-01, - -0.91063797958249703690e-01, - 0.91846785393901869687e-01, - -0.27998048853638126537e-01, - -0.53508549576226291378e-01, + 0.87310779144859088086e-1, + 0.18801435678428759374e-1, + -0.9106379795824970369e-1, + 0.91846785393901869687e-1, + -0.27998048853638126537e-1, + -0.53508549576226291378e-1, 0.10127628032126687052, - -0.88675746976072805650e-01, - 0.31014936413169835044e-01, - 0.31445501176558643408e-01, - -0.58838531622492258599e-01, - 0.40539144039343423531e-01, - 0.29904632861139138732e-02, - -0.32991363192995969145e-01, - 0.22406559286468567121e-01, - 0.28378717189951691013e-01, - -0.88060609466650938137e-01, - 0.11640041227410534430, - -0.86356289550961987111e-01, - 0.41415955411034368824e-02, - 0.95623724479571237111e-01, + -0.8867574697607280565e-1, + 0.31014936413169835044e-1, + 0.31445501176558643408e-1, + -0.58838531622492258599e-1, + 0.40539144039343423531e-1, + 0.29904632861139138732e-2, + -0.32991363192995969145e-1, + 0.22406559286468567121e-1, + 0.28378717189951691013e-1, + -0.88060609466650938137e-1, + 0.1164004122741053443, + -0.86356289550961987111e-1, + 0.41415955411034368824e-2, + 0.95623724479571237111e-1, -0.16554385693380682665, 0.17346174541223360888, -0.11647451284487725376, - 0.24183838457114574527e-01, - 0.60148730249392948211e-01, - -0.99489466631691850229e-01, - 0.83222589688592155110e-01, - -0.27733311713258556458e-01, - -0.32078437356533595626e-01, - 0.64276185124803333903e-01, - -0.53347422672585846637e-01, - 0.82036334401139263117e-02, - 0.47270131540386568780e-01, - -0.86199052848036694652e-01, - 0.94844830807835872610e-01, - -0.76140188014942350447e-01, - 0.47737380856020437958e-01, - -0.28545541046412718084e-01, - 0.29389828653393269831e-01, - -0.45294262248323717557e-01, - 0.60708977249148234068e-01, - -0.57245972648542475802e-01, - 0.26586304882138738631e-01, - 0.25346238006675760740e-01, - -0.78511022508327185654e-01, + 0.24183838457114574527e-1, + 0.60148730249392948211e-1, + -0.99489466631691850229e-1, + 0.8322258968859215511e-1, + -0.27733311713258556458e-1, + -0.32078437356533595626e-1, + 0.64276185124803333903e-1, + -0.53347422672585846637e-1, + 0.82036334401139263117e-2, + 0.4727013154038656878e-1, + -0.86199052848036694652e-1, + 0.9484483080783587261e-1, + -0.76140188014942350447e-1, + 0.47737380856020437958e-1, + -0.28545541046412718084e-1, + 0.29389828653393269831e-1, + -0.45294262248323717557e-1, + 0.60708977249148234068e-1, + -0.57245972648542475802e-1, + 0.26586304882138738631e-1, + 0.2534623800667576074e-1, + -0.78511022508327185654e-1, 0.10977864649745033843, -0.10294299473493144503, - 0.58925797738977145346e-01, - 0.50077134925713548061e-02, - -0.60954820600475891068e-01, - 0.84177474369243998620e-01, - -0.63123056716230252494e-01, - 0.64043974566172605367e-02, - 0.61675927721816375948e-01, + 0.58925797738977145346e-1, + 0.50077134925713548061e-2, + -0.60954820600475891068e-1, + 0.8417747436924399862e-1, + -0.63123056716230252494e-1, + 0.64043974566172605367e-2, + 0.61675927721816375948e-1, -0.11015880082279158603, 0.11592479977831267324, - -0.72742722818565350162e-01, - -0.45648256982624146882e-02, - 0.86878883524049821396e-01, + -0.72742722818565350162e-1, + -0.45648256982624146882e-2, + 0.86878883524049821396e-1, -0.14153694277736572626, 0.14650401051838848887, - -0.98431213610411461001e-01, - 0.14893553425629476455e-01, - 0.73351424396353046009e-01, + -0.98431213610411461001e-1, + 0.14893553425629476455e-1, + 0.73351424396353046009e-1, -0.13373875296961454384, 0.14528484277185133022, -0.10593631574414996699, - 0.33659705009392970609e-01, - 0.41419197647239461291e-01, - -0.88442803593109367566e-01, - 0.88331939327088798697e-01, - -0.40732346288174889337e-01, - -0.35579435206732075436e-01, + 0.33659705009392970609e-1, + 0.41419197647239461291e-1, + -0.88442803593109367566e-1, + 0.88331939327088798697e-1, + -0.40732346288174889337e-1, + -0.35579435206732075436e-1, 0.11033591241847008624, -0.15321922533774573472, 0.14575649908890700446, - -0.88279372230493577400e-01, - 0.66260099427444513198e-01, - -0.12186353150262027242e-01, - -0.60976866130994414328e-01, + -0.882793722304935774e-1, + 0.66260099427444513198e-1, + -0.12186353150262027242e-1, + -0.60976866130994414328e-1, 0.12907655850776089679, - -0.10147504142952333550, - 0.62097875188530868296e-01, - 0.33363264430217476342e-01, - -0.70237555350682739919e-01, - 0.92100485368040621581e-01, - -0.15796091872219961139e-01, - -0.63643489041413842111e-01, + -0.1014750414295233355, + 0.62097875188530868296e-1, + 0.33363264430217476342e-1, + -0.70237555350682739919e-1, + 0.92100485368040621581e-1, + -0.15796091872219961139e-1, + -0.63643489041413842111e-1, 0.17997169367177850985, -0.21362909328980844714, 0.21160894566691273999, - -0.10204179265151543110, - -0.55906346796084577591e-02, + -0.1020417926515154311, + -0.55906346796084577591e-2, 0.13364961601658620349, -0.16016922311544853907, 0.14044171316184311804, - -0.18770956306146474590e-01, - -0.78908587366326513046e-01, + -0.1877095630614647459e-1, + -0.78908587366326513046e-1, 0.16648124349459075821, -0.12748333655838808842, - 0.36207114780083822503e-01, + 0.36207114780083822503e-1, 0.13710064305025654319, -0.24488474212188610091, 0.29385217775906696813, -0.17981943585668405672, - 0.47369628589463844484e-02, + 0.47369628589463844484e-2, 0.22926159227737274993, -0.35305982225297194432, 0.37233181703109968774, -0.20386211735935935718, - -0.17185543583382128369e-01, + -0.17185543583382128369e-1, 0.25928459140963339147, -0.34353918894728713296, 0.29185797451014877657, - -0.57125650338065915579e-01, + -0.57125650338065915579e-1, -0.18718343166767056895, 0.38895827455146236851, -0.37929992670159640156, 0.21788406067700835655, - 0.94363037035528660179e-01, + 0.94363037035528660179e-1, -0.35078848862125389108, 0.49970902562645808098, -0.40857806315008382558, 0.19119256663572101185, - 0.10923318864555149610, + 0.1092331886455514961, -0.28209537565857772945, 0.31690249169364548276, -0.14922855207418769807, - -0.48936244077081005044e-01, + -0.48936244077081005044e-1, 0.22156297447335501771, -0.20488589855476863066, - 0.75948987207642412733e-01, + 0.75948987207642412733e-1, 0.14575796311493277591, -0.25596302307095802897, 0.24110857558576997972, - -0.37534043428251076535e-01, + -0.37534043428251076535e-1, -0.17272370644930423733, 0.32026737876577793251, -0.23931935077723986982, - 0.26296931859923277502e-01, + 0.26296931859923277502e-1, 0.26172392571597974387, - -0.38381938930398085130, + -0.3838193893039808513, 0.31346598308647094511, - -0.10001667469998544099e-01, + -0.10001667469998544099e-1, -0.29579014881709553286, 0.48707493365882176262, -0.38062860279463872626, - 0.94407046712157383084e-01, + 0.94407046712157383084e-1, 0.27073797383489273116, -0.44111039884174335635, 0.39227682341632874596, -0.11662424962619985513, -0.12445016993225571644, 0.22334156451184172809, - -0.56872237462720846846e-01, + -0.56872237462720846846e-1, -0.17970442566438366017, 0.35084449633888281639, -0.23591216456029936999, - -0.60501061366364329575e-01, + -0.60501061366364329575e-1, 0.41275694100249216145, -0.51327173344282284173, 0.33870540485087707872, - 0.63740029667512479450e-01, + 0.6374002966751247945e-1, -0.35633772992813883551, 0.39381568871355038253, - -0.93209102788381154037e-01, + -0.93209102788381154037e-1, -0.25635502270204690856, 0.44628174424508193496, -0.27055896690333847143, - -0.70547359179333191115e-01, + -0.70547359179333191115e-1, 0.35964795432915497297, -0.30057286673072441952, - 0.24007526838294834109e-02, + 0.24007526838294834109e-2, 0.33202548415271471161, -0.33498287704383711283, - 0.23702763038215727415e-01, + 0.23702763038215727415e-1, 0.42631499844776488128, -0.58084678036819548108, 0.34861548877184328488, - 0.15671099996607898430, + 0.1567109999660789843, -0.46853993204143040696, 0.40214361457557107338, - 0.23943606830337180180e-02, + 0.2394360683033718018e-2, -0.27972101863934223376, 0.19497253453419441382, 0.24590575815388063252, -0.55479397132867735998, 0.44403842466757315055, 0.10004118359004435246, - -0.54863800078921343140, + -0.5486380007892134314, 0.55264220370147909556, - -0.76693423668919596947e-01, + -0.76693423668919596947e-1, -0.32401512743465527011, 0.28007809247149273446, 0.21161191937127957208, @@ -9001,25 +9003,25 @@ function ESERK4ConstantCache(zprev) -0.36168504181802257902, -0.34477345003441378646, 0.63852353306351439244, - -0.77895138479123174347e-01, + -0.77895138479123174347e-1, -0.53994268430571423778, 0.39721560783832665642, 0.38594569878293549792, -0.64866791893797659529, - 0.52781959500300887345e-02, + 0.52781959500300887345e-2, 0.70243142096569943789, -0.37566096940026749706, -0.47944971657731938475, 0.59866993481741836991, 0.26964208382425952637, -0.67619302698832361997, - -0.84615189904761564654e-01, + -0.84615189904761564654e-1, 0.87693362729610302431, -0.32099108314533064679, -0.62364843003088166196, 0.33279060690200024109, - 0.72907041594722632460, - -0.49649240228864033320, + 0.7290704159472263246, + -0.4964924022886403332, -0.71964024081485855611, 0.73277543098377029285, 0.50743077755177823374, @@ -9029,127 +9031,127 @@ function ESERK4ConstantCache(zprev) 0.76726647488717913959, -0.34883214854122673865, -0.97918450557344749452, - 0.59548253690404101719e-03, - 0.12316497757736797336e+01, + 0.59548253690404101719e-3, + 0.12316497757736797336e+1, 0.29720706030738675008, -0.75706714885852521846, - -0.11521601026962831060e+01, + -0.1152160102696283106e+1, 0.34509406295727201863, - 0.12675035252568984667e+01, + 0.12675035252568984667e+1, 0.84760056565257213546, -0.44931393272711356301, - -0.16017141652612985059e+01, - -0.10559514593086809509e+01, - -0.69469596650996473519e-01, - 0.14581886292378882786e+01, - 0.20212054597870650063e+01, - 0.20600702158180750345e+01, - 0.16954602166572956268e+01, + -0.16017141652612985059e+1, + -0.10559514593086809509e+1, + -0.69469596650996473519e-1, + 0.14581886292378882786e+1, + 0.20212054597870650063e+1, + 0.20600702158180750345e+1, + 0.16954602166572956268e+1, 0.93809096812382042341, 0.76684303511281604049, 0.11263239425601233312, 0.30850102711435695158, - -0.96973931539461932783e-01, + -0.96973931539461932783e-1, 0.11478702415416101867, - -0.26880527761297758754e-01, - -0.35533623067811444252e-01, + -0.26880527761297758754e-1, + -0.35533623067811444252e-1, 0.10255663406983374364, -0.15417946712498553641, 0.18627268032354463156, -0.19448681697571737481, 0.17800992462453121834, -0.13995886787154895869, - 0.85840381926720610295e-01, - -0.23866386660359395488e-01, - -0.37292974206443035845e-01, - 0.88805289065970002826e-01, + 0.85840381926720610295e-1, + -0.23866386660359395488e-1, + -0.37292974206443035845e-1, + 0.88805289065970002826e-1, -0.12377127899898428265, - 0.13746866701251903020, + 0.1374686670125190302, -0.12862003338097019456, - 0.99046414600573937093e-01, - -0.53771841840958123360e-01, - 0.26182785682968775370e-01, - -0.21665442485972366549e-01, - -0.67617441816129178478e-01, - 0.91609238471259360481e-01, + 0.99046414600573937093e-1, + -0.5377184184095812336e-1, + 0.2618278568296877537e-1, + -0.21665442485972366549e-1, + -0.67617441816129178478e-1, + 0.91609238471259360481e-1, -0.15564909068236237877, 0.13945705280105946677, -0.15425463690647367443, - 0.87317923263803734479e-01, - -0.57747213919909674840e-01, - -0.39969511492741430225e-01, - 0.81560880463824647624e-01, + 0.87317923263803734479e-1, + -0.5774721391990967484e-1, + -0.39969511492741430225e-1, + 0.81560880463824647624e-1, -0.17004801407426906046, 0.18205435014917795145, -0.22455086859049600001, 0.18114943875599817669, -0.16620067013834979863, - 0.76103282223083684732e-01, - -0.18276553778629370250e-01, - -0.56208692282812521002e-01, + 0.76103282223083684732e-1, + -0.1827655377862937025e-1, + -0.56208692282812521002e-1, 0.18609278614040625222, - -0.18429316292596694543e-01, - 0.57785669393605543220, + -0.18429316292596694543e-1, + 0.5778566939360554322, 0.60341013276255295317, - 0.15487734822030969628e+01, - 0.20681008363883393031e+01, - 0.27585955822862993081e+01, - 0.28018643850211608637e+01, - 0.16918067112226973236e+01, - 0.20084007120377592170, - -0.17391045018762683050e+01, - -0.18835573587587057798e+01, - -0.77612907705580047590, - 0.11417811785989051554e+01, - 0.17985636853667086310e+01, + 0.15487734822030969628e+1, + 0.20681008363883393031e+1, + 0.27585955822862993081e+1, + 0.28018643850211608637e+1, + 0.16918067112226973236e+1, + 0.2008400712037759217, + -0.1739104501876268305e+1, + -0.18835573587587057798e+1, + -0.7761290770558004759, + 0.11417811785989051554e+1, + 0.1798563685366708631e+1, 0.19043359020975406115, - -0.12000331646923012574e+01, - -0.14115457997832046022e+01, + -0.12000331646923012574e+1, + -0.14115457997832046022e+1, 0.74355091603220080376, - 0.13567384153863111251e+01, + 0.13567384153863111251e+1, 0.11867415948533871495, - -0.12829924943098987011e+01, + -0.12829924943098987011e+1, -0.68590845041153003514, - 0.13610555211733190717e+01, + 0.13610555211733190717e+1, 0.49414900220895735528, -0.73144038962011836968, - -0.10198406203821099858e+01, - 0.10028552131979477924e+01, + -0.10198406203821099858e+1, + 0.10028552131979477924e+1, 0.77068319492815762217, -0.95007633236028987689, -0.53662759815061378266, 0.68998832245871533075, 0.77314280201802354497, - -0.11986894982939217957e+01, + -0.11986894982939217957e+1, -0.14234239141749469026, 0.96131259921551737158, - -0.67431373820488194060e-01, + -0.6743137382048819406e-1, -0.83712447091603936489, 0.15494698798860581657, - 0.10404441178249173028e+01, + 0.10404441178249173028e+1, -0.91358688618534600323, - -0.31151587636428185180, + -0.3115158763642818518, 0.82832430538692869426, - -0.50771814732396794434e-01, + -0.50771814732396794434e-1, -0.69353907497112554648, 0.20103667085321452745, 0.88014517494879840331, - -0.10971040901901836229e+01, + -0.10971040901901836229e+1, 0.17777593320530460375, 0.66692958422891790438, -0.46122423332428003073, - -0.34502936418150614850, + -0.3450293641815061485, 0.54695563424780213602, 0.19689541228303117371, - -0.10152124640957622681e+01, + -0.10152124640957622681e+1, 0.92436339639792175493, - -0.41733617819829559037e-01, + -0.41733617819829559037e-1, -0.65157143429825359338, 0.46367921495471364768, 0.22517496167220166225, -0.51745300604173227743, - 0.22591056396016100105e-01, - 0.70350034464447563920, + 0.22591056396016100105e-1, + 0.7035003446444756392, -0.85059391888109714408, 0.21518501081531093977, 0.57757545189456760415, @@ -9157,24 +9159,24 @@ function ESERK4ConstantCache(zprev) 0.28619469326499696882, 0.34599884367724481615, -0.47390106866874576186, - 0.17723859652077924437e-01, + 0.17723859652077924437e-1, 0.48178813181456153769, -0.46763090325449574447, -0.11064779740663800711, - 0.73181818047047741960, + 0.7318181804704774196, -0.83880631040271758092, 0.32129247278042816216, 0.37616695059909888155, -0.70304551836603079717, 0.45496974988341065682, - 0.54396962387517816540e-01, + 0.5439696238751781654e-1, -0.33804470512977097263, 0.14651664510633127803, 0.30264943023230056474, -0.56721800107698039373, - 0.34749368232985200500, + 0.347493682329852005, 0.22886741357423245891, - -0.74252955942547826940, + -0.7425295594254782694, 0.79649072025010902998, -0.35336264482059936975, -0.27635730140228337293, @@ -9183,55 +9185,55 @@ function ESERK4ConstantCache(zprev) 0.18701464829836583759, 0.18115316454153948533, -0.24526291311646450377, - -0.78280768924532968117e-02, + -0.78280768924532968117e-2, 0.31550403562976164773, -0.38202563105329162552, - 0.86447180447843677276e-01, + 0.86447180447843677276e-1, 0.39843452577471577536, -0.75426484891682799017, 0.71931803975515640204, - -0.29518334881486224530, + -0.2951833488148622453, -0.27875297489963035691, 0.66189107770726884894, - -0.65524483921678799980, + -0.6552448392167879998, 0.29474565867358237803, 0.16603368905602422512, -0.45233878834060309293, - 0.41824466980612534650, + 0.4182446698061253465, -0.14418794066084503203, -0.15908567158931877228, 0.27989217524788922997, -0.16480165542924543609, - -0.77113352111530711341e-01, + -0.77113352111530711341e-1, 0.23723305728765314848, -0.17271211134224956352, -0.11479019451050437306, 0.45551648707578190622, -0.63402683950041405225, 0.50243335862798377267, - -0.92456740461410280574e-01, - -0.41503539189994770320, + -0.92456740461410280574e-1, + -0.4150353918999477032, 0.76846369992974861152, -0.79941514940049673843, 0.49267417992448037101, - -0.79425932147990669502e-02, + -0.79425932147990669502e-2, -0.42512965133067376344, - 0.60868111467772634260, + 0.6086811146777263426, -0.48851743522629326177, 0.15294712967189966202, 0.20852766590359203547, -0.42394496768305373058, 0.40692454406885036899, - -0.20337679041671111180, - -0.62498538278130157109e-01, + -0.2033767904167111118, + -0.62498538278130157109e-1, 0.24827877302978340612, -0.28282403909300707356, 0.18151607671719244275, - -0.39278433166579744540e-01, - -0.44584147689778398649e-01, - 0.12842822189303614716e-01, + -0.3927843316657974454e-1, + -0.44584147689778398649e-1, + 0.12842822189303614716e-1, 0.10537957758068869363, - -0.22575870495686262140, + -0.2257587049568626214, 0.24711875528027324456, -0.12341359132480532457, -0.11675438068313903628, @@ -9243,27 +9245,27 @@ function ESERK4ConstantCache(zprev) 0.42805324490354546008, -0.54030548631254193825, 0.41099953302689251622, - -0.88313238876397526234e-01, + -0.88313238876397526234e-1, -0.29675788638678024522, 0.57668499069446454985, -0.62679944471144632967, 0.41180641847316529214, - -0.98949162694254143985e-02, + -0.98949162694254143985e-2, -0.42492997202991833472, 0.71851339313803530562, -0.75365850802072731351, 0.51164549942213521927, - -0.85597942945895538758e-01, - -0.36204848732668104550, + -0.85597942945895538758e-1, + -0.3620484873266810455, 0.65889181131938956426, -0.69501807620631372853, 0.46100779599087321481, - -0.54625517880381085911e-01, + -0.54625517880381085911e-1, -0.36212813388282111271, - 0.62322628773338306640, + 0.6232262877333830664, -0.62617215380380597534, - 0.36842864347012105330, - 0.49789245404192945810e-01, + 0.3684286434701210533, + 0.4978924540419294581e-1, -0.46677300498132484607, 0.71992329550487088596, -0.70959878884620264383, @@ -9276,14 +9278,14 @@ function ESERK4ConstantCache(zprev) -0.17539086389236702157, -0.33716416158373824219, 0.57998179443238873088, - -0.67663819840344974210, + -0.6766381984034497421, 0.34585648905623012084, - 0.49393203363150735286e-01, + 0.49393203363150735286e-1, -0.57586573041352828728, 0.77433092237559608684, -0.77981277518985758768, 0.34489341804424633597, - 0.12590364714757532050, + 0.1259036471475753205, -0.66721203430867548345, 0.81546356051504775841, -0.73291406325307650871, @@ -9292,263 +9294,263 @@ function ESERK4ConstantCache(zprev) -0.71964422144190609565, 0.71306882887721989572, -0.45665417798828811247, - -0.17006356164932601160, + -0.1700635616493260116, 0.65115640881068248547, - -0.97844169543167935910, + -0.9784416954316793591, 0.74763805817374673346, -0.26358377293561696675, -0.49891414420175256295, 0.96664423791331710589, - -0.11411811302456731365e+01, + -0.11411811302456731365e+1, 0.69717562150390055553, - -0.51945899484877829100e-01, + -0.519458994848778291e-1, -0.72624022177014757595, - 0.10410749016396694255e+01, + 0.10410749016396694255e+1, -0.95817622273121982879, 0.28003576700845783654, 0.44682051070805095527, - -0.10896871779117887069e+01, - 0.10947366885771445677e+01, + -0.10896871779117887069e+1, + 0.10947366885771445677e+1, -0.66333195468642069947, -0.23436715922120632261, 0.94020882831658381118, - -0.13288699998617172771e+01, + -0.13288699998617172771e+1, 0.98064436784856601204, -0.29322638925381150354, -0.60676007299859024968, - 0.10381587026566301279e+01, - -0.10108476793600258414e+01, + 0.10381587026566301279e+1, + -0.10108476793600258414e+1, 0.33951867194031798425, 0.37003091380290270562, -0.93030556484030901832, 0.79966334817912942956, -0.26802708940929265147, -0.57342972684266424466, - 0.10065655332891572105e+01, + 0.10065655332891572105e+1, -0.97374075535583493046, 0.25290068244986385615, 0.52917430325724457152, - -0.11224749820696806601e+01, + -0.11224749820696806601e+1, 0.93800350164362056304, -0.27806564757414720113, -0.68784963506025864621, - 0.11491339255458707935e+01, - -0.10077933207493843248e+01, - 0.95434185176199420875e-01, + 0.11491339255458707935e+1, + -0.10077933207493843248e+1, + 0.95434185176199420875e-1, 0.84205180550385017035, - -0.14463958345268623784e+01, - 0.11140120653260949801e+01, + -0.14463958345268623784e+1, + 0.11140120653260949801e+1, -0.24253104332606850724, -0.85457246909439787963, - 0.12861729539104413966e+01, - -0.10081429746958407989e+01, - 0.16735237091094940648e-01, + 0.12861729539104413966e+1, + -0.10081429746958407989e+1, + 0.16735237091094940648e-1, 0.79339104260274151414, - -0.10662825183702444587e+01, + -0.10662825183702444587e+1, 0.39697130106253697424, 0.53480884531194727849, - -0.12540292300575497375e+01, + -0.12540292300575497375e+1, 0.99149553856819949704, - -0.80765563289443870199e-01, - -0.10741712907037452851e+01, - 0.14387355418488974035e+01, - -0.92582342774988679590, + -0.80765563289443870199e-1, + -0.10741712907037452851e+1, + 0.14387355418488974035e+1, + -0.9258234277498867959, -0.33430530005912811875, - 0.12331033254548418032e+01, - -0.13097656999364586383e+01, + 0.12331033254548418032e+1, + -0.13097656999364586383e+1, 0.29164382413013467676, 0.85358268648709556548, - -0.14469064355973759728e+01, + -0.14469064355973759728e+1, 0.81384100304100348566, 0.35396080626475084907, - -0.13216239173654344974e+01, - 0.10892448758097221795e+01, - -0.27754312880577454437e-01, - -0.11796795163268545270e+01, - 0.12833558767309916071e+01, - -0.32384589763251042660, - -0.11380724500935170962e+01, - 0.16626816657068947958e+01, - -0.95292779766959589960, + -0.13216239173654344974e+1, + 0.10892448758097221795e+1, + -0.27754312880577454437e-1, + -0.1179679516326854527e+1, + 0.12833558767309916071e+1, + -0.3238458976325104266, + -0.11380724500935170962e+1, + 0.16626816657068947958e+1, + -0.9529277976695958996, -0.62540818827954636205, - 0.15302350812896254872e+01, - -0.11741684199679685019e+01, + 0.15302350812896254872e+1, + -0.11741684199679685019e+1, -0.28877167499706457576, - 0.12817875124656525898e+01, - -0.10133349081416616055e+01, + 0.12817875124656525898e+1, + -0.10133349081416616055e+1, -0.50375882553833217781, - 0.16297594373238706300e+01, - -0.13927112973098914050e+01, + 0.162975943732387063e+1, + -0.1392711297309891405e+1, -0.28024049115345345262, - 0.16462472850382861012e+01, - -0.15663463540701858534e+01, - -0.68056854656910054091e-01, - 0.13981571877772065449e+01, - -0.12020791293647044018e+01, + 0.16462472850382861012e+1, + -0.15663463540701858534e+1, + -0.68056854656910054091e-1, + 0.13981571877772065449e+1, + -0.12020791293647044018e+1, -0.52115583374970064767, - 0.17220608870470071050e+01, - -0.11820381263301500407e+01, + 0.1722060887047007105e+1, + -0.11820381263301500407e+1, -0.81285528793093131394, - 0.19368535584377974956e+01, - -0.10827640163572336274e+01, - -0.10110088465008120195e+01, - 0.17652071051441753369e+01, + 0.19368535584377974956e+1, + -0.10827640163572336274e+1, + -0.10110088465008120195e+1, + 0.17652071051441753369e+1, -0.43518599603121516095, - -0.15910469017775903389e+01, - 0.16335602775022779465e+01, + -0.15910469017775903389e+1, + 0.16335602775022779465e+1, 0.30243022695174459624, - -0.20418434504953499875e+01, - 0.11660433993897114657e+01, - 0.11379265255640982346e+01, - -0.20680170861383651015e+01, + -0.20418434504953499875e+1, + 0.11660433993897114657e+1, + 0.11379265255640982346e+1, + -0.20680170861383651015e+1, 0.15953929055019416827, - 0.19192436287638292569e+01, - -0.14422895778378317377e+01, - -0.11910853366811766652e+01, - 0.21015802815464410536e+01, - 0.32621149301744305216e-02, - -0.23312619337484616899e+01, - 0.12262446827657764725e+01, - 0.16160263838278388082e+01, - -0.19835111803032470235e+01, + 0.19192436287638292569e+1, + -0.14422895778378317377e+1, + -0.11910853366811766652e+1, + 0.21015802815464410536e+1, + 0.32621149301744305216e-2, + -0.23312619337484616899e+1, + 0.12262446827657764725e+1, + 0.16160263838278388082e+1, + -0.19835111803032470235e+1, -0.96064581339578170027, - 0.23733015314383352212e+01, + 0.23733015314383352212e+1, 0.10739424780166802187, - -0.27111195585839285016e+01, + -0.27111195585839285016e+1, 0.84741680030657373646, - 0.22755001184534950909e+01, - -0.12448034308159567907e+01, - -0.23885080852815656627e+01, - 0.17262397060265302073e+01, - 0.22082897770694422945e+01, - -0.21460327250129940246e+01, - -0.20668141156475043907e+01, - 0.18231761605871801279e+01, - 0.25908032055291805307e+01, - -0.20464531673090404773e+01, - -0.28040969197294622894e+01, - 0.12843271155180462362e+01, - 0.32754441813463897049e+01, + 0.22755001184534950909e+1, + -0.12448034308159567907e+1, + -0.23885080852815656627e+1, + 0.17262397060265302073e+1, + 0.22082897770694422945e+1, + -0.21460327250129940246e+1, + -0.20668141156475043907e+1, + 0.18231761605871801279e+1, + 0.25908032055291805307e+1, + -0.20464531673090404773e+1, + -0.28040969197294622894e+1, + 0.12843271155180462362e+1, + 0.32754441813463897049e+1, -0.13762015002165622901, - -0.38737766110150699816e+01, - -0.12792631420115927465e+01, - 0.28212602876389105688e+01, - 0.35791204927613287090e+01, + -0.38737766110150699816e+1, + -0.12792631420115927465e+1, + 0.28212602876389105688e+1, + 0.3579120492761328709e+1, -0.96454568441542498647, - -0.43110475979919256062e+01, - -0.28473166764360562375e+01, - 0.16160803074564729087e+01, - 0.51509590527464004239e+01, - 0.37374581079708821818e+01, - 0.29001526235559550726e-01, - -0.47176545126783233641e+01, - -0.67858713534542598467e+01, - -0.69348742021415628045e+01, - -0.54638812961914888788e+01, - -0.34200713276362111337e+01, - -0.21896432485380157296e+01, + -0.43110475979919256062e+1, + -0.28473166764360562375e+1, + 0.16160803074564729087e+1, + 0.51509590527464004239e+1, + 0.37374581079708821818e+1, + 0.29001526235559550726e-1, + -0.47176545126783233641e+1, + -0.67858713534542598467e+1, + -0.69348742021415628045e+1, + -0.54638812961914888788e+1, + -0.34200713276362111337e+1, + -0.21896432485380157296e+1, -0.77199120089515638199, -0.65227051900038468535, - 0.16292634948459415456e-01, + 0.16292634948459415456e-1, -0.18640557263764345741, - 0.31095991039807219930e-01, - 0.29091668344635286669e-01, - -0.11428973505788360410, + 0.3109599103980721993e-1, + 0.29091668344635286669e-1, + -0.1142897350578836041, 0.17476230557047550684, - -0.21131863205307180320, + -0.2113186320530718032, 0.21700286856478606667, -0.19108473626604405293, 0.13790099812506070864, - -0.64766149800300140682e-01, - -0.17241923302964805298e-01, - 0.96675690069764175227e-01, + -0.64766149800300140682e-1, + -0.17241923302964805298e-1, + 0.96675690069764175227e-1, -0.16174541781655546457, 0.20343585418538384646, -0.21554591008032167321, 0.19661287384341558093, -0.14924941369731264951, - 0.80427915334850177964e-01, - -0.21935847790385536171e-01, - -0.11448058024571328151e-01, - 0.12249145819321528850, + 0.80427915334850177964e-1, + -0.21935847790385536171e-1, + -0.11448058024571328151e-1, + 0.1224914581932152885, -0.15908807175959621683, 0.22950924832648189611, -0.20937945847196201554, 0.21505860262149695261, - -0.13178633578786219660, - 0.85274474684910436806e-01, - 0.31170115720279799321e-01, - -0.86683499611440936738e-01, + -0.1317863357878621966, + 0.85274474684910436806e-1, + 0.31170115720279799321e-1, + -0.86683499611440936738e-1, 0.18617562227366837857, -0.20110990145680499031, 0.24212506687204554678, - -0.18969480834602903130, + -0.1896948083460290313, 0.16365492972075756928, - -0.58784707538608663158e-01, - -0.11155486432565992622e-01, - 0.96471861461942795546e-01, + -0.58784707538608663158e-1, + -0.11155486432565992622e-1, + 0.96471861461942795546e-1, -0.23011636272153199179, - 0.61622485995452266905e-01, + 0.61622485995452266905e-1, -0.61149318283244391559, -0.58376279755042415065, - -0.15477502387617045887e+01, - -0.20906347593272753826e+01, - -0.27126264725262432265e+01, - -0.28668787186977651160e+01, - -0.16109373261196904270e+01, + -0.15477502387617045887e+1, + -0.20906347593272753826e+1, + -0.27126264725262432265e+1, + -0.2866878718697765116e+1, + -0.1610937326119690427e+1, -0.28890231960740581085, - 0.18281935433030276350e+01, - 0.18033394470066050896e+01, + 0.1828193543303027635e+1, + 0.18033394470066050896e+1, 0.84187628279560411393, - -0.11855247720842738701e+01, - -0.17786428407129160068e+01, + -0.11855247720842738701e+1, + -0.17786428407129160068e+1, -0.18380430571247455274, - 0.11702008337007461236e+01, - 0.14623157089805272069e+01, + 0.11702008337007461236e+1, + 0.14623157089805272069e+1, -0.80774861456503765922, - -0.12843304831059003668e+01, + -0.12843304831059003668e+1, -0.19042180641518335893, - 0.13491126580047421157e+01, + 0.13491126580047421157e+1, 0.63244246886508881378, - -0.13221399254705394899e+01, + -0.13221399254705394899e+1, -0.51544129508786251659, 0.73745384916801381969, - 0.10281032823143982924e+01, - -0.10197112977183893090e+01, + 0.10281032823143982924e+1, + -0.1019711297718389309e+1, -0.74853289622156193861, 0.92924661091596461038, 0.55325582297802955445, -0.69754530307401518829, -0.77481186335922647146, - 0.12110481840242699469e+01, + 0.12110481840242699469e+1, 0.12268835317312644373, -0.93620567139151644742, - 0.42820566681690923339e-01, + 0.42820566681690923339e-1, 0.85784291331807716041, -0.16555475739817934744, - -0.10423630527617135932e+01, + -0.10423630527617135932e+1, 0.93204714246139763745, - 0.27719266137743736600, + 0.277192661377437366, -0.77783098765242564276, - -0.11402803832216009197e-01, + -0.11402803832216009197e-1, 0.76415051184933868722, -0.27279673851899877146, -0.81228002561072121246, - 0.10409232893683204590e+01, + 0.1040923289368320459e+1, -0.13753304890070849886, -0.68553992736770097416, 0.45706020083617576732, 0.37376799362950408057, -0.59720975056787395374, -0.12748932317525854541, - 0.93334307216361622750, + 0.9333430721636162275, -0.83521388569433041571, - -0.46347062792519502783e-01, + -0.46347062792519502783e-1, 0.73296553138654418902, -0.53093076726636001528, -0.17565590717739318349, 0.49010109177522070967, - -0.17376715721398476588e-01, + -0.17376715721398476588e-1, -0.68607661781044182447, 0.81434583085982681361, -0.16297105219738455828, @@ -9557,19 +9559,19 @@ function ESERK4ConstantCache(zprev) -0.35140747924007242897, -0.28643798301015543917, 0.42528649278348329421, - 0.18304713935083382487e-01, + 0.18304713935083382487e-1, -0.50275745143254868541, 0.47486903246487954799, 0.11672822908660744623, -0.74745204598423853337, - 0.86173824294098666510, + 0.8617382429409866651, -0.34674384170730604415, -0.35065594908383662665, - 0.68159507985445833000, + 0.68159507985445833, -0.43871604735993757762, - -0.63220523676426138016e-01, + -0.63220523676426138016e-1, 0.34043517860448746504, - -0.14244698541033923300, + -0.142446985410339233, -0.31023720590847753131, 0.57680481244752901393, -0.35524053474730499236, @@ -9583,38 +9585,38 @@ function ESERK4ConstantCache(zprev) -0.14854915677017449527, -0.21604738375174767362, 0.27367032505225219463, - -0.96927111420680635984e-02, + -0.96927111420680635984e-2, -0.31080211650722056049, 0.39283221769087411923, -0.11248055925845394654, - -0.35709123012998272850, + -0.3570912301299827285, 0.70057855800693535908, -0.65580695770185448712, 0.22701046108286909719, 0.34740450549440271555, -0.72496846555237981491, 0.70846536886642241804, - -0.33285726140393134820, + -0.3328572614039313482, -0.14574299810722779469, - 0.45281410985314318740, + 0.4528141098531431874, -0.43941484642052519582, 0.18587723664514005373, 0.10007597409820080669, -0.20670224391674230091, - 0.83110910420854416936e-01, + 0.83110910420854416936e-1, 0.16228678687429914929, -0.31916856251011993528, - 0.24619131992463427760, - 0.55746437157611433699e-01, + 0.2461913199246342776, + 0.55746437157611433699e-1, -0.41457984163757094498, 0.61486034607584560963, - -0.50588128218510708400, + -0.505881282185107084, 0.11897653629365195771, 0.36785949644396714886, -0.70332631634597031489, - 0.72146094277901340330, + 0.7214609427790134033, -0.40678608778198988016, - -0.79324879571036899240e-01, + -0.7932487957103689924e-1, 0.50827665301733204739, -0.68144690359198645258, 0.54649314555824013429, @@ -9623,18 +9625,18 @@ function ESERK4ConstantCache(zprev) 0.42889489524380913776, -0.43339465204555827071, 0.24975896366016311911, - 0.11201773715184132612e-03, + 0.11201773715184132612e-3, -0.17391678059485732311, 0.20218094137931744148, - -0.99741234295770947460e-01, - -0.37625496515231636463e-01, + -0.9974123429577094746e-1, + -0.37625496515231636463e-1, 0.11189538798871252745, - -0.65757820163130586977e-01, - -0.69792789651290335073e-01, + -0.65757820163130586977e-1, + -0.69792789651290335073e-1, 0.20997888674899226058, -0.25147114705636214316, 0.14759264542960820465, - 0.75109824084791831922e-01, + 0.75109824084791831922e-1, -0.31152052778615585416, 0.44219032247516842915, -0.38112754855845587532, @@ -9648,60 +9650,60 @@ function ESERK4ConstantCache(zprev) -0.59734873958222334256, 0.66339998010738432388, -0.46140017313255987652, - 0.69168191443210902403e-01, + 0.69168191443210902403e-1, 0.36028860900831144454, -0.65269958311967990472, 0.69125146235220857882, -0.45657082355419575936, - 0.41573865777582159897e-01, - 0.39240029404303239380, + 0.41573865777582159897e-1, + 0.3924002940430323938, -0.67358931857302339896, 0.69340780313672001345, -0.44325936367806173521, - 0.22198772658400849761e-01, + 0.22198772658400849761e-1, 0.40704138493456254455, -0.67744418681457707621, 0.68610526273829774979, -0.42998849039545983253, - 0.93631440252590746737e-02, + 0.93631440252590746737e-2, 0.41399375531225757197, -0.67695499306860718036, 0.67929617962527721886, -0.42035754308015227387, - 0.59170099523836172661e-01, + 0.59170099523836172661e-1, 0.37560667904523775684, -0.63044433879235262097, 0.73817794465588937314, -0.45810577523828349689, - 0.90502143854852626359e-01, + 0.90502143854852626359e-1, 0.41436041438687831739, -0.66058266724461467412, - 0.73882187119449560520, + 0.7388218711944956052, -0.41975484182278366418, - 0.21834555904106326546e-01, + 0.21834555904106326546e-1, 0.48600419582457188294, -0.70065174645672700926, 0.72076962741928840561, - -0.34111697130490947760, - -0.91169874886941310033e-01, - 0.58530633450899460790, + -0.3411169713049094776, + -0.91169874886941310033e-1, + 0.5853063345089946079, -0.73733474995956949094, 0.66774477707993262765, -0.21075238510987964746, -0.24824577154554430813, - 0.69817509903913821390, + 0.6981750990391382139, -0.74738156769323271789, 0.55762900251738078961, - -0.19222143128326544398e-01, - -0.43918667955046625240, + -0.19222143128326544398e-1, + -0.4391866795504662524, 0.79684953001576264153, -0.69709691077140789606, - 0.36743008959647954770, - 0.23208561859263415750, + 0.3674300895964795477, + 0.2320856185926341575, -0.63528103033670002553, 0.83642750423141820626, -0.54691595559214034594, - 0.84909991845728685633e-01, + 0.84909991845728685633e-1, 0.51748421406233557907, -0.78131687481713885113, 0.75800155940850766356, @@ -9714,11 +9716,11 @@ function ESERK4ConstantCache(zprev) -0.62867876282828494272, 0.88895049998644271039, -0.59331809306005156568, - 0.71552413672815118328e-01, + 0.71552413672815118328e-1, 0.58703723674670305055, -0.84692676145064771376, 0.74261703940890699815, - -0.13982501180790121720, + -0.1398250118079012172, -0.45692996974421096201, 0.89911992741831991971, -0.75335974452642462396, @@ -9738,130 +9740,130 @@ function ESERK4ConstantCache(zprev) -0.52963504528947458194, 0.99537875370437844946, -0.74293849422436786245, - 0.94564456973882840551e-01, - 0.71317270012518574340, + 0.94564456973882840551e-1, + 0.7131727001251857434, -0.97711673668741438892, 0.68410122502134895761, 0.15874493774457792972, -0.82096357149663923281, - 0.10205907473522193296e+01, + 0.10205907473522193296e+1, -0.43440243076456946936, -0.37704276966524313819, - 0.10234721689079706586e+01, + 0.10234721689079706586e+1, -0.87007726800696016944, 0.17761585998668821818, 0.74021217027819286027, - -0.10490339193736457624e+01, + -0.10490339193736457624e+1, 0.67594883219328927293, 0.29082906482950215965, -0.97177079871649219012, - 0.10121226494479407254e+01, + 0.10121226494479407254e+1, -0.19390351290956070462, -0.70535773051624794938, - 0.11531023317669937267e+01, + 0.11531023317669937267e+1, -0.61499459769344499982, -0.34090372422395659457, - 0.11225292317359976124e+01, + 0.11225292317359976124e+1, -0.92143544697338430893, - 0.39662737866369292272e-01, + 0.39662737866369292272e-1, 0.97411794186844957721, - -0.11058789699561166753e+01, + -0.11058789699561166753e+1, 0.38052812401701074929, 0.76782013694651862767, - -0.11901939958617857584e+01, + -0.11901939958617857584e+1, 0.65445046906223636185, 0.55497689594376398148, - -0.12097866256000011642e+01, + -0.12097866256000011642e+1, 0.85635349468153065811, 0.37286274812058300965, - -0.12016025484105314902e+01, + -0.12016025484105314902e+1, 0.99355941404354153335, 0.24594484754213258304, - -0.11969466028655650902e+01, - 0.10761857566323929092e+01, + -0.11969466028655650902e+1, + 0.10761857566323929092e+1, 0.19042835416113179647, - -0.12178108110559568988e+01, - 0.11091122487707558708e+01, + -0.12178108110559568988e+1, + 0.11091122487707558708e+1, 0.21905952472682069243, - -0.12742957804017986945e+01, - 0.10856498842861346255e+01, + -0.12742957804017986945e+1, + 0.10856498842861346255e+1, 0.34359893238912980751, - -0.13605649463865636672e+01, + -0.13605649463865636672e+1, 0.98310356691336864277, 0.57220591786785957034, - -0.14475128054536199329e+01, + -0.14475128054536199329e+1, 0.76216800732037892629, 0.89828690873657068838, - -0.14727349989327196411e+01, + -0.14727349989327196411e+1, 0.37576867970843691458, - 0.12776325204385075018e+01, - -0.13343169889840049702e+01, + 0.12776325204385075018e+1, + -0.13343169889840049702e+1, -0.20238815462391118727, - 0.15959407589609979627e+01, + 0.15959407589609979627e+1, -0.90625428451970935217, -0.91886051491008713388, - 0.16462070249419706869e+01, + 0.16462070249419706869e+1, -0.10672365001592190592, - -0.15584537540766623120e+01, - 0.11696955588525104197e+01, + -0.1558453754076662312e+1, + 0.11696955588525104197e+1, 0.95481323434456599752, - -0.17052851390036378731e+01, - 0.44828641024092764911e-01, - 0.18011824327727046224e+01, + -0.17052851390036378731e+1, + 0.44828641024092764911e-1, + 0.18011824327727046224e+1, -0.91042480021321614547, - -0.13550409383612074254e+01, - 0.16276391746850586983e+01, + -0.13550409383612074254e+1, + 0.16276391746850586983e+1, 0.76175660545958290282, - -0.19310886455797671157e+01, - -0.13840855488105808374e-01, - 0.20663459713149237018e+01, + -0.19310886455797671157e+1, + -0.13840855488105808374e-1, + 0.20663459713149237018e+1, -0.55830867571029618723, - -0.19373976811932493991e+01, - 0.10915047812066909216e+01, - 0.18548742331582457332e+01, - -0.13756678049605455261e+01, - -0.17163447145610186695e+01, - 0.16167252774603797505e+01, - 0.17910100552597951751e+01, - -0.16128035827046438566e+01, - -0.19241542581717629989e+01, - 0.15185236549343474888e+01, - 0.23136243035328054596e+01, - -0.10364833672691426969e+01, - -0.26748640657451092650e+01, + -0.19373976811932493991e+1, + 0.10915047812066909216e+1, + 0.18548742331582457332e+1, + -0.13756678049605455261e+1, + -0.17163447145610186695e+1, + 0.16167252774603797505e+1, + 0.17910100552597951751e+1, + -0.16128035827046438566e+1, + -0.19241542581717629989e+1, + 0.15185236549343474888e+1, + 0.23136243035328054596e+1, + -0.10364833672691426969e+1, + -0.2674864065745109265e+1, 0.22210725825618962692, - 0.29460326247680828082e+01, - 0.11957679360393949075e+01, - -0.24224151847462160880e+01, - -0.27290298118522215987e+01, + 0.29460326247680828082e+1, + 0.11957679360393949075e+1, + -0.2422415184746216088e+1, + -0.27290298118522215987e+1, 0.68959713147942580669, - 0.34665816758550032084e+01, - 0.23281728944946236126e+01, - -0.14035933029372567038e+01, - -0.39651335880013607316e+01, - -0.31671058933260116675e+01, + 0.34665816758550032084e+1, + 0.23281728944946236126e+1, + -0.14035933029372567038e+1, + -0.39651335880013607316e+1, + -0.31671058933260116675e+1, 0.14994211764325621195, - 0.36309826521748576056e+01, - 0.55213275936219901041e+01, - 0.55198187849067039679e+01, - 0.43310972634011637439e+01, - 0.28386158783998389765e+01, - 0.16021853333405922104e+01, + 0.36309826521748576056e+1, + 0.55213275936219901041e+1, + 0.55198187849067039679e+1, + 0.43310972634011637439e+1, + 0.28386158783998389765e+1, + 0.16021853333405922104e+1, 0.79255904258370046822, 0.34738574455294601862, 0.13587038892430991499, - 0.47637397498477770941e-01, - 0.15013467163735829540e-01, - 0.42591425002018856033e-02, - 0.10878511417583430505e-02, - 0.24996102295927113621e-03, - 0.51576160464748607563e-04, - 0.95296298922013251270e-05, - 0.15705405681767965572e-05, - 0.22967475856280587278e-06, - 0.29604053541559010250e-07, - 0.33343736840773665819e-08, - 0.32453662610583801986e-09, + 0.47637397498477770941e-1, + 0.1501346716373582954e-1, + 0.42591425002018856033e-2, + 0.10878511417583430505e-2, + 0.24996102295927113621e-3, + 0.51576160464748607563e-4, + 0.9529629892201325127e-5, + 0.15705405681767965572e-5, + 0.22967475856280587278e-6, + 0.2960405354155901025e-7, + 0.33343736840773665819e-8, + 0.32453662610583801986e-9, 0.26900789102381135126e-10, 0.18621900964536584299e-11, 0.10476795404098179779e-12, @@ -9869,355 +9871,355 @@ function ESERK4ConstantCache(zprev) 0.14817788104904817198e-15, 0.31091685029792417895e-17, 0.31914749621199350712e-19, - -0.54082328687370517101e-02, - 0.96852240284014245314e-02, - -0.92719701021588725454e-02, - 0.68336556178317442098e-02, - -0.55409165667599678470e-02, - 0.27564039727983402975e-02, - -0.16526780642575258223e-02, - -0.50682700340212792200e-03, - 0.72612743034748412473e-03, - -0.19560326337333708117e-02, - 0.14057049095298227923e-02, - -0.21783185422375238131e-02, - 0.15516942494188934714e-02, - -0.26023455749871042021e-02, - 0.24964805320119298759e-02, - -0.41430944995608431566e-02, - 0.45293836736033342427e-02, - -0.64073985871326401623e-02, - 0.67144970209876125161e-02, - -0.80909811638974933612e-02, - 0.79851147579943059646e-02, - -0.78767640389291390668e-02, - 0.92269635777986434844e-02, - -0.35960845775587172574e-02, - 0.16611015525976713381e-01, - 0.11889818719143645590e-01, - 0.42842008609955288534e-01, - 0.46990871099149268686e-01, - 0.85808911076473148860e-01, - 0.74406024211069093921e-01, - 0.84510007789917282461e-01, - 0.20038027174562138971e-01, - -0.82706970652530360788e-02, - -0.70355922213597432702e-01, - -0.41959540265442650531e-01, - -0.13539599506120053238e-01, - 0.52257394375963849009e-01, - 0.40966669443991868271e-01, - 0.53966188529951343231e-02, - -0.52305616278785202478e-01, - -0.24443755011838610991e-01, - 0.11258544797566407553e-01, - 0.56607670186256425771e-01, - -0.11527088499437211644e-01, - -0.25539715071700084398e-01, - -0.34247984488687620297e-01, - 0.43980210543709555293e-01, - 0.20160902369011753088e-01, - -0.19210508868667444671e-01, - -0.31235975274937599622e-01, - 0.11086610680406687804e-01, - 0.41765478204930067685e-01, - -0.23236869729048190147e-01, - -0.23897608825361172508e-01, - 0.78240026967969326932e-02, - 0.31161887522496337088e-01, - -0.10294692932778130162e-01, - -0.37428807362261617975e-01, - 0.31335145298542345371e-01, - 0.99248088044564912458e-02, - -0.11208011431129753788e-01, - -0.24822637666170495330e-01, - 0.28590769919141320599e-01, - 0.13543732374952689723e-01, - -0.40368498489177839783e-01, - 0.18221392510312430651e-01, - 0.89267039300463882356e-02, - 0.44019766999740953320e-02, - -0.35298922197533187661e-01, - 0.32115747059888455350e-01, - 0.51026097910418276651e-02, - -0.27552726497047406312e-01, - 0.97557995459783015263e-02, - 0.16633687285993101895e-01, - -0.12471577390624497342e-01, - -0.14554140818088513731e-01, - 0.23628705589973583723e-01, - 0.67597833654299273147e-03, - -0.28912388944669777102e-01, - 0.26603553926562904797e-01, - 0.13531020058661913374e-02, - -0.20278828681698658071e-01, - 0.10516466716254377345e-01, - 0.93513739608440758083e-02, - -0.90216007690695730614e-02, - -0.15669295742028493956e-01, - 0.38109469585641098099e-01, - -0.34113936845136666465e-01, - 0.94436909417508051873e-02, - 0.77509851848447733347e-02, - -0.14783992257686407129e-04, - -0.21570864513812584851e-01, - 0.31356388435697879480e-01, - -0.18676459861876174018e-01, - -0.20558514269167836412e-02, - 0.81867923045227993656e-02, - 0.57110762050014808947e-02, - -0.22979075786242079971e-01, - 0.22547430239574537542e-01, - -0.12296850262179270276e-02, - -0.23932036647923395772e-01, - 0.32518012029852855216e-01, - -0.20567294014936173679e-01, - 0.23142076618038165924e-02, - 0.46512690164607264215e-02, - 0.31042807027449295827e-02, - -0.13171275156129440623e-01, - 0.10186047568897063295e-01, - 0.82521091772340821047e-02, - -0.29352932530689400392e-01, - 0.36328256578100501240e-01, - -0.23786370071806145488e-01, - 0.17905015539806982353e-02, - 0.12740974892809862895e-01, - -0.10670389877491486333e-01, - -0.30714618811046776568e-02, - 0.14628198678642428954e-01, - -0.14042537346207341342e-01, - 0.29176307448618870634e-02, - 0.75733676301979278161e-02, - -0.73865079695198676557e-02, - -0.39715511489383037783e-02, - 0.16726037261017841912e-01, - -0.19478840971137219990e-01, - 0.83356912383541949957e-02, - 0.94105234823635853375e-02, - -0.21177672153602413591e-01, - 0.18251472380976012377e-01, - -0.25048036659290947442e-02, - -0.15583863219059714694e-01, - 0.24323022068251268918e-01, - -0.19248680515599417978e-01, - 0.51943294931750634211e-02, - 0.76730901970611066140e-02, - -0.11772858869413154945e-01, - 0.67668132370571829060e-02, - 0.84175996929705416277e-03, - -0.36320635675128375500e-02, - -0.12072397041091626098e-02, - 0.95662362759396796230e-02, - -0.14000551803545589410e-01, - 0.92104219622864240413e-02, - 0.34371374489841439656e-02, - -0.16701465786362522381e-01, - 0.21845789077730746325e-01, - -0.14719227598933057322e-01, - -0.16399843385312240333e-02, - 0.18445109671466491247e-01, - -0.26733792725702771459e-01, - 0.22431400569254026506e-01, - -0.88528173133626143071e-02, - -0.57673207206855861204e-02, - 0.12993418663810339664e-01, - -0.92112876305978537428e-02, - -0.29363318599270760850e-02, - 0.16324633649999836793e-01, - -0.23934759118293787855e-01, - 0.22488655889114701758e-01, - -0.14008476702861814497e-01, - 0.38009206610514524594e-02, - 0.27614537837303138046e-02, - -0.34511769008084875084e-02, - -0.25368514797147493842e-03, - 0.45335442596715859118e-02, - -0.62121014843853896922e-02, - 0.46543897943862296354e-02, - -0.21860065980350111559e-02, - 0.21741438821004334045e-02, - -0.67692178213874252060e-02, - 0.15082908198152677332e-01, - -0.23609388878134327655e-01, - 0.28011208001212376667e-01, - -0.25839832274981454352e-01, - 0.17971561668349386731e-01, - -0.84721850376398167431e-02, - 0.23365683537623902800e-02, - -0.28746013587476432032e-02, - 0.96454273691223141318e-02, - -0.18612619168080171694e-01, - 0.24002028948790152252e-01, - -0.21409401238604165718e-01, - 0.10102453982591838577e-01, - 0.62475111987400980262e-02, - -0.21236865204825483566e-01, - 0.28613392828718820643e-01, - -0.25350012185379782598e-01, - 0.13050027386396913232e-01, - 0.26678997598636646632e-02, - -0.14838187304309500419e-01, - 0.18305916107247747343e-01, - -0.12158699080935815584e-01, - 0.35542788214235403416e-04, - 0.11585206574653422740e-01, - -0.16523605904029528557e-01, - 0.11796287609359369306e-01, - 0.89784196920124445963e-03, - -0.15945589135387731872e-01, - 0.26350791604662159029e-01, - -0.26977061164913412883e-01, - 0.16920888621999762708e-01, - 0.13717953425252612382e-01, - -0.43477013608125489319e-01, - 0.31497627198050062725e-01, - -0.14489316202246395326e-01, - -0.20629582440749156397e-01, - 0.40379796183642416296e-01, - -0.55325614968300587670e-01, - 0.39908133615245956760e-01, - -0.20727966300937341465e-01, - -0.10491288121851021983e-01, - 0.17350581661967554026e-01, - -0.12047464482065811664e-01, - -0.24185508213520185566e-01, - 0.55180917259951452192e-01, - -0.81332270713869864176e-01, - 0.64512240309077567568e-01, - -0.23186030340831772362e-01, - -0.49275188856506287050e-01, + -0.54082328687370517101e-2, + 0.96852240284014245314e-2, + -0.92719701021588725454e-2, + 0.68336556178317442098e-2, + -0.5540916566759967847e-2, + 0.27564039727983402975e-2, + -0.16526780642575258223e-2, + -0.506827003402127922e-3, + 0.72612743034748412473e-3, + -0.19560326337333708117e-2, + 0.14057049095298227923e-2, + -0.21783185422375238131e-2, + 0.15516942494188934714e-2, + -0.26023455749871042021e-2, + 0.24964805320119298759e-2, + -0.41430944995608431566e-2, + 0.45293836736033342427e-2, + -0.64073985871326401623e-2, + 0.67144970209876125161e-2, + -0.80909811638974933612e-2, + 0.79851147579943059646e-2, + -0.78767640389291390668e-2, + 0.92269635777986434844e-2, + -0.35960845775587172574e-2, + 0.16611015525976713381e-1, + 0.1188981871914364559e-1, + 0.42842008609955288534e-1, + 0.46990871099149268686e-1, + 0.8580891107647314886e-1, + 0.74406024211069093921e-1, + 0.84510007789917282461e-1, + 0.20038027174562138971e-1, + -0.82706970652530360788e-2, + -0.70355922213597432702e-1, + -0.41959540265442650531e-1, + -0.13539599506120053238e-1, + 0.52257394375963849009e-1, + 0.40966669443991868271e-1, + 0.53966188529951343231e-2, + -0.52305616278785202478e-1, + -0.24443755011838610991e-1, + 0.11258544797566407553e-1, + 0.56607670186256425771e-1, + -0.11527088499437211644e-1, + -0.25539715071700084398e-1, + -0.34247984488687620297e-1, + 0.43980210543709555293e-1, + 0.20160902369011753088e-1, + -0.19210508868667444671e-1, + -0.31235975274937599622e-1, + 0.11086610680406687804e-1, + 0.41765478204930067685e-1, + -0.23236869729048190147e-1, + -0.23897608825361172508e-1, + 0.78240026967969326932e-2, + 0.31161887522496337088e-1, + -0.10294692932778130162e-1, + -0.37428807362261617975e-1, + 0.31335145298542345371e-1, + 0.99248088044564912458e-2, + -0.11208011431129753788e-1, + -0.2482263766617049533e-1, + 0.28590769919141320599e-1, + 0.13543732374952689723e-1, + -0.40368498489177839783e-1, + 0.18221392510312430651e-1, + 0.89267039300463882356e-2, + 0.4401976699974095332e-2, + -0.35298922197533187661e-1, + 0.3211574705988845535e-1, + 0.51026097910418276651e-2, + -0.27552726497047406312e-1, + 0.97557995459783015263e-2, + 0.16633687285993101895e-1, + -0.12471577390624497342e-1, + -0.14554140818088513731e-1, + 0.23628705589973583723e-1, + 0.67597833654299273147e-3, + -0.28912388944669777102e-1, + 0.26603553926562904797e-1, + 0.13531020058661913374e-2, + -0.20278828681698658071e-1, + 0.10516466716254377345e-1, + 0.93513739608440758083e-2, + -0.90216007690695730614e-2, + -0.15669295742028493956e-1, + 0.38109469585641098099e-1, + -0.34113936845136666465e-1, + 0.94436909417508051873e-2, + 0.77509851848447733347e-2, + -0.14783992257686407129e-4, + -0.21570864513812584851e-1, + 0.3135638843569787948e-1, + -0.18676459861876174018e-1, + -0.20558514269167836412e-2, + 0.81867923045227993656e-2, + 0.57110762050014808947e-2, + -0.22979075786242079971e-1, + 0.22547430239574537542e-1, + -0.12296850262179270276e-2, + -0.23932036647923395772e-1, + 0.32518012029852855216e-1, + -0.20567294014936173679e-1, + 0.23142076618038165924e-2, + 0.46512690164607264215e-2, + 0.31042807027449295827e-2, + -0.13171275156129440623e-1, + 0.10186047568897063295e-1, + 0.82521091772340821047e-2, + -0.29352932530689400392e-1, + 0.3632825657810050124e-1, + -0.23786370071806145488e-1, + 0.17905015539806982353e-2, + 0.12740974892809862895e-1, + -0.10670389877491486333e-1, + -0.30714618811046776568e-2, + 0.14628198678642428954e-1, + -0.14042537346207341342e-1, + 0.29176307448618870634e-2, + 0.75733676301979278161e-2, + -0.73865079695198676557e-2, + -0.39715511489383037783e-2, + 0.16726037261017841912e-1, + -0.1947884097113721999e-1, + 0.83356912383541949957e-2, + 0.94105234823635853375e-2, + -0.21177672153602413591e-1, + 0.18251472380976012377e-1, + -0.25048036659290947442e-2, + -0.15583863219059714694e-1, + 0.24323022068251268918e-1, + -0.19248680515599417978e-1, + 0.51943294931750634211e-2, + 0.7673090197061106614e-2, + -0.11772858869413154945e-1, + 0.6766813237057182906e-2, + 0.84175996929705416277e-3, + -0.363206356751283755e-2, + -0.12072397041091626098e-2, + 0.9566236275939679623e-2, + -0.1400055180354558941e-1, + 0.92104219622864240413e-2, + 0.34371374489841439656e-2, + -0.16701465786362522381e-1, + 0.21845789077730746325e-1, + -0.14719227598933057322e-1, + -0.16399843385312240333e-2, + 0.18445109671466491247e-1, + -0.26733792725702771459e-1, + 0.22431400569254026506e-1, + -0.88528173133626143071e-2, + -0.57673207206855861204e-2, + 0.12993418663810339664e-1, + -0.92112876305978537428e-2, + -0.2936331859927076085e-2, + 0.16324633649999836793e-1, + -0.23934759118293787855e-1, + 0.22488655889114701758e-1, + -0.14008476702861814497e-1, + 0.38009206610514524594e-2, + 0.27614537837303138046e-2, + -0.34511769008084875084e-2, + -0.25368514797147493842e-3, + 0.45335442596715859118e-2, + -0.62121014843853896922e-2, + 0.46543897943862296354e-2, + -0.21860065980350111559e-2, + 0.21741438821004334045e-2, + -0.6769217821387425206e-2, + 0.15082908198152677332e-1, + -0.23609388878134327655e-1, + 0.28011208001212376667e-1, + -0.25839832274981454352e-1, + 0.17971561668349386731e-1, + -0.84721850376398167431e-2, + 0.233656835376239028e-2, + -0.28746013587476432032e-2, + 0.96454273691223141318e-2, + -0.18612619168080171694e-1, + 0.24002028948790152252e-1, + -0.21409401238604165718e-1, + 0.10102453982591838577e-1, + 0.62475111987400980262e-2, + -0.21236865204825483566e-1, + 0.28613392828718820643e-1, + -0.25350012185379782598e-1, + 0.13050027386396913232e-1, + 0.26678997598636646632e-2, + -0.14838187304309500419e-1, + 0.18305916107247747343e-1, + -0.12158699080935815584e-1, + 0.35542788214235403416e-4, + 0.1158520657465342274e-1, + -0.16523605904029528557e-1, + 0.11796287609359369306e-1, + 0.89784196920124445963e-3, + -0.15945589135387731872e-1, + 0.26350791604662159029e-1, + -0.26977061164913412883e-1, + 0.16920888621999762708e-1, + 0.13717953425252612382e-1, + -0.43477013608125489319e-1, + 0.31497627198050062725e-1, + -0.14489316202246395326e-1, + -0.20629582440749156397e-1, + 0.40379796183642416296e-1, + -0.5532561496830058767e-1, + 0.3990813361524595676e-1, + -0.20727966300937341465e-1, + -0.10491288121851021983e-1, + 0.17350581661967554026e-1, + -0.12047464482065811664e-1, + -0.24185508213520185566e-1, + 0.55180917259951452192e-1, + -0.81332270713869864176e-1, + 0.64512240309077567568e-1, + -0.23186030340831772362e-1, + -0.4927518885650628705e-1, 0.10430361900116058571, -0.13598775075014116198, 0.10978303365362128419, - -0.56311635895959548381e-01, - -0.16527786577339810548e-01, - 0.51592285433102590131e-01, - -0.46248458129106870262e-01, - -0.18960927307903517602e-01, - 0.93333083865697552550e-01, + -0.56311635895959548381e-1, + -0.16527786577339810548e-1, + 0.51592285433102590131e-1, + -0.46248458129106870262e-1, + -0.18960927307903517602e-1, + 0.9333308386569755255e-1, -0.15435668080306083616, 0.14450615754260565105, - -0.76820989469148476259e-01, - -0.43215676661403391867e-01, + -0.76820989469148476259e-1, + -0.43215676661403391867e-1, 0.14327954858912841929, -0.19428436744864344132, 0.15140518095325197767, - -0.53172578364917885696e-01, - -0.70931895574722819697e-01, + -0.53172578364917885696e-1, + -0.70931895574722819697e-1, 0.14060570535999120101, -0.14089735228549460366, - 0.56581681403850857259e-01, - 0.45463291021469877384e-01, + 0.56581681403850857259e-1, + 0.45463291021469877384e-1, -0.12620117874839373306, 0.12246159590898224312, - -0.55482799808029684141e-01, - -0.54586551197158821036e-01, + -0.55482799808029684141e-1, + -0.54586551197158821036e-1, 0.12747999914634727814, -0.14213945356346910365, - 0.75535744728972481488e-01, - 0.12578735053446431919e-01, - -0.89675064294669995513e-01, - 0.98989188156999849411e-01, - -0.66095178797094492062e-01, - 0.87648541043439023163e-02, - 0.61737352957918637322e-02, - 0.18872838356672850396e-01, - -0.82271960105231592419e-01, + 0.75535744728972481488e-1, + 0.12578735053446431919e-1, + -0.89675064294669995513e-1, + 0.98989188156999849411e-1, + -0.66095178797094492062e-1, + 0.87648541043439023163e-2, + 0.61737352957918637322e-2, + 0.18872838356672850396e-1, + -0.82271960105231592419e-1, 0.11233457780892013023, - -0.88097445605107072009e-01, - -0.12776465390300278946e-01, + -0.88097445605107072009e-1, + -0.12776465390300278946e-1, 0.12229631299106033526, -0.19448042456825015423, 0.16499689282595295103, - -0.68496702091745687024e-01, - -0.50905185457264467974e-01, - 0.95582035754672722838e-01, - -0.51216888434459553747e-01, - -0.71745349728483412410e-01, + -0.68496702091745687024e-1, + -0.50905185457264467974e-1, + 0.95582035754672722838e-1, + -0.51216888434459553747e-1, + -0.7174534972848341241e-1, 0.17207980887801332948, -0.19671729508423560495, 0.10748522822240233476, - 0.21514175755508374577e-01, + 0.21514175755508374577e-1, -0.12672762334031406617, 0.13165698754299831608, - -0.71796313744251133437e-01, - -0.34522748259602858110e-02, - 0.33386685950142578477e-02, - 0.61029116364223624791e-01, - -0.15018469514213847460, + -0.71796313744251133437e-1, + -0.3452274825960285811e-2, + 0.33386685950142578477e-2, + 0.61029116364223624791e-1, + -0.1501846951421384746, 0.15882218641600553966, - -0.72173983729802354548e-01, - -0.81795484343590726950e-01, + -0.72173983729802354548e-1, + -0.8179548434359072695e-1, 0.17869670673253040816, -0.16233002663876086591, - 0.24773808496751145020e-01, + 0.2477380849675114502e-1, 0.11406820967746481021, -0.16804331653644646871, - 0.87269482959087985030e-01, - 0.32697614968062740926e-01, - -0.99268761266063099136e-01, - 0.37736392929998592571e-01, - 0.74741767170781320262e-01, + 0.8726948295908798503e-1, + 0.32697614968062740926e-1, + -0.99268761266063099136e-1, + 0.37736392929998592571e-1, + 0.74741767170781320262e-1, -0.14316393193409718276, - 0.77512294248699917243e-01, - 0.52990241825210386561e-01, + 0.77512294248699917243e-1, + 0.52990241825210386561e-1, -0.14258321431575435301, - 0.81257852585614298579e-01, - 0.70425091451980184609e-01, + 0.81257852585614298579e-1, + 0.70425091451980184609e-1, -0.19348057172760965705, 0.15332521477445076874, - 0.45494531039934763342e-02, + 0.45494531039934763342e-2, -0.15658900734018474377, 0.15352696270707077986, - -0.32213361350356871371e-01, - -0.83161736457781187948e-01, - 0.45920985604959226045e-01, - 0.91599477654418559602e-01, + -0.32213361350356871371e-1, + -0.83161736457781187948e-1, + 0.45920985604959226045e-1, + 0.91599477654418559602e-1, -0.18717143434085034559, - 0.95881788437477036280e-01, + 0.9588178843747703628e-1, 0.10204033515035672297, -0.23393436082439192369, 0.15250725776502607745, - 0.37097043862294482031e-01, + 0.37097043862294482031e-1, -0.14724495867316653164, - 0.55717410779413070743e-01, - 0.89628236754058746016e-01, - -0.99767089026490216042e-01, - -0.84422446803042783259e-01, + 0.55717410779413070743e-1, + 0.89628236754058746016e-1, + -0.99767089026490216042e-1, + -0.84422446803042783259e-1, 0.24415209046018285233, -0.19373094055525738599, - -0.45047094794396037865e-01, + -0.45047094794396037865e-1, 0.19250247528477396064, -0.10769600322424512095, - -0.86131540976016857103e-01, - 0.94383200288028865077e-01, + -0.86131540976016857103e-1, + 0.94383200288028865077e-1, 0.10129235536887147562, -0.25600998863646362569, 0.12432700946603046643, 0.13370349405004133825, -0.20228498117203860818, - -0.97532528363960240697e-02, - 0.16722011449133206140, - -0.33752228630765136741e-01, + -0.97532528363960240697e-2, + 0.1672201144913320614, + -0.33752228630765136741e-1, -0.22012707957132965353, 0.19415432389268011404, - 0.77417250168173301628e-01, + 0.77417250168173301628e-1, -0.19592490894919445399, - -0.47115275147837053227e-01, + -0.47115275147837053227e-1, 0.26145319698951019483, -0.10900139160934618765, -0.17596065544266720204, - 0.93703580528928534510e-01, + 0.9370358052892853451e-1, 0.21360963553803916093, -0.20654595291083271968, -0.15866431540794428967, 0.25201439588179092022, - 0.63378672655637360855e-01, + 0.63378672655637360855e-1, -0.17749078615861058061, -0.18450871112794006712, 0.32881537994009546466, - 0.48103781363353352585e-01, + 0.48103781363353352585e-1, -0.23304203210641222244, -0.14560640134320904093, 0.24232779726633077444, @@ -10225,118 +10227,118 @@ function ESERK4ConstantCache(zprev) -0.26917409133976244462, -0.22502192691831912619, 0.13838090590581927919, - 0.31812313964679367340, - 0.13499105803194018632e-02, + 0.3181231396467936734, + 0.13499105803194018632e-2, -0.40003042680991746094, -0.12207333690348623478, 0.20868439653722264948, 0.39489705037375827379, - -0.27363547942901179227e-02, + -0.27363547942901179227e-2, -0.41048732615893396281, -0.29783377506635255738, - -0.58564799370916700849e-01, + -0.58564799370916700849e-1, 0.52665850729859864376, 0.35398259720824631902, 0.26041932352302027409, -0.33131041303930114372, - -0.55529756162876497960, + -0.5552975616287649796, -0.66950315911672619862, -0.66910865983687184411, -0.35772013122739698687, -0.39169880273483714817, - -0.46624622888301915646e-01, + -0.46624622888301915646e-1, -0.17327019986471006718, - 0.34354490887727989756e-01, - -0.47801528309840198017e-01, - -0.64763945836327418623e-02, - 0.30065426043906579023e-01, - -0.51833760131105702240e-01, - 0.57370192513415310676e-01, - -0.49712089437763125332e-01, - 0.30285433482570966318e-01, - -0.36654387469412688487e-02, - -0.24267224320014615935e-01, - 0.47601962061581432062e-01, - -0.61069934175482468164e-01, - 0.61493000469553936449e-01, - -0.47933412344684463158e-01, - 0.22297901249928833017e-01, - 0.11365324205233742760e-01, - -0.47233435800680970140e-01, - 0.79045480096600589937e-01, + 0.34354490887727989756e-1, + -0.47801528309840198017e-1, + -0.64763945836327418623e-2, + 0.30065426043906579023e-1, + -0.5183376013110570224e-1, + 0.57370192513415310676e-1, + -0.49712089437763125332e-1, + 0.30285433482570966318e-1, + -0.36654387469412688487e-2, + -0.24267224320014615935e-1, + 0.47601962061581432062e-1, + -0.61069934175482468164e-1, + 0.61493000469553936449e-1, + -0.47933412344684463158e-1, + 0.22297901249928833017e-1, + 0.1136532420523374276e-1, + -0.4723343580068097014e-1, + 0.79045480096600589937e-1, -0.10094285185092832791, 0.10874895004373624774, -0.10052325330573855244, - 0.77087659394687035874e-01, - -0.41782370460296154591e-01, - 0.52664913981705079038e-01, - -0.39680975087527027567e-01, - 0.57928943555243909980e-02, - 0.59862859864703660273e-01, - -0.77675751715912053075e-01, + 0.77087659394687035874e-1, + -0.41782370460296154591e-1, + 0.52664913981705079038e-1, + -0.39680975087527027567e-1, + 0.5792894355524390998e-2, + 0.59862859864703660273e-1, + -0.77675751715912053075e-1, 0.11399459654324964331, - -0.94582898710832821743e-01, - 0.92671416426138561451e-01, - -0.41183061319976566050e-01, - 0.19315042407062558288e-01, - 0.36364590784827705017e-01, - -0.46176609462767997938e-01, - 0.76313229724180434155e-01, - -0.52668555624204332899e-01, - 0.48655465195417059443e-01, - 0.23404294468478401871e-02, - -0.20829864871923630537e-01, - 0.69744453543648221583e-01, - -0.70343035927629554704e-01, - 0.86220015680868483665e-01, - -0.55101844937265623270e-01, - 0.16987136939016902332e-01, - -0.95563980507474520498e-02, - -0.16290029706327369130, + -0.94582898710832821743e-1, + 0.92671416426138561451e-1, + -0.4118306131997656605e-1, + 0.19315042407062558288e-1, + 0.36364590784827705017e-1, + -0.46176609462767997938e-1, + 0.76313229724180434155e-1, + -0.52668555624204332899e-1, + 0.48655465195417059443e-1, + 0.23404294468478401871e-2, + -0.20829864871923630537e-1, + 0.69744453543648221583e-1, + -0.70343035927629554704e-1, + 0.86220015680868483665e-1, + -0.5510184493726562327e-1, + 0.16987136939016902332e-1, + -0.95563980507474520498e-2, + -0.1629002970632736913, -0.11804277171463717355, -0.58565869132742598424, -0.72082131391373482909, - -0.14274830276519339112e+01, - -0.17789086357988503906e+01, - -0.20373419323674455406e+01, - -0.18088960340082356204e+01, + -0.14274830276519339112e+1, + -0.17789086357988503906e+1, + -0.20373419323674455406e+1, + -0.18088960340082356204e+1, -0.66828694971458302287, 0.36074630520446815396, - 0.15423177235215632663e+01, - 0.11501097713061227967e+01, + 0.15423177235215632663e+1, + 0.11501097713061227967e+1, 0.17353448910023860918, - -0.10831887869731946505e+01, - -0.11799113733209884991e+01, - 0.95970445547340493819e-01, - 0.10046222618641840185e+01, + -0.10831887869731946505e+1, + -0.11799113733209884991e+1, + 0.95970445547340493819e-1, + 0.10046222618641840185e+1, 0.85588584106897902526, - -0.54613076630707557690, - -0.10882650325062199759e+01, - 0.25835625231044153510e-01, + -0.5461307663070755769, + -0.10882650325062199759e+1, + 0.2583562523104415351e-1, 0.83366280426426242478, 0.64005610714286853558, - -0.91522288101807813820, + -0.9152228810180781382, -0.58314975162157245414, 0.52586896127972249104, 0.71072265248417687555, -0.24095377167358331127, - -0.10245657430691497147e+01, + -0.10245657430691497147e+1, 0.58775841016829200036, 0.52921017877358467185, -0.12545343220014268382, -0.82604297045645669328, 0.33604052013473623139, - 0.80832861292117874630, - -0.67161076950996301260, - -0.29675285617335239730, + 0.8083286129211787463, + -0.6716107695099630126, + -0.2967528561733523973, 0.29589247933541329427, 0.60891969323190675567, -0.74270869891633928273, - -0.22495520311340361230, + -0.2249552031134036123, 0.83066198115441225447, -0.26900236258888238217, -0.40070844412709655247, - 0.86946528679510470816e-01, + 0.86946528679510470816e-1, 0.66160688667292288923, -0.60257526135095451636, -0.26437335819591067931, @@ -10346,10 +10348,10 @@ function ESERK4ConstantCache(zprev) 0.27735038064115147272, 0.35106470252022886624, -0.55394304244679559712, - -0.38781649602113062170e-01, + -0.3878164960211306217e-1, 0.72348423858689614452, -0.67408330240708347336, - 0.11971278881724346441e-01, + 0.11971278881724346441e-1, 0.42932522733885569721, -0.17523273021239169078, -0.32774962401413998414, @@ -10357,7 +10359,7 @@ function ESERK4ConstantCache(zprev) 0.20272380147188556743, -0.70209943403214458701, 0.56948527306310603446, - 0.54077811546426379774e-01, + 0.54077811546426379774e-1, -0.48824323793269308602, 0.31215298743415026417, 0.21121789506085672516, @@ -10365,49 +10367,49 @@ function ESERK4ConstantCache(zprev) 0.19576752049714193915, 0.25634021835689613233, -0.34935938163058444239, - -0.41556703519743956599e-01, + -0.41556703519743956599e-1, 0.51279283764186200933, -0.55297770353497799345, - 0.82490564163966259570e-01, - 0.49375413068839224540, + 0.8249056416396625957e-1, + 0.4937541306883922454, -0.68655033584066571528, 0.40216061356678439731, - 0.19804555059330652966e-01, + 0.19804555059330652966e-1, -0.15861143156041584978, - -0.63870540779120438257e-01, + -0.63870540779120438257e-1, 0.34677084848708078502, -0.31633735373539140223, - -0.88009171423886145558e-01, + -0.88009171423886145558e-1, 0.56339450322478767941, -0.70829747767128325986, 0.39534051620120813642, 0.13480557616164393075, -0.47630455625257328567, 0.41259516141690122382, - -0.63665970263446627908e-01, + -0.63665970263446627908e-1, -0.23439844698600217909, 0.24081491405285421203, - 0.89554912168971420594e-02, + 0.89554912168971420594e-2, -0.24755227661022083385, 0.23550903658348232295, - 0.39787354382754568094e-01, + 0.39787354382754568094e-1, -0.34373543280463503269, 0.40488160477028345419, - -0.13075373428041889290, + -0.1307537342804188929, -0.30102842368484583613, 0.58748355504982607833, -0.51737844228213658582, - 0.13551102086866553820, + 0.1355110208686655382, 0.30756132650410067386, -0.53015765518505320042, - 0.42484950968740925470, + 0.4248495096874092547, -0.10558356979341758375, -0.18460717229467407674, 0.26607890256376687255, -0.13153328678339429314, - -0.61252204799444917582e-01, + -0.61252204799444917582e-1, 0.13423925836521677368, - -0.19378370949873737622e-01, + -0.19378370949873737622e-1, -0.18348459346538595338, 0.29515882898214396146, -0.18639354372072761135, @@ -10415,10 +10417,10 @@ function ESERK4ConstantCache(zprev) 0.42571492233975521957, -0.54864636170411584803, 0.38180603917640382194, - 0.19502870162477073737e-02, + 0.19502870162477073737e-2, -0.39134665949258240492, 0.57251386434182294227, - -0.44838625580852975450, + -0.4483862558085297545, 0.10061416778488170565, 0.27186473750836631647, -0.46435415101727656184, @@ -10428,25 +10430,25 @@ function ESERK4ConstantCache(zprev) 0.39189236771466817721, -0.36236466635331215924, 0.16762400955100217881, - 0.67139285316066457665e-01, + 0.67139285316066457665e-1, -0.21461595972721270176, 0.22380594300076053771, -0.13168587354631799968, - 0.31762741915966383188e-01, - -0.78138295444268326094e-03, - 0.54478618121820032716e-01, + 0.31762741915966383188e-1, + -0.78138295444268326094e-3, + 0.54478618121820032716e-1, -0.13606956932008379413, 0.16368399448693055076, - -0.83348702838610566612e-01, - -0.85832842828264685475e-01, + -0.83348702838610566612e-1, + -0.85832842828264685475e-1, 0.26280830326313908696, -0.34597475624752921375, 0.27937277592552273164, - -0.85771907162338165143e-01, - -0.13569306393123065080, + -0.85771907162338165143e-1, + -0.1356930639312306508, 0.26496715195379483276, -0.22286455030666296739, - 0.21604051121166676502e-01, + 0.21604051121166676502e-1, 0.23995480951649189594, -0.42017845861952313191, 0.41033924130433341304, @@ -10455,29 +10457,29 @@ function ESERK4ConstantCache(zprev) 0.48015821495702165622, -0.62968710423330964687, 0.53508588136063217622, - -0.23496120396733677360, + -0.2349612039673367736, -0.13637964172406252805, 0.41345122860207178528, -0.47470181692770829773, 0.30113828206436837887, - 0.16963467558630186682e-01, - -0.32102808249354669590, + 0.16963467558630186682e-1, + -0.3210280824935466959, 0.46012563482338569854, -0.36044622529408143485, - 0.61433002682137659300e-01, + 0.614330026821376593e-1, 0.30278056129772923377, - -0.56387656336039027050, + -0.5638765633603902705, 0.59740056255627027593, -0.37971233688072608681, -0.12848209518892142467, 0.64499799819646574939, -0.68332983095360710912, 0.54499199760802208292, - -0.91306299929195866572e-01, + -0.91306299929195866572e-1, -0.27984047702630421295, 0.59178554205190814219, -0.50448422717453456077, - 0.25597511176725007420, + 0.2559751117672500742, 0.21687584135236256944, -0.47122573949050988729, 0.54603891649706659539, @@ -10486,182 +10488,182 @@ function ESERK4ConstantCache(zprev) 0.78382230686090548222, -0.88810410044535192942, 0.68894015736053293431, - -0.55374536781855797363e-01, + -0.55374536781855797363e-1, -0.53162020411295118905, 0.97861355144439687859, -0.86364761317727600787, 0.42675555494845268667, 0.30129953152501365299, -0.74102184790902858591, - 0.82570070834568909390, + 0.8257007083456890939, -0.28635741354248683832, -0.42835700557994049742, - 0.11308241997549939306e+01, - -0.12279478659731151158e+01, + 0.11308241997549939306e+1, + -0.12279478659731151158e+1, 0.80214527848380345887, 0.17107366243097443803, - -0.10311637002383295947e+01, - 0.15296415631204329788e+01, - -0.12073362511484526660e+01, + -0.10311637002383295947e+1, + 0.15296415631204329788e+1, + -0.1207336251148452666e+1, 0.40928154425437995867, 0.64192450125193245558, - -0.12025166832009968054e+01, - 0.11667911008196076850e+01, - -0.37874642645372097460, + -0.12025166832009968054e+1, + 0.1166791100819607685e+1, + -0.3787464264537209746, -0.52228903462846709704, - 0.12058242573498012540e+01, - -0.10890792448385702151e+01, + 0.1205824257349801254e+1, + -0.10890792448385702151e+1, 0.42136185862536712499, 0.60195245949190345769, - -0.12071898864855632461e+01, - 0.12417596869954830030e+01, + -0.12071898864855632461e+1, + 0.1241759686995483003e+1, -0.52346225352415332033, - -0.31284782593512072690, + -0.3128478259351207269, 0.94648880348969122167, - -0.83882394112255087570, + -0.8388239411225508757, 0.30692074841154237674, 0.41448808863624719834, -0.60592691005251975156, - 0.27875845848631830570, + 0.2787584584863183057, 0.53810251000405107114, - -0.10782598907534579613e+01, - 0.10781967609692031385e+01, + -0.10782598907534579613e+1, + 0.10781967609692031385e+1, -0.25688019598817241063, -0.73411271874900962953, - 0.14432353595740776697e+01, - -0.11997423202271602083e+01, + 0.14432353595740776697e+1, + -0.11997423202271602083e+1, 0.31446288833561475418, 0.81722893192171386367, - -0.12432211572086371287e+01, + -0.12432211572086371287e+1, 0.83006202396783779207, 0.34056275416851444771, - -0.12881107343398126019e+01, - 0.15260807226499495393e+01, + -0.12881107343398126019e+1, + 0.15260807226499495393e+1, -0.69873768672586977768, -0.44014178649418239653, - 0.12760010679932523026e+01, - -0.10789550382576451604e+01, + 0.12760010679932523026e+1, + -0.10789550382576451604e+1, 0.25836098437629956281, 0.64793538837212349968, -0.69714058198334494243, - -0.22048236248151100933e-02, - 0.10390030037640771710e+01, - -0.13155516569922347525e+01, + -0.22048236248151100933e-2, + 0.1039003003764077171e+1, + -0.13155516569922347525e+1, 0.63796518754017195185, 0.76318453244508099864, - -0.16692824209833889704e+01, - 0.15278466023985217692e+01, + -0.16692824209833889704e+1, + 0.15278466023985217692e+1, -0.23888709502850669075, - -0.10286505262412095618e+01, - 0.14562814767737610744e+01, + -0.10286505262412095618e+1, + 0.14562814767737610744e+1, -0.57525571928032337432, -0.63690743462539067821, - 0.12587569417512316505e+01, - -0.55855484155956869330, + 0.12587569417512316505e+1, + -0.5585548415595686933, -0.65892164163724187276, - 0.14159537223713456466e+01, + 0.14159537223713456466e+1, -0.78634848257177625275, - -0.54176266695834351950, - 0.15041503054216454061e+01, + -0.5417626669583435195, + 0.15041503054216454061e+1, -0.97338243412579694702, -0.47262839238991855018, - 0.16756660628585595685e+01, - -0.13040916664297654837e+01, + 0.16756660628585595685e+1, + -0.13040916664297654837e+1, -0.18318081620419227051, - 0.15701036490589950212e+01, - -0.13904859431035405670e+01, - 0.50803465484967585963e-01, - 0.11790705769264040459e+01, + 0.15701036490589950212e+1, + -0.1390485943103540567e+1, + 0.50803465484967585963e-1, + 0.11790705769264040459e+1, -0.81066764874423613563, - -0.63099749722122122630, - 0.17098719159688782199e+01, - -0.94331044643306538600, + -0.6309974972212212263, + 0.17098719159688782199e+1, + -0.943310446433065386, -0.90043596183345364636, - 0.21315711515827429068e+01, - -0.12969744882608329473e+01, + 0.21315711515827429068e+1, + -0.12969744882608329473e+1, -0.54343884111994178454, - 0.15286175763143083906e+01, + 0.15286175763143083906e+1, -0.46131393449141322449, - -0.11411751931529217075e+01, - 0.13554386472484798443e+01, + -0.11411751931529217075e+1, + 0.13554386472484798443e+1, 0.43957946323268204392, - -0.20658842236622363409e+01, - 0.16643359306505129958e+01, + -0.20658842236622363409e+1, + 0.16643359306505129958e+1, 0.57018766129577591606, - -0.18695830928431909079e+01, - 0.86151119272861753640, - 0.11937670508598132724e+01, - -0.13281510182945257537e+01, + -0.18695830928431909079e+1, + 0.8615111927286175364, + 0.11937670508598132724e+1, + -0.13281510182945257537e+1, -0.64512014066005352042, - 0.22709632390419645098e+01, - -0.10729324801178548032e+01, - -0.13716161023310293743e+01, - 0.19320060748825527153e+01, + 0.22709632390419645098e+1, + -0.10729324801178548032e+1, + -0.13716161023310293743e+1, + 0.19320060748825527153e+1, 0.28661692109129494055, - -0.19205812599320464251e+01, + -0.19205812599320464251e+1, 0.60929010060288302242, - 0.19346245708984899370e+01, - -0.16920217373173458419e+01, - -0.10070066747635977311e+01, - 0.21881080191264241641e+01, + 0.1934624570898489937e+1, + -0.16920217373173458419e+1, + -0.10070066747635977311e+1, + 0.21881080191264241641e+1, 0.23258153628981387273, - -0.23555943826267822239e+01, + -0.23555943826267822239e+1, 0.81351221119582028951, - 0.20381995897197713319e+01, - -0.11869926510456527691e+01, - -0.19516118518134792925e+01, - 0.19848108068417851246e+01, - 0.15363714653320876824e+01, - -0.23273506940948962551e+01, + 0.20381995897197713319e+1, + -0.11869926510456527691e+1, + -0.19516118518134792925e+1, + 0.19848108068417851246e+1, + 0.15363714653320876824e+1, + -0.23273506940948962551e+1, -0.95728468924929854822, - 0.21975006081274841563e+01, - 0.13732846334819051037e+01, - -0.28232445988667942416e+01, + 0.21975006081274841563e+1, + 0.13732846334819051037e+1, + -0.28232445988667942416e+1, -0.88415267398526353748, - 0.26316113303146071445e+01, - 0.12775709053454114006e+01, - -0.23624167422052004817e+01, - -0.20884265767737408837e+01, - 0.26131482623978805613e+01, - 0.23286914666268376806e+01, - -0.14181272144264438495e+01, - -0.32180032907478683946e+01, - 0.99975919824959610938e-01, - 0.38305923916966553300e+01, - 0.14060645035385128665e+01, - -0.22326223188668867792e+01, - -0.38986023584348763471e+01, + 0.26316113303146071445e+1, + 0.12775709053454114006e+1, + -0.23624167422052004817e+1, + -0.20884265767737408837e+1, + 0.26131482623978805613e+1, + 0.23286914666268376806e+1, + -0.14181272144264438495e+1, + -0.32180032907478683946e+1, + 0.99975919824959610938e-1, + 0.383059239169665533e+1, + 0.14060645035385128665e+1, + -0.22326223188668867792e+1, + -0.38986023584348763471e+1, 0.11902751977512103509, - 0.38469720772477384862e+01, - 0.33995071592426078233e+01, - 0.35406117889498170404e-01, - -0.46465794441487666688e+01, - -0.41520894174491802531e+01, - -0.20807831796538627245e+01, - 0.29515405017344833460e+01, - 0.57021516884470022646e+01, - 0.67794358169281103699e+01, - 0.63866322371111809986e+01, - 0.40575167088236536728e+01, - 0.33296377025898871160e+01, - 0.10805140701190205643e+01, - 0.11709466637635093100e+01, + 0.38469720772477384862e+1, + 0.33995071592426078233e+1, + 0.35406117889498170404e-1, + -0.46465794441487666688e+1, + -0.41520894174491802531e+1, + -0.20807831796538627245e+1, + 0.2951540501734483346e+1, + 0.57021516884470022646e+1, + 0.67794358169281103699e+1, + 0.63866322371111809986e+1, + 0.40575167088236536728e+1, + 0.3329637702589887116e+1, + 0.10805140701190205643e+1, + 0.117094666376350931e+1, 0.10143027767080460555, 0.19032233028707301603, 0.18525454932889501292, - -0.27318286160200572210, + -0.2731828616020057221, 0.38712725286325955221, -0.39704018681037350769, 0.33641789990151865775, -0.20933111941301316139, - 0.42280739371065266530e-01, + 0.4228073937106526653e-1, 0.13228437543795384945, - -0.28179585104239290860, + -0.2817958510423929086, 0.37683622654315412914, - -0.39957085403561265480, + -0.3995708540356126548, 0.34392320731073111606, -0.21946770142252675084, - 0.47135593897185322498e-01, + 0.47135593897185322498e-1, 0.14219569206848231557, -0.31528607299925476282, 0.44060131739712204979, @@ -10670,421 +10672,421 @@ function ESERK4ConstantCache(zprev) -0.36448160167078635929, 0.19893910832916247844, -0.10165349521356512041, - -0.71694622650971692734e-01, - 0.21622443687721115690, + -0.71694622650971692734e-1, + 0.2162244368772111569, -0.44108501738713568052, 0.47181133446220596683, -0.53882101777274571397, 0.39590642635581774211, -0.30484686388485554565, - 0.48613990024417880198e-01, - 0.90039315185071369663e-01, + 0.48613990024417880198e-1, + 0.90039315185071369663e-1, -0.31901398037808748054, 0.36075852940584723916, -0.44151444881382873042, - 0.31246012930478694880, + 0.3124601293047869488, -0.23311715041236755197, - -0.13347152179202877512e-01, - 0.14368364951462700430, + -0.13347152179202877512e-1, + 0.1436836495146270043, -0.36275161306165210062, 0.39396758460497399712, -0.45139900243276420699, 0.32219584348840341059, - -0.15070368318416171860, - 0.65051578266746373780e-01, + -0.1507036831841617186, + 0.6505157826674637378e-1, 0.57093592241761093042, 0.30871431753147454691, - 0.20748933537496898616e+01, - 0.22609305149763891940e+01, - 0.48928104435067512057e+01, - 0.58207894107617468293e+01, - 0.68563153005701549247e+01, - 0.60121682617596459153e+01, - 0.21974037155726469095e+01, - -0.11391533028624514223e+01, - -0.52215199046287263940e+01, - -0.37613590886821346437e+01, + 0.20748933537496898616e+1, + 0.2260930514976389194e+1, + 0.48928104435067512057e+1, + 0.58207894107617468293e+1, + 0.68563153005701549247e+1, + 0.60121682617596459153e+1, + 0.21974037155726469095e+1, + -0.11391533028624514223e+1, + -0.5221519904628726394e+1, + -0.37613590886821346437e+1, -0.62301195210387327883, - 0.36062385098881852841e+01, - 0.39949888220237497194e+01, + 0.36062385098881852841e+1, + 0.39949888220237497194e+1, -0.44417462571145732708, - -0.31726129088803687317e+01, - -0.30668299587805574191e+01, - 0.20460036324347337100e+01, - 0.34144095625858819076e+01, - 0.85795968659850757598e-01, - -0.28903127236876318129e+01, - -0.20994447120115187211e+01, - 0.30961648457523969213e+01, - 0.18219985541062659884e+01, - -0.15723445255892056771e+01, - -0.25882507391206490688e+01, - 0.10315861106676702530e+01, - 0.32026214585712002858e+01, - -0.17892873604623886763e+01, - -0.18755620031560960026e+01, + -0.31726129088803687317e+1, + -0.30668299587805574191e+1, + 0.204600363243473371e+1, + 0.34144095625858819076e+1, + 0.85795968659850757598e-1, + -0.28903127236876318129e+1, + -0.20994447120115187211e+1, + 0.30961648457523969213e+1, + 0.18219985541062659884e+1, + -0.15723445255892056771e+1, + -0.25882507391206490688e+1, + 0.1031586110667670253e+1, + 0.32026214585712002858e+1, + -0.17892873604623886763e+1, + -0.18755620031560960026e+1, 0.45932506711661419407, - 0.27803005585491273877e+01, - -0.12080594215741027320e+01, - -0.25647260543706402736e+01, - 0.20869165570531715836e+01, - 0.11367243520190466466e+01, - -0.11093671207483724039e+01, - -0.19516518407922263112e+01, - 0.24518170964226371211e+01, + 0.27803005585491273877e+1, + -0.1208059421574102732e+1, + -0.25647260543706402736e+1, + 0.20869165570531715836e+1, + 0.11367243520190466466e+1, + -0.11093671207483724039e+1, + -0.19516518407922263112e+1, + 0.24518170964226371211e+1, 0.71363667301275779398, - -0.26792010230474896382e+01, + -0.26792010230474896382e+1, 0.76262308237716280868, - 0.14955935119575118897e+01, + 0.14955935119575118897e+1, -0.45907440332429100271, - -0.20472489652646475022e+01, - 0.18747398623275857155e+01, + -0.20472489652646475022e+1, + 0.18747398623275857155e+1, 0.97842274320471944726, - -0.26338767886443257282e+01, - 0.10632170017220285985e+01, - 0.11764081841421603070e+01, + -0.26338767886443257282e+1, + 0.10632170017220285985e+1, + 0.1176408184142160307e+1, -0.94942934977030457588, - -0.11438344594189269188e+01, - 0.18300638514676212942e+01, + -0.11438344594189269188e+1, + 0.18300638514676212942e+1, 0.12318245949454191546, - -0.23794634481794458836e+01, - 0.21871899479385130682e+01, - 0.38677874764117353701e-01, - -0.15180962311966355038e+01, + -0.23794634481794458836e+1, + 0.21871899479385130682e+1, + 0.38677874764117353701e-1, + -0.15180962311966355038e+1, 0.66117964011162366766, - 0.10416317814512832118e+01, - -0.11709336035454400715e+01, + 0.10416317814512832118e+1, + -0.11709336035454400715e+1, -0.62332279118580102839, - 0.22198245001455849668e+01, - -0.17103139702659797550e+01, + 0.22198245001455849668e+1, + -0.1710313970265979755e+1, -0.43089395650780681901, - 0.19245891349761234945e+01, - -0.13651358272257179127e+01, + 0.19245891349761234945e+1, + -0.13651358272257179127e+1, -0.37894845361952139706, - 0.12522883703545810707e+01, + 0.12522883703545810707e+1, -0.40456829964394747101, - -0.10298535871898564231e+01, - 0.12499430930119976857e+01, - 0.14889180778894792190, - -0.18157949108262183557e+01, - 0.20339857440528557042e+01, + -0.10298535871898564231e+1, + 0.12499430930119976857e+1, + 0.1488918077889479219, + -0.18157949108262183557e+1, + 0.20339857440528557042e+1, -0.53374057122527607255, - -0.13443839480755350735e+01, - 0.19696963440377122101e+01, - -0.10335486294211682079e+01, + -0.13443839480755350735e+1, + 0.19696963440377122101e+1, + -0.10335486294211682079e+1, -0.33752933862823603084, 0.74257564157922806292, - 0.69082096445670621021e-01, - -0.10900190428768758988e+01, - 0.10633531854558280205e+01, + 0.69082096445670621021e-1, + -0.10900190428768758988e+1, + 0.10633531854558280205e+1, 0.21706695340639531322, - -0.17506668055580787424e+01, - 0.22000465200515111341e+01, - -0.11453821165070541266e+01, + -0.17506668055580787424e+1, + 0.22000465200515111341e+1, + -0.11453821165070541266e+1, -0.61457727528844796616, - 0.17267587380853084422e+01, - -0.14765048385673327225e+01, + 0.17267587380853084422e+1, + -0.14765048385673327225e+1, 0.26633784119329667606, 0.77479924964458701808, -0.84151750164571192947, - 0.44569101740856806315e-01, + 0.44569101740856806315e-1, 0.72546073460735616134, - -0.67474933070948750480, - -0.24141472002528358010, - 0.12399914263425368954e+01, - -0.14215958363733693925e+01, + -0.6747493307094875048, + -0.2414147200252835801, + 0.12399914263425368954e+1, + -0.14215958363733693925e+1, 0.47912539525768821358, 0.98881039899736855592, - -0.19709583670373187481e+01, - 0.17576069389976476387e+01, + -0.19709583670373187481e+1, + 0.17576069389976476387e+1, -0.49839949057429200341, - -0.97474614059271869060, - 0.17201334541836250658e+01, - -0.13804495052854017789e+01, + -0.9747461405927186906, + 0.17201334541836250658e+1, + -0.13804495052854017789e+1, 0.33078726743873276828, 0.61942692883337324705, -0.87665044861999918968, 0.41706710188885942614, 0.22922166658865081312, - -0.46984085479400677920, - 0.75918543177691352741e-01, + -0.4698408547940067792, + 0.75918543177691352741e-1, 0.61650497595730402445, - -0.10100579057440925990e+01, + -0.1010057905744092599e+1, 0.66912826011230541745, 0.30167907604328786375, - -0.13353568944086269266e+01, - 0.17364348334177492905e+01, - -0.11815476840051732932e+01, - -0.87647883279351745944e-01, - 0.13656388200862832338e+01, - -0.19429927860941842432e+01, - 0.14971089499472611806e+01, + -0.13353568944086269266e+1, + 0.17364348334177492905e+1, + -0.11815476840051732932e+1, + -0.87647883279351745944e-1, + 0.13656388200862832338e+1, + -0.19429927860941842432e+1, + 0.14971089499472611806e+1, -0.30524712211194476863, -0.96742091545433717137, - 0.16333214505779751757e+01, - -0.13982490962220774922e+01, + 0.16333214505779751757e+1, + -0.13982490962220774922e+1, 0.46461095166780091992, 0.59746771436530676791, - -0.12288342685643591778e+01, - 0.11602352936064093125e+01, + -0.12288342685643591778e+1, + 0.11602352936064093125e+1, -0.54897709935023941696, -0.19291171945572491153, 0.64413040854944947355, - -0.64056627754933725960, + -0.6405662775493372596, 0.30835172893743656442, - 0.36187634343308468232e-01, + 0.36187634343308468232e-1, -0.13631324751043627508, - -0.62332258764202730372e-01, - 0.36839601596176613230, + -0.62332258764202730372e-1, + 0.3683960159617661323, -0.50766561126409281979, 0.29530759246255439132, 0.20877028649297799112, -0.74086632480614533769, - 0.96680305832169444180, + 0.9668030583216944418, -0.70607918131994895639, - 0.37758461282347811905e-01, - 0.70405292450208600830, - -0.11189492731235164413e+01, + 0.37758461282347811905e-1, + 0.7040529245020860083, + -0.11189492731235164413e+1, 0.94282229174698728436, -0.21965452390143061501, - -0.71779630410699413190, - 0.13914564390302528452e+01, - -0.14336399036377116545e+01, + -0.7177963041069941319, + 0.13914564390302528452e+1, + -0.14336399036377116545e+1, 0.76707928444029271908, 0.32970486039313046112, - -0.13597294774703525544e+01, - 0.18322099918351235637e+01, - -0.15120940281886470213e+01, + -0.13597294774703525544e+1, + 0.18322099918351235637e+1, + -0.15120940281886470213e+1, 0.52769218089459202226, 0.67454747727015673675, - -0.15468734801975423387e+01, - 0.16885035460415342978e+01, - -0.10422522346692741912e+01, - -0.85150142244654947188e-01, - 0.11587997858130363316e+01, - -0.16705760398013342893e+01, - 0.13700840164420593492e+01, + -0.15468734801975423387e+1, + 0.16885035460415342978e+1, + -0.10422522346692741912e+1, + -0.85150142244654947188e-1, + 0.11587997858130363316e+1, + -0.16705760398013342893e+1, + 0.13700840164420593492e+1, -0.38646395391373672412, -0.83411540206806644715, - 0.17293532367994377541e+01, - -0.18816809938049321449e+01, - 0.12079066079434899184e+01, + 0.17293532367994377541e+1, + -0.18816809938049321449e+1, + 0.12079066079434899184e+1, 0.21274728994273847671, - -0.16807988059184229002e+01, - 0.19847020021350136876e+01, - -0.16713096089024521707e+01, + -0.16807988059184229002e+1, + 0.19847020021350136876e+1, + -0.16713096089024521707e+1, 0.39411149644052784202, 0.78218856391936142369, - -0.17846363982885682375e+01, - 0.16554649580761506833e+01, + -0.17846363982885682375e+1, + 0.16554649580761506833e+1, -0.92650315076500655564, -0.52608058912639243943, - 0.15053954560797253581e+01, - -0.19734396237954132669e+01, - 0.11809919526483405594e+01, - 0.47330025934653879860e-01, - -0.15946736788890618630e+01, - 0.22064935275951116367e+01, - -0.20128286525566427834e+01, + 0.15053954560797253581e+1, + -0.19734396237954132669e+1, + 0.11809919526483405594e+1, + 0.4733002593465387986e-1, + -0.1594673678889061863e+1, + 0.22064935275951116367e+1, + -0.20128286525566427834e+1, 0.59396503828663460567, 0.89653526964652541231, - -0.21839400190281970104e+01, - 0.21290425230957263913e+01, - -0.12088867798816731458e+01, + -0.21839400190281970104e+1, + 0.21290425230957263913e+1, + -0.12088867798816731458e+1, -0.58167059259806896954, - 0.18303667480005865187e+01, - -0.23130898417655552102e+01, - 0.12562203056616931818e+01, + 0.18303667480005865187e+1, + -0.23130898417655552102e+1, + 0.12562203056616931818e+1, 0.35616896935834574389, - -0.21419428287048800641e+01, - 0.26471044593600736583e+01, - -0.19990142763961897820e+01, - 0.79755544908047797809e-02, - 0.18368698307321154051e+01, - -0.30129431607283998495e+01, - 0.23984217680405746087e+01, + -0.21419428287048800641e+1, + 0.26471044593600736583e+1, + -0.1999014276396189782e+1, + 0.79755544908047797809e-2, + 0.18368698307321154051e+1, + -0.30129431607283998495e+1, + 0.23984217680405746087e+1, -0.76422698782677378482, - -0.14723884205781354595e+01, - 0.26136959302628914870e+01, - -0.24777722195417188900e+01, + -0.14723884205781354595e+1, + 0.2613695930262891487e+1, + -0.247777221954171889e+1, 0.67758263507657434666, - 0.12967156183037580330e+01, - -0.27527036683439645159e+01, - 0.23653390329815899840e+01, + 0.1296715618303758033e+1, + -0.27527036683439645159e+1, + 0.2365339032981589984e+1, -0.79510214883796626051, - -0.15052078860015689621e+01, - 0.27236154786680661921e+01, - -0.25940332321988188724e+01, + -0.15052078860015689621e+1, + 0.27236154786680661921e+1, + -0.25940332321988188724e+1, 0.75523595625493877836, - 0.12020383123987983254e+01, - -0.25168403355592019466e+01, - 0.19365268305209266675e+01, + 0.12020383123987983254e+1, + -0.25168403355592019466e+1, + 0.19365268305209266675e+1, -0.32286306493226218928, - -0.16740871110968083002e+01, - 0.22410926205484891227e+01, - -0.13875566224544557681e+01, + -0.16740871110968083002e+1, + 0.22410926205484891227e+1, + -0.13875566224544557681e+1, -0.80342228403186799479, - 0.24125635399030360695e+01, - -0.27289239289294355828e+01, + 0.24125635399030360695e+1, + -0.27289239289294355828e+1, 0.98597330673987515492, - 0.12898125568553269193e+01, - -0.30278693176671809262e+01, - 0.25672645749026345996e+01, + 0.12898125568553269193e+1, + -0.30278693176671809262e+1, + 0.25672645749026345996e+1, -0.59794572318290406532, - -0.20100574631514405155e+01, - 0.30074635589924891832e+01, - -0.20930791015409493383e+01, + -0.20100574631514405155e+1, + 0.30074635589924891832e+1, + -0.20930791015409493383e+1, -0.57833677862771970535, - 0.27026738413959368046e+01, - -0.31895640716480584409e+01, - 0.12267242702418625910e+01, - 0.13489370574810268799e+01, - -0.30956042237459464594e+01, - 0.23103175704622240794e+01, - -0.62572555549660888174e-01, - -0.22931248645082473736e+01, - 0.24364397295165312052e+01, + 0.27026738413959368046e+1, + -0.31895640716480584409e+1, + 0.1226724270241862591e+1, + 0.13489370574810268799e+1, + -0.30956042237459464594e+1, + 0.23103175704622240794e+1, + -0.62572555549660888174e-1, + -0.22931248645082473736e+1, + 0.24364397295165312052e+1, -0.62869096957740044918, - -0.21199562220772238952e+01, - 0.31004471670109179371e+01, - -0.17778469994610763827e+01, - -0.13746366117999238021e+01, - 0.34673323088289103033e+01, - -0.31902620576332072488e+01, + -0.21199562220772238952e+1, + 0.31004471670109179371e+1, + -0.17778469994610763827e+1, + -0.13746366117999238021e+1, + 0.34673323088289103033e+1, + -0.31902620576332072488e+1, 0.26435358656526902754, - 0.25524543641148231821e+01, - -0.33701853436092887861e+01, - 0.11107724443506161727e+01, - 0.18400201750651292709e+01, - -0.32800230042123170726e+01, - 0.14742695513581738354e+01, - 0.15892985527762704123e+01, - -0.35219884800372720512e+01, - 0.20550387169297681389e+01, - 0.11652409573247139996e+01, - -0.35787983538876408929e+01, - 0.24349260271377048959e+01, + 0.25524543641148231821e+1, + -0.33701853436092887861e+1, + 0.11107724443506161727e+1, + 0.18400201750651292709e+1, + -0.32800230042123170726e+1, + 0.14742695513581738354e+1, + 0.15892985527762704123e+1, + -0.35219884800372720512e+1, + 0.20550387169297681389e+1, + 0.11652409573247139996e+1, + -0.35787983538876408929e+1, + 0.24349260271377048959e+1, 0.91918257895400612423, - -0.37559082844868392215e+01, - 0.28982393926967131570e+01, + -0.37559082844868392215e+1, + 0.2898239392696713157e+1, 0.54373197852310362066, - -0.36854207655119286535e+01, - 0.30470239184403986599e+01, + -0.36854207655119286535e+1, + 0.30470239184403986599e+1, 0.33350828023577677728, - -0.33679074903315369127e+01, - 0.24483097386430641151e+01, - 0.11579313145350675907e+01, - -0.39827492603741068145e+01, - 0.24095597238874746360e+01, - 0.17715664695750292790e+01, - -0.45680103177078095200e+01, - 0.25225013863859473418e+01, - 0.18046402401614822786e+01, - -0.39738693468135060094e+01, - 0.11499400724302224486e+01, - 0.29600869706636983025e+01, - -0.36876481268477450115e+01, + -0.33679074903315369127e+1, + 0.24483097386430641151e+1, + 0.11579313145350675907e+1, + -0.39827492603741068145e+1, + 0.2409559723887474636e+1, + 0.1771566469575029279e+1, + -0.456801031770780952e+1, + 0.25225013863859473418e+1, + 0.18046402401614822786e+1, + -0.39738693468135060094e+1, + 0.11499400724302224486e+1, + 0.29600869706636983025e+1, + -0.36876481268477450115e+1, -0.50992947295449531087, - 0.44212860805035614220e+01, - -0.35856304744524578609e+01, - -0.15660848030087299865e+01, - 0.44318738943305691080e+01, - -0.17777104876247333820e+01, - -0.33308452056900144100e+01, - 0.37337190905886425973e+01, - 0.10200642703604771988e+01, - -0.50307242294635479141e+01, - 0.23184068601886633765e+01, - 0.33647935254424954366e+01, - -0.45489576180985684672e+01, + 0.4421286080503561422e+1, + -0.35856304744524578609e+1, + -0.15660848030087299865e+1, + 0.4431873894330569108e+1, + -0.1777710487624733382e+1, + -0.333084520569001441e+1, + 0.37337190905886425973e+1, + 0.10200642703604771988e+1, + -0.50307242294635479141e+1, + 0.23184068601886633765e+1, + 0.33647935254424954366e+1, + -0.45489576180985684672e+1, -0.89093593558822881118, - 0.48638993097317273495e+01, - -0.17139906663774100437e+01, - -0.44358907516593246712e+01, - 0.39090756572755727127e+01, - 0.25223684479376533574e+01, - -0.53430868273616045627e+01, + 0.48638993097317273495e+1, + -0.17139906663774100437e+1, + -0.44358907516593246712e+1, + 0.39090756572755727127e+1, + 0.25223684479376533574e+1, + -0.53430868273616045627e+1, -0.44736675195820324591, - 0.54929264706433871268e+01, - -0.17352994290673771083e+01, - -0.51529370196737929177e+01, - 0.31140440958096200497e+01, - 0.44649188591408082161e+01, - -0.46478297951105354002e+01, - -0.36596561645348861802e+01, - 0.53947022927631271827e+01, - 0.26357093149159784851e+01, - -0.57162748318209208875e+01, - -0.28209007887747139520e+01, - 0.63456855985586626545e+01, - 0.24317712563913258528e+01, - -0.64560924772998831145e+01, - -0.31148215394345855067e+01, - 0.58842029919653224823e+01, - 0.46865775809407752561e+01, - -0.59167966767033988162e+01, - -0.58868540839992222757e+01, - 0.35666652621979944016e+01, - 0.77414231851558747977e+01, + 0.54929264706433871268e+1, + -0.17352994290673771083e+1, + -0.51529370196737929177e+1, + 0.31140440958096200497e+1, + 0.44649188591408082161e+1, + -0.46478297951105354002e+1, + -0.36596561645348861802e+1, + 0.53947022927631271827e+1, + 0.26357093149159784851e+1, + -0.57162748318209208875e+1, + -0.2820900788774713952e+1, + 0.63456855985586626545e+1, + 0.24317712563913258528e+1, + -0.64560924772998831145e+1, + -0.31148215394345855067e+1, + 0.58842029919653224823e+1, + 0.46865775809407752561e+1, + -0.59167966767033988162e+1, + -0.58868540839992222757e+1, + 0.35666652621979944016e+1, + 0.77414231851558747977e+1, -0.45002792288427961864, - -0.88270404188484246077e+01, - -0.38275084395680454286e+01, - 0.58008910249743781407e+01, - 0.90237440980255012590e+01, + -0.88270404188484246077e+1, + -0.38275084395680454286e+1, + 0.58008910249743781407e+1, + 0.9023744098025501259e+1, -0.14999960422919586533, - -0.91192089521657369033e+01, - -0.85317004641829772282e+01, + -0.91192089521657369033e+1, + -0.85317004641829772282e+1, 0.50649512844532174061, - 0.10422388124769522477e+02, - 0.10720358148289355071e+02, - 0.43313063146414778615e+01, - -0.66228253507279681855e+01, - -0.13869483427702746781e+02, - -0.16394525526418600947e+02, - -0.14917519563205896560e+02, - -0.10367974771591260463e+02, - -0.72459987052426040322e+01, - -0.33343694985331575609e+01, - -0.21898367294128608940e+01, + 0.10422388124769522477e+2, + 0.10720358148289355071e+2, + 0.43313063146414778615e+1, + -0.66228253507279681855e+1, + -0.13869483427702746781e+2, + -0.16394525526418600947e+2, + -0.1491751956320589656e+2, + -0.10367974771591260463e+2, + -0.72459987052426040322e+1, + -0.33343694985331575609e+1, + -0.2189836729412860894e+1, -0.65295246791900352079, -0.31000376110964622534, -0.32670883584695875612, - 0.31696407371420609600, - -0.45321798108838645680, - 0.44390216522566100510, + 0.316964073714206096, + -0.4532179810883864568, + 0.4439021652256610051, -0.37297815330849670712, 0.23111262835973445107, - -0.48931479803548380558e-01, + -0.48931479803548380558e-1, -0.14106959080366598958, 0.30562633463380284304, -0.41447818349540233029, 0.44932897754083478414, - -0.40338993734473238550, + -0.4033899373447323855, 0.28594411740336789229, -0.11747421901476129413, - -0.71192466033035597950e-01, + -0.7119246603303559795e-1, 0.24694524262761963218, -0.37802997777129243584, 0.44161877850881608998, -0.42618172094113865311, 0.33484730432575371406, -0.18377030222677648297, - 0.61647018455799541814e-01, + 0.61647018455799541814e-1, 0.12035345953048140477, -0.24663505892539322462, - 0.42587555726449621840, + 0.4258755572644962184, -0.43192488699306952338, - 0.45610898918320985640, + 0.4561089891832098564, -0.30028671653274052744, 0.18520444700370219948, - 0.61224613519519389959e-01, + 0.61224613519519389959e-1, -0.20105403064708499139, 0.40078930838018522742, -0.43040723803885722054, 0.47603200591399791319, -0.33612506104950334862, 0.22836821818673536111, - 0.19411594773190446461e-01, + 0.19411594773190446461e-1, -0.16873315980772804479, 0.38237492824800645153, -0.42949912029637032918, @@ -11094,147 +11096,147 @@ function ESERK4ConstantCache(zprev) -0.11336199643826191941, -0.42771586977914016758, -0.24376754385684487603, - -0.16856528802855488269e+01, - -0.17686188516999232778e+01, - -0.39546507916071278466e+01, - -0.46243385557920371198e+01, - -0.54990317569326991887e+01, - -0.48153209863234751609e+01, - -0.17316997805589828818e+01, - 0.87260172016362225200, - 0.42214001117957522524e+01, - 0.29728846395509513911e+01, + -0.16856528802855488269e+1, + -0.17686188516999232778e+1, + -0.39546507916071278466e+1, + -0.46243385557920371198e+1, + -0.54990317569326991887e+1, + -0.48153209863234751609e+1, + -0.17316997805589828818e+1, + 0.872601720163622252, + 0.42214001117957522524e+1, + 0.29728846395509513911e+1, 0.51791390759805411292, - -0.28767196770838654452e+01, - -0.32347849087443072413e+01, + -0.28767196770838654452e+1, + -0.32347849087443072413e+1, 0.42698640763025441647, - 0.24408875320338054848e+01, - 0.25686928309760563849e+01, - -0.17547506724121701982e+01, - -0.26233768266133905556e+01, + 0.24408875320338054848e+1, + 0.25686928309760563849e+1, + -0.17547506724121701982e+1, + -0.26233768266133905556e+1, -0.15064710320341695438, - 0.23586372377610858031e+01, - 0.16783105484053242318e+01, - -0.25207402362137729668e+01, - -0.13703026266444469083e+01, - 0.11381247877848470473e+01, - 0.22118430794449275290e+01, + 0.23586372377610858031e+1, + 0.16783105484053242318e+1, + -0.25207402362137729668e+1, + -0.13703026266444469083e+1, + 0.11381247877848470473e+1, + 0.2211843079444927529e+1, -0.97050121990397064664, - -0.24266383828625222030e+01, - 0.13219570674618312811e+01, - 0.15751884594865426248e+01, + -0.2426638382862522203e+1, + 0.13219570674618312811e+1, + 0.15751884594865426248e+1, -0.39933116978509225481, - -0.22341174897240008157e+01, - 0.10158240127693904942e+01, - 0.19734135188142474249e+01, - -0.15717097137097697512e+01, - -0.10119498048582320493e+01, + -0.22341174897240008157e+1, + 0.10158240127693904942e+1, + 0.19734135188142474249e+1, + -0.15717097137097697512e+1, + -0.10119498048582320493e+1, 0.98446851359115161717, - 0.14820373060117197905e+01, - -0.19048227032494389199e+01, - -0.60012739405060022690, - 0.21482397915209734407e+01, + 0.14820373060117197905e+1, + -0.19048227032494389199e+1, + -0.6001273940506002269, + 0.21482397915209734407e+1, -0.59352450904728315528, - -0.12253636542002888099e+01, + -0.12253636542002888099e+1, 0.40179855943062664503, - 0.16076945765721275539e+01, - -0.14789988449774744694e+01, + 0.16076945765721275539e+1, + -0.14789988449774744694e+1, -0.78836393858601960805, - 0.20984993151700472858e+01, + 0.20984993151700472858e+1, -0.82843193744658516486, -0.96975373686954446928, 0.78914623452383036994, 0.89420468396209307205, - -0.14576107123811588018e+01, - -0.83332294913218460386e-01, - 0.18657269565270544476e+01, - -0.16884260373616868378e+01, + -0.14576107123811588018e+1, + -0.83332294913218460386e-1, + 0.18657269565270544476e+1, + -0.16884260373616868378e+1, -0.10968130885595767099, - 0.13046720099372277613e+01, + 0.13046720099372277613e+1, -0.61904512184042426171, -0.75269569698941019009, 0.87792456633617244055, 0.52833251608856612869, - -0.17688434383797662086e+01, - 0.13240149273055474843e+01, + -0.17688434383797662086e+1, + 0.13240149273055474843e+1, 0.42550821493407692264, - -0.16490705344288061340e+01, - 0.12216295109247752304e+01, - 0.16755679579003202040, + -0.1649070534428806134e+1, + 0.12216295109247752304e+1, + 0.1675567957900320204, -0.87233694401301842269, 0.21505057802465030181, 0.90164127827535411885, - -0.10371613405882642578e+01, + -0.10371613405882642578e+1, -0.12517580807044445534, - 0.15029898319595023093e+01, - -0.17155137448234722974e+01, + 0.15029898319595023093e+1, + -0.17155137448234722974e+1, 0.54582732463835359482, 0.93936902908947117474, - -0.14344320987533045741e+01, + -0.14344320987533045741e+1, 0.69537806306452010219, 0.38050881025819116577, - -0.67230218307781330900, - -0.14408927386318236274e-01, - 0.87226162036271071010, + -0.672302183077813309, + -0.14408927386318236274e-1, + 0.8722616203627107101, -0.88901642806564995514, -0.10148034892312511601, - 0.13043570860488398200e+01, - -0.16491987034934945111e+01, + 0.130435708604883982e+1, + -0.16491987034934945111e+1, 0.80343212544072273307, 0.59682607551974653504, - -0.14682435724902866969e+01, - 0.12439372823789056621e+01, + -0.14682435724902866969e+1, + 0.12439372823789056621e+1, -0.24657146797052753584, -0.61512906027563918343, 0.69610282670848677711, - -0.80083472425975354980e-01, + -0.8008347242597535498e-1, -0.52003600401484062488, - 0.47237364154784866610, + 0.4723736415478486661, 0.26104164611999330914, - -0.10524596983356033775e+01, - 0.11860867949888656003e+01, + -0.10524596983356033775e+1, + 0.11860867949888656003e+1, -0.41614009623653380743, -0.77418626331324014167, - 0.15758479407890959578e+01, - -0.14172697965155989230e+01, + 0.15758479407890959578e+1, + -0.1417269796515598923e+1, 0.41896115833688590824, 0.75609591863005187751, - -0.13524659181184253143e+01, - 0.10854947916866550806e+01, - -0.25213359292038489690, + -0.13524659181184253143e+1, + 0.10854947916866550806e+1, + -0.2521335929203848969, -0.49970191629509719267, 0.69859544688330565965, -0.32507702725912274166, -0.19392422861441943605, 0.38572305390968664174, - -0.65497531098889769097e-01, + -0.65497531098889769097e-1, -0.49562112805282659833, 0.82034809431219457565, -0.55711467650238644111, -0.21033961888101243565, - 0.10315344128160701676e+01, - -0.13497744084028289180e+01, + 0.10315344128160701676e+1, + -0.1349774408402828918e+1, 0.90873420056252351973, - 0.99533101726753919758e-01, - -0.11094982351010305166e+01, - 0.15560681298711791509e+01, - -0.11812260942020071930e+01, + 0.99533101726753919758e-1, + -0.11094982351010305166e+1, + 0.15560681298711791509e+1, + -0.1181226094202007193e+1, 0.21005934884951102393, 0.82465352815481141047, - -0.13695384155021150807e+01, - 0.11889005456305949959e+01, + -0.13695384155021150807e+1, + 0.11889005456305949959e+1, -0.44219987604972149642, - -0.41370091987718798920, - 0.93250652077769102810, - -0.89663132872139994500, + -0.4137009198771879892, + 0.9325065207776910281, + -0.896631328721399945, 0.43148399430074418914, 0.13662820899805430686, -0.47198962236235048051, 0.44695276624907720464, -0.16368147163135132738, - -0.12180176498013191300, + -0.121801764980131913, 0.20387082982353846305, - -0.37562094562853406976e-01, + -0.37562094562853406976e-1, -0.22268829002585230348, 0.35723612668965204486, -0.21533441324529120631, @@ -11242,646 +11244,646 @@ function ESERK4ConstantCache(zprev) 0.55170242114642298326, -0.70433455106541698054, 0.47372475583421824741, - 0.75447968173747506637e-01, + 0.75447968173747506637e-1, -0.67363968172756205632, - 0.10006086432192002889e+01, + 0.10006086432192002889e+1, -0.84465919204257922104, - 0.24286045770233138930, - 0.53719701048218670980, - -0.11097708754953159449e+01, - 0.11782424152300730036e+01, + 0.2428604577023313893, + 0.5371970104821867098, + -0.11097708754953159449e+1, + 0.11782424152300730036e+1, -0.67706441236734338229, -0.17339820907305594777, 0.97858826494792083839, - -0.13472160428675887811e+01, - 0.10926321006285468762e+01, + -0.13472160428675887811e+1, + 0.10926321006285468762e+1, -0.31702742194905358941, -0.62304972911049394391, - 0.12916653789079857173e+01, - -0.13704665550302519428e+01, + 0.12916653789079857173e+1, + -0.13704665550302519428e+1, 0.81711800423767666501, 0.11998740028026651239, - -0.10094722575082657468e+01, - 0.14422760474246036910e+01, - -0.12157342622477786964e+01, - 0.43204722419986596460, + -0.10094722575082657468e+1, + 0.1442276047424603691e+1, + -0.12157342622477786964e+1, + 0.4320472241998659646, 0.55231825821274438404, - -0.12867113385702375616e+01, - 0.14355434599798784223e+01, + -0.12867113385702375616e+1, + 0.14355434599798784223e+1, -0.92976725640501201031, - -0.93229020132125153819e-01, - 0.11609665320859781090e+01, - -0.14460948434374050198e+01, - 0.12305462293935072182e+01, + -0.93229020132125153819e-1, + 0.1160966532085978109e+1, + -0.14460948434374050198e+1, + 0.12305462293935072182e+1, -0.27491562609753916746, -0.65439144714227670541, - 0.14496459799701166826e+01, - -0.14012178471549674441e+01, - 0.84790048303172493860, + 0.14496459799701166826e+1, + -0.14012178471549674441e+1, + 0.8479004830317249386, 0.28250938425496818773, - -0.11244663914928969550e+01, - 0.15921197253593581955e+01, - -0.11220035130218359853e+01, + -0.1124466391492896955e+1, + 0.15921197253593581955e+1, + -0.11220035130218359853e+1, 0.25731717281719140855, 0.90729472590044391023, - -0.14689811155467902282e+01, - 0.14614885471589533772e+01, + -0.14689811155467902282e+1, + 0.14614885471589533772e+1, -0.55265455804182384014, -0.48534721172995398675, - 0.14481171820658258476e+01, - -0.15131879897998139484e+01, - 0.95488530940427995830, + 0.14481171820658258476e+1, + -0.15131879897998139484e+1, + 0.9548853094042799583, 0.26994536778151251299, - -0.12056720320027212168e+01, - 0.16741837731052917615e+01, - -0.10947567902110910687e+01, - 0.81109564450831644900e-01, - 0.11481698488787244194e+01, - -0.16070246858589412042e+01, - 0.13499928262009701641e+01, + -0.12056720320027212168e+1, + 0.16741837731052917615e+1, + -0.10947567902110910687e+1, + 0.811095644508316449e-1, + 0.11481698488787244194e+1, + -0.16070246858589412042e+1, + 0.13499928262009701641e+1, -0.18554898291451132897, -0.93679554490178817971, - 0.17070402838877405394e+01, - -0.13658444749916813787e+01, + 0.17070402838877405394e+1, + -0.13658444749916813787e+1, 0.40352412916207819338, 0.95922966064376158357, - -0.16285606812556721046e+01, - 0.15192085309746907740e+01, + -0.16285606812556721046e+1, + 0.1519208530974690774e+1, -0.36381790445926143196, - -0.86302657496126400360, - 0.17504877224894099808e+01, - -0.14475436164277859508e+01, + -0.8630265749612640036, + 0.17504877224894099808e+1, + -0.14475436164277859508e+1, 0.42631251583375417979, - 0.10222167245879159037e+01, - -0.17096814048077753068e+01, - 0.15098772712727710488e+01, + 0.10222167245879159037e+1, + -0.17096814048077753068e+1, + 0.15098772712727710488e+1, -0.21669321687875228721, - -0.10739241858759820403e+01, - 0.18604135137367499020e+01, - -0.13235633171676679520e+01, - 0.87854584564586613027e-01, - 0.13747216949953102727e+01, - -0.18116630091988972229e+01, - 0.12227915737892387504e+01, + -0.10739241858759820403e+1, + 0.1860413513736749902e+1, + -0.1323563317167667952e+1, + 0.87854584564586613027e-1, + 0.13747216949953102727e+1, + -0.18116630091988972229e+1, + 0.12227915737892387504e+1, 0.33298842132513317704, - -0.15365584588713230296e+01, - 0.18799565524663801597e+01, - -0.80709303112161778770, + -0.15365584588713230296e+1, + 0.18799565524663801597e+1, + -0.8070930311216177877, -0.67867448508930905415, - 0.18711295595652117640e+01, - -0.16353673659603900070e+01, - 0.40617991723495827650, - 0.12767722438078477065e+01, - -0.19290187527572895121e+01, - 0.13610697134431781752e+01, + 0.1871129559565211764e+1, + -0.1635367365960390007e+1, + 0.4061799172349582765, + 0.12767722438078477065e+1, + -0.19290187527572895121e+1, + 0.13610697134431781752e+1, 0.34608532280277776172, - -0.16781497532720730526e+01, - 0.19479506696551038836e+01, + -0.16781497532720730526e+1, + 0.19479506696551038836e+1, -0.63247893179063019442, - -0.10272141737694349128e+01, - 0.20867706578514018112e+01, - -0.14309616107357807646e+01, + -0.10272141737694349128e+1, + 0.20867706578514018112e+1, + -0.14309616107357807646e+1, -0.18457870155185843175, - 0.18293746438665701159e+01, - -0.19275761218694205112e+01, + 0.18293746438665701159e+1, + -0.19275761218694205112e+1, 0.65617510935155887175, - 0.13021344667158678554e+01, - -0.21039289016799798127e+01, - 0.13618128696449545156e+01, + 0.13021344667158678554e+1, + -0.21039289016799798127e+1, + 0.13618128696449545156e+1, 0.64836161130394731611, - -0.20141516474704537210e+01, - 0.18710360265552625769e+01, - -0.11600316049792752660e-01, - -0.17470129844779767048e+01, - 0.21828574438633188137e+01, + -0.2014151647470453721e+1, + 0.18710360265552625769e+1, + -0.1160031604979275266e-1, + -0.17470129844779767048e+1, + 0.21828574438633188137e+1, -0.59825657312479552097, - -0.13950583460609589093e+01, - 0.23350209373154053871e+01, - -0.10731684122804314718e+01, - -0.10363680051557950801e+01, - 0.23825881913688133906e+01, - -0.14289209866987580000e+01, + -0.13950583460609589093e+1, + 0.23350209373154053871e+1, + -0.10731684122804314718e+1, + -0.10363680051557950801e+1, + 0.23825881913688133906e+1, + -0.1428920986698758e+1, -0.72829463339607547478, - 0.23818733972944312605e+01, - -0.16754622618493102415e+01, + 0.23818733972944312605e+1, + -0.16754622618493102415e+1, -0.50949156264614081646, - 0.23806428710924194547e+01, - -0.18269416667234930074e+01, + 0.23806428710924194547e+1, + -0.18269416667234930074e+1, -0.40593971366114273147, - 0.24128388783977054999e+01, - -0.18907478834369459975e+01, + 0.24128388783977054999e+1, + -0.18907478834369459975e+1, -0.43723938830419822876, - 0.24949313998225308708e+01, - -0.18590097835679399996e+01, + 0.24949313998225308708e+1, + -0.18590097835679399996e+1, -0.62003424653467020811, - 0.26209307659418019654e+01, - -0.17028122330593749023e+01, + 0.26209307659418019654e+1, + -0.17028122330593749023e+1, -0.96545627319630256125, - 0.27539763182834389177e+01, - -0.13710383054212991194e+01, - -0.14670085862930217768e+01, - 0.28148338508319468154e+01, - -0.79918461963887577060, - -0.20755591444409047241e+01, - 0.26730252814227464242e+01, - 0.62053724086101845481e-01, - -0.26622306381621876348e+01, - 0.21562411120042654922e+01, - 0.11868157267622974071e+01, - -0.29834133459024054780e+01, - 0.11067305955189350453e+01, - 0.23817217911438888223e+01, - -0.26900426583644505563e+01, - -0.48240070356592540390, - 0.32002063480717986010e+01, - -0.14585420701660891662e+01, - -0.22554745323935962986e+01, - 0.29833108661285629992e+01, + 0.27539763182834389177e+1, + -0.13710383054212991194e+1, + -0.14670085862930217768e+1, + 0.28148338508319468154e+1, + -0.7991846196388757706, + -0.20755591444409047241e+1, + 0.26730252814227464242e+1, + 0.62053724086101845481e-1, + -0.26622306381621876348e+1, + 0.21562411120042654922e+1, + 0.11868157267622974071e+1, + -0.2983413345902405478e+1, + 0.11067305955189350453e+1, + 0.23817217911438888223e+1, + -0.26900426583644505563e+1, + -0.4824007035659254039, + 0.3200206348071798601e+1, + -0.14585420701660891662e+1, + -0.22554745323935962986e+1, + 0.29833108661285629992e+1, 0.68285538147998670055, - -0.33399848299761711878e+01, - 0.12239499579751613734e+01, - 0.29110084931717206125e+01, - -0.25972745271670651945e+01, - -0.16595551963515238203e+01, - 0.35285034386109059845e+01, + -0.33399848299761711878e+1, + 0.12239499579751613734e+1, + 0.29110084931717206125e+1, + -0.25972745271670651945e+1, + -0.16595551963515238203e+1, + 0.35285034386109059845e+1, 0.32442003301715760522, - -0.36618906598523128793e+01, - 0.11240101722801758566e+01, - 0.34990268150871846053e+01, - -0.21541282283201943493e+01, - -0.29051066343438316508e+01, - 0.30594499153340617426e+01, - 0.24288145561250300553e+01, - -0.35255717333441047856e+01, - -0.18806750040969937299e+01, - 0.39685304740014677449e+01, - 0.17207814771799250231e+01, - -0.41019387445430126604e+01, - -0.16856296523934071185e+01, - 0.42853047758944597945e+01, - 0.21840648785939054122e+01, - -0.41036654984001037505e+01, - -0.28994765486601830062e+01, - 0.37183911451023217154e+01, - 0.41087091114732112729e+01, - -0.24803671070815149768e+01, - -0.51628839304730673732e+01, + -0.36618906598523128793e+1, + 0.11240101722801758566e+1, + 0.34990268150871846053e+1, + -0.21541282283201943493e+1, + -0.29051066343438316508e+1, + 0.30594499153340617426e+1, + 0.24288145561250300553e+1, + -0.35255717333441047856e+1, + -0.18806750040969937299e+1, + 0.39685304740014677449e+1, + 0.17207814771799250231e+1, + -0.41019387445430126604e+1, + -0.16856296523934071185e+1, + 0.42853047758944597945e+1, + 0.21840648785939054122e+1, + -0.41036654984001037505e+1, + -0.28994765486601830062e+1, + 0.37183911451023217154e+1, + 0.41087091114732112729e+1, + -0.24803671070815149768e+1, + -0.51628839304730673732e+1, 0.41214341163165929549, - 0.56802471370918681259e+01, - 0.28141492369261991158e+01, - -0.41390619373793802183e+01, - -0.57845732789314050493e+01, - -0.45281996831563059436e-01, - 0.61105525008279473198e+01, - 0.57800519315961125244e+01, - -0.53752346091975766740, - -0.66751132929563583573e+01, - -0.74431628037893924343e+01, - -0.26215198662196561585e+01, - 0.42293210008850836701e+01, - 0.93181971454157022094e+01, - 0.10986477354614503810e+02, - 0.97699272636692029437e+01, - 0.71747147921279754712e+01, - 0.45283878037651490445e+01, - 0.25106932466171669738e+01, - 0.12393071711301029136e+01, - 0.54943457175048304730, + 0.56802471370918681259e+1, + 0.28141492369261991158e+1, + -0.41390619373793802183e+1, + -0.57845732789314050493e+1, + -0.45281996831563059436e-1, + 0.61105525008279473198e+1, + 0.57800519315961125244e+1, + -0.5375234609197576674, + -0.66751132929563583573e+1, + -0.74431628037893924343e+1, + -0.26215198662196561585e+1, + 0.42293210008850836701e+1, + 0.93181971454157022094e+1, + 0.1098647735461450381e+2, + 0.97699272636692029437e+1, + 0.71747147921279754712e+1, + 0.45283878037651490445e+1, + 0.25106932466171669738e+1, + 0.12393071711301029136e+1, + 0.5494345717504830473, 0.22008321812405115536, - 0.79973384192633500955e-01, - 0.26433014195092831983e-01, - 0.79594643592528543236e-02, - 0.21851004169211336176e-02, - 0.54688276760461328099e-03, - 0.12469059718477577890e-03, - 0.25862831644860572735e-04, - 0.48697417126016346369e-05, - 0.83001287411587961477e-06, - 0.12758914739782360429e-06, - 0.17606601634636539240e-07, - 0.21684589191371860213e-08, - 0.23664566614513149836e-09, + 0.79973384192633500955e-1, + 0.26433014195092831983e-1, + 0.79594643592528543236e-2, + 0.21851004169211336176e-2, + 0.54688276760461328099e-3, + 0.1246905971847757789e-3, + 0.25862831644860572735e-4, + 0.48697417126016346369e-5, + 0.83001287411587961477e-6, + 0.12758914739782360429e-6, + 0.1760660163463653924e-7, + 0.21684589191371860213e-8, + 0.23664566614513149836e-9, 0.22676466968176990697e-10, - 0.18861443162644136890e-11, + 0.1886144316264413689e-11, 0.13415776010761943922e-12, - 0.79997172320660593100e-14, + 0.799971723206605931e-14, 0.38906733556079699316e-15, 0.14826004358867086033e-16, 0.41525200296043122656e-18, - 0.76030144672056544090e-20, - 0.68287775607942977740e-22, - -0.11006006346354216610e-01, - 0.17026216456620186374e-01, - -0.28681933515114720577e-02, - -0.10386752172585708709e-01, - 0.16915730538033864339e-01, - -0.10217164020959302803e-01, - -0.51855500479599291389e-02, - 0.24118142260681943445e-01, - -0.35236966682227095771e-01, - 0.35045923561562712656e-01, - -0.21529805419711188497e-01, - 0.32686688029399408456e-02, - 0.13277558672353393515e-01, - -0.19052035490308229931e-01, - 0.15201323084740208866e-01, - -0.40968720816868453224e-02, - -0.41395305033548566997e-02, - 0.54602677332214501205e-02, - 0.38768548751011546252e-02, - -0.17209521677873772932e-01, - 0.29332982298460597015e-01, - -0.31414968526630435153e-01, - 0.23963402327632759431e-01, - -0.83553286485255028049e-02, - -0.60612148698282698397e-02, - 0.15341184611725254550e-01, - -0.14935825512583947305e-01, - 0.98069048257273059438e-02, - -0.28915059198499678400e-02, - 0.86449898449412066869e-03, - -0.20956490791962782173e-02, - 0.59496621542821977874e-02, - -0.59146165269090807473e-02, - 0.22253910877688448840e-02, - 0.57900146773050831239e-02, - -0.11452415323882407516e-01, - 0.13294275382125351689e-01, - -0.87074132506621635536e-02, - 0.38328276435533573281e-02, - -0.16114144767886146980e-02, - 0.70894217452893790871e-02, - -0.15449991876579400804e-01, - 0.22396292663342313306e-01, - -0.19167314624135938644e-01, - 0.68376411456106990505e-02, - 0.11120206454675634483e-01, - -0.22374945482181923112e-01, - 0.21354203261608695197e-01, - -0.54305189987000545768e-02, - -0.14855989955480149861e-01, - 0.30003731128313167881e-01, - -0.29776833999441872092e-01, - 0.17771749776801584741e-01, - -0.11216309275364978910e-02, - -0.67623624680636746850e-02, - 0.32799943602873932874e-02, - 0.94439292166115205995e-02, - -0.18808940471080684564e-01, - 0.18936930600889190224e-01, - -0.74286878034645143290e-02, - -0.56198617386167366503e-02, - 0.13545410249027032418e-01, - -0.11278228727971302547e-01, - 0.69377967390741798748e-02, - -0.73084500228029211991e-02, - 0.18711585612702984899e-01, - -0.33065767826778565130e-01, - 0.41014876630854853190e-01, - -0.32212255420034405229e-01, - 0.12332401198638758000e-01, - 0.75578597884805014812e-02, - -0.11635900840296545256e-01, - -0.41025681912482657183e-03, - 0.20216795457147846565e-01, - -0.29929707985469362203e-01, - 0.24359582519692214025e-01, - -0.76812186219605707929e-02, - -0.34338577118147492993e-02, - 0.24004135184537036922e-02, - 0.84101980890675855779e-02, - -0.12995796851744718589e-01, - 0.47476730209592777135e-02, - 0.13166590429212246191e-01, - -0.22618530183860011823e-01, - 0.14952287497620649417e-01, - 0.66203140018920737103e-02, - -0.21414844408742344378e-01, - 0.17536961512311717570e-01, - 0.33497903097911198994e-02, - -0.19792911335030836245e-01, - 0.18280596069956651234e-01, - 0.40023806390188218420e-03, - -0.15139435840223184129e-01, - 0.13655527021078488550e-01, - 0.10161369892468549540e-02, - -0.68171324574879815783e-02, - -0.57127242644182292530e-02, - 0.27864040682606831811e-01, - -0.33565606550827666033e-01, - 0.14671240478571710361e-01, - 0.15159050096977813235e-01, - -0.26992960316978027030e-01, - 0.14918513157008492578e-01, - 0.42033983980476986517e-02, - -0.41025775037289895567e-02, - -0.12401083133392814400e-01, - 0.22556632344167489718e-01, - -0.54456737785506361196e-02, - -0.23205269866566749504e-01, - 0.33924542428342821521e-01, - -0.12897368098135427936e-01, - -0.12841030992055541687e-01, - 0.14656458213568203733e-01, - 0.72129708084505677473e-02, - -0.17143892018575076358e-01, - -0.16012551477558093199e-02, - 0.28159092073062445133e-01, - -0.24562978681369293521e-01, - -0.44527287882480896114e-02, - 0.20893063879404195210e-01, - 0.32800672526453049675e-03, - -0.27766907808206488240e-01, - 0.23038405873384491113e-01, - 0.79271704342741642485e-02, - -0.15912433044095265766e-01, - -0.10486719578210590767e-01, - 0.29328975079413666799e-01, - -0.30643517461270619248e-02, - -0.33223449069737572004e-01, - 0.29173663910625789036e-01, - 0.46379107849767557681e-02, - -0.61138423913971017692e-02, - -0.27727940918133148901e-01, - 0.36347479629761737796e-01, - 0.54408142519815150609e-02, - -0.31554016563272634099e-01, - 0.28175877716889964272e-02, - 0.24527838671093270956e-01, - 0.52186061064316583910e-02, - -0.33047121503279361376e-01, - -0.17530821429163311043e-02, - 0.42428037257772346913e-01, - -0.13414611105870000163e-01, - -0.20900163858732744016e-01, - -0.12849509526423023506e-01, - 0.42556237065785589013e-01, - 0.74813462017354675701e-02, - -0.39419870238376654437e-01, - -0.84587740280725690761e-02, - 0.20482999540920809878e-01, - 0.38814961857281803093e-01, - -0.23961837469009622525e-01, - -0.42299601919065066280e-01, - 0.10751458465288556143e-01, - 0.24913896339853320444e-01, - 0.48517768515663764473e-01, - -0.48670510940318885418e-01, - -0.25012437197614950657e-01, - -0.28340097738793746524e-01, - 0.47824555893126459438e-01, - 0.49028073881555202240e-01, - 0.66167588178007268052e-02, - -0.26323542745973847051e-01, - -0.74905108860802718795e-01, - -0.22996048907722752702e-01, - -0.44003972784803432883e-02, - 0.65011190340682437072e-01, - 0.73215619978299062431e-01, - 0.83527893823418755681e-01, - 0.65438339561794539589e-01, - 0.45899538845247840613e-01, - 0.28019531659152399627e-01, - 0.17096839188573242918e-01, - 0.44910121132683659961e-02, - 0.73979982066384843489e-02, - -0.22032310811841322729e-02, - 0.21161092883501386036e-02, - 0.21371366390168528709e-02, - -0.66461579590169853754e-02, - 0.11964975089819458384e-01, - -0.16913561632499525544e-01, - 0.20811183324109364806e-01, - -0.23040859771467605416e-01, - 0.23267826827159450442e-01, - -0.21516907336951142382e-01, - 0.18092733017537280388e-01, - -0.13574337569173942908e-01, - 0.86352928092068709232e-02, - -0.39788386405874738572e-02, - 0.16212410898299825274e-03, - 0.24352929185988930576e-02, - -0.37027793906342998734e-02, - 0.37464958966341617430e-02, - -0.28817721935648580450e-02, - 0.15177307298214729077e-02, - -0.98709340246944530703e-04, - -0.10101297088121845291e-02, - 0.15647988804550207968e-02, - -0.14970648758862550084e-02, - 0.89897116787775155876e-03, - -0.40690224478929760965e-01, - 0.65167953799595321196e-01, - -0.41564873800171348028e-01, - -0.38124745197876878759e-02, - 0.41412269240130743231e-01, - -0.82599177193310988065e-01, - 0.98763634169353506365e-01, + 0.7603014467205654409e-20, + 0.6828777560794297774e-22, + -0.1100600634635421661e-1, + 0.17026216456620186374e-1, + -0.28681933515114720577e-2, + -0.10386752172585708709e-1, + 0.16915730538033864339e-1, + -0.10217164020959302803e-1, + -0.51855500479599291389e-2, + 0.24118142260681943445e-1, + -0.35236966682227095771e-1, + 0.35045923561562712656e-1, + -0.21529805419711188497e-1, + 0.32686688029399408456e-2, + 0.13277558672353393515e-1, + -0.19052035490308229931e-1, + 0.15201323084740208866e-1, + -0.40968720816868453224e-2, + -0.41395305033548566997e-2, + 0.54602677332214501205e-2, + 0.38768548751011546252e-2, + -0.17209521677873772932e-1, + 0.29332982298460597015e-1, + -0.31414968526630435153e-1, + 0.23963402327632759431e-1, + -0.83553286485255028049e-2, + -0.60612148698282698397e-2, + 0.1534118461172525455e-1, + -0.14935825512583947305e-1, + 0.98069048257273059438e-2, + -0.289150591984996784e-2, + 0.86449898449412066869e-3, + -0.20956490791962782173e-2, + 0.59496621542821977874e-2, + -0.59146165269090807473e-2, + 0.2225391087768844884e-2, + 0.57900146773050831239e-2, + -0.11452415323882407516e-1, + 0.13294275382125351689e-1, + -0.87074132506621635536e-2, + 0.38328276435533573281e-2, + -0.1611414476788614698e-2, + 0.70894217452893790871e-2, + -0.15449991876579400804e-1, + 0.22396292663342313306e-1, + -0.19167314624135938644e-1, + 0.68376411456106990505e-2, + 0.11120206454675634483e-1, + -0.22374945482181923112e-1, + 0.21354203261608695197e-1, + -0.54305189987000545768e-2, + -0.14855989955480149861e-1, + 0.30003731128313167881e-1, + -0.29776833999441872092e-1, + 0.17771749776801584741e-1, + -0.1121630927536497891e-2, + -0.6762362468063674685e-2, + 0.32799943602873932874e-2, + 0.94439292166115205995e-2, + -0.18808940471080684564e-1, + 0.18936930600889190224e-1, + -0.7428687803464514329e-2, + -0.56198617386167366503e-2, + 0.13545410249027032418e-1, + -0.11278228727971302547e-1, + 0.69377967390741798748e-2, + -0.73084500228029211991e-2, + 0.18711585612702984899e-1, + -0.3306576782677856513e-1, + 0.4101487663085485319e-1, + -0.32212255420034405229e-1, + 0.12332401198638758e-1, + 0.75578597884805014812e-2, + -0.11635900840296545256e-1, + -0.41025681912482657183e-3, + 0.20216795457147846565e-1, + -0.29929707985469362203e-1, + 0.24359582519692214025e-1, + -0.76812186219605707929e-2, + -0.34338577118147492993e-2, + 0.24004135184537036922e-2, + 0.84101980890675855779e-2, + -0.12995796851744718589e-1, + 0.47476730209592777135e-2, + 0.13166590429212246191e-1, + -0.22618530183860011823e-1, + 0.14952287497620649417e-1, + 0.66203140018920737103e-2, + -0.21414844408742344378e-1, + 0.1753696151231171757e-1, + 0.33497903097911198994e-2, + -0.19792911335030836245e-1, + 0.18280596069956651234e-1, + 0.4002380639018821842e-3, + -0.15139435840223184129e-1, + 0.1365552702107848855e-1, + 0.1016136989246854954e-2, + -0.68171324574879815783e-2, + -0.5712724264418229253e-2, + 0.27864040682606831811e-1, + -0.33565606550827666033e-1, + 0.14671240478571710361e-1, + 0.15159050096977813235e-1, + -0.2699296031697802703e-1, + 0.14918513157008492578e-1, + 0.42033983980476986517e-2, + -0.41025775037289895567e-2, + -0.124010831333928144e-1, + 0.22556632344167489718e-1, + -0.54456737785506361196e-2, + -0.23205269866566749504e-1, + 0.33924542428342821521e-1, + -0.12897368098135427936e-1, + -0.12841030992055541687e-1, + 0.14656458213568203733e-1, + 0.72129708084505677473e-2, + -0.17143892018575076358e-1, + -0.16012551477558093199e-2, + 0.28159092073062445133e-1, + -0.24562978681369293521e-1, + -0.44527287882480896114e-2, + 0.2089306387940419521e-1, + 0.32800672526453049675e-3, + -0.2776690780820648824e-1, + 0.23038405873384491113e-1, + 0.79271704342741642485e-2, + -0.15912433044095265766e-1, + -0.10486719578210590767e-1, + 0.29328975079413666799e-1, + -0.30643517461270619248e-2, + -0.33223449069737572004e-1, + 0.29173663910625789036e-1, + 0.46379107849767557681e-2, + -0.61138423913971017692e-2, + -0.27727940918133148901e-1, + 0.36347479629761737796e-1, + 0.54408142519815150609e-2, + -0.31554016563272634099e-1, + 0.28175877716889964272e-2, + 0.24527838671093270956e-1, + 0.5218606106431658391e-2, + -0.33047121503279361376e-1, + -0.17530821429163311043e-2, + 0.42428037257772346913e-1, + -0.13414611105870000163e-1, + -0.20900163858732744016e-1, + -0.12849509526423023506e-1, + 0.42556237065785589013e-1, + 0.74813462017354675701e-2, + -0.39419870238376654437e-1, + -0.84587740280725690761e-2, + 0.20482999540920809878e-1, + 0.38814961857281803093e-1, + -0.23961837469009622525e-1, + -0.4229960191906506628e-1, + 0.10751458465288556143e-1, + 0.24913896339853320444e-1, + 0.48517768515663764473e-1, + -0.48670510940318885418e-1, + -0.25012437197614950657e-1, + -0.28340097738793746524e-1, + 0.47824555893126459438e-1, + 0.4902807388155520224e-1, + 0.66167588178007268052e-2, + -0.26323542745973847051e-1, + -0.74905108860802718795e-1, + -0.22996048907722752702e-1, + -0.44003972784803432883e-2, + 0.65011190340682437072e-1, + 0.73215619978299062431e-1, + 0.83527893823418755681e-1, + 0.65438339561794539589e-1, + 0.45899538845247840613e-1, + 0.28019531659152399627e-1, + 0.17096839188573242918e-1, + 0.44910121132683659961e-2, + 0.73979982066384843489e-2, + -0.22032310811841322729e-2, + 0.21161092883501386036e-2, + 0.21371366390168528709e-2, + -0.66461579590169853754e-2, + 0.11964975089819458384e-1, + -0.16913561632499525544e-1, + 0.20811183324109364806e-1, + -0.23040859771467605416e-1, + 0.23267826827159450442e-1, + -0.21516907336951142382e-1, + 0.18092733017537280388e-1, + -0.13574337569173942908e-1, + 0.86352928092068709232e-2, + -0.39788386405874738572e-2, + 0.16212410898299825274e-3, + 0.24352929185988930576e-2, + -0.37027793906342998734e-2, + 0.3746495896634161743e-2, + -0.2881772193564858045e-2, + 0.15177307298214729077e-2, + -0.98709340246944530703e-4, + -0.10101297088121845291e-2, + 0.15647988804550207968e-2, + -0.14970648758862550084e-2, + 0.89897116787775155876e-3, + -0.40690224478929760965e-1, + 0.65167953799595321196e-1, + -0.41564873800171348028e-1, + -0.38124745197876878759e-2, + 0.41412269240130743231e-1, + -0.82599177193310988065e-1, + 0.98763634169353506365e-1, -0.10596306718653085432, - 0.83020605892431334483e-01, - -0.54539631695630620689e-01, - 0.71454112478681061985e-02, - 0.29216750862558218960e-01, - -0.66205983085556238676e-01, - 0.76179365187206096732e-01, - -0.76610486076588893423e-01, - 0.47920617007790003439e-01, - -0.16118952298187296662e-01, - -0.31235108744301340322e-01, - 0.63979225921362348206e-01, - -0.94273292381555268138e-01, - 0.95711203537086356197e-01, - -0.87027143755284905313e-01, - 0.51154271054291620968e-01, - -0.12069031671697174474e-01, - -0.32183249263888921710e-01, - 0.80076700484308982464e-01, - -0.70128891929016862195e-01, + 0.83020605892431334483e-1, + -0.54539631695630620689e-1, + 0.71454112478681061985e-2, + 0.2921675086255821896e-1, + -0.66205983085556238676e-1, + 0.76179365187206096732e-1, + -0.76610486076588893423e-1, + 0.47920617007790003439e-1, + -0.16118952298187296662e-1, + -0.31235108744301340322e-1, + 0.63979225921362348206e-1, + -0.94273292381555268138e-1, + 0.95711203537086356197e-1, + -0.87027143755284905313e-1, + 0.51154271054291620968e-1, + -0.12069031671697174474e-1, + -0.3218324926388892171e-1, + 0.80076700484308982464e-1, + -0.70128891929016862195e-1, 0.15779456315008147382, - 0.36066302503620202569e-01, - 0.27960719304350190040, + 0.36066302503620202569e-1, + 0.2796071930435019004, 0.34785361961086730398, 0.50777885642049624959, 0.68876329462339247467, 0.57317423789867172346, 0.49512842608259755028, - 0.26828742656411729700e-01, + 0.268287426564117297e-1, -0.28992944520036262324, -0.47621717270715635539, -0.33410527195496314556, 0.13600561720487430728, 0.36668811424107922159, 0.32373829555734778829, - -0.92412593100939827151e-01, + -0.92412593100939827151e-1, -0.40440251690285627939, - -0.15504273099072571340, + -0.1550427309907257134, 0.15151664592258634601, 0.39047953577839006334, - -0.40954077032427323168e-01, + -0.40954077032427323168e-1, -0.29934527428320728548, -0.15773660538292041955, 0.21521283500120311216, 0.27703613045921954283, -0.17213970941875988974, -0.26069140860647133096, - 0.62650381485676504001e-01, + 0.62650381485676504001e-1, 0.26960922132478459812, - 0.95803301752896141696e-02, + 0.95803301752896141696e-2, -0.30276127314216494391, - 0.88798966146829833024e-02, + 0.88798966146829833024e-2, 0.25989450379989409434, - 0.41708718078711315772e-02, + 0.41708718078711315772e-2, -0.23375751312215697908, - -0.28729532587831511231e-01, + -0.28729532587831511231e-1, 0.26603013886965642953, - -0.23238774917997476882e-01, + -0.23238774917997476882e-1, -0.26749547495746733849, 0.12142447838998093879, 0.14695063701809951695, - -0.47187763574176755377e-01, + -0.47187763574176755377e-1, -0.22702683874523790775, 0.16846476728415274438, 0.17134037522327333347, -0.29935103723424627553, - 0.90192417163759516785e-01, - 0.52877591968672137124e-01, + 0.90192417163759516785e-1, + 0.52877591968672137124e-1, 0.11754887052642074008, -0.31779898755537178134, 0.19986827735728093791, 0.10896489146731297426, -0.21501253987645918553, - 0.32928880615323986858e-01, + 0.32928880615323986858e-1, 0.12094520375297268533, - -0.15285919313290593363e-01, + -0.15285919313290593363e-1, -0.17932161415805084048, 0.15649262927418883251, - 0.82373055169705056144e-01, + 0.82373055169705056144e-1, -0.23838097741167957322, 0.11900017559495744413, 0.11610266214872344559, -0.18555035552007342892, - 0.45479158411917623706e-01, - 0.76568939162283078392e-01, - 0.18166022989130697039e-02, + 0.45479158411917623706e-1, + 0.76568939162283078392e-1, + 0.18166022989130697039e-2, -0.18793232214064209407, 0.23736567642301853454, - -0.65684169313589169104e-01, + -0.65684169313589169104e-1, -0.15368280427744773764, 0.19633204156434325149, - -0.46960305661490092666e-01, + -0.46960305661490092666e-1, -0.10259119421180526444, - 0.82568545498884496348e-01, - 0.64213394879894830636e-01, + 0.82568545498884496348e-1, + 0.64213394879894830636e-1, -0.15195599499511810992, - 0.71206724574685228979e-01, - 0.86077724069956729203e-01, + 0.71206724574685228979e-1, + 0.86077724069956729203e-1, -0.13865496973062005348, - 0.16929447999587666357e-01, + 0.16929447999587666357e-1, 0.15831471174809239044, -0.20771938809209816723, - 0.75281325425894093928e-01, + 0.75281325425894093928e-1, 0.11832378897057584111, -0.20689435724127155924, 0.13878267486793036123, - -0.15868383095365815733e-01, - -0.26872899148211660397e-01, - -0.41515836862768489002e-01, - 0.12070968403304901950, - -0.91412519858731375311e-01, - -0.61413225264850275498e-01, + -0.15868383095365815733e-1, + -0.26872899148211660397e-1, + -0.41515836862768489002e-1, + 0.1207096840330490195, + -0.91412519858731375311e-1, + -0.61413225264850275498e-1, 0.22510413130694936767, -0.26487314280705775982, 0.14443280548736803226, - 0.39970196886710468442e-01, + 0.39970196886710468442e-1, -0.14875592182267416419, 0.11573299765032807329, - 0.16127054177974468972e-02, - -0.85964383235948571560e-01, - 0.64125764339116764212e-01, - 0.32671709137375097576e-01, + 0.16127054177974468972e-2, + -0.8596438323594857156e-1, + 0.64125764339116764212e-1, + 0.32671709137375097576e-1, -0.10923018323087661796, - 0.95005814174680847106e-01, - -0.89267549189931579001e-02, - -0.63410009331859501502e-01, - 0.46880434962475334149e-01, - 0.52121354484446977273e-01, + 0.95005814174680847106e-1, + -0.89267549189931579001e-2, + -0.63410009331859501502e-1, + 0.46880434962475334149e-1, + 0.52121354484446977273e-1, -0.15038431403983806844, 0.15424478638067881664, - -0.40071125709188061548e-01, + -0.40071125709188061548e-1, -0.12539287669618409682, 0.23153584440969521285, -0.20769023957598839458, - 0.71062666980477917633e-01, - 0.87246624823866400500e-01, + 0.71062666980477917633e-1, + 0.872466248238664005e-1, -0.17196276821694667092, 0.14682558868316777922, - -0.53845334122624682882e-01, - -0.28286513258051048519e-01, - 0.43303727300347726048e-01, - 0.36593446765929502074e-02, - -0.60356806381891336954e-01, - 0.72175415229954062446e-01, - -0.27545117690265772531e-01, - -0.36965672384734193923e-01, - 0.66664225995310272266e-01, - -0.35503541840139124508e-01, - -0.33141123913751791008e-01, - 0.80955896314905254063e-01, - -0.59782429567608000309e-01, - -0.31944567028626809357e-01, + -0.53845334122624682882e-1, + -0.28286513258051048519e-1, + 0.43303727300347726048e-1, + 0.36593446765929502074e-2, + -0.60356806381891336954e-1, + 0.72175415229954062446e-1, + -0.27545117690265772531e-1, + -0.36965672384734193923e-1, + 0.66664225995310272266e-1, + -0.35503541840139124508e-1, + -0.33141123913751791008e-1, + 0.80955896314905254063e-1, + -0.59782429567608000309e-1, + -0.31944567028626809357e-1, 0.14208716968679419024, - -0.19874655627760651200, + -0.198746556277606512, 0.15670905028313605878, - -0.30788359147455486575e-01, + -0.30788359147455486575e-1, -0.11191670709547429929, 0.19070609542872157816, -0.16163866207658675322, - 0.42835828433538329640e-01, - 0.95383686317066285199e-01, - -0.17362982098797657970, + 0.4283582843353832964e-1, + 0.95383686317066285199e-1, + -0.1736298209879765797, 0.14832441239753813012, - -0.36449976575475294405e-01, - -0.97739042357953359597e-01, + -0.36449976575475294405e-1, + -0.97739042357953359597e-1, 0.18005812815939636895, -0.16920739988606475768, - 0.76500863526106827051e-01, - 0.43019718056034245146e-01, + 0.76500863526106827051e-1, + 0.43019718056034245146e-1, -0.12465183326682133247, 0.12883334235771112808, - -0.61000936713111311716e-01, - -0.36186410248672161438e-01, + -0.61000936713111311716e-1, + -0.36186410248672161438e-1, 0.10819699770974039454, -0.11916357580699425689, - 0.67919978107813056001e-01, - 0.14569356761265323669e-01, - -0.85434067441113162311e-01, - 0.11259499988249631330, - -0.90168617940279249812e-01, - 0.37433317775438595953e-01, - 0.13810709488437548226e-01, - -0.37335632338816232556e-01, - 0.24357917507895839732e-01, - 0.14152177745965730318e-01, - -0.55896466468960390173e-01, - 0.79250753658025918647e-01, - -0.73781174034494217961e-01, - 0.43479945851381165967e-01, - -0.34225619758201041541e-02, - -0.28454208544721682622e-01, - 0.39421323971012521559e-01, - -0.27168547656692357967e-01, + 0.67919978107813056001e-1, + 0.14569356761265323669e-1, + -0.85434067441113162311e-1, + 0.1125949998824963133, + -0.90168617940279249812e-1, + 0.37433317775438595953e-1, + 0.13810709488437548226e-1, + -0.37335632338816232556e-1, + 0.24357917507895839732e-1, + 0.14152177745965730318e-1, + -0.55896466468960390173e-1, + 0.79250753658025918647e-1, + -0.73781174034494217961e-1, + 0.43479945851381165967e-1, + -0.34225619758201041541e-2, + -0.28454208544721682622e-1, + 0.39421323971012521559e-1, + -0.27168547656692357967e-1, 0.29117242105771490301, -0.39492239319920108276, - -0.92422477866783397937e-01, + -0.92422477866783397937e-1, 0.52561956301723289364, -0.73751553916668988187, 0.50715634879461624074, - -0.12859186053807581535e-01, + -0.12859186053807581535e-1, -0.59039679846651871298, 0.91881160191474198218, -0.89433252574877564189, 0.45413791248470253281, - 0.85194549608195890844e-01, + 0.85194549608195890844e-1, -0.52972566689304256826, 0.58218816896743952327, -0.33203615629773336471, @@ -11891,32 +11893,32 @@ function ESERK4ConstantCache(zprev) 0.10311599778164579067, 0.35698397195984404862, -0.74837811161015632688, - 0.76714193801747931900, + 0.767141938017479319, -0.48260216809307282526, - -0.32588780648717632915e-01, + -0.32588780648717632915e-1, 0.42200220889078815523, -0.58129030254379998599, 0.38987650048447836104, - -0.97294301678750624851e-01, + -0.97294301678750624851e-1, -0.16446231409212455632, 0.14778605006535333599, - 0.32942695822083208068e-01, + 0.32942695822083208068e-1, -0.30194203746394987498, 0.36205391275900483672, -0.21968933273170584974, -0.12938947330354835796, - 0.37672230441814286150, + 0.3767223044181428615, -0.43059496386072115826, 0.17216792205085892919, 0.13538447456214899867, -0.33791935029972935967, 0.18768861217180704548, 0.15206129108378196868, - -0.51522914342156067580, - 0.52409658367185796290, + -0.5152291434215606758, + 0.5240965836718579629, -0.17717708696507689092, -0.43741456779830856227, - 0.85862945402545531870, + 0.8586294540254553187, -0.87150758355337165639, 0.34689198791851605375, 0.33371403133026211751, @@ -11932,14 +11934,14 @@ function ESERK4ConstantCache(zprev) 0.17602762092192597576, 0.28328759153944177429, -0.47677775663978405607, - 0.20995661971880377750, + 0.2099566197188037775, 0.16092320761690986908, -0.32523182683380363889, - -0.89900913805564548059e-02, + -0.89900913805564548059e-2, 0.53917227789940147531, -0.89192725526501970279, 0.62975603881079222912, - 0.54614757108808524577e-01, + 0.54614757108808524577e-1, -0.75630497891842418667, 0.86601968822848152119, -0.37843663902540730648, @@ -11961,15 +11963,15 @@ function ESERK4ConstantCache(zprev) -0.20693485996862948095, 0.82241300402612138587, -0.72642184594397052333, - -0.29063647862711428083e-01, + -0.29063647862711428083e-1, 0.58646499708713639709, -0.45806603830596165361, -0.21904099838181850801, 0.53520251325998391412, - -0.85685424992681682999e-01, + -0.85685424992681682999e-1, -0.80204848536037709472, - 0.10897368782231178219e+01, - -0.44179796850888269910, + 0.10897368782231178219e+1, + -0.4417979685088826991, -0.62098073166292422354, 0.97175935506939303821, -0.40466809952528087768, @@ -11979,13 +11981,13 @@ function ESERK4ConstantCache(zprev) -0.91123934261878825058, 0.33186769918175262895, 0.73932311803643591119, - -0.11412931343913077509e+01, + -0.11412931343913077509e+1, 0.32395120100976637634, 0.64002351441771654361, -0.62504914900771957331, -0.33838502272219950218, 0.80595663827337971075, - -0.98769179501925596920e-01, + -0.9876917950192559692e-1, -0.94979288742131129375, 0.81185486707845622156, 0.33524189448682023551, @@ -11995,85 +11997,85 @@ function ESERK4ConstantCache(zprev) -0.73577389457959851971, -0.51030869080163043794, 0.81268596573579665598, - 0.29276955740002302830, - -0.11295745768714668955e+01, + 0.2927695574000230283, + -0.11295745768714668955e+1, 0.18576113618649550685, - 0.11516866709991229190e+01, + 0.1151686670999122919e+1, -0.89005503185394130305, -0.52897620681857859815, 0.60817301246927335523, 0.77330275505149526083, - -0.11856488527480522066e+01, + -0.11856488527480522066e+1, -0.39727788973274902329, - 0.13540879373804473040e+01, + 0.1354087937380447304e+1, -0.13996363892703864162, -0.98123376025442166082, -0.22379418803749639988, - 0.13872791691348342891e+01, - -0.65287246524972766815e-01, - -0.14938514557033333308e+01, - 0.28760383767827724100, - 0.10934072124848701613e+01, + 0.13872791691348342891e+1, + -0.65287246524972766815e-1, + -0.14938514557033333308e+1, + 0.287603837678277241, + 0.10934072124848701613e+1, 0.28939390926289620953, - -0.15454837342094827068e+01, + -0.15454837342094827068e+1, -0.37041086064530392985, - 0.15664377139792218241e+01, + 0.15664377139792218241e+1, 0.40282634070524070413, -0.89365822134880457117, - -0.15208519080578002391e+01, - 0.10170573148146189180e+01, - 0.15102174494089581902e+01, + -0.15208519080578002391e+1, + 0.1017057314814618918e+1, + 0.15102174494089581902e+1, -0.11614514798533911999, - -0.14257183131389363773e+01, - -0.14373748900163656472e+01, - 0.14259959153726275982e+01, - 0.14763954467500179923e+01, + -0.14257183131389363773e+1, + -0.14373748900163656472e+1, + 0.14259959153726275982e+1, + 0.14763954467500179923e+1, 0.75825612457041768888, - -0.16779853034187697247e+01, - -0.20389066055433735514e+01, + -0.16779853034187697247e+1, + -0.20389066055433735514e+1, -0.33740764255410554684, - 0.12484256513361911001e+01, - 0.27189811735218332167e+01, - 0.12327729851573385744e+01, + 0.12484256513361911001e+1, + 0.27189811735218332167e+1, + 0.12327729851573385744e+1, -0.13121959359181747939, - -0.23295547856597873526e+01, - -0.31475757681168476942e+01, - -0.31755766374939606855e+01, - -0.27394310664381360532e+01, - -0.17431750768274909547e+01, - -0.11980148765367883978e+01, + -0.23295547856597873526e+1, + -0.31475757681168476942e+1, + -0.31755766374939606855e+1, + -0.27394310664381360532e+1, + -0.17431750768274909547e+1, + -0.11980148765367883978e+1, -0.61586954320370201899, - -0.23488162292297051770, + -0.2348816229229705177, -0.26782912749113441109, 0.10936595832139006657, -0.18097509357053645496, 0.10892969673676573816, - -0.41738638377695036485e-01, - -0.55329784047836984284e-01, + -0.41738638377695036485e-1, + -0.55329784047836984284e-1, 0.14907315287208453003, -0.22592983372364008887, 0.27126030266741918417, -0.27713177190428495145, 0.24386769124568735689, -0.17788148230817057982, - 0.92018766007010102670e-01, - -0.89645465990881799921e-03, - -0.80155715286707382439e-01, + 0.9201876600701010267e-1, + -0.89645465990881799921e-3, + -0.80155715286707382439e-1, 0.13958489841815086008, -0.16991314545364707977, 0.17014518938453415675, -0.14412826103149575796, 0.10055455377682756546, - -0.49895285367120734143e-01, - 0.31690548096964241999e-02, - 0.30994383182706673058e-01, - -0.47191202063645604214e-01, - 0.44636729305795347367e-01, - -0.26631464488086963732e-01, + -0.49895285367120734143e-1, + 0.31690548096964241999e-2, + 0.30994383182706673058e-1, + -0.47191202063645604214e-1, + 0.44636729305795347367e-1, + -0.26631464488086963732e-1, 0.38832636810551529605, -0.61521774690775687944, 0.42225494125929236011, - -0.41835684441644108156e-01, + -0.41835684441644108156e-1, -0.24098318052631242936, 0.56311607848304023882, -0.65299852399601476804, @@ -12086,116 +12088,116 @@ function ESERK4ConstantCache(zprev) -0.70076947409551149093, 0.65413217331573048074, -0.35329780608794403296, - 0.61482142222114379015e-01, + 0.61482142222114379015e-1, 0.35855429553041862079, -0.61557057053651276224, - 0.85245079612425989080, + 0.8524507961242598908, -0.81748452885714650851, 0.71433884794133317708, -0.37407872652024110049, - 0.38545903041225772212e-01, + 0.38545903041225772212e-1, 0.32491789900786610668, -0.71166267346081557577, 0.52788626889922929397, - -0.13405750112830658871e+01, + -0.13405750112830658871e+1, -0.62534150891313355913, - -0.25431224314453122481e+01, - -0.36780031996329078936e+01, - -0.49615604599370328742e+01, - -0.69007455718014902857e+01, - -0.58212870361172592837e+01, - -0.47722091772717893932e+01, + -0.25431224314453122481e+1, + -0.36780031996329078936e+1, + -0.49615604599370328742e+1, + -0.69007455718014902857e+1, + -0.58212870361172592837e+1, + -0.47722091772717893932e+1, -0.50674870523164339264, - 0.31628246658109628875e+01, - 0.45127630867842363216e+01, - 0.35462707029864222186e+01, - -0.14982800329160554931e+01, - -0.36007107408578447050e+01, - -0.32375045450669750480e+01, - 0.88020751235792360490, - 0.41055258268124701360e+01, - 0.15035253041272478303e+01, - -0.15077317860178851561e+01, - -0.38533484786141416478e+01, + 0.31628246658109628875e+1, + 0.45127630867842363216e+1, + 0.35462707029864222186e+1, + -0.14982800329160554931e+1, + -0.3600710740857844705e+1, + -0.3237504545066975048e+1, + 0.8802075123579236049, + 0.4105525826812470136e+1, + 0.15035253041272478303e+1, + -0.15077317860178851561e+1, + -0.38533484786141416478e+1, 0.29546820910753246459, - 0.31642261382990337637e+01, - 0.13706946488434499365e+01, - -0.19346468096401694403e+01, - -0.29677473040936783732e+01, - 0.18743218563186241354e+01, - 0.25179113847154162009e+01, + 0.31642261382990337637e+1, + 0.13706946488434499365e+1, + -0.19346468096401694403e+1, + -0.29677473040936783732e+1, + 0.18743218563186241354e+1, + 0.25179113847154162009e+1, -0.60588434736220331267, - -0.26535827525536395122e+01, + -0.26535827525536395122e+1, -0.18107787532859909163, - 0.31300238312623709369e+01, - -0.17600642965411886220, - -0.25538497853106307822e+01, - -0.22361134729845411062e-01, - 0.22466253214320994758e+01, + 0.31300238312623709369e+1, + -0.1760064296541188622, + -0.25538497853106307822e+1, + -0.22361134729845411062e-1, + 0.22466253214320994758e+1, 0.44576762889923915445, - -0.28648020870438859475e+01, + -0.28648020870438859475e+1, 0.45260670078891135359, - 0.24798434866342664584e+01, - -0.10837781578833489693e+01, - -0.14971460068034156965e+01, - 0.37138169156300376850, - 0.25131915454623032780e+01, - -0.20653193510984464432e+01, - -0.12125010033929162212e+01, - 0.24060498136834849170e+01, + 0.24798434866342664584e+1, + -0.10837781578833489693e+1, + -0.14971460068034156965e+1, + 0.3713816915630037685, + 0.2513191545462303278e+1, + -0.20653193510984464432e+1, + -0.12125010033929162212e+1, + 0.2406049813683484917e+1, -0.26767529145321061756, - -0.11636007921759299322e+01, - -0.58143288600311415770, - 0.26617864534904183138e+01, - -0.15838424846580609895e+01, - -0.13895682560010946816e+01, - 0.23369856610493413562e+01, + -0.11636007921759299322e+1, + -0.5814328860031141577, + 0.26617864534904183138e+1, + -0.15838424846580609895e+1, + -0.13895682560010946816e+1, + 0.23369856610493413562e+1, -0.41305611088114280172, - -0.12085471456717451488e+01, + -0.12085471456717451488e+1, 0.21371854881992830011, - 0.16937930759589294727e+01, - -0.14434913709553938155e+01, + 0.16937930759589294727e+1, + -0.14434913709553938155e+1, -0.95435131964951480654, - 0.25205440118213995326e+01, - -0.13336967605384957292e+01, - -0.10025010547009185480e+01, - 0.16751867477993669375e+01, + 0.25205440118213995326e+1, + -0.13336967605384957292e+1, + -0.1002501054700918548e+1, + 0.16751867477993669375e+1, -0.24479779861209602365, - -0.10063359354190613004e+01, + -0.10063359354190613004e+1, 0.25011261047313559924, - 0.15960653367557982030e+01, - -0.20922036980451479415e+01, + 0.1596065336755798203e+1, + -0.20922036980451479415e+1, 0.40087638061170388637, - 0.17445379877938453905e+01, - -0.20998567920832820199e+01, + 0.17445379877938453905e+1, + -0.20998567920832820199e+1, 0.52015971441003194808, - 0.10696531418635160104e+01, + 0.10696531418635160104e+1, -0.95913530087603815488, -0.43233152890503040444, - 0.12587896430309499785e+01, - -0.43062411840561093390, - -0.11271151941408767971e+01, - 0.16052846975228067805e+01, + 0.12587896430309499785e+1, + -0.4306241184056109339, + -0.11271151941408767971e+1, + 0.16052846975228067805e+1, -0.31132372179311684768, - -0.15355000344168880932e+01, - 0.21317800044132981796e+01, + -0.15355000344168880932e+1, + 0.21317800044132981796e+1, -0.90243840595295887752, -0.95603982322080860445, - 0.17936934072788646155e+01, - -0.10984461983750093417e+01, + 0.17936934072788646155e+1, + -0.10984461983750093417e+1, -0.10699499376540529127, 0.47762977290184460699, 0.29090028136985124352, - -0.11828815769085709864e+01, + -0.11828815769085709864e+1, 0.99467749458477450197, 0.43890517207559093249, - -0.20010529271250381278e+01, - 0.23546363396338643170e+01, - -0.11400571744377343553e+01, + -0.20010529271250381278e+1, + 0.2354636339633864317e+1, + -0.11400571744377343553e+1, -0.67776846412313196399, - 0.17085279212533199811e+01, - -0.12961260660317168725e+01, - 0.27460846133615553211e-01, + 0.17085279212533199811e+1, + -0.12961260660317168725e+1, + 0.27460846133615553211e-1, 0.91426829334672610194, -0.78383193517342952816, -0.11482853309729104674, @@ -12205,16 +12207,16 @@ function ESERK4ConstantCache(zprev) 0.83816798775866663274, -0.60987259730373422073, -0.45180298763469617374, - 0.15061135133079743831e+01, - -0.16053029646347078963e+01, + 0.15061135133079743831e+1, + -0.16053029646347078963e+1, 0.50651954992038883407, - 0.11295789245019294267e+01, - -0.21976326780456210130e+01, - 0.19911301708378725817e+01, + 0.11295789245019294267e+1, + -0.2197632678045621013e+1, + 0.19911301708378725817e+1, -0.67646606791890862009, - -0.84080864750363615290, - 0.16175915466464403369e+01, - -0.12988158211918672258e+01, + -0.8408086475036361529, + 0.16175915466464403369e+1, + -0.12988158211918672258e+1, 0.31407768716172868029, 0.54427600441861356817, -0.70797025933294965849, @@ -12226,42 +12228,42 @@ function ESERK4ConstantCache(zprev) -0.62194458463840385232, 0.24123601050362827869, 0.50240806516514158186, - -0.10207700728989645977e+01, + -0.10207700728989645977e+1, 0.83116502491555177556, - 0.83126712247840073289e-01, - -0.11980547992093055765e+01, - 0.17924152263404067309e+01, - -0.14091068542327334079e+01, + 0.83126712247840073289e-1, + -0.11980547992093055765e+1, + 0.17924152263404067309e+1, + -0.14091068542327334079e+1, 0.19274666356673428314, - 0.11907511132129529052e+01, - -0.19371155373030735092e+01, - 0.16103700615099014737e+01, + 0.11907511132129529052e+1, + -0.19371155373030735092e+1, + 0.16103700615099014737e+1, -0.39245523631711964896, - -0.10122211953578463817e+01, - 0.18109662115051097242e+01, - -0.15683586781231058094e+01, + -0.10122211953578463817e+1, + 0.18109662115051097242e+1, + -0.15683586781231058094e+1, 0.45631902056268752732, - 0.88193068141188113440, - -0.17028345478483908337e+01, - 0.15934862624738932446e+01, + 0.8819306814118811344, + -0.17028345478483908337e+1, + 0.15934862624738932446e+1, -0.66645082732510629864, -0.52666723831025419322, - 0.13384060028528361741e+01, - -0.13713876582888371303e+01, + 0.13384060028528361741e+1, + -0.13713876582888371303e+1, 0.67935202731895394379, 0.31246228253694696697, - -0.10585874981012663998e+01, - 0.12004877849035799908e+01, + -0.10585874981012663998e+1, + 0.12004877849035799908e+1, -0.72504563888687345585, - -0.59340409025365289941e-01, + -0.59340409025365289941e-1, 0.72651440624386387501, -0.95775256739442848897, 0.69703404620863085306, -0.13906152853853848139, -0.39606310262265642663, - 0.64515109107002066580, + 0.6451510910700206658, -0.51960794311586000482, - 0.12955338382843070710, + 0.1295533838284307071, 0.30146450279538111738, -0.55578845493978157322, 0.52776709012503941754, @@ -12270,186 +12272,186 @@ function ESERK4ConstantCache(zprev) 0.39443382694580708669, -0.46773869625838976338, 0.30850783515814511615, - -0.15685629857284149047e+01, - 0.20315811089882540585e+01, + -0.15685629857284149047e+1, + 0.20315811089882540585e+1, 0.59612053614718663042, - -0.28173420125466730468e+01, - 0.39033990115484407113e+01, - -0.26885748938867415347e+01, + -0.28173420125466730468e+1, + 0.39033990115484407113e+1, + -0.26885748938867415347e+1, 0.24484717585825560571, - 0.27031232124438751008e+01, - -0.41228526420531803609e+01, - 0.37952558943255074730e+01, - -0.14112611417962568350e+01, - -0.12274366096790687575e+01, - 0.32117604475757186577e+01, - -0.30038631553477137537e+01, - 0.13075007691428590650e+01, - 0.13407365381643800983e+01, - -0.28649399532645221100e+01, - 0.28422990881616092551e+01, + 0.27031232124438751008e+1, + -0.41228526420531803609e+1, + 0.3795255894325507473e+1, + -0.1411261141796256835e+1, + -0.12274366096790687575e+1, + 0.32117604475757186577e+1, + -0.30038631553477137537e+1, + 0.1307500769142859065e+1, + 0.13407365381643800983e+1, + -0.286493995326452211e+1, + 0.28422990881616092551e+1, -0.74686377085980726331, - -0.17363024749396678281e+01, - 0.36819881457825949234e+01, - -0.34646039180624277343e+01, - 0.17081590438358273953e+01, - 0.10745395531167312164e+01, - -0.27985443563375773657e+01, - 0.30426336372854598800e+01, - -0.13125170176221929719e+01, - -0.69713898861147871600, - 0.21484184221173152629e+01, - -0.16343256400943773077e+01, - 0.43172734675267721016e-01, - 0.19747412752583219930e+01, - -0.24911125532403324279e+01, - 0.15440166095895790921e+01, + -0.17363024749396678281e+1, + 0.36819881457825949234e+1, + -0.34646039180624277343e+1, + 0.17081590438358273953e+1, + 0.10745395531167312164e+1, + -0.27985443563375773657e+1, + 0.304263363728545988e+1, + -0.13125170176221929719e+1, + -0.697138988611478716, + 0.21484184221173152629e+1, + -0.16343256400943773077e+1, + 0.43172734675267721016e-1, + 0.1974741275258321993e+1, + -0.24911125532403324279e+1, + 0.15440166095895790921e+1, 0.79571667153291425478, - -0.24981600013923839221e+01, - 0.28746785544020996284e+01, - -0.11415513889970014816e+01, - -0.10554143660630856960e+01, - 0.26536886595926403309e+01, - -0.19816046581074096000e+01, - -0.95987508551257344491e-01, - 0.26120054573398223674e+01, - -0.31920573776519556297e+01, - 0.16585848558125659835e+01, - 0.16604144489310213029e+01, - -0.41184418068794510503e+01, - 0.44566383842168706408e+01, - -0.17977624424826268434e+01, - -0.17266701744542558572e+01, - 0.42996877345714796803e+01, - -0.37529123084118136688e+01, - 0.10371148797689899723e+01, - 0.23272111426300634562e+01, - -0.34257129318908163818e+01, - 0.19813246692772021884e+01, - 0.13187907101816738198e+01, - -0.34472992395985673220e+01, - 0.32255993156652813525e+01, + -0.24981600013923839221e+1, + 0.28746785544020996284e+1, + -0.11415513889970014816e+1, + -0.1055414366063085696e+1, + 0.26536886595926403309e+1, + -0.19816046581074096e+1, + -0.95987508551257344491e-1, + 0.26120054573398223674e+1, + -0.31920573776519556297e+1, + 0.16585848558125659835e+1, + 0.16604144489310213029e+1, + -0.41184418068794510503e+1, + 0.44566383842168706408e+1, + -0.17977624424826268434e+1, + -0.17266701744542558572e+1, + 0.42996877345714796803e+1, + -0.37529123084118136688e+1, + 0.10371148797689899723e+1, + 0.23272111426300634562e+1, + -0.34257129318908163818e+1, + 0.19813246692772021884e+1, + 0.13187907101816738198e+1, + -0.3447299239598567322e+1, + 0.32255993156652813525e+1, -0.37942647437560256263, - -0.23616691406518350860e+01, - 0.32833651283830560530e+01, - -0.12391988574069690010e+01, - -0.15153831782225608560e+01, - 0.29744695009351964643e+01, - -0.12384330078281031717e+01, - -0.19464017826295387792e+01, - 0.43374175315956149390e+01, - -0.32058129495225298200e+01, + -0.2361669140651835086e+1, + 0.3283365128383056053e+1, + -0.1239198857406969001e+1, + -0.1515383178222560856e+1, + 0.29744695009351964643e+1, + -0.12384330078281031717e+1, + -0.19464017826295387792e+1, + 0.4337417531595614939e+1, + -0.320581294952252982e+1, -0.42936502110890467643, - 0.42930541719394073041e+01, - -0.48178444362475971730e+01, - 0.19972557424973413909e+01, - 0.23257235047295430341e+01, - -0.41340104972841995590e+01, - 0.25091954089225851909e+01, - 0.13380046908299005892e+01, - -0.33311137715688374783e+01, - 0.20285245461272283229e+01, - 0.17566372400569538748e+01, - -0.38649997540008498298e+01, - 0.24822334847273634928e+01, - 0.17504053913884467519e+01, - -0.44027593460632497013e+01, - 0.32098172981961825556e+01, - 0.13365688065871446089e+01, - -0.44891478434654157326e+01, - 0.35271243730615249312e+01, - 0.11951611824273442597e+01, - -0.46795042719225259376e+01, - 0.39329823051158512293e+01, + 0.42930541719394073041e+1, + -0.4817844436247597173e+1, + 0.19972557424973413909e+1, + 0.23257235047295430341e+1, + -0.4134010497284199559e+1, + 0.25091954089225851909e+1, + 0.13380046908299005892e+1, + -0.33311137715688374783e+1, + 0.20285245461272283229e+1, + 0.17566372400569538748e+1, + -0.38649997540008498298e+1, + 0.24822334847273634928e+1, + 0.17504053913884467519e+1, + -0.44027593460632497013e+1, + 0.32098172981961825556e+1, + 0.13365688065871446089e+1, + -0.44891478434654157326e+1, + 0.35271243730615249312e+1, + 0.11951611824273442597e+1, + -0.46795042719225259376e+1, + 0.39329823051158512293e+1, 0.64979020258443898062, - -0.38666222839867181449e+01, - 0.28079733552248753448e+01, - 0.16416652445449382292e+01, - -0.39098275881084618710e+01, - 0.14615041232176742003e+01, - 0.38286111714720321153e+01, - -0.57509159876584661220e+01, - 0.22587401968774751815e+01, - 0.36253733691684990603e+01, - -0.52584964793136910188e+01, - 0.15299336573445110332e+01, - 0.33306634761485223173e+01, - -0.29627584106288313848e+01, - -0.18283744260626038081e+01, - 0.53560858899511147868e+01, - -0.22972428931469046631e+01, - -0.38242461394294133825e+01, - 0.61126019677781693318e+01, - -0.12732583787012830001e+01, - -0.42912980215016194308e+01, - 0.39080774468519128284e+01, - 0.21601920297316001829e+01, - -0.51714099382764056045e+01, - 0.10210121154700777524e+01, - 0.52920410977103076178e+01, - -0.45562097640087593220e+01, - -0.22161693020102606333e+01, - 0.60444607043802145441e+01, + -0.38666222839867181449e+1, + 0.28079733552248753448e+1, + 0.16416652445449382292e+1, + -0.3909827588108461871e+1, + 0.14615041232176742003e+1, + 0.38286111714720321153e+1, + -0.5750915987658466122e+1, + 0.22587401968774751815e+1, + 0.36253733691684990603e+1, + -0.52584964793136910188e+1, + 0.15299336573445110332e+1, + 0.33306634761485223173e+1, + -0.29627584106288313848e+1, + -0.18283744260626038081e+1, + 0.53560858899511147868e+1, + -0.22972428931469046631e+1, + -0.38242461394294133825e+1, + 0.61126019677781693318e+1, + -0.12732583787012830001e+1, + -0.42912980215016194308e+1, + 0.39080774468519128284e+1, + 0.21601920297316001829e+1, + -0.51714099382764056045e+1, + 0.10210121154700777524e+1, + 0.52920410977103076178e+1, + -0.4556209764008759322e+1, + -0.22161693020102606333e+1, + 0.60444607043802145441e+1, -0.97195115442826629515, - -0.54504665513392858145e+01, - 0.41044515457526795643e+01, - 0.34629393928601497343e+01, - -0.52926882962975696501e+01, - -0.14337465869765617654e+01, - 0.66688126273154946233e+01, - -0.13050796478515132026e+01, - -0.63928483221628447097e+01, - 0.45506011677434416995e+01, - 0.41149907679255415260e+01, - -0.45709981705900153415e+01, - -0.39080317208708477139e+01, - 0.67092726680002341411e+01, - 0.24016244230363645862e+01, - -0.77818990445813982504e+01, + -0.54504665513392858145e+1, + 0.41044515457526795643e+1, + 0.34629393928601497343e+1, + -0.52926882962975696501e+1, + -0.14337465869765617654e+1, + 0.66688126273154946233e+1, + -0.13050796478515132026e+1, + -0.63928483221628447097e+1, + 0.45506011677434416995e+1, + 0.4114990767925541526e+1, + -0.45709981705900153415e+1, + -0.39080317208708477139e+1, + 0.67092726680002341411e+1, + 0.24016244230363645862e+1, + -0.77818990445813982504e+1, 0.25051005918732982547, - 0.65576065832740075834e+01, + 0.65576065832740075834e+1, 0.77497210316182996159, - -0.80051088746696912324e+01, + -0.80051088746696912324e+1, 0.40266588026031746583, - 0.86368112411832367314e+01, - -0.11818831085803680470e+01, - -0.71577151534089580309e+01, - -0.12666952321793616409e+01, - 0.90895012809377231378e+01, - 0.20316032150080847174e+01, - -0.88340252020909098007e+01, - -0.32566001875084387152e+01, - 0.63066473717093360918e+01, - 0.82852527641657811586e+01, - -0.55636411047108129679e+01, - -0.91545381246266739339e+01, - 0.29104385971556995250, - 0.94153871903817485389e+01, - 0.74458969903472107532e+01, - -0.72578194012429237958e+01, - -0.10054941828586208885e+02, - -0.36497739573327199203e+01, - 0.96017629889996225501e+01, - 0.12216178109528366136e+02, - 0.24887517522419955185e+01, - -0.82885160404169493376e+01, - -0.15338942737393438165e+02, - -0.83797724182198933818e+01, - 0.16375226871363415260e+01, - 0.13351625425967613481e+02, - 0.19261904583932352608e+02, - 0.18891262494730973742e+02, - 0.16467091346113981842e+02, - 0.10459679993223362615e+02, - 0.72507444043318942661e+01, - 0.35090849516237598849e+01, - 0.17334616671059772663e+01, - 0.11825484967729917862e+01, + 0.86368112411832367314e+1, + -0.1181883108580368047e+1, + -0.71577151534089580309e+1, + -0.12666952321793616409e+1, + 0.90895012809377231378e+1, + 0.20316032150080847174e+1, + -0.88340252020909098007e+1, + -0.32566001875084387152e+1, + 0.63066473717093360918e+1, + 0.82852527641657811586e+1, + -0.55636411047108129679e+1, + -0.91545381246266739339e+1, + 0.2910438597155699525, + 0.94153871903817485389e+1, + 0.74458969903472107532e+1, + -0.72578194012429237958e+1, + -0.10054941828586208885e+2, + -0.36497739573327199203e+1, + 0.96017629889996225501e+1, + 0.12216178109528366136e+2, + 0.24887517522419955185e+1, + -0.82885160404169493376e+1, + -0.15338942737393438165e+2, + -0.83797724182198933818e+1, + 0.1637522687136341526e+1, + 0.13351625425967613481e+2, + 0.19261904583932352608e+2, + 0.18891262494730973742e+2, + 0.16467091346113981842e+2, + 0.10459679993223362615e+2, + 0.72507444043318942661e+1, + 0.35090849516237598849e+1, + 0.17334616671059772663e+1, + 0.11825484967729917862e+1, -0.20925325462281885169, 0.71902107573908669025, -0.46780365968448023306, 0.32500232329381817387, - -0.39825757415986734467e-01, + -0.39825757415986734467e-1, -0.23711991924720485225, 0.47454350336491285534, -0.62135375038357465449, @@ -12457,417 +12459,417 @@ function ESERK4ConstantCache(zprev) -0.56504278227324411521, 0.38140006462098685613, -0.14116967199271956979, - -0.11031037729423000260, - 0.32499098786330549160, + -0.1103103772942300026, + 0.3249909878633054916, -0.46815612477891388465, 0.51800032885758251489, -0.47454547085983300736, 0.35297730514421504777, -0.18440612830619301787, - 0.47169926211177411537e-02, + 0.47169926211177411537e-2, 0.14888371246701243011, -0.24829187528349558334, 0.27672872591787306407, -0.23372476050351628785, 0.13286796818799861963, -0.79928979286799273218, - 0.11717392547554850157e+01, - -0.74366043726453101570, - -0.80996511113975211416e-01, + 0.11717392547554850157e+1, + -0.7436604372645310157, + -0.80996511113975211416e-1, 0.62924024381018039964, - -0.12693963133981234215e+01, - 0.13683703064615535538e+01, - -0.13923879828541776416e+01, + -0.12693963133981234215e+1, + 0.13683703064615535538e+1, + -0.13923879828541776416e+1, 0.84453932425075750601, -0.33500034351748070316, -0.51211750680549950054, - 0.10167476807530928529e+01, - -0.15513095915791363932e+01, - 0.15015213600251540171e+01, - -0.13602075047767285820e+01, + 0.10167476807530928529e+1, + -0.15513095915791363932e+1, + 0.15015213600251540171e+1, + -0.1360207504776728582e+1, 0.66304844757016789814, - -0.48174204469024262121e-01, + -0.48174204469024262121e-1, -0.83978369044386935727, - 0.13163562073571242195e+01, - -0.17630485323437279366e+01, - 0.15924445349719029696e+01, - -0.13228916275421933602e+01, + 0.13163562073571242195e+1, + -0.17630485323437279366e+1, + 0.15924445349719029696e+1, + -0.13228916275421933602e+1, 0.54763008151478465013, 0.14719880905951199246, -0.86587373613125140359, - 0.16125538352501100903e+01, - -0.10011337829295456903e+01, - 0.28109452843728965910e+01, - 0.19866629439547045521e+01, - 0.56017929835514017611e+01, - 0.92719153029333174487e+01, - 0.11571657934458361439e+02, - 0.16749249513419236735e+02, - 0.13936911085788707965e+02, - 0.11346537914198135510e+02, - 0.14206877957614405528e+01, - -0.78455255397201026923e+01, - -0.10585219395358764771e+02, - -0.87039421971615684726e+01, - 0.37000029530944824607e+01, - 0.86326236595111645045e+01, - 0.76908100202141804758e+01, - -0.19791037248940916982e+01, - -0.10003877703793392584e+02, - -0.34889644486322994865e+01, - 0.35632819937095243645e+01, - 0.92117968955712949963e+01, + 0.16125538352501100903e+1, + -0.10011337829295456903e+1, + 0.2810945284372896591e+1, + 0.19866629439547045521e+1, + 0.56017929835514017611e+1, + 0.92719153029333174487e+1, + 0.11571657934458361439e+2, + 0.16749249513419236735e+2, + 0.13936911085788707965e+2, + 0.1134653791419813551e+2, + 0.14206877957614405528e+1, + -0.78455255397201026923e+1, + -0.10585219395358764771e+2, + -0.87039421971615684726e+1, + 0.37000029530944824607e+1, + 0.86326236595111645045e+1, + 0.76908100202141804758e+1, + -0.19791037248940916982e+1, + -0.10003877703793392584e+2, + -0.34889644486322994865e+1, + 0.35632819937095243645e+1, + 0.92117968955712949963e+1, -0.58186747317353193498, - -0.78001032698812808874e+01, - -0.30430718602465893774e+01, - 0.43966003143005636389e+01, - 0.73177029764813692481e+01, - -0.46056536833936716491e+01, - -0.60532854074461903693e+01, - 0.15832700200163323245e+01, - 0.61334820477086759993e+01, + -0.78001032698812808874e+1, + -0.30430718602465893774e+1, + 0.43966003143005636389e+1, + 0.73177029764813692481e+1, + -0.46056536833936716491e+1, + -0.60532854074461903693e+1, + 0.15832700200163323245e+1, + 0.61334820477086759993e+1, 0.73457315571618087002, - -0.78293042445264457996e+01, + -0.78293042445264457996e+1, 0.69526094766886503695, - 0.59511063387952267689e+01, - 0.91666697301107533113e-01, - -0.52720972000054091566e+01, - -0.13487093513952990165e+01, - 0.72826632300765634653e+01, - -0.15776593039855826284e+01, - -0.54414375165972543869e+01, - 0.21349955886836524677e+01, - 0.39496162574798865386e+01, - -0.10938060034970882306e+01, - -0.60143788446632919786e+01, - 0.51246818621395862081e+01, - 0.25735610535280519784e+01, - -0.53136257172718295294e+01, + 0.59511063387952267689e+1, + 0.91666697301107533113e-1, + -0.52720972000054091566e+1, + -0.13487093513952990165e+1, + 0.72826632300765634653e+1, + -0.15776593039855826284e+1, + -0.54414375165972543869e+1, + 0.21349955886836524677e+1, + 0.39496162574798865386e+1, + -0.10938060034970882306e+1, + -0.60143788446632919786e+1, + 0.51246818621395862081e+1, + 0.25735610535280519784e+1, + -0.53136257172718295294e+1, 0.10785458108091761087, - 0.33374156996852577528e+01, + 0.33374156996852577528e+1, 0.89401011425815346545, - -0.59801423734259415710e+01, - 0.35133107520067432539e+01, - 0.34877261078989985066e+01, - -0.56367651885551186552e+01, + -0.5980142373425941571e+1, + 0.35133107520067432539e+1, + 0.34877261078989985066e+1, + -0.56367651885551186552e+1, 0.91361406839610237451, - 0.30481964813115030033e+01, - -0.69782548880830652660, - -0.38793893675424477863e+01, - 0.32994649146616570334e+01, - 0.24182906688650098737e+01, - -0.61430498112263691723e+01, - 0.32685751806659797403e+01, - 0.23421286957605236267e+01, - -0.39414964360202100480e+01, + 0.30481964813115030033e+1, + -0.6978254888083065266, + -0.38793893675424477863e+1, + 0.32994649146616570334e+1, + 0.24182906688650098737e+1, + -0.61430498112263691723e+1, + 0.32685751806659797403e+1, + 0.23421286957605236267e+1, + -0.3941496436020210048e+1, 0.47095050997235415879, - 0.25783429604793703938e+01, + 0.25783429604793703938e+1, -0.81399790018175643969, - -0.35806890483214584009e+01, - 0.47554059868441136416e+01, + -0.35806890483214584009e+1, + 0.47554059868441136416e+1, -0.71474856416884280375, - -0.43833023411587097584e+01, - 0.51490248392900452856e+01, - -0.12482428138444963128e+01, - -0.26921549044823565033e+01, - 0.25455694093888641127e+01, + -0.43833023411587097584e+1, + 0.51490248392900452856e+1, + -0.12482428138444963128e+1, + -0.26921549044823565033e+1, + 0.25455694093888641127e+1, 0.69264979609860011234, - -0.26127103421618049772e+01, + -0.26127103421618049772e+1, 0.60504208293265715479, - 0.30997485797964539067e+01, - -0.41667876390381017870e+01, + 0.30997485797964539067e+1, + -0.4166787639038101787e+1, 0.93722304155364799527, - 0.36430522947592312022e+01, - -0.52325905182493741563e+01, - 0.24260717251382004633e+01, - 0.19187875824240985256e+01, - -0.38623068774461102315e+01, - 0.21800082664433761970e+01, + 0.36430522947592312022e+1, + -0.52325905182493741563e+1, + 0.24260717251382004633e+1, + 0.19187875824240985256e+1, + -0.38623068774461102315e+1, + 0.2180008266443376197e+1, 0.66635233996911913401, - -0.14586966346195398003e+01, - -0.52631391161266272150, - 0.28290547120979852025e+01, - -0.25452358221668029969e+01, - -0.74688833891148964650, - 0.43808469486050860553e+01, - -0.51659211400847961926e+01, - 0.22422357421376237774e+01, - 0.20695585763653108202e+01, - -0.44436999739850699953e+01, - 0.33140677519743397816e+01, + -0.14586966346195398003e+1, + -0.5263139116126627215, + 0.28290547120979852025e+1, + -0.25452358221668029969e+1, + -0.7468883389114896465, + 0.43808469486050860553e+1, + -0.51659211400847961926e+1, + 0.22422357421376237774e+1, + 0.20695585763653108202e+1, + -0.44436999739850699953e+1, + 0.33140677519743397816e+1, -0.11066346052552872292, - -0.23116138121421996310e+01, - 0.21409844077955435537e+01, - -0.94512507481819760247e-01, - -0.15801480190488674804e+01, - 0.11967364196404652876e+01, + -0.2311613812142199631e+1, + 0.21409844077955435537e+1, + -0.94512507481819760247e-1, + -0.15801480190488674804e+1, + 0.11967364196404652876e+1, 0.78413788523314764678, - -0.23323004270627691881e+01, - 0.16664927026772302643e+01, - 0.10147699259270948069e+01, - -0.36804889579614443740e+01, - 0.40361923771335517230e+01, - -0.14889791653243020786e+01, - -0.23885413905675969559e+01, - 0.49443665090349693259e+01, - -0.44851480217174959364e+01, - 0.14007091024904994025e+01, - 0.21425874076802240431e+01, - -0.38974197021763323789e+01, - 0.30222903514721326523e+01, + -0.23323004270627691881e+1, + 0.16664927026772302643e+1, + 0.10147699259270948069e+1, + -0.3680488957961444374e+1, + 0.4036192377133551723e+1, + -0.14889791653243020786e+1, + -0.23885413905675969559e+1, + 0.49443665090349693259e+1, + -0.44851480217174959364e+1, + 0.14007091024904994025e+1, + 0.21425874076802240431e+1, + -0.38974197021763323789e+1, + 0.30222903514721326523e+1, -0.56443994577970202364, - -0.15667714906325067581e+01, - 0.19971275968945940704e+01, - -0.84842794849505731580, + -0.15667714906325067581e+1, + 0.19971275968945940704e+1, + -0.8484279484950573158, -0.62745604052686398955, - 0.11005352975738031951e+01, - -0.27713788422760043950, + 0.11005352975738031951e+1, + -0.2771378842276004395, -0.99692046297247816078, - 0.14317801864356065611e+01, + 0.14317801864356065611e+1, -0.43390938172805038064, - -0.14188158004520738942e+01, - 0.27065259178692731012e+01, - -0.22706165895646281960e+01, - 0.68979437248086777901e-01, - 0.26351771452472165791e+01, - -0.41080460952381780970e+01, - 0.32438863103341337712e+01, + -0.14188158004520738942e+1, + 0.27065259178692731012e+1, + -0.2270616589564628196e+1, + 0.68979437248086777901e-1, + 0.26351771452472165791e+1, + -0.4108046095238178097e+1, + 0.32438863103341337712e+1, -0.38516495571019460087, - -0.28783360197444687323e+01, - 0.46193563316629040472e+01, - -0.37969464036196400869e+01, + -0.28783360197444687323e+1, + 0.46193563316629040472e+1, + -0.37969464036196400869e+1, 0.84728640206375305244, - 0.25374651710683826522e+01, - -0.44585312702987494049e+01, - 0.38719580967699052110e+01, - -0.11954012712212815917e+01, - -0.20259130493479680091e+01, - 0.40032543414227648171e+01, - -0.37456224723418634071e+01, - 0.15211770646933402418e+01, - 0.13441435522855140761e+01, - -0.32963273504079317888e+01, - 0.33782412554056882037e+01, - -0.17179403883717945245e+01, + 0.25374651710683826522e+1, + -0.44585312702987494049e+1, + 0.3871958096769905211e+1, + -0.11954012712212815917e+1, + -0.20259130493479680091e+1, + 0.40032543414227648171e+1, + -0.37456224723418634071e+1, + 0.15211770646933402418e+1, + 0.13441435522855140761e+1, + -0.32963273504079317888e+1, + 0.33782412554056882037e+1, + -0.17179403883717945245e+1, -0.66720412985930077632, - 0.24682182985881122583e+01, - -0.28262237165208858869e+01, - 0.17081652310375243786e+01, - 0.14619053921821997810, - -0.17171809570560627733e+01, - 0.22415346773749598164e+01, - -0.15883183448434394780e+01, + 0.24682182985881122583e+1, + -0.28262237165208858869e+1, + 0.17081652310375243786e+1, + 0.1461905392182199781, + -0.17171809570560627733e+1, + 0.22415346773749598164e+1, + -0.1588318344843439478e+1, 0.22639717801484127158, - 0.10734450871688443474e+01, - -0.16792605314734831978e+01, - 0.13777012002965742798e+01, + 0.10734450871688443474e+1, + -0.16792605314734831978e+1, + 0.13777012002965742798e+1, -0.43441533345338284589, -0.61312076712772567433, - 0.12401194769765468973e+01, - -0.11913452032433677896e+01, + 0.12401194769765468973e+1, + -0.11913452032433677896e+1, 0.55629050152603376489, - 0.30751665166894143200, + 0.307516651668941432, -0.97373424460038515704, - 0.11386532436268625990e+01, + 0.1138653243626862599e+1, -0.74783093302006020675, - 0.27132475341073170050e+01, - -0.34221315306048127880e+01, - -0.10401503213155909311e+01, - 0.46191123106363134454e+01, - -0.63348350755955067370e+01, - 0.42255233431161611790e+01, + 0.2713247534107317005e+1, + -0.3422131530604812788e+1, + -0.10401503213155909311e+1, + 0.46191123106363134454e+1, + -0.6334835075595506737e+1, + 0.4225523343116161179e+1, -0.31069002233889042586, - -0.43304208977750429099e+01, - 0.62512402101104935781e+01, - -0.53790660705394053309e+01, - 0.12197854095197482316e+01, - 0.29841039165273515188e+01, - -0.58769256101123437119e+01, - 0.49010677374903917070e+01, - -0.15909174087270796516e+01, - -0.30989269383290061199e+01, - 0.54898919940813621920e+01, - -0.51112092241751039268e+01, - 0.11806825641962384044e+01, - 0.30942548771551567910e+01, - -0.61695237081711624683e+01, - 0.52702798097279712763e+01, - -0.18506249926274276341e+01, - -0.30291300304421691081e+01, - 0.55332026652114896237e+01, - -0.51458522078048511972e+01, - 0.12343997794931758083e+01, - 0.27757225707843695695e+01, - -0.52716448755401339454e+01, - 0.37289841424025707006e+01, - -0.82826861244373176096e-01, - -0.42000436321138598927e+01, - 0.53237234307766527763e+01, - -0.33707220128094830258e+01, - -0.13979377941675057428e+01, - 0.49406831063568432683e+01, - -0.57869357068166547009e+01, - 0.23674106790376598930e+01, - 0.21548753285135719970e+01, - -0.56214915029132992430e+01, - 0.46593049295615447392e+01, + -0.43304208977750429099e+1, + 0.62512402101104935781e+1, + -0.53790660705394053309e+1, + 0.12197854095197482316e+1, + 0.29841039165273515188e+1, + -0.58769256101123437119e+1, + 0.4901067737490391707e+1, + -0.15909174087270796516e+1, + -0.30989269383290061199e+1, + 0.5489891994081362192e+1, + -0.51112092241751039268e+1, + 0.11806825641962384044e+1, + 0.3094254877155156791e+1, + -0.61695237081711624683e+1, + 0.52702798097279712763e+1, + -0.18506249926274276341e+1, + -0.30291300304421691081e+1, + 0.55332026652114896237e+1, + -0.51458522078048511972e+1, + 0.12343997794931758083e+1, + 0.27757225707843695695e+1, + -0.52716448755401339454e+1, + 0.37289841424025707006e+1, + -0.82826861244373176096e-1, + -0.42000436321138598927e+1, + 0.53237234307766527763e+1, + -0.33707220128094830258e+1, + -0.13979377941675057428e+1, + 0.49406831063568432683e+1, + -0.57869357068166547009e+1, + 0.2367410679037659893e+1, + 0.2154875328513571997e+1, + -0.5621491502913299243e+1, + 0.46593049295615447392e+1, -0.73419046527904152644, - -0.43974791826806658435e+01, - 0.61581772159891068341e+01, - -0.40029978726622204022e+01, - -0.17237865818748592250e+01, - 0.62310149186407928212e+01, - -0.72121272687667392631e+01, - 0.28853292382575603803e+01, - 0.29749972177950629870e+01, - -0.72297022123381946557e+01, - 0.59699783972414364186e+01, - -0.10163774241918626107e+01, - -0.49143630243607105967e+01, - 0.65479803140034569253e+01, - -0.35716790495770389668e+01, - -0.26361465198399920418e+01, - 0.64083801909528741447e+01, - -0.56742896912063569559e+01, - 0.76642367949716405651e-01, - 0.51117163444129669614e+01, - -0.66266606367823417401e+01, - 0.23438187987770247034e+01, - 0.33718372326587062737e+01, - -0.66000112572140867684e+01, - 0.36008858352645942702e+01, - 0.24449028724452754879e+01, - -0.73465458975498627581e+01, - 0.58620009764179261680e+01, + -0.43974791826806658435e+1, + 0.61581772159891068341e+1, + -0.40029978726622204022e+1, + -0.1723786581874859225e+1, + 0.62310149186407928212e+1, + -0.72121272687667392631e+1, + 0.28853292382575603803e+1, + 0.2974997217795062987e+1, + -0.72297022123381946557e+1, + 0.59699783972414364186e+1, + -0.10163774241918626107e+1, + -0.49143630243607105967e+1, + 0.65479803140034569253e+1, + -0.35716790495770389668e+1, + -0.26361465198399920418e+1, + 0.64083801909528741447e+1, + -0.56742896912063569559e+1, + 0.76642367949716405651e-1, + 0.51117163444129669614e+1, + -0.66266606367823417401e+1, + 0.23438187987770247034e+1, + 0.33718372326587062737e+1, + -0.66000112572140867684e+1, + 0.36008858352645942702e+1, + 0.24449028724452754879e+1, + -0.73465458975498627581e+1, + 0.5862000976417926168e+1, 0.28728040370027813077, - -0.70654290201515692615e+01, - 0.79241334575294599674e+01, - -0.28858981291701728544e+01, - -0.47167753594944468176e+01, - 0.75368460071406113698e+01, - -0.40588123432129643575e+01, - -0.33352735456512663248e+01, - 0.69721248505557111841e+01, - -0.42270478395709156771e+01, - -0.32703865373929756899e+01, - 0.75869957622156549704e+01, - -0.52247263499681606547e+01, - -0.26899569820016222543e+01, - 0.78427644165853767078e+01, - -0.59196661326408603898e+01, - -0.23066004128507722193e+01, - 0.80724351516917742799e+01, - -0.63650069075908035643e+01, - -0.21957535415527518197e+01, - 0.83635615058545802469e+01, - -0.66987392120464335221e+01, - -0.19535648827228035973e+01, - 0.78019697239217267182e+01, - -0.54423552497507348136e+01, - -0.33938198652522642007e+01, - 0.81449622983773988238e+01, - -0.39372838246151107278e+01, - -0.58577431784400832981e+01, - 0.96754097530246720993e+01, - -0.36582699110164020873e+01, - -0.66890491258535691443e+01, - 0.91184587127823650832e+01, - -0.17258986473503221681e+01, - -0.74997195652290651324e+01, - 0.66468939689900592427e+01, - 0.27121640633906212159e+01, - -0.98528337325159984772e+01, - 0.46781289527404528172e+01, - 0.63563856239027982653e+01, - -0.10473345542950754705e+02, - 0.15254271515222523892e+01, - 0.85785075926018752313e+01, - -0.74929631982002042889e+01, - -0.41896190814005507264e+01, - 0.10047834186194258166e+02, - -0.23844020030273065380e+01, - -0.94708107711191651390e+01, - 0.82568757810096826688e+01, - 0.42060971232604780212e+01, - -0.11239937105760205327e+02, - 0.17609769202969667301e+01, - 0.10124887866527680913e+02, - -0.74496877875582017126e+01, - -0.68362613165587431396e+01, - 0.10323416328577183165e+02, - 0.22944866542274335863e+01, - -0.12283766211486055298e+02, - 0.25980106146409673862e+01, - 0.11404373601750343425e+02, - -0.76650990529809739371e+01, - -0.86624823881871986231e+01, - 0.94518513144043989627e+01, - 0.66464803381621901934e+01, - -0.12311069813879083057e+02, - -0.42014513651596079313e+01, - 0.13801522434757181657e+02, + -0.70654290201515692615e+1, + 0.79241334575294599674e+1, + -0.28858981291701728544e+1, + -0.47167753594944468176e+1, + 0.75368460071406113698e+1, + -0.40588123432129643575e+1, + -0.33352735456512663248e+1, + 0.69721248505557111841e+1, + -0.42270478395709156771e+1, + -0.32703865373929756899e+1, + 0.75869957622156549704e+1, + -0.52247263499681606547e+1, + -0.26899569820016222543e+1, + 0.78427644165853767078e+1, + -0.59196661326408603898e+1, + -0.23066004128507722193e+1, + 0.80724351516917742799e+1, + -0.63650069075908035643e+1, + -0.21957535415527518197e+1, + 0.83635615058545802469e+1, + -0.66987392120464335221e+1, + -0.19535648827228035973e+1, + 0.78019697239217267182e+1, + -0.54423552497507348136e+1, + -0.33938198652522642007e+1, + 0.81449622983773988238e+1, + -0.39372838246151107278e+1, + -0.58577431784400832981e+1, + 0.96754097530246720993e+1, + -0.36582699110164020873e+1, + -0.66890491258535691443e+1, + 0.91184587127823650832e+1, + -0.17258986473503221681e+1, + -0.74997195652290651324e+1, + 0.66468939689900592427e+1, + 0.27121640633906212159e+1, + -0.98528337325159984772e+1, + 0.46781289527404528172e+1, + 0.63563856239027982653e+1, + -0.10473345542950754705e+2, + 0.15254271515222523892e+1, + 0.85785075926018752313e+1, + -0.74929631982002042889e+1, + -0.41896190814005507264e+1, + 0.10047834186194258166e+2, + -0.2384402003027306538e+1, + -0.9470810771119165139e+1, + 0.82568757810096826688e+1, + 0.42060971232604780212e+1, + -0.11239937105760205327e+2, + 0.17609769202969667301e+1, + 0.10124887866527680913e+2, + -0.74496877875582017126e+1, + -0.68362613165587431396e+1, + 0.10323416328577183165e+2, + 0.22944866542274335863e+1, + -0.12283766211486055298e+2, + 0.25980106146409673862e+1, + 0.11404373601750343425e+2, + -0.76650990529809739371e+1, + -0.86624823881871986231e+1, + 0.94518513144043989627e+1, + 0.66464803381621901934e+1, + -0.12311069813879083057e+2, + -0.42014513651596079313e+1, + 0.13801522434757181657e+2, 0.53180994246688728655, - -0.13283840031251569869e+02, + -0.13283840031251569869e+2, -0.61256522477521713199, - 0.14513984501151616868e+02, + 0.14513984501151616868e+2, -0.83243510075470894538, - -0.15560376148263518559e+02, - 0.13063776870074343961e+01, - 0.14362469795065509359e+02, - 0.15212057687533573347e+01, - -0.16514745348596250096e+02, - -0.37176453802486224554e+01, - 0.15870401695009554999e+02, - 0.71257142437791145539e+01, - -0.13030409771938753494e+02, - -0.14272655324330516535e+02, - 0.95190460416603936977e+01, - 0.17427899291271074844e+02, + -0.15560376148263518559e+2, + 0.13063776870074343961e+1, + 0.14362469795065509359e+2, + 0.15212057687533573347e+1, + -0.16514745348596250096e+2, + -0.37176453802486224554e+1, + 0.15870401695009554999e+2, + 0.71257142437791145539e+1, + -0.13030409771938753494e+2, + -0.14272655324330516535e+2, + 0.95190460416603936977e+1, + 0.17427899291271074844e+2, -0.27274559679019194647, - -0.18415583665740271613e+02, - -0.12653042729837098435e+02, - 0.12135302062299656356e+02, - 0.20076694533279052735e+02, - 0.58466353967588622353e+01, - -0.17460315849874884719e+02, - -0.22714864664827448593e+02, - -0.52260300742083174441e+01, - 0.16385807824843844571e+02, - 0.27593071210058134568e+02, - 0.16588874740144678555e+02, - -0.37363706519154562535e+01, - -0.24613842982004339177e+02, - -0.35885884694258187722e+02, - -0.35638853258496581589e+02, - -0.30197704773800300160e+02, - -0.20068622240666194045e+02, - -0.13141836827578645241e+02, - -0.66881570336625140172e+01, - -0.33925270845263986175e+01, - -0.17931859685716640129e+01, + -0.18415583665740271613e+2, + -0.12653042729837098435e+2, + 0.12135302062299656356e+2, + 0.20076694533279052735e+2, + 0.58466353967588622353e+1, + -0.17460315849874884719e+2, + -0.22714864664827448593e+2, + -0.52260300742083174441e+1, + 0.16385807824843844571e+2, + 0.27593071210058134568e+2, + 0.16588874740144678555e+2, + -0.37363706519154562535e+1, + -0.24613842982004339177e+2, + -0.35885884694258187722e+2, + -0.35638853258496581589e+2, + -0.3019770477380030016e+2, + -0.20068622240666194045e+2, + -0.13141836827578645241e+2, + -0.66881570336625140172e+1, + -0.33925270845263986175e+1, + -0.17931859685716640129e+1, -0.18514512554389966903, -0.74208482204731651688, 0.38982160555615225084, -0.35953547619108405797, 0.13143515131859448419, - 0.72780030697443889864e-01, + 0.72780030697443889864e-1, -0.25911246997684261872, 0.37892504131952803315, -0.41294796562469038292, 0.36061709964552179919, -0.23603968418693777043, - 0.70637621911742984326e-01, + 0.70637621911742984326e-1, 0.10126461262337344005, -0.24278982660070078103, 0.32828852456687351857, -0.34189922816022022545, 0.28547612450050902089, -0.17232917743755582496, - 0.28498255471793243476e-01, - 0.11689781747654455490, + 0.28498255471793243476e-1, + 0.1168978174765445549, -0.23386693278530229501, 0.30040101281330316985, - -0.30379772945264299500, + -0.303797729452642995, 0.24495210204041947821, -0.13620441221380816255, 0.46086875905589641533, @@ -12878,704 +12880,704 @@ function ESERK4ConstantCache(zprev) 0.88133430201263385229, -0.89470133074214786006, 0.88012657320931508842, - -0.50531861067777561480, + -0.5053186106777756148, 0.18457694395309323654, 0.34566334504226753355, -0.63509976593070716078, - 0.95168758901546501860, + 0.9516875890154650186, -0.89070545714448168262, 0.79652998168436750515, -0.35613254755935680462, - -0.48130735000127730086e-03, + -0.48130735000127730086e-3, 0.52527547716135669642, -0.76714842247209680259, - 0.10012234195913467527e+01, + 0.10012234195913467527e+1, -0.84189163726698157397, 0.65089142544994804673, -0.15421486935048545064, -0.25284098095086132707, 0.65454944132596404316, - -0.10593799725641044329e+01, - 0.56437672751558265460, - -0.16964324920953346432e+01, - -0.15460262639551702879e+01, - -0.34988930379469262988e+01, - -0.63941511993640700595e+01, - -0.75493569315527491170e+01, - -0.11261801869809412224e+02, - -0.92680229579570774234e+01, - -0.75184889446210521058e+01, - -0.10420529399229638834e+01, - 0.53538936794904818939e+01, - 0.69331317579671694062e+01, - 0.59072557129313363333e+01, - -0.25340166766757423744e+01, - -0.57275677771769624158e+01, - -0.51162462849646939134e+01, - 0.12857922502690219968e+01, - 0.67104713603711063641e+01, - 0.22992022332604293844e+01, - -0.23760603452133364222e+01, - -0.61014410340472391425e+01, + -0.10593799725641044329e+1, + 0.5643767275155826546, + -0.16964324920953346432e+1, + -0.15460262639551702879e+1, + -0.34988930379469262988e+1, + -0.63941511993640700595e+1, + -0.7549356931552749117e+1, + -0.11261801869809412224e+2, + -0.92680229579570774234e+1, + -0.75184889446210521058e+1, + -0.10420529399229638834e+1, + 0.53538936794904818939e+1, + 0.69331317579671694062e+1, + 0.59072557129313363333e+1, + -0.25340166766757423744e+1, + -0.57275677771769624158e+1, + -0.51162462849646939134e+1, + 0.12857922502690219968e+1, + 0.67104713603711063641e+1, + 0.22992022332604293844e+1, + -0.23760603452133364222e+1, + -0.61014410340472391425e+1, 0.31193526812808158866, - 0.53056554905643480424e+01, - 0.19138211498286463730e+01, - -0.28262296841304208606e+01, - -0.49475265735434517111e+01, - 0.30874042039293878581e+01, - 0.40849763716540827829e+01, - -0.11699215882017739432e+01, - -0.39166095193337002733e+01, + 0.53056554905643480424e+1, + 0.1913821149828646373e+1, + -0.28262296841304208606e+1, + -0.49475265735434517111e+1, + 0.30874042039293878581e+1, + 0.40849763716540827829e+1, + -0.11699215882017739432e+1, + -0.39166095193337002733e+1, -0.69754392655510666366, - 0.54385519528039774073e+01, + 0.54385519528039774073e+1, -0.66088182351830249139, - -0.38175301087350472784e+01, + -0.38175301087350472784e+1, -0.13835061485309727014, - 0.35092093963412160917e+01, + 0.35092093963412160917e+1, 0.99107170734353644548, - -0.50198420127506553357e+01, - 0.12705243982157301552e+01, - 0.33859900592581295697e+01, - -0.11877288054553511998e+01, - -0.28303362097577839940e+01, + -0.50198420127506553357e+1, + 0.12705243982157301552e+1, + 0.33859900592581295697e+1, + -0.11877288054553511998e+1, + -0.2830336209757783994e+1, 0.86683228109613541523, - 0.39487020112411106432e+01, - -0.34335050694653843628e+01, - -0.16255554660598674488e+01, - 0.33982554252682621865e+01, + 0.39487020112411106432e+1, + -0.34335050694653843628e+1, + -0.16255554660598674488e+1, + 0.33982554252682621865e+1, 0.10565259858270296955, - -0.24078156762320586104e+01, + -0.24078156762320586104e+1, -0.42977287792392770971, - 0.38590365499831302820e+01, - -0.22627590022622166011e+01, - -0.23504706684948222239e+01, - 0.37361977566918906923e+01, - -0.54983102620269841410, - -0.21107892604665776659e+01, + 0.3859036549983130282e+1, + -0.22627590022622166011e+1, + -0.23504706684948222239e+1, + 0.37361977566918906923e+1, + -0.5498310262026984141, + -0.21107892604665776659e+1, 0.54846710178873037123, - 0.25158314928461122939e+01, - -0.21505589531974527162e+01, - -0.16330306544844750416e+01, - 0.40918979170153590985e+01, - -0.21565753667509808267e+01, - -0.15893845978054692569e+01, - 0.26504249586077248679e+01, - -0.31784643997724221220, - -0.17396920334095176131e+01, + 0.25158314928461122939e+1, + -0.21505589531974527162e+1, + -0.16330306544844750416e+1, + 0.40918979170153590985e+1, + -0.21565753667509808267e+1, + -0.15893845978054692569e+1, + 0.26504249586077248679e+1, + -0.3178464399772422122, + -0.17396920334095176131e+1, 0.59263087706110495478, - 0.23138447159184405422e+01, - -0.30813288254985296000e+01, + 0.23138447159184405422e+1, + -0.30813288254985296e+1, 0.38803980914003760594, - 0.29958675109394947711e+01, - -0.34738722965136674681e+01, + 0.29958675109394947711e+1, + -0.34738722965136674681e+1, 0.83049543537364312051, - 0.18478195621865323162e+01, - -0.17988825901018568043e+01, + 0.18478195621865323162e+1, + -0.17988825901018568043e+1, -0.31764581522183893414, - 0.15726472177700638877e+01, + 0.15726472177700638877e+1, -0.22778275693530222745, - -0.22237808903938955929e+01, - 0.28965733221785998630e+01, + -0.22237808903938955929e+1, + 0.2896573322178599863e+1, -0.68504567299127749891, - -0.24365830938521058080e+01, - 0.35689897239329866352e+01, - -0.17624950860735140168e+01, - -0.10830261248057768686e+01, - 0.23515356068947936841e+01, - -0.12275627364542860409e+01, + -0.2436583093852105808e+1, + 0.35689897239329866352e+1, + -0.17624950860735140168e+1, + -0.10830261248057768686e+1, + 0.23515356068947936841e+1, + -0.12275627364542860409e+1, -0.64347380209245053084, - 0.11221328578974274492e+01, + 0.11221328578974274492e+1, 0.27126296985586079158, - -0.18854243680440814224e+01, - 0.17776686922705748906e+01, + -0.18854243680440814224e+1, + 0.17776686922705748906e+1, 0.34618255764262129137, - -0.27140888100043687459e+01, - 0.32085151912274518793e+01, - -0.12566477964450881721e+01, - -0.15913455418303332767e+01, - 0.31246225886394278781e+01, - -0.23024531577379283576e+01, - 0.89470820814408422161e-01, - 0.16045009878079712351e+01, - -0.15595187931420924077e+01, + -0.27140888100043687459e+1, + 0.32085151912274518793e+1, + -0.12566477964450881721e+1, + -0.15913455418303332767e+1, + 0.31246225886394278781e+1, + -0.23024531577379283576e+1, + 0.89470820814408422161e-1, + 0.16045009878079712351e+1, + -0.15595187931420924077e+1, 0.24844439939403409334, 0.83877095019957925714, - -0.57810050042479599330, + -0.5781005004247959933, -0.72098155006581632342, - 0.17109353164506604372e+01, - -0.12074256086517682895e+01, + 0.17109353164506604372e+1, + -0.12074256086517682895e+1, -0.64716546388601281503, - 0.24931475734741113115e+01, - -0.27904549475852591378e+01, - 0.11395611213660687966e+01, - 0.14182679844628383048e+01, - -0.31149377705109961845e+01, - 0.28235577944443694953e+01, + 0.24931475734741113115e+1, + -0.27904549475852591378e+1, + 0.11395611213660687966e+1, + 0.14182679844628383048e+1, + -0.31149377705109961845e+1, + 0.28235577944443694953e+1, -0.79895556581425386522, - -0.15171015233378573051e+01, - 0.26346508467655351815e+01, - -0.19970472637252330017e+01, + -0.15171015233378573051e+1, + 0.26346508467655351815e+1, + -0.19970472637252330017e+1, 0.31082279368566967381, - 0.11480294057942963537e+01, - -0.14576951250807770322e+01, + 0.11480294057942963537e+1, + -0.14576951250807770322e+1, 0.69972266079713463238, 0.29298830943362547119, -0.62969373694569563682, 0.11296485952945677089, 0.69966466445650954409, -0.95120718541353843634, - 0.25223391516020726710, - 0.10101322159834238423e+01, - -0.18851422318873263251e+01, - 0.16010326903926161979e+01, + 0.2522339151602072671, + 0.10101322159834238423e+1, + -0.18851422318873263251e+1, + 0.16010326903926161979e+1, -0.12843272766617597203, - -0.16873176763881481133e+01, - 0.26894065378742628702e+01, - -0.21360905011289870181e+01, - 0.25403616854547328430, - 0.19012007806616801897e+01, - -0.30455583865089086437e+01, - 0.24878043329100489878e+01, + -0.16873176763881481133e+1, + 0.26894065378742628702e+1, + -0.21360905011289870181e+1, + 0.2540361685454732843, + 0.19012007806616801897e+1, + -0.30455583865089086437e+1, + 0.24878043329100489878e+1, -0.51778783496001878905, - -0.17355587868253585793e+01, - 0.30088715240960128838e+01, - -0.26066533089562038406e+01, + -0.17355587868253585793e+1, + 0.30088715240960128838e+1, + -0.26066533089562038406e+1, 0.81044705440008024677, - 0.13489255112345868159e+01, - -0.26763568153616597023e+01, - 0.25112653459155986901e+01, - -0.10309750245542483871e+01, - -0.87937019171825414610, - 0.21840588974915835507e+01, - -0.22430660592789837260e+01, - 0.11415067204666131673e+01, + 0.13489255112345868159e+1, + -0.26763568153616597023e+1, + 0.25112653459155986901e+1, + -0.10309750245542483871e+1, + -0.8793701917182541461, + 0.21840588974915835507e+1, + -0.2243066059278983726e+1, + 0.11415067204666131673e+1, 0.44431428917468523965, - -0.16417870075764822158e+01, - 0.18796020249068638996e+01, - -0.11350639766406134257e+01, - -0.98269814746448941323e-01, - 0.11419383580970094982e+01, - -0.14873174415688288352e+01, - 0.10486011919364057743e+01, - -0.13859819611453333410, + -0.16417870075764822158e+1, + 0.18796020249068638996e+1, + -0.11350639766406134257e+1, + -0.98269814746448941323e-1, + 0.11419383580970094982e+1, + -0.14873174415688288352e+1, + 0.10486011919364057743e+1, + -0.1385981961145333341, -0.72778834019751204032, - 0.11295385246616203023e+01, + 0.11295385246616203023e+1, -0.92416250574693026287, 0.28968533641008353818, 0.41514086501903618709, -0.83919602816035554493, 0.81167165427625231899, - -0.39119591223320426820, + -0.3911959122332042682, -0.18418394584247749224, 0.63056862411945491242, -0.74512642907390858049, 0.49107676835411034899, - -0.14396900016186808813e+01, - 0.17737639852250390859e+01, + -0.14396900016186808813e+1, + 0.17737639852250390859e+1, 0.56822815946932625497, - -0.23460973502598032603e+01, - 0.31690375172147966509e+01, - -0.20065562236789875605e+01, - 0.27042048824292064246e-01, - 0.22714579505799266101e+01, - -0.30627225522511127842e+01, - 0.24519864165112270626e+01, + -0.23460973502598032603e+1, + 0.31690375172147966509e+1, + -0.20065562236789875605e+1, + 0.27042048824292064246e-1, + 0.22714579505799266101e+1, + -0.30627225522511127842e+1, + 0.24519864165112270626e+1, -0.18836064165409047155, - -0.19226556662643439211e+01, - 0.32549338538537826437e+01, - -0.24753106091509562425e+01, + -0.19226556662643439211e+1, + 0.32549338538537826437e+1, + -0.24753106091509562425e+1, 0.55625581155288483792, - 0.19833864180954374756e+01, - -0.31248804181788809586e+01, - 0.27417653883161978712e+01, + 0.19833864180954374756e+1, + -0.31248804181788809586e+1, + 0.27417653883161978712e+1, -0.47087475062931710701, - -0.18236699793525243951e+01, - 0.33411971911313589345e+01, - -0.26042881726987614499e+01, + -0.18236699793525243951e+1, + 0.33411971911313589345e+1, + -0.26042881726987614499e+1, 0.57263176294639683839, - 0.21053340911584879080e+01, - -0.32559955273498464301e+01, - 0.27015812439279618395e+01, + 0.2105334091158487908e+1, + -0.32559955273498464301e+1, + 0.27015812439279618395e+1, -0.19898177334149266815, - -0.21807851462420755340e+01, - 0.35002141027883806323e+01, - -0.23581151933098332130e+01, - -0.17412502247974890462e-01, - 0.26835841567160549914e+01, - -0.33848311914954609669e+01, - 0.21780268548112489135e+01, + -0.2180785146242075534e+1, + 0.35002141027883806323e+1, + -0.2358115193309833213e+1, + -0.17412502247974890462e-1, + 0.26835841567160549914e+1, + -0.33848311914954609669e+1, + 0.21780268548112489135e+1, 0.73395190952656486072, - -0.29282902276853715051e+01, - 0.34867780643285324338e+01, - -0.14623812382592624726e+01, - -0.12963445295067996810e+01, - 0.34846610873872272407e+01, - -0.30634651211000329951e+01, + -0.29282902276853715051e+1, + 0.34867780643285324338e+1, + -0.14623812382592624726e+1, + -0.1296344529506799681e+1, + 0.34846610873872272407e+1, + -0.30634651211000329951e+1, 0.80920907078912207577, - 0.22997247984174133961e+01, - -0.35837410116158903151e+01, - 0.26447920902477703997e+01, + 0.22997247984174133961e+1, + -0.35837410116158903151e+1, + 0.26447920902477703997e+1, 0.43662830048467538013, - -0.29820024355660379456e+01, - 0.36937717146112367672e+01, - -0.14882885279061639494e+01, - -0.15623252949558739111e+01, - 0.37749285134541659126e+01, - -0.29713467226103227325e+01, + -0.29820024355660379456e+1, + 0.36937717146112367672e+1, + -0.14882885279061639494e+1, + -0.15623252949558739111e+1, + 0.37749285134541659126e+1, + -0.29713467226103227325e+1, 0.21288721045641473273, - 0.30049177351375999656e+01, - -0.37384165700363380935e+01, - 0.19013331120464584956e+01, - 0.16787858478535939710e+01, - -0.37525066414115975100e+01, - 0.31940000668574413112e+01, + 0.30049177351375999656e+1, + -0.37384165700363380935e+1, + 0.19013331120464584956e+1, + 0.1678785847853593971e+1, + -0.375250664141159751e+1, + 0.31940000668574413112e+1, 0.13753957801924379667, - -0.31496509653817597041e+01, - 0.39513397660512330489e+01, - -0.13310311854525314068e+01, - -0.21499638106596958842e+01, - 0.41810490482557547409e+01, - -0.25417318662417129893e+01, + -0.31496509653817597041e+1, + 0.39513397660512330489e+1, + -0.13310311854525314068e+1, + -0.21499638106596958842e+1, + 0.41810490482557547409e+1, + -0.25417318662417129893e+1, -0.97958012316786480245, - 0.39869808817742198315e+01, - -0.34174777883454341421e+01, - 0.17911422351787240070, - 0.35150147619430041068e+01, - -0.39674439795268763298e+01, - 0.12072993908237739102e+01, - 0.29114520810642994242e+01, - -0.42549046629042699408e+01, - 0.20469560177233612208e+01, - 0.22991809437403873950e+01, - -0.43668927319397861098e+01, - 0.26854537485107834449e+01, - 0.17697924490761189897e+01, - -0.43915595841747867567e+01, - 0.31358548168377655685e+01, - 0.13865539462687990202e+01, - -0.44040215383802587823e+01, - 0.34181170092816963724e+01, - 0.11926181386117267191e+01, - -0.44583668672458305338e+01, - 0.35434299569250722328e+01, - 0.12196024491596479944e+01, - -0.45821751866674196307e+01, - 0.35021759344924250357e+01, - 0.14924979169445204974e+01, - -0.47698857417459858965e+01, - 0.32558902737468558009e+01, - 0.20271058140551643234e+01, - -0.49724471128229206229e+01, - 0.27352916039867309905e+01, - 0.28159305075881433389e+01, - -0.50833560212347901341e+01, - 0.18499633184112731499e+01, - 0.37988082754643537342e+01, - -0.49266766041174374635e+01, + 0.39869808817742198315e+1, + -0.34174777883454341421e+1, + 0.1791142235178724007, + 0.35150147619430041068e+1, + -0.39674439795268763298e+1, + 0.12072993908237739102e+1, + 0.29114520810642994242e+1, + -0.42549046629042699408e+1, + 0.20469560177233612208e+1, + 0.2299180943740387395e+1, + -0.43668927319397861098e+1, + 0.26854537485107834449e+1, + 0.17697924490761189897e+1, + -0.43915595841747867567e+1, + 0.31358548168377655685e+1, + 0.13865539462687990202e+1, + -0.44040215383802587823e+1, + 0.34181170092816963724e+1, + 0.11926181386117267191e+1, + -0.44583668672458305338e+1, + 0.35434299569250722328e+1, + 0.12196024491596479944e+1, + -0.45821751866674196307e+1, + 0.35021759344924250357e+1, + 0.14924979169445204974e+1, + -0.47698857417459858965e+1, + 0.32558902737468558009e+1, + 0.20271058140551643234e+1, + -0.49724471128229206229e+1, + 0.27352916039867309905e+1, + 0.28159305075881433389e+1, + -0.50833560212347901341e+1, + 0.18499633184112731499e+1, + 0.37988082754643537342e+1, + -0.49266766041174374635e+1, 0.51986722951369368495, - 0.48182699250234630739e+01, - -0.42623365998783819819e+01, - -0.12584304367884655562e+01, - 0.55714429779428265022e+01, - -0.28372776438047178083e+01, - -0.33048775782592572092e+01, - 0.55952986622389779825e+01, + 0.48182699250234630739e+1, + -0.42623365998783819819e+1, + -0.12584304367884655562e+1, + 0.55714429779428265022e+1, + -0.28372776438047178083e+1, + -0.33048775782592572092e+1, + 0.55952986622389779825e+1, -0.51989140644994547014, - -0.51330618163370420604e+01, - 0.43583072026191826964e+01, - 0.24638521382546589855e+01, - -0.59044619609062456433e+01, - 0.15523316889025013943e+01, - 0.52626168325285904714e+01, - -0.46460224500143043613e+01, - -0.23912289595621225580e+01, - 0.63580066443010769817e+01, + -0.51330618163370420604e+1, + 0.43583072026191826964e+1, + 0.24638521382546589855e+1, + -0.59044619609062456433e+1, + 0.15523316889025013943e+1, + 0.52626168325285904714e+1, + -0.46460224500143043613e+1, + -0.2391228959562122558e+1, + 0.63580066443010769817e+1, -0.93513382535596445422, - -0.58101496458837189607e+01, - 0.42059469962079436556e+01, - 0.40364515124443212102e+01, - -0.60726904854717229654e+01, - -0.11479571687270007097e+01, - 0.69323941294145878800e+01, - -0.15199128791966465268e+01, - -0.63400051517983104787e+01, - 0.40887072797303680716e+01, - 0.52964961778117238822e+01, - -0.57149912745873487907e+01, - -0.36003243436539427158e+01, - 0.70193219313433123929e+01, - 0.22151243186003513053e+01, - -0.75258624652621790574e+01, + -0.58101496458837189607e+1, + 0.42059469962079436556e+1, + 0.40364515124443212102e+1, + -0.60726904854717229654e+1, + -0.11479571687270007097e+1, + 0.693239412941458788e+1, + -0.15199128791966465268e+1, + -0.63400051517983104787e+1, + 0.40887072797303680716e+1, + 0.52964961778117238822e+1, + -0.57149912745873487907e+1, + -0.36003243436539427158e+1, + 0.70193219313433123929e+1, + 0.22151243186003513053e+1, + -0.75258624652621790574e+1, -0.76279678701179420841, - 0.80465453347808466589e+01, - 0.76444350014432610810e-02, - -0.81480660522171941551e+01, + 0.80465453347808466589e+1, + 0.7644435001443261081e-2, + -0.81480660522171941551e+1, 0.57045972060698257877, - 0.85726196307867983393e+01, - -0.26841678667441387640, - -0.87366880681005856246e+01, + 0.85726196307867983393e+1, + -0.2684167866744138764, + -0.87366880681005856246e+1, -0.40529373736331436584, - 0.91455839980705047054e+01, - 0.21790257062374229768e+01, - -0.88725736096357330496e+01, - -0.44726263014094849169e+01, - 0.79628712924843343401e+01, - 0.76396971487671692103e+01, - -0.50357629176315343855e+01, - -0.10162135446241320480e+02, + 0.91455839980705047054e+1, + 0.21790257062374229768e+1, + -0.88725736096357330496e+1, + -0.44726263014094849169e+1, + 0.79628712924843343401e+1, + 0.76396971487671692103e+1, + -0.50357629176315343855e+1, + -0.1016213544624132048e+2, 0.12041747298423449708, - 0.10785413970667779182e+02, - 0.68059725007243683237e+01, - -0.64432055934506555772e+01, - -0.11920844383649228604e+02, - -0.30289088913287418592e+01, - 0.98650422261675068114e+01, - 0.12877730581847252722e+02, - 0.32734315439885204313e+01, - -0.97646151255919875211e+01, - -0.15341510217267311234e+02, - -0.98369452346340846560e+01, - 0.23529419705524525774e+01, - 0.14027103669857501345e+02, - 0.20366825872095667194e+02, - 0.20643856606370832196e+02, - 0.16905225697225109371e+02, - 0.11813329927070963521e+02, - 0.72425024436622615909e+01, - 0.39599754787819434476e+01, - 0.19515933570484453874e+01, + 0.10785413970667779182e+2, + 0.68059725007243683237e+1, + -0.64432055934506555772e+1, + -0.11920844383649228604e+2, + -0.30289088913287418592e+1, + 0.98650422261675068114e+1, + 0.12877730581847252722e+2, + 0.32734315439885204313e+1, + -0.97646151255919875211e+1, + -0.15341510217267311234e+2, + -0.9836945234634084656e+1, + 0.23529419705524525774e+1, + 0.14027103669857501345e+2, + 0.20366825872095667194e+2, + 0.20643856606370832196e+2, + 0.16905225697225109371e+2, + 0.11813329927070963521e+2, + 0.72425024436622615909e+1, + 0.39599754787819434476e+1, + 0.19515933570484453874e+1, 0.87321056976809197092, 0.35651971912423885414, - 0.13330274697535970940, - 0.45758111437583667835e-01, - 0.14443958557553452857e-01, - 0.41967229495698827463e-02, - 0.11227971250863048435e-02, - 0.27656093303652317349e-03, - 0.62675137889857523836e-04, - 0.13053296274386431530e-04, - 0.24943415714165336546e-05, - 0.43638032173470345495e-06, - 0.69704553026033406356e-07, - 0.10131537759024391644e-07, - 0.13344789456688345465e-08, - 0.15848306314320871552e-09, - 0.16866363250408347620e-10, + 0.1333027469753597094, + 0.45758111437583667835e-1, + 0.14443958557553452857e-1, + 0.41967229495698827463e-2, + 0.11227971250863048435e-2, + 0.27656093303652317349e-3, + 0.62675137889857523836e-4, + 0.1305329627438643153e-4, + 0.24943415714165336546e-5, + 0.43638032173470345495e-6, + 0.69704553026033406356e-7, + 0.10131537759024391644e-7, + 0.13344789456688345465e-8, + 0.15848306314320871552e-9, + 0.1686636325040834762e-10, 0.15964499205752496328e-11, 0.13314577916761297672e-12, 0.96700575384874811368e-14, 0.60240415502889304453e-15, - 0.31549982460516777660e-16, + 0.3154998246051677766e-16, 0.13513329968045116302e-17, 0.45464158798672617568e-19, 0.11269330419852036878e-20, 0.18301741498748792952e-22, - 0.14611619570312400200e-24, - -0.28805819676677602709e-02, - 0.72353243386742661578e-02, - -0.91214983142990750664e-02, - 0.13025584947555915449e-01, - -0.15724528383782940960e-01, - 0.18560314597341139725e-01, - -0.18536257819481524733e-01, - 0.17649261706073136879e-01, - -0.13812204649738193604e-01, - 0.99468730767032342149e-02, - -0.46655837232419099941e-02, - 0.11857760146457842990e-02, - 0.20574930478524156886e-02, - -0.24398622735163802248e-02, - 0.23687622087758069232e-02, - -0.82318830226289741673e-04, - -0.13593365904544640194e-02, - 0.34431922099484287350e-02, - -0.32740226848668179012e-02, - 0.28844875260426883906e-02, - -0.14474201931514486547e-03, - -0.21451619815722202354e-02, - 0.55538994296530919126e-02, - -0.70862518621504074975e-02, - 0.84769695831805463859e-02, - -0.73567816859545958133e-02, - 0.58313133998460385185e-02, - -0.31357971150785439798e-02, - -0.76502484377420501907e-03, - 0.28625708369273782620e-04, - -0.10007621746484184760e-01, - -0.67703029975686931929e-02, - -0.27884978723790112415e-01, - -0.32105546481408238357e-01, - -0.61534955984521536032e-01, - -0.66992473859346035603e-01, - -0.86216118648948167347e-01, - -0.60429566961623569499e-01, - -0.41289978246450836918e-01, - 0.20192737986417980817e-01, - 0.45105096300972126466e-01, - 0.58489995158919540208e-01, - 0.22156680042245847223e-01, - -0.31042641525885240894e-01, - -0.44587242178458906527e-01, - -0.34134605023114786282e-01, - 0.29809714359786285143e-01, - 0.41634881866934952965e-01, - 0.18225228378113775968e-01, - -0.29440894794291967707e-01, - -0.42559468872879722967e-01, - 0.84233026750795032822e-02, - 0.37553391911241754131e-01, - 0.16872059810949160269e-01, - -0.23087198450418400242e-01, - -0.40866603007324538155e-01, - 0.26957111758189763323e-01, - 0.24012177464374638569e-01, - 0.57484245194600177772e-02, - -0.38148654612767118888e-01, - -0.92036768377462812446e-02, - 0.40606786958092291884e-01, - 0.13134338547556390162e-02, - -0.20342239443134155913e-01, - -0.19885943893335835536e-01, - 0.26947084956023714675e-01, - 0.23153937907181398881e-01, - -0.40431027803319294356e-01, - 0.12193024355917649309e-02, - 0.14631443244086397848e-01, - 0.16756408037560854146e-01, - -0.23059642468216835082e-01, - -0.22660282930653755790e-01, - 0.53609371620500445577e-01, - -0.30867530504129714330e-01, - 0.71298934895180667015e-02, - -0.27631104443146623645e-01, - 0.53898109037003975874e-01, - -0.35312495871471616393e-01, - -0.34682221780206342297e-02, - 0.55982754368145148938e-02, - 0.26012511226052418417e-01, - -0.37436773389794397726e-01, - 0.11476519371908588257e-01, - 0.95473374492502319916e-02, - 0.62330618534539722342e-02, - -0.31097769569563876030e-01, - 0.22740076163153953581e-01, - 0.11874794763405855172e-01, - -0.27900644106286846130e-01, - 0.81849255258154805792e-02, - 0.15345199964938348314e-01, - -0.96656254579324425713e-02, - -0.13525566595738076209e-01, - 0.17948970150272389873e-01, - 0.51759140641349172043e-02, - -0.25313760384738884235e-01, - 0.15214355381936632214e-01, - 0.13109668202900753159e-01, - -0.24621563063832282298e-01, - 0.63871871578035392322e-02, - 0.18467831311479360190e-01, - -0.21850610310236842637e-01, - 0.55403810164865886084e-02, - 0.43522537412714491084e-02, - 0.77802993778627082058e-02, - -0.26838801913197356946e-01, - 0.26192344940067377457e-01, - -0.13862531217573745789e-03, - -0.28538401841437039536e-01, - 0.34443947377177562552e-01, - -0.16613656548471755076e-01, - -0.25982931969875059514e-02, - 0.41923739716902171104e-02, - 0.76640329902379648527e-02, - -0.12897535032832528265e-01, - 0.42792595042982040998e-03, - 0.19023832011594233454e-01, - -0.24782325256220844034e-01, - 0.94657656549968355320e-02, - 0.12844273893865021732e-01, - -0.20813152741513320926e-01, - 0.77133780826274074213e-02, - 0.12560964995296845792e-01, - -0.19683749665688879404e-01, - 0.69164572833850307063e-02, - 0.13766545576700966319e-01, - -0.24379584810674159029e-01, - 0.18508998132991210522e-01, - -0.56704764521599343094e-02, - 0.23640101973657209281e-03, - -0.62387679151797714727e-02, - 0.13992256119361319230e-01, - -0.10435625240529055463e-01, - -0.67375938054824169310e-02, - 0.25785563602306469516e-01, - -0.30782350481449935464e-01, - 0.16111797604113922699e-01, - 0.83967635089048833080e-02, - -0.25348715434986023726e-01, - 0.24200688733004564746e-01, - -0.90011443032211573695e-02, - -0.58977318093114041581e-02, - 0.84170391244883669551e-02, - 0.20528380429658591409e-02, - -0.15377563032932554596e-01, - 0.20364887080889008952e-01, - -0.13895687697948565578e-01, - 0.26205467643958821680e-02, - 0.40281231477391670273e-02, - -0.21876084345494768713e-02, - -0.33937566928935142090e-02, - 0.44731001088753460579e-02, - 0.28242622644860377983e-02, - -0.13773236966824919936e-01, - 0.18691156993951477117e-01, - -0.10896726478055158635e-01, - -0.70304502414921289655e-02, - 0.24423354416031706898e-01, - -0.29886805109144192610e-01, - 0.19816750822468965493e-01, - -0.11406637033627943165e-02, - -0.13274652604901557296e-01, - 0.13683831174141389275e-01, - -0.86096662126273538519e-05, - -0.18184399365790530206e-01, - 0.28491679075829036416e-01, - -0.23909276899248554232e-01, - 0.73120029079302767058e-02, - 0.10998196612310450621e-01, - -0.20205783858857340879e-01, - 0.15911070280688010409e-01, - -0.22302993175591086066e-02, - -0.11480167658314452753e-01, - 0.17010044716828678218e-01, - -0.12092192899577464474e-01, - 0.10989932294172624627e-02, - 0.86016322122465533467e-02, - -0.11491717634610459919e-01, - 0.70397115810592447022e-02, - 0.85484001632067923172e-03, - -0.69477333716843328246e-02, - 0.81757343833999511495e-02, - -0.50937599268437647182e-02, - 0.87969812990746449818e-03, - 0.12450415790348781046e-02, - -0.40717059492524665962e-04, - -0.33193525561240663085e-02, - 0.65763524026036688716e-02, - -0.80972336465137597500e-02, - 0.78719383343909526268e-02, - -0.70873051284830144991e-02, - 0.69525207868405469389e-02, - -0.76517072840128069755e-02, - 0.83121218888523532714e-02, - -0.78087688286014129632e-02, - 0.57831730028057113518e-02, - -0.29747659999125228812e-02, - 0.68681716019289935828e-03, - 0.22534802459141711675e-03, + 0.146116195703124002e-24, + -0.28805819676677602709e-2, + 0.72353243386742661578e-2, + -0.91214983142990750664e-2, + 0.13025584947555915449e-1, + -0.1572452838378294096e-1, + 0.18560314597341139725e-1, + -0.18536257819481524733e-1, + 0.17649261706073136879e-1, + -0.13812204649738193604e-1, + 0.99468730767032342149e-2, + -0.46655837232419099941e-2, + 0.1185776014645784299e-2, + 0.20574930478524156886e-2, + -0.24398622735163802248e-2, + 0.23687622087758069232e-2, + -0.82318830226289741673e-4, + -0.13593365904544640194e-2, + 0.3443192209948428735e-2, + -0.32740226848668179012e-2, + 0.28844875260426883906e-2, + -0.14474201931514486547e-3, + -0.21451619815722202354e-2, + 0.55538994296530919126e-2, + -0.70862518621504074975e-2, + 0.84769695831805463859e-2, + -0.73567816859545958133e-2, + 0.58313133998460385185e-2, + -0.31357971150785439798e-2, + -0.76502484377420501907e-3, + 0.2862570836927378262e-4, + -0.1000762174648418476e-1, + -0.67703029975686931929e-2, + -0.27884978723790112415e-1, + -0.32105546481408238357e-1, + -0.61534955984521536032e-1, + -0.66992473859346035603e-1, + -0.86216118648948167347e-1, + -0.60429566961623569499e-1, + -0.41289978246450836918e-1, + 0.20192737986417980817e-1, + 0.45105096300972126466e-1, + 0.58489995158919540208e-1, + 0.22156680042245847223e-1, + -0.31042641525885240894e-1, + -0.44587242178458906527e-1, + -0.34134605023114786282e-1, + 0.29809714359786285143e-1, + 0.41634881866934952965e-1, + 0.18225228378113775968e-1, + -0.29440894794291967707e-1, + -0.42559468872879722967e-1, + 0.84233026750795032822e-2, + 0.37553391911241754131e-1, + 0.16872059810949160269e-1, + -0.23087198450418400242e-1, + -0.40866603007324538155e-1, + 0.26957111758189763323e-1, + 0.24012177464374638569e-1, + 0.57484245194600177772e-2, + -0.38148654612767118888e-1, + -0.92036768377462812446e-2, + 0.40606786958092291884e-1, + 0.13134338547556390162e-2, + -0.20342239443134155913e-1, + -0.19885943893335835536e-1, + 0.26947084956023714675e-1, + 0.23153937907181398881e-1, + -0.40431027803319294356e-1, + 0.12193024355917649309e-2, + 0.14631443244086397848e-1, + 0.16756408037560854146e-1, + -0.23059642468216835082e-1, + -0.2266028293065375579e-1, + 0.53609371620500445577e-1, + -0.3086753050412971433e-1, + 0.71298934895180667015e-2, + -0.27631104443146623645e-1, + 0.53898109037003975874e-1, + -0.35312495871471616393e-1, + -0.34682221780206342297e-2, + 0.55982754368145148938e-2, + 0.26012511226052418417e-1, + -0.37436773389794397726e-1, + 0.11476519371908588257e-1, + 0.95473374492502319916e-2, + 0.62330618534539722342e-2, + -0.3109776956956387603e-1, + 0.22740076163153953581e-1, + 0.11874794763405855172e-1, + -0.2790064410628684613e-1, + 0.81849255258154805792e-2, + 0.15345199964938348314e-1, + -0.96656254579324425713e-2, + -0.13525566595738076209e-1, + 0.17948970150272389873e-1, + 0.51759140641349172043e-2, + -0.25313760384738884235e-1, + 0.15214355381936632214e-1, + 0.13109668202900753159e-1, + -0.24621563063832282298e-1, + 0.63871871578035392322e-2, + 0.1846783131147936019e-1, + -0.21850610310236842637e-1, + 0.55403810164865886084e-2, + 0.43522537412714491084e-2, + 0.77802993778627082058e-2, + -0.26838801913197356946e-1, + 0.26192344940067377457e-1, + -0.13862531217573745789e-3, + -0.28538401841437039536e-1, + 0.34443947377177562552e-1, + -0.16613656548471755076e-1, + -0.25982931969875059514e-2, + 0.41923739716902171104e-2, + 0.76640329902379648527e-2, + -0.12897535032832528265e-1, + 0.42792595042982040998e-3, + 0.19023832011594233454e-1, + -0.24782325256220844034e-1, + 0.9465765654996835532e-2, + 0.12844273893865021732e-1, + -0.20813152741513320926e-1, + 0.77133780826274074213e-2, + 0.12560964995296845792e-1, + -0.19683749665688879404e-1, + 0.69164572833850307063e-2, + 0.13766545576700966319e-1, + -0.24379584810674159029e-1, + 0.18508998132991210522e-1, + -0.56704764521599343094e-2, + 0.23640101973657209281e-3, + -0.62387679151797714727e-2, + 0.1399225611936131923e-1, + -0.10435625240529055463e-1, + -0.6737593805482416931e-2, + 0.25785563602306469516e-1, + -0.30782350481449935464e-1, + 0.16111797604113922699e-1, + 0.8396763508904883308e-2, + -0.25348715434986023726e-1, + 0.24200688733004564746e-1, + -0.90011443032211573695e-2, + -0.58977318093114041581e-2, + 0.84170391244883669551e-2, + 0.20528380429658591409e-2, + -0.15377563032932554596e-1, + 0.20364887080889008952e-1, + -0.13895687697948565578e-1, + 0.2620546764395882168e-2, + 0.40281231477391670273e-2, + -0.21876084345494768713e-2, + -0.3393756692893514209e-2, + 0.44731001088753460579e-2, + 0.28242622644860377983e-2, + -0.13773236966824919936e-1, + 0.18691156993951477117e-1, + -0.10896726478055158635e-1, + -0.70304502414921289655e-2, + 0.24423354416031706898e-1, + -0.2988680510914419261e-1, + 0.19816750822468965493e-1, + -0.11406637033627943165e-2, + -0.13274652604901557296e-1, + 0.13683831174141389275e-1, + -0.86096662126273538519e-5, + -0.18184399365790530206e-1, + 0.28491679075829036416e-1, + -0.23909276899248554232e-1, + 0.73120029079302767058e-2, + 0.10998196612310450621e-1, + -0.20205783858857340879e-1, + 0.15911070280688010409e-1, + -0.22302993175591086066e-2, + -0.11480167658314452753e-1, + 0.17010044716828678218e-1, + -0.12092192899577464474e-1, + 0.10989932294172624627e-2, + 0.86016322122465533467e-2, + -0.11491717634610459919e-1, + 0.70397115810592447022e-2, + 0.85484001632067923172e-3, + -0.69477333716843328246e-2, + 0.81757343833999511495e-2, + -0.50937599268437647182e-2, + 0.87969812990746449818e-3, + 0.12450415790348781046e-2, + -0.40717059492524665962e-4, + -0.33193525561240663085e-2, + 0.65763524026036688716e-2, + -0.809723364651375975e-2, + 0.78719383343909526268e-2, + -0.70873051284830144991e-2, + 0.69525207868405469389e-2, + -0.76517072840128069755e-2, + 0.83121218888523532714e-2, + -0.78087688286014129632e-2, + 0.57831730028057113518e-2, + -0.29747659999125228812e-2, + 0.68681716019289935828e-3, + 0.22534802459141711675e-3, 0.12634034025440341042, -0.17820081375748156316, - 0.13551324157342800256e-01, + 0.13551324157342800256e-1, 0.16813449828053486645, -0.24966072545395351368, 0.21039486321828362869, - -0.64981531670019007652e-01, - -0.74164495175465902643e-01, + -0.64981531670019007652e-1, + -0.74164495175465902643e-1, 0.13734815099201691524, - -0.68207025939392332270e-01, - -0.69243974307398412082e-01, + -0.6820702593939233227e-1, + -0.69243974307398412082e-1, 0.20084031506507429854, - -0.21538785133902174640, + -0.2153878513390217464, 0.10560549002318353473, - 0.97240522103681503729e-01, + 0.97240522103681503729e-1, -0.26801461527180675537, 0.33417317387423162156, -0.24690810067208660006, - 0.81993342300908128584e-01, - 0.79561756226166582828e-01, + 0.81993342300908128584e-1, + 0.79561756226166582828e-1, -0.13009872294622146227, - 0.72908075650969877968e-01, - 0.54164831253627157559e-01, + 0.72908075650969877968e-1, + 0.54164831253627157559e-1, -0.13467751454191220772, 0.12196952938975655356, - 0.12651186242638961903e-02, + 0.12651186242638961903e-2, -0.14175809587553275803, 0.22942521482027891655, -0.19321562776519385363, - 0.77356985758222279737e-01, - 0.62312999682911665578e-01, + 0.77356985758222279737e-1, + 0.62312999682911665578e-1, -0.12816818621208767026, 0.11689903597952515379, - -0.46036973013563874113e-01, - 0.34299964573656933214e-02, - -0.81045907606344773366e-02, - 0.64082051786410798577e-01, - -0.92104409922409660738e-01, - 0.65758925136425547264e-01, - 0.28763348268877993869e-01, + -0.46036973013563874113e-1, + 0.34299964573656933214e-2, + -0.81045907606344773366e-2, + 0.64082051786410798577e-1, + -0.92104409922409660738e-1, + 0.65758925136425547264e-1, + 0.28763348268877993869e-1, -0.10787043665064828535, 0.12346340688194272495, - -0.37647139598294000751e-01, - -0.70957596384953830482e-01, + -0.37647139598294000751e-1, + -0.70957596384953830482e-1, 0.13109429838573041782, - -0.67640978666071702174e-01, - -0.63304263916762831821e-01, + -0.67640978666071702174e-1, + -0.63304263916762831821e-1, 0.17704289611348919542, -0.15431196609537542463, - 0.74669552230408626353e-02, + 0.74669552230408626353e-2, 0.18699264223381539818, -0.27056847396140515372, - 0.19145055296669655220, - 0.20833087596648092177e-01, + 0.1914505529666965522, + 0.20833087596648092177e-1, -0.20627125514948219109, 0.26522452923498102129, -0.16604091908768467412, - 0.32352219337781901176e-01, - 0.32020807037668380657e-01, - 0.34741313941825613387e-01, + 0.32352219337781901176e-1, + 0.32020807037668380657e-1, + 0.34741313941825613387e-1, -0.13675523830587391072, - 0.17811635373975581720, - -0.90086368822796428213e-01, - -0.36286966932537183250e-01, - 0.98999475215983429033e-01, - -0.20692247139072954959e-01, + 0.1781163537397558172, + -0.90086368822796428213e-1, + -0.3628696693253718325e-1, + 0.98999475215983429033e-1, + -0.20692247139072954959e-1, -0.10363469862523008724, 0.15239508371702720213, - -0.28821642146527406275e-01, + -0.28821642146527406275e-1, -0.17028609346358486443, 0.29523411512135333545, -0.21300700354921450752, - 0.24006679677460564595e-02, + 0.24006679677460564595e-2, 0.17510164778519410334, -0.15674326803987803647, - -0.49172471304287385802e-02, + -0.49172471304287385802e-2, 0.16031299687514330432, -0.14920774660145480484, - 0.24198210091727435922e-01, - 0.72032357297800900242e-01, - -0.29895866295725661947e-02, + 0.24198210091727435922e-1, + 0.72032357297800900242e-1, + -0.29895866295725661947e-2, -0.14229598759895570326, 0.19705186220242090767, - -0.37848156778514052689e-01, + -0.37848156778514052689e-1, -0.20127503117363171325, 0.31341207628772016491, -0.17235462453047617482, - -0.61991117320433518356e-01, + -0.61991117320433518356e-1, 0.16949385874133518493, - -0.46153633856509876376e-01, + -0.46153633856509876376e-1, -0.12080298452966095613, 0.13036368856477800748, - 0.53044166807352542692e-01, + 0.53044166807352542692e-1, -0.19142259082202431331, 0.11756870199836809421, 0.10798811625381987689, -0.19298432210678179155, - 0.26454094487676556302e-01, + 0.26454094487676556302e-1, 0.22531436064959756149, - -0.24519877202947504280, - 0.14496292100749473900e-01, + -0.2451987720294750428, + 0.144962921007494739e-1, 0.21167243647816016971, -0.16357297647754334702, - -0.37400881487600921849e-01, - 0.95248135403755929129e-01, + -0.37400881487600921849e-1, + 0.95248135403755929129e-1, 0.10977175490246125766, -0.27870787280368025662, 0.14391123631763871882, @@ -13583,7 +13585,7 @@ function ESERK4ConstantCache(zprev) -0.32968077134537698836, 0.12708059875481467205, 0.11166918248460694363, - -0.36082183198454985396e-01, + -0.36082183198454985396e-1, -0.18552233514036889361, 0.15978354385983709052, 0.17563036573797408124, @@ -13595,35 +13597,35 @@ function ESERK4ConstantCache(zprev) 0.14950106373758340061, 0.20028036013073022281, -0.31208654700440974228, - -0.12929671857513288027e-01, - 0.26322590623056940640, - -0.11481020831980173758e-01, + -0.12929671857513288027e-1, + 0.2632259062305694064, + -0.11481020831980173758e-1, -0.27365001546272627042, - 0.76739608505192472010e-01, + 0.7673960850519247201e-1, 0.25979798608309562225, - -0.76579084773471986503e-01, + -0.76579084773471986503e-1, -0.30680746843964973314, - 0.17286695607255528340, + 0.1728669560725552834, 0.26243972736705006854, -0.16285767366080627916, -0.23898386103851904094, - 0.94765823253469938514e-01, + 0.94765823253469938514e-1, 0.35459611360241793943, -0.15166495517498951306, -0.31323789135620938584, - 0.82959603536885445640e-01, + 0.8295960353688544564e-1, 0.31575319080969155294, - 0.72517971006301210068e-01, + 0.72517971006301210068e-1, -0.38536397597760901901, -0.13924933054513174979, 0.33624920726473261912, 0.24414337836524360736, -0.12188608706688920658, -0.44204269803358708923, - -0.25330893463234319118e-01, + -0.25330893463234319118e-1, 0.42089245019861593056, 0.23539733733977624697, - -0.49166047352575646678e-01, + -0.49166047352575646678e-1, -0.58919785630998766646, -0.11347111597157341634, 0.20084876228130715825, @@ -13632,162 +13634,162 @@ function ESERK4ConstantCache(zprev) -0.34282756246797824184, -0.38777162831971967449, -0.67339102243853643515, - 0.12969143488449760490e-01, + 0.1296914348844976049e-1, 0.25377737854303744625, 0.69781729661144265009, - 0.84645472853291847670, - 0.63684223215785584760, + 0.8464547285329184767, + 0.6368422321578558476, 0.67877233318071783508, 0.27068502877094652304, - 0.30287685041927114860, - 0.91237818605231210678e-01, - 0.47649660306380597907e-01, - 0.70384829789238143039e-01, - -0.40378750173544038227e-01, - 0.40185158055050115844e-01, - 0.72858549997126536169e-03, - -0.42855236940995987405e-01, - 0.83376650314241795847e-01, + 0.3028768504192711486, + 0.91237818605231210678e-1, + 0.47649660306380597907e-1, + 0.70384829789238143039e-1, + -0.40378750173544038227e-1, + 0.40185158055050115844e-1, + 0.72858549997126536169e-3, + -0.42855236940995987405e-1, + 0.83376650314241795847e-1, -0.10644192240207084321, 0.10440736466769694191, - -0.74789209599218503532e-01, - 0.22067584253912222308e-01, - 0.43176967984993257221e-01, + -0.74789209599218503532e-1, + 0.22067584253912222308e-1, + 0.43176967984993257221e-1, -0.10725679650546954269, 0.15609450127649648898, -0.17910792722298396473, 0.17117287932091412861, -0.13427236166040854015, - 0.76502075761269688892e-01, - -0.10540673887440557208e-01, - -0.49747568841964670550e-01, - 0.92147730644754677343e-01, + 0.76502075761269688892e-1, + -0.10540673887440557208e-1, + -0.4974756884196467055e-1, + 0.92147730644754677343e-1, -0.10917796377763082372, - 0.99337255447566122357e-01, - -0.67497741723103757416e-01, - 0.23253891980888785618e-01, - 0.21334530173605172759e-01, - -0.54934658667252431186e-01, - 0.69521357729980387541e-01, - -0.62384439957360073026e-01, - 0.36557846919532156760e-01, + 0.99337255447566122357e-1, + -0.67497741723103757416e-1, + 0.23253891980888785618e-1, + 0.21334530173605172759e-1, + -0.54934658667252431186e-1, + 0.69521357729980387541e-1, + -0.62384439957360073026e-1, + 0.3655784691953215676e-1, -0.10622557025134557462, 0.12170730425069349601, - -0.34410873703844206684e-01, + -0.34410873703844206684e-1, -0.11264100591643526339, 0.19320325755572936854, -0.27256762715466692493, 0.24267424203423523799, -0.19829587056134961864, - 0.64432678081246697044e-01, - 0.36349755660841844007e-01, + 0.64432678081246697044e-1, + 0.36349755660841844007e-1, -0.16391055954897487679, 0.19736657283707040311, -0.21465024340571609018, 0.12462129454334081036, - -0.38609736441190159462e-01, + -0.38609736441190159462e-1, -0.10640172534257401338, 0.18390638123383096225, -0.25877065672781934813, 0.22295485659049527061, -0.17135487036040161768, - 0.29428904516665844310e-01, - 0.80163158294831241002e-01, + 0.2942890451666584431e-1, + 0.80163158294831241002e-1, -0.21728485640131064982, 0.26212773601335437323, -0.29206859291535802736, 0.22088121792375836616, -0.14493962541050783854, - 0.41097288910491233671e-01, - 0.86037650369173171438e-01, - -0.49762100716343937376e-02, + 0.41097288910491233671e-1, + 0.86037650369173171438e-1, + -0.49762100716343937376e-2, 0.33481349833994211718, 0.41134530861555962389, - 0.90550035172472176370, - 0.15442918509872849420e+01, - 0.21780895893704541599e+01, - 0.29539087818107527816e+01, - 0.32128362476394278779e+01, - 0.25910941419209359005e+01, - 0.15507896407738264166e+01, + 0.9055003517247217637, + 0.1544291850987284942e+1, + 0.21780895893704541599e+1, + 0.29539087818107527816e+1, + 0.32128362476394278779e+1, + 0.25910941419209359005e+1, + 0.15507896407738264166e+1, -0.77991331071247538276, - -0.17719889978308132061e+01, - -0.24116975086743295265e+01, + -0.17719889978308132061e+1, + -0.24116975086743295265e+1, -0.79932820612643973313, - 0.11621099379936699059e+01, - 0.18385228436888167991e+01, - 0.13416141204100255901e+01, - -0.11976266076774260139e+01, - -0.16434940592613853649e+01, + 0.11621099379936699059e+1, + 0.18385228436888167991e+1, + 0.13416141204100255901e+1, + -0.11976266076774260139e+1, + -0.16434940592613853649e+1, -0.75079030037706395717, - 0.11799616375752990383e+01, - 0.17345141604596820972e+01, + 0.11799616375752990383e+1, + 0.17345141604596820972e+1, -0.41296571731706499531, - -0.13827729150918774970e+01, + -0.1382772915091877497e+1, -0.82930755082888629737, - 0.10965529053665510339e+01, - 0.14618038619528874733e+01, + 0.10965529053665510339e+1, + 0.14618038619528874733e+1, -0.92508836770514690784, - -0.10801963397064167083e+01, - -0.15129263850982083150, - 0.14862115180571373596e+01, + -0.10801963397064167083e+1, + -0.1512926385098208315, + 0.14862115180571373596e+1, 0.37785869853810466479, - -0.16192571171387084572e+01, - -0.56659196462366813452e-01, + -0.16192571171387084572e+1, + -0.56659196462366813452e-1, 0.80313697284122165243, 0.82644440970568944227, - -0.11265587983954341578e+01, - -0.87424308697123942480, - 0.15848638156878556149e+01, - -0.66123070447657958382e-01, + -0.11265587983954341578e+1, + -0.8742430869712394248, + 0.15848638156878556149e+1, + -0.66123070447657958382e-1, -0.48714154495077927054, -0.87805865105250413549, - 0.12598222055723538038e+01, + 0.12598222055723538038e+1, 0.42994403664357405681, - -0.15339748552237970625e+01, + -0.15339748552237970625e+1, 0.50775496636458228306, 0.52877064616318603107, 0.24016105325683534399, - -0.12793173922808311893e+01, + -0.12793173922808311893e+1, 0.56088627185579287282, 0.93407719449244852594, -0.94176490728238348993, -0.41214577938716406846, 0.95987555025132309527, - -0.66568176781698733258e-02, + -0.66568176781698733258e-2, -0.76052013903353610225, - 0.67743993479188677198e-01, + 0.67743993479188677198e-1, 0.97638562188163413591, -0.68361790371900765795, -0.66441404058316566594, - 0.12694424372016810398e+01, + 0.12694424372016810398e+1, -0.44414879887095087829, -0.53533092282540539752, - 0.34511231164852995690, + 0.3451123116485299569, 0.54974753082911365087, -0.70347053020745575758, -0.23176119191244881623, - 0.10308535884897023216e+01, + 0.10308535884897023216e+1, -0.60408252658555128267, -0.56665270198104189525, - 0.10741420763595677101e+01, - -0.39478903417798472120, + 0.10741420763595677101e+1, + -0.3947890341779847212, -0.55529682204908281662, 0.65950038622839957103, - 0.38943799007254515862e-02, + 0.38943799007254515862e-2, -0.38760108616813282456, -0.13367640644505079939, 0.95184731416346080035, - -0.99589768055156180360, - 0.28241911778384060083e-01, - 0.10486675980817019571e+01, - -0.12288110146091133501e+01, + -0.9958976805515618036, + 0.28241911778384060083e-1, + 0.10486675980817019571e+1, + -0.12288110146091133501e+1, 0.47993022979216687363, 0.29916352724790507001, -0.34897146768214165613, -0.16100201107106884568, 0.42047149708654002476, - 0.21843365862359565704e-01, + 0.21843365862359565704e-1, -0.74723644439029246467, 0.93671509630177141048, -0.30224310723081276864, @@ -13800,26 +13802,26 @@ function ESERK4ConstantCache(zprev) -0.36375169404819951424, 0.76783506546962543293, -0.53416058422517187498, - 0.42168374985535862776e-01, - 0.13650539012180998300, + 0.42168374985535862776e-1, + 0.136505390121809983, 0.15244531822997170467, -0.51417957056728369469, - 0.41738760289936155390, + 0.4173876028993615539, 0.23703994424704677435, -0.98532404397095540993, - 0.11924786517507421912e+01, + 0.11924786517507421912e+1, -0.63381321688548175608, -0.30155989095420526747, - 0.92334238268900070690, + 0.9233423826890007069, -0.81779225067155369988, 0.15428438264787197598, 0.48541997575100176432, -0.61314332176995078871, 0.20098861777778259663, 0.34549242434048788031, - -0.57659275239507290500, + -0.576592752395072905, 0.36235612620127055639, - 0.37092052526316802996e-01, + 0.37092052526316802996e-1, -0.25184753136148302355, 0.13365560884272353892, 0.12166504552246357185, @@ -13830,10 +13832,10 @@ function ESERK4ConstantCache(zprev) 0.52436269200196106155, 0.14800801232286719955, -0.80046829603665337061, - 0.98163552500462969430, + 0.9816355250046296943, -0.55132192409136526745, -0.21151813857244980421, - 0.79130308961242878940, + 0.7913030896124287894, -0.79940521222400839907, 0.23445721223767176933, 0.51776247691134791307, @@ -13847,222 +13849,222 @@ function ESERK4ConstantCache(zprev) 0.40982968897299187905, -0.63690153533243432094, 0.44464975638572457051, - -0.85800264979933784509e-02, + -0.85800264979933784509e-2, -0.37681689070138701947, 0.49108790938341040366, -0.31391603862545136572, - 0.20163669524578954444e-02, + 0.20163669524578954444e-2, 0.23384385928147166656, -0.27072474833755461043, 0.13054169693116859929, - 0.59056829137407444719e-01, + 0.59056829137407444719e-1, -0.16840834327963979944, 0.14638194955972425038, - -0.38258581911625830219e-01, - -0.67657231330717979012e-01, + -0.38258581911625830219e-1, + -0.67657231330717979012e-1, 0.10786390560851023823, - -0.83765883087896231274e-01, - 0.44113503745207997830e-01, - -0.38255437238727957316e-01, - 0.73896543655845969845e-01, + -0.83765883087896231274e-1, + 0.4411350374520799783e-1, + -0.38255437238727957316e-1, + 0.73896543655845969845e-1, -0.11610763456776840297, 0.11932555354826958338, - -0.68393089910015913979e-01, - -0.82687328866087907164e-02, - 0.59793602923206665145e-01, - -0.53382397848231073756e-01, - -0.17193741533603541516e+01, - 0.24996627938782540745e+01, + -0.68393089910015913979e-1, + -0.82687328866087907164e-2, + 0.59793602923206665145e-1, + -0.53382397848231073756e-1, + -0.17193741533603541516e+1, + 0.24996627938782540745e+1, -0.39303009947224770704, - -0.19863426057415349835e+01, - 0.30064419995373441452e+01, - -0.24389797080017689979e+01, + -0.19863426057415349835e+1, + 0.30064419995373441452e+1, + -0.24389797080017689979e+1, 0.41575764003208487418, - 0.14757656422861291645e+01, - -0.23277350213434337967e+01, - 0.12983269879412240311e+01, + 0.14757656422861291645e+1, + -0.23277350213434337967e+1, + 0.12983269879412240311e+1, 0.68787069680182877374, - -0.26611720097555897624e+01, - 0.30268047501600139348e+01, - -0.17281276474381817021e+01, + -0.26611720097555897624e+1, + 0.30268047501600139348e+1, + -0.17281276474381817021e+1, -0.86142638337825705452, - 0.29737462365025204569e+01, - -0.36920773390587195983e+01, - 0.23487269860497921314e+01, + 0.29737462365025204569e+1, + -0.36920773390587195983e+1, + 0.23487269860497921314e+1, -0.10698859148248877904, - -0.19351794411290261788e+01, - 0.22775064391168369227e+01, - -0.11273468594085804817e+01, + -0.19351794411290261788e+1, + 0.22775064391168369227e+1, + -0.11273468594085804817e+1, -0.91002359711528635344, - 0.20909086473255498184e+01, - -0.18472905701026296477e+01, - 0.15237693429643555179e-01, - 0.19134196642379979192e+01, - -0.29526910258502345741e+01, - 0.21473710697753256582e+01, + 0.20909086473255498184e+1, + -0.18472905701026296477e+1, + 0.15237693429643555179e-1, + 0.19134196642379979192e+1, + -0.29526910258502345741e+1, + 0.21473710697753256582e+1, -0.35555368957534155827, - -0.15095618891972546471e+01, - 0.19948279292371275950e+01, - -0.12562009749638736178e+01, + -0.15095618891972546471e+1, + 0.1994827929237127595e+1, + -0.12562009749638736178e+1, -0.22980369691854002356, 0.94364144709739350425, - -0.61363772192189236510, + -0.6136377219218923651, -0.68568996817639837893, - 0.14937080692188882125e+01, - -0.12499188753920280615e+01, + 0.14937080692188882125e+1, + -0.12499188753920280615e+1, -0.30823807009132470069, - 0.17614808344188668254e+01, - -0.22019853840983869553e+01, + 0.17614808344188668254e+1, + -0.22019853840983869553e+1, 0.88578829312347995284, 0.97910025620305973781, - -0.22074693241031915214e+01, - 0.14639532872877285552e+01, + -0.22074693241031915214e+1, + 0.14639532872877285552e+1, 0.49195983104746432435, - -0.23951249895726594019e+01, - 0.23157968504837151968e+01, + -0.23951249895726594019e+1, + 0.23157968504837151968e+1, -0.34013572523586904639, - -0.24792101586305301808e+01, - 0.37469248231028404739e+01, - -0.26994722905156289805e+01, + -0.24792101586305301808e+1, + 0.37469248231028404739e+1, + -0.26994722905156289805e+1, -0.24488837397924756445, - 0.26606167817363677308e+01, - -0.31286445563668179304e+01, - 0.12716850905712087094e+01, + 0.26606167817363677308e+1, + -0.31286445563668179304e+1, + 0.12716850905712087094e+1, 0.88120347811401189553, - -0.17246120505355670982e+01, + -0.17246120505355670982e+1, 0.38363535627702638475, - 0.14744767637367803825e+01, - -0.22377749281914174340e+01, + 0.14744767637367803825e+1, + -0.2237774928191417434e+1, 0.80046696546811979545, - 0.13026397309831614368e+01, - -0.23325847824981074119e+01, + 0.13026397309831614368e+1, + -0.23325847824981074119e+1, 0.95326384442300771127, - 0.13426835091607500772e+01, - -0.25649369534010397764e+01, - 0.10490033643895708693e+01, - 0.17828791172756155436e+01, - -0.36359202785168620586e+01, - 0.24012774325289245603e+01, + 0.13426835091607500772e+1, + -0.25649369534010397764e+1, + 0.10490033643895708693e+1, + 0.17828791172756155436e+1, + -0.36359202785168620586e+1, + 0.24012774325289245603e+1, 0.71473263406269593734, - -0.32482272281062249952e+01, - 0.27179437611235965910e+01, - -0.56042724895246795458e-01, - -0.23336448213540088581e+01, - 0.19455802101220585065e+01, + -0.32482272281062249952e+1, + 0.2717943761123596591e+1, + -0.56042724895246795458e-1, + -0.23336448213540088581e+1, + 0.19455802101220585065e+1, 0.26284199801143437458, - -0.18960614328187508359e+01, + -0.18960614328187508359e+1, 0.69247143141180089732, - 0.19219964498962751609e+01, - -0.32117518437510930163e+01, - 0.10807620866465950105e+01, - 0.24436891243994192102e+01, - -0.41357254709184951835e+01, - 0.19866054154395520470e+01, - 0.14960515390036304151e+01, - -0.28930722103483130780e+01, + 0.19219964498962751609e+1, + -0.32117518437510930163e+1, + 0.10807620866465950105e+1, + 0.24436891243994192102e+1, + -0.41357254709184951835e+1, + 0.1986605415439552047e+1, + 0.14960515390036304151e+1, + -0.2893072210348313078e+1, 0.64327472173322619575, - 0.21795140331837039582e+01, - -0.23429551510992316921e+01, + 0.21795140331837039582e+1, + -0.23429551510992316921e+1, -0.68828864966343028531, - 0.30294537265869569964e+01, - -0.19318556527596706385e+01, - -0.16867452044646715770e+01, - 0.31459000715970932838e+01, + 0.30294537265869569964e+1, + -0.19318556527596706385e+1, + -0.1686745204464671577e+1, + 0.31459000715970932838e+1, -0.62494354752650871365, - -0.32938872266081746787e+01, - 0.36038383835693448276e+01, - -0.43688568229572476154e-01, - -0.33256617487157531521e+01, - 0.22539776906310620141e+01, - 0.12159167970036093287e+01, - -0.22577926007143496179e+01, - -0.11027715908531763311e+01, - 0.40763717069394571624e+01, - -0.23193878137673795692e+01, - -0.27430005530239505163e+01, - 0.45133102830815197137e+01, - -0.11339182468043933483e+01, - -0.26019513746133102750e+01, - 0.11107136392454990403e+01, - 0.28303383191627706772e+01, - -0.28199276389757756967e+01, - -0.22472195567661654714e+01, - 0.50483809474957546115e+01, - -0.15392446106358992353e+01, - -0.32989039263986530415e+01, - 0.19824186235517822219e+01, - 0.27168939475195665878e+01, - -0.27273578088771799344e+01, - -0.27890649635369006987e+01, - 0.46055836699511383259e+01, - 0.49822793798439274360, - -0.43973437021590431328e+01, + -0.32938872266081746787e+1, + 0.36038383835693448276e+1, + -0.43688568229572476154e-1, + -0.33256617487157531521e+1, + 0.22539776906310620141e+1, + 0.12159167970036093287e+1, + -0.22577926007143496179e+1, + -0.11027715908531763311e+1, + 0.40763717069394571624e+1, + -0.23193878137673795692e+1, + -0.27430005530239505163e+1, + 0.45133102830815197137e+1, + -0.11339182468043933483e+1, + -0.2601951374613310275e+1, + 0.11107136392454990403e+1, + 0.28303383191627706772e+1, + -0.28199276389757756967e+1, + -0.22472195567661654714e+1, + 0.50483809474957546115e+1, + -0.15392446106358992353e+1, + -0.32989039263986530415e+1, + 0.19824186235517822219e+1, + 0.27168939475195665878e+1, + -0.27273578088771799344e+1, + -0.27890649635369006987e+1, + 0.46055836699511383259e+1, + 0.4982279379843927436, + -0.43973437021590431328e+1, 0.30364435286045682316, - 0.42549278944573485362e+01, - -0.10389805623922507838e+01, - -0.44412834792090700731e+01, - 0.15851467850179667973e+01, - 0.45360358364120383357e+01, - -0.24675826439038632820e+01, - -0.43444069599269736770e+01, - 0.25537368590835205495e+01, - 0.40624240780960896302e+01, - -0.18803858095176284593e+01, - -0.52816398270958435646e+01, - 0.21074192409878444998e+01, - 0.51828956699599428859e+01, - -0.13265376577885317211e+01, - -0.51940454837556941925e+01, + 0.42549278944573485362e+1, + -0.10389805623922507838e+1, + -0.44412834792090700731e+1, + 0.15851467850179667973e+1, + 0.45360358364120383357e+1, + -0.2467582643903863282e+1, + -0.4344406959926973677e+1, + 0.25537368590835205495e+1, + 0.40624240780960896302e+1, + -0.18803858095176284593e+1, + -0.52816398270958435646e+1, + 0.21074192409878444998e+1, + 0.51828956699599428859e+1, + -0.13265376577885317211e+1, + -0.51940454837556941925e+1, -0.95381644132579268547, - 0.59867817447273798948e+01, - 0.23024422102308474969e+01, - -0.53198293046195557210e+01, - -0.40726796068490260794e+01, - 0.21375901123611447119e+01, - 0.69790381287707505820e+01, + 0.59867817447273798948e+1, + 0.23024422102308474969e+1, + -0.5319829304619555721e+1, + -0.40726796068490260794e+1, + 0.21375901123611447119e+1, + 0.6979038128770750582e+1, 0.29389458301492660253, - -0.63513752809478649652e+01, - -0.44171658704985592436e+01, - 0.16191709731707248920e+01, - 0.85655037153294681929e+01, - 0.25179646203742889199e+01, - -0.35807595526758317916e+01, - -0.83413335558797498948e+01, - -0.49102920682021622412e+01, - 0.44924286189956079696e+01, - 0.74544547044799740476e+01, - 0.94792579951726310128e+01, + -0.63513752809478649652e+1, + -0.44171658704985592436e+1, + 0.1619170973170724892e+1, + 0.85655037153294681929e+1, + 0.25179646203742889199e+1, + -0.35807595526758317916e+1, + -0.83413335558797498948e+1, + -0.49102920682021622412e+1, + 0.44924286189956079696e+1, + 0.74544547044799740476e+1, + 0.94792579951726310128e+1, 0.91234631447897840406, - -0.48286059107411087865e+01, - -0.10846459348529046807e+02, - -0.13412753567814334588e+02, - -0.10679454338749049924e+02, - -0.10163762416737270655e+02, - -0.50622498303079517257e+01, - -0.42287469209814956272e+01, - -0.18749380743375998470e+01, + -0.48286059107411087865e+1, + -0.10846459348529046807e+2, + -0.13412753567814334588e+2, + -0.10679454338749049924e+2, + -0.10163762416737270655e+2, + -0.50622498303079517257e+1, + -0.42287469209814956272e+1, + -0.1874938074337599847e+1, -0.56146715763633370244, - -0.11745308369508278279e+01, + -0.11745308369508278279e+1, 0.65125036032994831903, -0.72677452323918667609, 0.24355959723751560708, 0.22539516783359581087, -0.71098785265546449175, - 0.10288178536855348000e+01, - -0.11027200685775979672e+01, + 0.10288178536855348e+1, + -0.11027200685775979672e+1, 0.90001005390273669526, -0.45941128587011065276, -0.11872998765928524656, 0.70254317092791740418, - -0.11543431782834878696e+01, - 0.13704511908656535901e+01, - -0.12995327523557196336e+01, + -0.11543431782834878696e+1, + 0.13704511908656535901e+1, + -0.12995327523557196336e+1, 0.96021954241214857451, -0.43025847517360993333, -0.16754747983004078526, 0.69987450260841777006, - -0.10499652380725459366e+01, - 0.11487950120713747992e+01, + -0.10499652380725459366e+1, + 0.11487950120713747992e+1, -0.98639369172381163864, 0.61600477439119383227, -0.13666609322064185439, @@ -14073,187 +14075,187 @@ function ESERK4ConstantCache(zprev) -0.40713936236465214646, 0.64693318996942883459, -0.58828200566499522228, - 0.64626112740228591411e-02, + 0.64626112740228591411e-2, 0.82592953849197392469, - -0.11557909401776980118e+01, - 0.14231227444744878330e+01, - -0.10235812280193006263e+01, + -0.11557909401776980118e+1, + 0.1423122744474487833e+1, + -0.10235812280193006263e+1, 0.59054322738856857011, 0.29179415648845108411, -0.85690153883009778646, - 0.14782440139937298440e+01, - -0.14512847769327141823e+01, - 0.13004529532208146669e+01, + 0.1478244013993729844e+1, + -0.14512847769327141823e+1, + 0.13004529532208146669e+1, -0.52330651036149378186, -0.15612046590397016255, - 0.10956342708199897640e+01, - -0.15217120822178609174e+01, - 0.18517409755550942041e+01, - -0.14671797504515076138e+01, + 0.1095634270819989764e+1, + -0.15217120822178609174e+1, + 0.18517409755550942041e+1, + -0.14671797504515076138e+1, 0.99477431780524072646, - -0.24919850932180655917e-01, + -0.24919850932180655917e-1, -0.66421804837526010612, - 0.14281926329720520119e+01, - -0.15509848521520332998e+01, - 0.15383059480181959788e+01, + 0.14281926329720520119e+1, + -0.15509848521520332998e+1, + 0.15383059480181959788e+1, -0.91065205753935762889, 0.30429993329658294732, 0.38698451351019458322, - -0.11036343902412830698e+01, + -0.11036343902412830698e+1, 0.46480306140954635863, - -0.21997660632290396698e+01, - -0.25628757790744214340e+01, - -0.50540336981017919271e+01, - -0.98687203480508802755e+01, - -0.12332565669642750805e+02, - -0.18473484101034365779e+02, - -0.18620854703356961579e+02, - -0.16017293806586085481e+02, - -0.90629374738894252772e+01, - 0.46710972234493217670e+01, - 0.10454106886869219295e+02, - 0.14763089043368948339e+02, - 0.44805791188364194610e+01, - -0.67132760223709597724e+01, - -0.11172318203133345449e+02, - -0.80457533922921307123e+01, - 0.73070382172090235784e+01, - 0.96671660621445880679e+01, - 0.47055527421841842894e+01, - -0.72113269197534481947e+01, - -0.10399628264633786756e+02, - 0.26287653082673347882e+01, - 0.79954253818895049122e+01, - 0.53918348431957898725e+01, - -0.70413998593843247775e+01, - -0.83357663387238698505e+01, - 0.52170989405483050305e+01, - 0.66673270042006356206e+01, + -0.21997660632290396698e+1, + -0.2562875779074421434e+1, + -0.50540336981017919271e+1, + -0.98687203480508802755e+1, + -0.12332565669642750805e+2, + -0.18473484101034365779e+2, + -0.18620854703356961579e+2, + -0.16017293806586085481e+2, + -0.90629374738894252772e+1, + 0.4671097223449321767e+1, + 0.10454106886869219295e+2, + 0.14763089043368948339e+2, + 0.4480579118836419461e+1, + -0.67132760223709597724e+1, + -0.11172318203133345449e+2, + -0.80457533922921307123e+1, + 0.73070382172090235784e+1, + 0.96671660621445880679e+1, + 0.47055527421841842894e+1, + -0.72113269197534481947e+1, + -0.10399628264633786756e+2, + 0.26287653082673347882e+1, + 0.79954253818895049122e+1, + 0.53918348431957898725e+1, + -0.70413998593843247775e+1, + -0.83357663387238698505e+1, + 0.52170989405483050305e+1, + 0.66673270042006356206e+1, 0.88785298051077765624, - -0.90371302892333460477e+01, - -0.20622421573640772330e+01, - 0.95113880835837836258e+01, + -0.90371302892333460477e+1, + -0.2062242157364077233e+1, + 0.95113880835837836258e+1, 0.45650414196439337289, - -0.47648998453114632667e+01, - -0.52312983329141911071e+01, - 0.72653682495749123404e+01, - 0.45432472626691255968e+01, - -0.86832964830225769504e+01, + -0.47648998453114632667e+1, + -0.52312983329141911071e+1, + 0.72653682495749123404e+1, + 0.45432472626691255968e+1, + -0.86832964830225769504e+1, -0.44303602675427061763, - 0.36593986960339441872e+01, - 0.47526938521438708563e+01, - -0.73507537678859486974e+01, - -0.24268300736979102616e+01, - 0.86901116983133412930e+01, - -0.22132085612102745387e+01, - -0.42382411032564464293e+01, + 0.36593986960339441872e+1, + 0.47526938521438708563e+1, + -0.73507537678859486974e+1, + -0.24268300736979102616e+1, + 0.8690111698313341293e+1, + -0.22132085612102745387e+1, + -0.42382411032564464293e+1, -0.25022474947421230462, - 0.64820156419978127715e+01, - -0.22752806854891813870e+01, - -0.65016125479533073417e+01, - 0.63056109498094716770e+01, - 0.20777865800616788228e+01, - -0.56018578941724292974e+01, - 0.78169817210387348982e-01, - 0.43906518331987136605e+01, + 0.64820156419978127715e+1, + -0.2275280685489181387e+1, + -0.65016125479533073417e+1, + 0.6305610949809471677e+1, + 0.20777865800616788228e+1, + -0.56018578941724292974e+1, + 0.78169817210387348982e-1, + 0.43906518331987136605e+1, -0.15608373776668485466, - -0.61352877265666974083e+01, - 0.43777719398705761122e+01, - 0.37235274337603772032e+01, - -0.73551336483006579670e+01, - 0.23869182329197995429e+01, - 0.35321176648427714539e+01, - -0.24461036107352556179e+01, - -0.28643662688806315053e+01, - 0.37491975401701607140e+01, - 0.18647005049876836935e+01, - -0.66075354181944971899e+01, - 0.39407034246144467815e+01, - 0.32440038423264097034e+01, - -0.64820478906256386864e+01, - 0.26118785181663790596e+01, - 0.29043915416293550891e+01, - -0.33914967836519349653e+01, + -0.61352877265666974083e+1, + 0.43777719398705761122e+1, + 0.37235274337603772032e+1, + -0.7355133648300657967e+1, + 0.23869182329197995429e+1, + 0.35321176648427714539e+1, + -0.24461036107352556179e+1, + -0.28643662688806315053e+1, + 0.3749197540170160714e+1, + 0.18647005049876836935e+1, + -0.66075354181944971899e+1, + 0.39407034246144467815e+1, + 0.32440038423264097034e+1, + -0.64820478906256386864e+1, + 0.26118785181663790596e+1, + 0.29043915416293550891e+1, + -0.33914967836519349653e+1, -0.65234323879419109371, - 0.29345205752058469706e+01, + 0.29345205752058469706e+1, 0.30219272568731220252, - -0.53916793671474989580e+01, - 0.58875183977315934669e+01, + -0.5391679367147498958e+1, + 0.58875183977315934669e+1, -0.32630221164517558829, - -0.59092623576584868417e+01, - 0.68214552379949964234e+01, - -0.22381633470162305422e+01, - -0.24298085434195910715e+01, - 0.26307969057773670229e+01, + -0.59092623576584868417e+1, + 0.68214552379949964234e+1, + -0.22381633470162305422e+1, + -0.24298085434195910715e+1, + 0.26307969057773670229e+1, 0.60693171109115751083, - -0.23897912861003538509e+01, - -0.21179135664683091528e-01, - 0.41555826869471861329e+01, - -0.51294464857051789153e+01, - 0.12437011410595502081e+01, - 0.40967571662145996214e+01, - -0.57667899416666594803e+01, - 0.21976173855177902894e+01, - 0.32168800734013673903e+01, - -0.55061202814066101396e+01, - 0.29709078639853934156e+01, - 0.16021739349320811563e+01, - -0.39477570783131179510e+01, - 0.25618159336721992858e+01, - 0.28484642244645141940, - -0.11745981588229983394e+01, + -0.23897912861003538509e+1, + -0.21179135664683091528e-1, + 0.41555826869471861329e+1, + -0.51294464857051789153e+1, + 0.12437011410595502081e+1, + 0.40967571662145996214e+1, + -0.57667899416666594803e+1, + 0.21976173855177902894e+1, + 0.32168800734013673903e+1, + -0.55061202814066101396e+1, + 0.29709078639853934156e+1, + 0.16021739349320811563e+1, + -0.3947757078313117951e+1, + 0.25618159336721992858e+1, + 0.2848464224464514194, + -0.11745981588229983394e+1, -0.78844899737099238823, - 0.32054462546659907574e+01, - -0.28503129125741484273e+01, + 0.32054462546659907574e+1, + -0.28503129125741484273e+1, -0.89970863066802575503, - 0.52886235192495929525e+01, - -0.65155703170209129382e+01, - 0.32351725644735203069e+01, - 0.22336064618232764900e+01, - -0.57685655664402855081e+01, - 0.49193738681147625158e+01, + 0.52886235192495929525e+1, + -0.65155703170209129382e+1, + 0.32351725644735203069e+1, + 0.223360646182327649e+1, + -0.57685655664402855081e+1, + 0.49193738681147625158e+1, -0.73053714570769057168, - -0.32756687174542422625e+01, - 0.41506437327085929923e+01, - -0.17111213098259139276e+01, - -0.16091132642455618917e+01, - 0.31061589654522698822e+01, - -0.19802127414009131900e+01, + -0.32756687174542422625e+1, + 0.41506437327085929923e+1, + -0.17111213098259139276e+1, + -0.16091132642455618917e+1, + 0.31061589654522698822e+1, + -0.198021274140091319e+1, -0.22896642493029284449, - 0.13307820934871228413e+01, + 0.13307820934871228413e+1, -0.45836535676141382245, - -0.11901980300750105712e+01, - 0.16059011880123728044e+01, + -0.11901980300750105712e+1, + 0.16059011880123728044e+1, 0.15956780662317315844, - -0.29589875472499587161e+01, - 0.44446424012943595017e+01, - -0.29655330191653721528e+01, + -0.29589875472499587161e+1, + 0.44446424012943595017e+1, + -0.29655330191653721528e+1, -0.90609026560632000002, - 0.46663398180106385738e+01, - -0.56223437554843860298e+01, - 0.29479338813023843180e+01, - 0.16780664935366822466e+01, - -0.51593720057394136802e+01, - 0.51709137965777145496e+01, - -0.17118833171114680169e+01, - -0.28893738507914905611e+01, - 0.56281455646705031981e+01, - -0.47908924648160269300e+01, - 0.10472173177204755490e+01, - 0.31491828091944755741e+01, - -0.52064324681487628155e+01, - 0.40704186174864052106e+01, + 0.46663398180106385738e+1, + -0.56223437554843860298e+1, + 0.2947933881302384318e+1, + 0.16780664935366822466e+1, + -0.51593720057394136802e+1, + 0.51709137965777145496e+1, + -0.17118833171114680169e+1, + -0.28893738507914905611e+1, + 0.56281455646705031981e+1, + -0.479089246481602693e+1, + 0.1047217317720475549e+1, + 0.31491828091944755741e+1, + -0.52064324681487628155e+1, + 0.40704186174864052106e+1, -0.71890015995007483518, - -0.26106547809358207068e+01, - 0.39619170245362287375e+01, - -0.27977777556609044751e+01, + -0.26106547809358207068e+1, + 0.39619170245362287375e+1, + -0.27977777556609044751e+1, 0.17582598089584022816, - 0.21370149145623504872e+01, - -0.28178521587987170882e+01, - 0.17486414276085897601e+01, + 0.21370149145623504872e+1, + -0.28178521587987170882e+1, + 0.17486414276085897601e+1, 0.12749860551953462462, - -0.15407802654780402563e+01, - 0.17508604959796711942e+01, + -0.15407802654780402563e+1, + 0.17508604959796711942e+1, -0.88589235889900741494, -0.28812884422716206201, 0.99293522880105711259, @@ -14262,8 +14264,8 @@ function ESERK4ConstantCache(zprev) 0.24109464416868989223, -0.42474721307681495563, 0.23243922698517591185, - 0.40235189093289061568e-01, - -0.94374288669776817962e-01, + 0.40235189093289061568e-1, + -0.94374288669776817962e-1, -0.11682028500950240868, 0.38385139373223281511, -0.43168898202315469925, @@ -14271,994 +14273,994 @@ function ESERK4ConstantCache(zprev) 0.24064304286720963888, -0.49028740049823732461, 0.38731508470437908676, - 0.59379628668698902771e+01, - -0.86902311254064930068e+01, - 0.14109792799285765241e+01, - 0.70278630358544678103e+01, - -0.10478804801653325285e+02, - 0.82791738803782681799e+01, + 0.59379628668698902771e+1, + -0.86902311254064930068e+1, + 0.14109792799285765241e+1, + 0.70278630358544678103e+1, + -0.10478804801653325285e+2, + 0.82791738803782681799e+1, -0.65046726511047514574, - -0.63794466354546095488e+01, - 0.96349919778002828252e+01, - -0.57534150483023784872e+01, - -0.16809055721245000914e+01, - 0.92689199091474652192e+01, - -0.10879675874144201231e+02, - 0.64879180345668494567e+01, - 0.26990800969268775589e+01, - -0.99252700710321359878e+01, - 0.12059594079494051044e+02, - -0.66176321164993812118e+01, - -0.16584062388192866155e+01, - 0.87530442282698111001e+01, - -0.90100031486631344535e+01, - 0.37493326747097888152e+01, - 0.45217030261335029451e+01, - -0.88597162428072167017e+01, - 0.74496331553409609327e+01, - 0.41285445156619360318e-01, - -0.73244272966128134428e+01, - 0.10662374928121955975e+02, - -0.65808217054198179241e+01, + -0.63794466354546095488e+1, + 0.96349919778002828252e+1, + -0.57534150483023784872e+1, + -0.16809055721245000914e+1, + 0.92689199091474652192e+1, + -0.10879675874144201231e+2, + 0.64879180345668494567e+1, + 0.26990800969268775589e+1, + -0.99252700710321359878e+1, + 0.12059594079494051044e+2, + -0.66176321164993812118e+1, + -0.16584062388192866155e+1, + 0.87530442282698111001e+1, + -0.90100031486631344535e+1, + 0.37493326747097888152e+1, + 0.45217030261335029451e+1, + -0.88597162428072167017e+1, + 0.74496331553409609327e+1, + 0.41285445156619360318e-1, + -0.73244272966128134428e+1, + 0.10662374928121955975e+2, + -0.65808217054198179241e+1, -0.84995048486577517988, - 0.77265389515425280109e+01, - -0.82449793825994035501e+01, - 0.36703840063195785071e+01, - 0.34378863619587685108e+01, - -0.63700274150809637064e+01, - 0.41060202279367645772e+01, - 0.26210946356194253504e+01, - -0.70893857087624816415e+01, - 0.65409266864290716015e+01, + 0.77265389515425280109e+1, + -0.82449793825994035501e+1, + 0.36703840063195785071e+1, + 0.34378863619587685108e+1, + -0.63700274150809637064e+1, + 0.41060202279367645772e+1, + 0.26210946356194253504e+1, + -0.70893857087624816415e+1, + 0.65409266864290716015e+1, 0.24929626737577526008, - -0.70554010032205303204e+01, - 0.96410290675562357876e+01, - -0.44472518065483770400e+01, - -0.36087501642515458222e+01, - 0.94292954206711314669e+01, - -0.70040036286132059118e+01, + -0.70554010032205303204e+1, + 0.96410290675562357876e+1, + -0.444725180654837704e+1, + -0.36087501642515458222e+1, + 0.94292954206711314669e+1, + -0.70040036286132059118e+1, -0.88579743774622465846, - 0.92077693396586557384e+01, - -0.97949294470854404437e+01, - 0.26912666404929703745e+01, - 0.81912941543057495863e+01, - -0.13199345058755733717e+02, - 0.93225732974118411533e+01, - 0.18516979339619132894e+01, - -0.10529759412013213193e+02, - 0.11272851798099946308e+02, - -0.28633408908225450595e+01, - -0.60362765549701871137e+01, - 0.88758314902836961124e+01, - -0.23368565830791454552e+01, - -0.61568054703580727960e+01, - 0.95963629050105456741e+01, - -0.33085545225592754015e+01, - -0.60190469197274545365e+01, - 0.10758307876220777999e+02, - -0.49808330703306014087e+01, - -0.51430732034075932191e+01, - 0.11150641050937011300e+02, - -0.57249271746282488493e+01, - -0.55078210962520310900e+01, - 0.13191321730045881822e+02, - -0.85021851346986387910e+01, - -0.36638731943828388715e+01, - 0.13328313245774362272e+02, - -0.10430642674303490125e+02, + 0.92077693396586557384e+1, + -0.97949294470854404437e+1, + 0.26912666404929703745e+1, + 0.81912941543057495863e+1, + -0.13199345058755733717e+2, + 0.93225732974118411533e+1, + 0.18516979339619132894e+1, + -0.10529759412013213193e+2, + 0.11272851798099946308e+2, + -0.28633408908225450595e+1, + -0.60362765549701871137e+1, + 0.88758314902836961124e+1, + -0.23368565830791454552e+1, + -0.6156805470358072796e+1, + 0.95963629050105456741e+1, + -0.33085545225592754015e+1, + -0.60190469197274545365e+1, + 0.10758307876220777999e+2, + -0.49808330703306014087e+1, + -0.51430732034075932191e+1, + 0.111506410509370113e+2, + -0.57249271746282488493e+1, + -0.550782109625203109e+1, + 0.13191321730045881822e+2, + -0.8502185134698638791e+1, + -0.36638731943828388715e+1, + 0.13328313245774362272e+2, + -0.10430642674303490125e+2, -0.84538245792788146993, - 0.10392550712619421205e+02, - -0.78781111920072124377e+01, - -0.23012129920747810274e+01, - 0.97274480690651756731e+01, - -0.46420920349746124245e+01, - -0.69751358263445766283e+01, - 0.13451152155025745571e+02, - -0.56220406675896574811e+01, - -0.83434512930930022634e+01, - 0.15159156475205323389e+02, - -0.64243512744146800131e+01, - -0.74648561934235955206e+01, - 0.12447153775931569797e+02, - -0.22553054140203538935e+01, - -0.99745131331376661876e+01, - 0.10632696694385041170e+02, - 0.24253494324780162650e+01, - -0.12646306949682715626e+02, - 0.82710767224405241649e+01, - 0.69970642908640252600e+01, - -0.13475562226699127066e+02, - 0.33766827261897582879e+01, - 0.12703245184353630037e+02, - -0.13942404603560239806e+02, + 0.10392550712619421205e+2, + -0.78781111920072124377e+1, + -0.23012129920747810274e+1, + 0.97274480690651756731e+1, + -0.46420920349746124245e+1, + -0.69751358263445766283e+1, + 0.13451152155025745571e+2, + -0.56220406675896574811e+1, + -0.83434512930930022634e+1, + 0.15159156475205323389e+2, + -0.64243512744146800131e+1, + -0.74648561934235955206e+1, + 0.12447153775931569797e+2, + -0.22553054140203538935e+1, + -0.99745131331376661876e+1, + 0.1063269669438504117e+2, + 0.2425349432478016265e+1, + -0.12646306949682715626e+2, + 0.82710767224405241649e+1, + 0.699706429086402526e+1, + -0.13475562226699127066e+2, + 0.33766827261897582879e+1, + 0.12703245184353630037e+2, + -0.13942404603560239806e+2, -0.63117602364166902618, - 0.14024496199011085906e+02, - -0.85781490728644360644e+01, - -0.68201977213132360944e+01, - 0.11628204219217586513e+02, - 0.26340656973334533042e+01, - -0.15838097478873351065e+02, - 0.95704897249909368639e+01, - 0.10506022785709500766e+02, - -0.17012322626599846842e+02, - 0.24255653073510718976e+01, - 0.13024853547887829563e+02, - -0.59552574413832140010e+01, - -0.11718505137167154473e+02, - 0.12799551593346185641e+02, - 0.76721793966474072235e+01, - -0.19130157833786213928e+02, - 0.46404252031145665214e+01, - 0.15005196851531138691e+02, - -0.85946352597570108145e+01, - -0.11957285537503587136e+02, - 0.12547574041289928815e+02, - 0.10456617227014708860e+02, - -0.18265641586518658102e+02, - -0.27688189523449140417e+01, - 0.18714298063411760609e+02, - -0.12160222463599457132e+01, - -0.18006577061980404864e+02, - 0.43642038133463767480e+01, - 0.18914975092426466574e+02, - -0.71566416370047001294e+01, - -0.18463310162551842097e+02, - 0.99177435013326178392e+01, - 0.18342849688172254474e+02, - -0.10353330880930410984e+02, - -0.17866070004376009450e+02, - 0.89591179334900150621e+01, - 0.21137744834067913047e+02, - -0.80920308954972028914e+01, - -0.22051403696758381301e+02, - 0.53501493583704808898e+01, - 0.22408656308765401377e+02, - 0.33081647119799026946e+01, - -0.24645785729346457060e+02, - -0.97195708008478423068e+01, - 0.21849977168222363133e+02, - 0.18047111557372531365e+02, - -0.10087658155708277619e+02, - -0.28413867236198306898e+02, - -0.15401161252093860110e+01, - 0.26139295538683363418e+02, - 0.19973904228183023690e+02, - -0.88976798024192156333e+01, - -0.33617546315958200864e+02, - -0.12657323321677171890e+02, - 0.16333326255953547701e+02, - 0.34893173540003864730e+02, - 0.19500807195365130298e+02, - -0.16655823610739357576e+02, - -0.34180966291299249349e+02, - -0.36856841051408572696e+02, - -0.62772515622466782403e+01, - 0.21753575416235996443e+02, - 0.45284745694824692919e+02, - 0.55456792331413701902e+02, - 0.46569185720695891462e+02, - 0.40615672265796071372e+02, - 0.23171768826224017346e+02, - 0.16442168972896677559e+02, - 0.83739476484580102067e+01, - 0.26618478489490868810e+01, - 0.40786856637462927111e+01, - -0.17332355811611046548e+01, - 0.23475810582780014535e+01, + 0.14024496199011085906e+2, + -0.85781490728644360644e+1, + -0.68201977213132360944e+1, + 0.11628204219217586513e+2, + 0.26340656973334533042e+1, + -0.15838097478873351065e+2, + 0.95704897249909368639e+1, + 0.10506022785709500766e+2, + -0.17012322626599846842e+2, + 0.24255653073510718976e+1, + 0.13024853547887829563e+2, + -0.5955257441383214001e+1, + -0.11718505137167154473e+2, + 0.12799551593346185641e+2, + 0.76721793966474072235e+1, + -0.19130157833786213928e+2, + 0.46404252031145665214e+1, + 0.15005196851531138691e+2, + -0.85946352597570108145e+1, + -0.11957285537503587136e+2, + 0.12547574041289928815e+2, + 0.1045661722701470886e+2, + -0.18265641586518658102e+2, + -0.27688189523449140417e+1, + 0.18714298063411760609e+2, + -0.12160222463599457132e+1, + -0.18006577061980404864e+2, + 0.4364203813346376748e+1, + 0.18914975092426466574e+2, + -0.71566416370047001294e+1, + -0.18463310162551842097e+2, + 0.99177435013326178392e+1, + 0.18342849688172254474e+2, + -0.10353330880930410984e+2, + -0.1786607000437600945e+2, + 0.89591179334900150621e+1, + 0.21137744834067913047e+2, + -0.80920308954972028914e+1, + -0.22051403696758381301e+2, + 0.53501493583704808898e+1, + 0.22408656308765401377e+2, + 0.33081647119799026946e+1, + -0.2464578572934645706e+2, + -0.97195708008478423068e+1, + 0.21849977168222363133e+2, + 0.18047111557372531365e+2, + -0.10087658155708277619e+2, + -0.28413867236198306898e+2, + -0.1540116125209386011e+1, + 0.26139295538683363418e+2, + 0.1997390422818302369e+2, + -0.88976798024192156333e+1, + -0.33617546315958200864e+2, + -0.1265732332167717189e+2, + 0.16333326255953547701e+2, + 0.3489317354000386473e+2, + 0.19500807195365130298e+2, + -0.16655823610739357576e+2, + -0.34180966291299249349e+2, + -0.36856841051408572696e+2, + -0.62772515622466782403e+1, + 0.21753575416235996443e+2, + 0.45284745694824692919e+2, + 0.55456792331413701902e+2, + 0.46569185720695891462e+2, + 0.40615672265796071372e+2, + 0.23171768826224017346e+2, + 0.16442168972896677559e+2, + 0.83739476484580102067e+1, + 0.2661847848949086881e+1, + 0.40786856637462927111e+1, + -0.17332355811611046548e+1, + 0.23475810582780014535e+1, -0.96963304210785861148, -0.17806158386529716275, - 0.14669341883731026321e+01, - -0.23458474354250409277e+01, - 0.26536675122846937747e+01, - -0.22941303371197308003e+01, - 0.13523632853092766304e+01, - -0.60967373876157325563e-01, - -0.12711184982551722022e+01, - 0.23174953315762758521e+01, - -0.28323750676396368675e+01, - 0.26915652878328413244e+01, - -0.19375360573645648010e+01, + 0.14669341883731026321e+1, + -0.23458474354250409277e+1, + 0.26536675122846937747e+1, + -0.22941303371197308003e+1, + 0.13523632853092766304e+1, + -0.60967373876157325563e-1, + -0.12711184982551722022e+1, + 0.23174953315762758521e+1, + -0.28323750676396368675e+1, + 0.26915652878328413244e+1, + -0.1937536057364564801e+1, 0.75104893680912543363, 0.57974934269828348743, - -0.17438791473129124920e+01, - 0.24697836374783856961e+01, - -0.26013126303710194520e+01, - 0.21224338549641208473e+01, - -0.11681415357871995919e+01, - -0.19297269124948217278e-01, - 0.11429993714369526270e+01, - -0.19307010375660680346e+01, - 0.21948787196872658889e+01, - -0.18818908167125889541e+01, - 0.10801636819992985750e+01, - -0.10705746683772863204e+01, + -0.1743879147312912492e+1, + 0.24697836374783856961e+1, + -0.2601312630371019452e+1, + 0.21224338549641208473e+1, + -0.11681415357871995919e+1, + -0.19297269124948217278e-1, + 0.1142999371436952627e+1, + -0.19307010375660680346e+1, + 0.21948787196872658889e+1, + -0.18818908167125889541e+1, + 0.1080163681999298575e+1, + -0.10705746683772863204e+1, 0.54086593773961977316, 0.67777021827268157939, - -0.22083601158247208041e+01, - 0.26419399892277724007e+01, - -0.28673635302857189977e+01, - 0.18086319443780030092e+01, + -0.22083601158247208041e+1, + 0.26419399892277724007e+1, + -0.28673635302857189977e+1, + 0.18086319443780030092e+1, -0.74014604758405488916, - -0.10724410768837446817e+01, - 0.21483966661214104477e+01, - -0.32053077008636265965e+01, - 0.29455269869988445208e+01, - -0.24237897672337438415e+01, + -0.10724410768837446817e+1, + 0.21483966661214104477e+1, + -0.32053077008636265965e+1, + 0.29455269869988445208e+1, + -0.24237897672337438415e+1, 0.75065203438402827718, 0.64754642383322913446, - -0.24215343952328431953e+01, - 0.31066307803007271460e+01, - -0.35273979467582750047e+01, - 0.25650566314351523900e+01, - -0.14712525318837079702e+01, + -0.24215343952328431953e+1, + 0.3106630780300727146e+1, + -0.35273979467582750047e+1, + 0.256505663143515239e+1, + -0.14712525318837079702e+1, -0.47473004811735391995, - 0.17613291321437352099e+01, - -0.30558121452265014639e+01, - 0.30244269786966357927e+01, - -0.26759269741930329367e+01, - 0.11653344584741516243e+01, - 0.23292431411790726070, - -0.16746489533596951027e+01, - 0.29980472736836123460e+01, - -0.16389443444045566078e+01, - 0.45722181817981617513e+01, - 0.46908012878866731654e+01, - 0.91408594343674884897e+01, - 0.19030657494971357835e+02, - 0.22205741562202042871e+02, - 0.35350288455499914164e+02, - 0.33979492777747154264e+02, - 0.30466988133666184524e+02, - 0.16619387280873944235e+02, - -0.87047211062344036492e+01, - -0.19303840540994812613e+02, - -0.27908674261804684136e+02, - -0.79901763052106273832e+01, - 0.12230428089676193437e+02, - 0.21004079629136118257e+02, - 0.15041085159530142690e+02, - -0.13818473192515568826e+02, - -0.17781394284522821891e+02, - -0.90518342695091469352e+01, - 0.13635968097304697721e+02, - 0.19393903914637842689e+02, - -0.50828434042822774330e+01, - -0.14577281130203441961e+02, - -0.10529373002563575668e+02, - 0.13623914439858685554e+02, - 0.15166202784540388393e+02, - -0.95354778122353121006e+01, - -0.12399253861808105626e+02, - -0.19768621320612849157e+01, - 0.17417247112253399166e+02, - 0.31550560806552989668e+01, - -0.17043980626853777238e+02, - -0.14486080760208912555e+01, - 0.92462885439195332538e+01, - 0.97390881057517635355e+01, - -0.13901718556844183894e+02, - -0.78097975354410440474e+01, - 0.15286823144317219558e+02, - 0.18631864328727589797e+01, - -0.78343746156406721681e+01, - -0.80566774822229110242e+01, - 0.13210265363839621244e+02, - 0.46576463253956879029e+01, - -0.15956512015136373961e+02, - 0.35120751966437442348e+01, - 0.87848550601879225042e+01, + 0.17613291321437352099e+1, + -0.30558121452265014639e+1, + 0.30244269786966357927e+1, + -0.26759269741930329367e+1, + 0.11653344584741516243e+1, + 0.2329243141179072607, + -0.16746489533596951027e+1, + 0.2998047273683612346e+1, + -0.16389443444045566078e+1, + 0.45722181817981617513e+1, + 0.46908012878866731654e+1, + 0.91408594343674884897e+1, + 0.19030657494971357835e+2, + 0.22205741562202042871e+2, + 0.35350288455499914164e+2, + 0.33979492777747154264e+2, + 0.30466988133666184524e+2, + 0.16619387280873944235e+2, + -0.87047211062344036492e+1, + -0.19303840540994812613e+2, + -0.27908674261804684136e+2, + -0.79901763052106273832e+1, + 0.12230428089676193437e+2, + 0.21004079629136118257e+2, + 0.1504108515953014269e+2, + -0.13818473192515568826e+2, + -0.17781394284522821891e+2, + -0.90518342695091469352e+1, + 0.13635968097304697721e+2, + 0.19393903914637842689e+2, + -0.5082843404282277433e+1, + -0.14577281130203441961e+2, + -0.10529373002563575668e+2, + 0.13623914439858685554e+2, + 0.15166202784540388393e+2, + -0.95354778122353121006e+1, + -0.12399253861808105626e+2, + -0.19768621320612849157e+1, + 0.17417247112253399166e+2, + 0.31550560806552989668e+1, + -0.17043980626853777238e+2, + -0.14486080760208912555e+1, + 0.92462885439195332538e+1, + 0.97390881057517635355e+1, + -0.13901718556844183894e+2, + -0.78097975354410440474e+1, + 0.15286823144317219558e+2, + 0.18631864328727589797e+1, + -0.78343746156406721681e+1, + -0.80566774822229110242e+1, + 0.13210265363839621244e+2, + 0.46576463253956879029e+1, + -0.15956512015136373961e+2, + 0.35120751966437442348e+1, + 0.87848550601879225042e+1, -0.53999173205414741084, - -0.11101613340148924536e+02, - 0.33767945455809345034e+01, - 0.12779834946983889665e+02, - -0.12142550192032045331e+02, - -0.37866248661780455009e+01, - 0.10600546857654311594e+02, + -0.11101613340148924536e+2, + 0.33767945455809345034e+1, + 0.12779834946983889665e+2, + -0.12142550192032045331e+2, + -0.37866248661780455009e+1, + 0.10600546857654311594e+2, -0.46176278749534571677, - -0.77961885516008955221e+01, + -0.77961885516008955221e+1, -0.11841788294863693498, - 0.11806347129487228642e+02, - -0.84425512661387251967e+01, - -0.67695478489956908419e+01, - 0.13607165094865209198e+02, - -0.43537925716243712770e+01, - -0.67268591367059435981e+01, - 0.47639702943903232679e+01, - 0.50628437465585154342e+01, - -0.66442065439515278769e+01, - -0.38719134015344138788e+01, - 0.12697146317425044515e+02, - -0.76255807547328178231e+01, - -0.59504029419222934649e+01, - 0.12202239246192460698e+02, - -0.52075252722721785403e+01, - -0.48841690387802669804e+01, - 0.56401120743956383308e+01, - 0.19702699317026755033e+01, - -0.61923959977170843771e+01, - 0.28390949595478737894e-02, - 0.97294362635180196008e+01, - -0.10947804788000178533e+02, + 0.11806347129487228642e+2, + -0.84425512661387251967e+1, + -0.67695478489956908419e+1, + 0.13607165094865209198e+2, + -0.4353792571624371277e+1, + -0.67268591367059435981e+1, + 0.47639702943903232679e+1, + 0.50628437465585154342e+1, + -0.66442065439515278769e+1, + -0.38719134015344138788e+1, + 0.12697146317425044515e+2, + -0.76255807547328178231e+1, + -0.59504029419222934649e+1, + 0.12202239246192460698e+2, + -0.52075252722721785403e+1, + -0.48841690387802669804e+1, + 0.56401120743956383308e+1, + 0.19702699317026755033e+1, + -0.61923959977170843771e+1, + 0.28390949595478737894e-2, + 0.97294362635180196008e+1, + -0.10947804788000178533e+2, 0.86901941943501870291, - 0.10497313422236937086e+02, - -0.12007068932285305252e+02, - 0.33627727779821081633e+01, - 0.53111118040433638043e+01, - -0.55296901651752046192e+01, + 0.10497313422236937086e+2, + -0.12007068932285305252e+2, + 0.33627727779821081633e+1, + 0.53111118040433638043e+1, + -0.55296901651752046192e+1, -0.77346336389010350576, - 0.44174931452661185816e+01, + 0.44174931452661185816e+1, -0.24961539756960904324, - -0.71772115775319500486e+01, - 0.87836579716405829288e+01, - -0.14386720867287154935e+01, - -0.84941780613150168477e+01, - 0.11444911134513558792e+02, - -0.45161421124938039284e+01, - -0.59251649181920909015e+01, - 0.10544815136410466749e+02, - -0.61274606070656982837e+01, - -0.21775170218226689300e+01, - 0.64342027110466091244e+01, - -0.38581541067898483810e+01, - -0.13213317761011209583e+01, - 0.27389870095402391037e+01, - 0.12351540325767396133e+01, - -0.60847095222401668124e+01, - 0.57337581780780224605e+01, - 0.10169301611817425091e+01, - -0.90615574678121806329e+01, - 0.11316684662744338041e+02, - -0.52776416312436396083e+01, - -0.47485588251557047101e+01, - 0.11090711396152343582e+02, - -0.92189340660875274125e+01, - 0.11187653313731582561e+01, - 0.65907643768085950597e+01, - -0.83807271555030968813e+01, - 0.38854564928571755367e+01, - 0.23507575574390613404e+01, - -0.52758281110749676301e+01, - 0.33697627721324394656e+01, + -0.71772115775319500486e+1, + 0.87836579716405829288e+1, + -0.14386720867287154935e+1, + -0.84941780613150168477e+1, + 0.11444911134513558792e+2, + -0.45161421124938039284e+1, + -0.59251649181920909015e+1, + 0.10544815136410466749e+2, + -0.61274606070656982837e+1, + -0.217751702182266893e+1, + 0.64342027110466091244e+1, + -0.3858154106789848381e+1, + -0.13213317761011209583e+1, + 0.27389870095402391037e+1, + 0.12351540325767396133e+1, + -0.60847095222401668124e+1, + 0.57337581780780224605e+1, + 0.10169301611817425091e+1, + -0.90615574678121806329e+1, + 0.11316684662744338041e+2, + -0.52776416312436396083e+1, + -0.47485588251557047101e+1, + 0.11090711396152343582e+2, + -0.92189340660875274125e+1, + 0.11187653313731582561e+1, + 0.65907643768085950597e+1, + -0.83807271555030968813e+1, + 0.38854564928571755367e+1, + 0.23507575574390613404e+1, + -0.52758281110749676301e+1, + 0.33697627721324394656e+1, 0.51842980219178580459, - -0.23383611149336527291e+01, - 0.49959772529621654380, - 0.27299170046510052856e+01, - -0.35869658246469873220e+01, - 0.29013416039864153850, - 0.50101463561306296413e+01, - -0.79214459705074213858e+01, - 0.53360718724541600366e+01, - 0.16989329679283935448e+01, - -0.85390200821458890346e+01, - 0.10175379843133347535e+02, - -0.50854048134616665067e+01, - -0.35929623328627999790e+01, - 0.10076540620651806890e+02, - -0.10036407902383110979e+02, - 0.34807667177351375720e+01, - 0.52243046059795261726e+01, - -0.10456316353681536668e+02, - 0.89982911941065051309e+01, - -0.20919276753915228007e+01, - -0.56919628196983644841e+01, - 0.95133680342244293371e+01, - -0.74037665806712018579e+01, - 0.11782322796751580896e+01, - 0.49933299757859614942e+01, - -0.74713634691303454360e+01, - 0.52592261643808431160e+01, + -0.23383611149336527291e+1, + 0.4995977252962165438, + 0.27299170046510052856e+1, + -0.3586965824646987322e+1, + 0.2901341603986415385, + 0.50101463561306296413e+1, + -0.79214459705074213858e+1, + 0.53360718724541600366e+1, + 0.16989329679283935448e+1, + -0.85390200821458890346e+1, + 0.10175379843133347535e+2, + -0.50854048134616665067e+1, + -0.3592962332862799979e+1, + 0.1007654062065180689e+2, + -0.10036407902383110979e+2, + 0.3480766717735137572e+1, + 0.52243046059795261726e+1, + -0.10456316353681536668e+2, + 0.89982911941065051309e+1, + -0.20919276753915228007e+1, + -0.56919628196983644841e+1, + 0.95133680342244293371e+1, + -0.74037665806712018579e+1, + 0.11782322796751580896e+1, + 0.49933299757859614942e+1, + -0.7471363469130345436e+1, + 0.5259226164380843116e+1, -0.33944734832524675605, - -0.39891579495611861894e+01, - 0.52553832942691514063e+01, - -0.32441705850200261985e+01, + -0.39891579495611861894e+1, + 0.52553832942691514063e+1, + -0.32441705850200261985e+1, -0.28085627797716522513, - 0.29414932599000578328e+01, - -0.33518105753107092504e+01, - 0.17447284967996778970e+01, + 0.29414932599000578328e+1, + -0.33518105753107092504e+1, + 0.1744728496799677897e+1, 0.45094996644115153961, - -0.17845074619822094419e+01, - 0.16735662935555819519e+01, + -0.17845074619822094419e+1, + 0.16735662935555819519e+1, -0.61693846347201797276, -0.41233975234174219393, 0.71476765703578315492, -0.32094263136511996803, -0.21505825469267075833, 0.33238348749300888896, - 0.56201105788235811156e-01, + 0.56201105788235811156e-1, -0.55981542659493144232, 0.66306924563987434951, -0.19147727554342858225, - -0.54410575333999045000, + -0.54410575333999045, 0.98006841119547682961, -0.75589590251645244479, - -0.75274176639471779282e+01, - 0.11027273489805445195e+02, - -0.16642718618049465729e+01, - -0.95064885524624127555e+01, - 0.13900759874396440452e+02, - -0.10841954143140997147e+02, + -0.75274176639471779282e+1, + 0.11027273489805445195e+2, + -0.16642718618049465729e+1, + -0.95064885524624127555e+1, + 0.13900759874396440452e+2, + -0.10841954143140997147e+2, 0.26158344132525612746, - 0.93885839900534122648e+01, - -0.14017524787335730707e+02, - 0.86911705453389611620e+01, - 0.14631993935603602175e+01, - -0.12056177811446085357e+02, - 0.14398256658727616397e+02, - -0.87229852104361231824e+01, - -0.35328384871941445056e+01, - 0.12810711899938288738e+02, - -0.15155859196934377664e+02, - 0.71273474874201587781e+01, - 0.42069249653789562160e+01, - -0.13416433529137021807e+02, - 0.12599758783903897807e+02, - -0.42766464848915672903e+01, - -0.78007560167487346448e+01, - 0.13497179714572913767e+02, - -0.10728425712557767113e+02, + 0.93885839900534122648e+1, + -0.14017524787335730707e+2, + 0.8691170545338961162e+1, + 0.14631993935603602175e+1, + -0.12056177811446085357e+2, + 0.14398256658727616397e+2, + -0.87229852104361231824e+1, + -0.35328384871941445056e+1, + 0.12810711899938288738e+2, + -0.15155859196934377664e+2, + 0.71273474874201587781e+1, + 0.4206924965378956216e+1, + -0.13416433529137021807e+2, + 0.12599758783903897807e+2, + -0.42766464848915672903e+1, + -0.78007560167487346448e+1, + 0.13497179714572913767e+2, + -0.10728425712557767113e+2, -0.59855647020022539895, - 0.10852902371592266562e+02, - -0.14803829330397512365e+02, - 0.77617239810918743359e+01, - 0.35229776863628643468e+01, - -0.13022996298345917765e+02, - 0.12212297037447957138e+02, - -0.37087826476388605634e+01, - -0.79752849475901772536e+01, - 0.12245932071856792334e+02, - -0.77068336697020622950e+01, - -0.40479837986649318538e+01, - 0.12094476144601424394e+02, - -0.11781356801554830227e+02, - 0.11011926941427105930e+01, - 0.10136813238123679071e+02, - -0.14990298631958486553e+02, - 0.75198653883002002374e+01, - 0.49609954148694317411e+01, - -0.14562048881243196519e+02, - 0.11658791906118343817e+02, - -0.28838906759853837058e-01, - -0.12995420772542818355e+02, - 0.14898747711876941580e+02, - -0.54038834145803109621e+01, - -0.10107511436846738917e+02, - 0.17372822355962227903e+02, - -0.12030969468905324149e+02, - -0.37038329982998874357e+01, - 0.15347998666026530401e+02, - -0.15211617695388136795e+02, - 0.18405495108332687870e+01, - 0.11410010679196300742e+02, - -0.14801674014657299594e+02, - 0.36919675999946623968e+01, - 0.10103816031561169808e+02, - -0.15630274326020385800e+02, - 0.57195808444877780374e+01, - 0.91550612440934902025e+01, - -0.17001887111711575074e+02, - 0.84079542226878363209e+01, - 0.73438782844003362982e+01, - -0.17264155599522187146e+02, - 0.98417647622953374764e+01, - 0.67213145309596038501e+01, - -0.18481050206266026237e+02, - 0.12011112574652775820e+02, - 0.54244219440109135988e+01, - -0.19052342170893339812e+02, - 0.13944812395673565675e+02, - 0.32170155983910331265e+01, - -0.17038172708683454459e+02, - 0.11999792125933783637e+02, - 0.47454079887513938019e+01, - -0.16904785102132176888e+02, - 0.92896054923233197798e+01, - 0.90042626102921978770e+01, - -0.19994182767962559666e+02, - 0.93012259130554575393e+01, - 0.11016727735867535287e+02, - -0.21025645007581385215e+02, - 0.79679137204331755839e+01, - 0.12452705418731913056e+02, - -0.19145305020766553383e+02, - 0.28725676785694682636e+01, - 0.16094862086733527917e+02, - -0.16994522556569680916e+02, - -0.33233815940404336509e+01, - 0.19355522919801831705e+02, - -0.12945192731672591435e+02, - -0.10438924889003741825e+02, - 0.20763694081257504820e+02, - -0.59985549184151283342e+01, - -0.18008661642664883118e+02, - 0.19768041949363784227e+02, - 0.20462224285578711758e+01, - -0.21612688709845130575e+02, - 0.12233227360160091379e+02, - 0.12191291677582313469e+02, - -0.20049466979190672333e+02, - -0.18049976906890954353e+01, - 0.22686403181295300868e+02, - -0.14353859299983682263e+02, - -0.14931314197326138071e+02, - 0.23815414292204462043e+02, - -0.11552735530600675151e+01, - -0.22118148346265371629e+02, - 0.10443999688255063418e+02, - 0.17731256190748940327e+02, - -0.20618409796337843432e+02, - -0.97025283276222200612e+01, - 0.26858300209492263377e+02, - -0.51022558143133966979e+01, - -0.24041293774219141710e+02, - 0.13261320039157709516e+02, - 0.18967494157967369262e+02, - -0.20452697099328950969e+02, - -0.14472188956254127490e+02, - 0.26647284027352004188e+02, - 0.48675259610206351724e+01, - -0.28597949904365133733e+02, - 0.15183606572608405738e+01, - 0.27908443908916595433e+02, - -0.69911344607942611518e+01, - -0.28785685633837225339e+02, - 0.11171686368161234171e+02, - 0.27703914921040798447e+02, - -0.14759042355400282531e+02, - -0.28010135965140026570e+02, - 0.15412761226667168302e+02, - 0.27967102051799503926e+02, - -0.14586919777926217634e+02, - -0.31377532578524917284e+02, - 0.11879354135459143649e+02, - 0.33487580229841952928e+02, - -0.74777160384347025612e+01, - -0.35195966927637442723e+02, - -0.39578470691153353478e+01, - 0.36809833124164597962e+02, - 0.14914397337205420158e+02, - -0.32645670890599596703e+02, - -0.28791445455855683377e+02, - 0.16964996985059915602e+02, - 0.41861555928805167071e+02, - 0.31530230322539098964e+01, - -0.39682850697163480902e+02, - -0.31632816676351687590e+02, - 0.15602275610139825446e+02, - 0.48772697906118573030e+02, - 0.21564534670555680407e+02, - -0.26421217189327499852e+02, - -0.52799287555723189769e+02, - -0.28792157620746753111e+02, - 0.23335947907180127459e+02, - 0.54791948235829195823e+02, - 0.53408451748442210771e+02, - 0.11734964652000057228e+02, - -0.34256699396222352050e+02, - -0.69175998138729099196e+02, - -0.83161870767310887231e+02, - -0.73096219252186926951e+02, - -0.59538216379706391024e+02, - -0.37283320375777634581e+02, - -0.23942319183391091997e+02, - -0.12775055357897013408e+02, - -0.50855314161745255319e+01, - -0.44760847434937209854e+01, + 0.10852902371592266562e+2, + -0.14803829330397512365e+2, + 0.77617239810918743359e+1, + 0.35229776863628643468e+1, + -0.13022996298345917765e+2, + 0.12212297037447957138e+2, + -0.37087826476388605634e+1, + -0.79752849475901772536e+1, + 0.12245932071856792334e+2, + -0.7706833669702062295e+1, + -0.40479837986649318538e+1, + 0.12094476144601424394e+2, + -0.11781356801554830227e+2, + 0.1101192694142710593e+1, + 0.10136813238123679071e+2, + -0.14990298631958486553e+2, + 0.75198653883002002374e+1, + 0.49609954148694317411e+1, + -0.14562048881243196519e+2, + 0.11658791906118343817e+2, + -0.28838906759853837058e-1, + -0.12995420772542818355e+2, + 0.1489874771187694158e+2, + -0.54038834145803109621e+1, + -0.10107511436846738917e+2, + 0.17372822355962227903e+2, + -0.12030969468905324149e+2, + -0.37038329982998874357e+1, + 0.15347998666026530401e+2, + -0.15211617695388136795e+2, + 0.1840549510833268787e+1, + 0.11410010679196300742e+2, + -0.14801674014657299594e+2, + 0.36919675999946623968e+1, + 0.10103816031561169808e+2, + -0.156302743260203858e+2, + 0.57195808444877780374e+1, + 0.91550612440934902025e+1, + -0.17001887111711575074e+2, + 0.84079542226878363209e+1, + 0.73438782844003362982e+1, + -0.17264155599522187146e+2, + 0.98417647622953374764e+1, + 0.67213145309596038501e+1, + -0.18481050206266026237e+2, + 0.1201111257465277582e+2, + 0.54244219440109135988e+1, + -0.19052342170893339812e+2, + 0.13944812395673565675e+2, + 0.32170155983910331265e+1, + -0.17038172708683454459e+2, + 0.11999792125933783637e+2, + 0.47454079887513938019e+1, + -0.16904785102132176888e+2, + 0.92896054923233197798e+1, + 0.9004262610292197877e+1, + -0.19994182767962559666e+2, + 0.93012259130554575393e+1, + 0.11016727735867535287e+2, + -0.21025645007581385215e+2, + 0.79679137204331755839e+1, + 0.12452705418731913056e+2, + -0.19145305020766553383e+2, + 0.28725676785694682636e+1, + 0.16094862086733527917e+2, + -0.16994522556569680916e+2, + -0.33233815940404336509e+1, + 0.19355522919801831705e+2, + -0.12945192731672591435e+2, + -0.10438924889003741825e+2, + 0.2076369408125750482e+2, + -0.59985549184151283342e+1, + -0.18008661642664883118e+2, + 0.19768041949363784227e+2, + 0.20462224285578711758e+1, + -0.21612688709845130575e+2, + 0.12233227360160091379e+2, + 0.12191291677582313469e+2, + -0.20049466979190672333e+2, + -0.18049976906890954353e+1, + 0.22686403181295300868e+2, + -0.14353859299983682263e+2, + -0.14931314197326138071e+2, + 0.23815414292204462043e+2, + -0.11552735530600675151e+1, + -0.22118148346265371629e+2, + 0.10443999688255063418e+2, + 0.17731256190748940327e+2, + -0.20618409796337843432e+2, + -0.97025283276222200612e+1, + 0.26858300209492263377e+2, + -0.51022558143133966979e+1, + -0.2404129377421914171e+2, + 0.13261320039157709516e+2, + 0.18967494157967369262e+2, + -0.20452697099328950969e+2, + -0.1447218895625412749e+2, + 0.26647284027352004188e+2, + 0.48675259610206351724e+1, + -0.28597949904365133733e+2, + 0.15183606572608405738e+1, + 0.27908443908916595433e+2, + -0.69911344607942611518e+1, + -0.28785685633837225339e+2, + 0.11171686368161234171e+2, + 0.27703914921040798447e+2, + -0.14759042355400282531e+2, + -0.2801013596514002657e+2, + 0.15412761226667168302e+2, + 0.27967102051799503926e+2, + -0.14586919777926217634e+2, + -0.31377532578524917284e+2, + 0.11879354135459143649e+2, + 0.33487580229841952928e+2, + -0.74777160384347025612e+1, + -0.35195966927637442723e+2, + -0.39578470691153353478e+1, + 0.36809833124164597962e+2, + 0.14914397337205420158e+2, + -0.32645670890599596703e+2, + -0.28791445455855683377e+2, + 0.16964996985059915602e+2, + 0.41861555928805167071e+2, + 0.31530230322539098964e+1, + -0.39682850697163480902e+2, + -0.3163281667635168759e+2, + 0.15602275610139825446e+2, + 0.4877269790611857303e+2, + 0.21564534670555680407e+2, + -0.26421217189327499852e+2, + -0.52799287555723189769e+2, + -0.28792157620746753111e+2, + 0.23335947907180127459e+2, + 0.54791948235829195823e+2, + 0.53408451748442210771e+2, + 0.11734964652000057228e+2, + -0.3425669939622235205e+2, + -0.69175998138729099196e+2, + -0.83161870767310887231e+2, + -0.73096219252186926951e+2, + -0.59538216379706391024e+2, + -0.37283320375777634581e+2, + -0.23942319183391091997e+2, + -0.12775055357897013408e+2, + -0.50855314161745255319e+1, + -0.44760847434937209854e+1, 0.70396913818302253585, - -0.20055081023805563234e+01, + -0.20055081023805563234e+1, 0.72828123994096305438, - -0.44591303691515010721e-01, + -0.44591303691515010721e-1, -0.89823527978309469777, - 0.15262434397395063801e+01, - -0.17905146991640545906e+01, - 0.16047468610918349530e+01, - -0.10257148634157489120e+01, + 0.15262434397395063801e+1, + -0.17905146991640545906e+1, + 0.1604746861091834953e+1, + -0.1025714863415748912e+1, 0.20397284699406431629, 0.65787920523712883902, - -0.13438713008938349969e+01, - 0.16915488335415584942e+01, - -0.16173294728525631214e+01, - 0.11484254913231990436e+01, + -0.13438713008938349969e+1, + 0.16915488335415584942e+1, + -0.16173294728525631214e+1, + 0.11484254913231990436e+1, -0.40229757906752777741, -0.43209874942613191173, - 0.11519338005205170816e+01, - -0.15802652752891181986e+01, - 0.16176499072280488001e+01, - -0.12570849490375219926e+01, + 0.11519338005205170816e+1, + -0.15802652752891181986e+1, + 0.16176499072280488001e+1, + -0.12570849490375219926e+1, 0.59204673518032413515, 0.21389606651420475791, -0.96151484817724930387, - 0.14695693875157411767e+01, - -0.16142558903106289936e+01, - 0.13623729920437002150e+01, + 0.14695693875157411767e+1, + -0.16142558903106289936e+1, + 0.1362372992043700215e+1, -0.77618932114126404365, 0.53566739143327368744, - -0.13429688683380064732e-01, + -0.13429688683380064732e-1, -0.75819108659976752751, - 0.16392254943621811236e+01, - -0.18192093992228837163e+01, - 0.18370531964491290111e+01, - -0.10969377926394383582e+01, + 0.16392254943621811236e+1, + -0.18192093992228837163e+1, + 0.18370531964491290111e+1, + -0.10969377926394383582e+1, 0.36934048685965359393, 0.74992509479147440032, - -0.13898382198539140919e+01, - 0.19709808265102390923e+01, - -0.17552920857770750729e+01, - 0.13793049575966747078e+01, + -0.13898382198539140919e+1, + 0.19709808265102390923e+1, + -0.17552920857770750729e+1, + 0.13793049575966747078e+1, -0.35130743448846424304, - -0.48028243483381527490, - 0.14839496342936031592e+01, - -0.18121830455169831708e+01, - 0.19590856342296802950e+01, - -0.12984600461904627355e+01, + -0.4802824348338152749, + 0.14839496342936031592e+1, + -0.18121830455169831708e+1, + 0.1959085634229680295e+1, + -0.12984600461904627355e+1, 0.58328223678561597065, 0.58240763062677503026, - -0.13075494626139299026e+01, - 0.19784495773399703999e+01, - -0.18326283291530109931e+01, - 0.14780287344814129202e+01, + -0.13075494626139299026e+1, + 0.19784495773399703999e+1, + -0.18326283291530109931e+1, + 0.14780287344814129202e+1, -0.45189907484018881911, -0.47666334584131181407, - 0.13800213717872624741e+01, - -0.21407201613914534910e+01, - 0.13012452442166939637e+01, - -0.28503052849048016171e+01, - -0.26011240931257355591e+01, - -0.51340482942528753441e+01, - -0.11103655353238227832e+02, - -0.12364189695028402483e+02, - -0.20554377479486202418e+02, - -0.19091193494003569242e+02, - -0.17651596078393307465e+02, - -0.93640719111082404424e+01, - 0.49596482819746103843e+01, - 0.10950631331153742209e+02, - 0.16090106586434771430e+02, - 0.44103731063772491083e+01, - -0.68575852351688588726e+01, - -0.12075938450597012874e+02, - -0.85851005480443856044e+01, - 0.79447161246163746640e+01, - 0.10084975028197144198e+02, - 0.52435588547461584596e+01, - -0.78177838680977504993e+01, - -0.11124533729190565268e+02, - 0.30290483668650072246e+01, - 0.81375468368055727808e+01, - 0.62509911065401988495e+01, - -0.80132562510965517077e+01, - -0.84893638575759009512e+01, - 0.53707600276994664767e+01, - 0.70393496285427978876e+01, - 0.13106348764780799687e+01, - -0.10247368216342950475e+02, - -0.14309066201106233063e+01, - 0.93502321343486034522e+01, - 0.11753208951658733472e+01, - -0.55279682625862447409e+01, - -0.54626632319185421949e+01, - 0.80061622222843720209e+01, - 0.42466716373835078358e+01, - -0.83947884368637719632e+01, - -0.14733585190861722136e+01, - 0.48939247919984021351e+01, - 0.42447880976612930581e+01, - -0.72963909786182465922e+01, - -0.27707353535555063750e+01, - 0.90787030405497031182e+01, - -0.18310585513176671490e+01, - -0.52929048402093803460e+01, + 0.13800213717872624741e+1, + -0.2140720161391453491e+1, + 0.13012452442166939637e+1, + -0.28503052849048016171e+1, + -0.26011240931257355591e+1, + -0.51340482942528753441e+1, + -0.11103655353238227832e+2, + -0.12364189695028402483e+2, + -0.20554377479486202418e+2, + -0.19091193494003569242e+2, + -0.17651596078393307465e+2, + -0.93640719111082404424e+1, + 0.49596482819746103843e+1, + 0.10950631331153742209e+2, + 0.1609010658643477143e+2, + 0.44103731063772491083e+1, + -0.68575852351688588726e+1, + -0.12075938450597012874e+2, + -0.85851005480443856044e+1, + 0.7944716124616374664e+1, + 0.10084975028197144198e+2, + 0.52435588547461584596e+1, + -0.78177838680977504993e+1, + -0.11124533729190565268e+2, + 0.30290483668650072246e+1, + 0.81375468368055727808e+1, + 0.62509911065401988495e+1, + -0.80132562510965517077e+1, + -0.84893638575759009512e+1, + 0.53707600276994664767e+1, + 0.70393496285427978876e+1, + 0.13106348764780799687e+1, + -0.10247368216342950475e+2, + -0.14309066201106233063e+1, + 0.93502321343486034522e+1, + 0.11753208951658733472e+1, + -0.55279682625862447409e+1, + -0.54626632319185421949e+1, + 0.80061622222843720209e+1, + 0.42466716373835078358e+1, + -0.83947884368637719632e+1, + -0.14733585190861722136e+1, + 0.48939247919984021351e+1, + 0.42447880976612930581e+1, + -0.72963909786182465922e+1, + -0.2770735353555506375e+1, + 0.90787030405497031182e+1, + -0.1831058551317667149e+1, + -0.5292904840209380346e+1, 0.63291249193430032527, - 0.60247351999119098664e+01, - -0.16605046771064055910e+01, - -0.74836518172460992915e+01, - 0.70177038939774760706e+01, - 0.21872468068206236680e+01, - -0.61606534047136394250e+01, + 0.60247351999119098664e+1, + -0.1660504677106405591e+1, + -0.74836518172460992915e+1, + 0.70177038939774760706e+1, + 0.2187246806820623668e+1, + -0.6160653404713639425e+1, 0.41864358016883673752, - 0.42878759468987892589e+01, + 0.42878759468987892589e+1, 0.21689700162236336123, - -0.68504524736690655118e+01, - 0.48749923199945657259e+01, - 0.38709441268089799237e+01, - -0.78130662427561148320e+01, - 0.25401934106871331132e+01, - 0.38049229488867721827e+01, - -0.27144483576452209661e+01, - -0.28552506183026435949e+01, - 0.37170167061374490558e+01, - 0.23235102117379811126e+01, - -0.73713692466595981401e+01, - 0.44520935284175946478e+01, - 0.33578678374767010339e+01, - -0.70010394058576306264e+01, - 0.30866131383590591497e+01, - 0.26062522177235138976e+01, - -0.29830012192325026099e+01, - -0.13844740685504286493e+01, - 0.37772983764535807971e+01, + -0.68504524736690655118e+1, + 0.48749923199945657259e+1, + 0.38709441268089799237e+1, + -0.7813066242756114832e+1, + 0.25401934106871331132e+1, + 0.38049229488867721827e+1, + -0.27144483576452209661e+1, + -0.28552506183026435949e+1, + 0.37170167061374490558e+1, + 0.23235102117379811126e+1, + -0.73713692466595981401e+1, + 0.44520935284175946478e+1, + 0.33578678374767010339e+1, + -0.70010394058576306264e+1, + 0.30866131383590591497e+1, + 0.26062522177235138976e+1, + -0.29830012192325026099e+1, + -0.13844740685504286493e+1, + 0.37772983764535807971e+1, -0.17641245353691989428, - -0.54809161998422704087e+01, - 0.62969469626198897316e+01, + -0.54809161998422704087e+1, + 0.62969469626198897316e+1, -0.65830353146322828639, - -0.57296077663974953609e+01, - 0.65214944697080463598e+01, - -0.15555494663967781577e+01, - -0.33717839448099233834e+01, - 0.34188594678810630967e+01, + -0.57296077663974953609e+1, + 0.65214944697080463598e+1, + -0.15555494663967781577e+1, + -0.33717839448099233834e+1, + 0.34188594678810630967e+1, 0.30410429529110949431, - -0.25294387880019550963e+01, + -0.25294387880019550963e+1, 0.29649244450225104019, - 0.38194700851443839085e+01, - -0.46450783753265136866e+01, + 0.38194700851443839085e+1, + -0.46450783753265136866e+1, 0.40960804258342120576, - 0.52487289847669353904e+01, - -0.68592291465537886808e+01, - 0.27811001185551922354e+01, - 0.33345013251646369312e+01, - -0.61282669395614961516e+01, - 0.37449002007176024343e+01, + 0.52487289847669353904e+1, + -0.68592291465537886808e+1, + 0.27811001185551922354e+1, + 0.33345013251646369312e+1, + -0.61282669395614961516e+1, + 0.37449002007176024343e+1, 0.89695609091891548292, - -0.32728890793936393777e+01, - 0.18029556282018845970e+01, - 0.11011425843516104983e+01, - -0.18071950849558275909e+01, + -0.32728890793936393777e+1, + 0.1802955628201884597e+1, + 0.11011425843516104983e+1, + -0.18071950849558275909e+1, -0.59693024408861261598, - 0.35147659421807180280e+01, - -0.34500057558462460250e+01, + 0.3514765942180718028e+1, + -0.3450005755846246025e+1, -0.29768663112174248431, - 0.48286032861191889864e+01, - -0.60993610874490373774e+01, - 0.26828323115059165005e+01, - 0.29698152829903641248e+01, - -0.64840367843385742219e+01, - 0.52910044533458613358e+01, + 0.48286032861191889864e+1, + -0.60993610874490373774e+1, + 0.26828323115059165005e+1, + 0.29698152829903641248e+1, + -0.64840367843385742219e+1, + 0.52910044533458613358e+1, -0.53974777927064632177, - -0.39675851223090652375e+01, - 0.50616447061482396919e+01, - -0.25223049783129667389e+01, - -0.10526421994337800125e+01, - 0.27753794615725744244e+01, - -0.17653197845052337467e+01, + -0.39675851223090652375e+1, + 0.50616447061482396919e+1, + -0.25223049783129667389e+1, + -0.10526421994337800125e+1, + 0.27753794615725744244e+1, + -0.17653197845052337467e+1, -0.35919821488409742205, - 0.13007013857421856340e+01, + 0.1300701385742185634e+1, -0.16122058619333348717, - -0.17492406275662759629e+01, - 0.22755164427993221921e+01, + -0.17492406275662759629e+1, + 0.22755164427993221921e+1, -0.39415972167750895627, - -0.26615568088205248110e+01, - 0.43782314213916508905e+01, - -0.29685762159385760128e+01, - -0.97716545435993740210, - 0.48177772736547099797e+01, - -0.56976725747175649417e+01, - 0.27553154097279253243e+01, - 0.22154599272699306844e+01, - -0.59083444937210192194e+01, - 0.58553919105224601083e+01, - -0.20651779094057833852e+01, - -0.29581902546056548786e+01, - 0.59964529948794202951e+01, - -0.52030227608584604937e+01, - 0.12845874996563155790e+01, - 0.31511782905034584346e+01, - -0.53369070256681023778e+01, - 0.41473363910830300938e+01, + -0.2661556808820524811e+1, + 0.43782314213916508905e+1, + -0.29685762159385760128e+1, + -0.9771654543599374021, + 0.48177772736547099797e+1, + -0.56976725747175649417e+1, + 0.27553154097279253243e+1, + 0.22154599272699306844e+1, + -0.59083444937210192194e+1, + 0.58553919105224601083e+1, + -0.20651779094057833852e+1, + -0.29581902546056548786e+1, + 0.59964529948794202951e+1, + -0.52030227608584604937e+1, + 0.1284587499656315579e+1, + 0.31511782905034584346e+1, + -0.53369070256681023778e+1, + 0.41473363910830300938e+1, -0.61436746084122673128, - -0.28822186888183849440e+01, - 0.42688978897376204102e+01, - -0.29788679036941285716e+01, + -0.2882218688818384944e+1, + 0.42688978897376204102e+1, + -0.29788679036941285716e+1, 0.14944292504439679603, - 0.23340571722717369241e+01, - -0.30580997079333154254e+01, - 0.19022146568242419562e+01, - 0.12482716578434290000, - -0.16602604100275810683e+01, - 0.19104893341402096052e+01, - -0.10052927487535745499e+01, + 0.23340571722717369241e+1, + -0.30580997079333154254e+1, + 0.19022146568242419562e+1, + 0.1248271657843429, + -0.16602604100275810683e+1, + 0.19104893341402096052e+1, + -0.10052927487535745499e+1, -0.23952309723464715319, - 0.99663792915641868930, + 0.9966379291564186893, -0.93233709532225772509, 0.33167605735161936886, 0.25128269053119633991, - -0.41752567325317574420, + -0.4175256732531757442, 0.18644367545285150944, 0.12495777073679008307, -0.19513997599298024688, - -0.25367887505046485958e-01, + -0.25367887505046485958e-1, 0.31333282129591411014, -0.37337746567717455815, 0.10551775955785637484, 0.31335230977495370785, -0.56127495884172984297, 0.43244023987209012638, - 0.31938718952066027512e+01, - -0.46786198923469868305e+01, + 0.31938718952066027512e+1, + -0.46786198923469868305e+1, 0.64526687697838025493, - 0.43171866425557965385e+01, - -0.62120480801811348570e+01, - 0.48306617295081695218e+01, - 0.28864336914298051318e-01, - -0.44251833584980824199e+01, - 0.66114009398302497900e+01, - -0.41907928859276504241e+01, + 0.43171866425557965385e+1, + -0.6212048080181134857e+1, + 0.48306617295081695218e+1, + 0.28864336914298051318e-1, + -0.44251833584980824199e+1, + 0.661140093983024979e+1, + -0.41907928859276504241e+1, -0.39899051262805146356, - 0.52777909390901616149e+01, - -0.63540498468291923828e+01, - 0.38602044417757603867e+01, - 0.16411171099136665497e+01, - -0.56469535408620066264e+01, - 0.64974768064976489157e+01, - -0.25984917288812563463e+01, - -0.25744700532685458327e+01, - 0.65779634000147026995e+01, - -0.57335447093744145164e+01, - 0.14994662284571800281e+01, - 0.42842108422212845653e+01, - -0.67238523667804876993e+01, - 0.50521512229833840379e+01, + 0.52777909390901616149e+1, + -0.63540498468291923828e+1, + 0.38602044417757603867e+1, + 0.16411171099136665497e+1, + -0.56469535408620066264e+1, + 0.64974768064976489157e+1, + -0.25984917288812563463e+1, + -0.25744700532685458327e+1, + 0.65779634000147026995e+1, + -0.57335447093744145164e+1, + 0.14994662284571800281e+1, + 0.42842108422212845653e+1, + -0.67238523667804876993e+1, + 0.50521512229833840379e+1, 0.61632723816706658226, - -0.54396627472575689310e+01, - 0.69856386844654663193e+01, - -0.31400931368375744057e+01, - -0.25027567256585578903e+01, - 0.68998936227997322845e+01, - -0.59038899872266279445e+01, - 0.10920544455104246317e+01, - 0.50498016965885907936e+01, - -0.70803837376397629200e+01, - 0.43697533896394560315e+01, - 0.21024082677617372816e+01, - -0.66051209009026043972e+01, - 0.66436934168429502279e+01, - -0.11579974309677196764e+01, - -0.48149238078244751549e+01, - 0.76151985546210063660e+01, - -0.40652064501232461069e+01, - -0.22465702488247041302e+01, - 0.73329222058124354788e+01, - -0.61968517950210237899e+01, + -0.5439662747257568931e+1, + 0.69856386844654663193e+1, + -0.31400931368375744057e+1, + -0.25027567256585578903e+1, + 0.68998936227997322845e+1, + -0.59038899872266279445e+1, + 0.10920544455104246317e+1, + 0.50498016965885907936e+1, + -0.708038373763976292e+1, + 0.43697533896394560315e+1, + 0.21024082677617372816e+1, + -0.66051209009026043972e+1, + 0.66436934168429502279e+1, + -0.11579974309677196764e+1, + -0.48149238078244751549e+1, + 0.7615198554621006366e+1, + -0.40652064501232461069e+1, + -0.22465702488247041302e+1, + 0.73329222058124354788e+1, + -0.61968517950210237899e+1, 0.55107157873256906733, - 0.60747509000100450294e+01, - -0.73946536902574386829e+01, - 0.31433100964536611066e+01, - 0.42141485230500475012e+01, - -0.77135564969236734001e+01, - 0.52637930609353533740e+01, - 0.21124791890580749687e+01, - -0.73408065418850556583e+01, - 0.68109275391876114014e+01, - 0.54457766650015386467e-01, - -0.65173221198504407425e+01, - 0.78106237712764015058e+01, - -0.17748540116744062622e+01, - -0.54793998383735358360e+01, - 0.83678261986800581695e+01, - -0.32829296058370460720e+01, - -0.44258484881704989178e+01, - 0.86220859223576695740e+01, - -0.44461106782928272452e+01, - -0.35071907994251074747e+01, - 0.87143052004523493537e+01, - -0.52804569040608271280e+01, - -0.28297905446998319334e+01, - 0.87653847101413777665e+01, - -0.58140047479880756498e+01, - -0.24672558034179044029e+01, - 0.88636292831430711914e+01, - -0.60635665785822085994e+01, - -0.24724907057320861803e+01, - 0.90561346022442101855e+01, - -0.60169558877413518161e+01, - -0.28849179077677091776e+01, - 0.93394050472064051860e+01, - -0.56212417330478867683e+01, - -0.37279256989418629864e+01, - 0.96458619609111266868e+01, - -0.47794558908370241568e+01, - -0.49915711345665814136e+01, - 0.98260803032906860466e+01, - -0.33620106371892801711e+01, - -0.65961281227160455387e+01, - 0.96326697052279044442e+01, - -0.12441491034206171307e+01, - -0.83358602822316409942e+01, - 0.87220469213341598191e+01, - 0.16157201873103532730e+01, - -0.98138933781672132994e+01, - 0.67046689744881851070e+01, - 0.50467921902456813754e+01, - -0.10403428306747157350e+02, - 0.32865266104630777022e+01, - 0.85014873638842285430e+01, - -0.93083505754305573276e+01, - -0.14637823857197409527e+01, - 0.10933445286778791683e+02, - -0.58304792192948564633e+01, - -0.67531378498317593539e+01, - 0.10893429455652876570e+02, - 0.73718169615199238831e-01, - -0.10799376714122951526e+02, - 0.70963899303028039611e+01, - 0.70481052065585263477e+01, - -0.11096067433906835475e+02, + 0.60747509000100450294e+1, + -0.73946536902574386829e+1, + 0.31433100964536611066e+1, + 0.42141485230500475012e+1, + -0.77135564969236734001e+1, + 0.5263793060935353374e+1, + 0.21124791890580749687e+1, + -0.73408065418850556583e+1, + 0.68109275391876114014e+1, + 0.54457766650015386467e-1, + -0.65173221198504407425e+1, + 0.78106237712764015058e+1, + -0.17748540116744062622e+1, + -0.5479399838373535836e+1, + 0.83678261986800581695e+1, + -0.3282929605837046072e+1, + -0.44258484881704989178e+1, + 0.8622085922357669574e+1, + -0.44461106782928272452e+1, + -0.35071907994251074747e+1, + 0.87143052004523493537e+1, + -0.5280456904060827128e+1, + -0.28297905446998319334e+1, + 0.87653847101413777665e+1, + -0.58140047479880756498e+1, + -0.24672558034179044029e+1, + 0.88636292831430711914e+1, + -0.60635665785822085994e+1, + -0.24724907057320861803e+1, + 0.90561346022442101855e+1, + -0.60169558877413518161e+1, + -0.28849179077677091776e+1, + 0.9339405047206405186e+1, + -0.56212417330478867683e+1, + -0.37279256989418629864e+1, + 0.96458619609111266868e+1, + -0.47794558908370241568e+1, + -0.49915711345665814136e+1, + 0.98260803032906860466e+1, + -0.33620106371892801711e+1, + -0.65961281227160455387e+1, + 0.96326697052279044442e+1, + -0.12441491034206171307e+1, + -0.83358602822316409942e+1, + 0.87220469213341598191e+1, + 0.1615720187310353273e+1, + -0.98138933781672132994e+1, + 0.6704668974488185107e+1, + 0.50467921902456813754e+1, + -0.1040342830674715735e+2, + 0.32865266104630777022e+1, + 0.8501487363884228543e+1, + -0.93083505754305573276e+1, + -0.14637823857197409527e+1, + 0.10933445286778791683e+2, + -0.58304792192948564633e+1, + -0.67531378498317593539e+1, + 0.1089342945565287657e+2, + 0.73718169615199238831e-1, + -0.10799376714122951526e+2, + 0.70963899303028039611e+1, + 0.70481052065585263477e+1, + -0.11096067433906835475e+2, -0.39833980956615683278, - 0.11931514138156199323e+02, - -0.57484422549861218243e+01, - -0.88137471252851007364e+01, - 0.10729189726279873440e+02, - 0.41033980957429987413e+01, - -0.12572930532501310097e+02, - 0.18288479441353608923e+01, - 0.12431879395109669773e+02, - -0.66499863830963121814e+01, - -0.98107357316730610108e+01, - 0.10768424497711581722e+02, - 0.66621089905302053324e+01, - -0.12877307619778383341e+02, - -0.26483588541052527354e+01, - 0.14272231676060350480e+02, + 0.11931514138156199323e+2, + -0.57484422549861218243e+1, + -0.88137471252851007364e+1, + 0.1072918972627987344e+2, + 0.41033980957429987413e+1, + -0.12572930532501310097e+2, + 0.18288479441353608923e+1, + 0.12431879395109669773e+2, + -0.66499863830963121814e+1, + -0.98107357316730610108e+1, + 0.10768424497711581722e+2, + 0.66621089905302053324e+1, + -0.12877307619778383341e+2, + -0.26483588541052527354e+1, + 0.1427223167606035048e+2, -0.55250041909482483504, - -0.14225536487254304419e+02, - 0.37226797352679117381e+01, - 0.14286943355946720047e+02, - -0.56085882284562602607e+01, - -0.13745796182276700748e+02, - 0.72778814803643916420e+01, - 0.14023218645169924557e+02, - -0.75926343745907924898e+01, - -0.14211748418493469259e+02, - 0.75677751473275369776e+01, - 0.15477699854052353601e+02, - -0.58909534727378458641e+01, - -0.16567492648156967761e+02, - 0.33512853986185011657e+01, - 0.18114659496838548591e+02, - 0.14760464531986816628e+01, - -0.18067166028924024346e+02, - -0.75056425424037067629e+01, - 0.16037569491170330593e+02, - 0.14970490354630737073e+02, - -0.92092885255807459544e+01, - -0.20237968304797359309e+02, - -0.20408490379566814887e+01, - 0.19939651017153167345e+02, - 0.16133719725117440902e+02, - -0.84675501172402256600e+01, - -0.23529606803609386390e+02, - -0.11608879412079362581e+02, - 0.13792149188479978505e+02, - 0.26223766662172319997e+02, - 0.14113036179154331506e+02, - -0.10987505112352909720e+02, - -0.28303649080739642585e+02, - -0.25796636739204213740e+02, - -0.65413946070529389587e+01, - 0.17397227755997903387e+02, - 0.34796359125746548102e+02, - 0.40948491584802411580e+02, - 0.37447105976596112953e+02, - 0.28831946569894938648e+02, - 0.19383121736244369515e+02, - 0.11611942269846375453e+02, - 0.62786054375739102085e+01, - 0.30905497736488105609e+01, - 0.13933313715316792969e+01, + -0.14225536487254304419e+2, + 0.37226797352679117381e+1, + 0.14286943355946720047e+2, + -0.56085882284562602607e+1, + -0.13745796182276700748e+2, + 0.7277881480364391642e+1, + 0.14023218645169924557e+2, + -0.75926343745907924898e+1, + -0.14211748418493469259e+2, + 0.75677751473275369776e+1, + 0.15477699854052353601e+2, + -0.58909534727378458641e+1, + -0.16567492648156967761e+2, + 0.33512853986185011657e+1, + 0.18114659496838548591e+2, + 0.14760464531986816628e+1, + -0.18067166028924024346e+2, + -0.75056425424037067629e+1, + 0.16037569491170330593e+2, + 0.14970490354630737073e+2, + -0.92092885255807459544e+1, + -0.20237968304797359309e+2, + -0.20408490379566814887e+1, + 0.19939651017153167345e+2, + 0.16133719725117440902e+2, + -0.846755011724022566e+1, + -0.2352960680360938639e+2, + -0.11608879412079362581e+2, + 0.13792149188479978505e+2, + 0.26223766662172319997e+2, + 0.14113036179154331506e+2, + -0.1098750511235290972e+2, + -0.28303649080739642585e+2, + -0.2579663673920421374e+2, + -0.65413946070529389587e+1, + 0.17397227755997903387e+2, + 0.34796359125746548102e+2, + 0.4094849158480241158e+2, + 0.37447105976596112953e+2, + 0.28831946569894938648e+2, + 0.19383121736244369515e+2, + 0.11611942269846375453e+2, + 0.62786054375739102085e+1, + 0.30905497736488105609e+1, + 0.13933313715316792969e+1, 0.57785655220269072085, 0.22116593682337390425, - 0.78298176312086104067e-01, - 0.25681742206492406966e-01, - 0.78126456157972846983e-02, - 0.22056066381306656428e-02, - 0.57794718722559861902e-03, - 0.14053542541714119339e-03, - 0.31693494948697352670e-04, - 0.66226876960558952534e-05, - 0.12805974745612762325e-05, - 0.22875625080661877597e-06, - 0.37670644808446691526e-07, - 0.57041546141050521787e-08, - 0.79177131966116917488e-09, - 0.10037553448702342067e-09, + 0.78298176312086104067e-1, + 0.25681742206492406966e-1, + 0.78126456157972846983e-2, + 0.22056066381306656428e-2, + 0.57794718722559861902e-3, + 0.14053542541714119339e-3, + 0.3169349494869735267e-4, + 0.66226876960558952534e-5, + 0.12805974745612762325e-5, + 0.22875625080661877597e-6, + 0.37670644808446691526e-7, + 0.57041546141050521787e-8, + 0.79177131966116917488e-9, + 0.10037553448702342067e-9, 0.11570797608854989622e-10, 0.12064680136214481682e-11, 0.11306457272012915565e-12, @@ -15272,260 +15274,260 @@ function ESERK4ConstantCache(zprev) 0.29820213699270084908e-23, 0.43511801454974211092e-25, 0.31264857370619971834e-27, - 0.50257080989266639942e-02, - -0.32615952248348681168e-02, - -0.14168510593627229449e-01, - 0.29027127465629291858e-01, - -0.33058427190277989149e-01, - 0.22061340866915281345e-01, - -0.49230899648441250188e-02, - -0.89186304919546613434e-02, - 0.95846755590343491599e-02, - 0.26216799084667239631e-03, - -0.13788008321414394267e-01, - 0.18520167229358296818e-01, - -0.11332714097583943338e-01, - -0.58010448528415118133e-02, - 0.20944664937811229705e-01, - -0.26774913266204212331e-01, - 0.19068330537218160237e-01, - -0.54761668036467196774e-02, - -0.66099526443846139123e-02, - 0.90538570964740164998e-02, - -0.45917126135844726909e-02, - -0.22605023903465603675e-02, - 0.29989612760267124122e-02, - 0.20913949483345592104e-02, - -0.10700794596274557091e-01, - 0.14639026735701833951e-01, - -0.12704384289961578175e-01, - 0.53282668985023063160e-02, - 0.21056109407586301777e-03, - -0.24113155140820588529e-02, - 0.96655168085980935119e-03, - -0.27249046526839977751e-02, - 0.88995368089425097580e-02, - -0.18749240783353316592e-01, - 0.23112972455954016587e-01, - -0.18091104670618272932e-01, - 0.33725361215382115496e-02, - 0.97511602795841596791e-02, - -0.12613308232121724778e-01, - 0.28492589081326809460e-03, - 0.17187998341191092211e-01, - -0.27870488958550477393e-01, - 0.21175584829881358845e-01, - -0.31660830478755833638e-02, - -0.13533539300736984606e-01, - 0.13415454584850508568e-01, - 0.29495862933886238602e-02, - -0.24858944554354014955e-01, - 0.33654690181121306447e-01, - -0.23860643080854636311e-01, - 0.12984331533157310833e-02, - 0.16185451431111982923e-01, - -0.19931601719539580875e-01, - 0.10980300905699808683e-01, - -0.33270449421381798928e-02, - 0.37331589503784693741e-02, - -0.10853852599103595497e-01, - 0.11459522137087096647e-01, - -0.62872921962646237913e-03, - -0.17418623208445165040e-01, - 0.26526090607783520126e-01, - -0.20502007000801878572e-01, - 0.48779584236517846071e-02, - 0.14163663366440562303e-02, - 0.94879483332291937592e-02, - -0.30872352520357099898e-01, - 0.40473880931135734762e-01, - -0.27480290446850144659e-01, - -0.20030339228004697023e-02, - 0.24237504981650618424e-01, - -0.26340861485946262532e-01, - 0.12337442523079784895e-01, - -0.30181840892757054624e-02, - 0.71729209264277194250e-02, - -0.17798584060825562575e-01, - 0.15708597725938605594e-01, - 0.11007358135148768118e-02, - -0.18107388726927405725e-01, - 0.14010540780992456616e-01, - 0.83987221552185385015e-02, - -0.28218532133698900205e-01, - 0.22886671270797444289e-01, - 0.54849457435700700678e-03, - -0.17976584902177305397e-01, - 0.10021234936776292346e-01, - 0.10171801221686836703e-01, - -0.18450406113588141421e-01, - 0.41166687069796106813e-02, - 0.11514090197814989477e-01, - -0.79238680654530185832e-02, - -0.11850125556890474254e-01, - 0.17936004658425343944e-01, - 0.24559830372255530596e-02, - -0.30588297826638400495e-01, - 0.31956328528088558116e-01, - -0.54120594006363117665e-02, - -0.19508089261650721213e-01, - 0.15583449528267703105e-01, - 0.12802175219946904713e-02, - -0.46754003122765003600e-03, - -0.23097928659588776168e-01, - 0.34234163895122210475e-01, - -0.12626535543401123940e-01, - -0.19030296374699808004e-01, - 0.18480982884015780682e-01, - 0.10947196543818168632e-01, - -0.28753848099226181345e-01, - 0.11753973835026935643e-01, - 0.63313364681310355803e-02, - 0.73439729515374111909e-02, - -0.34672268143134045426e-01, - 0.27121750406853512710e-01, - 0.11143483266018662861e-01, - -0.29470266356422889636e-01, - 0.52807664148175094410e-02, - 0.13606570458972327281e-01, - 0.75753795606613777078e-02, - -0.34281828414155030016e-01, - 0.16274671963485264764e-01, - 0.17176480687346864368e-01, - -0.79894113357564921357e-02, - -0.30948420722717230602e-01, - 0.29801093202056157250e-01, - 0.78642160854076222087e-02, - -0.12735144567166265667e-01, - -0.24120831932358588467e-01, - 0.26083803828757481935e-01, - 0.16254341637191489084e-01, - -0.22592074500370425832e-01, - -0.25205219705072182124e-01, - 0.37642299236075087154e-01, - -0.13290893216536933587e-02, - 0.64126052574922116217e-02, - -0.57453353540268405075e-01, - 0.48760536061978491940e-01, - 0.54686809979432428677e-02, - 0.24574918670654324893e-02, - -0.37327508574803693053e-01, - -0.61783087837197154038e-02, - 0.47275351687293167002e-01, - 0.51343826367635566482e-03, - -0.19985315104696248223e-01, - -0.34805042372038234866e-01, - 0.14126869662395295096e-01, - 0.43725930407267570021e-01, - 0.46671061144645054411e-02, - -0.32399772315588604155e-01, - -0.33111508152703195140e-01, - -0.11513909000045239976e-02, - 0.54186876852096312052e-01, - 0.20646429056870981011e-01, - -0.63111151147109386186e-02, - -0.48150991298599045420e-01, - -0.46910456195731566054e-01, - 0.19576483742693624041e-01, - 0.24518082001849926532e-01, - 0.77411748567922017417e-01, - 0.12810585721747130145e-01, - -0.65323985379594205238e-03, - -0.55374352533247676866e-01, - -0.78858488982746305362e-01, - -0.65876302786156998303e-01, - -0.78102850681489685569e-01, - -0.34842612917016638208e-01, - -0.40452833547273241155e-01, - -0.13489990097990477158e-01, - -0.96172837856559473257e-02, - -0.88711030019171834005e-02, - 0.43138631307705326695e-02, - -0.83271311673720066482e-02, - 0.69937983236203257048e-02, - -0.71490815490989206848e-02, - 0.70699095657405395740e-02, - -0.80128914726496774934e-02, - 0.96729141595270524967e-02, - -0.11740524806705671459e-01, - 0.13597227090345966743e-01, - -0.14621895791283024552e-01, - 0.14416059370318354271e-01, - -0.12876970651024877840e-01, - 0.10281586748162093586e-01, - -0.71417062935083784614e-02, - 0.41116945032713559521e-02, - -0.17614889854537447208e-02, - 0.49462634936052810031e-03, - -0.42906115628102707744e-03, - 0.14554875881322205423e-02, - -0.32640389269637747581e-02, - 0.54889931315270437673e-02, - -0.77652720163021403399e-02, - 0.98275123719828005181e-02, - -0.11493957674640361763e-01, - 0.12676746012983113737e-01, - -0.13314754316690954536e-01, - 0.13363426265347786576e-01, - -0.12759155029392095851e-01, - 0.11451591515115138592e-01, - -0.94200533746449585659e-02, - 0.67221300518337410643e-02, - -0.35037610385291926250e-02, - -0.24550037400288739903e-01, - 0.41302239771181907535e-01, - 0.49950126899038086239e-02, - -0.55206710833703945274e-01, + 0.50257080989266639942e-2, + -0.32615952248348681168e-2, + -0.14168510593627229449e-1, + 0.29027127465629291858e-1, + -0.33058427190277989149e-1, + 0.22061340866915281345e-1, + -0.49230899648441250188e-2, + -0.89186304919546613434e-2, + 0.95846755590343491599e-2, + 0.26216799084667239631e-3, + -0.13788008321414394267e-1, + 0.18520167229358296818e-1, + -0.11332714097583943338e-1, + -0.58010448528415118133e-2, + 0.20944664937811229705e-1, + -0.26774913266204212331e-1, + 0.19068330537218160237e-1, + -0.54761668036467196774e-2, + -0.66099526443846139123e-2, + 0.90538570964740164998e-2, + -0.45917126135844726909e-2, + -0.22605023903465603675e-2, + 0.29989612760267124122e-2, + 0.20913949483345592104e-2, + -0.10700794596274557091e-1, + 0.14639026735701833951e-1, + -0.12704384289961578175e-1, + 0.5328266898502306316e-2, + 0.21056109407586301777e-3, + -0.24113155140820588529e-2, + 0.96655168085980935119e-3, + -0.27249046526839977751e-2, + 0.8899536808942509758e-2, + -0.18749240783353316592e-1, + 0.23112972455954016587e-1, + -0.18091104670618272932e-1, + 0.33725361215382115496e-2, + 0.97511602795841596791e-2, + -0.12613308232121724778e-1, + 0.2849258908132680946e-3, + 0.17187998341191092211e-1, + -0.27870488958550477393e-1, + 0.21175584829881358845e-1, + -0.31660830478755833638e-2, + -0.13533539300736984606e-1, + 0.13415454584850508568e-1, + 0.29495862933886238602e-2, + -0.24858944554354014955e-1, + 0.33654690181121306447e-1, + -0.23860643080854636311e-1, + 0.12984331533157310833e-2, + 0.16185451431111982923e-1, + -0.19931601719539580875e-1, + 0.10980300905699808683e-1, + -0.33270449421381798928e-2, + 0.37331589503784693741e-2, + -0.10853852599103595497e-1, + 0.11459522137087096647e-1, + -0.62872921962646237913e-3, + -0.1741862320844516504e-1, + 0.26526090607783520126e-1, + -0.20502007000801878572e-1, + 0.48779584236517846071e-2, + 0.14163663366440562303e-2, + 0.94879483332291937592e-2, + -0.30872352520357099898e-1, + 0.40473880931135734762e-1, + -0.27480290446850144659e-1, + -0.20030339228004697023e-2, + 0.24237504981650618424e-1, + -0.26340861485946262532e-1, + 0.12337442523079784895e-1, + -0.30181840892757054624e-2, + 0.7172920926427719425e-2, + -0.17798584060825562575e-1, + 0.15708597725938605594e-1, + 0.11007358135148768118e-2, + -0.18107388726927405725e-1, + 0.14010540780992456616e-1, + 0.83987221552185385015e-2, + -0.28218532133698900205e-1, + 0.22886671270797444289e-1, + 0.54849457435700700678e-3, + -0.17976584902177305397e-1, + 0.10021234936776292346e-1, + 0.10171801221686836703e-1, + -0.18450406113588141421e-1, + 0.41166687069796106813e-2, + 0.11514090197814989477e-1, + -0.79238680654530185832e-2, + -0.11850125556890474254e-1, + 0.17936004658425343944e-1, + 0.24559830372255530596e-2, + -0.30588297826638400495e-1, + 0.31956328528088558116e-1, + -0.54120594006363117665e-2, + -0.19508089261650721213e-1, + 0.15583449528267703105e-1, + 0.12802175219946904713e-2, + -0.467540031227650036e-3, + -0.23097928659588776168e-1, + 0.34234163895122210475e-1, + -0.1262653554340112394e-1, + -0.19030296374699808004e-1, + 0.18480982884015780682e-1, + 0.10947196543818168632e-1, + -0.28753848099226181345e-1, + 0.11753973835026935643e-1, + 0.63313364681310355803e-2, + 0.73439729515374111909e-2, + -0.34672268143134045426e-1, + 0.2712175040685351271e-1, + 0.11143483266018662861e-1, + -0.29470266356422889636e-1, + 0.5280766414817509441e-2, + 0.13606570458972327281e-1, + 0.75753795606613777078e-2, + -0.34281828414155030016e-1, + 0.16274671963485264764e-1, + 0.17176480687346864368e-1, + -0.79894113357564921357e-2, + -0.30948420722717230602e-1, + 0.2980109320205615725e-1, + 0.78642160854076222087e-2, + -0.12735144567166265667e-1, + -0.24120831932358588467e-1, + 0.26083803828757481935e-1, + 0.16254341637191489084e-1, + -0.22592074500370425832e-1, + -0.25205219705072182124e-1, + 0.37642299236075087154e-1, + -0.13290893216536933587e-2, + 0.64126052574922116217e-2, + -0.57453353540268405075e-1, + 0.4876053606197849194e-1, + 0.54686809979432428677e-2, + 0.24574918670654324893e-2, + -0.37327508574803693053e-1, + -0.61783087837197154038e-2, + 0.47275351687293167002e-1, + 0.51343826367635566482e-3, + -0.19985315104696248223e-1, + -0.34805042372038234866e-1, + 0.14126869662395295096e-1, + 0.43725930407267570021e-1, + 0.46671061144645054411e-2, + -0.32399772315588604155e-1, + -0.3311150815270319514e-1, + -0.11513909000045239976e-2, + 0.54186876852096312052e-1, + 0.20646429056870981011e-1, + -0.63111151147109386186e-2, + -0.4815099129859904542e-1, + -0.46910456195731566054e-1, + 0.19576483742693624041e-1, + 0.24518082001849926532e-1, + 0.77411748567922017417e-1, + 0.12810585721747130145e-1, + -0.65323985379594205238e-3, + -0.55374352533247676866e-1, + -0.78858488982746305362e-1, + -0.65876302786156998303e-1, + -0.78102850681489685569e-1, + -0.34842612917016638208e-1, + -0.40452833547273241155e-1, + -0.13489990097990477158e-1, + -0.96172837856559473257e-2, + -0.88711030019171834005e-2, + 0.43138631307705326695e-2, + -0.83271311673720066482e-2, + 0.69937983236203257048e-2, + -0.71490815490989206848e-2, + 0.7069909565740539574e-2, + -0.80128914726496774934e-2, + 0.96729141595270524967e-2, + -0.11740524806705671459e-1, + 0.13597227090345966743e-1, + -0.14621895791283024552e-1, + 0.14416059370318354271e-1, + -0.1287697065102487784e-1, + 0.10281586748162093586e-1, + -0.71417062935083784614e-2, + 0.41116945032713559521e-2, + -0.17614889854537447208e-2, + 0.49462634936052810031e-3, + -0.42906115628102707744e-3, + 0.14554875881322205423e-2, + -0.32640389269637747581e-2, + 0.54889931315270437673e-2, + -0.77652720163021403399e-2, + 0.98275123719828005181e-2, + -0.11493957674640361763e-1, + 0.12676746012983113737e-1, + -0.13314754316690954536e-1, + 0.13363426265347786576e-1, + -0.12759155029392095851e-1, + 0.11451591515115138592e-1, + -0.94200533746449585659e-2, + 0.67221300518337410643e-2, + -0.3503761038529192625e-2, + -0.24550037400288739903e-1, + 0.41302239771181907535e-1, + 0.49950126899038086239e-2, + -0.55206710833703945274e-1, 0.11144266683232069426, -0.13484209340608369065, 0.13407523564831466678, - -0.85920917086955331254e-01, - 0.19383492507652578390e-01, - 0.69494821876534135230e-01, - -0.13905814742213823410, + -0.85920917086955331254e-1, + 0.1938349250765257839e-1, + 0.6949482187653413523e-1, + -0.1390581474221382341, 0.19094119895162847689, -0.19233157861927213661, 0.16254149781851140455, - -0.90417773199557988084e-01, - 0.14871318949780521282e-01, - 0.63216668900907574402e-01, + -0.90417773199557988084e-1, + 0.14871318949780521282e-1, + 0.63216668900907574402e-1, -0.10388250406167305606, 0.11649092092471467763, - -0.79748486515206148950e-01, - 0.24826139743211680239e-01, - 0.50805491999441440565e-01, + -0.7974848651520614895e-1, + 0.24826139743211680239e-1, + 0.50805491999441440565e-1, -0.10557396372592077471, 0.14287015102415978607, -0.13291471388988879143, - 0.98277878435447066363e-01, - -0.30228429644382201480e-01, - -0.32347938882934114402e-01, - 0.89880347823984602096e-01, + 0.98277878435447066363e-1, + -0.3022842964438220148e-1, + -0.32347938882934114402e-1, + 0.89880347823984602096e-1, -0.11014543557135045293, - 0.99526313710537855917e-01, - -0.66563810097633693830e-01, - -0.15276966614506563152e-01, - 0.39085169115648139837e-02, + 0.99526313710537855917e-1, + -0.6656381009763369383e-1, + -0.15276966614506563152e-1, + 0.39085169115648139837e-2, -0.17750871553303251837, - -0.94871427501033014917e-01, + -0.94871427501033014917e-1, -0.36256475330464382756, -0.47023648286905472826, - -0.58910325580342637330, + -0.5891032558034263733, -0.86578810295108366013, -0.61406875676106364992, -0.63141678473803386495, - -0.49126864151750188059e-01, + -0.49126864151750188059e-1, 0.30316111388126415482, 0.50847882295901358773, 0.55462073856704641184, - -0.81117477351498684657e-01, + -0.81117477351498684657e-1, -0.27073797173707953023, -0.56101550775211850297, - -0.88596013913346843838e-01, + -0.88596013913346843838e-1, 0.31265695777439467262, 0.41760980887644355564, - 0.88974256384165756328e-01, - -0.36383369531074843950, + 0.88974256384165756328e-1, + -0.3638336953107484395, -0.35338299682588825146, 0.12300678189369944338, 0.36899706447001962006, @@ -15534,173 +15536,173 @@ function ESERK4ConstantCache(zprev) -0.33398121335488434314, 0.18874283373396949504, 0.30799000671762166714, - 0.30424924100698611668e-01, + 0.30424924100698611668e-1, -0.33478180503168308846, -0.14942975467642438669, 0.34954336647404116167, 0.14002886651973187049, -0.23744054158957028644, -0.18703576301526284031, - 0.12554210892704686930, + 0.1255421089270468693, 0.35668951931690712209, -0.30074237050921653891, -0.16107673257466484373, 0.15311060565760642449, 0.18625318114675923353, - -0.69633287139828817236e-01, + -0.69633287139828817236e-1, -0.35336111035197176333, 0.31512983383374282287, 0.11491098921610791439, - -0.20170446466205552150, + -0.2017044646620555215, -0.10488113208769092588, 0.16018685242043553818, 0.16607210701803407082, -0.27736467442704643149, - -0.71977937945140013642e-01, + -0.71977937945140013642e-1, 0.35992653226044069026, -0.18355694413418738309, -0.10933913083296101232, - 0.54296889065393941221e-01, + 0.54296889065393941221e-1, 0.17475246722520357268, - -0.97597560006475139738e-01, + -0.97597560006475139738e-1, -0.26315875570306102027, 0.41673091434120385079, -0.16482900528189523004, -0.11396911389220104605, - 0.56815926164003931198e-01, + 0.56815926164003931198e-1, 0.16782496261881157951, -0.15896491444464752596, -0.10135738014391934558, 0.24171339563599467115, - -0.59536298529364831134e-01, + -0.59536298529364831134e-1, -0.18341475172148766215, 0.13934234933000785861, 0.14637228320622230893, -0.30741469454982012222, 0.15479342568113607648, - 0.98058327056742958239e-01, + 0.98058327056742958239e-1, -0.14678673407061368361, - 0.57312983443379082976e-04, - 0.65234298511693572520e-01, + 0.57312983443379082976e-4, + 0.6523429851169357252e-1, 0.10354010284947577636, -0.31983622732546851397, 0.29809889010248480368, - -0.16343097586252946368e-01, + -0.16343097586252946368e-1, -0.24894105610075373258, 0.25164720278965252431, - -0.47296339289209433920e-01, - -0.99622334518963753802e-01, - 0.41269370727599417881e-01, + -0.4729633928920943392e-1, + -0.99622334518963753802e-1, + 0.41269370727599417881e-1, 0.10135574349476259015, -0.11289614458600770452, - -0.40255107927656734457e-01, + -0.40255107927656734457e-1, 0.17218602629261425818, -0.10253270115459092726, - -0.12187259264564181960, + -0.1218725926456418196, 0.27227708435037795143, -0.18560062885738839999, - -0.57656076616289846093e-01, + -0.57656076616289846093e-1, 0.22249112153816114068, -0.16170749251945226721, - -0.42667185586589072288e-01, + -0.42667185586589072288e-1, 0.18342199863695585194, -0.14404260796653353682, - 0.33596650058023572530e-02, - 0.73005887132748664703e-01, - -0.15725434974880235506e-01, - -0.80882747165327520400e-01, - 0.75446068136706151419e-01, - 0.59433534305035659595e-01, + 0.3359665005802357253e-2, + 0.73005887132748664703e-1, + -0.15725434974880235506e-1, + -0.808827471653275204e-1, + 0.75446068136706151419e-1, + 0.59433534305035659595e-1, -0.19730042655548407637, 0.18568260430385055693, - -0.34530612905441498278e-02, + -0.34530612905441498278e-2, -0.20483511380620175735, 0.25824819709189072992, -0.10227857039201318501, -0.14094697990099211427, 0.28322187711324381398, -0.23003898604791236937, - 0.52142110157143164995e-01, - 0.91728811412142161053e-01, - -0.95532184357638549876e-01, - -0.12034218155362699440e-01, + 0.52142110157143164995e-1, + 0.91728811412142161053e-1, + -0.95532184357638549876e-1, + -0.1203421815536269944e-1, 0.11319089853832885184, - -0.11504479345472666540, - 0.28979611434382348406e-01, - 0.55486728468828426519e-01, - -0.62880381693445328017e-01, - 0.40812278646895541051e-02, - 0.41246402482957397750e-01, - -0.64510691637615956776e-02, - -0.90738248698517265378e-01, + -0.1150447934547266654, + 0.28979611434382348406e-1, + 0.55486728468828426519e-1, + -0.62880381693445328017e-1, + 0.40812278646895541051e-2, + 0.4124640248295739775e-1, + -0.64510691637615956776e-2, + -0.90738248698517265378e-1, 0.15909354490683075278, -0.11436288403280947534, - -0.37677063978350862350e-01, + -0.3767706397835086235e-1, 0.19438191735934598481, -0.23133921190345743679, 0.10358756566397875343, 0.11368711340082091055, -0.27575301663058077173, - 0.27592576000481028320, + 0.2759257600048102832, -0.12384572808176504133, - -0.61497397057943832543e-01, + -0.61497397057943832543e-1, 0.14132978836978962733, - -0.58158291029868205979e-01, + -0.58158291029868205979e-1, -0.12279505004759005971, 0.26321938081948603738, -0.25084050819976605462, - 0.78779090671491039388e-01, + 0.78779090671491039388e-1, 0.15234998660255261171, -0.30465321450052340602, 0.29603870677616356266, -0.14940212334451774545, - -0.29662759087551244380e-01, + -0.2966275908755124438e-1, 0.12859429585543244445, -0.10060699080273534378, - -0.11131212806753873479e-01, + -0.11131212806753873479e-1, 0.11130242831241887735, -0.12026762210130383102, - 0.26778716674270949122e-01, + 0.26778716674270949122e-1, 0.10882972779850109968, - -0.19746489753906631970, + -0.1974648975390663197, 0.18043317458608332249, - -0.65059918244261299991e-01, - -0.82510229724711586785e-01, - 0.18065314857346306820, - -0.18164317262445794920, - 0.97586886259493549334e-01, - 0.11655401729236385816e-01, - -0.78096636624833348783e-01, - 0.67838640701640862130e-01, + -0.65059918244261299991e-1, + -0.82510229724711586785e-1, + 0.1806531485734630682, + -0.1816431726244579492, + 0.97586886259493549334e-1, + 0.11655401729236385816e-1, + -0.78096636624833348783e-1, + 0.6783864070164086213e-1, -0.52384795243544901577, 0.64349207354030768524, 0.25026177988293107912, -0.93454244960738819259, - 0.10534393315749865927e+01, - -0.44637587611952417310, - -0.35969327941396844750, + 0.10534393315749865927e+1, + -0.4463758761195241731, + -0.3596932794139684475, 0.90067179510784955987, -0.71001063059864399918, - 0.25532167495298355858e-01, + 0.25532167495298355858e-1, 0.76175795516461075607, - -0.99455647831080840060, + -0.9945564783108084006, 0.58954516439613879886, 0.29319680655404323222, - -0.98200659273992041420, - 0.11477253095621200440e+01, + -0.9820065927399204142, + 0.1147725309562120044e+1, -0.64077270822007703632, - -0.40047186585530296365e-01, + -0.40047186585530296365e-1, 0.50561763098789069826, -0.38064962443016725491, - -0.56869694674470810947e-01, + -0.56869694674470810947e-1, 0.48720289154696283518, -0.43196363163699663668, - -0.29038366455255595726e-03, + -0.29038366455255595726e-3, 0.58364676980064300604, -0.79096292854599348221, 0.59032273732863249638, - -0.91798733965204132312e-01, - -0.18748387937151911320, + -0.91798733965204132312e-1, + -0.1874838793715191132, 0.13621505492633798062, 0.21514959706963782127, -0.35567087032675354097, @@ -15708,162 +15710,162 @@ function ESERK4ConstantCache(zprev) 0.49283123169842296685, -0.89639843925890938525, 0.77126246840425205509, - -0.15997018581360780698e-02, - -0.78843262111684853100, - 0.10688804418218587067e+01, + -0.15997018581360780698e-2, + -0.788432621116848531, + 0.10688804418218587067e+1, -0.47623267653613537975, -0.46753289623216159887, - 0.11002922947070374882e+01, + 0.11002922947070374882e+1, -0.78179678442982947217, -0.17762156906594492312, - 0.10946002744739284918e+01, - -0.10859243780768477183e+01, + 0.10946002744739284918e+1, + -0.10859243780768477183e+1, 0.18318530573948765827, - 0.10287959149406791237e+01, - -0.15085693119069996104e+01, + 0.10287959149406791237e+1, + -0.15085693119069996104e+1, 0.98963060767276089802, - 0.17103046752149239640, + 0.1710304675214923964, -0.95205340917137704082, 0.92429364310569106511, -0.23705779038648183699, - -0.21983271503284523840, - 0.51358091710102957150e-01, + -0.2198327150328452384, + 0.5135809171010295715e-1, 0.60371669873705191556, -0.87143159858408303364, - 0.39547565900506509440, + 0.3954756590050650944, 0.59289544253596271339, - -0.11002624194010597325e+01, + -0.11002624194010597325e+1, 0.70995682450885511106, 0.28641343889333964468, - -0.75844025654269509040, - 0.20210347829278341170, - 0.10386079333121494006e+01, - -0.16806772650644785649e+01, - 0.10973254525781537261e+01, + -0.7584402565426950904, + 0.2021034782927834117, + 0.10386079333121494006e+1, + -0.16806772650644785649e+1, + 0.10973254525781537261e+1, 0.37339325510447751721, - -0.13744923399993134172e+01, - 0.12184719927176113075e+01, + -0.13744923399993134172e+1, + 0.12184719927176113075e+1, -0.21302993753721338743, - -0.36867064898424295460, - 0.26009565105572739901e-01, + -0.3686706489842429546, + 0.26009565105572739901e-1, 0.75925733431411768226, - -0.76296469653586651560, + -0.7629646965358665156, -0.18560603960960680991, - 0.12286307069576940521e+01, - -0.10597446272672683687e+01, - -0.20296230404005977110, - 0.13546205564216562411e+01, - -0.10641781882620338084e+01, + 0.12286307069576940521e+1, + -0.10597446272672683687e+1, + -0.2029623040400597711, + 0.13546205564216562411e+1, + -0.10641781882620338084e+1, -0.25481778948176952992, - 0.11944006644992983812e+01, + 0.11944006644992983812e+1, -0.63674923968662200391, - -0.59686858149370025650, - 0.10560980087102866953e+01, + -0.5968685814937002565, + 0.10560980087102866953e+1, -0.12639389292364497375, -0.86667719323026981559, 0.65126102981031530614, 0.60910252135947828833, - -0.11051453343515389438e+01, - 0.25388902249460044286e-01, - 0.15634462781966078637e+01, - -0.16356344936434878967e+01, - 0.13886006754990276590, - 0.11765920493756572007e+01, + -0.11051453343515389438e+1, + 0.25388902249460044286e-1, + 0.15634462781966078637e+1, + -0.16356344936434878967e+1, + 0.1388600675499027659, + 0.11765920493756572007e+1, -0.72667096672697284454, -0.47316231848712347885, 0.53895150456656415461, 0.85313089479561998729, - -0.15749189766564071213e+01, + -0.15749189766564071213e+1, 0.36556011093114376687, - 0.14650655019513387778e+01, - -0.14191901182867894260e+01, + 0.14650655019513387778e+1, + -0.1419190118286789426e+1, -0.29201917261893689526, - 0.12600779568943785147e+01, + 0.12600779568943785147e+1, -0.13671819715248029192, - -0.10046033296016299019e+01, + -0.10046033296016299019e+1, 0.15757260115807381062, - 0.16020546406667899308e+01, - -0.13420660863757620795e+01, + 0.16020546406667899308e+1, + -0.13420660863757620795e+1, -0.72810124175369606014, - 0.16175788461412090591e+01, - -0.84569256880763568618e-02, - -0.12135164370469353479e+01, - -0.28681742094500268375e-01, - 0.16372162544299644349e+01, + 0.16175788461412090591e+1, + -0.84569256880763568618e-2, + -0.12135164370469353479e+1, + -0.28681742094500268375e-1, + 0.16372162544299644349e+1, -0.56620878531581242399, - -0.14502369057639330485e+01, + -0.14502369057639330485e+1, 0.93408223344183594072, - 0.13531011671964785492e+01, - -0.12416554498281715535e+01, - -0.10338235634504640004e+01, - 0.13075174689711024367e+01, - 0.94705172002846693680, - -0.11061675777297479417e+01, - -0.14263609266588388458e+01, - 0.18587492825104865446e+01, + 0.13531011671964785492e+1, + -0.12416554498281715535e+1, + -0.10338235634504640004e+1, + 0.13075174689711024367e+1, + 0.9470517200284669368, + -0.11061675777297479417e+1, + -0.14263609266588388458e+1, + 0.18587492825104865446e+1, 0.89053252128223925332, - -0.14684933234297750104e+01, + -0.14684933234297750104e+1, -0.88842703946080636701, 0.72147633751587458839, - 0.22899941652837254580e+01, - -0.18313957705374122042e+01, - -0.12458950569943665343e+01, + 0.2289994165283725458e+1, + -0.18313957705374122042e+1, + -0.12458950569943665343e+1, 0.51107928149745407431, - 0.18727766605937081756e+01, + 0.18727766605937081756e+1, 0.47098687173982928256, - -0.27413953153505872251e+01, + -0.27413953153505872251e+1, -0.22603336484976083165, - 0.14041553046138652849e+01, - 0.19354518108822935663e+01, + 0.14041553046138652849e+1, + 0.19354518108822935663e+1, -0.76660110678564630238, - -0.26527288444328416261e+01, + -0.26527288444328416261e+1, -0.25713128169502519338, - 0.18799483900442799378e+01, - 0.21195994045616362023e+01, + 0.18799483900442799378e+1, + 0.21195994045616362023e+1, -0.12519527028807525548, - -0.30393640777119506069e+01, - -0.13984696356209473933e+01, + -0.30393640777119506069e+1, + -0.13984696356209473933e+1, 0.41210697588539002556, - 0.30376081964216457010e+01, - 0.24663880978350865014e+01, + 0.3037608196421645701e+1, + 0.24663880978350865014e+1, -0.65457046653856776341, - -0.20931955339628283141e+01, - -0.40150018428595304343e+01, - -0.13087700478030006579e+01, + -0.20931955339628283141e+1, + -0.40150018428595304343e+1, + -0.13087700478030006579e+1, 0.41373383600453855768, - 0.31522603399371078581e+01, - 0.47031356134526509649e+01, - 0.41347966725175098190e+01, - 0.44205297941098100623e+01, - 0.23626200366281402410e+01, - 0.22153534056439561084e+01, + 0.31522603399371078581e+1, + 0.47031356134526509649e+1, + 0.4134796672517509819e+1, + 0.44205297941098100623e+1, + 0.2362620036628140241e+1, + 0.22153534056439561084e+1, 0.91734387113960513815, 0.59002540149344184783, - 0.40472175508834878910, - -0.36780191246931312476e-01, + 0.4047217550883487891, + -0.36780191246931312476e-1, 0.20637192014815164409, - -0.72144524070974019869e-01, - 0.33925383061905879656e-01, - 0.21572147471758128939e-01, - -0.23133435718386930607e-01, - -0.13479794901924767314e-01, - 0.79063042275005393500e-01, - -0.14864041219376236680, + -0.72144524070974019869e-1, + 0.33925383061905879656e-1, + 0.21572147471758128939e-1, + -0.23133435718386930607e-1, + -0.13479794901924767314e-1, + 0.790630422750053935e-1, + -0.1486404121937623668, 0.19644994301604706832, -0.20470971326712825156, 0.16644553521559740661, - -0.89630029138559927371e-01, - -0.87955198191370185384e-02, - 0.10576319370107678530, + -0.89630029138559927371e-1, + -0.87955198191370185384e-2, + 0.1057631937010767853, -0.18131938246389120439, 0.22117458011773530324, -0.22171148074726954036, 0.18714310063562467068, -0.12883247291536023549, - 0.59248853551259660077e-01, - 0.97618567505667677708e-02, - -0.70982526477658666741e-01, - 0.12058004164524133150, + 0.59248853551259660077e-1, + 0.97618567505667677708e-2, + -0.70982526477658666741e-1, + 0.1205800416452413315, -0.15844435363575867792, 0.18494591664881401827, -0.20046111697068005886, @@ -15871,397 +15873,397 @@ function ESERK4ConstantCache(zprev) -0.19228509307008170848, 0.16474382549448171598, -0.12113770866102256674, - 0.64295229504402640064e-01, + 0.64295229504402640064e-1, 0.64475858337238312057, - -0.12011121495716092777e+01, - 0.53272309049380295320, + -0.12011121495716092777e+1, + 0.5327230904938029532, 0.19337892180903074046, - -0.10608086484490508727e+01, - 0.14834860854239237948e+01, - -0.16274708068012320172e+01, - 0.11133041115538833132e+01, - -0.37938146947873407910, - -0.69320964359029124680, - 0.14929938929089006105e+01, - -0.21043364929298395971e+01, - 0.20322713050576681759e+01, - -0.15974748774523894745e+01, + -0.10608086484490508727e+1, + 0.14834860854239237948e+1, + -0.16274708068012320172e+1, + 0.11133041115538833132e+1, + -0.3793814694787340791, + -0.6932096435902912468, + 0.14929938929089006105e+1, + -0.21043364929298395971e+1, + 0.20322713050576681759e+1, + -0.15974748774523894745e+1, 0.59546754683009806008, 0.39111057879103239276, - -0.14084124404183024915e+01, - 0.18659249655534504431e+01, - -0.19558932642272079949e+01, - 0.13475405760237495478e+01, + -0.14084124404183024915e+1, + 0.18659249655534504431e+1, + -0.19558932642272079949e+1, + 0.13475405760237495478e+1, -0.53239839430243540708, -0.56711713393437901409, - 0.13258023838869905653e+01, - -0.18455670366894481038e+01, - 0.16766793118814229402e+01, - -0.11952446328362908989e+01, + 0.13258023838869905653e+1, + -0.18455670366894481038e+1, + 0.16766793118814229402e+1, + -0.11952446328362908989e+1, 0.24570721575625495414, 0.57587671614077440285, - -0.13208506855924699863e+01, - 0.15088940579605663039e+01, - -0.12742221023267443769e+01, + -0.13208506855924699863e+1, + 0.15088940579605663039e+1, + -0.12742221023267443769e+1, 0.75881501154599462211, 0.46912933240698895254, -0.16886072353558082004, - 0.28252600684292423772e+01, - 0.16157029788565053785e+01, - 0.56810747448255405345e+01, - 0.75929804864327046232e+01, - 0.94642286651212614856e+01, - 0.13674979009950050113e+02, - 0.10129362836972401141e+02, - 0.97204231567108578815e+01, - 0.11636478435916470797e+01, - -0.51323215450917034630e+01, - -0.80359756472776648906e+01, - -0.87376620160058955378e+01, + 0.28252600684292423772e+1, + 0.16157029788565053785e+1, + 0.56810747448255405345e+1, + 0.75929804864327046232e+1, + 0.94642286651212614856e+1, + 0.13674979009950050113e+2, + 0.10129362836972401141e+2, + 0.97204231567108578815e+1, + 0.11636478435916470797e+1, + -0.5132321545091703463e+1, + -0.80359756472776648906e+1, + -0.87376620160058955378e+1, 0.91005903389379017021, - 0.49369726552782360329e+01, - 0.82241592808135539627e+01, - 0.22175908069222312058e+01, - -0.57505386816591208543e+01, - -0.60732482475936553357e+01, - -0.18413373552142631162e+01, - 0.60349440833927303629e+01, - 0.56139623648598684369e+01, - -0.20435464222316053196e+01, - -0.57884485463726358390e+01, - -0.27270883163694619178e+01, - 0.46089134020585822427e+01, - 0.54217288725200187827e+01, - -0.31685740123959602599e+01, - -0.47604605568836788621e+01, + 0.49369726552782360329e+1, + 0.82241592808135539627e+1, + 0.22175908069222312058e+1, + -0.57505386816591208543e+1, + -0.60732482475936553357e+1, + -0.18413373552142631162e+1, + 0.60349440833927303629e+1, + 0.56139623648598684369e+1, + -0.20435464222316053196e+1, + -0.5788448546372635839e+1, + -0.27270883163694619178e+1, + 0.46089134020585822427e+1, + 0.54217288725200187827e+1, + -0.31685740123959602599e+1, + -0.47604605568836788621e+1, -0.60766226958018820792, - 0.53627422888258085010e+01, - 0.25467539024404981518e+01, - -0.59310975364732012594e+01, - -0.17388337184312339101e+01, - 0.31847565215189796994e+01, - 0.36408491790490415951e+01, - -0.26053614497708972308e+01, - -0.52439325183633247462e+01, - 0.45395010308227181639e+01, - 0.26304467275211611543e+01, - -0.22933899043317786948e+01, - -0.33087925556605188859e+01, - 0.15544716942671961135e+01, - 0.51663978058176196484e+01, - -0.45680511387926019395e+01, - -0.22599602386127508602e+01, - 0.35776539600080639048e+01, - 0.13909637033860722255e+01, - -0.23175964404680042819e+01, - -0.28911520717790244461e+01, - 0.46819330340509601740e+01, + 0.5362742288825808501e+1, + 0.25467539024404981518e+1, + -0.59310975364732012594e+1, + -0.17388337184312339101e+1, + 0.31847565215189796994e+1, + 0.36408491790490415951e+1, + -0.26053614497708972308e+1, + -0.52439325183633247462e+1, + 0.45395010308227181639e+1, + 0.26304467275211611543e+1, + -0.22933899043317786948e+1, + -0.33087925556605188859e+1, + 0.15544716942671961135e+1, + 0.51663978058176196484e+1, + -0.45680511387926019395e+1, + -0.22599602386127508602e+1, + 0.35776539600080639048e+1, + 0.13909637033860722255e+1, + -0.23175964404680042819e+1, + -0.28911520717790244461e+1, + 0.4681933034050960174e+1, 0.88944904733013230302, - -0.54955888444430893713e+01, - 0.27092329623520097215e+01, - 0.18860690444155281398e+01, + -0.54955888444430893713e+1, + 0.27092329623520097215e+1, + 0.18860690444155281398e+1, -0.85660186404628524404, - -0.30086523390711366055e+01, - 0.20014948678891681944e+01, - 0.35458723103387055353e+01, - -0.58197201621802534532e+01, - 0.16781329238194826470e+01, - 0.27954589877773430295e+01, - -0.17893303136633800232e+01, - -0.19949656164371125655e+01, - 0.21138468214431962444e+01, - 0.17555244319915517259e+01, - -0.37169951278116171167e+01, + -0.30086523390711366055e+1, + 0.20014948678891681944e+1, + 0.35458723103387055353e+1, + -0.58197201621802534532e+1, + 0.1678132923819482647e+1, + 0.27954589877773430295e+1, + -0.17893303136633800232e+1, + -0.19949656164371125655e+1, + 0.21138468214431962444e+1, + 0.17555244319915517259e+1, + -0.37169951278116171167e+1, 0.57003866602162334143, - 0.34604947131609082867e+01, - -0.27924354771044641588e+01, - -0.18525630147996414721e+01, - 0.45954900450468683104e+01, - -0.23844978807808367982e+01, - -0.14071590130544504582e+01, - 0.19490973080074085466e+01, + 0.34604947131609082867e+1, + -0.27924354771044641588e+1, + -0.18525630147996414721e+1, + 0.45954900450468683104e+1, + -0.23844978807808367982e+1, + -0.14071590130544504582e+1, + 0.19490973080074085466e+1, 0.58113966970380059873, - -0.17295194214723086379e+01, + -0.17295194214723086379e+1, -0.95970077357340988211, - 0.44957828598277425058e+01, - -0.42945660470793729502e+01, - -0.24739850279758394264e-01, - 0.40671507710259051649e+01, - -0.39262881212313236468e+01, - 0.51103621713192615150, - 0.19321206156269410403e+01, - -0.10382352409751709477e+01, - -0.12501231000114352288e+01, - 0.14695597643936557652e+01, - 0.93459532465491856890, - -0.30074032380487087934e+01, - 0.18740886563336047743e+01, - 0.17084541807215634091e+01, - -0.40841830060240402744e+01, - 0.26510302760546475831e+01, - 0.12877807996682106850e+01, - -0.39594146197716231228e+01, - 0.29946446656202336811e+01, + 0.44957828598277425058e+1, + -0.42945660470793729502e+1, + -0.24739850279758394264e-1, + 0.40671507710259051649e+1, + -0.39262881212313236468e+1, + 0.5110362171319261515, + 0.19321206156269410403e+1, + -0.10382352409751709477e+1, + -0.12501231000114352288e+1, + 0.14695597643936557652e+1, + 0.9345953246549185689, + -0.30074032380487087934e+1, + 0.18740886563336047743e+1, + 0.17084541807215634091e+1, + -0.40841830060240402744e+1, + 0.26510302760546475831e+1, + 0.1287780799668210685e+1, + -0.39594146197716231228e+1, + 0.29946446656202336811e+1, 0.29973582518137303898, - -0.26108416263756253350e+01, - 0.20668954374757042558e+01, - 0.80426803659250187262e-01, - -0.11969983331100024770e+01, - 0.18608053356823020530, - 0.14305874794457464905e+01, - -0.13868159156397854570e+01, - -0.75663119850926574550, - 0.29681388179483341183e+01, - -0.27981926607362366255e+01, + -0.2610841626375625335e+1, + 0.20668954374757042558e+1, + 0.80426803659250187262e-1, + -0.1196998333110002477e+1, + 0.1860805335682302053, + 0.14305874794457464905e+1, + -0.1386815915639785457e+1, + -0.7566311985092657455, + 0.29681388179483341183e+1, + -0.27981926607362366255e+1, -0.10617559324883572847, - 0.34432152015879520235e+01, - -0.43280895853614484992e+01, - 0.18900667018168066935e+01, - 0.19195685754669711276e+01, - -0.41013397771250952317e+01, - 0.31569467223767579966e+01, + 0.34432152015879520235e+1, + -0.43280895853614484992e+1, + 0.18900667018168066935e+1, + 0.19195685754669711276e+1, + -0.41013397771250952317e+1, + 0.31569467223767579966e+1, -0.23653532879016878065, - -0.21057453515962332169e+01, - 0.21609077145628994288e+01, - -0.38503894316301862100, - -0.13349592275790413964e+01, - 0.15004788583375388011e+01, + -0.21057453515962332169e+1, + 0.21609077145628994288e+1, + -0.385038943163018621, + -0.13349592275790413964e+1, + 0.15004788583375388011e+1, -0.27788199147802206124, -0.92142749498080633863, 0.90789828245723958045, 0.12831765810975243047, - -0.90551546638800750610, + -0.9055154663880075061, 0.35659254539686924268, - 0.12249639047231757338e+01, - -0.23646935618025475279e+01, - 0.16937555109722481905e+01, + 0.12249639047231757338e+1, + -0.23646935618025475279e+1, + 0.16937555109722481905e+1, 0.71472907147308040177, - -0.32360239911561192727e+01, - 0.38883631585555984422e+01, - -0.19536629076867106924e+01, - -0.13754650841770803549e+01, - 0.38010114529631122693e+01, - -0.36416287676696397213e+01, - 0.10780901884009939096e+01, - 0.19597668212824257417e+01, - -0.32333383343490953443e+01, - 0.18129357200543347872e+01, - 0.12545211702126812803e+01, - -0.37419800657646540287e+01, - 0.38274462013574663821e+01, - -0.13695439129358486507e+01, - -0.20566982403723859107e+01, - 0.42760514259279212013e+01, - -0.39998643057149161351e+01, - 0.16073850751861036290e+01, - 0.12108572886583723882e+01, - -0.26666036460542215103e+01, - 0.20340369221723526572e+01, - -0.34684649050701850392e-01, - -0.17737124397059524927e+01, - 0.20860158889110693714e+01, + -0.32360239911561192727e+1, + 0.38883631585555984422e+1, + -0.19536629076867106924e+1, + -0.13754650841770803549e+1, + 0.38010114529631122693e+1, + -0.36416287676696397213e+1, + 0.10780901884009939096e+1, + 0.19597668212824257417e+1, + -0.32333383343490953443e+1, + 0.18129357200543347872e+1, + 0.12545211702126812803e+1, + -0.37419800657646540287e+1, + 0.38274462013574663821e+1, + -0.13695439129358486507e+1, + -0.20566982403723859107e+1, + 0.42760514259279212013e+1, + -0.39998643057149161351e+1, + 0.1607385075186103629e+1, + 0.12108572886583723882e+1, + -0.26666036460542215103e+1, + 0.20340369221723526572e+1, + -0.34684649050701850392e-1, + -0.17737124397059524927e+1, + 0.20860158889110693714e+1, -0.69906681202812614995, - -0.14351091755096800906e+01, - 0.28915551999722657328e+01, - -0.27202153954351073750e+01, - 0.10169535389648431956e+01, - 0.11870816714901735178e+01, - -0.26151144360181532988e+01, - 0.25292788246080966097e+01, - -0.11419653961780114049e+01, + -0.14351091755096800906e+1, + 0.28915551999722657328e+1, + -0.2720215395435107375e+1, + 0.10169535389648431956e+1, + 0.11870816714901735178e+1, + -0.26151144360181532988e+1, + 0.25292788246080966097e+1, + -0.11419653961780114049e+1, -0.58092922843554262169, - 0.15548494098838061550e+01, - -0.12517009516957779969e+01, - 0.44174201004724986674e+01, - -0.49477573986365097625e+01, - -0.24320664191339411708e+01, - 0.73765034983715702666e+01, - -0.74829149424271230728e+01, - 0.18546632924839834278e+01, - 0.46163819381713500078e+01, - -0.82598970826434126025e+01, - 0.55219627220472347062e+01, + 0.1554849409883806155e+1, + -0.12517009516957779969e+1, + 0.44174201004724986674e+1, + -0.49477573986365097625e+1, + -0.24320664191339411708e+1, + 0.73765034983715702666e+1, + -0.74829149424271230728e+1, + 0.18546632924839834278e+1, + 0.46163819381713500078e+1, + -0.82598970826434126025e+1, + 0.55219627220472347062e+1, 0.89656215978453734916, - -0.75241058225256765013e+01, - 0.88715542558443019061e+01, - -0.48955450069029362581e+01, - -0.26144735194641959275e+01, - 0.76753426731871305932e+01, - -0.79637618960813201241e+01, - 0.27954921614784451478e+01, - 0.28691460285342182956e+01, - -0.57230982597270356749e+01, - 0.29682106926407447745e+01, - 0.20774128966991494138e+01, - -0.61396483805204562501e+01, - 0.49804990617563253963e+01, + -0.75241058225256765013e+1, + 0.88715542558443019061e+1, + -0.48955450069029362581e+1, + -0.26144735194641959275e+1, + 0.76753426731871305932e+1, + -0.79637618960813201241e+1, + 0.27954921614784451478e+1, + 0.28691460285342182956e+1, + -0.57230982597270356749e+1, + 0.29682106926407447745e+1, + 0.20774128966991494138e+1, + -0.61396483805204562501e+1, + 0.49804990617563253963e+1, -0.23261524437836722523, - -0.54254944319449638357e+01, - 0.68506370564105436571e+01, - -0.40443212845973937064e+01, - -0.13779450796680721147e+01, - 0.40188918499353807334e+01, - -0.26758644505198918573e+01, - -0.20637568157559686988e+01, - 0.47700249671771066673e+01, - -0.32731075184068925132e+01, - -0.27078793683669331038e+01, - 0.75058087426362227745e+01, - -0.75745130621041667496e+01, - 0.11954990221200445522e+01, - 0.61470107921837362497e+01, - -0.94399250791376587699e+01, - 0.48371940793159717842e+01, - 0.33150767450710949547e+01, - -0.91868568551276599266e+01, - 0.67488451755186673608e+01, - 0.14704361816380129291e+01, - -0.96022543568934182190e+01, - 0.97192137137720031603e+01, - -0.20981733688469428323e+01, - -0.82020000547894209575e+01, - 0.11999882808457648764e+02, - -0.72546860781352071612e+01, - -0.26211549003079794851e+01, - 0.83879762822845336245e+01, - -0.66180247880445248754e+01, + -0.54254944319449638357e+1, + 0.68506370564105436571e+1, + -0.40443212845973937064e+1, + -0.13779450796680721147e+1, + 0.40188918499353807334e+1, + -0.26758644505198918573e+1, + -0.20637568157559686988e+1, + 0.47700249671771066673e+1, + -0.32731075184068925132e+1, + -0.27078793683669331038e+1, + 0.75058087426362227745e+1, + -0.75745130621041667496e+1, + 0.11954990221200445522e+1, + 0.61470107921837362497e+1, + -0.94399250791376587699e+1, + 0.48371940793159717842e+1, + 0.33150767450710949547e+1, + -0.91868568551276599266e+1, + 0.67488451755186673608e+1, + 0.14704361816380129291e+1, + -0.9602254356893418219e+1, + 0.97192137137720031603e+1, + -0.20981733688469428323e+1, + -0.82020000547894209575e+1, + 0.11999882808457648764e+2, + -0.72546860781352071612e+1, + -0.26211549003079794851e+1, + 0.83879762822845336245e+1, + -0.66180247880445248754e+1, -0.74048037659344934092, - 0.50552785761544738463e+01, - -0.27118119938129567892e+01, - -0.46262729172571921410e+01, - 0.82908628529074146485e+01, - -0.45890706575423774183e+01, - -0.44288044777440429556e+01, - 0.92843657037091986695e+01, - -0.57512926716666052940e+01, - -0.37530967955433229832e+01, - 0.87327215682492891347e+01, - -0.42834837323526437913e+01, - -0.67853720987094439110e+01, - 0.12863811189278507641e+02, - -0.82781715190347391342e+01, - -0.39741248388305892014e+01, - 0.11636080304004220665e+02, - -0.88266737573089191216e+01, - -0.11769311030129965268e+01, - 0.63435900955944601876e+01, - -0.21997499844771364330e+01, - -0.63431467312736096176e+01, - 0.73717546356116159245e+01, - 0.10311956482240938193e+01, - -0.10936729646113311887e+02, - 0.99414859197306952865e+01, - 0.11980623536308581123e+01, - -0.11585340523691289860e+02, - 0.89594842957674547534e+01, - 0.28700279199714642253e+01, - -0.11018591383796364269e+02, - 0.53491370728882641217e+01, - 0.62499105631320892584e+01, - -0.10231252593671847251e+02, - 0.10335201087999921210e+01, - 0.86607880189393462445e+01, - -0.67119278207489792010e+01, - -0.54848572809443947307e+01, - 0.10934993564381837672e+02, - -0.17840295770354486216e+01, - -0.12385811531497685323e+02, - 0.12950009283557294637e+02, + 0.50552785761544738463e+1, + -0.27118119938129567892e+1, + -0.4626272917257192141e+1, + 0.82908628529074146485e+1, + -0.45890706575423774183e+1, + -0.44288044777440429556e+1, + 0.92843657037091986695e+1, + -0.5751292671666605294e+1, + -0.37530967955433229832e+1, + 0.87327215682492891347e+1, + -0.42834837323526437913e+1, + -0.6785372098709443911e+1, + 0.12863811189278507641e+2, + -0.82781715190347391342e+1, + -0.39741248388305892014e+1, + 0.11636080304004220665e+2, + -0.88266737573089191216e+1, + -0.11769311030129965268e+1, + 0.63435900955944601876e+1, + -0.2199749984477136433e+1, + -0.63431467312736096176e+1, + 0.73717546356116159245e+1, + 0.10311956482240938193e+1, + -0.10936729646113311887e+2, + 0.99414859197306952865e+1, + 0.11980623536308581123e+1, + -0.1158534052369128986e+2, + 0.89594842957674547534e+1, + 0.28700279199714642253e+1, + -0.11018591383796364269e+2, + 0.53491370728882641217e+1, + 0.62499105631320892584e+1, + -0.10231252593671847251e+2, + 0.1033520108799992121e+1, + 0.86607880189393462445e+1, + -0.6711927820748979201e+1, + -0.54848572809443947307e+1, + 0.10934993564381837672e+2, + -0.17840295770354486216e+1, + -0.12385811531497685323e+2, + 0.12950009283557294637e+2, 0.47670765252000857348, - -0.11712793759098241608e+02, - 0.62994461814477435979e+01, - 0.58821069445950042720e+01, - -0.69503227020549394055e+01, - -0.62285779682708639626e+01, - 0.13650207882795607262e+02, - -0.32422979625413743676e+01, - -0.13144473881013924554e+02, - 0.12470457916381779029e+02, - 0.31942105764432717763e+01, - -0.11503030364976140731e+02, + -0.11712793759098241608e+2, + 0.62994461814477435979e+1, + 0.5882106944595004272e+1, + -0.69503227020549394055e+1, + -0.62285779682708639626e+1, + 0.13650207882795607262e+2, + -0.32422979625413743676e+1, + -0.13144473881013924554e+2, + 0.12470457916381779029e+2, + 0.31942105764432717763e+1, + -0.11503030364976140731e+2, 0.15044538477047211811, - 0.11170632574342562293e+02, - -0.34876027373895808203e+01, - -0.13252180029087952562e+02, - 0.11568673501490566835e+02, - 0.68228815151882544754e+01, - -0.14304004706186605134e+02, - -0.12084676186929081965e+01, - 0.12688876416478471754e+02, + 0.11170632574342562293e+2, + -0.34876027373895808203e+1, + -0.13252180029087952562e+2, + 0.11568673501490566835e+2, + 0.68228815151882544754e+1, + -0.14304004706186605134e+2, + -0.12084676186929081965e+1, + 0.12688876416478471754e+2, -0.82848845016751948567, - -0.14619767371550580037e+02, - 0.50148274504412002628e+01, - 0.13597231627127275289e+02, - -0.87913525538117820446e+01, - -0.12418521289499819815e+02, - 0.11265262493614411454e+02, - 0.99092973790489384811e+01, - -0.12169333392140492478e+02, - -0.93418885192013316754e+01, - 0.11289150175645726648e+02, - 0.12109678185776054704e+02, - -0.16322007095724156756e+02, - -0.86869788606833839850e+01, - 0.13046286101518527190e+02, - 0.10122387646979584375e+02, - -0.95556647657543489771e+01, - -0.18043242232250097601e+02, - 0.13911483237439426830e+02, - 0.14002278336762996602e+02, - -0.58713195451611062126e+01, - -0.17801475064082456612e+02, - -0.28577051348878073078e+01, - 0.23314870891949965426e+02, - 0.45018886220243539142e+01, - -0.15072302123674839791e+02, - -0.16854013181633195728e+02, - 0.67275305109061411812e+01, - 0.24653554882185492403e+02, - 0.26119338863042362853e+01, - -0.17433703793777969082e+02, - -0.20506648197539945500e+02, - 0.25317838455253554031e+01, - 0.26604646672268149388e+02, - 0.14769703605452241035e+02, - -0.50148705270961357883e+01, - -0.28141575266751370776e+02, - -0.22091615555893699963e+02, - 0.41528455159097337202e+01, - 0.22140050386240353930e+02, - 0.34770102430673823335e+02, - 0.14441746039509332888e+02, - -0.51594473793987640775e+01, - -0.29279178027666389994e+02, - -0.42926006805556305324e+02, - -0.40397020537641232352e+02, - -0.39040616107620301989e+02, - -0.24234917231709253826e+02, - -0.18890235864715936742e+02, - -0.97488670441557108148e+01, - -0.49459874689500962219e+01, - -0.38340207526667233751e+01, - 0.92279321502848107861e-01, - -0.15659670571358772495e+01, + -0.14619767371550580037e+2, + 0.50148274504412002628e+1, + 0.13597231627127275289e+2, + -0.87913525538117820446e+1, + -0.12418521289499819815e+2, + 0.11265262493614411454e+2, + 0.99092973790489384811e+1, + -0.12169333392140492478e+2, + -0.93418885192013316754e+1, + 0.11289150175645726648e+2, + 0.12109678185776054704e+2, + -0.16322007095724156756e+2, + -0.8686978860683383985e+1, + 0.1304628610151852719e+2, + 0.10122387646979584375e+2, + -0.95556647657543489771e+1, + -0.18043242232250097601e+2, + 0.1391148323743942683e+2, + 0.14002278336762996602e+2, + -0.58713195451611062126e+1, + -0.17801475064082456612e+2, + -0.28577051348878073078e+1, + 0.23314870891949965426e+2, + 0.45018886220243539142e+1, + -0.15072302123674839791e+2, + -0.16854013181633195728e+2, + 0.67275305109061411812e+1, + 0.24653554882185492403e+2, + 0.26119338863042362853e+1, + -0.17433703793777969082e+2, + -0.205066481975399455e+2, + 0.25317838455253554031e+1, + 0.26604646672268149388e+2, + 0.14769703605452241035e+2, + -0.50148705270961357883e+1, + -0.28141575266751370776e+2, + -0.22091615555893699963e+2, + 0.41528455159097337202e+1, + 0.2214005038624035393e+2, + 0.34770102430673823335e+2, + 0.14441746039509332888e+2, + -0.51594473793987640775e+1, + -0.29279178027666389994e+2, + -0.42926006805556305324e+2, + -0.40397020537641232352e+2, + -0.39040616107620301989e+2, + -0.24234917231709253826e+2, + -0.18890235864715936742e+2, + -0.97488670441557108148e+1, + -0.49459874689500962219e+1, + -0.38340207526667233751e+1, + 0.92279321502848107861e-1, + -0.15659670571358772495e+1, 0.33554796101574813072, - -0.39889604618510321465e-01, + -0.39889604618510321465e-1, -0.46885477922426854747, 0.57364302744765871545, -0.42064210035562527024, - 0.41785302503077534353e-01, + 0.41785302503077534353e-1, 0.40787745976160516559, -0.76975301237829718559, 0.92875883114629287363, -0.83031437996562484916, 0.50908733117952809089, - -0.51386850364187622309e-01, + -0.51386850364187622309e-1, -0.41741602998077431685, 0.78997696393924166092, -0.98837274406886199696, 0.99601763565567402736, - -0.83769941167129868820, + -0.8376994116712986882, 0.57785503891160261425, -0.28252120658164592282, - 0.11787255012407921867e-01, + 0.11787255012407921867e-1, 0.20506049616923383017, -0.35905881578488191286, 0.46385474698489465029, @@ -16272,392 +16274,392 @@ function ESERK4ConstantCache(zprev) -0.51320403017531435186, 0.38654469531231394619, -0.20832021851917298383, - -0.27912614960687038845e+01, - 0.52647122608439973490e+01, - -0.26826267022813934382e+01, - -0.53613673216362921214e-01, - 0.34517902926864150182e+01, - -0.51571860516762804139e+01, - 0.59654424401022509983e+01, - -0.42670347145853559923e+01, - 0.18487633649240788891e+01, - 0.19433392862858451799e+01, - -0.46819784758887896814e+01, - 0.68848312293261351158e+01, - -0.65425859032902060619e+01, - 0.50315368120391692486e+01, - -0.14017625592214877361e+01, - -0.20165525761791447401e+01, - 0.56020352980004970433e+01, - -0.70098101573007101095e+01, - 0.71708940827827074571e+01, - -0.47083412852860515585e+01, - 0.16571627139886313529e+01, - 0.24391448156529094149e+01, - -0.50821880534437777754e+01, - 0.68598738960471044024e+01, - -0.59671403784782492963e+01, - 0.40401033441927731715e+01, + -0.27912614960687038845e+1, + 0.5264712260843997349e+1, + -0.26826267022813934382e+1, + -0.53613673216362921214e-1, + 0.34517902926864150182e+1, + -0.51571860516762804139e+1, + 0.59654424401022509983e+1, + -0.42670347145853559923e+1, + 0.18487633649240788891e+1, + 0.19433392862858451799e+1, + -0.46819784758887896814e+1, + 0.68848312293261351158e+1, + -0.65425859032902060619e+1, + 0.50315368120391692486e+1, + -0.14017625592214877361e+1, + -0.20165525761791447401e+1, + 0.56020352980004970433e+1, + -0.70098101573007101095e+1, + 0.71708940827827074571e+1, + -0.47083412852860515585e+1, + 0.16571627139886313529e+1, + 0.24391448156529094149e+1, + -0.50821880534437777754e+1, + 0.68598738960471044024e+1, + -0.59671403784782492963e+1, + 0.40401033441927731715e+1, -0.37546015254018993978, - -0.25964385683913668856e+01, - 0.52327996964992609108e+01, - -0.56217205524605367017e+01, - 0.44348165142202189415e+01, - -0.22861696406449718566e+01, - -0.26475248727397282522e+01, - 0.10523863942112940961e+01, - -0.11857603740928706060e+02, - -0.70374974592217265368e+01, - -0.23536352380500169090e+02, - -0.32073026809832498429e+02, - -0.39874019539901894404e+02, - -0.56905930523362926010e+02, - -0.43444648820870447992e+02, - -0.39682550788962927868e+02, - -0.60401868140604104696e+01, - 0.22468485933644746666e+02, - 0.33316298490133000598e+02, - 0.36518204020097009277e+02, - -0.29976682318619292111e+01, - -0.22085620431949273268e+02, - -0.32880677173447622863e+02, - -0.10988524318230613375e+02, - 0.25555481396110188541e+02, - 0.24618420624327100654e+02, - 0.79886137109462396211e+01, - -0.24963739061886350612e+02, - -0.24461562143491487831e+02, - 0.97483521506410095725e+01, - 0.23137614288119944916e+02, - 0.12394783919193445243e+02, - -0.19881494372433550666e+02, - -0.22725928628190974479e+02, - 0.13699504567193917737e+02, - 0.19323602862219676268e+02, - 0.32947139675100176603e+01, - -0.23106031161502674109e+02, - -0.10451102124735298204e+02, - 0.25111654649809697304e+02, - 0.66640628675963222705e+01, - -0.12394326568759572282e+02, - -0.16431055187327885392e+02, - 0.12034041825589131491e+02, - 0.21187629923411712696e+02, - -0.18621922322788879711e+02, - -0.11030709783353730202e+02, - 0.91904183186478078937e+01, - 0.14661144285825997713e+02, - -0.74513149657021449102e+01, - -0.20778537744641063512e+02, - 0.18410711938330649673e+02, - 0.10051806609210551358e+02, - -0.15363012587176967827e+02, - -0.56545363606881720031e+01, - 0.95878756826576410077e+01, - 0.12379231068678393513e+02, - -0.20084068341633205534e+02, - -0.30859153077331917814e+01, - 0.22245267886250484679e+02, - -0.10465535292132843281e+02, - -0.87319526842349439733e+01, - 0.41133415030637472398e+01, - 0.12599828380006570683e+02, - -0.89599323839369731104e+01, - -0.13720548793794403508e+02, - 0.22744178074198909911e+02, - -0.50064416990340872005e+01, - -0.13855699586968144743e+02, - 0.94115355210476288050e+01, - 0.69844438857022179690e+01, - -0.81902528102144813715e+01, - -0.72459322538553427862e+01, - 0.14697071037470813337e+02, + -0.25964385683913668856e+1, + 0.52327996964992609108e+1, + -0.56217205524605367017e+1, + 0.44348165142202189415e+1, + -0.22861696406449718566e+1, + -0.26475248727397282522e+1, + 0.10523863942112940961e+1, + -0.1185760374092870606e+2, + -0.70374974592217265368e+1, + -0.2353635238050016909e+2, + -0.32073026809832498429e+2, + -0.39874019539901894404e+2, + -0.5690593052336292601e+2, + -0.43444648820870447992e+2, + -0.39682550788962927868e+2, + -0.60401868140604104696e+1, + 0.22468485933644746666e+2, + 0.33316298490133000598e+2, + 0.36518204020097009277e+2, + -0.29976682318619292111e+1, + -0.22085620431949273268e+2, + -0.32880677173447622863e+2, + -0.10988524318230613375e+2, + 0.25555481396110188541e+2, + 0.24618420624327100654e+2, + 0.79886137109462396211e+1, + -0.24963739061886350612e+2, + -0.24461562143491487831e+2, + 0.97483521506410095725e+1, + 0.23137614288119944916e+2, + 0.12394783919193445243e+2, + -0.19881494372433550666e+2, + -0.22725928628190974479e+2, + 0.13699504567193917737e+2, + 0.19323602862219676268e+2, + 0.32947139675100176603e+1, + -0.23106031161502674109e+2, + -0.10451102124735298204e+2, + 0.25111654649809697304e+2, + 0.66640628675963222705e+1, + -0.12394326568759572282e+2, + -0.16431055187327885392e+2, + 0.12034041825589131491e+2, + 0.21187629923411712696e+2, + -0.18621922322788879711e+2, + -0.11030709783353730202e+2, + 0.91904183186478078937e+1, + 0.14661144285825997713e+2, + -0.74513149657021449102e+1, + -0.20778537744641063512e+2, + 0.18410711938330649673e+2, + 0.10051806609210551358e+2, + -0.15363012587176967827e+2, + -0.56545363606881720031e+1, + 0.95878756826576410077e+1, + 0.12379231068678393513e+2, + -0.20084068341633205534e+2, + -0.30859153077331917814e+1, + 0.22245267886250484679e+2, + -0.10465535292132843281e+2, + -0.87319526842349439733e+1, + 0.41133415030637472398e+1, + 0.12599828380006570683e+2, + -0.89599323839369731104e+1, + -0.13720548793794403508e+2, + 0.22744178074198909911e+2, + -0.50064416990340872005e+1, + -0.13855699586968144743e+2, + 0.9411535521047628805e+1, + 0.6984443885702217969e+1, + -0.81902528102144813715e+1, + -0.72459322538553427862e+1, + 0.14697071037470813337e+2, -0.83433605619435935452, - -0.16488150265435983499e+02, - 0.13777631231405626622e+02, - 0.59517454869102328630e+01, - -0.17953520133127941705e+02, - 0.93328976049169298790e+01, - 0.58651728289991860166e+01, - -0.74619441167153341965e+01, - -0.36837416827523208340e+01, - 0.88028705614045978933e+01, - 0.24570726750833986607e+01, - -0.17509784980725559222e+02, - 0.17055866063812256783e+02, + -0.16488150265435983499e+2, + 0.13777631231405626622e+2, + 0.5951745486910232863e+1, + -0.17953520133127941705e+2, + 0.9332897604916929879e+1, + 0.58651728289991860166e+1, + -0.74619441167153341965e+1, + -0.3683741682752320834e+1, + 0.88028705614045978933e+1, + 0.24570726750833986607e+1, + -0.17509784980725559222e+2, + 0.17055866063812256783e+2, 0.59490852849043751593, - -0.17066745144175094140e+02, - 0.16046907536581297649e+02, - -0.14074930065273842938e+01, - -0.89753374023009460103e+01, - 0.51794944950340076062e+01, - 0.46117457060872508734e+01, - -0.57891361811179784524e+01, - -0.40324674474090134169e+01, - 0.12510103299619071748e+02, - -0.76057227650409906516e+01, - -0.74727252145569744712e+01, - 0.17381914388763366475e+02, - -0.11211841494718360224e+02, - -0.55150575392673673036e+01, - 0.16914248939298374808e+02, - -0.12986802038037749796e+02, + -0.1706674514417509414e+2, + 0.16046907536581297649e+2, + -0.14074930065273842938e+1, + -0.89753374023009460103e+1, + 0.51794944950340076062e+1, + 0.46117457060872508734e+1, + -0.57891361811179784524e+1, + -0.40324674474090134169e+1, + 0.12510103299619071748e+2, + -0.76057227650409906516e+1, + -0.74727252145569744712e+1, + 0.17381914388763366475e+2, + -0.11211841494718360224e+2, + -0.55150575392673673036e+1, + 0.16914248939298374808e+2, + -0.12986802038037749796e+2, -0.79821223049958800466, - 0.10541660177296105161e+02, - -0.83629460550348433401e+01, + 0.10541660177296105161e+2, + -0.83629460550348433401e+1, -0.50203650072806271787, - 0.50342149860685942997e+01, + 0.50342149860685942997e+1, -0.65818315760983781004, - -0.61986215891262181898e+01, - 0.60104011381909936418e+01, - 0.30702215004457333869e+01, - -0.12482496864094596134e+02, - 0.11910164349173019360e+02, + -0.61986215891262181898e+1, + 0.60104011381909936418e+1, + 0.30702215004457333869e+1, + -0.12482496864094596134e+2, + 0.1191016434917301936e+2, 0.17561039507815801031, - -0.14138254394772646449e+02, - 0.17892699646609994346e+02, - -0.77834646691831625986e+01, - -0.80011258697460689859e+01, - 0.16900652368657322455e+02, - -0.12661743489163312049e+02, + -0.14138254394772646449e+2, + 0.17892699646609994346e+2, + -0.77834646691831625986e+1, + -0.80011258697460689859e+1, + 0.16900652368657322455e+2, + -0.12661743489163312049e+2, 0.17061438620763169638, - 0.98052156542744270951e+01, - -0.10051018275037701954e+02, - 0.24764201376929899645e+01, - 0.49861119991430573606e+01, - -0.60025359288430308879e+01, - 0.12247596692680580155e+01, - 0.34836063298419994716e+01, - -0.31784337434186835658e+01, - -0.12938106653536176616e+01, - 0.45329543436172494708e+01, - -0.20578140801838578078e+01, - -0.48632069552230223763e+01, - 0.99883167010456546109e+01, - -0.74982638545827642318e+01, - -0.23633674689921924106e+01, - 0.12833320354907607808e+02, - -0.15619930935663882465e+02, - 0.77178606814921630885e+01, - 0.58915192016477559989e+01, - -0.15605452109926709170e+02, - 0.14438475034911329331e+02, - -0.32285510937316792557e+01, - -0.98382058462418910949e+01, - 0.15302351415005793100e+02, - -0.92238405646866592491e+01, - -0.39956967142760060341e+01, - 0.14968575306679376524e+02, - -0.15972772235705244626e+02, - 0.63294998957588761712e+01, - 0.74433372703466371689e+01, - -0.16294979633331543312e+02, - 0.14881886581655681567e+02, - -0.48299934320448780767e+01, - -0.67603103003184870090e+01, - 0.12418955867265998094e+02, - -0.91654178492676834367e+01, + 0.98052156542744270951e+1, + -0.10051018275037701954e+2, + 0.24764201376929899645e+1, + 0.49861119991430573606e+1, + -0.60025359288430308879e+1, + 0.12247596692680580155e+1, + 0.34836063298419994716e+1, + -0.31784337434186835658e+1, + -0.12938106653536176616e+1, + 0.45329543436172494708e+1, + -0.20578140801838578078e+1, + -0.48632069552230223763e+1, + 0.99883167010456546109e+1, + -0.74982638545827642318e+1, + -0.23633674689921924106e+1, + 0.12833320354907607808e+2, + -0.15619930935663882465e+2, + 0.77178606814921630885e+1, + 0.58915192016477559989e+1, + -0.1560545210992670917e+2, + 0.14438475034911329331e+2, + -0.32285510937316792557e+1, + -0.98382058462418910949e+1, + 0.153023514150057931e+2, + -0.92238405646866592491e+1, + -0.39956967142760060341e+1, + 0.14968575306679376524e+2, + -0.15972772235705244626e+2, + 0.63294998957588761712e+1, + 0.74433372703466371689e+1, + -0.16294979633331543312e+2, + 0.14881886581655681567e+2, + -0.48299934320448780767e+1, + -0.6760310300318487009e+1, + 0.12418955867265998094e+2, + -0.91654178492676834367e+1, 0.12171760619594261532, - 0.80750206740201235789e+01, - -0.98541131095342695545e+01, - 0.42981231932516559269e+01, - 0.46292752632319693618e+01, - -0.10938792441875945016e+02, - 0.10602143010079025487e+02, - -0.39526885267214688646e+01, - -0.47640825601598901784e+01, - 0.10276593798592710272e+02, - -0.95646364300422384019e+01, - 0.35769826950764902485e+01, - 0.36060886151703712699e+01, - -0.74409191800415781515e+01, - 0.57552142441927633953e+01, - -0.12279616818850598747e+02, - 0.11595254071920328087e+02, - 0.98970079706131848241e+01, - -0.22319156673085380760e+02, - 0.20169204011700212931e+02, - -0.19940939774564618858e+01, - -0.16595409127256818493e+02, - 0.25426104722382579126e+02, - -0.14985470734467195797e+02, - -0.49768811465599904764e+01, - 0.23858934131134692080e+02, - -0.25695945225065859319e+02, - 0.12177001468023490816e+02, - 0.10241697882657904373e+02, - -0.23075258146487978905e+02, - 0.20711793684676891303e+02, - -0.26918323335381040273e+01, - -0.14315513763050764950e+02, - 0.20457723143038421654e+02, - -0.83948904304641303042e+01, - -0.95639954680481640281e+01, - 0.22303579508873571768e+02, - -0.16821716033344582542e+02, + 0.80750206740201235789e+1, + -0.98541131095342695545e+1, + 0.42981231932516559269e+1, + 0.46292752632319693618e+1, + -0.10938792441875945016e+2, + 0.10602143010079025487e+2, + -0.39526885267214688646e+1, + -0.47640825601598901784e+1, + 0.10276593798592710272e+2, + -0.95646364300422384019e+1, + 0.35769826950764902485e+1, + 0.36060886151703712699e+1, + -0.74409191800415781515e+1, + 0.57552142441927633953e+1, + -0.12279616818850598747e+2, + 0.11595254071920328087e+2, + 0.98970079706131848241e+1, + -0.2231915667308538076e+2, + 0.20169204011700212931e+2, + -0.19940939774564618858e+1, + -0.16595409127256818493e+2, + 0.25426104722382579126e+2, + -0.14985470734467195797e+2, + -0.49768811465599904764e+1, + 0.2385893413113469208e+2, + -0.25695945225065859319e+2, + 0.12177001468023490816e+2, + 0.10241697882657904373e+2, + -0.23075258146487978905e+2, + 0.20711793684676891303e+2, + -0.26918323335381040273e+1, + -0.1431551376305076495e+2, + 0.20457723143038421654e+2, + -0.83948904304641303042e+1, + -0.95639954680481640281e+1, + 0.22303579508873571768e+2, + -0.16821716033344582542e+2, -0.15096707914905879711, - 0.18699999582827445010e+02, - -0.21847972257083561942e+02, - 0.10370127387380584594e+02, - 0.91202421159124966721e+01, - -0.17928057082395078226e+02, - 0.11789999004019012574e+02, - 0.67199693372914177658e+01, - -0.18633985611462026810e+02, - 0.15528631589431064697e+02, - 0.42381083602289821854e+01, - -0.22022290365271107504e+02, - 0.25181505799464634521e+02, - -0.67010986106411092322e+01, - -0.16659318033083756916e+02, - 0.28702766750521078620e+02, - -0.16029941318387511018e+02, - -0.86824005141087177151e+01, - 0.27599447331057486821e+02, - -0.21253022380933298763e+02, - -0.31719986751466113795e+01, - 0.28157550520203574962e+02, - -0.29101182436229386497e+02, - 0.68598969779277654268e+01, - 0.23359891933125197738e+02, - -0.33487947848195027234e+02, - 0.18116623374519491563e+02, - 0.11603089692401141519e+02, - -0.26746626387335794561e+02, - 0.17695638217812575732e+02, - 0.80303952565688696552e+01, - -0.22033113328731548819e+02, - 0.12931813284325867741e+02, - 0.13092493846334047447e+02, - -0.27099753014739949464e+02, - 0.16449915002910156403e+02, - 0.12507814110205144331e+02, - -0.28877287262889140607e+02, - 0.18278655495337037706e+02, - 0.12337925460655004173e+02, - -0.29535738429785737935e+02, - 0.17162874052966479610e+02, - 0.16771534282427147389e+02, - -0.36007222194214499211e+02, - 0.22861284528765324353e+02, - 0.13412147394306247250e+02, - -0.34506845986390707992e+02, - 0.22845713684910858632e+02, - 0.10165851351049873585e+02, - -0.25696968640330318578e+02, - 0.99379156540253497099e+01, - 0.20403247081949491104e+02, - -0.26034429239464408568e+02, - 0.73614682380619023139e-01, - 0.32270901877606455344e+02, - -0.30760661336589514292e+02, - -0.30376922365854022168e+01, - 0.35129089262325990717e+02, - -0.26680523940232614422e+02, - -0.10218694809951990976e+02, - 0.34959534385904191822e+02, - -0.15811826450629997254e+02, - -0.21425160857090734368e+02, - 0.33367111728133700410e+02, - -0.26131097035816077678e+01, - -0.29511403744509557612e+02, - 0.23527154615349186173e+02, - 0.16424792189413228272e+02, - -0.35703462665912240936e+02, - 0.85238017783543327255e+01, - 0.35336276326215504184e+02, - -0.36927177792816330282e+02, - -0.47487245933226400751e+01, - 0.38302985255671941900e+02, - -0.18248756460501429189e+02, - -0.22820584425259891503e+02, - 0.26988456847896902246e+02, - 0.16025952953854083916e+02, - -0.41832857913532670580e+02, - 0.11043763014470229677e+02, - 0.39360581673440009354e+02, - -0.36333543721303769303e+02, - -0.13229708711794291531e+02, - 0.38128903328917274962e+02, + 0.1869999958282744501e+2, + -0.21847972257083561942e+2, + 0.10370127387380584594e+2, + 0.91202421159124966721e+1, + -0.17928057082395078226e+2, + 0.11789999004019012574e+2, + 0.67199693372914177658e+1, + -0.1863398561146202681e+2, + 0.15528631589431064697e+2, + 0.42381083602289821854e+1, + -0.22022290365271107504e+2, + 0.25181505799464634521e+2, + -0.67010986106411092322e+1, + -0.16659318033083756916e+2, + 0.2870276675052107862e+2, + -0.16029941318387511018e+2, + -0.86824005141087177151e+1, + 0.27599447331057486821e+2, + -0.21253022380933298763e+2, + -0.31719986751466113795e+1, + 0.28157550520203574962e+2, + -0.29101182436229386497e+2, + 0.68598969779277654268e+1, + 0.23359891933125197738e+2, + -0.33487947848195027234e+2, + 0.18116623374519491563e+2, + 0.11603089692401141519e+2, + -0.26746626387335794561e+2, + 0.17695638217812575732e+2, + 0.80303952565688696552e+1, + -0.22033113328731548819e+2, + 0.12931813284325867741e+2, + 0.13092493846334047447e+2, + -0.27099753014739949464e+2, + 0.16449915002910156403e+2, + 0.12507814110205144331e+2, + -0.28877287262889140607e+2, + 0.18278655495337037706e+2, + 0.12337925460655004173e+2, + -0.29535738429785737935e+2, + 0.1716287405296647961e+2, + 0.16771534282427147389e+2, + -0.36007222194214499211e+2, + 0.22861284528765324353e+2, + 0.1341214739430624725e+2, + -0.34506845986390707992e+2, + 0.22845713684910858632e+2, + 0.10165851351049873585e+2, + -0.25696968640330318578e+2, + 0.99379156540253497099e+1, + 0.20403247081949491104e+2, + -0.26034429239464408568e+2, + 0.73614682380619023139e-1, + 0.32270901877606455344e+2, + -0.30760661336589514292e+2, + -0.30376922365854022168e+1, + 0.35129089262325990717e+2, + -0.26680523940232614422e+2, + -0.10218694809951990976e+2, + 0.34959534385904191822e+2, + -0.15811826450629997254e+2, + -0.21425160857090734368e+2, + 0.3336711172813370041e+2, + -0.26131097035816077678e+1, + -0.29511403744509557612e+2, + 0.23527154615349186173e+2, + 0.16424792189413228272e+2, + -0.35703462665912240936e+2, + 0.85238017783543327255e+1, + 0.35336276326215504184e+2, + -0.36927177792816330282e+2, + -0.47487245933226400751e+1, + 0.383029852556719419e+2, + -0.18248756460501429189e+2, + -0.22820584425259891503e+2, + 0.26988456847896902246e+2, + 0.16025952953854083916e+2, + -0.4183285791353267058e+2, + 0.11043763014470229677e+2, + 0.39360581673440009354e+2, + -0.36333543721303769303e+2, + -0.13229708711794291531e+2, + 0.38128903328917274962e+2, 0.35769138462574645576, - -0.38381946599081757654e+02, - 0.14626983250269484316e+02, - 0.39332973066957201524e+02, - -0.35319165274072247485e+02, - -0.21711215141186503530e+02, - 0.44060483329283719911e+02, - 0.64526628476437029036e+01, - -0.43141577716068660209e+02, - 0.44201903598692604547e+01, - 0.46092683223484762323e+02, - -0.16240687105770803100e+02, - -0.42934707374661194024e+02, - 0.27738094286413570444e+02, - 0.39649652193660983812e+02, - -0.35559468505633034852e+02, - -0.32116172764138028128e+02, - 0.38636437346821182359e+02, - 0.31418164204083218749e+02, - -0.38934236111108916134e+02, - -0.35122277849326906107e+02, - 0.48734435379484871476e+02, - 0.30039039973357219537e+02, - -0.41785674809071736036e+02, - -0.34941763962424403189e+02, - 0.35382869846448450346e+02, - 0.51720588265461870492e+02, - -0.38723506112747962504e+02, - -0.48930242157893772514e+02, - 0.20254322802066642595e+02, - 0.58416314855617848423e+02, - 0.53439627087557939333e+01, - -0.69639605998749530613e+02, - -0.19089898360664914634e+02, - 0.51389114836096673855e+02, - 0.52990727795822131441e+02, - -0.22722906600850294012e+02, - -0.76317270949008246816e+02, - -0.11122376735738404463e+02, - 0.57552349576226802697e+02, - 0.65680571760160077588e+02, - -0.10151032119839555889e+02, - -0.81612382564460119738e+02, - -0.51199936533893186663e+02, - 0.19156382318626619110e+02, - 0.88837615877297679390e+02, - 0.69475622117281560008e+02, - -0.97620006198015065735e+01, - -0.75914392827883872883e+02, - -0.10582848004184268120e+03, - -0.50759791819749310093e+02, - 0.19180748497747810433e+02, - 0.93385550528977560703e+02, - 0.13543417348141136358e+03, - 0.13279911156570352659e+03, - 0.12075611707316471666e+03, - 0.81397962645056409769e+02, - 0.57685022634360031191e+02, - 0.32524078513974906457e+02, - 0.15872015258948684036e+02, - 0.11260200000267005294e+02, - 0.11148996598367511002e+01, - 0.37362479975649667274e+01, + -0.38381946599081757654e+2, + 0.14626983250269484316e+2, + 0.39332973066957201524e+2, + -0.35319165274072247485e+2, + -0.2171121514118650353e+2, + 0.44060483329283719911e+2, + 0.64526628476437029036e+1, + -0.43141577716068660209e+2, + 0.44201903598692604547e+1, + 0.46092683223484762323e+2, + -0.162406871057708031e+2, + -0.42934707374661194024e+2, + 0.27738094286413570444e+2, + 0.39649652193660983812e+2, + -0.35559468505633034852e+2, + -0.32116172764138028128e+2, + 0.38636437346821182359e+2, + 0.31418164204083218749e+2, + -0.38934236111108916134e+2, + -0.35122277849326906107e+2, + 0.48734435379484871476e+2, + 0.30039039973357219537e+2, + -0.41785674809071736036e+2, + -0.34941763962424403189e+2, + 0.35382869846448450346e+2, + 0.51720588265461870492e+2, + -0.38723506112747962504e+2, + -0.48930242157893772514e+2, + 0.20254322802066642595e+2, + 0.58416314855617848423e+2, + 0.53439627087557939333e+1, + -0.69639605998749530613e+2, + -0.19089898360664914634e+2, + 0.51389114836096673855e+2, + 0.52990727795822131441e+2, + -0.22722906600850294012e+2, + -0.76317270949008246816e+2, + -0.11122376735738404463e+2, + 0.57552349576226802697e+2, + 0.65680571760160077588e+2, + -0.10151032119839555889e+2, + -0.81612382564460119738e+2, + -0.51199936533893186663e+2, + 0.1915638231862661911e+2, + 0.8883761587729767939e+2, + 0.69475622117281560008e+2, + -0.97620006198015065735e+1, + -0.75914392827883872883e+2, + -0.1058284800418426812e+3, + -0.50759791819749310093e+2, + 0.19180748497747810433e+2, + 0.93385550528977560703e+2, + 0.13543417348141136358e+3, + 0.13279911156570352659e+3, + 0.12075611707316471666e+3, + 0.81397962645056409769e+2, + 0.57685022634360031191e+2, + 0.32524078513974906457e+2, + 0.15872015258948684036e+2, + 0.11260200000267005294e+2, + 0.11148996598367511002e+1, + 0.37362479975649667274e+1, -0.27160241745633162402, -0.12317156466359056866, - 0.13760280626347654032e+01, - -0.16546194144707120355e+01, - 0.14477454355471162106e+01, + 0.13760280626347654032e+1, + -0.16546194144707120355e+1, + 0.14477454355471162106e+1, -0.73731704246473106501, -0.16613561030715603972, 0.96427006850836827212, - -0.14300124801559119803e+01, - 0.14437466144743582586e+01, - -0.10524900274316575377e+01, + -0.14300124801559119803e+1, + 0.14437466144743582586e+1, + -0.10524900274316575377e+1, 0.39593816256859687419, 0.30935764693616563115, -0.88039695428272846112, - 0.11821870665311611237e+01, - -0.11913113427247836729e+01, + 0.11821870665311611237e+1, + -0.11913113427247836729e+1, 0.95334623270538110251, -0.58411941760950780722, 0.19504600241555505868, @@ -16672,381 +16674,381 @@ function ESERK4ConstantCache(zprev) 0.41214520061678627805, -0.32721825593474751503, 0.18218861883418130398, - 0.40241409584715421843e+01, - -0.75793933571465279542e+01, - 0.38920636402964876588e+01, + 0.40241409584715421843e+1, + -0.75793933571465279542e+1, + 0.38920636402964876588e+1, -0.11790968271312865512, - -0.47041895369087791678e+01, - 0.71033407708103490918e+01, - -0.84189157332745434559e+01, - 0.61812172944974896893e+01, - -0.30699118865991548155e+01, - -0.20841761019701134927e+01, - 0.57231839430450479611e+01, - -0.88194140143634811579e+01, - 0.83731039249043863748e+01, - -0.65160331318294826275e+01, - 0.16846337833253426375e+01, - 0.26969840057609903994e+01, - -0.74224795757714145950e+01, - 0.90604173331741471031e+01, - -0.91709498882572546563e+01, - 0.56531198862127007843e+01, - -0.15718803282307169944e+01, - -0.39353373925936567801e+01, - 0.72088392220148849177e+01, - -0.93424802954969621283e+01, - 0.76797450339438029232e+01, - -0.47890779029496926000e+01, + -0.47041895369087791678e+1, + 0.71033407708103490918e+1, + -0.84189157332745434559e+1, + 0.61812172944974896893e+1, + -0.30699118865991548155e+1, + -0.20841761019701134927e+1, + 0.57231839430450479611e+1, + -0.88194140143634811579e+1, + 0.83731039249043863748e+1, + -0.65160331318294826275e+1, + 0.16846337833253426375e+1, + 0.26969840057609903994e+1, + -0.7422479575771414595e+1, + 0.90604173331741471031e+1, + -0.91709498882572546563e+1, + 0.56531198862127007843e+1, + -0.15718803282307169944e+1, + -0.39353373925936567801e+1, + 0.72088392220148849177e+1, + -0.93424802954969621283e+1, + 0.76797450339438029232e+1, + -0.47890779029496926e+1, -0.46484672138898802674, - 0.44563606465424463465e+01, - -0.79024726144170038822e+01, - 0.80082696638785613175e+01, - -0.59339022121865312442e+01, - 0.26347745807768414572e+01, - 0.46652940171475281161e+01, - -0.18867228976445056254e+01, - 0.17969048336243744757e+02, - 0.11091929352297933420e+02, - 0.35406198430004799604e+02, - 0.49185991365935031183e+02, - 0.60770235104551851180e+02, - 0.86270058387548942846e+02, - 0.67039769751863460101e+02, - 0.59374823825697227164e+02, - 0.10295937883672415580e+02, - -0.35060720891249040676e+02, - -0.50470785584724225714e+02, - -0.55282970463654983462e+02, - 0.35233234953383858468e+01, - 0.35226200484942637559e+02, - 0.48257042057390862055e+02, - 0.18520398565493703558e+02, - -0.40327115077879248872e+02, - -0.36789114333955069469e+02, - -0.12119545034279868290e+02, - 0.37223095172813387421e+02, - 0.38667511079059579515e+02, - -0.16549241158313339639e+02, - -0.33605834862531587248e+02, - -0.20196562006125848399e+02, - 0.31027330444921268793e+02, - 0.34559044574354956580e+02, - -0.21428207359589237058e+02, - -0.28453298447355777512e+02, - -0.62092145954151760634e+01, - 0.36307952245099642141e+02, - 0.15141872915900638219e+02, - -0.37955707846390247084e+02, - -0.99678674350990981168e+01, - 0.18273084462895273106e+02, - 0.25898948117150077053e+02, - -0.19245257018107963631e+02, - -0.31545269128955119697e+02, - 0.27940225255225147549e+02, - 0.16868165406396865791e+02, - -0.13730875632589791380e+02, - -0.22843646276165646469e+02, - 0.11915676457322133430e+02, - 0.31196726341632931678e+02, - -0.27817501322125405494e+02, - -0.15284008719068989279e+02, - 0.23133054453841211284e+02, - 0.90149404621280790906e+01, - -0.14976562325094851857e+02, - -0.18709248523871959691e+02, - 0.30785770005064126309e+02, - 0.41183641414688025861e+01, - -0.32960526257152245933e+02, - 0.14786132255637109978e+02, - 0.14469532056643030771e+02, - -0.71960689938570974178e+01, - -0.18746008527381455622e+02, - 0.13827504648619440175e+02, - 0.20040492691473254183e+02, - -0.33176342222390125869e+02, - 0.57142429438830841804e+01, - 0.23171940128716844498e+02, - -0.16228581691732120618e+02, - -0.92441873723463316992e+01, - 0.11799429650905377542e+02, - 0.10873732862482485828e+02, - -0.21403057380707597446e+02, + 0.44563606465424463465e+1, + -0.79024726144170038822e+1, + 0.80082696638785613175e+1, + -0.59339022121865312442e+1, + 0.26347745807768414572e+1, + 0.46652940171475281161e+1, + -0.18867228976445056254e+1, + 0.17969048336243744757e+2, + 0.1109192935229793342e+2, + 0.35406198430004799604e+2, + 0.49185991365935031183e+2, + 0.6077023510455185118e+2, + 0.86270058387548942846e+2, + 0.67039769751863460101e+2, + 0.59374823825697227164e+2, + 0.1029593788367241558e+2, + -0.35060720891249040676e+2, + -0.50470785584724225714e+2, + -0.55282970463654983462e+2, + 0.35233234953383858468e+1, + 0.35226200484942637559e+2, + 0.48257042057390862055e+2, + 0.18520398565493703558e+2, + -0.40327115077879248872e+2, + -0.36789114333955069469e+2, + -0.1211954503427986829e+2, + 0.37223095172813387421e+2, + 0.38667511079059579515e+2, + -0.16549241158313339639e+2, + -0.33605834862531587248e+2, + -0.20196562006125848399e+2, + 0.31027330444921268793e+2, + 0.3455904457435495658e+2, + -0.21428207359589237058e+2, + -0.28453298447355777512e+2, + -0.62092145954151760634e+1, + 0.36307952245099642141e+2, + 0.15141872915900638219e+2, + -0.37955707846390247084e+2, + -0.99678674350990981168e+1, + 0.18273084462895273106e+2, + 0.25898948117150077053e+2, + -0.19245257018107963631e+2, + -0.31545269128955119697e+2, + 0.27940225255225147549e+2, + 0.16868165406396865791e+2, + -0.1373087563258979138e+2, + -0.22843646276165646469e+2, + 0.1191567645732213343e+2, + 0.31196726341632931678e+2, + -0.27817501322125405494e+2, + -0.15284008719068989279e+2, + 0.23133054453841211284e+2, + 0.90149404621280790906e+1, + -0.14976562325094851857e+2, + -0.18709248523871959691e+2, + 0.30785770005064126309e+2, + 0.41183641414688025861e+1, + -0.32960526257152245933e+2, + 0.14786132255637109978e+2, + 0.14469532056643030771e+2, + -0.71960689938570974178e+1, + -0.18746008527381455622e+2, + 0.13827504648619440175e+2, + 0.20040492691473254183e+2, + -0.33176342222390125869e+2, + 0.57142429438830841804e+1, + 0.23171940128716844498e+2, + -0.16228581691732120618e+2, + -0.92441873723463316992e+1, + 0.11799429650905377542e+2, + 0.10873732862482485828e+2, + -0.21403057380707597446e+2, -0.40163155272111983329, - 0.27207883576576950446e+02, - -0.23168845430306749478e+02, - -0.71456081365862411658e+01, - 0.25961451863041624222e+02, - -0.13548331553136691241e+02, - -0.88321767007633198432e+01, - 0.10547082107163983977e+02, - 0.69669557583602896855e+01, - -0.15047839643900626783e+02, - -0.21224187594501615628e+01, - 0.25327781124070245511e+02, - -0.25107621707185359128e+02, - -0.12233465602341144773e+01, - 0.25756016568665575761e+02, - -0.23743451626136884869e+02, - 0.11431854106421512896e+01, - 0.14757482564018769011e+02, - -0.88586429708194653898e+01, - -0.63411592567655610253e+01, - 0.85002875156870469908e+01, - 0.60802515077525862708e+01, - -0.18676963538347038707e+02, - 0.10987364333897351898e+02, - 0.12061339603806541021e+02, - -0.27104314015229906687e+02, - 0.17534478399346944855e+02, - 0.81734806424820209969e+01, - -0.25772073819852792553e+02, - 0.19964531932256196711e+02, + 0.27207883576576950446e+2, + -0.23168845430306749478e+2, + -0.71456081365862411658e+1, + 0.25961451863041624222e+2, + -0.13548331553136691241e+2, + -0.88321767007633198432e+1, + 0.10547082107163983977e+2, + 0.69669557583602896855e+1, + -0.15047839643900626783e+2, + -0.21224187594501615628e+1, + 0.25327781124070245511e+2, + -0.25107621707185359128e+2, + -0.12233465602341144773e+1, + 0.25756016568665575761e+2, + -0.23743451626136884869e+2, + 0.11431854106421512896e+1, + 0.14757482564018769011e+2, + -0.88586429708194653898e+1, + -0.63411592567655610253e+1, + 0.85002875156870469908e+1, + 0.60802515077525862708e+1, + -0.18676963538347038707e+2, + 0.10987364333897351898e+2, + 0.12061339603806541021e+2, + -0.27104314015229906687e+2, + 0.17534478399346944855e+2, + 0.81734806424820209969e+1, + -0.25772073819852792553e+2, + 0.19964531932256196711e+2, 0.93728757520920902291, - -0.15776889107419458824e+02, - 0.12524064687449342870e+02, + -0.15776889107419458824e+2, + 0.1252406468744934287e+2, 0.86102405099026280144, - -0.76382709928830667678e+01, + -0.76382709928830667678e+1, 0.86611575956460773451, - 0.96185714094347254388e+01, - -0.92947617628583358851e+01, - -0.46582380125438822560e+01, - 0.19161513339799473243e+02, - -0.18466417601333244392e+02, + 0.96185714094347254388e+1, + -0.92947617628583358851e+1, + -0.4658238012543882256e+1, + 0.19161513339799473243e+2, + -0.18466417601333244392e+2, 0.18921738205772825614, - 0.21016851551936806430e+02, - -0.26773057011563601293e+02, - 0.11507205785301568568e+02, - 0.12309907272807551593e+02, - -0.25584094950588681883e+02, - 0.18829107136786227272e+02, + 0.2101685155193680643e+2, + -0.26773057011563601293e+2, + 0.11507205785301568568e+2, + 0.12309907272807551593e+2, + -0.25584094950588681883e+2, + 0.18829107136786227272e+2, 0.44433542521371133249, - -0.15786273116431640773e+02, - 0.16160170120502993285e+02, - -0.44733686197997784006e+01, - -0.71778495899645342604e+01, - 0.90917775363565667135e+01, - -0.22083469845493057804e+01, - -0.46143467510948035226e+01, - 0.39007733545053691060e+01, - 0.30025513848802942718e+01, - -0.78498924888418430967e+01, - 0.38133023124822242877e+01, - 0.71294077902455805784e+01, - -0.15409456966388267674e+02, - 0.12073931535252617309e+02, - 0.25810178779169561381e+01, - -0.18324524217284196226e+02, - 0.22560465291772000995e+02, - -0.10726553815370136746e+02, - -0.96165208184408488279e+01, - 0.23888260594429159056e+02, - -0.21531421161282409571e+02, - 0.39114592398927987560e+01, - 0.16402856791397500302e+02, - -0.24930710013326503827e+02, - 0.15623444461885432233e+02, - 0.48093247744597160676e+01, - -0.22029355732414096281e+02, - 0.24194054312261187079e+02, - -0.10177982169278697810e+02, - -0.10194113550689660741e+02, - 0.23222741545485877879e+02, - -0.20841370586348219263e+02, - 0.55620175286352280253e+01, - 0.11796110334003234499e+02, - -0.19897514765392212865e+02, - 0.14276388854294976838e+02, + -0.15786273116431640773e+2, + 0.16160170120502993285e+2, + -0.44733686197997784006e+1, + -0.71778495899645342604e+1, + 0.90917775363565667135e+1, + -0.22083469845493057804e+1, + -0.46143467510948035226e+1, + 0.3900773354505369106e+1, + 0.30025513848802942718e+1, + -0.78498924888418430967e+1, + 0.38133023124822242877e+1, + 0.71294077902455805784e+1, + -0.15409456966388267674e+2, + 0.12073931535252617309e+2, + 0.25810178779169561381e+1, + -0.18324524217284196226e+2, + 0.22560465291772000995e+2, + -0.10726553815370136746e+2, + -0.96165208184408488279e+1, + 0.23888260594429159056e+2, + -0.21531421161282409571e+2, + 0.3911459239892798756e+1, + 0.16402856791397500302e+2, + -0.24930710013326503827e+2, + 0.15623444461885432233e+2, + 0.48093247744597160676e+1, + -0.22029355732414096281e+2, + 0.24194054312261187079e+2, + -0.1017798216927869781e+2, + -0.10194113550689660741e+2, + 0.23222741545485877879e+2, + -0.20841370586348219263e+2, + 0.55620175286352280253e+1, + 0.11796110334003234499e+2, + -0.19897514765392212865e+2, + 0.14276388854294976838e+2, 0.20655308279672840444, - -0.13333133575925211645e+02, - 0.16516034305098667545e+02, - -0.82887983081753215941e+01, - -0.53444722441395633439e+01, - 0.15247138774265204475e+02, - -0.15233643123192514679e+02, - 0.57288251969858743351e+01, - 0.68979284247011198872e+01, - -0.14719695669462034004e+02, - 0.13224758972776992749e+02, - -0.39235093993108272059e+01, - -0.69412984153473011872e+01, - 0.12461412828774021122e+02, - -0.93822335715602616091e+01, - 0.13742048715194254527e+02, - -0.10059602345514429445e+02, - -0.15655633593109447688e+02, - 0.28354100348747124372e+02, - -0.23135899717240722140e+02, - -0.48285875277707934750, - 0.22458832148420594166e+02, - -0.31284214533933905500e+02, - 0.16542957261424398041e+02, - 0.81474084668099617801e+01, - -0.29723529255518101877e+02, - 0.29288199857416270078e+02, - -0.10893303091943630889e+02, - -0.16420847919816036864e+02, - 0.29524169082843684464e+02, - -0.23045765414808624172e+02, - -0.18686534129346259459e+01, - 0.22942988978412692802e+02, - -0.28214489375472595611e+02, - 0.98037558106057769436e+01, - 0.14795074366064449478e+02, - -0.30696093284653706235e+02, - 0.21743574962011582130e+02, - 0.18852310845386048843e+01, - -0.26124605699361445943e+02, - 0.28633806013095966847e+02, - -0.11222176308522559651e+02, - -0.16147843222584640444e+02, - 0.27973924231784724981e+02, - -0.18352548719910519281e+02, - -0.87385170977594768260e+01, - 0.27307328348515635952e+02, - -0.25048571157864476078e+02, + -0.13333133575925211645e+2, + 0.16516034305098667545e+2, + -0.82887983081753215941e+1, + -0.53444722441395633439e+1, + 0.15247138774265204475e+2, + -0.15233643123192514679e+2, + 0.57288251969858743351e+1, + 0.68979284247011198872e+1, + -0.14719695669462034004e+2, + 0.13224758972776992749e+2, + -0.39235093993108272059e+1, + -0.69412984153473011872e+1, + 0.12461412828774021122e+2, + -0.93822335715602616091e+1, + 0.13742048715194254527e+2, + -0.10059602345514429445e+2, + -0.15655633593109447688e+2, + 0.28354100348747124372e+2, + -0.2313589971724072214e+2, + -0.4828587527770793475, + 0.22458832148420594166e+2, + -0.312842145339339055e+2, + 0.16542957261424398041e+2, + 0.81474084668099617801e+1, + -0.29723529255518101877e+2, + 0.29288199857416270078e+2, + -0.10893303091943630889e+2, + -0.16420847919816036864e+2, + 0.29524169082843684464e+2, + -0.23045765414808624172e+2, + -0.18686534129346259459e+1, + 0.22942988978412692802e+2, + -0.28214489375472595611e+2, + 0.98037558106057769436e+1, + 0.14795074366064449478e+2, + -0.30696093284653706235e+2, + 0.2174357496201158213e+2, + 0.18852310845386048843e+1, + -0.26124605699361445943e+2, + 0.28633806013095966847e+2, + -0.11222176308522559651e+2, + -0.16147843222584640444e+2, + 0.27973924231784724981e+2, + -0.18352548719910519281e+2, + -0.8738517097759476826e+1, + 0.27307328348515635952e+2, + -0.25048571157864476078e+2, -0.92324804294632079049, - 0.26136981632780507567e+02, - -0.33080493562305925082e+02, - 0.11226362638192492582e+02, - 0.18640071274971603543e+02, - -0.35547806804884402254e+02, - 0.21169624282000079063e+02, - 0.93980303211569804489e+01, - -0.34036083342975096855e+02, - 0.27499278310297746941e+02, - 0.18957596497458555351e+01, - -0.32924248338016781190e+02, - 0.34722985492892938453e+02, - -0.83832685423592430141e+01, - -0.27544396010043293188e+02, - 0.38284987995427592011e+02, - -0.18048235599120157957e+02, - -0.18576547362575315248e+02, - 0.34994978037163711804e+02, - -0.20169830255147910947e+02, - -0.14984755629476614658e+02, - 0.33186089734411531538e+02, - -0.20003861138427552646e+02, - -0.15778494255545965075e+02, - 0.35759836303812996050e+02, - -0.22908893258478737920e+02, - -0.14796833995062467437e+02, - 0.37017369611785397865e+02, - -0.24383326407921547485e+02, - -0.14995976877154385321e+02, - 0.38289602120774887339e+02, - -0.24290583014744999701e+02, - -0.17700799198161828230e+02, - 0.41962564522412357348e+02, - -0.26270586761611543380e+02, - -0.17791939075537964499e+02, - 0.41843643941651798457e+02, - -0.24504243189144137460e+02, - -0.18682920053825707640e+02, - 0.37470802241450172687e+02, - -0.14630193688471781144e+02, - -0.27376686051822282764e+02, - 0.36862121546593542121e+02, - -0.42595353968844298365e+01, - -0.38171695447315059369e+02, - 0.38113471401472196476e+02, - 0.32878067442891549810e+01, - -0.43227685462740517153e+02, - 0.32183278365973102098e+02, - 0.14387314791113631429e+02, - -0.44905319021038842209e+02, - 0.19281596794987471810e+02, - 0.28734917985009417407e+02, - -0.43325879142490251184e+02, - 0.24899886838582130366e+01, - 0.39901577461522727219e+02, - -0.32474629968062693308e+02, - -0.19777276078244323543e+02, - 0.46337889102291789811e+02, - -0.13422256590848132163e+02, - -0.41564719283653573711e+02, - 0.43455775721607281525e+02, - 0.88024764768031396045e+01, - -0.49552299942610886774e+02, - 0.21090766760568687488e+02, - 0.33693086930326970219e+02, - -0.39653041011852295128e+02, - -0.16678577266603902274e+02, - 0.52114269295852771791e+02, - -0.15242622584237766503e+02, - -0.47360022589048398345e+02, - 0.42468094507545124827e+02, - 0.20759392364725758995e+02, - -0.51086437752654887845e+02, + 0.26136981632780507567e+2, + -0.33080493562305925082e+2, + 0.11226362638192492582e+2, + 0.18640071274971603543e+2, + -0.35547806804884402254e+2, + 0.21169624282000079063e+2, + 0.93980303211569804489e+1, + -0.34036083342975096855e+2, + 0.27499278310297746941e+2, + 0.18957596497458555351e+1, + -0.3292424833801678119e+2, + 0.34722985492892938453e+2, + -0.83832685423592430141e+1, + -0.27544396010043293188e+2, + 0.38284987995427592011e+2, + -0.18048235599120157957e+2, + -0.18576547362575315248e+2, + 0.34994978037163711804e+2, + -0.20169830255147910947e+2, + -0.14984755629476614658e+2, + 0.33186089734411531538e+2, + -0.20003861138427552646e+2, + -0.15778494255545965075e+2, + 0.3575983630381299605e+2, + -0.2290889325847873792e+2, + -0.14796833995062467437e+2, + 0.37017369611785397865e+2, + -0.24383326407921547485e+2, + -0.14995976877154385321e+2, + 0.38289602120774887339e+2, + -0.24290583014744999701e+2, + -0.1770079919816182823e+2, + 0.41962564522412357348e+2, + -0.2627058676161154338e+2, + -0.17791939075537964499e+2, + 0.41843643941651798457e+2, + -0.2450424318914413746e+2, + -0.1868292005382570764e+2, + 0.37470802241450172687e+2, + -0.14630193688471781144e+2, + -0.27376686051822282764e+2, + 0.36862121546593542121e+2, + -0.42595353968844298365e+1, + -0.38171695447315059369e+2, + 0.38113471401472196476e+2, + 0.3287806744289154981e+1, + -0.43227685462740517153e+2, + 0.32183278365973102098e+2, + 0.14387314791113631429e+2, + -0.44905319021038842209e+2, + 0.1928159679498747181e+2, + 0.28734917985009417407e+2, + -0.43325879142490251184e+2, + 0.24899886838582130366e+1, + 0.39901577461522727219e+2, + -0.32474629968062693308e+2, + -0.19777276078244323543e+2, + 0.46337889102291789811e+2, + -0.13422256590848132163e+2, + -0.41564719283653573711e+2, + 0.43455775721607281525e+2, + 0.88024764768031396045e+1, + -0.49552299942610886774e+2, + 0.21090766760568687488e+2, + 0.33693086930326970219e+2, + -0.39653041011852295128e+2, + -0.16678577266603902274e+2, + 0.52114269295852771791e+2, + -0.15242622584237766503e+2, + -0.47360022589048398345e+2, + 0.42468094507545124827e+2, + 0.20759392364725758995e+2, + -0.51086437752654887845e+2, -0.62546861240215045896, - 0.51441370134020246496e+02, - -0.21914887278826920891e+02, - -0.47642682452221734479e+02, - 0.43631846061321326147e+02, - 0.28073673134937042306e+02, - -0.55385474072129703416e+02, - -0.10327716739338516305e+02, - 0.57412307707357662423e+02, - -0.68993877788461697165e+01, - -0.59017129010631521169e+02, - 0.21351194091794340579e+02, - 0.54552285394341083702e+02, - -0.35417856758951543839e+02, - -0.50532912348626609855e+02, - 0.44701776469970887717e+02, - 0.42336884199053578470e+02, - -0.50046461638089112967e+02, - -0.41289872960396934332e+02, - 0.52363666633432472963e+02, - 0.41833206396916700953e+02, - -0.59219619833441591084e+02, - -0.41082582346203508905e+02, - 0.54254702177222860371e+02, - 0.46738534139906505516e+02, - -0.49377330619508818188e+02, - -0.61505656337083358665e+02, - 0.45028961232785448487e+02, - 0.66085023845827308264e+02, - -0.26741850309270816410e+02, - -0.77064847499756069737e+02, - -0.28812035331180094744e+01, - 0.84722296070969036919e+02, - 0.28733714457563145572e+02, - -0.68433195728252002255e+02, - -0.68224534306140810713e+02, - 0.31595049250661386253e+02, - 0.94313624561929543688e+02, - 0.18238727398835766991e+02, - -0.76774710376240321352e+02, - -0.83741021006766473533e+02, - 0.14647904557456328689e+02, - 0.10151060827577879309e+03, - 0.70014091065170418915e+02, - -0.28312621577710558540e+02, - -0.11216392681844281753e+03, - -0.89136303627834678309e+02, - 0.10141624423378930331e+02, - 0.10156398124266992511e+03, - 0.13162361173950776561e+03, - 0.69011682455640425360e+02, - -0.26799679127270099599e+02, - -0.11998731013461238604e+03, - -0.17228887241575139910e+03, - -0.17388652417950456197e+03, - -0.15171852626577469891e+03, - -0.10768604142597035889e+03, - -0.72314754766256797325e+02, - -0.42228003183410926624e+02, - -0.21284103907873028305e+02, - -0.12801277117370752023e+02, - -0.32856402265170592258e+01, - -0.33523202540774041935e+01, + 0.51441370134020246496e+2, + -0.21914887278826920891e+2, + -0.47642682452221734479e+2, + 0.43631846061321326147e+2, + 0.28073673134937042306e+2, + -0.55385474072129703416e+2, + -0.10327716739338516305e+2, + 0.57412307707357662423e+2, + -0.68993877788461697165e+1, + -0.59017129010631521169e+2, + 0.21351194091794340579e+2, + 0.54552285394341083702e+2, + -0.35417856758951543839e+2, + -0.50532912348626609855e+2, + 0.44701776469970887717e+2, + 0.4233688419905357847e+2, + -0.50046461638089112967e+2, + -0.41289872960396934332e+2, + 0.52363666633432472963e+2, + 0.41833206396916700953e+2, + -0.59219619833441591084e+2, + -0.41082582346203508905e+2, + 0.54254702177222860371e+2, + 0.46738534139906505516e+2, + -0.49377330619508818188e+2, + -0.61505656337083358665e+2, + 0.45028961232785448487e+2, + 0.66085023845827308264e+2, + -0.2674185030927081641e+2, + -0.77064847499756069737e+2, + -0.28812035331180094744e+1, + 0.84722296070969036919e+2, + 0.28733714457563145572e+2, + -0.68433195728252002255e+2, + -0.68224534306140810713e+2, + 0.31595049250661386253e+2, + 0.94313624561929543688e+2, + 0.18238727398835766991e+2, + -0.76774710376240321352e+2, + -0.83741021006766473533e+2, + 0.14647904557456328689e+2, + 0.10151060827577879309e+3, + 0.70014091065170418915e+2, + -0.2831262157771055854e+2, + -0.11216392681844281753e+3, + -0.89136303627834678309e+2, + 0.10141624423378930331e+2, + 0.10156398124266992511e+3, + 0.13162361173950776561e+3, + 0.6901168245564042536e+2, + -0.26799679127270099599e+2, + -0.11998731013461238604e+3, + -0.1722888724157513991e+3, + -0.17388652417950456197e+3, + -0.15171852626577469891e+3, + -0.10768604142597035889e+3, + -0.72314754766256797325e+2, + -0.42228003183410926624e+2, + -0.21284103907873028305e+2, + -0.12801277117370752023e+2, + -0.32856402265170592258e+1, + -0.33523202540774041935e+1, -0.35320352076660299634, - 0.46917611191604167986e-01, - -0.10616082305168921263e+01, - 0.12022959590640434069e+01, - -0.11355885172581019482e+01, + 0.46917611191604167986e-1, + -0.10616082305168921263e+1, + 0.12022959590640434069e+1, + -0.11355885172581019482e+1, 0.72310998669962045504, -0.17978475737541096957, -0.33066707273979839554, @@ -17054,416 +17056,416 @@ function ESERK4ConstantCache(zprev) -0.76624274888617627255, 0.63487766519963362288, -0.34750358640697681656, - 0.20470066113049151940e-01, + 0.2047006611304915194e-1, 0.24941447640738401148, -0.38940631749099630099, 0.38963496945148073936, -0.27575633413374406322, 0.11227733236385625815, - 0.42313542138784458746e-01, + 0.42313542138784458746e-1, -0.13805786447953635743, 0.16277172944607798399, -0.12534417966867039684, - 0.59882602645807851693e-01, - 0.28516264748426451391e-02, - -0.36983585332759041919e-01, - 0.38969732638686097048e-01, - -0.17118091141092865032e-01, - -0.85367007256084703748e-02, - 0.22742917527177320541e-01, - -0.17945664783998321185e-01, - -0.18598341097457196103e+01, - 0.34754905837056173645e+01, - -0.17198369668809703192e+01, - -0.92820385606550911972e-02, - 0.22689636267259505331e+01, - -0.33663407490786991794e+01, - 0.40258119210699705448e+01, - -0.30044172912603359649e+01, - 0.16317279627468810332e+01, + 0.59882602645807851693e-1, + 0.28516264748426451391e-2, + -0.36983585332759041919e-1, + 0.38969732638686097048e-1, + -0.17118091141092865032e-1, + -0.85367007256084703748e-2, + 0.22742917527177320541e-1, + -0.17945664783998321185e-1, + -0.18598341097457196103e+1, + 0.34754905837056173645e+1, + -0.17198369668809703192e+1, + -0.92820385606550911972e-2, + 0.22689636267259505331e+1, + -0.33663407490786991794e+1, + 0.40258119210699705448e+1, + -0.30044172912603359649e+1, + 0.16317279627468810332e+1, 0.74464732567248881345, - -0.23938300196315105417e+01, - 0.38741690802295329910e+01, - -0.37039330042242650798e+01, - 0.29643985306948335001e+01, + -0.23938300196315105417e+1, + 0.3874169080229532991e+1, + -0.37039330042242650798e+1, + 0.29643985306948335001e+1, -0.82414733713828336459, - -0.10504813124194998242e+01, - 0.31433744295710419614e+01, - -0.37888490681109345815e+01, - 0.38233924700176458167e+01, - -0.21894110455649062885e+01, + -0.10504813124194998242e+1, + 0.31433744295710419614e+1, + -0.37888490681109345815e+1, + 0.38233924700176458167e+1, + -0.21894110455649062885e+1, 0.40614157946386914011, - 0.20287695919882691165e+01, - -0.33417520984971522680e+01, - 0.41621204235798119342e+01, - -0.31961393172448819833e+01, - 0.17613838665578238629e+01, + 0.20287695919882691165e+1, + -0.3341752098497152268e+1, + 0.41621204235798119342e+1, + -0.31961393172448819833e+1, + 0.17613838665578238629e+1, 0.73796699758620143417, - -0.25166648295981390859e+01, - 0.40050000020609664020e+01, - -0.38499952298198110157e+01, - 0.26901830584892025833e+01, - -0.10096844188705818013e+01, - -0.25735553255763763403e+01, - 0.10653008840901547760e+01, - -0.89678745003993398655e+01, - -0.56602597087016626176e+01, - -0.17553531192696691932e+02, - -0.24689024107455644241e+02, - -0.30406002770643187461e+02, - -0.42954843264752518905e+02, - -0.33841680890639821655e+02, - -0.29275848704265854394e+02, - -0.55499777270055901113e+01, - 0.17824162556078757547e+02, - 0.25146872097053996953e+02, - 0.27478794724668542671e+02, - -0.13432909207488767933e+01, - -0.18221866853378418938e+02, - -0.23429102365893090365e+02, - -0.99127930570400017984e+01, - 0.20646665569325605816e+02, - 0.18185407849385583745e+02, - 0.59545201517459904750e+01, - -0.18201619893544869200e+02, - -0.19967573804084583600e+02, - 0.90200661391733660821e+01, - 0.16088572048760308775e+02, - 0.10659969745760735194e+02, - -0.15824285201032779469e+02, - -0.17254866278280637459e+02, - 0.10964242325916760734e+02, - 0.13775087697473917814e+02, - 0.36617970477975596566e+01, - -0.18699211419684459656e+02, - -0.71306892500875678209e+01, - 0.18713896241508223284e+02, - 0.50549585735911710671e+01, - -0.90311375344281525912e+01, - -0.13169435664101177608e+02, - 0.98881533262388927596e+01, - 0.15539540680293862707e+02, - -0.13817499695926400705e+02, - -0.84787584751633424673e+01, - 0.68195294581850962601e+01, - 0.11522545595479826375e+02, - -0.60514121993901612839e+01, - -0.15562948824228184819e+02, - 0.13975485110149605816e+02, - 0.74682464342356222886e+01, - -0.11304640707248687193e+02, - -0.47989572156415247761e+01, - 0.77425204235132198960e+01, - 0.92154971669357976793e+01, - -0.15420394911606184252e+02, - -0.18358202236999048296e+01, - 0.16081757904108449964e+02, - -0.68711678616016591548e+01, - -0.77876216935666207064e+01, - 0.40835524872271848906e+01, - 0.90569755663164581705e+01, - -0.68348657000929486927e+01, - -0.98266065767134271880e+01, - 0.16144780823876978104e+02, - -0.22257061782908462710e+01, - -0.12298145926861939969e+02, - 0.87901266778787583434e+01, - 0.41045351082405430176e+01, - -0.56283748055563878054e+01, - -0.54083263821320732845e+01, - 0.10379709495928018725e+02, + -0.25166648295981390859e+1, + 0.4005000002060966402e+1, + -0.38499952298198110157e+1, + 0.26901830584892025833e+1, + -0.10096844188705818013e+1, + -0.25735553255763763403e+1, + 0.1065300884090154776e+1, + -0.89678745003993398655e+1, + -0.56602597087016626176e+1, + -0.17553531192696691932e+2, + -0.24689024107455644241e+2, + -0.30406002770643187461e+2, + -0.42954843264752518905e+2, + -0.33841680890639821655e+2, + -0.29275848704265854394e+2, + -0.55499777270055901113e+1, + 0.17824162556078757547e+2, + 0.25146872097053996953e+2, + 0.27478794724668542671e+2, + -0.13432909207488767933e+1, + -0.18221866853378418938e+2, + -0.23429102365893090365e+2, + -0.99127930570400017984e+1, + 0.20646665569325605816e+2, + 0.18185407849385583745e+2, + 0.5954520151745990475e+1, + -0.182016198935448692e+2, + -0.199675738040845836e+2, + 0.90200661391733660821e+1, + 0.16088572048760308775e+2, + 0.10659969745760735194e+2, + -0.15824285201032779469e+2, + -0.17254866278280637459e+2, + 0.10964242325916760734e+2, + 0.13775087697473917814e+2, + 0.36617970477975596566e+1, + -0.18699211419684459656e+2, + -0.71306892500875678209e+1, + 0.18713896241508223284e+2, + 0.50549585735911710671e+1, + -0.90311375344281525912e+1, + -0.13169435664101177608e+2, + 0.98881533262388927596e+1, + 0.15539540680293862707e+2, + -0.13817499695926400705e+2, + -0.84787584751633424673e+1, + 0.68195294581850962601e+1, + 0.11522545595479826375e+2, + -0.60514121993901612839e+1, + -0.15562948824228184819e+2, + 0.13975485110149605816e+2, + 0.74682464342356222886e+1, + -0.11304640707248687193e+2, + -0.47989572156415247761e+1, + 0.7742520423513219896e+1, + 0.92154971669357976793e+1, + -0.15420394911606184252e+2, + -0.18358202236999048296e+1, + 0.16081757904108449964e+2, + -0.68711678616016591548e+1, + -0.77876216935666207064e+1, + 0.40835524872271848906e+1, + 0.90569755663164581705e+1, + -0.68348657000929486927e+1, + -0.9826606576713427188e+1, + 0.16144780823876978104e+2, + -0.2225706178290846271e+1, + -0.12298145926861939969e+2, + 0.87901266778787583434e+1, + 0.41045351082405430176e+1, + -0.56283748055563878054e+1, + -0.54083263821320732845e+1, + 0.10379709495928018725e+2, 0.76598017754723202177, - -0.14312651685795936274e+02, - 0.12320649847112191466e+02, - 0.29357978845643866173e+01, - -0.12542779656004066524e+02, - 0.66061644894716495813e+01, - 0.42985305109799378798e+01, - -0.48965575932389402425e+01, - -0.40437381668567100590e+01, - 0.81706849093289974917e+01, + -0.14312651685795936274e+2, + 0.12320649847112191466e+2, + 0.29357978845643866173e+1, + -0.12542779656004066524e+2, + 0.66061644894716495813e+1, + 0.42985305109799378798e+1, + -0.48965575932389402425e+1, + -0.4043738166856710059e+1, + 0.81706849093289974917e+1, 0.44156490311337304178, - -0.12167539730807282794e+02, - 0.12257316199471727458e+02, + -0.12167539730807282794e+2, + 0.12257316199471727458e+2, 0.67690699917237473482, - -0.12715149612672453472e+02, - 0.11528686327697368341e+02, + -0.12715149612672453472e+2, + 0.11528686327697368341e+2, -0.11661858360502680432, - -0.78578934373804321112e+01, - 0.48548745569011666490e+01, - 0.28658274215515571193e+01, - -0.40996950363922364247e+01, - -0.30273413965603239717e+01, - 0.91890149796769335921e+01, - -0.52494078822252348004e+01, - -0.63106501078666328297e+01, - 0.13815863637485076509e+02, - -0.89680000793688989802e+01, - -0.39708802750039673413e+01, - 0.12861583283919088672e+02, - -0.10030362021281771234e+02, + -0.78578934373804321112e+1, + 0.4854874556901166649e+1, + 0.28658274215515571193e+1, + -0.40996950363922364247e+1, + -0.30273413965603239717e+1, + 0.91890149796769335921e+1, + -0.52494078822252348004e+1, + -0.63106501078666328297e+1, + 0.13815863637485076509e+2, + -0.89680000793688989802e+1, + -0.39708802750039673413e+1, + 0.12861583283919088672e+2, + -0.10030362021281771234e+2, -0.37465355388646848223, - 0.77862591343249780707e+01, - -0.61802611877365585258e+01, + 0.77862591343249780707e+1, + -0.61802611877365585258e+1, -0.46846394185415041189, - 0.38104542553749038980e+01, + 0.3810454255374903898e+1, -0.38518039916737079054, - -0.48712010550982105528e+01, - 0.46972093031463408863e+01, - 0.23211649703918593168e+01, - -0.96304610614393890700e+01, - 0.93469360555368137256e+01, + -0.48712010550982105528e+1, + 0.46972093031463408863e+1, + 0.23211649703918593168e+1, + -0.963046106143938907e+1, + 0.93469360555368137256e+1, -0.25713088677626311229, - -0.10322650554688811653e+02, - 0.13217823217741438313e+02, - -0.56399420861965419149e+01, - -0.61774429927359033599e+01, - 0.12706173998485523313e+02, - -0.92186567710790043861e+01, + -0.10322650554688811653e+2, + 0.13217823217741438313e+2, + -0.56399420861965419149e+1, + -0.61774429927359033599e+1, + 0.12706173998485523313e+2, + -0.92186567710790043861e+1, -0.50364347284313837338, - 0.82207201510361933572e+01, - -0.83973026616289097035e+01, - 0.24877399191537397094e+01, - 0.34566176033195494810e+01, - -0.45638167118909551689e+01, - 0.12832135020809183334e+01, - 0.19875863875927000102e+01, - -0.15331138060039344317e+01, - -0.19502150275003755642e+01, - 0.43337616674884937851e+01, - -0.22031430668275202578e+01, - -0.34339911049549414201e+01, - 0.77710216768484192684e+01, - -0.62966578535709558651e+01, + 0.82207201510361933572e+1, + -0.83973026616289097035e+1, + 0.24877399191537397094e+1, + 0.3456617603319549481e+1, + -0.45638167118909551689e+1, + 0.12832135020809183334e+1, + 0.19875863875927000102e+1, + -0.15331138060039344317e+1, + -0.19502150275003755642e+1, + 0.43337616674884937851e+1, + -0.22031430668275202578e+1, + -0.34339911049549414201e+1, + 0.77710216768484192684e+1, + -0.62966578535709558651e+1, -0.87041195314262598259, - 0.86456726655225768496e+01, - -0.10746449035035920971e+02, - 0.48999232009369633190e+01, - 0.51251000590368924748e+01, - -0.12057476458318905799e+02, - 0.10652814795927497471e+02, - -0.16276182436237385254e+01, - -0.86960911872320068028e+01, - 0.13052136818090014359e+02, - -0.83974735003965026436e+01, - -0.19126018485843965244e+01, - 0.10697678029286899815e+02, - -0.12007716205510277518e+02, - 0.52462352634212914282e+01, - 0.47154519557538385754e+01, - -0.11062028047159142119e+02, - 0.97894397596816453699e+01, - -0.21661829859886294614e+01, - -0.63981284755850937884e+01, - 0.10254440277863309916e+02, - -0.71986143165194720339e+01, - -0.29920497216299873910, - 0.70905707126939008234e+01, - -0.88443348410130084858e+01, - 0.48021806225463299356e+01, - 0.20466836002459616317e+01, - -0.71285191276254220583e+01, - 0.73312401785966878620e+01, - -0.28338016353266151093e+01, - -0.32184942970969721010e+01, - 0.69039282681365401473e+01, - -0.60017775234810963880e+01, - 0.12922142925614097386e+01, - 0.40942612662952617697e+01, - -0.67103192003948457511e+01, - 0.49514113498689855675e+01, - -0.53629908300720545711e+01, - 0.26356356949658517053e+01, - 0.81854857603611215211e+01, - -0.12719142303787453585e+02, - 0.95587216291996366380e+01, - 0.10304173560567271295e+01, - -0.10144436456067342789e+02, - 0.13230937909544094211e+02, - -0.62919783629427472604e+01, - -0.42390148158767173570e+01, - 0.12776012628295637441e+02, - -0.11504498013527939548e+02, - 0.29099727939694415291e+01, - 0.87262519095926531776e+01, - -0.13341109915263068331e+02, - 0.92107888834194113770e+01, - 0.25392614053372941640e+01, - -0.11694037332536643348e+02, - 0.13183608388404444156e+02, - -0.40434467052720410862e+01, - -0.73612077771144157623e+01, - 0.14215897602188485749e+02, - -0.95376138129119514275e+01, - -0.16024474893925073626e+01, - 0.12493074131289029438e+02, - -0.13022608555060292801e+02, - 0.42974598472446263742e+01, - 0.87336083122513716859e+01, - -0.14202120676638742225e+02, - 0.93347465196818752986e+01, - 0.38713842426569891053e+01, - -0.13287745870788327807e+02, - 0.12923439448459415502e+02, - -0.12097944421120871983e+01, - -0.10800141613912115801e+02, - 0.14888387271404862844e+02, - -0.58399706699352202932e+01, - -0.73689244335418724319e+01, - 0.15369978364187016240e+02, - -0.96228800700372136845e+01, - -0.35806335770250163897e+01, - 0.14697352576374987265e+02, - -0.12417796658050679781e+02, + 0.86456726655225768496e+1, + -0.10746449035035920971e+2, + 0.4899923200936963319e+1, + 0.51251000590368924748e+1, + -0.12057476458318905799e+2, + 0.10652814795927497471e+2, + -0.16276182436237385254e+1, + -0.86960911872320068028e+1, + 0.13052136818090014359e+2, + -0.83974735003965026436e+1, + -0.19126018485843965244e+1, + 0.10697678029286899815e+2, + -0.12007716205510277518e+2, + 0.52462352634212914282e+1, + 0.47154519557538385754e+1, + -0.11062028047159142119e+2, + 0.97894397596816453699e+1, + -0.21661829859886294614e+1, + -0.63981284755850937884e+1, + 0.10254440277863309916e+2, + -0.71986143165194720339e+1, + -0.2992049721629987391, + 0.70905707126939008234e+1, + -0.88443348410130084858e+1, + 0.48021806225463299356e+1, + 0.20466836002459616317e+1, + -0.71285191276254220583e+1, + 0.7331240178596687862e+1, + -0.28338016353266151093e+1, + -0.3218494297096972101e+1, + 0.69039282681365401473e+1, + -0.6001777523481096388e+1, + 0.12922142925614097386e+1, + 0.40942612662952617697e+1, + -0.67103192003948457511e+1, + 0.49514113498689855675e+1, + -0.53629908300720545711e+1, + 0.26356356949658517053e+1, + 0.81854857603611215211e+1, + -0.12719142303787453585e+2, + 0.9558721629199636638e+1, + 0.10304173560567271295e+1, + -0.10144436456067342789e+2, + 0.13230937909544094211e+2, + -0.62919783629427472604e+1, + -0.4239014815876717357e+1, + 0.12776012628295637441e+2, + -0.11504498013527939548e+2, + 0.29099727939694415291e+1, + 0.87262519095926531776e+1, + -0.13341109915263068331e+2, + 0.9210788883419411377e+1, + 0.2539261405337294164e+1, + -0.11694037332536643348e+2, + 0.13183608388404444156e+2, + -0.40434467052720410862e+1, + -0.73612077771144157623e+1, + 0.14215897602188485749e+2, + -0.95376138129119514275e+1, + -0.16024474893925073626e+1, + 0.12493074131289029438e+2, + -0.13022608555060292801e+2, + 0.42974598472446263742e+1, + 0.87336083122513716859e+1, + -0.14202120676638742225e+2, + 0.93347465196818752986e+1, + 0.38713842426569891053e+1, + -0.13287745870788327807e+2, + 0.12923439448459415502e+2, + -0.12097944421120871983e+1, + -0.10800141613912115801e+2, + 0.14888387271404862844e+2, + -0.58399706699352202932e+1, + -0.73689244335418724319e+1, + 0.1536997836418701624e+2, + -0.96228800700372136845e+1, + -0.35806335770250163897e+1, + 0.14697352576374987265e+2, + -0.12417796658050679781e+2, 0.10826550910661010552, - 0.13271781520341336957e+02, - -0.14278155329513610994e+02, - 0.33993542867400328156e+01, - 0.11482076186312266231e+02, - -0.15377370551475163296e+02, - 0.61384629044485361504e+01, - 0.96570978670295204438e+01, - -0.15941896596982353174e+02, - 0.82791027797936376231e+01, - 0.80498305636143800967e+01, - -0.16200701994408408524e+02, - 0.98383624167070298228e+01, - 0.68428161380232292998e+01, - -0.16351934925307677560e+02, - 0.10854868932621048572e+02, - 0.61642027723350238944e+01, - -0.16542477378101906993e+02, - 0.11353425553004070636e+02, - 0.61050483047876520359e+01, - -0.16853935223662972476e+02, - 0.11317899990201187421e+02, - 0.67301510265130692900e+01, - -0.17288665085778209374e+02, - 0.10673377816386484085e+02, - 0.80756436080046327675e+01, - -0.17751300313051103785e+02, - 0.92806141663351802151e+01, - 0.10126921401619210172e+02, - -0.18025224710435281850e+02, - 0.69502193323337015940e+01, - 0.12771396544038726262e+02, - -0.17750646503126507270e+02, - 0.34898789151177838086e+01, - 0.15724836612352516951e+02, - -0.16422705842495815887e+02, - -0.11975775280719402893e+01, - 0.18442223820316911542e+02, - -0.13444364190524925817e+02, - -0.69508989539139776070e+01, - 0.20049618224364053276e+02, - -0.82845434682353804590e+01, - -0.13131099350509476409e+02, - 0.19374560339562485467e+02, + 0.13271781520341336957e+2, + -0.14278155329513610994e+2, + 0.33993542867400328156e+1, + 0.11482076186312266231e+2, + -0.15377370551475163296e+2, + 0.61384629044485361504e+1, + 0.96570978670295204438e+1, + -0.15941896596982353174e+2, + 0.82791027797936376231e+1, + 0.80498305636143800967e+1, + -0.16200701994408408524e+2, + 0.98383624167070298228e+1, + 0.68428161380232292998e+1, + -0.1635193492530767756e+2, + 0.10854868932621048572e+2, + 0.61642027723350238944e+1, + -0.16542477378101906993e+2, + 0.11353425553004070636e+2, + 0.61050483047876520359e+1, + -0.16853935223662972476e+2, + 0.11317899990201187421e+2, + 0.673015102651306929e+1, + -0.17288665085778209374e+2, + 0.10673377816386484085e+2, + 0.80756436080046327675e+1, + -0.17751300313051103785e+2, + 0.92806141663351802151e+1, + 0.10126921401619210172e+2, + -0.1802522471043528185e+2, + 0.6950219332333701594e+1, + 0.12771396544038726262e+2, + -0.1775064650312650727e+2, + 0.34898789151177838086e+1, + 0.15724836612352516951e+2, + -0.16422705842495815887e+2, + -0.11975775280719402893e+1, + 0.18442223820316911542e+2, + -0.13444364190524925817e+2, + -0.6950898953913977607e+1, + 0.20049618224364053276e+2, + -0.8284543468235380459e+1, + -0.13131099350509476409e+2, + 0.19374560339562485467e+2, -0.79091033618259587445, - -0.18414764190219667483e+02, - 0.15197352566863091994e+02, - 0.83439074234785177708e+01, - -0.20771528262998959491e+02, - 0.68507384525031902456e+01, - 0.17107691440099227265e+02, - -0.17910788368584910302e+02, - -0.48285200725413082168e+01, - 0.22082897025507794098e+02, - -0.84828285639538698604e+01, - -0.16555928941477702665e+02, - 0.19396773317041617446e+02, - 0.60356660280046323663e+01, - -0.22619638631447845256e+02, - 0.72309674118951550170e+01, - 0.19782893406535194458e+02, - -0.17235383795331383538e+02, - -0.10691700088073414321e+02, - 0.23559567971046114110e+02, - 0.24444948792442697250, - -0.23555051776065660363e+02, - 0.10845093977004168551e+02, - 0.20078566947346061511e+02, - -0.18649644904250202160e+02, - -0.12689751435415539405e+02, - 0.24356511152805957465e+02, - 0.51075299456450435898e+01, - -0.26007489724370635997e+02, - 0.33252913495397793398e+01, - 0.26271432165036070927e+02, - -0.97236189062355187218e+01, - -0.24017485637368363172e+02, - 0.15730842025692933106e+02, - 0.22156371035226616328e+02, - -0.19304557308395125403e+02, - -0.19425965955667816587e+02, - 0.22628505463867334413e+02, - 0.18426189139807739537e+02, - -0.23883099335466226876e+02, - -0.17563436522517381633e+02, - 0.25178235831364915498e+02, - 0.19134966553307023673e+02, - -0.24385055680025242708e+02, - -0.21257630945735837003e+02, - 0.23106291555306320618e+02, - 0.25822374437144777204e+02, - -0.18597330191318999226e+02, - -0.30234489556624552620e+02, - 0.11906827339339425720e+02, - 0.35115649690751347123e+02, + -0.18414764190219667483e+2, + 0.15197352566863091994e+2, + 0.83439074234785177708e+1, + -0.20771528262998959491e+2, + 0.68507384525031902456e+1, + 0.17107691440099227265e+2, + -0.17910788368584910302e+2, + -0.48285200725413082168e+1, + 0.22082897025507794098e+2, + -0.84828285639538698604e+1, + -0.16555928941477702665e+2, + 0.19396773317041617446e+2, + 0.60356660280046323663e+1, + -0.22619638631447845256e+2, + 0.7230967411895155017e+1, + 0.19782893406535194458e+2, + -0.17235383795331383538e+2, + -0.10691700088073414321e+2, + 0.2355956797104611411e+2, + 0.2444494879244269725, + -0.23555051776065660363e+2, + 0.10845093977004168551e+2, + 0.20078566947346061511e+2, + -0.1864964490425020216e+2, + -0.12689751435415539405e+2, + 0.24356511152805957465e+2, + 0.51075299456450435898e+1, + -0.26007489724370635997e+2, + 0.33252913495397793398e+1, + 0.26271432165036070927e+2, + -0.97236189062355187218e+1, + -0.24017485637368363172e+2, + 0.15730842025692933106e+2, + 0.22156371035226616328e+2, + -0.19304557308395125403e+2, + -0.19425965955667816587e+2, + 0.22628505463867334413e+2, + 0.18426189139807739537e+2, + -0.23883099335466226876e+2, + -0.17563436522517381633e+2, + 0.25178235831364915498e+2, + 0.19134966553307023673e+2, + -0.24385055680025242708e+2, + -0.21257630945735837003e+2, + 0.23106291555306320618e+2, + 0.25822374437144777204e+2, + -0.18597330191318999226e+2, + -0.3023448955662455262e+2, + 0.1190682733933942572e+2, + 0.35115649690751347123e+2, -0.22954894645111534324, - -0.35935981480217229489e+02, - -0.14179949691820350921e+02, - 0.31095950022037875726e+02, - 0.30577702586573234811e+02, - -0.15152409952118031100e+02, - -0.40281949321383670792e+02, - -0.97766378583883870590e+01, - 0.35344417987686803428e+02, - 0.36792202864801552664e+02, - -0.69773743534529977239e+01, - -0.43915634963206372277e+02, - -0.32674904616956162329e+02, - 0.14040849776138653482e+02, - 0.48908529709562301946e+02, - 0.39803249077283275881e+02, - -0.39231679689015250823e+01, - -0.46282292456726672469e+02, - -0.57152110788528815988e+02, - -0.31827146053532107572e+02, - 0.12564967960438940153e+02, - 0.53325746048214170969e+02, - 0.75974256005589566598e+02, - 0.78269586810036258839e+02, - 0.66366414107719933213e+02, - 0.48700729719975164755e+02, - 0.31739978454440556987e+02, - 0.18660178376615657925e+02, - 0.99977899494155106908e+01, - 0.49166219351154705208e+01, - 0.22307162675296026144e+01, - 0.93733445420019290140, + -0.35935981480217229489e+2, + -0.14179949691820350921e+2, + 0.31095950022037875726e+2, + 0.30577702586573234811e+2, + -0.151524099521180311e+2, + -0.40281949321383670792e+2, + -0.9776637858388387059e+1, + 0.35344417987686803428e+2, + 0.36792202864801552664e+2, + -0.69773743534529977239e+1, + -0.43915634963206372277e+2, + -0.32674904616956162329e+2, + 0.14040849776138653482e+2, + 0.48908529709562301946e+2, + 0.39803249077283275881e+2, + -0.39231679689015250823e+1, + -0.46282292456726672469e+2, + -0.57152110788528815988e+2, + -0.31827146053532107572e+2, + 0.12564967960438940153e+2, + 0.53325746048214170969e+2, + 0.75974256005589566598e+2, + 0.78269586810036258839e+2, + 0.66366414107719933213e+2, + 0.48700729719975164755e+2, + 0.31739978454440556987e+2, + 0.18660178376615657925e+2, + 0.99977899494155106908e+1, + 0.49166219351154705208e+1, + 0.22307162675296026144e+1, + 0.9373344542001929014, 0.36581125217641280445, 0.13287891389709433065, - 0.44995445386820723255e-01, - 0.14219028618929079738e-01, - 0.41962900083953435376e-02, - 0.11569431745035688337e-02, - 0.29801099053451961555e-03, - 0.71700828005300074486e-04, - 0.16105185104626602518e-04, - 0.33745540599764500051e-05, - 0.65889334569254160558e-06, - 0.11972233352044643275e-06, - 0.20210430913591464562e-07, - 0.31633614228489310471e-08, - 0.45799856232643241001e-09, + 0.44995445386820723255e-1, + 0.14219028618929079738e-1, + 0.41962900083953435376e-2, + 0.11569431745035688337e-2, + 0.29801099053451961555e-3, + 0.71700828005300074486e-4, + 0.16105185104626602518e-4, + 0.33745540599764500051e-5, + 0.65889334569254160558e-6, + 0.11972233352044643275e-6, + 0.20210430913591464562e-7, + 0.31633614228489310471e-8, + 0.45799856232643241001e-9, 0.61165319712579507452e-10, 0.75100263548264106307e-11, 0.84447984020147500541e-12, 0.86568948301661310097e-13, 0.80464236694710210698e-14, 0.67373976448677816015e-15, - 0.50422102913195893060e-16, + 0.5042210291319589306e-16, 0.33404775191849695914e-17, 0.19356822993432401176e-18, 0.96610217926709515672e-20, @@ -17473,237 +17475,237 @@ function ESERK4ConstantCache(zprev) 0.77314418804540232934e-26, 0.10241395017821932194e-27, 0.66898520716763342135e-30, - -0.13270393585778996609e-01, - 0.23237808340584920064e-01, - -0.16008143646967322449e-01, - 0.51238866197446039652e-02, - 0.46867064089928384130e-02, - -0.12623840724464572421e-01, - 0.15094516835949589595e-01, - -0.13718873252757064762e-01, - 0.78320988659133731341e-02, - -0.15638100769497897524e-02, - -0.44427923807152068514e-02, - 0.63420773032732326996e-02, - -0.52428299357492481186e-02, - -0.76450590236730789611e-04, - 0.58844628510906805963e-02, - -0.11650136958743645410e-01, - 0.13340964520759187803e-01, - -0.11681540004990687356e-01, - 0.50466129472949133178e-02, - 0.30655411847020858432e-02, - -0.12050061036267104703e-01, - 0.17460429485893321638e-01, - -0.19350292507730348923e-01, - 0.15342426192416264499e-01, - -0.83160518958089024028e-02, - -0.14245567993077387029e-02, - 0.93160779799334771101e-02, - -0.14894699349578661984e-01, - 0.14998014334616732376e-01, - -0.11641668535464088849e-01, - 0.44505584342805623241e-02, - 0.24871614637614627118e-02, - -0.84311749974179742151e-02, - 0.10580244940290585778e-01, - -0.83200532894580972454e-02, - 0.54870420843583511683e-02, - 0.59966669296534587039e-02, - -0.79834302097671068065e-03, - 0.26849808747266903919e-01, - 0.11191018150952386501e-01, - 0.52987883683189851425e-01, - 0.44457136276735802205e-01, - 0.81308077909546971895e-01, - 0.63450846170589436657e-01, - 0.77851169159852615098e-01, - 0.14438976396244944042e-01, - 0.14333572431904154088e-01, - -0.70497096999631442271e-01, - -0.28697857387349669928e-01, - -0.55171350865907985150e-01, - 0.31788544049211248099e-01, - 0.32420283636563483609e-01, - 0.47542106347107204734e-01, - -0.36500036588373208253e-02, - -0.38046149970969049547e-01, - -0.37315764622931520134e-01, - 0.27437621788318914198e-02, - 0.39862215653812697880e-01, - 0.26502766055466833034e-01, - -0.12862527587095015300e-01, - -0.42187531719692243637e-01, - -0.89406700541803853927e-02, - 0.33495029358955881460e-01, - 0.19290832315089920246e-01, - 0.15038654577875358066e-02, - -0.57324664644665249136e-01, - 0.23885284104649181364e-01, - 0.93982882779976278237e-02, - 0.31295721523104891304e-01, - -0.34584272544112143466e-01, - -0.25145107307101843830e-01, - 0.30930083558457506510e-01, - 0.12685376346110185594e-01, - -0.22191180399085564529e-02, - -0.34053826843223673759e-01, - 0.72465701473271278490e-02, - 0.37145742511493336224e-01, - -0.17252350123361247930e-01, - -0.19818899368304616904e-01, - 0.21144749036127912303e-02, - 0.24445845403689811515e-01, - 0.23280753755021647150e-02, - -0.35297449717419375481e-01, - 0.11562661530136837326e-01, - 0.28323443958932919412e-01, - -0.20085483276883087100e-01, - -0.87978196986627180826e-02, - -0.14810002248314484922e-02, - 0.30899590891657207486e-01, - -0.19648471430698522672e-01, - -0.22696426225657838349e-01, - 0.33902407833163894502e-01, - -0.51838160636997216574e-02, - -0.92226302102529026522e-02, - -0.13756478824012574255e-01, - 0.31139937946503395971e-01, - -0.10534733126906297221e-01, - -0.16064066815281729389e-01, - 0.61252747629769090792e-02, - 0.24378160820456511171e-01, - -0.27312659687893821314e-01, - -0.31418437113524648463e-02, - 0.23990449827660711296e-01, - -0.10100913448638863465e-01, - -0.11527658368050884563e-01, - 0.69371558668381398671e-02, - 0.12901145723885891481e-01, - -0.11074106213493233736e-01, - -0.18240762965209589980e-01, - 0.39136774531462227567e-01, - -0.23765202183417377668e-01, - -0.10466967426678493516e-01, - 0.25879266803523145318e-01, - -0.14228831089458543815e-01, - 0.24977433418642558394e-02, - -0.11908615175156303523e-01, - 0.28581104403971213657e-01, - -0.24860140736848668208e-01, - -0.10948747442018490379e-02, - 0.20865709712494445033e-01, - -0.11941376789104096376e-01, - -0.14018811821287370523e-01, - 0.25785828698554408983e-01, - -0.10628770205294424747e-01, - -0.12252786938779651124e-01, - 0.16692405967586799315e-01, - -0.64958370180712881378e-03, - -0.14370230402933989455e-01, - 0.11366391469608678327e-01, - 0.20344126585480942944e-02, - -0.53779530569234975865e-02, - -0.77563144117893450744e-02, - 0.20638990054530386570e-01, - -0.13156990601666378529e-01, - -0.13817412279034954267e-01, - 0.37387279926899226468e-01, - -0.36509786701763725925e-01, - 0.13612673127979141655e-01, - 0.86570293605953679145e-02, - -0.11293737751045933651e-01, - -0.31655280516972596726e-02, - 0.16008345112887220618e-01, - -0.13538095363110914590e-01, - 0.18300169553025894854e-03, - 0.87008683789094858757e-02, - -0.49876581986582294720e-02, - -0.39067460620159904366e-02, - 0.43850871980896707208e-02, - 0.70662335560534765902e-02, - -0.19141289760729315178e-01, - 0.17240660906817046466e-01, - 0.52547760409293561065e-03, - -0.20039265446728297265e-01, - 0.23940434867563382265e-01, - -0.84394868642794738933e-02, - -0.12548216906802850748e-01, - 0.19586770860286848578e-01, - -0.51700183678921388108e-02, - -0.19875947847357324644e-01, - 0.36001952699492342780e-01, - -0.31684824626055006769e-01, - 0.12089173090336188116e-01, - 0.67500551255710739690e-02, - -0.12223486695477143310e-01, - 0.46754068479805278163e-02, - 0.49681926071591794511e-02, - -0.61892287502489278309e-02, - -0.22942267903573727687e-02, - 0.12848099258964644845e-01, - -0.17055536335046830171e-01, - 0.13175870575078581226e-01, - -0.66141076705167828678e-02, - 0.36550635171850405156e-02, - -0.52855997699517960967e-02, - 0.67546088474380837352e-02, - -0.31340341052648085403e-02, - -0.50136123274170715097e-02, - 0.11308676098656308961e-01, - -0.93200780874440648793e-02, - -0.99835442169669591679e-03, - 0.12079903213901564338e-01, - -0.14484408955746090608e-01, - 0.48234100660052327270e-02, - 0.10740250680032351407e-01, - -0.20869145595557272305e-01, - 0.17911262243791130355e-01, - -0.42691135912227154772e-02, - -0.91789887343468410524e-02, - 0.11495684098123175321e-01, - -0.53482361053732612507e-03, - -0.14931974526719500249e-01, - 0.21605707236206729560e-01, - -0.11918355245362074676e-01, - -0.97825697350640838934e-02, - 0.29901275213778475554e-01, - -0.35341679673053433275e-01, - 0.23028015284819697978e-01, - -0.21147986679958511065e-02, - -0.12840643917718908354e-01, - 0.12618034758140276447e-01, - 0.39672132056206906026e-01, - -0.58458947623483886735e-01, - -0.32325049793949664489e-01, + -0.13270393585778996609e-1, + 0.23237808340584920064e-1, + -0.16008143646967322449e-1, + 0.51238866197446039652e-2, + 0.4686706408992838413e-2, + -0.12623840724464572421e-1, + 0.15094516835949589595e-1, + -0.13718873252757064762e-1, + 0.78320988659133731341e-2, + -0.15638100769497897524e-2, + -0.44427923807152068514e-2, + 0.63420773032732326996e-2, + -0.52428299357492481186e-2, + -0.76450590236730789611e-4, + 0.58844628510906805963e-2, + -0.1165013695874364541e-1, + 0.13340964520759187803e-1, + -0.11681540004990687356e-1, + 0.50466129472949133178e-2, + 0.30655411847020858432e-2, + -0.12050061036267104703e-1, + 0.17460429485893321638e-1, + -0.19350292507730348923e-1, + 0.15342426192416264499e-1, + -0.83160518958089024028e-2, + -0.14245567993077387029e-2, + 0.93160779799334771101e-2, + -0.14894699349578661984e-1, + 0.14998014334616732376e-1, + -0.11641668535464088849e-1, + 0.44505584342805623241e-2, + 0.24871614637614627118e-2, + -0.84311749974179742151e-2, + 0.10580244940290585778e-1, + -0.83200532894580972454e-2, + 0.54870420843583511683e-2, + 0.59966669296534587039e-2, + -0.79834302097671068065e-3, + 0.26849808747266903919e-1, + 0.11191018150952386501e-1, + 0.52987883683189851425e-1, + 0.44457136276735802205e-1, + 0.81308077909546971895e-1, + 0.63450846170589436657e-1, + 0.77851169159852615098e-1, + 0.14438976396244944042e-1, + 0.14333572431904154088e-1, + -0.70497096999631442271e-1, + -0.28697857387349669928e-1, + -0.5517135086590798515e-1, + 0.31788544049211248099e-1, + 0.32420283636563483609e-1, + 0.47542106347107204734e-1, + -0.36500036588373208253e-2, + -0.38046149970969049547e-1, + -0.37315764622931520134e-1, + 0.27437621788318914198e-2, + 0.3986221565381269788e-1, + 0.26502766055466833034e-1, + -0.128625275870950153e-1, + -0.42187531719692243637e-1, + -0.89406700541803853927e-2, + 0.3349502935895588146e-1, + 0.19290832315089920246e-1, + 0.15038654577875358066e-2, + -0.57324664644665249136e-1, + 0.23885284104649181364e-1, + 0.93982882779976278237e-2, + 0.31295721523104891304e-1, + -0.34584272544112143466e-1, + -0.2514510730710184383e-1, + 0.3093008355845750651e-1, + 0.12685376346110185594e-1, + -0.22191180399085564529e-2, + -0.34053826843223673759e-1, + 0.7246570147327127849e-2, + 0.37145742511493336224e-1, + -0.1725235012336124793e-1, + -0.19818899368304616904e-1, + 0.21144749036127912303e-2, + 0.24445845403689811515e-1, + 0.2328075375502164715e-2, + -0.35297449717419375481e-1, + 0.11562661530136837326e-1, + 0.28323443958932919412e-1, + -0.200854832768830871e-1, + -0.87978196986627180826e-2, + -0.14810002248314484922e-2, + 0.30899590891657207486e-1, + -0.19648471430698522672e-1, + -0.22696426225657838349e-1, + 0.33902407833163894502e-1, + -0.51838160636997216574e-2, + -0.92226302102529026522e-2, + -0.13756478824012574255e-1, + 0.31139937946503395971e-1, + -0.10534733126906297221e-1, + -0.16064066815281729389e-1, + 0.61252747629769090792e-2, + 0.24378160820456511171e-1, + -0.27312659687893821314e-1, + -0.31418437113524648463e-2, + 0.23990449827660711296e-1, + -0.10100913448638863465e-1, + -0.11527658368050884563e-1, + 0.69371558668381398671e-2, + 0.12901145723885891481e-1, + -0.11074106213493233736e-1, + -0.1824076296520958998e-1, + 0.39136774531462227567e-1, + -0.23765202183417377668e-1, + -0.10466967426678493516e-1, + 0.25879266803523145318e-1, + -0.14228831089458543815e-1, + 0.24977433418642558394e-2, + -0.11908615175156303523e-1, + 0.28581104403971213657e-1, + -0.24860140736848668208e-1, + -0.10948747442018490379e-2, + 0.20865709712494445033e-1, + -0.11941376789104096376e-1, + -0.14018811821287370523e-1, + 0.25785828698554408983e-1, + -0.10628770205294424747e-1, + -0.12252786938779651124e-1, + 0.16692405967586799315e-1, + -0.64958370180712881378e-3, + -0.14370230402933989455e-1, + 0.11366391469608678327e-1, + 0.20344126585480942944e-2, + -0.53779530569234975865e-2, + -0.77563144117893450744e-2, + 0.2063899005453038657e-1, + -0.13156990601666378529e-1, + -0.13817412279034954267e-1, + 0.37387279926899226468e-1, + -0.36509786701763725925e-1, + 0.13612673127979141655e-1, + 0.86570293605953679145e-2, + -0.11293737751045933651e-1, + -0.31655280516972596726e-2, + 0.16008345112887220618e-1, + -0.1353809536311091459e-1, + 0.18300169553025894854e-3, + 0.87008683789094858757e-2, + -0.4987658198658229472e-2, + -0.39067460620159904366e-2, + 0.43850871980896707208e-2, + 0.70662335560534765902e-2, + -0.19141289760729315178e-1, + 0.17240660906817046466e-1, + 0.52547760409293561065e-3, + -0.20039265446728297265e-1, + 0.23940434867563382265e-1, + -0.84394868642794738933e-2, + -0.12548216906802850748e-1, + 0.19586770860286848578e-1, + -0.51700183678921388108e-2, + -0.19875947847357324644e-1, + 0.3600195269949234278e-1, + -0.31684824626055006769e-1, + 0.12089173090336188116e-1, + 0.6750055125571073969e-2, + -0.1222348669547714331e-1, + 0.46754068479805278163e-2, + 0.49681926071591794511e-2, + -0.61892287502489278309e-2, + -0.22942267903573727687e-2, + 0.12848099258964644845e-1, + -0.17055536335046830171e-1, + 0.13175870575078581226e-1, + -0.66141076705167828678e-2, + 0.36550635171850405156e-2, + -0.52855997699517960967e-2, + 0.67546088474380837352e-2, + -0.31340341052648085403e-2, + -0.50136123274170715097e-2, + 0.11308676098656308961e-1, + -0.93200780874440648793e-2, + -0.99835442169669591679e-3, + 0.12079903213901564338e-1, + -0.14484408955746090608e-1, + 0.4823410066005232727e-2, + 0.10740250680032351407e-1, + -0.20869145595557272305e-1, + 0.17911262243791130355e-1, + -0.42691135912227154772e-2, + -0.91789887343468410524e-2, + 0.11495684098123175321e-1, + -0.53482361053732612507e-3, + -0.14931974526719500249e-1, + 0.2160570723620672956e-1, + -0.11918355245362074676e-1, + -0.97825697350640838934e-2, + 0.29901275213778475554e-1, + -0.35341679673053433275e-1, + 0.23028015284819697978e-1, + -0.21147986679958511065e-2, + -0.12840643917718908354e-1, + 0.12618034758140276447e-1, + 0.39672132056206906026e-1, + -0.58458947623483886735e-1, + -0.32325049793949664489e-1, 0.10398374079997155239, -0.10808108632021261319, - 0.42331585383821946147e-02, + 0.42331585383821946147e-2, 0.13542750832824196339, -0.24047715527952900905, 0.21951014627809589674, - -0.97151489420167200239e-01, - -0.67520596316421696570e-01, + -0.97151489420167200239e-1, + -0.6752059631642169657e-1, 0.14959816979644438573, - -0.11818259484998835940, - -0.63709143547918505035e-02, - 0.94654977446047616763e-01, - -0.74401304184164546163e-01, - -0.76828536208997447177e-01, - 0.23587514729465935970, + -0.1181825948499883594, + -0.63709143547918505035e-2, + 0.94654977446047616763e-1, + -0.74401304184164546163e-1, + -0.76828536208997447177e-1, + 0.2358751472946593597, -0.28986604520326852974, 0.15671408726916191689, - 0.72288121160297189038e-01, + 0.72288121160297189038e-1, -0.25814216879419588091, 0.24635253743241877777, - -0.57308170227748873871e-01, + -0.57308170227748873871e-1, -0.18981846457301213005, - 0.29543748526555452250, + 0.2954374852655545225, -0.20318030141521337129, - -0.20416599189117125290e-01, + -0.2041659918911712529e-1, 0.16833649000403635987, -0.12776286374678039182, - -0.91678421624573541715e-01, + -0.91678421624573541715e-1, 0.29298348592424788839, -0.31731435453079409603, 0.10754928097719866631, @@ -17711,121 +17713,121 @@ function ESERK4ConstantCache(zprev) -0.35228288090799719789, 0.30093216061300409603, -0.11785103814947324452, - -0.44988544874879979329e-01, - 0.51582307218051570707e-01, - 0.39443002904161715561e-01, + -0.44988544874879979329e-1, + 0.51582307218051570707e-1, + 0.39443002904161715561e-1, -0.11065809294758249814, - 0.44750646270843415231e-01, - 0.95127043780118533678e-01, - -0.19542630118946272000, + 0.44750646270843415231e-1, + 0.95127043780118533678e-1, + -0.19542630118946272, 0.14852508831503205555, - -0.30192829938535687556e-01, - -0.39494467735326402313e-01, - -0.36365273331809597201e-01, - 0.15427879410192599230, + -0.30192829938535687556e-1, + -0.39494467735326402313e-1, + -0.36365273331809597201e-1, + 0.1542787941019259923, -0.16857759842141306628, - -0.14886613898051395330e-01, + -0.1488661389805139533e-1, 0.25265996092433873343, -0.34342323208060393513, 0.15884695375274682227, 0.14889381573273144377, -0.33858730633106265406, 0.24153791690308837325, - 0.11541757219088937675e-01, + 0.11541757219088937675e-1, -0.18685100139135712993, - 0.12087814727226753320, - 0.57272896338779410996e-01, + 0.1208781472722675332, + 0.57272896338779410996e-1, -0.13913239832343063385, - 0.91881150695523258753e-02, - 0.16842522173348500880, + 0.91881150695523258753e-2, + 0.1684252217334850088, -0.20400012208597959051, - 0.48951925576829147246e-01, - 0.80491210473757637822e-01, - -0.19453784594591391754e-01, + 0.48951925576829147246e-1, + 0.80491210473757637822e-1, + -0.19453784594591391754e-1, -0.19088600452724216461, 0.26624413871958563238, - -0.68412814643545122317e-01, + -0.68412814643545122317e-1, -0.26549023332784882356, 0.38681420260053961391, -0.18412353693138139299, - -0.14337040952631449620, + -0.1433704095263144962, 0.25149440026138275561, -0.10846654914922607138, - -0.45826663686902302519e-01, - -0.38613841494241844809e-01, + -0.45826663686902302519e-1, + -0.38613841494241844809e-1, 0.23398578221125335141, -0.25681324121568638308, - 0.10664000285354221891e-02, + 0.10664000285354221891e-2, 0.22861398873182192659, -0.15002442428312445788, -0.16768902003277222357, 0.30414490025553186925, - -0.82832196110718375737e-01, + -0.82832196110718375737e-1, -0.24381300548905707193, 0.26736445795937091585, - -0.30434097021541293288e-01, - -0.95267325747939349267e-01, + -0.30434097021541293288e-1, + -0.95267325747939349267e-1, -0.10694367080736473519, 0.31611308343286204092, -0.18961934187555901099, -0.15761523708146552014, 0.22308960166642038958, - 0.96589478724236302321e-01, + 0.96589478724236302321e-1, -0.37114789171527950984, 0.19505852880380153413, 0.15383152654872417342, -0.19150238819257076051, - -0.63845929365272627298e-01, - 0.67832962427019305451e-01, + -0.63845929365272627298e-1, + 0.67832962427019305451e-1, 0.29494064463359254136, -0.50792303004167382863, - 0.17697204975190392040, + 0.1769720497519039204, 0.24028541484248949756, -0.18795231562196287878, -0.12927820970238507181, - 0.55499767000206048917e-01, + 0.55499767000206048917e-1, 0.30552429343048226329, - -0.28283720333026834970, + -0.2828372033302683497, -0.19903221538636955978, 0.35686923633787537291, - 0.36104965371516882511e-01, + 0.36104965371516882511e-1, -0.25556937489598269275, -0.10241426761975572224, 0.29752820909497551538, 0.10338436145125629029, -0.36992532487877094471, - -0.51725720948625666940e-01, + -0.5172572094862566694e-1, 0.34367034252615269452, - 0.66374331251924587050e-01, + 0.6637433125192458705e-1, -0.35495475764289530218, - -0.80646601127461123304e-01, + -0.80646601127461123304e-1, 0.27856112238596647535, 0.23271399324869757042, -0.36800083912697928445, -0.24607842736959867347, 0.32374330428803638204, 0.21524020917536809683, - -0.45017014140950786794e-01, + -0.45017014140950786794e-1, -0.50649859012895537269, - 0.66243299714715681015e-01, + 0.66243299714715681015e-1, 0.43970351886148789644, - 0.81912736730651192207e-01, - -0.21146533861287303280, + 0.81912736730651192207e-1, + -0.2114653386128730328, -0.49767327107116537954, 0.19908333583911674847, 0.46118324942037125513, 0.12237139969047750032, -0.23990620602261047978, -0.56692966670186850653, - 0.44443114561095228149e-02, + 0.44443114561095228149e-2, 0.48041620260018841337, 0.34957512947382018975, 0.16978795023842110923, - -0.65938561107704940500, + -0.659385611077049405, -0.41418849184840722533, -0.21387150893916276329, 0.34358480194792018203, - 0.75679796100959162430, + 0.7567979610095916243, 0.40298470381558215703, 0.21171264244439519375, -0.45163643987226820276, @@ -17835,59 +17837,59 @@ function ESERK4ConstantCache(zprev) -0.54802159588661869538, -0.55835797969465095214, -0.30460702114900034543, - -0.89058039895839699596e-01, - -0.24986065407773816460, + -0.89058039895839699596e-1, + -0.2498606540777381646, 0.14515378552773391951, -0.20660691700050193287, 0.13716681661929081004, - -0.91091626084813637210e-01, - 0.27568666065855361447e-01, - 0.13882516629825373405e-01, - -0.33731568984665276367e-01, - 0.29984486596187433921e-01, - -0.12338566166052427481e-01, - -0.65272688184578884010e-02, - 0.14784289607712646636e-01, - -0.54184838070435491567e-02, - -0.21068286930444317384e-01, - 0.57728657445190081909e-01, - -0.93168775197598585613e-01, + -0.9109162608481363721e-1, + 0.27568666065855361447e-1, + 0.13882516629825373405e-1, + -0.33731568984665276367e-1, + 0.29984486596187433921e-1, + -0.12338566166052427481e-1, + -0.6527268818457888401e-2, + 0.14784289607712646636e-1, + -0.54184838070435491567e-2, + -0.21068286930444317384e-1, + 0.57728657445190081909e-1, + -0.93168775197598585613e-1, 0.11603952309302016654, -0.11816670552294726571, - 0.97579589472022359997e-01, - -0.58443605178848820336e-01, - 0.10120114796571332699e-01, - 0.36155742910256562228e-01, - -0.70019768960509098932e-01, - 0.85065050535073488680e-01, - -0.79783153696756092810e-01, - 0.57793875471101194274e-01, - -0.26017337573924902150e-01, - -0.71828873448763000398e-02, - 0.34543680780729384139e-01, - -0.51280386314997164487e-01, - 0.56076178816906310787e-01, - -0.50601247696814830035e-01, - 0.38701005758912339350e-01, - -0.24825271817936155755e-01, - 0.12823868760679238768e-01, - -0.48586831007522909842e-02, - 0.11198794580877457442e-02, - 0.52387795739158415920, + 0.97579589472022359997e-1, + -0.58443605178848820336e-1, + 0.10120114796571332699e-1, + 0.36155742910256562228e-1, + -0.70019768960509098932e-1, + 0.8506505053507348868e-1, + -0.7978315369675609281e-1, + 0.57793875471101194274e-1, + -0.2601733757392490215e-1, + -0.71828873448763000398e-2, + 0.34543680780729384139e-1, + -0.51280386314997164487e-1, + 0.56076178816906310787e-1, + -0.50601247696814830035e-1, + 0.3870100575891233935e-1, + -0.24825271817936155755e-1, + 0.12823868760679238768e-1, + -0.48586831007522909842e-2, + 0.11198794580877457442e-2, + 0.5238779573915841592, -0.88824143214006356928, 0.56337293832842161301, - -0.65792312529341021032e-01, + -0.65792312529341021032e-1, -0.35188065327340700694, 0.67674672283742831613, -0.71817241623512229065, 0.58717128314638866726, -0.23915690169961101308, - -0.93462501588272170472e-01, - 0.39714096371985485590, + -0.93462501588272170472e-1, + 0.3971409637198548559, -0.46282461817062636733, - 0.37353946082053079980, - -0.58072590499794081442e-01, - -0.26697895576816171870, + 0.3735394608205307998, + -0.58072590499794081442e-1, + -0.2669789557681617187, 0.58768795061395640023, -0.67931153646030151272, 0.60008930944325289403, @@ -17911,339 +17913,339 @@ function ESERK4ConstantCache(zprev) -0.28962580214166505632, -0.30108650441264472875, -0.15622796043049880232, - -0.12341630919621748852e+01, - -0.12224071281523529731e+01, - -0.24741526943281737516e+01, - -0.34905018377618888259e+01, - -0.39778755197005706279e+01, - -0.47480028838450127893e+01, - -0.37149709190872957087e+01, - -0.18242898936352980321e+01, - 0.97784454059343037247e-01, - 0.32712592093964283357e+01, - 0.26796300883403323390e+01, - 0.23656489374659814828e+01, - -0.99943909176211842560, - -0.27813440457446843013e+01, - -0.21260530845760876595e+01, + -0.12341630919621748852e+1, + -0.12224071281523529731e+1, + -0.24741526943281737516e+1, + -0.34905018377618888259e+1, + -0.39778755197005706279e+1, + -0.47480028838450127893e+1, + -0.37149709190872957087e+1, + -0.18242898936352980321e+1, + 0.97784454059343037247e-1, + 0.32712592093964283357e+1, + 0.2679630088340332339e+1, + 0.23656489374659814828e+1, + -0.9994390917621184256, + -0.27813440457446843013e+1, + -0.21260530845760876595e+1, -0.36416711846631033556, - 0.27047800564226025521e+01, - 0.19749562396196871372e+01, - -0.29889627797018092359e-01, - -0.24467271351047732431e+01, - -0.15508476397825163851e+01, + 0.27047800564226025521e+1, + 0.19749562396196871372e+1, + -0.29889627797018092359e-1, + -0.24467271351047732431e+1, + -0.15508476397825163851e+1, 0.68312601179540077823, - 0.27243864190555759919e+01, + 0.27243864190555759919e+1, 0.20598486535858506752, - -0.15359129600347896094e+01, - -0.17513598134964400987e+01, + -0.15359129600347896094e+1, + -0.17513598134964400987e+1, 0.57852480656117777347, - 0.27552695541078389141e+01, + 0.27552695541078389141e+1, -0.79308970628897934585, - -0.11095495771759948944e+01, - -0.14568507780320947287e+01, - 0.17874196460482150162e+01, - 0.16770213053415441440e+01, - -0.19337113095719093980e+01, + -0.11095495771759948944e+1, + -0.14568507780320947287e+1, + 0.17874196460482150162e+1, + 0.1677021305341544144e+1, + -0.1933711309571909398e+1, -0.73633889925073559013, 0.12644995713147855199, - 0.20591537811594529117e+01, + 0.20591537811594529117e+1, -0.47380543274560144029, - -0.21647013731335769116e+01, + -0.21647013731335769116e+1, 0.95449844643013392886, - 0.12746307407964352354e+01, + 0.12746307407964352354e+1, -0.20625595820947012493, - -0.13975778590436815918e+01, + -0.13975778590436815918e+1, -0.20154905042495177558, - 0.21826636461582022974e+01, + 0.21826636461582022974e+1, -0.77357198601914878289, - -0.15945903188271737250e+01, - 0.10741978765039457144e+01, + -0.1594590318827173725e+1, + 0.10741978765039457144e+1, 0.67520606020146134441, - -0.52237602941151338454e-01, - -0.17503275187973557081e+01, - 0.11482889203790391797e+01, - 0.12883671117426716002e+01, - -0.18361154675305930706e+01, - -0.14691943737531786354e-01, + -0.52237602941151338454e-1, + -0.17503275187973557081e+1, + 0.11482889203790391797e+1, + 0.12883671117426716002e+1, + -0.18361154675305930706e+1, + -0.14691943737531786354e-1, 0.99151540422287265386, 0.30826206229548297477, - -0.13172127106912874250e+01, - 0.96676004587976732685e-01, - 0.14390877518146802938e+01, + -0.1317212710691287425e+1, + 0.96676004587976732685e-1, + 0.14390877518146802938e+1, -0.75021625077359799239, - -0.11862031298567785598e+01, - 0.14633480073504876451e+01, + -0.11862031298567785598e+1, + 0.14633480073504876451e+1, 0.28554606136610188871, - -0.14908703173460455815e+01, + -0.14908703173460455815e+1, 0.64788857096677987535, 0.63011800371500092943, -0.31797123102519142535, -0.90853574316214458229, 0.81835255385644223303, 0.95163739581454520611, - -0.22528281198618715919e+01, - 0.14132024315401336967e+01, + -0.22528281198618715919e+1, + 0.14132024315401336967e+1, 0.53294796401444999301, - -0.13394784936915395956e+01, + -0.13394784936915395956e+1, 0.53027549679346563938, 0.25961685978782100825, 0.25592713026767394124, - -0.12487837556230674263e+01, - 0.10577318238285933205e+01, + -0.12487837556230674263e+1, + 0.10577318238285933205e+1, 0.43772294357703561696, - -0.15462103811447580615e+01, + -0.15462103811447580615e+1, 0.93357771564722136226, 0.68691379853729217508, - -0.14313286000161689060e+01, + -0.1431328600016168906e+1, 0.53312457302662441538, 0.85261786515115223217, - -0.11459291658245422951e+01, + -0.11459291658245422951e+1, 0.21181422635881821948, - 0.67369782528515398390, + 0.6736978252851539839, -0.50159843659330616283, -0.26317997253629260568, 0.39314256515632473032, 0.49188313486360146776, - -0.13769341537363450900e+01, - 0.10418294659436728722e+01, + -0.137693415373634509e+1, + 0.10418294659436728722e+1, 0.47598488285956946919, - -0.18146842036283261645e+01, - 0.17205536561894325676e+01, - -0.34201244735777036610, + -0.18146842036283261645e+1, + 0.17205536561894325676e+1, + -0.3420124473577703661, -0.96385585709507537455, - 0.10638503555253127075e+01, + 0.10638503555253127075e+1, -0.11946809177177304673, -0.73535893002934860085, 0.66922810618399497518, - 0.60387256820079580899e-01, + 0.60387256820079580899e-1, -0.53659807008025939279, 0.27410779751231423296, 0.28304513977149658999, -0.32061260803743835135, -0.36956011694874674189, - 0.11077198489614008547e+01, - -0.10167951277393683096e+01, - -0.16082604865916248771e-01, - 0.11436140065929600862e+01, - -0.13237541372987950972e+01, - 0.33072882958824645350, + 0.11077198489614008547e+1, + -0.10167951277393683096e+1, + -0.16082604865916248771e-1, + 0.11436140065929600862e+1, + -0.13237541372987950972e+1, + 0.3307288295882464535, 0.99753105581952816738, - -0.14889537147791189753e+01, + -0.14889537147791189753e+1, 0.68593281997294996977, - 0.77081370376631519470, - -0.17162659751331612590e+01, - 0.14656930343558223218e+01, + 0.7708137037663151947, + -0.1716265975133161259e+1, + 0.14656930343558223218e+1, -0.33186127201066667469, -0.72383578141124949035, 0.95046846196628598236, - -0.37770724880670930590, + -0.3777072488067093059, -0.32668202742123614302, - 0.51892836575674228250, + 0.5189283657567422825, -0.10991130466254120379, -0.45132357210519946644, 0.66515449190458864059, -0.42743008343010213679, - 0.58703233588383835206e-01, - 0.71583395392498569421e-01, - 0.86569490111949351507e-01, + 0.58703233588383835206e-1, + 0.71583395392498569421e-1, + 0.86569490111949351507e-1, -0.23832736458872408325, - 0.80124332863417274675e-01, + 0.80124332863417274675e-1, 0.35973471971536480352, -0.70016982546879225069, 0.55407807305411915788, - 0.85281281106491538258e-01, + 0.85281281106491538258e-1, -0.76864571924872537867, 0.93414970858761803285, -0.38086373492213526637, -0.52165328261073251603, - 0.10967369225640672958e+01, + 0.10967369225640672958e+1, -0.89125497527258945585, - 0.57030718469159483175e-01, + 0.57030718469159483175e-1, 0.74594082595104316269, -0.85588142366971875497, 0.14216465046715948128, 0.86644165923581795141, - -0.13646959280164521200e+01, + -0.136469592801645212e+1, 0.88737192505430839695, 0.31841440167891127411, - -0.14509217966101219943e+01, - 0.17365616491148365697e+01, + -0.14509217966101219943e+1, + 0.17365616491148365697e+1, -0.99884090473495379392, -0.21043004168018333844, - 0.10215795480614668911e+01, + 0.10215795480614668911e+1, -0.89103012786227753228, -0.74271019797243298388, - 0.16824974538150170300e+01, + 0.168249745381501703e+1, 0.14707709883582056887, - -0.22480698605204962881e+01, - 0.33344647535774116776e+01, - -0.19033982244065692502e+01, + -0.22480698605204962881e+1, + 0.33344647535774116776e+1, + -0.19033982244065692502e+1, -0.93268208971741906055, - 0.37567133168684718747e+01, - -0.41681857943703093383e+01, - 0.22057511246427172757e+01, - 0.12033647687945463467e+01, - -0.32019139346850291616e+01, - 0.27496105802275159213e+01, - 0.13414287684542944290, - -0.26595097606598692153e+01, - 0.29887506267594128317e+01, + 0.37567133168684718747e+1, + -0.41681857943703093383e+1, + 0.22057511246427172757e+1, + 0.12033647687945463467e+1, + -0.32019139346850291616e+1, + 0.27496105802275159213e+1, + 0.1341428768454294429, + -0.26595097606598692153e+1, + 0.29887506267594128317e+1, -0.14347938045380589922, - -0.34336178883656507388e+01, - 0.52395109810704605380e+01, - -0.30723489486573809515e+01, - -0.14501201100662872712e+01, - 0.55276605391397319877e+01, - -0.56476066435199330229e+01, - 0.20090016959654439788e+01, - 0.30802216732922294007e+01, - -0.53143567739872876743e+01, - 0.34234113124410869844e+01, - 0.13148155676497335076e+01, - -0.44386248181936149848e+01, - 0.35379216344621036150e+01, - 0.12562691736766116168e+01, - -0.56789790434680416098e+01, - 0.63931783201092793334e+01, - -0.22076458368543780963e+01, - -0.33096972239495658918e+01, - 0.63895330905995573190e+01, - -0.46410412608929600964e+01, + -0.34336178883656507388e+1, + 0.5239510981070460538e+1, + -0.30723489486573809515e+1, + -0.14501201100662872712e+1, + 0.55276605391397319877e+1, + -0.56476066435199330229e+1, + 0.20090016959654439788e+1, + 0.30802216732922294007e+1, + -0.53143567739872876743e+1, + 0.34234113124410869844e+1, + 0.13148155676497335076e+1, + -0.44386248181936149848e+1, + 0.3537921634462103615e+1, + 0.12562691736766116168e+1, + -0.56789790434680416098e+1, + 0.63931783201092793334e+1, + -0.22076458368543780963e+1, + -0.33096972239495658918e+1, + 0.6389533090599557319e+1, + -0.46410412608929600964e+1, 0.52965347200476642353, - 0.25224382383633083826e+01, - -0.17091230255854197306e+01, - -0.11862972936110240951e+01, - 0.31995835203947673442e+01, - -0.16388723922080195017e+01, - -0.17591777160970352156e+01, - 0.40718710961408550730e+01, - -0.26722711037482684837e+01, + 0.25224382383633083826e+1, + -0.17091230255854197306e+1, + -0.11862972936110240951e+1, + 0.31995835203947673442e+1, + -0.16388723922080195017e+1, + -0.17591777160970352156e+1, + 0.4071871096140855073e+1, + -0.26722711037482684837e+1, -0.53701403558930638216, - 0.24679686856879698986e+01, + 0.24679686856879698986e+1, -0.58534873747573001879, - -0.27639583881809834942e+01, - 0.39964605678323024129e+01, + -0.27639583881809834942e+1, + 0.39964605678323024129e+1, -0.54376216158283685598, - -0.46008831226378470447e+01, - 0.69092262615603408094e+01, - -0.32691912999449583843e+01, - -0.30944205770645889508e+01, - 0.69359534600184060693e+01, - -0.45549377855109325353e+01, + -0.46008831226378470447e+1, + 0.69092262615603408094e+1, + -0.32691912999449583843e+1, + -0.30944205770645889508e+1, + 0.69359534600184060693e+1, + -0.45549377855109325353e+1, -0.99700281766586595911, - 0.44887403569970754091e+01, - -0.24030342978974830181e+01, - -0.20241625319793579152e+01, - 0.39033734913775086639e+01, + 0.44887403569970754091e+1, + -0.24030342978974830181e+1, + -0.20241625319793579152e+1, + 0.39033734913775086639e+1, -0.68985690950303091284, - -0.35514812684903573903e+01, - 0.42373851789436640658e+01, + -0.35514812684903573903e+1, + 0.42373851789436640658e+1, -0.24084048975013014338, - -0.32045274108350021436e+01, - 0.19963987582338116322e+01, - 0.30981912916788489909e+01, - -0.54488287646823323485e+01, - 0.16373284542095583038e+01, - 0.54595272345664795921e+01, - -0.79966703239385079627e+01, - 0.35106193441912534325e+01, - 0.34432998082562580322e+01, - -0.50982002323406252486e+01, - 0.10387979754716856196e+01, - 0.29068067494584663990e+01, + -0.32045274108350021436e+1, + 0.19963987582338116322e+1, + 0.30981912916788489909e+1, + -0.54488287646823323485e+1, + 0.16373284542095583038e+1, + 0.54595272345664795921e+1, + -0.79966703239385079627e+1, + 0.35106193441912534325e+1, + 0.34432998082562580322e+1, + -0.50982002323406252486e+1, + 0.10387979754716856196e+1, + 0.2906806749458466399e+1, -0.84881795759295264325, - -0.40945981069909631600e+01, - 0.50783323863183271740e+01, + -0.409459810699096316e+1, + 0.5078332386318327174e+1, 0.58700638665128823668, - -0.58751710771968692626e+01, - 0.41313359858349718579e+01, - 0.32183474041444415370e+01, - -0.65516229375709347238e+01, - 0.18456593158516776398e+01, - 0.50720797306741403077e+01, - -0.48567442109808753870e+01, - -0.12616144231968302591e+01, - 0.44429197714279808906e+01, - 0.40495192184399009250, - -0.56760085349051303538e+01, - 0.31783620751258800929e+01, - 0.45986428413727464815e+01, - -0.60138905222034821918e+01, - -0.13954048264575591443e+01, - 0.77565117943487020824e+01, - -0.37936058174988072089e+01, - -0.38908966576480303878e+01, - 0.40309624826826491173e+01, - 0.27818396826120701526e+01, - -0.35888588483542709362e+01, - -0.45351446548361735722e+01, - 0.96607142989953018741e+01, - -0.25420260265983967152e+01, - -0.63376830081408890294e+01, - 0.42842103099010628853e+01, - 0.36818229708076772866e+01, - -0.21207755003298762730e+01, - -0.65216675533571129009e+01, - 0.64393369022675814861e+01, - 0.43447456374344870511e+01, - -0.77381425939751906640e+01, - -0.14587651848538334409e+01, - 0.63766191620203596102e+01, - 0.22940755320820267471e+01, - -0.71315771553074416289e+01, - -0.20735391806036211904e+01, - 0.83040292956322243612e+01, - 0.14246818757789079246e+01, - -0.81298264283584948942e+01, - -0.14483379523925927757e+01, - 0.80688104452402775735e+01, - 0.22839886148084334039e+01, - -0.70554679316153317004e+01, - -0.48703264792837863695e+01, - 0.82415038636149855478e+01, - 0.56781220898807864828e+01, - -0.69969167729099295272e+01, - -0.59902286245067832837e+01, - 0.21937070443064485836e+01, - 0.10820124510084751179e+02, + -0.58751710771968692626e+1, + 0.41313359858349718579e+1, + 0.3218347404144441537e+1, + -0.65516229375709347238e+1, + 0.18456593158516776398e+1, + 0.50720797306741403077e+1, + -0.4856744210980875387e+1, + -0.12616144231968302591e+1, + 0.44429197714279808906e+1, + 0.4049519218439900925, + -0.56760085349051303538e+1, + 0.31783620751258800929e+1, + 0.45986428413727464815e+1, + -0.60138905222034821918e+1, + -0.13954048264575591443e+1, + 0.77565117943487020824e+1, + -0.37936058174988072089e+1, + -0.38908966576480303878e+1, + 0.40309624826826491173e+1, + 0.27818396826120701526e+1, + -0.35888588483542709362e+1, + -0.45351446548361735722e+1, + 0.96607142989953018741e+1, + -0.25420260265983967152e+1, + -0.63376830081408890294e+1, + 0.42842103099010628853e+1, + 0.36818229708076772866e+1, + -0.2120775500329876273e+1, + -0.65216675533571129009e+1, + 0.64393369022675814861e+1, + 0.43447456374344870511e+1, + -0.7738142593975190664e+1, + -0.14587651848538334409e+1, + 0.63766191620203596102e+1, + 0.22940755320820267471e+1, + -0.71315771553074416289e+1, + -0.20735391806036211904e+1, + 0.83040292956322243612e+1, + 0.14246818757789079246e+1, + -0.81298264283584948942e+1, + -0.14483379523925927757e+1, + 0.80688104452402775735e+1, + 0.22839886148084334039e+1, + -0.70554679316153317004e+1, + -0.48703264792837863695e+1, + 0.82415038636149855478e+1, + 0.56781220898807864828e+1, + -0.69969167729099295272e+1, + -0.59902286245067832837e+1, + 0.21937070443064485836e+1, + 0.10820124510084751179e+2, -0.98485077186432279372, - -0.10219835694158527772e+02, - -0.25229963792798910660e+01, - 0.59100746476683374553e+01, - 0.10585797317717581478e+02, - -0.38677940643436303780e+01, - -0.11111241929615935931e+02, - -0.29188337549979275209e+01, - 0.58785022000656654839e+01, - 0.13040068469624417347e+02, + -0.10219835694158527772e+2, + -0.2522996379279891066e+1, + 0.59100746476683374553e+1, + 0.10585797317717581478e+2, + -0.3867794064343630378e+1, + -0.11111241929615935931e+2, + -0.29188337549979275209e+1, + 0.58785022000656654839e+1, + 0.13040068469624417347e+2, -0.31064711286941326662, - -0.10424028703146177577e+02, - -0.95082420806085412579e+01, - -0.22549491912890728962e+01, - 0.13668702836928950717e+02, - 0.11028773535736682732e+02, - 0.42413217745539304460e+01, - -0.79569914132500594306e+01, - -0.17163732223067682980e+02, - -0.10156911047393643699e+02, - -0.42792543073072444315e+01, - 0.10262235379227634624e+02, - 0.18202293238504669404e+02, - 0.19504608884435960192e+02, - 0.22087842751903956184e+02, - 0.13509611843122357300e+02, - 0.12798908447323876558e+02, - 0.66208087817212026849e+01, - 0.33277402557352107060e+01, - 0.39563220943523482731e+01, - -0.11641722496507322937e+01, - 0.25790325274923109333e+01, - -0.12317310866308246453e+01, + -0.10424028703146177577e+2, + -0.95082420806085412579e+1, + -0.22549491912890728962e+1, + 0.13668702836928950717e+2, + 0.11028773535736682732e+2, + 0.4241321774553930446e+1, + -0.79569914132500594306e+1, + -0.1716373222306768298e+2, + -0.10156911047393643699e+2, + -0.42792543073072444315e+1, + 0.10262235379227634624e+2, + 0.18202293238504669404e+2, + 0.19504608884435960192e+2, + 0.22087842751903956184e+2, + 0.135096118431223573e+2, + 0.12798908447323876558e+2, + 0.66208087817212026849e+1, + 0.3327740255735210706e+1, + 0.39563220943523482731e+1, + -0.11641722496507322937e+1, + 0.25790325274923109333e+1, + -0.12317310866308246453e+1, 0.61659008329225839518, 0.35449145814145999189, -0.87695325412148783517, - 0.10307005575921854845e+01, + 0.10307005575921854845e+1, -0.77205893035032413518, 0.27731574365614608535, 0.23684239651314584196, @@ -18251,16 +18253,16 @@ function ESERK4ConstantCache(zprev) 0.58022826567385388241, -0.27906593215114272599, -0.23549420441906748769, - 0.78371287804194100790, - -0.11824138325986752740e+01, - 0.12936199388273634803e+01, - -0.10754224217552861287e+01, + 0.7837128780419410079, + -0.1182413832598675274e+1, + 0.12936199388273634803e+1, + -0.10754224217552861287e+1, 0.58053385937495849412, - 0.55784691520040223522e-01, + 0.55784691520040223522e-1, -0.66868470158881487819, - 0.11047614879691343148e+01, - -0.12713759135564739466e+01, - 0.11495867891947728623e+01, + 0.11047614879691343148e+1, + -0.12713759135564739466e+1, + 0.11495867891947728623e+1, -0.79846762255803760411, 0.32488900027347139554, 0.14466625291010640209, @@ -18270,1592 +18272,1592 @@ function ESERK4ConstantCache(zprev) 0.55075593954842827493, -0.33247546800234822895, 0.11419992642908317892, - 0.41909789983232435817e-01, + 0.41909789983232435817e-1, -0.10495951149747774489, - 0.79099878308801607751e-01, - -0.36856147890434032277e+01, - 0.60090902306954703249e+01, - -0.35215791091699690796e+01, + 0.79099878308801607751e-1, + -0.36856147890434032277e+1, + 0.60090902306954703249e+1, + -0.35215791091699690796e+1, -0.30414049946209920083, - 0.32944892394573317418e+01, - -0.55478986425866789745e+01, - 0.54309649325813005305e+01, - -0.40624637846644722217e+01, + 0.32944892394573317418e+1, + -0.55478986425866789745e+1, + 0.54309649325813005305e+1, + -0.40624637846644722217e+1, 0.98273082670632982971, - 0.17413149283747892948e+01, - -0.41524289308473445459e+01, - 0.44346513133660607764e+01, - -0.34676532853498214237e+01, + 0.17413149283747892948e+1, + -0.41524289308473445459e+1, + 0.44346513133660607764e+1, + -0.34676532853498214237e+1, 0.58636217442176608028, - 0.22435869347525896345e+01, - -0.50252883113703994411e+01, - 0.57800236288550523867e+01, - -0.51580366677463080904e+01, - 0.22831517256481301814e+01, + 0.22435869347525896345e+1, + -0.50252883113703994411e+1, + 0.57800236288550523867e+1, + -0.51580366677463080904e+1, + 0.22831517256481301814e+1, 0.99637606120048416436, - -0.46573586822720214329e+01, - 0.65527760817450717568e+01, - -0.70658928646867718015e+01, - 0.50353455159779034744e+01, - -0.20882102722534914285e+01, - -0.18419968585181545340e+01, - 0.45440024509798888630e+01, - -0.62010837630267792164e+01, - 0.53801480495717504127e+01, - -0.34326064539329532721e+01, + -0.46573586822720214329e+1, + 0.65527760817450717568e+1, + -0.70658928646867718015e+1, + 0.50353455159779034744e+1, + -0.20882102722534914285e+1, + -0.1841996858518154534e+1, + 0.4544002450979888863e+1, + -0.62010837630267792164e+1, + 0.53801480495717504127e+1, + -0.34326064539329532721e+1, 0.11206465501027772225, - 0.24969709792679180005e+01, - -0.43811223219598058876e+01, - 0.43834568997463856377e+01, - -0.25573772338940607973e+01, - 0.12555004042445492285e+01, - 0.40005878324818473502e+01, + 0.24969709792679180005e+1, + -0.43811223219598058876e+1, + 0.43834568997463856377e+1, + -0.25573772338940607973e+1, + 0.12555004042445492285e+1, + 0.40005878324818473502e+1, 0.77997243166859830943, - 0.11542761370284155831e+02, - 0.12026063671053348614e+02, - 0.21964164156013119111e+02, - 0.33999599990727503496e+02, - 0.35630499520442761252e+02, - 0.45706215743594690082e+02, - 0.33466180731006843985e+02, - 0.18056833056289587347e+02, - -0.18573370081115390118e+01, - -0.29565996671991168654e+02, - -0.26081943931789979274e+02, - -0.20903418406354386860e+02, - 0.81405391318231234976e+01, - 0.26967247629850202628e+02, - 0.19243649385189080192e+02, - 0.33657374504143016125e+01, - -0.24444386739413168641e+02, - -0.20012393440922100041e+02, - 0.24864991930269400022e+01, - 0.20281962156802805453e+02, - 0.16994324682963984685e+02, - -0.84722460866027322623e+01, - -0.24089354373174504786e+02, - -0.23086627860606165896e+01, - 0.13738699046295023365e+02, - 0.17770747399888730200e+02, - -0.73650218354183021319e+01, - -0.23584915455391314509e+02, - 0.54742165293599418519e+01, - 0.11774919332763255753e+02, - 0.12859668118787251245e+02, - -0.16660581041163446514e+02, - -0.15069099563465309544e+02, - 0.17058401679419624486e+02, - 0.80215307046812238667e+01, - -0.22686462900649715380e+01, - -0.18353911102577697534e+02, - 0.38461540986235966955e+01, - 0.20505532686727072189e+02, - -0.90213166598866543211e+01, - -0.11871664104764905190e+02, - 0.18963675941923241464e+01, - 0.13111072541940398395e+02, - 0.17960133245593052909e+01, - -0.20350463336453330498e+02, - 0.73645516741175010011e+01, - 0.14474452475751846237e+02, - -0.93116254650018479566e+01, - -0.72960422176927179905e+01, - 0.16455578633463638916e+01, - 0.15190721333119329373e+02, - -0.98001632413915373832e+01, - -0.12518608374150074880e+02, - 0.17066911663213858219e+02, + 0.11542761370284155831e+2, + 0.12026063671053348614e+2, + 0.21964164156013119111e+2, + 0.33999599990727503496e+2, + 0.35630499520442761252e+2, + 0.45706215743594690082e+2, + 0.33466180731006843985e+2, + 0.18056833056289587347e+2, + -0.18573370081115390118e+1, + -0.29565996671991168654e+2, + -0.26081943931789979274e+2, + -0.2090341840635438686e+2, + 0.81405391318231234976e+1, + 0.26967247629850202628e+2, + 0.19243649385189080192e+2, + 0.33657374504143016125e+1, + -0.24444386739413168641e+2, + -0.20012393440922100041e+2, + 0.24864991930269400022e+1, + 0.20281962156802805453e+2, + 0.16994324682963984685e+2, + -0.84722460866027322623e+1, + -0.24089354373174504786e+2, + -0.23086627860606165896e+1, + 0.13738699046295023365e+2, + 0.177707473998887302e+2, + -0.73650218354183021319e+1, + -0.23584915455391314509e+2, + 0.54742165293599418519e+1, + 0.11774919332763255753e+2, + 0.12859668118787251245e+2, + -0.16660581041163446514e+2, + -0.15069099563465309544e+2, + 0.17058401679419624486e+2, + 0.80215307046812238667e+1, + -0.2268646290064971538e+1, + -0.18353911102577697534e+2, + 0.38461540986235966955e+1, + 0.20505532686727072189e+2, + -0.90213166598866543211e+1, + -0.1187166410476490519e+2, + 0.18963675941923241464e+1, + 0.13111072541940398395e+2, + 0.17960133245593052909e+1, + -0.20350463336453330498e+2, + 0.73645516741175010011e+1, + 0.14474452475751846237e+2, + -0.93116254650018479566e+1, + -0.72960422176927179905e+1, + 0.16455578633463638916e+1, + 0.15190721333119329373e+2, + -0.98001632413915373832e+1, + -0.1251860837415007488e+2, + 0.17066911663213858219e+2, 0.80738001683398630259, - -0.10454321185330305966e+02, - -0.13279894375822181019e+01, - 0.10640681862366285770e+02, - 0.58309015531465335780, - -0.14519228072978650701e+02, - 0.75407622703931105335e+01, - 0.11109417183242006999e+02, - -0.14184109599450808403e+02, - -0.18495377387397289315e+01, - 0.13062622573238039436e+02, - -0.54218767641739189500e+01, - -0.60741499725065359883e+01, - 0.26157468096185527706e+01, - 0.93607480357822527850e+01, - -0.89172415673267568792e+01, - -0.74349781070442411135e+01, - 0.19682756588014818533e+02, - -0.12216421213119160072e+02, - -0.53804904333858782906e+01, - 0.12242209634670858875e+02, - -0.40527278514252662589e+01, - -0.38185135908169884900e+01, + -0.10454321185330305966e+2, + -0.13279894375822181019e+1, + 0.1064068186236628577e+2, + 0.5830901553146533578, + -0.14519228072978650701e+2, + 0.75407622703931105335e+1, + 0.11109417183242006999e+2, + -0.14184109599450808403e+2, + -0.18495377387397289315e+1, + 0.13062622573238039436e+2, + -0.542187676417391895e+1, + -0.60741499725065359883e+1, + 0.26157468096185527706e+1, + 0.9360748035782252785e+1, + -0.89172415673267568792e+1, + -0.74349781070442411135e+1, + 0.19682756588014818533e+2, + -0.12216421213119160072e+2, + -0.53804904333858782906e+1, + 0.12242209634670858875e+2, + -0.40527278514252662589e+1, + -0.381851359081698849e+1, -0.72205409149825516835, - 0.99771016818486799593e+01, - -0.84317567704380618210e+01, - -0.51075346755070398785e+01, - 0.14946120554256056678e+02, - -0.87461355691790743094e+01, - -0.67422060096698368525e+01, - 0.13862541063966469679e+02, - -0.54409802323194256246e+01, - -0.77246054245986552900e+01, - 0.10820392303563949099e+02, - -0.25027511561105915128e+01, - -0.54190163767496501990e+01, - 0.36054409350578744409e+01, - 0.35459098464852019106e+01, - -0.45684935228162171228e+01, - -0.40644770301145216607e+01, - 0.12815420735247693429e+02, - -0.10219101223258149957e+02, - -0.34655449025572067079e+01, - 0.15598712916848851862e+02, - -0.14533811759295739208e+02, - 0.16707525556906666075e+01, - 0.10333816926897497979e+02, - -0.10947797976805242470e+02, - 0.17316460017937456151e+01, - 0.66657707970141517606e+01, - -0.64340706939572545053e+01, - -0.66138202797320619353e-01, - 0.42923038427901740732e+01, - -0.17182596766429603097e+01, - -0.35298789839436017779e+01, - 0.38704629963907204449e+01, - 0.26153361507175856282e+01, - -0.95733730444758418088e+01, - 0.88116751970360596147e+01, + 0.99771016818486799593e+1, + -0.8431756770438061821e+1, + -0.51075346755070398785e+1, + 0.14946120554256056678e+2, + -0.87461355691790743094e+1, + -0.67422060096698368525e+1, + 0.13862541063966469679e+2, + -0.54409802323194256246e+1, + -0.772460542459865529e+1, + 0.10820392303563949099e+2, + -0.25027511561105915128e+1, + -0.5419016376749650199e+1, + 0.36054409350578744409e+1, + 0.35459098464852019106e+1, + -0.45684935228162171228e+1, + -0.40644770301145216607e+1, + 0.12815420735247693429e+2, + -0.10219101223258149957e+2, + -0.34655449025572067079e+1, + 0.15598712916848851862e+2, + -0.14533811759295739208e+2, + 0.16707525556906666075e+1, + 0.10333816926897497979e+2, + -0.1094779797680524247e+2, + 0.17316460017937456151e+1, + 0.66657707970141517606e+1, + -0.64340706939572545053e+1, + -0.66138202797320619353e-1, + 0.42923038427901740732e+1, + -0.17182596766429603097e+1, + -0.35298789839436017779e+1, + 0.38704629963907204449e+1, + 0.26153361507175856282e+1, + -0.95733730444758418088e+1, + 0.88116751970360596147e+1, 0.71263930044328016589, - -0.11081451601067001889e+02, - 0.12553164332264525882e+02, - -0.30182952188759712975e+01, - -0.96978326719408745049e+01, - 0.14629731468264331795e+02, - -0.74717489808180266309e+01, - -0.58455867932951068866e+01, - 0.14493732679099769811e+02, - -0.12123793354586002380e+02, - 0.16742684178072340107e+01, - 0.78807779167784364205e+01, - -0.95621327900280128631e+01, - 0.36940016884171646971e+01, - 0.34235952484817953057e+01, - -0.57142244301373841253e+01, - 0.22804028960371742762e+01, - 0.27305795929097889108e+01, - -0.46784584606706509646e+01, - 0.25816088411890634191e+01, + -0.11081451601067001889e+2, + 0.12553164332264525882e+2, + -0.30182952188759712975e+1, + -0.96978326719408745049e+1, + 0.14629731468264331795e+2, + -0.74717489808180266309e+1, + -0.58455867932951068866e+1, + 0.14493732679099769811e+2, + -0.1212379335458600238e+2, + 0.16742684178072340107e+1, + 0.78807779167784364205e+1, + -0.95621327900280128631e+1, + 0.36940016884171646971e+1, + 0.34235952484817953057e+1, + -0.57142244301373841253e+1, + 0.22804028960371742762e+1, + 0.27305795929097889108e+1, + -0.46784584606706509646e+1, + 0.25816088411890634191e+1, 0.59984399294955037529, - -0.14725590261143108872e+01, + -0.14725590261143108872e+1, -0.37026237294245506471, - 0.21163478253900676052e+01, + 0.21163478253900676052e+1, -0.88929956708121005171, - -0.30714724519365788069e+01, - 0.62058313618320743998e+01, - -0.48775689875559198327e+01, - -0.10186633444542345650e+01, - 0.73354641507010169832e+01, - -0.88719389648569109141e+01, - 0.37778367583938061713e+01, - 0.44925990513246274460e+01, - -0.96458673224061790563e+01, - 0.74941590951910752594e+01, + -0.30714724519365788069e+1, + 0.62058313618320743998e+1, + -0.48775689875559198327e+1, + -0.1018663344454234565e+1, + 0.73354641507010169832e+1, + -0.88719389648569109141e+1, + 0.37778367583938061713e+1, + 0.4492599051324627446e+1, + -0.96458673224061790563e+1, + 0.74941590951910752594e+1, 0.48845146395963773278, - -0.80847247397891557341e+01, - 0.90693770956499317748e+01, - -0.21978739763147503439e+01, - -0.75922550702139588452e+01, - 0.12750052020751988735e+02, - -0.88713949877668323296e+01, - -0.18192259339948460006e+01, - 0.11925352033888836800e+02, - -0.14304874998310831202e+02, - 0.73646083408354465760e+01, - 0.37240116654566666199e+01, - -0.10861693982295351546e+02, - 0.90289569818194976847e+01, - 0.49869059746113997278e+01, - -0.15035543248025284413e+02, - 0.52419599521739259629e+01, - 0.98023360106442929407e+01, - -0.21220302209448195896e+02, - 0.16766170898713063764e+02, + -0.80847247397891557341e+1, + 0.90693770956499317748e+1, + -0.21978739763147503439e+1, + -0.75922550702139588452e+1, + 0.12750052020751988735e+2, + -0.88713949877668323296e+1, + -0.18192259339948460006e+1, + 0.119253520338888368e+2, + -0.14304874998310831202e+2, + 0.7364608340835446576e+1, + 0.37240116654566666199e+1, + -0.10861693982295351546e+2, + 0.90289569818194976847e+1, + 0.49869059746113997278e+1, + -0.15035543248025284413e+2, + 0.52419599521739259629e+1, + 0.98023360106442929407e+1, + -0.21220302209448195896e+2, + 0.16766170898713063764e+2, -0.87425588966414613523, - -0.18475561938830836084e+02, - 0.24656876659454727729e+02, - -0.15419731733686113273e+02, - -0.53896849694809878528e+01, - 0.19652803243762445362e+02, - -0.19097228661606592937e+02, - 0.15775684626683337264e+01, - 0.16188894980027466630e+02, - -0.21735803922510601893e+02, - 0.65900752737540742032e+01, - 0.15717756326098427877e+02, - -0.29862664711263612105e+02, - 0.20427893526236257316e+02, - 0.46332634795597114064e+01, - -0.29504935734111899848e+02, - 0.32133798415394771553e+02, - -0.12494546392928514322e+02, - -0.16880042417451626591e+02, - 0.30058222007507026774e+02, - -0.19084687445973923303e+02, - -0.92336444748088730705e+01, - 0.28125192909598883517e+02, - -0.23236517518519502090e+02, - -0.50863492442403757110e+01, - 0.31192526483522282632e+02, - -0.35586510798159970648e+02, - 0.11404461108603964448e+02, - 0.19286557136214970143e+02, - -0.34391818558307136300e+02, - 0.20661919575311792130e+02, - 0.50632671494593433081e+01, - -0.21458044035370299696e+02, - 0.12260252399551223590e+02, - 0.91959359158434370585e+01, - -0.22964648557597090672e+02, - 0.12120366872300076366e+02, - 0.10871177158306059241e+02, - -0.25944206746365779281e+02, - 0.15694409816124286650e+02, - 0.70441971269735175198e+01, - -0.21111139207305942733e+02, - 0.89037142847491477227e+01, - 0.14941559948843606165e+02, - -0.26679280349144118389e+02, - 0.81385257488712881013e+01, - 0.23173814948158835136e+02, - -0.39077235157710290991e+02, - 0.19085223957783480131e+02, - 0.17696370794257294534e+02, - -0.39500739535035549466e+02, - 0.23723492524587854291e+02, - 0.10133084683485396482e+02, - -0.29707093550335624599e+02, - 0.13929117139834142236e+02, - 0.15411655741702759315e+02, - -0.26928666561119829481e+02, - 0.50856086042124060143e+01, - 0.22923089264092176620e+02, - -0.26974800724148497721e+02, + -0.18475561938830836084e+2, + 0.24656876659454727729e+2, + -0.15419731733686113273e+2, + -0.53896849694809878528e+1, + 0.19652803243762445362e+2, + -0.19097228661606592937e+2, + 0.15775684626683337264e+1, + 0.1618889498002746663e+2, + -0.21735803922510601893e+2, + 0.65900752737540742032e+1, + 0.15717756326098427877e+2, + -0.29862664711263612105e+2, + 0.20427893526236257316e+2, + 0.46332634795597114064e+1, + -0.29504935734111899848e+2, + 0.32133798415394771553e+2, + -0.12494546392928514322e+2, + -0.16880042417451626591e+2, + 0.30058222007507026774e+2, + -0.19084687445973923303e+2, + -0.92336444748088730705e+1, + 0.28125192909598883517e+2, + -0.2323651751851950209e+2, + -0.5086349244240375711e+1, + 0.31192526483522282632e+2, + -0.35586510798159970648e+2, + 0.11404461108603964448e+2, + 0.19286557136214970143e+2, + -0.343918185583071363e+2, + 0.2066191957531179213e+2, + 0.50632671494593433081e+1, + -0.21458044035370299696e+2, + 0.1226025239955122359e+2, + 0.91959359158434370585e+1, + -0.22964648557597090672e+2, + 0.12120366872300076366e+2, + 0.10871177158306059241e+2, + -0.25944206746365779281e+2, + 0.1569440981612428665e+2, + 0.70441971269735175198e+1, + -0.21111139207305942733e+2, + 0.89037142847491477227e+1, + 0.14941559948843606165e+2, + -0.26679280349144118389e+2, + 0.81385257488712881013e+1, + 0.23173814948158835136e+2, + -0.39077235157710290991e+2, + 0.19085223957783480131e+2, + 0.17696370794257294534e+2, + -0.39500739535035549466e+2, + 0.23723492524587854291e+2, + 0.10133084683485396482e+2, + -0.29707093550335624599e+2, + 0.13929117139834142236e+2, + 0.15411655741702759315e+2, + -0.26928666561119829481e+2, + 0.50856086042124060143e+1, + 0.2292308926409217662e+2, + -0.26974800724148497721e+2, -0.15636720564116166066, - 0.24088646355319450976e+02, - -0.17355446353835322526e+02, - -0.16084235502948896368e+02, - 0.33833080852234097335e+02, - -0.13136333813881284627e+02, - -0.29101865451071855517e+02, - 0.44013969808145709806e+02, - -0.16462796188448880486e+02, - -0.24865748002275147144e+02, - 0.31516554238758587303e+02, - -0.23744726557268069911e+01, - -0.24210006178298456803e+02, - 0.10329684104413773937e+02, - 0.23328531491506815598e+02, - -0.31787959492109717274e+02, - -0.32566647844015488289e+01, - 0.37255776866870029096e+02, - -0.27290724747394193628e+02, - -0.18444358455650405659e+02, - 0.39314666640898138894e+02, - -0.10121719497018307976e+02, - -0.32047651042070249616e+02, - 0.28165480375996231999e+02, - 0.12856174386008179411e+02, - -0.33727195633930925567e+02, - 0.17348034921451691570e+01, - 0.33849997044738053376e+02, - -0.19665520957733374274e+02, - -0.29244385337117311252e+02, - 0.38707067971574943499e+02, - 0.73608635788763168151e+01, - -0.46675884381646973509e+02, - 0.20856581149820364374e+02, - 0.27179737486127663715e+02, - -0.25403108362646513285e+02, - -0.21647282656466138917e+02, - 0.29817700886081638600e+02, - 0.20731169629926796460e+02, - -0.54275105961993894255e+02, - 0.11441358073498516745e+02, - 0.41557744375353891542e+02, - -0.24762303386158496465e+02, - -0.28571924506601277471e+02, - 0.19012322624096096746e+02, - 0.37644411797294196731e+02, - -0.39512510155413366419e+02, - -0.27098770907636886562e+02, - 0.47257807136560991523e+02, - 0.11883591112820900193e+02, - -0.42533138474096688242e+02, - -0.14326765212057992471e+02, - 0.46478761744309686321e+02, - 0.11901537532257092877e+02, - -0.52018376938122415254e+02, - -0.95495830105351977579e+01, - 0.51816876289004596856e+02, - 0.96053175961192547305e+01, - -0.51432553081403192152e+02, - -0.15817502104949619834e+02, - 0.47256782416641577527e+02, - 0.28814324004947884816e+02, - -0.51141961506820969419e+02, - -0.36272848434007094909e+02, - 0.42611014444552665736e+02, - 0.42271678791450824519e+02, - -0.18703789916507801649e+02, - -0.65276941235986001288e+02, - 0.42931680408775303448e+01, - 0.64799768693763510896e+02, - 0.19113534491438542773e+02, - -0.42063772255999857919e+02, - -0.63799649634484246974e+02, - 0.22547675449907043088e+02, - 0.70743723301121335112e+02, - 0.21494412033614498370e+02, - -0.41846353384076785176e+02, - -0.79423727454474118304e+02, + 0.24088646355319450976e+2, + -0.17355446353835322526e+2, + -0.16084235502948896368e+2, + 0.33833080852234097335e+2, + -0.13136333813881284627e+2, + -0.29101865451071855517e+2, + 0.44013969808145709806e+2, + -0.16462796188448880486e+2, + -0.24865748002275147144e+2, + 0.31516554238758587303e+2, + -0.23744726557268069911e+1, + -0.24210006178298456803e+2, + 0.10329684104413773937e+2, + 0.23328531491506815598e+2, + -0.31787959492109717274e+2, + -0.32566647844015488289e+1, + 0.37255776866870029096e+2, + -0.27290724747394193628e+2, + -0.18444358455650405659e+2, + 0.39314666640898138894e+2, + -0.10121719497018307976e+2, + -0.32047651042070249616e+2, + 0.28165480375996231999e+2, + 0.12856174386008179411e+2, + -0.33727195633930925567e+2, + 0.1734803492145169157e+1, + 0.33849997044738053376e+2, + -0.19665520957733374274e+2, + -0.29244385337117311252e+2, + 0.38707067971574943499e+2, + 0.73608635788763168151e+1, + -0.46675884381646973509e+2, + 0.20856581149820364374e+2, + 0.27179737486127663715e+2, + -0.25403108362646513285e+2, + -0.21647282656466138917e+2, + 0.298177008860816386e+2, + 0.2073116962992679646e+2, + -0.54275105961993894255e+2, + 0.11441358073498516745e+2, + 0.41557744375353891542e+2, + -0.24762303386158496465e+2, + -0.28571924506601277471e+2, + 0.19012322624096096746e+2, + 0.37644411797294196731e+2, + -0.39512510155413366419e+2, + -0.27098770907636886562e+2, + 0.47257807136560991523e+2, + 0.11883591112820900193e+2, + -0.42533138474096688242e+2, + -0.14326765212057992471e+2, + 0.46478761744309686321e+2, + 0.11901537532257092877e+2, + -0.52018376938122415254e+2, + -0.95495830105351977579e+1, + 0.51816876289004596856e+2, + 0.96053175961192547305e+1, + -0.51432553081403192152e+2, + -0.15817502104949619834e+2, + 0.47256782416641577527e+2, + 0.28814324004947884816e+2, + -0.51141961506820969419e+2, + -0.36272848434007094909e+2, + 0.42611014444552665736e+2, + 0.42271678791450824519e+2, + -0.18703789916507801649e+2, + -0.65276941235986001288e+2, + 0.42931680408775303448e+1, + 0.64799768693763510896e+2, + 0.19113534491438542773e+2, + -0.42063772255999857919e+2, + -0.63799649634484246974e+2, + 0.22547675449907043088e+2, + 0.70743723301121335112e+2, + 0.2149441203361449837e+2, + -0.41846353384076785176e+2, + -0.79423727454474118304e+2, -0.27852058582641042728, - 0.66211764186374651331e+02, - 0.64168352540289575359e+02, - 0.92221080077378179141e+01, - -0.81966838606367701914e+02, - -0.74705318514378717509e+02, - -0.25651228797615107879e+02, - 0.52397831854572622490e+02, - 0.10605996542221865298e+03, - 0.69674603349369419902e+02, - 0.23543617068529663072e+02, - -0.64093358528053101963e+02, - -0.11515213121430113574e+03, - -0.12881264378363172796e+03, - -0.13589161958136816111e+03, - -0.91794948434211832478e+02, - -0.78314039013590104332e+02, - -0.43165414653035647063e+02, - -0.23578663293913983523e+02, - -0.20549647038160042456e+02, - 0.13796561195249938958e+01, - -0.10547652617912440576e+02, - 0.32340232400496136123e+01, - -0.12803133426693364960e+01, - -0.29340474667669336206e+01, - 0.48071827597652774244e+01, - -0.51494979081907787943e+01, - 0.36438318171996213479e+01, - -0.11180555203219546545e+01, - -0.14913224709420187519e+01, - 0.32771241202155314554e+01, - -0.36663545535624595395e+01, - 0.26162672648379095008e+01, + 0.66211764186374651331e+2, + 0.64168352540289575359e+2, + 0.92221080077378179141e+1, + -0.81966838606367701914e+2, + -0.74705318514378717509e+2, + -0.25651228797615107879e+2, + 0.5239783185457262249e+2, + 0.10605996542221865298e+3, + 0.69674603349369419902e+2, + 0.23543617068529663072e+2, + -0.64093358528053101963e+2, + -0.11515213121430113574e+3, + -0.12881264378363172796e+3, + -0.13589161958136816111e+3, + -0.91794948434211832478e+2, + -0.78314039013590104332e+2, + -0.43165414653035647063e+2, + -0.23578663293913983523e+2, + -0.20549647038160042456e+2, + 0.13796561195249938958e+1, + -0.10547652617912440576e+2, + 0.32340232400496136123e+1, + -0.1280313342669336496e+1, + -0.29340474667669336206e+1, + 0.48071827597652774244e+1, + -0.51494979081907787943e+1, + 0.36438318171996213479e+1, + -0.11180555203219546545e+1, + -0.14913224709420187519e+1, + 0.32771241202155314554e+1, + -0.36663545535624595395e+1, + 0.26162672648379095008e+1, -0.53779016592333817037, - -0.18184279228536910367e+01, - 0.36769388341595963254e+01, - -0.44352886214510229834e+01, - 0.38869617949418904246e+01, - -0.22121495787639053887e+01, - -0.62254948501407059158e-01, - 0.22864311681153326461e+01, - -0.38497702904637773891e+01, - 0.43896136891864534491e+01, - -0.38378690252066953725e+01, - 0.24426463086982916906e+01, + -0.18184279228536910367e+1, + 0.36769388341595963254e+1, + -0.44352886214510229834e+1, + 0.38869617949418904246e+1, + -0.22121495787639053887e+1, + -0.62254948501407059158e-1, + 0.22864311681153326461e+1, + -0.38497702904637773891e+1, + 0.43896136891864534491e+1, + -0.38378690252066953725e+1, + 0.24426463086982916906e+1, -0.63729844604185847956, - -0.10720105979713359101e+01, - 0.22772683094477255139e+01, - -0.27447470399063940150e+01, - 0.24768237522270339923e+01, - -0.16635138423972957167e+01, + -0.10720105979713359101e+1, + 0.22772683094477255139e+1, + -0.2744747039906394015e+1, + 0.24768237522270339923e+1, + -0.16635138423972957167e+1, 0.62348832514315688513, 0.31250387558718151215, -0.88259410681390049191, 0.96974715246076437225, -0.61489210995755927414, - 0.95119006719348586643e+01, - -0.14774764048431862307e+02, - 0.78682047974032558457e+01, - 0.27047548382258566058e+01, - -0.10389222402995086370e+02, - 0.16007033257147281091e+02, - -0.14645893949612210250e+02, - 0.10076929856365223870e+02, + 0.95119006719348586643e+1, + -0.14774764048431862307e+2, + 0.78682047974032558457e+1, + 0.27047548382258566058e+1, + -0.1038922240299508637e+2, + 0.16007033257147281091e+2, + -0.1464589394961221025e+2, + 0.1007692985636522387e+2, -0.70426414007251392224, - -0.70939569255737762177e+01, - 0.13864149818603950237e+02, - -0.14095443217048858386e+02, - 0.10845898010773554532e+02, - -0.19547449347156740096e+01, - -0.64329897628339747229e+01, - 0.14675350970329553491e+02, - -0.16729504858174703230e+02, - 0.14950373444197346373e+02, - -0.65564971943196441728e+01, - -0.26411010911819272629e+01, - 0.12915228452737704146e+02, - -0.17746521983302312009e+02, - 0.18754659524521439806e+02, - -0.12402407432771742180e+02, - 0.39441534007223286729e+01, - 0.70741497248582119184e+01, - -0.13906934681550081834e+02, - 0.17610184887969559497e+02, - -0.13944888593611846517e+02, - 0.75045920567173904914e+01, - 0.25113182896907391140e+01, - -0.95832114933556589165e+01, - 0.14045739974809809070e+02, - -0.12564076793973191215e+02, - 0.57005046350488317586e+01, - -0.11681788170582247943e+01, - -0.15295268272131762544e+02, + -0.70939569255737762177e+1, + 0.13864149818603950237e+2, + -0.14095443217048858386e+2, + 0.10845898010773554532e+2, + -0.19547449347156740096e+1, + -0.64329897628339747229e+1, + 0.14675350970329553491e+2, + -0.1672950485817470323e+2, + 0.14950373444197346373e+2, + -0.65564971943196441728e+1, + -0.26411010911819272629e+1, + 0.12915228452737704146e+2, + -0.17746521983302312009e+2, + 0.18754659524521439806e+2, + -0.1240240743277174218e+2, + 0.39441534007223286729e+1, + 0.70741497248582119184e+1, + -0.13906934681550081834e+2, + 0.17610184887969559497e+2, + -0.13944888593611846517e+2, + 0.75045920567173904914e+1, + 0.2511318289690739114e+1, + -0.95832114933556589165e+1, + 0.1404573997480980907e+2, + -0.12564076793973191215e+2, + 0.57005046350488317586e+1, + -0.11681788170582247943e+1, + -0.15295268272131762544e+2, -0.89771970133699063865, - -0.37345088018019815479e+02, - -0.39202055142371762031e+02, - -0.68745321504632229903e+02, - -0.11066531634442455356e+03, - -0.11228557219076539297e+03, - -0.14750679650654529951e+03, - -0.10641348111639321417e+03, - -0.58021279183305743743e+02, - 0.60849949243951551026e+01, - 0.94205168975900051009e+02, - 0.84437299086203836396e+02, - 0.65283457195463086009e+02, - -0.23981886109692215570e+02, - -0.88375074854208079955e+02, - -0.60050066224868039910e+02, - -0.11161858889498850189e+02, - 0.77086683172316440960e+02, - 0.66823117674343706085e+02, - -0.12119518166911072754e+02, - -0.59932305183157581041e+02, - -0.59333345978729020942e+02, - 0.31193287998758869151e+02, - 0.74621963861944394125e+02, - 0.78068993200306824320e+01, - -0.42271005348201931895e+02, - -0.60311392499683115886e+02, - 0.28114785229428278512e+02, - 0.70675449334501280418e+02, - -0.13289761132891408479e+02, - -0.40667091403136431893e+02, - -0.39752312247165711767e+02, - 0.53536609532503042885e+02, - 0.46683885759417975692e+02, - -0.52228320062447835426e+02, - -0.28251968575443640930e+02, - 0.95611913086002129347e+01, - 0.57072087176045506851e+02, - -0.11393761356517295269e+02, - -0.65871434861887536272e+02, - 0.28726597132793077805e+02, - 0.38234731025113077862e+02, - -0.61523749745744744644e+01, - -0.42140018400044283453e+02, - -0.53291590334330827261e+01, - 0.64679039515400674532e+02, - -0.23367468546847483424e+02, - -0.45991452864170170756e+02, - 0.28790604367103917127e+02, - 0.25038989848004476357e+02, - -0.74278180677186469438e+01, - -0.46333971444366866876e+02, - 0.29436381174152209894e+02, - 0.41209073727486028815e+02, - -0.54674199998059357597e+02, - -0.36892191859486613836e+01, - 0.35571205970912572525e+02, - 0.15284601059437812332e+01, - -0.31265471953812014050e+02, - -0.41141722756333845012e+01, - 0.47687674068473803857e+02, - -0.24033356802167677557e+02, - -0.36972363805240256340e+02, - 0.47870506885696201493e+02, - 0.29025082389597698374e+01, - -0.38885836480927238767e+02, - 0.15190813426112800499e+02, - 0.20347249382914462501e+02, - -0.77650158650102865110e+01, - -0.32016507177739107703e+02, - 0.31717730206291818718e+02, - 0.20073060465110707185e+02, - -0.59406085905710575901e+02, - 0.36322540032267284005e+02, - 0.18688144344722065426e+02, - -0.39093187317687245752e+02, - 0.11400105542239510115e+02, - 0.14945159558883835516e+02, - -0.10176317910961563129e+01, - -0.28626179164153565893e+02, - 0.24319562757597491753e+02, - 0.17929221333740102295e+02, - -0.48117352306047031618e+02, - 0.27049673951440396991e+02, - 0.23445127324093050447e+02, - -0.46677591297267433390e+02, - 0.19639596050948778583e+02, - 0.23086568049358131560e+02, - -0.33935864245629701941e+02, - 0.84140248064117901805e+01, - 0.15935772127569563850e+02, - -0.94159763367696829306e+01, - -0.13748000194480828995e+02, - 0.16830524183086954082e+02, - 0.11421674893688042118e+02, - -0.40346072211406486474e+02, - 0.33089806843370134004e+02, - 0.97242205848621168229e+01, - -0.47801531479491274013e+02, - 0.43998948780502111333e+02, - -0.28233337761133641131e+01, - -0.35242654643520801017e+02, - 0.36600536221045928187e+02, - -0.63570982577321935025e+01, - -0.21265896667575535872e+02, - 0.21175420522481690710e+02, + -0.37345088018019815479e+2, + -0.39202055142371762031e+2, + -0.68745321504632229903e+2, + -0.11066531634442455356e+3, + -0.11228557219076539297e+3, + -0.14750679650654529951e+3, + -0.10641348111639321417e+3, + -0.58021279183305743743e+2, + 0.60849949243951551026e+1, + 0.94205168975900051009e+2, + 0.84437299086203836396e+2, + 0.65283457195463086009e+2, + -0.2398188610969221557e+2, + -0.88375074854208079955e+2, + -0.6005006622486803991e+2, + -0.11161858889498850189e+2, + 0.7708668317231644096e+2, + 0.66823117674343706085e+2, + -0.12119518166911072754e+2, + -0.59932305183157581041e+2, + -0.59333345978729020942e+2, + 0.31193287998758869151e+2, + 0.74621963861944394125e+2, + 0.7806899320030682432e+1, + -0.42271005348201931895e+2, + -0.60311392499683115886e+2, + 0.28114785229428278512e+2, + 0.70675449334501280418e+2, + -0.13289761132891408479e+2, + -0.40667091403136431893e+2, + -0.39752312247165711767e+2, + 0.53536609532503042885e+2, + 0.46683885759417975692e+2, + -0.52228320062447835426e+2, + -0.2825196857544364093e+2, + 0.95611913086002129347e+1, + 0.57072087176045506851e+2, + -0.11393761356517295269e+2, + -0.65871434861887536272e+2, + 0.28726597132793077805e+2, + 0.38234731025113077862e+2, + -0.61523749745744744644e+1, + -0.42140018400044283453e+2, + -0.53291590334330827261e+1, + 0.64679039515400674532e+2, + -0.23367468546847483424e+2, + -0.45991452864170170756e+2, + 0.28790604367103917127e+2, + 0.25038989848004476357e+2, + -0.74278180677186469438e+1, + -0.46333971444366866876e+2, + 0.29436381174152209894e+2, + 0.41209073727486028815e+2, + -0.54674199998059357597e+2, + -0.36892191859486613836e+1, + 0.35571205970912572525e+2, + 0.15284601059437812332e+1, + -0.3126547195381201405e+2, + -0.41141722756333845012e+1, + 0.47687674068473803857e+2, + -0.24033356802167677557e+2, + -0.3697236380524025634e+2, + 0.47870506885696201493e+2, + 0.29025082389597698374e+1, + -0.38885836480927238767e+2, + 0.15190813426112800499e+2, + 0.20347249382914462501e+2, + -0.7765015865010286511e+1, + -0.32016507177739107703e+2, + 0.31717730206291818718e+2, + 0.20073060465110707185e+2, + -0.59406085905710575901e+2, + 0.36322540032267284005e+2, + 0.18688144344722065426e+2, + -0.39093187317687245752e+2, + 0.11400105542239510115e+2, + 0.14945159558883835516e+2, + -0.10176317910961563129e+1, + -0.28626179164153565893e+2, + 0.24319562757597491753e+2, + 0.17929221333740102295e+2, + -0.48117352306047031618e+2, + 0.27049673951440396991e+2, + 0.23445127324093050447e+2, + -0.4667759129726743339e+2, + 0.19639596050948778583e+2, + 0.2308656804935813156e+2, + -0.33935864245629701941e+2, + 0.84140248064117901805e+1, + 0.1593577212756956385e+2, + -0.94159763367696829306e+1, + -0.13748000194480828995e+2, + 0.16830524183086954082e+2, + 0.11421674893688042118e+2, + -0.40346072211406486474e+2, + 0.33089806843370134004e+2, + 0.97242205848621168229e+1, + -0.47801531479491274013e+2, + 0.43998948780502111333e+2, + -0.28233337761133641131e+1, + -0.35242654643520801017e+2, + 0.36600536221045928187e+2, + -0.63570982577321935025e+1, + -0.21265896667575535872e+2, + 0.2117542052248169071e+2, -0.84062678553118441727, - -0.12414531575149899467e+02, - 0.40975834852594452684e+01, - 0.12651783602993226907e+02, - -0.13625551454120561345e+02, - -0.72481053160045645356e+01, - 0.29613071257647462176e+02, - -0.27241619717870523942e+02, - -0.31657785927448176544e+01, - 0.36235118791082200573e+02, - -0.40733670026506935358e+02, - 0.98865668651805300726e+01, - 0.31279514833170832588e+02, - -0.47632179896000842234e+02, - 0.25332865285741050343e+02, - 0.16745392008481527313e+02, - -0.44045278880553730971e+02, - 0.36347546283824094360e+02, - -0.31002736841535907253e+01, - -0.26967763543104588564e+02, - 0.31582935500314512467e+02, - -0.11876107435694075676e+02, - -0.11850308654280103937e+02, - 0.20014657131365570564e+02, - -0.96098555943999688367e+01, - -0.61729205366970472113e+01, - 0.12521339091301603830e+02, - -0.62538190393945551904e+01, - -0.32418165701875349960e+01, - 0.52438627265465962424e+01, - 0.14100551797442404389e+01, - -0.75830967699357429979e+01, - 0.39835961108463173730e+01, - 0.86637093522613017882e+01, - -0.18934188525782584378e+02, - 0.15113174982161112325e+02, - 0.32636636624794745920e+01, - -0.23055410309743329833e+02, - 0.27742711075266107912e+02, - -0.11477820729898910557e+02, - -0.14664491455787102225e+02, - 0.30597110805201694461e+02, - -0.23022245866983450213e+02, - -0.31945378608625438766e+01, - 0.28005417090247863854e+02, - -0.31351900367307219852e+02, - 0.91687881583975432420e+01, - 0.22762173246550037931e+02, - -0.40214973944244000847e+02, - 0.28968120925798771736e+02, - 0.40410929355889848580e+01, - -0.35340228622929252822e+02, - 0.42257293294119158134e+02, - -0.19824930117162381293e+02, - -0.15349625970604261482e+02, - 0.37378111377237551949e+02, - -0.30309770768583007339e+02, - -0.13209593904231253347e+02, - 0.47587874948142086851e+02, - -0.26889674286513344015e+02, - -0.14330766684791340637e+02, - 0.52097081745853628831e+02, - -0.49739894021827680604e+02, - 0.13375898630771265729e+02, - 0.38663925232461735959e+02, - -0.61111344043273859938e+02, - 0.43286658483441584622e+02, - 0.90145727774386212872e+01, - -0.49400204411255167258e+02, - 0.53288945087928489386e+02, - -0.10526497016071134638e+02, - -0.38187841852276541488e+02, - 0.59401638671815398141e+02, - -0.26830959863915975205e+02, - -0.28995667504400078229e+02, - 0.70178661683564087070e+02, - -0.54496241986163582283e+02, - -0.23059299445994900779e+01, - 0.63753095663034542895e+02, - -0.73973170014952245310e+02, - 0.30368838213753942767e+02, - 0.39251954205673840193e+02, - -0.71336630330422892143e+02, - 0.45693092421440674400e+02, - 0.23025945522377849528e+02, - -0.69581622940990143888e+02, - 0.59243815240425753643e+02, - 0.81340728131509560939e+01, - -0.69934728732211638658e+02, - 0.79876082226631595518e+02, - -0.21930445169930113281e+02, - -0.48551302051506020518e+02, - 0.78729443990811418530e+02, - -0.38548938814497105909e+02, - -0.26570004316504856945e+02, - 0.62939806974047222354e+02, - -0.32051533986988317793e+02, - -0.28044342529782674944e+02, - 0.64245928293541652465e+02, - -0.33734309315445337063e+02, - -0.28611380397299491563e+02, - 0.68418190926264145446e+02, - -0.39694126242371105207e+02, - -0.23219606945785237428e+02, - 0.63091625908733462325e+02, - -0.31813305515382211297e+02, - -0.33814049741273656480e+02, - 0.71214941642303926983e+02, - -0.30254086909998886057e+02, - -0.47281842768844377645e+02, - 0.90527370186850163236e+02, - -0.45658206316177803785e+02, - -0.41204885081358050058e+02, - 0.91946030426684259851e+02, - -0.50513436940731033076e+02, - -0.33043872733117169105e+02, - 0.77806658295288514182e+02, - -0.32482014780013436450e+02, - -0.44732178125970968097e+02, - 0.72990245698977503253e+02, - -0.13879125635775039882e+02, - -0.60232188166710500354e+02, - 0.70257102007200415983e+02, - 0.24814464110892839876e+01, - -0.67815612019195583571e+02, - 0.52713591457500598381e+02, - 0.34586896667019765061e+02, - -0.85176286210925496789e+02, - 0.38874659684738567478e+02, - 0.63798674622918404964e+02, - -0.99772565068230775864e+02, - 0.31335319348865517952e+02, - 0.68735244618146055018e+02, - -0.78331152989821092092e+02, - -0.23502410695621445136e+01, - 0.72675458004657798483e+02, - -0.34821750270406738537e+02, - -0.56434361767480545780e+02, - 0.83013228515651775297e+02, - 0.44450044884361625819e+01, - -0.92266578547043621938e+02, - 0.69470441069274130541e+02, - 0.44772892592454923033e+02, - -0.96486706548241912174e+02, - 0.22078737807948616734e+02, - 0.83398442809385727514e+02, - -0.69575228047092394945e+02, - -0.38660990148005758726e+02, - 0.92681483263849855803e+02, - -0.81786209551304409615e+01, - -0.86921225082872183521e+02, - 0.53559984260121375144e+02, - 0.71314754676421188151e+02, - -0.97535501780232849001e+02, - -0.16994164905694770340e+02, - 0.11405171481965993507e+03, - -0.45583444952866813082e+02, - -0.76617477428769447556e+02, - 0.67416762258884091352e+02, - 0.60058599023332071454e+02, - -0.86969341828657661608e+02, - -0.39950984059947970195e+02, - 0.12729686476890739755e+03, - -0.22055808816222629787e+02, - -0.10718310083300953295e+03, - 0.57311109530675658164e+02, - 0.83983758676233634333e+02, - -0.59813267859939536208e+02, - -0.88880044368767059382e+02, - 0.98661701443202673545e+02, - 0.67741900338155772943e+02, - -0.11646982755866018522e+03, - -0.36113910892209354131e+02, - 0.11322088647001417883e+03, - 0.35761287626792793048e+02, - -0.12080777340856607793e+03, - -0.28307064887909387352e+02, - 0.13205218295710167808e+03, - 0.24756272072340195223e+02, - -0.13204140853163548286e+03, - -0.26207790106522356410e+02, - 0.13267089701509215161e+03, - 0.42343938023293731021e+02, - -0.12518791905244343354e+03, - -0.69622943225351235697e+02, - 0.12818344791026908069e+03, - 0.93653268291015194791e+02, - -0.10613368134092947059e+03, - -0.11532590551763101416e+03, - 0.55937722037931223440e+02, - 0.16152345364223333490e+03, - -0.86135852028942299086e+01, - -0.16397705287855904999e+03, - -0.56228396692451227068e+02, - 0.11740270638794602576e+03, - 0.15584880640591839551e+03, - -0.53723203583629818070e+02, - -0.18057995062670241282e+03, - -0.61864810767909482081e+02, - 0.11729660756419863787e+03, - 0.19475855513113518214e+03, - 0.67162836313896328022e+01, - -0.17068065719030076366e+03, - -0.17031778690825134959e+03, - -0.14462564711604812828e+02, - 0.20076187726111805887e+03, - 0.19945673988514721486e+03, - 0.63776549836258418225e+02, - -0.13845502860797975586e+03, - -0.26435701091774598126e+03, - -0.18934633677153746589e+03, - -0.51956208293666591658e+02, - 0.16072468468834875921e+03, - 0.29429109176890591471e+03, - 0.33847657463867483330e+03, - 0.33895080550085674531e+03, - 0.24664862274046674884e+03, - 0.19373843268079011182e+03, - 0.11361486230341284909e+03, - 0.63532935282258087284e+02, - 0.45570026528107263175e+02, - 0.57994783611188251982e+01, - 0.18385459918197494034e+02, - -0.23842658407196628545e+01, - 0.12847025618000862401e+01, - 0.58417101891088387688e+01, - -0.82434164069034352451e+01, - 0.85730129067834379697e+01, - -0.58808118262067345938e+01, - 0.16264122960442062293e+01, - 0.27680535788883480208e+01, - -0.58642527880979828936e+01, - 0.67492317454849333203e+01, - -0.53276482132132088054e+01, - 0.22026323123604165666e+01, - 0.14847368326547738526e+01, - -0.45459534950022257860e+01, - 0.60361700526551897994e+01, - -0.56073424756777177080e+01, - 0.34877945285845157741e+01, + -0.12414531575149899467e+2, + 0.40975834852594452684e+1, + 0.12651783602993226907e+2, + -0.13625551454120561345e+2, + -0.72481053160045645356e+1, + 0.29613071257647462176e+2, + -0.27241619717870523942e+2, + -0.31657785927448176544e+1, + 0.36235118791082200573e+2, + -0.40733670026506935358e+2, + 0.98865668651805300726e+1, + 0.31279514833170832588e+2, + -0.47632179896000842234e+2, + 0.25332865285741050343e+2, + 0.16745392008481527313e+2, + -0.44045278880553730971e+2, + 0.3634754628382409436e+2, + -0.31002736841535907253e+1, + -0.26967763543104588564e+2, + 0.31582935500314512467e+2, + -0.11876107435694075676e+2, + -0.11850308654280103937e+2, + 0.20014657131365570564e+2, + -0.96098555943999688367e+1, + -0.61729205366970472113e+1, + 0.1252133909130160383e+2, + -0.62538190393945551904e+1, + -0.3241816570187534996e+1, + 0.52438627265465962424e+1, + 0.14100551797442404389e+1, + -0.75830967699357429979e+1, + 0.3983596110846317373e+1, + 0.86637093522613017882e+1, + -0.18934188525782584378e+2, + 0.15113174982161112325e+2, + 0.3263663662479474592e+1, + -0.23055410309743329833e+2, + 0.27742711075266107912e+2, + -0.11477820729898910557e+2, + -0.14664491455787102225e+2, + 0.30597110805201694461e+2, + -0.23022245866983450213e+2, + -0.31945378608625438766e+1, + 0.28005417090247863854e+2, + -0.31351900367307219852e+2, + 0.9168788158397543242e+1, + 0.22762173246550037931e+2, + -0.40214973944244000847e+2, + 0.28968120925798771736e+2, + 0.4041092935588984858e+1, + -0.35340228622929252822e+2, + 0.42257293294119158134e+2, + -0.19824930117162381293e+2, + -0.15349625970604261482e+2, + 0.37378111377237551949e+2, + -0.30309770768583007339e+2, + -0.13209593904231253347e+2, + 0.47587874948142086851e+2, + -0.26889674286513344015e+2, + -0.14330766684791340637e+2, + 0.52097081745853628831e+2, + -0.49739894021827680604e+2, + 0.13375898630771265729e+2, + 0.38663925232461735959e+2, + -0.61111344043273859938e+2, + 0.43286658483441584622e+2, + 0.90145727774386212872e+1, + -0.49400204411255167258e+2, + 0.53288945087928489386e+2, + -0.10526497016071134638e+2, + -0.38187841852276541488e+2, + 0.59401638671815398141e+2, + -0.26830959863915975205e+2, + -0.28995667504400078229e+2, + 0.7017866168356408707e+2, + -0.54496241986163582283e+2, + -0.23059299445994900779e+1, + 0.63753095663034542895e+2, + -0.7397317001495224531e+2, + 0.30368838213753942767e+2, + 0.39251954205673840193e+2, + -0.71336630330422892143e+2, + 0.456930924214406744e+2, + 0.23025945522377849528e+2, + -0.69581622940990143888e+2, + 0.59243815240425753643e+2, + 0.81340728131509560939e+1, + -0.69934728732211638658e+2, + 0.79876082226631595518e+2, + -0.21930445169930113281e+2, + -0.48551302051506020518e+2, + 0.7872944399081141853e+2, + -0.38548938814497105909e+2, + -0.26570004316504856945e+2, + 0.62939806974047222354e+2, + -0.32051533986988317793e+2, + -0.28044342529782674944e+2, + 0.64245928293541652465e+2, + -0.33734309315445337063e+2, + -0.28611380397299491563e+2, + 0.68418190926264145446e+2, + -0.39694126242371105207e+2, + -0.23219606945785237428e+2, + 0.63091625908733462325e+2, + -0.31813305515382211297e+2, + -0.3381404974127365648e+2, + 0.71214941642303926983e+2, + -0.30254086909998886057e+2, + -0.47281842768844377645e+2, + 0.90527370186850163236e+2, + -0.45658206316177803785e+2, + -0.41204885081358050058e+2, + 0.91946030426684259851e+2, + -0.50513436940731033076e+2, + -0.33043872733117169105e+2, + 0.77806658295288514182e+2, + -0.3248201478001343645e+2, + -0.44732178125970968097e+2, + 0.72990245698977503253e+2, + -0.13879125635775039882e+2, + -0.60232188166710500354e+2, + 0.70257102007200415983e+2, + 0.24814464110892839876e+1, + -0.67815612019195583571e+2, + 0.52713591457500598381e+2, + 0.34586896667019765061e+2, + -0.85176286210925496789e+2, + 0.38874659684738567478e+2, + 0.63798674622918404964e+2, + -0.99772565068230775864e+2, + 0.31335319348865517952e+2, + 0.68735244618146055018e+2, + -0.78331152989821092092e+2, + -0.23502410695621445136e+1, + 0.72675458004657798483e+2, + -0.34821750270406738537e+2, + -0.5643436176748054578e+2, + 0.83013228515651775297e+2, + 0.44450044884361625819e+1, + -0.92266578547043621938e+2, + 0.69470441069274130541e+2, + 0.44772892592454923033e+2, + -0.96486706548241912174e+2, + 0.22078737807948616734e+2, + 0.83398442809385727514e+2, + -0.69575228047092394945e+2, + -0.38660990148005758726e+2, + 0.92681483263849855803e+2, + -0.81786209551304409615e+1, + -0.86921225082872183521e+2, + 0.53559984260121375144e+2, + 0.71314754676421188151e+2, + -0.97535501780232849001e+2, + -0.1699416490569477034e+2, + 0.11405171481965993507e+3, + -0.45583444952866813082e+2, + -0.76617477428769447556e+2, + 0.67416762258884091352e+2, + 0.60058599023332071454e+2, + -0.86969341828657661608e+2, + -0.39950984059947970195e+2, + 0.12729686476890739755e+3, + -0.22055808816222629787e+2, + -0.10718310083300953295e+3, + 0.57311109530675658164e+2, + 0.83983758676233634333e+2, + -0.59813267859939536208e+2, + -0.88880044368767059382e+2, + 0.98661701443202673545e+2, + 0.67741900338155772943e+2, + -0.11646982755866018522e+3, + -0.36113910892209354131e+2, + 0.11322088647001417883e+3, + 0.35761287626792793048e+2, + -0.12080777340856607793e+3, + -0.28307064887909387352e+2, + 0.13205218295710167808e+3, + 0.24756272072340195223e+2, + -0.13204140853163548286e+3, + -0.2620779010652235641e+2, + 0.13267089701509215161e+3, + 0.42343938023293731021e+2, + -0.12518791905244343354e+3, + -0.69622943225351235697e+2, + 0.12818344791026908069e+3, + 0.93653268291015194791e+2, + -0.10613368134092947059e+3, + -0.11532590551763101416e+3, + 0.5593772203793122344e+2, + 0.1615234536422333349e+3, + -0.86135852028942299086e+1, + -0.16397705287855904999e+3, + -0.56228396692451227068e+2, + 0.11740270638794602576e+3, + 0.15584880640591839551e+3, + -0.5372320358362981807e+2, + -0.18057995062670241282e+3, + -0.61864810767909482081e+2, + 0.11729660756419863787e+3, + 0.19475855513113518214e+3, + 0.67162836313896328022e+1, + -0.17068065719030076366e+3, + -0.17031778690825134959e+3, + -0.14462564711604812828e+2, + 0.20076187726111805887e+3, + 0.19945673988514721486e+3, + 0.63776549836258418225e+2, + -0.13845502860797975586e+3, + -0.26435701091774598126e+3, + -0.18934633677153746589e+3, + -0.51956208293666591658e+2, + 0.16072468468834875921e+3, + 0.29429109176890591471e+3, + 0.3384765746386748333e+3, + 0.33895080550085674531e+3, + 0.24664862274046674884e+3, + 0.19373843268079011182e+3, + 0.11361486230341284909e+3, + 0.63532935282258087284e+2, + 0.45570026528107263175e+2, + 0.57994783611188251982e+1, + 0.18385459918197494034e+2, + -0.23842658407196628545e+1, + 0.12847025618000862401e+1, + 0.58417101891088387688e+1, + -0.82434164069034352451e+1, + 0.85730129067834379697e+1, + -0.58808118262067345938e+1, + 0.16264122960442062293e+1, + 0.27680535788883480208e+1, + -0.58642527880979828936e+1, + 0.67492317454849333203e+1, + -0.53276482132132088054e+1, + 0.22026323123604165666e+1, + 0.14847368326547738526e+1, + -0.4545953495002225786e+1, + 0.60361700526551897994e+1, + -0.5607342475677717708e+1, + 0.34877945285845157741e+1, -0.43597839862419218715, - -0.26045947890585505746e+01, - 0.47385893970518155882e+01, - -0.54410523377234856213e+01, - 0.46177415347480552654e+01, - -0.26441579073580490089e+01, + -0.26045947890585505746e+1, + 0.47385893970518155882e+1, + -0.54410523377234856213e+1, + 0.46177415347480552654e+1, + -0.26441579073580490089e+1, 0.15971565395574596757, - 0.20950160105310966507e+01, - -0.35408969299893855442e+01, - 0.38661650528071977995e+01, - -0.31201717541294460290e+01, - 0.16301022240306202171e+01, - 0.89549441000130763912e-01, - -0.15211072261677056616e+01, - 0.22659188010863053897e+01, - -0.21621997027015051884e+01, - 0.13013555682889450527e+01, - -0.10304706670662923784e+02, - 0.15075458307378406531e+02, - -0.70367779349417771684e+01, - -0.51224086854878070341e+01, - 0.13339732042244317967e+02, - -0.19170476327371801517e+02, - 0.16583719295068693356e+02, - -0.10619722852872630625e+02, + 0.20950160105310966507e+1, + -0.35408969299893855442e+1, + 0.38661650528071977995e+1, + -0.3120171754129446029e+1, + 0.16301022240306202171e+1, + 0.89549441000130763912e-1, + -0.15211072261677056616e+1, + 0.22659188010863053897e+1, + -0.21621997027015051884e+1, + 0.13013555682889450527e+1, + -0.10304706670662923784e+2, + 0.15075458307378406531e+2, + -0.70367779349417771684e+1, + -0.51224086854878070341e+1, + 0.13339732042244317967e+2, + -0.19170476327371801517e+2, + 0.16583719295068693356e+2, + -0.10619722852872630625e+2, -0.91637779046925760262, - 0.10046843024688920210e+02, - -0.17889132957139061375e+02, - 0.17633756063986389506e+02, - -0.13452248352785895591e+02, - 0.25046073194849416410e+01, - 0.74582983401677926949e+01, - -0.17271752803042961233e+02, - 0.19454701651357012793e+02, - -0.17327377392510790344e+02, - 0.73254182847244226906e+01, - 0.31752754806877971916e+01, - -0.14892244182949758269e+02, - 0.19794232993520619601e+02, - -0.20381414150770794436e+02, - 0.12286527637867450835e+02, - -0.23357078270309306056e+01, - -0.10299163144106945111e+02, - 0.17260189832623360928e+02, - -0.20386134786256498330e+02, - 0.14567509179345419668e+02, - -0.59994037969198847904e+01, - -0.63587350803284339307e+01, - 0.14250746894537623888e+02, - -0.18481644665265886118e+02, - 0.15108314074938833826e+02, - -0.52469577430479859004e+01, - -0.10160634713381830885e+01, - 0.21938498166900330943e+02, + 0.1004684302468892021e+2, + -0.17889132957139061375e+2, + 0.17633756063986389506e+2, + -0.13452248352785895591e+2, + 0.2504607319484941641e+1, + 0.74582983401677926949e+1, + -0.17271752803042961233e+2, + 0.19454701651357012793e+2, + -0.17327377392510790344e+2, + 0.73254182847244226906e+1, + 0.31752754806877971916e+1, + -0.14892244182949758269e+2, + 0.19794232993520619601e+2, + -0.20381414150770794436e+2, + 0.12286527637867450835e+2, + -0.23357078270309306056e+1, + -0.10299163144106945111e+2, + 0.17260189832623360928e+2, + -0.2038613478625649833e+2, + 0.14567509179345419668e+2, + -0.59994037969198847904e+1, + -0.63587350803284339307e+1, + 0.14250746894537623888e+2, + -0.18481644665265886118e+2, + 0.15108314074938833826e+2, + -0.52469577430479859004e+1, + -0.10160634713381830885e+1, + 0.21938498166900330943e+2, -0.38167227940131770447, - 0.48544752002251748024e+02, - 0.50794445422202350926e+02, - 0.87373374883835097648e+02, - 0.14343802750284254444e+03, - 0.14349221399293020340e+03, - 0.18994330816650443694e+03, - 0.13712463033817934388e+03, - 0.73885901302009827418e+02, - -0.71199925380289270649e+01, - -0.12139458075897076128e+03, - -0.10907980409496482821e+03, - -0.82532824107480507791e+02, - 0.28695955221192736673e+02, - 0.11604039428081941310e+03, - 0.75096985653349094036e+02, - 0.15520036089267467361e+02, - -0.98896927987372151847e+02, - -0.87707875349588348968e+02, - 0.18751637325018251090e+02, - 0.73006188475518158043e+02, - 0.80448186608640654072e+02, - -0.43584663727293765589e+02, - -0.93866803646471467459e+02, - -0.10302122960680113906e+02, - 0.52725141915736173814e+02, - 0.80713999352199252257e+02, - -0.40259446414424154170e+02, - -0.86620524114212230415e+02, - 0.13458265871512681500e+02, - 0.54679223034690167538e+02, - 0.50240821511254026177e+02, - -0.69476790474041905554e+02, - -0.58210545402112288116e+02, - 0.64679767378733913574e+02, - 0.38850491436981108961e+02, - -0.14386603679201352080e+02, - -0.72053410473356635180e+02, - 0.14154875137783461625e+02, - 0.84484322720354086300e+02, - -0.36343372990678226131e+02, - -0.49797555230592827513e+02, - 0.82856239305586090182e+01, - 0.54203212630663252014e+02, - 0.64414393665324398697e+01, - -0.82568354825628645699e+02, - 0.29545473625067753431e+02, - 0.59230835771496074926e+02, - -0.36533908773575070938e+02, - -0.33305708110840129166e+02, - 0.11118247787118065162e+02, - 0.57857159611670169852e+02, - -0.36414613356335806316e+02, - -0.53746912944112217758e+02, - 0.70096542278108316282e+02, - 0.59644981899749618393e+01, - -0.47826032783833262840e+02, + 0.48544752002251748024e+2, + 0.50794445422202350926e+2, + 0.87373374883835097648e+2, + 0.14343802750284254444e+3, + 0.1434922139929302034e+3, + 0.18994330816650443694e+3, + 0.13712463033817934388e+3, + 0.73885901302009827418e+2, + -0.71199925380289270649e+1, + -0.12139458075897076128e+3, + -0.10907980409496482821e+3, + -0.82532824107480507791e+2, + 0.28695955221192736673e+2, + 0.1160403942808194131e+3, + 0.75096985653349094036e+2, + 0.15520036089267467361e+2, + -0.98896927987372151847e+2, + -0.87707875349588348968e+2, + 0.1875163732501825109e+2, + 0.73006188475518158043e+2, + 0.80448186608640654072e+2, + -0.43584663727293765589e+2, + -0.93866803646471467459e+2, + -0.10302122960680113906e+2, + 0.52725141915736173814e+2, + 0.80713999352199252257e+2, + -0.4025944641442415417e+2, + -0.86620524114212230415e+2, + 0.134582658715126815e+2, + 0.54679223034690167538e+2, + 0.50240821511254026177e+2, + -0.69476790474041905554e+2, + -0.58210545402112288116e+2, + 0.64679767378733913574e+2, + 0.38850491436981108961e+2, + -0.1438660367920135208e+2, + -0.7205341047335663518e+2, + 0.14154875137783461625e+2, + 0.844843227203540863e+2, + -0.36343372990678226131e+2, + -0.49797555230592827513e+2, + 0.82856239305586090182e+1, + 0.54203212630663252014e+2, + 0.64414393665324398697e+1, + -0.82568354825628645699e+2, + 0.29545473625067753431e+2, + 0.59230835771496074926e+2, + -0.36533908773575070938e+2, + -0.33305708110840129166e+2, + 0.11118247787118065162e+2, + 0.57857159611670169852e+2, + -0.36414613356335806316e+2, + -0.53746912944112217758e+2, + 0.70096542278108316282e+2, + 0.59644981899749618393e+1, + -0.4782603278383326284e+2, 0.59490143703964826205, - 0.37687574449560173662e+02, - 0.71743941891805995681e+01, - -0.62119961877859765309e+02, - 0.30357908040984113995e+02, - 0.49394907129424957759e+02, - -0.64433912916104489454e+02, + 0.37687574449560173662e+2, + 0.71743941891805995681e+1, + -0.62119961877859765309e+2, + 0.30357908040984113995e+2, + 0.49394907129424957759e+2, + -0.64433912916104489454e+2, -0.36708130775736685925, - 0.46798963808516170104e+02, - -0.17163799119355282130e+02, - -0.27209941123907707805e+02, - 0.94547146621397679667e+01, - 0.43195252851972803398e+02, - -0.43963266864672895906e+02, - -0.22077136337436986224e+02, - 0.72789293524977310312e+02, - -0.43934628700202409846e+02, - -0.25475205428976344990e+02, - 0.50136127196469104206e+02, - -0.13031313271571843160e+02, - -0.22002251098578316402e+02, - 0.46828653359607868012e+01, - 0.33488537080890530717e+02, - -0.28641117805560707410e+02, - -0.24537420221448023483e+02, - 0.61977035886405289489e+02, - -0.33581625352243257510e+02, - -0.32352832704487596516e+02, - 0.62737388891080769326e+02, - -0.27935491957805776764e+02, - -0.27572815286469243290e+02, - 0.42471983536342065690e+02, - -0.10796695838783039179e+02, - -0.19434626254194942163e+02, - 0.10226421869686124211e+02, - 0.19967750623741185478e+02, - -0.23892704519902807192e+02, - -0.12902509960323637728e+02, - 0.50859436403758508050e+02, - -0.42447905108078828107e+02, - -0.11730204667546495045e+02, - 0.60006939792618688045e+02, - -0.54750038818834994458e+02, - 0.17733065480208600739e+01, - 0.46888805276675228129e+02, - -0.48142963103265572045e+02, - 0.86573198625488174685e+01, - 0.27429610213835633914e+02, - -0.27771937943594682707e+02, - 0.18983126313654812289e+01, - 0.15054562634825240153e+02, - -0.44346929143243114524e+01, - -0.16943435546274347558e+02, - 0.18014189585396916726e+02, - 0.89514727860617533395e+01, - -0.37760207601764513186e+02, - 0.34676392399559340163e+02, - 0.44947304537611865172e+01, - -0.47086406569644530862e+02, - 0.52866399885337045816e+02, - -0.13087599985605789854e+02, - -0.40106164068975026282e+02, - 0.61514558271774376408e+02, - -0.33301686273504436997e+02, - -0.20362995371888946039e+02, - 0.55131835233095458193e+02, - -0.45104542768023826227e+02, - 0.24713644607473930215e+01, - 0.35811495752552637839e+02, - -0.41159824718176437841e+02, - 0.15106075069043329862e+02, - 0.16117056823750647965e+02, - -0.27214973943028027747e+02, - 0.14200953832020944745e+02, - 0.60269841833780333218e+01, - -0.14449215578593065601e+02, - 0.69220692178920257831e+01, - 0.45737278034515371772e+01, - -0.63942843400916418162e+01, - -0.28196877873781676094e+01, - 0.11188300830121781004e+02, - -0.66904375424935542682e+01, - -0.97711156982452109787e+01, - 0.23457592394668719038e+02, - -0.19212794593564488821e+02, - -0.37059026660652008012e+01, - 0.28547910286647567801e+02, - -0.34211787069287758811e+02, - 0.13260177050360047346e+02, - 0.20040383996885353213e+02, - -0.39916233431040318180e+02, - 0.29376371067190962805e+02, - 0.51656098828291563407e+01, - -0.37770173136549004766e+02, - 0.42494517622012082825e+02, - -0.14013483990865781337e+02, - -0.27418309527329299158e+02, - 0.50605896334632411993e+02, - -0.37151266824517364284e+02, - -0.41963413383249639210e+01, - 0.43446148241455496475e+02, - -0.51628308765571745198e+02, - 0.22487993955194941265e+02, - 0.22557922098112470621e+02, - -0.50244365085103531499e+02, - 0.40161443514939826116e+02, - 0.14612675262423639566e+02, - -0.60255541286771169496e+02, - 0.41590760488088442060e+02, - 0.60802904850969703432e+01, - -0.55193133263119314336e+02, - 0.60435885079122741104e+02, - -0.23968922088714421648e+02, - -0.35800924530498370757e+02, - 0.66337504110746394304e+02, - -0.51494982607845628308e+02, - -0.58876323128414815855e+01, - 0.54348766386547382012e+02, - -0.63598818720268496918e+02, - 0.18169765312331552565e+02, - 0.38740206165636394076e+02, - -0.68727669759682299855e+02, - 0.38525778466149624535e+02, - 0.21774106941053894104e+02, - -0.71494123760506894882e+02, - 0.61471481149039426839e+02, - -0.50902040145365008428e+01, - -0.60849611185606903518e+02, - 0.74995378679876779415e+02, - -0.32268759296577407270e+02, - -0.40322321862662597880e+02, - 0.74847800015439759136e+02, - -0.49050712542941745653e+02, - -0.23412380647921491317e+02, - 0.73281716990039726056e+02, - -0.63945106827164153174e+02, - -0.57163991695377243119e+01, - 0.69121153061832828257e+02, - -0.78354796811430091452e+02, - 0.17110773310807406489e+02, - 0.54244687154165156073e+02, - -0.80483381752360358519e+02, - 0.31708258901284626319e+02, - 0.39733362725342885824e+02, - -0.75222997924571288308e+02, - 0.34856333288371082801e+02, - 0.35782642690354705906e+02, - -0.76172514941770955943e+02, - 0.39415869323908687250e+02, - 0.33138071176080998725e+02, - -0.78581629452993496443e+02, - 0.44670430204686240927e+02, - 0.29224907453430855497e+02, - -0.77000521069062344282e+02, - 0.42609845357555698797e+02, - 0.33834605510087719438e+02, - -0.81530197326025714233e+02, - 0.41766410064518353806e+02, - 0.41851060866622070478e+02, - -0.92012884129639147091e+02, - 0.47889239765986346242e+02, - 0.41902274267182981760e+02, - -0.93718132335677466926e+02, - 0.47060218084719330989e+02, - 0.42571468627565344889e+02, - -0.87354014642353391196e+02, - 0.32853512183617354481e+02, - 0.54328691730826385253e+02, - -0.84285436778557780713e+02, - 0.15724651894115014628e+02, - 0.68710264340202229505e+02, - -0.79668823651391790008e+02, - -0.37409066455470685320e+01, - 0.79774892584675939133e+02, - -0.65168511095921417109e+02, - -0.32688309544490714131e+02, - 0.92907245722694838719e+02, - -0.47208825564548128284e+02, - -0.61962801535602018532e+02, - 0.10008899580345716629e+03, - -0.26315012096649834206e+02, - -0.79415345084771928441e+02, - 0.83629976573939316609e+02, - 0.10731837146345768019e+02, - -0.90119765628130281243e+02, - 0.45578810010513166162e+02, - 0.60536329511828562033e+02, - -0.94813718389342000137e+02, + 0.46798963808516170104e+2, + -0.1716379911935528213e+2, + -0.27209941123907707805e+2, + 0.94547146621397679667e+1, + 0.43195252851972803398e+2, + -0.43963266864672895906e+2, + -0.22077136337436986224e+2, + 0.72789293524977310312e+2, + -0.43934628700202409846e+2, + -0.2547520542897634499e+2, + 0.50136127196469104206e+2, + -0.1303131327157184316e+2, + -0.22002251098578316402e+2, + 0.46828653359607868012e+1, + 0.33488537080890530717e+2, + -0.2864111780556070741e+2, + -0.24537420221448023483e+2, + 0.61977035886405289489e+2, + -0.3358162535224325751e+2, + -0.32352832704487596516e+2, + 0.62737388891080769326e+2, + -0.27935491957805776764e+2, + -0.2757281528646924329e+2, + 0.4247198353634206569e+2, + -0.10796695838783039179e+2, + -0.19434626254194942163e+2, + 0.10226421869686124211e+2, + 0.19967750623741185478e+2, + -0.23892704519902807192e+2, + -0.12902509960323637728e+2, + 0.5085943640375850805e+2, + -0.42447905108078828107e+2, + -0.11730204667546495045e+2, + 0.60006939792618688045e+2, + -0.54750038818834994458e+2, + 0.17733065480208600739e+1, + 0.46888805276675228129e+2, + -0.48142963103265572045e+2, + 0.86573198625488174685e+1, + 0.27429610213835633914e+2, + -0.27771937943594682707e+2, + 0.18983126313654812289e+1, + 0.15054562634825240153e+2, + -0.44346929143243114524e+1, + -0.16943435546274347558e+2, + 0.18014189585396916726e+2, + 0.89514727860617533395e+1, + -0.37760207601764513186e+2, + 0.34676392399559340163e+2, + 0.44947304537611865172e+1, + -0.47086406569644530862e+2, + 0.52866399885337045816e+2, + -0.13087599985605789854e+2, + -0.40106164068975026282e+2, + 0.61514558271774376408e+2, + -0.33301686273504436997e+2, + -0.20362995371888946039e+2, + 0.55131835233095458193e+2, + -0.45104542768023826227e+2, + 0.24713644607473930215e+1, + 0.35811495752552637839e+2, + -0.41159824718176437841e+2, + 0.15106075069043329862e+2, + 0.16117056823750647965e+2, + -0.27214973943028027747e+2, + 0.14200953832020944745e+2, + 0.60269841833780333218e+1, + -0.14449215578593065601e+2, + 0.69220692178920257831e+1, + 0.45737278034515371772e+1, + -0.63942843400916418162e+1, + -0.28196877873781676094e+1, + 0.11188300830121781004e+2, + -0.66904375424935542682e+1, + -0.97711156982452109787e+1, + 0.23457592394668719038e+2, + -0.19212794593564488821e+2, + -0.37059026660652008012e+1, + 0.28547910286647567801e+2, + -0.34211787069287758811e+2, + 0.13260177050360047346e+2, + 0.20040383996885353213e+2, + -0.3991623343104031818e+2, + 0.29376371067190962805e+2, + 0.51656098828291563407e+1, + -0.37770173136549004766e+2, + 0.42494517622012082825e+2, + -0.14013483990865781337e+2, + -0.27418309527329299158e+2, + 0.50605896334632411993e+2, + -0.37151266824517364284e+2, + -0.4196341338324963921e+1, + 0.43446148241455496475e+2, + -0.51628308765571745198e+2, + 0.22487993955194941265e+2, + 0.22557922098112470621e+2, + -0.50244365085103531499e+2, + 0.40161443514939826116e+2, + 0.14612675262423639566e+2, + -0.60255541286771169496e+2, + 0.4159076048808844206e+2, + 0.60802904850969703432e+1, + -0.55193133263119314336e+2, + 0.60435885079122741104e+2, + -0.23968922088714421648e+2, + -0.35800924530498370757e+2, + 0.66337504110746394304e+2, + -0.51494982607845628308e+2, + -0.58876323128414815855e+1, + 0.54348766386547382012e+2, + -0.63598818720268496918e+2, + 0.18169765312331552565e+2, + 0.38740206165636394076e+2, + -0.68727669759682299855e+2, + 0.38525778466149624535e+2, + 0.21774106941053894104e+2, + -0.71494123760506894882e+2, + 0.61471481149039426839e+2, + -0.50902040145365008428e+1, + -0.60849611185606903518e+2, + 0.74995378679876779415e+2, + -0.3226875929657740727e+2, + -0.4032232186266259788e+2, + 0.74847800015439759136e+2, + -0.49050712542941745653e+2, + -0.23412380647921491317e+2, + 0.73281716990039726056e+2, + -0.63945106827164153174e+2, + -0.57163991695377243119e+1, + 0.69121153061832828257e+2, + -0.78354796811430091452e+2, + 0.17110773310807406489e+2, + 0.54244687154165156073e+2, + -0.80483381752360358519e+2, + 0.31708258901284626319e+2, + 0.39733362725342885824e+2, + -0.75222997924571288308e+2, + 0.34856333288371082801e+2, + 0.35782642690354705906e+2, + -0.76172514941770955943e+2, + 0.3941586932390868725e+2, + 0.33138071176080998725e+2, + -0.78581629452993496443e+2, + 0.44670430204686240927e+2, + 0.29224907453430855497e+2, + -0.77000521069062344282e+2, + 0.42609845357555698797e+2, + 0.33834605510087719438e+2, + -0.81530197326025714233e+2, + 0.41766410064518353806e+2, + 0.41851060866622070478e+2, + -0.92012884129639147091e+2, + 0.47889239765986346242e+2, + 0.4190227426718298176e+2, + -0.93718132335677466926e+2, + 0.47060218084719330989e+2, + 0.42571468627565344889e+2, + -0.87354014642353391196e+2, + 0.32853512183617354481e+2, + 0.54328691730826385253e+2, + -0.84285436778557780713e+2, + 0.15724651894115014628e+2, + 0.68710264340202229505e+2, + -0.79668823651391790008e+2, + -0.3740906645547068532e+1, + 0.79774892584675939133e+2, + -0.65168511095921417109e+2, + -0.32688309544490714131e+2, + 0.92907245722694838719e+2, + -0.47208825564548128284e+2, + -0.61962801535602018532e+2, + 0.10008899580345716629e+3, + -0.26315012096649834206e+2, + -0.79415345084771928441e+2, + 0.83629976573939316609e+2, + 0.10731837146345768019e+2, + -0.90119765628130281243e+2, + 0.45578810010513166162e+2, + 0.60536329511828562033e+2, + -0.94813718389342000137e+2, 0.29668618933613827293, - 0.97525195203996702276e+02, - -0.74825708636696532494e+02, - -0.48803646387551708585e+02, - 0.10402097470172837745e+03, - -0.21307493981150070539e+02, - -0.93944853610897894214e+02, - 0.75825823647078422596e+02, - 0.46321746210321933290e+02, - -0.10626665900129728470e+03, - 0.10196103888424190131e+02, - 0.98623628220649024456e+02, - -0.64066536139473342359e+02, - -0.74339186338768314499e+02, - 0.10572999986734542688e+03, - 0.17378368362341639397e+02, - -0.12098792113768827505e+03, - 0.42489965328766132302e+02, - 0.92556337989530675259e+02, - -0.78495694414347781276e+02, - -0.68823450819359109687e+02, - 0.10405720411316829654e+03, - 0.33992918918029630504e+02, - -0.13165265512320297603e+03, - 0.18644881826522286872e+02, - 0.11912928775066085052e+03, - -0.58179821340112582106e+02, - -0.10218186409463227449e+03, - 0.75468352946432588624e+02, - 0.92520773033727849111e+02, - -0.10781536399527006154e+03, - -0.72830402136051773709e+02, - 0.12435575590439141536e+03, - 0.45452249179988754690e+02, - -0.12944249611174868164e+03, - -0.38695676999318692424e+02, - 0.13538063063963539889e+03, - 0.29380215215115924821e+02, - -0.14520711883181729718e+03, - -0.27613971982201270805e+02, - 0.14547809853809289393e+03, - 0.30714497015866271568e+02, - -0.14810283473650434871e+03, - -0.48193486862581821129e+02, - 0.14205078157683240647e+03, - 0.73603366729136467939e+02, - -0.13955595162412896570e+03, - -0.10448207502786532075e+03, - 0.11513095409569000083e+03, - 0.13360509913760634504e+03, - -0.68573727629086079105e+02, - -0.17446677355668415998e+03, - 0.80434407177861508842e+01, - 0.17926841909783121309e+03, - 0.69220858371970848566e+02, - -0.13895363403700932281e+03, - -0.16575846507140479957e+03, - 0.55972244409947784050e+02, - 0.19924553332367096914e+03, - 0.74914565570824137808e+02, - -0.13930504455122775198e+03, - -0.20763623683371022821e+03, - -0.13065468605187128048e+02, - 0.19017449410620122308e+03, - 0.19394127752574922852e+03, - 0.77416849331064927497e+01, - -0.21397199101213351469e+03, - -0.22840495163120320399e+03, - -0.68694318152680565959e+02, - 0.15699901042224763614e+03, - 0.28629004764697259589e+03, - 0.21962331689537737134e+03, - 0.49705037599456105113e+02, - -0.17436528254706254870e+03, - -0.32611368653443685162e+03, - -0.38170993660716152363e+03, - -0.36809598319882036321e+03, - -0.28279071609581495750e+03, - -0.20895246267743638668e+03, - -0.12838300049098532440e+03, - -0.73004712922751465953e+02, - -0.44709045329804901314e+02, - -0.13863490439670895782e+02, - -0.13840390972643923817e+02, - -0.12566311839846273646e+01, - -0.10745191557641784463e+01, - -0.36231381876870445424e+01, - 0.43601248930183613695e+01, - -0.45767209867407316892e+01, - 0.30639179498320743278e+01, + 0.97525195203996702276e+2, + -0.74825708636696532494e+2, + -0.48803646387551708585e+2, + 0.10402097470172837745e+3, + -0.21307493981150070539e+2, + -0.93944853610897894214e+2, + 0.75825823647078422596e+2, + 0.4632174621032193329e+2, + -0.1062666590012972847e+3, + 0.10196103888424190131e+2, + 0.98623628220649024456e+2, + -0.64066536139473342359e+2, + -0.74339186338768314499e+2, + 0.10572999986734542688e+3, + 0.17378368362341639397e+2, + -0.12098792113768827505e+3, + 0.42489965328766132302e+2, + 0.92556337989530675259e+2, + -0.78495694414347781276e+2, + -0.68823450819359109687e+2, + 0.10405720411316829654e+3, + 0.33992918918029630504e+2, + -0.13165265512320297603e+3, + 0.18644881826522286872e+2, + 0.11912928775066085052e+3, + -0.58179821340112582106e+2, + -0.10218186409463227449e+3, + 0.75468352946432588624e+2, + 0.92520773033727849111e+2, + -0.10781536399527006154e+3, + -0.72830402136051773709e+2, + 0.12435575590439141536e+3, + 0.4545224917998875469e+2, + -0.12944249611174868164e+3, + -0.38695676999318692424e+2, + 0.13538063063963539889e+3, + 0.29380215215115924821e+2, + -0.14520711883181729718e+3, + -0.27613971982201270805e+2, + 0.14547809853809289393e+3, + 0.30714497015866271568e+2, + -0.14810283473650434871e+3, + -0.48193486862581821129e+2, + 0.14205078157683240647e+3, + 0.73603366729136467939e+2, + -0.1395559516241289657e+3, + -0.10448207502786532075e+3, + 0.11513095409569000083e+3, + 0.13360509913760634504e+3, + -0.68573727629086079105e+2, + -0.17446677355668415998e+3, + 0.80434407177861508842e+1, + 0.17926841909783121309e+3, + 0.69220858371970848566e+2, + -0.13895363403700932281e+3, + -0.16575846507140479957e+3, + 0.5597224440994778405e+2, + 0.19924553332367096914e+3, + 0.74914565570824137808e+2, + -0.13930504455122775198e+3, + -0.20763623683371022821e+3, + -0.13065468605187128048e+2, + 0.19017449410620122308e+3, + 0.19394127752574922852e+3, + 0.77416849331064927497e+1, + -0.21397199101213351469e+3, + -0.22840495163120320399e+3, + -0.68694318152680565959e+2, + 0.15699901042224763614e+3, + 0.28629004764697259589e+3, + 0.21962331689537737134e+3, + 0.49705037599456105113e+2, + -0.1743652825470625487e+3, + -0.32611368653443685162e+3, + -0.38170993660716152363e+3, + -0.36809598319882036321e+3, + -0.2827907160958149575e+3, + -0.20895246267743638668e+3, + -0.1283830004909853244e+3, + -0.73004712922751465953e+2, + -0.44709045329804901314e+2, + -0.13863490439670895782e+2, + -0.13840390972643923817e+2, + -0.12566311839846273646e+1, + -0.10745191557641784463e+1, + -0.36231381876870445424e+1, + 0.43601248930183613695e+1, + -0.45767209867407316892e+1, + 0.30639179498320743278e+1, -0.81037525216275063666, - -0.15324960400131371063e+01, - 0.32082579716232411116e+01, - -0.37499572184068408198e+01, - 0.30979626824955213138e+01, - -0.15452401378689526457e+01, + -0.15324960400131371063e+1, + 0.32082579716232411116e+1, + -0.37499572184068408198e+1, + 0.30979626824955213138e+1, + -0.15452401378689526457e+1, -0.33821909806409977683, - 0.19557716974851828695e+01, - -0.28244002608535385690e+01, - 0.27577666062025620874e+01, - -0.18522711778608329514e+01, - 0.47080411112970999010, + 0.19557716974851828695e+1, + -0.2824400260853538569e+1, + 0.27577666062025620874e+1, + -0.18522711778608329514e+1, + 0.4708041111297099901, 0.93251948663358508185, - -0.19225803886422974109e+01, - 0.22469955151663838500e+01, - -0.18612272651021877223e+01, + -0.19225803886422974109e+1, + 0.224699551516638385e+1, + -0.18612272651021877223e+1, 0.95136859358374548101, - 0.17198514552571628200, - -0.11509987194143114220e+01, - 0.17133566311958903228e+01, - -0.17206704027650157052e+01, - 0.12157208665800653957e+01, + 0.171985145525716282, + -0.1150998719414311422e+1, + 0.17133566311958903228e+1, + -0.17206704027650157052e+1, + 0.12157208665800653957e+1, -0.37663417803258114613, -0.52818050562763674272, - 0.12349985584618901058e+01, - -0.15450851621154704230e+01, - 0.13846840467020877785e+01, + 0.12349985584618901058e+1, + -0.1545085162115470423e+1, + 0.13846840467020877785e+1, -0.81150580353371160047, - 0.39837307671446446911e+01, - -0.54230110998852723014e+01, - 0.20839473434260571416e+01, - 0.28802804311662404402e+01, - -0.60049399527797140408e+01, - 0.81581316180225318391e+01, - -0.67510751305828566871e+01, - 0.40941502956072808317e+01, + 0.39837307671446446911e+1, + -0.54230110998852723014e+1, + 0.20839473434260571416e+1, + 0.28802804311662404402e+1, + -0.60049399527797140408e+1, + 0.81581316180225318391e+1, + -0.67510751305828566871e+1, + 0.40941502956072808317e+1, 0.84534422012083720865, - -0.45953171567614869986e+01, - 0.78027544710923981697e+01, - -0.75306833762315026348e+01, - 0.57187846023217305813e+01, - -0.10728672277260240531e+01, - -0.30154901030948271234e+01, - 0.70600374342575022979e+01, - -0.78367382572099772986e+01, - 0.69320309593774931400e+01, - -0.27615819963384526936e+01, - -0.14265185985525232759e+01, - 0.60885909941605440565e+01, - -0.77783066550463884070e+01, - 0.77637777826007763338e+01, - -0.41672497911746644306e+01, - 0.55650315968960153978e-01, - 0.50280268707605078049e+01, - -0.74750261457040965141e+01, - 0.82779478341175369849e+01, - -0.52834411041079754057e+01, - 0.13543127250502078329e+01, - 0.39774471599353069529e+01, - -0.70793624279375029218e+01, - 0.84433824667695134281e+01, - -0.64318707356039253042e+01, - 0.16826997967461359007e+01, - 0.12668481091075636247e+01, - -0.10498822723566522797e+02, - 0.68833332171092831420, - -0.21774404156626168572e+02, - -0.22659522396102666164e+02, - -0.38569847035189937401e+02, - -0.64022646752354447131e+02, - -0.63630881300936856348e+02, - -0.84335620647991746068e+02, - -0.61243748167302065610e+02, - -0.32405677706531093918e+02, - 0.27644168638532495841e+01, - 0.54158880376684500391e+02, - 0.48610194469975930076e+02, - 0.36176375769208171107e+02, - -0.11923745773565032735e+02, - -0.52560839971771208923e+02, - -0.32445255072026220944e+02, - -0.75318376971093954353e+01, - 0.44119358505494076894e+02, - 0.39374507069561246908e+02, - -0.92314136294921507186e+01, - -0.31202387226361221195e+02, - -0.37087745467623662421e+02, - 0.20522485425080507326e+02, - 0.40999602249420981082e+02, - 0.47233315009061822565e+01, - -0.22970271989028756110e+02, - -0.36830155156948748640e+02, - 0.19144268381256182465e+02, - 0.37224252539675994456e+02, - -0.49335313555812501107e+01, - -0.24921622438779021280e+02, - -0.22221165994809588540e+02, - 0.31265742345578253492e+02, - 0.25124190387744945951e+02, - -0.27824424562009429707e+02, - -0.18146558296021691348e+02, - 0.70630382880507136534e+01, - 0.31678324295356311779e+02, - -0.62779315482981559171e+01, - -0.37287773825479533230e+02, - 0.15748043863484220140e+02, - 0.22547710173515927323e+02, - -0.39828714922573520418e+01, - -0.23962962135493587112e+02, - -0.28115746499190286123e+01, - 0.36537928073240330207e+02, - -0.12959045649038770875e+02, - -0.26396221003970087082e+02, - 0.16138270773452472184e+02, - 0.15099526426856877848e+02, - -0.53830313675062688716e+01, - -0.25225608423947477377e+02, - 0.15792553958426010396e+02, - 0.24055576153809685280e+02, - -0.30999152397504143863e+02, - -0.31441257987711428434e+01, - 0.22033366404545688511e+02, - -0.11824808203730929890e+01, - -0.15870645741480423396e+02, - -0.38277538825609713768e+01, - 0.27854691286272704076e+02, - -0.13253292968240430127e+02, - -0.22658407908335533421e+02, - 0.29701683100837634299e+02, - -0.10606330678763351560e+01, - -0.19646561169928080659e+02, - 0.67827947393377518992e+01, - 0.12461057409163512233e+02, - -0.40016666021346809501e+01, - -0.19933995397273712058e+02, - 0.20683066471661309293e+02, - 0.84810711223467922792e+01, - -0.31080007044811626571e+02, - 0.18562281450981345188e+02, - 0.11804873604747383453e+02, - -0.22192665262613054722e+02, - 0.51597763558347713442e+01, - 0.10828791312852629858e+02, - -0.33385077714148270189e+01, - -0.13654061578514211206e+02, - 0.11759210562111242382e+02, - 0.11451026495749738743e+02, - -0.27578229903889820207e+02, - 0.14467339361177833368e+02, - 0.15223553916252150486e+02, - -0.28933944584776238429e+02, - 0.13472281545645710565e+02, - 0.11390592998440355998e+02, - -0.18345853628354245046e+02, - 0.46787185313701691314e+01, - 0.83604512077319750318e+01, - -0.39499316245583129259e+01, - -0.96471191420468684896e+01, - 0.11415141309130502734e+02, - 0.50668448085978399220e+01, - -0.22170453369249763398e+02, - 0.18723535427340834758e+02, - 0.50759443383764999425e+01, - -0.26309623155212207735e+02, - 0.23851222375331836645e+02, + -0.45953171567614869986e+1, + 0.78027544710923981697e+1, + -0.75306833762315026348e+1, + 0.57187846023217305813e+1, + -0.10728672277260240531e+1, + -0.30154901030948271234e+1, + 0.70600374342575022979e+1, + -0.78367382572099772986e+1, + 0.693203095937749314e+1, + -0.27615819963384526936e+1, + -0.14265185985525232759e+1, + 0.60885909941605440565e+1, + -0.7778306655046388407e+1, + 0.77637777826007763338e+1, + -0.41672497911746644306e+1, + 0.55650315968960153978e-1, + 0.50280268707605078049e+1, + -0.74750261457040965141e+1, + 0.82779478341175369849e+1, + -0.52834411041079754057e+1, + 0.13543127250502078329e+1, + 0.39774471599353069529e+1, + -0.70793624279375029218e+1, + 0.84433824667695134281e+1, + -0.64318707356039253042e+1, + 0.16826997967461359007e+1, + 0.12668481091075636247e+1, + -0.10498822723566522797e+2, + 0.6883333217109283142, + -0.21774404156626168572e+2, + -0.22659522396102666164e+2, + -0.38569847035189937401e+2, + -0.64022646752354447131e+2, + -0.63630881300936856348e+2, + -0.84335620647991746068e+2, + -0.6124374816730206561e+2, + -0.32405677706531093918e+2, + 0.27644168638532495841e+1, + 0.54158880376684500391e+2, + 0.48610194469975930076e+2, + 0.36176375769208171107e+2, + -0.11923745773565032735e+2, + -0.52560839971771208923e+2, + -0.32445255072026220944e+2, + -0.75318376971093954353e+1, + 0.44119358505494076894e+2, + 0.39374507069561246908e+2, + -0.92314136294921507186e+1, + -0.31202387226361221195e+2, + -0.37087745467623662421e+2, + 0.20522485425080507326e+2, + 0.40999602249420981082e+2, + 0.47233315009061822565e+1, + -0.2297027198902875611e+2, + -0.3683015515694874864e+2, + 0.19144268381256182465e+2, + 0.37224252539675994456e+2, + -0.49335313555812501107e+1, + -0.2492162243877902128e+2, + -0.2222116599480958854e+2, + 0.31265742345578253492e+2, + 0.25124190387744945951e+2, + -0.27824424562009429707e+2, + -0.18146558296021691348e+2, + 0.70630382880507136534e+1, + 0.31678324295356311779e+2, + -0.62779315482981559171e+1, + -0.3728777382547953323e+2, + 0.1574804386348422014e+2, + 0.22547710173515927323e+2, + -0.39828714922573520418e+1, + -0.23962962135493587112e+2, + -0.28115746499190286123e+1, + 0.36537928073240330207e+2, + -0.12959045649038770875e+2, + -0.26396221003970087082e+2, + 0.16138270773452472184e+2, + 0.15099526426856877848e+2, + -0.53830313675062688716e+1, + -0.25225608423947477377e+2, + 0.15792553958426010396e+2, + 0.2405557615380968528e+2, + -0.30999152397504143863e+2, + -0.31441257987711428434e+1, + 0.22033366404545688511e+2, + -0.1182480820373092989e+1, + -0.15870645741480423396e+2, + -0.38277538825609713768e+1, + 0.27854691286272704076e+2, + -0.13253292968240430127e+2, + -0.22658407908335533421e+2, + 0.29701683100837634299e+2, + -0.1060633067876335156e+1, + -0.19646561169928080659e+2, + 0.67827947393377518992e+1, + 0.12461057409163512233e+2, + -0.40016666021346809501e+1, + -0.19933995397273712058e+2, + 0.20683066471661309293e+2, + 0.84810711223467922792e+1, + -0.31080007044811626571e+2, + 0.18562281450981345188e+2, + 0.11804873604747383453e+2, + -0.22192665262613054722e+2, + 0.51597763558347713442e+1, + 0.10828791312852629858e+2, + -0.33385077714148270189e+1, + -0.13654061578514211206e+2, + 0.11759210562111242382e+2, + 0.11451026495749738743e+2, + -0.27578229903889820207e+2, + 0.14467339361177833368e+2, + 0.15223553916252150486e+2, + -0.28933944584776238429e+2, + 0.13472281545645710565e+2, + 0.11390592998440355998e+2, + -0.18345853628354245046e+2, + 0.46787185313701691314e+1, + 0.83604512077319750318e+1, + -0.39499316245583129259e+1, + -0.96471191420468684896e+1, + 0.11415141309130502734e+2, + 0.5066844808597839922e+1, + -0.22170453369249763398e+2, + 0.18723535427340834758e+2, + 0.50759443383764999425e+1, + -0.26309623155212207735e+2, + 0.23851222375331836645e+2, -0.28869359141894995746, - -0.21255256989551785551e+02, - 0.21666106609467700395e+02, - -0.39404703417510069663e+01, - -0.12256061775399526681e+02, - 0.12522673904901123976e+02, - -0.10699044671189259503e+01, - -0.64785575576132004016e+01, - 0.18241415401923886108e+01, - 0.75928864357197518586e+01, - -0.79875452153237391784e+01, - -0.40447632469565579783e+01, - 0.16855911850051963796e+02, - -0.15446471916779549005e+02, - -0.20279932874427712974e+01, - 0.21032290513982687230e+02, - -0.23653758326235465148e+02, - 0.59891060203500137149e+01, - 0.17692764353038846536e+02, - -0.27294996204014257302e+02, - 0.14879942776501609458e+02, - 0.88426305724889999738e+01, - -0.24188998242840472841e+02, - 0.19682073355380609314e+02, + -0.21255256989551785551e+2, + 0.21666106609467700395e+2, + -0.39404703417510069663e+1, + -0.12256061775399526681e+2, + 0.12522673904901123976e+2, + -0.10699044671189259503e+1, + -0.64785575576132004016e+1, + 0.18241415401923886108e+1, + 0.75928864357197518586e+1, + -0.79875452153237391784e+1, + -0.40447632469565579783e+1, + 0.16855911850051963796e+2, + -0.15446471916779549005e+2, + -0.20279932874427712974e+1, + 0.2103229051398268723e+2, + -0.23653758326235465148e+2, + 0.59891060203500137149e+1, + 0.17692764353038846536e+2, + -0.27294996204014257302e+2, + 0.14879942776501609458e+2, + 0.88426305724889999738e+1, + -0.24188998242840472841e+2, + 0.19682073355380609314e+2, -0.75399423676964505425, - -0.16161089658723117424e+02, - 0.18376674773861136458e+02, - -0.65974750321415269738e+01, - -0.74744590847893590535e+01, - 0.12560352658862333541e+02, - -0.68490014089783359807e+01, - -0.21663908100177438065e+01, - 0.60387474982414071079e+01, - -0.29039900306948700504e+01, - -0.19457738005707665430e+01, - 0.24980860762121537277e+01, - 0.18045591663884463784e+01, - -0.56362376694811873179e+01, - 0.36312865954910069632e+01, - 0.38162993457487557336e+01, - -0.10133239808468108123e+02, - 0.85459139641510368790e+01, - 0.13325808262068217225e+01, - -0.12112547618683043638e+02, - 0.14468436113374915308e+02, - -0.51255047968372675626e+01, - -0.95640104008521422685e+01, - 0.18164277917678820273e+02, - -0.13162241102729643316e+02, - -0.25327382312692927613e+01, - 0.17330815323210032375e+02, - -0.19642930497005000490e+02, - 0.70631564238896507035e+01, - 0.11424256297049176112e+02, - -0.21942218822651756938e+02, - 0.16277708001871552312e+02, - 0.17383798833859216426e+01, - -0.18841454883369461726e+02, - 0.22219311678789701148e+02, - -0.91391406649801023576e+01, - -0.10855693594886863806e+02, - 0.22985132025845032899e+02, - -0.18209338146837712458e+02, - -0.56971847389975778242e+01, - 0.26308956416995602723e+02, - -0.20328046601368363611e+02, + -0.16161089658723117424e+2, + 0.18376674773861136458e+2, + -0.65974750321415269738e+1, + -0.74744590847893590535e+1, + 0.12560352658862333541e+2, + -0.68490014089783359807e+1, + -0.21663908100177438065e+1, + 0.60387474982414071079e+1, + -0.29039900306948700504e+1, + -0.1945773800570766543e+1, + 0.24980860762121537277e+1, + 0.18045591663884463784e+1, + -0.56362376694811873179e+1, + 0.36312865954910069632e+1, + 0.38162993457487557336e+1, + -0.10133239808468108123e+2, + 0.8545913964151036879e+1, + 0.13325808262068217225e+1, + -0.12112547618683043638e+2, + 0.14468436113374915308e+2, + -0.51255047968372675626e+1, + -0.95640104008521422685e+1, + 0.18164277917678820273e+2, + -0.13162241102729643316e+2, + -0.25327382312692927613e+1, + 0.17330815323210032375e+2, + -0.1964293049700500049e+2, + 0.70631564238896507035e+1, + 0.11424256297049176112e+2, + -0.21942218822651756938e+2, + 0.16277708001871552312e+2, + 0.17383798833859216426e+1, + -0.18841454883369461726e+2, + 0.22219311678789701148e+2, + -0.91391406649801023576e+1, + -0.10855693594886863806e+2, + 0.22985132025845032899e+2, + -0.18209338146837712458e+2, + -0.56971847389975778242e+1, + 0.26308956416995602723e+2, + -0.20328046601368363611e+2, 0.72867006907987241782, - 0.21187477795456405971e+02, - -0.25806004386353109226e+02, - 0.12491975868910769165e+02, - 0.12040677363171184311e+02, - -0.26041262626825702142e+02, - 0.21671142762405949611e+02, - 0.11062663209370109385e+01, - -0.21709552862308537868e+02, - 0.27043940490705807633e+02, - -0.95353021500466734750e+01, - -0.14192024488791121328e+02, - 0.28375590273010878661e+02, - -0.18358040399393189546e+02, - -0.50856996858376906090e+01, - 0.26180613293886036530e+02, - -0.24533965549881354917e+02, - 0.41749086933098675800e+01, - 0.21399101667946268890e+02, - -0.27879141658283430161e+02, - 0.12534951435195013758e+02, - 0.15094793693656297862e+02, - -0.28687459977221891450e+02, - 0.19385335195692459109e+02, - 0.82349811952310254526e+01, - -0.27531524467694193703e+02, - 0.24520505023226839114e+02, - 0.15688691692721603577e+01, - -0.25085956331764752036e+02, - 0.28038472623879005852e+02, - -0.44081476789331661692e+01, - -0.22000736359598679570e+02, - 0.30225448496422007594e+02, - -0.94302440713390467408e+01, - -0.18829760691969351427e+02, - 0.31452479767250125064e+02, - -0.13404212316362226431e+02, - -0.16005849727952384143e+02, - 0.32096531336823893810e+02, - -0.16341487855648814786e+02, - -0.13847381485812562119e+02, - 0.32487015044788130069e+02, - -0.18293058031079315384e+02, - -0.12581028776474836306e+02, - 0.32871821267734240735e+02, - -0.19294303124805544769e+02, - -0.12366989732113836453e+02, - 0.33393919678232933279e+02, - -0.19322553321758544342e+02, - -0.13315451997813854135e+02, - 0.34069641017057357146e+02, - -0.18269112787580237267e+02, - -0.15484657857550896409e+02, - 0.34762263395515532238e+02, - -0.15929778468383060996e+02, - -0.18851836932229517174e+02, - 0.35149738855260565629e+02, - -0.12023129721333656761e+02, - -0.23249802924741047150e+02, - 0.34694400865549020807e+02, - -0.62529383761132883990e+01, - -0.28267223105310712583e+02, - 0.32636706203413353933e+02, - 0.15631508053618892173e+01, - -0.33124416267838483918e+02, - 0.28054579497760393281e+02, - 0.11278896584465206487e+02, - -0.36565050783704172943e+02, - 0.20050019763006435625e+02, - 0.22121963576465372370e+02, - -0.36850702109162888576e+02, - 0.81300553985534698143e+01, - 0.32377765307803244355e+02, - -0.32001383539847459758e+02, - -0.71918142239702476104e+01, - 0.39229881527716422340e+02, - -0.20454183522346855995e+02, - -0.23681493228338624135e+02, - 0.39075496627245449588e+02, - -0.22318008179813517700e+01, - -0.36927126960645743736e+02, - 0.28714525537766196095e+02, - 0.19598004727292948957e+02, - -0.40845789186403600013e+02, - 0.76121807859757746328e+01, - 0.38007206069821414474e+02, - -0.30006279136651180295e+02, - -0.19337726080005520402e+02, - 0.43196807785487386866e+02, - -0.40064541892716363236e+01, - -0.40548493526728698555e+02, - 0.27495064028780014098e+02, - 0.27851699762854877918e+02, - -0.41270738478236879132e+02, - -0.64751879552126991868e+01, - 0.46399379766665404645e+02, - -0.14089891006032148724e+02, - -0.39771857125181753645e+02, - 0.32936100635678648985e+02, - 0.27852264208658233713e+02, - -0.43732292614698408784e+02, - -0.10437150708730166926e+02, - 0.49601474287738142266e+02, - -0.55725371879422480603e+01, - -0.47735846645409068856e+02, - 0.21635163678939665743e+02, - 0.43548539109081332299e+02, - -0.32876145331162675234e+02, - -0.35226141440238990299e+02, - 0.42763186800220161388e+02, - 0.28160230933157262001e+02, - -0.47981884693460663982e+02, - -0.19955044466768999456e+02, - 0.52931954102628445469e+02, - 0.15231983961968241559e+02, - -0.54658685823781546276e+02, - -0.10926802711926816514e+02, - 0.57444652176735161220e+02, - 0.11201073970495553311e+02, - -0.57872848816792618720e+02, - -0.12760366207087967538e+02, - 0.59458626526146296953e+02, - 0.19630575409910356655e+02, - -0.57744555336193350570e+02, - -0.28260882702948439515e+02, - 0.54927650827841702608e+02, - 0.41901758001645958984e+02, - -0.45126730760798984932e+02, - -0.55220869941262954228e+02, - 0.29506533461097756543e+02, - 0.68181192979003853338e+02, - -0.27453859335198913527e+01, - -0.70734546736497392772e+02, - -0.29886581416375541664e+02, - 0.58328878591776991414e+02, - 0.63944662145735435388e+02, - -0.21259093916223097409e+02, - -0.79138913517280926158e+02, - -0.32087206877417159490e+02, - 0.58744229560641407772e+02, - 0.80133798541674579496e+02, - 0.70704930087884774181e+01, - -0.76202720772393789161e+02, - -0.79205182978500559443e+02, + 0.21187477795456405971e+2, + -0.25806004386353109226e+2, + 0.12491975868910769165e+2, + 0.12040677363171184311e+2, + -0.26041262626825702142e+2, + 0.21671142762405949611e+2, + 0.11062663209370109385e+1, + -0.21709552862308537868e+2, + 0.27043940490705807633e+2, + -0.9535302150046673475e+1, + -0.14192024488791121328e+2, + 0.28375590273010878661e+2, + -0.18358040399393189546e+2, + -0.5085699685837690609e+1, + 0.2618061329388603653e+2, + -0.24533965549881354917e+2, + 0.417490869330986758e+1, + 0.2139910166794626889e+2, + -0.27879141658283430161e+2, + 0.12534951435195013758e+2, + 0.15094793693656297862e+2, + -0.2868745997722189145e+2, + 0.19385335195692459109e+2, + 0.82349811952310254526e+1, + -0.27531524467694193703e+2, + 0.24520505023226839114e+2, + 0.15688691692721603577e+1, + -0.25085956331764752036e+2, + 0.28038472623879005852e+2, + -0.44081476789331661692e+1, + -0.2200073635959867957e+2, + 0.30225448496422007594e+2, + -0.94302440713390467408e+1, + -0.18829760691969351427e+2, + 0.31452479767250125064e+2, + -0.13404212316362226431e+2, + -0.16005849727952384143e+2, + 0.3209653133682389381e+2, + -0.16341487855648814786e+2, + -0.13847381485812562119e+2, + 0.32487015044788130069e+2, + -0.18293058031079315384e+2, + -0.12581028776474836306e+2, + 0.32871821267734240735e+2, + -0.19294303124805544769e+2, + -0.12366989732113836453e+2, + 0.33393919678232933279e+2, + -0.19322553321758544342e+2, + -0.13315451997813854135e+2, + 0.34069641017057357146e+2, + -0.18269112787580237267e+2, + -0.15484657857550896409e+2, + 0.34762263395515532238e+2, + -0.15929778468383060996e+2, + -0.18851836932229517174e+2, + 0.35149738855260565629e+2, + -0.12023129721333656761e+2, + -0.2324980292474104715e+2, + 0.34694400865549020807e+2, + -0.6252938376113288399e+1, + -0.28267223105310712583e+2, + 0.32636706203413353933e+2, + 0.15631508053618892173e+1, + -0.33124416267838483918e+2, + 0.28054579497760393281e+2, + 0.11278896584465206487e+2, + -0.36565050783704172943e+2, + 0.20050019763006435625e+2, + 0.2212196357646537237e+2, + -0.36850702109162888576e+2, + 0.81300553985534698143e+1, + 0.32377765307803244355e+2, + -0.32001383539847459758e+2, + -0.71918142239702476104e+1, + 0.3922988152771642234e+2, + -0.20454183522346855995e+2, + -0.23681493228338624135e+2, + 0.39075496627245449588e+2, + -0.223180081798135177e+1, + -0.36927126960645743736e+2, + 0.28714525537766196095e+2, + 0.19598004727292948957e+2, + -0.40845789186403600013e+2, + 0.76121807859757746328e+1, + 0.38007206069821414474e+2, + -0.30006279136651180295e+2, + -0.19337726080005520402e+2, + 0.43196807785487386866e+2, + -0.40064541892716363236e+1, + -0.40548493526728698555e+2, + 0.27495064028780014098e+2, + 0.27851699762854877918e+2, + -0.41270738478236879132e+2, + -0.64751879552126991868e+1, + 0.46399379766665404645e+2, + -0.14089891006032148724e+2, + -0.39771857125181753645e+2, + 0.32936100635678648985e+2, + 0.27852264208658233713e+2, + -0.43732292614698408784e+2, + -0.10437150708730166926e+2, + 0.49601474287738142266e+2, + -0.55725371879422480603e+1, + -0.47735846645409068856e+2, + 0.21635163678939665743e+2, + 0.43548539109081332299e+2, + -0.32876145331162675234e+2, + -0.35226141440238990299e+2, + 0.42763186800220161388e+2, + 0.28160230933157262001e+2, + -0.47981884693460663982e+2, + -0.19955044466768999456e+2, + 0.52931954102628445469e+2, + 0.15231983961968241559e+2, + -0.54658685823781546276e+2, + -0.10926802711926816514e+2, + 0.5744465217673516122e+2, + 0.11201073970495553311e+2, + -0.5787284881679261872e+2, + -0.12760366207087967538e+2, + 0.59458626526146296953e+2, + 0.19630575409910356655e+2, + -0.5774455533619335057e+2, + -0.28260882702948439515e+2, + 0.54927650827841702608e+2, + 0.41901758001645958984e+2, + -0.45126730760798984932e+2, + -0.55220869941262954228e+2, + 0.29506533461097756543e+2, + 0.68181192979003853338e+2, + -0.27453859335198913527e+1, + -0.70734546736497392772e+2, + -0.29886581416375541664e+2, + 0.58328878591776991414e+2, + 0.63944662145735435388e+2, + -0.21259093916223097409e+2, + -0.79138913517280926158e+2, + -0.3208720687741715949e+2, + 0.58744229560641407772e+2, + 0.80133798541674579496e+2, + 0.70704930087884774181e+1, + -0.76202720772393789161e+2, + -0.79205182978500559443e+2, -0.23506898448873564389, - 0.82444319776193196958e+02, - 0.93764396156707334740e+02, - 0.26595373225027614694e+02, - -0.63691034072482715089e+02, - -0.11217289862096015440e+03, - -0.90845894773713425252e+02, - -0.17209270041762568582e+02, - 0.68247495674759861117e+02, - 0.13033964257159107092e+03, - 0.15430025594008793632e+03, - 0.14469608704525612097e+03, - 0.11573958972665244005e+03, - 0.81714990544477942080e+02, - 0.51917147381040130938e+02, - 0.30049338393269799496e+02, - 0.15977577556609400489e+02, - 0.78513904647691861172e+01, - 0.35815663433983528918e+01, - 0.15217720703573420771e+01, + 0.82444319776193196958e+2, + 0.9376439615670733474e+2, + 0.26595373225027614694e+2, + -0.63691034072482715089e+2, + -0.1121728986209601544e+3, + -0.90845894773713425252e+2, + -0.17209270041762568582e+2, + 0.68247495674759861117e+2, + 0.13033964257159107092e+3, + 0.15430025594008793632e+3, + 0.14469608704525612097e+3, + 0.11573958972665244005e+3, + 0.8171499054447794208e+2, + 0.51917147381040130938e+2, + 0.30049338393269799496e+2, + 0.15977577556609400489e+2, + 0.78513904647691861172e+1, + 0.35815663433983528918e+1, + 0.15217720703573420771e+1, 0.60379648358821980114, - 0.22415419562835628420, - 0.77976073041270133057e-01, - 0.25445259763996076058e-01, - 0.77949444176182922095e-02, - 0.22427711820849436514e-02, - 0.60620131783036511341e-03, - 0.15392209167180170870e-03, - 0.36705680669841300235e-04, - 0.82170685163160044837e-05, - 0.17256894323665637191e-05, - 0.33969381247401081140e-06, - 0.62605415592287848294e-07, - 0.10788289113957527915e-07, - 0.17354647710318162789e-08, - 0.26012724284849101639e-09, + 0.2241541956283562842, + 0.77976073041270133057e-1, + 0.25445259763996076058e-1, + 0.77949444176182922095e-2, + 0.22427711820849436514e-2, + 0.60620131783036511341e-3, + 0.1539220916718017087e-3, + 0.36705680669841300235e-4, + 0.82170685163160044837e-5, + 0.17256894323665637191e-5, + 0.3396938124740108114e-6, + 0.62605415592287848294e-7, + 0.10788289113957527915e-7, + 0.17354647710318162789e-8, + 0.26012724284849101639e-9, 0.36250237415628775281e-10, 0.46847311084324966635e-11, 0.55978763699268486967e-12, @@ -19871,386 +19873,386 @@ function ESERK4ConstantCache(zprev) 0.13618398842011690728e-23, 0.42956615708871798645e-25, 0.10695332885935199808e-26, - 0.19710707329331085300e-28, - 0.23906097606190215810e-30, + 0.197107073293310853e-28, + 0.2390609760619021581e-30, 0.14314561635110096207e-32, - 0.58057707960313172796e-02, - -0.68406223181650075565e-02, - -0.21534509133839438953e-02, - 0.90958446933852264704e-02, - -0.71092807642582625180e-02, - -0.28857007526301498750e-03, - 0.73259284053281770524e-02, - -0.58298307774764454581e-02, - -0.28443404545128421826e-02, - 0.14345655166527769564e-01, - -0.20125460620614467333e-01, - 0.19561967310463408004e-01, - -0.14572674069922820009e-01, - 0.12007453878351479620e-01, - -0.12049183572032114153e-01, - 0.13403656734603412726e-01, - -0.10388603646555165036e-01, - 0.40501627289130934587e-02, - 0.34090739550903734201e-02, - -0.60179185418350704395e-02, - 0.51903665237073882965e-02, - -0.36652436404966673086e-02, - 0.72117460815780392441e-02, - -0.12859709105966917950e-01, - 0.15468086943590036650e-01, - -0.77014055482805040403e-02, - -0.64963715302415606448e-02, - 0.18353300400071066029e-01, - -0.16306604857467179442e-01, - 0.24255189415374046706e-02, - 0.12578560902759064466e-01, - -0.12865179479034972304e-01, - -0.26526435916708291859e-02, - 0.22641045112102915760e-01, - -0.27284893183549482204e-01, - 0.11387331130858812170e-01, - 0.14654120532027591767e-01, - -0.28129790736513265309e-01, - 0.19492684862170209931e-01, - 0.34428554693453727702e-02, - -0.17343575853666928777e-01, - 0.99286962721976679269e-02, - 0.13621371460628270075e-01, - -0.31027936957604734108e-01, - 0.29267768323484984888e-01, - -0.11352896407728718317e-01, - -0.34991100480229473182e-02, - 0.50392937216673060197e-02, - 0.32982572867414298307e-02, - -0.57876790596483578683e-02, - -0.16089089182529671927e-02, - 0.10796021036732973697e-01, - -0.70777660795348648973e-02, - -0.71677895975260589451e-02, - 0.17490342787094305399e-01, - -0.87537080178505203426e-02, - -0.10902505358773413591e-01, - 0.21021086915148937124e-01, - -0.63232999781691187277e-02, - -0.19674410390853182967e-01, - 0.31922734424001668330e-01, - -0.16120780029726895777e-01, - -0.10156403357039489599e-01, - 0.21127675625048986802e-01, - -0.65660071169845917252e-02, - -0.13457232425355054525e-01, - 0.18430620253456979352e-01, - -0.74103442546891691925e-02, - 0.22177485318496089131e-02, - -0.12144454985922476312e-01, - 0.23697730286712223591e-01, - -0.13070592667594627817e-01, - -0.15784464816598113568e-01, - 0.35901777511941755650e-01, - -0.24957052142801514072e-01, - -0.74166010607114405285e-03, - 0.95761338961078360660e-02, - 0.97135747833988796140e-02, - -0.28995506395438339076e-01, - 0.22433781797123252683e-01, - 0.33105852561686540010e-02, - -0.14990777014321112273e-01, - 0.43594721197489933601e-02, - 0.45162432766089307193e-02, - 0.11899556557481748634e-01, - -0.33631791900695692799e-01, - 0.26377064141525265878e-01, - 0.11658040520288969616e-01, - -0.37813560808181469197e-01, - 0.26788467877102591780e-01, - -0.14732398992815731384e-02, - 0.15435912205798354036e-02, - -0.19139695995488020114e-01, - 0.17113619913544413781e-01, - 0.12119907052652416357e-01, - -0.25457739643897959320e-01, - 0.48586562064306974482e-03, - 0.28230320705210219800e-01, - -0.16495395280454201031e-01, - -0.14426907822051837291e-01, - 0.15303653503627707641e-01, - 0.13162660469001960170e-01, - -0.17976269465653414714e-01, - -0.94301926809336883428e-02, - 0.18853837621439540478e-01, - 0.13357223997688556436e-01, - -0.32713655752883305516e-01, - 0.31515103477108524603e-02, - 0.29422915016745963129e-01, - -0.13490293869548914199e-01, - -0.10653357349050896277e-01, - -0.88768131350407137453e-02, - 0.35957632375763756705e-01, - -0.96833044249532967268e-02, - -0.28320408141704146721e-01, - 0.10225064679519280109e-01, - 0.28110371318882266395e-01, - -0.12858026525538936852e-01, - -0.14476230019906544816e-01, - -0.13148354498122349909e-01, - 0.42526977478160372936e-01, - -0.16502205194615178398e-02, - -0.38720295887251399147e-01, - 0.12880744351179473917e-01, - 0.10350596838407783405e-03, - 0.47115086116128218618e-01, - -0.50215984412000598536e-01, - -0.66326261272646042100e-02, - 0.45625287810192151697e-02, - 0.38910200708418211935e-01, - -0.68391210386183664063e-02, - -0.24371634619671050243e-01, - -0.30919618083182304202e-01, - 0.44255010459102607501e-01, - 0.13155345686717983406e-01, - 0.12255584869809422327e-01, - -0.49019099383041227214e-01, - -0.16047588052021055649e-01, - 0.21105015291626592205e-01, - 0.37447968493639849363e-01, - 0.18075670802173562229e-01, - -0.33907808983597444163e-01, - -0.37198390361033131790e-01, - -0.19564181567734300476e-01, - 0.37330474699638217795e-01, - 0.38475358644366491889e-01, - 0.36603883416932436745e-01, - -0.21294056429655702084e-01, - -0.46459967878435662336e-01, - -0.46653283422753669130e-01, - -0.37490613414215188948e-01, - 0.28245167732350289630e-01, - 0.34255114110174345043e-01, - 0.81005183507829300882e-01, - 0.67456560691266723162e-01, - 0.63678030455770209817e-01, - 0.52318981645496802357e-01, - 0.29682535490236455072e-01, - 0.21072111129263725732e-01, - 0.16512896493884928611e-01, - -0.29277493083385611704e-02, - 0.14120034033960915734e-01, - -0.78934493741726480254e-02, - 0.50803796229294808859e-02, - 0.16691128499964774396e-02, - -0.56705687424521535392e-02, - 0.62354671906019948704e-02, - -0.17503348227712288432e-02, - -0.67810494416345118776e-02, - 0.16999005423601984410e-01, - -0.25647067373723457517e-01, - 0.29776600434136706042e-01, - -0.27834433073933160380e-01, - 0.20214069622947004184e-01, - -0.92229857157302141957e-02, - -0.17311036447493518935e-02, - 0.92432571402123551302e-02, - -0.11116082577816413859e-01, - 0.70446640261085874749e-02, - 0.12682505322484584776e-02, - -0.10781781524768751720e-01, - 0.18153563558280495782e-01, - -0.20937669727202588843e-01, - 0.18362885377012017757e-01, - -0.11573328149618455560e-01, - 0.31158070752933943008e-02, - 0.39961210305573596421e-02, - -0.74253657192341910448e-02, - 0.63303569033073964212e-02, - -0.16796518137103155950e-02, - -0.41507979151425532238e-02, - 0.82536870174285230373e-02, - -0.83119829306628201238e-02, - 0.34819051472186825398e-02, - 0.52086927646047024784e-02, - -0.15160548172491346980e-01, - 0.23046707696156250311e-01, - -0.25960974857740605481e-01, - 0.22431180931045610616e-01, - -0.12978855640426610260e-01, - 0.29008317431839764078e-01, - -0.47800258913253325377e-01, - 0.26966321883046640712e-01, - -0.21633038102122449653e-01, - 0.14713530282815773242e-01, - -0.27442046058758818444e-01, - 0.35543275832977026807e-01, - -0.53515780010486450891e-01, - 0.53604462100495478549e-01, - -0.51736940020522224903e-01, - 0.26250261569520299404e-01, - -0.16628338323037487705e-02, - -0.35862200458928426838e-01, - 0.57815102303094334513e-01, - -0.79449554230306404512e-01, - 0.78460594009658185533e-01, - -0.78454872829645638799e-01, - 0.64048936212499310572e-01, - -0.61325362167777813793e-01, - 0.51851551083855175472e-01, - -0.54556568752584029547e-01, - 0.43199332585606591006e-01, - -0.32283839712336892536e-01, - -0.26289930038423049881e-02, - 0.38795947139793715563e-01, - -0.88770748396844498251e-01, + 0.58057707960313172796e-2, + -0.68406223181650075565e-2, + -0.21534509133839438953e-2, + 0.90958446933852264704e-2, + -0.7109280764258262518e-2, + -0.2885700752630149875e-3, + 0.73259284053281770524e-2, + -0.58298307774764454581e-2, + -0.28443404545128421826e-2, + 0.14345655166527769564e-1, + -0.20125460620614467333e-1, + 0.19561967310463408004e-1, + -0.14572674069922820009e-1, + 0.1200745387835147962e-1, + -0.12049183572032114153e-1, + 0.13403656734603412726e-1, + -0.10388603646555165036e-1, + 0.40501627289130934587e-2, + 0.34090739550903734201e-2, + -0.60179185418350704395e-2, + 0.51903665237073882965e-2, + -0.36652436404966673086e-2, + 0.72117460815780392441e-2, + -0.1285970910596691795e-1, + 0.1546808694359003665e-1, + -0.77014055482805040403e-2, + -0.64963715302415606448e-2, + 0.18353300400071066029e-1, + -0.16306604857467179442e-1, + 0.24255189415374046706e-2, + 0.12578560902759064466e-1, + -0.12865179479034972304e-1, + -0.26526435916708291859e-2, + 0.2264104511210291576e-1, + -0.27284893183549482204e-1, + 0.1138733113085881217e-1, + 0.14654120532027591767e-1, + -0.28129790736513265309e-1, + 0.19492684862170209931e-1, + 0.34428554693453727702e-2, + -0.17343575853666928777e-1, + 0.99286962721976679269e-2, + 0.13621371460628270075e-1, + -0.31027936957604734108e-1, + 0.29267768323484984888e-1, + -0.11352896407728718317e-1, + -0.34991100480229473182e-2, + 0.50392937216673060197e-2, + 0.32982572867414298307e-2, + -0.57876790596483578683e-2, + -0.16089089182529671927e-2, + 0.10796021036732973697e-1, + -0.70777660795348648973e-2, + -0.71677895975260589451e-2, + 0.17490342787094305399e-1, + -0.87537080178505203426e-2, + -0.10902505358773413591e-1, + 0.21021086915148937124e-1, + -0.63232999781691187277e-2, + -0.19674410390853182967e-1, + 0.3192273442400166833e-1, + -0.16120780029726895777e-1, + -0.10156403357039489599e-1, + 0.21127675625048986802e-1, + -0.65660071169845917252e-2, + -0.13457232425355054525e-1, + 0.18430620253456979352e-1, + -0.74103442546891691925e-2, + 0.22177485318496089131e-2, + -0.12144454985922476312e-1, + 0.23697730286712223591e-1, + -0.13070592667594627817e-1, + -0.15784464816598113568e-1, + 0.3590177751194175565e-1, + -0.24957052142801514072e-1, + -0.74166010607114405285e-3, + 0.9576133896107836066e-2, + 0.9713574783398879614e-2, + -0.28995506395438339076e-1, + 0.22433781797123252683e-1, + 0.3310585256168654001e-2, + -0.14990777014321112273e-1, + 0.43594721197489933601e-2, + 0.45162432766089307193e-2, + 0.11899556557481748634e-1, + -0.33631791900695692799e-1, + 0.26377064141525265878e-1, + 0.11658040520288969616e-1, + -0.37813560808181469197e-1, + 0.2678846787710259178e-1, + -0.14732398992815731384e-2, + 0.15435912205798354036e-2, + -0.19139695995488020114e-1, + 0.17113619913544413781e-1, + 0.12119907052652416357e-1, + -0.2545773964389795932e-1, + 0.48586562064306974482e-3, + 0.282303207052102198e-1, + -0.16495395280454201031e-1, + -0.14426907822051837291e-1, + 0.15303653503627707641e-1, + 0.1316266046900196017e-1, + -0.17976269465653414714e-1, + -0.94301926809336883428e-2, + 0.18853837621439540478e-1, + 0.13357223997688556436e-1, + -0.32713655752883305516e-1, + 0.31515103477108524603e-2, + 0.29422915016745963129e-1, + -0.13490293869548914199e-1, + -0.10653357349050896277e-1, + -0.88768131350407137453e-2, + 0.35957632375763756705e-1, + -0.96833044249532967268e-2, + -0.28320408141704146721e-1, + 0.10225064679519280109e-1, + 0.28110371318882266395e-1, + -0.12858026525538936852e-1, + -0.14476230019906544816e-1, + -0.13148354498122349909e-1, + 0.42526977478160372936e-1, + -0.16502205194615178398e-2, + -0.38720295887251399147e-1, + 0.12880744351179473917e-1, + 0.10350596838407783405e-3, + 0.47115086116128218618e-1, + -0.50215984412000598536e-1, + -0.663262612726460421e-2, + 0.45625287810192151697e-2, + 0.38910200708418211935e-1, + -0.68391210386183664063e-2, + -0.24371634619671050243e-1, + -0.30919618083182304202e-1, + 0.44255010459102607501e-1, + 0.13155345686717983406e-1, + 0.12255584869809422327e-1, + -0.49019099383041227214e-1, + -0.16047588052021055649e-1, + 0.21105015291626592205e-1, + 0.37447968493639849363e-1, + 0.18075670802173562229e-1, + -0.33907808983597444163e-1, + -0.3719839036103313179e-1, + -0.19564181567734300476e-1, + 0.37330474699638217795e-1, + 0.38475358644366491889e-1, + 0.36603883416932436745e-1, + -0.21294056429655702084e-1, + -0.46459967878435662336e-1, + -0.4665328342275366913e-1, + -0.37490613414215188948e-1, + 0.2824516773235028963e-1, + 0.34255114110174345043e-1, + 0.81005183507829300882e-1, + 0.67456560691266723162e-1, + 0.63678030455770209817e-1, + 0.52318981645496802357e-1, + 0.29682535490236455072e-1, + 0.21072111129263725732e-1, + 0.16512896493884928611e-1, + -0.29277493083385611704e-2, + 0.14120034033960915734e-1, + -0.78934493741726480254e-2, + 0.50803796229294808859e-2, + 0.16691128499964774396e-2, + -0.56705687424521535392e-2, + 0.62354671906019948704e-2, + -0.17503348227712288432e-2, + -0.67810494416345118776e-2, + 0.1699900542360198441e-1, + -0.25647067373723457517e-1, + 0.29776600434136706042e-1, + -0.2783443307393316038e-1, + 0.20214069622947004184e-1, + -0.92229857157302141957e-2, + -0.17311036447493518935e-2, + 0.92432571402123551302e-2, + -0.11116082577816413859e-1, + 0.70446640261085874749e-2, + 0.12682505322484584776e-2, + -0.1078178152476875172e-1, + 0.18153563558280495782e-1, + -0.20937669727202588843e-1, + 0.18362885377012017757e-1, + -0.1157332814961845556e-1, + 0.31158070752933943008e-2, + 0.39961210305573596421e-2, + -0.74253657192341910448e-2, + 0.63303569033073964212e-2, + -0.1679651813710315595e-2, + -0.41507979151425532238e-2, + 0.82536870174285230373e-2, + -0.83119829306628201238e-2, + 0.34819051472186825398e-2, + 0.52086927646047024784e-2, + -0.1516054817249134698e-1, + 0.23046707696156250311e-1, + -0.25960974857740605481e-1, + 0.22431180931045610616e-1, + -0.1297885564042661026e-1, + 0.29008317431839764078e-1, + -0.47800258913253325377e-1, + 0.26966321883046640712e-1, + -0.21633038102122449653e-1, + 0.14713530282815773242e-1, + -0.27442046058758818444e-1, + 0.35543275832977026807e-1, + -0.53515780010486450891e-1, + 0.53604462100495478549e-1, + -0.51736940020522224903e-1, + 0.26250261569520299404e-1, + -0.16628338323037487705e-2, + -0.35862200458928426838e-1, + 0.57815102303094334513e-1, + -0.79449554230306404512e-1, + 0.78460594009658185533e-1, + -0.78454872829645638799e-1, + 0.64048936212499310572e-1, + -0.61325362167777813793e-1, + 0.51851551083855175472e-1, + -0.54556568752584029547e-1, + 0.43199332585606591006e-1, + -0.32283839712336892536e-1, + -0.26289930038423049881e-2, + 0.38795947139793715563e-1, + -0.88770748396844498251e-1, 0.11917818968318011352, -0.13825339779137110763, 0.11764716934136652815, - -0.79385737102160805478e-01, - 0.13341799255940168037e-01, - 0.42561731789753476374e-01, - -0.91254629470965048510e-01, + -0.79385737102160805478e-1, + 0.13341799255940168037e-1, + 0.42561731789753476374e-1, + -0.9125462947096504851e-1, 0.10037223569342973439, - -0.88587102573754933355e-01, - 0.48050777979515062188e-01, - -0.99614337145803658058e-02, - -0.82867882546120274351e-02, - 0.23067403695719086720e-01, - 0.55792438410093958545e-01, - 0.84510636455474782980e-02, - 0.23616512336435355190, + -0.88587102573754933355e-1, + 0.48050777979515062188e-1, + -0.99614337145803658058e-2, + -0.82867882546120274351e-2, + 0.2306740369571908672e-1, + 0.55792438410093958545e-1, + 0.8451063645547478298e-2, + 0.2361651233643535519, 0.14699765775876927343, 0.45782577670278751247, 0.59463555170223714175, 0.66377508494024251018, - 0.10423479383464735459e+01, + 0.10423479383464735459e+1, 0.64139262033565258569, 0.74346114294368925712, - 0.90646127213549726465e-01, + 0.90646127213549726465e-1, -0.36623944868344998627, -0.47156336244317015316, -0.78584723929802924314, - 0.17323904524105038227e-01, + 0.17323904524105038227e-1, 0.20685129791918094311, - 0.57489570928402344840, + 0.5748957092840234484, 0.46069289742851232683, -0.34606958741682669611, - -0.31867035129384435610, + -0.3186703512938443561, -0.48927606099025816588, 0.20544237153656438877, 0.53108432740315281162, 0.15055938537162255608, -0.15741279835182739322, -0.50557155720035640289, - -0.76398036253973969356e-01, + -0.76398036253973969356e-1, 0.46816497191218664486, 0.20722431131248661429, -0.13094337914591899774, -0.40794434348143909785, - -0.90996380686993005860e-01, - 0.51949529873100985800, - 0.50734834847780574396e-01, + -0.9099638068699300586e-1, + 0.519495298731009858, + 0.50734834847780574396e-1, -0.22423635286065762839, -0.28281018905866478486, - 0.96236973783064297394e-01, - 0.51266820261641399270, - -0.28941994499835982380, - -0.19282606220331877100, - -0.97419628729948484769e-01, + 0.96236973783064297394e-1, + 0.5126682026164139927, + -0.2894199449983598238, + -0.192826062203318771, + -0.97419628729948484769e-1, 0.42333224864822749378, - -0.55692312773207280213e-02, + -0.55692312773207280213e-2, -0.30635114469535079662, -0.10708368647664777418, - 0.35719548514066484790, - 0.90465223121366553083e-01, - -0.39069852255383191730, - 0.65740970131644829721e-01, + 0.3571954851406648479, + 0.90465223121366553083e-1, + -0.3906985225538319173, + 0.65740970131644829721e-1, 0.11346206420970021689, 0.26322974928903564162, -0.44442611262013820284, - -0.13845201702622596945e-01, + -0.13845201702622596945e-1, 0.41015091830675853846, -0.19881589951092781821, - -0.90619233493001924429e-01, - -0.90177595126735579645e-01, + -0.90619233493001924429e-1, + -0.90177595126735579645e-1, 0.32216479526764807417, - -0.46046686874603934281e-01, + -0.46046686874603934281e-1, -0.39524651368873059409, 0.33309678308045509443, 0.10067248088882549406, -0.23217810476963418598, - -0.43806772804689600442e-01, + -0.43806772804689600442e-1, 0.17139920838865577157, - 0.80424218823874557560e-01, + 0.8042421882387455756e-1, -0.25139253119045595897, - -0.15055695848883650020e-01, + -0.1505569584888365002e-1, 0.36488091392070465258, -0.28557550749831506209, -0.10620735532554911873, 0.25840422043678851205, - -0.13125514205839943632e-01, + -0.13125514205839943632e-1, -0.21072823300295118187, - 0.87453795895681654682e-01, + 0.87453795895681654682e-1, 0.14551519384407893276, - -0.95908267771915522992e-01, + -0.95908267771915522992e-1, -0.17159301188831083129, 0.23041440403228702349, - 0.69016667851658913824e-01, + 0.69016667851658913824e-1, -0.36633226169659499627, 0.27868521736654050525, - 0.86554258582522192178e-01, - -0.29533015593267153420, + 0.86554258582522192178e-1, + -0.2953301559326715342, 0.15884273793991504631, - 0.63414624674998684717e-01, - -0.63500700955667510605e-01, + 0.63414624674998684717e-1, + -0.63500700955667510605e-1, -0.10282457131189547128, 0.13280240097949636002, - 0.70756774762128549217e-01, + 0.70756774762128549217e-1, -0.24724559817204652679, 0.11901158846965259608, 0.22858280650522611044, -0.42948906831986688459, - 0.26906517265756374480, - 0.67868439231328528405e-01, + 0.2690651726575637448, + 0.67868439231328528405e-1, -0.22875991644749743559, - 0.98763978136487115544e-01, - 0.98869290232347639691e-01, - -0.99817547351785232412e-01, - -0.94666609949106625410e-01, + 0.98763978136487115544e-1, + 0.98869290232347639691e-1, + -0.99817547351785232412e-1, + -0.9466660994910662541e-1, 0.25256118302133712117, -0.21495797636643607098, - 0.78717319754156536704e-01, - -0.53560706977923089323e-01, + 0.78717319754156536704e-1, + -0.53560706977923089323e-1, 0.18244007954749805189, -0.27672857420508678583, 0.14022909549863263323, 0.17889097400130299365, -0.40969579008702217138, 0.33313855447376056196, - -0.15483002541630333515e-01, + -0.15483002541630333515e-1, -0.25449469378850625434, 0.25022110889618542906, - -0.20025046027203077803e-01, + -0.20025046027203077803e-1, -0.18499888515711959691, 0.17137513140440910342, - 0.16798052734858480439e-01, + 0.16798052734858480439e-1, -0.16984176040466422708, 0.13439526493763959136, - 0.46016947956369833039e-01, + 0.46016947956369833039e-1, -0.20244886881452001104, 0.22185382392993457934, -0.14554259646865780331, - 0.92876901672266004573e-01, + 0.92876901672266004573e-1, -0.11458705460811309529, 0.13756544310150314869, - -0.59538906148827466791e-01, + -0.59538906148827466791e-1, -0.11846975623885290518, - 0.26747083098157142800, + 0.267470830981571428, -0.25041074994081169436, - 0.64906053349603282099e-01, + 0.64906053349603282099e-1, 0.13601399196187999308, -0.17765083772276663021, - 0.26494643600941596845e-01, + 0.26494643600941596845e-1, 0.17096076030820295255, -0.21810109487480203172, - 0.49182759591195293614e-01, + 0.49182759591195293614e-1, 0.20122336614096195118, -0.30884341266199366594, 0.15367384899868968828, @@ -20258,7 +20260,7 @@ function ESERK4ConstantCache(zprev) -0.42392469053588288652, 0.42105514733363119673, -0.17432031581318002678, - -0.11708954848654160030, + -0.1170895484865416003, 0.23309688628528327237, -0.11018878725157561782, -0.11499034710870147113, @@ -20267,177 +20269,177 @@ function ESERK4ConstantCache(zprev) -0.16038445093429004595, 0.36448759948292069888, -0.33572109532323390901, - 0.81300601646372525066e-01, + 0.81300601646372525066e-1, 0.21938405360847734737, -0.35464256574354552365, 0.24242345509680171545, - 0.11480736566550001423e-01, + 0.11480736566550001423e-1, -0.20208202792796153835, 0.18794375779055216835, -0.42454016490727053412, 0.31667474348554081054, 0.32586334309833864253, - -0.61351680364760841080, + -0.6135168036476084108, 0.16777814694036791154, 0.53533512600212129762, -0.99590898957725870755, 0.68353284396012725654, - 0.79075074755753996247e-01, + 0.79075074755753996247e-1, -0.83130431570037610634, 0.94315808672741852092, -0.57447092181206360628, - 0.65171632254594352718e-01, - -0.17814792631133342937e-01, + 0.65171632254594352718e-1, + -0.17814792631133342937e-1, 0.31100882370527649368, -0.65003038077053321153, 0.45666945900144140236, 0.12541687668736584138, -0.75643635742310788572, 0.80365992778641159866, - -0.39034235900957470200, + -0.390342359009574702, -0.11062686387577691516, - 0.23506636218087583606e-01, + 0.23506636218087583606e-1, 0.50771435415510524081, - -0.10048720776555100098e+01, + -0.10048720776555100098e+1, 0.68277227496736336843, 0.30112364856712314776, - -0.12819482883046107169e+01, - 0.12186393597177420656e+01, + -0.12819482883046107169e+1, + 0.12186393597177420656e+1, -0.14003270034115145037, - -0.11678570631233242683e+01, - 0.13694740591360106130e+01, + -0.11678570631233242683e+1, + 0.1369474059136010613e+1, -0.25643087162081368291, - -0.13711994443163280089e+01, - 0.19266755881966977082e+01, + -0.13711994443163280089e+1, + 0.19266755881966977082e+1, -0.92617254185313657722, -0.90470268897299488398, - 0.18091975372071846806e+01, - -0.10503097820733351409e+01, + 0.18091975372071846806e+1, + -0.10503097820733351409e+1, -0.77495540715050081904, - 0.18398410070325157406e+01, - -0.12314992808908471478e+01, + 0.18398410070325157406e+1, + -0.12314992808908471478e+1, -0.59357160864015179325, - 0.18491486795382545694e+01, - -0.15797681244667503009e+01, + 0.18491486795382545694e+1, + -0.15797681244667503009e+1, 0.13552387390048423188, 0.87358036962523089031, -0.69525787397770832943, -0.23822925508644918202, 0.50882663286326967889, 0.21453492500166237988, - -0.11527622769345715614e+01, - 0.94252867191791978030, + -0.11527622769345715614e+1, + 0.9425286719179197803, 0.29178234231777333552, - -0.13182933903937910092e+01, + -0.13182933903937910092e+1, 0.76584289563229657194, 0.79513359976623698699, - -0.17060170218705410505e+01, + -0.17060170218705410505e+1, 0.65048338409939543414, - 0.13364265332824700749e+01, - -0.22594064859118065947e+01, - 0.96468108554254228260, - 0.11102292414053533953e+01, - -0.19040960274971074906e+01, + 0.13364265332824700749e+1, + -0.22594064859118065947e+1, + 0.9646810855425422826, + 0.11102292414053533953e+1, + -0.19040960274971074906e+1, 0.66083250158832040899, 0.89211913413867649503, - -0.10835841298827615375e+01, - -0.48753513015825242216e-01, + -0.10835841298827615375e+1, + -0.48753513015825242216e-1, 0.54799360372045891054, 0.42841795414050420909, - -0.17187209698281440406e+01, - 0.12171492579012752611e+01, + -0.17187209698281440406e+1, + 0.12171492579012752611e+1, 0.86972790798561971926, - -0.23641839819841390380e+01, - 0.14016395010496691675e+01, + -0.2364183981984139038e+1, + 0.14016395010496691675e+1, 0.70258053612438420288, - -0.13730290648331018311e+01, + -0.13730290648331018311e+1, -0.28446116251620723325, - 0.19100562468545740913e+01, - -0.13872780593138265282e+01, + 0.19100562468545740913e+1, + -0.13872780593138265282e+1, -0.66320125183335754127, - 0.14238504098660533792e+01, - -0.24369960337173390830, + 0.14238504098660533792e+1, + -0.2436996033717339083, -0.76068461345834581522, -0.49624236726268894371, - 0.24017175525158180882e+01, - -0.20631706680726549230e+01, + 0.24017175525158180882e+1, + -0.2063170668072654923e+1, -0.76016251011579516472, - 0.26132417159228173986e+01, - -0.14846129543839250431e+01, + 0.26132417159228173986e+1, + -0.14846129543839250431e+1, -0.65421077563474583361, 0.50003935251184461475, - 0.11968144412551600109e+01, - -0.12144855709767650165e+01, - -0.11525604104444842068e+01, - 0.22897603460726454472e+01, + 0.11968144412551600109e+1, + -0.12144855709767650165e+1, + -0.11525604104444842068e+1, + 0.22897603460726454472e+1, -0.26727054013119488918, - -0.20822365645324358852e+01, - 0.10976907560034461220e+01, - 0.14268183316470093303e+01, - -0.13946545143005288914e+01, - -0.10768074042208894969e+01, - 0.14906648551535546243e+01, + -0.20822365645324358852e+1, + 0.1097690756003446122e+1, + 0.14268183316470093303e+1, + -0.13946545143005288914e+1, + -0.10768074042208894969e+1, + 0.14906648551535546243e+1, 0.87502654761080933543, - -0.17610099409733535047e+01, + -0.17610099409733535047e+1, -0.88840300226563873043, - 0.25541741747776338656e+01, + 0.25541741747776338656e+1, -0.22561700899014583421, - -0.22762787411362386258e+01, + -0.22762787411362386258e+1, 0.69634069663964803798, - 0.15009808608988015610e+01, - 0.90856534998967661276e-01, - -0.24353023981303074663e+01, + 0.1500980860898801561e+1, + 0.90856534998967661276e-1, + -0.24353023981303074663e+1, 0.36408857792555487931, - 0.26997063763363269295e+01, - -0.11189651201447730067e+01, - -0.20792050082905713104e+01, + 0.26997063763363269295e+1, + -0.11189651201447730067e+1, + -0.20792050082905713104e+1, 0.73045347302873597783, - 0.16032379229435524959e+01, + 0.16032379229435524959e+1, 0.78669977772890464784, - -0.34754681430179981128e+01, + -0.34754681430179981128e+1, 0.40088297794085231418, - 0.25605717039189674900e+01, - 0.11244418334896142883e-01, - -0.13841164426319143566e+01, - -0.24697199606331823318e+01, - 0.27789462321319136073e+01, - 0.18444838142247523827e+01, - -0.14990584369776465135e+01, - -0.22715959780335834850e+01, + 0.256057170391896749e+1, + 0.11244418334896142883e-1, + -0.13841164426319143566e+1, + -0.24697199606331823318e+1, + 0.27789462321319136073e+1, + 0.18444838142247523827e+1, + -0.14990584369776465135e+1, + -0.2271595978033583485e+1, -0.39178954016402256499, - 0.30585957524220930281e+01, - 0.15138820935745791463e+01, - -0.25975908076052101059e+01, - -0.21790573941442663575e+01, - -0.98167504706953206961e-01, - 0.34036881256850430866e+01, - 0.18145044603920401638e+01, - -0.20101254904222272124e+01, - -0.30883272549061846490e+01, - -0.14513953571791218256e+01, - 0.26971277348630113835e+01, - 0.33420881043112515840e+01, - 0.13631729012800157808e+01, - -0.28015328813770961069e+01, - -0.35890004611630765829e+01, - -0.27554617411039599162e+01, - 0.15861709453932928415e+01, - 0.39146146725514414655e+01, - 0.41374052232263043294e+01, - 0.27126885041779322805e+01, - -0.17850028421471217932e+01, - -0.35145160732876519205e+01, - -0.62218661930903484958e+01, - -0.61229154228511859515e+01, - -0.50358267384756505436e+01, - -0.46030808914306318158e+01, - -0.23159230475891039447e+01, - -0.19934410995772675612e+01, - -0.10711920645466976865e+01, + 0.30585957524220930281e+1, + 0.15138820935745791463e+1, + -0.25975908076052101059e+1, + -0.21790573941442663575e+1, + -0.98167504706953206961e-1, + 0.34036881256850430866e+1, + 0.18145044603920401638e+1, + -0.20101254904222272124e+1, + -0.3088327254906184649e+1, + -0.14513953571791218256e+1, + 0.26971277348630113835e+1, + 0.3342088104311251584e+1, + 0.13631729012800157808e+1, + -0.28015328813770961069e+1, + -0.35890004611630765829e+1, + -0.27554617411039599162e+1, + 0.15861709453932928415e+1, + 0.39146146725514414655e+1, + 0.41374052232263043294e+1, + 0.27126885041779322805e+1, + -0.17850028421471217932e+1, + -0.35145160732876519205e+1, + -0.62218661930903484958e+1, + -0.61229154228511859515e+1, + -0.50358267384756505436e+1, + -0.46030808914306318158e+1, + -0.23159230475891039447e+1, + -0.19934410995772675612e+1, + -0.10711920645466976865e+1, -0.16070949342754251021, -0.73605953231195353492, 0.23803798051320176898, - -0.81716548058016577616e-01, + -0.81716548058016577616e-1, -0.39571956101206262613, 0.69192159916979345535, -0.79859092325509095645, @@ -20445,13 +20447,13 @@ function ESERK4ConstantCache(zprev) -0.14582759996031938177, -0.42107416909650419168, 0.91206784277849073383, - -0.11522224670507166255e+01, - 0.10480013744512810536e+01, + -0.11522224670507166255e+1, + 0.10480013744512810536e+1, -0.62011719580790114481, - 0.25670469219679008070e-02, + 0.2567046921967900807e-2, 0.60607951638771129232, - -0.10074312596635248696e+01, - 0.10752455500906923369e+01, + -0.10074312596635248696e+1, + 0.10752455500906923369e+1, -0.79519469224474315094, 0.27171393062392851236, 0.31296599855470086382, @@ -20468,1993 +20470,1993 @@ function ESERK4ConstantCache(zprev) -0.62634767224784171358, 0.71289934838090940339, -0.48937811538635883624, - 0.10352310488148922310e-01, - 0.57330405583653187840, - -0.10641853860012693289e+01, - 0.12870019685073776916e+01, - -0.11492729667826364626e+01, + 0.1035231048814892231e-1, + 0.5733040558365318784, + -0.10641853860012693289e+1, + 0.12870019685073776916e+1, + -0.11492729667826364626e+1, 0.67536418208884119174, -0.11388128019710529182, -0.36985653844741139817, - 0.10771508877007252014e+01, - -0.12072626480497796742e+01, - 0.11576010535878364927e+01, + 0.10771508877007252014e+1, + -0.12072626480497796742e+1, + 0.11576010535878364927e+1, -0.48672024989082457447, - -0.13318497678915913740, + -0.1331849767891591374, 0.93885250742584136496, - -0.12024464814367636922e+01, - 0.12800687305061548837e+01, + -0.12024464814367636922e+1, + 0.12800687305061548837e+1, -0.69958226975462212138, 0.11665079213168105809, 0.70909013506087914536, - -0.10472327689846490095e+01, - 0.12503468024347195175e+01, + -0.10472327689846490095e+1, + 0.12503468024347195175e+1, -0.84492010336712919383, 0.48374480470365721629, - 0.84072941401626313795e-01, + 0.84072941401626313795e-1, -0.15422937961385788097, 0.12295025867380761364, 0.42644879979142774618, -0.78527473836152417164, - 0.11668226095627134420e+01, + 0.1166822609562713442e+1, -0.86489234989092322881, - 0.31705821310846404870, + 0.3170582131084640487, 0.81269510136147060653, - -0.17143173906123221339e+01, - 0.25045260832644902216e+01, - -0.24121928278151449909e+01, - 0.18576107800708023809e+01, + -0.17143173906123221339e+1, + 0.25045260832644902216e+1, + -0.24121928278151449909e+1, + 0.18576107800708023809e+1, -0.53746439523440814323, -0.67212417520186007458, - 0.18097440941578690765e+01, - -0.20530150300206360114e+01, - 0.17764664250185093763e+01, + 0.18097440941578690765e+1, + -0.20530150300206360114e+1, + 0.17764664250185093763e+1, -0.75109974897818243544, -0.29241675698186841981, 0.91160396001192633975, - -0.14149095414145373972e+01, + -0.14149095414145373972e+1, -0.37187930564195054162, - -0.10190405632625185728e+01, - -0.49635806865377540831e+01, - -0.35721165869016617833e+01, - -0.10987850380783408255e+02, - -0.13179391750616593626e+02, - -0.16417137462880063481e+02, - -0.23370938591156907194e+02, - -0.15716247598072822456e+02, - -0.16963469113937840405e+02, - -0.20576603983676182708e+01, - 0.80896636249690985210e+01, - 0.11715990789409671535e+02, - 0.17576220198944177753e+02, + -0.10190405632625185728e+1, + -0.49635806865377540831e+1, + -0.35721165869016617833e+1, + -0.10987850380783408255e+2, + -0.13179391750616593626e+2, + -0.16417137462880063481e+2, + -0.23370938591156907194e+2, + -0.15716247598072822456e+2, + -0.16963469113937840405e+2, + -0.20576603983676182708e+1, + 0.8089663624969098521e+1, + 0.11715990789409671535e+2, + 0.17576220198944177753e+2, 0.18743397241320430835, - -0.50750131012612076375e+01, - -0.13593608907014223419e+02, - -0.10157304981019116497e+02, - 0.71815279122342676743e+01, - 0.84628999155561679402e+01, - 0.10439575222122678966e+02, - -0.40156969248988154675e+01, - -0.12883603486662549287e+02, - -0.33153420836856786202e+01, - 0.37142290329732587928e+01, - 0.11613678693809086795e+02, - 0.20089176288335504061e+01, - -0.11117268803066480132e+02, - -0.47049167776793430207e+01, - 0.29798729440427398352e+01, - 0.95755684332687600602e+01, - 0.20542470089945576994e+01, - -0.12035491648266738451e+02, - -0.12424998693435445052e+01, - 0.51756584676358503572e+01, - 0.68904753938653184875e+01, - -0.28856576214105573719e+01, - -0.10897588105393255731e+02, - 0.52638425470840672915e+01, - 0.63267573388413813618e+01, + -0.50750131012612076375e+1, + -0.13593608907014223419e+2, + -0.10157304981019116497e+2, + 0.71815279122342676743e+1, + 0.84628999155561679402e+1, + 0.10439575222122678966e+2, + -0.40156969248988154675e+1, + -0.12883603486662549287e+2, + -0.33153420836856786202e+1, + 0.37142290329732587928e+1, + 0.11613678693809086795e+2, + 0.20089176288335504061e+1, + -0.11117268803066480132e+2, + -0.47049167776793430207e+1, + 0.29798729440427398352e+1, + 0.95755684332687600602e+1, + 0.20542470089945576994e+1, + -0.12035491648266738451e+2, + -0.12424998693435445052e+1, + 0.51756584676358503572e+1, + 0.68904753938653184875e+1, + -0.28856576214105573719e+1, + -0.10897588105393255731e+2, + 0.52638425470840672915e+1, + 0.63267573388413813618e+1, 0.28180743622150816741, - -0.79519872004956049238e+01, - -0.14833105674019217979e+01, - 0.82406499341699781525e+01, - 0.20576718086705545474e+01, - -0.85637883391457219062e+01, - -0.13040978892243224596e+01, - 0.79220653607320219436e+01, + -0.79519872004956049238e+1, + -0.14833105674019217979e+1, + 0.82406499341699781525e+1, + 0.20576718086705545474e+1, + -0.85637883391457219062e+1, + -0.13040978892243224596e+1, + 0.79220653607320219436e+1, -0.19407645818037613794, - -0.38842919148379420058e+01, - -0.52085574639809379960e+01, - 0.98602133163959884143e+01, + -0.38842919148379420058e+1, + -0.5208557463980937996e+1, + 0.98602133163959884143e+1, 0.39119822322594277608, - -0.92699276873028750856e+01, - 0.41138904574604229225e+01, - 0.26948182697746885239e+01, - 0.16283679539276278980e+01, - -0.72567920424899288179e+01, - 0.10775592935558311325e+01, - 0.89761623280155706794e+01, - -0.73506971788333927975e+01, - -0.28524997824388198531e+01, - 0.59187736322587927162e+01, + -0.92699276873028750856e+1, + 0.41138904574604229225e+1, + 0.26948182697746885239e+1, + 0.1628367953927627898e+1, + -0.72567920424899288179e+1, + 0.10775592935558311325e+1, + 0.89761623280155706794e+1, + -0.73506971788333927975e+1, + -0.28524997824388198531e+1, + 0.59187736322587927162e+1, 0.57845719911270254698, - -0.36221473893945121958e+01, - -0.22181844407792157270e+01, - 0.62329918317108043979e+01, + -0.36221473893945121958e+1, + -0.2218184440779215727e+1, + 0.62329918317108043979e+1, -0.10489617885969830524, - -0.79223197103803544294e+01, - 0.59306046822230884530e+01, - 0.33146374537927196791e+01, - -0.68892399270171233994e+01, - 0.10880696418807809245e+01, - 0.43158368859717430865e+01, - -0.16945961207650999114e+01, - -0.34546752626537977626e+01, - 0.20349526429073234723e+01, - 0.43970339907414253133e+01, - -0.58518494057624987903e+01, - -0.11692316117069863068e+01, - 0.82458138855269886847e+01, - -0.64088221248488617121e+01, - -0.18790797415107214352e+01, - 0.65357454675228785490e+01, - -0.31862583198136045226e+01, - -0.20986900651670405971e+01, - 0.21418708801014441079e+01, - 0.17354314968883146619e+01, - -0.24375124974229964714e+01, - -0.23277096015563896181e+01, - 0.64942910463140188781e+01, - -0.35757594507761605307e+01, - -0.44603065604069787042e+01, - 0.91150672335481939257e+01, - -0.54235580287003752886e+01, - -0.22629628479693164600e+01, - 0.57026091108423120346e+01, - -0.22244670317784609459e+01, - -0.29204186756227974442e+01, - 0.35009050384639865960e+01, + -0.79223197103803544294e+1, + 0.5930604682223088453e+1, + 0.33146374537927196791e+1, + -0.68892399270171233994e+1, + 0.10880696418807809245e+1, + 0.43158368859717430865e+1, + -0.16945961207650999114e+1, + -0.34546752626537977626e+1, + 0.20349526429073234723e+1, + 0.43970339907414253133e+1, + -0.58518494057624987903e+1, + -0.11692316117069863068e+1, + 0.82458138855269886847e+1, + -0.64088221248488617121e+1, + -0.18790797415107214352e+1, + 0.6535745467522878549e+1, + -0.31862583198136045226e+1, + -0.20986900651670405971e+1, + 0.21418708801014441079e+1, + 0.17354314968883146619e+1, + -0.24375124974229964714e+1, + -0.23277096015563896181e+1, + 0.64942910463140188781e+1, + -0.35757594507761605307e+1, + -0.44603065604069787042e+1, + 0.91150672335481939257e+1, + -0.54235580287003752886e+1, + -0.226296284796931646e+1, + 0.57026091108423120346e+1, + -0.22244670317784609459e+1, + -0.29204186756227974442e+1, + 0.3500905038463986596e+1, 0.53446238561089098873, - -0.38483240947322570058e+01, - 0.27955084667135463583e+01, + -0.38483240947322570058e+1, + 0.27955084667135463583e+1, 0.33411128935564693432, -0.65151085887603377156, - -0.28010356446196742475e+01, - 0.55512307561320941574e+01, - -0.29318151240390588619e+01, - -0.40183017362579311893e+01, - 0.90466284471146263257e+01, - -0.70775003107959060245e+01, + -0.28010356446196742475e+1, + 0.55512307561320941574e+1, + -0.29318151240390588619e+1, + -0.40183017362579311893e+1, + 0.90466284471146263257e+1, + -0.70775003107959060245e+1, -0.34251136882658939076, - 0.65135104033089090692e+01, - -0.62115471546131102443e+01, + 0.65135104033089090692e+1, + -0.62115471546131102443e+1, 0.64199590330733335986, - 0.42654501293515867388e+01, - -0.39434391487216911010e+01, + 0.42654501293515867388e+1, + -0.3943439148721691101e+1, -0.59819903910461713625, - 0.44524523683538328456e+01, - -0.39916252733967079180e+01, + 0.44524523683538328456e+1, + -0.3991625273396707918e+1, 0.16182547535373756342, - 0.31738398062592518833e+01, - -0.34454862765680909220e+01, - 0.16633672838937707539e+01, + 0.31738398062592518833e+1, + -0.3445486276568090922e+1, + 0.16633672838937707539e+1, -0.62390313509538142256, - 0.14883067961322904438e+01, - -0.24954071570361384680e+01, - 0.11853529795993542617e+01, - 0.24981931291869869938e+01, - -0.56131581578999538706e+01, - 0.50068044818878867375e+01, - -0.63474212399760432390, - -0.39533661185526143278e+01, - 0.47320290455004947461e+01, + 0.14883067961322904438e+1, + -0.2495407157036138468e+1, + 0.11853529795993542617e+1, + 0.24981931291869869938e+1, + -0.56131581578999538706e+1, + 0.50068044818878867375e+1, + -0.6347421239976043239, + -0.39533661185526143278e+1, + 0.47320290455004947461e+1, -0.98576980851325746169, - -0.37969006452463305301e+01, - 0.49717111152199127133e+01, + -0.37969006452463305301e+1, + 0.49717111152199127133e+1, -0.97123071542644545673, - -0.50652895690564365694e+01, - 0.78749232258902006620e+01, - -0.46009553223271373312e+01, - -0.26187069537214204829e+01, - 0.83181456539654430316e+01, - -0.81651201085926405909e+01, - 0.24987693138823843242e+01, - 0.40365070233252193788e+01, - -0.63403171547183889700e+01, - 0.29920223446922542543e+01, - 0.27451403827905251909e+01, - -0.57349169573985410153e+01, - 0.32365794348918206502e+01, - 0.28883956841216980038e+01, - -0.77184679071540758244e+01, - 0.72609619515869425754e+01, - -0.16303887362906899217e+01, - -0.50557420958711629666e+01, - 0.79277034495605374076e+01, - -0.51277998356142004965e+01, + -0.50652895690564365694e+1, + 0.7874923225890200662e+1, + -0.46009553223271373312e+1, + -0.26187069537214204829e+1, + 0.83181456539654430316e+1, + -0.81651201085926405909e+1, + 0.24987693138823843242e+1, + 0.40365070233252193788e+1, + -0.634031715471838897e+1, + 0.29920223446922542543e+1, + 0.27451403827905251909e+1, + -0.57349169573985410153e+1, + 0.32365794348918206502e+1, + 0.28883956841216980038e+1, + -0.77184679071540758244e+1, + 0.72609619515869425754e+1, + -0.16303887362906899217e+1, + -0.50557420958711629666e+1, + 0.79277034495605374076e+1, + -0.51277998356142004965e+1, -0.84195016318843929337, - 0.51948834796984186823e+01, - -0.46569057235994613109e+01, - 0.44161278791558116197e+01, - -0.78556459695106786723e-01, - -0.77625999392420013123e+01, - 0.90647802447122707292e+01, + 0.51948834796984186823e+1, + -0.46569057235994613109e+1, + 0.44161278791558116197e+1, + -0.78556459695106786723e-1, + -0.77625999392420013123e+1, + 0.90647802447122707292e+1, -0.73578432684621175586, - -0.90779930769530405854e+01, - 0.13558008270052271271e+02, - -0.71715895879345206154e+01, - -0.37011135597457940349e+01, - 0.11977960090774677937e+02, - -0.10123430248589322389e+02, - 0.23625651792814252872e+01, - 0.50367747808041558599e+01, - -0.38213968087008289842e+01, - -0.29630905404880905074e+01, - 0.94916194573802741274e+01, - -0.70266851246189245828e+01, - -0.19357798616637311717e+01, - 0.11270357329193421592e+02, - -0.11144242604682577991e+02, - 0.31518569383077381652e+01, - 0.64129115868432045033e+01, - -0.67134980307953142642e+01, - -0.13189649417886046834e+01, - 0.10826290087532575157e+02, - -0.96632869932741165542e+01, - -0.17453632907567746546e+01, - 0.15168017038889525239e+02, - -0.15912747709563875631e+02, - 0.28083797807976909056e+01, - 0.14901451887002323815e+02, - -0.19420931125661091698e+02, - 0.68319499537428356462e+01, - 0.13736245631173636284e+02, - -0.21952449534901617767e+02, - 0.10977760981223758208e+02, - 0.10898822083807887751e+02, - -0.21661418278338082644e+02, - 0.12052927667740025441e+02, - 0.10624943312605893198e+02, - -0.23374348278288689329e+02, - 0.15215585106313822550e+02, - 0.75812548375266803902e+01, - -0.22091886886578276261e+02, - 0.17017845558303218212e+02, - 0.19558182940210355749e+01, - -0.13361214991100952787e+02, - 0.82332477888970334590e+01, - 0.62388544165903425665e+01, - -0.10167805675779820973e+02, + -0.90779930769530405854e+1, + 0.13558008270052271271e+2, + -0.71715895879345206154e+1, + -0.37011135597457940349e+1, + 0.11977960090774677937e+2, + -0.10123430248589322389e+2, + 0.23625651792814252872e+1, + 0.50367747808041558599e+1, + -0.38213968087008289842e+1, + -0.29630905404880905074e+1, + 0.94916194573802741274e+1, + -0.70266851246189245828e+1, + -0.19357798616637311717e+1, + 0.11270357329193421592e+2, + -0.11144242604682577991e+2, + 0.31518569383077381652e+1, + 0.64129115868432045033e+1, + -0.67134980307953142642e+1, + -0.13189649417886046834e+1, + 0.10826290087532575157e+2, + -0.96632869932741165542e+1, + -0.17453632907567746546e+1, + 0.15168017038889525239e+2, + -0.15912747709563875631e+2, + 0.28083797807976909056e+1, + 0.14901451887002323815e+2, + -0.19420931125661091698e+2, + 0.68319499537428356462e+1, + 0.13736245631173636284e+2, + -0.21952449534901617767e+2, + 0.10977760981223758208e+2, + 0.10898822083807887751e+2, + -0.21661418278338082644e+2, + 0.12052927667740025441e+2, + 0.10624943312605893198e+2, + -0.23374348278288689329e+2, + 0.1521558510631382255e+2, + 0.75812548375266803902e+1, + -0.22091886886578276261e+2, + 0.17017845558303218212e+2, + 0.19558182940210355749e+1, + -0.13361214991100952787e+2, + 0.8233247788897033459e+1, + 0.62388544165903425665e+1, + -0.10167805675779820973e+2, -0.78898593065213940001, - 0.15270812523915445524e+02, - -0.13815541531353373372e+02, - -0.26717339659839760557e+01, - 0.17606200759153587398e+02, - -0.11734327849160150592e+02, - -0.84299199027349853708e+01, - 0.21334936581947076206e+02, - -0.90664187197325567524e+01, - -0.15590098862279939240e+02, - 0.27116398878817904006e+02, - -0.10570560207293342003e+02, - -0.15316599552924950345e+02, - 0.24177607755126537370e+02, - -0.70334232424236473591e+01, - -0.12593124111157180778e+02, - 0.12883036480427451309e+02, - 0.45289538347822642095e+01, - -0.12312194490882598430e+02, - -0.14130204456692947446e+01, - 0.20933953168579083837e+02, - -0.17190666172021359159e+02, - -0.82220544297118891564e+01, - 0.27053995840155277364e+02, - -0.14469528874403886576e+02, - -0.12590602051795375615e+02, - 0.20619337966238138193e+02, - 0.18006009313308326547e+01, - -0.23273386020067501789e+02, - 0.16183029313990651588e+02, - 0.10508845805010549768e+02, - -0.18903745913104941678e+02, + 0.15270812523915445524e+2, + -0.13815541531353373372e+2, + -0.26717339659839760557e+1, + 0.17606200759153587398e+2, + -0.11734327849160150592e+2, + -0.84299199027349853708e+1, + 0.21334936581947076206e+2, + -0.90664187197325567524e+1, + -0.1559009886227993924e+2, + 0.27116398878817904006e+2, + -0.10570560207293342003e+2, + -0.15316599552924950345e+2, + 0.2417760775512653737e+2, + -0.70334232424236473591e+1, + -0.12593124111157180778e+2, + 0.12883036480427451309e+2, + 0.45289538347822642095e+1, + -0.1231219449088259843e+2, + -0.14130204456692947446e+1, + 0.20933953168579083837e+2, + -0.17190666172021359159e+2, + -0.82220544297118891564e+1, + 0.27053995840155277364e+2, + -0.14469528874403886576e+2, + -0.12590602051795375615e+2, + 0.20619337966238138193e+2, + 0.18006009313308326547e+1, + -0.23273386020067501789e+2, + 0.16183029313990651588e+2, + 0.10508845805010549768e+2, + -0.18903745913104941678e+2, 0.67130692698110583372, - 0.15074852305831765165e+02, + 0.15074852305831765165e+2, 0.53186448489597215605, - -0.26634836519161890322e+02, - 0.24582521548007544965e+02, - 0.96950159280394085926e+01, - -0.31355126642158985817e+02, - 0.14660120089314721881e+02, - 0.13672029552573933486e+02, - -0.99311201063604528372e+01, - -0.14954223430250282334e+02, - 0.17013344254780765397e+02, - 0.13829995397040251603e+02, - -0.29409361167389040048e+02, - 0.34883464548028908503e+01, - 0.26911163721992988229e+02, - -0.13514280526425771711e+02, - -0.19660129978925990457e+02, - 0.18381630096487032944e+02, - 0.15189372755188081499e+02, - -0.20613401011721425249e+02, - -0.11787351029000314284e+02, - 0.24833502041090639523e+02, - 0.95535708032745834117e+01, - -0.31690132072692449583e+02, - 0.16328240066144990017e+01, - 0.29996375407261290036e+02, - -0.71373022316477081617e+01, - -0.23278956716834045437e+02, - 0.20847117328636959321e+01, - 0.30148324011463191852e+02, - -0.39307461606325762027e+01, - -0.35867780133678287768e+02, - 0.14709902041595874778e+02, - 0.26902057714031318625e+02, - -0.71764660969277667135e+01, - -0.25586351989985004707e+02, - -0.55625590033256395728e+01, - 0.42145738474488126712e+02, - -0.32732244026950034765e+01, - -0.33304903857438333148e+02, - -0.37474519163417108203e+01, - 0.23807460313409958275e+02, - 0.27306145779389481731e+02, - -0.32541621091747259698e+02, - -0.27190429518305183620e+02, - 0.20698513096282798784e+02, - 0.30728274721077124099e+02, - 0.47098830808534923875e+01, - -0.41125518294978895995e+02, - -0.18554186539014370538e+02, - 0.31931373126265224727e+02, - 0.32131031291684124085e+02, - -0.12745493667156027051e+01, - -0.43961943755812995960e+02, - -0.24194594844913346776e+02, - 0.25572435260265905299e+02, - 0.43184092277780621316e+02, - 0.17041443431089042804e+02, - -0.33615540208328674510e+02, - -0.46937091235530694178e+02, - -0.15598457668177186264e+02, - 0.34439580618101253151e+02, - 0.51019776268263470342e+02, - 0.33717905337625460049e+02, - -0.18884022048110345793e+02, - -0.53093497475722600143e+02, - -0.55959874628434576493e+02, - -0.33817550338201478155e+02, - 0.20515197037617411979e+02, - 0.50156804424411575383e+02, - 0.80564280335216764684e+02, - 0.82556254527801030463e+02, - 0.67743842402939193903e+02, - 0.59754714493085032245e+02, - 0.32709111590959231819e+02, - 0.25329385515865144640e+02, - 0.14517318893732294782e+02, - 0.28285100304822217154e+01, - 0.87963910922315893259e+01, - -0.26428619490320195418e+01, - 0.17331785049883490224e+01, - 0.32420139600777511113e+01, - -0.62089595667220223163e+01, - 0.75996781183528572257e+01, - -0.60524589645368411794e+01, - 0.21446559650585501622e+01, - 0.29339000943237185659e+01, - -0.74126440890668314765e+01, - 0.96689616631067050179e+01, - -0.88234925882748740378e+01, - 0.50459303677074567318e+01, + -0.26634836519161890322e+2, + 0.24582521548007544965e+2, + 0.96950159280394085926e+1, + -0.31355126642158985817e+2, + 0.14660120089314721881e+2, + 0.13672029552573933486e+2, + -0.99311201063604528372e+1, + -0.14954223430250282334e+2, + 0.17013344254780765397e+2, + 0.13829995397040251603e+2, + -0.29409361167389040048e+2, + 0.34883464548028908503e+1, + 0.26911163721992988229e+2, + -0.13514280526425771711e+2, + -0.19660129978925990457e+2, + 0.18381630096487032944e+2, + 0.15189372755188081499e+2, + -0.20613401011721425249e+2, + -0.11787351029000314284e+2, + 0.24833502041090639523e+2, + 0.95535708032745834117e+1, + -0.31690132072692449583e+2, + 0.16328240066144990017e+1, + 0.29996375407261290036e+2, + -0.71373022316477081617e+1, + -0.23278956716834045437e+2, + 0.20847117328636959321e+1, + 0.30148324011463191852e+2, + -0.39307461606325762027e+1, + -0.35867780133678287768e+2, + 0.14709902041595874778e+2, + 0.26902057714031318625e+2, + -0.71764660969277667135e+1, + -0.25586351989985004707e+2, + -0.55625590033256395728e+1, + 0.42145738474488126712e+2, + -0.32732244026950034765e+1, + -0.33304903857438333148e+2, + -0.37474519163417108203e+1, + 0.23807460313409958275e+2, + 0.27306145779389481731e+2, + -0.32541621091747259698e+2, + -0.2719042951830518362e+2, + 0.20698513096282798784e+2, + 0.30728274721077124099e+2, + 0.47098830808534923875e+1, + -0.41125518294978895995e+2, + -0.18554186539014370538e+2, + 0.31931373126265224727e+2, + 0.32131031291684124085e+2, + -0.12745493667156027051e+1, + -0.4396194375581299596e+2, + -0.24194594844913346776e+2, + 0.25572435260265905299e+2, + 0.43184092277780621316e+2, + 0.17041443431089042804e+2, + -0.3361554020832867451e+2, + -0.46937091235530694178e+2, + -0.15598457668177186264e+2, + 0.34439580618101253151e+2, + 0.51019776268263470342e+2, + 0.33717905337625460049e+2, + -0.18884022048110345793e+2, + -0.53093497475722600143e+2, + -0.55959874628434576493e+2, + -0.33817550338201478155e+2, + 0.20515197037617411979e+2, + 0.50156804424411575383e+2, + 0.80564280335216764684e+2, + 0.82556254527801030463e+2, + 0.67743842402939193903e+2, + 0.59754714493085032245e+2, + 0.32709111590959231819e+2, + 0.2532938551586514464e+2, + 0.14517318893732294782e+2, + 0.28285100304822217154e+1, + 0.87963910922315893259e+1, + -0.26428619490320195418e+1, + 0.17331785049883490224e+1, + 0.32420139600777511113e+1, + -0.62089595667220223163e+1, + 0.75996781183528572257e+1, + -0.60524589645368411794e+1, + 0.21446559650585501622e+1, + 0.29339000943237185659e+1, + -0.74126440890668314765e+1, + 0.96689616631067050179e+1, + -0.88234925882748740378e+1, + 0.50459303677074567318e+1, 0.44593622092451085104, - -0.58414237901247458851e+01, - 0.93299464893463017745e+01, - -0.97720186134968400893e+01, - 0.70598975913471928578e+01, - -0.21824522972085418360e+01, - -0.31639136398063403277e+01, - 0.71462673857095095897e+01, - -0.84686391830010183668e+01, - 0.67893140048400031361e+01, - -0.28496992605792574871e+01, - -0.18349308573518761101e+01, - 0.55068613800554411242e+01, - -0.68240568753102586186e+01, - 0.53199399066093358002e+01, - -0.15869382828730760338e+01, - -0.29582553316465132198e+01, - 0.65698401936839605497e+01, - -0.78189827441864245827e+01, - 0.61004640534808816099e+01, - -0.18759312996876733592e+01, - -0.34823867097128533565e+01, - 0.81501040231936627833e+01, - -0.10489865072823777226e+02, - 0.96166558238825725624e+01, - -0.57185180357767260162e+01, + -0.58414237901247458851e+1, + 0.93299464893463017745e+1, + -0.97720186134968400893e+1, + 0.70598975913471928578e+1, + -0.2182452297208541836e+1, + -0.31639136398063403277e+1, + 0.71462673857095095897e+1, + -0.84686391830010183668e+1, + 0.67893140048400031361e+1, + -0.28496992605792574871e+1, + -0.18349308573518761101e+1, + 0.55068613800554411242e+1, + -0.68240568753102586186e+1, + 0.53199399066093358002e+1, + -0.15869382828730760338e+1, + -0.29582553316465132198e+1, + 0.65698401936839605497e+1, + -0.78189827441864245827e+1, + 0.61004640534808816099e+1, + -0.18759312996876733592e+1, + -0.34823867097128533565e+1, + 0.81501040231936627833e+1, + -0.10489865072823777226e+2, + 0.96166558238825725624e+1, + -0.57185180357767260162e+1, 0.21713345971470290885, - 0.47695593588163367471e+01, - -0.10155289427717107742e+02, - 0.10982729751367898530e+02, - -0.98229073197832086350e+01, - 0.41125174900072973827e+01, - 0.13367653299792647825e+01, - -0.75852573875033506567e+01, - 0.96231364246240698179e+01, - -0.97184482768483153592e+01, - 0.50660948528530012069e+01, + 0.47695593588163367471e+1, + -0.10155289427717107742e+2, + 0.1098272975136789853e+2, + -0.9822907319783208635e+1, + 0.41125174900072973827e+1, + 0.13367653299792647825e+1, + -0.75852573875033506567e+1, + 0.96231364246240698179e+1, + -0.97184482768483153592e+1, + 0.50660948528530012069e+1, -0.33940629165216257279, - -0.55472191953989931079e+01, - 0.75430186410228881044e+01, - -0.78556783444749624934e+01, - 0.36501463029093552670e+01, + -0.55472191953989931079e+1, + 0.75430186410228881044e+1, + -0.78556783444749624934e+1, + 0.3650146302909355267e+1, 0.39991263777134861135, - -0.53705008542154315521e+01, - 0.62500068584377004299e+01, - -0.53684841132909237871e+01, + -0.53705008542154315521e+1, + 0.62500068584377004299e+1, + -0.53684841132909237871e+1, 0.11193930263113703594, - 0.45756528168785113309e+01, - -0.95246190781890138766e+01, - 0.96041958185098668110e+01, - -0.72108600745706805668e+01, - -0.11682215625805989628e-02, - 0.66881878160689609558e+01, - -0.13256980451011466826e+02, - 0.14266826774097678410e+02, - -0.12003117102213128220e+02, - 0.42383780110322186729e+01, - 0.34124704958300791091e+01, - -0.11022867552071025088e+02, - 0.12970625077072014619e+02, - -0.11347993605757908497e+02, - 0.44560641570085088858e+01, - 0.30033706996724971461e+01, - -0.80142725827654466286e+01, - 0.12168198424716756278e+02, - -0.11944107107690422609e+01, - 0.97846633980218307158e+01, - 0.29630278475108816849e+02, - 0.23212622535123692558e+02, - 0.71998375882945410353e+02, - 0.80876865138513366560e+02, - 0.10961177970844838114e+03, - 0.14496015450263325874e+03, - 0.10420085540522184431e+03, - 0.10676197092117438103e+03, - 0.12761961067847796159e+02, - -0.49318380101420132178e+02, - -0.78858685656274786879e+02, - -0.10815599364344733146e+03, - -0.49838137850268742213e+01, - 0.34885779187199545959e+02, - 0.86389354460872425534e+02, - 0.63849936824012424097e+02, - -0.43513521661869255297e+02, - -0.57183988068994572984e+02, - -0.64012803133200989691e+02, - 0.23736517537621015350e+02, - 0.83244895039341258780e+02, - 0.21570520451819863439e+02, - -0.24967190132723967366e+02, - -0.72760932740204140146e+02, - -0.14357358129334413022e+02, - 0.72283737490521090763e+02, - 0.29389869516678057693e+02, - -0.18605272515595032701e+02, - -0.61800026599985415032e+02, - -0.12308357839808671486e+02, - 0.75727353536554304014e+02, - 0.95821255096887618663e+01, - -0.34715076021778941140e+02, - -0.43118264504437220808e+02, - 0.18676990546550207739e+02, - 0.67899217629355504755e+02, - -0.30092964257071496803e+02, - -0.45567735407672373071e+02, - 0.40720383491475944382e+01, - 0.45157083353100212264e+02, - 0.14048732624847621864e+02, - -0.55242469228442480755e+02, - -0.13258954023938358091e+02, - 0.57525929425469975342e+02, - 0.34524990074150823105e+01, - -0.44515339898021956344e+02, - -0.51433661526586904600e+01, - 0.30340808304401843287e+02, - 0.29608514935373950294e+02, - -0.61601799368107243993e+02, - -0.18063866870356151129e+01, - 0.56865991843478226997e+02, - -0.22856403628862569377e+02, - -0.20886286485391000411e+02, - -0.73847469559829104213e+01, - 0.44509720725113545825e+02, - -0.62457201626418257234e+01, - -0.56984385750982774255e+02, - 0.45866758198211627473e+02, - 0.19626018467753301167e+02, - -0.38982445196470557391e+02, - -0.31723591410097857768e+01, - 0.23274861582111029179e+02, - 0.13647652236283386529e+02, - -0.39232146005817561729e+02, + 0.45756528168785113309e+1, + -0.95246190781890138766e+1, + 0.9604195818509866811e+1, + -0.72108600745706805668e+1, + -0.11682215625805989628e-2, + 0.66881878160689609558e+1, + -0.13256980451011466826e+2, + 0.1426682677409767841e+2, + -0.1200311710221312822e+2, + 0.42383780110322186729e+1, + 0.34124704958300791091e+1, + -0.11022867552071025088e+2, + 0.12970625077072014619e+2, + -0.11347993605757908497e+2, + 0.44560641570085088858e+1, + 0.30033706996724971461e+1, + -0.80142725827654466286e+1, + 0.12168198424716756278e+2, + -0.11944107107690422609e+1, + 0.97846633980218307158e+1, + 0.29630278475108816849e+2, + 0.23212622535123692558e+2, + 0.71998375882945410353e+2, + 0.8087686513851336656e+2, + 0.10961177970844838114e+3, + 0.14496015450263325874e+3, + 0.10420085540522184431e+3, + 0.10676197092117438103e+3, + 0.12761961067847796159e+2, + -0.49318380101420132178e+2, + -0.78858685656274786879e+2, + -0.10815599364344733146e+3, + -0.49838137850268742213e+1, + 0.34885779187199545959e+2, + 0.86389354460872425534e+2, + 0.63849936824012424097e+2, + -0.43513521661869255297e+2, + -0.57183988068994572984e+2, + -0.64012803133200989691e+2, + 0.2373651753762101535e+2, + 0.8324489503934125878e+2, + 0.21570520451819863439e+2, + -0.24967190132723967366e+2, + -0.72760932740204140146e+2, + -0.14357358129334413022e+2, + 0.72283737490521090763e+2, + 0.29389869516678057693e+2, + -0.18605272515595032701e+2, + -0.61800026599985415032e+2, + -0.12308357839808671486e+2, + 0.75727353536554304014e+2, + 0.95821255096887618663e+1, + -0.3471507602177894114e+2, + -0.43118264504437220808e+2, + 0.18676990546550207739e+2, + 0.67899217629355504755e+2, + -0.30092964257071496803e+2, + -0.45567735407672373071e+2, + 0.40720383491475944382e+1, + 0.45157083353100212264e+2, + 0.14048732624847621864e+2, + -0.55242469228442480755e+2, + -0.13258954023938358091e+2, + 0.57525929425469975342e+2, + 0.34524990074150823105e+1, + -0.44515339898021956344e+2, + -0.514336615265869046e+1, + 0.30340808304401843287e+2, + 0.29608514935373950294e+2, + -0.61601799368107243993e+2, + -0.18063866870356151129e+1, + 0.56865991843478226997e+2, + -0.22856403628862569377e+2, + -0.20886286485391000411e+2, + -0.73847469559829104213e+1, + 0.44509720725113545825e+2, + -0.62457201626418257234e+1, + -0.56984385750982774255e+2, + 0.45866758198211627473e+2, + 0.19626018467753301167e+2, + -0.38982445196470557391e+2, + -0.31723591410097857768e+1, + 0.23274861582111029179e+2, + 0.13647652236283386529e+2, + -0.39232146005817561729e+2, 0.28042895464419087537, - 0.50506687629711642273e+02, - -0.37041848626838721259e+02, - -0.22771291758912280301e+02, - 0.45998696586199194769e+02, - -0.88101100712065871789e+01, - -0.26285132837883310231e+02, - 0.10363018939996743839e+02, - 0.21562278984373058677e+02, - -0.11508004036134183323e+02, - -0.30367815803067809810e+02, - 0.39978111617552286816e+02, - 0.50951185790363258121e+01, - -0.50907240557070480236e+02, - 0.39890677762450437172e+02, - 0.12373316800091538781e+02, - -0.41551650505991212015e+02, - 0.19750095269150332200e+02, - 0.14140659678231472185e+02, - -0.14269627539001044525e+02, - -0.10774957037714695929e+02, - 0.15395231629833924458e+02, - 0.15214617307941292523e+02, - -0.42319071708119267328e+02, - 0.24363793687099949636e+02, - 0.26183783706696630134e+02, - -0.55159904197043310603e+02, - 0.31026197845922204976e+02, - 0.18141101627764228965e+02, - -0.39478175254482671619e+02, - 0.15886304283802999748e+02, - 0.18866557328981979680e+02, - -0.24636183558207264355e+02, + 0.50506687629711642273e+2, + -0.37041848626838721259e+2, + -0.22771291758912280301e+2, + 0.45998696586199194769e+2, + -0.88101100712065871789e+1, + -0.26285132837883310231e+2, + 0.10363018939996743839e+2, + 0.21562278984373058677e+2, + -0.11508004036134183323e+2, + -0.3036781580306780981e+2, + 0.39978111617552286816e+2, + 0.50951185790363258121e+1, + -0.50907240557070480236e+2, + 0.39890677762450437172e+2, + 0.12373316800091538781e+2, + -0.41551650505991212015e+2, + 0.197500952691503322e+2, + 0.14140659678231472185e+2, + -0.14269627539001044525e+2, + -0.10774957037714695929e+2, + 0.15395231629833924458e+2, + 0.15214617307941292523e+2, + -0.42319071708119267328e+2, + 0.24363793687099949636e+2, + 0.26183783706696630134e+2, + -0.55159904197043310603e+2, + 0.31026197845922204976e+2, + 0.18141101627764228965e+2, + -0.39478175254482671619e+2, + 0.15886304283802999748e+2, + 0.1886655732898197968e+2, + -0.24636183558207264355e+2, 0.73420112486420674447, - 0.19022585159859922044e+02, - -0.11595837085881827377e+02, - -0.82216446172045607454e+01, - 0.91527213721942448643e+01, - 0.14730737481550638890e+02, - -0.34488951801398428643e+02, - 0.19846575262727469635e+02, - 0.22923920876297696481e+02, - -0.54111608653296507043e+02, - 0.41370747765495480053e+02, - 0.54235199049621449774e+01, - -0.43601219364010447066e+02, - 0.40048092446385709309e+02, - -0.28691903375341811788e+01, - -0.29635994652343441658e+02, - 0.27972611231305680946e+02, - 0.14909894260287255285e+01, - -0.27284359819856295104e+02, - 0.25952204594949719763e+02, - -0.32170316001787266913e+01, - -0.16579894140444743300e+02, - 0.17317877540495459243e+02, - -0.56897479050654453658e+01, + 0.19022585159859922044e+2, + -0.11595837085881827377e+2, + -0.82216446172045607454e+1, + 0.91527213721942448643e+1, + 0.1473073748155063889e+2, + -0.34488951801398428643e+2, + 0.19846575262727469635e+2, + 0.22923920876297696481e+2, + -0.54111608653296507043e+2, + 0.41370747765495480053e+2, + 0.54235199049621449774e+1, + -0.43601219364010447066e+2, + 0.40048092446385709309e+2, + -0.28691903375341811788e+1, + -0.29635994652343441658e+2, + 0.27972611231305680946e+2, + 0.14909894260287255285e+1, + -0.27284359819856295104e+2, + 0.25952204594949719763e+2, + -0.32170316001787266913e+1, + -0.165798941404447433e+2, + 0.17317877540495459243e+2, + -0.56897479050654453658e+1, -0.35080816291743560642, - -0.65265605736202978449e+01, - 0.14789624290829300080e+02, - -0.83522508269963449123e+01, - -0.13522448445513880699e+02, - 0.32316468803847463676e+02, - -0.28056236367010193078e+02, + -0.65265605736202978449e+1, + 0.1478962429082930008e+2, + -0.83522508269963449123e+1, + -0.13522448445513880699e+2, + 0.32316468803847463676e+2, + -0.28056236367010193078e+2, 0.49410901492387010459, - 0.27769111903046852063e+02, - -0.31233530964925215301e+02, - 0.56557241404593661116e+01, - 0.26282098251976268699e+02, - -0.34570860473566511928e+02, - 0.90051020826213026282e+01, - 0.30335481654779911764e+02, - -0.49630835921549099510e+02, - 0.30325999047508020112e+02, - 0.14233508296589006292e+02, - -0.49412785332465332999e+02, - 0.47759673559482614280e+02, - -0.11603022000182031448e+02, - -0.29333503431110894866e+02, - 0.42555769615728294752e+02, - -0.19248617848938518904e+02, - -0.19362060672589450405e+02, - 0.40056914874932850523e+02, - -0.25017895292447171585e+02, - -0.14003262607151372166e+02, - 0.45517365860253882204e+02, - -0.43833450555975893792e+02, - 0.94230139487829465139e+01, - 0.31688684710576549008e+02, - -0.48667019125867653884e+02, - 0.29889600454517154304e+02, - 0.84773599270423343199e+01, - -0.35791544189189991698e+02, - 0.31234667229915949349e+02, - -0.18454043334687376898e+02, - -0.12235398353318320375e+02, - 0.48105249693231428409e+02, - -0.45729301104027392455e+02, - -0.25236373856784033443e+01, - 0.50807141360910080152e+02, - -0.65782629436065619188e+02, - 0.26529162409663562983e+02, - 0.28642117139536164672e+02, - -0.62305587138804717995e+02, - 0.41504362463900754676e+02, - 0.56969248611254288406e+01, - -0.42862471530089926830e+02, - 0.29680901274542044632e+02, - 0.13733995635975981386e+02, - -0.52249176630996309711e+02, - 0.40009779487327747916e+02, - 0.87921466885399421898e+01, - -0.58709823310890811854e+02, - 0.57126043667091003897e+02, - -0.11294573578274746950e+02, - -0.43907818592405376990e+02, - 0.49848370263347639764e+02, - -0.74810449987435587715e+01, - -0.48429948653275125992e+02, - 0.53356102511762102836e+02, - -0.32493115354948742812e+01, - -0.64534053576725113999e+02, - 0.76151833814665579325e+02, - -0.19915519598722582373e+02, - -0.64680523482868679253e+02, - 0.92407444887099586595e+02, - -0.40292633319237893375e+02, - -0.53637692261001994609e+02, - 0.94981814993346219467e+02, - -0.49676498814096582635e+02, - -0.47454891779871225310e+02, - 0.95748166102303244429e+02, - -0.52726768861052356385e+02, - -0.49159952601918945447e+02, - 0.10462411185700696592e+03, - -0.65399101348663336353e+02, - -0.37844200614746164035e+02, - 0.98514590014603157897e+02, - -0.67920438632537695867e+02, - -0.22742062757951270413e+02, - 0.70315788404038329418e+02, - -0.35723101402834778639e+02, - -0.41209623820613884959e+02, - 0.61294060197941988122e+02, - -0.38907708157003741967e+01, - -0.72935472355817594803e+02, - 0.71018150734608624930e+02, - 0.80665539302604827299e+01, - -0.84146894820657180958e+02, - 0.61221474559980897823e+02, - 0.33413765285983181741e+02, - -0.98328245790830152373e+02, - 0.46069564593431181265e+02, - 0.65825090105075744873e+02, - -0.11894805949764541708e+03, - 0.43164513671083646784e+02, - 0.73334047243817920503e+02, - -0.10831082857502421746e+03, - 0.22935446655746577704e+02, - 0.67872078497227064986e+02, - -0.60991928003665236702e+02, - -0.31594096411460302676e+02, - 0.74065545834823652172e+02, - -0.69325575760937496739e+01, - -0.93708423636910225696e+02, - 0.84878686330428379847e+02, - 0.29862574755134886573e+02, - -0.11765015450055769008e+03, - 0.59177074648879788299e+02, - 0.66570995854353000709e+02, - -0.10191798062017275583e+03, - -0.61135063010794992167e+01, - 0.10718782390449865716e+03, - -0.71194491924187431664e+02, - -0.56093068994317810905e+02, - 0.91301234235741247858e+02, - 0.44201852595005126645e+01, - -0.88133674513057954414e+02, - 0.17370305605243242297e+02, - 0.11017626829911496600e+03, - -0.10876176706763867230e+03, - -0.44235920784462649635e+02, - 0.13796660350867244915e+03, - -0.52772600796407296286e+02, - -0.81647293222825993553e+02, - 0.56814664418298733040e+02, - 0.71303332685182624573e+02, - -0.87891654594422945479e+02, - -0.57861200877067929582e+02, - 0.13474640024265073635e+03, - -0.14835209913765323719e+02, - -0.12708330097157707428e+03, - 0.61383055939844105353e+02, - 0.96218312464822389529e+02, - -0.86883675390821977658e+02, - -0.76760699134706513291e+02, - 0.10271572882365046553e+03, - 0.55763162383654737653e+02, - -0.12288581258868893542e+03, - -0.38536080635039091646e+02, - 0.14407202404893584458e+03, - -0.27262817222818340746e+01, - -0.14370799260367098782e+03, - 0.28575132078664761792e+02, - 0.12020700250969177603e+03, - -0.17241118139101050843e+02, - -0.14227513879109864092e+03, - 0.22486255157930273185e+02, - 0.16420706419147157362e+03, - -0.62424991720656237248e+02, - -0.13289548434324115078e+03, - 0.30678458989334068008e+02, - 0.13412739565739946102e+03, - 0.11055797424799356676e+02, - -0.18761783568387755849e+03, - 0.71830620299498715298e+01, - 0.15917304332842121539e+03, - 0.27565393277752416878e+02, - -0.12926719617027586651e+03, - -0.11590217295488848492e+03, - 0.14571147528471854571e+03, - 0.13360966394916297872e+03, - -0.95407487613090367518e+02, - -0.15553647656335581928e+03, - -0.14670853828519359041e+02, - 0.19319360600391411253e+03, - 0.87801531610196605016e+02, - -0.14721484505468606585e+03, - -0.16261318373973463736e+03, - 0.13722847499726947618e+02, - 0.20656598959020581674e+03, - 0.11656241435654551708e+03, - -0.11990400738458410501e+03, - -0.21173744077597714863e+03, - -0.77393453013620643333e+02, - 0.15779472408400147287e+03, - 0.22827467535887953431e+03, - 0.71478462291050817612e+02, - -0.16059566731978259213e+03, - -0.25102049004089252549e+03, - -0.15542546666799822219e+03, - 0.85914983525262414332e+02, - 0.25579147341206720512e+03, - 0.27261337429699545964e+03, - 0.15378980475146406093e+03, - -0.87527591111943294777e+02, - -0.25099139718774992502e+03, - -0.38020565844011133549e+03, - -0.39730468910257866355e+03, - -0.32937871925454555821e+03, - -0.27953073274917960589e+03, - -0.16416832186207267341e+03, - -0.11755343123673935679e+03, - -0.69038023359882302543e+02, - -0.18331316611230125346e+02, - -0.35868565524012659296e+02, - 0.81536953459053798099e+01, - -0.85541401482436896231e+01, - -0.94220397761517027391e+01, - 0.19031900285673788886e+02, - -0.24495054572785875280e+02, - 0.20227485238568874593e+02, - -0.83741916856887979037e+01, - -0.74739018082750767746e+01, - 0.21665655859529817207e+02, - -0.29033169962070509484e+02, - 0.26739924458141128838e+02, - -0.15264750227137092509e+02, - -0.15799041437909067120e+01, - 0.18109479013644442347e+02, - -0.28632793545594541484e+02, - 0.29601636454789844066e+02, - -0.20735003872577607353e+02, - 0.52329243414399053691e+01, - 0.11488780158059423542e+02, - -0.23610473859138455310e+02, - 0.27071696208146040163e+02, - -0.20882400964772614316e+02, - 0.75337589400702738018e+01, - 0.80189417874248984930e+01, - -0.20060596269778560696e+02, - 0.24245112825539976598e+02, - -0.19064847136375764336e+02, - 0.64497056079263463957e+01, - 0.89957654190327822619e+01, - -0.21577766161576406034e+02, - 0.26600889290349787331e+02, - -0.21998700211895865664e+02, - 0.91343466369183268228e+01, - 0.76896936846919867747e+01, - -0.22682623093694814997e+02, - 0.30607874321440345255e+02, - -0.28588282254936487448e+02, - 0.17139933336841789213e+02, - -0.67174559376031328650, - -0.14456178539727629229e+02, - 0.29791526955056621517e+02, - -0.31815052703278702495e+02, - 0.27251448699353520766e+02, - -0.10035741994557220380e+02, - -0.64201501696217961879e+01, - 0.23974773063902382830e+02, - -0.29067870271252608916e+02, - 0.27591333858939975698e+02, - -0.12821482658835774870e+02, - -0.21719359588947342310e+01, - 0.19217798288841198229e+02, - -0.24493757112422592570e+02, - 0.23552883716162785532e+02, - -0.94568144639935098894e+01, - -0.47608970811725539463e+01, - 0.20794145242640254878e+02, - -0.24675341703931319870e+02, - 0.21931025353556428570e+02, - -0.58462517725091611709e+01, - -0.10113601656996962674e+02, - 0.27106793551629248640e+02, - -0.30760648937237711209e+02, - 0.26487287696775201340e+02, - -0.78635615132774550062e+01, - -0.11040924151425819844e+02, - 0.30638538084770942760e+02, - -0.35958365015673088294e+02, - 0.32144670290910369204e+02, - -0.12944746936390956193e+02, - -0.71086018442550447105e+01, - 0.27820539250700587530e+02, - -0.33960325169957293667e+02, - 0.30293304946657027443e+02, - -0.11964698400791599298e+02, - -0.88534310015227113411e+01, - 0.24024486438764032670e+02, - -0.36821089720284113866e+02, - 0.98082311008834590638e+01, - -0.31531010053514243907e+02, - -0.71862207823025144648e+02, - -0.60574646571393088834e+02, - -0.18826350850384889668e+03, - -0.20120363075419558641e+03, - -0.29088088093444270044e+03, - -0.36341980511390602260e+03, - -0.27546315337300239889e+03, - -0.27047087726844932831e+03, - -0.32565881093829133874e+02, - 0.12252080706532110810e+03, - 0.20995900660248349823e+03, - 0.26991063015304172268e+03, - 0.20115906523961129437e+02, - -0.94478916805561524939e+02, - -0.22071216913087613420e+03, - -0.16230812194761870160e+03, - 0.10760825953608100747e+03, - 0.15238769846968230581e+03, - 0.15969502676122021967e+03, - -0.57676817334423112982e+02, - -0.21528851675352220241e+03, - -0.56214659701520361068e+02, - 0.66287855858077733728e+02, - 0.18463593464324213755e+03, - 0.38928670260596163644e+02, - -0.18689949084914755417e+03, - -0.75495796192942464131e+02, - 0.48264755245420694507e+02, - 0.15876480383044409450e+03, - 0.30837840555214768301e+02, - -0.19253892862041712419e+03, - -0.28033152682065644257e+02, - 0.93182268122753598050e+02, - 0.10759112991563939943e+03, - -0.46585133993240035011e+02, - -0.17318473266531628951e+03, - 0.72738451376721727115e+02, - 0.12469840302529888731e+03, - -0.19702302619340414935e+02, - -0.10686174718666465822e+03, - -0.43487597741511443417e+02, - 0.14590760834258119871e+03, - 0.34752292757193572470e+02, - -0.15314140349839939859e+03, - 0.41599218048991949692e-01, - 0.10352530281507485199e+03, - 0.24152348998846619565e+02, - -0.86888187913018043673e+02, - -0.70834983574782967253e+02, - 0.15742878954008392611e+03, - 0.15072000552872248935e+01, - -0.13997044146911858320e+03, - 0.50991190298352982779e+02, - 0.61305661066828491812e+02, - 0.13093731388600447829e+02, - -0.11118018706327301004e+03, - 0.15658304212273080225e+02, - 0.14454924382033567554e+03, - -0.11452476546101263466e+03, - -0.54122183332373310805e+02, - 0.10308876099456813336e+03, - 0.68255489199731993466e+01, - -0.60180567120445132900e+02, - -0.33428256850768441666e+02, - 0.98624979166090128047e+02, - 0.12849852449271639276e+01, - -0.13086012765667302915e+03, - 0.94811175664943505126e+02, - 0.60429298438804480043e+02, - -0.12114511109140741496e+03, - 0.25808053914861165623e+02, - 0.64965819010935504707e+02, - -0.25198442016815032929e+02, - -0.55348765513926174719e+02, - 0.28011242894433024730e+02, - 0.80754863097370673586e+02, - -0.10587318515629702631e+03, - -0.10322841630071916796e+02, - 0.12900964839685332208e+03, - -0.10182459872963771375e+03, - -0.31495148216800696872e+02, - 0.10587850567028996807e+03, - -0.49753560404460131394e+02, - -0.36843924561709563648e+02, - 0.36240399185281020777e+02, - 0.29171365501142659582e+02, - -0.41716586692268307957e+02, - -0.36976966435032018410e+02, - 0.10750490836397064243e+03, - -0.62930559058103511916e+02, - -0.64939020339832538298e+02, - 0.13731298407364832315e+03, - -0.73595538223378184739e+02, - -0.53510565919446754890e+02, - 0.10779586347829763326e+03, - -0.45225640281512440311e+02, - -0.47087299388306760761e+02, - 0.65433499476906561654e+02, - -0.73520577006343028614e+01, - -0.40855146092674168301e+02, - 0.20522802224453005948e+02, - 0.30040861694735887966e+02, - -0.30417453950616611280e+02, - -0.34248476439165806084e+02, - 0.88938575313623360330e+02, - -0.55017792116880627873e+02, - -0.52099683374193304530e+02, - 0.13088350966427915978e+03, - -0.98401980445335908598e+02, - -0.20016550125453381526e+02, - 0.11509135174231671783e+03, - -0.10231682039414654639e+03, - 0.33267705574046217976e+01, - 0.82699340002384332138e+02, - -0.79388895581200372931e+02, - 0.29394830250283878748e+01, - 0.65590043271781595990e+02, - -0.65397259464707005350e+02, - 0.10528507763047828760e+02, - 0.37199923654713330734e+02, - -0.36988258948276893534e+02, - 0.65073044607545762474e+01, - 0.79661808486191567624e+01, - 0.12217833894602023292e+02, - -0.36879364219307717576e+02, - 0.23971309045972283513e+02, - 0.29156039145496794873e+02, - -0.75501044838255310765e+02, - 0.64108725927143879630e+02, - 0.55958138015212641747e+01, - -0.75737473938327255496e+02, - 0.81286463682195133629e+02, - -0.12012617329613721751e+02, - -0.73030944591701455693e+02, - 0.96096686355649481470e+02, - -0.30580944410753438945e+02, - -0.71911514865161663579e+02, - 0.12414733867653660582e+03, - -0.77868680841465561571e+02, - -0.33282257638471293149e+02, - 0.12094685123124500592e+03, - -0.11509024240350427704e+03, - 0.22032166319391766507e+02, - 0.81783117750575584637e+02, - -0.11307864743016087061e+03, - 0.49726386785005999513e+02, - 0.53026995325814198168e+02, - -0.10907790842703090561e+03, - 0.72066379518774638768e+02, - 0.28104588390063710790e+02, - -0.11047311633731082736e+03, - 0.10869892395560887621e+03, - -0.23470609017129639540e+02, - -0.78940255490385396797e+02, - 0.11990391405809951664e+03, - -0.70060893657185133065e+02, - -0.28719554949059379112e+02, - 0.97637089109945748078e+02, - -0.83440581609258344997e+02, - 0.36443948594001739139e+02, - 0.45969761784125132920e+02, - -0.12097422066506983640e+03, - 0.10199138126074018373e+03, - 0.15071123074766029859e+02, - -0.12033221316790132960e+03, - 0.14123688356219449247e+03, - -0.42420490130687660724e+02, - -0.80955556095952573514e+02, - 0.14296213060247083604e+03, - -0.78481391589124314123e+02, - -0.39012812076710496001e+02, - 0.12072876776283902700e+03, - -0.79235189858296763532e+02, - -0.32708146768695570472e+02, - 0.12739163302991022420e+03, - -0.99706282180919544089e+02, - -0.16103273427709392962e+02, - 0.13364492345551175845e+03, - -0.13062703110337773182e+03, - 0.21669732622842975189e+02, - 0.11083145496730125501e+03, - -0.13012455703020597753e+03, - 0.32461431882737251442e+02, - 0.10445517636777030646e+03, - -0.13167510380884721144e+03, - 0.30298107481221816073e+02, - 0.12308977887561701436e+03, - -0.16419942471084769409e+03, - 0.57290759047101126100e+02, - 0.12168218078233262247e+03, - -0.19056881920905243533e+03, - 0.93111211051230100111e+02, - 0.99226410957778981015e+02, - -0.18974681706262705916e+03, - 0.10361650933405114472e+03, - 0.92808124971967302486e+02, - -0.19210510284484965382e+03, - 0.10642761471748372060e+03, - 0.99312276680964259867e+02, - -0.20824142244999694640e+03, - 0.12450654798651630983e+03, - 0.85359470225725431192e+02, - -0.19900530741122051381e+03, - 0.12181865259106187693e+03, - 0.72519832825597404735e+02, - -0.16262517519503552421e+03, - 0.71534501800764587642e+02, - 0.10629193901153982438e+03, - -0.15178851219335402334e+03, - 0.20984308658584989615e+02, - 0.15580317152397284985e+03, - -0.16015135515942156985e+03, - -0.92183674953411944841e+01, - 0.17957713094537925258e+03, - -0.13909610575211692662e+03, - -0.60397631167842753541e+02, - 0.20490636314595840872e+03, - -0.10436225602900492504e+03, - -0.12457611123182262247e+03, - 0.23523853254266617796e+03, - -0.79990144594187540861e+02, - -0.15520585357533079218e+03, - 0.21602432863073985914e+03, - -0.26740845522317112426e+02, - -0.16271767575815513851e+03, - 0.13401295689226441255e+03, - 0.80213796920987064709e+02, - -0.18095599805775586333e+03, - 0.36451340143702523733e+02, - 0.18927354308942352645e+03, - -0.18405104667707797717e+03, - -0.51228492990699002974e+02, - 0.23632377539202457228e+03, - -0.11518385457817457507e+03, - -0.14702683869338156342e+03, - 0.21789822535845468110e+03, - 0.13064801540738486096e+02, - -0.22447841141399499065e+03, - 0.14198732413699522681e+03, - 0.13135557038602141233e+03, - -0.19981646050943544424e+03, - -0.18099785295778186622e+02, - 0.21079583948367826451e+03, - -0.66306636202142485104e+02, - -0.21018836924606463867e+03, - 0.22044892661843968540e+03, - 0.89122606995646179939e+02, - -0.27398681569080014242e+03, - 0.84191323194499332772e+02, - 0.20006053226181174409e+03, - -0.13441301284181713527e+03, - -0.15511542551294229497e+03, - 0.20182430587416328649e+03, - 0.10727903450565524679e+03, - -0.27655072688191432917e+03, - 0.28281586440335903632e+02, - 0.26817649342411942825e+03, - -0.12447487128953376612e+03, - -0.21058061904626782734e+03, - 0.18486150537497942992e+03, - 0.17067851931416720390e+03, - -0.22695659584223014349e+03, - -0.11682163289888424629e+03, - 0.26758434598490299550e+03, - 0.72644037749944828875e+02, - -0.29774824535634729727e+03, + 0.27769111903046852063e+2, + -0.31233530964925215301e+2, + 0.56557241404593661116e+1, + 0.26282098251976268699e+2, + -0.34570860473566511928e+2, + 0.90051020826213026282e+1, + 0.30335481654779911764e+2, + -0.4963083592154909951e+2, + 0.30325999047508020112e+2, + 0.14233508296589006292e+2, + -0.49412785332465332999e+2, + 0.4775967355948261428e+2, + -0.11603022000182031448e+2, + -0.29333503431110894866e+2, + 0.42555769615728294752e+2, + -0.19248617848938518904e+2, + -0.19362060672589450405e+2, + 0.40056914874932850523e+2, + -0.25017895292447171585e+2, + -0.14003262607151372166e+2, + 0.45517365860253882204e+2, + -0.43833450555975893792e+2, + 0.94230139487829465139e+1, + 0.31688684710576549008e+2, + -0.48667019125867653884e+2, + 0.29889600454517154304e+2, + 0.84773599270423343199e+1, + -0.35791544189189991698e+2, + 0.31234667229915949349e+2, + -0.18454043334687376898e+2, + -0.12235398353318320375e+2, + 0.48105249693231428409e+2, + -0.45729301104027392455e+2, + -0.25236373856784033443e+1, + 0.50807141360910080152e+2, + -0.65782629436065619188e+2, + 0.26529162409663562983e+2, + 0.28642117139536164672e+2, + -0.62305587138804717995e+2, + 0.41504362463900754676e+2, + 0.56969248611254288406e+1, + -0.4286247153008992683e+2, + 0.29680901274542044632e+2, + 0.13733995635975981386e+2, + -0.52249176630996309711e+2, + 0.40009779487327747916e+2, + 0.87921466885399421898e+1, + -0.58709823310890811854e+2, + 0.57126043667091003897e+2, + -0.1129457357827474695e+2, + -0.4390781859240537699e+2, + 0.49848370263347639764e+2, + -0.74810449987435587715e+1, + -0.48429948653275125992e+2, + 0.53356102511762102836e+2, + -0.32493115354948742812e+1, + -0.64534053576725113999e+2, + 0.76151833814665579325e+2, + -0.19915519598722582373e+2, + -0.64680523482868679253e+2, + 0.92407444887099586595e+2, + -0.40292633319237893375e+2, + -0.53637692261001994609e+2, + 0.94981814993346219467e+2, + -0.49676498814096582635e+2, + -0.4745489177987122531e+2, + 0.95748166102303244429e+2, + -0.52726768861052356385e+2, + -0.49159952601918945447e+2, + 0.10462411185700696592e+3, + -0.65399101348663336353e+2, + -0.37844200614746164035e+2, + 0.98514590014603157897e+2, + -0.67920438632537695867e+2, + -0.22742062757951270413e+2, + 0.70315788404038329418e+2, + -0.35723101402834778639e+2, + -0.41209623820613884959e+2, + 0.61294060197941988122e+2, + -0.38907708157003741967e+1, + -0.72935472355817594803e+2, + 0.7101815073460862493e+2, + 0.80665539302604827299e+1, + -0.84146894820657180958e+2, + 0.61221474559980897823e+2, + 0.33413765285983181741e+2, + -0.98328245790830152373e+2, + 0.46069564593431181265e+2, + 0.65825090105075744873e+2, + -0.11894805949764541708e+3, + 0.43164513671083646784e+2, + 0.73334047243817920503e+2, + -0.10831082857502421746e+3, + 0.22935446655746577704e+2, + 0.67872078497227064986e+2, + -0.60991928003665236702e+2, + -0.31594096411460302676e+2, + 0.74065545834823652172e+2, + -0.69325575760937496739e+1, + -0.93708423636910225696e+2, + 0.84878686330428379847e+2, + 0.29862574755134886573e+2, + -0.11765015450055769008e+3, + 0.59177074648879788299e+2, + 0.66570995854353000709e+2, + -0.10191798062017275583e+3, + -0.61135063010794992167e+1, + 0.10718782390449865716e+3, + -0.71194491924187431664e+2, + -0.56093068994317810905e+2, + 0.91301234235741247858e+2, + 0.44201852595005126645e+1, + -0.88133674513057954414e+2, + 0.17370305605243242297e+2, + 0.110176268299114966e+3, + -0.1087617670676386723e+3, + -0.44235920784462649635e+2, + 0.13796660350867244915e+3, + -0.52772600796407296286e+2, + -0.81647293222825993553e+2, + 0.5681466441829873304e+2, + 0.71303332685182624573e+2, + -0.87891654594422945479e+2, + -0.57861200877067929582e+2, + 0.13474640024265073635e+3, + -0.14835209913765323719e+2, + -0.12708330097157707428e+3, + 0.61383055939844105353e+2, + 0.96218312464822389529e+2, + -0.86883675390821977658e+2, + -0.76760699134706513291e+2, + 0.10271572882365046553e+3, + 0.55763162383654737653e+2, + -0.12288581258868893542e+3, + -0.38536080635039091646e+2, + 0.14407202404893584458e+3, + -0.27262817222818340746e+1, + -0.14370799260367098782e+3, + 0.28575132078664761792e+2, + 0.12020700250969177603e+3, + -0.17241118139101050843e+2, + -0.14227513879109864092e+3, + 0.22486255157930273185e+2, + 0.16420706419147157362e+3, + -0.62424991720656237248e+2, + -0.13289548434324115078e+3, + 0.30678458989334068008e+2, + 0.13412739565739946102e+3, + 0.11055797424799356676e+2, + -0.18761783568387755849e+3, + 0.71830620299498715298e+1, + 0.15917304332842121539e+3, + 0.27565393277752416878e+2, + -0.12926719617027586651e+3, + -0.11590217295488848492e+3, + 0.14571147528471854571e+3, + 0.13360966394916297872e+3, + -0.95407487613090367518e+2, + -0.15553647656335581928e+3, + -0.14670853828519359041e+2, + 0.19319360600391411253e+3, + 0.87801531610196605016e+2, + -0.14721484505468606585e+3, + -0.16261318373973463736e+3, + 0.13722847499726947618e+2, + 0.20656598959020581674e+3, + 0.11656241435654551708e+3, + -0.11990400738458410501e+3, + -0.21173744077597714863e+3, + -0.77393453013620643333e+2, + 0.15779472408400147287e+3, + 0.22827467535887953431e+3, + 0.71478462291050817612e+2, + -0.16059566731978259213e+3, + -0.25102049004089252549e+3, + -0.15542546666799822219e+3, + 0.85914983525262414332e+2, + 0.25579147341206720512e+3, + 0.27261337429699545964e+3, + 0.15378980475146406093e+3, + -0.87527591111943294777e+2, + -0.25099139718774992502e+3, + -0.38020565844011133549e+3, + -0.39730468910257866355e+3, + -0.32937871925454555821e+3, + -0.27953073274917960589e+3, + -0.16416832186207267341e+3, + -0.11755343123673935679e+3, + -0.69038023359882302543e+2, + -0.18331316611230125346e+2, + -0.35868565524012659296e+2, + 0.81536953459053798099e+1, + -0.85541401482436896231e+1, + -0.94220397761517027391e+1, + 0.19031900285673788886e+2, + -0.2449505457278587528e+2, + 0.20227485238568874593e+2, + -0.83741916856887979037e+1, + -0.74739018082750767746e+1, + 0.21665655859529817207e+2, + -0.29033169962070509484e+2, + 0.26739924458141128838e+2, + -0.15264750227137092509e+2, + -0.1579904143790906712e+1, + 0.18109479013644442347e+2, + -0.28632793545594541484e+2, + 0.29601636454789844066e+2, + -0.20735003872577607353e+2, + 0.52329243414399053691e+1, + 0.11488780158059423542e+2, + -0.2361047385913845531e+2, + 0.27071696208146040163e+2, + -0.20882400964772614316e+2, + 0.75337589400702738018e+1, + 0.8018941787424898493e+1, + -0.20060596269778560696e+2, + 0.24245112825539976598e+2, + -0.19064847136375764336e+2, + 0.64497056079263463957e+1, + 0.89957654190327822619e+1, + -0.21577766161576406034e+2, + 0.26600889290349787331e+2, + -0.21998700211895865664e+2, + 0.91343466369183268228e+1, + 0.76896936846919867747e+1, + -0.22682623093694814997e+2, + 0.30607874321440345255e+2, + -0.28588282254936487448e+2, + 0.17139933336841789213e+2, + -0.6717455937603132865, + -0.14456178539727629229e+2, + 0.29791526955056621517e+2, + -0.31815052703278702495e+2, + 0.27251448699353520766e+2, + -0.1003574199455722038e+2, + -0.64201501696217961879e+1, + 0.2397477306390238283e+2, + -0.29067870271252608916e+2, + 0.27591333858939975698e+2, + -0.1282148265883577487e+2, + -0.2171935958894734231e+1, + 0.19217798288841198229e+2, + -0.2449375711242259257e+2, + 0.23552883716162785532e+2, + -0.94568144639935098894e+1, + -0.47608970811725539463e+1, + 0.20794145242640254878e+2, + -0.2467534170393131987e+2, + 0.2193102535355642857e+2, + -0.58462517725091611709e+1, + -0.10113601656996962674e+2, + 0.2710679355162924864e+2, + -0.30760648937237711209e+2, + 0.2648728769677520134e+2, + -0.78635615132774550062e+1, + -0.11040924151425819844e+2, + 0.3063853808477094276e+2, + -0.35958365015673088294e+2, + 0.32144670290910369204e+2, + -0.12944746936390956193e+2, + -0.71086018442550447105e+1, + 0.2782053925070058753e+2, + -0.33960325169957293667e+2, + 0.30293304946657027443e+2, + -0.11964698400791599298e+2, + -0.88534310015227113411e+1, + 0.2402448643876403267e+2, + -0.36821089720284113866e+2, + 0.98082311008834590638e+1, + -0.31531010053514243907e+2, + -0.71862207823025144648e+2, + -0.60574646571393088834e+2, + -0.18826350850384889668e+3, + -0.20120363075419558641e+3, + -0.29088088093444270044e+3, + -0.3634198051139060226e+3, + -0.27546315337300239889e+3, + -0.27047087726844932831e+3, + -0.32565881093829133874e+2, + 0.1225208070653211081e+3, + 0.20995900660248349823e+3, + 0.26991063015304172268e+3, + 0.20115906523961129437e+2, + -0.94478916805561524939e+2, + -0.2207121691308761342e+3, + -0.1623081219476187016e+3, + 0.10760825953608100747e+3, + 0.15238769846968230581e+3, + 0.15969502676122021967e+3, + -0.57676817334423112982e+2, + -0.21528851675352220241e+3, + -0.56214659701520361068e+2, + 0.66287855858077733728e+2, + 0.18463593464324213755e+3, + 0.38928670260596163644e+2, + -0.18689949084914755417e+3, + -0.75495796192942464131e+2, + 0.48264755245420694507e+2, + 0.1587648038304440945e+3, + 0.30837840555214768301e+2, + -0.19253892862041712419e+3, + -0.28033152682065644257e+2, + 0.9318226812275359805e+2, + 0.10759112991563939943e+3, + -0.46585133993240035011e+2, + -0.17318473266531628951e+3, + 0.72738451376721727115e+2, + 0.12469840302529888731e+3, + -0.19702302619340414935e+2, + -0.10686174718666465822e+3, + -0.43487597741511443417e+2, + 0.14590760834258119871e+3, + 0.3475229275719357247e+2, + -0.15314140349839939859e+3, + 0.41599218048991949692e-1, + 0.10352530281507485199e+3, + 0.24152348998846619565e+2, + -0.86888187913018043673e+2, + -0.70834983574782967253e+2, + 0.15742878954008392611e+3, + 0.15072000552872248935e+1, + -0.1399704414691185832e+3, + 0.50991190298352982779e+2, + 0.61305661066828491812e+2, + 0.13093731388600447829e+2, + -0.11118018706327301004e+3, + 0.15658304212273080225e+2, + 0.14454924382033567554e+3, + -0.11452476546101263466e+3, + -0.54122183332373310805e+2, + 0.10308876099456813336e+3, + 0.68255489199731993466e+1, + -0.601805671204451329e+2, + -0.33428256850768441666e+2, + 0.98624979166090128047e+2, + 0.12849852449271639276e+1, + -0.13086012765667302915e+3, + 0.94811175664943505126e+2, + 0.60429298438804480043e+2, + -0.12114511109140741496e+3, + 0.25808053914861165623e+2, + 0.64965819010935504707e+2, + -0.25198442016815032929e+2, + -0.55348765513926174719e+2, + 0.2801124289443302473e+2, + 0.80754863097370673586e+2, + -0.10587318515629702631e+3, + -0.10322841630071916796e+2, + 0.12900964839685332208e+3, + -0.10182459872963771375e+3, + -0.31495148216800696872e+2, + 0.10587850567028996807e+3, + -0.49753560404460131394e+2, + -0.36843924561709563648e+2, + 0.36240399185281020777e+2, + 0.29171365501142659582e+2, + -0.41716586692268307957e+2, + -0.3697696643503201841e+2, + 0.10750490836397064243e+3, + -0.62930559058103511916e+2, + -0.64939020339832538298e+2, + 0.13731298407364832315e+3, + -0.73595538223378184739e+2, + -0.5351056591944675489e+2, + 0.10779586347829763326e+3, + -0.45225640281512440311e+2, + -0.47087299388306760761e+2, + 0.65433499476906561654e+2, + -0.73520577006343028614e+1, + -0.40855146092674168301e+2, + 0.20522802224453005948e+2, + 0.30040861694735887966e+2, + -0.3041745395061661128e+2, + -0.34248476439165806084e+2, + 0.8893857531362336033e+2, + -0.55017792116880627873e+2, + -0.5209968337419330453e+2, + 0.13088350966427915978e+3, + -0.98401980445335908598e+2, + -0.20016550125453381526e+2, + 0.11509135174231671783e+3, + -0.10231682039414654639e+3, + 0.33267705574046217976e+1, + 0.82699340002384332138e+2, + -0.79388895581200372931e+2, + 0.29394830250283878748e+1, + 0.6559004327178159599e+2, + -0.6539725946470700535e+2, + 0.1052850776304782876e+2, + 0.37199923654713330734e+2, + -0.36988258948276893534e+2, + 0.65073044607545762474e+1, + 0.79661808486191567624e+1, + 0.12217833894602023292e+2, + -0.36879364219307717576e+2, + 0.23971309045972283513e+2, + 0.29156039145496794873e+2, + -0.75501044838255310765e+2, + 0.6410872592714387963e+2, + 0.55958138015212641747e+1, + -0.75737473938327255496e+2, + 0.81286463682195133629e+2, + -0.12012617329613721751e+2, + -0.73030944591701455693e+2, + 0.9609668635564948147e+2, + -0.30580944410753438945e+2, + -0.71911514865161663579e+2, + 0.12414733867653660582e+3, + -0.77868680841465561571e+2, + -0.33282257638471293149e+2, + 0.12094685123124500592e+3, + -0.11509024240350427704e+3, + 0.22032166319391766507e+2, + 0.81783117750575584637e+2, + -0.11307864743016087061e+3, + 0.49726386785005999513e+2, + 0.53026995325814198168e+2, + -0.10907790842703090561e+3, + 0.72066379518774638768e+2, + 0.2810458839006371079e+2, + -0.11047311633731082736e+3, + 0.10869892395560887621e+3, + -0.2347060901712963954e+2, + -0.78940255490385396797e+2, + 0.11990391405809951664e+3, + -0.70060893657185133065e+2, + -0.28719554949059379112e+2, + 0.97637089109945748078e+2, + -0.83440581609258344997e+2, + 0.36443948594001739139e+2, + 0.4596976178412513292e+2, + -0.1209742206650698364e+3, + 0.10199138126074018373e+3, + 0.15071123074766029859e+2, + -0.1203322131679013296e+3, + 0.14123688356219449247e+3, + -0.42420490130687660724e+2, + -0.80955556095952573514e+2, + 0.14296213060247083604e+3, + -0.78481391589124314123e+2, + -0.39012812076710496001e+2, + 0.120728767762839027e+3, + -0.79235189858296763532e+2, + -0.32708146768695570472e+2, + 0.1273916330299102242e+3, + -0.99706282180919544089e+2, + -0.16103273427709392962e+2, + 0.13364492345551175845e+3, + -0.13062703110337773182e+3, + 0.21669732622842975189e+2, + 0.11083145496730125501e+3, + -0.13012455703020597753e+3, + 0.32461431882737251442e+2, + 0.10445517636777030646e+3, + -0.13167510380884721144e+3, + 0.30298107481221816073e+2, + 0.12308977887561701436e+3, + -0.16419942471084769409e+3, + 0.572907590471011261e+2, + 0.12168218078233262247e+3, + -0.19056881920905243533e+3, + 0.93111211051230100111e+2, + 0.99226410957778981015e+2, + -0.18974681706262705916e+3, + 0.10361650933405114472e+3, + 0.92808124971967302486e+2, + -0.19210510284484965382e+3, + 0.1064276147174837206e+3, + 0.99312276680964259867e+2, + -0.2082414224499969464e+3, + 0.12450654798651630983e+3, + 0.85359470225725431192e+2, + -0.19900530741122051381e+3, + 0.12181865259106187693e+3, + 0.72519832825597404735e+2, + -0.16262517519503552421e+3, + 0.71534501800764587642e+2, + 0.10629193901153982438e+3, + -0.15178851219335402334e+3, + 0.20984308658584989615e+2, + 0.15580317152397284985e+3, + -0.16015135515942156985e+3, + -0.92183674953411944841e+1, + 0.17957713094537925258e+3, + -0.13909610575211692662e+3, + -0.60397631167842753541e+2, + 0.20490636314595840872e+3, + -0.10436225602900492504e+3, + -0.12457611123182262247e+3, + 0.23523853254266617796e+3, + -0.79990144594187540861e+2, + -0.15520585357533079218e+3, + 0.21602432863073985914e+3, + -0.26740845522317112426e+2, + -0.16271767575815513851e+3, + 0.13401295689226441255e+3, + 0.80213796920987064709e+2, + -0.18095599805775586333e+3, + 0.36451340143702523733e+2, + 0.18927354308942352645e+3, + -0.18405104667707797717e+3, + -0.51228492990699002974e+2, + 0.23632377539202457228e+3, + -0.11518385457817457507e+3, + -0.14702683869338156342e+3, + 0.2178982253584546811e+3, + 0.13064801540738486096e+2, + -0.22447841141399499065e+3, + 0.14198732413699522681e+3, + 0.13135557038602141233e+3, + -0.19981646050943544424e+3, + -0.18099785295778186622e+2, + 0.21079583948367826451e+3, + -0.66306636202142485104e+2, + -0.21018836924606463867e+3, + 0.2204489266184396854e+3, + 0.89122606995646179939e+2, + -0.27398681569080014242e+3, + 0.84191323194499332772e+2, + 0.20006053226181174409e+3, + -0.13441301284181713527e+3, + -0.15511542551294229497e+3, + 0.20182430587416328649e+3, + 0.10727903450565524679e+3, + -0.27655072688191432917e+3, + 0.28281586440335903632e+2, + 0.26817649342411942825e+3, + -0.12447487128953376612e+3, + -0.21058061904626782734e+3, + 0.18486150537497942992e+3, + 0.1706785193141672039e+3, + -0.22695659584223014349e+3, + -0.11682163289888424629e+3, + 0.2675843459849029955e+3, + 0.72644037749944828875e+2, + -0.29774824535634729727e+3, -0.33629376286542356222, - 0.30554625625022026725e+03, - -0.50565664222634417513e+02, - -0.27176503000334821536e+03, - 0.47663681031140022526e+02, - 0.30366646844253915560e+03, - -0.58407362017277634436e+02, - -0.33349957453700227461e+03, - 0.11473564976495903522e+03, - 0.29607135945565903512e+03, - -0.63528217576589817384e+02, - -0.30347967064412915761e+03, - 0.95122091940656960940, - 0.37780601929315639609e+03, - -0.48849457313831257110, - -0.34126163267487356734e+03, - -0.73251845329659559525e+02, - 0.29984484999085452728e+03, - 0.22559740118023847799e+03, - -0.29765105293711508239e+03, - -0.28822542234684499363e+03, - 0.19441683377359154861e+03, - 0.35016466020179433372e+03, - 0.14953581592536437483e+02, - -0.40410772780480471056e+03, - -0.18840687750366333830e+03, - 0.30720929633985281271e+03, - 0.36108235202968018029e+03, - -0.41194152784012693758e+02, - -0.43560986515043873624e+03, - -0.25069747297341675107e+03, - 0.25315384207309395492e+03, - 0.45931640739927843242e+03, - 0.16125567170170643294e+03, - -0.33577595655842395672e+03, - -0.48996338984737366218e+03, - -0.15187146546867322172e+03, - 0.34042016367299265767e+03, - 0.54459291777763212394e+03, - 0.32493435238955765954e+03, - -0.17766374987981950540e+03, - -0.54946256493594387393e+03, - -0.58989696588159642943e+03, - -0.31734509470932255226e+03, - 0.17223316626541569008e+03, - 0.55134332320140913453e+03, - 0.80777205580754832681e+03, - 0.84929258794478164418e+03, - 0.71609075903047846623e+03, - 0.58456199032719848674e+03, - 0.36467212151700272216e+03, - 0.24576660566810113551e+03, - 0.14483072738570848514e+03, - 0.50380029946554799380e+02, - 0.62483096314090786905e+02, - -0.61425833746691775872e+01, - 0.15568335285535951584e+02, - 0.12032004566408202706e+02, - -0.23591346128242360436e+02, - 0.31989229569419105559e+02, - -0.27052716941595235767e+02, - 0.12473634024716481861e+02, - 0.75611665448855420735e+01, - -0.25729348546595037561e+02, - 0.35426481918963602880e+02, - -0.32973649065226283028e+02, - 0.18917204762117403760e+02, - 0.19300322636542281973e+01, - -0.22375473025560530971e+02, - 0.35208046657213451169e+02, - -0.35969173341445085157e+02, - 0.24363148836927958740e+02, - -0.45429763027282685783e+01, - -0.16541307633074765704e+02, - 0.31452686978346509505e+02, - -0.35060160458597522393e+02, - 0.26196405305328209323e+02, - -0.81880324124715588852e+01, - -0.12483416150661090782e+02, - 0.28373297697622813729e+02, - -0.33837256661512903122e+02, - 0.26915941094520135835e+02, - -0.10120102691591586819e+02, - -0.10564336676060019471e+02, - 0.27712912089172789365e+02, - -0.35168904005729416440e+02, - 0.30147001880156860665e+02, - -0.14286529333713556156e+02, - -0.69705938322453873113e+01, - 0.26228109297456505544e+02, - -0.36759741356743404594e+02, - 0.34825224801769444127e+02, - -0.21007621665947482370e+02, - 0.11488229776411791327e+01, - 0.17200472681804562569e+02, - -0.35397607973791124891e+02, - 0.37446812172583442191e+02, - -0.30968158814499421538e+02, - 0.96884989392744422787e+01, - 0.10542192058343035299e+02, - -0.31046653043591533105e+02, - 0.36159569987668994884e+02, - -0.32535295582592560493e+02, - 0.13162256638094685712e+02, - 0.64362169340707708898e+01, - -0.27411005597426811420e+02, - 0.33605807835852580467e+02, - -0.31073857624403391497e+02, - 0.12389033361710737324e+02, - 0.70400776231938717586e+01, - -0.28138919512676856982e+02, - 0.34373791498215204854e+02, - -0.31445005652144452313e+02, - 0.11828794804720731193e+02, - 0.88768138317136386917e+01, - -0.31153361324789614173e+02, - 0.37999803351869402945e+02, - -0.34801744949007101582e+02, - 0.14062644495886678087e+02, - 0.82848114611259884299e+01, - -0.32177227765952473248e+02, - 0.40126509988743627844e+02, - -0.37256952708769176752e+02, - 0.16181635380959772164e+02, - 0.68091346920379534069e+01, - -0.31140215407814352488e+02, - 0.39159723009766146617e+02, - -0.35621231481499826543e+02, - 0.14683143116654019167e+02, - 0.10027066675602233303e+02, - -0.29122912035175495760e+02, - 0.45465092417979931838e+02, - -0.16785711881648644805e+02, - 0.40831538121916892692e+02, - 0.75667443819796801563e+02, - 0.68544641790105615087e+02, - 0.21145182757630382753e+03, - 0.21802559187998102175e+03, - 0.33082494228022648031e+03, - 0.39575954124754514396e+03, - 0.31264932955848672691e+03, - 0.29685764998992459596e+03, - 0.36146869730941112664e+02, - -0.13259286049134280461e+03, - -0.23935839254033913903e+03, - -0.29290139322654403031e+03, - -0.28622940281820575592e+02, - 0.10910952245983051512e+03, - 0.24393708246901803705e+03, - 0.17882547178997003812e+03, - -0.11601827878527367943e+03, - -0.17374902413969181225e+03, - -0.17340428091645281938e+03, - 0.61366889941838273614e+02, - 0.24014945048040760867e+03, - 0.63107670777387802730e+02, - -0.75295059689264064673e+02, - -0.20338300212939481071e+03, - -0.44436173374563288974e+02, - 0.20783123701175571796e+03, - 0.84630890017439043049e+02, - -0.54810180793423924683e+02, - -0.17557244711314410779e+03, - -0.34053406724005036210e+02, - 0.21222717067647164413e+03, - 0.34241292846125865879e+02, - -0.10744055463198182565e+03, - -0.11586951338029631131e+03, - 0.49428578841090782703e+02, - 0.19243626911364256671e+03, - -0.78077945500943982893e+02, - -0.14385914884241893219e+03, - 0.28831237613012575594e+02, - 0.11153573187493880425e+03, - 0.54163186297359260379e+02, - -0.16524859985594974887e+03, - -0.39066102471969600174e+02, - 0.17423123356765805170e+03, - -0.70289480210218400202e+01, - -0.10655590762716289532e+03, - -0.35097224075157370748e+02, - 0.10289723601869826553e+03, - 0.75462876836824250404e+02, - -0.17534420629670862013e+03, - 0.21134350363410878693e+01, - 0.14932865663105428666e+03, - -0.49522785294757618146e+02, - -0.74670568643342491555e+02, - -0.98980962815643689368e+01, - 0.12152962477207792347e+03, - -0.18170507987684761275e+02, - -0.15761540429090584325e+03, - 0.12299297798733486786e+03, - 0.64464517749509454347e+02, - -0.11791785039042089522e+03, - -0.58759525774259282471e+01, - 0.66996380150301988010e+02, - 0.35454758093196041102e+02, - -0.10703052818426229464e+03, - -0.40382755561557717172e+01, - 0.14729080415978933161e+03, - -0.10605345098568314199e+03, - -0.67748425965162653029e+02, - 0.13623342404029082786e+03, - -0.30809271412897128783e+02, - -0.70202826731640982416e+02, - 0.26694598287942625348e+02, - 0.61800178503024227439e+02, - -0.30457717783793523125e+02, - -0.91069568307110770888e+02, - 0.11913267094320349315e+03, - 0.10332395867455987926e+02, - -0.14297878325345320150e+03, - 0.11365638215548381140e+03, - 0.33756182954853699130e+02, - -0.11615220479556886346e+03, - 0.54111391519683870399e+02, - 0.41211484455189037135e+02, - -0.39312709157132488258e+02, - -0.34627612279251344773e+02, - 0.49447495568928097498e+02, - 0.37770747633441857261e+02, - -0.11677856565244637466e+03, - 0.68682484300867713500e+02, - 0.71396610434957196389e+02, - -0.14969869732948376395e+03, - 0.77131994179173730686e+02, - 0.65041141407386660944e+02, - -0.12521263787063841733e+03, - 0.54361139978121038041e+02, - 0.50491660292878506766e+02, - -0.73714282869175988822e+02, - 0.11969539834477043172e+02, - 0.39417142804217334628e+02, - -0.15776182688244594132e+02, - -0.40091367244742876608e+02, - 0.38824642241852110658e+02, - 0.35745200870230519286e+02, - -0.99752368288997914192e+02, - 0.65140873358912756430e+02, - 0.51573564065622832686e+02, - -0.13808607702111294202e+03, - 0.10244653716683220068e+03, - 0.27265695935590873233e+02, - -0.13003208478227929845e+03, - 0.11252826465779780563e+03, - 0.50106378218416514070, - -0.98248829301344485998e+02, - 0.95389778751980827565e+02, - -0.97767044388755017792e+01, - -0.68399998667785212092e+02, - 0.71134264069213656967e+02, - -0.13435578006912928473e+02, - -0.36710206722902370302e+02, - 0.34549753794293209808e+02, - -0.13133167807419057760, - -0.15033990164757341290e+02, - -0.95992631507955543668e+01, - 0.40022493703099151219e+02, - -0.28908653310274196713e+02, - -0.27365232892145957777e+02, - 0.77122880615774818125e+02, - -0.64113578263433780080e+02, - -0.12249164404415832763e+02, - 0.87872371883174551499e+02, - -0.90987847511273471923e+02, - 0.10835912435157862177e+02, - 0.86314337942670860571e+02, - -0.11355718291088807348e+03, - 0.41004222388213818817e+02, - 0.74033528136659654706e+02, - -0.13439805793052877902e+03, - 0.85984594436281298613e+02, - 0.34424182969045226343e+02, - -0.12928010162230259539e+03, - 0.12126235730175710614e+03, - -0.17693560053134273602e+02, - -0.96474062250999494950e+02, - 0.12895146165624890955e+03, - -0.55627236634506026292e+02, - -0.61528525014042813268e+02, - 0.12624199966767713477e+03, - -0.86525281673804940397e+02, - -0.24675188496044409447e+02, - 0.11740835902753326536e+03, - -0.11771641419280850016e+03, - 0.25898577589601039506e+02, - 0.84986131440600971132e+02, - -0.12815593461465903147e+03, - 0.71454278441600621363e+02, - 0.38334015011566883402e+02, - -0.11365113197952862834e+03, - 0.95582209505274562389e+02, - -0.33704423191559172324e+02, - -0.60439321575332158432e+02, - 0.13291341540480564731e+03, - -0.10364745234932165374e+03, - -0.21615212468309525917e+02, - 0.12604841681424522903e+03, - -0.13776865596406076975e+03, - 0.29618924773862154609e+02, - 0.94974519310978280373e+02, - -0.14752684056164216031e+03, - 0.68766412027598477152e+02, - 0.58784940779419009971e+02, - -0.13985261859542171692e+03, - 0.88188894139042176334e+02, - 0.36724426419153530787e+02, - -0.13910771086697252485e+03, - 0.11059802106316107029e+03, - 0.12232944185654474722e+02, - -0.13654774002678587408e+03, - 0.13498911794863795421e+03, - -0.20989632610254691514e+02, - -0.11897003043341076989e+03, - 0.14241572289823815822e+03, - -0.41202411681333465765e+02, - -0.10610885880034672368e+03, - 0.14532680394207866925e+03, - -0.49922061994074070412e+02, - -0.10787013230355040605e+03, - 0.16234388479147406770e+03, - -0.69841381498429925045e+02, - -0.10250797310382894523e+03, - 0.17706110515640119729e+03, - -0.93254383687455714380e+02, - -0.87124450256663550363e+02, - 0.17629521983996252743e+03, - -0.99798417130662429031e+02, - -0.83957929949888168153e+02, - 0.17859751602654495173e+03, - -0.10067141668383916908e+03, - -0.90151886506354628636e+02, - 0.18879106726035203678e+03, - -0.10756360698941864484e+03, - -0.87957136834442238182e+02, - 0.18530049022762389654e+03, - -0.99895046046694716324e+02, - -0.90675380441676367127e+02, - 0.16958022899589994381e+03, - -0.66996887870608944127e+02, - -0.11742164888757794472e+03, - 0.16416672191544398629e+03, - -0.30390737323805410597e+02, - -0.15189132836102393753e+03, - 0.16270416994985441761e+03, - 0.28547707005798184099e+01, - -0.17517470108461014888e+03, - 0.14225323033461222622e+03, - 0.50468030207129423559e+02, - -0.19637121768460008298e+03, - 0.10736256985649140461e+03, - 0.10783847896099953800e+03, - -0.21375094123099029275e+03, - 0.68104780293752398279e+02, - 0.14971263580851157826e+03, - -0.19723539814677627646e+03, - 0.64947259491715563229e+01, - 0.17505947299586924260e+03, - -0.13597829890530849184e+03, - -0.86333801655962403743e+02, - 0.19312655750322963399e+03, - -0.52118255322501376270e+02, - -0.17566048543589155884e+03, - 0.18045770183107902085e+03, - 0.42071469178141271072e+02, - -0.22137197128202967633e+03, - 0.10662972324359336085e+03, - 0.14397568497083170769e+03, - -0.20982789255438694909e+03, - -0.14766889409410003609e+02, - 0.21625945568816558762e+03, - -0.13012162512471715559e+03, - -0.13877268194506385157e+03, - 0.20107326181502091345e+03, - 0.21601875629441266824e+02, - -0.22043893723632706383e+03, - 0.85062872214777030422e+02, - 0.18725490967906566198e+03, - -0.20706601826405301381e+03, - -0.82024812236241146479e+02, - 0.25101162300435635188e+03, - -0.60539564760487863282e+02, - -0.21373363650582282958e+03, - 0.13928895728647981400e+03, - 0.15573836663744799580e+03, - -0.20996320388915268040e+03, - -0.90329458833187530331e+02, - 0.26022166588078243876e+03, - -0.25208579018110864212e+02, - -0.25786613276264517935e+03, - 0.11455271274543621018e+03, - 0.21111563474085582470e+03, - -0.18129772968018312440e+03, - -0.17061644397603731704e+03, - 0.22674169193015839596e+03, - 0.11205384581546940126e+03, - -0.26433035364605484574e+03, - -0.64381123011862968042e+02, - 0.28403354778413597614e+03, - 0.34356745321089778855e+01, - -0.29511787621488213063e+03, - 0.39535123182873036285e+02, - 0.27790580991384126719e+03, - -0.55386058771007526502e+02, - -0.29639623925909177160e+03, - 0.66301510261424482451e+02, - 0.30994412940304351878e+03, - -0.95282152877926378665e+02, - -0.30023842743301503333e+03, - 0.61887398397472274780e+02, - 0.30836312709902631468e+03, - -0.19841506910090760840e+02, - -0.35038152724036564223e+03, - -0.11512132687759523364e+02, - 0.33422351057270827823e+03, - 0.82329601171078195421e+02, - -0.31070292506127560728e+03, - -0.20314274107557542948e+03, - 0.28007073125054142793e+03, - 0.28274676617895283925e+03, - -0.18156674324190802849e+03, - -0.35632652573975201449e+03, - -0.10076464893769956355e+01, - 0.38676008530203654345e+03, - 0.18495876030889559161e+03, - -0.29438819206402956752e+03, - -0.36251469362800906993e+03, - 0.49090316542131745337e+02, - 0.42079484268656392487e+03, - 0.24560420743338289640e+03, - -0.24458236171211297005e+03, - -0.45309566704974037066e+03, - -0.15493163244813212032e+03, - 0.32776313067344017327e+03, - 0.47806857835594189510e+03, - 0.14926894918248663657e+03, - -0.33166902328513134535e+03, - -0.53629959085312884781e+03, - -0.31232876340684532579e+03, - 0.16907582505509373050e+03, - 0.53850226222535957277e+03, - 0.58047559649384129443e+03, - 0.30205941044239011717e+03, - -0.15816266440061551179e+03, - -0.54761546033342290229e+03, - -0.78654258608865916358e+03, - -0.82674395760607524153e+03, - -0.70991063075070246668e+03, - -0.55920913035877163111e+03, - -0.36690471788778961582e+03, - -0.23615774309067973036e+03, - -0.13768223408121008333e+03, - -0.60081888605559555572e+02, - -0.47408149047355252037e+02, - -0.52023959275979674288e+01, - -0.11188691733606193068e+02, - -0.65111007826169373658e+01, - 0.98733816234017623970e+01, - -0.14665218115007645494e+02, - 0.12472685233447638353e+02, - -0.62882833806532199006e+01, - -0.25262784510907705382e+01, - 0.10584708283915514215e+02, - -0.14998112271011020624e+02, - 0.14109585217841777549e+02, - -0.81378574764779703088e+01, + 0.30554625625022026725e+3, + -0.50565664222634417513e+2, + -0.27176503000334821536e+3, + 0.47663681031140022526e+2, + 0.3036664684425391556e+3, + -0.58407362017277634436e+2, + -0.33349957453700227461e+3, + 0.11473564976495903522e+3, + 0.29607135945565903512e+3, + -0.63528217576589817384e+2, + -0.30347967064412915761e+3, + 0.9512209194065696094, + 0.37780601929315639609e+3, + -0.4884945731383125711, + -0.34126163267487356734e+3, + -0.73251845329659559525e+2, + 0.29984484999085452728e+3, + 0.22559740118023847799e+3, + -0.29765105293711508239e+3, + -0.28822542234684499363e+3, + 0.19441683377359154861e+3, + 0.35016466020179433372e+3, + 0.14953581592536437483e+2, + -0.40410772780480471056e+3, + -0.1884068775036633383e+3, + 0.30720929633985281271e+3, + 0.36108235202968018029e+3, + -0.41194152784012693758e+2, + -0.43560986515043873624e+3, + -0.25069747297341675107e+3, + 0.25315384207309395492e+3, + 0.45931640739927843242e+3, + 0.16125567170170643294e+3, + -0.33577595655842395672e+3, + -0.48996338984737366218e+3, + -0.15187146546867322172e+3, + 0.34042016367299265767e+3, + 0.54459291777763212394e+3, + 0.32493435238955765954e+3, + -0.1776637498798195054e+3, + -0.54946256493594387393e+3, + -0.58989696588159642943e+3, + -0.31734509470932255226e+3, + 0.17223316626541569008e+3, + 0.55134332320140913453e+3, + 0.80777205580754832681e+3, + 0.84929258794478164418e+3, + 0.71609075903047846623e+3, + 0.58456199032719848674e+3, + 0.36467212151700272216e+3, + 0.24576660566810113551e+3, + 0.14483072738570848514e+3, + 0.5038002994655479938e+2, + 0.62483096314090786905e+2, + -0.61425833746691775872e+1, + 0.15568335285535951584e+2, + 0.12032004566408202706e+2, + -0.23591346128242360436e+2, + 0.31989229569419105559e+2, + -0.27052716941595235767e+2, + 0.12473634024716481861e+2, + 0.75611665448855420735e+1, + -0.25729348546595037561e+2, + 0.3542648191896360288e+2, + -0.32973649065226283028e+2, + 0.1891720476211740376e+2, + 0.19300322636542281973e+1, + -0.22375473025560530971e+2, + 0.35208046657213451169e+2, + -0.35969173341445085157e+2, + 0.2436314883692795874e+2, + -0.45429763027282685783e+1, + -0.16541307633074765704e+2, + 0.31452686978346509505e+2, + -0.35060160458597522393e+2, + 0.26196405305328209323e+2, + -0.81880324124715588852e+1, + -0.12483416150661090782e+2, + 0.28373297697622813729e+2, + -0.33837256661512903122e+2, + 0.26915941094520135835e+2, + -0.10120102691591586819e+2, + -0.10564336676060019471e+2, + 0.27712912089172789365e+2, + -0.3516890400572941644e+2, + 0.30147001880156860665e+2, + -0.14286529333713556156e+2, + -0.69705938322453873113e+1, + 0.26228109297456505544e+2, + -0.36759741356743404594e+2, + 0.34825224801769444127e+2, + -0.2100762166594748237e+2, + 0.11488229776411791327e+1, + 0.17200472681804562569e+2, + -0.35397607973791124891e+2, + 0.37446812172583442191e+2, + -0.30968158814499421538e+2, + 0.96884989392744422787e+1, + 0.10542192058343035299e+2, + -0.31046653043591533105e+2, + 0.36159569987668994884e+2, + -0.32535295582592560493e+2, + 0.13162256638094685712e+2, + 0.64362169340707708898e+1, + -0.2741100559742681142e+2, + 0.33605807835852580467e+2, + -0.31073857624403391497e+2, + 0.12389033361710737324e+2, + 0.70400776231938717586e+1, + -0.28138919512676856982e+2, + 0.34373791498215204854e+2, + -0.31445005652144452313e+2, + 0.11828794804720731193e+2, + 0.88768138317136386917e+1, + -0.31153361324789614173e+2, + 0.37999803351869402945e+2, + -0.34801744949007101582e+2, + 0.14062644495886678087e+2, + 0.82848114611259884299e+1, + -0.32177227765952473248e+2, + 0.40126509988743627844e+2, + -0.37256952708769176752e+2, + 0.16181635380959772164e+2, + 0.68091346920379534069e+1, + -0.31140215407814352488e+2, + 0.39159723009766146617e+2, + -0.35621231481499826543e+2, + 0.14683143116654019167e+2, + 0.10027066675602233303e+2, + -0.2912291203517549576e+2, + 0.45465092417979931838e+2, + -0.16785711881648644805e+2, + 0.40831538121916892692e+2, + 0.75667443819796801563e+2, + 0.68544641790105615087e+2, + 0.21145182757630382753e+3, + 0.21802559187998102175e+3, + 0.33082494228022648031e+3, + 0.39575954124754514396e+3, + 0.31264932955848672691e+3, + 0.29685764998992459596e+3, + 0.36146869730941112664e+2, + -0.13259286049134280461e+3, + -0.23935839254033913903e+3, + -0.29290139322654403031e+3, + -0.28622940281820575592e+2, + 0.10910952245983051512e+3, + 0.24393708246901803705e+3, + 0.17882547178997003812e+3, + -0.11601827878527367943e+3, + -0.17374902413969181225e+3, + -0.17340428091645281938e+3, + 0.61366889941838273614e+2, + 0.24014945048040760867e+3, + 0.6310767077738780273e+2, + -0.75295059689264064673e+2, + -0.20338300212939481071e+3, + -0.44436173374563288974e+2, + 0.20783123701175571796e+3, + 0.84630890017439043049e+2, + -0.54810180793423924683e+2, + -0.17557244711314410779e+3, + -0.3405340672400503621e+2, + 0.21222717067647164413e+3, + 0.34241292846125865879e+2, + -0.10744055463198182565e+3, + -0.11586951338029631131e+3, + 0.49428578841090782703e+2, + 0.19243626911364256671e+3, + -0.78077945500943982893e+2, + -0.14385914884241893219e+3, + 0.28831237613012575594e+2, + 0.11153573187493880425e+3, + 0.54163186297359260379e+2, + -0.16524859985594974887e+3, + -0.39066102471969600174e+2, + 0.1742312335676580517e+3, + -0.70289480210218400202e+1, + -0.10655590762716289532e+3, + -0.35097224075157370748e+2, + 0.10289723601869826553e+3, + 0.75462876836824250404e+2, + -0.17534420629670862013e+3, + 0.21134350363410878693e+1, + 0.14932865663105428666e+3, + -0.49522785294757618146e+2, + -0.74670568643342491555e+2, + -0.98980962815643689368e+1, + 0.12152962477207792347e+3, + -0.18170507987684761275e+2, + -0.15761540429090584325e+3, + 0.12299297798733486786e+3, + 0.64464517749509454347e+2, + -0.11791785039042089522e+3, + -0.58759525774259282471e+1, + 0.6699638015030198801e+2, + 0.35454758093196041102e+2, + -0.10703052818426229464e+3, + -0.40382755561557717172e+1, + 0.14729080415978933161e+3, + -0.10605345098568314199e+3, + -0.67748425965162653029e+2, + 0.13623342404029082786e+3, + -0.30809271412897128783e+2, + -0.70202826731640982416e+2, + 0.26694598287942625348e+2, + 0.61800178503024227439e+2, + -0.30457717783793523125e+2, + -0.91069568307110770888e+2, + 0.11913267094320349315e+3, + 0.10332395867455987926e+2, + -0.1429787832534532015e+3, + 0.1136563821554838114e+3, + 0.3375618295485369913e+2, + -0.11615220479556886346e+3, + 0.54111391519683870399e+2, + 0.41211484455189037135e+2, + -0.39312709157132488258e+2, + -0.34627612279251344773e+2, + 0.49447495568928097498e+2, + 0.37770747633441857261e+2, + -0.11677856565244637466e+3, + 0.686824843008677135e+2, + 0.71396610434957196389e+2, + -0.14969869732948376395e+3, + 0.77131994179173730686e+2, + 0.65041141407386660944e+2, + -0.12521263787063841733e+3, + 0.54361139978121038041e+2, + 0.50491660292878506766e+2, + -0.73714282869175988822e+2, + 0.11969539834477043172e+2, + 0.39417142804217334628e+2, + -0.15776182688244594132e+2, + -0.40091367244742876608e+2, + 0.38824642241852110658e+2, + 0.35745200870230519286e+2, + -0.99752368288997914192e+2, + 0.6514087335891275643e+2, + 0.51573564065622832686e+2, + -0.13808607702111294202e+3, + 0.10244653716683220068e+3, + 0.27265695935590873233e+2, + -0.13003208478227929845e+3, + 0.11252826465779780563e+3, + 0.5010637821841651407, + -0.98248829301344485998e+2, + 0.95389778751980827565e+2, + -0.97767044388755017792e+1, + -0.68399998667785212092e+2, + 0.71134264069213656967e+2, + -0.13435578006912928473e+2, + -0.36710206722902370302e+2, + 0.34549753794293209808e+2, + -0.1313316780741905776, + -0.1503399016475734129e+2, + -0.95992631507955543668e+1, + 0.40022493703099151219e+2, + -0.28908653310274196713e+2, + -0.27365232892145957777e+2, + 0.77122880615774818125e+2, + -0.6411357826343378008e+2, + -0.12249164404415832763e+2, + 0.87872371883174551499e+2, + -0.90987847511273471923e+2, + 0.10835912435157862177e+2, + 0.86314337942670860571e+2, + -0.11355718291088807348e+3, + 0.41004222388213818817e+2, + 0.74033528136659654706e+2, + -0.13439805793052877902e+3, + 0.85984594436281298613e+2, + 0.34424182969045226343e+2, + -0.12928010162230259539e+3, + 0.12126235730175710614e+3, + -0.17693560053134273602e+2, + -0.9647406225099949495e+2, + 0.12895146165624890955e+3, + -0.55627236634506026292e+2, + -0.61528525014042813268e+2, + 0.12624199966767713477e+3, + -0.86525281673804940397e+2, + -0.24675188496044409447e+2, + 0.11740835902753326536e+3, + -0.11771641419280850016e+3, + 0.25898577589601039506e+2, + 0.84986131440600971132e+2, + -0.12815593461465903147e+3, + 0.71454278441600621363e+2, + 0.38334015011566883402e+2, + -0.11365113197952862834e+3, + 0.95582209505274562389e+2, + -0.33704423191559172324e+2, + -0.60439321575332158432e+2, + 0.13291341540480564731e+3, + -0.10364745234932165374e+3, + -0.21615212468309525917e+2, + 0.12604841681424522903e+3, + -0.13776865596406076975e+3, + 0.29618924773862154609e+2, + 0.94974519310978280373e+2, + -0.14752684056164216031e+3, + 0.68766412027598477152e+2, + 0.58784940779419009971e+2, + -0.13985261859542171692e+3, + 0.88188894139042176334e+2, + 0.36724426419153530787e+2, + -0.13910771086697252485e+3, + 0.11059802106316107029e+3, + 0.12232944185654474722e+2, + -0.13654774002678587408e+3, + 0.13498911794863795421e+3, + -0.20989632610254691514e+2, + -0.11897003043341076989e+3, + 0.14241572289823815822e+3, + -0.41202411681333465765e+2, + -0.10610885880034672368e+3, + 0.14532680394207866925e+3, + -0.49922061994074070412e+2, + -0.10787013230355040605e+3, + 0.1623438847914740677e+3, + -0.69841381498429925045e+2, + -0.10250797310382894523e+3, + 0.17706110515640119729e+3, + -0.9325438368745571438e+2, + -0.87124450256663550363e+2, + 0.17629521983996252743e+3, + -0.99798417130662429031e+2, + -0.83957929949888168153e+2, + 0.17859751602654495173e+3, + -0.10067141668383916908e+3, + -0.90151886506354628636e+2, + 0.18879106726035203678e+3, + -0.10756360698941864484e+3, + -0.87957136834442238182e+2, + 0.18530049022762389654e+3, + -0.99895046046694716324e+2, + -0.90675380441676367127e+2, + 0.16958022899589994381e+3, + -0.66996887870608944127e+2, + -0.11742164888757794472e+3, + 0.16416672191544398629e+3, + -0.30390737323805410597e+2, + -0.15189132836102393753e+3, + 0.16270416994985441761e+3, + 0.28547707005798184099e+1, + -0.17517470108461014888e+3, + 0.14225323033461222622e+3, + 0.50468030207129423559e+2, + -0.19637121768460008298e+3, + 0.10736256985649140461e+3, + 0.107838478960999538e+3, + -0.21375094123099029275e+3, + 0.68104780293752398279e+2, + 0.14971263580851157826e+3, + -0.19723539814677627646e+3, + 0.64947259491715563229e+1, + 0.1750594729958692426e+3, + -0.13597829890530849184e+3, + -0.86333801655962403743e+2, + 0.19312655750322963399e+3, + -0.5211825532250137627e+2, + -0.17566048543589155884e+3, + 0.18045770183107902085e+3, + 0.42071469178141271072e+2, + -0.22137197128202967633e+3, + 0.10662972324359336085e+3, + 0.14397568497083170769e+3, + -0.20982789255438694909e+3, + -0.14766889409410003609e+2, + 0.21625945568816558762e+3, + -0.13012162512471715559e+3, + -0.13877268194506385157e+3, + 0.20107326181502091345e+3, + 0.21601875629441266824e+2, + -0.22043893723632706383e+3, + 0.85062872214777030422e+2, + 0.18725490967906566198e+3, + -0.20706601826405301381e+3, + -0.82024812236241146479e+2, + 0.25101162300435635188e+3, + -0.60539564760487863282e+2, + -0.21373363650582282958e+3, + 0.139288957286479814e+3, + 0.1557383666374479958e+3, + -0.2099632038891526804e+3, + -0.90329458833187530331e+2, + 0.26022166588078243876e+3, + -0.25208579018110864212e+2, + -0.25786613276264517935e+3, + 0.11455271274543621018e+3, + 0.2111156347408558247e+3, + -0.1812977296801831244e+3, + -0.17061644397603731704e+3, + 0.22674169193015839596e+3, + 0.11205384581546940126e+3, + -0.26433035364605484574e+3, + -0.64381123011862968042e+2, + 0.28403354778413597614e+3, + 0.34356745321089778855e+1, + -0.29511787621488213063e+3, + 0.39535123182873036285e+2, + 0.27790580991384126719e+3, + -0.55386058771007526502e+2, + -0.2963962392590917716e+3, + 0.66301510261424482451e+2, + 0.30994412940304351878e+3, + -0.95282152877926378665e+2, + -0.30023842743301503333e+3, + 0.6188739839747227478e+2, + 0.30836312709902631468e+3, + -0.1984150691009076084e+2, + -0.35038152724036564223e+3, + -0.11512132687759523364e+2, + 0.33422351057270827823e+3, + 0.82329601171078195421e+2, + -0.31070292506127560728e+3, + -0.20314274107557542948e+3, + 0.28007073125054142793e+3, + 0.28274676617895283925e+3, + -0.18156674324190802849e+3, + -0.35632652573975201449e+3, + -0.10076464893769956355e+1, + 0.38676008530203654345e+3, + 0.18495876030889559161e+3, + -0.29438819206402956752e+3, + -0.36251469362800906993e+3, + 0.49090316542131745337e+2, + 0.42079484268656392487e+3, + 0.2456042074333828964e+3, + -0.24458236171211297005e+3, + -0.45309566704974037066e+3, + -0.15493163244813212032e+3, + 0.32776313067344017327e+3, + 0.4780685783559418951e+3, + 0.14926894918248663657e+3, + -0.33166902328513134535e+3, + -0.53629959085312884781e+3, + -0.31232876340684532579e+3, + 0.1690758250550937305e+3, + 0.53850226222535957277e+3, + 0.58047559649384129443e+3, + 0.30205941044239011717e+3, + -0.15816266440061551179e+3, + -0.54761546033342290229e+3, + -0.78654258608865916358e+3, + -0.82674395760607524153e+3, + -0.70991063075070246668e+3, + -0.55920913035877163111e+3, + -0.36690471788778961582e+3, + -0.23615774309067973036e+3, + -0.13768223408121008333e+3, + -0.60081888605559555572e+2, + -0.47408149047355252037e+2, + -0.52023959275979674288e+1, + -0.11188691733606193068e+2, + -0.65111007826169373658e+1, + 0.9873381623401762397e+1, + -0.14665218115007645494e+2, + 0.12472685233447638353e+2, + -0.62882833806532199006e+1, + -0.25262784510907705382e+1, + 0.10584708283915514215e+2, + -0.14998112271011020624e+2, + 0.14109585217841777549e+2, + -0.81378574764779703088e+1, -0.81132877413520299026, - 0.95845166338554825813e+01, - -0.15015500186954513495e+02, - 0.15161253375917638664e+02, - -0.99142279302781997075e+01, - 0.11351850122513214014e+01, - 0.80916748044979183163e+01, - -0.14476628214675518080e+02, - 0.15771752289421028692e+02, - -0.11495970033236190488e+02, - 0.31729789367800669275e+01, - 0.62765154139203849226e+01, - -0.13507828807147285843e+02, - 0.15991204003806759104e+02, - -0.12846696403857622570e+02, - 0.51995887822333504147e+01, - 0.42677778894927271836e+01, - -0.12219526899565867240e+02, - 0.15877755114219267440e+02, - -0.13959216268153740614e+02, - 0.71525984890244203029e+01, - 0.21556313052450826184e+01, - -0.10695960652363547538e+02, - 0.15481991620280194155e+02, - -0.14837626133950502449e+02, - 0.89945478637049340875e+01, + 0.95845166338554825813e+1, + -0.15015500186954513495e+2, + 0.15161253375917638664e+2, + -0.99142279302781997075e+1, + 0.11351850122513214014e+1, + 0.80916748044979183163e+1, + -0.1447662821467551808e+2, + 0.15771752289421028692e+2, + -0.11495970033236190488e+2, + 0.31729789367800669275e+1, + 0.62765154139203849226e+1, + -0.13507828807147285843e+2, + 0.15991204003806759104e+2, + -0.1284669640385762257e+2, + 0.51995887822333504147e+1, + 0.42677778894927271836e+1, + -0.1221952689956586724e+2, + 0.1587775511421926744e+2, + -0.13959216268153740614e+2, + 0.71525984890244203029e+1, + 0.21556313052450826184e+1, + -0.10695960652363547538e+2, + 0.15481991620280194155e+2, + -0.14837626133950502449e+2, + 0.89945478637049340875e+1, -0.61558282773532746468, - -0.71486431790067088698e+01, - 0.14758575195634644928e+02, - -0.15473858728180683642e+02, - 0.12405746515228885940e+02, - -0.31951330957797887677e+01, - -0.54985261750797569391e+01, - 0.13970143227774336481e+02, - -0.15755484389656292166e+02, - 0.13566603562207863121e+02, - -0.47519076435411644610e+01, - -0.41336721696303317941e+01, - 0.13258804050121671736e+02, - -0.15884067319395327900e+02, - 0.14393611604859621877e+02, - -0.59003598174346549854e+01, - -0.31204553939388963713e+01, - 0.12727454229882624759e+02, - -0.15959809869336023525e+02, - 0.14949427231316120057e+02, - -0.66474475462936384318e+01, - -0.25037449133511215926e+01, - 0.12450229094831202659e+02, - -0.16055109941901338999e+02, - 0.15278030553384255086e+02, - -0.69964412097348649411e+01, - -0.23154493915908322954e+01, - 0.12475067764992907371e+02, - -0.16210926733815728795e+02, - 0.15396762170400535297e+02, - -0.69391009623137742679e+01, - -0.25822555441329955173e+01, - 0.12817601777955349718e+02, - -0.16455646699208223538e+02, - 0.15224569745062797921e+02, - -0.66362296194133048033e+01, - -0.38141811611751190725e+01, - 0.12258099686983532806e+02, - -0.19571266731508231373e+02, - 0.86228898928810480129e+01, - -0.18288392129690212329e+02, - -0.28775003265070161262e+02, - -0.27990705125392086217e+02, - -0.85132857338236462397e+02, - -0.85588288022727596172e+02, - -0.13465442170884622897e+03, - -0.15580669076425792241e+03, - -0.12712118151518366460e+03, - -0.11758757156164828928e+03, - -0.14442953943947360429e+02, - 0.51908608243738591170e+02, - 0.97681417242067880125e+02, - 0.11492514291800074488e+03, - 0.13456380818732316840e+02, - -0.44968976200074735061e+02, - -0.97149975371212349273e+02, - -0.71059463266945229520e+02, - 0.45296778986151274182e+02, - 0.70886325914109718838e+02, - 0.68107046245268477946e+02, - -0.23708762348112312424e+02, - -0.96341192643410408891e+02, - -0.25441372943418993913e+02, - 0.30597567412675594767e+02, - 0.80880993334981369003e+02, - 0.18013454467686528915e+02, - -0.83005520100677443907e+02, - -0.34292207736573431021e+02, - 0.22503653691138218562e+02, - 0.69790817386040203019e+02, - 0.13672727864565267453e+02, - -0.84388192543377172683e+02, - -0.14728178643657074076e+02, - 0.44355213587138422326e+02, - 0.44967491758937583768e+02, - -0.18763897434780087536e+02, - -0.77267085720805781079e+02, - 0.30646394183245547538e+02, - 0.58974766979936347866e+02, - -0.13532982108189976600e+02, - -0.42465011890127577487e+02, - -0.23454489179370334284e+02, - 0.67101007759237958794e+02, - 0.15692541438802832587e+02, - -0.70841162437238963889e+02, - 0.48252341008415147172e+01, - 0.40188075791974227968e+02, - 0.16368339596876690933e+02, - -0.42859432164086719297e+02, - -0.29472094275192695534e+02, - 0.70563714704552111812e+02, - -0.22833515239405954844e+01, - -0.57612068958745020097e+02, - 0.17499283427497161370e+02, - 0.31873985970202280527e+02, - 0.26804324734422011467e+01, - -0.48280470464401282982e+02, - 0.79001861870936149757e+01, - 0.61667276084108877399e+02, - -0.47418925376711982267e+02, - -0.27538524076033361609e+02, - 0.48531253214262349616e+02, - 0.16320669135335312827e+01, - -0.26792983893915021554e+02, - -0.13561083913990911398e+02, - 0.41801099776844587552e+02, - 0.27375302688978124799e+01, - -0.59868856546109604722e+02, - 0.43024359539878844316e+02, - 0.26922789666933311992e+02, - -0.54679225477890639695e+02, - 0.12733770832067735412e+02, - 0.27640302156898872710e+02, - -0.10360640093672694562e+02, - -0.24812906906792118633e+02, - 0.12062264068031621989e+02, - 0.36679637577416350780e+02, - -0.47882123902936726267e+02, - -0.40682701556892109096e+01, - 0.57400251892614704730e+02, - -0.45950810954024120747e+02, - -0.12813486716727021886e+02, - 0.45748909926026293249e+02, - -0.21112551912403986876e+02, - -0.16636705991471799848e+02, - 0.15388112362674343458e+02, - 0.14683485136043323394e+02, - -0.20968711242072473055e+02, - -0.13794531787768562481e+02, - 0.45578938648544699674e+02, - -0.26801567449347803773e+02, - -0.28559169880408962428e+02, - 0.59152256122274501138e+02, - -0.29492808827556590501e+02, - -0.27748754476255097501e+02, - 0.51839152080238640963e+02, - -0.23130481670032946084e+02, - -0.19496758577257743639e+02, - 0.29666682697242080735e+02, - -0.58483220237513391382e+01, - -0.14008957092714286574e+02, - 0.42074768207212578375e+01, - 0.18055982435972769196e+02, - -0.17029961515019319762e+02, - -0.13644247005162938535e+02, - 0.40259204438293942019e+02, - -0.27371291902389536688e+02, - -0.18606753415939969898e+02, - 0.52916914795667551630e+02, - -0.38838395592488389241e+02, - -0.12417759622251374196e+02, - 0.52579138746146604433e+02, - -0.44500509545916393961e+02, - -0.16884922862553704004e+01, - 0.41470256390786218503e+02, - -0.40563070620429705571e+02, - 0.60656122089212756165e+01, - 0.25903587498042885073e+02, - -0.27991112760047311525e+02, - 0.60045199721343243127e+01, - 0.13093681792138260889e+02, - -0.11591135871805242630e+02, - -0.23559168492784290372e+01, - 0.81150010223420334654e+01, - 0.24742525480295332052e+01, - -0.15649716436970065203e+02, - 0.12280908034020496800e+02, - 0.93068185735751232102e+01, - -0.28622780286172424979e+02, - 0.23289145723842988644e+02, - 0.69117100157805060334e+01, - -0.36410529015620511473e+02, - 0.36660518693944936786e+02, - -0.35558675377088455605e+01, - -0.36179778562015926013e+02, - 0.47614056479489484275e+02, - -0.18681914643026598100e+02, - -0.27701495194579127457e+02, - 0.52598906839349162112e+02, - -0.34209660549702988419e+02, - -0.12947399224706995113e+02, - 0.50059080995206613807e+02, - -0.46358603459999137897e+02, - 0.48743814465525963087e+01, - 0.40408261539065961188e+02, - -0.52651382111269889208e+02, - 0.22365976783785363580e+02, - 0.25469568230834585876e+02, - -0.52148246679322248553e+02, - 0.36719599811018078128e+02, - 0.77294379373682318146e+01, - -0.45220222184219480255e+02, - 0.46089475566608719248e+02, - -0.10304313406929303198e+02, - -0.33099654037134435214e+02, - 0.49601043061424626046e+02, - -0.26489038188779350236e+02, - -0.17436174324397089919e+02, - 0.47151024790272479947e+02, - -0.39172251306626080236e+02, - 0.11732535912882033458e+02, - 0.26720149725128948148e+02, - -0.52930591532085294659e+02, - 0.39104185195454633117e+02, - 0.97341704534687245598e+01, - -0.48232525087836904731e+02, - 0.49954964318563305881e+02, - -0.72316300218883995399e+01, - -0.39199718321164610302e+02, - 0.55844932053739597677e+02, - -0.22480963706940727320e+02, - -0.27639990517594007713e+02, - 0.57341802898257014931e+02, - -0.35048255246482490577e+02, - -0.15172820281916443719e+02, - 0.55438280676051881812e+02, - -0.44616232080917768599e+02, - -0.30532453620688371210e+01, - 0.51278817228206136747e+02, - -0.51353348135877716629e+02, - 0.78762509314461714993e+01, - 0.45964657489454943118e+02, - -0.55731605520220064420e+02, - 0.17145106582641084003e+02, - 0.40442576279829275165e+02, - -0.58363573180814050545e+02, - 0.24565274177625081364e+02, - 0.35463697439488079510e+02, - -0.59876271501482435156e+02, - 0.30124830005061866700e+02, - 0.31590472071844565960e+02, - -0.60823515112204624700e+02, - 0.33885391273463632444e+02, - 0.29228889186033192971e+02, - -0.61628442028099662764e+02, - 0.35894440735891230077e+02, - 0.28665633014347367435e+02, - -0.62543617940091408514e+02, - 0.36117470340892253944e+02, - 0.30093337160177700440e+02, - -0.63616065236654442572e+02, - 0.34393018128604971650e+02, - 0.33609755986556969276e+02, - -0.64648010411923451102e+02, - 0.30416235629076378899e+02, - 0.39178492662023138848e+02, - -0.65151185549492680593e+02, - 0.23763057257994120164e+02, - 0.46541467944066766904e+02, - -0.64304268630751280966e+02, - 0.13975852378960214040e+02, - 0.55080119893510342877e+02, - -0.60941012080617056768e+02, + -0.71486431790067088698e+1, + 0.14758575195634644928e+2, + -0.15473858728180683642e+2, + 0.1240574651522888594e+2, + -0.31951330957797887677e+1, + -0.54985261750797569391e+1, + 0.13970143227774336481e+2, + -0.15755484389656292166e+2, + 0.13566603562207863121e+2, + -0.4751907643541164461e+1, + -0.41336721696303317941e+1, + 0.13258804050121671736e+2, + -0.158840673193953279e+2, + 0.14393611604859621877e+2, + -0.59003598174346549854e+1, + -0.31204553939388963713e+1, + 0.12727454229882624759e+2, + -0.15959809869336023525e+2, + 0.14949427231316120057e+2, + -0.66474475462936384318e+1, + -0.25037449133511215926e+1, + 0.12450229094831202659e+2, + -0.16055109941901338999e+2, + 0.15278030553384255086e+2, + -0.69964412097348649411e+1, + -0.23154493915908322954e+1, + 0.12475067764992907371e+2, + -0.16210926733815728795e+2, + 0.15396762170400535297e+2, + -0.69391009623137742679e+1, + -0.25822555441329955173e+1, + 0.12817601777955349718e+2, + -0.16455646699208223538e+2, + 0.15224569745062797921e+2, + -0.66362296194133048033e+1, + -0.38141811611751190725e+1, + 0.12258099686983532806e+2, + -0.19571266731508231373e+2, + 0.86228898928810480129e+1, + -0.18288392129690212329e+2, + -0.28775003265070161262e+2, + -0.27990705125392086217e+2, + -0.85132857338236462397e+2, + -0.85588288022727596172e+2, + -0.13465442170884622897e+3, + -0.15580669076425792241e+3, + -0.1271211815151836646e+3, + -0.11758757156164828928e+3, + -0.14442953943947360429e+2, + 0.5190860824373859117e+2, + 0.97681417242067880125e+2, + 0.11492514291800074488e+3, + 0.1345638081873231684e+2, + -0.44968976200074735061e+2, + -0.97149975371212349273e+2, + -0.7105946326694522952e+2, + 0.45296778986151274182e+2, + 0.70886325914109718838e+2, + 0.68107046245268477946e+2, + -0.23708762348112312424e+2, + -0.96341192643410408891e+2, + -0.25441372943418993913e+2, + 0.30597567412675594767e+2, + 0.80880993334981369003e+2, + 0.18013454467686528915e+2, + -0.83005520100677443907e+2, + -0.34292207736573431021e+2, + 0.22503653691138218562e+2, + 0.69790817386040203019e+2, + 0.13672727864565267453e+2, + -0.84388192543377172683e+2, + -0.14728178643657074076e+2, + 0.44355213587138422326e+2, + 0.44967491758937583768e+2, + -0.18763897434780087536e+2, + -0.77267085720805781079e+2, + 0.30646394183245547538e+2, + 0.58974766979936347866e+2, + -0.135329821081899766e+2, + -0.42465011890127577487e+2, + -0.23454489179370334284e+2, + 0.67101007759237958794e+2, + 0.15692541438802832587e+2, + -0.70841162437238963889e+2, + 0.48252341008415147172e+1, + 0.40188075791974227968e+2, + 0.16368339596876690933e+2, + -0.42859432164086719297e+2, + -0.29472094275192695534e+2, + 0.70563714704552111812e+2, + -0.22833515239405954844e+1, + -0.57612068958745020097e+2, + 0.1749928342749716137e+2, + 0.31873985970202280527e+2, + 0.26804324734422011467e+1, + -0.48280470464401282982e+2, + 0.79001861870936149757e+1, + 0.61667276084108877399e+2, + -0.47418925376711982267e+2, + -0.27538524076033361609e+2, + 0.48531253214262349616e+2, + 0.16320669135335312827e+1, + -0.26792983893915021554e+2, + -0.13561083913990911398e+2, + 0.41801099776844587552e+2, + 0.27375302688978124799e+1, + -0.59868856546109604722e+2, + 0.43024359539878844316e+2, + 0.26922789666933311992e+2, + -0.54679225477890639695e+2, + 0.12733770832067735412e+2, + 0.2764030215689887271e+2, + -0.10360640093672694562e+2, + -0.24812906906792118633e+2, + 0.12062264068031621989e+2, + 0.3667963757741635078e+2, + -0.47882123902936726267e+2, + -0.40682701556892109096e+1, + 0.5740025189261470473e+2, + -0.45950810954024120747e+2, + -0.12813486716727021886e+2, + 0.45748909926026293249e+2, + -0.21112551912403986876e+2, + -0.16636705991471799848e+2, + 0.15388112362674343458e+2, + 0.14683485136043323394e+2, + -0.20968711242072473055e+2, + -0.13794531787768562481e+2, + 0.45578938648544699674e+2, + -0.26801567449347803773e+2, + -0.28559169880408962428e+2, + 0.59152256122274501138e+2, + -0.29492808827556590501e+2, + -0.27748754476255097501e+2, + 0.51839152080238640963e+2, + -0.23130481670032946084e+2, + -0.19496758577257743639e+2, + 0.29666682697242080735e+2, + -0.58483220237513391382e+1, + -0.14008957092714286574e+2, + 0.42074768207212578375e+1, + 0.18055982435972769196e+2, + -0.17029961515019319762e+2, + -0.13644247005162938535e+2, + 0.40259204438293942019e+2, + -0.27371291902389536688e+2, + -0.18606753415939969898e+2, + 0.5291691479566755163e+2, + -0.38838395592488389241e+2, + -0.12417759622251374196e+2, + 0.52579138746146604433e+2, + -0.44500509545916393961e+2, + -0.16884922862553704004e+1, + 0.41470256390786218503e+2, + -0.40563070620429705571e+2, + 0.60656122089212756165e+1, + 0.25903587498042885073e+2, + -0.27991112760047311525e+2, + 0.60045199721343243127e+1, + 0.13093681792138260889e+2, + -0.1159113587180524263e+2, + -0.23559168492784290372e+1, + 0.81150010223420334654e+1, + 0.24742525480295332052e+1, + -0.15649716436970065203e+2, + 0.122809080340204968e+2, + 0.93068185735751232102e+1, + -0.28622780286172424979e+2, + 0.23289145723842988644e+2, + 0.69117100157805060334e+1, + -0.36410529015620511473e+2, + 0.36660518693944936786e+2, + -0.35558675377088455605e+1, + -0.36179778562015926013e+2, + 0.47614056479489484275e+2, + -0.186819146430265981e+2, + -0.27701495194579127457e+2, + 0.52598906839349162112e+2, + -0.34209660549702988419e+2, + -0.12947399224706995113e+2, + 0.50059080995206613807e+2, + -0.46358603459999137897e+2, + 0.48743814465525963087e+1, + 0.40408261539065961188e+2, + -0.52651382111269889208e+2, + 0.2236597678378536358e+2, + 0.25469568230834585876e+2, + -0.52148246679322248553e+2, + 0.36719599811018078128e+2, + 0.77294379373682318146e+1, + -0.45220222184219480255e+2, + 0.46089475566608719248e+2, + -0.10304313406929303198e+2, + -0.33099654037134435214e+2, + 0.49601043061424626046e+2, + -0.26489038188779350236e+2, + -0.17436174324397089919e+2, + 0.47151024790272479947e+2, + -0.39172251306626080236e+2, + 0.11732535912882033458e+2, + 0.26720149725128948148e+2, + -0.52930591532085294659e+2, + 0.39104185195454633117e+2, + 0.97341704534687245598e+1, + -0.48232525087836904731e+2, + 0.49954964318563305881e+2, + -0.72316300218883995399e+1, + -0.39199718321164610302e+2, + 0.55844932053739597677e+2, + -0.2248096370694072732e+2, + -0.27639990517594007713e+2, + 0.57341802898257014931e+2, + -0.35048255246482490577e+2, + -0.15172820281916443719e+2, + 0.55438280676051881812e+2, + -0.44616232080917768599e+2, + -0.3053245362068837121e+1, + 0.51278817228206136747e+2, + -0.51353348135877716629e+2, + 0.78762509314461714993e+1, + 0.45964657489454943118e+2, + -0.5573160552022006442e+2, + 0.17145106582641084003e+2, + 0.40442576279829275165e+2, + -0.58363573180814050545e+2, + 0.24565274177625081364e+2, + 0.3546369743948807951e+2, + -0.59876271501482435156e+2, + 0.301248300050618667e+2, + 0.3159047207184456596e+2, + -0.608235151122046247e+2, + 0.33885391273463632444e+2, + 0.29228889186033192971e+2, + -0.61628442028099662764e+2, + 0.35894440735891230077e+2, + 0.28665633014347367435e+2, + -0.62543617940091408514e+2, + 0.36117470340892253944e+2, + 0.3009333716017770044e+2, + -0.63616065236654442572e+2, + 0.3439301812860497165e+2, + 0.33609755986556969276e+2, + -0.64648010411923451102e+2, + 0.30416235629076378899e+2, + 0.39178492662023138848e+2, + -0.65151185549492680593e+2, + 0.23763057257994120164e+2, + 0.46541467944066766904e+2, + -0.64304268630751280966e+2, + 0.1397585237896021404e+2, + 0.55080119893510342877e+2, + -0.60941012080617056768e+2, 0.73899183646145638615, - 0.63639048042231024738e+02, - -0.53620968393255573403e+02, - -0.15828623271044035548e+02, - 0.70359407725879819395e+02, - -0.40860770179560503834e+02, - -0.34760974736985005507e+02, - 0.72624530228636572815e+02, - -0.21616315432743490987e+02, - -0.53774887909678930953e+02, - 0.67290699508943603746e+02, - 0.39275215512064471923e+01, - -0.68929603283656248891e+02, - 0.51428707429024569819e+02, - 0.33333471152982646402e+02, - -0.74778403137181072680e+02, - 0.23757796328543729913e+02, - 0.61005357456799011118e+02, - -0.65525177635043874602e+02, - -0.13316243519984213961e+02, - 0.78159532094253947321e+02, - -0.37628232731294509961e+02, - -0.51768233111819554892e+02, - 0.74786584340436377261e+02, - 0.63181139077159667039e+01, - -0.77755501832512933902e+02, - 0.44506531475508793960e+02, - 0.54017103984902576030e+02, - -0.75459201859332296181e+02, - -0.83085398602643198984e+01, - 0.83759756450878768419e+02, - -0.36406248832683353100e+02, - -0.63036214286668041495e+02, - 0.72965168780348648170e+02, - 0.28309151855636958572e+02, - -0.86452842223390049980e+02, - 0.15927354669286536648e+02, - 0.82555343426322423284e+02, - -0.52321132114479311781e+02, - -0.58533047248309451049e+02, - 0.80714645616374212977e+02, - 0.28093463922053096837e+02, - -0.91433616255329724254e+02, - 0.85602580573648427986e+01, - 0.92108129021901333999e+02, - -0.38988026222412081268e+02, - -0.78926993858787440672e+02, - 0.66669600425162769852e+02, - 0.62673562536341172802e+02, - -0.83552116653402379143e+02, - -0.40273178307924879960e+02, - 0.96934047563168832085e+02, - 0.21572884768804346578e+02, - -0.10144369855266802460e+03, - -0.17979067134366695235e+01, - 0.10580006754477174979e+03, - -0.10995831093204492035e+02, - -0.10504159789898757538e+03, - 0.22983551363323662997e+02, - 0.10756606194690692746e+03, - -0.26953690826020494598e+02, - -0.10766279229425667552e+03, - 0.29318158982851688421e+02, - 0.11266108359765860314e+03, - -0.22642373607432560334e+02, - -0.11549328058864593061e+03, - 0.12847490402890484162e+02, - 0.12167954544246741477e+03, - 0.78421536699556977368e+01, - -0.12175945526570261279e+03, - -0.33108877935056483466e+02, - 0.11822957305573650899e+03, - 0.68621972848496156416e+02, - -0.98520855976057362113e+02, - -0.10313139750014262574e+03, - 0.63498345240630577280e+02, - 0.13373515289022429897e+03, - -0.37103422580718157242e+01, - -0.13811540456538432409e+03, - -0.67520701732334273970e+02, - 0.10533074918301936407e+03, - 0.13454241771829472896e+03, - -0.20339636301726500278e+02, - -0.15164845585562554220e+03, - -0.89289824045010206532e+02, - 0.87936749525226218793e+02, - 0.16599987487503557304e+03, - 0.55575743672954722285e+02, - -0.11918396403536728201e+03, - -0.17328844652205754073e+03, - -0.54818511636682842436e+02, - 0.12057025535239939984e+03, - 0.19587828453917180127e+03, - 0.11216476072949076581e+03, - -0.60188160619586966504e+02, - -0.19621814331901336459e+03, - -0.21203873929906220042e+03, - -0.10763082923245474376e+03, - 0.54790903281301176264e+02, - 0.20128823124948146983e+03, - 0.28544185984087408769e+03, - 0.29916716530027184717e+03, - 0.26133570832892610269e+03, - 0.19952037452272512041e+03, - 0.13646340071596810617e+03, - 0.84874656368074383295e+02, - 0.48481679604604863698e+02, - 0.25612290675931681960e+02, - 0.12578188185366302676e+02, - 0.57646053971187010134e+01, - 0.24728498313519624574e+01, + 0.63639048042231024738e+2, + -0.53620968393255573403e+2, + -0.15828623271044035548e+2, + 0.70359407725879819395e+2, + -0.40860770179560503834e+2, + -0.34760974736985005507e+2, + 0.72624530228636572815e+2, + -0.21616315432743490987e+2, + -0.53774887909678930953e+2, + 0.67290699508943603746e+2, + 0.39275215512064471923e+1, + -0.68929603283656248891e+2, + 0.51428707429024569819e+2, + 0.33333471152982646402e+2, + -0.7477840313718107268e+2, + 0.23757796328543729913e+2, + 0.61005357456799011118e+2, + -0.65525177635043874602e+2, + -0.13316243519984213961e+2, + 0.78159532094253947321e+2, + -0.37628232731294509961e+2, + -0.51768233111819554892e+2, + 0.74786584340436377261e+2, + 0.63181139077159667039e+1, + -0.77755501832512933902e+2, + 0.4450653147550879396e+2, + 0.5401710398490257603e+2, + -0.75459201859332296181e+2, + -0.83085398602643198984e+1, + 0.83759756450878768419e+2, + -0.364062488326833531e+2, + -0.63036214286668041495e+2, + 0.7296516878034864817e+2, + 0.28309151855636958572e+2, + -0.8645284222339004998e+2, + 0.15927354669286536648e+2, + 0.82555343426322423284e+2, + -0.52321132114479311781e+2, + -0.58533047248309451049e+2, + 0.80714645616374212977e+2, + 0.28093463922053096837e+2, + -0.91433616255329724254e+2, + 0.85602580573648427986e+1, + 0.92108129021901333999e+2, + -0.38988026222412081268e+2, + -0.78926993858787440672e+2, + 0.66669600425162769852e+2, + 0.62673562536341172802e+2, + -0.83552116653402379143e+2, + -0.4027317830792487996e+2, + 0.96934047563168832085e+2, + 0.21572884768804346578e+2, + -0.1014436985526680246e+3, + -0.17979067134366695235e+1, + 0.10580006754477174979e+3, + -0.10995831093204492035e+2, + -0.10504159789898757538e+3, + 0.22983551363323662997e+2, + 0.10756606194690692746e+3, + -0.26953690826020494598e+2, + -0.10766279229425667552e+3, + 0.29318158982851688421e+2, + 0.11266108359765860314e+3, + -0.22642373607432560334e+2, + -0.11549328058864593061e+3, + 0.12847490402890484162e+2, + 0.12167954544246741477e+3, + 0.78421536699556977368e+1, + -0.12175945526570261279e+3, + -0.33108877935056483466e+2, + 0.11822957305573650899e+3, + 0.68621972848496156416e+2, + -0.98520855976057362113e+2, + -0.10313139750014262574e+3, + 0.6349834524063057728e+2, + 0.13373515289022429897e+3, + -0.37103422580718157242e+1, + -0.13811540456538432409e+3, + -0.6752070173233427397e+2, + 0.10533074918301936407e+3, + 0.13454241771829472896e+3, + -0.20339636301726500278e+2, + -0.1516484558556255422e+3, + -0.89289824045010206532e+2, + 0.87936749525226218793e+2, + 0.16599987487503557304e+3, + 0.55575743672954722285e+2, + -0.11918396403536728201e+3, + -0.17328844652205754073e+3, + -0.54818511636682842436e+2, + 0.12057025535239939984e+3, + 0.19587828453917180127e+3, + 0.11216476072949076581e+3, + -0.60188160619586966504e+2, + -0.19621814331901336459e+3, + -0.21203873929906220042e+3, + -0.10763082923245474376e+3, + 0.54790903281301176264e+2, + 0.20128823124948146983e+3, + 0.28544185984087408769e+3, + 0.29916716530027184717e+3, + 0.26133570832892610269e+3, + 0.19952037452272512041e+3, + 0.13646340071596810617e+3, + 0.84874656368074383295e+2, + 0.48481679604604863698e+2, + 0.2561229067593168196e+2, + 0.12578188185366302676e+2, + 0.57646053971187010134e+1, + 0.24728498313519624574e+1, 0.99519657123802629517, 0.37643220473571875617, 0.13401025748247366587, - 0.44949404109467933077e-01, - 0.14216189786237422993e-01, - 0.42417848481242871259e-02, - 0.11944252703678141184e-02, - 0.31744435007385467555e-03, - 0.79624800611630833030e-04, - 0.18845143521172824370e-04, - 0.42067377229976457117e-05, - 0.88519242354660661545e-06, - 0.17544999759235988058e-06, - 0.32726002708936194838e-07, - 0.57382088048437018765e-08, - 0.94457669290838109463e-09, - 0.14575241651194785801e-09, + 0.44949404109467933077e-1, + 0.14216189786237422993e-1, + 0.42417848481242871259e-2, + 0.11944252703678141184e-2, + 0.31744435007385467555e-3, + 0.7962480061163083303e-4, + 0.1884514352117282437e-4, + 0.42067377229976457117e-5, + 0.88519242354660661545e-6, + 0.17544999759235988058e-6, + 0.32726002708936194838e-7, + 0.57382088048437018765e-8, + 0.94457669290838109463e-9, + 0.14575241651194785801e-9, 0.21045009546748466862e-10, 0.28376542059324942495e-11, 0.35648300413566988989e-12, @@ -22462,306 +22464,306 @@ function ESERK4ConstantCache(zprev) 0.44998994671769607791e-14, 0.44918244288135477544e-15, 0.41220404153432356197e-16, - 0.34609758042625714060e-17, + 0.3460975804262571406e-17, 0.26439042303980208927e-18, - 0.18254160379849375480e-19, + 0.1825416037984937548e-19, 0.11299810330494218195e-20, 0.62105665495269207827e-22, 0.29940841992589139869e-23, 0.12466427130429185529e-24, - 0.43925581985733106070e-26, + 0.4392558198573310607e-26, 0.12736756736808377847e-27, 0.29183394989022861173e-29, 0.49546658967674641038e-31, 0.55415729740004106348e-33, 0.30629557733336968134e-35, - -0.64196991338683184053e-02, - 0.11164329060031081414e-01, - -0.54814675808227955253e-02, - -0.18769196483900906468e-03, - 0.45358076380122049065e-02, - -0.38118990335752060868e-02, - -0.84977452608878535460e-03, - 0.95336614008245963020e-02, - -0.17671143208485402820e-01, - 0.23536323498658796166e-01, - -0.23146980534869000812e-01, - 0.17601829493396899118e-01, - -0.69455555324221020241e-02, - -0.40078219163994215773e-02, - 0.13213840434141593469e-01, - -0.16323557928800629113e-01, - 0.14030266014451822990e-01, - -0.59447454370045449412e-02, - -0.35494692463071656104e-02, - 0.12768031859268148820e-01, - -0.17554706901443600103e-01, - 0.18526924291187778920e-01, - -0.14886256117833325183e-01, - 0.10284477643033324706e-01, - -0.54581673963653666234e-02, - 0.35894660366187648021e-02, - -0.32869457265697118314e-02, - 0.49702684435566323040e-02, - -0.51025165898666274139e-02, - 0.35196584846446535635e-02, - 0.20920388121693140639e-02, - -0.94104032209259714375e-02, - 0.18084431341897733853e-01, - -0.24101098058375205330e-01, - 0.27113327710459555336e-01, - -0.24812343347934872478e-01, - 0.19504793920330474460e-01, - -0.11489605250258039942e-01, - 0.43211138779955544226e-02, - 0.14315003948783499004e-02, - -0.49277127142653576880e-02, - 0.49570871247038321081e-02, - -0.85702494899705539827e-02, - 0.20905689449379491821e-02, - -0.17536155738932912573e-01, - -0.69997420609909672545e-02, - -0.38330095294659541350e-01, - -0.30736447885336078828e-01, - -0.65816370924771452899e-01, - -0.60720964272224120517e-01, - -0.78176575504289982921e-01, - -0.51179278099406533276e-01, - -0.43999400148876217920e-01, - 0.23980009581091293186e-01, - 0.17395808281365818249e-01, - 0.78088955592615555412e-01, - 0.13951183892969917441e-01, - 0.14123940895619102945e-01, - -0.45087666663368032582e-01, - -0.45836137144961992818e-01, - -0.10365468181971315698e-01, - 0.19606848745758166663e-01, - 0.43461423945228762344e-01, - 0.24945573887206730357e-01, - -0.33303485825942447107e-01, - -0.28034729471186150412e-01, - -0.20160894562769818977e-01, - 0.27403481192045199555e-01, - 0.41791824186916778916e-01, - -0.11756417181182168136e-01, - -0.25995905896948213326e-01, - -0.21739776230684713237e-01, - 0.85617640369711547899e-02, - 0.52280461461671819123e-01, - -0.23082563604839883425e-01, - -0.13867657146829618156e-01, - -0.23381211554236402267e-01, - 0.20655862211528347450e-01, - 0.38522421668858872201e-01, - -0.31641063563260983516e-01, - -0.13963168165491576800e-01, - -0.52979273578660970173e-02, - 0.32822718319827630384e-01, - 0.49840289174800716729e-02, - -0.28733543337611532759e-01, - -0.13269064656722354134e-01, - 0.33505437764858009286e-01, - 0.37077039718290960568e-02, - -0.14051260132899026298e-01, - -0.21740008351110649137e-01, - 0.22928771438575534097e-01, - 0.17974315352818862057e-01, - -0.20968347045653326632e-01, - -0.18234770534381574553e-01, - 0.22344288388647225857e-01, - 0.16083562491815209250e-01, - -0.27045966292485391219e-01, - 0.12425126836256657117e-02, - -0.13641970143478409933e-02, - 0.36134750898242418149e-01, - -0.41672512949075229960e-01, - -0.35797202658187983904e-03, - 0.29982882184453905905e-01, - -0.14309601280577715493e-01, - -0.23708435226676505617e-02, - -0.14970015954138710459e-01, - 0.31108693124176377276e-01, - -0.78775412546015031318e-02, - -0.24947173638561005726e-01, - 0.18217386078322336807e-01, - 0.15489629793245968462e-01, - -0.23419618690910661701e-01, - -0.32924246624834994403e-02, - 0.21167541363707208235e-01, - -0.76188775275591105740e-02, - -0.61588145949499437798e-02, - -0.89213158703653292619e-02, - 0.30849856013278123545e-01, - -0.21619599291168394711e-01, - -0.11650118626767576313e-01, - 0.25738334779378129608e-01, - -0.45799862959215479827e-02, - -0.18711819927243064643e-01, - 0.11172680565839671063e-01, - 0.15000637140430537683e-01, - -0.24392345641678483958e-01, - 0.10264281249995035189e-01, - 0.96252553287915686110e-04, - 0.10524494723920800598e-01, - -0.22766705101918440629e-01, - 0.99552907185146699565e-02, - 0.20886746144449745005e-01, - -0.34820940975332267953e-01, - 0.14158483531627205285e-01, - 0.18579470263704045419e-01, - -0.29102029058889648111e-01, - 0.12752959609851989564e-01, - 0.41748337834799364998e-02, - -0.67649006176474758226e-03, - -0.13905528138462857832e-01, - 0.16327442712023930438e-01, - -0.16839052074424612927e-02, - -0.11240745020875440169e-01, - 0.66785899885898024342e-02, - 0.65041965291658563816e-02, - -0.63957183101927298982e-02, - -0.12279042248533980283e-01, - 0.29052636633665921556e-01, - -0.21107326367788486338e-01, - -0.86301654869016270616e-02, - 0.32722790086006564581e-01, - -0.28311386268515693204e-01, - 0.11057090329380527514e-02, - 0.22179425266478591805e-01, - -0.22554894759760999584e-01, - 0.65716403790934624710e-02, - 0.46586262976937003327e-02, - 0.97719183395375821210e-04, - -0.11798670550894693396e-01, - 0.14252323341891399641e-01, - -0.31261354736728287629e-02, - -0.10644249561384433456e-01, - 0.15161175781442529434e-01, - -0.11173178851746696366e-01, - 0.94495518777681485750e-02, - -0.15845215206373459288e-01, - 0.22617138809637706010e-01, - -0.16554428107024739270e-01, - -0.47243829576559441888e-02, - 0.27137917649150033322e-01, - -0.32438671680877460834e-01, - 0.16597055380066425695e-01, - 0.50922659344684153074e-02, - -0.12034063325957066251e-01, - -0.17980428937109450057e-02, - 0.21940619557023092329e-01, - -0.27347005246047093041e-01, - 0.10937748507887536456e-01, - 0.13097284196169808532e-01, - -0.22090322175011837397e-01, - 0.58802568218910998207e-02, - 0.23627282537836882120e-01, - -0.42785989123218487462e-01, - 0.36844787075598676995e-01, - -0.12155015682594586673e-01, - -0.10342462720954490735e-01, - 0.13896388334728041261e-01, - 0.56466959552276439966e-04, - -0.14461784820604393562e-01, - 0.12738024366372479798e-01, - 0.63315915136782962083e-02, - -0.27664217597766146972e-01, - 0.33195813759968301193e-01, - -0.17461157620105423327e-01, - -0.78174200124479526625e-02, - 0.23672566413715949440e-01, - -0.19515664958749776026e-01, - 0.13036408668244399249e-02, - 0.14269428569958240993e-01, - -0.14208281532611811981e-01, - 0.17869229473484717075e-01, - 0.65887322684281768304e-01, + -0.64196991338683184053e-2, + 0.11164329060031081414e-1, + -0.54814675808227955253e-2, + -0.18769196483900906468e-3, + 0.45358076380122049065e-2, + -0.38118990335752060868e-2, + -0.8497745260887853546e-3, + 0.9533661400824596302e-2, + -0.1767114320848540282e-1, + 0.23536323498658796166e-1, + -0.23146980534869000812e-1, + 0.17601829493396899118e-1, + -0.69455555324221020241e-2, + -0.40078219163994215773e-2, + 0.13213840434141593469e-1, + -0.16323557928800629113e-1, + 0.1403026601445182299e-1, + -0.59447454370045449412e-2, + -0.35494692463071656104e-2, + 0.1276803185926814882e-1, + -0.17554706901443600103e-1, + 0.1852692429118777892e-1, + -0.14886256117833325183e-1, + 0.10284477643033324706e-1, + -0.54581673963653666234e-2, + 0.35894660366187648021e-2, + -0.32869457265697118314e-2, + 0.4970268443556632304e-2, + -0.51025165898666274139e-2, + 0.35196584846446535635e-2, + 0.20920388121693140639e-2, + -0.94104032209259714375e-2, + 0.18084431341897733853e-1, + -0.2410109805837520533e-1, + 0.27113327710459555336e-1, + -0.24812343347934872478e-1, + 0.1950479392033047446e-1, + -0.11489605250258039942e-1, + 0.43211138779955544226e-2, + 0.14315003948783499004e-2, + -0.4927712714265357688e-2, + 0.49570871247038321081e-2, + -0.85702494899705539827e-2, + 0.20905689449379491821e-2, + -0.17536155738932912573e-1, + -0.69997420609909672545e-2, + -0.3833009529465954135e-1, + -0.30736447885336078828e-1, + -0.65816370924771452899e-1, + -0.60720964272224120517e-1, + -0.78176575504289982921e-1, + -0.51179278099406533276e-1, + -0.4399940014887621792e-1, + 0.23980009581091293186e-1, + 0.17395808281365818249e-1, + 0.78088955592615555412e-1, + 0.13951183892969917441e-1, + 0.14123940895619102945e-1, + -0.45087666663368032582e-1, + -0.45836137144961992818e-1, + -0.10365468181971315698e-1, + 0.19606848745758166663e-1, + 0.43461423945228762344e-1, + 0.24945573887206730357e-1, + -0.33303485825942447107e-1, + -0.28034729471186150412e-1, + -0.20160894562769818977e-1, + 0.27403481192045199555e-1, + 0.41791824186916778916e-1, + -0.11756417181182168136e-1, + -0.25995905896948213326e-1, + -0.21739776230684713237e-1, + 0.85617640369711547899e-2, + 0.52280461461671819123e-1, + -0.23082563604839883425e-1, + -0.13867657146829618156e-1, + -0.23381211554236402267e-1, + 0.2065586221152834745e-1, + 0.38522421668858872201e-1, + -0.31641063563260983516e-1, + -0.139631681654915768e-1, + -0.52979273578660970173e-2, + 0.32822718319827630384e-1, + 0.49840289174800716729e-2, + -0.28733543337611532759e-1, + -0.13269064656722354134e-1, + 0.33505437764858009286e-1, + 0.37077039718290960568e-2, + -0.14051260132899026298e-1, + -0.21740008351110649137e-1, + 0.22928771438575534097e-1, + 0.17974315352818862057e-1, + -0.20968347045653326632e-1, + -0.18234770534381574553e-1, + 0.22344288388647225857e-1, + 0.1608356249181520925e-1, + -0.27045966292485391219e-1, + 0.12425126836256657117e-2, + -0.13641970143478409933e-2, + 0.36134750898242418149e-1, + -0.4167251294907522996e-1, + -0.35797202658187983904e-3, + 0.29982882184453905905e-1, + -0.14309601280577715493e-1, + -0.23708435226676505617e-2, + -0.14970015954138710459e-1, + 0.31108693124176377276e-1, + -0.78775412546015031318e-2, + -0.24947173638561005726e-1, + 0.18217386078322336807e-1, + 0.15489629793245968462e-1, + -0.23419618690910661701e-1, + -0.32924246624834994403e-2, + 0.21167541363707208235e-1, + -0.7618877527559110574e-2, + -0.61588145949499437798e-2, + -0.89213158703653292619e-2, + 0.30849856013278123545e-1, + -0.21619599291168394711e-1, + -0.11650118626767576313e-1, + 0.25738334779378129608e-1, + -0.45799862959215479827e-2, + -0.18711819927243064643e-1, + 0.11172680565839671063e-1, + 0.15000637140430537683e-1, + -0.24392345641678483958e-1, + 0.10264281249995035189e-1, + 0.9625255328791568611e-4, + 0.10524494723920800598e-1, + -0.22766705101918440629e-1, + 0.99552907185146699565e-2, + 0.20886746144449745005e-1, + -0.34820940975332267953e-1, + 0.14158483531627205285e-1, + 0.18579470263704045419e-1, + -0.29102029058889648111e-1, + 0.12752959609851989564e-1, + 0.41748337834799364998e-2, + -0.67649006176474758226e-3, + -0.13905528138462857832e-1, + 0.16327442712023930438e-1, + -0.16839052074424612927e-2, + -0.11240745020875440169e-1, + 0.66785899885898024342e-2, + 0.65041965291658563816e-2, + -0.63957183101927298982e-2, + -0.12279042248533980283e-1, + 0.29052636633665921556e-1, + -0.21107326367788486338e-1, + -0.86301654869016270616e-2, + 0.32722790086006564581e-1, + -0.28311386268515693204e-1, + 0.11057090329380527514e-2, + 0.22179425266478591805e-1, + -0.22554894759760999584e-1, + 0.6571640379093462471e-2, + 0.46586262976937003327e-2, + 0.9771918339537582121e-4, + -0.11798670550894693396e-1, + 0.14252323341891399641e-1, + -0.31261354736728287629e-2, + -0.10644249561384433456e-1, + 0.15161175781442529434e-1, + -0.11173178851746696366e-1, + 0.9449551877768148575e-2, + -0.15845215206373459288e-1, + 0.2261713880963770601e-1, + -0.1655442810702473927e-1, + -0.47243829576559441888e-2, + 0.27137917649150033322e-1, + -0.32438671680877460834e-1, + 0.16597055380066425695e-1, + 0.50922659344684153074e-2, + -0.12034063325957066251e-1, + -0.17980428937109450057e-2, + 0.21940619557023092329e-1, + -0.27347005246047093041e-1, + 0.10937748507887536456e-1, + 0.13097284196169808532e-1, + -0.22090322175011837397e-1, + 0.58802568218910998207e-2, + 0.2362728253783688212e-1, + -0.42785989123218487462e-1, + 0.36844787075598676995e-1, + -0.12155015682594586673e-1, + -0.10342462720954490735e-1, + 0.13896388334728041261e-1, + 0.56466959552276439966e-4, + -0.14461784820604393562e-1, + 0.12738024366372479798e-1, + 0.63315915136782962083e-2, + -0.27664217597766146972e-1, + 0.33195813759968301193e-1, + -0.17461157620105423327e-1, + -0.78174200124479526625e-2, + 0.2367256641371594944e-1, + -0.19515664958749776026e-1, + 0.13036408668244399249e-2, + 0.14269428569958240993e-1, + -0.14208281532611811981e-1, + 0.17869229473484717075e-1, + 0.65887322684281768304e-1, -0.22460349379509161882, 0.28874279615192272042, -0.14855151348678735657, - -0.94025161043475871669e-01, + -0.94025161043475871669e-1, 0.27812647977544890932, -0.25902100646016434915, - 0.98116612591240340291e-01, - 0.64660775736345002529e-01, - -0.74977907475306540541e-01, - -0.36119517993092098429e-01, - 0.15892142766447781010, + 0.98116612591240340291e-1, + 0.64660775736345002529e-1, + -0.74977907475306540541e-1, + -0.36119517993092098429e-1, + 0.1589214276644778101, -0.15288094549979694414, - 0.43777138955864644543e-01, - 0.74069007176501583389e-01, - -0.73368505789357704727e-01, - -0.17517949549229916428e-01, - 0.11388455128371141600, + 0.43777138955864644543e-1, + 0.74069007176501583389e-1, + -0.73368505789357704727e-1, + -0.17517949549229916428e-1, + 0.113884551283711416, -0.10404852009428160187, - 0.25901534068517494125e-01, - 0.43641284105971005214e-01, - -0.18200156202663225063e-01, - -0.37955610585150165170e-01, - 0.44930506753513108076e-01, - 0.51560584959299070318e-01, + 0.25901534068517494125e-1, + 0.43641284105971005214e-1, + -0.18200156202663225063e-1, + -0.3795561058515016517e-1, + 0.44930506753513108076e-1, + 0.51560584959299070318e-1, -0.13719946208533514986, 0.10222995969937571925, - 0.88998039598290556995e-01, + 0.88998039598290556995e-1, -0.26489490953257538441, 0.26414441399975652214, - -0.46467231309222999103e-01, + -0.46467231309222999103e-1, -0.17477140025503815068, 0.19307814226840455674, - 0.35996053736490202235e-01, + 0.35996053736490202235e-1, -0.26014021869675119092, 0.23241921730924416933, - 0.91442094863927139703e-01, + 0.91442094863927139703e-1, -0.41840234469297349351, 0.45889865788099032384, -0.15703386375329433933, -0.18102414329458416109, 0.25692405994235240074, - -0.18467726102757986428e-01, + -0.18467726102757986428e-1, -0.23738910849513933377, 0.25340620414467690535, - -0.20800038993209132854e-01, + -0.20800038993209132854e-1, -0.17560895825047120877, 0.15844113776172946695, - 0.54262619984622312286e-02, - -0.52388220609181274101e-01, - -0.74788001289068345434e-01, - 0.20491391413570897440, + 0.54262619984622312286e-2, + -0.52388220609181274101e-1, + -0.74788001289068345434e-1, + 0.2049139141357089744, -0.10365018514656615389, -0.14295957762463543106, 0.25907473755119048153, - -0.62962174358101447025e-01, + -0.62962174358101447025e-1, -0.20958175511604618113, 0.21329271894326642944, - 0.13960087331727791260, - -0.47355817737718292060, + 0.1396008733172779126, + -0.4735581773771829206, 0.43011765963948611624, - -0.35697634150846251078e-01, + -0.35697634150846251078e-1, -0.27102335032271218651, 0.23331115440282307327, - -0.13034258605154709285e-01, - -0.49810102101829761834e-02, + -0.13034258605154709285e-1, + -0.49810102101829761834e-2, -0.19646969403482159033, 0.30769807835926477058, - -0.95952018356439974789e-01, - -0.17036076542656786170, + -0.95952018356439974789e-1, + -0.1703607654265678617, 0.12445058791983439062, 0.21729877462546240419, -0.37097714025106892644, - 0.96085929352313831364e-01, + 0.96085929352313831364e-1, 0.29220725290274796038, -0.27114009972075070465, -0.11054051298373689105, 0.35265216663996512558, -0.16076812894375591689, - -0.96511064562572662640e-01, - 0.33052306131086076069e-01, + -0.9651106456257266264e-1, + 0.33052306131086076069e-1, 0.18676134851937578607, - -0.49971181955856043555e-01, + -0.49971181955856043555e-1, -0.39620839863187262697, 0.57412702824081462971, - -0.18065084962802002710, + -0.1806508496280200271, -0.25223154416302917546, 0.18893541440467145898, 0.14784701469175542954, @@ -22770,46 +22772,46 @@ function ESERK4ConstantCache(zprev) 0.25530809589056224773, 0.16218630308478473867, -0.33755444530807338088, - -0.39442935466445144810e-01, + -0.3944293546644514481e-1, 0.35509568130175267475, - -0.36255605875950877581e-01, + -0.36255605875950877581e-1, -0.38539812022988972906, 0.22209662134250723886, 0.20043693902550055452, - -0.98567520906118866186e-01, + -0.98567520906118866186e-1, -0.24656802677896472176, - 0.34560735951119365972e-01, + 0.34560735951119365972e-1, 0.52613163512524885324, -0.44823009270526986692, -0.14051687384487857035, - 0.23400149923553048570, + 0.2340014992355304857, 0.17586084934670373481, - -0.68148200355515928250e-01, + -0.6814820035551592825e-1, -0.44377711781894457754, 0.29616108036113225621, 0.34874067306231182339, -0.25942815570159966088, -0.30844357744613509764, 0.16903531819535305702, - 0.27582573248176095460, + 0.2758257324817609546, 0.13660880051382504052, -0.61285152500956230348, - 0.77989210637873437881e-01, + 0.77989210637873437881e-1, 0.38807196984836672682, 0.12243773872218594034, - -0.20709578489647270660, + -0.2070957848964727066, -0.48317617364672532654, 0.30694630535377964708, 0.43643747685198525099, - -0.40310732896174247819e-01, + -0.40310732896174247819e-1, -0.36867549011114569835, -0.35825758300486676422, 0.38273649037479656743, 0.42112133019682673751, - 0.73762977268233984041e-01, + 0.73762977268233984041e-1, -0.54470942519674636628, -0.31399145950500206848, - 0.13612091636792730820, + 0.1361209163679273082, 0.54496816114631185801, 0.41476862298072353363, -0.44728923813003745868, @@ -22817,7 +22819,7 @@ function ESERK4ConstantCache(zprev) -0.57061514249938305454, 0.37614077309742249833, 0.59997234750447936413, - 0.44298364583064309130, + 0.4429836458306430913, 0.20003394547434255601, -0.69138828122343454208, -0.61372293366782104673, @@ -22825,8 +22827,8 @@ function ESERK4ConstantCache(zprev) -0.13457296212681893466, 0.54091859927096530569, 0.76001705857613843786, - 0.10066197478702079149e+01, - 0.10413501589003442138e+01, + 0.10066197478702079149e+1, + 0.10413501589003442138e+1, 0.65036368633670149642, 0.72694751481900821144, 0.31070283635308676429, @@ -22835,63 +22837,63 @@ function ESERK4ConstantCache(zprev) -0.16155891498495203451, 0.26913056171917587589, -0.14390038879340930067, - 0.40129203368617652470e-01, + 0.4012920336861765247e-1, 0.10195932017542437553, -0.18924114498256738859, 0.20945928209187272828, -0.15236956455924879905, - 0.45358513088521262846e-01, - 0.69958039358652884809e-01, + 0.45358513088521262846e-1, + 0.69958039358652884809e-1, -0.15057022265526293081, 0.16924394424244626478, -0.12425350316392660965, - 0.38049068436668290194e-01, - 0.52170559892766983634e-01, + 0.38049068436668290194e-1, + 0.52170559892766983634e-1, -0.11028246220147287782, - 0.11453957159276347000, - -0.65773303047473682947e-01, - -0.14743750450820009706e-01, - 0.94101705957821107917e-01, + 0.11453957159276347, + -0.65773303047473682947e-1, + -0.14743750450820009706e-1, + 0.94101705957821107917e-1, -0.14166142736334352836, 0.14032231994674942976, - -0.92995654071524963546e-01, - 0.20101052731400372020e-01, - 0.48628239487048814660e-01, - -0.86417847101842679147e-01, - 0.79242843587882152989e-01, - -0.31185013647431855666e-01, - -0.37997722446996923251e-01, + -0.92995654071524963546e-1, + 0.2010105273140037202e-1, + 0.4862823948704881466e-1, + -0.86417847101842679147e-1, + 0.79242843587882152989e-1, + -0.31185013647431855666e-1, + -0.37997722446996923251e-1, 0.10037143062083360434, -0.13077527625977042325, 0.11573866505053262421, - -0.58408035487060104562e-01, - -0.23269915532307255956e-01, - 0.10311228514281456370, + -0.58408035487060104562e-1, + -0.23269915532307255956e-1, + 0.1031122851428145637, -0.15641299114602463805, - 0.16830838782796397890, + 0.1683083878279639789, -0.13866515586498140422, - 0.81180686274058014296e-01, - -0.17887855297640843644e-01, - -0.29336688685966224449e-01, - 0.46640044266595848121e-01, - -0.32998151604134363934e-01, + 0.81180686274058014296e-1, + -0.17887855297640843644e-1, + -0.29336688685966224449e-1, + 0.46640044266595848121e-1, + -0.32998151604134363934e-1, 0.30014330127187704989, -0.44095076591959153633, - -0.17509072487484501207e-01, - 0.44827215424701399860, + -0.17509072487484501207e-1, + 0.4482721542470139986, -0.77060408614939190919, 0.69863754443020542606, -0.34708581744960753657, -0.29596093318262406413, 0.87216004351837650432, - -0.12786294624486405080e+01, - 0.12201175497621696842e+01, + -0.1278629462448640508e+1, + 0.12201175497621696842e+1, -0.81410392770410178187, - 0.60309253561316167325e-01, + 0.60309253561316167325e-1, 0.66701206954225011891, - -0.12481550763597728526e+01, - 0.13714778308216031277e+01, - -0.11373915713902800206e+01, + -0.12481550763597728526e+1, + 0.13714778308216031277e+1, + -0.11373915713902800206e+1, 0.52618221162219980247, 0.11034967466421810589, -0.67537655570034760277, @@ -22901,2358 +22903,2358 @@ function ESERK4ConstantCache(zprev) -0.12029566737422550671, -0.15297558007128031488, 0.12708452393097438571, - 0.44791450946268566990e-01, + 0.4479145094626856699e-1, -0.37300205065680891447, 0.54948449800026055723, -0.56698658633052578804, 0.24399648867938969476, 0.21163176931178773188, -0.77119450369503816933, - 0.11125673218600204972e+01, - -0.12375424735078286442e+01, + 0.11125673218600204972e+1, + -0.12375424735078286442e+1, 0.98661806412300645519, -0.58352161171386751626, - 0.63844627121547592452e-01, + 0.63844627121547592452e-1, 0.28520513453523466119, - -0.45189147841564752950, + -0.4518914784156475295, 0.41431185831120836971, -0.12294818927976393363, 0.20815705283268140513, 0.46114799303193543256, 0.79485110495274069464, - 0.12530808310570629160e+01, - 0.25805920747412423033e+01, - 0.32194016352159757766e+01, - 0.48434917814295408434e+01, - 0.58842609582350968722e+01, - 0.56504914821131748681e+01, - 0.53492045911559804594e+01, - 0.25450841422337857622e+01, + 0.1253080831057062916e+1, + 0.25805920747412423033e+1, + 0.32194016352159757766e+1, + 0.48434917814295408434e+1, + 0.58842609582350968722e+1, + 0.56504914821131748681e+1, + 0.53492045911559804594e+1, + 0.25450841422337857622e+1, -0.82370274212380545364, - -0.26207979243776868827e+01, - -0.54945774786439871562e+01, - -0.21028107193860154922e+01, + -0.26207979243776868827e+1, + -0.54945774786439871562e+1, + -0.21028107193860154922e+1, -0.39914233180495001241, - 0.31247700897392349795e+01, - 0.44230122735096806252e+01, + 0.31247700897392349795e+1, + 0.44230122735096806252e+1, 0.35039648934856154616, - -0.11547679058357689375e+01, - -0.41201513434706811267e+01, - -0.16636980161923236032e+01, - 0.24282530825202659486e+01, - 0.26383529637858607053e+01, - 0.15031588215436793021e+01, - -0.21895347303302465924e+01, - -0.35837234169530090000e+01, - 0.10739564402898884588e+01, - 0.20313742409650519249e+01, - 0.20793494716938112354e+01, - -0.10795685660839597908e+01, - -0.39531254262199091443e+01, - 0.14808104421404537643e+01, - 0.15667937392038184807e+01, - 0.16920763371986775603e+01, - -0.16480895917946247753e+01, - -0.31161536527456692447e+01, - 0.23455922956242853950e+01, - 0.16313959242801649996e+01, - -0.95878261873836162499e-01, - -0.21996976428933616710e+01, - -0.94158852615338284320, - 0.28744910052253893618e+01, + -0.11547679058357689375e+1, + -0.41201513434706811267e+1, + -0.16636980161923236032e+1, + 0.24282530825202659486e+1, + 0.26383529637858607053e+1, + 0.15031588215436793021e+1, + -0.21895347303302465924e+1, + -0.3583723416953009e+1, + 0.10739564402898884588e+1, + 0.20313742409650519249e+1, + 0.20793494716938112354e+1, + -0.10795685660839597908e+1, + -0.39531254262199091443e+1, + 0.14808104421404537643e+1, + 0.15667937392038184807e+1, + 0.16920763371986775603e+1, + -0.16480895917946247753e+1, + -0.31161536527456692447e+1, + 0.2345592295624285395e+1, + 0.16313959242801649996e+1, + -0.95878261873836162499e-1, + -0.2199697642893361671e+1, + -0.9415885261533828432, + 0.28744910052253893618e+1, 0.71696750122198604771, - -0.24629534786705122862e+01, + -0.24629534786705122862e+1, -0.64103983779069395599, - 0.15038091265999116164e+01, - 0.15111171874857727282e+01, - -0.16457736507178968299e+01, - -0.17101432000067942063e+01, - 0.18277030840157499902e+01, - 0.16453270443229595088e+01, - -0.21944810466760098500e+01, + 0.15038091265999116164e+1, + 0.15111171874857727282e+1, + -0.16457736507178968299e+1, + -0.17101432000067942063e+1, + 0.18277030840157499902e+1, + 0.16453270443229595088e+1, + -0.219448104667600985e+1, -0.83955269743058480447, - 0.16121699924670980231e+01, + 0.16121699924670980231e+1, 0.62708161155055330838, -0.59633100236247094106, - -0.24362757323349124583e+01, - 0.30846949301364312568e+01, + -0.24362757323349124583e+1, + 0.30846949301364312568e+1, 0.22341888729878237041, - -0.24895220316828052809e+01, + -0.24895220316828052809e+1, 0.98611718140737614213, 0.53965067746704087348, 0.86576264255159074423, - -0.22408134947701694450e+01, - 0.36338125087344103070, - 0.22869904221623538199e+01, - -0.16051843434817476552e+01, - -0.13347612106621171701e+01, - 0.20905134938865077565e+01, - 0.84663887511967642063e-01, - -0.15361187259011004347e+01, + -0.2240813494770169445e+1, + 0.3633812508734410307, + 0.22869904221623538199e+1, + -0.16051843434817476552e+1, + -0.13347612106621171701e+1, + 0.20905134938865077565e+1, + 0.84663887511967642063e-1, + -0.15361187259011004347e+1, 0.36122187211316014732, 0.82214707051364321888, 0.43001524710278665742, - -0.22751183027856489716e+01, - 0.15283175299215892018e+01, - 0.12045258950060873104e+01, - -0.22907273316350416081e+01, - 0.38532815820689136910, - 0.17163265384598735963e+01, - -0.12256835768363025796e+01, + -0.22751183027856489716e+1, + 0.15283175299215892018e+1, + 0.12045258950060873104e+1, + -0.22907273316350416081e+1, + 0.3853281582068913691, + 0.17163265384598735963e+1, + -0.12256835768363025796e+1, -0.85581408809960002326, - 0.15727088727300562176e+01, + 0.15727088727300562176e+1, -0.37146572820520268321, -0.45571538557421681359, -0.52562520678993995826, - 0.16666342647364127405e+01, + 0.16666342647364127405e+1, -0.69943773161350231149, - -0.18130026076777627786e+01, - 0.29545490076001277302e+01, - -0.12466547878039684338e+01, - -0.14264586968532178002e+01, - 0.22036233791464967524e+01, + -0.18130026076777627786e+1, + 0.29545490076001277302e+1, + -0.12466547878039684338e+1, + -0.14264586968532178002e+1, + 0.22036233791464967524e+1, -0.72163611145770933941, - -0.78248494937858259490, + -0.7824849493785825949, 0.52084292040221913389, 0.73326488270868761532, - -0.10254559350243956928e+01, - -0.72460969124414825737e-01, - 0.10076651552167692483e+01, + -0.10254559350243956928e+1, + -0.72460969124414825737e-1, + 0.10076651552167692483e+1, -0.48486737419393288739, -0.72614555884798703822, 0.76856510121805143854, 0.80318533615741483089, - -0.22596123725516599201e+01, - 0.16628424233434784263e+01, - 0.76655746934877100340, - -0.27477589269082662859e+01, - 0.23756584079216045424e+01, + -0.22596123725516599201e+1, + 0.16628424233434784263e+1, + 0.7665574693487710034, + -0.27477589269082662859e+1, + 0.23756584079216045424e+1, -0.13319969663690309214, - -0.17461846340321076632e+01, - 0.16884506891320094635e+01, + -0.17461846340321076632e+1, + 0.16884506891320094635e+1, -0.27130550844444917269, -0.70591416977554699574, 0.28074442984261738232, 0.79288600017689059296, - -0.11460574943937464898e+01, + -0.11460574943937464898e+1, 0.39186005197451656556, 0.58287205554820653575, -0.81364440162047124705, 0.39315489489395349931, - -0.24531304384312604960, + -0.2453130438431260496, 0.86579516033923886731, - -0.15927161349874334739e+01, - 0.12913037392251691671e+01, + -0.15927161349874334739e+1, + 0.12913037392251691671e+1, 0.27097032321004310695, - -0.19451117131482320577e+01, - 0.22258949490298132190e+01, + -0.19451117131482320577e+1, + 0.2225894949029813219e+1, -0.79152094926909355443, - -0.10708814815026799216e+01, - 0.16420875555744554042e+01, + -0.10708814815026799216e+1, + 0.16420875555744554042e+1, -0.43705900272838021925, - -0.13038904702650333522e+01, - 0.17889762906122288477e+01, + -0.13038904702650333522e+1, + 0.17889762906122288477e+1, -0.40750727428757027582, - -0.16535090540544299387e+01, - 0.24822078042798958464e+01, - -0.12069499774142100623e+01, - -0.11968356634524595083e+01, - 0.27677898128185942639e+01, - -0.22865887028135647441e+01, + -0.16535090540544299387e+1, + 0.24822078042798958464e+1, + -0.12069499774142100623e+1, + -0.11968356634524595083e+1, + 0.27677898128185942639e+1, + -0.22865887028135647441e+1, 0.29616802426332400344, - 0.14474672317810099997e+01, - -0.15528462642258691329e+01, + 0.14474672317810099997e+1, + -0.15528462642258691329e+1, 0.16561003328332005169, - 0.12520176021668618649e+01, - -0.12790312753092609732e+01, - -0.20816990971367699270, - 0.19529484568536339406e+01, - -0.24357553079179217193e+01, - 0.11836313179483524127e+01, + 0.12520176021668618649e+1, + -0.12790312753092609732e+1, + -0.2081699097136769927, + 0.19529484568536339406e+1, + -0.24357553079179217193e+1, + 0.11836313179483524127e+1, 0.84072360178704064193, - -0.20692669222238118110e+01, - 0.16353249586202296406e+01, - -0.54926103150911696760e-01, - -0.12642580817892434819e+01, - 0.12360947432086708542e+01, - -0.16811638916703757207e+01, + -0.2069266922223811811e+1, + 0.16353249586202296406e+1, + -0.5492610315091169676e-1, + -0.12642580817892434819e+1, + 0.12360947432086708542e+1, + -0.16811638916703757207e+1, -0.48103833417995867094, - 0.53183847321667432340e+01, - -0.68362749194842837852e+01, - 0.25066517538830854761e+01, - 0.38823139216932753826e+01, - -0.76580535543696184320e+01, - 0.53152925268258304214e+01, + 0.5318384732166743234e+1, + -0.68362749194842837852e+1, + 0.25066517538830854761e+1, + 0.38823139216932753826e+1, + -0.7658053554369618432e+1, + 0.53152925268258304214e+1, 0.26367018790486534963, - -0.46169551429394655173e+01, - 0.36828926508152513009e+01, + -0.46169551429394655173e+1, + 0.36828926508152513009e+1, 0.51439465868240985547, - -0.41024350613460223158e+01, - 0.30947142497968553876e+01, + -0.41024350613460223158e+1, + 0.30947142497968553876e+1, 0.77276240987929101234, - -0.39766072196515227510e+01, - 0.27482277110020709721e+01, - 0.11270234714929963094e+01, - -0.42238278742686956591e+01, - 0.29783351607321462140e+01, - 0.64646302284628298640, - -0.33001145130143818562e+01, - 0.18574359883526709858e+01, - 0.11708636988909106869e+01, - -0.23305588495674487426e+01, - -0.79652381304279684660, - 0.45040615955187233155e+01, - -0.45820875848013669085e+01, - -0.93803906448997786960, - 0.69003895397019832103e+01, - -0.77910974985771410672e+01, - 0.15747604234923742172e+01, - 0.54557206663943293989e+01, - -0.66239218728599178476e+01, + -0.3976607219651522751e+1, + 0.27482277110020709721e+1, + 0.11270234714929963094e+1, + -0.42238278742686956591e+1, + 0.2978335160732146214e+1, + 0.6464630228462829864, + -0.33001145130143818562e+1, + 0.18574359883526709858e+1, + 0.11708636988909106869e+1, + -0.23305588495674487426e+1, + -0.7965238130427968466, + 0.45040615955187233155e+1, + -0.45820875848013669085e+1, + -0.9380390644899778696, + 0.69003895397019832103e+1, + -0.77910974985771410672e+1, + 0.15747604234923742172e+1, + 0.54557206663943293989e+1, + -0.66239218728599178476e+1, -0.12382333210788103173, - 0.74094939364985448194e+01, - -0.75783145470136776822e+01, - -0.12083916702019346090e+01, - 0.10371688331729453481e+02, - -0.11298305786166782383e+02, - 0.22620150488629153784e+01, - 0.74632367484129229496e+01, - -0.90693266917069017552e+01, - 0.13111235195332178183e+01, - 0.64518675132215976831e+01, - -0.65771957720453002594e+01, + 0.74094939364985448194e+1, + -0.75783145470136776822e+1, + -0.1208391670201934609e+1, + 0.10371688331729453481e+2, + -0.11298305786166782383e+2, + 0.22620150488629153784e+1, + 0.74632367484129229496e+1, + -0.90693266917069017552e+1, + 0.13111235195332178183e+1, + 0.64518675132215976831e+1, + -0.65771957720453002594e+1, -0.64243577253053330001, - 0.59427294458288004719e+01, - -0.40584721481615231298e+01, - -0.21802203789611809270e+01, - 0.38059785048113137229e+01, - 0.10314063454095760974e+01, - -0.63808844254790573203e+01, - 0.40889441603108007683e+01, - 0.34853358340530165016e+01, - -0.74322140630612256729e+01, - 0.14606773456430575120e+01, - 0.73747966493613326122e+01, - -0.81808595548898086491e+01, - -0.21812346822922048517e+01, - 0.12300932808402446739e+02, - -0.11220881002704441443e+02, + 0.59427294458288004719e+1, + -0.40584721481615231298e+1, + -0.2180220378961180927e+1, + 0.38059785048113137229e+1, + 0.10314063454095760974e+1, + -0.63808844254790573203e+1, + 0.40889441603108007683e+1, + 0.34853358340530165016e+1, + -0.74322140630612256729e+1, + 0.1460677345643057512e+1, + 0.73747966493613326122e+1, + -0.81808595548898086491e+1, + -0.21812346822922048517e+1, + 0.12300932808402446739e+2, + -0.11220881002704441443e+2, -0.14379220180812635199, - 0.81800593157484318141e+01, - -0.53716442292129800151e+01, - -0.25350454093093586216e+01, - 0.30779376515917316048e+01, - 0.39673852413144952145e+01, - -0.81425183755181986811e+01, - 0.15626090193004158468e+01, - 0.72461394236200584729e+01, - -0.62523998027318210546e+01, - -0.44553841907881617246e+01, - 0.96509978947416659167e+01, - -0.15571759906903750448e+01, - -0.10122560768665977093e+02, - 0.90767670200074128672e+01, - 0.29511307055766162755e+01, - -0.10158331046652685714e+02, - 0.36006362914707401579e+01, - 0.44374372304275233603e+01, - -0.14084953667416000300e+01, - -0.71957464463343994154e+01, - 0.43910673672665989642e+01, - 0.89220056109669680922e+01, - -0.14615034234120159340e+02, - 0.29085683532749664337e+01, - 0.96152470940059266979e+01, - -0.63925787391556880834e+01, - -0.50428107491079874336e+01, - 0.40398281783107812259e+01, - 0.71605728880977457251e+01, - -0.84904315490075461526e+01, - -0.47921411908234938792e+01, - 0.10604926006153135631e+02, - 0.11842103459605739513e+01, - -0.11211260392288730614e+02, - 0.12684516443259870044e+01, - 0.11739065818581474687e+02, - -0.61222754683939593079e+01, - -0.73540769257773588308e+01, - 0.34470965440205256769e+01, - 0.87038998377053093947e+01, - -0.30836794320040898931e+01, - -0.14126679985950250540e+02, - 0.11663715821222469415e+02, - 0.63683540961464917274e+01, - -0.80913173830132851805e+01, - -0.62662625728728977847e+01, - 0.36003880774380783159e+01, - 0.12633738351673517997e+02, - -0.82532141044753810633e+01, - -0.11921938060726979813e+02, - 0.88706307191661295519e+01, - 0.90182958616737529667e+01, - -0.38830324517772987214e+01, - -0.11096756356442231350e+02, - -0.16873176534736273879e+01, - 0.17111454645102494254e+02, + 0.81800593157484318141e+1, + -0.53716442292129800151e+1, + -0.25350454093093586216e+1, + 0.30779376515917316048e+1, + 0.39673852413144952145e+1, + -0.81425183755181986811e+1, + 0.15626090193004158468e+1, + 0.72461394236200584729e+1, + -0.62523998027318210546e+1, + -0.44553841907881617246e+1, + 0.96509978947416659167e+1, + -0.15571759906903750448e+1, + -0.10122560768665977093e+2, + 0.90767670200074128672e+1, + 0.29511307055766162755e+1, + -0.10158331046652685714e+2, + 0.36006362914707401579e+1, + 0.44374372304275233603e+1, + -0.140849536674160003e+1, + -0.71957464463343994154e+1, + 0.43910673672665989642e+1, + 0.89220056109669680922e+1, + -0.1461503423412015934e+2, + 0.29085683532749664337e+1, + 0.96152470940059266979e+1, + -0.63925787391556880834e+1, + -0.50428107491079874336e+1, + 0.40398281783107812259e+1, + 0.71605728880977457251e+1, + -0.84904315490075461526e+1, + -0.47921411908234938792e+1, + 0.10604926006153135631e+2, + 0.11842103459605739513e+1, + -0.11211260392288730614e+2, + 0.12684516443259870044e+1, + 0.11739065818581474687e+2, + -0.61222754683939593079e+1, + -0.73540769257773588308e+1, + 0.34470965440205256769e+1, + 0.87038998377053093947e+1, + -0.30836794320040898931e+1, + -0.1412667998595025054e+2, + 0.11663715821222469415e+2, + 0.63683540961464917274e+1, + -0.80913173830132851805e+1, + -0.62662625728728977847e+1, + 0.36003880774380783159e+1, + 0.12633738351673517997e+2, + -0.82532141044753810633e+1, + -0.11921938060726979813e+2, + 0.88706307191661295519e+1, + 0.90182958616737529667e+1, + -0.38830324517772987214e+1, + -0.1109675635644223135e+2, + -0.16873176534736273879e+1, + 0.17111454645102494254e+2, -0.78831744765854960821, - -0.12989142544578735183e+02, - -0.44208945523704183955e+01, - 0.77660378596934860340e+01, - 0.14299989632596862066e+02, - -0.91791267571625017041e+01, - -0.13819477090796709717e+02, + -0.12989142544578735183e+2, + -0.44208945523704183955e+1, + 0.7766037859693486034e+1, + 0.14299989632596862066e+2, + -0.91791267571625017041e+1, + -0.13819477090796709717e+2, 0.40168310116062705406, - 0.13146961831445311830e+02, - 0.99914404158571397119e+01, - -0.10895473794240116305e+02, - -0.14622675268164657680e+02, - -0.13990325219102246468e+01, - 0.16644549546096424564e+02, - 0.10549996393562592445e+02, - -0.43320586178461466531e+01, - -0.18277926379345601049e+02, - -0.11448089824778246992e+02, - 0.11596664432086278396e+02, - 0.14800481111441600390e+02, - 0.15228541728989187121e+02, - -0.98403699993834017334e+01, - -0.20103346793242987900e+02, - -0.14638620395610516312e+02, - -0.49052997506578464026e+01, - 0.20201564485746775546e+02, - 0.21350509260803438139e+02, - 0.17997107495519490072e+02, - 0.46792055096488605059e+01, - -0.17252407368130445064e+02, - -0.24361286590530433216e+02, - -0.32570192667496378647e+02, - -0.32453257112487577274e+02, - -0.21961146748976062781e+02, - -0.22327539188496754008e+02, - -0.10120947034348374061e+02, - -0.73366031160998268490e+01, - -0.72614343436357309258e+01, - 0.25409042487799613497e+01, - -0.60407405434018555113e+01, - 0.27990760390491700171e+01, - -0.70670308741415821530, - -0.25666162955998612638e+01, - 0.44677746043404855669e+01, - -0.48858299903251021234e+01, - 0.35244425247583572869e+01, - -0.10441621867087311770e+01, - -0.15980978322218946097e+01, - 0.34074506029215720915e+01, - -0.37610186736962125664e+01, - 0.26309970079723989933e+01, + 0.1314696183144531183e+2, + 0.99914404158571397119e+1, + -0.10895473794240116305e+2, + -0.1462267526816465768e+2, + -0.13990325219102246468e+1, + 0.16644549546096424564e+2, + 0.10549996393562592445e+2, + -0.43320586178461466531e+1, + -0.18277926379345601049e+2, + -0.11448089824778246992e+2, + 0.11596664432086278396e+2, + 0.1480048111144160039e+2, + 0.15228541728989187121e+2, + -0.98403699993834017334e+1, + -0.201033467932429879e+2, + -0.14638620395610516312e+2, + -0.49052997506578464026e+1, + 0.20201564485746775546e+2, + 0.21350509260803438139e+2, + 0.17997107495519490072e+2, + 0.46792055096488605059e+1, + -0.17252407368130445064e+2, + -0.24361286590530433216e+2, + -0.32570192667496378647e+2, + -0.32453257112487577274e+2, + -0.21961146748976062781e+2, + -0.22327539188496754008e+2, + -0.10120947034348374061e+2, + -0.7336603116099826849e+1, + -0.72614343436357309258e+1, + 0.25409042487799613497e+1, + -0.60407405434018555113e+1, + 0.27990760390491700171e+1, + -0.7067030874141582153, + -0.25666162955998612638e+1, + 0.44677746043404855669e+1, + -0.48858299903251021234e+1, + 0.35244425247583572869e+1, + -0.1044162186708731177e+1, + -0.15980978322218946097e+1, + 0.34074506029215720915e+1, + -0.37610186736962125664e+1, + 0.26309970079723989933e+1, -0.55039054501355555438, - -0.16060802778446687800e+01, - 0.29942076992393662493e+01, - -0.31080243551998831819e+01, - 0.19726580697679612086e+01, - -0.90802159461517706340e-01, - -0.17621482099677210353e+01, - 0.28663095901986244129e+01, - -0.28194775881982807597e+01, - 0.16908756866766621041e+01, - 0.38989807167291862244e-01, - -0.16682839667591151667e+01, - 0.25629846396101392259e+01, - -0.23852101460631747187e+01, - 0.12214248780961625140e+01, + -0.160608027784466878e+1, + 0.29942076992393662493e+1, + -0.31080243551998831819e+1, + 0.19726580697679612086e+1, + -0.9080215946151770634e-1, + -0.17621482099677210353e+1, + 0.28663095901986244129e+1, + -0.28194775881982807597e+1, + 0.16908756866766621041e+1, + 0.38989807167291862244e-1, + -0.16682839667591151667e+1, + 0.25629846396101392259e+1, + -0.23852101460631747187e+1, + 0.1221424878096162514e+1, 0.47410965134807958599, - -0.20516594799957639239e+01, - 0.29219498725777488524e+01, - -0.27628136512977294892e+01, - 0.16356956980846248939e+01, - 0.56732921364394818531e-01, - -0.17212567832868135298e+01, - 0.27997783851402497923e+01, - -0.29617867084167306402e+01, - 0.22172874652695568898e+01, + -0.20516594799957639239e+1, + 0.29219498725777488524e+1, + -0.27628136512977294892e+1, + 0.16356956980846248939e+1, + 0.56732921364394818531e-1, + -0.17212567832868135298e+1, + 0.27997783851402497923e+1, + -0.29617867084167306402e+1, + 0.22172874652695568898e+1, -0.89369664377172297609, -0.49284465654104542276, - 0.14364581559794480370e+01, - -0.16244730030302698687e+01, - 0.10489469776771058740e+01, - -0.40234914110846986546e+01, - 0.54832507479948660034e+01, + 0.1436458155979448037e+1, + -0.16244730030302698687e+1, + 0.1048946977677105874e+1, + -0.40234914110846986546e+1, + 0.54832507479948660034e+1, 0.62932198328931987508, - -0.60347825953760967366e+01, - 0.99588469785651483335e+01, - -0.88941274360777509145e+01, - 0.45897712797689038666e+01, - 0.31431017334416431197e+01, - -0.97579074625439830015e+01, - 0.14295418019223935957e+02, - -0.13203567469317443184e+02, - 0.83093273091189043811e+01, + -0.60347825953760967366e+1, + 0.99588469785651483335e+1, + -0.88941274360777509145e+1, + 0.45897712797689038666e+1, + 0.31431017334416431197e+1, + -0.97579074625439830015e+1, + 0.14295418019223935957e+2, + -0.13203567469317443184e+2, + 0.83093273091189043811e+1, 0.42320376285771288405, - -0.82847227535415903787e+01, - 0.14186089816139794806e+02, - -0.14491121870180748488e+02, - 0.10957733051576207473e+02, - -0.34526794448102036128e+01, - -0.34786449894411362038e+01, - 0.89695089105580425581e+01, - -0.96113719061129749832e+01, - 0.72975053112455370297e+01, - -0.18455791317070187052e+01, - -0.24861334912778745299e+01, - 0.53231512804433096520e+01, - -0.38418360775830855403e+01, - 0.43884008560771292640, - 0.48099166139178537449e+01, - -0.77328900664729340875e+01, - 0.83654908125912470496e+01, - -0.44844501901686797396e+01, + -0.82847227535415903787e+1, + 0.14186089816139794806e+2, + -0.14491121870180748488e+2, + 0.10957733051576207473e+2, + -0.34526794448102036128e+1, + -0.34786449894411362038e+1, + 0.89695089105580425581e+1, + -0.96113719061129749832e+1, + 0.72975053112455370297e+1, + -0.18455791317070187052e+1, + -0.24861334912778745299e+1, + 0.5323151280443309652e+1, + -0.38418360775830855403e+1, + 0.4388400856077129264, + 0.48099166139178537449e+1, + -0.77328900664729340875e+1, + 0.83654908125912470496e+1, + -0.44844501901686797396e+1, -0.93311295337494770674, - 0.74461950869105226758e+01, - -0.10847663170357735751e+02, - 0.11432757902104576431e+02, - -0.73946499316162315196e+01, - 0.20207134374346509276e+01, - 0.40901342158714335540e+01, - -0.71765851139736502873e+01, - 0.73895308352109143613e+01, - -0.48547688943735627376e+01, + 0.74461950869105226758e+1, + -0.10847663170357735751e+2, + 0.11432757902104576431e+2, + -0.73946499316162315196e+1, + 0.20207134374346509276e+1, + 0.4090134215871433554e+1, + -0.71765851139736502873e+1, + 0.73895308352109143613e+1, + -0.48547688943735627376e+1, -0.63182642475781169988, 0.35355275012631748321, - -0.92683889645760100251e+01, - -0.82086672796804602825e+01, - -0.17964362257781392174e+02, - -0.34250048923655981525e+02, - -0.42391011213480524589e+02, - -0.65156642895277826710e+02, - -0.78488353334965964336e+02, - -0.74235831168491571930e+02, - -0.73612313078806707267e+02, - -0.30702651581341694254e+02, - 0.73464333601971985033e+01, - 0.38344117831255921658e+02, - 0.70670912986960118474e+02, - 0.29490055509929714361e+02, - 0.50385299332549502438e+01, - -0.42290634081623366569e+02, - -0.57849037840533043209e+02, - -0.58594380312443536951e+01, - 0.16357247545622456641e+02, - 0.54287506478620286998e+02, - 0.22657278164480342042e+02, - -0.32936648616448216842e+02, - -0.34265265419784959988e+02, - -0.21429737506002442871e+02, - 0.30968985811192915492e+02, - 0.45944541348652521151e+02, - -0.12879873425863486602e+02, - -0.27643530655418334874e+02, - -0.28372028448457506045e+02, - 0.16313086705953686817e+02, - 0.49781311967633229187e+02, - -0.16336942889553661473e+02, - -0.24090764180138460659e+02, - -0.20221312715020097528e+02, - 0.20965608605027476585e+02, - 0.41076438954466638620e+02, - -0.29501519383922964579e+02, - -0.24358576333275003378e+02, - 0.41221462212200341568e+01, - 0.26822158234254722231e+02, - 0.14346797819062592438e+02, - -0.39294313833849265905e+02, - -0.92339380138296824896e+01, - 0.32781762276546430712e+02, - 0.87793357658090513951e+01, - -0.20792013089575043239e+02, - -0.18779652529576651432e+02, - 0.20120289044944595247e+02, - 0.24665087515914436267e+02, - -0.25707137999903434178e+02, - -0.21665530509412189275e+02, - 0.30424334429545975667e+02, - 0.85269849282248344480e+01, - -0.17592567675687938333e+02, - -0.12928768503225985143e+02, - 0.12444313811779947443e+02, - 0.28823460792648564421e+02, - -0.38897480642736688594e+02, - -0.34597717240402467986e+01, - 0.31945890178912712543e+02, - -0.10499014974887481699e+02, - -0.10691615398628453448e+02, - -0.78324245259060507607e+01, - 0.26539021115508298010e+02, - -0.22988066535719671180e+01, - -0.32034286643224945124e+02, - 0.21940599037064718146e+02, - 0.18114797786796362544e+02, - -0.28823817356347024798e+02, + -0.92683889645760100251e+1, + -0.82086672796804602825e+1, + -0.17964362257781392174e+2, + -0.34250048923655981525e+2, + -0.42391011213480524589e+2, + -0.6515664289527782671e+2, + -0.78488353334965964336e+2, + -0.7423583116849157193e+2, + -0.73612313078806707267e+2, + -0.30702651581341694254e+2, + 0.73464333601971985033e+1, + 0.38344117831255921658e+2, + 0.70670912986960118474e+2, + 0.29490055509929714361e+2, + 0.50385299332549502438e+1, + -0.42290634081623366569e+2, + -0.57849037840533043209e+2, + -0.58594380312443536951e+1, + 0.16357247545622456641e+2, + 0.54287506478620286998e+2, + 0.22657278164480342042e+2, + -0.32936648616448216842e+2, + -0.34265265419784959988e+2, + -0.21429737506002442871e+2, + 0.30968985811192915492e+2, + 0.45944541348652521151e+2, + -0.12879873425863486602e+2, + -0.27643530655418334874e+2, + -0.28372028448457506045e+2, + 0.16313086705953686817e+2, + 0.49781311967633229187e+2, + -0.16336942889553661473e+2, + -0.24090764180138460659e+2, + -0.20221312715020097528e+2, + 0.20965608605027476585e+2, + 0.4107643895446663862e+2, + -0.29501519383922964579e+2, + -0.24358576333275003378e+2, + 0.41221462212200341568e+1, + 0.26822158234254722231e+2, + 0.14346797819062592438e+2, + -0.39294313833849265905e+2, + -0.92339380138296824896e+1, + 0.32781762276546430712e+2, + 0.87793357658090513951e+1, + -0.20792013089575043239e+2, + -0.18779652529576651432e+2, + 0.20120289044944595247e+2, + 0.24665087515914436267e+2, + -0.25707137999903434178e+2, + -0.21665530509412189275e+2, + 0.30424334429545975667e+2, + 0.8526984928224834448e+1, + -0.17592567675687938333e+2, + -0.12928768503225985143e+2, + 0.12444313811779947443e+2, + 0.28823460792648564421e+2, + -0.38897480642736688594e+2, + -0.34597717240402467986e+1, + 0.31945890178912712543e+2, + -0.10499014974887481699e+2, + -0.10691615398628453448e+2, + -0.78324245259060507607e+1, + 0.2653902111550829801e+2, + -0.2298806653571967118e+1, + -0.32034286643224945124e+2, + 0.21940599037064718146e+2, + 0.18114797786796362544e+2, + -0.28823817356347024798e+2, 0.24747975802905114451, - 0.18828809906166949162e+02, - -0.29526083224764807511e+01, - -0.13014880576344598495e+02, - -0.35071632388360547417e+01, - 0.28013579005897092600e+02, - -0.18124166762444822609e+02, - -0.17986323764548547643e+02, - 0.31840314756455061485e+02, - -0.55231901507958713893e+01, - -0.23579097152754080469e+02, - 0.18115003153082305687e+02, - 0.87769410989727791872e+01, - -0.17871280498515993429e+02, - 0.19079413183243465468e+01, - 0.85508138601686880520e+01, - 0.55135873799997341393e+01, - -0.21898377632419744998e+02, - 0.10106751711559075702e+02, - 0.22614620498366861057e+02, - -0.37559567572675319980e+02, - 0.15082165769113288434e+02, - 0.19773909806448987325e+02, - -0.29048904367242272428e+02, - 0.81744931870793973161e+01, - 0.12748822155453096272e+02, - -0.96569854329693232131e+01, - -0.72421852600829206281e+01, - 0.11863876677467295906e+02, - 0.16687943344374691623e+01, - -0.12901083737879474711e+02, - 0.48503772245771905602e+01, - 0.11981561873242176475e+02, - -0.12690303645316678427e+02, - -0.86685236821992006639e+01, - 0.28911303110688738371e+02, - -0.21963895316393859503e+02, - -0.95055770237894527952e+01, - 0.35343225857079382024e+02, - -0.30308953561877434169e+02, + 0.18828809906166949162e+2, + -0.29526083224764807511e+1, + -0.13014880576344598495e+2, + -0.35071632388360547417e+1, + 0.280135790058970926e+2, + -0.18124166762444822609e+2, + -0.17986323764548547643e+2, + 0.31840314756455061485e+2, + -0.55231901507958713893e+1, + -0.23579097152754080469e+2, + 0.18115003153082305687e+2, + 0.87769410989727791872e+1, + -0.17871280498515993429e+2, + 0.19079413183243465468e+1, + 0.8550813860168688052e+1, + 0.55135873799997341393e+1, + -0.21898377632419744998e+2, + 0.10106751711559075702e+2, + 0.22614620498366861057e+2, + -0.3755956757267531998e+2, + 0.15082165769113288434e+2, + 0.19773909806448987325e+2, + -0.29048904367242272428e+2, + 0.81744931870793973161e+1, + 0.12748822155453096272e+2, + -0.96569854329693232131e+1, + -0.72421852600829206281e+1, + 0.11863876677467295906e+2, + 0.16687943344374691623e+1, + -0.12901083737879474711e+2, + 0.48503772245771905602e+1, + 0.11981561873242176475e+2, + -0.12690303645316678427e+2, + -0.86685236821992006639e+1, + 0.28911303110688738371e+2, + -0.21963895316393859503e+2, + -0.95055770237894527952e+1, + 0.35343225857079382024e+2, + -0.30308953561877434169e+2, 0.88107795391154164477, - 0.23271211917481736009e+02, - -0.21380532163585549199e+02, - 0.14423705216772302329e+01, - 0.12270179034483804870e+02, - -0.67073914377260157593e+01, - -0.81632115853035127628e+01, - 0.14032084137693100701e+02, - -0.55375824995551070629e+01, - -0.57887740586296345668e+01, - 0.74186744206547317049e+01, + 0.23271211917481736009e+2, + -0.21380532163585549199e+2, + 0.14423705216772302329e+1, + 0.1227017903448380487e+2, + -0.67073914377260157593e+1, + -0.81632115853035127628e+1, + 0.14032084137693100701e+2, + -0.55375824995551070629e+1, + -0.57887740586296345668e+1, + 0.74186744206547317049e+1, -0.87385476628248037745, - -0.13376200352961771234e+01, - -0.74340808829513163047e+01, - 0.18259724782618210526e+02, - -0.15773708460618797389e+02, - -0.34275587147316781689e+01, - 0.24338685501713296588e+02, - -0.27138276220592576493e+02, - 0.76757247470080782747e+01, - 0.16890943101151915329e+02, - -0.23770969752135535202e+02, - 0.67318942045980634248e+01, - 0.17416543257303505499e+02, - -0.24529745885749395740e+02, - 0.62948283645794367303e+01, - 0.21517571897727062691e+02, - -0.33339496735636423352e+02, - 0.17365853342981125707e+02, - 0.13651357802661115315e+02, - -0.33820409030755058666e+02, - 0.27096182476328213085e+02, + -0.13376200352961771234e+1, + -0.74340808829513163047e+1, + 0.18259724782618210526e+2, + -0.15773708460618797389e+2, + -0.34275587147316781689e+1, + 0.24338685501713296588e+2, + -0.27138276220592576493e+2, + 0.76757247470080782747e+1, + 0.16890943101151915329e+2, + -0.23770969752135535202e+2, + 0.67318942045980634248e+1, + 0.17416543257303505499e+2, + -0.2452974588574939574e+2, + 0.62948283645794367303e+1, + 0.21517571897727062691e+2, + -0.33339496735636423352e+2, + 0.17365853342981125707e+2, + 0.13651357802661115315e+2, + -0.33820409030755058666e+2, + 0.27096182476328213085e+2, -0.82940480182680786925, - -0.21576038331339915999e+02, - 0.21701406829045328806e+02, - -0.17140654381974034237e+01, - -0.18616872955379001553e+02, - 0.20086819560370535953e+02, + -0.21576038331339915999e+2, + 0.21701406829045328806e+2, + -0.17140654381974034237e+1, + -0.18616872955379001553e+2, + 0.20086819560370535953e+2, -0.85533844994455332511, - -0.22406469818109226111e+02, - 0.29401342650914894961e+02, - -0.13673782228518026827e+02, - -0.12164811127006778690e+02, - 0.27458670292643443389e+02, - -0.20873005708776048550e+02, + -0.22406469818109226111e+2, + 0.29401342650914894961e+2, + -0.13673782228518026827e+2, + -0.1216481112700677869e+2, + 0.27458670292643443389e+2, + -0.2087300570877604855e+2, -0.56762386008554577277, - 0.18058070969678706064e+02, - -0.17192740420208334484e+02, - 0.18347934540619416310e+02, - 0.21896016257391348603e+01, - -0.43179340885033774100e+02, - 0.51270674053328605169e+02, - -0.10757013352644694493e+02, - -0.40282424858803700829e+02, - 0.62764783016380498282e+02, - -0.32629903319854058452e+02, - -0.18085011456764206628e+02, - 0.49583157965681792234e+02, - -0.31540684634292116328e+02, - -0.10635355338008364967e+02, - 0.39734119885092432867e+02, - -0.23689361227750513450e+02, - -0.15202463920636471784e+02, - 0.41442362091097045607e+02, - -0.23031941408749695199e+02, - -0.17914226177687858410e+02, - 0.45587980390668022324e+02, - -0.27897682315984031476e+02, - -0.12357153616825977238e+02, - 0.38961692912366672203e+02, - -0.21384404147670746710e+02, - -0.14500896510120705685e+02, - 0.31308334941187229816e+02, - -0.25280543536173207819e+01, - -0.38060769090296346917e+02, - 0.47606865026983797407e+02, - -0.25133142093795166616e+01, - -0.53182854938375911047e+02, - 0.67384652361063487547e+02, - -0.16463393875406396205e+02, - -0.46787989295182875082e+02, - 0.61932007441399619552e+02, - -0.61522353379676584240e+01, - -0.58967454725215198152e+02, - 0.66307368779971668005e+02, - 0.35306052901280557954e+01, - -0.78730542564381806869e+02, - 0.86126189359157294234e+02, - -0.10377501597468697270e+02, - -0.68896486101274049929e+02, - 0.77723274808975901351e+02, - -0.78766009088266306648e+01, - -0.57497547541717850095e+02, - 0.53951170880891531567e+02, - 0.11603579236042161682e+02, - -0.54426641121316365002e+02, - 0.29735193558268214531e+02, - 0.32396967029738526378e+02, - -0.47647512923110731720e+02, + 0.18058070969678706064e+2, + -0.17192740420208334484e+2, + 0.1834793454061941631e+2, + 0.21896016257391348603e+1, + -0.431793408850337741e+2, + 0.51270674053328605169e+2, + -0.10757013352644694493e+2, + -0.40282424858803700829e+2, + 0.62764783016380498282e+2, + -0.32629903319854058452e+2, + -0.18085011456764206628e+2, + 0.49583157965681792234e+2, + -0.31540684634292116328e+2, + -0.10635355338008364967e+2, + 0.39734119885092432867e+2, + -0.2368936122775051345e+2, + -0.15202463920636471784e+2, + 0.41442362091097045607e+2, + -0.23031941408749695199e+2, + -0.1791422617768785841e+2, + 0.45587980390668022324e+2, + -0.27897682315984031476e+2, + -0.12357153616825977238e+2, + 0.38961692912366672203e+2, + -0.2138440414767074671e+2, + -0.14500896510120705685e+2, + 0.31308334941187229816e+2, + -0.25280543536173207819e+1, + -0.38060769090296346917e+2, + 0.47606865026983797407e+2, + -0.25133142093795166616e+1, + -0.53182854938375911047e+2, + 0.67384652361063487547e+2, + -0.16463393875406396205e+2, + -0.46787989295182875082e+2, + 0.61932007441399619552e+2, + -0.6152235337967658424e+1, + -0.58967454725215198152e+2, + 0.66307368779971668005e+2, + 0.35306052901280557954e+1, + -0.78730542564381806869e+2, + 0.86126189359157294234e+2, + -0.1037750159746869727e+2, + -0.68896486101274049929e+2, + 0.77723274808975901351e+2, + -0.78766009088266306648e+1, + -0.57497547541717850095e+2, + 0.53951170880891531567e+2, + 0.11603579236042161682e+2, + -0.54426641121316365002e+2, + 0.29735193558268214531e+2, + 0.32396967029738526378e+2, + -0.4764751292311073172e+2, -0.75760851752097257972, - 0.56075160201185354936e+02, - -0.40545754534873942987e+02, - -0.27074289503095876341e+02, - 0.65735045952961058902e+02, - -0.15216139671944414857e+02, - -0.64615540246312249906e+02, - 0.76917764686702867039e+02, - 0.88766717121279317126e+01, - -0.94403660081021712358e+02, - 0.84814209725602211165e+02, - 0.10972210376377903529e+02, - -0.73192759348446756462e+02, - 0.38920569946767351155e+02, - 0.36305007126327616618e+02, - -0.39360813001951157730e+02, - -0.29459556712255775324e+02, - 0.72221294881116364195e+02, - -0.14938389663276204544e+02, - -0.66039847631144866114e+02, - 0.60353666495265308356e+02, - 0.34260063792842572639e+02, - -0.82540373854963220879e+02, - 0.13881436814575621952e+02, - 0.87119622226898300710e+02, - -0.76607608754581377752e+02, - -0.28432339070061519948e+02, - 0.87252441991405774502e+02, - -0.22792433633248105451e+02, - -0.50801361005512205793e+02, - 0.19085742349206771706e+02, - 0.67097897557094313470e+02, - -0.51076205166711169170e+02, - -0.63175684026099439450e+02, - 0.11493329826255981629e+03, - -0.15624648717508849316e+02, - -0.88514953152211077736e+02, - 0.52301842018566276238e+02, - 0.53793876413673253012e+02, - -0.43544642939553092731e+02, - -0.60994688095245109594e+02, - 0.76522923418807948792e+02, - 0.41602171026975881318e+02, - -0.94746379076541899167e+02, - -0.97583184453579043804e+01, - 0.99662043706025144729e+02, - -0.12133360972632296182e+02, - -0.10132867633110588201e+03, - 0.47693041562205728212e+02, - 0.73796645071555161621e+02, - -0.34748446169015863916e+02, - -0.81663309642225442531e+02, - 0.38617801555158436599e+02, - 0.11154789844081234662e+03, - -0.89632933015787017439e+02, - -0.67397710014255551414e+02, - 0.74902890443805233645e+02, - 0.61687411023573446300e+02, - -0.41489343030932261058e+02, - -0.10544584807345442812e+03, - 0.70289077244233354236e+02, - 0.10638609082859164801e+03, - -0.76265346419311640602e+02, - -0.83567152086562629165e+02, - 0.32899659099683908892e+02, - 0.10738917481245080410e+03, - 0.40744850922063768905e+01, - -0.14319092351102477778e+03, + 0.56075160201185354936e+2, + -0.40545754534873942987e+2, + -0.27074289503095876341e+2, + 0.65735045952961058902e+2, + -0.15216139671944414857e+2, + -0.64615540246312249906e+2, + 0.76917764686702867039e+2, + 0.88766717121279317126e+1, + -0.94403660081021712358e+2, + 0.84814209725602211165e+2, + 0.10972210376377903529e+2, + -0.73192759348446756462e+2, + 0.38920569946767351155e+2, + 0.36305007126327616618e+2, + -0.3936081300195115773e+2, + -0.29459556712255775324e+2, + 0.72221294881116364195e+2, + -0.14938389663276204544e+2, + -0.66039847631144866114e+2, + 0.60353666495265308356e+2, + 0.34260063792842572639e+2, + -0.82540373854963220879e+2, + 0.13881436814575621952e+2, + 0.8711962222689830071e+2, + -0.76607608754581377752e+2, + -0.28432339070061519948e+2, + 0.87252441991405774502e+2, + -0.22792433633248105451e+2, + -0.50801361005512205793e+2, + 0.19085742349206771706e+2, + 0.6709789755709431347e+2, + -0.5107620516671116917e+2, + -0.6317568402609943945e+2, + 0.11493329826255981629e+3, + -0.15624648717508849316e+2, + -0.88514953152211077736e+2, + 0.52301842018566276238e+2, + 0.53793876413673253012e+2, + -0.43544642939553092731e+2, + -0.60994688095245109594e+2, + 0.76522923418807948792e+2, + 0.41602171026975881318e+2, + -0.94746379076541899167e+2, + -0.97583184453579043804e+1, + 0.99662043706025144729e+2, + -0.12133360972632296182e+2, + -0.10132867633110588201e+3, + 0.47693041562205728212e+2, + 0.73796645071555161621e+2, + -0.34748446169015863916e+2, + -0.81663309642225442531e+2, + 0.38617801555158436599e+2, + 0.11154789844081234662e+3, + -0.89632933015787017439e+2, + -0.67397710014255551414e+2, + 0.74902890443805233645e+2, + 0.616874110235734463e+2, + -0.41489343030932261058e+2, + -0.10544584807345442812e+3, + 0.70289077244233354236e+2, + 0.10638609082859164801e+3, + -0.76265346419311640602e+2, + -0.83567152086562629165e+2, + 0.32899659099683908892e+2, + 0.1073891748124508041e+3, + 0.40744850922063768905e+1, + -0.14319092351102477778e+3, 0.72520092452492035395, - 0.11636083896684262129e+03, - 0.47018849150537164405e+02, - -0.81064658849299860321e+02, - -0.11753085256717433538e+03, - 0.74921437665663717098e+02, - 0.12690418128460210312e+03, - -0.13800917703709882911e+01, - -0.12345865602186914600e+03, - -0.83982430412160795186e+02, - 0.92636265818436612562e+02, - 0.13637549190483048278e+03, - 0.78840195286893406390e+01, - -0.14471322487700132342e+03, - -0.99882349783681874555e+02, - 0.42109674353998457264e+02, - 0.16538837175839333327e+03, - 0.96576874383432482318e+02, - -0.92467749154536349465e+02, - -0.14828380907545292189e+03, - -0.12264378392915369886e+03, - 0.78920469086721098506e+02, - 0.18307504950221860440e+03, - 0.13734339815617971681e+03, - 0.33232209629894164493e+02, - -0.16967822990299976027e+03, - -0.20136635444164625142e+03, - -0.15818025011748585484e+03, - -0.40557387346851719201e+02, - 0.15084249249558277484e+03, - 0.22293102677878277973e+03, - 0.29327451708726545121e+03, - 0.28708614324288771513e+03, - 0.20594978222667077716e+03, - 0.19288227655848896802e+03, - 0.94921067117853212380e+02, - 0.69140955720972257836e+02, - 0.55178356755895123342e+02, - -0.83122585251114884386e+01, - 0.40013469366442272701e+02, - -0.15792317852939380174e+02, - 0.50469396145701965750e+01, - 0.16020769229158332791e+02, - -0.27332507996877623668e+02, - 0.29798496774218243388e+02, - -0.20935736399381863038e+02, - 0.51767925939255015066e+01, - 0.11469843315978485165e+02, - -0.22676952465116215762e+02, - 0.24530454491178119270e+02, - -0.16919263487647210553e+02, - 0.33023080752877396193e+01, - 0.10687596013553262608e+02, - -0.19644297411171944390e+02, - 0.20341286629991028434e+02, - -0.12976561929165841391e+02, + 0.11636083896684262129e+3, + 0.47018849150537164405e+2, + -0.81064658849299860321e+2, + -0.11753085256717433538e+3, + 0.74921437665663717098e+2, + 0.12690418128460210312e+3, + -0.13800917703709882911e+1, + -0.123458656021869146e+3, + -0.83982430412160795186e+2, + 0.92636265818436612562e+2, + 0.13637549190483048278e+3, + 0.7884019528689340639e+1, + -0.14471322487700132342e+3, + -0.99882349783681874555e+2, + 0.42109674353998457264e+2, + 0.16538837175839333327e+3, + 0.96576874383432482318e+2, + -0.92467749154536349465e+2, + -0.14828380907545292189e+3, + -0.12264378392915369886e+3, + 0.78920469086721098506e+2, + 0.1830750495022186044e+3, + 0.13734339815617971681e+3, + 0.33232209629894164493e+2, + -0.16967822990299976027e+3, + -0.20136635444164625142e+3, + -0.15818025011748585484e+3, + -0.40557387346851719201e+2, + 0.15084249249558277484e+3, + 0.22293102677878277973e+3, + 0.29327451708726545121e+3, + 0.28708614324288771513e+3, + 0.20594978222667077716e+3, + 0.19288227655848896802e+3, + 0.9492106711785321238e+2, + 0.69140955720972257836e+2, + 0.55178356755895123342e+2, + -0.83122585251114884386e+1, + 0.40013469366442272701e+2, + -0.15792317852939380174e+2, + 0.5046939614570196575e+1, + 0.16020769229158332791e+2, + -0.27332507996877623668e+2, + 0.29798496774218243388e+2, + -0.20935736399381863038e+2, + 0.51767925939255015066e+1, + 0.11469843315978485165e+2, + -0.22676952465116215762e+2, + 0.2453045449117811927e+2, + -0.16919263487647210553e+2, + 0.33023080752877396193e+1, + 0.10687596013553262608e+2, + -0.1964429741117194439e+2, + 0.20341286629991028434e+2, + -0.12976561929165841391e+2, 0.80807719782077791493, - 0.11151857206003109368e+02, - -0.18259399106745259900e+02, - 0.17911163988736308994e+02, - -0.10545571108054318188e+02, + 0.11151857206003109368e+2, + -0.182593991067452599e+2, + 0.17911163988736308994e+2, + -0.10545571108054318188e+2, -0.75245475727966160129, - 0.11457284879563289337e+02, - -0.17468613995767160674e+02, - 0.16569088550694303308e+02, - -0.92626781190821070311e+01, - -0.15886193336449450086e+01, - 0.11851939171167218845e+02, - -0.17764962879767935533e+02, - 0.17248545694235900783e+02, - -0.10660362869587189039e+02, - 0.52058016287758646090, - 0.94403627422691407389e+01, - -0.15724010096401233483e+02, - 0.16282330879794105982e+02, - -0.11237065734087604341e+02, - 0.27211274972653178850e+01, - 0.59461895831076816421e+01, - -0.11537815857838950251e+02, - 0.12086708562582115789e+02, - -0.75981311346942321805e+01, - 0.19185331119712781600e+02, - -0.24226090208103506995e+02, - -0.51305910783702524114e+01, - 0.29647015870669275017e+02, - -0.46795507958716250130e+02, - 0.40921745824964197880e+02, - -0.21331354501286117653e+02, - -0.12943524846732938016e+02, - 0.40872228135998341259e+02, - -0.59379133491999077421e+02, - 0.52833827566968906808e+02, - -0.31026372157317712919e+02, - -0.62969109509438601080e+01, - 0.37490449053293453119e+02, - -0.59159173488489059878e+02, - 0.55702294228157256839e+02, - -0.37091720132535861865e+02, - 0.31380043028393331817e+01, - 0.24848326419562752676e+02, - -0.44252911306341147224e+02, - 0.40525014990752183053e+02, - -0.24508121071576603356e+02, - -0.37567363139430853813e+01, - 0.23715978411960492167e+02, - -0.34450353833880122068e+02, - 0.23633213410728110659e+02, - -0.41166191766120512341e+01, - -0.22989491330842106720e+02, - 0.37489659940939702665e+02, - -0.40183159623571448549e+02, - 0.21264465590487869662e+02, - 0.40355215198115015340e+01, - -0.33246097567255127103e+02, - 0.46356081196376941023e+02, - -0.45716134027139361251e+02, - 0.23782661646043901982e+02, - 0.25149079926567092791e+01, - -0.29805582323091954322e+02, - 0.40186570048388858822e+02, - -0.35425291772417175196e+02, - 0.17534502293277540730e+02, - 0.12887602808031047630e+02, - -0.12978720181938564693e+02, - 0.54168227254314032848e+02, - 0.33719025319791192885e+02, - 0.86733431465066630039e+02, - 0.16860789558406810329e+03, - 0.19637361614774926011e+03, - 0.32006176225998746077e+03, - 0.37184360212498313558e+03, - 0.35695540389917448465e+03, - 0.35747607683845092197e+03, - 0.13935528474409503019e+03, - -0.25386341339380496862e+02, - -0.19338508771209222914e+03, - -0.33259071535867974490e+03, - -0.14426842109228135769e+03, - -0.25478008133588566864e+02, - 0.20727508233602983978e+03, - 0.27200527191985332820e+03, - 0.33497417879126480500e+02, - -0.82469450285906361842e+02, - -0.25837723567630217758e+03, - -0.10976770840649750482e+03, - 0.15896473491915330101e+03, - 0.16260581601779074390e+03, - 0.10635761509419086224e+03, - -0.15365839757760053885e+03, - -0.21502256760602250552e+03, - 0.57340474268855231799e+02, - 0.13447895010416979744e+03, - 0.13822165318364000086e+03, - -0.84422735914986162697e+02, - -0.22964023294566152344e+03, - 0.67705082897758614990e+02, - 0.12542444771810725967e+03, - 0.90341391915145095481e+02, - -0.98440286199735240302e+02, - -0.19456175633577103667e+03, - 0.13509889287968439930e+03, - 0.12543802196680529448e+03, - -0.28049615405888278730e+02, - -0.12280939783364280515e+03, - -0.71256917616491520562e+02, - 0.18733415307873366373e+03, - 0.48222638909960977571e+02, - -0.16207689996944512245e+03, - -0.38656211036588430829e+02, - 0.99170392925350483893e+02, - 0.87178985861886317821e+02, - -0.90478743409494327921e+02, - -0.12614758207894938380e+03, - 0.13062456841633388649e+03, - 0.99492976223827668036e+02, - -0.14595371548645641724e+03, - -0.35976200122717699514e+02, - 0.75025995621700090510e+02, - 0.74223380848305211543e+02, - -0.72270843052621927427e+02, - -0.12797220678176664421e+03, - 0.18049938847890524585e+03, - 0.17520754822605976386e+02, - -0.14901018784268524087e+03, - 0.41885996583240398650e+02, - 0.62181881289389039580e+02, - 0.26421179162526662765e+02, - -0.11774829971659325167e+03, - 0.41459115907582155813e+01, - 0.15741352014664232684e+03, - -0.10598142495355355663e+03, - -0.88566048187620253884e+02, - 0.14135402499338070470e+03, - -0.48496304971513248816e+01, - -0.86481491522894046398e+02, - 0.10071630895621572321e+02, - 0.66951471993971935603e+02, - 0.11748258261155202220e+02, - -0.12879418401002027394e+03, - 0.81101500041291274101e+02, - 0.91669065349456062108e+02, - -0.15660825310861383741e+03, - 0.27711823013948215788e+02, - 0.11520526864783016663e+03, - -0.92288700464839180881e+02, - -0.34153900064575182682e+02, - 0.76478059771805305900e+02, + 0.11457284879563289337e+2, + -0.17468613995767160674e+2, + 0.16569088550694303308e+2, + -0.92626781190821070311e+1, + -0.15886193336449450086e+1, + 0.11851939171167218845e+2, + -0.17764962879767935533e+2, + 0.17248545694235900783e+2, + -0.10660362869587189039e+2, + 0.5205801628775864609, + 0.94403627422691407389e+1, + -0.15724010096401233483e+2, + 0.16282330879794105982e+2, + -0.11237065734087604341e+2, + 0.2721127497265317885e+1, + 0.59461895831076816421e+1, + -0.11537815857838950251e+2, + 0.12086708562582115789e+2, + -0.75981311346942321805e+1, + 0.191853311197127816e+2, + -0.24226090208103506995e+2, + -0.51305910783702524114e+1, + 0.29647015870669275017e+2, + -0.4679550795871625013e+2, + 0.4092174582496419788e+2, + -0.21331354501286117653e+2, + -0.12943524846732938016e+2, + 0.40872228135998341259e+2, + -0.59379133491999077421e+2, + 0.52833827566968906808e+2, + -0.31026372157317712919e+2, + -0.6296910950943860108e+1, + 0.37490449053293453119e+2, + -0.59159173488489059878e+2, + 0.55702294228157256839e+2, + -0.37091720132535861865e+2, + 0.31380043028393331817e+1, + 0.24848326419562752676e+2, + -0.44252911306341147224e+2, + 0.40525014990752183053e+2, + -0.24508121071576603356e+2, + -0.37567363139430853813e+1, + 0.23715978411960492167e+2, + -0.34450353833880122068e+2, + 0.23633213410728110659e+2, + -0.41166191766120512341e+1, + -0.2298949133084210672e+2, + 0.37489659940939702665e+2, + -0.40183159623571448549e+2, + 0.21264465590487869662e+2, + 0.4035521519811501534e+1, + -0.33246097567255127103e+2, + 0.46356081196376941023e+2, + -0.45716134027139361251e+2, + 0.23782661646043901982e+2, + 0.25149079926567092791e+1, + -0.29805582323091954322e+2, + 0.40186570048388858822e+2, + -0.35425291772417175196e+2, + 0.1753450229327754073e+2, + 0.1288760280803104763e+2, + -0.12978720181938564693e+2, + 0.54168227254314032848e+2, + 0.33719025319791192885e+2, + 0.86733431465066630039e+2, + 0.16860789558406810329e+3, + 0.19637361614774926011e+3, + 0.32006176225998746077e+3, + 0.37184360212498313558e+3, + 0.35695540389917448465e+3, + 0.35747607683845092197e+3, + 0.13935528474409503019e+3, + -0.25386341339380496862e+2, + -0.19338508771209222914e+3, + -0.3325907153586797449e+3, + -0.14426842109228135769e+3, + -0.25478008133588566864e+2, + 0.20727508233602983978e+3, + 0.2720052719198533282e+3, + 0.334974178791264805e+2, + -0.82469450285906361842e+2, + -0.25837723567630217758e+3, + -0.10976770840649750482e+3, + 0.15896473491915330101e+3, + 0.1626058160177907439e+3, + 0.10635761509419086224e+3, + -0.15365839757760053885e+3, + -0.21502256760602250552e+3, + 0.57340474268855231799e+2, + 0.13447895010416979744e+3, + 0.13822165318364000086e+3, + -0.84422735914986162697e+2, + -0.22964023294566152344e+3, + 0.6770508289775861499e+2, + 0.12542444771810725967e+3, + 0.90341391915145095481e+2, + -0.98440286199735240302e+2, + -0.19456175633577103667e+3, + 0.1350988928796843993e+3, + 0.12543802196680529448e+3, + -0.2804961540588827873e+2, + -0.12280939783364280515e+3, + -0.71256917616491520562e+2, + 0.18733415307873366373e+3, + 0.48222638909960977571e+2, + -0.16207689996944512245e+3, + -0.38656211036588430829e+2, + 0.99170392925350483893e+2, + 0.87178985861886317821e+2, + -0.90478743409494327921e+2, + -0.1261475820789493838e+3, + 0.13062456841633388649e+3, + 0.99492976223827668036e+2, + -0.14595371548645641724e+3, + -0.35976200122717699514e+2, + 0.7502599562170009051e+2, + 0.74223380848305211543e+2, + -0.72270843052621927427e+2, + -0.12797220678176664421e+3, + 0.18049938847890524585e+3, + 0.17520754822605976386e+2, + -0.14901018784268524087e+3, + 0.4188599658324039865e+2, + 0.6218188128938903958e+2, + 0.26421179162526662765e+2, + -0.11774829971659325167e+3, + 0.41459115907582155813e+1, + 0.15741352014664232684e+3, + -0.10598142495355355663e+3, + -0.88566048187620253884e+2, + 0.1413540249933807047e+3, + -0.48496304971513248816e+1, + -0.86481491522894046398e+2, + 0.10071630895621572321e+2, + 0.66951471993971935603e+2, + 0.1174825826115520222e+2, + -0.12879418401002027394e+3, + 0.81101500041291274101e+2, + 0.91669065349456062108e+2, + -0.15660825310861383741e+3, + 0.27711823013948215788e+2, + 0.11520526864783016663e+3, + -0.92288700464839180881e+2, + -0.34153900064575182682e+2, + 0.764780597718053059e+2, -0.28233769547806636391, - -0.47732390637446648896e+02, - -0.23354893430433214974e+02, - 0.10618895086491090751e+03, - -0.53471301227954306512e+02, - -0.10094438013146691446e+03, - 0.17187895668790767445e+03, - -0.65263425224877011033e+02, - -0.99009878385714088722e+02, - 0.13943483499682727711e+03, - -0.35100180408703216983e+02, - -0.68521319245130513309e+02, - 0.55107938312070352538e+02, - 0.26684882012500338533e+02, - -0.51523048664339910374e+02, - -0.94609972625397187329e+01, - 0.59026869871337680706e+02, - -0.16740617245878517849e+02, - -0.66118543284845245012e+02, - 0.69482186861196396421e+02, - 0.35151413776921792476e+02, - -0.13599666335926283978e+03, - 0.10696116040541930658e+03, - 0.40211972639399931495e+02, - -0.16179295183589911744e+03, - 0.13726055147564011349e+03, - 0.21193076311182075244e+01, - -0.11434566013853124389e+03, - 0.10056481323698673691e+03, + -0.47732390637446648896e+2, + -0.23354893430433214974e+2, + 0.10618895086491090751e+3, + -0.53471301227954306512e+2, + -0.10094438013146691446e+3, + 0.17187895668790767445e+3, + -0.65263425224877011033e+2, + -0.99009878385714088722e+2, + 0.13943483499682727711e+3, + -0.35100180408703216983e+2, + -0.68521319245130513309e+2, + 0.55107938312070352538e+2, + 0.26684882012500338533e+2, + -0.51523048664339910374e+2, + -0.94609972625397187329e+1, + 0.59026869871337680706e+2, + -0.16740617245878517849e+2, + -0.66118543284845245012e+2, + 0.69482186861196396421e+2, + 0.35151413776921792476e+2, + -0.13599666335926283978e+3, + 0.10696116040541930658e+3, + 0.40211972639399931495e+2, + -0.16179295183589911744e+3, + 0.13726055147564011349e+3, + 0.21193076311182075244e+1, + -0.11434566013853124389e+3, + 0.10056481323698673691e+3, -0.28117566764095686116, - -0.68903375650986788514e+02, - 0.43483879065094818372e+02, - 0.29066871893542884919e+02, - -0.60712605658756238824e+02, - 0.25012595006119376251e+02, - 0.23723171241476318727e+02, - -0.26562508756812235333e+02, - -0.81516616797791545679e+01, - 0.19681238355880193325e+02, - 0.24045606986911661096e+02, - -0.79799745858008705568e+02, - 0.72972432492444070817e+02, - 0.13866261975379071458e+02, - -0.10982570108248448548e+03, - 0.12064259324205913515e+03, - -0.26875003832353122846e+02, - -0.89177192466156952833e+02, - 0.11864741999658961902e+03, - -0.32530956124898096959e+02, - -0.87445562379586988300e+02, - 0.12441772633758967004e+03, - -0.37837353064406634928e+02, - -0.96814393536584859135e+02, - 0.15652418142316662397e+03, - -0.83940014304158680147e+02, - -0.60688206864464724788e+02, - 0.15406368979816875253e+03, - -0.11998527044725456392e+03, - -0.58238926408693902914e+01, - 0.11103053339506392660e+03, - -0.10769508386682062451e+03, - 0.70268197306724937690e+01, - 0.95098839180291804496e+02, - -0.10557426178495053648e+03, - 0.14880080601328668166e+02, - 0.97244817328816267832e+02, - -0.13321279132616174934e+03, - 0.61461368334919789902e+02, - 0.58321407807759214847e+02, - -0.12792628144200962481e+03, - 0.93759084209022944378e+02, - 0.99448742286277802549e+01, - -0.92816424163416726856e+02, - 0.86030719682424631856e+02, - -0.72237511994140817251e+02, - -0.18042414529483338015e+02, - 0.16587371223801613951e+03, - -0.17733923229496366503e+03, - 0.14320970279872959452e+02, - 0.16537818107179899130e+03, - -0.22125432423679851013e+03, - 0.83673748844935900593e+02, - 0.10734872478172435706e+03, - -0.20179355906016397171e+03, - 0.10325582604943025444e+03, - 0.69648166333428150665e+02, - -0.16839938122162246259e+03, - 0.82966996932227971229e+02, - 0.80728124505121186871e+02, - -0.17540441935537336349e+03, - 0.84583732282912379219e+02, - 0.89190426079217715483e+02, - -0.19431568990981463685e+03, - 0.10820372204191498611e+03, - 0.66964592933183027412e+02, - -0.17518083766588532058e+03, - 0.93086431211754643300e+02, - 0.70528690702439845950e+02, - -0.15405193774697448816e+03, - 0.42100644641843722127e+02, - 0.13510022797249015980e+03, - -0.19897391879135284398e+03, - 0.41456872454895901114e+02, - 0.17697709860701004914e+03, - -0.25034446634668194065e+03, - 0.72249480066257561361e+02, - 0.16812870755067018536e+03, - -0.23982560546613129304e+03, - 0.42940364114530105155e+02, - 0.20241706980893860646e+03, - -0.24600693685242740116e+03, - 0.54054220874067686609e+01, - 0.26184617667868775470e+03, - -0.28985529882791797718e+03, - 0.20253986418176243234e+02, - 0.25575350119197494791e+03, - -0.27281999747110847920e+03, - 0.86980442678925715683e+01, - 0.22334677002513527100e+03, - -0.19145759755082340803e+03, - -0.64457958892101387960e+02, - 0.21675741846702416638e+03, - -0.10221037574560105554e+03, - -0.15108383776726441283e+03, - 0.21108765656211855344e+03, - -0.13550535568142271003e+02, - -0.21595599387003463221e+03, - 0.16829831820101833273e+03, - 0.91987917443903356229e+02, - -0.25292429615430344825e+03, - 0.73540421483211318332e+02, - 0.22950821512361579835e+03, - -0.29117530446242250264e+03, - -0.12110312066571667700e+02, - 0.31901897391069252308e+03, - -0.28010011669728993411e+03, - -0.68181526573283520065e+02, - 0.27752559774670214665e+03, - -0.12228071692711185392e+03, - -0.17457612278819570406e+03, - 0.17920250435066429873e+03, - 0.10026257911225853547e+03, - -0.27931100925276086855e+03, - 0.67049045791449799481e+02, - 0.24663231166327148003e+03, - -0.23488872095904491744e+03, - -0.12028565412806148061e+03, - 0.30892696509692154905e+03, - -0.60086711086960953310e+02, - -0.31250432786576402577e+03, - 0.26995352095660501845e+03, - 0.11894900493497449645e+03, - -0.32253727607131361310e+03, - 0.57799626336897759415e+02, - 0.22925078332239164070e+03, - -0.97746081400664280636e+02, - -0.25467941282315712215e+03, - 0.21983586878028307865e+03, - 0.19945273936488970890e+03, - -0.39821950239129859028e+03, - 0.37347985814929252513e+02, - 0.33503801378200404315e+03, - -0.17745976198445839600e+03, - -0.23387412824326011673e+03, - 0.18873709254659866019e+03, - 0.22277396972690974053e+03, - -0.29399565584642397198e+03, - -0.15121664702582339146e+03, - 0.35638149626690466221e+03, - 0.36206797627187569333e+02, - -0.37684112924289939883e+03, - 0.48662440695682647629e+02, - 0.37286549123154861718e+03, - -0.15883983587641861845e+03, - -0.30555067822522340748e+03, - 0.14645493693635049226e+03, - 0.31666508174680569709e+03, - -0.17379311133827158642e+03, - -0.38539320768978001297e+03, - 0.30353292663802625384e+03, - 0.27869724658636096137e+03, - -0.28398069156298635107e+03, - -0.25678446894097322684e+03, - 0.18857347582528635144e+03, - 0.37696345856316656864e+03, - -0.25933378310431260161e+03, - -0.39590247010650688253e+03, - 0.27095722845185389360e+03, - 0.33539919003706881995e+03, - -0.12868937866263624414e+03, - -0.42366086862104094735e+03, - 0.12101219283214220468e+02, - 0.51613047471425977619e+03, - 0.15793250913344222042e+02, - -0.44318562173273244298e+03, - -0.19789517310893648983e+03, - 0.33882989134416754951e+03, - 0.41746046908719154089e+03, - -0.26453846145387791466e+03, - -0.49049790378008390235e+03, - 0.30051043268870532982e-01, - 0.48222150478668231699e+03, - 0.30724508715961263761e+03, - -0.34263772368732134055e+03, - -0.52799629315277263686e+03, - -0.20491968283666235351e+02, - 0.53835363011513231868e+03, - 0.39587370041577247548e+03, - -0.17347918706776351883e+03, - -0.62614490147011815679e+03, - -0.35733963678133312669e+03, - 0.32664452060453726290e+03, - 0.59978324174155261517e+03, - 0.43351685539250752299e+03, - -0.27952110778868882335e+03, - -0.69857614512901375292e+03, - -0.54225867640419028248e+03, - -0.94855878348084374352e+02, - 0.61412256644951651197e+03, - 0.78796264042810457795e+03, - 0.59978775330163944091e+03, - 0.14056366542533569941e+03, - -0.55259452543932627577e+03, - -0.86742772416412253733e+03, - -0.11129984666100697268e+04, - -0.10804913973433810952e+04, - -0.81044564219156882245e+03, - -0.70733477274682525149e+03, - -0.37786530298511240744e+03, - -0.26734745685657708236e+03, - -0.18487331321321045152e+03, - -0.76191060027008825628e+01, - -0.11257221555204812091e+03, - 0.33819666503699416182e+02, - -0.15814966408501438977e+02, - -0.40487979986833906310e+02, - 0.67233045116323779666e+02, - -0.73580327200166863122e+02, - 0.50564542275033389274e+02, - -0.10486087062358359745e+02, - -0.31630395426724735586e+02, - 0.59557072800403268786e+02, - -0.63405710393840699624e+02, - 0.43034311703571056285e+02, - -0.74399228811739526179e+01, - -0.28818867961014767332e+02, - 0.51839115365616088127e+02, - -0.53353606082016710843e+02, - 0.33961675444526377987e+02, - -0.21381556420141478725e+01, - -0.29105535523304453704e+02, - 0.47734317854093731626e+02, - -0.46970857528664019753e+02, - 0.27914431341180982571e+02, - 0.15019316188040670035e+01, - -0.29583944816279988288e+02, - 0.45710980292835728278e+02, - -0.44069947245847203021e+02, - 0.25852540444316762347e+02, - 0.16870990552538613905e+01, - -0.27990477692199863924e+02, - 0.43426271701033222428e+02, - -0.42639641427205155821e+02, - 0.26508808048000020108e+02, - -0.14275997788652143861e+01, - -0.23117000873570312081e+02, - 0.38254708783815679851e+02, - -0.38836811948379143189e+02, - 0.25283006434167859311e+02, - -0.31504380482739535729e+01, - -0.18987278589574295040e+02, - 0.32840127341793589721e+02, - -0.33397856797492053715e+02, - 0.20760998504165659284e+02, - -0.40280041090136570858e+02, - 0.47137805955117158874e+02, - 0.15538681252794694032e+02, - -0.65147072011721121498e+02, - 0.98416882753552044960e+02, - -0.83890165153139150789e+02, - 0.43206654616085771181e+02, - 0.25750846000208202469e+02, - -0.79170548701674221093e+02, - 0.11308224990716873037e+03, - -0.96401411732933752319e+02, - 0.51943361741072038740e+02, - 0.20917857209342400893e+02, - -0.77294400017564029781e+02, - 0.11296252872988182503e+03, - -0.97521602168813529943e+02, - 0.54915586141884119797e+02, - 0.14568214147876307862e+02, - -0.66098111403983537571e+02, - 0.96699460251741768957e+02, - -0.78162468425509729286e+02, - 0.36629684343616908393e+02, - 0.26425097562410165608e+02, - -0.66883352341494500592e+02, - 0.84442708110535150468e+02, - -0.54853093042185541606e+02, - 0.80380681131384719151e+01, - 0.52392611791315999881e+02, - -0.82909817212441083711e+02, - 0.86456823668988448617e+02, - -0.43632803386390456524e+02, - -0.11108085108261377627e+02, - 0.71723618934298556837e+02, - -0.95467541425803162269e+02, - 0.88896037921439599927e+02, - -0.37689751413706261474e+02, - -0.19878671735910447893e+02, - 0.75715284497424576671e+02, - -0.91592148287392475936e+02, - 0.72983745211029955158e+02, - -0.26441966512005365075e+02, - -0.44166576374209398637e+02, - 0.45403112369717000263e+02, - -0.12977399096877118723e+03, - -0.66203679015478130054e+02, - -0.18258368622150817373e+03, - -0.37274581323716330417e+03, - -0.40457988923814849613e+03, - -0.70200573501376152308e+03, - -0.78531077747416134116e+03, - -0.76847978253131395832e+03, - -0.77115409671086877097e+03, - -0.28634839072414916927e+03, - 0.38573199103044110814e+02, - 0.42957422257987258263e+03, - 0.70195584840438755236e+03, - 0.31335130918909464981e+03, - 0.57088883620435638022e+02, - -0.45153197067801397679e+03, - -0.57342791161211664530e+03, - -0.80292094953360674481e+02, - 0.18232052138175816935e+03, - 0.55160002725253411882e+03, - 0.23474256837542478138e+03, - -0.33949524377939252417e+03, - -0.34812470704147602873e+03, - -0.23096996424858465957e+03, - 0.33514671798971568251e+03, - 0.45353546162554715693e+03, - -0.11666130832704857312e+03, - -0.29069621496906313496e+03, - -0.29916258330946743627e+03, - 0.18982249664840804826e+03, - 0.47866725660270321896e+03, - -0.13000194410631644359e+03, - -0.28181718593179493837e+03, - -0.18586137749633786598e+03, - 0.21065128105091062594e+03, - 0.40970093311798586910e+03, - -0.27662304244226135097e+03, - -0.28383933650679722405e+03, - 0.73346936074711777565e+02, - 0.25525368106948141644e+03, - 0.15336985591281106167e+03, - -0.39495005580272317047e+03, - -0.11476162084030738697e+03, - 0.36015561257397376949e+03, - 0.72582601907017320286e+02, - -0.20803608478950096128e+03, - -0.18387868685955942283e+03, - 0.18411783486163832890e+03, - 0.28446647913700661547e+03, - -0.29462045691801421299e+03, - -0.20191910810797210729e+03, - 0.30816137211967327403e+03, - 0.73519274235877247747e+02, - -0.14951869707931626863e+03, - -0.17550062970108689342e+03, - 0.17287687320502541866e+03, - 0.25867577150317623591e+03, - -0.37693910627083641884e+03, - -0.39804590749777176484e+02, - 0.31398280523830101174e+03, - -0.78430525956468159166e+02, - -0.14777624601009139838e+03, - -0.41955289500235032563e+02, - 0.24025154291906079607e+03, - -0.10537610835934814180e+01, - -0.34044018284018068243e+03, - 0.22625689465967448655e+03, - 0.19324232879323633938e+03, - -0.30738962903980507235e+03, - 0.14772597587658550466e+02, - 0.18157598934269256574e+03, - -0.18226786552275761721e+02, - -0.14708404696160692993e+03, - -0.20525960937501341874e+02, - 0.26999395673282771213e+03, - -0.16675865636785746915e+03, - -0.20337588440640820409e+03, - 0.34086480310483796075e+03, - -0.61272262973925812446e+02, - -0.24954688156301861568e+03, - 0.20531636932609109181e+03, - 0.61697771816649336074e+02, - -0.15044548293238460701e+03, - -0.12016585503585483607e+02, - 0.11131701899285006618e+03, - 0.46802180611072323302e+02, - -0.23100267170829158658e+03, - 0.12416135387461102368e+03, - 0.20271518573111515593e+03, - -0.35378659683552524484e+03, - 0.12783797280924935080e+03, - 0.21880222035181333240e+03, - -0.29838784720137294926e+03, - 0.67848357081921406575e+02, - 0.15943613132933694487e+03, - -0.13284480388885199886e+03, - -0.43881690124876783443e+02, - 0.10190873471375154224e+03, - 0.21810686217346880511e+02, - -0.12054553467713492410e+03, - 0.23823362945650419675e+02, - 0.15698815530810307450e+03, - -0.16370362863332400138e+03, - -0.64653985976731505048e+02, - 0.28764154195443461504e+03, - -0.23339028972296671327e+03, - -0.74808305638760060674e+02, - 0.33075438712338768710e+03, - -0.27730585855108142823e+03, - -0.18208119754211782748e+02, - 0.25219937659443687039e+03, - -0.21425681962709703043e+03, - -0.90070196722220057239e+01, - 0.16368910693605087658e+03, - -0.11216623636687292276e+03, - -0.44518187418568409441e+02, - 0.11752172478414732382e+03, - -0.49024189681635057525e+02, - -0.46327010257137352767e+02, - 0.44283120442521706650e+02, - 0.35527459055672359511e+02, - -0.61754960291210096557e+02, - -0.34585975120442462583e+02, - 0.16025253406964080227e+03, - -0.15392583834948618460e+03, - -0.23577472654184099099e+02, - 0.22226326863774866638e+03, - -0.24160258497632355557e+03, - 0.40727854631644163419e+02, - 0.20414193526945047097e+03, - -0.26064986607361947790e+03, - 0.68230248108763419168e+02, - 0.19619602847649383648e+03, - -0.28052852983483637672e+03, - 0.96770746232304688306e+02, - 0.19370960437544817978e+03, - -0.32681320452280630207e+03, - 0.17846257373310714911e+03, - 0.12389163772828692345e+03, - -0.31773387919008092695e+03, - 0.24118834621820698771e+03, - 0.28431118030030649635e+02, - -0.25040049130770020724e+03, - 0.23706796424552612734e+03, - -0.13810713410298856019e+02, - -0.21225926661013380681e+03, - 0.24006657394890200408e+03, - -0.48061493993352470966e+02, - -0.19334479577312478682e+03, - 0.27474069208129571962e+03, - -0.12748684693440507942e+03, - -0.12197381114813576630e+03, - 0.26480489958304298170e+03, - -0.18754785887267809130e+03, - -0.35563048327970818718e+02, - 0.21072404608760305678e+03, - -0.19103449379535163644e+03, - 0.13008623161945070024e+03, - 0.61154034238855025762e+02, - -0.31963703434281012505e+03, - 0.30970610272891042314e+03, - 0.57479429592174247077e+01, - -0.31767145826591939795e+03, - 0.38037362740187796817e+03, - -0.98360965378326170594e+02, - -0.24533485572175314360e+03, - 0.37859038592067287254e+03, - -0.15341142308333570554e+03, - -0.18009896662342046625e+03, - 0.34003264737491429059e+03, - -0.14340899861909056767e+03, - -0.18336811535981661336e+03, - 0.35169706462556490578e+03, - -0.15570077918232090042e+03, - -0.18924806294850461086e+03, - 0.38237797288697481690e+03, - -0.19804302579565234055e+03, - -0.15381909162578091355e+03, - 0.36065725224263644577e+03, - -0.18605119301820815281e+03, - -0.15493489903659201445e+03, - 0.33727834136981289248e+03, - -0.12795613976218221808e+03, - -0.23160967259134051233e+03, - 0.39075546494665724140e+03, - -0.12375236554000652234e+03, - -0.28622558572625104034e+03, - 0.45032216965512043316e+03, - -0.14865936852235049059e+03, - -0.29009054890940842597e+03, - 0.44184294762402436163e+03, - -0.10425393114227993863e+03, - -0.34059900075851220436e+03, - 0.44215303961183570891e+03, - -0.36625863963333664231e+02, - -0.42744932834542612454e+03, - 0.48140820868658937570e+03, - -0.17735764887905805409e+02, - -0.44827504956849338669e+03, - 0.45521043839246141260e+03, - 0.24064380250656160598e+02, - -0.42058158780377578978e+03, - 0.33025677611266814893e+03, - 0.15282542753629476806e+03, - -0.41999991047958326362e+03, - 0.18247360370521798245e+03, - 0.30516311924866175787e+03, - -0.41816248866913974780e+03, - 0.38243010096762922956e+02, - 0.40729299680722539279e+03, - -0.33280419806451095610e+03, - -0.15305984339823996265e+03, - 0.47289503713630688253e+03, - -0.16694286565550027035e+03, - -0.38505713497344282814e+03, - 0.51989073978318469926e+03, + -0.68903375650986788514e+2, + 0.43483879065094818372e+2, + 0.29066871893542884919e+2, + -0.60712605658756238824e+2, + 0.25012595006119376251e+2, + 0.23723171241476318727e+2, + -0.26562508756812235333e+2, + -0.81516616797791545679e+1, + 0.19681238355880193325e+2, + 0.24045606986911661096e+2, + -0.79799745858008705568e+2, + 0.72972432492444070817e+2, + 0.13866261975379071458e+2, + -0.10982570108248448548e+3, + 0.12064259324205913515e+3, + -0.26875003832353122846e+2, + -0.89177192466156952833e+2, + 0.11864741999658961902e+3, + -0.32530956124898096959e+2, + -0.874455623795869883e+2, + 0.12441772633758967004e+3, + -0.37837353064406634928e+2, + -0.96814393536584859135e+2, + 0.15652418142316662397e+3, + -0.83940014304158680147e+2, + -0.60688206864464724788e+2, + 0.15406368979816875253e+3, + -0.11998527044725456392e+3, + -0.58238926408693902914e+1, + 0.1110305333950639266e+3, + -0.10769508386682062451e+3, + 0.7026819730672493769e+1, + 0.95098839180291804496e+2, + -0.10557426178495053648e+3, + 0.14880080601328668166e+2, + 0.97244817328816267832e+2, + -0.13321279132616174934e+3, + 0.61461368334919789902e+2, + 0.58321407807759214847e+2, + -0.12792628144200962481e+3, + 0.93759084209022944378e+2, + 0.99448742286277802549e+1, + -0.92816424163416726856e+2, + 0.86030719682424631856e+2, + -0.72237511994140817251e+2, + -0.18042414529483338015e+2, + 0.16587371223801613951e+3, + -0.17733923229496366503e+3, + 0.14320970279872959452e+2, + 0.1653781810717989913e+3, + -0.22125432423679851013e+3, + 0.83673748844935900593e+2, + 0.10734872478172435706e+3, + -0.20179355906016397171e+3, + 0.10325582604943025444e+3, + 0.69648166333428150665e+2, + -0.16839938122162246259e+3, + 0.82966996932227971229e+2, + 0.80728124505121186871e+2, + -0.17540441935537336349e+3, + 0.84583732282912379219e+2, + 0.89190426079217715483e+2, + -0.19431568990981463685e+3, + 0.10820372204191498611e+3, + 0.66964592933183027412e+2, + -0.17518083766588532058e+3, + 0.930864312117546433e+2, + 0.7052869070243984595e+2, + -0.15405193774697448816e+3, + 0.42100644641843722127e+2, + 0.1351002279724901598e+3, + -0.19897391879135284398e+3, + 0.41456872454895901114e+2, + 0.17697709860701004914e+3, + -0.25034446634668194065e+3, + 0.72249480066257561361e+2, + 0.16812870755067018536e+3, + -0.23982560546613129304e+3, + 0.42940364114530105155e+2, + 0.20241706980893860646e+3, + -0.24600693685242740116e+3, + 0.54054220874067686609e+1, + 0.2618461766786877547e+3, + -0.28985529882791797718e+3, + 0.20253986418176243234e+2, + 0.25575350119197494791e+3, + -0.2728199974711084792e+3, + 0.86980442678925715683e+1, + 0.223346770025135271e+3, + -0.19145759755082340803e+3, + -0.6445795889210138796e+2, + 0.21675741846702416638e+3, + -0.10221037574560105554e+3, + -0.15108383776726441283e+3, + 0.21108765656211855344e+3, + -0.13550535568142271003e+2, + -0.21595599387003463221e+3, + 0.16829831820101833273e+3, + 0.91987917443903356229e+2, + -0.25292429615430344825e+3, + 0.73540421483211318332e+2, + 0.22950821512361579835e+3, + -0.29117530446242250264e+3, + -0.121103120665716677e+2, + 0.31901897391069252308e+3, + -0.28010011669728993411e+3, + -0.68181526573283520065e+2, + 0.27752559774670214665e+3, + -0.12228071692711185392e+3, + -0.17457612278819570406e+3, + 0.17920250435066429873e+3, + 0.10026257911225853547e+3, + -0.27931100925276086855e+3, + 0.67049045791449799481e+2, + 0.24663231166327148003e+3, + -0.23488872095904491744e+3, + -0.12028565412806148061e+3, + 0.30892696509692154905e+3, + -0.6008671108696095331e+2, + -0.31250432786576402577e+3, + 0.26995352095660501845e+3, + 0.11894900493497449645e+3, + -0.3225372760713136131e+3, + 0.57799626336897759415e+2, + 0.2292507833223916407e+3, + -0.97746081400664280636e+2, + -0.25467941282315712215e+3, + 0.21983586878028307865e+3, + 0.1994527393648897089e+3, + -0.39821950239129859028e+3, + 0.37347985814929252513e+2, + 0.33503801378200404315e+3, + -0.177459761984458396e+3, + -0.23387412824326011673e+3, + 0.18873709254659866019e+3, + 0.22277396972690974053e+3, + -0.29399565584642397198e+3, + -0.15121664702582339146e+3, + 0.35638149626690466221e+3, + 0.36206797627187569333e+2, + -0.37684112924289939883e+3, + 0.48662440695682647629e+2, + 0.37286549123154861718e+3, + -0.15883983587641861845e+3, + -0.30555067822522340748e+3, + 0.14645493693635049226e+3, + 0.31666508174680569709e+3, + -0.17379311133827158642e+3, + -0.38539320768978001297e+3, + 0.30353292663802625384e+3, + 0.27869724658636096137e+3, + -0.28398069156298635107e+3, + -0.25678446894097322684e+3, + 0.18857347582528635144e+3, + 0.37696345856316656864e+3, + -0.25933378310431260161e+3, + -0.39590247010650688253e+3, + 0.2709572284518538936e+3, + 0.33539919003706881995e+3, + -0.12868937866263624414e+3, + -0.42366086862104094735e+3, + 0.12101219283214220468e+2, + 0.51613047471425977619e+3, + 0.15793250913344222042e+2, + -0.44318562173273244298e+3, + -0.19789517310893648983e+3, + 0.33882989134416754951e+3, + 0.41746046908719154089e+3, + -0.26453846145387791466e+3, + -0.49049790378008390235e+3, + 0.30051043268870532982e-1, + 0.48222150478668231699e+3, + 0.30724508715961263761e+3, + -0.34263772368732134055e+3, + -0.52799629315277263686e+3, + -0.20491968283666235351e+2, + 0.53835363011513231868e+3, + 0.39587370041577247548e+3, + -0.17347918706776351883e+3, + -0.62614490147011815679e+3, + -0.35733963678133312669e+3, + 0.3266445206045372629e+3, + 0.59978324174155261517e+3, + 0.43351685539250752299e+3, + -0.27952110778868882335e+3, + -0.69857614512901375292e+3, + -0.54225867640419028248e+3, + -0.94855878348084374352e+2, + 0.61412256644951651197e+3, + 0.78796264042810457795e+3, + 0.59978775330163944091e+3, + 0.14056366542533569941e+3, + -0.55259452543932627577e+3, + -0.86742772416412253733e+3, + -0.11129984666100697268e+4, + -0.10804913973433810952e+4, + -0.81044564219156882245e+3, + -0.70733477274682525149e+3, + -0.37786530298511240744e+3, + -0.26734745685657708236e+3, + -0.18487331321321045152e+3, + -0.76191060027008825628e+1, + -0.11257221555204812091e+3, + 0.33819666503699416182e+2, + -0.15814966408501438977e+2, + -0.4048797998683390631e+2, + 0.67233045116323779666e+2, + -0.73580327200166863122e+2, + 0.50564542275033389274e+2, + -0.10486087062358359745e+2, + -0.31630395426724735586e+2, + 0.59557072800403268786e+2, + -0.63405710393840699624e+2, + 0.43034311703571056285e+2, + -0.74399228811739526179e+1, + -0.28818867961014767332e+2, + 0.51839115365616088127e+2, + -0.53353606082016710843e+2, + 0.33961675444526377987e+2, + -0.21381556420141478725e+1, + -0.29105535523304453704e+2, + 0.47734317854093731626e+2, + -0.46970857528664019753e+2, + 0.27914431341180982571e+2, + 0.15019316188040670035e+1, + -0.29583944816279988288e+2, + 0.45710980292835728278e+2, + -0.44069947245847203021e+2, + 0.25852540444316762347e+2, + 0.16870990552538613905e+1, + -0.27990477692199863924e+2, + 0.43426271701033222428e+2, + -0.42639641427205155821e+2, + 0.26508808048000020108e+2, + -0.14275997788652143861e+1, + -0.23117000873570312081e+2, + 0.38254708783815679851e+2, + -0.38836811948379143189e+2, + 0.25283006434167859311e+2, + -0.31504380482739535729e+1, + -0.1898727858957429504e+2, + 0.32840127341793589721e+2, + -0.33397856797492053715e+2, + 0.20760998504165659284e+2, + -0.40280041090136570858e+2, + 0.47137805955117158874e+2, + 0.15538681252794694032e+2, + -0.65147072011721121498e+2, + 0.9841688275355204496e+2, + -0.83890165153139150789e+2, + 0.43206654616085771181e+2, + 0.25750846000208202469e+2, + -0.79170548701674221093e+2, + 0.11308224990716873037e+3, + -0.96401411732933752319e+2, + 0.5194336174107203874e+2, + 0.20917857209342400893e+2, + -0.77294400017564029781e+2, + 0.11296252872988182503e+3, + -0.97521602168813529943e+2, + 0.54915586141884119797e+2, + 0.14568214147876307862e+2, + -0.66098111403983537571e+2, + 0.96699460251741768957e+2, + -0.78162468425509729286e+2, + 0.36629684343616908393e+2, + 0.26425097562410165608e+2, + -0.66883352341494500592e+2, + 0.84442708110535150468e+2, + -0.54853093042185541606e+2, + 0.80380681131384719151e+1, + 0.52392611791315999881e+2, + -0.82909817212441083711e+2, + 0.86456823668988448617e+2, + -0.43632803386390456524e+2, + -0.11108085108261377627e+2, + 0.71723618934298556837e+2, + -0.95467541425803162269e+2, + 0.88896037921439599927e+2, + -0.37689751413706261474e+2, + -0.19878671735910447893e+2, + 0.75715284497424576671e+2, + -0.91592148287392475936e+2, + 0.72983745211029955158e+2, + -0.26441966512005365075e+2, + -0.44166576374209398637e+2, + 0.45403112369717000263e+2, + -0.12977399096877118723e+3, + -0.66203679015478130054e+2, + -0.18258368622150817373e+3, + -0.37274581323716330417e+3, + -0.40457988923814849613e+3, + -0.70200573501376152308e+3, + -0.78531077747416134116e+3, + -0.76847978253131395832e+3, + -0.77115409671086877097e+3, + -0.28634839072414916927e+3, + 0.38573199103044110814e+2, + 0.42957422257987258263e+3, + 0.70195584840438755236e+3, + 0.31335130918909464981e+3, + 0.57088883620435638022e+2, + -0.45153197067801397679e+3, + -0.5734279116121166453e+3, + -0.80292094953360674481e+2, + 0.18232052138175816935e+3, + 0.55160002725253411882e+3, + 0.23474256837542478138e+3, + -0.33949524377939252417e+3, + -0.34812470704147602873e+3, + -0.23096996424858465957e+3, + 0.33514671798971568251e+3, + 0.45353546162554715693e+3, + -0.11666130832704857312e+3, + -0.29069621496906313496e+3, + -0.29916258330946743627e+3, + 0.18982249664840804826e+3, + 0.47866725660270321896e+3, + -0.13000194410631644359e+3, + -0.28181718593179493837e+3, + -0.18586137749633786598e+3, + 0.21065128105091062594e+3, + 0.4097009331179858691e+3, + -0.27662304244226135097e+3, + -0.28383933650679722405e+3, + 0.73346936074711777565e+2, + 0.25525368106948141644e+3, + 0.15336985591281106167e+3, + -0.39495005580272317047e+3, + -0.11476162084030738697e+3, + 0.36015561257397376949e+3, + 0.72582601907017320286e+2, + -0.20803608478950096128e+3, + -0.18387868685955942283e+3, + 0.1841178348616383289e+3, + 0.28446647913700661547e+3, + -0.29462045691801421299e+3, + -0.20191910810797210729e+3, + 0.30816137211967327403e+3, + 0.73519274235877247747e+2, + -0.14951869707931626863e+3, + -0.17550062970108689342e+3, + 0.17287687320502541866e+3, + 0.25867577150317623591e+3, + -0.37693910627083641884e+3, + -0.39804590749777176484e+2, + 0.31398280523830101174e+3, + -0.78430525956468159166e+2, + -0.14777624601009139838e+3, + -0.41955289500235032563e+2, + 0.24025154291906079607e+3, + -0.1053761083593481418e+1, + -0.34044018284018068243e+3, + 0.22625689465967448655e+3, + 0.19324232879323633938e+3, + -0.30738962903980507235e+3, + 0.14772597587658550466e+2, + 0.18157598934269256574e+3, + -0.18226786552275761721e+2, + -0.14708404696160692993e+3, + -0.20525960937501341874e+2, + 0.26999395673282771213e+3, + -0.16675865636785746915e+3, + -0.20337588440640820409e+3, + 0.34086480310483796075e+3, + -0.61272262973925812446e+2, + -0.24954688156301861568e+3, + 0.20531636932609109181e+3, + 0.61697771816649336074e+2, + -0.15044548293238460701e+3, + -0.12016585503585483607e+2, + 0.11131701899285006618e+3, + 0.46802180611072323302e+2, + -0.23100267170829158658e+3, + 0.12416135387461102368e+3, + 0.20271518573111515593e+3, + -0.35378659683552524484e+3, + 0.1278379728092493508e+3, + 0.2188022203518133324e+3, + -0.29838784720137294926e+3, + 0.67848357081921406575e+2, + 0.15943613132933694487e+3, + -0.13284480388885199886e+3, + -0.43881690124876783443e+2, + 0.10190873471375154224e+3, + 0.21810686217346880511e+2, + -0.1205455346771349241e+3, + 0.23823362945650419675e+2, + 0.1569881553081030745e+3, + -0.16370362863332400138e+3, + -0.64653985976731505048e+2, + 0.28764154195443461504e+3, + -0.23339028972296671327e+3, + -0.74808305638760060674e+2, + 0.3307543871233876871e+3, + -0.27730585855108142823e+3, + -0.18208119754211782748e+2, + 0.25219937659443687039e+3, + -0.21425681962709703043e+3, + -0.90070196722220057239e+1, + 0.16368910693605087658e+3, + -0.11216623636687292276e+3, + -0.44518187418568409441e+2, + 0.11752172478414732382e+3, + -0.49024189681635057525e+2, + -0.46327010257137352767e+2, + 0.4428312044252170665e+2, + 0.35527459055672359511e+2, + -0.61754960291210096557e+2, + -0.34585975120442462583e+2, + 0.16025253406964080227e+3, + -0.1539258383494861846e+3, + -0.23577472654184099099e+2, + 0.22226326863774866638e+3, + -0.24160258497632355557e+3, + 0.40727854631644163419e+2, + 0.20414193526945047097e+3, + -0.2606498660736194779e+3, + 0.68230248108763419168e+2, + 0.19619602847649383648e+3, + -0.28052852983483637672e+3, + 0.96770746232304688306e+2, + 0.19370960437544817978e+3, + -0.32681320452280630207e+3, + 0.17846257373310714911e+3, + 0.12389163772828692345e+3, + -0.31773387919008092695e+3, + 0.24118834621820698771e+3, + 0.28431118030030649635e+2, + -0.25040049130770020724e+3, + 0.23706796424552612734e+3, + -0.13810713410298856019e+2, + -0.21225926661013380681e+3, + 0.24006657394890200408e+3, + -0.48061493993352470966e+2, + -0.19334479577312478682e+3, + 0.27474069208129571962e+3, + -0.12748684693440507942e+3, + -0.1219738111481357663e+3, + 0.2648048995830429817e+3, + -0.1875478588726780913e+3, + -0.35563048327970818718e+2, + 0.21072404608760305678e+3, + -0.19103449379535163644e+3, + 0.13008623161945070024e+3, + 0.61154034238855025762e+2, + -0.31963703434281012505e+3, + 0.30970610272891042314e+3, + 0.57479429592174247077e+1, + -0.31767145826591939795e+3, + 0.38037362740187796817e+3, + -0.98360965378326170594e+2, + -0.2453348557217531436e+3, + 0.37859038592067287254e+3, + -0.15341142308333570554e+3, + -0.18009896662342046625e+3, + 0.34003264737491429059e+3, + -0.14340899861909056767e+3, + -0.18336811535981661336e+3, + 0.35169706462556490578e+3, + -0.15570077918232090042e+3, + -0.18924806294850461086e+3, + 0.3823779728869748169e+3, + -0.19804302579565234055e+3, + -0.15381909162578091355e+3, + 0.36065725224263644577e+3, + -0.18605119301820815281e+3, + -0.15493489903659201445e+3, + 0.33727834136981289248e+3, + -0.12795613976218221808e+3, + -0.23160967259134051233e+3, + 0.3907554649466572414e+3, + -0.12375236554000652234e+3, + -0.28622558572625104034e+3, + 0.45032216965512043316e+3, + -0.14865936852235049059e+3, + -0.29009054890940842597e+3, + 0.44184294762402436163e+3, + -0.10425393114227993863e+3, + -0.34059900075851220436e+3, + 0.44215303961183570891e+3, + -0.36625863963333664231e+2, + -0.42744932834542612454e+3, + 0.4814082086865893757e+3, + -0.17735764887905805409e+2, + -0.44827504956849338669e+3, + 0.4552104383924614126e+3, + 0.24064380250656160598e+2, + -0.42058158780377578978e+3, + 0.33025677611266814893e+3, + 0.15282542753629476806e+3, + -0.41999991047958326362e+3, + 0.18247360370521798245e+3, + 0.30516311924866175787e+3, + -0.4181624886691397478e+3, + 0.38243010096762922956e+2, + 0.40729299680722539279e+3, + -0.3328041980645109561e+3, + -0.15305984339823996265e+3, + 0.47289503713630688253e+3, + -0.16694286565550027035e+3, + -0.38505713497344282814e+3, + 0.51989073978318469926e+3, -0.18886177939498469125, - -0.53194021223778759122e+03, - 0.45415600381727085733e+03, - 0.16250658379477934545e+03, - -0.50754410053481933573e+03, - 0.18805692615686618296e+03, - 0.37031636784860717171e+03, - -0.36781677157325401595e+03, - -0.17019926764979825862e+03, - 0.52197802487921694592e+03, - -0.14090857598472058498e+03, - -0.44265388332221419887e+03, - 0.43637431836248475747e+03, - 0.20695718972338548269e+03, - -0.56027143008605469277e+03, - 0.12374392094659185659e+03, - 0.54055764754118160909e+03, - -0.45855560838639081567e+03, - -0.23726324569325038283e+03, - 0.57890447571261529447e+03, - -0.63328339313341103889e+02, - -0.47480831510977071730e+03, - 0.21968629917879485447e+03, - 0.46080049219669058402e+03, - -0.43489347763350843934e+03, - -0.31042575969053621066e+03, - 0.67695311903465380965e+03, - -0.40411922614915532392e+02, - -0.60752852792005387528e+03, - 0.29130944313946866941e+03, - 0.47146216572914818244e+03, - -0.37783779330037083355e+03, - -0.39755388985300953664e+03, - 0.54647673083319546095e+03, - 0.26317401924445204031e+03, - -0.64465798059631856631e+03, - -0.65087120739951572546e+02, - 0.68506278188604733259e+03, - -0.89881158460898888052e+02, - -0.66758551550757215409e+03, - 0.26052348013747712230e+03, - 0.59430061951352695360e+03, - -0.28898335664910536025e+03, - -0.58712941127341082392e+03, - 0.35434648251701537447e+03, - 0.65373602777115331719e+03, - -0.50756453913846348769e+03, - -0.53544125371932705093e+03, - 0.51093341382725753874e+03, - 0.50919896094661999086e+03, - -0.39440490157875211708e+03, - -0.65444677130303591639e+03, - 0.46666761997991869748e+03, - 0.70493166679984642542e+03, - -0.45850369455519182793e+03, - -0.65018482326430967078e+03, - 0.25018038267409983177e+03, - 0.79112163447168632047e+03, - -0.58956303325724370268e+02, - -0.90351367841535716252e+03, - -0.58869500267233661361e+02, - 0.81739708826978119305e+03, - 0.38391002201601850174e+03, - -0.65830247617027566776e+03, - -0.72734804217723876718e+03, - 0.45940129557136123140e+03, - 0.90673424531979276253e+03, - 0.77502948245102896152e+01, - -0.89874793267949087294e+03, - -0.55005945556546862463e+03, - 0.62030761681053888879e+03, - 0.97265413501874024860e+03, - 0.30538894187707374073e+02, - -0.97290812333046847016e+03, - -0.74633088567228787724e+03, - 0.33846949315212009424e+03, - 0.11379452014501564463e+04, - 0.64619928292872282327e+03, - -0.56924717692358410659e+03, - -0.11424099878983329290e+04, - -0.75318214080543179989e+03, - 0.48793889120033730933e+03, - 0.12779968167786939830e+04, - 0.10238758462831515317e+04, - 0.12852360919051236010e+03, - -0.10827644393236926135e+04, - -0.14682893584592563911e+04, - -0.11042627606813418879e+04, - -0.22781433968354502895e+03, - 0.97207635645063464835e+03, - 0.16235130967034187961e+04, - 0.20307927964362768307e+04, - 0.19615932240204983827e+04, - 0.15269790923606794877e+04, - 0.12509273877435443865e+04, - 0.72340896915163523317e+03, - 0.48910993664490877109e+03, - 0.30768164545134783339e+03, - 0.67194125471995477028e+02, - 0.15064502562856642953e+03, - -0.24537226256772164845e+02, - 0.23868061903852026973e+02, - 0.45269528023312588516e+02, - -0.71188910100393698599e+02, - 0.79100910850925131967e+02, - -0.53252669586619823860e+02, - 0.93787411547754366836e+01, - 0.36662873320894433959e+02, - -0.66748178084431700086e+02, - 0.70102793813065687800e+02, - -0.46695459101358444798e+02, - 0.66219658984354516917e+01, - 0.33871328040499236067e+02, - -0.59339005414969598462e+02, - 0.60624748558432457912e+02, - -0.38486185706744798551e+02, - 0.24365280612909070435e+01, - 0.32941206956513227055e+02, - -0.54177254776794356417e+02, - 0.53649343179212500843e+02, - -0.32540503797254281437e+02, + -0.53194021223778759122e+3, + 0.45415600381727085733e+3, + 0.16250658379477934545e+3, + -0.50754410053481933573e+3, + 0.18805692615686618296e+3, + 0.37031636784860717171e+3, + -0.36781677157325401595e+3, + -0.17019926764979825862e+3, + 0.52197802487921694592e+3, + -0.14090857598472058498e+3, + -0.44265388332221419887e+3, + 0.43637431836248475747e+3, + 0.20695718972338548269e+3, + -0.56027143008605469277e+3, + 0.12374392094659185659e+3, + 0.54055764754118160909e+3, + -0.45855560838639081567e+3, + -0.23726324569325038283e+3, + 0.57890447571261529447e+3, + -0.63328339313341103889e+2, + -0.4748083151097707173e+3, + 0.21968629917879485447e+3, + 0.46080049219669058402e+3, + -0.43489347763350843934e+3, + -0.31042575969053621066e+3, + 0.67695311903465380965e+3, + -0.40411922614915532392e+2, + -0.60752852792005387528e+3, + 0.29130944313946866941e+3, + 0.47146216572914818244e+3, + -0.37783779330037083355e+3, + -0.39755388985300953664e+3, + 0.54647673083319546095e+3, + 0.26317401924445204031e+3, + -0.64465798059631856631e+3, + -0.65087120739951572546e+2, + 0.68506278188604733259e+3, + -0.89881158460898888052e+2, + -0.66758551550757215409e+3, + 0.2605234801374771223e+3, + 0.5943006195135269536e+3, + -0.28898335664910536025e+3, + -0.58712941127341082392e+3, + 0.35434648251701537447e+3, + 0.65373602777115331719e+3, + -0.50756453913846348769e+3, + -0.53544125371932705093e+3, + 0.51093341382725753874e+3, + 0.50919896094661999086e+3, + -0.39440490157875211708e+3, + -0.65444677130303591639e+3, + 0.46666761997991869748e+3, + 0.70493166679984642542e+3, + -0.45850369455519182793e+3, + -0.65018482326430967078e+3, + 0.25018038267409983177e+3, + 0.79112163447168632047e+3, + -0.58956303325724370268e+2, + -0.90351367841535716252e+3, + -0.58869500267233661361e+2, + 0.81739708826978119305e+3, + 0.38391002201601850174e+3, + -0.65830247617027566776e+3, + -0.72734804217723876718e+3, + 0.4594012955713612314e+3, + 0.90673424531979276253e+3, + 0.77502948245102896152e+1, + -0.89874793267949087294e+3, + -0.55005945556546862463e+3, + 0.62030761681053888879e+3, + 0.9726541350187402486e+3, + 0.30538894187707374073e+2, + -0.97290812333046847016e+3, + -0.74633088567228787724e+3, + 0.33846949315212009424e+3, + 0.11379452014501564463e+4, + 0.64619928292872282327e+3, + -0.56924717692358410659e+3, + -0.1142409987898332929e+4, + -0.75318214080543179989e+3, + 0.48793889120033730933e+3, + 0.1277996816778693983e+4, + 0.10238758462831515317e+4, + 0.1285236091905123601e+3, + -0.10827644393236926135e+4, + -0.14682893584592563911e+4, + -0.11042627606813418879e+4, + -0.22781433968354502895e+3, + 0.97207635645063464835e+3, + 0.16235130967034187961e+4, + 0.20307927964362768307e+4, + 0.19615932240204983827e+4, + 0.15269790923606794877e+4, + 0.12509273877435443865e+4, + 0.72340896915163523317e+3, + 0.48910993664490877109e+3, + 0.30768164545134783339e+3, + 0.67194125471995477028e+2, + 0.15064502562856642953e+3, + -0.24537226256772164845e+2, + 0.23868061903852026973e+2, + 0.45269528023312588516e+2, + -0.71188910100393698599e+2, + 0.79100910850925131967e+2, + -0.5325266958661982386e+2, + 0.93787411547754366836e+1, + 0.36662873320894433959e+2, + -0.66748178084431700086e+2, + 0.701027938130656878e+2, + -0.46695459101358444798e+2, + 0.66219658984354516917e+1, + 0.33871328040499236067e+2, + -0.59339005414969598462e+2, + 0.60624748558432457912e+2, + -0.38486185706744798551e+2, + 0.24365280612909070435e+1, + 0.32941206956513227055e+2, + -0.54177254776794356417e+2, + 0.53649343179212500843e+2, + -0.32540503797254281437e+2, -0.34936252058020550448, - 0.31984327950787033501e+02, - -0.50503008188598741413e+02, - 0.49347696503657665801e+02, - -0.29748441412088521218e+02, + 0.31984327950787033501e+2, + -0.50503008188598741413e+2, + 0.49347696503657665801e+2, + -0.29748441412088521218e+2, -0.33686262731354349453, - 0.29247878774101657484e+02, - -0.46337427467788259605e+02, - 0.45664104551028643186e+02, - -0.28186097800253264722e+02, + 0.29247878774101657484e+2, + -0.46337427467788259605e+2, + 0.45664104551028643186e+2, + -0.28186097800253264722e+2, 0.94798253107823138297, - 0.25585168903392929707e+02, - -0.41655515505068542836e+02, - 0.41635091716169284837e+02, - -0.26078825208622191667e+02, - 0.12231720970162498485e+01, - 0.23368303497466225593e+02, - -0.38484499707591517392e+02, - 0.38588858900678594921e+02, - -0.23855264356975922624e+02, - 0.38369559907424438450e+02, - -0.41681182916082228473e+02, - -0.19174728256432189255e+02, - 0.64963551795957059198e+02, - -0.94288875116641804652e+02, - 0.78097368094228698965e+02, - -0.39009605243456213941e+02, - -0.25046262685610003018e+02, - 0.72157866364474045895e+02, - -0.10054929252721971977e+03, - 0.81732148011407232957e+02, - -0.39552677853774923733e+02, - -0.26633896234982074702e+02, - 0.74022976681221479112e+02, - -0.10086879928364494674e+03, - 0.79758713656691242022e+02, - -0.36130091738168538029e+02, - -0.29249453765429507257e+02, - 0.73188519541142028402e+02, - -0.94882345717000973195e+02, - 0.69036897143221608530e+02, - -0.23485328914162980851e+02, - -0.39347744597445299064e+02, - 0.76333940458022908615e+02, - -0.88627875904441864918e+02, - 0.54288004782741104748e+02, - -0.45444273364791554215e+01, - -0.56113733949895276965e+02, - 0.84926542870497456761e+02, - -0.85846438378100387467e+02, - 0.41250342673323615372e+02, - 0.13595395352105297704e+02, - -0.72113848058551937470e+02, - 0.92503028286176444794e+02, - -0.82349919645094530551e+02, - 0.29065775205412251125e+02, - 0.28310432337866725305e+02, - -0.81169501097292453551e+02, - 0.92163312056152108198e+02, - -0.67949458634164614068e+02, - 0.16618793347609607025e+02, - 0.56034867882061107025e+02, - -0.57472248365684237115e+02, - 0.13639267061530924252e+03, - 0.61611912250029739369e+02, - 0.17410111780354827715e+03, - 0.37532440009778815693e+03, - 0.38112714417339071815e+03, - 0.70049861073550982837e+03, - 0.75783577111919566960e+03, - 0.75475551083196205582e+03, - 0.75789468730875807978e+03, - 0.27020695851603369420e+03, - -0.25002947879436906220e+02, - -0.43224482110304722937e+03, - -0.67773515231353394483e+03, - -0.30973011308884605342e+03, - -0.57883336844917316455e+02, - 0.44744854392824822753e+03, - 0.55315631613079904128e+03, - 0.85121837228991651614e+02, - -0.18231727119438386353e+03, - -0.53842116311574977772e+03, - -0.22811267504246384874e+03, - 0.32971929621678293643e+03, - 0.34164495765330610766e+03, - 0.22669500962836846725e+03, - -0.33089302863291447920e+03, - -0.43894641823975621264e+03, - 0.10996351401137847859e+03, - 0.28592284993988266706e+03, - 0.29460526589555513510e+03, - -0.19181433308658571946e+03, - -0.45881731379487291633e+03, - 0.11704507939609675304e+03, - 0.28368874685497758037e+03, - 0.17793819560805920332e+03, - -0.20798019719266000038e+03, - -0.39296637100463016168e+03, - 0.25889846697940475906e+03, - 0.29010993176362973145e+03, - -0.82054711933232425736e+02, - -0.24430632528402696835e+03, - -0.14875652033122281637e+03, - 0.37871005073798301055e+03, - 0.12392630543015508238e+03, - -0.36504147287259763743e+03, - -0.60400912587113467112e+02, - 0.19795441270719368276e+03, - 0.17862984637998266635e+03, - -0.17257889973801081851e+03, - -0.28997428809405556649e+03, - 0.30117075700889176915e+03, - 0.18638257044731062706e+03, - -0.29512778305583634619e+03, - -0.71770632241642758231e+02, - 0.13988355430721156836e+03, - 0.18239521402825101859e+03, - -0.18165166974852684234e+03, - -0.24152959388114575745e+03, - 0.36086450952571118478e+03, - 0.41425389568784289906e+02, - -0.30425606527876112750e+03, - 0.69792469402589460969e+02, - 0.15350370703407000406e+03, - 0.32088579157522637786e+02, - -0.22797328147533104925e+03, - -0.28676156647641652953e+01, - 0.33356881413802028646e+03, - -0.21947292452678459540e+03, - -0.19198782400311972651e+03, - 0.30360510361708838900e+03, - -0.16668466571378115049e+02, - -0.17642774365150700078e+03, - 0.17414321552575913188e+02, - 0.14425523391352646740e+03, - 0.18740097831733773859e+02, - -0.26131336154137500216e+03, - 0.15908059271992982531e+03, - 0.20334059923187018626e+03, - -0.33709273178083805078e+03, - 0.61645985913571742287e+02, - 0.24533986594503429046e+03, - -0.20553839692979545362e+03, - -0.52698748320959325042e+02, - 0.13803846952462237141e+03, - 0.20210228088531948742e+02, - -0.11464558681239043381e+03, - -0.44260807078649442303e+02, - 0.22931138541921760066e+03, - -0.12930506643240900644e+03, - -0.18752026875846053144e+03, - 0.33484266833413983022e+03, - -0.11618423606823296268e+03, - -0.21832189823840454324e+03, - 0.29049857789970792510e+03, - -0.59626145584798351251e+02, - -0.16658860063582977773e+03, - 0.14202733512861064469e+03, - 0.32244083419554705472e+02, - -0.93126689517910591576e+02, - -0.22021841071513236443e+02, - 0.11239763493480002410e+03, - -0.12854758506628312986e+02, - -0.16652759847314152353e+03, - 0.17257900726176586659e+03, - 0.54220822316824758502e+02, - -0.27803510260584420166e+03, - 0.23166175074292627301e+03, - 0.63647394731261307754e+02, - -0.30997100366244069392e+03, - 0.25679509975113126075e+03, - 0.29753808835883166495e+02, - -0.25338902379356431993e+03, - 0.20949942862484303419e+03, - 0.15644967720895254004e+02, - -0.17225659021325051867e+03, - 0.12450916414510679431e+03, - 0.29364902929140175303e+02, - -0.10459850500391047490e+03, - 0.43745886085735790516e+02, - 0.42449963544630236356e+02, - -0.34118961660187665075e+02, - -0.48162073941352105066e+02, - 0.75001830373943391805e+02, - 0.21257827841370747990e+02, - -0.14897383895788667019e+03, - 0.14926561006668529785e+03, - 0.17625126130703069549e+02, - -0.20655759889838216736e+03, - 0.22260935635175965785e+03, - -0.26447302037799225616e+02, - -0.20975112144337182940e+03, - 0.25953791510842785328e+03, - -0.64971236637580560114e+02, - -0.19952919539502912016e+03, - 0.28612129206173716511e+03, - -0.10788490600963025656e+03, - -0.17770044513574697476e+03, - 0.31199776039925666282e+03, - -0.17274311575074747793e+03, - -0.11677540576200640032e+03, - 0.30122752077447023566e+03, - -0.22346825196657741230e+03, - -0.40297400902941475920e+02, - 0.25468310723955261210e+03, - -0.23683943197817171722e+03, - 0.12659431221787830424e+02, - 0.21401885743527262207e+03, - -0.24535008040261197948e+03, - 0.59348892038377456970e+02, - 0.17771624635811741655e+03, - -0.26084401009740679456e+03, - 0.12210703904144536125e+03, - 0.11603405037850855308e+03, - -0.25067729770509993159e+03, - 0.17199316721629770655e+03, - 0.46738417946685629545e+02, - -0.21590359593015890027e+03, - 0.19234063865523597769e+03, - -0.10926590699237810611e+03, - -0.79947105615518694322e+02, - 0.29647917862140837997e+03, - -0.26440378161716893146e+03, - -0.24752301274180517510e+02, - 0.28654426051119344265e+03, - -0.31485995868690866928e+03, - 0.49263289996527348080e+02, - 0.24439349576627103033e+03, - -0.33104139412478491522e+03, - 0.10243987964005542324e+03, - 0.19945263432314857255e+03, - -0.32192995618000804825e+03, - 0.11922887687059005657e+03, - 0.18719743987002462404e+03, - -0.33169812635722934147e+03, - 0.13990945548315667679e+03, - 0.18029861740117812019e+03, - -0.34979537377355546823e+03, - 0.17073298337528194679e+03, - 0.15744745133524992298e+03, - -0.34300782845139684696e+03, - 0.17231606323982313711e+03, - 0.15540696341934832958e+03, - -0.33566825899217906226e+03, - 0.14953514181392279170e+03, - 0.19010446608000813740e+03, - -0.36012916611501640318e+03, - 0.14321794667347882068e+03, - 0.22157027035770633461e+03, - -0.38676626531014977672e+03, - 0.14226788536500066584e+03, - 0.23842555097785631801e+03, - -0.38501486703210980522e+03, - 0.10711640775408527304e+03, - 0.27722361452984682728e+03, - -0.38076638072917432964e+03, - 0.51390353451518059558e+02, - 0.33638887111989612322e+03, - -0.38699933349197857524e+03, - 0.58780521364522924088e+01, - 0.37100932406732988511e+03, - -0.35943732247375044153e+03, - -0.54336941367469854924e+02, - 0.37769437762988451368e+03, - -0.27352113763230903487e+03, - -0.16057398458704693667e+03, - 0.38715885199672430872e+03, - -0.16149791297054733263e+03, - -0.28018107517187451094e+03, - 0.38108908834890632988e+03, - -0.37671145935202055455e+02, - -0.36736882581999685726e+03, - 0.30942922110413149994e+03, - 0.12329050994637856320e+03, - -0.42259270334391544566e+03, - 0.17380082440315879921e+03, - 0.30453545849063965534e+03, - -0.43811409266915455873e+03, - 0.11787969688533058488e+02, - 0.42899317008977436672e+03, - -0.35473688893113740050e+03, - -0.16926251889990876975e+03, - 0.44361652302815508619e+03, - -0.14039729150420055248e+03, - -0.35681448107235036105e+03, - 0.34680223460975156513e+03, - 0.14078995750838180356e+03, - -0.46405996037193182246e+03, - 0.13645912552475331836e+03, - 0.37973012895159382651e+03, - -0.38579849495733196818e+03, - -0.16988289703337588321e+03, - 0.48388982552590903197e+03, - -0.11770770753689778587e+03, - -0.44785008229473658048e+03, - 0.37290448844870979883e+03, - 0.22211010547805904025e+03, - -0.49724628305340917223e+03, - 0.24940931076279071021e+02, - 0.45393702689278325124e+03, - -0.22181290936422601590e+03, - -0.39639202018023581786e+03, - 0.40090608847359948186e+03, - 0.23270466889700699653e+03, - -0.55391109714042227097e+03, - 0.16006805691652569834e+02, - 0.52503833585476934331e+03, - -0.23018018509046308395e+03, - -0.44091302425484821015e+03, - 0.35064377470642608614e+03, - 0.34153171050970422584e+03, - -0.48461352392930223232e+03, - -0.21792544091819559071e+03, - 0.55580430553291364504e+03, - 0.55081472223050361947e+02, - -0.59166619373173000440e+03, - 0.76003055541871844980e+02, - 0.57437466793546764166e+03, - -0.20834991286639353802e+03, - -0.54088735185216864920e+03, - 0.26571057614941952352e+03, - 0.51702368017723449611e+03, - -0.33343980575579047354e+03, - -0.53537139953886844523e+03, - 0.41165717051436701013e+03, - 0.48043927520513443596e+03, - -0.43450570836459712609e+03, - -0.47568323875312427162e+03, - 0.38138511008963342874e+03, - 0.54461967275168149172e+03, - -0.40296054196874143827e+03, - -0.59627360799420489457e+03, - 0.36741538804606830126e+03, - 0.59845441447462428641e+03, - -0.23372832001130657886e+03, - -0.69697880215183602104e+03, - 0.75924807859761116902e+02, - 0.75770485201230178518e+03, - 0.74910674228726435331e+02, - -0.72047061453410719878e+03, - -0.34562606789202931168e+03, - 0.59622961215131829249e+03, - 0.61213166249056939705e+03, - -0.38629134820033129927e+03, - -0.79442197153200140747e+03, - -0.12866932517220098120e+02, - 0.79348704814447876288e+03, - 0.47368139076426899692e+03, - -0.54008109872910551985e+03, - -0.84731901462446114692e+03, - -0.26223052807901598982e+02, - 0.84256799426535599196e+03, - 0.66408040845842663202e+03, - -0.30985651891991216189e+03, - -0.98438478061744933711e+03, - -0.56056201254122356659e+03, - 0.47950894268394910114e+03, - 0.10233884003058492453e+04, - 0.63163269685693069277e+03, - -0.41172750939336543752e+03, - -0.11110177892843473728e+04, - -0.91584686901244788260e+03, - -0.80268298961188875751e+02, - 0.91626778322976235813e+03, - 0.12947940408515507897e+04, - 0.97156956088919105241e+03, - 0.17262038388610088191e+03, - -0.81467828913572895999e+03, - -0.14437989986204750039e+04, - -0.17639597806127874264e+04, - -0.16976573749630410930e+04, - -0.13642651960442206018e+04, - -0.10555199240188985641e+04, - -0.65721750817744441520e+03, - -0.42231042466163944482e+03, - -0.24931403715812641053e+03, - -0.94554753738909255389e+02, - -0.92705739526060838784e+02, - -0.52451662471980426972e+01, - -0.16537844897084106321e+02, - -0.19991851958062433425e+02, - 0.26478868324811884349e+02, - -0.30990837815245456000e+02, - 0.20254407359507037967e+02, - -0.30998094849370820825e+01, - -0.15055307719189206850e+02, - 0.26721665233858502120e+02, - -0.27728476091206278653e+02, - 0.18088501777824088634e+02, - -0.18790093451280136527e+01, - -0.14378217820248126557e+02, - 0.24506528482124014801e+02, - -0.24853617641620250112e+02, - 0.15755728608417358672e+02, - -0.10522371066283437990e+01, - -0.13377798953450550812e+02, - 0.22111063110988709468e+02, - -0.22063513726642170809e+02, - 0.13692360335544298877e+02, - -0.50853197283101980730, - -0.12261980347583563145e+02, - 0.19857213171762481352e+02, - -0.19621959543066708420e+02, - 0.12017554463337352999e+02, + 0.25585168903392929707e+2, + -0.41655515505068542836e+2, + 0.41635091716169284837e+2, + -0.26078825208622191667e+2, + 0.12231720970162498485e+1, + 0.23368303497466225593e+2, + -0.38484499707591517392e+2, + 0.38588858900678594921e+2, + -0.23855264356975922624e+2, + 0.3836955990742443845e+2, + -0.41681182916082228473e+2, + -0.19174728256432189255e+2, + 0.64963551795957059198e+2, + -0.94288875116641804652e+2, + 0.78097368094228698965e+2, + -0.39009605243456213941e+2, + -0.25046262685610003018e+2, + 0.72157866364474045895e+2, + -0.10054929252721971977e+3, + 0.81732148011407232957e+2, + -0.39552677853774923733e+2, + -0.26633896234982074702e+2, + 0.74022976681221479112e+2, + -0.10086879928364494674e+3, + 0.79758713656691242022e+2, + -0.36130091738168538029e+2, + -0.29249453765429507257e+2, + 0.73188519541142028402e+2, + -0.94882345717000973195e+2, + 0.6903689714322160853e+2, + -0.23485328914162980851e+2, + -0.39347744597445299064e+2, + 0.76333940458022908615e+2, + -0.88627875904441864918e+2, + 0.54288004782741104748e+2, + -0.45444273364791554215e+1, + -0.56113733949895276965e+2, + 0.84926542870497456761e+2, + -0.85846438378100387467e+2, + 0.41250342673323615372e+2, + 0.13595395352105297704e+2, + -0.7211384805855193747e+2, + 0.92503028286176444794e+2, + -0.82349919645094530551e+2, + 0.29065775205412251125e+2, + 0.28310432337866725305e+2, + -0.81169501097292453551e+2, + 0.92163312056152108198e+2, + -0.67949458634164614068e+2, + 0.16618793347609607025e+2, + 0.56034867882061107025e+2, + -0.57472248365684237115e+2, + 0.13639267061530924252e+3, + 0.61611912250029739369e+2, + 0.17410111780354827715e+3, + 0.37532440009778815693e+3, + 0.38112714417339071815e+3, + 0.70049861073550982837e+3, + 0.7578357711191956696e+3, + 0.75475551083196205582e+3, + 0.75789468730875807978e+3, + 0.2702069585160336942e+3, + -0.2500294787943690622e+2, + -0.43224482110304722937e+3, + -0.67773515231353394483e+3, + -0.30973011308884605342e+3, + -0.57883336844917316455e+2, + 0.44744854392824822753e+3, + 0.55315631613079904128e+3, + 0.85121837228991651614e+2, + -0.18231727119438386353e+3, + -0.53842116311574977772e+3, + -0.22811267504246384874e+3, + 0.32971929621678293643e+3, + 0.34164495765330610766e+3, + 0.22669500962836846725e+3, + -0.3308930286329144792e+3, + -0.43894641823975621264e+3, + 0.10996351401137847859e+3, + 0.28592284993988266706e+3, + 0.2946052658955551351e+3, + -0.19181433308658571946e+3, + -0.45881731379487291633e+3, + 0.11704507939609675304e+3, + 0.28368874685497758037e+3, + 0.17793819560805920332e+3, + -0.20798019719266000038e+3, + -0.39296637100463016168e+3, + 0.25889846697940475906e+3, + 0.29010993176362973145e+3, + -0.82054711933232425736e+2, + -0.24430632528402696835e+3, + -0.14875652033122281637e+3, + 0.37871005073798301055e+3, + 0.12392630543015508238e+3, + -0.36504147287259763743e+3, + -0.60400912587113467112e+2, + 0.19795441270719368276e+3, + 0.17862984637998266635e+3, + -0.17257889973801081851e+3, + -0.28997428809405556649e+3, + 0.30117075700889176915e+3, + 0.18638257044731062706e+3, + -0.29512778305583634619e+3, + -0.71770632241642758231e+2, + 0.13988355430721156836e+3, + 0.18239521402825101859e+3, + -0.18165166974852684234e+3, + -0.24152959388114575745e+3, + 0.36086450952571118478e+3, + 0.41425389568784289906e+2, + -0.3042560652787611275e+3, + 0.69792469402589460969e+2, + 0.15350370703407000406e+3, + 0.32088579157522637786e+2, + -0.22797328147533104925e+3, + -0.28676156647641652953e+1, + 0.33356881413802028646e+3, + -0.2194729245267845954e+3, + -0.19198782400311972651e+3, + 0.303605103617088389e+3, + -0.16668466571378115049e+2, + -0.17642774365150700078e+3, + 0.17414321552575913188e+2, + 0.1442552339135264674e+3, + 0.18740097831733773859e+2, + -0.26131336154137500216e+3, + 0.15908059271992982531e+3, + 0.20334059923187018626e+3, + -0.33709273178083805078e+3, + 0.61645985913571742287e+2, + 0.24533986594503429046e+3, + -0.20553839692979545362e+3, + -0.52698748320959325042e+2, + 0.13803846952462237141e+3, + 0.20210228088531948742e+2, + -0.11464558681239043381e+3, + -0.44260807078649442303e+2, + 0.22931138541921760066e+3, + -0.12930506643240900644e+3, + -0.18752026875846053144e+3, + 0.33484266833413983022e+3, + -0.11618423606823296268e+3, + -0.21832189823840454324e+3, + 0.2904985778997079251e+3, + -0.59626145584798351251e+2, + -0.16658860063582977773e+3, + 0.14202733512861064469e+3, + 0.32244083419554705472e+2, + -0.93126689517910591576e+2, + -0.22021841071513236443e+2, + 0.1123976349348000241e+3, + -0.12854758506628312986e+2, + -0.16652759847314152353e+3, + 0.17257900726176586659e+3, + 0.54220822316824758502e+2, + -0.27803510260584420166e+3, + 0.23166175074292627301e+3, + 0.63647394731261307754e+2, + -0.30997100366244069392e+3, + 0.25679509975113126075e+3, + 0.29753808835883166495e+2, + -0.25338902379356431993e+3, + 0.20949942862484303419e+3, + 0.15644967720895254004e+2, + -0.17225659021325051867e+3, + 0.12450916414510679431e+3, + 0.29364902929140175303e+2, + -0.1045985050039104749e+3, + 0.43745886085735790516e+2, + 0.42449963544630236356e+2, + -0.34118961660187665075e+2, + -0.48162073941352105066e+2, + 0.75001830373943391805e+2, + 0.2125782784137074799e+2, + -0.14897383895788667019e+3, + 0.14926561006668529785e+3, + 0.17625126130703069549e+2, + -0.20655759889838216736e+3, + 0.22260935635175965785e+3, + -0.26447302037799225616e+2, + -0.2097511214433718294e+3, + 0.25953791510842785328e+3, + -0.64971236637580560114e+2, + -0.19952919539502912016e+3, + 0.28612129206173716511e+3, + -0.10788490600963025656e+3, + -0.17770044513574697476e+3, + 0.31199776039925666282e+3, + -0.17274311575074747793e+3, + -0.11677540576200640032e+3, + 0.30122752077447023566e+3, + -0.2234682519665774123e+3, + -0.4029740090294147592e+2, + 0.2546831072395526121e+3, + -0.23683943197817171722e+3, + 0.12659431221787830424e+2, + 0.21401885743527262207e+3, + -0.24535008040261197948e+3, + 0.5934889203837745697e+2, + 0.17771624635811741655e+3, + -0.26084401009740679456e+3, + 0.12210703904144536125e+3, + 0.11603405037850855308e+3, + -0.25067729770509993159e+3, + 0.17199316721629770655e+3, + 0.46738417946685629545e+2, + -0.21590359593015890027e+3, + 0.19234063865523597769e+3, + -0.10926590699237810611e+3, + -0.79947105615518694322e+2, + 0.29647917862140837997e+3, + -0.26440378161716893146e+3, + -0.2475230127418051751e+2, + 0.28654426051119344265e+3, + -0.31485995868690866928e+3, + 0.4926328999652734808e+2, + 0.24439349576627103033e+3, + -0.33104139412478491522e+3, + 0.10243987964005542324e+3, + 0.19945263432314857255e+3, + -0.32192995618000804825e+3, + 0.11922887687059005657e+3, + 0.18719743987002462404e+3, + -0.33169812635722934147e+3, + 0.13990945548315667679e+3, + 0.18029861740117812019e+3, + -0.34979537377355546823e+3, + 0.17073298337528194679e+3, + 0.15744745133524992298e+3, + -0.34300782845139684696e+3, + 0.17231606323982313711e+3, + 0.15540696341934832958e+3, + -0.33566825899217906226e+3, + 0.1495351418139227917e+3, + 0.1901044660800081374e+3, + -0.36012916611501640318e+3, + 0.14321794667347882068e+3, + 0.22157027035770633461e+3, + -0.38676626531014977672e+3, + 0.14226788536500066584e+3, + 0.23842555097785631801e+3, + -0.38501486703210980522e+3, + 0.10711640775408527304e+3, + 0.27722361452984682728e+3, + -0.38076638072917432964e+3, + 0.51390353451518059558e+2, + 0.33638887111989612322e+3, + -0.38699933349197857524e+3, + 0.58780521364522924088e+1, + 0.37100932406732988511e+3, + -0.35943732247375044153e+3, + -0.54336941367469854924e+2, + 0.37769437762988451368e+3, + -0.27352113763230903487e+3, + -0.16057398458704693667e+3, + 0.38715885199672430872e+3, + -0.16149791297054733263e+3, + -0.28018107517187451094e+3, + 0.38108908834890632988e+3, + -0.37671145935202055455e+2, + -0.36736882581999685726e+3, + 0.30942922110413149994e+3, + 0.1232905099463785632e+3, + -0.42259270334391544566e+3, + 0.17380082440315879921e+3, + 0.30453545849063965534e+3, + -0.43811409266915455873e+3, + 0.11787969688533058488e+2, + 0.42899317008977436672e+3, + -0.3547368889311374005e+3, + -0.16926251889990876975e+3, + 0.44361652302815508619e+3, + -0.14039729150420055248e+3, + -0.35681448107235036105e+3, + 0.34680223460975156513e+3, + 0.14078995750838180356e+3, + -0.46405996037193182246e+3, + 0.13645912552475331836e+3, + 0.37973012895159382651e+3, + -0.38579849495733196818e+3, + -0.16988289703337588321e+3, + 0.48388982552590903197e+3, + -0.11770770753689778587e+3, + -0.44785008229473658048e+3, + 0.37290448844870979883e+3, + 0.22211010547805904025e+3, + -0.49724628305340917223e+3, + 0.24940931076279071021e+2, + 0.45393702689278325124e+3, + -0.2218129093642260159e+3, + -0.39639202018023581786e+3, + 0.40090608847359948186e+3, + 0.23270466889700699653e+3, + -0.55391109714042227097e+3, + 0.16006805691652569834e+2, + 0.52503833585476934331e+3, + -0.23018018509046308395e+3, + -0.44091302425484821015e+3, + 0.35064377470642608614e+3, + 0.34153171050970422584e+3, + -0.48461352392930223232e+3, + -0.21792544091819559071e+3, + 0.55580430553291364504e+3, + 0.55081472223050361947e+2, + -0.5916661937317300044e+3, + 0.7600305554187184498e+2, + 0.57437466793546764166e+3, + -0.20834991286639353802e+3, + -0.5408873518521686492e+3, + 0.26571057614941952352e+3, + 0.51702368017723449611e+3, + -0.33343980575579047354e+3, + -0.53537139953886844523e+3, + 0.41165717051436701013e+3, + 0.48043927520513443596e+3, + -0.43450570836459712609e+3, + -0.47568323875312427162e+3, + 0.38138511008963342874e+3, + 0.54461967275168149172e+3, + -0.40296054196874143827e+3, + -0.59627360799420489457e+3, + 0.36741538804606830126e+3, + 0.59845441447462428641e+3, + -0.23372832001130657886e+3, + -0.69697880215183602104e+3, + 0.75924807859761116902e+2, + 0.75770485201230178518e+3, + 0.74910674228726435331e+2, + -0.72047061453410719878e+3, + -0.34562606789202931168e+3, + 0.59622961215131829249e+3, + 0.61213166249056939705e+3, + -0.38629134820033129927e+3, + -0.79442197153200140747e+3, + -0.1286693251722009812e+2, + 0.79348704814447876288e+3, + 0.47368139076426899692e+3, + -0.54008109872910551985e+3, + -0.84731901462446114692e+3, + -0.26223052807901598982e+2, + 0.84256799426535599196e+3, + 0.66408040845842663202e+3, + -0.30985651891991216189e+3, + -0.98438478061744933711e+3, + -0.56056201254122356659e+3, + 0.47950894268394910114e+3, + 0.10233884003058492453e+4, + 0.63163269685693069277e+3, + -0.41172750939336543752e+3, + -0.11110177892843473728e+4, + -0.9158468690124478826e+3, + -0.80268298961188875751e+2, + 0.91626778322976235813e+3, + 0.12947940408515507897e+4, + 0.97156956088919105241e+3, + 0.17262038388610088191e+3, + -0.81467828913572895999e+3, + -0.14437989986204750039e+4, + -0.17639597806127874264e+4, + -0.1697657374963041093e+4, + -0.13642651960442206018e+4, + -0.10555199240188985641e+4, + -0.6572175081774444152e+3, + -0.42231042466163944482e+3, + -0.24931403715812641053e+3, + -0.94554753738909255389e+2, + -0.92705739526060838784e+2, + -0.52451662471980426972e+1, + -0.16537844897084106321e+2, + -0.19991851958062433425e+2, + 0.26478868324811884349e+2, + -0.30990837815245456e+2, + 0.20254407359507037967e+2, + -0.30998094849370820825e+1, + -0.1505530771918920685e+2, + 0.2672166523385850212e+2, + -0.27728476091206278653e+2, + 0.18088501777824088634e+2, + -0.18790093451280136527e+1, + -0.14378217820248126557e+2, + 0.24506528482124014801e+2, + -0.24853617641620250112e+2, + 0.15755728608417358672e+2, + -0.1052237106628343799e+1, + -0.13377798953450550812e+2, + 0.22111063110988709468e+2, + -0.22063513726642170809e+2, + 0.13692360335544298877e+2, + -0.5085319728310198073, + -0.12261980347583563145e+2, + 0.19857213171762481352e+2, + -0.1962195954306670842e+2, + 0.12017554463337352999e+2, -0.19159963869004786874, - -0.11217282621902262107e+02, - 0.17971943495018503967e+02, - -0.17702317038523602832e+02, - 0.10790792388343570352e+02, - -0.39857058638472803169e-01, - -0.10384761316448690494e+02, - 0.16608613173237323224e+02, - -0.16407782976898715788e+02, - 0.10031648508830535604e+02, - 0.58164123647595367822e-02, - -0.98662452061967904626e+01, - 0.15863608335224805401e+02, - -0.15790330258791573925e+02, - 0.97327332634432295322e+01, - -0.13564561408044541579e+02, - 0.13701629795405118273e+02, - 0.82252402088898755039e+01, - -0.23946140988291048757e+02, - 0.33524136716169962824e+02, - -0.26918216335718174292e+02, - 0.12825997613925817831e+02, - 0.95005932820850400589e+01, - -0.25078975891950342714e+02, - 0.33906761068189190667e+02, - -0.26193906858483792632e+02, - 0.11098088331246607652e+02, - 0.11618899606586131412e+02, - -0.26689624439452543925e+02, - 0.34189176862877566521e+02, - -0.24818437100916199256e+02, - 0.84337583971588401255e+01, - 0.14559245607190687721e+02, - -0.28642840680301372203e+02, - 0.34166311022445505330e+02, - -0.22602207770622467109e+02, - 0.47501482326491961672e+01, - 0.18243387740538928199e+02, - -0.30713091000327704450e+02, - 0.33550311484322868694e+02, - -0.19320578596106418701e+02, - -0.20826891226014992466e-02, - 0.22501357256692855913e+02, - -0.32564423731813327834e+02, - 0.31976599333037981410e+02, - -0.14746981230704159671e+02, - -0.57910074337510639708e+01, - 0.27029858530896625268e+02, - -0.33737919112838191893e+02, - 0.29024230614396913097e+02, - -0.87209022994805636131e+01, - -0.12479153184006950283e+02, - 0.31238554396117390155e+02, - -0.33965405911190138966e+02, - 0.23469430031218596611e+02, - -0.31769107607328006537e+01, - -0.24203925477077838480e+02, - 0.24689382367532616058e+02, - -0.52227443103481142828e+02, - -0.21741301815755647908e+02, - -0.61687715620051442045e+02, - -0.14001423724003112170e+03, - -0.13402761847177924892e+03, - -0.25910332583941362827e+03, - -0.27250402457414912760e+03, - -0.27544506358681235270e+03, - -0.27683850389618544341e+03, - -0.95211805253487469258e+02, - 0.51698528886848515995e+01, - 0.16092225843204946045e+03, - 0.24384253442483384333e+03, - 0.11359062053076134191e+03, - 0.21766398126409722380e+02, - -0.16462488876836115992e+03, - -0.19875290930088152663e+03, - -0.33040668695070884553e+02, - 0.67555072694573553349e+02, - 0.19555441374256568565e+03, - 0.82396400469327389260e+02, - -0.11901320584617248244e+03, - -0.12488854766421998477e+03, - -0.82378865316374557892e+02, - 0.12097340561875324738e+03, - 0.15853677766438869412e+03, - -0.38953925464602747297e+02, - -0.10437751583987821391e+03, - -0.10773561197748799145e+03, - 0.71466967781044687058e+02, - 0.16435139384379061767e+03, - -0.39919742005858125822e+02, - -0.10514169447091191500e+03, - -0.64060323956383925292e+02, - 0.76714744006336303528e+02, - 0.14019338356835393711e+03, - -0.90373725112701478679e+02, - -0.10940297837376898826e+03, - 0.32887419849603162447e+02, - 0.87505077621217495221e+02, - 0.53306248465080713572e+02, - -0.13490851087364413274e+03, - -0.49221065468114133523e+02, - 0.13726098095104475760e+03, - 0.18209327681787602415e+02, - -0.69893446018830346134e+02, - -0.64873679065103573294e+02, - 0.60575433467172778990e+02, - 0.10916012817533751900e+03, - -0.11380824237801371623e+03, - -0.63940712861138422340e+02, - 0.10484610077205159939e+03, - 0.26716784405812827430e+02, - -0.49592519428608717647e+02, - -0.69034482789562943594e+02, - 0.69452117164660876369e+02, - 0.84625582310491566318e+02, - -0.12893866824407390936e+03, - -0.15978112676280089133e+02, - 0.11014874599735172467e+03, - -0.23781940241902045585e+02, - -0.57957712634007279462e+02, - -0.95906364026256945010e+01, - 0.81401830881796442441e+02, - 0.17053598983476967454e+01, - -0.12112377153483019754e+03, - 0.79064205315124908680e+02, - 0.70759703855761628688e+02, - -0.11116221343132049526e+03, - 0.64080821604616629017e+01, - 0.64275199147798360855e+02, - -0.67446121686113080784e+01, - -0.52028671383801956551e+02, - -0.69395146088813746132e+01, - 0.94656420339332626668e+02, - -0.56963803160027509875e+02, - -0.75131658211657352808e+02, - 0.12372650442405145554e+03, - -0.23094072850297632016e+02, - -0.89331059570421885496e+02, - 0.75800576210243676201e+02, - 0.17303024842826243201e+02, - -0.47912328265797221150e+02, - -0.94823057631793083999e+01, - 0.43092107692929857876e+02, - 0.15890538853938501518e+02, - -0.84553389497262031682e+02, - 0.49408777688941000861e+02, - 0.65080787815199428792e+02, - -0.11863760750798020638e+03, - 0.39889942257567973627e+02, - 0.80365646264387194719e+02, - -0.10489737027420646598e+03, - 0.19322312395806651608e+02, - 0.64083681256579765773e+02, - -0.55504202606888888738e+02, - -0.84084060703187724073e+01, - 0.31902508740380202568e+02, - 0.81160661792778299173e+01, - -0.39036996188510862282e+02, - 0.12828228660508163017e+01, - 0.64757694567106483419e+02, - -0.66799910380283563427e+02, - -0.16763969996625590397e+02, - 0.99950301923250307823e+02, - -0.85168933529760550982e+02, - -0.20317766168993870224e+02, - 0.10863159451621275764e+03, - -0.88957447134372458208e+02, - -0.14561623406954300464e+02, - 0.94352187683917719596e+02, - -0.76346646939594307923e+02, - -0.76017286671840267331e+01, - 0.66198697261117374069e+02, - -0.49664631880448375512e+02, - -0.64531374661436258222e+01, - 0.34937012367093856824e+02, - -0.14624103424601093693e+02, - -0.14620421021337149270e+02, - 0.96969280355942295557e+01, - 0.21496157085101952333e+02, - -0.31614577890537756133e+02, - -0.40060261128077998549e+01, - 0.51901714025536605845e+02, - -0.53951059591052199949e+02, - -0.47368259989187206926e+01, - 0.71843089765211658460e+02, - -0.76831345019966477139e+02, - 0.55884118589830640289e+01, - 0.79316238043808169778e+02, - -0.95762233050702903370e+02, - 0.23067819179151523912e+02, - 0.74910948777319845249e+02, - -0.10764270320726376440e+03, - 0.43256770300538754270e+02, - 0.61072896026449100759e+02, - -0.11117090464111433334e+03, - 0.62292211867141276116e+02, - 0.41135438301919769799e+02, - -0.10667267694396767297e+03, - 0.77519441629790293291e+02, - 0.18430913355268131681e+02, - -0.95580206891789487145e+02, - 0.87631361525836368287e+02, - -0.43273245861676334911e+01, - -0.79805241818353707117e+02, - 0.92448091713577753126e+02, - -0.25329379446020094946e+02, - -0.61195896786105237197e+02, - 0.92507321675761616575e+02, - -0.43655750278346417304e+02, - -0.41183839905646117074e+02, - 0.88622272952862729767e+02, - -0.59057497426784330230e+02, - -0.20652207908581523554e+02, - 0.81521557784833689198e+02, - -0.71636267913253504958e+02, - 0.34740304855286858299e+02, - 0.35330386591862655621e+02, - -0.10497228029713427588e+03, - 0.87493043921813040242e+02, - 0.13177238751305596409e+02, - -0.97985688460406066724e+02, - 0.10050187523034861670e+03, - -0.69269718741196095735e+01, - -0.88869375624874251685e+02, - 0.10928437203151520407e+03, - -0.24132423927294105681e+02, - -0.79261365215658074135e+02, - 0.11485749952515948280e+03, - -0.38059757524454759903e+02, - -0.70480268792010107859e+02, - 0.11827252691791835559e+03, - -0.48631412960149830838e+02, - -0.63529963350948705170e+02, - 0.12046877059397927212e+03, - -0.55907588497270289452e+02, - -0.59144852918957980137e+02, - 0.12217493573382392924e+03, - -0.59944702719844784156e+02, - -0.57844852660545740264e+02, - 0.12383998061566362026e+03, - -0.60685032233696226456e+02, - -0.59974314823104563743e+02, - 0.12557514293916241854e+03, - -0.57882979775090980468e+02, - -0.65703444058159206520e+02, - 0.12709354496017031977e+03, - -0.51076242326500675972e+02, - -0.74974090390529781303e+02, - 0.12764355884457479817e+03, - -0.39618190737747958963e+02, - -0.87376040955648136332e+02, - 0.12594798597807887575e+03, - -0.22799021395005894419e+02, - -0.10194931345562859804e+03, - 0.12018471082269398664e+03, - -0.93209417110057715683e-01, - -0.11692922288611744364e+03, - 0.10807604431992898242e+03, - 0.28429523791259668997e+02, - -0.12949246138330866529e+03, - 0.87188449466236917829e+02, - 0.61518762861752009030e+02, - -0.13563037104837164293e+03, - 0.55565355920727647288e+02, - 0.96046950187431917811e+02, - -0.13036542904185634484e+03, - 0.12788354374508266176e+02, - 0.12641010784786540455e+03, - -0.10860726424821848468e+03, - -0.38570273273936727776e+02, - 0.14444963697049641382e+03, - -0.66935954063183672247e+02, - -0.91441812854640119212e+02, - 0.14054348063213825526e+03, - -0.63638386586424955382e+01, - -0.13352879815598527102e+03, - 0.10656474339866913681e+03, - 0.64502646640254724275e+02, - -0.14871213885396213072e+03, - 0.40944497634378464568e+02, - 0.12755568151689439560e+03, - -0.12211306146774001036e+03, - -0.45290230527674637528e+02, - 0.15736122709741104586e+03, - -0.49277409654590144328e+02, - -0.12496565222488405311e+03, - 0.13040520863014336328e+03, - 0.53139541546222666568e+02, - -0.15943917394818313937e+03, - 0.41662414964077967738e+02, - 0.14270790054877207353e+03, - -0.11662308123581830444e+03, - -0.78368496319628249580e+02, - 0.16364041236181975592e+03, + -0.11217282621902262107e+2, + 0.17971943495018503967e+2, + -0.17702317038523602832e+2, + 0.10790792388343570352e+2, + -0.39857058638472803169e-1, + -0.10384761316448690494e+2, + 0.16608613173237323224e+2, + -0.16407782976898715788e+2, + 0.10031648508830535604e+2, + 0.58164123647595367822e-2, + -0.98662452061967904626e+1, + 0.15863608335224805401e+2, + -0.15790330258791573925e+2, + 0.97327332634432295322e+1, + -0.13564561408044541579e+2, + 0.13701629795405118273e+2, + 0.82252402088898755039e+1, + -0.23946140988291048757e+2, + 0.33524136716169962824e+2, + -0.26918216335718174292e+2, + 0.12825997613925817831e+2, + 0.95005932820850400589e+1, + -0.25078975891950342714e+2, + 0.33906761068189190667e+2, + -0.26193906858483792632e+2, + 0.11098088331246607652e+2, + 0.11618899606586131412e+2, + -0.26689624439452543925e+2, + 0.34189176862877566521e+2, + -0.24818437100916199256e+2, + 0.84337583971588401255e+1, + 0.14559245607190687721e+2, + -0.28642840680301372203e+2, + 0.3416631102244550533e+2, + -0.22602207770622467109e+2, + 0.47501482326491961672e+1, + 0.18243387740538928199e+2, + -0.3071309100032770445e+2, + 0.33550311484322868694e+2, + -0.19320578596106418701e+2, + -0.20826891226014992466e-2, + 0.22501357256692855913e+2, + -0.32564423731813327834e+2, + 0.3197659933303798141e+2, + -0.14746981230704159671e+2, + -0.57910074337510639708e+1, + 0.27029858530896625268e+2, + -0.33737919112838191893e+2, + 0.29024230614396913097e+2, + -0.87209022994805636131e+1, + -0.12479153184006950283e+2, + 0.31238554396117390155e+2, + -0.33965405911190138966e+2, + 0.23469430031218596611e+2, + -0.31769107607328006537e+1, + -0.2420392547707783848e+2, + 0.24689382367532616058e+2, + -0.52227443103481142828e+2, + -0.21741301815755647908e+2, + -0.61687715620051442045e+2, + -0.1400142372400311217e+3, + -0.13402761847177924892e+3, + -0.25910332583941362827e+3, + -0.2725040245741491276e+3, + -0.2754450635868123527e+3, + -0.27683850389618544341e+3, + -0.95211805253487469258e+2, + 0.51698528886848515995e+1, + 0.16092225843204946045e+3, + 0.24384253442483384333e+3, + 0.11359062053076134191e+3, + 0.2176639812640972238e+2, + -0.16462488876836115992e+3, + -0.19875290930088152663e+3, + -0.33040668695070884553e+2, + 0.67555072694573553349e+2, + 0.19555441374256568565e+3, + 0.8239640046932738926e+2, + -0.11901320584617248244e+3, + -0.12488854766421998477e+3, + -0.82378865316374557892e+2, + 0.12097340561875324738e+3, + 0.15853677766438869412e+3, + -0.38953925464602747297e+2, + -0.10437751583987821391e+3, + -0.10773561197748799145e+3, + 0.71466967781044687058e+2, + 0.16435139384379061767e+3, + -0.39919742005858125822e+2, + -0.105141694470911915e+3, + -0.64060323956383925292e+2, + 0.76714744006336303528e+2, + 0.14019338356835393711e+3, + -0.90373725112701478679e+2, + -0.10940297837376898826e+3, + 0.32887419849603162447e+2, + 0.87505077621217495221e+2, + 0.53306248465080713572e+2, + -0.13490851087364413274e+3, + -0.49221065468114133523e+2, + 0.1372609809510447576e+3, + 0.18209327681787602415e+2, + -0.69893446018830346134e+2, + -0.64873679065103573294e+2, + 0.6057543346717277899e+2, + 0.109160128175337519e+3, + -0.11380824237801371623e+3, + -0.6394071286113842234e+2, + 0.10484610077205159939e+3, + 0.2671678440581282743e+2, + -0.49592519428608717647e+2, + -0.69034482789562943594e+2, + 0.69452117164660876369e+2, + 0.84625582310491566318e+2, + -0.12893866824407390936e+3, + -0.15978112676280089133e+2, + 0.11014874599735172467e+3, + -0.23781940241902045585e+2, + -0.57957712634007279462e+2, + -0.9590636402625694501e+1, + 0.81401830881796442441e+2, + 0.17053598983476967454e+1, + -0.12112377153483019754e+3, + 0.7906420531512490868e+2, + 0.70759703855761628688e+2, + -0.11116221343132049526e+3, + 0.64080821604616629017e+1, + 0.64275199147798360855e+2, + -0.67446121686113080784e+1, + -0.52028671383801956551e+2, + -0.69395146088813746132e+1, + 0.94656420339332626668e+2, + -0.56963803160027509875e+2, + -0.75131658211657352808e+2, + 0.12372650442405145554e+3, + -0.23094072850297632016e+2, + -0.89331059570421885496e+2, + 0.75800576210243676201e+2, + 0.17303024842826243201e+2, + -0.4791232826579722115e+2, + -0.94823057631793083999e+1, + 0.43092107692929857876e+2, + 0.15890538853938501518e+2, + -0.84553389497262031682e+2, + 0.49408777688941000861e+2, + 0.65080787815199428792e+2, + -0.11863760750798020638e+3, + 0.39889942257567973627e+2, + 0.80365646264387194719e+2, + -0.10489737027420646598e+3, + 0.19322312395806651608e+2, + 0.64083681256579765773e+2, + -0.55504202606888888738e+2, + -0.84084060703187724073e+1, + 0.31902508740380202568e+2, + 0.81160661792778299173e+1, + -0.39036996188510862282e+2, + 0.12828228660508163017e+1, + 0.64757694567106483419e+2, + -0.66799910380283563427e+2, + -0.16763969996625590397e+2, + 0.99950301923250307823e+2, + -0.85168933529760550982e+2, + -0.20317766168993870224e+2, + 0.10863159451621275764e+3, + -0.88957447134372458208e+2, + -0.14561623406954300464e+2, + 0.94352187683917719596e+2, + -0.76346646939594307923e+2, + -0.76017286671840267331e+1, + 0.66198697261117374069e+2, + -0.49664631880448375512e+2, + -0.64531374661436258222e+1, + 0.34937012367093856824e+2, + -0.14624103424601093693e+2, + -0.1462042102133714927e+2, + 0.96969280355942295557e+1, + 0.21496157085101952333e+2, + -0.31614577890537756133e+2, + -0.40060261128077998549e+1, + 0.51901714025536605845e+2, + -0.53951059591052199949e+2, + -0.47368259989187206926e+1, + 0.7184308976521165846e+2, + -0.76831345019966477139e+2, + 0.55884118589830640289e+1, + 0.79316238043808169778e+2, + -0.9576223305070290337e+2, + 0.23067819179151523912e+2, + 0.74910948777319845249e+2, + -0.1076427032072637644e+3, + 0.4325677030053875427e+2, + 0.61072896026449100759e+2, + -0.11117090464111433334e+3, + 0.62292211867141276116e+2, + 0.41135438301919769799e+2, + -0.10667267694396767297e+3, + 0.77519441629790293291e+2, + 0.18430913355268131681e+2, + -0.95580206891789487145e+2, + 0.87631361525836368287e+2, + -0.43273245861676334911e+1, + -0.79805241818353707117e+2, + 0.92448091713577753126e+2, + -0.25329379446020094946e+2, + -0.61195896786105237197e+2, + 0.92507321675761616575e+2, + -0.43655750278346417304e+2, + -0.41183839905646117074e+2, + 0.88622272952862729767e+2, + -0.5905749742678433023e+2, + -0.20652207908581523554e+2, + 0.81521557784833689198e+2, + -0.71636267913253504958e+2, + 0.34740304855286858299e+2, + 0.35330386591862655621e+2, + -0.10497228029713427588e+3, + 0.87493043921813040242e+2, + 0.13177238751305596409e+2, + -0.97985688460406066724e+2, + 0.1005018752303486167e+3, + -0.69269718741196095735e+1, + -0.88869375624874251685e+2, + 0.10928437203151520407e+3, + -0.24132423927294105681e+2, + -0.79261365215658074135e+2, + 0.1148574995251594828e+3, + -0.38059757524454759903e+2, + -0.70480268792010107859e+2, + 0.11827252691791835559e+3, + -0.48631412960149830838e+2, + -0.6352996335094870517e+2, + 0.12046877059397927212e+3, + -0.55907588497270289452e+2, + -0.59144852918957980137e+2, + 0.12217493573382392924e+3, + -0.59944702719844784156e+2, + -0.57844852660545740264e+2, + 0.12383998061566362026e+3, + -0.60685032233696226456e+2, + -0.59974314823104563743e+2, + 0.12557514293916241854e+3, + -0.57882979775090980468e+2, + -0.6570344405815920652e+2, + 0.12709354496017031977e+3, + -0.51076242326500675972e+2, + -0.74974090390529781303e+2, + 0.12764355884457479817e+3, + -0.39618190737747958963e+2, + -0.87376040955648136332e+2, + 0.12594798597807887575e+3, + -0.22799021395005894419e+2, + -0.10194931345562859804e+3, + 0.12018471082269398664e+3, + -0.93209417110057715683e-1, + -0.11692922288611744364e+3, + 0.10807604431992898242e+3, + 0.28429523791259668997e+2, + -0.12949246138330866529e+3, + 0.87188449466236917829e+2, + 0.6151876286175200903e+2, + -0.13563037104837164293e+3, + 0.55565355920727647288e+2, + 0.96046950187431917811e+2, + -0.13036542904185634484e+3, + 0.12788354374508266176e+2, + 0.12641010784786540455e+3, + -0.10860726424821848468e+3, + -0.38570273273936727776e+2, + 0.14444963697049641382e+3, + -0.66935954063183672247e+2, + -0.91441812854640119212e+2, + 0.14054348063213825526e+3, + -0.63638386586424955382e+1, + -0.13352879815598527102e+3, + 0.10656474339866913681e+3, + 0.64502646640254724275e+2, + -0.14871213885396213072e+3, + 0.40944497634378464568e+2, + 0.1275556815168943956e+3, + -0.12211306146774001036e+3, + -0.45290230527674637528e+2, + 0.15736122709741104586e+3, + -0.49277409654590144328e+2, + -0.12496565222488405311e+3, + 0.13040520863014336328e+3, + 0.53139541546222666568e+2, + -0.15943917394818313937e+3, + 0.41662414964077967738e+2, + 0.14270790054877207353e+3, + -0.11662308123581830444e+3, + -0.7836849631962824958e+2, + 0.16364041236181975592e+3, 0.11699828077373577995, - -0.16241662758000066447e+03, - 0.82478643406861309018e+02, - 0.13034814717212137225e+03, - -0.13942821324781220937e+03, - -0.67032344397422903626e+02, - 0.17441793334132171367e+03, - 0.45524611298866861364e-01, - -0.17367875446664803007e+03, - 0.70261575265941004886e+02, - 0.15479589238484524572e+03, - -0.12218789480040231865e+03, - -0.11290370955650365659e+03, - 0.16419593731921497692e+03, - 0.69044416984663016024e+02, - -0.18334324933159183502e+03, - -0.17565888838859823551e+02, - 0.19487417104085591291e+03, - -0.23829137595621652679e+02, - -0.19004862604560003092e+03, - 0.64964133754625152051e+02, - 0.18587453238371008979e+03, - -0.91995456578461300978e+02, - -0.17363964848033558042e+03, - 0.11756144754367970506e+03, - 0.16931182371841862278e+03, - -0.12941471703603684773e+03, - -0.16271884127950164611e+03, - 0.14055200893981995591e+03, - 0.16822536104663336687e+03, - -0.13808403554275383840e+03, - -0.17403130208671635160e+03, - 0.13354152260091143489e+03, - 0.19257795581422317355e+03, - -0.11211776619703265112e+03, - -0.20946937166337315261e+03, - 0.83418003329350469244e+02, - 0.23325150442603248280e+03, - -0.31672259967544480475e+02, - -0.24394687124763427732e+03, - -0.32012635705773043071e+02, - 0.24298372028713131954e+03, - 0.11707896203898775411e+03, - -0.20362636946533729088e+03, - -0.19883639641188295855e+03, - 0.12558254095920254656e+03, - 0.26510321196760844487e+03, - 0.61367981990752129562e+01, - -0.26673084868973944594e+03, - -0.15684022444405871966e+03, - 0.18070160645048616743e+03, - 0.28083812271359130364e+03, - 0.97474046921557579992e+01, - -0.27993933469768131772e+03, - -0.22436479452551347435e+03, - 0.10719161798809251707e+03, - 0.32541352444374257402e+03, - 0.18652974831968555236e+03, - -0.15586808878972979642e+03, - -0.34752287175086149773e+03, - -0.20432327654768553771e+03, - 0.13412125000095258542e+03, - 0.36854922953348602732e+03, - 0.31177870164182229473e+03, - 0.17927228596435458741e+02, - -0.29783754101541001091e+03, - -0.43460814284650689387e+03, - -0.32696723703676588002e+03, - -0.49252161969674048692e+02, - 0.26129226236940581884e+03, - 0.48939202890080144925e+03, - 0.58539522604075136769e+03, - 0.56176794860544009680e+03, - 0.46406373960349952768e+03, - 0.34101608682682484641e+03, - 0.22711603268806226197e+03, - 0.13872710102065659044e+03, - 0.78354854322802054867e+02, - 0.41165206062913895835e+02, - 0.20206001516128065276e+02, - 0.92981486975915803583e+01, - 0.40219393375886447473e+01, - 0.16387416276994786202e+01, + -0.16241662758000066447e+3, + 0.82478643406861309018e+2, + 0.13034814717212137225e+3, + -0.13942821324781220937e+3, + -0.67032344397422903626e+2, + 0.17441793334132171367e+3, + 0.45524611298866861364e-1, + -0.17367875446664803007e+3, + 0.70261575265941004886e+2, + 0.15479589238484524572e+3, + -0.12218789480040231865e+3, + -0.11290370955650365659e+3, + 0.16419593731921497692e+3, + 0.69044416984663016024e+2, + -0.18334324933159183502e+3, + -0.17565888838859823551e+2, + 0.19487417104085591291e+3, + -0.23829137595621652679e+2, + -0.19004862604560003092e+3, + 0.64964133754625152051e+2, + 0.18587453238371008979e+3, + -0.91995456578461300978e+2, + -0.17363964848033558042e+3, + 0.11756144754367970506e+3, + 0.16931182371841862278e+3, + -0.12941471703603684773e+3, + -0.16271884127950164611e+3, + 0.14055200893981995591e+3, + 0.16822536104663336687e+3, + -0.1380840355427538384e+3, + -0.1740313020867163516e+3, + 0.13354152260091143489e+3, + 0.19257795581422317355e+3, + -0.11211776619703265112e+3, + -0.20946937166337315261e+3, + 0.83418003329350469244e+2, + 0.2332515044260324828e+3, + -0.31672259967544480475e+2, + -0.24394687124763427732e+3, + -0.32012635705773043071e+2, + 0.24298372028713131954e+3, + 0.11707896203898775411e+3, + -0.20362636946533729088e+3, + -0.19883639641188295855e+3, + 0.12558254095920254656e+3, + 0.26510321196760844487e+3, + 0.61367981990752129562e+1, + -0.26673084868973944594e+3, + -0.15684022444405871966e+3, + 0.18070160645048616743e+3, + 0.28083812271359130364e+3, + 0.97474046921557579992e+1, + -0.27993933469768131772e+3, + -0.22436479452551347435e+3, + 0.10719161798809251707e+3, + 0.32541352444374257402e+3, + 0.18652974831968555236e+3, + -0.15586808878972979642e+3, + -0.34752287175086149773e+3, + -0.20432327654768553771e+3, + 0.13412125000095258542e+3, + 0.36854922953348602732e+3, + 0.31177870164182229473e+3, + 0.17927228596435458741e+2, + -0.29783754101541001091e+3, + -0.43460814284650689387e+3, + -0.32696723703676588002e+3, + -0.49252161969674048692e+2, + 0.26129226236940581884e+3, + 0.48939202890080144925e+3, + 0.58539522604075136769e+3, + 0.5617679486054400968e+3, + 0.46406373960349952768e+3, + 0.34101608682682484641e+3, + 0.22711603268806226197e+3, + 0.13872710102065659044e+3, + 0.78354854322802054867e+2, + 0.41165206062913895835e+2, + 0.20206001516128065276e+2, + 0.92981486975915803583e+1, + 0.40219393375886447473e+1, + 0.16387416276994786202e+1, 0.63000552680084875856, 0.22882718940146185016, - 0.78604098455570231563e-01, - 0.25556180993605386725e-01, - 0.78687773062186064377e-02, - 0.22953322103530719549e-02, - 0.63446011592344293047e-03, - 0.16619188326214026185e-03, - 0.41250097904100868932e-04, - 0.96995630145883839622e-05, - 0.21599036527417060653e-05, - 0.45525590363692216558e-06, - 0.90769503142381905895e-07, - 0.17106063709384483069e-07, - 0.30442770688490395270e-08, - 0.51106030481320411491e-09, + 0.78604098455570231563e-1, + 0.25556180993605386725e-1, + 0.78687773062186064377e-2, + 0.22953322103530719549e-2, + 0.63446011592344293047e-3, + 0.16619188326214026185e-3, + 0.41250097904100868932e-4, + 0.96995630145883839622e-5, + 0.21599036527417060653e-5, + 0.45525590363692216558e-6, + 0.90769503142381905895e-7, + 0.17106063709384483069e-7, + 0.3044277068849039527e-8, + 0.51106030481320411491e-9, 0.80829612718499939319e-10, 0.12026956918747616118e-10, 0.16808010810062693799e-11, @@ -25271,288 +25273,288 @@ function ESERK4ConstantCache(zprev) 0.10965645155008207404e-25, 0.42163857242171073104e-27, 0.13733384267059644806e-28, - 0.36846717460970464630e-30, + 0.3684671746097046463e-30, 0.78191467384498369374e-32, 0.12305848189769688946e-33, 0.12769708352203998749e-35, - 0.65539676099790361990e-38, - -0.26050914013125846432e-02, - 0.49898978694554716774e-03, - 0.82811675121073242967e-02, - -0.14619062690500558149e-01, - 0.12975220745024971386e-01, - -0.79872343079138916067e-02, - 0.48247368225540843492e-02, - -0.76620469447699251012e-02, - 0.11426481811970357755e-01, - -0.11811284262246653232e-01, - 0.60322528379363237264e-02, - 0.24260657099184511549e-03, - -0.34380492357465449946e-02, - 0.18200700370264674167e-02, - -0.71155046059015849072e-03, - 0.13811629919112877133e-02, - -0.29010398699532246973e-02, - -0.44650924993610983027e-03, - 0.69876574889968503732e-02, - -0.11481112666752120444e-01, - 0.61051673861716344860e-02, - 0.55078279328458143449e-02, - -0.13992943300708366935e-01, - 0.92655548796473311685e-02, - 0.32879570873175592051e-02, - -0.10614942924948980729e-01, - 0.13612870828796121148e-02, - 0.15901692533864079937e-01, - -0.23191538333983092307e-01, - 0.73805136299332184391e-02, - 0.19567734107315062908e-01, - -0.34164808328180605590e-01, - 0.20540908534256344109e-01, - 0.77647791587003179431e-02, - -0.24404128907246445263e-01, - 0.12951069561955536741e-01, - 0.11607006421734998927e-01, - -0.22964378638938024585e-01, - 0.78400786942891386583e-02, - 0.15677645102420232487e-01, - -0.22478630285707582037e-01, - 0.40564793100483593699e-02, - 0.19081222711695728506e-01, - -0.25643290589532737739e-01, - 0.12797368960512261679e-01, - 0.14672119726306880158e-03, - -0.18979794015567235787e-02, - -0.11893633571634948821e-02, - -0.70481357633270956195e-02, - 0.23334407080064265699e-01, - -0.29754821677730580731e-01, - 0.13662139557734924444e-01, - 0.81972794989197666354e-02, - -0.11344954496015776171e-01, - -0.87178493707282186942e-02, - 0.23953445155718598031e-01, - -0.11699983506076132994e-01, - -0.18566722614945685432e-01, - 0.30479627753182601813e-01, - -0.93940447990250100507e-02, - -0.22938006607777679247e-01, - 0.32391878119733721886e-01, - -0.18723691301442618035e-01, - 0.72870695751635046825e-02, - -0.13786510177908176122e-01, - 0.18617588336326644505e-01, - -0.27541442993707361368e-02, - -0.22012905005087273630e-01, - 0.22192441488840752850e-01, - 0.40071656455627898893e-02, - -0.22562769928531834634e-01, - 0.63169283336862143766e-02, - 0.20805363164861503250e-01, - -0.19991357947713186971e-01, - -0.97650260220395121435e-02, - 0.26735816024263604068e-01, - -0.12383123672433559576e-01, - -0.60480032090967812686e-02, - -0.18262511689690797030e-02, - 0.15910634975719855494e-01, - -0.31814311349902674175e-02, - -0.25517472842485469653e-01, - 0.22682688695344843666e-01, - 0.15595739983205771095e-01, - -0.40409544062358054850e-01, - 0.20715676022514593196e-01, - 0.54857154148648347089e-02, - 0.22217681828479919517e-03, - -0.15436840629374844192e-01, - -0.29768802397071481187e-02, - 0.33348123890022993154e-01, - -0.26294439848683476973e-01, - -0.73170355456148254009e-02, - 0.57397744649709909678e-02, - 0.31515980487582168079e-01, - -0.42922376961260673423e-01, - 0.12167572917408910754e-01, - 0.20860447549553014050e-03, - 0.23428624011202853206e-01, - -0.25143482120560410598e-01, - -0.15617323334908240692e-01, - 0.29931795771402786022e-01, - 0.63826860539008311093e-02, - -0.22869152915405182441e-01, - -0.12367006371045315832e-01, - 0.26371270190860000154e-01, - 0.48212725744958152135e-02, - -0.74361326565980543843e-02, - -0.32236186513882124360e-01, - 0.25122051253438248963e-01, - 0.29282611506435036325e-01, - -0.35728332333489432049e-01, - 0.21441749297146386020e-02, - -0.19974853008805415477e-01, - 0.47820871900926993636e-01, - -0.37576936180266024348e-02, - -0.37102488991209520153e-01, - 0.53952919821065358288e-03, - 0.12569233881049187568e-01, - 0.29528181787592540364e-01, - -0.11050734301077898281e-01, - -0.41460884682859147632e-01, - 0.76137036555569866103e-02, - 0.21776447770089461808e-01, - 0.28314268070813296274e-01, - -0.21859338098111632392e-01, - -0.30097370859298394619e-01, - -0.15006287434390228747e-01, - 0.38912074404865708288e-01, - 0.23460263564748614490e-01, - 0.12774052060193633647e-02, - -0.37241103748971965404e-01, - -0.32760368337488188217e-01, - 0.99343590007702608363e-02, - 0.40908006624968851206e-01, - 0.25366165734596952258e-01, - 0.11940259134093737792e-01, - -0.54620449056714662217e-01, - -0.29052729169101513401e-01, - -0.27982938873054124390e-01, - 0.26894581900782581207e-01, - 0.45194682555422249770e-01, - 0.54544643464529404819e-01, - 0.10192928453074182743e-01, - 0.72155927281449304747e-02, - -0.71282919907243266766e-01, - -0.42008016624738228617e-01, - -0.86426061075502796927e-01, - -0.57578126789318034850e-01, - -0.44905086101219356121e-01, - -0.45110673281754325170e-01, - -0.15366274887223327003e-01, - -0.13252609532597365780e-01, - -0.18925896872285994516e-01, - 0.15312227336069022740e-01, - -0.23316953819413961668e-01, - 0.15121270964782435389e-01, - -0.59155307852496886306e-02, - -0.61320431137125187837e-02, - 0.13783093256018657397e-01, - -0.15184680810718916358e-01, - 0.98056992201379557933e-02, - -0.45694143707104904577e-03, - -0.87168703340990468659e-02, - 0.13851035483462675532e-01, - -0.13032222946668982344e-01, - 0.70369110214297094300e-02, - 0.11775402783978064676e-02, - -0.78051834684200105050e-02, - 0.99104389508569892125e-02, - -0.65992126152679747228e-02, - -0.64957789266295877430e-03, - 0.87615749799260043279e-02, - -0.14395334221368100147e-01, - 0.15392696612021529792e-01, - -0.11576221524536885535e-01, - 0.47481229074511736854e-02, - 0.22088169770556036892e-02, - -0.65598548518939862884e-02, - 0.68811007997697315811e-02, - -0.35482320708220579757e-02, - -0.14873264308704157045e-02, - 0.56204554484424384606e-02, - -0.66815079712658331096e-02, - 0.38473056684429161184e-02, - 0.20877765453844645410e-02, - -0.90570906313848509317e-02, - 0.14602998980277583779e-01, - -0.16828773888205878634e-01, - 0.15123295414742691720e-01, - -0.10313404239836938478e-01, - 0.42877841707409398292e-02, - 0.79484282609118106066e-03, - -0.33249477373963054472e-02, - 0.28250316707185939291e-02, - -0.38467755293369571381e-04, - -0.34402840674274070241e-02, - 0.58632125633526514449e-02, - -0.60367885491627235051e-02, - 0.37889176478766994904e-02, + 0.6553967609979036199e-38, + -0.26050914013125846432e-2, + 0.49898978694554716774e-3, + 0.82811675121073242967e-2, + -0.14619062690500558149e-1, + 0.12975220745024971386e-1, + -0.79872343079138916067e-2, + 0.48247368225540843492e-2, + -0.76620469447699251012e-2, + 0.11426481811970357755e-1, + -0.11811284262246653232e-1, + 0.60322528379363237264e-2, + 0.24260657099184511549e-3, + -0.34380492357465449946e-2, + 0.18200700370264674167e-2, + -0.71155046059015849072e-3, + 0.13811629919112877133e-2, + -0.29010398699532246973e-2, + -0.44650924993610983027e-3, + 0.69876574889968503732e-2, + -0.11481112666752120444e-1, + 0.6105167386171634486e-2, + 0.55078279328458143449e-2, + -0.13992943300708366935e-1, + 0.92655548796473311685e-2, + 0.32879570873175592051e-2, + -0.10614942924948980729e-1, + 0.13612870828796121148e-2, + 0.15901692533864079937e-1, + -0.23191538333983092307e-1, + 0.73805136299332184391e-2, + 0.19567734107315062908e-1, + -0.3416480832818060559e-1, + 0.20540908534256344109e-1, + 0.77647791587003179431e-2, + -0.24404128907246445263e-1, + 0.12951069561955536741e-1, + 0.11607006421734998927e-1, + -0.22964378638938024585e-1, + 0.78400786942891386583e-2, + 0.15677645102420232487e-1, + -0.22478630285707582037e-1, + 0.40564793100483593699e-2, + 0.19081222711695728506e-1, + -0.25643290589532737739e-1, + 0.12797368960512261679e-1, + 0.14672119726306880158e-3, + -0.18979794015567235787e-2, + -0.11893633571634948821e-2, + -0.70481357633270956195e-2, + 0.23334407080064265699e-1, + -0.29754821677730580731e-1, + 0.13662139557734924444e-1, + 0.81972794989197666354e-2, + -0.11344954496015776171e-1, + -0.87178493707282186942e-2, + 0.23953445155718598031e-1, + -0.11699983506076132994e-1, + -0.18566722614945685432e-1, + 0.30479627753182601813e-1, + -0.93940447990250100507e-2, + -0.22938006607777679247e-1, + 0.32391878119733721886e-1, + -0.18723691301442618035e-1, + 0.72870695751635046825e-2, + -0.13786510177908176122e-1, + 0.18617588336326644505e-1, + -0.27541442993707361368e-2, + -0.2201290500508727363e-1, + 0.2219244148884075285e-1, + 0.40071656455627898893e-2, + -0.22562769928531834634e-1, + 0.63169283336862143766e-2, + 0.2080536316486150325e-1, + -0.19991357947713186971e-1, + -0.97650260220395121435e-2, + 0.26735816024263604068e-1, + -0.12383123672433559576e-1, + -0.60480032090967812686e-2, + -0.1826251168969079703e-2, + 0.15910634975719855494e-1, + -0.31814311349902674175e-2, + -0.25517472842485469653e-1, + 0.22682688695344843666e-1, + 0.15595739983205771095e-1, + -0.4040954406235805485e-1, + 0.20715676022514593196e-1, + 0.54857154148648347089e-2, + 0.22217681828479919517e-3, + -0.15436840629374844192e-1, + -0.29768802397071481187e-2, + 0.33348123890022993154e-1, + -0.26294439848683476973e-1, + -0.73170355456148254009e-2, + 0.57397744649709909678e-2, + 0.31515980487582168079e-1, + -0.42922376961260673423e-1, + 0.12167572917408910754e-1, + 0.2086044754955301405e-3, + 0.23428624011202853206e-1, + -0.25143482120560410598e-1, + -0.15617323334908240692e-1, + 0.29931795771402786022e-1, + 0.63826860539008311093e-2, + -0.22869152915405182441e-1, + -0.12367006371045315832e-1, + 0.26371270190860000154e-1, + 0.48212725744958152135e-2, + -0.74361326565980543843e-2, + -0.3223618651388212436e-1, + 0.25122051253438248963e-1, + 0.29282611506435036325e-1, + -0.35728332333489432049e-1, + 0.2144174929714638602e-2, + -0.19974853008805415477e-1, + 0.47820871900926993636e-1, + -0.37576936180266024348e-2, + -0.37102488991209520153e-1, + 0.53952919821065358288e-3, + 0.12569233881049187568e-1, + 0.29528181787592540364e-1, + -0.11050734301077898281e-1, + -0.41460884682859147632e-1, + 0.76137036555569866103e-2, + 0.21776447770089461808e-1, + 0.28314268070813296274e-1, + -0.21859338098111632392e-1, + -0.30097370859298394619e-1, + -0.15006287434390228747e-1, + 0.38912074404865708288e-1, + 0.2346026356474861449e-1, + 0.12774052060193633647e-2, + -0.37241103748971965404e-1, + -0.32760368337488188217e-1, + 0.99343590007702608363e-2, + 0.40908006624968851206e-1, + 0.25366165734596952258e-1, + 0.11940259134093737792e-1, + -0.54620449056714662217e-1, + -0.29052729169101513401e-1, + -0.2798293887305412439e-1, + 0.26894581900782581207e-1, + 0.4519468255542224977e-1, + 0.54544643464529404819e-1, + 0.10192928453074182743e-1, + 0.72155927281449304747e-2, + -0.71282919907243266766e-1, + -0.42008016624738228617e-1, + -0.86426061075502796927e-1, + -0.5757812678931803485e-1, + -0.44905086101219356121e-1, + -0.4511067328175432517e-1, + -0.15366274887223327003e-1, + -0.1325260953259736578e-1, + -0.18925896872285994516e-1, + 0.1531222733606902274e-1, + -0.23316953819413961668e-1, + 0.15121270964782435389e-1, + -0.59155307852496886306e-2, + -0.61320431137125187837e-2, + 0.13783093256018657397e-1, + -0.15184680810718916358e-1, + 0.98056992201379557933e-2, + -0.45694143707104904577e-3, + -0.87168703340990468659e-2, + 0.13851035483462675532e-1, + -0.13032222946668982344e-1, + 0.703691102142970943e-2, + 0.11775402783978064676e-2, + -0.7805183468420010505e-2, + 0.99104389508569892125e-2, + -0.65992126152679747228e-2, + -0.6495778926629587743e-3, + 0.87615749799260043279e-2, + -0.14395334221368100147e-1, + 0.15392696612021529792e-1, + -0.11576221524536885535e-1, + 0.47481229074511736854e-2, + 0.22088169770556036892e-2, + -0.65598548518939862884e-2, + 0.68811007997697315811e-2, + -0.35482320708220579757e-2, + -0.14873264308704157045e-2, + 0.56204554484424384606e-2, + -0.66815079712658331096e-2, + 0.38473056684429161184e-2, + 0.2087776545384464541e-2, + -0.90570906313848509317e-2, + 0.14602998980277583779e-1, + -0.16828773888205878634e-1, + 0.1512329541474269172e-1, + -0.10313404239836938478e-1, + 0.42877841707409398292e-2, + 0.79484282609118106066e-3, + -0.33249477373963054472e-2, + 0.28250316707185939291e-2, + -0.38467755293369571381e-4, + -0.34402840674274070241e-2, + 0.58632125633526514449e-2, + -0.60367885491627235051e-2, + 0.37889176478766994904e-2, -0.14073775870372062791, 0.23274657593631148389, - -0.93280417443639157549e-01, - -0.67253860672934054343e-01, + -0.93280417443639157549e-1, + -0.67253860672934054343e-1, 0.21159413740811028326, -0.27436718135725152168, 0.26221677964317047227, -0.17420835196804912437, - 0.74782796835168890981e-01, - 0.95438723620208630594e-02, - -0.27489064671697122089e-01, - -0.10500530313825966189e-02, - 0.69223798728394556057e-01, + 0.74782796835168890981e-1, + 0.95438723620208630594e-2, + -0.27489064671697122089e-1, + -0.10500530313825966189e-2, + 0.69223798728394556057e-1, -0.11351261959360338383, 0.11740293395610479354, - -0.45897318088126942692e-01, - -0.63599580250627174571e-01, + -0.45897318088126942692e-1, + -0.63599580250627174571e-1, 0.19090912128668593994, -0.26706684210152614734, 0.27859452731728562291, -0.19943125056925442573, - 0.77266315991487477532e-01, - 0.60545680034683774240e-01, + 0.77266315991487477532e-1, + 0.6054568003468377424e-1, -0.14342488367825673157, 0.16127550285243066885, - -0.93312105732308303629e-01, - -0.96253246441820039525e-02, + -0.93312105732308303629e-1, + -0.96253246441820039525e-2, 0.12193843596290969422, -0.17973425372965101676, 0.18155718487025940266, -0.11258708709802753289, - 0.22930118271889850246e-01, - 0.70436591748659821421e-01, + 0.22930118271889850246e-1, + 0.70436591748659821421e-1, -0.11750459139900309991, 0.13027250476138635404, -0.10056990299140319833, - 0.74164456797561492674e-01, - -0.52973919469888788858e-01, - 0.65957291846183194184e-01, - -0.82289650620158277805e-01, - 0.99413777314052612089e-01, - -0.76808671130268652005e-01, - 0.20713821153796257296e-01, - 0.63071103778645928872e-01, + 0.74164456797561492674e-1, + -0.52973919469888788858e-1, + 0.65957291846183194184e-1, + -0.82289650620158277805e-1, + 0.99413777314052612089e-1, + -0.76808671130268652005e-1, + 0.20713821153796257296e-1, + 0.63071103778645928872e-1, -0.16447576328224117193, 0.18883459084273304662, -0.28016003680692441735, - 0.84936861167813598739e-01, + 0.84936861167813598739e-1, -0.31788130709936690543, -0.25841139270366098035, -0.50718752526160504335, -0.70018643111907752363, -0.85875722699579415398, - -0.10207386828825393277e+01, + -0.10207386828825393277e+1, -0.83058131504648546883, -0.79673954428222959478, - 0.27669148393228332888e-01, - 0.95803698494737118962e-01, + 0.27669148393228332888e-1, + 0.95803698494737118962e-1, 0.86360321685940988345, 0.61013615025673029191, 0.23164537739171908726, - -0.44813146124037681051e-01, + -0.44813146124037681051e-1, -0.87422176046375899006, -0.30472436395423607713, -0.13396361890046887266, - 0.43195845811932187530, + 0.4319584581193218753, 0.70326245872287918015, - -0.71676483767172574635e-01, + -0.71676483767172574635e-1, -0.30655728455552555545, - -0.49657529365427682810, - -0.18916187056776001540, + -0.4965752936542768281, + -0.1891618705677600154, 0.64815562781609992182, 0.25114764292754576669, - -0.38611665952882935626e-01, + -0.38611665952882935626e-1, -0.43356690901280375838, -0.37851761620895668647, - 0.44793679839428984790, + 0.4479367983942898479, 0.38204989328557231731, -0.10793505495557206841, -0.29451511291605048104, @@ -25561,7 +25563,7 @@ function ESERK4ConstantCache(zprev) 0.34205162000207584017, -0.26880845620103194227, -0.28479524990193749723, - -0.80247000831333736848e-01, + -0.80247000831333736848e-1, 0.43491732541127470224, 0.16457501328238119398, -0.45104791784164799395, @@ -25569,33 +25571,33 @@ function ESERK4ConstantCache(zprev) 0.31867281564081378908, 0.20936185006201787906, -0.18155796048684103017, - -0.34313745844294202270, + -0.3431374584429420227, 0.19364931259635551064, 0.35267259449416632489, -0.15374301481475752262, -0.44989490629165440616, 0.38598336561093338215, - 0.36157101420891603338e-01, - 0.98564512936219553230e-01, + 0.36157101420891603338e-1, + 0.9856451293621955323e-1, -0.42483794275112962691, - 0.88014526119069250165e-01, + 0.88014526119069250165e-1, 0.50370490854927385538, -0.40563335502174013847, -0.13644075786466983158, - 0.21214968984990406620, + 0.2121496898499040662, 0.10901740867918467692, - -0.58048919593269340811e-01, - -0.31736072821247746090, + -0.58048919593269340811e-1, + -0.3173607282124774609, 0.25398888315104611868, 0.29085138460100495861, -0.51103712063684436639, 0.12597231044010467893, 0.18009407665925378228, - 0.62235714411318185380e-01, + 0.6223571441131818538e-1, -0.37768758954778663961, 0.22711086795126081417, 0.10045887765804437097, - -0.47538482087461579606e-01, + -0.47538482087461579606e-1, -0.23562019161999747663, 0.15254560631342156674, 0.32175648868891981724, @@ -25603,261 +25605,261 @@ function ESERK4ConstantCache(zprev) 0.19735667602223805339, 0.26353688993965967979, -0.27907542059986156779, - -0.17714484425746027801e-01, + -0.17714484425746027801e-1, 0.10884961287027464238, - 0.92560968719506100943e-01, + 0.92560968719506100943e-1, -0.17224541613502419857, - -0.72668102827492336848e-01, + -0.72668102827492336848e-1, 0.28798433678069496056, -0.10073339929344250765, -0.28732339152172170493, 0.34989757294837287027, - 0.33413070058873305113e-01, + 0.33413070058873305113e-1, -0.40234938774675432782, - 0.33021774341212101200, - 0.38521250977061417820e-01, + 0.330217743412121012, + 0.3852125097706141782e-1, -0.22713197586228259239, - 0.65121638690135180694e-01, + 0.65121638690135180694e-1, 0.14759888498296483417, - -0.10446817975602108730, - -0.97970786145592500538e-01, + -0.1044681797560210873, + -0.97970786145592500538e-1, 0.14906150125773218185, - 0.69425156829002613104e-02, - -0.89574436374385529858e-01, + 0.69425156829002613104e-2, + -0.89574436374385529858e-1, -0.10490813155165311377, 0.38015101506582760216, - -0.35688880780537540760, - -0.35614273612881067188e-01, + -0.3568888078053754076, + -0.35614273612881067188e-1, 0.43229062740123880282, -0.44004498329930141765, - 0.90067294872064496136e-01, + 0.90067294872064496136e-1, 0.20906015513607256739, -0.14319977719955753748, -0.17055626645957847054, 0.35542357331330437509, -0.21376602173972578114, - -0.79803654630249173940e-01, + -0.7980365463024917394e-1, 0.21835568385778744704, -0.11069777554678603138, - -0.61225173143788551300e-01, - 0.98116123206995170536e-01, - -0.10340173492504633676e-01, - -0.41515103983650256114e-01, - -0.15304004518905947249e-01, - 0.66571592441177399047e-01, - 0.30337248359638555734e-01, + -0.612251731437885513e-1, + 0.98116123206995170536e-1, + -0.10340173492504633676e-1, + -0.41515103983650256114e-1, + -0.15304004518905947249e-1, + 0.66571592441177399047e-1, + 0.30337248359638555734e-1, -0.23445953438625952159, 0.33261166590559265721, -0.17593441260598671749, -0.12879485951847211012, 0.30899275836302536602, -0.21285887427996105781, - -0.17570816694807249447e-01, - 0.88426467742137790373e-01, + -0.17570816694807249447e-1, + 0.88426467742137790373e-1, 0.13030862295447551147, -0.44691663768948852731, 0.52518228630664054446, -0.22307031850587885624, -0.24874598032779315915, - 0.51506296334349255250, + 0.5150629633434925525, -0.38777930729882381655, - 0.38476782814819768253e-01, + 0.38476782814819768253e-1, 0.17521114518652194936, - -0.55466147066579492286e-01, - -0.25203496429137067780, + -0.55466147066579492286e-1, + -0.2520349642913706778, 0.41005212664349871554, -0.22359181698972618868, -0.16608116964515640124, 0.41110975232375640553, -0.28320159515652915116, - -0.11171712416113813160, + -0.1117171241611381316, 0.43006254203143090553, - -0.40426034175576575080, - 0.81545803521711243689e-01, + -0.4042603417557657508, + 0.81545803521711243689e-1, 0.23038569575727194105, -0.25454948450459180531, 0.54489447803313795227, -0.38081484966866990804, - -0.41624481132171986530, + -0.4162448113217198653, 0.68469763300536312656, -0.15138190187511310625, -0.38611556460634405274, 0.38261696796705757517, 0.33127292105123989918, - -0.89411613283999014090, + -0.8941161328399901409, 0.79185261786124438999, - 0.53581747648228046643e-01, + 0.53581747648228046643e-1, -0.73364060607614756115, 0.79280165329282314968, -0.24674900105181393761, - -0.19558876287327223858e-01, + -0.19558876287327223858e-1, -0.24085318144983192123, 0.75123240194823925897, -0.55945945537893115862, -0.33540469189301369557, - 0.12639580728971953061e+01, - -0.10691264041219399328e+01, - -0.85100013728569900984e-01, - 0.11694903240920395682e+01, + 0.12639580728971953061e+1, + -0.10691264041219399328e+1, + -0.85100013728569900984e-1, + 0.11694903240920395682e+1, -0.85373108694965615939, -0.48842145062907993402, - 0.14545981592540937477e+01, + 0.14545981592540937477e+1, -0.60990603307683544099, - -0.13252087156623189035e+01, - 0.24465654040414834824e+01, - -0.11560129625053212621e+01, - -0.14811915810604532329e+01, - 0.30544009905112980974e+01, - -0.17865593747321624196e+01, - -0.10136688872159469454e+01, - 0.26516289220737307986e+01, - -0.14007437153558393028e+01, - -0.11538800805416096207e+01, - 0.22734588152165531305e+01, + -0.13252087156623189035e+1, + 0.24465654040414834824e+1, + -0.11560129625053212621e+1, + -0.14811915810604532329e+1, + 0.30544009905112980974e+1, + -0.17865593747321624196e+1, + -0.10136688872159469454e+1, + 0.26516289220737307986e+1, + -0.14007437153558393028e+1, + -0.11538800805416096207e+1, + 0.22734588152165531305e+1, -0.61173243266879318014, - -0.18400408628373234876e+01, - 0.24482211179050104022e+01, + -0.18400408628373234876e+1, + 0.24482211179050104022e+1, -0.42653081689167060553, - -0.19163791229608269084e+01, - 0.23677586227249078910e+01, + -0.19163791229608269084e+1, + 0.2367758622724907891e+1, -0.84550640587184711094, -0.35619887765258184675, - 0.47330222523905833565e-01, + 0.47330222523905833565e-1, 0.82837856832478784508, -0.22047082614838361958, - -0.15980835236163757340e+01, - 0.25288678942235480740e+01, + -0.1598083523616375734e+1, + 0.2528867894223548074e+1, -0.96022966236094453585, - -0.13808655620871197467e+01, - 0.17614067033940965512e+01, + -0.13808655620871197467e+1, + 0.17614067033940965512e+1, 0.43959783401618834908, - -0.22089426276351540324e+01, - 0.10316424318317305442e+01, - 0.21482159610235358471e+01, - -0.34344575480888432928e+01, - 0.12955296188780982547e+01, - 0.18866673137070659738e+01, - -0.24883576358115573335e+01, + -0.22089426276351540324e+1, + 0.10316424318317305442e+1, + 0.21482159610235358471e+1, + -0.34344575480888432928e+1, + 0.12955296188780982547e+1, + 0.18866673137070659738e+1, + -0.24883576358115573335e+1, 0.71336309751958115744, 0.47562936117278692416, 0.62806659660046548765, - -0.16376637610987694327e+01, + -0.16376637610987694327e+1, 0.21572647552902729506, - 0.24228687084884930059e+01, - -0.24853099442654844609e+01, - -0.36125675823495878580, - 0.24251581425164441264e+01, - -0.68326403845489536160, - -0.22687860856102672891e+01, - 0.22012451472947605069e+01, + 0.24228687084884930059e+1, + -0.24853099442654844609e+1, + -0.3612567582349587858, + 0.24251581425164441264e+1, + -0.6832640384548953616, + -0.22687860856102672891e+1, + 0.22012451472947605069e+1, 0.94693641599124100949, - -0.25637660870460123874e+01, + -0.25637660870460123874e+1, 0.72013801575771563268, - 0.13952731183825322070e+01, + 0.1395273118382532207e+1, -0.34177652254894813622, - -0.15340441533738562452e+01, + -0.15340441533738562452e+1, 0.35953092668259495346, - 0.28016771069207546674e+01, - -0.26626105550119447685e+01, - -0.13182292970720992376e+01, - 0.38474018554893247845e+01, - -0.16063734599877359521e+01, - -0.10993534877124777616e+01, - 0.47625773230401874381e-01, - 0.21003243110492930690e+01, + 0.28016771069207546674e+1, + -0.26626105550119447685e+1, + -0.13182292970720992376e+1, + 0.38474018554893247845e+1, + -0.16063734599877359521e+1, + -0.10993534877124777616e+1, + 0.47625773230401874381e-1, + 0.2100324311049293069e+1, -0.37844635423057199075, - -0.28302987674926289863e+01, - 0.19422177032230305560e+01, - 0.19248974080227065908e+01, - -0.19204160313396352322e+01, - -0.20293202026194556709e+01, - 0.31322333774099657688e+01, + -0.28302987674926289863e+1, + 0.1942217703223030556e+1, + 0.19248974080227065908e+1, + -0.19204160313396352322e+1, + -0.20293202026194556709e+1, + 0.31322333774099657688e+1, 0.32136711909435333734, - -0.14876527171600164579e+01, - -0.15718997106201713088e+01, - 0.22486167587912260224e+01, - 0.19025009514378015130e+01, - -0.32526171515194031159e+01, + -0.14876527171600164579e+1, + -0.15718997106201713088e+1, + 0.22486167587912260224e+1, + 0.1902500951437801513e+1, + -0.32526171515194031159e+1, -0.90689921877788870486, - 0.27630935851829834249e+01, - 0.11619736747246303121e+01, - -0.26515581898575786290e+01, + 0.27630935851829834249e+1, + 0.11619736747246303121e+1, + -0.2651558189857578629e+1, -0.94033002106497187711, - 0.12523698888524841255e+01, - 0.33490062196548042728e+01, - -0.29143882266830876127e+01, - -0.26878520269527634845e+01, - 0.29458593432494786235e+01, - 0.10867516533236136755e+01, + 0.12523698888524841255e+1, + 0.33490062196548042728e+1, + -0.29143882266830876127e+1, + -0.26878520269527634845e+1, + 0.29458593432494786235e+1, + 0.10867516533236136755e+1, 0.92998093012837912408, - -0.43403201156816759720e+01, - -0.15685731197921751190, - 0.43240888788484594940e+01, - 0.76662372893973517937e-02, - -0.14848882739490809612e+01, - -0.34017027085724049762e+01, - 0.15744085204884405993e+01, - 0.41074476529480792308e+01, + -0.4340320115681675972e+1, + -0.1568573119792175119, + 0.4324088878848459494e+1, + 0.76662372893973517937e-2, + -0.14848882739490809612e+1, + -0.34017027085724049762e+1, + 0.15744085204884405993e+1, + 0.41074476529480792308e+1, -0.22050639792508569537, - -0.30725189433092738867e+01, - -0.25725946015348730711e+01, - 0.18594562498528526273e+01, - 0.40008297149839524565e+01, + -0.30725189433092738867e+1, + -0.25725946015348730711e+1, + 0.18594562498528526273e+1, + 0.40008297149839524565e+1, 0.98352902053840762786, - -0.36214542187708036458e+01, - -0.33304230367307985361e+01, - 0.45105619752460479610, - 0.37115655679786287990e+01, - 0.40462853937454834607e+01, - -0.15240576824306075743e+01, - -0.40046701173960990161e+01, - -0.36671388582567727710e+01, + -0.36214542187708036458e+1, + -0.33304230367307985361e+1, + 0.4510561975246047961, + 0.3711565567978628799e+1, + 0.40462853937454834607e+1, + -0.15240576824306075743e+1, + -0.40046701173960990161e+1, + -0.3667138858256772771e+1, -0.26594755144016113402, - 0.48896721586992493158e+01, - 0.45113523086192959255e+01, - 0.19473913009859835643e+01, - -0.19191519930881000278e+01, - -0.61232729528934441987e+01, - -0.49703689687029868338e+01, - -0.24449943805692657683e+01, + 0.48896721586992493158e+1, + 0.45113523086192959255e+1, + 0.19473913009859835643e+1, + -0.19191519930881000278e+1, + -0.61232729528934441987e+1, + -0.49703689687029868338e+1, + -0.24449943805692657683e+1, 0.66668378964067498416, - 0.64339132019398119766e+01, - 0.61614725792347062594e+01, - 0.84860271122253898568e+01, - 0.72867809747126148778e+01, - 0.45163353813754163468e+01, - 0.53877272439795156345e+01, - 0.13609324133480364960e+01, - 0.20395294261900946964e+01, - 0.13071530281024195119e+01, + 0.64339132019398119766e+1, + 0.61614725792347062594e+1, + 0.84860271122253898568e+1, + 0.72867809747126148778e+1, + 0.45163353813754163468e+1, + 0.53877272439795156345e+1, + 0.1360932413348036496e+1, + 0.20395294261900946964e+1, + 0.13071530281024195119e+1, -0.71965768159542664595, - 0.16145476981118487281e+01, + 0.16145476981118487281e+1, -0.90509164569097211306, 0.23269124923670631011, 0.73123145776112052907, - -0.13087945788559385285e+01, - 0.13798996843427655534e+01, + -0.13087945788559385285e+1, + 0.13798996843427655534e+1, -0.89170928338031696381, - 0.87016185216848535022e-01, + 0.87016185216848535022e-1, 0.68695025733898884557, - -0.11065232588592988083e+01, - 0.10138549600957940111e+01, + -0.11065232588592988083e+1, + 0.10138549600957940111e+1, -0.47821552272480810641, -0.24778622390873286663, 0.84013123411868428914, - -0.10489187160005912780e+01, + -0.1048918716000591278e+1, 0.79639476445262691318, - -0.20548867513552426800, + -0.205488675135524268, -0.46626317528838617799, 0.93801851672414759964, - -0.10283978586432362956e+01, + -0.10283978586432362956e+1, 0.72225358916284010391, -0.17131624945646878322, - -0.38180914708968677340, - 0.70652333988100324280, + -0.3818091470896867734, + 0.7065233398810032428, -0.68270120575828519005, 0.34170498716125574656, - 0.15159085823708362550, + 0.1515908582370836255, -0.57637629589376515593, 0.74692032766488558604, -0.58962133811777672765, @@ -25867,7 +25869,7 @@ function ESERK4ConstantCache(zprev) 0.93483147254209419952, -0.78621496383056188595, 0.39827443749559049424, - 0.72699544049081285535e-01, + 0.72699544049081285535e-1, -0.44963646584016236929, 0.60271053378643313359, -0.49767679357560062892, @@ -25876,2382 +25878,2382 @@ function ESERK4ConstantCache(zprev) -0.39571250710132166439, 0.44859362543733638518, -0.29099969559182531365, - 0.39122376089420836109e+01, - -0.63839016757649114098e+01, - 0.26084924761046122121e+01, - 0.14482599735513326245e+01, - -0.48969657548752660858e+01, - 0.59539312386650582454e+01, - -0.50628328610162389722e+01, - 0.22620316954892256689e+01, + 0.39122376089420836109e+1, + -0.63839016757649114098e+1, + 0.26084924761046122121e+1, + 0.14482599735513326245e+1, + -0.48969657548752660858e+1, + 0.59539312386650582454e+1, + -0.50628328610162389722e+1, + 0.22620316954892256689e+1, 0.46680444279396421381, - -0.24724684643776058124e+01, - 0.23229497203241171732e+01, + -0.24724684643776058124e+1, + 0.23229497203241171732e+1, -0.81252861972662016044, - -0.18009595700852152333e+01, - 0.35418518222034185428e+01, - -0.40038066744716953593e+01, - 0.21631126193836252014e+01, + -0.18009595700852152333e+1, + 0.35418518222034185428e+1, + -0.40038066744716953593e+1, + 0.21631126193836252014e+1, 0.75486333687160567241, - -0.41866132876891617443e+01, - 0.60750730008398834414e+01, - -0.61634704319367248360e+01, - 0.37247046893657693722e+01, + -0.41866132876891617443e+1, + 0.60750730008398834414e+1, + -0.6163470431936724836e+1, + 0.37247046893657693722e+1, -0.28825554001047415387, - -0.34009812237111010091e+01, - 0.52930666715637340047e+01, - -0.52969326296313496982e+01, - 0.29028206432319079155e+01, + -0.34009812237111010091e+1, + 0.52930666715637340047e+1, + -0.52969326296313496982e+1, + 0.29028206432319079155e+1, 0.22463514873038376018, - -0.33782378195427940071e+01, - 0.47202123810591594122e+01, - -0.44490690882938048745e+01, - 0.22712033173381565021e+01, + -0.33782378195427940071e+1, + 0.47202123810591594122e+1, + -0.44490690882938048745e+1, + 0.22712033173381565021e+1, 0.14107803657457074209, - -0.23271773654246770136e+01, - 0.28764800720552345936e+01, - -0.24215911184497120878e+01, + -0.23271773654246770136e+1, + 0.28764800720552345936e+1, + -0.24215911184497120878e+1, 0.91220831089078302512, - 0.61203765081193184372e-01, + 0.61203765081193184372e-1, -0.44268980813207448044, -0.58907178362288703521, - 0.18747016883108174046e+01, - -0.31717990140995730997e+01, - 0.30717906581677221212e+01, - -0.17512745111191070357e+01, + 0.18747016883108174046e+1, + -0.31717990140995730997e+1, + 0.30717906581677221212e+1, + -0.17512745111191070357e+1, -0.56700209963417058656, - 0.34872760279995405064e+01, - -0.39363911517153948871e+01, - 0.65300751335021995914e+01, - -0.39542899458015041969e-01, - 0.74556853392429740524e+01, - 0.10695381469528578933e+02, - 0.14477706161173303556e+02, - 0.23137431076598172552e+02, - 0.27964620451228963560e+02, - 0.30990329866214359811e+02, - 0.29165522954907622477e+02, - 0.22460459444966943465e+02, - 0.20432472399182390888e+01, - -0.53849569007309039392e+01, - -0.26263929479792832211e+02, - -0.19851551100839785136e+02, - -0.79897766019038156671e+01, - 0.25970954657730773718e+01, - 0.26607718487762475945e+02, - 0.10986340019133347568e+02, - 0.33808609555256574630e+01, - -0.13275794417861993324e+02, - -0.22812326987611474038e+02, - 0.25569745769016480885e+01, - 0.94020601568419781557e+01, - 0.16546768456728610630e+02, - 0.51571615146298626087e+01, - -0.19721901263589732167e+02, - -0.90127253778757943081e+01, - 0.20155495160890226636e+01, - 0.13362714228228734115e+02, - 0.12386242570100144178e+02, - -0.14498410163449946708e+02, - -0.11999400490614981152e+02, - 0.30133041463392280512e+01, - 0.10146344464858048084e+02, - 0.10882702663526499620e+02, - -0.13535049499155508812e+02, - -0.11848337813235106708e+02, - 0.91604758021167747017e+01, - 0.90291870929121191836e+01, - 0.21645443826660697439e+01, - -0.13139999747196959845e+02, - -0.62211357164711875711e+01, - 0.15347948323353232780e+02, - 0.42040037369991418714e+01, - -0.97247763065674082128e+01, - -0.70212046366884912629e+01, - 0.61810717208571599457e+01, - 0.10307589538379726690e+02, - -0.50061590562678137672e+01, - -0.13104862631291609887e+02, - 0.73230486674346986220e+01, - 0.11604903934945529187e+02, - -0.94779973143422715509e+01, - -0.37762969128307828370e+01, - -0.10737591203797411943e+01, - 0.12212900537711671944e+02, - -0.21402688649777430463e+01, - -0.16224894867920799157e+02, - 0.12735885682600201818e+02, - 0.47320737668118919572e+01, - -0.71196282696932069456e+01, - -0.32291537699174597265e+01, - 0.15683493553020764200e+01, - 0.10676557656651789685e+02, - -0.91211945142992743030e+01, - -0.76479444441670638710e+01, - 0.13950119666366765259e+02, + 0.34872760279995405064e+1, + -0.39363911517153948871e+1, + 0.65300751335021995914e+1, + -0.39542899458015041969e-1, + 0.74556853392429740524e+1, + 0.10695381469528578933e+2, + 0.14477706161173303556e+2, + 0.23137431076598172552e+2, + 0.2796462045122896356e+2, + 0.30990329866214359811e+2, + 0.29165522954907622477e+2, + 0.22460459444966943465e+2, + 0.20432472399182390888e+1, + -0.53849569007309039392e+1, + -0.26263929479792832211e+2, + -0.19851551100839785136e+2, + -0.79897766019038156671e+1, + 0.25970954657730773718e+1, + 0.26607718487762475945e+2, + 0.10986340019133347568e+2, + 0.3380860955525657463e+1, + -0.13275794417861993324e+2, + -0.22812326987611474038e+2, + 0.25569745769016480885e+1, + 0.94020601568419781557e+1, + 0.1654676845672861063e+2, + 0.51571615146298626087e+1, + -0.19721901263589732167e+2, + -0.90127253778757943081e+1, + 0.20155495160890226636e+1, + 0.13362714228228734115e+2, + 0.12386242570100144178e+2, + -0.14498410163449946708e+2, + -0.11999400490614981152e+2, + 0.30133041463392280512e+1, + 0.10146344464858048084e+2, + 0.1088270266352649962e+2, + -0.13535049499155508812e+2, + -0.11848337813235106708e+2, + 0.91604758021167747017e+1, + 0.90291870929121191836e+1, + 0.21645443826660697439e+1, + -0.13139999747196959845e+2, + -0.62211357164711875711e+1, + 0.1534794832335323278e+2, + 0.42040037369991418714e+1, + -0.97247763065674082128e+1, + -0.70212046366884912629e+1, + 0.61810717208571599457e+1, + 0.1030758953837972669e+2, + -0.50061590562678137672e+1, + -0.13104862631291609887e+2, + 0.7323048667434698622e+1, + 0.11604903934945529187e+2, + -0.94779973143422715509e+1, + -0.3776296912830782837e+1, + -0.10737591203797411943e+1, + 0.12212900537711671944e+2, + -0.21402688649777430463e+1, + -0.16224894867920799157e+2, + 0.12735885682600201818e+2, + 0.47320737668118919572e+1, + -0.71196282696932069456e+1, + -0.32291537699174597265e+1, + 0.156834935530207642e+1, + 0.10676557656651789685e+2, + -0.9121194514299274303e+1, + -0.7647944444167063871e+1, + 0.13950119666366765259e+2, -0.96779116921682240005, - -0.92472418471574968635e+01, - 0.15580574285579364968e+01, - 0.88632151471451194880e+01, - -0.47189479988975042701e+01, - -0.48647438314624169564e+01, - 0.22104189420390421006e+01, - 0.77046545141791185074e+01, - -0.56642477501071581969e+01, - -0.92015753842391969641e+01, - 0.16440636755332256769e+02, - -0.54309929994430516942e+01, - -0.89685983926388885834e+01, - 0.91015882940209120733e+01, + -0.92472418471574968635e+1, + 0.15580574285579364968e+1, + 0.8863215147145119488e+1, + -0.47189479988975042701e+1, + -0.48647438314624169564e+1, + 0.22104189420390421006e+1, + 0.77046545141791185074e+1, + -0.56642477501071581969e+1, + -0.92015753842391969641e+1, + 0.16440636755332256769e+2, + -0.54309929994430516942e+1, + -0.89685983926388885834e+1, + 0.91015882940209120733e+1, 0.68104798017340106853, - -0.37535664507556387726e+01, - -0.26735123543135173030e+01, - 0.53119734762878652035e+01, - 0.23774024240578777167e+01, - -0.91110379618807950663e+01, - 0.29852169862337776252e+01, - 0.95314310212506168085e+01, - -0.11608189434834619291e+02, - -0.59233029555528782240, - 0.12328466367361865963e+02, - -0.99524652381736533613e+01, - -0.18895364587283260960e+01, - 0.79007879938602583181e+01, - -0.25863280596634083963e+01, - -0.44829711274413286404e+01, - 0.34893799282816440055e+01, - 0.25208473945504494829e+01, - -0.36874227296880897065e+01, - -0.16759180003056990405e+01, - 0.44967373399385728305e+01, - 0.18117342270204555010e+01, - -0.10988316613815657163e+02, - 0.10859169453015578455e+02, + -0.37535664507556387726e+1, + -0.2673512354313517303e+1, + 0.53119734762878652035e+1, + 0.23774024240578777167e+1, + -0.91110379618807950663e+1, + 0.29852169862337776252e+1, + 0.95314310212506168085e+1, + -0.11608189434834619291e+2, + -0.5923302955552878224, + 0.12328466367361865963e+2, + -0.99524652381736533613e+1, + -0.1889536458728326096e+1, + 0.79007879938602583181e+1, + -0.25863280596634083963e+1, + -0.44829711274413286404e+1, + 0.34893799282816440055e+1, + 0.25208473945504494829e+1, + -0.36874227296880897065e+1, + -0.16759180003056990405e+1, + 0.44967373399385728305e+1, + 0.1811734227020455501e+1, + -0.10988316613815657163e+2, + 0.10859169453015578455e+2, 0.92626922661544053295, - -0.12810074524857476774e+02, - 0.12342975059553694450e+02, + -0.12810074524857476774e+2, + 0.1234297505955369445e+2, -0.63458672697105844573, - -0.91756510200878302896e+01, - 0.70248258306156712294e+01, - 0.32935254106273963437e+01, - -0.96385301246562189448e+01, - 0.55847052494638989018e+01, - 0.33679533365400651235e+01, - -0.74547155973698560061e+01, - 0.37692304561270040253e+01, - 0.18925385302368435969e+01, - -0.32060519920887271539e+01, + -0.91756510200878302896e+1, + 0.70248258306156712294e+1, + 0.32935254106273963437e+1, + -0.96385301246562189448e+1, + 0.55847052494638989018e+1, + 0.33679533365400651235e+1, + -0.74547155973698560061e+1, + 0.37692304561270040253e+1, + 0.18925385302368435969e+1, + -0.32060519920887271539e+1, 0.55591333529837394511, 0.88586107533916658152, - 0.12019256733034104911e+01, - -0.31158601950857880425e+01, + 0.12019256733034104911e+1, + -0.31158601950857880425e+1, 0.20851680537150074635, - 0.63029180617402529307e+01, - -0.96752653125017484825e+01, - 0.51782709518948237815e+01, - 0.37989000664742000879e+01, - -0.86290450995059835293e+01, - 0.46019083668042979340e+01, - 0.35631652070763926154e+01, - -0.63004258324233113342e+01, + 0.63029180617402529307e+1, + -0.96752653125017484825e+1, + 0.51782709518948237815e+1, + 0.37989000664742000879e+1, + -0.86290450995059835293e+1, + 0.4601908366804297934e+1, + 0.35631652070763926154e+1, + -0.63004258324233113342e+1, -0.66619808502502886327, - 0.11240637688788481796e+02, - -0.14616600951378481810e+02, - 0.61202555467749961693e+01, - 0.76895485428877998757e+01, - -0.15007411438293445372e+02, - 0.99903783308899232196e+01, - 0.17532147234326227458e+01, - -0.87432232557278108942e+01, - 0.46966529219639268078e+01, - 0.56092807907533384082e+01, - -0.11231275530383578953e+02, - 0.57784265138475801038e+01, - 0.63426812598642925423e+01, - -0.14053671815141187906e+02, - 0.10032194349448630533e+02, - 0.24086146727001054302e+01, - -0.12386360566656229310e+02, - 0.11453469658441349566e+02, - -0.12072595983551908105e+01, - -0.84729998824245207345e+01, - 0.87517872806502445826e+01, - -0.83202468085215368632e+01, + 0.11240637688788481796e+2, + -0.1461660095137848181e+2, + 0.61202555467749961693e+1, + 0.76895485428877998757e+1, + -0.15007411438293445372e+2, + 0.99903783308899232196e+1, + 0.17532147234326227458e+1, + -0.87432232557278108942e+1, + 0.46966529219639268078e+1, + 0.56092807907533384082e+1, + -0.11231275530383578953e+2, + 0.57784265138475801038e+1, + 0.63426812598642925423e+1, + -0.14053671815141187906e+2, + 0.10032194349448630533e+2, + 0.24086146727001054302e+1, + -0.1238636056665622931e+2, + 0.11453469658441349566e+2, + -0.12072595983551908105e+1, + -0.84729998824245207345e+1, + 0.87517872806502445826e+1, + -0.83202468085215368632e+1, 0.71106139859329564601, - 0.11572029104373468655e+02, - -0.10568167799714670352e+02, - -0.38677194762925348748e+01, - 0.13506671809899946979e+02, - -0.89781703570017263871e+01, - -0.86858839887929253365e+01, - 0.19983571927547298941e+02, - -0.15334131108644912800e+02, - -0.33224507481126259734e+01, - 0.15772325474422327574e+02, - -0.13087301617457049119e+02, - -0.14288355449343286274e+01, - 0.76850340670733405801e+01, - 0.33531834053840359200, - -0.15304657507940222061e+02, - 0.15721473081712311171e+02, - 0.11317213656466147409e+01, - -0.22191326834359383469e+02, - 0.22868779268774073188e+02, - -0.29090402020193653065e+01, - -0.19280621178236053481e+02, - 0.16837750024703669993e+02, - 0.67380147066045124049e+01, - -0.26975541865574339084e+02, - 0.15617524834423775815e+02, - 0.17902482171630694552e+02, - -0.41047735167033877701e+02, - 0.23428079931612529663e+02, - 0.19505973223494368796e+02, - -0.47400962760985954958e+02, - 0.28293703070587085335e+02, - 0.17085059132364992962e+02, - -0.43716018931048395757e+02, - 0.21991923737004192674e+02, - 0.20941010084821641613e+02, - -0.38728713231971461539e+02, - 0.90949170986967811103e+01, - 0.32658450496234536331e+02, - -0.41716856236248986534e+02, - 0.63378734827698641752e+01, - 0.31694700372671746891e+02, - -0.34947868625036086598e+02, - 0.52712871012051554231e+01, - 0.14106173613772256203e+02, - -0.26903668818145631825e+01, - -0.19416283417688781299e+02, - 0.12049807627110540764e+02, - 0.21120468417538493355e+02, - -0.41030050193865655217e+02, - 0.15984354438405608434e+02, - 0.24906798233172029455e+02, - -0.32443160540214698528e+02, - -0.63277235568451306591e+01, - 0.39046332558497859111e+02, - -0.20824715048535544781e+02, - -0.32996011845084268543e+02, - 0.54827042634810702282e+02, - -0.18741849903423734247e+02, - -0.33008756849361667207e+02, - 0.37831198282281896184e+02, - -0.25291097852371415833e+01, - -0.17901074954983901222e+02, - -0.65459250201889549459e+01, - 0.30303643679541487188e+02, - -0.85335988452505588953e+01, - -0.38231014004410262430e+02, - 0.40982996919230743060e+02, - 0.82375138903893958542e+01, - -0.44723678112517738725e+02, - 0.14333466362122200266e+02, - 0.37420690651016236927e+02, - -0.36130469773724172455e+02, - -0.18474608830555691696e+02, - 0.44122026750365968439e+02, - -0.80494851768072184228e+01, - -0.30502902729386008218e+02, - 0.91116988896111195118e+01, - 0.28630714811964296018e+02, - -0.10599112873588486750e+02, - -0.46150292667170027983e+02, - 0.46893166739090709427e+02, - 0.19575674034955831360e+02, - -0.60552115833555731683e+02, - 0.18497325463890028630e+02, - 0.28415265575199658343e+02, - -0.53277080573302209032e+01, - -0.37746039512571599062e+02, - 0.95783381294218887803e+01, - 0.47457478743435643764e+02, - -0.31983251184332772254e+02, - -0.37434546002642484552e+02, - 0.38556911846788224807e+02, - 0.30057314680755194303e+02, - -0.47440484944484666130e+02, - -0.15576553232256765469e+02, - 0.34870172467415152084e+02, - 0.24061671856504375455e+02, - -0.40777152988459420158e+02, - -0.30505413163064684312e+02, - 0.53483775582412818039e+02, - 0.20824064641303596801e+02, - -0.53059032819177581075e+02, - -0.17961617844860445103e+02, - 0.43674280945068282733e+02, - 0.22947247448255364333e+02, - -0.29885109065801923833e+02, - -0.53824021695987212865e+02, - 0.49664630310279797243e+02, - 0.45595218430592694858e+02, - -0.44781839654979229692e+02, - -0.30914023107562609738e+02, - -0.59793744331650007240e+01, - 0.71429045508467453374e+02, - 0.36533480911838274174e+01, - -0.73330378697198824511e+02, - -0.75549141893060269837e+01, - 0.33970023805250320947e+02, - 0.56519161819086825460e+02, - -0.26941881286505140025e+02, - -0.72809499159923745992e+02, - 0.19140053231383558074e+01, - 0.56888423097574715825e+02, - 0.45702918947006992312e+02, - -0.33431211608185549267e+02, - -0.72306463183032690267e+02, - -0.16684020458772099715e+02, - 0.63739885196646902443e+02, - 0.60827869303682795987e+02, - -0.73539656682255261089e+01, - -0.69681106580097122105e+02, - -0.68433801707235588196e+02, - 0.22956707406964355300e+02, - 0.74977877591868477225e+02, - 0.65719779746196451242e+02, - 0.26069704949224816737e+01, - -0.84611402307368692277e+02, - -0.84138425884289077317e+02, - -0.33831572751227696472e+02, - 0.35134049632731148449e+02, - 0.10894210778405776807e+03, - 0.89649218182120833376e+02, - 0.46382356963779969306e+02, - -0.17213399372386934516e+02, - -0.10897244386471700750e+03, - -0.11709614644335221101e+03, - -0.14955065494378305857e+03, - -0.13007109717055678288e+03, - -0.86256802894541763749e+02, - -0.90200593103985482912e+02, - -0.30245734065890719222e+02, - -0.34413980827431373655e+02, - -0.21447095872110718773e+02, - 0.74649545054135213462e+01, - -0.22632969003751689741e+02, - 0.11813548135371782166e+02, - -0.37494042163111385157e+01, - -0.91558790358428829848e+01, - 0.16506532712006677599e+02, - -0.17316142743824077144e+02, - 0.10685692449902527201e+02, - 0.46105195505318816163e-01, - -0.10273296672275645136e+02, - 0.15683606369346959397e+02, - -0.14196242293845051208e+02, - 0.67663935344513665981e+01, - 0.32082236987533474526e+01, - -0.11377649476353688840e+02, - 0.14392706111216222453e+02, - -0.11205479622673813367e+02, - 0.34578666060892171430e+01, - 0.54101101365002968180e+01, - -0.11640354252645565225e+02, - 0.12805688503583976257e+02, - -0.86965912996752088304e+01, - 0.13393030845691247244e+01, - 0.60240743410078279041e+01, - -0.10302596255818162518e+02, - 0.98793675909540947799e+01, - -0.51570773454888030329e+01, - -0.16711451132630241734e+01, - 0.76578725144730395158e+01, - -0.10307908307859204200e+02, - 0.86113075505856588876e+01, - -0.33463036234554546233e+01, - -0.32852172995139246048e+01, - 0.86370299274339465967e+01, - -0.10661078704074114398e+02, - 0.87134667718294984695e+01, - -0.37110077017267926180e+01, - -0.22842359415513984189e+01, - 0.69502827266100313253e+01, - -0.86040838049470931281e+01, - 0.68408143895836026616e+01, - -0.26098825524766637862e+01, - -0.22134492276362824903e+01, - 0.56251114149309673351e+01, - -0.62886466257888349318e+01, - 0.40578049102491453581e+01, - -0.28052463202746281468e+02, - 0.43554787784448713239e+02, - -0.13698330567698464577e+02, - -0.16085088194961514318e+02, - 0.39770834932309846010e+02, - -0.43289792880645379114e+02, - 0.32111843879866178497e+02, - -0.69309976573165119618e+01, - -0.15040476428442570267e+02, - 0.29345969668443640188e+02, - -0.24504884153907738664e+02, - 0.86824678894263289664e+01, - 0.15674747162215126650e+02, - -0.31328802954144666870e+02, - 0.35642933936993948407e+02, - -0.20206055211967512975e+02, - -0.36362544205290361354e+01, - 0.31328624377755286190e+02, - -0.45368447357804043918e+02, - 0.44686503140638109244e+02, - -0.23516719050293133364e+02, - -0.42840363361768725170e+01, - 0.32870610269113015534e+02, - -0.45184981762943479566e+02, - 0.41994114513157541069e+02, - -0.19756976185786939482e+02, - -0.62877587775237859802e+01, - 0.30575702855410245462e+02, - -0.38010719265101883479e+02, - 0.32116828503569372799e+02, - -0.11533819815629062333e+02, - -0.81496719199733842487e+01, - 0.23309757762996152763e+02, - -0.22486931491700921981e+02, - 0.13033909950662518895e+02, - 0.41194297913237800657e+01, - -0.13838035942670533274e+02, - 0.15704398592497980758e+02, - -0.30543341204735461325e+01, - -0.12505408487630200298e+02, - 0.27771702324711988297e+02, - -0.29409604676593062322e+02, - 0.19018376486435162320e+02, + 0.11572029104373468655e+2, + -0.10568167799714670352e+2, + -0.38677194762925348748e+1, + 0.13506671809899946979e+2, + -0.89781703570017263871e+1, + -0.86858839887929253365e+1, + 0.19983571927547298941e+2, + -0.153341311086449128e+2, + -0.33224507481126259734e+1, + 0.15772325474422327574e+2, + -0.13087301617457049119e+2, + -0.14288355449343286274e+1, + 0.76850340670733405801e+1, + 0.335318340538403592, + -0.15304657507940222061e+2, + 0.15721473081712311171e+2, + 0.11317213656466147409e+1, + -0.22191326834359383469e+2, + 0.22868779268774073188e+2, + -0.29090402020193653065e+1, + -0.19280621178236053481e+2, + 0.16837750024703669993e+2, + 0.67380147066045124049e+1, + -0.26975541865574339084e+2, + 0.15617524834423775815e+2, + 0.17902482171630694552e+2, + -0.41047735167033877701e+2, + 0.23428079931612529663e+2, + 0.19505973223494368796e+2, + -0.47400962760985954958e+2, + 0.28293703070587085335e+2, + 0.17085059132364992962e+2, + -0.43716018931048395757e+2, + 0.21991923737004192674e+2, + 0.20941010084821641613e+2, + -0.38728713231971461539e+2, + 0.90949170986967811103e+1, + 0.32658450496234536331e+2, + -0.41716856236248986534e+2, + 0.63378734827698641752e+1, + 0.31694700372671746891e+2, + -0.34947868625036086598e+2, + 0.52712871012051554231e+1, + 0.14106173613772256203e+2, + -0.26903668818145631825e+1, + -0.19416283417688781299e+2, + 0.12049807627110540764e+2, + 0.21120468417538493355e+2, + -0.41030050193865655217e+2, + 0.15984354438405608434e+2, + 0.24906798233172029455e+2, + -0.32443160540214698528e+2, + -0.63277235568451306591e+1, + 0.39046332558497859111e+2, + -0.20824715048535544781e+2, + -0.32996011845084268543e+2, + 0.54827042634810702282e+2, + -0.18741849903423734247e+2, + -0.33008756849361667207e+2, + 0.37831198282281896184e+2, + -0.25291097852371415833e+1, + -0.17901074954983901222e+2, + -0.65459250201889549459e+1, + 0.30303643679541487188e+2, + -0.85335988452505588953e+1, + -0.3823101400441026243e+2, + 0.4098299691923074306e+2, + 0.82375138903893958542e+1, + -0.44723678112517738725e+2, + 0.14333466362122200266e+2, + 0.37420690651016236927e+2, + -0.36130469773724172455e+2, + -0.18474608830555691696e+2, + 0.44122026750365968439e+2, + -0.80494851768072184228e+1, + -0.30502902729386008218e+2, + 0.91116988896111195118e+1, + 0.28630714811964296018e+2, + -0.1059911287358848675e+2, + -0.46150292667170027983e+2, + 0.46893166739090709427e+2, + 0.1957567403495583136e+2, + -0.60552115833555731683e+2, + 0.1849732546389002863e+2, + 0.28415265575199658343e+2, + -0.53277080573302209032e+1, + -0.37746039512571599062e+2, + 0.95783381294218887803e+1, + 0.47457478743435643764e+2, + -0.31983251184332772254e+2, + -0.37434546002642484552e+2, + 0.38556911846788224807e+2, + 0.30057314680755194303e+2, + -0.4744048494448466613e+2, + -0.15576553232256765469e+2, + 0.34870172467415152084e+2, + 0.24061671856504375455e+2, + -0.40777152988459420158e+2, + -0.30505413163064684312e+2, + 0.53483775582412818039e+2, + 0.20824064641303596801e+2, + -0.53059032819177581075e+2, + -0.17961617844860445103e+2, + 0.43674280945068282733e+2, + 0.22947247448255364333e+2, + -0.29885109065801923833e+2, + -0.53824021695987212865e+2, + 0.49664630310279797243e+2, + 0.45595218430592694858e+2, + -0.44781839654979229692e+2, + -0.30914023107562609738e+2, + -0.5979374433165000724e+1, + 0.71429045508467453374e+2, + 0.36533480911838274174e+1, + -0.73330378697198824511e+2, + -0.75549141893060269837e+1, + 0.33970023805250320947e+2, + 0.5651916181908682546e+2, + -0.26941881286505140025e+2, + -0.72809499159923745992e+2, + 0.19140053231383558074e+1, + 0.56888423097574715825e+2, + 0.45702918947006992312e+2, + -0.33431211608185549267e+2, + -0.72306463183032690267e+2, + -0.16684020458772099715e+2, + 0.63739885196646902443e+2, + 0.60827869303682795987e+2, + -0.73539656682255261089e+1, + -0.69681106580097122105e+2, + -0.68433801707235588196e+2, + 0.229567074069643553e+2, + 0.74977877591868477225e+2, + 0.65719779746196451242e+2, + 0.26069704949224816737e+1, + -0.84611402307368692277e+2, + -0.84138425884289077317e+2, + -0.33831572751227696472e+2, + 0.35134049632731148449e+2, + 0.10894210778405776807e+3, + 0.89649218182120833376e+2, + 0.46382356963779969306e+2, + -0.17213399372386934516e+2, + -0.1089724438647170075e+3, + -0.11709614644335221101e+3, + -0.14955065494378305857e+3, + -0.13007109717055678288e+3, + -0.86256802894541763749e+2, + -0.90200593103985482912e+2, + -0.30245734065890719222e+2, + -0.34413980827431373655e+2, + -0.21447095872110718773e+2, + 0.74649545054135213462e+1, + -0.22632969003751689741e+2, + 0.11813548135371782166e+2, + -0.37494042163111385157e+1, + -0.91558790358428829848e+1, + 0.16506532712006677599e+2, + -0.17316142743824077144e+2, + 0.10685692449902527201e+2, + 0.46105195505318816163e-1, + -0.10273296672275645136e+2, + 0.15683606369346959397e+2, + -0.14196242293845051208e+2, + 0.67663935344513665981e+1, + 0.32082236987533474526e+1, + -0.1137764947635368884e+2, + 0.14392706111216222453e+2, + -0.11205479622673813367e+2, + 0.3457866606089217143e+1, + 0.5410110136500296818e+1, + -0.11640354252645565225e+2, + 0.12805688503583976257e+2, + -0.86965912996752088304e+1, + 0.13393030845691247244e+1, + 0.60240743410078279041e+1, + -0.10302596255818162518e+2, + 0.98793675909540947799e+1, + -0.51570773454888030329e+1, + -0.16711451132630241734e+1, + 0.76578725144730395158e+1, + -0.103079083078592042e+2, + 0.86113075505856588876e+1, + -0.33463036234554546233e+1, + -0.32852172995139246048e+1, + 0.86370299274339465967e+1, + -0.10661078704074114398e+2, + 0.87134667718294984695e+1, + -0.3711007701726792618e+1, + -0.22842359415513984189e+1, + 0.69502827266100313253e+1, + -0.86040838049470931281e+1, + 0.68408143895836026616e+1, + -0.26098825524766637862e+1, + -0.22134492276362824903e+1, + 0.56251114149309673351e+1, + -0.62886466257888349318e+1, + 0.40578049102491453581e+1, + -0.28052463202746281468e+2, + 0.43554787784448713239e+2, + -0.13698330567698464577e+2, + -0.16085088194961514318e+2, + 0.3977083493230984601e+2, + -0.43289792880645379114e+2, + 0.32111843879866178497e+2, + -0.69309976573165119618e+1, + -0.15040476428442570267e+2, + 0.29345969668443640188e+2, + -0.24504884153907738664e+2, + 0.86824678894263289664e+1, + 0.1567474716221512665e+2, + -0.3132880295414466687e+2, + 0.35642933936993948407e+2, + -0.20206055211967512975e+2, + -0.36362544205290361354e+1, + 0.3132862437775528619e+2, + -0.45368447357804043918e+2, + 0.44686503140638109244e+2, + -0.23516719050293133364e+2, + -0.4284036336176872517e+1, + 0.32870610269113015534e+2, + -0.45184981762943479566e+2, + 0.41994114513157541069e+2, + -0.19756976185786939482e+2, + -0.62877587775237859802e+1, + 0.30575702855410245462e+2, + -0.38010719265101883479e+2, + 0.32116828503569372799e+2, + -0.11533819815629062333e+2, + -0.81496719199733842487e+1, + 0.23309757762996152763e+2, + -0.22486931491700921981e+2, + 0.13033909950662518895e+2, + 0.41194297913237800657e+1, + -0.13838035942670533274e+2, + 0.15704398592497980758e+2, + -0.30543341204735461325e+1, + -0.12505408487630200298e+2, + 0.27771702324711988297e+2, + -0.29409604676593062322e+2, + 0.1901837648643516232e+2, 0.97085327384222130931, - -0.26305243131439997484e+02, - 0.28886184776643794692e+02, - -0.50199774449003434995e+02, - -0.10261421703972548158e+02, - -0.55271486911399662745e+02, - -0.10751634792186723644e+03, - -0.12190924303947426210e+03, - -0.21153999360817704201e+03, - -0.25480541558845385453e+03, - -0.26937692770735327485e+03, - -0.27684625612535074879e+03, - -0.18575049053683835609e+03, - -0.33481030473633744293e+02, - 0.59308018522098954861e+02, - 0.23162006738684650031e+03, - 0.17710751731300760525e+03, - 0.78478153138478404571e+02, - -0.32547636168230653197e+02, - -0.23038919545816764867e+03, - -0.10560997863302762312e+03, - -0.27204460533356641605e+02, - 0.11969858129245713485e+03, - 0.20281138248061344598e+03, - -0.19887905646143618554e+02, - -0.86785034959966523616e+02, - -0.14862757971956074243e+03, - -0.44782384040433754535e+02, - 0.17472436288020935535e+03, - 0.83840396205488445958e+02, - -0.19675294350278591082e+02, - -0.12050883388231096660e+03, - -0.10959015713641943535e+03, - 0.12782041809090169693e+03, - 0.11023656797371319271e+03, - -0.27801343414428142609e+02, - -0.92779265911132270617e+02, - -0.94491542684169104405e+02, - 0.11728099396307915470e+03, - 0.11094579465761253800e+03, - -0.85236352220612616293e+02, - -0.80759188185752577738e+02, - -0.17689756184260417626e+02, - 0.11500758345805034821e+03, - 0.59349922065111677227e+02, - -0.14013740711450310528e+03, - -0.38184506853205263610e+02, - 0.90428808012247500869e+02, - 0.58503647055704419699e+02, - -0.50682471332973676681e+02, - -0.96101521522010656895e+02, - 0.45169684264396721574e+02, - 0.12191505698488316511e+03, - -0.73738811688990423932e+02, - -0.94010281046436801944e+02, - 0.74276821799363901278e+02, - 0.43434910533952916012e+02, - 0.35601168725649188218e+01, - -0.10799520637964077707e+03, - 0.21266394411951615950e+02, - 0.14137984130020907969e+03, - -0.10919526470746700397e+03, - -0.46902617941919011457e+02, - 0.65956556037510011947e+02, - 0.30006329823958573400e+02, - -0.17190367636974585253e+02, - -0.92402429109802724838e+02, - 0.79717645580398396987e+02, - 0.68185492516649389927e+02, - -0.12088537637277316605e+03, - 0.94540214669850769491e-01, - 0.94661953392451366085e+02, - -0.26320469117423801464e+02, - -0.68874067894202013917e+02, - 0.35019827863766678888e+02, - 0.46503253277500675722e+02, - -0.17603862360275094545e+02, - -0.75858972989198250048e+02, - 0.60154163866500461211e+02, - 0.72949021117811525983e+02, - -0.13926606701049848880e+03, - 0.42712953122899818936e+02, - 0.83742494995854684703e+02, - -0.81941637216092104268e+02, - -0.83404758533391625264e+01, - 0.37182917906925922580e+02, - 0.20525072958687879066e+02, - -0.44910531450845503798e+02, - -0.23247335507044869729e+02, - 0.82776123700120749049e+02, - -0.26758603261018642172e+02, - -0.86516345758585472936e+02, - 0.10568199824089390404e+03, - 0.36535725715711859785e+01, - -0.10867974099726852444e+03, - 0.86586157308973625391e+02, - 0.20663898293996634692e+02, - -0.75098493740390182438e+02, - 0.26958817808511625458e+02, - 0.37859741520881755150e+02, - -0.31012820388193048871e+02, - -0.20299667231487294572e+02, - 0.27820931590660034516e+02, - 0.23016687826506448289e+02, - -0.49926773389242626422e+02, - -0.68158055909813244355e+01, - 0.91030625577472349619e+02, - -0.92937087022222570454e+02, - -0.91447115622984043171e+01, - 0.11195738583717289316e+03, - -0.10423801238110557676e+03, - -0.33733741855375356522e+01, - 0.92291566658261771749e+02, - -0.71973153818021884831e+02, - -0.23046010912258335424e+02, - 0.82889927762461766747e+02, - -0.49040334627485599128e+02, - -0.29547957037185145879e+02, - 0.65288687203826981431e+02, - -0.31970728778239838164e+02, - -0.18574913473526592611e+02, - 0.29952369351483191906e+02, - -0.61296548487523780935e+01, - -0.60009073241746344607e+01, - -0.14470963469293316450e+02, - 0.33901283941623340468e+02, - -0.98491533447541925739e+01, - -0.47461164226885635742e+02, - 0.78011677138788414254e+02, - -0.39609521191989458089e+02, - -0.37270898660645492839e+02, - 0.75489885355719820836e+02, - -0.33536080495882984565e+02, - -0.45015158320392195890e+02, - 0.73018673378956620468e+02, - -0.11210561238215305480e+02, - -0.85835173272793781507e+02, - 0.12059859471484804772e+03, - -0.50221410305062740065e+02, - -0.67406049889285156951e+02, - 0.12728838337088315313e+03, - -0.77913561299046563136e+02, - -0.29565970072361764664e+02, - 0.91703001357466348509e+02, - -0.52372144735655950853e+02, - -0.44567928265160794865e+02, - 0.99552062356527358133e+02, - -0.54025698866361359762e+02, - -0.53095891573166987598e+02, - 0.12240458959038436149e+03, - -0.87793489107633590152e+02, - -0.21541835079693459676e+02, - 0.10852548182912273944e+03, - -0.97996171552341095889e+02, - 0.49737282005334355617e+01, - 0.81375993062545859402e+02, - -0.81727384258160086006e+02, - 0.46572868983856913871e+02, - 0.31338424802133896918e+02, - -0.10355127342961034742e+03, - 0.66537898661299195169e+02, - 0.55593549404821239079e+02, - -0.12073053474349991632e+03, - 0.68624003274861451018e+02, - 0.72503822491824294616e+02, - -0.15180704974799309070e+03, - 0.10419083892299899219e+03, - 0.39250706413722873833e+02, - -0.12302749621314873707e+03, - 0.83915167967482133804e+02, - 0.39589001128643424465e+02, - -0.90792134291960437054e+02, - 0.20697100546833969048e+02, - 0.10977597980835837177e+03, - -0.13416749058514861304e+03, - 0.19889910666981602816e+02, - 0.14094814195011053926e+03, - -0.16488693780872318939e+03, - 0.33771082225098503216e+02, - 0.12979815869030528575e+03, - -0.13079884991487978141e+03, - -0.24707340254341580987e+02, - 0.17751269144277989653e+03, - -0.12579856726994096050e+03, - -0.86964111766582774976e+02, - 0.25377279305097320616e+03, - -0.16383407802430818379e+03, - -0.99407516419426244170e+02, - 0.28314959774617466337e+03, - -0.17464888099457161275e+03, - -0.10250148437627747455e+03, - 0.26627727339666563466e+03, - -0.12665709562320887471e+03, - -0.14305361660780937427e+03, - 0.24963641721409834417e+03, - -0.54833636479647502426e+02, - -0.20922187395079444627e+03, - 0.25807557327453594098e+03, - -0.26737691137666143248e+02, - -0.20464449192429194113e+03, - 0.19917720403435092180e+03, - 0.12993824158884295983e+02, - -0.13302109038247874651e+03, - 0.28765899173448154613e+02, - 0.14969789704701335609e+03, - -0.11769605333121126023e+03, - -0.10660820957509831430e+03, - 0.25582933573589218668e+03, - -0.10449055184817717645e+03, - -0.16348086614005211459e+03, - 0.21956940013480871698e+03, - 0.32589449252142280500e+02, - -0.25436235821599470341e+03, - 0.14880827412098327045e+03, - 0.19061847717291914250e+03, - -0.32708640647904974230e+03, - 0.96945606463201968950e+02, - 0.22095596760328157870e+03, - -0.22283455908216211583e+03, - -0.29623977445583385304e+02, - 0.16112377671138864343e+03, - 0.24591289103913744896e+02, - -0.21007690716559429234e+03, - 0.82110318130715569396e+02, - 0.22903841433541666106e+03, - -0.25885277033339053787e+03, - -0.56633299259352838817e+02, - 0.29561410239325306293e+03, - -0.98638233552811982463e+02, - -0.23744827243459562283e+03, - 0.22611462406724092489e+03, - 0.12967010736240220581e+03, - -0.28499098193465584927e+03, - 0.31607202047463985650e+02, - 0.22592283322744876273e+03, - -0.68863111216489613753e+02, - -0.20498652197032214417e+03, - 0.10204333014738827501e+03, - 0.27501050923616440969e+03, - -0.29692524994782723979e+03, - -0.11875640655426532533e+03, - 0.36766626371385751781e+03, - -0.77703354152819770206e+02, - -0.22659873325298269719e+03, - 0.52502560378516143658e+02, - 0.25520269545933896893e+03, - -0.78545222868689791085e+02, - -0.30251755837915044367e+03, - 0.20709198461440308847e+03, - 0.24989810427809828752e+03, - -0.25984098324103717914e+03, - -0.18688967321981041891e+03, - 0.29029370613724080386e+03, - 0.13576872812961451586e+03, - -0.25875395743338731336e+03, - -0.14958443596320572055e+03, - 0.27897786048111299806e+03, - 0.18449695178088305170e+03, - -0.33675351039333475001e+03, - -0.15069745935815657845e+03, - 0.35618083582361146000e+03, - 0.12031469638389613408e+03, - -0.28480606613152656337e+03, - -0.17270610163792500202e+03, - 0.23018002235880854300e+03, - 0.32781974209131016096e+03, - -0.31496161454286010439e+03, - -0.29423234754980023808e+03, - 0.26234398500626514306e+03, - 0.25775224871310075514e+03, - -0.90152053604022750477e+01, - -0.44733429893898130558e+03, - -0.24427082511369267337e+02, - 0.46335169258383598390e+03, - 0.88737093571331527642e+02, - -0.26179407902531539776e+03, - -0.35621870842534042367e+03, - 0.17704243559512269712e+03, - 0.47502035272249224818e+03, - 0.15018048698545127806e+01, - -0.38967519068033647045e+03, - -0.30069821883400391016e+03, - 0.22270455516626577719e+03, - 0.48335559075265211959e+03, - 0.10560335162217323557e+03, - -0.41606214645632809379e+03, - -0.41264938009838152766e+03, - 0.48682756214294066410e+02, - 0.47512582568161855079e+03, - 0.43794415252071729583e+03, - -0.13405956609688865910e+03, - -0.51146417506885433113e+03, - -0.43865047284423411611e+03, - -0.59421518809799156458e+01, - 0.54857925438203619706e+03, - 0.57156555238993325929e+03, - 0.22600568148187960560e+03, - -0.24570461171148156154e+03, - -0.71049945319254243259e+03, - -0.60750753623098353273e+03, - -0.31372386463504716403e+03, - 0.13560036767867478602e+03, - 0.69555666939557124806e+03, - 0.80954309466925519700e+03, - 0.98279754310952716878e+03, - 0.85945518458625588210e+03, - 0.60272244211060626640e+03, - 0.56436144994562744159e+03, - 0.23291619408625530241e+03, - 0.21672782418730398035e+03, - 0.13205909250419148293e+03, - -0.20202834494472021731e+02, - 0.11558873440265888632e+03, - -0.52896715431028120236e+02, - 0.19546451221537818554e+02, - 0.43958863626484550480e+02, - -0.77790255668401954381e+02, - 0.81497868117658512688e+02, - -0.49237430565300890350e+02, - -0.23034641609404458151e+01, - 0.51210489386628395891e+02, - -0.76760992391713585903e+02, - 0.69054282505703881156e+02, - -0.32774961420142510349e+02, - -0.15682479344634110419e+02, - 0.55353329851912036474e+02, - -0.70131083338232372171e+02, - 0.54973962605598153175e+02, - -0.17807253886182810021e+02, - -0.24807790065976632832e+02, - 0.54756459833438697160e+02, - -0.60340913974697791389e+02, - 0.40516227010514384688e+02, - -0.50212045884293958764e+01, - -0.30549144153951868219e+02, - 0.51280945020639791210e+02, - -0.49336752431180165956e+02, - 0.26564017944308261576e+02, - 0.65572529573273898862e+01, - -0.35898838954938348422e+02, - 0.49441725217753798916e+02, - -0.42259576934392903524e+02, - 0.17960730874425820502e+02, - 0.13021099886869388129e+02, - -0.38123727244134187231e+02, - 0.47617006448018003084e+02, - -0.38468421648618566167e+02, - 0.15065519264070323047e+02, - 0.12765426116753943120e+02, - -0.34013260935189244094e+02, - 0.40764470585404389169e+02, - -0.31256173741493771701e+02, - 0.10201991706967989515e+02, - 0.13282414809955280788e+02, - -0.29531809887421893279e+02, - 0.32157085142702847236e+02, - -0.20554611470716569244e+02, - 0.86826488708150563411e+02, - -0.12593115992828781202e+03, - 0.22761673657229668066e+02, - 0.72706500293012780389e+02, - -0.14325566869683376581e+03, - 0.14093480033306451560e+03, - -0.90778052130644198314e+02, - -0.38164580090392132838e+01, - 0.79308883858469670258e+02, - -0.12308514625401754472e+03, - 0.95588590283186263719e+02, - -0.30878438399759726707e+02, - -0.61633957086036311068e+02, - 0.11819482180509467639e+03, - -0.13219609203220679206e+03, - 0.74257313388267348842e+02, - 0.11215612909158977573e+02, - -0.10837829007818626792e+03, - 0.15358838868959148272e+03, - -0.14665345506412901955e+03, - 0.68058762443357736061e+02, - 0.28955117055978366380e+02, - -0.12463645481955715866e+03, - 0.15810167573607790814e+03, - -0.13707772943390133946e+03, - 0.51218240630122203072e+02, - 0.40578641817924776092e+02, - -0.11952910437557102341e+03, - 0.13242743563667096396e+03, - -0.97979760912704122688e+02, - 0.14873733010371793739e+02, - 0.55785280117055080495e+02, - -0.10170429841620428135e+03, - 0.82801079673369912371e+02, - -0.31976168191352137171e+02, - -0.43253157335946276874e+02, - 0.82882242632250523684e+02, - -0.85745773924066469363e+02, - 0.28695277092772428773e+02, - 0.40495267793141920265e+02, - -0.10668816993619647349e+03, - 0.11728904167439509365e+03, - -0.78760452951678388445e+02, - 0.19799395111723627760e+01, - 0.94373400260367176884e+02, - -0.10164818047730031481e+03, - 0.17747440791685079375e+03, - 0.59426435855597055991e+02, - 0.18503285721315722867e+03, - 0.43584696469450528866e+03, - 0.44366179517721781167e+03, - 0.81474231002188923867e+03, - 0.97773104825284690378e+03, - 0.10029219310305803674e+04, - 0.10899656376802072373e+04, - 0.66782638413313554793e+03, - 0.16268057027764680811e+03, - -0.24850301324513259260e+03, - -0.87702319589131764133e+03, - -0.66289123712541663735e+03, - -0.32348956825758102696e+03, - 0.15370898040728741307e+03, - 0.85083421721667900783e+03, - 0.41980073807014764498e+03, - 0.98457188068878338072e+02, - -0.46221545671009937450e+03, - -0.75923963766691861110e+03, - 0.60902295964683020202e+02, - 0.34164070998639823529e+03, - 0.56205441784050640308e+03, - 0.16762322547937719719e+03, - -0.65805672606279767933e+03, - -0.32763277845874239347e+03, - 0.79980283485862770476e+02, - 0.45948352569936656664e+03, - 0.41166712938076352657e+03, - -0.47803381981900491837e+03, - -0.42845064473799163807e+03, - 0.11055585343659492992e+03, - 0.35454873763045776514e+03, - 0.35331888501401579106e+03, - -0.43703926675626865972e+03, - -0.43189183055395858446e+03, - 0.32983837872769743171e+03, - 0.30868491437226094831e+03, - 0.60367155421187185027e+02, - -0.42775181504105819386e+03, - -0.23571379165905452169e+03, - 0.53835584004958809601e+03, - 0.14897219589397562345e+03, - -0.35646261792991583661e+03, - -0.20496490423604018360e+03, - 0.17397328054041233258e+03, - 0.38062816583847506990e+03, - -0.17715522155282693006e+03, - -0.47139832253105942073e+03, - 0.29913471356933547440e+03, - 0.33253107450780646559e+03, - -0.25612773058129124593e+03, - -0.18700308465123507062e+03, - -0.25318870308687806414e+01, - 0.41312860651668046330e+03, - -0.94294294347875592166e+02, - -0.51816359131766580504e+03, - 0.39458309351271248033e+03, - 0.19475343061501280317e+03, - -0.25758070428666667340e+03, - -0.11923217229589967303e+03, - 0.79629992491071362792e+02, - 0.33338169038455737336e+03, - -0.28677969296061786508e+03, - -0.26921861802527087093e+03, - 0.45878867434223724331e+03, - 0.13128806069215235297e+02, - -0.38325557976577721320e+03, - 0.12684575219750891506e+03, - 0.23810469540527137156e+03, - -0.11720050394923127612e+03, - -0.18163570598860761152e+03, - 0.58964030093632125329e+02, - 0.30748446350978650798e+03, - -0.25369240671207865034e+03, - -0.25279456993984646829e+03, - 0.50988444473398487844e+03, - -0.15007467190716573668e+03, - -0.32235639154345790303e+03, - 0.30704846393932922410e+03, - 0.42743164807206255773e+02, - -0.15519908184484251024e+03, - -0.65204358796607351678e+02, - 0.16080849025043468714e+03, - 0.95185641244812401851e+02, - -0.31856014211273969750e+03, - 0.10262754211234847901e+03, - 0.33041329011793510517e+03, - -0.40439817210836150707e+03, - -0.11116262251689686735e+02, - 0.40961508656085010216e+03, - -0.32319990854960735760e+03, - -0.87907263799305269458e+02, - 0.29719012938614002906e+03, - -0.11413251682398595221e+03, - -0.13490019477903092593e+03, - 0.11354996895146527436e+03, - 0.75022567301820672014e+02, - -0.95890634210411207050e+02, - -0.10478417921068398755e+03, - 0.21173402622406626961e+03, - 0.38212706172593193799e+01, - -0.32837675465038751099e+03, - 0.34312096884349597303e+03, - 0.35979660046052899247e+02, - -0.41768898934579721072e+03, - 0.38026078087932944527e+03, - 0.34046271346582685169e+02, - -0.37274493478248700740e+03, - 0.29119136701125268019e+03, - 0.77684720444163701814e+02, - -0.31339397636546721060e+03, - 0.19093013556764611849e+03, - 0.10474092371866234430e+03, - -0.24065632922839608909e+03, - 0.11651400946679771664e+03, - 0.71558685792288670768e+02, - -0.11065194057127165195e+03, - 0.17717340578742753365e+02, - 0.27311163799173165501e+02, - 0.55435716547126652642e+02, - -0.13690018530783237338e+03, - 0.53476400734979307572e+02, - 0.15825758709090621323e+03, - -0.27195091397156983248e+03, - 0.12832376588715263210e+03, - 0.15627256881445833869e+03, - -0.28917768909640039965e+03, - 0.11462575315437996437e+03, - 0.19826595619998539632e+03, - -0.31447004434329414835e+03, - 0.82091121798480770622e+02, - 0.29189374338656500640e+03, - -0.43532060510739393067e+03, - 0.18271608094369398145e+03, - 0.24857789591977868326e+03, - -0.46209801400176274910e+03, - 0.26457900187666643887e+03, - 0.14731330751722776995e+03, - -0.37932467478789681081e+03, - 0.21906243279486486131e+03, - 0.16370561623691168052e+03, - -0.38643999310833703476e+03, - 0.22302104402275008965e+03, - 0.18040423926383061826e+03, - -0.44584693400596000856e+03, - 0.32063343172630720801e+03, - 0.86105406751857060499e+02, - -0.40735325748041191218e+03, - 0.35952617276358517984e+03, - -0.18472273525661875304e+01, - -0.32525767996399650883e+03, - 0.32026526279418823151e+03, - -0.12534056710310960625e+03, - -0.19141480652044361932e+03, - 0.39716169583786000885e+03, - -0.20535607541912457918e+03, - -0.24460190747553937740e+03, - 0.45327333343830929380e+03, - -0.23675132640852757504e+03, - -0.26230911640138765506e+03, - 0.51726621189285810942e+03, - -0.32157431996398912588e+03, - -0.17961610939219357874e+03, - 0.44389232937886231412e+03, - -0.26333953007863851781e+03, - -0.19805209943318317301e+03, - 0.38817552516985250577e+03, - -0.12915482631963985227e+03, - -0.35751360195033254286e+03, - 0.48964439511236338376e+03, - -0.12765779644378200430e+03, - -0.42669720135725219734e+03, - 0.54745251505816702320e+03, - -0.13641117270284178176e+03, - -0.42049587057017583902e+03, - 0.46862733006925373047e+03, - 0.17448871892755093427e+02, - -0.54719405806381553248e+03, - 0.45089076763292018768e+03, - 0.18573373337836096653e+03, - -0.73869321668225472877e+03, - 0.52513264663468430626e+03, - 0.24255970993411378345e+03, - -0.81181488912484655884e+03, - 0.51545946597731517613e+03, - 0.29460236426573459312e+03, - -0.77757462261433840922e+03, - 0.35418006471075824493e+03, - 0.45110892733387959197e+03, - -0.75753896751973400114e+03, - 0.15642361269534416124e+03, - 0.63172612321131180124e+03, - -0.75086326666284969633e+03, - 0.31910939739665401760e+02, - 0.63969556514798932767e+03, - -0.55167796008284562959e+03, - -0.15534483427599920446e+03, - 0.51404000823218473215e+03, - -0.11974666058709574656e+03, - -0.51577925808909844818e+03, - 0.45531131587998834220e+03, - 0.25947885062519350186e+03, - -0.77016626385764334373e+03, - 0.33183323256271114587e+03, - 0.50276420359242479208e+03, - -0.69890464167056506994e+03, - -0.73157855012177634535e+02, - 0.77681567742377933428e+03, - -0.48541018560384173952e+03, - -0.52997464586461433100e+03, - 0.93211668121631657868e+03, - -0.23114303497068308957e+03, - -0.70291538113689750844e+03, - 0.63469064357948377619e+03, - 0.20071377071671528824e+03, - -0.60208025264511547903e+03, - -0.37703946103749892416e+02, - 0.68614020797230159587e+03, - -0.32283601950112313261e+03, - -0.65895478170367982784e+03, - 0.78686220814806017643e+03, - 0.16884908281670305996e+03, - -0.90760311554090901609e+03, - 0.30353622811248965263e+03, - 0.72753352590205554407e+03, - -0.68160571837327654521e+03, - -0.41911387329449576100e+03, - 0.87052975903000879043e+03, - -0.43936583598512804372e+02, - -0.76470793132670337400e+03, - 0.23262073167249101857e+03, - 0.68600925946636914432e+03, - -0.40759228744433363545e+03, - -0.77318792020423495615e+03, - 0.88417988333568791859e+03, - 0.35365110131105689106e+03, - -0.10757648504456783485e+04, - 0.14169172470329414182e+03, - 0.79193132244781418194e+03, - -0.19341366891209784740e+03, - -0.82400530041196361708e+03, - 0.29276506310937463695e+03, - 0.91348308281256072405e+03, - -0.64124080539733870410e+03, - -0.77207912082178995661e+03, - 0.80245655686673455875e+03, - 0.57922911370643305418e+03, - -0.87440785122692727782e+03, - -0.48111508791257148232e+03, - 0.85776289004300394936e+03, - 0.45772371236079140999e+03, - -0.90098152065854299053e+03, - -0.53574537913987717275e+03, - 0.10213780327099290162e+04, - 0.48275956644268666196e+03, - -0.11000248882259315906e+04, - -0.40602163844992048780e+03, - 0.90225923646839271441e+03, - 0.57596167897797670321e+03, - -0.79345427480654541341e+03, - -0.95136509989765090722e+03, - 0.94101887012313488867e+03, - 0.91345983703929289277e+03, - -0.74901194114946645186e+03, - -0.92447510756889437289e+03, - 0.13754330854355569613e+03, - 0.13439300310100047682e+04, - 0.70308865310008314964e+02, - -0.13899047444897721562e+04, - -0.37308437022644403669e+03, - 0.90543955420229849551e+03, - 0.10765318846777506678e+04, - -0.55937774508383040484e+03, - -0.14587801076805105822e+04, - -0.45599649303484788732e+02, - 0.12520293103703318138e+04, - 0.93749951773531574872e+03, - -0.70439713417951190877e+03, - -0.15168794005667853071e+04, - -0.32218356388683235991e+03, - 0.12872946474979125924e+04, - 0.13159209318936871114e+04, - -0.15627654986215804911e+03, - -0.15132513279823531320e+04, - -0.13387022203733381502e+04, - 0.38251598659057850682e+03, - 0.16281498323050886938e+04, - 0.13868403126844632425e+04, - -0.14299071786202377510e+02, - -0.16845765260435252912e+04, - -0.18195839927201855062e+04, - -0.71883516650987519370e+03, - 0.81122492578524440887e+03, - 0.21820370770906288271e+04, - 0.19445820196925033088e+04, - 0.98914582243873610423e+03, - -0.47362118394113730346e+03, - -0.21100734625666400461e+04, - -0.26175132544605698968e+04, - -0.30513659612599067259e+04, - -0.26835504768854862050e+04, - -0.19627970046157961406e+04, - -0.16810590613266376749e+04, - -0.81072285573981514517e+03, - -0.64933375743423607673e+03, - -0.38690688957468563558e+03, - -0.12150810370099801361e+02, - -0.27282198178082751383e+03, - 0.99447448795978544922e+02, - -0.46074121935829353447e+02, - -0.96888382349879577760e+02, - 0.16551225951239416645e+03, - -0.17390903956572353195e+03, - 0.10387183892329163371e+03, - 0.65837570897288140159e+01, - -0.11123665819208541450e+03, - 0.16550886794989187933e+03, - -0.14836448974074440343e+03, - 0.69989552446921777573e+02, - 0.34361100994948543530e+02, - -0.11964034084896613308e+03, - 0.15131641594193320088e+03, - -0.11859184983865078777e+03, - 0.38559585658200767000e+02, - 0.53185387355269931220e+02, - -0.11767029463455247651e+03, - 0.12973670982721131395e+03, - -0.87067966358246252412e+02, - 0.10560723345355411240e+02, - 0.66304053634266850281e+02, - -0.11141441946192925627e+03, - 0.10782469078102252524e+03, - -0.59316376411235950172e+02, - -0.11760591634219315083e+02, - 0.75196974905455206795e+02, - -0.10518984211560825770e+03, - 0.91073221359401614450e+02, - -0.40375691705893281380e+02, - -0.24764343571964385404e+02, - 0.77666348821651894241e+02, - -0.97653956472065175376e+02, - 0.78340034930060681972e+02, - -0.29116398469824936512e+02, - -0.29064709651101829024e+02, - 0.72821274885729650350e+02, - -0.85459761257063462381e+02, - 0.63497108467242320273e+02, - -0.17289132257131253567e+02, - -0.33441337452368799177e+02, - 0.67908245452425376243e+02, - -0.72462711133433771238e+02, - 0.45974445974810485893e+02, - -0.13306862771147527269e+03, - 0.17759495752669175772e+03, - -0.21414240013222398673e+01, - -0.14868786690195531719e+03, - 0.25162010939601947257e+03, - -0.22675121757685769808e+03, - 0.12595993453599838574e+03, - 0.43752362330817746283e+02, - -0.16906521146860046656e+03, - 0.23351078491620268096e+03, - -0.17069495905482978060e+03, - 0.47355794048044067779e+02, - 0.11944954275785163134e+03, - -0.21595997822033774582e+03, - 0.23557345735271883314e+03, - -0.12860544696484294036e+03, - -0.21532909854446600662e+02, - 0.18804877719904482092e+03, - -0.25878571211312578271e+03, - 0.23937711045059000980e+03, - -0.97823167852864983729e+02, - -0.67357795070823470951e+02, - 0.22362805296927791687e+03, - -0.26535008438565171218e+03, - 0.21390886087422063611e+03, - -0.55018910940064387205e+02, - -0.10193073588221578518e+03, - 0.22605607814208372019e+03, - -0.22608019198010478590e+03, - 0.14416351344042368510e+03, - 0.16410003973885668671e+02, - -0.14096724455182371116e+03, - 0.20920056656155171027e+03, - -0.15276396181960024023e+03, - 0.39140050416570836944e+02, - 0.11222882991638026340e+03, - -0.18799730962725374184e+03, - 0.18690553839387999346e+03, - -0.69923950109247229534e+02, - -0.69977055413195444089e+02, - 0.20081217755396511393e+03, - -0.22364192380745910782e+03, - 0.15123129902602730112e+03, - -0.62557807754451868476e+01, - -0.17290897830538133917e+03, - 0.18438312965680569278e+03, - -0.31624973604578974573e+03, - -0.12816326591247909050e+03, - -0.31081498444039948481e+03, - -0.83096065377355955661e+03, - -0.78657637701975181699e+03, - -0.15061995258063668643e+04, - -0.18003427148873311125e+04, - -0.18096273495311118040e+04, - -0.20429733589204070086e+04, - -0.11743447307726755753e+04, - -0.34090960449665277565e+03, - 0.48015791875617958340e+03, - 0.16074691568103062309e+04, - 0.11924001648902872148e+04, - 0.63227288842039990868e+03, - -0.32596011161993499172e+03, - -0.15225452062526044301e+04, - -0.79093376896812060295e+03, - -0.17884329474329689447e+03, - 0.86319433949933477379e+03, - 0.13658951925839271553e+04, - -0.84546890297614055498e+02, - -0.64602187148182656529e+03, - -0.10229809833932965830e+04, - -0.30218379365223762534e+03, - 0.11928349574160868087e+04, - 0.61644228999135350477e+03, - -0.15814928237209076656e+03, - -0.83904598150560525482e+03, - -0.74932217575757624672e+03, - 0.86533587046350044147e+03, - 0.79727789713424579077e+03, - -0.21006863540823772496e+03, - -0.64995680517239532037e+03, - -0.64048967344419031633e+03, - 0.78998733073851701647e+03, - 0.80207566233416832802e+03, - -0.60896748171359308799e+03, - -0.57039159306736439703e+03, - -0.97924559978843532804e+02, - 0.76725915791768670715e+03, - 0.44718896406792464404e+03, - -0.99368644877257122516e+03, - -0.27888501935751520477e+03, - 0.67225381683006537514e+03, - 0.34805049080253542115e+03, - -0.28945488575198771741e+03, - -0.72039035030859076869e+03, - 0.33320810552905629720e+03, - 0.87371931256858783854e+03, - -0.57444586222551686205e+03, - -0.57307310810400190348e+03, - 0.43186033875903274293e+03, - 0.37184907362104223694e+03, - -0.78870098901859968521e+01, - -0.76451969177036789915e+03, - 0.19755748436057425010e+03, - 0.91476973474006240394e+03, - -0.68741856833200199617e+03, - -0.38387776296500095441e+03, - 0.48284197263358612418e+03, - 0.22674182756565090813e+03, - -0.16998940554702721784e+03, - -0.57850193454007035143e+03, - 0.49396588062914810280e+03, - 0.51542977168540812727e+03, - -0.84678689230477971250e+03, - -0.36127654439697820976e+02, - 0.72923647235631938202e+03, - -0.26651345354707626711e+03, - -0.40404269718054854366e+03, - 0.19220621882182578588e+03, - 0.34043599558623282064e+03, - -0.98862121932882885744e+02, - -0.58673834114121075345e+03, - 0.49592463332100379603e+03, - 0.43236782814278262776e+03, - -0.91026026108291750916e+03, - 0.26187234789708537619e+03, - 0.59158182659854116991e+03, - -0.55245602286704809103e+03, - -0.95880644888197380737e+02, - 0.30430412722708894080e+03, - 0.10192627773843508976e+03, - -0.28209040613165512923e+03, - -0.18147109607342704862e+03, - 0.58619373465238970766e+03, - -0.18731901033229203790e+03, - -0.60768539625228595469e+03, - 0.74343522580969010960e+03, - 0.18160284719670944042e+02, - -0.74740115675056313194e+03, - 0.58623588800624781925e+03, - 0.17120049266865365212e+03, - -0.55829950864740101224e+03, - 0.22433381447318848245e+03, - 0.23377238627032934914e+03, - -0.19981297225303737264e+03, - -0.13752252377500136049e+03, - 0.16590134163339257611e+03, - 0.21115552135739494588e+03, - -0.41315015848724470970e+03, - 0.18923259958352968368e+02, - 0.58083766710324073301e+03, - -0.61743924821955306470e+03, - -0.65191649009342171439e+02, - 0.75277340503282357531e+03, - -0.67497978422763230810e+03, - -0.88419298324868350392e+02, - 0.70708004978496148851e+03, - -0.54982937384505510181e+03, - -0.13737384067296162016e+03, - 0.58067498089822015572e+03, - -0.36443639253191753369e+03, - -0.17440217805777106719e+03, - 0.42625622125082441016e+03, - -0.20625911092416643555e+03, - -0.12833576507874411732e+03, - 0.19045504835278887867e+03, - -0.14245402594844213340e+02, - -0.68190203764604916614e+02, - -0.90060816915507331260e+02, - 0.25114022539537236867e+03, - -0.11216116719062490859e+03, - -0.26351844589269768449e+03, - 0.46461548706204206383e+03, - -0.20160963474051681033e+03, - -0.31143573178641014465e+03, - 0.53943713766800692611e+03, - -0.20005539429617797964e+03, - -0.39222919477708768454e+03, - 0.61879517210219398748e+03, - -0.19773054983942162721e+03, - -0.49294813579219010080e+03, - 0.77012292287777813726e+03, - -0.32736154626846274596e+03, - -0.44135593593019922309e+03, - 0.81414018529934764956e+03, - -0.44081057547049101686e+03, - -0.31564146855406045233e+03, - 0.73236214483229082362e+03, - -0.42219294275716708853e+03, - -0.29958293711256271763e+03, - 0.72686932972239890205e+03, - -0.44069708286056521729e+03, - -0.29391823480101311361e+03, - 0.78480324310069056537e+03, - -0.56720372409704646088e+03, - -0.16217013147761616665e+03, - 0.73482591378332460863e+03, - -0.63507395080047433567e+03, - -0.25487469439255367121e+02, - 0.62169573378859342938e+03, - -0.60190552397761973680e+03, - 0.17514903309927311170e+03, - 0.43039685205176078853e+03, - -0.73650418747915944095e+03, - 0.33267535467709711838e+03, - 0.47422813831925111572e+03, - -0.81485189984639782779e+03, - 0.40196198936509694022e+03, - 0.46531869094431647227e+03, - -0.87541457003188725139e+03, - 0.49663921015881192034e+03, - 0.37467733775961738729e+03, - -0.79843326683502687047e+03, - 0.42995282975316570173e+03, - 0.41047702324804345153e+03, - -0.75875462340929357197e+03, - 0.29737005617906982025e+03, - 0.58037786207064607424e+03, - -0.86476649048101671724e+03, - 0.28310345141829276372e+03, - 0.66606291152954281642e+03, - -0.91610229090489031023e+03, - 0.25622994120254020345e+03, - 0.69440557909103642942e+03, - -0.83200433328875897132e+03, - 0.56539542004475165982e+02, - 0.85997796591029327828e+03, - -0.79784263461317596011e+03, - -0.17454628767416394908e+03, - 0.10953787750668175249e+04, - -0.84553373716799649173e+03, - -0.30128826783243670207e+03, - 0.11973165953970330975e+04, - -0.77766011191971222161e+03, - -0.44214158245005683057e+03, - 0.11765255855631073700e+04, - -0.52148183102449036141e+03, - -0.71120088541113989322e+03, - 0.11668069125516985878e+04, - -0.22520293951084642003e+03, - -0.97377311865705678429e+03, - 0.11124211216914836768e+04, - 0.31758554063853743799e+02, - -0.10343925762830247095e+04, - 0.79848946652045856354e+03, - 0.38976391093209326755e+03, - -0.94437462635942006273e+03, - 0.23107192230137837896e+03, - 0.87924853380436957195e+03, - -0.83138306423586993787e+03, - -0.32759503809800264662e+03, - 0.11998695944949063232e+04, - -0.54531439956054930462e+03, - -0.78458107728396851144e+03, - 0.11303209518228870820e+04, - 0.72797487870335800153e+02, - -0.12040199972899881686e+04, - 0.79025442489476915853e+03, - 0.76482708866144287185e+03, - -0.13694330492768763179e+04, - 0.27318720939499473843e+03, - 0.11394456880238697067e+04, - -0.93564579886982710377e+03, - -0.45420724524604855787e+03, - 0.10798277755844583226e+04, - 0.17241148585932936754e+02, - -0.11388212429024322319e+04, - 0.60507877449737372899e+03, - 0.97557251328287611614e+03, - -0.12297863219068387934e+04, - -0.24885671855988221068e+03, - 0.14133490177785470223e+04, - -0.46733824197750766416e+03, - -0.11469489897964615466e+04, - 0.10572272022308543455e+04, - 0.68324650649677357706e+03, - -0.13585865244902922768e+04, - -0.30580792160541849789e+01, - 0.12956620239176477298e+04, - -0.39346014048191324264e+03, - -0.11528808539167496292e+04, - 0.76714459598571522747e+03, - 0.11161304231824929047e+04, - -0.13484315356331294424e+04, - -0.54314187611198428840e+03, - 0.16216270428241202808e+04, - -0.10024312396269529302e+03, - -0.13602883186573926650e+04, - 0.33268466194953089143e+03, - 0.13618296884307515029e+04, - -0.54095267432600144275e+03, - -0.14055752011609183683e+04, - 0.10136202833094005200e+04, - 0.12096558114963895605e+04, - -0.12500052727603983840e+04, - -0.93639971953662029591e+03, - 0.13718778274980359129e+04, - 0.81922269388434051507e+03, - -0.14122807893464048448e+04, - -0.72882210579473121470e+03, - 0.14783475193753104122e+04, - 0.80311076670151851431e+03, - -0.15981401565717792437e+04, - -0.76475289463105514187e+03, - 0.17107334996758518173e+04, - 0.71040321727807042862e+03, - -0.14734148617955925147e+04, - -0.95163098507347513078e+03, - 0.13567223894989199380e+04, - 0.14147023204231668387e+04, - -0.14306079961544155594e+04, - -0.14619978470238872887e+04, - 0.11161281603100042048e+04, - 0.16135184549449686529e+04, - -0.35051648485523531917e+03, - -0.20776295357586614045e+04, - -0.10021050449181933573e+03, - 0.21380782380200794250e+04, - 0.71456858454271457504e+03, - -0.15475317487144848201e+04, - -0.16775451442292608135e+04, - 0.91013466513762318755e+03, - 0.22805802370536916897e+04, - 0.13096501622852582614e+03, - -0.20383799600321622165e+04, - -0.14954671878176056907e+04, - 0.11414593662808727004e+04, - 0.24144513148975920558e+04, - 0.51131875740898334470e+03, - -0.20388170568212294711e+04, - -0.21282682320163635268e+04, - 0.25601770203048687335e+03, - 0.24423915505439390472e+04, - 0.21000588366322685943e+04, - -0.57011045044504305679e+03, - -0.26229826780745884207e+04, - -0.22377722584090802229e+04, - 0.71730117334038595800e+02, - 0.26413999948504606436e+04, - 0.29398378675725052744e+04, - 0.11671494877025738788e+04, - -0.13577319141019650033e+04, - -0.34146966648499487746e+04, - -0.31664967917497001508e+04, - -0.15802894128139519125e+04, - 0.81686825887920201694e+03, - 0.32763811006920582258e+04, - 0.42866210643197418904e+04, - 0.48294035246019102487e+04, - 0.42742415396941805739e+04, - 0.32275882760460776808e+04, - 0.25698736684345540198e+04, - 0.13995158429578411869e+04, - 0.99770898722843105588e+03, - 0.58169240554190150760e+03, - 0.11914826499159882189e+03, - 0.31756166909541371979e+03, - -0.71624567447924448516e+02, - 0.54248264776093428452e+02, - 0.99910070206785420055e+02, - -0.16045559968464274903e+03, - 0.17046507514692538621e+03, - -0.10080407937732188373e+03, - -0.70308335114740554417e+01, - 0.10933477964354545975e+03, - -0.16208534085790469703e+03, - 0.14494805833711350829e+03, - -0.67969436930295970001e+02, - -0.34285533945503289033e+02, - 0.11768274048716060065e+03, - -0.14846115599185085898e+03, - 0.11607883083884486553e+03, - -0.37354918417297831468e+02, - -0.52813116115602177558e+02, - 0.11618112649819863691e+03, - -0.12807455855741790174e+03, - 0.86161351212353466167e+02, - -0.10902425247651491347e+02, - -0.64910871753022291841e+02, - 0.10974342359859525686e+03, - -0.10689473454403673713e+03, - 0.59902577107078414542e+02, - 0.94781736982862323515e+01, - -0.71778964453927954992e+02, - 0.10174172603774368895e+03, - -0.88861288376860045446e+02, - 0.40339139216560035095e+02, - 0.22350842061322836685e+02, - -0.73316873221069542410e+02, - 0.92486456066760126760e+02, - -0.73715105332344862177e+02, - 0.26188673744073334149e+02, - 0.29674729772980981579e+02, - -0.71171492766339994773e+02, - 0.82177425011815330436e+02, - -0.59514258694810557415e+02, - 0.13505007614806215699e+02, - 0.36415853160239493036e+02, - -0.69863225974050095601e+02, - 0.73519376688905637707e+02, - -0.46401574754630907194e+02, - 0.99577361047294928653e+02, - -0.12057220038256838279e+03, - -0.23696303100215551751e+02, - 0.13918738535549812241e+03, - -0.21147194825668694307e+03, - 0.17637021310917160122e+03, - -0.83356984418328437414e+02, - -0.61106944753469967679e+02, - 0.16047609421674553687e+03, - -0.20529439095504420720e+03, - 0.14197546311392227381e+03, - -0.31827569971838588714e+02, - -0.11060563491849129036e+03, - 0.18842910513734551614e+03, - -0.20009491680774019073e+03, - 0.10535697841418172516e+03, - 0.21412509420648312641e+02, - -0.15850047133115072029e+03, - 0.21130170244823739267e+03, - -0.18921241835049377755e+03, - 0.67110225915452772938e+02, - 0.68207379131267103389e+02, - -0.19096915064750174906e+03, - 0.21322724349846379255e+03, - -0.15892436270459373304e+03, - 0.18982378068670541893e+02, - 0.10999358384184732529e+03, - -0.20358534179047919110e+03, - 0.18654480566758022064e+03, - -0.10134342956095274246e+03, - -0.45115914306629598229e+02, - 0.15079819741656436349e+03, - -0.19960669950384854587e+03, - 0.13549963354715771402e+03, - -0.22499273904010756553e+02, - -0.11849900940324053522e+03, - 0.18625118805547808165e+03, - -0.18045875659438235061e+03, - 0.69573548572908151755e+02, - 0.61290573580898950468e+02, - -0.18122971860804250355e+03, - 0.20213470234150992155e+03, - -0.13601379936517682268e+03, - 0.47939115595891053090e+01, - 0.15479225437499846407e+03, - -0.16446951502268964873e+03, - 0.27482503076885399196e+03, - 0.12047490329379758123e+03, - 0.25522378560867130659e+03, - 0.74499583091344027252e+03, - 0.66877149380967136949e+03, - 0.13235793905456241646e+04, - 0.15751468925505323568e+04, - 0.15614607788168420939e+04, - 0.18110473502139839184e+04, - 0.99352211458640408637e+03, - 0.32353238359993474660e+03, - -0.43248505386697428321e+03, - -0.14059589887373813326e+04, - -0.10220360729193301950e+04, - -0.58069552902589543919e+03, - 0.31541056935628114388e+03, - 0.13041321544139318576e+04, - 0.70227832193604092481e+03, - 0.15884574880632362692e+03, - -0.76880063743868129222e+03, - -0.11696271024217228387e+04, - 0.51453708921873804627e+02, - 0.57958344865763558573e+03, - 0.88713520602934534054e+03, - 0.25901784379657857471e+03, - -0.10291527745733762913e+04, - -0.55214535950464960479e+03, - 0.14940093059535163889e+03, - 0.72687187514181016468e+03, - 0.65257469020275209459e+03, - -0.74904689393096055028e+03, - -0.70332843732242645274e+03, - 0.18852088445564268682e+03, - 0.56656645797147086796e+03, - 0.55495949126247967342e+03, - -0.68295315990894869174e+03, - -0.70561521880161831177e+03, - 0.53278020469629609579e+03, - 0.50255284997005287551e+03, - 0.75073211297043016543e+02, - -0.65661591140590883242e+03, - -0.40146869164767662141e+03, - 0.87200525303836354851e+03, - 0.24786524276607909201e+03, - -0.60066927855484004795e+03, - -0.28331728496244545568e+03, - 0.23102530131834191707e+03, - 0.64507794483995314749e+03, - -0.29674925595706935155e+03, - -0.76965862238485635771e+03, - 0.52043139479224078059e+03, - 0.47357517570030870502e+03, - -0.34983847400116297877e+03, - -0.34485444117662746066e+03, - 0.14793951821068446861e+02, - 0.67396333306651183648e+03, - -0.19219148550742099246e+03, - -0.77086766206451193284e+03, - 0.57204241724001894909e+03, - 0.35583522716321692769e+03, - -0.42979003959579563343e+03, - -0.20391703407421996985e+03, - 0.16677060903684972004e+03, - 0.47929118794173393781e+03, - -0.40546877644299985377e+03, - -0.46871996176281373891e+03, - 0.74630768396799680886e+03, - 0.37283270244862407594e+02, - -0.65325570186143579576e+03, - 0.25556450780463379147e+03, - 0.32971195446248833605e+03, - -0.15087105569976745301e+03, - -0.30400692196630723174e+03, - 0.81991358086064380473e+02, - 0.52568127026516401656e+03, - -0.45176709870580850748e+03, - -0.35814118097239867211e+03, - 0.77954209174619325040e+03, - -0.22109949100875618910e+03, - -0.51554452949615256330e+03, - 0.47449541406613411709e+03, - 0.95315272651079965271e+02, - -0.27787145597079614845e+03, - -0.78945630398512832926e+02, - 0.24008890753825858155e+03, - 0.16032414864489732054e+03, - -0.51049373983611081940e+03, - 0.16098407790204126400e+03, - 0.53260188741259844392e+03, - -0.65001463632778938972e+03, - -0.15638303412862189390e+02, - 0.65203012152408848578e+03, - -0.51003543576990381325e+03, - -0.15346403613485426831e+03, - 0.49394287082526932409e+03, - -0.20426431708326904868e+03, - -0.19572442803898329089e+03, - 0.16866359463007117370e+03, - 0.12093528385057864227e+03, - -0.13976577017994242169e+03, - -0.19492403653649910211e+03, - 0.37481555741640954693e+03, - -0.31205755824618254479e+02, - -0.49544400369123002292e+03, - 0.53363441960296847810e+03, - 0.54229054295204797143e+02, - -0.64684202426064234714e+03, - 0.57384570260748444070e+03, - 0.93634250593105491589e+02, - -0.63055110112622458018e+03, - 0.48669781630340918355e+03, - 0.12149944907769668134e+03, - -0.51646758752204664233e+03, - 0.33317344468622178510e+03, - 0.13583899208963245542e+03, - -0.35908837301301667821e+03, - 0.17436182154874325079e+03, - 0.10840938343453892401e+03, - -0.15398749794360449528e+03, - -0.54256263342567958574e+01, - 0.78220213275725726021e+02, - 0.64263265897616051348e+02, - -0.21357991631591048076e+03, - 0.10322327500426294478e+03, - 0.21427742464160203895e+03, - -0.38281087787359894037e+03, - 0.15168014128032461940e+03, - 0.29155191740991961069e+03, - -0.48078490648144605757e+03, - 0.17179071970532498881e+03, - 0.35787251225922335607e+03, - -0.56519482851026975823e+03, - 0.20165315023317887722e+03, - 0.40393544797183989203e+03, - -0.65490719723077404524e+03, - 0.28174057376460751811e+03, - 0.37480915905813105837e+03, - -0.68816207747609246326e+03, - 0.35554371652840455909e+03, - 0.30461475503182089142e+03, - -0.66151747264548805560e+03, - 0.37893723607863523739e+03, - 0.26504392339776705967e+03, - -0.65080004897276364773e+03, - 0.40958801974433868054e+03, - 0.22927791168965393354e+03, - -0.66214437458470649744e+03, - 0.48214127826914938169e+03, - 0.14163784715492212740e+03, - -0.62906109720589711287e+03, - 0.53318602214419934171e+03, - 0.46396520728070569817e+02, - -0.56338505431826388303e+03, - 0.53728030693498578785e+03, - -0.12250308812245468459e+03, - -0.42269691927700665701e+03, - 0.65191507216500042432e+03, - -0.27161726020452022112e+03, - -0.42116756816539304964e+03, - 0.69473388678218236691e+03, - -0.32734659056847226566e+03, - -0.39869798239208944324e+03, - 0.71984618710771053429e+03, - -0.37479893741932022522e+03, - -0.35974866410896402158e+03, - 0.69453870619667532083e+03, - -0.35011842935822244272e+03, - -0.38231947184140170748e+03, - 0.68870632970686335739e+03, - -0.29640169665406267541e+03, - -0.45943700255245875042e+03, - 0.73137628937485453662e+03, - -0.27181664960886416793e+03, - -0.51625589147808636881e+03, - 0.74942109607917302583e+03, - -0.22644750246774250968e+03, - -0.56334914471273964409e+03, - 0.71232074047753769719e+03, - -0.10212735281837721857e+03, - -0.66743099466797912100e+03, - 0.68154680691141277293e+03, - 0.52176483814967596686e+02, - -0.80092078198008027812e+03, - 0.66551371278291264844e+03, - 0.18230089761269019277e+03, - -0.87605819321659055277e+03, - 0.57884177022732046680e+03, - 0.33414141238119691479e+03, - -0.88927829668123354168e+03, - 0.38893988523559892201e+03, - 0.54572019075342893757e+03, - -0.88372401139328519548e+03, - 0.15855986643338769682e+03, - 0.74088693743433657346e+03, - -0.81188365403041564150e+03, - -0.88236765208549499562e+02, - 0.83151096765320698978e+03, - -0.58190634819775857522e+03, - -0.39429818820429971993e+03, - 0.82155282967972073038e+03, - -0.20837301115936642759e+03, - -0.72516206791546051136e+03, - 0.71724991858090118058e+03, - 0.20751371484622120533e+03, - -0.93145049297158914214e+03, - 0.44533681140421867894e+03, - 0.60145077481587031798e+03, - -0.89830210005827586883e+03, - -0.25162969997661157606e+02, - 0.91771309653066862211e+03, - -0.62558865276341509798e+03, - -0.55312155879409851877e+03, - 0.10022236087254963195e+04, - -0.15321191791726647580e+03, - -0.90775319060385697867e+03, - 0.68641699495494322036e+03, - 0.44238035407359279816e+03, - -0.92352049978071136138e+03, - 0.10476033858029746071e+02, - 0.92808437095834096908e+03, - -0.53757214593710341433e+03, - -0.71617451720769088297e+03, - 0.95107027465250166642e+03, - 0.17923296214955593086e+03, - -0.10847670077641776061e+04, - 0.35347677524785797232e+03, - 0.89386111773857112439e+03, - -0.81128985102894114334e+03, - -0.54714023036781929932e+03, - 0.10484107790264981759e+04, - 0.50546328342499577957e+02, - -0.10688208694606830704e+04, - 0.32511356940324446896e+03, - 0.94310726483271912457e+03, - -0.67819880941137500940e+03, - -0.80185256756408034562e+03, - 0.10207594156141842632e+04, - 0.41165990332526052953e+03, - -0.12121858429620715469e+04, - -0.20442297904798563124e+01, - 0.11283740773639831332e+04, - -0.27055499073379229458e+03, - -0.11094694299621166920e+04, - 0.48133935721883500491e+03, - 0.10653438987099088990e+04, - -0.78871500684136651671e+03, - -0.93395887554771672967e+03, - 0.95660437681984512892e+03, - 0.75278032010271124363e+03, - -0.10731236621555306101e+04, - -0.66785543454704588839e+03, - 0.11301833662568847103e+04, - 0.57799975025486844515e+03, - -0.11914382150631683999e+04, - -0.59893731438542010892e+03, - 0.12414003017502873263e+04, - 0.58800828178371921240e+03, - -0.13039574270939756389e+04, - -0.61113731588541975270e+03, - 0.11898145264427955681e+04, - 0.76395455414357218160e+03, - -0.11252462571617788853e+04, - -0.10405798606418827603e+04, - 0.10710624465121197773e+04, - 0.11608037298528251995e+04, - -0.83420593592595650989e+03, - -0.13517026605328976530e+04, - 0.35600937485809083682e+03, - 0.15925069471430203976e+04, - 0.70315660352926542487e+02, - -0.16303956512538800325e+04, - -0.63562950828294526673e+03, - 0.12777221442301436127e+04, - 0.12994636326938641560e+04, - -0.73381252152615593332e+03, - -0.17566838850082142471e+04, - -0.14354165551070772722e+03, - 0.16281313013507469805e+04, - 0.11790982380300376917e+04, - -0.91462709690812312147e+03, - -0.18875256135665083548e+04, - -0.40606929205178869324e+03, - 0.15969971544463583086e+04, - 0.16895913324891409957e+04, - -0.20574207104522602663e+03, - -0.19360548541970385941e+04, - -0.16308997493416577527e+04, - 0.42647931399566749633e+03, - 0.20731893641902261152e+04, - 0.17802252229016498859e+04, - -0.92189558389152509221e+02, - -0.20439488546397988102e+04, - -0.23344888245546330836e+04, - -0.93337403763479778718e+03, - 0.11132076051220124100e+04, - 0.26351836260183486047e+04, - 0.25355264994034841948e+04, - 0.12403813799499639572e+04, - -0.68107638136702814791e+03, - -0.25154090800172962190e+04, - -0.34438872368648148949e+04, - -0.37679618484298507610e+04, - -0.33570579591989189794e+04, - -0.25984879256978533704e+04, - -0.19470787663254147901e+04, - -0.11693402854313444550e+04, - -0.75932641021067286147e+03, - -0.43347475433111753773e+03, - -0.15962714584429667752e+03, - -0.17200847137847276258e+03, - -0.70150092849373946180, - -0.30781471168395167837e+02, - -0.41329139114290867951e+02, - 0.56638219974563924097e+02, - -0.62657099302877206526e+02, - 0.36315234828463665906e+02, - 0.26128241684243542764e+01, - -0.39883811718291575232e+02, - 0.58955475603642319982e+02, - -0.52632404206741334463e+02, - 0.24555161270254050265e+02, - 0.12670440361228266113e+02, - -0.42972831521531965393e+02, - 0.54079437941900252440e+02, - -0.42162994523372276490e+02, - 0.13375512615203861699e+02, - 0.19563898505187999888e+02, - -0.42703870178302771876e+02, - 0.47049580149835485088e+02, - -0.31731740513029667028e+02, - 0.42015918419516085081e+01, - 0.23599429895579049798e+02, - -0.40158906524468946486e+02, - 0.39362050401208065864e+02, - -0.22442687975499282516e+02, - -0.27204080494758819952e+01, - 0.25436112563820707066e+02, - -0.36512379855198794587e+02, - 0.32108171339068348971e+02, - -0.14793402442481324854e+02, - -0.76755246208862422108e+01, - 0.25945098244032163137e+02, - -0.32761934651826912557e+02, - 0.25925974200407829073e+02, - -0.87814629209402710330e+01, - -0.11263417190064432205e+02, - 0.25997868199038776993e+02, - -0.29615323093698656010e+02, - 0.21027116891362730655e+02, - -0.40453831187635262978e+01, - -0.14217222851618835477e+02, - 0.26328669428256336715e+02, - -0.27452397185907926769e+02, - 0.17265378829205982214e+02, - -0.29059013370174625379e+02, - 0.31464034633562249610e+02, - 0.14343750682335683067e+02, - -0.48580017314083512758e+02, - 0.68066762069219095110e+02, - -0.52914730424135825615e+02, - 0.20771973515205818472e+02, - 0.26158883405508646547e+02, - -0.56364076038831406379e+02, - 0.68097619547542237228e+02, - -0.44699161564224617393e+02, - 0.74594536221226768191e+01, - 0.38918940110728961201e+02, - -0.62831979792228729309e+02, - 0.65000400394734938914e+02, - -0.32897277365637691560e+02, - -0.82136345504446310883e+01, - 0.51580290954888539545e+02, - -0.66589119351524104218e+02, - 0.57671979634246042679e+02, - -0.17257878243651362027e+02, - -0.25448588239752616857e+02, - 0.62589836231802614464e+02, - -0.66019365948984230386e+02, - 0.45219090322183760122e+02, - 0.18862774572285172514e+01, - -0.42740889168002084375e+02, - 0.69909038208213189591e+02, - -0.59510942022334788248e+02, - 0.27294313258740139361e+02, - 0.23332216312593349272e+02, - -0.57797626214740731143e+02, - 0.71202545651907598767e+02, - -0.45851473863796030628e+02, - 0.45170825184373413208e+01, - 0.44775003296432721811e+02, - -0.67642351517280417283e+02, - 0.64254554298846372262e+02, - -0.24811886576606479338e+02, - -0.21172357715531926914e+02, - 0.62573990063553615926e+02, - -0.69534893322900927615e+02, - 0.46348758686074319257e+02, + -0.26305243131439997484e+2, + 0.28886184776643794692e+2, + -0.50199774449003434995e+2, + -0.10261421703972548158e+2, + -0.55271486911399662745e+2, + -0.10751634792186723644e+3, + -0.1219092430394742621e+3, + -0.21153999360817704201e+3, + -0.25480541558845385453e+3, + -0.26937692770735327485e+3, + -0.27684625612535074879e+3, + -0.18575049053683835609e+3, + -0.33481030473633744293e+2, + 0.59308018522098954861e+2, + 0.23162006738684650031e+3, + 0.17710751731300760525e+3, + 0.78478153138478404571e+2, + -0.32547636168230653197e+2, + -0.23038919545816764867e+3, + -0.10560997863302762312e+3, + -0.27204460533356641605e+2, + 0.11969858129245713485e+3, + 0.20281138248061344598e+3, + -0.19887905646143618554e+2, + -0.86785034959966523616e+2, + -0.14862757971956074243e+3, + -0.44782384040433754535e+2, + 0.17472436288020935535e+3, + 0.83840396205488445958e+2, + -0.19675294350278591082e+2, + -0.1205088338823109666e+3, + -0.10959015713641943535e+3, + 0.12782041809090169693e+3, + 0.11023656797371319271e+3, + -0.27801343414428142609e+2, + -0.92779265911132270617e+2, + -0.94491542684169104405e+2, + 0.1172809939630791547e+3, + 0.110945794657612538e+3, + -0.85236352220612616293e+2, + -0.80759188185752577738e+2, + -0.17689756184260417626e+2, + 0.11500758345805034821e+3, + 0.59349922065111677227e+2, + -0.14013740711450310528e+3, + -0.3818450685320526361e+2, + 0.90428808012247500869e+2, + 0.58503647055704419699e+2, + -0.50682471332973676681e+2, + -0.96101521522010656895e+2, + 0.45169684264396721574e+2, + 0.12191505698488316511e+3, + -0.73738811688990423932e+2, + -0.94010281046436801944e+2, + 0.74276821799363901278e+2, + 0.43434910533952916012e+2, + 0.35601168725649188218e+1, + -0.10799520637964077707e+3, + 0.2126639441195161595e+2, + 0.14137984130020907969e+3, + -0.10919526470746700397e+3, + -0.46902617941919011457e+2, + 0.65956556037510011947e+2, + 0.300063298239585734e+2, + -0.17190367636974585253e+2, + -0.92402429109802724838e+2, + 0.79717645580398396987e+2, + 0.68185492516649389927e+2, + -0.12088537637277316605e+3, + 0.94540214669850769491e-1, + 0.94661953392451366085e+2, + -0.26320469117423801464e+2, + -0.68874067894202013917e+2, + 0.35019827863766678888e+2, + 0.46503253277500675722e+2, + -0.17603862360275094545e+2, + -0.75858972989198250048e+2, + 0.60154163866500461211e+2, + 0.72949021117811525983e+2, + -0.1392660670104984888e+3, + 0.42712953122899818936e+2, + 0.83742494995854684703e+2, + -0.81941637216092104268e+2, + -0.83404758533391625264e+1, + 0.3718291790692592258e+2, + 0.20525072958687879066e+2, + -0.44910531450845503798e+2, + -0.23247335507044869729e+2, + 0.82776123700120749049e+2, + -0.26758603261018642172e+2, + -0.86516345758585472936e+2, + 0.10568199824089390404e+3, + 0.36535725715711859785e+1, + -0.10867974099726852444e+3, + 0.86586157308973625391e+2, + 0.20663898293996634692e+2, + -0.75098493740390182438e+2, + 0.26958817808511625458e+2, + 0.3785974152088175515e+2, + -0.31012820388193048871e+2, + -0.20299667231487294572e+2, + 0.27820931590660034516e+2, + 0.23016687826506448289e+2, + -0.49926773389242626422e+2, + -0.68158055909813244355e+1, + 0.91030625577472349619e+2, + -0.92937087022222570454e+2, + -0.91447115622984043171e+1, + 0.11195738583717289316e+3, + -0.10423801238110557676e+3, + -0.33733741855375356522e+1, + 0.92291566658261771749e+2, + -0.71973153818021884831e+2, + -0.23046010912258335424e+2, + 0.82889927762461766747e+2, + -0.49040334627485599128e+2, + -0.29547957037185145879e+2, + 0.65288687203826981431e+2, + -0.31970728778239838164e+2, + -0.18574913473526592611e+2, + 0.29952369351483191906e+2, + -0.61296548487523780935e+1, + -0.60009073241746344607e+1, + -0.1447096346929331645e+2, + 0.33901283941623340468e+2, + -0.98491533447541925739e+1, + -0.47461164226885635742e+2, + 0.78011677138788414254e+2, + -0.39609521191989458089e+2, + -0.37270898660645492839e+2, + 0.75489885355719820836e+2, + -0.33536080495882984565e+2, + -0.4501515832039219589e+2, + 0.73018673378956620468e+2, + -0.1121056123821530548e+2, + -0.85835173272793781507e+2, + 0.12059859471484804772e+3, + -0.50221410305062740065e+2, + -0.67406049889285156951e+2, + 0.12728838337088315313e+3, + -0.77913561299046563136e+2, + -0.29565970072361764664e+2, + 0.91703001357466348509e+2, + -0.52372144735655950853e+2, + -0.44567928265160794865e+2, + 0.99552062356527358133e+2, + -0.54025698866361359762e+2, + -0.53095891573166987598e+2, + 0.12240458959038436149e+3, + -0.87793489107633590152e+2, + -0.21541835079693459676e+2, + 0.10852548182912273944e+3, + -0.97996171552341095889e+2, + 0.49737282005334355617e+1, + 0.81375993062545859402e+2, + -0.81727384258160086006e+2, + 0.46572868983856913871e+2, + 0.31338424802133896918e+2, + -0.10355127342961034742e+3, + 0.66537898661299195169e+2, + 0.55593549404821239079e+2, + -0.12073053474349991632e+3, + 0.68624003274861451018e+2, + 0.72503822491824294616e+2, + -0.1518070497479930907e+3, + 0.10419083892299899219e+3, + 0.39250706413722873833e+2, + -0.12302749621314873707e+3, + 0.83915167967482133804e+2, + 0.39589001128643424465e+2, + -0.90792134291960437054e+2, + 0.20697100546833969048e+2, + 0.10977597980835837177e+3, + -0.13416749058514861304e+3, + 0.19889910666981602816e+2, + 0.14094814195011053926e+3, + -0.16488693780872318939e+3, + 0.33771082225098503216e+2, + 0.12979815869030528575e+3, + -0.13079884991487978141e+3, + -0.24707340254341580987e+2, + 0.17751269144277989653e+3, + -0.1257985672699409605e+3, + -0.86964111766582774976e+2, + 0.25377279305097320616e+3, + -0.16383407802430818379e+3, + -0.9940751641942624417e+2, + 0.28314959774617466337e+3, + -0.17464888099457161275e+3, + -0.10250148437627747455e+3, + 0.26627727339666563466e+3, + -0.12665709562320887471e+3, + -0.14305361660780937427e+3, + 0.24963641721409834417e+3, + -0.54833636479647502426e+2, + -0.20922187395079444627e+3, + 0.25807557327453594098e+3, + -0.26737691137666143248e+2, + -0.20464449192429194113e+3, + 0.1991772040343509218e+3, + 0.12993824158884295983e+2, + -0.13302109038247874651e+3, + 0.28765899173448154613e+2, + 0.14969789704701335609e+3, + -0.11769605333121126023e+3, + -0.1066082095750983143e+3, + 0.25582933573589218668e+3, + -0.10449055184817717645e+3, + -0.16348086614005211459e+3, + 0.21956940013480871698e+3, + 0.325894492521422805e+2, + -0.25436235821599470341e+3, + 0.14880827412098327045e+3, + 0.1906184771729191425e+3, + -0.3270864064790497423e+3, + 0.9694560646320196895e+2, + 0.2209559676032815787e+3, + -0.22283455908216211583e+3, + -0.29623977445583385304e+2, + 0.16112377671138864343e+3, + 0.24591289103913744896e+2, + -0.21007690716559429234e+3, + 0.82110318130715569396e+2, + 0.22903841433541666106e+3, + -0.25885277033339053787e+3, + -0.56633299259352838817e+2, + 0.29561410239325306293e+3, + -0.98638233552811982463e+2, + -0.23744827243459562283e+3, + 0.22611462406724092489e+3, + 0.12967010736240220581e+3, + -0.28499098193465584927e+3, + 0.3160720204746398565e+2, + 0.22592283322744876273e+3, + -0.68863111216489613753e+2, + -0.20498652197032214417e+3, + 0.10204333014738827501e+3, + 0.27501050923616440969e+3, + -0.29692524994782723979e+3, + -0.11875640655426532533e+3, + 0.36766626371385751781e+3, + -0.77703354152819770206e+2, + -0.22659873325298269719e+3, + 0.52502560378516143658e+2, + 0.25520269545933896893e+3, + -0.78545222868689791085e+2, + -0.30251755837915044367e+3, + 0.20709198461440308847e+3, + 0.24989810427809828752e+3, + -0.25984098324103717914e+3, + -0.18688967321981041891e+3, + 0.29029370613724080386e+3, + 0.13576872812961451586e+3, + -0.25875395743338731336e+3, + -0.14958443596320572055e+3, + 0.27897786048111299806e+3, + 0.1844969517808830517e+3, + -0.33675351039333475001e+3, + -0.15069745935815657845e+3, + 0.35618083582361146e+3, + 0.12031469638389613408e+3, + -0.28480606613152656337e+3, + -0.17270610163792500202e+3, + 0.230180022358808543e+3, + 0.32781974209131016096e+3, + -0.31496161454286010439e+3, + -0.29423234754980023808e+3, + 0.26234398500626514306e+3, + 0.25775224871310075514e+3, + -0.90152053604022750477e+1, + -0.44733429893898130558e+3, + -0.24427082511369267337e+2, + 0.4633516925838359839e+3, + 0.88737093571331527642e+2, + -0.26179407902531539776e+3, + -0.35621870842534042367e+3, + 0.17704243559512269712e+3, + 0.47502035272249224818e+3, + 0.15018048698545127806e+1, + -0.38967519068033647045e+3, + -0.30069821883400391016e+3, + 0.22270455516626577719e+3, + 0.48335559075265211959e+3, + 0.10560335162217323557e+3, + -0.41606214645632809379e+3, + -0.41264938009838152766e+3, + 0.4868275621429406641e+2, + 0.47512582568161855079e+3, + 0.43794415252071729583e+3, + -0.1340595660968886591e+3, + -0.51146417506885433113e+3, + -0.43865047284423411611e+3, + -0.59421518809799156458e+1, + 0.54857925438203619706e+3, + 0.57156555238993325929e+3, + 0.2260056814818796056e+3, + -0.24570461171148156154e+3, + -0.71049945319254243259e+3, + -0.60750753623098353273e+3, + -0.31372386463504716403e+3, + 0.13560036767867478602e+3, + 0.69555666939557124806e+3, + 0.809543094669255197e+3, + 0.98279754310952716878e+3, + 0.8594551845862558821e+3, + 0.6027224421106062664e+3, + 0.56436144994562744159e+3, + 0.23291619408625530241e+3, + 0.21672782418730398035e+3, + 0.13205909250419148293e+3, + -0.20202834494472021731e+2, + 0.11558873440265888632e+3, + -0.52896715431028120236e+2, + 0.19546451221537818554e+2, + 0.4395886362648455048e+2, + -0.77790255668401954381e+2, + 0.81497868117658512688e+2, + -0.4923743056530089035e+2, + -0.23034641609404458151e+1, + 0.51210489386628395891e+2, + -0.76760992391713585903e+2, + 0.69054282505703881156e+2, + -0.32774961420142510349e+2, + -0.15682479344634110419e+2, + 0.55353329851912036474e+2, + -0.70131083338232372171e+2, + 0.54973962605598153175e+2, + -0.17807253886182810021e+2, + -0.24807790065976632832e+2, + 0.5475645983343869716e+2, + -0.60340913974697791389e+2, + 0.40516227010514384688e+2, + -0.50212045884293958764e+1, + -0.30549144153951868219e+2, + 0.5128094502063979121e+2, + -0.49336752431180165956e+2, + 0.26564017944308261576e+2, + 0.65572529573273898862e+1, + -0.35898838954938348422e+2, + 0.49441725217753798916e+2, + -0.42259576934392903524e+2, + 0.17960730874425820502e+2, + 0.13021099886869388129e+2, + -0.38123727244134187231e+2, + 0.47617006448018003084e+2, + -0.38468421648618566167e+2, + 0.15065519264070323047e+2, + 0.1276542611675394312e+2, + -0.34013260935189244094e+2, + 0.40764470585404389169e+2, + -0.31256173741493771701e+2, + 0.10201991706967989515e+2, + 0.13282414809955280788e+2, + -0.29531809887421893279e+2, + 0.32157085142702847236e+2, + -0.20554611470716569244e+2, + 0.86826488708150563411e+2, + -0.12593115992828781202e+3, + 0.22761673657229668066e+2, + 0.72706500293012780389e+2, + -0.14325566869683376581e+3, + 0.1409348003330645156e+3, + -0.90778052130644198314e+2, + -0.38164580090392132838e+1, + 0.79308883858469670258e+2, + -0.12308514625401754472e+3, + 0.95588590283186263719e+2, + -0.30878438399759726707e+2, + -0.61633957086036311068e+2, + 0.11819482180509467639e+3, + -0.13219609203220679206e+3, + 0.74257313388267348842e+2, + 0.11215612909158977573e+2, + -0.10837829007818626792e+3, + 0.15358838868959148272e+3, + -0.14665345506412901955e+3, + 0.68058762443357736061e+2, + 0.2895511705597836638e+2, + -0.12463645481955715866e+3, + 0.15810167573607790814e+3, + -0.13707772943390133946e+3, + 0.51218240630122203072e+2, + 0.40578641817924776092e+2, + -0.11952910437557102341e+3, + 0.13242743563667096396e+3, + -0.97979760912704122688e+2, + 0.14873733010371793739e+2, + 0.55785280117055080495e+2, + -0.10170429841620428135e+3, + 0.82801079673369912371e+2, + -0.31976168191352137171e+2, + -0.43253157335946276874e+2, + 0.82882242632250523684e+2, + -0.85745773924066469363e+2, + 0.28695277092772428773e+2, + 0.40495267793141920265e+2, + -0.10668816993619647349e+3, + 0.11728904167439509365e+3, + -0.78760452951678388445e+2, + 0.1979939511172362776e+1, + 0.94373400260367176884e+2, + -0.10164818047730031481e+3, + 0.17747440791685079375e+3, + 0.59426435855597055991e+2, + 0.18503285721315722867e+3, + 0.43584696469450528866e+3, + 0.44366179517721781167e+3, + 0.81474231002188923867e+3, + 0.97773104825284690378e+3, + 0.10029219310305803674e+4, + 0.10899656376802072373e+4, + 0.66782638413313554793e+3, + 0.16268057027764680811e+3, + -0.2485030132451325926e+3, + -0.87702319589131764133e+3, + -0.66289123712541663735e+3, + -0.32348956825758102696e+3, + 0.15370898040728741307e+3, + 0.85083421721667900783e+3, + 0.41980073807014764498e+3, + 0.98457188068878338072e+2, + -0.4622154567100993745e+3, + -0.7592396376669186111e+3, + 0.60902295964683020202e+2, + 0.34164070998639823529e+3, + 0.56205441784050640308e+3, + 0.16762322547937719719e+3, + -0.65805672606279767933e+3, + -0.32763277845874239347e+3, + 0.79980283485862770476e+2, + 0.45948352569936656664e+3, + 0.41166712938076352657e+3, + -0.47803381981900491837e+3, + -0.42845064473799163807e+3, + 0.11055585343659492992e+3, + 0.35454873763045776514e+3, + 0.35331888501401579106e+3, + -0.43703926675626865972e+3, + -0.43189183055395858446e+3, + 0.32983837872769743171e+3, + 0.30868491437226094831e+3, + 0.60367155421187185027e+2, + -0.42775181504105819386e+3, + -0.23571379165905452169e+3, + 0.53835584004958809601e+3, + 0.14897219589397562345e+3, + -0.35646261792991583661e+3, + -0.2049649042360401836e+3, + 0.17397328054041233258e+3, + 0.3806281658384750699e+3, + -0.17715522155282693006e+3, + -0.47139832253105942073e+3, + 0.2991347135693354744e+3, + 0.33253107450780646559e+3, + -0.25612773058129124593e+3, + -0.18700308465123507062e+3, + -0.25318870308687806414e+1, + 0.4131286065166804633e+3, + -0.94294294347875592166e+2, + -0.51816359131766580504e+3, + 0.39458309351271248033e+3, + 0.19475343061501280317e+3, + -0.2575807042866666734e+3, + -0.11923217229589967303e+3, + 0.79629992491071362792e+2, + 0.33338169038455737336e+3, + -0.28677969296061786508e+3, + -0.26921861802527087093e+3, + 0.45878867434223724331e+3, + 0.13128806069215235297e+2, + -0.3832555797657772132e+3, + 0.12684575219750891506e+3, + 0.23810469540527137156e+3, + -0.11720050394923127612e+3, + -0.18163570598860761152e+3, + 0.58964030093632125329e+2, + 0.30748446350978650798e+3, + -0.25369240671207865034e+3, + -0.25279456993984646829e+3, + 0.50988444473398487844e+3, + -0.15007467190716573668e+3, + -0.32235639154345790303e+3, + 0.3070484639393292241e+3, + 0.42743164807206255773e+2, + -0.15519908184484251024e+3, + -0.65204358796607351678e+2, + 0.16080849025043468714e+3, + 0.95185641244812401851e+2, + -0.3185601421127396975e+3, + 0.10262754211234847901e+3, + 0.33041329011793510517e+3, + -0.40439817210836150707e+3, + -0.11116262251689686735e+2, + 0.40961508656085010216e+3, + -0.3231999085496073576e+3, + -0.87907263799305269458e+2, + 0.29719012938614002906e+3, + -0.11413251682398595221e+3, + -0.13490019477903092593e+3, + 0.11354996895146527436e+3, + 0.75022567301820672014e+2, + -0.9589063421041120705e+2, + -0.10478417921068398755e+3, + 0.21173402622406626961e+3, + 0.38212706172593193799e+1, + -0.32837675465038751099e+3, + 0.34312096884349597303e+3, + 0.35979660046052899247e+2, + -0.41768898934579721072e+3, + 0.38026078087932944527e+3, + 0.34046271346582685169e+2, + -0.3727449347824870074e+3, + 0.29119136701125268019e+3, + 0.77684720444163701814e+2, + -0.3133939763654672106e+3, + 0.19093013556764611849e+3, + 0.1047409237186623443e+3, + -0.24065632922839608909e+3, + 0.11651400946679771664e+3, + 0.71558685792288670768e+2, + -0.11065194057127165195e+3, + 0.17717340578742753365e+2, + 0.27311163799173165501e+2, + 0.55435716547126652642e+2, + -0.13690018530783237338e+3, + 0.53476400734979307572e+2, + 0.15825758709090621323e+3, + -0.27195091397156983248e+3, + 0.1283237658871526321e+3, + 0.15627256881445833869e+3, + -0.28917768909640039965e+3, + 0.11462575315437996437e+3, + 0.19826595619998539632e+3, + -0.31447004434329414835e+3, + 0.82091121798480770622e+2, + 0.2918937433865650064e+3, + -0.43532060510739393067e+3, + 0.18271608094369398145e+3, + 0.24857789591977868326e+3, + -0.4620980140017627491e+3, + 0.26457900187666643887e+3, + 0.14731330751722776995e+3, + -0.37932467478789681081e+3, + 0.21906243279486486131e+3, + 0.16370561623691168052e+3, + -0.38643999310833703476e+3, + 0.22302104402275008965e+3, + 0.18040423926383061826e+3, + -0.44584693400596000856e+3, + 0.32063343172630720801e+3, + 0.86105406751857060499e+2, + -0.40735325748041191218e+3, + 0.35952617276358517984e+3, + -0.18472273525661875304e+1, + -0.32525767996399650883e+3, + 0.32026526279418823151e+3, + -0.12534056710310960625e+3, + -0.19141480652044361932e+3, + 0.39716169583786000885e+3, + -0.20535607541912457918e+3, + -0.2446019074755393774e+3, + 0.4532733334383092938e+3, + -0.23675132640852757504e+3, + -0.26230911640138765506e+3, + 0.51726621189285810942e+3, + -0.32157431996398912588e+3, + -0.17961610939219357874e+3, + 0.44389232937886231412e+3, + -0.26333953007863851781e+3, + -0.19805209943318317301e+3, + 0.38817552516985250577e+3, + -0.12915482631963985227e+3, + -0.35751360195033254286e+3, + 0.48964439511236338376e+3, + -0.1276577964437820043e+3, + -0.42669720135725219734e+3, + 0.5474525150581670232e+3, + -0.13641117270284178176e+3, + -0.42049587057017583902e+3, + 0.46862733006925373047e+3, + 0.17448871892755093427e+2, + -0.54719405806381553248e+3, + 0.45089076763292018768e+3, + 0.18573373337836096653e+3, + -0.73869321668225472877e+3, + 0.52513264663468430626e+3, + 0.24255970993411378345e+3, + -0.81181488912484655884e+3, + 0.51545946597731517613e+3, + 0.29460236426573459312e+3, + -0.77757462261433840922e+3, + 0.35418006471075824493e+3, + 0.45110892733387959197e+3, + -0.75753896751973400114e+3, + 0.15642361269534416124e+3, + 0.63172612321131180124e+3, + -0.75086326666284969633e+3, + 0.3191093973966540176e+2, + 0.63969556514798932767e+3, + -0.55167796008284562959e+3, + -0.15534483427599920446e+3, + 0.51404000823218473215e+3, + -0.11974666058709574656e+3, + -0.51577925808909844818e+3, + 0.4553113158799883422e+3, + 0.25947885062519350186e+3, + -0.77016626385764334373e+3, + 0.33183323256271114587e+3, + 0.50276420359242479208e+3, + -0.69890464167056506994e+3, + -0.73157855012177634535e+2, + 0.77681567742377933428e+3, + -0.48541018560384173952e+3, + -0.529974645864614331e+3, + 0.93211668121631657868e+3, + -0.23114303497068308957e+3, + -0.70291538113689750844e+3, + 0.63469064357948377619e+3, + 0.20071377071671528824e+3, + -0.60208025264511547903e+3, + -0.37703946103749892416e+2, + 0.68614020797230159587e+3, + -0.32283601950112313261e+3, + -0.65895478170367982784e+3, + 0.78686220814806017643e+3, + 0.16884908281670305996e+3, + -0.90760311554090901609e+3, + 0.30353622811248965263e+3, + 0.72753352590205554407e+3, + -0.68160571837327654521e+3, + -0.419113873294495761e+3, + 0.87052975903000879043e+3, + -0.43936583598512804372e+2, + -0.764707931326703374e+3, + 0.23262073167249101857e+3, + 0.68600925946636914432e+3, + -0.40759228744433363545e+3, + -0.77318792020423495615e+3, + 0.88417988333568791859e+3, + 0.35365110131105689106e+3, + -0.10757648504456783485e+4, + 0.14169172470329414182e+3, + 0.79193132244781418194e+3, + -0.1934136689120978474e+3, + -0.82400530041196361708e+3, + 0.29276506310937463695e+3, + 0.91348308281256072405e+3, + -0.6412408053973387041e+3, + -0.77207912082178995661e+3, + 0.80245655686673455875e+3, + 0.57922911370643305418e+3, + -0.87440785122692727782e+3, + -0.48111508791257148232e+3, + 0.85776289004300394936e+3, + 0.45772371236079140999e+3, + -0.90098152065854299053e+3, + -0.53574537913987717275e+3, + 0.10213780327099290162e+4, + 0.48275956644268666196e+3, + -0.11000248882259315906e+4, + -0.4060216384499204878e+3, + 0.90225923646839271441e+3, + 0.57596167897797670321e+3, + -0.79345427480654541341e+3, + -0.95136509989765090722e+3, + 0.94101887012313488867e+3, + 0.91345983703929289277e+3, + -0.74901194114946645186e+3, + -0.92447510756889437289e+3, + 0.13754330854355569613e+3, + 0.13439300310100047682e+4, + 0.70308865310008314964e+2, + -0.13899047444897721562e+4, + -0.37308437022644403669e+3, + 0.90543955420229849551e+3, + 0.10765318846777506678e+4, + -0.55937774508383040484e+3, + -0.14587801076805105822e+4, + -0.45599649303484788732e+2, + 0.12520293103703318138e+4, + 0.93749951773531574872e+3, + -0.70439713417951190877e+3, + -0.15168794005667853071e+4, + -0.32218356388683235991e+3, + 0.12872946474979125924e+4, + 0.13159209318936871114e+4, + -0.15627654986215804911e+3, + -0.1513251327982353132e+4, + -0.13387022203733381502e+4, + 0.38251598659057850682e+3, + 0.16281498323050886938e+4, + 0.13868403126844632425e+4, + -0.1429907178620237751e+2, + -0.16845765260435252912e+4, + -0.18195839927201855062e+4, + -0.7188351665098751937e+3, + 0.81122492578524440887e+3, + 0.21820370770906288271e+4, + 0.19445820196925033088e+4, + 0.98914582243873610423e+3, + -0.47362118394113730346e+3, + -0.21100734625666400461e+4, + -0.26175132544605698968e+4, + -0.30513659612599067259e+4, + -0.2683550476885486205e+4, + -0.19627970046157961406e+4, + -0.16810590613266376749e+4, + -0.81072285573981514517e+3, + -0.64933375743423607673e+3, + -0.38690688957468563558e+3, + -0.12150810370099801361e+2, + -0.27282198178082751383e+3, + 0.99447448795978544922e+2, + -0.46074121935829353447e+2, + -0.9688838234987957776e+2, + 0.16551225951239416645e+3, + -0.17390903956572353195e+3, + 0.10387183892329163371e+3, + 0.65837570897288140159e+1, + -0.1112366581920854145e+3, + 0.16550886794989187933e+3, + -0.14836448974074440343e+3, + 0.69989552446921777573e+2, + 0.3436110099494854353e+2, + -0.11964034084896613308e+3, + 0.15131641594193320088e+3, + -0.11859184983865078777e+3, + 0.38559585658200767e+2, + 0.5318538735526993122e+2, + -0.11767029463455247651e+3, + 0.12973670982721131395e+3, + -0.87067966358246252412e+2, + 0.1056072334535541124e+2, + 0.66304053634266850281e+2, + -0.11141441946192925627e+3, + 0.10782469078102252524e+3, + -0.59316376411235950172e+2, + -0.11760591634219315083e+2, + 0.75196974905455206795e+2, + -0.1051898421156082577e+3, + 0.9107322135940161445e+2, + -0.4037569170589328138e+2, + -0.24764343571964385404e+2, + 0.77666348821651894241e+2, + -0.97653956472065175376e+2, + 0.78340034930060681972e+2, + -0.29116398469824936512e+2, + -0.29064709651101829024e+2, + 0.7282127488572965035e+2, + -0.85459761257063462381e+2, + 0.63497108467242320273e+2, + -0.17289132257131253567e+2, + -0.33441337452368799177e+2, + 0.67908245452425376243e+2, + -0.72462711133433771238e+2, + 0.45974445974810485893e+2, + -0.13306862771147527269e+3, + 0.17759495752669175772e+3, + -0.21414240013222398673e+1, + -0.14868786690195531719e+3, + 0.25162010939601947257e+3, + -0.22675121757685769808e+3, + 0.12595993453599838574e+3, + 0.43752362330817746283e+2, + -0.16906521146860046656e+3, + 0.23351078491620268096e+3, + -0.1706949590548297806e+3, + 0.47355794048044067779e+2, + 0.11944954275785163134e+3, + -0.21595997822033774582e+3, + 0.23557345735271883314e+3, + -0.12860544696484294036e+3, + -0.21532909854446600662e+2, + 0.18804877719904482092e+3, + -0.25878571211312578271e+3, + 0.2393771104505900098e+3, + -0.97823167852864983729e+2, + -0.67357795070823470951e+2, + 0.22362805296927791687e+3, + -0.26535008438565171218e+3, + 0.21390886087422063611e+3, + -0.55018910940064387205e+2, + -0.10193073588221578518e+3, + 0.22605607814208372019e+3, + -0.2260801919801047859e+3, + 0.1441635134404236851e+3, + 0.16410003973885668671e+2, + -0.14096724455182371116e+3, + 0.20920056656155171027e+3, + -0.15276396181960024023e+3, + 0.39140050416570836944e+2, + 0.1122288299163802634e+3, + -0.18799730962725374184e+3, + 0.18690553839387999346e+3, + -0.69923950109247229534e+2, + -0.69977055413195444089e+2, + 0.20081217755396511393e+3, + -0.22364192380745910782e+3, + 0.15123129902602730112e+3, + -0.62557807754451868476e+1, + -0.17290897830538133917e+3, + 0.18438312965680569278e+3, + -0.31624973604578974573e+3, + -0.1281632659124790905e+3, + -0.31081498444039948481e+3, + -0.83096065377355955661e+3, + -0.78657637701975181699e+3, + -0.15061995258063668643e+4, + -0.18003427148873311125e+4, + -0.1809627349531111804e+4, + -0.20429733589204070086e+4, + -0.11743447307726755753e+4, + -0.34090960449665277565e+3, + 0.4801579187561795834e+3, + 0.16074691568103062309e+4, + 0.11924001648902872148e+4, + 0.63227288842039990868e+3, + -0.32596011161993499172e+3, + -0.15225452062526044301e+4, + -0.79093376896812060295e+3, + -0.17884329474329689447e+3, + 0.86319433949933477379e+3, + 0.13658951925839271553e+4, + -0.84546890297614055498e+2, + -0.64602187148182656529e+3, + -0.1022980983393296583e+4, + -0.30218379365223762534e+3, + 0.11928349574160868087e+4, + 0.61644228999135350477e+3, + -0.15814928237209076656e+3, + -0.83904598150560525482e+3, + -0.74932217575757624672e+3, + 0.86533587046350044147e+3, + 0.79727789713424579077e+3, + -0.21006863540823772496e+3, + -0.64995680517239532037e+3, + -0.64048967344419031633e+3, + 0.78998733073851701647e+3, + 0.80207566233416832802e+3, + -0.60896748171359308799e+3, + -0.57039159306736439703e+3, + -0.97924559978843532804e+2, + 0.76725915791768670715e+3, + 0.44718896406792464404e+3, + -0.99368644877257122516e+3, + -0.27888501935751520477e+3, + 0.67225381683006537514e+3, + 0.34805049080253542115e+3, + -0.28945488575198771741e+3, + -0.72039035030859076869e+3, + 0.3332081055290562972e+3, + 0.87371931256858783854e+3, + -0.57444586222551686205e+3, + -0.57307310810400190348e+3, + 0.43186033875903274293e+3, + 0.37184907362104223694e+3, + -0.78870098901859968521e+1, + -0.76451969177036789915e+3, + 0.1975574843605742501e+3, + 0.91476973474006240394e+3, + -0.68741856833200199617e+3, + -0.38387776296500095441e+3, + 0.48284197263358612418e+3, + 0.22674182756565090813e+3, + -0.16998940554702721784e+3, + -0.57850193454007035143e+3, + 0.4939658806291481028e+3, + 0.51542977168540812727e+3, + -0.8467868923047797125e+3, + -0.36127654439697820976e+2, + 0.72923647235631938202e+3, + -0.26651345354707626711e+3, + -0.40404269718054854366e+3, + 0.19220621882182578588e+3, + 0.34043599558623282064e+3, + -0.98862121932882885744e+2, + -0.58673834114121075345e+3, + 0.49592463332100379603e+3, + 0.43236782814278262776e+3, + -0.91026026108291750916e+3, + 0.26187234789708537619e+3, + 0.59158182659854116991e+3, + -0.55245602286704809103e+3, + -0.95880644888197380737e+2, + 0.3043041272270889408e+3, + 0.10192627773843508976e+3, + -0.28209040613165512923e+3, + -0.18147109607342704862e+3, + 0.58619373465238970766e+3, + -0.1873190103322920379e+3, + -0.60768539625228595469e+3, + 0.7434352258096901096e+3, + 0.18160284719670944042e+2, + -0.74740115675056313194e+3, + 0.58623588800624781925e+3, + 0.17120049266865365212e+3, + -0.55829950864740101224e+3, + 0.22433381447318848245e+3, + 0.23377238627032934914e+3, + -0.19981297225303737264e+3, + -0.13752252377500136049e+3, + 0.16590134163339257611e+3, + 0.21115552135739494588e+3, + -0.4131501584872447097e+3, + 0.18923259958352968368e+2, + 0.58083766710324073301e+3, + -0.6174392482195530647e+3, + -0.65191649009342171439e+2, + 0.75277340503282357531e+3, + -0.6749797842276323081e+3, + -0.88419298324868350392e+2, + 0.70708004978496148851e+3, + -0.54982937384505510181e+3, + -0.13737384067296162016e+3, + 0.58067498089822015572e+3, + -0.36443639253191753369e+3, + -0.17440217805777106719e+3, + 0.42625622125082441016e+3, + -0.20625911092416643555e+3, + -0.12833576507874411732e+3, + 0.19045504835278887867e+3, + -0.1424540259484421334e+2, + -0.68190203764604916614e+2, + -0.9006081691550733126e+2, + 0.25114022539537236867e+3, + -0.11216116719062490859e+3, + -0.26351844589269768449e+3, + 0.46461548706204206383e+3, + -0.20160963474051681033e+3, + -0.31143573178641014465e+3, + 0.53943713766800692611e+3, + -0.20005539429617797964e+3, + -0.39222919477708768454e+3, + 0.61879517210219398748e+3, + -0.19773054983942162721e+3, + -0.4929481357921901008e+3, + 0.77012292287777813726e+3, + -0.32736154626846274596e+3, + -0.44135593593019922309e+3, + 0.81414018529934764956e+3, + -0.44081057547049101686e+3, + -0.31564146855406045233e+3, + 0.73236214483229082362e+3, + -0.42219294275716708853e+3, + -0.29958293711256271763e+3, + 0.72686932972239890205e+3, + -0.44069708286056521729e+3, + -0.29391823480101311361e+3, + 0.78480324310069056537e+3, + -0.56720372409704646088e+3, + -0.16217013147761616665e+3, + 0.73482591378332460863e+3, + -0.63507395080047433567e+3, + -0.25487469439255367121e+2, + 0.62169573378859342938e+3, + -0.6019055239776197368e+3, + 0.1751490330992731117e+3, + 0.43039685205176078853e+3, + -0.73650418747915944095e+3, + 0.33267535467709711838e+3, + 0.47422813831925111572e+3, + -0.81485189984639782779e+3, + 0.40196198936509694022e+3, + 0.46531869094431647227e+3, + -0.87541457003188725139e+3, + 0.49663921015881192034e+3, + 0.37467733775961738729e+3, + -0.79843326683502687047e+3, + 0.42995282975316570173e+3, + 0.41047702324804345153e+3, + -0.75875462340929357197e+3, + 0.29737005617906982025e+3, + 0.58037786207064607424e+3, + -0.86476649048101671724e+3, + 0.28310345141829276372e+3, + 0.66606291152954281642e+3, + -0.91610229090489031023e+3, + 0.25622994120254020345e+3, + 0.69440557909103642942e+3, + -0.83200433328875897132e+3, + 0.56539542004475165982e+2, + 0.85997796591029327828e+3, + -0.79784263461317596011e+3, + -0.17454628767416394908e+3, + 0.10953787750668175249e+4, + -0.84553373716799649173e+3, + -0.30128826783243670207e+3, + 0.11973165953970330975e+4, + -0.77766011191971222161e+3, + -0.44214158245005683057e+3, + 0.117652558556310737e+4, + -0.52148183102449036141e+3, + -0.71120088541113989322e+3, + 0.11668069125516985878e+4, + -0.22520293951084642003e+3, + -0.97377311865705678429e+3, + 0.11124211216914836768e+4, + 0.31758554063853743799e+2, + -0.10343925762830247095e+4, + 0.79848946652045856354e+3, + 0.38976391093209326755e+3, + -0.94437462635942006273e+3, + 0.23107192230137837896e+3, + 0.87924853380436957195e+3, + -0.83138306423586993787e+3, + -0.32759503809800264662e+3, + 0.11998695944949063232e+4, + -0.54531439956054930462e+3, + -0.78458107728396851144e+3, + 0.1130320951822887082e+4, + 0.72797487870335800153e+2, + -0.12040199972899881686e+4, + 0.79025442489476915853e+3, + 0.76482708866144287185e+3, + -0.13694330492768763179e+4, + 0.27318720939499473843e+3, + 0.11394456880238697067e+4, + -0.93564579886982710377e+3, + -0.45420724524604855787e+3, + 0.10798277755844583226e+4, + 0.17241148585932936754e+2, + -0.11388212429024322319e+4, + 0.60507877449737372899e+3, + 0.97557251328287611614e+3, + -0.12297863219068387934e+4, + -0.24885671855988221068e+3, + 0.14133490177785470223e+4, + -0.46733824197750766416e+3, + -0.11469489897964615466e+4, + 0.10572272022308543455e+4, + 0.68324650649677357706e+3, + -0.13585865244902922768e+4, + -0.30580792160541849789e+1, + 0.12956620239176477298e+4, + -0.39346014048191324264e+3, + -0.11528808539167496292e+4, + 0.76714459598571522747e+3, + 0.11161304231824929047e+4, + -0.13484315356331294424e+4, + -0.5431418761119842884e+3, + 0.16216270428241202808e+4, + -0.10024312396269529302e+3, + -0.1360288318657392665e+4, + 0.33268466194953089143e+3, + 0.13618296884307515029e+4, + -0.54095267432600144275e+3, + -0.14055752011609183683e+4, + 0.101362028330940052e+4, + 0.12096558114963895605e+4, + -0.1250005272760398384e+4, + -0.93639971953662029591e+3, + 0.13718778274980359129e+4, + 0.81922269388434051507e+3, + -0.14122807893464048448e+4, + -0.7288221057947312147e+3, + 0.14783475193753104122e+4, + 0.80311076670151851431e+3, + -0.15981401565717792437e+4, + -0.76475289463105514187e+3, + 0.17107334996758518173e+4, + 0.71040321727807042862e+3, + -0.14734148617955925147e+4, + -0.95163098507347513078e+3, + 0.1356722389498919938e+4, + 0.14147023204231668387e+4, + -0.14306079961544155594e+4, + -0.14619978470238872887e+4, + 0.11161281603100042048e+4, + 0.16135184549449686529e+4, + -0.35051648485523531917e+3, + -0.20776295357586614045e+4, + -0.10021050449181933573e+3, + 0.2138078238020079425e+4, + 0.71456858454271457504e+3, + -0.15475317487144848201e+4, + -0.16775451442292608135e+4, + 0.91013466513762318755e+3, + 0.22805802370536916897e+4, + 0.13096501622852582614e+3, + -0.20383799600321622165e+4, + -0.14954671878176056907e+4, + 0.11414593662808727004e+4, + 0.24144513148975920558e+4, + 0.5113187574089833447e+3, + -0.20388170568212294711e+4, + -0.21282682320163635268e+4, + 0.25601770203048687335e+3, + 0.24423915505439390472e+4, + 0.21000588366322685943e+4, + -0.57011045044504305679e+3, + -0.26229826780745884207e+4, + -0.22377722584090802229e+4, + 0.717301173340385958e+2, + 0.26413999948504606436e+4, + 0.29398378675725052744e+4, + 0.11671494877025738788e+4, + -0.13577319141019650033e+4, + -0.34146966648499487746e+4, + -0.31664967917497001508e+4, + -0.15802894128139519125e+4, + 0.81686825887920201694e+3, + 0.32763811006920582258e+4, + 0.42866210643197418904e+4, + 0.48294035246019102487e+4, + 0.42742415396941805739e+4, + 0.32275882760460776808e+4, + 0.25698736684345540198e+4, + 0.13995158429578411869e+4, + 0.99770898722843105588e+3, + 0.5816924055419015076e+3, + 0.11914826499159882189e+3, + 0.31756166909541371979e+3, + -0.71624567447924448516e+2, + 0.54248264776093428452e+2, + 0.99910070206785420055e+2, + -0.16045559968464274903e+3, + 0.17046507514692538621e+3, + -0.10080407937732188373e+3, + -0.70308335114740554417e+1, + 0.10933477964354545975e+3, + -0.16208534085790469703e+3, + 0.14494805833711350829e+3, + -0.67969436930295970001e+2, + -0.34285533945503289033e+2, + 0.11768274048716060065e+3, + -0.14846115599185085898e+3, + 0.11607883083884486553e+3, + -0.37354918417297831468e+2, + -0.52813116115602177558e+2, + 0.11618112649819863691e+3, + -0.12807455855741790174e+3, + 0.86161351212353466167e+2, + -0.10902425247651491347e+2, + -0.64910871753022291841e+2, + 0.10974342359859525686e+3, + -0.10689473454403673713e+3, + 0.59902577107078414542e+2, + 0.94781736982862323515e+1, + -0.71778964453927954992e+2, + 0.10174172603774368895e+3, + -0.88861288376860045446e+2, + 0.40339139216560035095e+2, + 0.22350842061322836685e+2, + -0.7331687322106954241e+2, + 0.9248645606676012676e+2, + -0.73715105332344862177e+2, + 0.26188673744073334149e+2, + 0.29674729772980981579e+2, + -0.71171492766339994773e+2, + 0.82177425011815330436e+2, + -0.59514258694810557415e+2, + 0.13505007614806215699e+2, + 0.36415853160239493036e+2, + -0.69863225974050095601e+2, + 0.73519376688905637707e+2, + -0.46401574754630907194e+2, + 0.99577361047294928653e+2, + -0.12057220038256838279e+3, + -0.23696303100215551751e+2, + 0.13918738535549812241e+3, + -0.21147194825668694307e+3, + 0.17637021310917160122e+3, + -0.83356984418328437414e+2, + -0.61106944753469967679e+2, + 0.16047609421674553687e+3, + -0.2052943909550442072e+3, + 0.14197546311392227381e+3, + -0.31827569971838588714e+2, + -0.11060563491849129036e+3, + 0.18842910513734551614e+3, + -0.20009491680774019073e+3, + 0.10535697841418172516e+3, + 0.21412509420648312641e+2, + -0.15850047133115072029e+3, + 0.21130170244823739267e+3, + -0.18921241835049377755e+3, + 0.67110225915452772938e+2, + 0.68207379131267103389e+2, + -0.19096915064750174906e+3, + 0.21322724349846379255e+3, + -0.15892436270459373304e+3, + 0.18982378068670541893e+2, + 0.10999358384184732529e+3, + -0.2035853417904791911e+3, + 0.18654480566758022064e+3, + -0.10134342956095274246e+3, + -0.45115914306629598229e+2, + 0.15079819741656436349e+3, + -0.19960669950384854587e+3, + 0.13549963354715771402e+3, + -0.22499273904010756553e+2, + -0.11849900940324053522e+3, + 0.18625118805547808165e+3, + -0.18045875659438235061e+3, + 0.69573548572908151755e+2, + 0.61290573580898950468e+2, + -0.18122971860804250355e+3, + 0.20213470234150992155e+3, + -0.13601379936517682268e+3, + 0.4793911559589105309e+1, + 0.15479225437499846407e+3, + -0.16446951502268964873e+3, + 0.27482503076885399196e+3, + 0.12047490329379758123e+3, + 0.25522378560867130659e+3, + 0.74499583091344027252e+3, + 0.66877149380967136949e+3, + 0.13235793905456241646e+4, + 0.15751468925505323568e+4, + 0.15614607788168420939e+4, + 0.18110473502139839184e+4, + 0.99352211458640408637e+3, + 0.3235323835999347466e+3, + -0.43248505386697428321e+3, + -0.14059589887373813326e+4, + -0.1022036072919330195e+4, + -0.58069552902589543919e+3, + 0.31541056935628114388e+3, + 0.13041321544139318576e+4, + 0.70227832193604092481e+3, + 0.15884574880632362692e+3, + -0.76880063743868129222e+3, + -0.11696271024217228387e+4, + 0.51453708921873804627e+2, + 0.57958344865763558573e+3, + 0.88713520602934534054e+3, + 0.25901784379657857471e+3, + -0.10291527745733762913e+4, + -0.55214535950464960479e+3, + 0.14940093059535163889e+3, + 0.72687187514181016468e+3, + 0.65257469020275209459e+3, + -0.74904689393096055028e+3, + -0.70332843732242645274e+3, + 0.18852088445564268682e+3, + 0.56656645797147086796e+3, + 0.55495949126247967342e+3, + -0.68295315990894869174e+3, + -0.70561521880161831177e+3, + 0.53278020469629609579e+3, + 0.50255284997005287551e+3, + 0.75073211297043016543e+2, + -0.65661591140590883242e+3, + -0.40146869164767662141e+3, + 0.87200525303836354851e+3, + 0.24786524276607909201e+3, + -0.60066927855484004795e+3, + -0.28331728496244545568e+3, + 0.23102530131834191707e+3, + 0.64507794483995314749e+3, + -0.29674925595706935155e+3, + -0.76965862238485635771e+3, + 0.52043139479224078059e+3, + 0.47357517570030870502e+3, + -0.34983847400116297877e+3, + -0.34485444117662746066e+3, + 0.14793951821068446861e+2, + 0.67396333306651183648e+3, + -0.19219148550742099246e+3, + -0.77086766206451193284e+3, + 0.57204241724001894909e+3, + 0.35583522716321692769e+3, + -0.42979003959579563343e+3, + -0.20391703407421996985e+3, + 0.16677060903684972004e+3, + 0.47929118794173393781e+3, + -0.40546877644299985377e+3, + -0.46871996176281373891e+3, + 0.74630768396799680886e+3, + 0.37283270244862407594e+2, + -0.65325570186143579576e+3, + 0.25556450780463379147e+3, + 0.32971195446248833605e+3, + -0.15087105569976745301e+3, + -0.30400692196630723174e+3, + 0.81991358086064380473e+2, + 0.52568127026516401656e+3, + -0.45176709870580850748e+3, + -0.35814118097239867211e+3, + 0.7795420917461932504e+3, + -0.2210994910087561891e+3, + -0.5155445294961525633e+3, + 0.47449541406613411709e+3, + 0.95315272651079965271e+2, + -0.27787145597079614845e+3, + -0.78945630398512832926e+2, + 0.24008890753825858155e+3, + 0.16032414864489732054e+3, + -0.5104937398361108194e+3, + 0.160984077902041264e+3, + 0.53260188741259844392e+3, + -0.65001463632778938972e+3, + -0.1563830341286218939e+2, + 0.65203012152408848578e+3, + -0.51003543576990381325e+3, + -0.15346403613485426831e+3, + 0.49394287082526932409e+3, + -0.20426431708326904868e+3, + -0.19572442803898329089e+3, + 0.1686635946300711737e+3, + 0.12093528385057864227e+3, + -0.13976577017994242169e+3, + -0.19492403653649910211e+3, + 0.37481555741640954693e+3, + -0.31205755824618254479e+2, + -0.49544400369123002292e+3, + 0.5336344196029684781e+3, + 0.54229054295204797143e+2, + -0.64684202426064234714e+3, + 0.5738457026074844407e+3, + 0.93634250593105491589e+2, + -0.63055110112622458018e+3, + 0.48669781630340918355e+3, + 0.12149944907769668134e+3, + -0.51646758752204664233e+3, + 0.3331734446862217851e+3, + 0.13583899208963245542e+3, + -0.35908837301301667821e+3, + 0.17436182154874325079e+3, + 0.10840938343453892401e+3, + -0.15398749794360449528e+3, + -0.54256263342567958574e+1, + 0.78220213275725726021e+2, + 0.64263265897616051348e+2, + -0.21357991631591048076e+3, + 0.10322327500426294478e+3, + 0.21427742464160203895e+3, + -0.38281087787359894037e+3, + 0.1516801412803246194e+3, + 0.29155191740991961069e+3, + -0.48078490648144605757e+3, + 0.17179071970532498881e+3, + 0.35787251225922335607e+3, + -0.56519482851026975823e+3, + 0.20165315023317887722e+3, + 0.40393544797183989203e+3, + -0.65490719723077404524e+3, + 0.28174057376460751811e+3, + 0.37480915905813105837e+3, + -0.68816207747609246326e+3, + 0.35554371652840455909e+3, + 0.30461475503182089142e+3, + -0.6615174726454880556e+3, + 0.37893723607863523739e+3, + 0.26504392339776705967e+3, + -0.65080004897276364773e+3, + 0.40958801974433868054e+3, + 0.22927791168965393354e+3, + -0.66214437458470649744e+3, + 0.48214127826914938169e+3, + 0.1416378471549221274e+3, + -0.62906109720589711287e+3, + 0.53318602214419934171e+3, + 0.46396520728070569817e+2, + -0.56338505431826388303e+3, + 0.53728030693498578785e+3, + -0.12250308812245468459e+3, + -0.42269691927700665701e+3, + 0.65191507216500042432e+3, + -0.27161726020452022112e+3, + -0.42116756816539304964e+3, + 0.69473388678218236691e+3, + -0.32734659056847226566e+3, + -0.39869798239208944324e+3, + 0.71984618710771053429e+3, + -0.37479893741932022522e+3, + -0.35974866410896402158e+3, + 0.69453870619667532083e+3, + -0.35011842935822244272e+3, + -0.38231947184140170748e+3, + 0.68870632970686335739e+3, + -0.29640169665406267541e+3, + -0.45943700255245875042e+3, + 0.73137628937485453662e+3, + -0.27181664960886416793e+3, + -0.51625589147808636881e+3, + 0.74942109607917302583e+3, + -0.22644750246774250968e+3, + -0.56334914471273964409e+3, + 0.71232074047753769719e+3, + -0.10212735281837721857e+3, + -0.667430994667979121e+3, + 0.68154680691141277293e+3, + 0.52176483814967596686e+2, + -0.80092078198008027812e+3, + 0.66551371278291264844e+3, + 0.18230089761269019277e+3, + -0.87605819321659055277e+3, + 0.5788417702273204668e+3, + 0.33414141238119691479e+3, + -0.88927829668123354168e+3, + 0.38893988523559892201e+3, + 0.54572019075342893757e+3, + -0.88372401139328519548e+3, + 0.15855986643338769682e+3, + 0.74088693743433657346e+3, + -0.8118836540304156415e+3, + -0.88236765208549499562e+2, + 0.83151096765320698978e+3, + -0.58190634819775857522e+3, + -0.39429818820429971993e+3, + 0.82155282967972073038e+3, + -0.20837301115936642759e+3, + -0.72516206791546051136e+3, + 0.71724991858090118058e+3, + 0.20751371484622120533e+3, + -0.93145049297158914214e+3, + 0.44533681140421867894e+3, + 0.60145077481587031798e+3, + -0.89830210005827586883e+3, + -0.25162969997661157606e+2, + 0.91771309653066862211e+3, + -0.62558865276341509798e+3, + -0.55312155879409851877e+3, + 0.10022236087254963195e+4, + -0.1532119179172664758e+3, + -0.90775319060385697867e+3, + 0.68641699495494322036e+3, + 0.44238035407359279816e+3, + -0.92352049978071136138e+3, + 0.10476033858029746071e+2, + 0.92808437095834096908e+3, + -0.53757214593710341433e+3, + -0.71617451720769088297e+3, + 0.95107027465250166642e+3, + 0.17923296214955593086e+3, + -0.10847670077641776061e+4, + 0.35347677524785797232e+3, + 0.89386111773857112439e+3, + -0.81128985102894114334e+3, + -0.54714023036781929932e+3, + 0.10484107790264981759e+4, + 0.50546328342499577957e+2, + -0.10688208694606830704e+4, + 0.32511356940324446896e+3, + 0.94310726483271912457e+3, + -0.6781988094113750094e+3, + -0.80185256756408034562e+3, + 0.10207594156141842632e+4, + 0.41165990332526052953e+3, + -0.12121858429620715469e+4, + -0.20442297904798563124e+1, + 0.11283740773639831332e+4, + -0.27055499073379229458e+3, + -0.1109469429962116692e+4, + 0.48133935721883500491e+3, + 0.1065343898709908899e+4, + -0.78871500684136651671e+3, + -0.93395887554771672967e+3, + 0.95660437681984512892e+3, + 0.75278032010271124363e+3, + -0.10731236621555306101e+4, + -0.66785543454704588839e+3, + 0.11301833662568847103e+4, + 0.57799975025486844515e+3, + -0.11914382150631683999e+4, + -0.59893731438542010892e+3, + 0.12414003017502873263e+4, + 0.5880082817837192124e+3, + -0.13039574270939756389e+4, + -0.6111373158854197527e+3, + 0.11898145264427955681e+4, + 0.7639545541435721816e+3, + -0.11252462571617788853e+4, + -0.10405798606418827603e+4, + 0.10710624465121197773e+4, + 0.11608037298528251995e+4, + -0.83420593592595650989e+3, + -0.1351702660532897653e+4, + 0.35600937485809083682e+3, + 0.15925069471430203976e+4, + 0.70315660352926542487e+2, + -0.16303956512538800325e+4, + -0.63562950828294526673e+3, + 0.12777221442301436127e+4, + 0.1299463632693864156e+4, + -0.73381252152615593332e+3, + -0.17566838850082142471e+4, + -0.14354165551070772722e+3, + 0.16281313013507469805e+4, + 0.11790982380300376917e+4, + -0.91462709690812312147e+3, + -0.18875256135665083548e+4, + -0.40606929205178869324e+3, + 0.15969971544463583086e+4, + 0.16895913324891409957e+4, + -0.20574207104522602663e+3, + -0.19360548541970385941e+4, + -0.16308997493416577527e+4, + 0.42647931399566749633e+3, + 0.20731893641902261152e+4, + 0.17802252229016498859e+4, + -0.92189558389152509221e+2, + -0.20439488546397988102e+4, + -0.23344888245546330836e+4, + -0.93337403763479778718e+3, + 0.111320760512201241e+4, + 0.26351836260183486047e+4, + 0.25355264994034841948e+4, + 0.12403813799499639572e+4, + -0.68107638136702814791e+3, + -0.2515409080017296219e+4, + -0.34438872368648148949e+4, + -0.3767961848429850761e+4, + -0.33570579591989189794e+4, + -0.25984879256978533704e+4, + -0.19470787663254147901e+4, + -0.1169340285431344455e+4, + -0.75932641021067286147e+3, + -0.43347475433111753773e+3, + -0.15962714584429667752e+3, + -0.17200847137847276258e+3, + -0.7015009284937394618, + -0.30781471168395167837e+2, + -0.41329139114290867951e+2, + 0.56638219974563924097e+2, + -0.62657099302877206526e+2, + 0.36315234828463665906e+2, + 0.26128241684243542764e+1, + -0.39883811718291575232e+2, + 0.58955475603642319982e+2, + -0.52632404206741334463e+2, + 0.24555161270254050265e+2, + 0.12670440361228266113e+2, + -0.42972831521531965393e+2, + 0.5407943794190025244e+2, + -0.4216299452337227649e+2, + 0.13375512615203861699e+2, + 0.19563898505187999888e+2, + -0.42703870178302771876e+2, + 0.47049580149835485088e+2, + -0.31731740513029667028e+2, + 0.42015918419516085081e+1, + 0.23599429895579049798e+2, + -0.40158906524468946486e+2, + 0.39362050401208065864e+2, + -0.22442687975499282516e+2, + -0.27204080494758819952e+1, + 0.25436112563820707066e+2, + -0.36512379855198794587e+2, + 0.32108171339068348971e+2, + -0.14793402442481324854e+2, + -0.76755246208862422108e+1, + 0.25945098244032163137e+2, + -0.32761934651826912557e+2, + 0.25925974200407829073e+2, + -0.8781462920940271033e+1, + -0.11263417190064432205e+2, + 0.25997868199038776993e+2, + -0.2961532309369865601e+2, + 0.21027116891362730655e+2, + -0.40453831187635262978e+1, + -0.14217222851618835477e+2, + 0.26328669428256336715e+2, + -0.27452397185907926769e+2, + 0.17265378829205982214e+2, + -0.29059013370174625379e+2, + 0.3146403463356224961e+2, + 0.14343750682335683067e+2, + -0.48580017314083512758e+2, + 0.6806676206921909511e+2, + -0.52914730424135825615e+2, + 0.20771973515205818472e+2, + 0.26158883405508646547e+2, + -0.56364076038831406379e+2, + 0.68097619547542237228e+2, + -0.44699161564224617393e+2, + 0.74594536221226768191e+1, + 0.38918940110728961201e+2, + -0.62831979792228729309e+2, + 0.65000400394734938914e+2, + -0.3289727736563769156e+2, + -0.82136345504446310883e+1, + 0.51580290954888539545e+2, + -0.66589119351524104218e+2, + 0.57671979634246042679e+2, + -0.17257878243651362027e+2, + -0.25448588239752616857e+2, + 0.62589836231802614464e+2, + -0.66019365948984230386e+2, + 0.45219090322183760122e+2, + 0.18862774572285172514e+1, + -0.42740889168002084375e+2, + 0.69909038208213189591e+2, + -0.59510942022334788248e+2, + 0.27294313258740139361e+2, + 0.23332216312593349272e+2, + -0.57797626214740731143e+2, + 0.71202545651907598767e+2, + -0.45851473863796030628e+2, + 0.45170825184373413208e+1, + 0.44775003296432721811e+2, + -0.67642351517280417283e+2, + 0.64254554298846372262e+2, + -0.24811886576606479338e+2, + -0.21172357715531926914e+2, + 0.62573990063553615926e+2, + -0.69534893322900927615e+2, + 0.46348758686074319257e+2, -0.95532786461206209427, - -0.53431597476899852950e+02, - 0.56771586444948404448e+02, - -0.92317420327720412843e+02, - -0.41574191146077843939e+02, - -0.81414194227851012897e+02, - -0.25330960315386644766e+03, - -0.21819810134768832199e+03, - -0.44385879868391367609e+03, - -0.52568768564132960819e+03, - -0.51623102679522025937e+03, - -0.61060604514233693862e+03, - -0.32342298020239570633e+03, - -0.11411529518635464342e+03, - 0.14704620562620053192e+03, - 0.47016844565513844145e+03, - 0.33511847767598487735e+03, - 0.20166920438942725013e+03, - -0.11346782176517565688e+03, - -0.42844456323403187525e+03, - -0.23659416375336954275e+03, - -0.54701767712985436276e+02, - 0.26157921731806379739e+03, - 0.38273862490314314755e+03, - -0.10261318905573306282e+02, - -0.19795428854326746659e+03, - -0.29410769874315212746e+03, - -0.84737399981273213712e+02, - 0.33919945243981243266e+03, - 0.18870651057878015422e+03, - -0.53740081967575264343e+02, - -0.24006135822434251281e+03, - -0.21773961277534601777e+03, - 0.24838694909181833737e+03, - 0.23632753026228789395e+03, - -0.64272986213033192371e+02, - -0.18850597036795528538e+03, - -0.18416050925011151662e+03, - 0.22622007483972708997e+03, - 0.23636400514391812067e+03, - -0.17756466190472602307e+03, - -0.16918168276175774167e+03, - -0.21875078907082983193e+02, - 0.21510639577459298266e+03, - 0.13697662508890525146e+03, - -0.29193004019526938464e+03, - -0.84018761309410706417e+02, - 0.20431243831422082735e+03, - 0.88553455881657498594e+02, - -0.70843789717857916344e+02, - -0.21965705301598237043e+03, - 0.10055276820688256123e+03, - 0.25865000161799179068e+03, - -0.17895654055742957667e+03, - -0.15029204081378125579e+03, - 0.10896018492739648309e+03, - 0.12063368857388891797e+03, - -0.70216756546590497479e+01, - -0.22677812187149493184e+03, - 0.69926453961873534126e+02, - 0.24889704528024415708e+03, - -0.18252222295036582977e+03, - -0.12470833832172877464e+03, - 0.14575135418212755667e+03, - 0.69699066064411510979e+02, - -0.60965026541031136276e+02, - -0.15221342374186409074e+03, - 0.12746970703317835216e+03, - 0.16210639305593139170e+03, - -0.25138025850827247609e+03, - -0.13546471956672407444e+02, - 0.22211568177565666815e+03, - -0.91457904608737521812e+02, - -0.10343609243042625678e+03, - 0.45297849071198704962e+02, - 0.10373128073723755449e+03, - -0.26742158204978895952e+02, - -0.17833722368972843242e+03, - 0.15518068320155452966e+03, - 0.11466116130678406648e+03, - -0.25620088076440265468e+03, - 0.71930230117573628945e+02, - 0.17157578949256318879e+03, - -0.15622812108275437026e+03, - -0.34564129749933556468e+02, - 0.95382982026110269658e+02, - 0.24348265491094817747e+02, - -0.79214306574354623081e+02, - -0.53137787926961600249e+02, - 0.16915694080295239132e+03, - -0.52494635257707336962e+02, - -0.17833651528863154567e+03, - 0.21685452571747003958e+03, - 0.56205580311670981786e+01, - -0.21800312907821384556e+03, - 0.17047944548716600366e+03, - 0.51299613450337027132e+02, - -0.16556676412512780416e+03, - 0.69650896806482322177e+02, - 0.63496510793317177956e+02, - -0.54895112793774451632e+02, - -0.40625003381319004347e+02, - 0.45569112047121784315e+02, - 0.67281706762289388735e+02, - -0.12803789271643651659e+03, - 0.13505656539663240423e+02, - 0.16295915538023251656e+03, - -0.17733744814942357948e+03, - -0.16610256075170891421e+02, - 0.21234581542608378868e+03, - -0.18692203102092267386e+03, - -0.35562490804081370754e+02, - 0.21336159198316801167e+03, - -0.16328530625298458290e+03, - -0.41991829886429314911e+02, - 0.17597417435135304231e+03, - -0.11632800804469133027e+03, - -0.39846884959598618536e+02, - 0.11551876889447693486e+03, - -0.56335274408099884624e+02, - -0.34951166709441487512e+02, - 0.47363847073172280489e+02, - 0.76502708119402926812e+01, - -0.32352314770092100105e+02, - -0.16289103627832353993e+02, - 0.68562241039999378245e+02, - -0.35013243547874495221e+02, - -0.67642637195380842741e+02, - 0.12152976778158026150e+03, - -0.43673685823720916233e+02, - -0.10315217539740045538e+03, - 0.16379211500042507055e+03, - -0.57413915881612837211e+02, - -0.12261173084284982338e+03, - 0.19441694563295095577e+03, - -0.74457025654213879307e+02, - -0.12798008552843859320e+03, - 0.21389508946754463636e+03, - -0.92890147670167635852e+02, - -0.12227818530668997710e+03, - 0.22367941609447055384e+03, - -0.11115094641220473193e+03, - -0.10872921796946056361e+03, - 0.22573198658246462855e+03, - -0.12825340078938168631e+03, - -0.90193911072183652777e+02, - 0.22213117566536280378e+03, - -0.14379995648295832211e+03, - -0.68879710936650042186e+02, - 0.21477070250216669933e+03, - -0.15785348075747128860e+03, - -0.46267072118155091687e+02, - 0.20516195695039399993e+03, - -0.17073888757950314243e+03, - -0.23188022145741470581e+02, - 0.19433525289206048114e+03, - -0.18282712888348473257e+03, - 0.33900859137146120759e+02, - 0.15247097089110434354e+03, - -0.22071438956036027434e+03, - 0.87952797522166548561e+02, - 0.13999746039839826039e+03, - -0.22567764673205746817e+03, - 0.10205061465911919072e+03, - 0.13187461985134794418e+03, - -0.22933660733052988689e+03, - 0.11014355071505114836e+03, - 0.12905520843702433353e+03, - -0.23249298313648094449e+03, - 0.11212570754287777675e+03, - 0.13216575791780917370e+03, - -0.23538822625480861461e+03, - 0.10761402099252019582e+03, - 0.14151214654981512808e+03, - -0.23760765552593102257e+03, - 0.95897167122909635850e+02, - 0.15700336692371828917e+03, - -0.23798056356314845061e+03, - 0.75979070738343295943e+02, - 0.17797320324827035165e+03, - -0.23449179830626476928e+03, - 0.46754463901942209247e+02, - 0.20289304116115764032e+03, - -0.22425236259836577801e+03, - 0.73672679664177227465e+01, - 0.22899731644298012156e+03, - -0.20361878519130993936e+03, - -0.42196471002175165665e+02, - 0.25189644009745535413e+03, - -0.16859766983456214007e+03, - -0.10025952833237604978e+03, - 0.26533871955554121769e+03, - -0.11570449407323340552e+03, - -0.16241481885561512399e+03, - 0.26139981836685132066e+03, - -0.43424999822749875023e+02, - -0.22053787713099509915e+03, - 0.23149426894205043936e+03, - 0.45711736013227572073e+02, - -0.26236115713757061485e+03, - 0.16863520535586226856e+03, - 0.14277731657252445530e+03, - -0.27243404276172077516e+03, - 0.71162460697595292913e+02, - 0.23071835180366619511e+03, - -0.23547218292180966159e+03, - -0.52489044734635974976e+02, - 0.28491529762920936264e+03, - -0.14279071667077630536e+03, - -0.17964179410916671031e+03, - 0.27818638737438249109e+03, - -0.12271713027416153441e+01, - -0.27314071901352548366e+03, - 0.19184265164607830911e+03, - 0.15864207164608760081e+03, - -0.28942677310622087816e+03, - 0.31662064957069599558e+02, - 0.28158848535574639982e+03, - -0.19795671597596594893e+03, - -0.15787096935295892308e+03, - 0.30259491830286640379e+03, - -0.87879111340535711605e+01, - -0.29432744538104407184e+03, - 0.18183810285262930506e+03, - 0.20642573613073449224e+03, - -0.28805155385799156420e+03, - -0.50461636984143012796e+02, - 0.32595605719437531889e+03, - -0.10477762794294247328e+03, - -0.27234247624527040443e+03, - 0.24360172254609960873e+03, - 0.17112748296487177413e+03, - -0.31724324578882260539e+03, - -0.27928258020775498238e+02, - 0.34148691427745478677e+03, - -0.10433848749293176184e+03, - -0.29866927265346555487e+03, - 0.22716455449331832028e+03, - 0.22737864214089481152e+03, - -0.30410773544374563926e+03, - -0.12166397849273610632e+03, - 0.35549612316750256014e+03, - 0.21636641587040845280e+02, - -0.36118443556577949494e+03, - 0.84078039582238275784e+02, - 0.35264093119705796653e+03, - -0.16423252312898401328e+03, - -0.31544521406094372651e+03, - 0.23940322057602526229e+03, - 0.28227139947816903032e+03, - -0.28606273548898104764e+03, - -0.23705656111610119297e+03, - 0.33004264438942971083e+03, - 0.20940946650317624744e+03, - -0.35059926780055116069e+03, - -0.18004908287047112481e+03, - 0.37407587447481290610e+03, - 0.17578738996299580322e+03, - -0.37850337256222076121e+03, - -0.17527713021106893621e+03, - 0.38752835787438931447e+03, - 0.20366480581182196374e+03, - -0.37538275652184040609e+03, - -0.23782822890036749186e+03, - 0.36094995448288642592e+03, - 0.29993092355702509622e+03, - -0.31331336475337201364e+03, - -0.36145151084003424558e+03, - 0.24684592963308793401e+03, - 0.43524640317479509122e+03, - -0.12922260776796454707e+03, - -0.47894142749683624061e+03, - -0.19512449319080776178e+02, - 0.48829966453271828186e+03, - 0.21322813921154678951e+03, - -0.40672964326398340518e+03, - -0.39580996385103890134e+03, - 0.23175422413078879913e+03, - 0.52891765865708532601e+03, - 0.55149908166084067318e+02, - -0.50643404316442695290e+03, - -0.36400062793624755386e+03, - 0.28686048664760937754e+03, - 0.57530799457461193924e+03, - 0.12727639021994149005e+03, - -0.49007369064799564740e+03, - -0.52258345613509186478e+03, - 0.64285536804149060686e+02, - 0.59834035883025717339e+03, - 0.49647651376508957810e+03, - -0.12640841635558706457e+03, - -0.63841667979346686934e+03, - -0.55335692412186210731e+03, - 0.38542346617900918204e+02, - 0.61875466671986907841e+03, - 0.72303904146594834401e+03, - 0.29129839768527847355e+03, - -0.35473179248223726745e+03, - -0.79540117423909066474e+03, - -0.79174268942797414184e+03, - -0.37973164808864618180e+03, - 0.21901877743054629377e+03, - 0.75670380605453408407e+03, - 0.10773621962972008532e+04, - 0.11492322311050340886e+04, - 0.10306772877796238390e+04, - 0.81364073587779307672e+03, - 0.57909620135935517737e+03, - 0.37704375042931792450e+03, - 0.22675600251593206735e+03, - 0.12683215493614439140e+03, - 0.66314250007619946814e+02, - 0.32536681435413470354e+02, - 0.15025925359784931601e+02, - 0.65471290556018093554e+01, - 0.26967097755197202424e+01, - 0.10516210098556102448e+01, + -0.5343159747689985295e+2, + 0.56771586444948404448e+2, + -0.92317420327720412843e+2, + -0.41574191146077843939e+2, + -0.81414194227851012897e+2, + -0.25330960315386644766e+3, + -0.21819810134768832199e+3, + -0.44385879868391367609e+3, + -0.52568768564132960819e+3, + -0.51623102679522025937e+3, + -0.61060604514233693862e+3, + -0.32342298020239570633e+3, + -0.11411529518635464342e+3, + 0.14704620562620053192e+3, + 0.47016844565513844145e+3, + 0.33511847767598487735e+3, + 0.20166920438942725013e+3, + -0.11346782176517565688e+3, + -0.42844456323403187525e+3, + -0.23659416375336954275e+3, + -0.54701767712985436276e+2, + 0.26157921731806379739e+3, + 0.38273862490314314755e+3, + -0.10261318905573306282e+2, + -0.19795428854326746659e+3, + -0.29410769874315212746e+3, + -0.84737399981273213712e+2, + 0.33919945243981243266e+3, + 0.18870651057878015422e+3, + -0.53740081967575264343e+2, + -0.24006135822434251281e+3, + -0.21773961277534601777e+3, + 0.24838694909181833737e+3, + 0.23632753026228789395e+3, + -0.64272986213033192371e+2, + -0.18850597036795528538e+3, + -0.18416050925011151662e+3, + 0.22622007483972708997e+3, + 0.23636400514391812067e+3, + -0.17756466190472602307e+3, + -0.16918168276175774167e+3, + -0.21875078907082983193e+2, + 0.21510639577459298266e+3, + 0.13697662508890525146e+3, + -0.29193004019526938464e+3, + -0.84018761309410706417e+2, + 0.20431243831422082735e+3, + 0.88553455881657498594e+2, + -0.70843789717857916344e+2, + -0.21965705301598237043e+3, + 0.10055276820688256123e+3, + 0.25865000161799179068e+3, + -0.17895654055742957667e+3, + -0.15029204081378125579e+3, + 0.10896018492739648309e+3, + 0.12063368857388891797e+3, + -0.70216756546590497479e+1, + -0.22677812187149493184e+3, + 0.69926453961873534126e+2, + 0.24889704528024415708e+3, + -0.18252222295036582977e+3, + -0.12470833832172877464e+3, + 0.14575135418212755667e+3, + 0.69699066064411510979e+2, + -0.60965026541031136276e+2, + -0.15221342374186409074e+3, + 0.12746970703317835216e+3, + 0.1621063930559313917e+3, + -0.25138025850827247609e+3, + -0.13546471956672407444e+2, + 0.22211568177565666815e+3, + -0.91457904608737521812e+2, + -0.10343609243042625678e+3, + 0.45297849071198704962e+2, + 0.10373128073723755449e+3, + -0.26742158204978895952e+2, + -0.17833722368972843242e+3, + 0.15518068320155452966e+3, + 0.11466116130678406648e+3, + -0.25620088076440265468e+3, + 0.71930230117573628945e+2, + 0.17157578949256318879e+3, + -0.15622812108275437026e+3, + -0.34564129749933556468e+2, + 0.95382982026110269658e+2, + 0.24348265491094817747e+2, + -0.79214306574354623081e+2, + -0.53137787926961600249e+2, + 0.16915694080295239132e+3, + -0.52494635257707336962e+2, + -0.17833651528863154567e+3, + 0.21685452571747003958e+3, + 0.56205580311670981786e+1, + -0.21800312907821384556e+3, + 0.17047944548716600366e+3, + 0.51299613450337027132e+2, + -0.16556676412512780416e+3, + 0.69650896806482322177e+2, + 0.63496510793317177956e+2, + -0.54895112793774451632e+2, + -0.40625003381319004347e+2, + 0.45569112047121784315e+2, + 0.67281706762289388735e+2, + -0.12803789271643651659e+3, + 0.13505656539663240423e+2, + 0.16295915538023251656e+3, + -0.17733744814942357948e+3, + -0.16610256075170891421e+2, + 0.21234581542608378868e+3, + -0.18692203102092267386e+3, + -0.35562490804081370754e+2, + 0.21336159198316801167e+3, + -0.1632853062529845829e+3, + -0.41991829886429314911e+2, + 0.17597417435135304231e+3, + -0.11632800804469133027e+3, + -0.39846884959598618536e+2, + 0.11551876889447693486e+3, + -0.56335274408099884624e+2, + -0.34951166709441487512e+2, + 0.47363847073172280489e+2, + 0.76502708119402926812e+1, + -0.32352314770092100105e+2, + -0.16289103627832353993e+2, + 0.68562241039999378245e+2, + -0.35013243547874495221e+2, + -0.67642637195380842741e+2, + 0.1215297677815802615e+3, + -0.43673685823720916233e+2, + -0.10315217539740045538e+3, + 0.16379211500042507055e+3, + -0.57413915881612837211e+2, + -0.12261173084284982338e+3, + 0.19441694563295095577e+3, + -0.74457025654213879307e+2, + -0.1279800855284385932e+3, + 0.21389508946754463636e+3, + -0.92890147670167635852e+2, + -0.1222781853066899771e+3, + 0.22367941609447055384e+3, + -0.11115094641220473193e+3, + -0.10872921796946056361e+3, + 0.22573198658246462855e+3, + -0.12825340078938168631e+3, + -0.90193911072183652777e+2, + 0.22213117566536280378e+3, + -0.14379995648295832211e+3, + -0.68879710936650042186e+2, + 0.21477070250216669933e+3, + -0.1578534807574712886e+3, + -0.46267072118155091687e+2, + 0.20516195695039399993e+3, + -0.17073888757950314243e+3, + -0.23188022145741470581e+2, + 0.19433525289206048114e+3, + -0.18282712888348473257e+3, + 0.33900859137146120759e+2, + 0.15247097089110434354e+3, + -0.22071438956036027434e+3, + 0.87952797522166548561e+2, + 0.13999746039839826039e+3, + -0.22567764673205746817e+3, + 0.10205061465911919072e+3, + 0.13187461985134794418e+3, + -0.22933660733052988689e+3, + 0.11014355071505114836e+3, + 0.12905520843702433353e+3, + -0.23249298313648094449e+3, + 0.11212570754287777675e+3, + 0.1321657579178091737e+3, + -0.23538822625480861461e+3, + 0.10761402099252019582e+3, + 0.14151214654981512808e+3, + -0.23760765552593102257e+3, + 0.9589716712290963585e+2, + 0.15700336692371828917e+3, + -0.23798056356314845061e+3, + 0.75979070738343295943e+2, + 0.17797320324827035165e+3, + -0.23449179830626476928e+3, + 0.46754463901942209247e+2, + 0.20289304116115764032e+3, + -0.22425236259836577801e+3, + 0.73672679664177227465e+1, + 0.22899731644298012156e+3, + -0.20361878519130993936e+3, + -0.42196471002175165665e+2, + 0.25189644009745535413e+3, + -0.16859766983456214007e+3, + -0.10025952833237604978e+3, + 0.26533871955554121769e+3, + -0.11570449407323340552e+3, + -0.16241481885561512399e+3, + 0.26139981836685132066e+3, + -0.43424999822749875023e+2, + -0.22053787713099509915e+3, + 0.23149426894205043936e+3, + 0.45711736013227572073e+2, + -0.26236115713757061485e+3, + 0.16863520535586226856e+3, + 0.1427773165725244553e+3, + -0.27243404276172077516e+3, + 0.71162460697595292913e+2, + 0.23071835180366619511e+3, + -0.23547218292180966159e+3, + -0.52489044734635974976e+2, + 0.28491529762920936264e+3, + -0.14279071667077630536e+3, + -0.17964179410916671031e+3, + 0.27818638737438249109e+3, + -0.12271713027416153441e+1, + -0.27314071901352548366e+3, + 0.19184265164607830911e+3, + 0.15864207164608760081e+3, + -0.28942677310622087816e+3, + 0.31662064957069599558e+2, + 0.28158848535574639982e+3, + -0.19795671597596594893e+3, + -0.15787096935295892308e+3, + 0.30259491830286640379e+3, + -0.87879111340535711605e+1, + -0.29432744538104407184e+3, + 0.18183810285262930506e+3, + 0.20642573613073449224e+3, + -0.2880515538579915642e+3, + -0.50461636984143012796e+2, + 0.32595605719437531889e+3, + -0.10477762794294247328e+3, + -0.27234247624527040443e+3, + 0.24360172254609960873e+3, + 0.17112748296487177413e+3, + -0.31724324578882260539e+3, + -0.27928258020775498238e+2, + 0.34148691427745478677e+3, + -0.10433848749293176184e+3, + -0.29866927265346555487e+3, + 0.22716455449331832028e+3, + 0.22737864214089481152e+3, + -0.30410773544374563926e+3, + -0.12166397849273610632e+3, + 0.35549612316750256014e+3, + 0.2163664158704084528e+2, + -0.36118443556577949494e+3, + 0.84078039582238275784e+2, + 0.35264093119705796653e+3, + -0.16423252312898401328e+3, + -0.31544521406094372651e+3, + 0.23940322057602526229e+3, + 0.28227139947816903032e+3, + -0.28606273548898104764e+3, + -0.23705656111610119297e+3, + 0.33004264438942971083e+3, + 0.20940946650317624744e+3, + -0.35059926780055116069e+3, + -0.18004908287047112481e+3, + 0.3740758744748129061e+3, + 0.17578738996299580322e+3, + -0.37850337256222076121e+3, + -0.17527713021106893621e+3, + 0.38752835787438931447e+3, + 0.20366480581182196374e+3, + -0.37538275652184040609e+3, + -0.23782822890036749186e+3, + 0.36094995448288642592e+3, + 0.29993092355702509622e+3, + -0.31331336475337201364e+3, + -0.36145151084003424558e+3, + 0.24684592963308793401e+3, + 0.43524640317479509122e+3, + -0.12922260776796454707e+3, + -0.47894142749683624061e+3, + -0.19512449319080776178e+2, + 0.48829966453271828186e+3, + 0.21322813921154678951e+3, + -0.40672964326398340518e+3, + -0.39580996385103890134e+3, + 0.23175422413078879913e+3, + 0.52891765865708532601e+3, + 0.55149908166084067318e+2, + -0.5064340431644269529e+3, + -0.36400062793624755386e+3, + 0.28686048664760937754e+3, + 0.57530799457461193924e+3, + 0.12727639021994149005e+3, + -0.4900736906479956474e+3, + -0.52258345613509186478e+3, + 0.64285536804149060686e+2, + 0.59834035883025717339e+3, + 0.4964765137650895781e+3, + -0.12640841635558706457e+3, + -0.63841667979346686934e+3, + -0.55335692412186210731e+3, + 0.38542346617900918204e+2, + 0.61875466671986907841e+3, + 0.72303904146594834401e+3, + 0.29129839768527847355e+3, + -0.35473179248223726745e+3, + -0.79540117423909066474e+3, + -0.79174268942797414184e+3, + -0.3797316480886461818e+3, + 0.21901877743054629377e+3, + 0.75670380605453408407e+3, + 0.10773621962972008532e+4, + 0.11492322311050340886e+4, + 0.1030677287779623839e+4, + 0.81364073587779307672e+3, + 0.57909620135935517737e+3, + 0.3770437504293179245e+3, + 0.22675600251593206735e+3, + 0.1268321549361443914e+3, + 0.66314250007619946814e+2, + 0.32536681435413470354e+2, + 0.15025925359784931601e+2, + 0.65471290556018093554e+1, + 0.26967097755197202424e+1, + 0.10516210098556102448e+1, 0.38874228870186178231, - 0.13635405420498769580, - 0.45416292656994025623e-01, - 0.14372962316375331726e-01, - 0.43236947639012464004e-02, - 0.12366811858909635378e-02, - 0.33636933924637843008e-03, - 0.87003942368199242599e-04, - 0.21398439658262217306e-04, - 0.50032624282119772966e-05, - 0.11117607720149642054e-05, - 0.23467501846789328525e-06, - 0.47030704955192984118e-07, - 0.89426592741012678386e-08, - 0.16120616698129359055e-08, - 0.27525202659612138208e-09, + 0.1363540542049876958, + 0.45416292656994025623e-1, + 0.14372962316375331726e-1, + 0.43236947639012464004e-2, + 0.12366811858909635378e-2, + 0.33636933924637843008e-3, + 0.87003942368199242599e-4, + 0.21398439658262217306e-4, + 0.50032624282119772966e-5, + 0.11117607720149642054e-5, + 0.23467501846789328525e-6, + 0.47030704955192984118e-7, + 0.89426592741012678386e-8, + 0.16120616698129359055e-8, + 0.27525202659612138208e-9, 0.44469135728497591491e-10, 0.67896617984374584474e-11, 0.97838943229246235314e-12, @@ -28266,7 +28268,7 @@ function ESERK4ConstantCache(zprev) 0.13937536912970879046e-20, 0.99122863582198597733e-22, 0.64288446069101277669e-23, - 0.37768636908939022300e-24, + 0.377686369089390223e-24, 0.19936807401021074911e-25, 0.93632859038201914269e-27, 0.38648999900147639284e-28, @@ -28277,221 +28279,221 @@ function ESERK4ConstantCache(zprev) 0.30249468731971744631e-36, 0.29275762599032078322e-38, 0.14023892331232994203e-40, - -0.13602817193372970534e-02, - 0.29667136575787411874e-02, - -0.44627917965843295553e-02, - 0.42872920658554901710e-02, - -0.22551428731654695262e-02, - -0.36746654631483661492e-02, - 0.11313850637414806996e-01, - -0.19951499138193065641e-01, - 0.25628373409563802443e-01, - -0.27782550998377661400e-01, - 0.24575214085219423271e-01, - -0.18660846099284752325e-01, - 0.11118150213993534953e-01, - -0.59614116220539341978e-02, - 0.35333945542562637462e-02, - -0.54321019923764457191e-02, - 0.90468867276322917359e-02, - -0.13792005770655018509e-01, - 0.16493874571029357862e-01, - -0.17650192239827569574e-01, - 0.16069733029219143705e-01, - -0.14042786874616398213e-01, - 0.11128515165979322582e-01, - -0.91302979062111312009e-02, - 0.63967917526500956554e-02, - -0.36866037544156494109e-02, - -0.79359813058910947271e-03, - 0.53699017053675038302e-02, - -0.10385286745602864689e-01, - 0.13083314936386978775e-01, - -0.13850707001347750333e-01, - 0.11254280962620840864e-01, - -0.77005823265517709536e-02, - 0.34419909049577313877e-02, - -0.13210236591028271663e-02, - 0.50795761771218952019e-03, - -0.18163496148315774487e-02, - 0.25741049190690220780e-02, - -0.30132769397089483043e-02, - 0.15253577927378727131e-02, - -0.46042598220844883515e-03, - 0.95074614401765580006e-04, - -0.31030630758061387986e-02, - 0.80761285966169521489e-02, - -0.14432656593381639268e-01, - 0.18161864995522612048e-01, - -0.16990045584374547510e-01, - 0.10740165666109319914e-01, - 0.24851179375663403313e-02, - -0.95564571008962748144e-02, - 0.26180246211208089979e-01, - -0.91268064261209140564e-02, - 0.32051026062267971850e-01, - 0.27769799410190407207e-01, - 0.34501713856415296144e-01, - 0.69934522106783358897e-01, - 0.55434465971835100717e-01, - 0.71326504928865622213e-01, - 0.61255483761920519192e-01, - 0.19808289191191773976e-01, - 0.32476643170175579708e-02, - -0.37576077220324514971e-01, - -0.59791135920816293470e-01, - -0.24995466111523048647e-01, - -0.18555287669872227302e-01, - 0.34477831266227082496e-01, - 0.53462469397929313075e-01, - 0.75170335850005430209e-02, - 0.12774779152551554717e-01, - -0.60805947342052205085e-01, - -0.18805193944718044674e-01, - -0.12541600521021971631e-02, - 0.35513044731765773532e-01, - 0.29885448648230970858e-01, - 0.21454081515361919489e-04, - -0.45740430875089631291e-01, - -0.12104824396034151793e-01, - 0.55139823738800889524e-02, - 0.36040790847075968029e-01, - 0.18870864713917783612e-01, - -0.38189629542664978168e-01, - -0.13885417594734926830e-01, - -0.83550843253224326562e-02, - 0.47264148278606019082e-01, - -0.57130587509393437190e-02, - -0.32424305985655505619e-02, - -0.48647195578303187302e-01, - 0.35117682793392175633e-01, - 0.14662019281445467719e-01, - 0.30956425573202398828e-02, - -0.20699692441421117112e-01, - -0.23917858263394004698e-01, - 0.34722925354805533882e-01, - 0.17413877187616933623e-01, - -0.28687255243298747515e-01, - -0.75200279427427496257e-02, - 0.15349292352431205370e-02, - 0.25266454327670714169e-01, - 0.49397309044123798721e-02, - -0.47745718233586406654e-01, - 0.26859411956889508305e-01, - 0.98714966712740402632e-02, - 0.47309429957265187322e-02, - -0.24748673329286933337e-01, - -0.17013535146965556247e-02, - 0.23010682926255264513e-01, - 0.64001571963987228739e-02, - -0.30947449903314203090e-01, - 0.23977514912974237996e-02, - 0.28020712135112785246e-01, - -0.91983256924234417518e-02, - -0.18400792552254879864e-01, - 0.69284585866313235653e-02, - 0.10151832113563560855e-01, - 0.10852362302710935257e-01, - -0.37113724048762924967e-01, - 0.19316122464338305459e-01, - 0.16520954942696435691e-01, - -0.13080538459234642562e-01, - -0.20698915228782113068e-01, - 0.28763643518103627905e-01, - -0.29628090728487255917e-02, - -0.11646094388356682814e-01, - 0.45948839681703381084e-04, - 0.12860249465523659797e-03, - 0.29073272192685493259e-01, - -0.48661650947647051846e-01, - 0.24639734697281801684e-01, - 0.14977998675578524726e-01, - -0.21796800002549538561e-01, - -0.13560697223909438328e-02, - 0.10470941292144014811e-01, - 0.95671308166462229461e-02, - -0.26464641715616916973e-01, - 0.15629946154325776581e-01, - 0.26052422993306889425e-02, - 0.57366136531596210058e-03, - -0.15207677954953676205e-01, - 0.94587644464999599825e-02, - 0.17221222763288194374e-01, - -0.28560817027120741912e-01, - 0.31935178303123140132e-02, - 0.32352617401275214626e-01, - -0.37669240797590486380e-01, - 0.10768545155074438560e-01, - 0.12810749835239975888e-01, - -0.89534676381476177576e-02, - -0.74528930634454254936e-02, - 0.95047343804905426445e-02, - 0.32152937830144316493e-02, - -0.82929426939013627801e-02, - -0.40412210928755746414e-02, - 0.16550778818012180926e-01, - -0.11169559014840324193e-01, - -0.37246055014275593863e-02, - 0.44122094247982983697e-02, - 0.13554944962400830230e-01, - -0.25698598319141310181e-01, - 0.87782101780028865684e-02, - 0.27402478923500072500e-01, - -0.48282683797452145835e-01, - 0.33708283670869455817e-01, - -0.65712127106305664309e-03, - -0.17309201900889064490e-01, - 0.79770689824159059234e-02, - 0.86134130985963588273e-02, - -0.65677798175946613957e-02, - -0.15690833989170937385e-01, - 0.35684342952776226809e-01, - -0.33964552913062280581e-01, - 0.14484786827603332582e-01, - 0.31335663093404486114e-02, - -0.66932883482276606113e-02, - 0.17231351381100158161e-02, - -0.80493869496763831143e-04, - 0.40446493201792416139e-02, - -0.57352930120862155236e-02, - 0.51814156964003042912e-04, - 0.70944221997946057406e-02, - -0.61493224482264147862e-02, - -0.31153394366624279598e-02, - 0.10115244442008845122e-01, - -0.62069438024022873315e-02, - -0.38798030330914451934e-02, - 0.65250189202574332414e-02, - 0.45142302632787782712e-02, - -0.19078555507669740093e-01, - 0.20385292093399284136e-01, - -0.39057189412471586369e-02, - -0.15774208094440085592e-01, - 0.18809732043276922858e-01, - -0.78529951746091682541e-03, - -0.21981423677539777689e-01, - 0.28804018515106149384e-01, - -0.15902214209251176735e-01, - 0.91830621381085739217e-04, - -0.72268684004341845160e-03, - 0.18626272262933410429e-01, - -0.34350514492304272396e-01, - 0.27943570617335485723e-01, - 0.54788718365772870467e-01, - -0.37587567227317139618e-01, + -0.13602817193372970534e-2, + 0.29667136575787411874e-2, + -0.44627917965843295553e-2, + 0.4287292065855490171e-2, + -0.22551428731654695262e-2, + -0.36746654631483661492e-2, + 0.11313850637414806996e-1, + -0.19951499138193065641e-1, + 0.25628373409563802443e-1, + -0.277825509983776614e-1, + 0.24575214085219423271e-1, + -0.18660846099284752325e-1, + 0.11118150213993534953e-1, + -0.59614116220539341978e-2, + 0.35333945542562637462e-2, + -0.54321019923764457191e-2, + 0.90468867276322917359e-2, + -0.13792005770655018509e-1, + 0.16493874571029357862e-1, + -0.17650192239827569574e-1, + 0.16069733029219143705e-1, + -0.14042786874616398213e-1, + 0.11128515165979322582e-1, + -0.91302979062111312009e-2, + 0.63967917526500956554e-2, + -0.36866037544156494109e-2, + -0.79359813058910947271e-3, + 0.53699017053675038302e-2, + -0.10385286745602864689e-1, + 0.13083314936386978775e-1, + -0.13850707001347750333e-1, + 0.11254280962620840864e-1, + -0.77005823265517709536e-2, + 0.34419909049577313877e-2, + -0.13210236591028271663e-2, + 0.50795761771218952019e-3, + -0.18163496148315774487e-2, + 0.2574104919069022078e-2, + -0.30132769397089483043e-2, + 0.15253577927378727131e-2, + -0.46042598220844883515e-3, + 0.95074614401765580006e-4, + -0.31030630758061387986e-2, + 0.80761285966169521489e-2, + -0.14432656593381639268e-1, + 0.18161864995522612048e-1, + -0.1699004558437454751e-1, + 0.10740165666109319914e-1, + 0.24851179375663403313e-2, + -0.95564571008962748144e-2, + 0.26180246211208089979e-1, + -0.91268064261209140564e-2, + 0.3205102606226797185e-1, + 0.27769799410190407207e-1, + 0.34501713856415296144e-1, + 0.69934522106783358897e-1, + 0.55434465971835100717e-1, + 0.71326504928865622213e-1, + 0.61255483761920519192e-1, + 0.19808289191191773976e-1, + 0.32476643170175579708e-2, + -0.37576077220324514971e-1, + -0.5979113592081629347e-1, + -0.24995466111523048647e-1, + -0.18555287669872227302e-1, + 0.34477831266227082496e-1, + 0.53462469397929313075e-1, + 0.75170335850005430209e-2, + 0.12774779152551554717e-1, + -0.60805947342052205085e-1, + -0.18805193944718044674e-1, + -0.12541600521021971631e-2, + 0.35513044731765773532e-1, + 0.29885448648230970858e-1, + 0.21454081515361919489e-4, + -0.45740430875089631291e-1, + -0.12104824396034151793e-1, + 0.55139823738800889524e-2, + 0.36040790847075968029e-1, + 0.18870864713917783612e-1, + -0.38189629542664978168e-1, + -0.1388541759473492683e-1, + -0.83550843253224326562e-2, + 0.47264148278606019082e-1, + -0.5713058750939343719e-2, + -0.32424305985655505619e-2, + -0.48647195578303187302e-1, + 0.35117682793392175633e-1, + 0.14662019281445467719e-1, + 0.30956425573202398828e-2, + -0.20699692441421117112e-1, + -0.23917858263394004698e-1, + 0.34722925354805533882e-1, + 0.17413877187616933623e-1, + -0.28687255243298747515e-1, + -0.75200279427427496257e-2, + 0.1534929235243120537e-2, + 0.25266454327670714169e-1, + 0.49397309044123798721e-2, + -0.47745718233586406654e-1, + 0.26859411956889508305e-1, + 0.98714966712740402632e-2, + 0.47309429957265187322e-2, + -0.24748673329286933337e-1, + -0.17013535146965556247e-2, + 0.23010682926255264513e-1, + 0.64001571963987228739e-2, + -0.3094744990331420309e-1, + 0.23977514912974237996e-2, + 0.28020712135112785246e-1, + -0.91983256924234417518e-2, + -0.18400792552254879864e-1, + 0.69284585866313235653e-2, + 0.10151832113563560855e-1, + 0.10852362302710935257e-1, + -0.37113724048762924967e-1, + 0.19316122464338305459e-1, + 0.16520954942696435691e-1, + -0.13080538459234642562e-1, + -0.20698915228782113068e-1, + 0.28763643518103627905e-1, + -0.29628090728487255917e-2, + -0.11646094388356682814e-1, + 0.45948839681703381084e-4, + 0.12860249465523659797e-3, + 0.29073272192685493259e-1, + -0.48661650947647051846e-1, + 0.24639734697281801684e-1, + 0.14977998675578524726e-1, + -0.21796800002549538561e-1, + -0.13560697223909438328e-2, + 0.10470941292144014811e-1, + 0.95671308166462229461e-2, + -0.26464641715616916973e-1, + 0.15629946154325776581e-1, + 0.26052422993306889425e-2, + 0.57366136531596210058e-3, + -0.15207677954953676205e-1, + 0.94587644464999599825e-2, + 0.17221222763288194374e-1, + -0.28560817027120741912e-1, + 0.31935178303123140132e-2, + 0.32352617401275214626e-1, + -0.3766924079759048638e-1, + 0.1076854515507443856e-1, + 0.12810749835239975888e-1, + -0.89534676381476177576e-2, + -0.74528930634454254936e-2, + 0.95047343804905426445e-2, + 0.32152937830144316493e-2, + -0.82929426939013627801e-2, + -0.40412210928755746414e-2, + 0.16550778818012180926e-1, + -0.11169559014840324193e-1, + -0.37246055014275593863e-2, + 0.44122094247982983697e-2, + 0.1355494496240083023e-1, + -0.25698598319141310181e-1, + 0.87782101780028865684e-2, + 0.274024789235000725e-1, + -0.48282683797452145835e-1, + 0.33708283670869455817e-1, + -0.65712127106305664309e-3, + -0.1730920190088906449e-1, + 0.79770689824159059234e-2, + 0.86134130985963588273e-2, + -0.65677798175946613957e-2, + -0.15690833989170937385e-1, + 0.35684342952776226809e-1, + -0.33964552913062280581e-1, + 0.14484786827603332582e-1, + 0.31335663093404486114e-2, + -0.66932883482276606113e-2, + 0.17231351381100158161e-2, + -0.80493869496763831143e-4, + 0.40446493201792416139e-2, + -0.57352930120862155236e-2, + 0.51814156964003042912e-4, + 0.70944221997946057406e-2, + -0.61493224482264147862e-2, + -0.31153394366624279598e-2, + 0.10115244442008845122e-1, + -0.62069438024022873315e-2, + -0.38798030330914451934e-2, + 0.65250189202574332414e-2, + 0.45142302632787782712e-2, + -0.19078555507669740093e-1, + 0.20385292093399284136e-1, + -0.39057189412471586369e-2, + -0.15774208094440085592e-1, + 0.18809732043276922858e-1, + -0.78529951746091682541e-3, + -0.21981423677539777689e-1, + 0.28804018515106149384e-1, + -0.15902214209251176735e-1, + 0.91830621381085739217e-4, + -0.7226868400434184516e-3, + 0.18626272262933410429e-1, + -0.34350514492304272396e-1, + 0.27943570617335485723e-1, + 0.54788718365772870467e-1, + -0.37587567227317139618e-1, -0.16058959527968102998, 0.23158960005636364254, - -0.64152135472139007466e-01, + -0.64152135472139007466e-1, -0.24678280928183340959, - 0.40933808295042717340, - -0.27660573024033718870, - -0.63819106910158657220e-01, + 0.4093380829504271734, + -0.2766057302403371887, + -0.6381910691015865722e-1, 0.29625105566901693832, -0.24379409102029586665, - -0.16633334443594206126e-01, + -0.16633334443594206126e-1, 0.16443153167561552763, - -0.30192324338913091586e-01, - -0.27436614461312147650, + -0.30192324338913091586e-1, + -0.2743661446131214765, 0.39077294222761926878, -0.15111208863392869284, -0.28067568639766787841, @@ -28505,25 +28507,25 @@ function ESERK4ConstantCache(zprev) -0.16567187016757248252, -0.22455296031668134371, 0.28500010047673257629, - 0.52256340851624928645e-01, + 0.52256340851624928645e-1, -0.44437709541279585279, 0.45178765983293905917, - -0.78669858961083402593e-01, + -0.78669858961083402593e-1, -0.31004572781513001223, 0.34814462718096811367, -0.12048399861571000569, - -0.47628624393324554831e-01, - -0.53049565016636275605e-01, + -0.47628624393324554831e-1, + -0.53049565016636275605e-1, 0.22575820533754883956, -0.21969646004461562683, - 0.18837685453431358279e-01, - 0.90886299019558886014e-01, - 0.13570094847735119509e-01, + 0.18837685453431358279e-1, + 0.90886299019558886014e-1, + 0.13570094847735119509e-1, -0.15836596896109125798, - 0.55162867569905307819e-01, + 0.55162867569905307819e-1, 0.20722547208261382634, -0.28205765891362749587, - -0.28402972045075726426e-01, + -0.28402972045075726426e-1, 0.38410916201078060261, -0.34140547499672280196, -0.12219718087065936651, @@ -28536,7 +28538,7 @@ function ESERK4ConstantCache(zprev) 0.13892800642915859033, 0.13623290178718028276, -0.19788265952579695006, - -0.32739181688925977909e-01, + -0.32739181688925977909e-1, 0.11827213206032649584, 0.14079658439433850869, -0.39045902404226329185, @@ -28549,10 +28551,10 @@ function ESERK4ConstantCache(zprev) -0.28993272301639827493, 0.39031256313889933773, -0.12305080368034379545, - 0.64290536020453384336e-01, + 0.64290536020453384336e-1, -0.34799446226430230666, 0.37813055702469478003, - 0.72805901762560590318e-01, + 0.72805901762560590318e-1, -0.41466570258374030322, 0.10481328648139376369, 0.35146582722303854052, @@ -28561,23 +28563,23 @@ function ESERK4ConstantCache(zprev) 0.33250633315615785168, 0.13007984973825942321, -0.29776017412833993836, - -0.52498452804575990172e-01, + -0.52498452804575990172e-1, 0.14178944217121600135, - 0.27598087001093846160, + 0.2759808700109384616, -0.40106333994063420034, -0.20258748562395509363, 0.62976626586465567215, - -0.22621858755931040230, + -0.2262185875593104023, -0.27214078066963182101, - 0.70307183929337241368e-01, + 0.70307183929337241368e-1, 0.16874868075248872223, 0.23871849288946619949, -0.55848269807496420114, - 0.74934489744620793802e-02, + 0.74934489744620793802e-2, 0.51276496628550560786, -0.12501392452822243651, -0.31215072174600172472, - -0.94701677362142536176e-01, + -0.94701677362142536176e-1, 0.38063812636471022754, 0.15988610971046221532, -0.40894371685795527505, @@ -28586,11 +28588,11 @@ function ESERK4ConstantCache(zprev) 0.41686874487991293359, -0.49812361931641552237, -0.15832572648994294728, - -0.64195901825841103494e-02, + -0.64195901825841103494e-2, 0.48993484174007689846, 0.12152933799519327618, -0.70073329733348632686, - 0.22486789202509967212e-01, + 0.22486789202509967212e-1, 0.25106029662689227644, 0.40752945817780128479, -0.12641616233424179949, @@ -28598,14 +28600,14 @@ function ESERK4ConstantCache(zprev) -0.13431378850413916437, 0.58965717039665732635, 0.22333995163895495328, - -0.60865485026182011841e-01, - -0.55460757420096618020, + -0.60865485026182011841e-1, + -0.5546075742009661802, -0.40022018242688761624, 0.66839755658932464844, - 0.27745371008946245750, + 0.2774537100894624575, 0.25101983654258963607, -0.47599907244306693954, - -0.75829637160002083540, + -0.7582963716000208354, 0.22039370118223566841, 0.24187985562679142904, 0.80949305970314278103, @@ -28619,60 +28621,60 @@ function ESERK4ConstantCache(zprev) 0.45269462585150710421, 0.20738882045885762007, -0.56370989417647965336, - -0.89571435040496716340, - -0.10107922145825607441e+01, - -0.11909065213933831551e+01, + -0.8957143504049671634, + -0.10107922145825607441e+1, + -0.11909065213933831551e+1, -0.79785907642634512627, -0.73550043463194891835, -0.51045590293704801166, -0.22388799116217744656, -0.25098346985587205449, - -0.98306143942401003066e-01, - 0.35481251869629554241e-01, + -0.98306143942401003066e-1, + 0.35481251869629554241e-1, -0.17553125086790455356, 0.13561812609123943818, - -0.81676576038720485884e-01, - -0.31709783494019566641e-01, + -0.81676576038720485884e-1, + -0.31709783494019566641e-1, 0.11531630960573860389, -0.13586739808564193832, - 0.73074735614795563454e-01, - 0.42829340304410642992e-01, + 0.73074735614795563454e-1, + 0.42829340304410642992e-1, -0.15295634631724683294, 0.19494949274430842245, -0.13485817543830913579, - -0.13841930703346171788e-01, + -0.13841930703346171788e-1, 0.19446015809557429255, -0.33100678358452573224, 0.36329467572838308742, -0.27404914824836040799, - 0.97808665950169890180e-01, - 0.95140518150134245623e-01, + 0.9780866595016989018e-1, + 0.95140518150134245623e-1, -0.22975092641803185334, 0.26004405180180062418, - -0.18781618406336539340, - 0.60136293367890239492e-01, - 0.54890237320870241544e-01, + -0.1878161840633653934, + 0.60136293367890239492e-1, + 0.54890237320870241544e-1, -0.10026318307427413423, - 0.57043828991491150882e-01, - 0.48231414036908136500e-01, + 0.57043828991491150882e-1, + 0.482314140369081365e-1, -0.15684782382975676063, 0.20712860000265739813, -0.16396881028782486767, - 0.36592742001881707614e-01, + 0.36592742001881707614e-1, 0.12517969704184656043, -0.25276105339469956412, 0.29004430405629355594, -0.21841286842399346146, - 0.65546772889784568616e-01, + 0.65546772889784568616e-1, 0.10701591336018582978, -0.23062838460105161698, 0.25958531218529157236, -0.19009685477539586818, - 0.60897120660060873043e-01, - 0.65297960017796030652e-01, + 0.60897120660060873043e-1, + 0.65297960017796030652e-1, -0.13013492928941045035, 0.10571764012316026138, - -0.62743435147994738171e-02, + -0.62743435147994738171e-2, -0.11899547578188887642, 0.20889432436091262546, -0.21813270669708184624, @@ -28680,20 +28682,20 @@ function ESERK4ConstantCache(zprev) 0.15907522155619518989, -0.51285303258992276376, 0.85318183113893242275, - -0.98703021488417941320, + -0.9870302148841794132, 0.90507110285593028731, -0.40816662933227604304, -0.23143023347310989757, 0.93555873623554874907, - -0.12954212189500458052e+01, - 0.13102575526839428388e+01, + -0.12954212189500458052e+1, + 0.13102575526839428388e+1, -0.83563065307844708318, 0.20588206138986014926, 0.46842652924463212827, -0.79207888426766348555, 0.81079049454607554637, -0.42496465807866840025, - -0.24719994495409385732e-01, + -0.24719994495409385732e-1, 0.47714556222235915417, -0.62837867229382038392, 0.61601714821953612589, @@ -28703,2759 +28705,2759 @@ function ESERK4ConstantCache(zprev) 0.21824589422454962473, -0.25315835751227949713, 0.25607071770647904518, - 0.13805821823713605376e-01, + 0.13805821823713605376e-1, -0.37217594166102996311, 0.83317628320710834799, - -0.10502517446200840823e+01, - 0.10398633792361069439e+01, + -0.10502517446200840823e+1, + 0.10398633792361069439e+1, -0.63670590912582036847, 0.13322357652491637059, - 0.40649793440435333380, + 0.4064979344043533338, -0.63103614802185969967, 0.62494856456512470899, -0.31903605358333242403, - 0.63533539324321500197e-01, - 0.10825129087256017690, - 0.31840322860948656880e-01, + 0.63533539324321500197e-1, + 0.1082512908725601769, + 0.3184032286094865688e-1, -0.23427096581375042583, 0.44272553359357291747, -0.29712707273124577823, -0.11734378426645615534, 0.79780227514037116432, - -0.13220479160689615483e+01, - 0.14206959776754002345e+01, - -0.10196734020826891953e+01, + -0.13220479160689615483e+1, + 0.14206959776754002345e+1, + -0.10196734020826891953e+1, -0.16558250063542631625, 0.73332494578790452522, - -0.24835497510117625630e+01, + -0.2483549751011762563e+1, 0.57989728598118883696, - -0.32412484639642888951e+01, - -0.33259741539082932071e+01, - -0.37700062481615241872e+01, - -0.78472733556010512146e+01, - -0.62253553942183339487e+01, - -0.79705207397208184261e+01, - -0.68775016001923896525e+01, - -0.21819329438783876540e+01, + -0.32412484639642888951e+1, + -0.33259741539082932071e+1, + -0.37700062481615241872e+1, + -0.78472733556010512146e+1, + -0.62253553942183339487e+1, + -0.79705207397208184261e+1, + -0.68775016001923896525e+1, + -0.2181932943878387654e+1, -0.44428596299977857198, - 0.43393225009857516739e+01, - 0.65453066303989615449e+01, - 0.29044548798124916189e+01, - 0.21109335703442027032e+01, - -0.41201824073682971061e+01, - -0.54459376325782482553e+01, - -0.16702737323307852435e+01, + 0.43393225009857516739e+1, + 0.65453066303989615449e+1, + 0.29044548798124916189e+1, + 0.21109335703442027032e+1, + -0.41201824073682971061e+1, + -0.54459376325782482553e+1, + -0.16702737323307852435e+1, -0.37103735163400447528, - 0.56219764881699685333e+01, - 0.33000089217847881073e+01, + 0.56219764881699685333e+1, + 0.33000089217847881073e+1, -0.94528210869597517618, - -0.30774254751311267420e+01, - -0.40296806804289246884e+01, + -0.3077425475131126742e+1, + -0.40296806804289246884e+1, 0.47216885386906676247, - 0.48260428606610252800e+01, - 0.15024123799653485989e+01, + 0.482604286066102528e+1, + 0.15024123799653485989e+1, -0.61726461888368855391, - -0.42110027856694856041e+01, - -0.17144063986719833004e+01, - 0.36018384517228896335e+01, - 0.25346316687239167642e+01, + -0.42110027856694856041e+1, + -0.17144063986719833004e+1, + 0.36018384517228896335e+1, + 0.25346316687239167642e+1, -0.32939312383293761766, - -0.38138658253731088088e+01, - -0.93836637953120294320, - 0.19040368977638586490e+01, - 0.40706228231997565459e+01, - -0.28040929372010081622e+01, - -0.24921319773574732714e+01, + -0.38138658253731088088e+1, + -0.9383663795312029432, + 0.1904036897763858649e+1, + 0.40706228231997565459e+1, + -0.28040929372010081622e+1, + -0.24921319773574732714e+1, 0.25016059641899218713, - 0.19102773744159518010e+01, - 0.29746046923794651207e+01, - -0.41314057619735242710e+01, - -0.17392209136873479913e+01, - 0.30548756745100571486e+01, + 0.1910277374415951801e+1, + 0.29746046923794651207e+1, + -0.4131405761973524271e+1, + -0.17392209136873479913e+1, + 0.30548756745100571486e+1, 0.89311249277774740207, - -0.50030139966785180938e-01, - -0.31737888371615872174e+01, - 0.25311236118348463819e-01, - 0.45693623228916466772e+01, - -0.21068078848978619710e+01, - -0.20298764425683959445e+01, + -0.50030139966785180938e-1, + -0.31737888371615872174e+1, + 0.25311236118348463819e-1, + 0.45693623228916466772e+1, + -0.2106807884897861971e+1, + -0.20298764425683959445e+1, 0.31882372321726870634, - 0.20719485879100738579e+01, + 0.20719485879100738579e+1, 0.71064281651884664281, - -0.29311427365528683886e+01, + -0.29311427365528683886e+1, -0.47856688924367768445, - 0.32748436178619315662e+01, - -0.56223353955465835141e-01, - -0.34219795301207258653e+01, - 0.14107180302746116229e+01, - 0.15826398542785526935e+01, + 0.32748436178619315662e+1, + -0.56223353955465835141e-1, + -0.34219795301207258653e+1, + 0.14107180302746116229e+1, + 0.15826398542785526935e+1, -0.21485188905153138061, - -0.17597153891943682069e+01, + -0.17597153891943682069e+1, -0.55024833757970825765, - 0.34646958168468908745e+01, - -0.14600632256512251494e+01, - -0.25408094519872284067e+01, - 0.21032932068580256768e+01, - 0.17897330713990384776e+01, - -0.28717638906392188858e+01, - 0.22833182438443250240, - 0.11153830718063304506e+01, + 0.34646958168468908745e+1, + -0.14600632256512251494e+1, + -0.25408094519872284067e+1, + 0.21032932068580256768e+1, + 0.17897330713990384776e+1, + -0.28717638906392188858e+1, + 0.2283318243844325024, + 0.11153830718063304506e+1, 0.48391386625539822841, -0.76031275093676198296, - -0.23465563168031575714e+01, - 0.45072433136848095714e+01, - -0.19266641042134549089e+01, - -0.22734039471413014510e+01, - 0.27160884766128781109e+01, + -0.23465563168031575714e+1, + 0.45072433136848095714e+1, + -0.19266641042134549089e+1, + -0.2273403947141301451e+1, + 0.27160884766128781109e+1, 0.22231975925182584364, - -0.15496864487230772589e+01, + -0.15496864487230772589e+1, -0.47666790822799193217, - 0.22661509528852454842e+01, - -0.10607407912739439393e+01, + 0.22661509528852454842e+1, + -0.10607407912739439393e+1, -0.89186876828192929167, 0.41110162079201079122, - 0.13390560998757190525e+01, + 0.13390560998757190525e+1, -0.75469414612740437498, - -0.22419784442913126554e+01, - 0.35815279946480873541e+01, + -0.22419784442913126554e+1, + 0.35815279946480873541e+1, -0.84335891896881309826, - -0.30382358089469900797e+01, - 0.35724698281399240862e+01, + -0.30382358089469900797e+1, + 0.35724698281399240862e+1, -0.55743278554480413245, - -0.20251930321580107197e+01, - 0.14935216814118059681e+01, - 0.45343460411627650730, + -0.20251930321580107197e+1, + 0.14935216814118059681e+1, + 0.4534346041162765073, -0.76795026085074713507, -0.62135807279712351736, - 0.12111163969688196751e+01, + 0.12111163969688196751e+1, 0.10775499729154516815, - -0.14370335517939600845e+01, + -0.14370335517939600845e+1, 0.79462281225072783908, 0.84433072479741178018, -0.80198648036845943121, - -0.14164505039156289889e+01, - 0.30406485240205789466e+01, - -0.14180574464494664078e+01, - -0.24115576373948686140e+01, - 0.46309812684249207493e+01, - -0.30175999058128750718e+01, + -0.14164505039156289889e+1, + 0.30406485240205789466e+1, + -0.14180574464494664078e+1, + -0.2411557637394868614e+1, + 0.46309812684249207493e+1, + -0.30175999058128750718e+1, -0.51962621511517370632, - 0.22448595905974126907e+01, + 0.22448595905974126907e+1, -0.83814635345918198084, - -0.13931035903130675191e+01, - 0.14855591864715329553e+01, - 0.78789183548621233300, - -0.29368259088922994415e+01, - 0.27833638899254653509e+01, + -0.13931035903130675191e+1, + 0.14855591864715329553e+1, + 0.787891835486212333, + -0.29368259088922994415e+1, + 0.27833638899254653509e+1, -0.74553343106265090867, - -0.10202451973190509449e+01, - 0.11949645708624259122e+01, + -0.10202451973190509449e+1, + 0.11949645708624259122e+1, -0.43884752126333020916, 0.10673364806865143217, -0.46184739631313870278, 0.61236379846700850216, - 0.34359403172968150386e-01, + 0.34359403172968150386e-1, -0.84116170058865413761, 0.75876967948250784168, 0.22813741827910982707, -0.93617284646676535154, 0.41014932181168350933, 0.80211709424512700473, - -0.11582941229406575889e+01, - -0.49930004681633818886e-01, - 0.16825892685987589026e+01, - -0.18462317597648882916e+01, - 0.12101436691468941270e-01, - 0.22093082965948633856e+01, - -0.26123730256954149631e+01, + -0.11582941229406575889e+1, + -0.49930004681633818886e-1, + 0.16825892685987589026e+1, + -0.18462317597648882916e+1, + 0.1210143669146894127e-1, + 0.22093082965948633856e+1, + -0.26123730256954149631e+1, 0.70722041080841080429, - 0.16899266054431347772e+01, - -0.22887881795860791634e+01, + 0.16899266054431347772e+1, + -0.22887881795860791634e+1, 0.70325333196012218551, - 0.11434172301384581960e+01, - -0.10506546809998154046e+01, - -0.10930922769740876177e+01, - 0.31073653049320850705e+01, - -0.27343882885355688117e+01, - -0.27125383852555877695e+01, - 0.42879051795191251983e+01, - 0.34575702118433588872e+01, - -0.81254869740046462567e+01, - 0.39819416491134691505e+01, - 0.71592258805113901943e+01, - -0.14341644370381759543e+02, - 0.10752981101957754362e+02, - 0.17827686233749457934e+01, - -0.11256251828173473584e+02, - 0.98225785411064823194e+01, + 0.1143417230138458196e+1, + -0.10506546809998154046e+1, + -0.10930922769740876177e+1, + 0.31073653049320850705e+1, + -0.27343882885355688117e+1, + -0.27125383852555877695e+1, + 0.42879051795191251983e+1, + 0.34575702118433588872e+1, + -0.81254869740046462567e+1, + 0.39819416491134691505e+1, + 0.71592258805113901943e+1, + -0.14341644370381759543e+2, + 0.10752981101957754362e+2, + 0.17827686233749457934e+1, + -0.11256251828173473584e+2, + 0.98225785411064823194e+1, 0.78352880322962603632, - -0.80304931912068688860e+01, - 0.41743931768144291183e+01, - 0.77587907345907529688e+01, - -0.13822613480168653766e+02, - 0.64435929953780108903e+01, - 0.92684528506379244561e+01, - -0.17114031167443332748e+02, - 0.91943003088974606385e+01, - 0.76868163576118746505e+01, - -0.15732592728909185809e+02, - 0.74244743138690321160e+01, - 0.87611015767102582430e+01, - -0.14594477249071939440e+02, - 0.45406457286364112491e+01, - 0.10535437986592990356e+02, - -0.12679128465888641841e+02, + -0.8030493191206868886e+1, + 0.41743931768144291183e+1, + 0.77587907345907529688e+1, + -0.13822613480168653766e+2, + 0.64435929953780108903e+1, + 0.92684528506379244561e+1, + -0.17114031167443332748e+2, + 0.91943003088974606385e+1, + 0.76868163576118746505e+1, + -0.15732592728909185809e+2, + 0.7424474313869032116e+1, + 0.8761101576710258243e+1, + -0.1459447724907193944e+2, + 0.45406457286364112491e+1, + 0.10535437986592990356e+2, + -0.12679128465888641841e+2, -0.47894688835533172355, - 0.15416160656915451455e+02, - -0.15186822299812783754e+02, + 0.15416160656915451455e+2, + -0.15186822299812783754e+2, 0.86558476510206261434, - 0.12719758710285866243e+02, - -0.11677921345429014721e+02, + 0.12719758710285866243e+2, + -0.11677921345429014721e+2, 0.89272628043088664285, - 0.58189597151009033738e+01, + 0.58189597151009033738e+1, -0.64576442304557679641, - -0.69549927363971368877e+01, - 0.60892896838051395747e+01, - 0.31996786486654165138e+01, - -0.77761959786648953141e+01, - 0.19793061080896343640e+01, - 0.62776707641690281392e+01, - -0.35932135923237895625e+01, - -0.72483432016107247620e+01, - 0.11562087240214351525e+02, - 0.51204926145893253642e-01, - -0.14494051919323650779e+02, - 0.13511162540599119808e+02, - 0.45407053968787067788e+01, - -0.18053065902539156440e+02, - 0.11289205575302680984e+02, - 0.74914448098716190927e+01, - -0.14170701588591201769e+02, - 0.27626519142722343325e+01, - 0.99745946584869962237e+01, - -0.62901722295453765810e+01, - -0.57296718495418605954e+01, - 0.75774378265370945229e+01, - 0.36849196997255240227e+01, - -0.86809121751497979602e+01, - -0.18421722410328387198e+01, - 0.13139407244096119598e+02, - -0.55600861554899321249e+01, - -0.11535145136223919238e+02, - 0.13087995634194209416e+02, - 0.64865251521051270345e+01, - -0.20284998035752558110e+02, - 0.96156166512084180198e+01, - 0.10508648683416490499e+02, - -0.12235583232716569668e+02, + -0.69549927363971368877e+1, + 0.60892896838051395747e+1, + 0.31996786486654165138e+1, + -0.77761959786648953141e+1, + 0.1979306108089634364e+1, + 0.62776707641690281392e+1, + -0.35932135923237895625e+1, + -0.7248343201610724762e+1, + 0.11562087240214351525e+2, + 0.51204926145893253642e-1, + -0.14494051919323650779e+2, + 0.13511162540599119808e+2, + 0.45407053968787067788e+1, + -0.1805306590253915644e+2, + 0.11289205575302680984e+2, + 0.74914448098716190927e+1, + -0.14170701588591201769e+2, + 0.27626519142722343325e+1, + 0.99745946584869962237e+1, + -0.6290172229545376581e+1, + -0.57296718495418605954e+1, + 0.75774378265370945229e+1, + 0.36849196997255240227e+1, + -0.86809121751497979602e+1, + -0.18421722410328387198e+1, + 0.13139407244096119598e+2, + -0.55600861554899321249e+1, + -0.11535145136223919238e+2, + 0.13087995634194209416e+2, + 0.64865251521051270345e+1, + -0.2028499803575255811e+2, + 0.96156166512084180198e+1, + 0.10508648683416490499e+2, + -0.12235583232716569668e+2, -0.57522326806028434287, - 0.30180805781837896085e+01, - 0.10363632020720537241e+02, - -0.13624569941539359519e+02, - -0.38181297011531944996e+01, - 0.17700727683330935491e+02, - -0.49986023515055029165e+01, - -0.13751878153425201035e+02, - 0.82377018794892080678e+01, - 0.12899246107554970919e+02, - -0.13718354643208780175e+02, - -0.57433197422519368658e+01, - 0.12049591009950127329e+02, - 0.37500530138205530051e+01, - -0.81404284135964939395e+01, - -0.98445979415712443483e+01, - 0.16619392606366417908e+02, - 0.68372843259751956424e+01, - -0.23520863111343725649e+02, - 0.66784376335465953645e+01, - 0.12798887836820737718e+02, - -0.22649526276793041646e+01, - -0.93903016568920421037e+01, - -0.72871459667425293460e+01, - 0.21512570498660359419e+02, + 0.30180805781837896085e+1, + 0.10363632020720537241e+2, + -0.13624569941539359519e+2, + -0.38181297011531944996e+1, + 0.17700727683330935491e+2, + -0.49986023515055029165e+1, + -0.13751878153425201035e+2, + 0.82377018794892080678e+1, + 0.12899246107554970919e+2, + -0.13718354643208780175e+2, + -0.57433197422519368658e+1, + 0.12049591009950127329e+2, + 0.37500530138205530051e+1, + -0.81404284135964939395e+1, + -0.98445979415712443483e+1, + 0.16619392606366417908e+2, + 0.68372843259751956424e+1, + -0.23520863111343725649e+2, + 0.66784376335465953645e+1, + 0.12798887836820737718e+2, + -0.22649526276793041646e+1, + -0.93903016568920421037e+1, + -0.7287145966742529346e+1, + 0.21512570498660359419e+2, 0.20779892592435866838, - -0.20851267820599133529e+02, - 0.41524910729391875108e+01, - 0.13804926527068950293e+02, - 0.40675489545928238400e+01, - -0.16702618965776704130e+02, - -0.57838259489470171815e+01, - 0.16270987632816247270e+02, - 0.10138435767021181988e+02, - -0.15389232133140819059e+02, - -0.14786580414331037758e+02, - 0.17290039162358507241e+02, - 0.10434731855101563980e+02, - -0.25437876229427662800e+01, - -0.19686657724720824092e+02, - -0.37842740420576959082e+01, - 0.26436703474495285349e+02, - 0.26499765752437203226e+01, - -0.13680258069932140330e+02, - -0.14965997447750870819e+02, - 0.39686021004280247482e+01, - 0.25293887807178116134e+02, - 0.40685374662049307304e+01, - -0.22717136575692293832e+02, - -0.11334691352030173306e+02, - 0.34994275091006414868e+01, - 0.24090729788386930466e+02, - 0.14220969810817093659e+02, - -0.24466131233751770679e+02, - -0.14955395152913309786e+02, - -0.88447024592674026167e+01, - 0.20614164550316136371e+02, - 0.29061952502699060830e+02, - -0.52089083022792843636e+01, - -0.14247687144181650609e+02, - -0.30892237403518521432e+02, - -0.64693704525845205922e+01, - 0.19713628744274199533e+02, - 0.27842995676453107023e+02, - 0.22760723199009937900e+02, - -0.53048371832690719430e+01, - -0.24841807184013251941e+02, - -0.36324046211643356230e+02, - -0.21916765945536191396e+02, - -0.60602869191657049441e+01, - 0.21829587438800185595e+02, - 0.38265592132090738176e+02, - 0.43027268828022464220e+02, - 0.48638410012530968629e+02, - 0.35026910598924565932e+02, - 0.29843219942211600682e+02, - 0.21774387864109915114e+02, - 0.95544807793398760509e+01, - 0.10460932288316122651e+02, - 0.35754805121371493470e+01, - -0.61539082629524149981e-01, - 0.53089451556840270285e+01, - -0.36126138470175197526e+01, - 0.20021741188843904524e+01, - 0.17330321399896932988e+01, - -0.43540371476311090504e+01, - 0.49094306014897650670e+01, - -0.26740939684047582148e+01, - -0.13634624436279711990e+01, - 0.53046678072704915863e+01, - -0.71113930364156034969e+01, - 0.56420563192698880428e+01, - -0.12671628371325553974e+01, - -0.42575165197646924753e+01, - 0.85438812016382890135e+01, - -0.96900831345357438806e+01, - 0.71404263236417992999e+01, - -0.19725982108647837077e+01, - -0.36158882555951827875e+01, - 0.72894697346814707473e+01, - -0.76505341519953056206e+01, - 0.48251372541706460950e+01, + -0.20851267820599133529e+2, + 0.41524910729391875108e+1, + 0.13804926527068950293e+2, + 0.406754895459282384e+1, + -0.1670261896577670413e+2, + -0.57838259489470171815e+1, + 0.1627098763281624727e+2, + 0.10138435767021181988e+2, + -0.15389232133140819059e+2, + -0.14786580414331037758e+2, + 0.17290039162358507241e+2, + 0.1043473185510156398e+2, + -0.254378762294276628e+1, + -0.19686657724720824092e+2, + -0.37842740420576959082e+1, + 0.26436703474495285349e+2, + 0.26499765752437203226e+1, + -0.1368025806993214033e+2, + -0.14965997447750870819e+2, + 0.39686021004280247482e+1, + 0.25293887807178116134e+2, + 0.40685374662049307304e+1, + -0.22717136575692293832e+2, + -0.11334691352030173306e+2, + 0.34994275091006414868e+1, + 0.24090729788386930466e+2, + 0.14220969810817093659e+2, + -0.24466131233751770679e+2, + -0.14955395152913309786e+2, + -0.88447024592674026167e+1, + 0.20614164550316136371e+2, + 0.2906195250269906083e+2, + -0.52089083022792843636e+1, + -0.14247687144181650609e+2, + -0.30892237403518521432e+2, + -0.64693704525845205922e+1, + 0.19713628744274199533e+2, + 0.27842995676453107023e+2, + 0.227607231990099379e+2, + -0.5304837183269071943e+1, + -0.24841807184013251941e+2, + -0.3632404621164335623e+2, + -0.21916765945536191396e+2, + -0.60602869191657049441e+1, + 0.21829587438800185595e+2, + 0.38265592132090738176e+2, + 0.4302726882802246422e+2, + 0.48638410012530968629e+2, + 0.35026910598924565932e+2, + 0.29843219942211600682e+2, + 0.21774387864109915114e+2, + 0.95544807793398760509e+1, + 0.10460932288316122651e+2, + 0.3575480512137149347e+1, + -0.61539082629524149981e-1, + 0.53089451556840270285e+1, + -0.36126138470175197526e+1, + 0.20021741188843904524e+1, + 0.17330321399896932988e+1, + -0.43540371476311090504e+1, + 0.4909430601489765067e+1, + -0.26740939684047582148e+1, + -0.1363462443627971199e+1, + 0.53046678072704915863e+1, + -0.71113930364156034969e+1, + 0.56420563192698880428e+1, + -0.12671628371325553974e+1, + -0.42575165197646924753e+1, + 0.85438812016382890135e+1, + -0.96900831345357438806e+1, + 0.71404263236417992999e+1, + -0.19725982108647837077e+1, + -0.36158882555951827875e+1, + 0.72894697346814707473e+1, + -0.76505341519953056206e+1, + 0.4825137254170646095e+1, -0.37601327129539702243, - -0.34828543827858107207e+01, - 0.49165671466434544001e+01, - -0.33347630432746258045e+01, + -0.34828543827858107207e+1, + 0.49165671466434544001e+1, + -0.33347630432746258045e+1, -0.37644894046114990571, - 0.42838976784242426277e+01, - -0.63523240945092345200e+01, - 0.53961782220268412757e+01, - -0.16578049903408360599e+01, - -0.33074708410916873191e+01, - 0.73242754787168262709e+01, - -0.85977136626392010044e+01, - 0.65138687564891180060e+01, - -0.19269943733930836594e+01, - -0.32344624179853553869e+01, - 0.68166164704708478439e+01, - -0.73973435913378455808e+01, - 0.48878894178491361089e+01, + 0.42838976784242426277e+1, + -0.635232409450923452e+1, + 0.53961782220268412757e+1, + -0.16578049903408360599e+1, + -0.33074708410916873191e+1, + 0.73242754787168262709e+1, + -0.85977136626392010044e+1, + 0.6513868756489118006e+1, + -0.19269943733930836594e+1, + -0.32344624179853553869e+1, + 0.68166164704708478439e+1, + -0.73973435913378455808e+1, + 0.48878894178491361089e+1, -0.55050568099468466521, - -0.35968329730282753154e+01, - 0.56859177189617113868e+01, - -0.48320387418394021850e+01, - 0.15038246458232689129e+01, - 0.27081395891511759189e+01, - -0.58296158645687681243e+01, - 0.63971864657877262061e+01, - -0.41192501256052524994e+01, + -0.35968329730282753154e+1, + 0.56859177189617113868e+1, + -0.4832038741839402185e+1, + 0.15038246458232689129e+1, + 0.27081395891511759189e+1, + -0.58296158645687681243e+1, + 0.63971864657877262061e+1, + -0.41192501256052524994e+1, 0.64681152796862018128, - 0.40105723134714024170e+01, - -0.11560358334621161802e+02, - 0.14742999875242592367e+02, - -0.13671011788246602237e+02, - 0.53091295001652261121e+01, - 0.49086591303779156803e+01, - -0.15461409557104870416e+02, - 0.19358537250605102997e+02, - -0.17385515409728693470e+02, - 0.77669114787798347876e+01, - 0.29468582743241351629e+01, - -0.12868827936666736633e+02, - 0.15574541787493126677e+02, - -0.12991718996694913812e+02, - 0.43635837080703323565e+01, - 0.35512710771580660030e+01, - -0.97478294633922555334e+01, - 0.94727593464614532337e+01, - -0.63283821798726069829e+01, + 0.4010572313471402417e+1, + -0.11560358334621161802e+2, + 0.14742999875242592367e+2, + -0.13671011788246602237e+2, + 0.53091295001652261121e+1, + 0.49086591303779156803e+1, + -0.15461409557104870416e+2, + 0.19358537250605102997e+2, + -0.1738551540972869347e+2, + 0.77669114787798347876e+1, + 0.29468582743241351629e+1, + -0.12868827936666736633e+2, + 0.15574541787493126677e+2, + -0.12991718996694913812e+2, + 0.43635837080703323565e+1, + 0.3551271077158066003e+1, + -0.97478294633922555334e+1, + 0.94727593464614532337e+1, + -0.63283821798726069829e+1, 0.35232985255840965078, - 0.23240420237861010300e+01, - -0.26187872124993374356e+01, - -0.17751762741544940827e+01, - 0.53832917233002071100e+01, - -0.77569581771992002217e+01, - 0.40597968296657542808e+01, - 0.23488815585183360213e+01, - -0.11292685091077853343e+02, - 0.15905305650732971756e+02, - -0.16027924233219923877e+02, - 0.85532880695775634905e+01, + 0.232404202378610103e+1, + -0.26187872124993374356e+1, + -0.17751762741544940827e+1, + 0.538329172330020711e+1, + -0.77569581771992002217e+1, + 0.40597968296657542808e+1, + 0.23488815585183360213e+1, + -0.11292685091077853343e+2, + 0.15905305650732971756e+2, + -0.16027924233219923877e+2, + 0.85532880695775634905e+1, 0.96257949857268421123, - -0.10870184043172560706e+02, - 0.14351169232005668519e+02, - -0.12766338600387971525e+02, - 0.51136084200877158779e+01, - 0.16470864298813416848e+01, - -0.61428612305449448172e+01, - 0.36290335127296811102e+01, - 0.15719293529019084943e+01, - -0.80953357584549134884e+01, - 0.86224946567428464306e+01, - -0.36968097969725493002e+01, - -0.74836946649773565809e+01, - 0.17682605358143117513e+02, - -0.21853036261772725624e+02, - 0.17923489870287365733e+02, + -0.10870184043172560706e+2, + 0.14351169232005668519e+2, + -0.12766338600387971525e+2, + 0.51136084200877158779e+1, + 0.16470864298813416848e+1, + -0.61428612305449448172e+1, + 0.36290335127296811102e+1, + 0.15719293529019084943e+1, + -0.80953357584549134884e+1, + 0.86224946567428464306e+1, + -0.36968097969725493002e+1, + -0.74836946649773565809e+1, + 0.17682605358143117513e+2, + -0.21853036261772725624e+2, + 0.17923489870287365733e+2, 0.18968797414598068118, - -0.81620296867232511318e+01, - 0.38896913660310190153e+02, - -0.53560708031110682015e+01, - 0.55001378752266660399e+02, - 0.61153930372619178968e+02, - 0.68243883887055901027e+02, - 0.13997296532182687656e+03, - 0.11342827845266015174e+03, - 0.14245475721214233999e+03, - 0.12448286222140356472e+03, - 0.38454083256750472231e+02, - 0.95373678876098963997e+01, - -0.80760542640709161333e+02, - -0.11414818095962246502e+03, - -0.56322921966945528993e+02, - -0.34630911760031956703e+02, - 0.72581448228385767152e+02, - 0.97020889348077247405e+02, - 0.33842196166305605232e+02, + -0.81620296867232511318e+1, + 0.38896913660310190153e+2, + -0.53560708031110682015e+1, + 0.55001378752266660399e+2, + 0.61153930372619178968e+2, + 0.68243883887055901027e+2, + 0.13997296532182687656e+3, + 0.11342827845266015174e+3, + 0.14245475721214233999e+3, + 0.12448286222140356472e+3, + 0.38454083256750472231e+2, + 0.95373678876098963997e+1, + -0.80760542640709161333e+2, + -0.11414818095962246502e+3, + -0.56322921966945528993e+2, + -0.34630911760031956703e+2, + 0.72581448228385767152e+2, + 0.97020889348077247405e+2, + 0.33842196166305605232e+2, 0.62796819617473809139, - -0.93924314236616552876e+02, - -0.66643879059762227257e+02, - 0.23157087594871136105e+02, - 0.50918906747068312768e+02, - 0.75374691031038054234e+02, - -0.10243640901913533270e+02, - -0.85499473145715157330e+02, - -0.28600828461081466259e+02, - 0.12952044467275314332e+02, - 0.74119435869289787888e+02, - 0.31493979134709871204e+02, - -0.63447587226669242000e+02, - -0.49734837730655776511e+02, - 0.12859931102860906904e+02, - 0.59526202502316948539e+02, - 0.26948045820222901625e+02, - -0.43719032138264168452e+02, - -0.65860327278900115289e+02, - 0.45984575255397594162e+02, - 0.46286978137930979926e+02, - -0.34946718382658659152e+01, - -0.36704351463533100741e+02, - -0.51172891095258471239e+02, - 0.72911175502490408462e+02, - 0.31445061936473695852e+02, - -0.54089503734910046262e+02, - -0.17215094035506236736e+02, - 0.12549541799446510826e+01, - 0.58418442151570168619e+02, - -0.37916435280335418767e+01, - -0.77096220187360913201e+02, - 0.31742374356102295963e+02, - 0.42610986030281281955e+02, - -0.10572457680211275743e+02, - -0.34531718342022031720e+02, - -0.13183968913591696648e+02, - 0.51035999883769576968e+02, - 0.11750895398685864635e+02, - -0.62592151400144210527e+02, - 0.43044574648961848595e+01, - 0.59254669275544266327e+02, - -0.24272539242191864872e+02, - -0.28425289192934297233e+02, - 0.28201356379578133016e+01, - 0.33487334512821959720e+02, - 0.74415981050777544326e+01, - -0.59258374175158550656e+02, - 0.22491848789198318315e+02, - 0.50139692393640586943e+02, - -0.42587259160112964196e+02, - -0.27762285738704786553e+02, - 0.48348055128118147650e+02, - -0.27877978071786944092e+01, - -0.18654612741945104659e+02, - -0.13170954868439524788e+02, - 0.20862447115280318144e+02, - 0.33288681370035888563e+02, - -0.71834286043608685191e+02, - 0.26629151387674760088e+02, - 0.46326573667271304657e+02, - -0.50796549370828188330e+02, - -0.56989964339744929589e+01, - 0.32519225692736036137e+02, - 0.22938179627055665932e+01, - -0.34379953947599872777e+02, - 0.13958706061064024340e+02, - 0.18980155388920028514e+02, - -0.78705267671024978782e+01, - -0.25655821304454210718e+02, - 0.16218040157633232923e+02, - 0.37770117996896608759e+02, - -0.62909311532144023715e+02, - 0.15188151563838770741e+02, - 0.53137022233800472293e+02, - -0.61754803878556622010e+02, - 0.73334874332766410987e+01, - 0.38442226521804656159e+02, - -0.27588790694823327243e+02, - -0.88348577002069674791e+01, - 0.15444543654737797667e+02, - 0.94262582063173088187e+01, - -0.20843310658755097364e+02, - -0.13568899302766972426e+01, - 0.23468847350234128157e+02, - -0.10429318629026184340e+02, - -0.19638385130461117001e+02, - 0.18162369863323338137e+02, - 0.23795697680970871346e+02, - -0.56048119008206391811e+02, - 0.30223299783061815305e+02, - 0.35726879796501449960e+02, - -0.73819017473775346616e+02, - 0.44535658517615047458e+02, - 0.17620554247216695387e+02, - -0.45663795142183644771e+02, - 0.16419028968968049753e+02, - 0.27799011808967126314e+02, - -0.32870909288165783835e+02, - -0.59021581440731090140e+01, - 0.43991021312613675320e+02, - -0.42142654640909306352e+02, - 0.75070558086939094267e+01, - 0.21672879824993369624e+02, - -0.22283105759280303459e+02, - 0.67258179342574120341e+01, + -0.93924314236616552876e+2, + -0.66643879059762227257e+2, + 0.23157087594871136105e+2, + 0.50918906747068312768e+2, + 0.75374691031038054234e+2, + -0.1024364090191353327e+2, + -0.8549947314571515733e+2, + -0.28600828461081466259e+2, + 0.12952044467275314332e+2, + 0.74119435869289787888e+2, + 0.31493979134709871204e+2, + -0.63447587226669242e+2, + -0.49734837730655776511e+2, + 0.12859931102860906904e+2, + 0.59526202502316948539e+2, + 0.26948045820222901625e+2, + -0.43719032138264168452e+2, + -0.65860327278900115289e+2, + 0.45984575255397594162e+2, + 0.46286978137930979926e+2, + -0.34946718382658659152e+1, + -0.36704351463533100741e+2, + -0.51172891095258471239e+2, + 0.72911175502490408462e+2, + 0.31445061936473695852e+2, + -0.54089503734910046262e+2, + -0.17215094035506236736e+2, + 0.12549541799446510826e+1, + 0.58418442151570168619e+2, + -0.37916435280335418767e+1, + -0.77096220187360913201e+2, + 0.31742374356102295963e+2, + 0.42610986030281281955e+2, + -0.10572457680211275743e+2, + -0.3453171834202203172e+2, + -0.13183968913591696648e+2, + 0.51035999883769576968e+2, + 0.11750895398685864635e+2, + -0.62592151400144210527e+2, + 0.43044574648961848595e+1, + 0.59254669275544266327e+2, + -0.24272539242191864872e+2, + -0.28425289192934297233e+2, + 0.28201356379578133016e+1, + 0.3348733451282195972e+2, + 0.74415981050777544326e+1, + -0.59258374175158550656e+2, + 0.22491848789198318315e+2, + 0.50139692393640586943e+2, + -0.42587259160112964196e+2, + -0.27762285738704786553e+2, + 0.4834805512811814765e+2, + -0.27877978071786944092e+1, + -0.18654612741945104659e+2, + -0.13170954868439524788e+2, + 0.20862447115280318144e+2, + 0.33288681370035888563e+2, + -0.71834286043608685191e+2, + 0.26629151387674760088e+2, + 0.46326573667271304657e+2, + -0.5079654937082818833e+2, + -0.56989964339744929589e+1, + 0.32519225692736036137e+2, + 0.22938179627055665932e+1, + -0.34379953947599872777e+2, + 0.1395870606106402434e+2, + 0.18980155388920028514e+2, + -0.78705267671024978782e+1, + -0.25655821304454210718e+2, + 0.16218040157633232923e+2, + 0.37770117996896608759e+2, + -0.62909311532144023715e+2, + 0.15188151563838770741e+2, + 0.53137022233800472293e+2, + -0.6175480387855662201e+2, + 0.73334874332766410987e+1, + 0.38442226521804656159e+2, + -0.27588790694823327243e+2, + -0.88348577002069674791e+1, + 0.15444543654737797667e+2, + 0.94262582063173088187e+1, + -0.20843310658755097364e+2, + -0.13568899302766972426e+1, + 0.23468847350234128157e+2, + -0.1042931862902618434e+2, + -0.19638385130461117001e+2, + 0.18162369863323338137e+2, + 0.23795697680970871346e+2, + -0.56048119008206391811e+2, + 0.30223299783061815305e+2, + 0.3572687979650144996e+2, + -0.73819017473775346616e+2, + 0.44535658517615047458e+2, + 0.17620554247216695387e+2, + -0.45663795142183644771e+2, + 0.16419028968968049753e+2, + 0.27799011808967126314e+2, + -0.32870909288165783835e+2, + -0.5902158144073109014e+1, + 0.4399102131261367532e+2, + -0.42142654640909306352e+2, + 0.75070558086939094267e+1, + 0.21672879824993369624e+2, + -0.22283105759280303459e+2, + 0.67258179342574120341e+1, 0.30714703243089153117, - 0.59545866908894558023e+01, - -0.92534612439962664610e+01, - -0.14431147611503072348e+01, - 0.15062303992288574861e+02, - -0.13034931529447442600e+02, - -0.47681553515286214662e+01, - 0.17091050065518150092e+02, - -0.69533766041055304896e+01, - -0.15490559575252389024e+02, - 0.22200497201617153564e+02, + 0.59545866908894558023e+1, + -0.9253461243996266461e+1, + -0.14431147611503072348e+1, + 0.15062303992288574861e+2, + -0.130349315294474426e+2, + -0.47681553515286214662e+1, + 0.17091050065518150092e+2, + -0.69533766041055304896e+1, + -0.15490559575252389024e+2, + 0.22200497201617153564e+2, -0.26600029561946658685, - -0.29783303464213162215e+02, - 0.33671065430481007752e+02, - -0.15554370068647223047e+01, - -0.37943346339960733360e+02, - 0.45423909562051136390e+02, - -0.12207828291653028074e+02, - -0.29095305346030567506e+02, - 0.37562024588890359666e+02, - -0.67089621102081276049e+01, - -0.28319381891873181445e+02, - 0.27449226958067868054e+02, - 0.11612198564979877347e+02, - -0.49648431778560883743e+02, - 0.45778570355566188255e+02, - 0.34164038906242360838e+02, - -0.71154212840921530869e+02, - -0.16834565278486330442e+02, - 0.88552849440308477824e+02, - -0.65286915481781321091e+02, - -0.51624096323423280808e+02, - 0.14267538303154782398e+03, - -0.11953145093698759638e+03, - -0.13983801322249576060e+02, - 0.12572071081095367617e+03, - -0.11729982785894557651e+03, - -0.52863964070237239312e+01, - 0.10112073460920171897e+03, - -0.71702384779023461192e+02, - -0.62394158208416669709e+02, - 0.14441293238351261152e+03, - -0.78691457274396867660e+02, - -0.90122625602514432330e+02, - 0.18150875340027508287e+03, - -0.10021220276135173322e+03, - -0.85974810972768921147e+02, - 0.17781491335308476209e+03, - -0.87762944996335178871e+02, - -0.92940648329310988629e+02, - 0.15854386026370980289e+03, - -0.46279038329848695810e+02, - -0.12242960351677480446e+03, - 0.14493457478937375527e+03, - 0.23350847078760832431e+01, - -0.16525176115328903848e+03, - 0.15474047823973043592e+03, - 0.78174404211798877995e+01, - -0.14925993002090575601e+03, - 0.11691486899961172696e+03, - 0.18406465805232649302e+02, - -0.90055798522964082053e+02, - 0.14311839761313120079e+02, - 0.83311896348123383405e+02, - -0.68288415463046291620e+02, - -0.52074625582853585115e+02, - 0.10910299148796785573e+03, - -0.29676627145060002988e+02, - -0.86006660181010317956e+02, - 0.65381677499815623378e+02, - 0.66630576260674644118e+02, - -0.13225832081581873467e+03, - 0.80304275051557478804e+01, - 0.16017579478780388058e+03, - -0.15669414967397500504e+03, - -0.45252371590805516632e+02, - 0.19794469601598353847e+03, - -0.11980367453813373402e+03, - -0.92674735733822799943e+02, - 0.15999304049387373539e+03, - -0.19831200795879482257e+02, - -0.12505707687571522513e+03, - 0.68676205970223634267e+02, - 0.81735639221933638510e+02, - -0.98748298395034694863e+02, - -0.49635199075722638895e+02, - 0.12160775658875203931e+03, - 0.18078874840982044336e+01, - -0.14450023681536035269e+03, - 0.63851798528969553104e+02, - 0.13660526421124237118e+03, - -0.16018410845450031843e+03, - -0.64336790507246405468e+02, - 0.22342020698382464161e+03, - -0.10048445316833330310e+03, - -0.12420343816241337720e+03, - 0.12429121499123264982e+03, - 0.42907389620195431235e+02, - -0.71689031226732936375e+02, - -0.10206124128448476540e+03, - 0.15862873913789286462e+03, - 0.38391580625693698892e+02, - -0.20245523773377789212e+03, - 0.54719276967395181543e+02, - 0.16508877203793360877e+03, - -0.98783177448832461209e+02, - -0.14976691673475568223e+03, - 0.15416580277339576810e+03, - 0.79126842485115318482e+02, - -0.14686218140691968870e+03, - -0.54427390566902495550e+02, - 0.11479417288456501467e+03, - 0.10356572681130458591e+03, - -0.19790046570478696708e+03, - -0.66609296396085511560e+02, - 0.25545200972941535156e+03, - -0.54479617908373612067e+02, - -0.16576667455333793555e+03, - 0.20542146102039477995e+02, - 0.13362531429523991733e+03, - 0.63564750663475116710e+02, - -0.24303229253394019338e+03, - -0.30724573312613667753e+01, - 0.23853510427155023876e+03, - -0.33665342957432088156e+02, - -0.17846970789703030391e+03, - -0.42864033779371780497e+02, - 0.19955726651603256983e+03, - 0.69418720001961403909e+02, - -0.19690499314575251333e+03, - -0.12014876142426558658e+03, - 0.18829869077858555215e+03, - 0.16420134758002740227e+03, - -0.18478205468308550508e+03, - -0.15130207537625145164e+03, - 0.50368072982596778786e+02, - 0.23078064359818631601e+03, - 0.34330160980796890158e+02, - -0.29486612629532993424e+03, - -0.55640963977188157230e+02, - 0.18031678664649052735e+03, - 0.17475706255379529352e+03, - -0.50792678599951997853e+02, - -0.30004612814740062277e+03, - -0.45745273466668827211e+02, - 0.26145666823983111726e+03, - 0.15001027491115098655e+03, - -0.49671798921711577179e+02, - -0.29560094474877564608e+03, - -0.14824659278008581964e+03, - 0.26138004722510021338e+03, - 0.20998973521406207965e+03, - 0.88918033367761623254e+02, - -0.24996775879108710683e+03, - -0.32765060657473276251e+03, - 0.30900607118075182456e+02, - 0.20243963771569042365e+03, - 0.34795324718355726645e+03, - 0.88100499396728608303e+02, - -0.23628688393771898291e+03, - -0.34090821804824525998e+03, - -0.26370500777163533712e+03, - 0.53165009901382866531e+02, - 0.31021818586746388746e+03, - 0.42122830648064314119e+03, - 0.27944219323500522023e+03, - 0.57632970714490809883e+02, - -0.25261860444657648372e+03, - -0.45952103785137575187e+03, - -0.52497575124136483282e+03, - -0.56988577708223226637e+03, - -0.43317315673612142746e+03, - -0.35151573301176927089e+03, - -0.25983446289624117753e+03, - -0.12155205616581065442e+03, - -0.11887116616994761387e+03, - -0.43733566821042714423e+02, - -0.66766582672607688309e+01, - -0.50307630386784978782e+02, - 0.29771416072017139243e+02, - -0.16541223849446936356e+02, - -0.18980388115362902823e+02, - 0.42961659398092905349e+02, - -0.48387176553132242418e+02, - 0.27802061140777276194e+02, - 0.97089727869603592580e+01, - -0.47083441142651032862e+02, - 0.65740354211262342687e+02, - -0.55084790663851883608e+02, - 0.18071155666029046216e+02, - 0.29884614661985796857e+02, - -0.67592554366657083165e+02, - 0.78128994433432310984e+02, - -0.56514077457276371774e+02, - 0.12316126107634715936e+02, - 0.34977957860598067441e+02, - -0.64730399037506458626e+02, - 0.64802975749262330396e+02, - -0.36739298578180495269e+02, - -0.50554367716772476982e+01, - 0.40453080709902529577e+02, - -0.52880284736309739912e+02, - 0.37131333575910232980e+02, - -0.14147588544774178931e+01, - -0.36531447685738399400e+02, - 0.58014867362147882091e+02, - -0.51992133026095153525e+02, - 0.20339927597930458347e+02, - 0.23157397878970595428e+02, - -0.59007529396737794514e+02, - 0.71027284530813247443e+02, - -0.53548559257699224645e+02, - 0.14045423856562688769e+02, - 0.30386395284530994587e+02, - -0.60617311021628040635e+02, - 0.64074152564629514472e+02, - -0.40118675711955390284e+02, + -0.29783303464213162215e+2, + 0.33671065430481007752e+2, + -0.15554370068647223047e+1, + -0.3794334633996073336e+2, + 0.4542390956205113639e+2, + -0.12207828291653028074e+2, + -0.29095305346030567506e+2, + 0.37562024588890359666e+2, + -0.67089621102081276049e+1, + -0.28319381891873181445e+2, + 0.27449226958067868054e+2, + 0.11612198564979877347e+2, + -0.49648431778560883743e+2, + 0.45778570355566188255e+2, + 0.34164038906242360838e+2, + -0.71154212840921530869e+2, + -0.16834565278486330442e+2, + 0.88552849440308477824e+2, + -0.65286915481781321091e+2, + -0.51624096323423280808e+2, + 0.14267538303154782398e+3, + -0.11953145093698759638e+3, + -0.1398380132224957606e+2, + 0.12572071081095367617e+3, + -0.11729982785894557651e+3, + -0.52863964070237239312e+1, + 0.10112073460920171897e+3, + -0.71702384779023461192e+2, + -0.62394158208416669709e+2, + 0.14441293238351261152e+3, + -0.7869145727439686766e+2, + -0.9012262560251443233e+2, + 0.18150875340027508287e+3, + -0.10021220276135173322e+3, + -0.85974810972768921147e+2, + 0.17781491335308476209e+3, + -0.87762944996335178871e+2, + -0.92940648329310988629e+2, + 0.15854386026370980289e+3, + -0.4627903832984869581e+2, + -0.12242960351677480446e+3, + 0.14493457478937375527e+3, + 0.23350847078760832431e+1, + -0.16525176115328903848e+3, + 0.15474047823973043592e+3, + 0.78174404211798877995e+1, + -0.14925993002090575601e+3, + 0.11691486899961172696e+3, + 0.18406465805232649302e+2, + -0.90055798522964082053e+2, + 0.14311839761313120079e+2, + 0.83311896348123383405e+2, + -0.6828841546304629162e+2, + -0.52074625582853585115e+2, + 0.10910299148796785573e+3, + -0.29676627145060002988e+2, + -0.86006660181010317956e+2, + 0.65381677499815623378e+2, + 0.66630576260674644118e+2, + -0.13225832081581873467e+3, + 0.80304275051557478804e+1, + 0.16017579478780388058e+3, + -0.15669414967397500504e+3, + -0.45252371590805516632e+2, + 0.19794469601598353847e+3, + -0.11980367453813373402e+3, + -0.92674735733822799943e+2, + 0.15999304049387373539e+3, + -0.19831200795879482257e+2, + -0.12505707687571522513e+3, + 0.68676205970223634267e+2, + 0.8173563922193363851e+2, + -0.98748298395034694863e+2, + -0.49635199075722638895e+2, + 0.12160775658875203931e+3, + 0.18078874840982044336e+1, + -0.14450023681536035269e+3, + 0.63851798528969553104e+2, + 0.13660526421124237118e+3, + -0.16018410845450031843e+3, + -0.64336790507246405468e+2, + 0.22342020698382464161e+3, + -0.1004844531683333031e+3, + -0.1242034381624133772e+3, + 0.12429121499123264982e+3, + 0.42907389620195431235e+2, + -0.71689031226732936375e+2, + -0.1020612412844847654e+3, + 0.15862873913789286462e+3, + 0.38391580625693698892e+2, + -0.20245523773377789212e+3, + 0.54719276967395181543e+2, + 0.16508877203793360877e+3, + -0.98783177448832461209e+2, + -0.14976691673475568223e+3, + 0.1541658027733957681e+3, + 0.79126842485115318482e+2, + -0.1468621814069196887e+3, + -0.5442739056690249555e+2, + 0.11479417288456501467e+3, + 0.10356572681130458591e+3, + -0.19790046570478696708e+3, + -0.6660929639608551156e+2, + 0.25545200972941535156e+3, + -0.54479617908373612067e+2, + -0.16576667455333793555e+3, + 0.20542146102039477995e+2, + 0.13362531429523991733e+3, + 0.6356475066347511671e+2, + -0.24303229253394019338e+3, + -0.30724573312613667753e+1, + 0.23853510427155023876e+3, + -0.33665342957432088156e+2, + -0.17846970789703030391e+3, + -0.42864033779371780497e+2, + 0.19955726651603256983e+3, + 0.69418720001961403909e+2, + -0.19690499314575251333e+3, + -0.12014876142426558658e+3, + 0.18829869077858555215e+3, + 0.16420134758002740227e+3, + -0.18478205468308550508e+3, + -0.15130207537625145164e+3, + 0.50368072982596778786e+2, + 0.23078064359818631601e+3, + 0.34330160980796890158e+2, + -0.29486612629532993424e+3, + -0.5564096397718815723e+2, + 0.18031678664649052735e+3, + 0.17475706255379529352e+3, + -0.50792678599951997853e+2, + -0.30004612814740062277e+3, + -0.45745273466668827211e+2, + 0.26145666823983111726e+3, + 0.15001027491115098655e+3, + -0.49671798921711577179e+2, + -0.29560094474877564608e+3, + -0.14824659278008581964e+3, + 0.26138004722510021338e+3, + 0.20998973521406207965e+3, + 0.88918033367761623254e+2, + -0.24996775879108710683e+3, + -0.32765060657473276251e+3, + 0.30900607118075182456e+2, + 0.20243963771569042365e+3, + 0.34795324718355726645e+3, + 0.88100499396728608303e+2, + -0.23628688393771898291e+3, + -0.34090821804824525998e+3, + -0.26370500777163533712e+3, + 0.53165009901382866531e+2, + 0.31021818586746388746e+3, + 0.42122830648064314119e+3, + 0.27944219323500522023e+3, + 0.57632970714490809883e+2, + -0.25261860444657648372e+3, + -0.45952103785137575187e+3, + -0.52497575124136483282e+3, + -0.56988577708223226637e+3, + -0.43317315673612142746e+3, + -0.35151573301176927089e+3, + -0.25983446289624117753e+3, + -0.12155205616581065442e+3, + -0.11887116616994761387e+3, + -0.43733566821042714423e+2, + -0.66766582672607688309e+1, + -0.50307630386784978782e+2, + 0.29771416072017139243e+2, + -0.16541223849446936356e+2, + -0.18980388115362902823e+2, + 0.42961659398092905349e+2, + -0.48387176553132242418e+2, + 0.27802061140777276194e+2, + 0.9708972786960359258e+1, + -0.47083441142651032862e+2, + 0.65740354211262342687e+2, + -0.55084790663851883608e+2, + 0.18071155666029046216e+2, + 0.29884614661985796857e+2, + -0.67592554366657083165e+2, + 0.78128994433432310984e+2, + -0.56514077457276371774e+2, + 0.12316126107634715936e+2, + 0.34977957860598067441e+2, + -0.64730399037506458626e+2, + 0.64802975749262330396e+2, + -0.36739298578180495269e+2, + -0.50554367716772476982e+1, + 0.40453080709902529577e+2, + -0.52880284736309739912e+2, + 0.3713133357591023298e+2, + -0.14147588544774178931e+1, + -0.365314476857383994e+2, + 0.58014867362147882091e+2, + -0.51992133026095153525e+2, + 0.20339927597930458347e+2, + 0.23157397878970595428e+2, + -0.59007529396737794514e+2, + 0.71027284530813247443e+2, + -0.53548559257699224645e+2, + 0.14045423856562688769e+2, + 0.30386395284530994587e+2, + -0.60617311021628040635e+2, + 0.64074152564629514472e+2, + -0.40118675711955390284e+2, 0.20162987631862075433, - 0.37503842230669995672e+02, - -0.56233031425094971212e+02, - 0.48120374973649674644e+02, - -0.17498076599550909549e+02, - -0.21204861414828972244e+02, - 0.50130948709254255391e+02, - -0.56052542383755785238e+02, - 0.36326157269276727391e+02, - -0.14622853370641207604e+02, - -0.15138855119088903578e+02, - 0.71124058691650503761e+02, - -0.93329121438852098436e+02, - 0.84360854302846931319e+02, - -0.27314244480765115242e+02, - -0.38253989046484647929e+02, - 0.10119487383509783740e+03, - -0.11650297754204228795e+03, - 0.93497233491678045425e+02, - -0.24659461228651970544e+02, - -0.43382735872478455974e+02, - 0.98410995740965006462e+02, - -0.10095879734530872440e+03, - 0.69486314027803402382e+02, - -0.41745236224547168646e+01, - -0.46747992133994650032e+02, - 0.77198196497412851613e+02, - -0.59257756239055090930e+02, - 0.22834824182937108361e+02, - 0.26494196829822282524e+02, - -0.44658669109962353616e+02, - 0.38216316172803935558e+02, - 0.49336778626042230300e+01, - -0.43211153384806067379e+02, - 0.69201932357129280149e+02, - -0.48124215349240451189e+02, - 0.28621747713666834123e+01, - 0.62851239076419034291e+02, - -0.99589184856801509227e+02, - 0.10366047176449073675e+03, - -0.53482341044261097807e+02, - -0.12360099585019233004e+02, - 0.80172085087778327761e+02, - -0.10167644680519366318e+03, - 0.84871401871276560769e+02, - -0.24092749428206968076e+02, - -0.30981484870695947365e+02, - 0.67277551359631374339e+02, - -0.49835222774964080372e+02, - 0.65850342841791800197e+01, - 0.51623144497759838600e+02, - -0.71681422684383136357e+02, - 0.52161195660127383178e+02, - 0.16657455851556971282e+02, - -0.88292103014021449781e+02, - 0.12798474289884171640e+03, - -0.11798888582178663853e+03, - 0.12760340091374345661e+02, - 0.30189882219348774584e+02, - -0.23262434269747427606e+03, - 0.14125574495040188694e+02, - -0.35497019658028631284e+03, - -0.40863531620826472590e+03, - -0.46187792136727017578e+03, - -0.92326364348039487595e+03, - -0.76421203662784785138e+03, - -0.94619349265814707906e+03, - -0.82913459600800467797e+03, - -0.25841828852048206500e+03, - -0.64165750881051124566e+02, - 0.54481362060043670681e+03, - 0.74807581009501097924e+03, - 0.39268701070843604839e+03, - 0.21398622783130198854e+03, - -0.47248165142941280692e+03, - -0.64873666288197910035e+03, - -0.23423705375935449524e+03, - 0.12901531695448420933e+02, - 0.60529040574654004558e+03, - 0.46352749826657884569e+03, - -0.16762612346143637865e+03, - -0.33380879057094335849e+03, - -0.50200523724201696041e+03, - 0.65588175916382127184e+02, - 0.57033441754591740391e+03, - 0.19609930732336246706e+03, - -0.98075120887387456037e+02, - -0.47875759240230212299e+03, - -0.22372964751134963990e+03, - 0.42924061967179039812e+03, - 0.33739915728246603521e+03, - -0.10497038862652560454e+03, - -0.36675117947821934195e+03, - -0.21458520597709147637e+03, - 0.32361747192641087167e+03, - 0.41676129279650518811e+03, - -0.29837041173879589451e+03, - -0.30231035810353785109e+03, - 0.62551286071413425560e+01, - 0.26619780277243802402e+03, - 0.32219116800784428278e+03, - -0.47500229975988946762e+03, - -0.21057891133509085080e+03, - 0.35293407310422014689e+03, - 0.12660471162590222605e+03, - -0.18534604382496919328e+02, - -0.38607647158551333177e+03, - 0.31516704594580289722e+02, - 0.49856899317026113749e+03, - -0.19043656651060962304e+03, - -0.30571758551412500537e+03, - 0.87173935054436398673e+02, - 0.22250153759966630673e+03, - 0.85178183563270522427e+02, - -0.32832495126959241816e+03, - -0.96075561852143962938e+02, - 0.43662594301269513153e+03, - -0.45791714414986266490e+02, - -0.38259641362445410095e+03, - 0.15477591294105215525e+03, - 0.19189493373831291478e+03, - -0.17877610767912152312e+02, - -0.22633271358060881084e+03, - -0.44632767505875236225e+02, - 0.38759783491160692392e+03, - -0.13893782881355329550e+03, - -0.34943161120489389759e+03, - 0.30266215166762077615e+03, - 0.16508986638564971372e+03, - -0.30489737034779972191e+03, - 0.82883635978386660526e+01, - 0.12363462680608260769e+03, - 0.10155313030043892297e+03, - -0.16487360589513357922e+03, - -0.18811946986505537893e+03, - 0.44354393196567872337e+03, - -0.14795871229511152478e+03, - -0.32620616336461506535e+03, - 0.34008421559570246018e+03, - 0.52517432940381894468e+02, - -0.24349066094913646907e+03, - 0.16994506196220008576e+02, - 0.19904706508537105947e+03, - -0.71797353962319547804e+02, - -0.13476774078202575424e+03, - 0.47219099177335017714e+02, - 0.18670095316858382262e+03, - -0.12856675941194927759e+03, - -0.23294188742563252958e+03, - 0.40744356714364300842e+03, - -0.98921283555725366909e+02, - -0.34743350579823993485e+03, - 0.39913115522174041416e+03, - -0.35598296540491681128e+02, - -0.26524641787511188795e+03, - 0.18521678823959240390e+03, - 0.65883394244387162075e+02, - -0.11578031830709977612e+03, - -0.48895783730993926497e+02, - 0.12945351510314048937e+03, - 0.94883453824050771885e+01, - -0.14566408991141386764e+03, - 0.48681595688513176867e+02, - 0.15742458888849597543e+03, - -0.14660535045547365485e+03, - -0.14119422641037311905e+03, - 0.36999294643008977346e+03, - -0.21425743352164971611e+03, - -0.21017774526415172431e+03, - 0.45383834653842427542e+03, - -0.25585928762585697882e+03, - -0.15288807956958476097e+03, - 0.32701787989058533412e+03, - -0.11485339617906377896e+03, - -0.19767548379085607735e+03, - 0.24597609485908046167e+03, - 0.42078065988889692406e+01, - -0.25733198889346977012e+03, - 0.25126059724149413910e+03, - -0.31586640276964882190e+02, - -0.14974637179895060513e+03, - 0.14185286095557651720e+03, - -0.29944503273013296507e+02, - -0.20020532289803735893e+02, - -0.23628840463383703252e+02, - 0.51139989364363827917e+02, - 0.13214751675234712280e+02, - -0.97872794712073783785e+02, - 0.80789223312499686358e+02, - 0.38164164883503438830e+02, - -0.11765367354237193354e+03, - 0.45817575277387447841e+02, - 0.10784530512233567379e+03, - -0.15467007344164471760e+03, - 0.75197262783665932417e+01, - 0.19683875834229064594e+03, - -0.22892345366353575287e+03, - 0.21362481640783805403e+02, - 0.23713886186157279212e+03, - -0.28571451241815117328e+03, - 0.67524270354103663294e+02, - 0.20017583035551808734e+03, - -0.24587855323442911981e+03, - 0.28603920592657789967e+02, - 0.21471967685254202252e+03, - -0.21453398108453669124e+03, - -0.46001736275089108119e+02, - 0.30576061951774386216e+03, - -0.29115978722501563425e+03, - -0.18216887248269011934e+03, - 0.44689187851765706228e+03, - -0.77807228851318104290e+01, - -0.43139241806286673864e+03, - 0.41701142403963433480e+03, - 0.12986445510689708271e+03, - -0.63268848561563095245e+03, - 0.59911632639134995770e+03, - 0.29076681489173608952e+02, - -0.61073770734182119213e+03, - 0.61144112520281271372e+03, - 0.26367662531267206383e+01, - -0.53565448900869330373e+03, - 0.44941867989832883268e+03, - 0.21484032238765811940e+03, - -0.68122554798482826754e+03, - 0.42888209408248889076e+03, - 0.37856649679454011448e+03, - -0.85338676745947122981e+03, - 0.49326229674257251645e+03, - 0.40712352781452125328e+03, - -0.86579523590408120981e+03, - 0.43540003065347264055e+03, - 0.45191603763999751209e+03, - -0.77508082241622889796e+03, - 0.22190813447555979110e+03, - 0.60955015609867712101e+03, - -0.71273362781887658457e+03, - -0.14281939509217989936e+02, - 0.79812373817946718191e+03, - -0.70844054986300557175e+03, - -0.10713487417234300381e+03, - 0.76231889095794326749e+03, - -0.51698389063547836031e+03, - -0.20670689949480379255e+03, - 0.53386359353339526024e+03, - -0.70539669885234843605e+02, - -0.47272057885197784799e+03, - 0.37411842481905063096e+03, - 0.29914949097187326288e+03, - -0.61543385558048044004e+03, - 0.16813407857982915061e+03, - 0.49732824699139672475e+03, - -0.42847345765323495925e+03, - -0.27900412058866220377e+03, - 0.68646482445334095246e+03, - -0.10122635581024124463e+03, - -0.76031634996802313253e+03, - 0.78197904895311830842e+03, - 0.20812166767556217906e+03, - -0.96317128161026266753e+03, - 0.56397426057196287275e+03, - 0.49510816359488183025e+03, - -0.79290606867428414262e+03, - 0.44629271960600512159e+02, - 0.67963451007660944470e+03, - -0.33000845373859982601e+03, - -0.48845304404166597578e+03, - 0.56148583171198220043e+03, - 0.26533317290113342324e+03, - -0.68674693297351541332e+03, - 0.46985564871574155177e+02, - 0.73371295959618214511e+03, - -0.35431905515082638658e+03, - -0.68080639977391149387e+03, - 0.83440695977906739245e+03, - 0.28574957309264021887e+03, - -0.10787372633744444101e+04, - 0.44498212436790424817e+03, - 0.66922252873974662180e+03, - -0.58695593130512713742e+03, - -0.34488458512084292806e+03, - 0.49554272146314508518e+03, - 0.46585404768099471084e+03, - -0.82993777190191804038e+03, - -0.15669173925288271221e+03, - 0.10116975167249560172e+04, - -0.26265337204306814556e+03, - -0.86377433967657782432e+03, - 0.51511419116823219611e+03, - 0.76448152744958247240e+03, - -0.76324481272560001344e+03, - -0.45835667699063020564e+03, - 0.77888060338793820847e+03, - 0.32705663826251799264e+03, - -0.67864052298810304364e+03, - -0.47300887423151772282e+03, - 0.10201308903218831574e+04, - 0.29478322827428405617e+03, - -0.12360807782652127571e+04, - 0.18758848670263364511e+03, - 0.91029341275284821222e+03, - -0.71760032606240955033e+02, - -0.79407422468910056068e+03, - -0.22873115339100485244e+03, - 0.12078741008040631186e+04, - 0.18633167518712966171e+02, - -0.12001852515567418322e+04, - 0.10909884568286632600e+03, - 0.98667171764334796080e+03, - 0.20220371491478408643e+03, - -0.10432263678894976238e+04, - -0.36528687948257800144e+03, - 0.10450075951861851991e+04, - 0.61053053204311504487e+03, - -0.98379254165118049968e+03, - -0.82588039883683063636e+03, - 0.89516145844107359153e+03, - 0.88100881298682406850e+03, - -0.33024284425522120046e+03, - -0.11962421742145993449e+04, - -0.13153456999429155871e+03, - 0.14585732969092978237e+04, - 0.37394359665572653739e+03, - -0.98683599163662859155e+03, - -0.92500950302681997073e+03, - 0.30901097037629591568e+03, - 0.15326551005434730541e+04, - 0.24183630114259165111e+03, - -0.13264719296842129097e+04, - -0.85187155867243757257e+03, - 0.30842287965980625586e+03, - 0.15549899296401847550e+04, - 0.70361701456002094801e+03, - -0.12515427055539162211e+04, - -0.12168288779206452546e+04, - -0.39666655464299287814e+03, - 0.13149179198919030114e+04, - 0.16409509859569659511e+04, - -0.48570016539637741460e+02, - -0.11696217779872681604e+04, - -0.17500042327257478973e+04, - -0.48618412153962634648e+03, - 0.12243238527530124884e+04, - 0.18171523517332007032e+04, - 0.13487664395181097916e+04, - -0.25027618299261291668e+03, - -0.16536925701108627891e+04, - -0.21699109192329201505e+04, - -0.15082682455537003534e+04, - -0.25963901137791174278e+03, - 0.12998449345886556330e+04, - 0.23988511416264673244e+04, - 0.27894723228604657379e+04, - 0.29296670954688984239e+04, - 0.23160011322977215968e+04, - 0.18236548624135932641e+04, - 0.13432542870024806234e+04, - 0.67739620954064196212e+03, - 0.58400287339939268350e+03, - 0.24180093933715843946e+03, - 0.57937892284381746322e+02, - 0.21539138147512537103e+03, - -0.10827916828556351447e+03, - 0.66689950510282244522e+02, - 0.78209449388969559891e+02, - -0.17148097537945142221e+03, - 0.19588765672084747393e+03, - -0.11810202319824388439e+03, - -0.26128796130170620415e+02, - 0.17231021641229889951e+03, - -0.24900403752462000284e+03, - 0.21502598638849678991e+03, - -0.80562150057297614580e+02, - -0.96792185983304975139e+02, - 0.23723414339438193110e+03, - -0.27693834127646772458e+03, - 0.19709121554700567458e+03, - -0.33884162543772269771e+02, - -0.13917897324043246954e+03, - 0.24446801008843948466e+03, - -0.23692239353215643405e+03, - 0.12351665714949518815e+03, - 0.39946654622399783818e+02, - -0.17625241968295154038e+03, - 0.22210755011833856543e+03, - -0.15799132827336126184e+03, - 0.15813984551761723907e+02, - 0.13592164543484216210e+03, - -0.22500568421436977928e+03, - 0.20838291256601314672e+03, - -0.92437123924787641727e+02, - -0.70826563744208726803e+02, - 0.20728904995018137924e+03, - -0.25512859716884349837e+03, - 0.19227323431204757753e+03, - -0.46552105124367486155e+02, - -0.11764939795435564918e+03, - 0.22813582251911776666e+03, - -0.23756913919748066633e+03, - 0.14385264537817951691e+03, - 0.92751622926073338249e+01, - -0.15270437797958808801e+03, - 0.22285159493865765512e+03, - -0.19014983628083061262e+03, - 0.71509469356268965612e+02, - 0.77743346121759813627e+02, - -0.18934632033695689302e+03, - 0.21281805569873097284e+03, - -0.13815237451332566820e+03, - 0.61057565366816227481e+02, - 0.40664256658377709641e+02, - -0.22905138877515773288e+03, - 0.29727169772823714311e+03, - -0.25889527605876105554e+03, - 0.69990288939568273463e+02, - 0.13569941825911445221e+03, - -0.31987719467144597729e+03, - 0.34455374332819815208e+03, - -0.24924812905850717470e+03, - 0.21298201555058021484e+02, - 0.18486478647934686137e+03, - -0.33141684852356286228e+03, - 0.30233676168040983612e+03, - -0.16954863297559077751e+03, - -0.53526004476392124332e+02, - 0.20743917015935528525e+03, - -0.27487110827541067692e+03, - 0.17761731252670870163e+03, - -0.24613790067172459430e+02, - -0.15340797076009386046e+03, - 0.21012159961966656851e+03, - -0.16775237814645902290e+03, - -0.30731098748410583532e+01, - 0.15842871513728593413e+03, - -0.26381004064875179438e+03, - 0.20360442554921218061e+03, - -0.51500626650102361737e+02, - -0.17375135645028319686e+03, - 0.30686733293880109841e+03, - -0.32916637963972516445e+03, - 0.17031999625766175654e+03, - 0.44351133061074328623e+02, - -0.26470276072159475689e+03, - 0.33127727964540537187e+03, - -0.26599375552965028646e+03, - 0.53053738800927547459e+02, - 0.14339812439193624982e+03, - -0.27258656593255034295e+03, - 0.21614484471236781360e+03, - -0.59546089801902688521e+02, - -0.15896812620634995028e+03, - 0.26178399755608063515e+03, - -0.23202124871443308507e+03, - 0.28350082630189561428e+02, - 0.20718530274014250381e+03, - -0.36229958449881763727e+03, - 0.37101159528353770156e+03, - -0.77625785801841900025e+02, - -0.34436179241464742518e+02, - 0.66772470362032493085e+03, - 0.28894693858628213157e+01, - 0.10956418402137649082e+04, - 0.12760923770220886126e+04, - 0.14788239559162766454e+04, - 0.28696326977493226877e+04, - 0.24249052187989886988e+04, - 0.29672371053158517498e+04, - 0.25962546393005059144e+04, - 0.82973050236781125477e+03, - 0.18747541960969479646e+03, - -0.17114133695876819274e+04, - -0.23348537437691861669e+04, - -0.12639529070898540795e+04, - -0.63914142345836296499e+03, - 0.14598016447192039777e+04, - 0.20463515825321801458e+04, - 0.74908542330107889029e+03, - -0.69159345059922841870e+02, - -0.18687790053253058886e+04, - -0.14831987552215327923e+04, - 0.53690266117060718898e+03, - 0.10573744593880162483e+04, - 0.15567190730825868741e+04, - -0.18399805553263595925e+03, - -0.18030312556249825775e+04, - -0.62651199729806592131e+03, - 0.34039313040927959264e+03, - 0.14579735610469322182e+04, - 0.74992077112503886838e+03, - -0.13795852948263595863e+04, - -0.10590375837493756990e+04, - 0.36216073596303027671e+03, - 0.10924144176160787083e+04, - 0.74783319104520137444e+03, - -0.10846243185131709197e+04, - -0.12660507207711832507e+04, - 0.92845065854878089340e+03, - 0.92419350749720933891e+03, - 0.31754171536010154853e+02, - -0.89705606843249461235e+03, - -0.96145197329491600158e+03, - 0.14650083578207552364e+04, - 0.66041042158853406363e+03, - -0.10824346467083419157e+04, - -0.43849563660990628478e+03, - 0.97135125355440820272e+02, - 0.11901229102913102906e+04, - -0.99744978430721687346e+02, - -0.15422529358201625200e+04, - 0.55727780332533302499e+03, - 0.10061500618487856400e+04, - -0.31043144377976176429e+03, - -0.68148934240747428248e+03, - -0.26326875046556011739e+03, - 0.10079346757958936678e+04, - 0.33760226464299307736e+03, - -0.14101119720711524224e+04, - 0.17562657448351052381e+03, - 0.11814086225262706193e+04, - -0.47644760293599324541e+03, - -0.60517827967848973003e+03, - 0.54471324823456590991e+02, - 0.71374149690347235264e+03, - 0.13732225265707867834e+03, - -0.12120864264692067991e+04, - 0.42314419342077474084e+03, - 0.11225335746614302934e+04, - -0.98672786071161033306e+03, - -0.47652255451414481513e+03, - 0.91762081646168110183e+03, - 0.18377454187087132187e+01, - -0.39373482063352759042e+03, - -0.34248099305891867061e+03, - 0.56867629892938975900e+03, - 0.52222263803426722006e+03, - -0.13212200211371491605e+04, - 0.40539528141954951934e+03, - 0.10568249820974165232e+04, - -0.10641383314715965298e+04, - -0.20550675622339653614e+03, - 0.83166653240532696145e+03, - -0.12947146216694457621e+03, - -0.55860722744268821316e+03, - 0.18362538216996256324e+03, - 0.43166379878073291820e+03, - -0.12305334190703175068e+03, - -0.63633722093400263020e+03, - 0.46244602419585817188e+03, - 0.68165116858285318813e+03, - -0.12514950705065866714e+04, - 0.30948664948836949407e+03, - 0.10680634517669693651e+04, - -0.12153846755862603004e+04, - 0.72040216779203234410e+02, - 0.86004098051384778501e+03, - -0.58560822940596460739e+03, - -0.22842606341895614719e+03, - 0.40364551673988381708e+03, - 0.10830858961690684339e+03, - -0.37141271489890533530e+03, - -0.41986596334514743489e+02, - 0.43947119399810515006e+03, - -0.10571431829446956385e+03, - -0.56091618869063893271e+03, - 0.52945255026296842971e+03, - 0.39061565826313005800e+03, - -0.11403990457566578698e+04, - 0.68950427563962261956e+03, - 0.60741266328332562807e+03, - -0.13470718510245753805e+04, - 0.71615239667246510180e+03, - 0.55740473144218367452e+03, - -0.10765365901151719754e+04, - 0.37127826123161065652e+03, - 0.65048624281672471170e+03, - -0.83379790629929846091e+03, - 0.64051916925569344130e+02, - 0.73278171249199328940e+03, - -0.73138953184222373238e+03, - 0.69613147789658881948e+02, - 0.46833838835442514892e+03, - -0.41620001185713789482e+03, - 0.47802072356604725201e+02, - 0.11237304332787651617e+03, - 0.34265828877298076804e+02, - -0.13872136067023390638e+03, - -0.43049983020396673794e+02, - 0.29219699621383477961e+03, - -0.22972596135428261732e+03, - -0.14302551803865520696e+03, - 0.38313472542033781565e+03, - -0.14295154047841947431e+03, - -0.35392859436607545831e+03, - 0.50955385603135908923e+03, - -0.46837904635267719300e+02, - -0.60500002130950633727e+03, - 0.72241488806099505382e+03, - -0.89139767915510063290e+02, - -0.70735419882282587878e+03, - 0.85223525101132656800e+03, - -0.16999370305722604257e+03, - -0.65634975651002469021e+03, - 0.77628673655126078756e+03, - -0.66285708923727639785e+02, - -0.72262656442676768620e+03, - 0.73728125426149620125e+03, - 0.79268545827294289552e+02, - -0.90738097333009659451e+03, - 0.88495013796961109165e+03, - 0.48539420805876119402e+03, - -0.13384502951999054403e+04, - 0.21887974931857729644e+03, - 0.10847888375533495946e+04, - -0.12734153338875050849e+04, - -0.51628137325663587376e+02, - 0.14593054017921103878e+04, - -0.15684374972471448473e+04, - 0.48416156225987940331e+02, - 0.15039321679416379993e+04, - -0.16192737845288042990e+04, - 0.59333901541916006295e+02, - 0.14174449219892826477e+04, - -0.13294865101973311994e+04, - -0.35958653665219713957e+03, - 0.16807810880882293532e+04, - -0.12026566466327888065e+04, - -0.79236716326628754814e+03, - 0.20625595623450572020e+04, - -0.12585195426074740226e+04, - -0.97008939729716962574e+03, - 0.21420112441758465138e+04, - -0.10886730376039517978e+04, - -0.11410926924080920344e+04, - 0.19522708247401892550e+04, - -0.55125214221970770723e+03, - -0.15506216552988400963e+04, - 0.17910387226647906118e+04, - 0.52768747599428678541e+02, - -0.19923596356484010812e+04, - 0.16780905502692478422e+04, - 0.41862005573257209790e+03, - -0.19813793005999257275e+04, - 0.11683672860929348190e+04, - 0.78214497205947725433e+03, - -0.15352456232536414973e+04, - 0.14198815906358132111e+03, - 0.13824258965673557213e+04, - -0.10739088721787384202e+04, - -0.82432945837185820892e+03, - 0.17195780018444206689e+04, - -0.47297876305313030798e+03, - -0.14183151682600359891e+04, - 0.13090964756487530849e+04, - 0.62061805287455160851e+03, - -0.18503936536118380900e+04, - 0.43121933449002762018e+03, - 0.18308897834506026356e+04, - -0.19872488435406505687e+04, - -0.49344088735452817218e+03, - 0.24011255292318260217e+04, - -0.13569312498289798441e+04, - -0.13455977935219925712e+04, - 0.20129055704879824589e+04, - 0.19805035720298107549e+02, - -0.18789354155092910332e+04, - 0.82742088708751680315e+03, - 0.14260831371179799589e+04, - -0.15927614842722052799e+04, - -0.71110052458634697814e+03, - 0.19208650956792412217e+04, - -0.21819717767931567209e+03, - -0.19455039143596463873e+04, - 0.10316947290916009479e+04, - 0.16997577722536766487e+04, - -0.21866186870120241110e+04, - -0.66136909088124014033e+03, - 0.26694394273799748589e+04, - -0.98591715165450580116e+03, - -0.18587050831288684094e+04, - 0.14629186302135581172e+04, - 0.11452050085376952211e+04, - -0.15513136952896900311e+04, - -0.11173793142972006081e+04, - 0.22274695918688876191e+04, - 0.31413551305830537785e+03, - -0.25939794769957125027e+04, - 0.65784429683204086814e+03, - 0.22880826731708525585e+04, - -0.13563358537598155635e+04, - -0.20030625371031997020e+04, - 0.19417183803074058233e+04, - 0.13183946584855746096e+04, - -0.20987418589676576630e+04, - -0.96537278860383037227e+03, - 0.19837101652614314844e+04, - 0.11015629586720945099e+04, - -0.26751849234125866133e+04, - -0.67631737338876257581e+03, - 0.30800173986942409101e+04, - -0.29125887887399193232e+03, - -0.25164262327724723036e+04, - 0.11212309068147096980e+03, - 0.23219220508130665621e+04, - 0.38582243268790432467e+03, - -0.30839518231092047245e+04, - -0.50148112333797385531e+02, - 0.30905895713595832603e+04, - -0.14714405649761053496e+03, - -0.27350383526633640940e+04, - -0.50455909008396338322e+03, - 0.27926354420012394257e+04, - 0.96604961912852604655e+03, - -0.28125256440494322305e+04, - -0.15806459154003596268e+04, - 0.26012873937975573426e+04, - 0.21523854507785222268e+04, - -0.22576880649865897794e+04, - -0.25126608590566506791e+04, - 0.99960264966691568134e+03, - 0.31804394941349346482e+04, - 0.23903617069642496062e+03, - -0.37098537031578835013e+04, - -0.11545171311681087900e+04, - 0.26887586041523109088e+04, - 0.25298309697297272578e+04, - -0.95920957809132119110e+03, - -0.39696026335375972849e+04, - -0.66622018085226625317e+03, - 0.34404795755051036394e+04, - 0.24371216781214852745e+04, - -0.96272165078341777189e+03, - -0.41193713943629518326e+04, - -0.17579613981672264345e+04, - 0.31139949892810113852e+04, - 0.34790708099973917342e+04, - 0.91301370544003987106e+03, - -0.35093110827575665098e+04, - -0.42347584690204776052e+04, - -0.83608166981088572811e+02, - 0.33170174339533909915e+04, - 0.45488424950250428083e+04, - 0.13158569980915256110e+04, - -0.32129527053246151809e+04, - -0.49215373774146773940e+04, - -0.35350014785130292694e+04, - 0.62943822108326526177e+03, - 0.44393553119694461202e+04, - 0.57435451924440376388e+04, - 0.40846128175080298206e+04, - 0.62792698180521301765e+03, - -0.34334152330616043400e+04, - -0.63712800277271689993e+04, - -0.75232592211954806771e+04, - -0.77009422094574274524e+04, - -0.62639299086147575508e+04, - -0.48414412946127986288e+04, - -0.35273094955497012961e+04, - -0.19075458360461500433e+04, - -0.14658679636780741475e+04, - -0.67434414294283317304e+03, - -0.20656678903995063479e+03, - -0.46675661479816392330e+03, - 0.18506494442662585698e+03, - -0.14056321126815265643e+03, - -0.14889166559539330592e+03, - 0.32105248223861195811e+03, - -0.37475238624729428238e+03, - 0.23483848120034048179e+03, - 0.29174017868123399921e+02, - -0.30087019782352899711e+03, - 0.44817839770495754692e+03, - -0.39459585346950512985e+03, - 0.15727624974176114847e+03, - 0.15983551371810474961e+03, - -0.41181240121770224505e+03, - 0.48267891845749278446e+03, - -0.33828198339066460676e+03, - 0.44745280099026523146e+02, - 0.26409986266795039000e+03, - -0.44721500655883340869e+03, - 0.42357991866970422734e+03, - -0.20744850219538724900e+03, - -0.97608084821938504660e+02, - 0.34931300568108133575e+03, - -0.43141348383545516754e+03, - 0.30856324816639903474e+03, - -0.40131859148490967470e+02, - -0.24702367852357127731e+03, - 0.41919039928523420713e+03, - -0.39613652204390683664e+03, - 0.18861211971285570144e+03, - 0.10863042282281189443e+03, - -0.35976223870219473611e+03, - 0.45108899515322667639e+03, - -0.34137249412473624943e+03, - 0.80678565487994063687e+02, - 0.21400582684730451888e+03, - -0.41122462285359540601e+03, - 0.42488165166319157606e+03, - -0.25145311736100379107e+03, - -0.28884742219393711338e+02, - 0.28979615965553881551e+03, - -0.41529044497105462597e+03, - 0.35187916165572869431e+03, - -0.13124438961047857788e+03, - -0.14462709112983736759e+03, - 0.35027873017770764363e+03, - -0.39311821236585296901e+03, - 0.25503591883296391529e+03, - -0.10969059452305454272e+03, - -0.73118634125768295462e+02, - 0.39008602548752736539e+03, - -0.49414886469421770698e+03, - 0.41476476594194758718e+03, - -0.94458610321204531601e+02, - -0.23934966209543637206e+03, - 0.52043407965613243960e+03, - -0.53193671652236514547e+03, - 0.35050011088390107261e+03, - 0.29687246922885613287e+02, - -0.35070359604875949344e+03, - 0.55248309648974270658e+03, - -0.45941477490411546114e+03, - 0.20464216910282672757e+03, - 0.17383643319040882602e+03, - -0.41064238259675784093e+03, - 0.48069041212944074459e+03, - -0.27135919085062221257e+03, - -0.23336491178437441363e+02, - 0.33716072577937381993e+03, - -0.42594250513274681680e+03, - 0.32792412470661776069e+03, - -0.78353002876935695653e+01, - -0.28619060891285027992e+03, - 0.48424008593151017976e+03, - -0.39316164615622358269e+03, - 0.13378221578188421859e+03, - 0.25411423274922032078e+03, - -0.49222871022523469264e+03, - 0.54097020917200552503e+03, - -0.28422409625940628075e+03, - -0.71923043786834085722e+02, - 0.43756404171107374168e+03, - -0.54667754828202691897e+03, - 0.42954257992754077122e+03, - -0.62849576399210029365e+02, - -0.28051036112441204295e+03, - 0.50681907100698998647e+03, - -0.41538191207016802764e+03, - 0.13982049521764341193e+03, - 0.25363574287672088303e+03, - -0.46700842080093934783e+03, - 0.45751590795723029714e+03, - -0.14520730233275648402e+03, - -0.24742230929253406657e+03, - 0.53642025445064234646e+03, - -0.60245037139000407933e+03, - 0.17994548315993458232e+03, - -0.27248878891674280567e+02, - -0.98646237997210698722e+03, - -0.60906236005264382527e+02, - -0.17363408342738478041e+04, - -0.20191011318316645884e+04, - -0.24140705273072894670e+04, - -0.45388541113900000710e+04, - -0.39169357285739592953e+04, - -0.47372618149956924753e+04, - -0.41376058030594294905e+04, - -0.13595969089082859682e+04, - -0.26826692877036151685e+03, - 0.27217003992500613094e+04, - 0.37303445822828434757e+04, - 0.20470343372612187522e+04, - 0.99008522437654585246e+03, - -0.23095750441422774202e+04, - -0.32821396512201617952e+04, - -0.12120102933573193695e+04, - 0.13982267691575680146e+03, - 0.29585100741473297603e+04, - 0.23923992791454993494e+04, - -0.85555645356942000035e+03, - -0.17189660680684742147e+04, - -0.24488622476641612593e+04, - 0.25449665077770794142e+03, - 0.29051612115642515164e+04, - 0.10141331030673745772e+04, - -0.58964137198850346522e+03, - -0.22649824814795069869e+04, - -0.12701825065210960020e+04, - 0.22574745890578296894e+04, - 0.16827453034442332864e+04, - -0.61281002269670011628e+03, - -0.16763868321768877649e+04, - -0.12866670539036870196e+04, - 0.18188637035143046887e+04, - 0.19728455729174013413e+04, - -0.14776994397532378116e+04, - -0.14404224523686145858e+04, - -0.12220358332192405726e+03, - 0.15177310940782397211e+04, - 0.14695463948334679571e+04, - -0.23078926685456090127e+04, - -0.10517849586678387368e+04, - 0.16910052779368377287e+04, - 0.76314729135564368789e+03, - -0.21667950178424416663e+03, - -0.18622822481076798340e+04, - 0.14899293030407659444e+03, - 0.24458191035914514941e+04, - -0.84618417041040481763e+03, - -0.16634413047962909786e+04, - 0.54211749877315207868e+03, - 0.10656245794198987369e+04, - 0.42070218339769832028e+03, - -0.15901050508949197138e+04, - -0.57526973457165752279e+03, - 0.22924684944220557554e+04, - -0.30888771244742292765e+03, - -0.18751044052070644739e+04, - 0.75887377772328466108e+03, - 0.96545723134341812965e+03, - -0.84257059012072289761e+02, - -0.11406544274624145601e+04, - -0.22495883117340594026e+03, - 0.19439892671759585028e+04, - -0.67377060410067474550e+03, - -0.18134998715719998472e+04, - 0.16127885404047990505e+04, - 0.71600033443020220147e+03, - -0.14194376441452063773e+04, - -0.39963492158553940214e+02, - 0.64201192229915238840e+03, - 0.56927125895211929674e+03, - -0.96400159084166512002e+03, - -0.75851389066241131331e+03, - 0.20317939486799168662e+04, - -0.58205663505620941578e+03, - -0.17236653627088523990e+04, - 0.16916137411876588885e+04, - 0.38235610827522185673e+03, - -0.14138334626612638658e+04, - 0.29902535306597445697e+03, - 0.81686728183732054731e+03, - -0.25129774827106467683e+03, - -0.68859505540147961256e+03, - 0.15257102625164449705e+03, - 0.10910402217545067742e+04, - -0.82001692620055416683e+03, - -0.10258540234086351575e+04, - 0.19704762016857393974e+04, - -0.50338886975204263763e+03, - -0.16651606250515119427e+04, - 0.18805801896743873840e+04, - -0.51785737471382397246e+02, - -0.14184544512287402540e+04, - 0.94454280548525969152e+03, - 0.39588253756479122103e+03, - -0.70546140254196234309e+03, - -0.10223916529491671668e+03, - 0.53378276451635667854e+03, - 0.97617866463123718290e+02, - -0.69207389827342251465e+03, - 0.11684384189849417623e+03, - 0.97901982243836482667e+03, - -0.93713050597946630660e+03, - -0.55027566219591415120e+03, - 0.17857393299121113159e+04, - -0.11115246573536066990e+04, - -0.91689844711660691701e+03, - 0.20664326577714682571e+04, - -0.10443396208016856690e+04, - -0.98141129892751189345e+03, - 0.17788335221340939825e+04, - -0.60442321091668929967e+03, - -0.10774863080864340645e+04, - 0.14075211964423810969e+04, - -0.19366060790729301289e+03, - -0.10858674139120482778e+04, - 0.11083175978332592422e+04, - -0.86852547015205416869e+02, - -0.73379490332475540981e+03, - 0.61786939033176815883e+03, - -0.11001627299177815900e+02, - -0.24436818031069523727e+03, - -0.75896662113302220121e+01, - 0.20249524972830525371e+03, - 0.58650274034608315787e+02, - -0.43402792929430819413e+03, - 0.32342393285307969109e+03, - 0.26887212513621045673e+03, - -0.63622228817819939195e+03, - 0.22812958188798563697e+03, - 0.59016967992630031858e+03, - -0.85465592936501059285e+03, - 0.11714791030167837960e+03, - 0.93685652358024753994e+03, - -0.11468224001802318526e+04, - 0.16071526906485604513e+03, - 0.10891835527890641515e+04, - -0.13062341533491990049e+04, - 0.21433259419279985991e+03, - 0.10927956809205093123e+04, - -0.12574520974400797968e+04, - 0.88465241860087061809e+02, - 0.12044036011214991504e+04, - -0.12483162856714602640e+04, - -0.53196824162834644767e+02, - 0.13903148206203593418e+04, - -0.13810386280040775091e+04, - -0.67861786779276349080e+03, - 0.20541026194426922302e+04, - -0.53231405946610004776e+03, - -0.14659481485279954995e+04, - 0.19933056059018688302e+04, - -0.26152320172839068846e+03, - -0.18242185125432044970e+04, - 0.22210068115316680633e+04, - -0.24819449372484410787e+03, - -0.19643967591039340732e+04, - 0.22781699190084300426e+04, - -0.17424745561710804509e+03, - -0.19732297003292178488e+04, - 0.20104838679203041920e+04, - 0.28824796557864499391e+03, - -0.22502965013544749127e+04, - 0.17962084390778811667e+04, - 0.85595874044016136395e+03, - -0.26745631617665248996e+04, - 0.17316250546689125258e+04, - 0.12168765917762270874e+04, - -0.28171612943118907424e+04, - 0.14406579123519125005e+04, - 0.15514466952065540681e+04, - -0.26343498497549517197e+04, - 0.73147150712970733366e+03, - 0.21129062489566908880e+04, - -0.24107218998259927503e+04, - -0.94070095559998947010e+02, - 0.26687390089101090780e+04, - -0.21364616582908452074e+04, - -0.74240033937363500627e+03, - 0.27403404142904619221e+04, - -0.14032005227107583778e+04, - -0.13789266094852860078e+04, - 0.22946622883589229787e+04, - -0.12220193336590074296e+03, - -0.21338466677417732171e+04, - 0.16399394113961723178e+04, - 0.11823918312049338510e+04, - -0.25248471529877974717e+04, - 0.70486662871371368055e+03, - 0.21058747721604536309e+04, - -0.20319365113369383380e+04, - -0.75967136113461720015e+03, - 0.26732462578511390348e+04, - -0.82301236432021005385e+03, - -0.23530172150260500530e+04, - 0.27041253135125052722e+04, - 0.61348297050033886535e+03, - -0.31870091369927886262e+04, - 0.17308195273778621868e+04, - 0.19506635826518781869e+04, - -0.27359836762559034469e+04, - -0.20164803155864638029e+03, - 0.27604789629981141843e+04, - -0.11314631830326245563e+04, - -0.21493506914335966940e+04, - 0.23574144364935864360e+04, - 0.10188448629966577528e+04, - -0.28251907848298387762e+04, - 0.40213587401518310571e+03, - 0.27743852328992556977e+04, - -0.16008258259549099876e+04, - -0.22391691238244402484e+04, - 0.30292188218646615496e+04, - 0.83147869252584928290e+03, - -0.35376097421241879601e+04, - 0.11443717905170576614e+04, - 0.27487787288865165465e+04, - -0.19820490376624024975e+04, - -0.18636397559632571301e+04, - 0.24490306045553666081e+04, - 0.14535955479345220738e+04, - -0.31848605071860029057e+04, - -0.32219407727504784589e+03, - 0.35632088647123173359e+04, - -0.89571113937723350773e+03, - -0.32114885102639468641e+04, - 0.18897278384272294716e+04, - 0.28071005198847774409e+04, - -0.26457626792007881704e+04, - -0.19845655104265781574e+04, - 0.30042399361303760088e+04, - 0.14790389103059389981e+04, - -0.30217245941503156246e+04, - -0.13682333857788055411e+04, - 0.37351329661112067697e+04, - 0.83317860307092860239e+03, - -0.41135667758429290188e+04, - 0.16450859501813400243e+03, - 0.36776699642604162364e+04, - -0.70908601720349906827e+02, - -0.35270557874664186784e+04, - -0.29140544384812358203e+03, - 0.42216170663577095183e+04, - 0.63074029154833674227e+02, - -0.42489040774105651508e+04, - 0.41696819988828977444e+02, - 0.39904702831665963458e+04, - 0.69246571122889463368e+03, - -0.39937520047950347362e+04, - -0.13421579228532204979e+04, - 0.40079198216635741119e+04, - 0.21869107086132289623e+04, - -0.36536510689129554521e+04, - -0.30116031432537688488e+04, - 0.30729612413055383513e+04, - 0.37302690391545138482e+04, - -0.15340340076454021982e+04, - -0.45171916854418104776e+04, - -0.19884745810956539458e+03, - 0.50536390215851633911e+04, - 0.18047661339145281545e+04, - -0.38502897550407419658e+04, - -0.36998047560596883159e+04, - 0.15572427230450409752e+04, - 0.54619461901282975305e+04, - 0.98406239875046821908e+03, - -0.47607786296390368079e+04, - -0.36731265538675338576e+04, - 0.15651298569563352885e+04, - 0.57698337805667488283e+04, - 0.23918670509909206885e+04, - -0.41831375313245607686e+04, - -0.51916079473046311250e+04, - -0.11287425111774250581e+04, - 0.49709345947522660936e+04, - 0.58610631747231036570e+04, - 0.33845839745053552861e+03, - -0.49007619113580158228e+04, - -0.63490201029711051888e+04, - -0.18579447195226262011e+04, - 0.44755531542746311970e+04, - 0.70741753334434042699e+04, - 0.49506141893018093469e+04, - -0.87074774002085200664e+03, - -0.62998566703865399177e+04, - -0.81273953030770289843e+04, - -0.58377515816376590010e+04, - -0.83523325937492904814e+03, - 0.48410948009888224988e+04, - 0.90050117036269111850e+04, - 0.10760795537214709839e+05, - 0.10804588165686354841e+05, - 0.89690762853007145168e+04, - 0.68584877140737426089e+04, - 0.49232873683748175608e+04, - 0.28329541329642183882e+04, - 0.19704047086665686948e+04, - 0.98411602479730402138e+03, - 0.36691898307876437002e+03, - 0.52088535337570885986e+03, - -0.12907199127779324499e+03, - 0.15134573363296877346e+03, - 0.13566896066504298801e+03, - -0.28085107103442618381e+03, - 0.33792440845154891349e+03, - -0.21798399515274783766e+03, - -0.10588383342704872803e+02, - 0.24939969182612944110e+03, - -0.38188061109240527458e+03, - 0.34081482641809441247e+03, - -0.14007129390660620061e+03, - -0.13079092380936279483e+03, - 0.34629178473591628062e+03, - -0.40601119698241024025e+03, - 0.28044508691650054288e+03, - -0.27230192935064700066e+02, - -0.23741263382025445594e+03, - 0.39121230586791642736e+03, - -0.36451712762770705467e+03, - 0.17073350771342163057e+03, - 0.98894920184805542362e+02, - -0.31972999944510206660e+03, - 0.39016587725360807326e+03, - -0.27966216258304507392e+03, - 0.40607033263772002840e+02, - 0.21543796855902118637e+03, - -0.37091429750706794266e+03, - 0.35496200342198255839e+03, - -0.17638387390549718248e+03, - -0.82459213907660767973e+02, - 0.30297871628019350965e+03, - -0.38563780542381721261e+03, - 0.29385282853271297654e+03, - -0.70631624653317317097e+02, - -0.18265981603105083764e+03, - 0.35188316253639607112e+03, - -0.36231515282878115158e+03, - 0.21100626847924422691e+03, - 0.32187460353707010086e+02, - -0.25738337853286213885e+03, - 0.36386459810731042808e+03, - -0.30554397567854687168e+03, - 0.11060598173295100821e+03, - 0.13152798272496150389e+03, - -0.31116820496588559308e+03, - 0.34752902111743054547e+03, - -0.22505738333179820643e+03, - 0.91128064348534252304e+02, - 0.70525634860268652915e+02, - -0.33055481464794917201e+03, - 0.40803052352600286667e+03, - -0.33162238383933595287e+03, - 0.64834968803296206374e+02, - 0.20373405785952255087e+03, - -0.41831579743453204401e+03, - 0.41028635845422712691e+03, - -0.24887006559877639233e+03, - -0.61002879485453973984e+02, - 0.30872184821176580272e+03, - -0.44713236037623829588e+03, - 0.34419574480531832705e+03, - -0.11664070564538147323e+03, - -0.19491157344159526588e+03, - 0.37462289212355386780e+03, - -0.40461204312353817159e+03, - 0.20434176049174982381e+03, - 0.60272536636949425315e+02, - -0.32597694880495566849e+03, - 0.39386850807707230615e+03, - -0.29615766952989372385e+03, - 0.12937064570479849479e+02, - 0.24828667634883078108e+03, - -0.42278546866658012959e+03, - 0.35304653638059863852e+03, - -0.13655103936900090389e+03, - -0.18862122659147189552e+03, - 0.39364349225138437305e+03, - -0.44074528761672945620e+03, - 0.23590790651415656498e+03, - 0.54649031972988467487e+02, - -0.35352256145295854139e+03, - 0.44350234604611665645e+03, - -0.34497717968653853404e+03, - 0.40479142555357391586e+02, - 0.24836695980816472229e+03, - -0.43965902916270590595e+03, - 0.36771571247975691676e+03, - -0.13569339740516298320e+03, - -0.20116862236869422986e+03, - 0.39917239312720272437e+03, - -0.41455246772067664551e+03, - 0.17541741684109115340e+03, - 0.14573493676036679290e+03, - -0.40097257081516920607e+03, - 0.48697524832155875174e+03, - -0.18370415377827279713e+03, - 0.78731190887498257780e+02, - 0.72297950419970925395e+03, - 0.82422727268595025407e+02, - 0.13622446626571124852e+04, - 0.15688408871303192882e+04, - 0.19413469488217249364e+04, - 0.35341505783907564364e+04, - 0.31161614327828469868e+04, - 0.37223824726468610606e+04, - 0.32494201220626155191e+04, - 0.10948584886085052403e+04, - 0.18548514655497459103e+03, - -0.21268219781726470501e+04, - -0.29428644051395713177e+04, - -0.16219636176777037235e+04, - -0.76469157281284321925e+03, - 0.18067688174185946082e+04, - 0.25890296119906242893e+04, - 0.96360704236448373194e+03, - -0.12697748567030322420e+03, - -0.23144835558713607497e+04, - -0.18919670154820473726e+04, - 0.66543618645923129407e+03, - 0.13784678147397803514e+04, - 0.18963984774214329718e+04, - -0.17028007841979820114e+03, - -0.23044104693568451694e+04, - -0.80658275717326159793e+03, - 0.49581482085970532125e+03, - 0.17369684738594580722e+04, - 0.10506613802154520272e+04, - -0.18153048852797105610e+04, - -0.13149210352377824620e+04, - 0.50243109494297380024e+03, - 0.12751640610525223565e+04, - 0.10723637858793883879e+04, - -0.14876866849084997284e+04, - -0.15198888829034031005e+04, - 0.11596996987674306183e+04, - 0.11086053406326861932e+04, - 0.14473533560410351129e+03, - -0.12516722396520247003e+04, - -0.11111773558273816889e+04, - 0.17938164503905034053e+04, - 0.82522164580043317983e+03, - -0.13039649935655811532e+04, - -0.64442898615055037226e+03, - 0.21470992064833458812e+03, - 0.14352793526248260605e+04, - -0.10577309980850259308e+03, - -0.19170940699045916062e+04, - 0.64046538183729956017e+03, - 0.13433213544845532397e+04, - -0.45599946570833583337e+03, - -0.82257559600797640087e+03, - -0.33365639596634662212e+03, - 0.12421751709671943900e+04, - 0.47072434409159569668e+03, - -0.18236039220085083343e+04, - 0.25508046377426040863e+03, - 0.14733825820292272510e+04, - -0.60022852786093471877e+03, - -0.75629400688493853977e+03, - 0.64457156702322436104e+02, - 0.89523621386762090424e+03, - 0.18559788740903169924e+03, - -0.15413365739579057845e+04, - 0.53621716443634477400e+03, - 0.14328871165906875831e+04, - -0.12867458435901580742e+04, - -0.53801834644085715809e+03, - 0.10882930563068568972e+04, - 0.56418949042476583600e+02, - -0.51679092840834232447e+03, - -0.45748443889749489699e+03, - 0.78873117929264162740e+03, - 0.55384245307511628198e+03, - -0.15533685231018366721e+04, - 0.42030947299347212720e+03, - 0.13757837810467119652e+04, - -0.13239340106068482328e+04, - -0.33570149975162837563e+03, - 0.11655145060323143298e+04, - -0.29088888407072903419e+03, - -0.59960259780681667507e+03, - 0.17728778491974924236e+03, - 0.53416678230667230309e+03, - -0.85269814896569897655e+02, - -0.91130009867908393062e+03, - 0.69982555381821191531e+03, - 0.76750771021008813477e+03, - -0.15361876505875386556e+04, - 0.40893136306922411904e+03, - 0.12749170616990049894e+04, - -0.14311157545429362017e+04, - -0.83736627466661168739e+01, - 0.11507743202112649215e+04, - -0.75162690519825764568e+03, - -0.33266693710186331145e+03, - 0.59889874188408600730e+03, - 0.27409326116978562027e+02, - -0.37274411434953867683e+03, - -0.10549487721623806635e+03, - 0.54592580835879562073e+03, - -0.63989711029345457405e+02, - -0.82102641144220910974e+03, - 0.79633968891804590839e+03, - 0.38281286969640319739e+03, - -0.13772677326897385228e+04, - 0.87519214741736516316e+03, - 0.69344782652472861173e+03, - -0.15771648825140478039e+04, - 0.76306259379519121921e+03, - 0.82639394831848881040e+03, - -0.14347198006637015624e+04, - 0.48146022826362377600e+03, - 0.87217815925880563555e+03, - -0.11539828161535135678e+04, - 0.20721742704820647418e+03, - 0.80538452532138398965e+03, - -0.84000594363258710473e+03, - 0.59604483105806586707e+02, - 0.56170364623336661225e+03, - -0.45090299727488968529e+03, - -0.36192913142630217749e+02, - 0.23398747356078365556e+03, - -0.21343106023760370249e+02, - -0.15277926259462662983e+03, - -0.31930104925658827852e+02, - 0.31186244956662704908e+03, - -0.21828269097936481558e+03, - -0.24409291305724860877e+03, - 0.52006624613482699715e+03, - -0.18003064534726863144e+03, - -0.48294029786749996447e+03, - 0.70410561758708911384e+03, - -0.12682621820827961301e+03, - -0.70988413846635080517e+03, - 0.88988366546495262810e+03, - -0.13183065377308855659e+03, - -0.83497023139890450238e+03, - 0.99385101062288651974e+03, - -0.13070486390492064288e+03, - -0.89182591924953339912e+03, - 0.10057804069045788538e+04, - -0.64566459439553398170e+02, - -0.97348243901727369121e+03, - 0.10216760071935440237e+04, + 0.37503842230669995672e+2, + -0.56233031425094971212e+2, + 0.48120374973649674644e+2, + -0.17498076599550909549e+2, + -0.21204861414828972244e+2, + 0.50130948709254255391e+2, + -0.56052542383755785238e+2, + 0.36326157269276727391e+2, + -0.14622853370641207604e+2, + -0.15138855119088903578e+2, + 0.71124058691650503761e+2, + -0.93329121438852098436e+2, + 0.84360854302846931319e+2, + -0.27314244480765115242e+2, + -0.38253989046484647929e+2, + 0.1011948738350978374e+3, + -0.11650297754204228795e+3, + 0.93497233491678045425e+2, + -0.24659461228651970544e+2, + -0.43382735872478455974e+2, + 0.98410995740965006462e+2, + -0.1009587973453087244e+3, + 0.69486314027803402382e+2, + -0.41745236224547168646e+1, + -0.46747992133994650032e+2, + 0.77198196497412851613e+2, + -0.5925775623905509093e+2, + 0.22834824182937108361e+2, + 0.26494196829822282524e+2, + -0.44658669109962353616e+2, + 0.38216316172803935558e+2, + 0.493367786260422303e+1, + -0.43211153384806067379e+2, + 0.69201932357129280149e+2, + -0.48124215349240451189e+2, + 0.28621747713666834123e+1, + 0.62851239076419034291e+2, + -0.99589184856801509227e+2, + 0.10366047176449073675e+3, + -0.53482341044261097807e+2, + -0.12360099585019233004e+2, + 0.80172085087778327761e+2, + -0.10167644680519366318e+3, + 0.84871401871276560769e+2, + -0.24092749428206968076e+2, + -0.30981484870695947365e+2, + 0.67277551359631374339e+2, + -0.49835222774964080372e+2, + 0.65850342841791800197e+1, + 0.516231444977598386e+2, + -0.71681422684383136357e+2, + 0.52161195660127383178e+2, + 0.16657455851556971282e+2, + -0.88292103014021449781e+2, + 0.1279847428988417164e+3, + -0.11798888582178663853e+3, + 0.12760340091374345661e+2, + 0.30189882219348774584e+2, + -0.23262434269747427606e+3, + 0.14125574495040188694e+2, + -0.35497019658028631284e+3, + -0.4086353162082647259e+3, + -0.46187792136727017578e+3, + -0.92326364348039487595e+3, + -0.76421203662784785138e+3, + -0.94619349265814707906e+3, + -0.82913459600800467797e+3, + -0.258418288520482065e+3, + -0.64165750881051124566e+2, + 0.54481362060043670681e+3, + 0.74807581009501097924e+3, + 0.39268701070843604839e+3, + 0.21398622783130198854e+3, + -0.47248165142941280692e+3, + -0.64873666288197910035e+3, + -0.23423705375935449524e+3, + 0.12901531695448420933e+2, + 0.60529040574654004558e+3, + 0.46352749826657884569e+3, + -0.16762612346143637865e+3, + -0.33380879057094335849e+3, + -0.50200523724201696041e+3, + 0.65588175916382127184e+2, + 0.57033441754591740391e+3, + 0.19609930732336246706e+3, + -0.98075120887387456037e+2, + -0.47875759240230212299e+3, + -0.2237296475113496399e+3, + 0.42924061967179039812e+3, + 0.33739915728246603521e+3, + -0.10497038862652560454e+3, + -0.36675117947821934195e+3, + -0.21458520597709147637e+3, + 0.32361747192641087167e+3, + 0.41676129279650518811e+3, + -0.29837041173879589451e+3, + -0.30231035810353785109e+3, + 0.6255128607141342556e+1, + 0.26619780277243802402e+3, + 0.32219116800784428278e+3, + -0.47500229975988946762e+3, + -0.2105789113350908508e+3, + 0.35293407310422014689e+3, + 0.12660471162590222605e+3, + -0.18534604382496919328e+2, + -0.38607647158551333177e+3, + 0.31516704594580289722e+2, + 0.49856899317026113749e+3, + -0.19043656651060962304e+3, + -0.30571758551412500537e+3, + 0.87173935054436398673e+2, + 0.22250153759966630673e+3, + 0.85178183563270522427e+2, + -0.32832495126959241816e+3, + -0.96075561852143962938e+2, + 0.43662594301269513153e+3, + -0.4579171441498626649e+2, + -0.38259641362445410095e+3, + 0.15477591294105215525e+3, + 0.19189493373831291478e+3, + -0.17877610767912152312e+2, + -0.22633271358060881084e+3, + -0.44632767505875236225e+2, + 0.38759783491160692392e+3, + -0.1389378288135532955e+3, + -0.34943161120489389759e+3, + 0.30266215166762077615e+3, + 0.16508986638564971372e+3, + -0.30489737034779972191e+3, + 0.82883635978386660526e+1, + 0.12363462680608260769e+3, + 0.10155313030043892297e+3, + -0.16487360589513357922e+3, + -0.18811946986505537893e+3, + 0.44354393196567872337e+3, + -0.14795871229511152478e+3, + -0.32620616336461506535e+3, + 0.34008421559570246018e+3, + 0.52517432940381894468e+2, + -0.24349066094913646907e+3, + 0.16994506196220008576e+2, + 0.19904706508537105947e+3, + -0.71797353962319547804e+2, + -0.13476774078202575424e+3, + 0.47219099177335017714e+2, + 0.18670095316858382262e+3, + -0.12856675941194927759e+3, + -0.23294188742563252958e+3, + 0.40744356714364300842e+3, + -0.98921283555725366909e+2, + -0.34743350579823993485e+3, + 0.39913115522174041416e+3, + -0.35598296540491681128e+2, + -0.26524641787511188795e+3, + 0.1852167882395924039e+3, + 0.65883394244387162075e+2, + -0.11578031830709977612e+3, + -0.48895783730993926497e+2, + 0.12945351510314048937e+3, + 0.94883453824050771885e+1, + -0.14566408991141386764e+3, + 0.48681595688513176867e+2, + 0.15742458888849597543e+3, + -0.14660535045547365485e+3, + -0.14119422641037311905e+3, + 0.36999294643008977346e+3, + -0.21425743352164971611e+3, + -0.21017774526415172431e+3, + 0.45383834653842427542e+3, + -0.25585928762585697882e+3, + -0.15288807956958476097e+3, + 0.32701787989058533412e+3, + -0.11485339617906377896e+3, + -0.19767548379085607735e+3, + 0.24597609485908046167e+3, + 0.42078065988889692406e+1, + -0.25733198889346977012e+3, + 0.2512605972414941391e+3, + -0.3158664027696488219e+2, + -0.14974637179895060513e+3, + 0.1418528609555765172e+3, + -0.29944503273013296507e+2, + -0.20020532289803735893e+2, + -0.23628840463383703252e+2, + 0.51139989364363827917e+2, + 0.1321475167523471228e+2, + -0.97872794712073783785e+2, + 0.80789223312499686358e+2, + 0.3816416488350343883e+2, + -0.11765367354237193354e+3, + 0.45817575277387447841e+2, + 0.10784530512233567379e+3, + -0.1546700734416447176e+3, + 0.75197262783665932417e+1, + 0.19683875834229064594e+3, + -0.22892345366353575287e+3, + 0.21362481640783805403e+2, + 0.23713886186157279212e+3, + -0.28571451241815117328e+3, + 0.67524270354103663294e+2, + 0.20017583035551808734e+3, + -0.24587855323442911981e+3, + 0.28603920592657789967e+2, + 0.21471967685254202252e+3, + -0.21453398108453669124e+3, + -0.46001736275089108119e+2, + 0.30576061951774386216e+3, + -0.29115978722501563425e+3, + -0.18216887248269011934e+3, + 0.44689187851765706228e+3, + -0.7780722885131810429e+1, + -0.43139241806286673864e+3, + 0.4170114240396343348e+3, + 0.12986445510689708271e+3, + -0.63268848561563095245e+3, + 0.5991163263913499577e+3, + 0.29076681489173608952e+2, + -0.61073770734182119213e+3, + 0.61144112520281271372e+3, + 0.26367662531267206383e+1, + -0.53565448900869330373e+3, + 0.44941867989832883268e+3, + 0.2148403223876581194e+3, + -0.68122554798482826754e+3, + 0.42888209408248889076e+3, + 0.37856649679454011448e+3, + -0.85338676745947122981e+3, + 0.49326229674257251645e+3, + 0.40712352781452125328e+3, + -0.86579523590408120981e+3, + 0.43540003065347264055e+3, + 0.45191603763999751209e+3, + -0.77508082241622889796e+3, + 0.2219081344755597911e+3, + 0.60955015609867712101e+3, + -0.71273362781887658457e+3, + -0.14281939509217989936e+2, + 0.79812373817946718191e+3, + -0.70844054986300557175e+3, + -0.10713487417234300381e+3, + 0.76231889095794326749e+3, + -0.51698389063547836031e+3, + -0.20670689949480379255e+3, + 0.53386359353339526024e+3, + -0.70539669885234843605e+2, + -0.47272057885197784799e+3, + 0.37411842481905063096e+3, + 0.29914949097187326288e+3, + -0.61543385558048044004e+3, + 0.16813407857982915061e+3, + 0.49732824699139672475e+3, + -0.42847345765323495925e+3, + -0.27900412058866220377e+3, + 0.68646482445334095246e+3, + -0.10122635581024124463e+3, + -0.76031634996802313253e+3, + 0.78197904895311830842e+3, + 0.20812166767556217906e+3, + -0.96317128161026266753e+3, + 0.56397426057196287275e+3, + 0.49510816359488183025e+3, + -0.79290606867428414262e+3, + 0.44629271960600512159e+2, + 0.6796345100766094447e+3, + -0.33000845373859982601e+3, + -0.48845304404166597578e+3, + 0.56148583171198220043e+3, + 0.26533317290113342324e+3, + -0.68674693297351541332e+3, + 0.46985564871574155177e+2, + 0.73371295959618214511e+3, + -0.35431905515082638658e+3, + -0.68080639977391149387e+3, + 0.83440695977906739245e+3, + 0.28574957309264021887e+3, + -0.10787372633744444101e+4, + 0.44498212436790424817e+3, + 0.6692225287397466218e+3, + -0.58695593130512713742e+3, + -0.34488458512084292806e+3, + 0.49554272146314508518e+3, + 0.46585404768099471084e+3, + -0.82993777190191804038e+3, + -0.15669173925288271221e+3, + 0.10116975167249560172e+4, + -0.26265337204306814556e+3, + -0.86377433967657782432e+3, + 0.51511419116823219611e+3, + 0.7644815274495824724e+3, + -0.76324481272560001344e+3, + -0.45835667699063020564e+3, + 0.77888060338793820847e+3, + 0.32705663826251799264e+3, + -0.67864052298810304364e+3, + -0.47300887423151772282e+3, + 0.10201308903218831574e+4, + 0.29478322827428405617e+3, + -0.12360807782652127571e+4, + 0.18758848670263364511e+3, + 0.91029341275284821222e+3, + -0.71760032606240955033e+2, + -0.79407422468910056068e+3, + -0.22873115339100485244e+3, + 0.12078741008040631186e+4, + 0.18633167518712966171e+2, + -0.12001852515567418322e+4, + 0.109098845682866326e+3, + 0.9866717176433479608e+3, + 0.20220371491478408643e+3, + -0.10432263678894976238e+4, + -0.36528687948257800144e+3, + 0.10450075951861851991e+4, + 0.61053053204311504487e+3, + -0.98379254165118049968e+3, + -0.82588039883683063636e+3, + 0.89516145844107359153e+3, + 0.8810088129868240685e+3, + -0.33024284425522120046e+3, + -0.11962421742145993449e+4, + -0.13153456999429155871e+3, + 0.14585732969092978237e+4, + 0.37394359665572653739e+3, + -0.98683599163662859155e+3, + -0.92500950302681997073e+3, + 0.30901097037629591568e+3, + 0.15326551005434730541e+4, + 0.24183630114259165111e+3, + -0.13264719296842129097e+4, + -0.85187155867243757257e+3, + 0.30842287965980625586e+3, + 0.1554989929640184755e+4, + 0.70361701456002094801e+3, + -0.12515427055539162211e+4, + -0.12168288779206452546e+4, + -0.39666655464299287814e+3, + 0.13149179198919030114e+4, + 0.16409509859569659511e+4, + -0.4857001653963774146e+2, + -0.11696217779872681604e+4, + -0.17500042327257478973e+4, + -0.48618412153962634648e+3, + 0.12243238527530124884e+4, + 0.18171523517332007032e+4, + 0.13487664395181097916e+4, + -0.25027618299261291668e+3, + -0.16536925701108627891e+4, + -0.21699109192329201505e+4, + -0.15082682455537003534e+4, + -0.25963901137791174278e+3, + 0.1299844934588655633e+4, + 0.23988511416264673244e+4, + 0.27894723228604657379e+4, + 0.29296670954688984239e+4, + 0.23160011322977215968e+4, + 0.18236548624135932641e+4, + 0.13432542870024806234e+4, + 0.67739620954064196212e+3, + 0.5840028733993926835e+3, + 0.24180093933715843946e+3, + 0.57937892284381746322e+2, + 0.21539138147512537103e+3, + -0.10827916828556351447e+3, + 0.66689950510282244522e+2, + 0.78209449388969559891e+2, + -0.17148097537945142221e+3, + 0.19588765672084747393e+3, + -0.11810202319824388439e+3, + -0.26128796130170620415e+2, + 0.17231021641229889951e+3, + -0.24900403752462000284e+3, + 0.21502598638849678991e+3, + -0.8056215005729761458e+2, + -0.96792185983304975139e+2, + 0.2372341433943819311e+3, + -0.27693834127646772458e+3, + 0.19709121554700567458e+3, + -0.33884162543772269771e+2, + -0.13917897324043246954e+3, + 0.24446801008843948466e+3, + -0.23692239353215643405e+3, + 0.12351665714949518815e+3, + 0.39946654622399783818e+2, + -0.17625241968295154038e+3, + 0.22210755011833856543e+3, + -0.15799132827336126184e+3, + 0.15813984551761723907e+2, + 0.1359216454348421621e+3, + -0.22500568421436977928e+3, + 0.20838291256601314672e+3, + -0.92437123924787641727e+2, + -0.70826563744208726803e+2, + 0.20728904995018137924e+3, + -0.25512859716884349837e+3, + 0.19227323431204757753e+3, + -0.46552105124367486155e+2, + -0.11764939795435564918e+3, + 0.22813582251911776666e+3, + -0.23756913919748066633e+3, + 0.14385264537817951691e+3, + 0.92751622926073338249e+1, + -0.15270437797958808801e+3, + 0.22285159493865765512e+3, + -0.19014983628083061262e+3, + 0.71509469356268965612e+2, + 0.77743346121759813627e+2, + -0.18934632033695689302e+3, + 0.21281805569873097284e+3, + -0.1381523745133256682e+3, + 0.61057565366816227481e+2, + 0.40664256658377709641e+2, + -0.22905138877515773288e+3, + 0.29727169772823714311e+3, + -0.25889527605876105554e+3, + 0.69990288939568273463e+2, + 0.13569941825911445221e+3, + -0.31987719467144597729e+3, + 0.34455374332819815208e+3, + -0.2492481290585071747e+3, + 0.21298201555058021484e+2, + 0.18486478647934686137e+3, + -0.33141684852356286228e+3, + 0.30233676168040983612e+3, + -0.16954863297559077751e+3, + -0.53526004476392124332e+2, + 0.20743917015935528525e+3, + -0.27487110827541067692e+3, + 0.17761731252670870163e+3, + -0.2461379006717245943e+2, + -0.15340797076009386046e+3, + 0.21012159961966656851e+3, + -0.1677523781464590229e+3, + -0.30731098748410583532e+1, + 0.15842871513728593413e+3, + -0.26381004064875179438e+3, + 0.20360442554921218061e+3, + -0.51500626650102361737e+2, + -0.17375135645028319686e+3, + 0.30686733293880109841e+3, + -0.32916637963972516445e+3, + 0.17031999625766175654e+3, + 0.44351133061074328623e+2, + -0.26470276072159475689e+3, + 0.33127727964540537187e+3, + -0.26599375552965028646e+3, + 0.53053738800927547459e+2, + 0.14339812439193624982e+3, + -0.27258656593255034295e+3, + 0.2161448447123678136e+3, + -0.59546089801902688521e+2, + -0.15896812620634995028e+3, + 0.26178399755608063515e+3, + -0.23202124871443308507e+3, + 0.28350082630189561428e+2, + 0.20718530274014250381e+3, + -0.36229958449881763727e+3, + 0.37101159528353770156e+3, + -0.77625785801841900025e+2, + -0.34436179241464742518e+2, + 0.66772470362032493085e+3, + 0.28894693858628213157e+1, + 0.10956418402137649082e+4, + 0.12760923770220886126e+4, + 0.14788239559162766454e+4, + 0.28696326977493226877e+4, + 0.24249052187989886988e+4, + 0.29672371053158517498e+4, + 0.25962546393005059144e+4, + 0.82973050236781125477e+3, + 0.18747541960969479646e+3, + -0.17114133695876819274e+4, + -0.23348537437691861669e+4, + -0.12639529070898540795e+4, + -0.63914142345836296499e+3, + 0.14598016447192039777e+4, + 0.20463515825321801458e+4, + 0.74908542330107889029e+3, + -0.6915934505992284187e+2, + -0.18687790053253058886e+4, + -0.14831987552215327923e+4, + 0.53690266117060718898e+3, + 0.10573744593880162483e+4, + 0.15567190730825868741e+4, + -0.18399805553263595925e+3, + -0.18030312556249825775e+4, + -0.62651199729806592131e+3, + 0.34039313040927959264e+3, + 0.14579735610469322182e+4, + 0.74992077112503886838e+3, + -0.13795852948263595863e+4, + -0.1059037583749375699e+4, + 0.36216073596303027671e+3, + 0.10924144176160787083e+4, + 0.74783319104520137444e+3, + -0.10846243185131709197e+4, + -0.12660507207711832507e+4, + 0.9284506585487808934e+3, + 0.92419350749720933891e+3, + 0.31754171536010154853e+2, + -0.89705606843249461235e+3, + -0.96145197329491600158e+3, + 0.14650083578207552364e+4, + 0.66041042158853406363e+3, + -0.10824346467083419157e+4, + -0.43849563660990628478e+3, + 0.97135125355440820272e+2, + 0.11901229102913102906e+4, + -0.99744978430721687346e+2, + -0.154225293582016252e+4, + 0.55727780332533302499e+3, + 0.100615006184878564e+4, + -0.31043144377976176429e+3, + -0.68148934240747428248e+3, + -0.26326875046556011739e+3, + 0.10079346757958936678e+4, + 0.33760226464299307736e+3, + -0.14101119720711524224e+4, + 0.17562657448351052381e+3, + 0.11814086225262706193e+4, + -0.47644760293599324541e+3, + -0.60517827967848973003e+3, + 0.54471324823456590991e+2, + 0.71374149690347235264e+3, + 0.13732225265707867834e+3, + -0.12120864264692067991e+4, + 0.42314419342077474084e+3, + 0.11225335746614302934e+4, + -0.98672786071161033306e+3, + -0.47652255451414481513e+3, + 0.91762081646168110183e+3, + 0.18377454187087132187e+1, + -0.39373482063352759042e+3, + -0.34248099305891867061e+3, + 0.568676298929389759e+3, + 0.52222263803426722006e+3, + -0.13212200211371491605e+4, + 0.40539528141954951934e+3, + 0.10568249820974165232e+4, + -0.10641383314715965298e+4, + -0.20550675622339653614e+3, + 0.83166653240532696145e+3, + -0.12947146216694457621e+3, + -0.55860722744268821316e+3, + 0.18362538216996256324e+3, + 0.4316637987807329182e+3, + -0.12305334190703175068e+3, + -0.6363372209340026302e+3, + 0.46244602419585817188e+3, + 0.68165116858285318813e+3, + -0.12514950705065866714e+4, + 0.30948664948836949407e+3, + 0.10680634517669693651e+4, + -0.12153846755862603004e+4, + 0.7204021677920323441e+2, + 0.86004098051384778501e+3, + -0.58560822940596460739e+3, + -0.22842606341895614719e+3, + 0.40364551673988381708e+3, + 0.10830858961690684339e+3, + -0.3714127148989053353e+3, + -0.41986596334514743489e+2, + 0.43947119399810515006e+3, + -0.10571431829446956385e+3, + -0.56091618869063893271e+3, + 0.52945255026296842971e+3, + 0.390615658263130058e+3, + -0.11403990457566578698e+4, + 0.68950427563962261956e+3, + 0.60741266328332562807e+3, + -0.13470718510245753805e+4, + 0.7161523966724651018e+3, + 0.55740473144218367452e+3, + -0.10765365901151719754e+4, + 0.37127826123161065652e+3, + 0.6504862428167247117e+3, + -0.83379790629929846091e+3, + 0.6405191692556934413e+2, + 0.7327817124919932894e+3, + -0.73138953184222373238e+3, + 0.69613147789658881948e+2, + 0.46833838835442514892e+3, + -0.41620001185713789482e+3, + 0.47802072356604725201e+2, + 0.11237304332787651617e+3, + 0.34265828877298076804e+2, + -0.13872136067023390638e+3, + -0.43049983020396673794e+2, + 0.29219699621383477961e+3, + -0.22972596135428261732e+3, + -0.14302551803865520696e+3, + 0.38313472542033781565e+3, + -0.14295154047841947431e+3, + -0.35392859436607545831e+3, + 0.50955385603135908923e+3, + -0.468379046352677193e+2, + -0.60500002130950633727e+3, + 0.72241488806099505382e+3, + -0.8913976791551006329e+2, + -0.70735419882282587878e+3, + 0.852235251011326568e+3, + -0.16999370305722604257e+3, + -0.65634975651002469021e+3, + 0.77628673655126078756e+3, + -0.66285708923727639785e+2, + -0.7226265644267676862e+3, + 0.73728125426149620125e+3, + 0.79268545827294289552e+2, + -0.90738097333009659451e+3, + 0.88495013796961109165e+3, + 0.48539420805876119402e+3, + -0.13384502951999054403e+4, + 0.21887974931857729644e+3, + 0.10847888375533495946e+4, + -0.12734153338875050849e+4, + -0.51628137325663587376e+2, + 0.14593054017921103878e+4, + -0.15684374972471448473e+4, + 0.48416156225987940331e+2, + 0.15039321679416379993e+4, + -0.1619273784528804299e+4, + 0.59333901541916006295e+2, + 0.14174449219892826477e+4, + -0.13294865101973311994e+4, + -0.35958653665219713957e+3, + 0.16807810880882293532e+4, + -0.12026566466327888065e+4, + -0.79236716326628754814e+3, + 0.2062559562345057202e+4, + -0.12585195426074740226e+4, + -0.97008939729716962574e+3, + 0.21420112441758465138e+4, + -0.10886730376039517978e+4, + -0.11410926924080920344e+4, + 0.1952270824740189255e+4, + -0.55125214221970770723e+3, + -0.15506216552988400963e+4, + 0.17910387226647906118e+4, + 0.52768747599428678541e+2, + -0.19923596356484010812e+4, + 0.16780905502692478422e+4, + 0.4186200557325720979e+3, + -0.19813793005999257275e+4, + 0.1168367286092934819e+4, + 0.78214497205947725433e+3, + -0.15352456232536414973e+4, + 0.14198815906358132111e+3, + 0.13824258965673557213e+4, + -0.10739088721787384202e+4, + -0.82432945837185820892e+3, + 0.17195780018444206689e+4, + -0.47297876305313030798e+3, + -0.14183151682600359891e+4, + 0.13090964756487530849e+4, + 0.62061805287455160851e+3, + -0.185039365361183809e+4, + 0.43121933449002762018e+3, + 0.18308897834506026356e+4, + -0.19872488435406505687e+4, + -0.49344088735452817218e+3, + 0.24011255292318260217e+4, + -0.13569312498289798441e+4, + -0.13455977935219925712e+4, + 0.20129055704879824589e+4, + 0.19805035720298107549e+2, + -0.18789354155092910332e+4, + 0.82742088708751680315e+3, + 0.14260831371179799589e+4, + -0.15927614842722052799e+4, + -0.71110052458634697814e+3, + 0.19208650956792412217e+4, + -0.21819717767931567209e+3, + -0.19455039143596463873e+4, + 0.10316947290916009479e+4, + 0.16997577722536766487e+4, + -0.2186618687012024111e+4, + -0.66136909088124014033e+3, + 0.26694394273799748589e+4, + -0.98591715165450580116e+3, + -0.18587050831288684094e+4, + 0.14629186302135581172e+4, + 0.11452050085376952211e+4, + -0.15513136952896900311e+4, + -0.11173793142972006081e+4, + 0.22274695918688876191e+4, + 0.31413551305830537785e+3, + -0.25939794769957125027e+4, + 0.65784429683204086814e+3, + 0.22880826731708525585e+4, + -0.13563358537598155635e+4, + -0.2003062537103199702e+4, + 0.19417183803074058233e+4, + 0.13183946584855746096e+4, + -0.2098741858967657663e+4, + -0.96537278860383037227e+3, + 0.19837101652614314844e+4, + 0.11015629586720945099e+4, + -0.26751849234125866133e+4, + -0.67631737338876257581e+3, + 0.30800173986942409101e+4, + -0.29125887887399193232e+3, + -0.25164262327724723036e+4, + 0.1121230906814709698e+3, + 0.23219220508130665621e+4, + 0.38582243268790432467e+3, + -0.30839518231092047245e+4, + -0.50148112333797385531e+2, + 0.30905895713595832603e+4, + -0.14714405649761053496e+3, + -0.2735038352663364094e+4, + -0.50455909008396338322e+3, + 0.27926354420012394257e+4, + 0.96604961912852604655e+3, + -0.28125256440494322305e+4, + -0.15806459154003596268e+4, + 0.26012873937975573426e+4, + 0.21523854507785222268e+4, + -0.22576880649865897794e+4, + -0.25126608590566506791e+4, + 0.99960264966691568134e+3, + 0.31804394941349346482e+4, + 0.23903617069642496062e+3, + -0.37098537031578835013e+4, + -0.115451713116810879e+4, + 0.26887586041523109088e+4, + 0.25298309697297272578e+4, + -0.9592095780913211911e+3, + -0.39696026335375972849e+4, + -0.66622018085226625317e+3, + 0.34404795755051036394e+4, + 0.24371216781214852745e+4, + -0.96272165078341777189e+3, + -0.41193713943629518326e+4, + -0.17579613981672264345e+4, + 0.31139949892810113852e+4, + 0.34790708099973917342e+4, + 0.91301370544003987106e+3, + -0.35093110827575665098e+4, + -0.42347584690204776052e+4, + -0.83608166981088572811e+2, + 0.33170174339533909915e+4, + 0.45488424950250428083e+4, + 0.1315856998091525611e+4, + -0.32129527053246151809e+4, + -0.4921537377414677394e+4, + -0.35350014785130292694e+4, + 0.62943822108326526177e+3, + 0.44393553119694461202e+4, + 0.57435451924440376388e+4, + 0.40846128175080298206e+4, + 0.62792698180521301765e+3, + -0.343341523306160434e+4, + -0.63712800277271689993e+4, + -0.75232592211954806771e+4, + -0.77009422094574274524e+4, + -0.62639299086147575508e+4, + -0.48414412946127986288e+4, + -0.35273094955497012961e+4, + -0.19075458360461500433e+4, + -0.14658679636780741475e+4, + -0.67434414294283317304e+3, + -0.20656678903995063479e+3, + -0.4667566147981639233e+3, + 0.18506494442662585698e+3, + -0.14056321126815265643e+3, + -0.14889166559539330592e+3, + 0.32105248223861195811e+3, + -0.37475238624729428238e+3, + 0.23483848120034048179e+3, + 0.29174017868123399921e+2, + -0.30087019782352899711e+3, + 0.44817839770495754692e+3, + -0.39459585346950512985e+3, + 0.15727624974176114847e+3, + 0.15983551371810474961e+3, + -0.41181240121770224505e+3, + 0.48267891845749278446e+3, + -0.33828198339066460676e+3, + 0.44745280099026523146e+2, + 0.26409986266795039e+3, + -0.44721500655883340869e+3, + 0.42357991866970422734e+3, + -0.207448502195387249e+3, + -0.9760808482193850466e+2, + 0.34931300568108133575e+3, + -0.43141348383545516754e+3, + 0.30856324816639903474e+3, + -0.4013185914849096747e+2, + -0.24702367852357127731e+3, + 0.41919039928523420713e+3, + -0.39613652204390683664e+3, + 0.18861211971285570144e+3, + 0.10863042282281189443e+3, + -0.35976223870219473611e+3, + 0.45108899515322667639e+3, + -0.34137249412473624943e+3, + 0.80678565487994063687e+2, + 0.21400582684730451888e+3, + -0.41122462285359540601e+3, + 0.42488165166319157606e+3, + -0.25145311736100379107e+3, + -0.28884742219393711338e+2, + 0.28979615965553881551e+3, + -0.41529044497105462597e+3, + 0.35187916165572869431e+3, + -0.13124438961047857788e+3, + -0.14462709112983736759e+3, + 0.35027873017770764363e+3, + -0.39311821236585296901e+3, + 0.25503591883296391529e+3, + -0.10969059452305454272e+3, + -0.73118634125768295462e+2, + 0.39008602548752736539e+3, + -0.49414886469421770698e+3, + 0.41476476594194758718e+3, + -0.94458610321204531601e+2, + -0.23934966209543637206e+3, + 0.5204340796561324396e+3, + -0.53193671652236514547e+3, + 0.35050011088390107261e+3, + 0.29687246922885613287e+2, + -0.35070359604875949344e+3, + 0.55248309648974270658e+3, + -0.45941477490411546114e+3, + 0.20464216910282672757e+3, + 0.17383643319040882602e+3, + -0.41064238259675784093e+3, + 0.48069041212944074459e+3, + -0.27135919085062221257e+3, + -0.23336491178437441363e+2, + 0.33716072577937381993e+3, + -0.4259425051327468168e+3, + 0.32792412470661776069e+3, + -0.78353002876935695653e+1, + -0.28619060891285027992e+3, + 0.48424008593151017976e+3, + -0.39316164615622358269e+3, + 0.13378221578188421859e+3, + 0.25411423274922032078e+3, + -0.49222871022523469264e+3, + 0.54097020917200552503e+3, + -0.28422409625940628075e+3, + -0.71923043786834085722e+2, + 0.43756404171107374168e+3, + -0.54667754828202691897e+3, + 0.42954257992754077122e+3, + -0.62849576399210029365e+2, + -0.28051036112441204295e+3, + 0.50681907100698998647e+3, + -0.41538191207016802764e+3, + 0.13982049521764341193e+3, + 0.25363574287672088303e+3, + -0.46700842080093934783e+3, + 0.45751590795723029714e+3, + -0.14520730233275648402e+3, + -0.24742230929253406657e+3, + 0.53642025445064234646e+3, + -0.60245037139000407933e+3, + 0.17994548315993458232e+3, + -0.27248878891674280567e+2, + -0.98646237997210698722e+3, + -0.60906236005264382527e+2, + -0.17363408342738478041e+4, + -0.20191011318316645884e+4, + -0.2414070527307289467e+4, + -0.4538854111390000071e+4, + -0.39169357285739592953e+4, + -0.47372618149956924753e+4, + -0.41376058030594294905e+4, + -0.13595969089082859682e+4, + -0.26826692877036151685e+3, + 0.27217003992500613094e+4, + 0.37303445822828434757e+4, + 0.20470343372612187522e+4, + 0.99008522437654585246e+3, + -0.23095750441422774202e+4, + -0.32821396512201617952e+4, + -0.12120102933573193695e+4, + 0.13982267691575680146e+3, + 0.29585100741473297603e+4, + 0.23923992791454993494e+4, + -0.85555645356942000035e+3, + -0.17189660680684742147e+4, + -0.24488622476641612593e+4, + 0.25449665077770794142e+3, + 0.29051612115642515164e+4, + 0.10141331030673745772e+4, + -0.58964137198850346522e+3, + -0.22649824814795069869e+4, + -0.1270182506521096002e+4, + 0.22574745890578296894e+4, + 0.16827453034442332864e+4, + -0.61281002269670011628e+3, + -0.16763868321768877649e+4, + -0.12866670539036870196e+4, + 0.18188637035143046887e+4, + 0.19728455729174013413e+4, + -0.14776994397532378116e+4, + -0.14404224523686145858e+4, + -0.12220358332192405726e+3, + 0.15177310940782397211e+4, + 0.14695463948334679571e+4, + -0.23078926685456090127e+4, + -0.10517849586678387368e+4, + 0.16910052779368377287e+4, + 0.76314729135564368789e+3, + -0.21667950178424416663e+3, + -0.1862282248107679834e+4, + 0.14899293030407659444e+3, + 0.24458191035914514941e+4, + -0.84618417041040481763e+3, + -0.16634413047962909786e+4, + 0.54211749877315207868e+3, + 0.10656245794198987369e+4, + 0.42070218339769832028e+3, + -0.15901050508949197138e+4, + -0.57526973457165752279e+3, + 0.22924684944220557554e+4, + -0.30888771244742292765e+3, + -0.18751044052070644739e+4, + 0.75887377772328466108e+3, + 0.96545723134341812965e+3, + -0.84257059012072289761e+2, + -0.11406544274624145601e+4, + -0.22495883117340594026e+3, + 0.19439892671759585028e+4, + -0.6737706041006747455e+3, + -0.18134998715719998472e+4, + 0.16127885404047990505e+4, + 0.71600033443020220147e+3, + -0.14194376441452063773e+4, + -0.39963492158553940214e+2, + 0.6420119222991523884e+3, + 0.56927125895211929674e+3, + -0.96400159084166512002e+3, + -0.75851389066241131331e+3, + 0.20317939486799168662e+4, + -0.58205663505620941578e+3, + -0.1723665362708852399e+4, + 0.16916137411876588885e+4, + 0.38235610827522185673e+3, + -0.14138334626612638658e+4, + 0.29902535306597445697e+3, + 0.81686728183732054731e+3, + -0.25129774827106467683e+3, + -0.68859505540147961256e+3, + 0.15257102625164449705e+3, + 0.10910402217545067742e+4, + -0.82001692620055416683e+3, + -0.10258540234086351575e+4, + 0.19704762016857393974e+4, + -0.50338886975204263763e+3, + -0.16651606250515119427e+4, + 0.1880580189674387384e+4, + -0.51785737471382397246e+2, + -0.1418454451228740254e+4, + 0.94454280548525969152e+3, + 0.39588253756479122103e+3, + -0.70546140254196234309e+3, + -0.10223916529491671668e+3, + 0.53378276451635667854e+3, + 0.9761786646312371829e+2, + -0.69207389827342251465e+3, + 0.11684384189849417623e+3, + 0.97901982243836482667e+3, + -0.9371305059794663066e+3, + -0.5502756621959141512e+3, + 0.17857393299121113159e+4, + -0.1111524657353606699e+4, + -0.91689844711660691701e+3, + 0.20664326577714682571e+4, + -0.1044339620801685669e+4, + -0.98141129892751189345e+3, + 0.17788335221340939825e+4, + -0.60442321091668929967e+3, + -0.10774863080864340645e+4, + 0.14075211964423810969e+4, + -0.19366060790729301289e+3, + -0.10858674139120482778e+4, + 0.11083175978332592422e+4, + -0.86852547015205416869e+2, + -0.73379490332475540981e+3, + 0.61786939033176815883e+3, + -0.110016272991778159e+2, + -0.24436818031069523727e+3, + -0.75896662113302220121e+1, + 0.20249524972830525371e+3, + 0.58650274034608315787e+2, + -0.43402792929430819413e+3, + 0.32342393285307969109e+3, + 0.26887212513621045673e+3, + -0.63622228817819939195e+3, + 0.22812958188798563697e+3, + 0.59016967992630031858e+3, + -0.85465592936501059285e+3, + 0.1171479103016783796e+3, + 0.93685652358024753994e+3, + -0.11468224001802318526e+4, + 0.16071526906485604513e+3, + 0.10891835527890641515e+4, + -0.13062341533491990049e+4, + 0.21433259419279985991e+3, + 0.10927956809205093123e+4, + -0.12574520974400797968e+4, + 0.88465241860087061809e+2, + 0.12044036011214991504e+4, + -0.1248316285671460264e+4, + -0.53196824162834644767e+2, + 0.13903148206203593418e+4, + -0.13810386280040775091e+4, + -0.6786178677927634908e+3, + 0.20541026194426922302e+4, + -0.53231405946610004776e+3, + -0.14659481485279954995e+4, + 0.19933056059018688302e+4, + -0.26152320172839068846e+3, + -0.1824218512543204497e+4, + 0.22210068115316680633e+4, + -0.24819449372484410787e+3, + -0.19643967591039340732e+4, + 0.22781699190084300426e+4, + -0.17424745561710804509e+3, + -0.19732297003292178488e+4, + 0.2010483867920304192e+4, + 0.28824796557864499391e+3, + -0.22502965013544749127e+4, + 0.17962084390778811667e+4, + 0.85595874044016136395e+3, + -0.26745631617665248996e+4, + 0.17316250546689125258e+4, + 0.12168765917762270874e+4, + -0.28171612943118907424e+4, + 0.14406579123519125005e+4, + 0.15514466952065540681e+4, + -0.26343498497549517197e+4, + 0.73147150712970733366e+3, + 0.2112906248956690888e+4, + -0.24107218998259927503e+4, + -0.9407009555999894701e+2, + 0.2668739008910109078e+4, + -0.21364616582908452074e+4, + -0.74240033937363500627e+3, + 0.27403404142904619221e+4, + -0.14032005227107583778e+4, + -0.13789266094852860078e+4, + 0.22946622883589229787e+4, + -0.12220193336590074296e+3, + -0.21338466677417732171e+4, + 0.16399394113961723178e+4, + 0.1182391831204933851e+4, + -0.25248471529877974717e+4, + 0.70486662871371368055e+3, + 0.21058747721604536309e+4, + -0.2031936511336938338e+4, + -0.75967136113461720015e+3, + 0.26732462578511390348e+4, + -0.82301236432021005385e+3, + -0.2353017215026050053e+4, + 0.27041253135125052722e+4, + 0.61348297050033886535e+3, + -0.31870091369927886262e+4, + 0.17308195273778621868e+4, + 0.19506635826518781869e+4, + -0.27359836762559034469e+4, + -0.20164803155864638029e+3, + 0.27604789629981141843e+4, + -0.11314631830326245563e+4, + -0.2149350691433596694e+4, + 0.2357414436493586436e+4, + 0.10188448629966577528e+4, + -0.28251907848298387762e+4, + 0.40213587401518310571e+3, + 0.27743852328992556977e+4, + -0.16008258259549099876e+4, + -0.22391691238244402484e+4, + 0.30292188218646615496e+4, + 0.8314786925258492829e+3, + -0.35376097421241879601e+4, + 0.11443717905170576614e+4, + 0.27487787288865165465e+4, + -0.19820490376624024975e+4, + -0.18636397559632571301e+4, + 0.24490306045553666081e+4, + 0.14535955479345220738e+4, + -0.31848605071860029057e+4, + -0.32219407727504784589e+3, + 0.35632088647123173359e+4, + -0.89571113937723350773e+3, + -0.32114885102639468641e+4, + 0.18897278384272294716e+4, + 0.28071005198847774409e+4, + -0.26457626792007881704e+4, + -0.19845655104265781574e+4, + 0.30042399361303760088e+4, + 0.14790389103059389981e+4, + -0.30217245941503156246e+4, + -0.13682333857788055411e+4, + 0.37351329661112067697e+4, + 0.83317860307092860239e+3, + -0.41135667758429290188e+4, + 0.16450859501813400243e+3, + 0.36776699642604162364e+4, + -0.70908601720349906827e+2, + -0.35270557874664186784e+4, + -0.29140544384812358203e+3, + 0.42216170663577095183e+4, + 0.63074029154833674227e+2, + -0.42489040774105651508e+4, + 0.41696819988828977444e+2, + 0.39904702831665963458e+4, + 0.69246571122889463368e+3, + -0.39937520047950347362e+4, + -0.13421579228532204979e+4, + 0.40079198216635741119e+4, + 0.21869107086132289623e+4, + -0.36536510689129554521e+4, + -0.30116031432537688488e+4, + 0.30729612413055383513e+4, + 0.37302690391545138482e+4, + -0.15340340076454021982e+4, + -0.45171916854418104776e+4, + -0.19884745810956539458e+3, + 0.50536390215851633911e+4, + 0.18047661339145281545e+4, + -0.38502897550407419658e+4, + -0.36998047560596883159e+4, + 0.15572427230450409752e+4, + 0.54619461901282975305e+4, + 0.98406239875046821908e+3, + -0.47607786296390368079e+4, + -0.36731265538675338576e+4, + 0.15651298569563352885e+4, + 0.57698337805667488283e+4, + 0.23918670509909206885e+4, + -0.41831375313245607686e+4, + -0.5191607947304631125e+4, + -0.11287425111774250581e+4, + 0.49709345947522660936e+4, + 0.5861063174723103657e+4, + 0.33845839745053552861e+3, + -0.49007619113580158228e+4, + -0.63490201029711051888e+4, + -0.18579447195226262011e+4, + 0.4475553154274631197e+4, + 0.70741753334434042699e+4, + 0.49506141893018093469e+4, + -0.87074774002085200664e+3, + -0.62998566703865399177e+4, + -0.81273953030770289843e+4, + -0.5837751581637659001e+4, + -0.83523325937492904814e+3, + 0.48410948009888224988e+4, + 0.9005011703626911185e+4, + 0.10760795537214709839e+5, + 0.10804588165686354841e+5, + 0.89690762853007145168e+4, + 0.68584877140737426089e+4, + 0.49232873683748175608e+4, + 0.28329541329642183882e+4, + 0.19704047086665686948e+4, + 0.98411602479730402138e+3, + 0.36691898307876437002e+3, + 0.52088535337570885986e+3, + -0.12907199127779324499e+3, + 0.15134573363296877346e+3, + 0.13566896066504298801e+3, + -0.28085107103442618381e+3, + 0.33792440845154891349e+3, + -0.21798399515274783766e+3, + -0.10588383342704872803e+2, + 0.2493996918261294411e+3, + -0.38188061109240527458e+3, + 0.34081482641809441247e+3, + -0.14007129390660620061e+3, + -0.13079092380936279483e+3, + 0.34629178473591628062e+3, + -0.40601119698241024025e+3, + 0.28044508691650054288e+3, + -0.27230192935064700066e+2, + -0.23741263382025445594e+3, + 0.39121230586791642736e+3, + -0.36451712762770705467e+3, + 0.17073350771342163057e+3, + 0.98894920184805542362e+2, + -0.3197299994451020666e+3, + 0.39016587725360807326e+3, + -0.27966216258304507392e+3, + 0.4060703326377200284e+2, + 0.21543796855902118637e+3, + -0.37091429750706794266e+3, + 0.35496200342198255839e+3, + -0.17638387390549718248e+3, + -0.82459213907660767973e+2, + 0.30297871628019350965e+3, + -0.38563780542381721261e+3, + 0.29385282853271297654e+3, + -0.70631624653317317097e+2, + -0.18265981603105083764e+3, + 0.35188316253639607112e+3, + -0.36231515282878115158e+3, + 0.21100626847924422691e+3, + 0.32187460353707010086e+2, + -0.25738337853286213885e+3, + 0.36386459810731042808e+3, + -0.30554397567854687168e+3, + 0.11060598173295100821e+3, + 0.13152798272496150389e+3, + -0.31116820496588559308e+3, + 0.34752902111743054547e+3, + -0.22505738333179820643e+3, + 0.91128064348534252304e+2, + 0.70525634860268652915e+2, + -0.33055481464794917201e+3, + 0.40803052352600286667e+3, + -0.33162238383933595287e+3, + 0.64834968803296206374e+2, + 0.20373405785952255087e+3, + -0.41831579743453204401e+3, + 0.41028635845422712691e+3, + -0.24887006559877639233e+3, + -0.61002879485453973984e+2, + 0.30872184821176580272e+3, + -0.44713236037623829588e+3, + 0.34419574480531832705e+3, + -0.11664070564538147323e+3, + -0.19491157344159526588e+3, + 0.3746228921235538678e+3, + -0.40461204312353817159e+3, + 0.20434176049174982381e+3, + 0.60272536636949425315e+2, + -0.32597694880495566849e+3, + 0.39386850807707230615e+3, + -0.29615766952989372385e+3, + 0.12937064570479849479e+2, + 0.24828667634883078108e+3, + -0.42278546866658012959e+3, + 0.35304653638059863852e+3, + -0.13655103936900090389e+3, + -0.18862122659147189552e+3, + 0.39364349225138437305e+3, + -0.4407452876167294562e+3, + 0.23590790651415656498e+3, + 0.54649031972988467487e+2, + -0.35352256145295854139e+3, + 0.44350234604611665645e+3, + -0.34497717968653853404e+3, + 0.40479142555357391586e+2, + 0.24836695980816472229e+3, + -0.43965902916270590595e+3, + 0.36771571247975691676e+3, + -0.1356933974051629832e+3, + -0.20116862236869422986e+3, + 0.39917239312720272437e+3, + -0.41455246772067664551e+3, + 0.1754174168410911534e+3, + 0.1457349367603667929e+3, + -0.40097257081516920607e+3, + 0.48697524832155875174e+3, + -0.18370415377827279713e+3, + 0.7873119088749825778e+2, + 0.72297950419970925395e+3, + 0.82422727268595025407e+2, + 0.13622446626571124852e+4, + 0.15688408871303192882e+4, + 0.19413469488217249364e+4, + 0.35341505783907564364e+4, + 0.31161614327828469868e+4, + 0.37223824726468610606e+4, + 0.32494201220626155191e+4, + 0.10948584886085052403e+4, + 0.18548514655497459103e+3, + -0.21268219781726470501e+4, + -0.29428644051395713177e+4, + -0.16219636176777037235e+4, + -0.76469157281284321925e+3, + 0.18067688174185946082e+4, + 0.25890296119906242893e+4, + 0.96360704236448373194e+3, + -0.1269774856703032242e+3, + -0.23144835558713607497e+4, + -0.18919670154820473726e+4, + 0.66543618645923129407e+3, + 0.13784678147397803514e+4, + 0.18963984774214329718e+4, + -0.17028007841979820114e+3, + -0.23044104693568451694e+4, + -0.80658275717326159793e+3, + 0.49581482085970532125e+3, + 0.17369684738594580722e+4, + 0.10506613802154520272e+4, + -0.1815304885279710561e+4, + -0.1314921035237782462e+4, + 0.50243109494297380024e+3, + 0.12751640610525223565e+4, + 0.10723637858793883879e+4, + -0.14876866849084997284e+4, + -0.15198888829034031005e+4, + 0.11596996987674306183e+4, + 0.11086053406326861932e+4, + 0.14473533560410351129e+3, + -0.12516722396520247003e+4, + -0.11111773558273816889e+4, + 0.17938164503905034053e+4, + 0.82522164580043317983e+3, + -0.13039649935655811532e+4, + -0.64442898615055037226e+3, + 0.21470992064833458812e+3, + 0.14352793526248260605e+4, + -0.10577309980850259308e+3, + -0.19170940699045916062e+4, + 0.64046538183729956017e+3, + 0.13433213544845532397e+4, + -0.45599946570833583337e+3, + -0.82257559600797640087e+3, + -0.33365639596634662212e+3, + 0.124217517096719439e+4, + 0.47072434409159569668e+3, + -0.18236039220085083343e+4, + 0.25508046377426040863e+3, + 0.1473382582029227251e+4, + -0.60022852786093471877e+3, + -0.75629400688493853977e+3, + 0.64457156702322436104e+2, + 0.89523621386762090424e+3, + 0.18559788740903169924e+3, + -0.15413365739579057845e+4, + 0.536217164436344774e+3, + 0.14328871165906875831e+4, + -0.12867458435901580742e+4, + -0.53801834644085715809e+3, + 0.10882930563068568972e+4, + 0.564189490424765836e+2, + -0.51679092840834232447e+3, + -0.45748443889749489699e+3, + 0.7887311792926416274e+3, + 0.55384245307511628198e+3, + -0.15533685231018366721e+4, + 0.4203094729934721272e+3, + 0.13757837810467119652e+4, + -0.13239340106068482328e+4, + -0.33570149975162837563e+3, + 0.11655145060323143298e+4, + -0.29088888407072903419e+3, + -0.59960259780681667507e+3, + 0.17728778491974924236e+3, + 0.53416678230667230309e+3, + -0.85269814896569897655e+2, + -0.91130009867908393062e+3, + 0.69982555381821191531e+3, + 0.76750771021008813477e+3, + -0.15361876505875386556e+4, + 0.40893136306922411904e+3, + 0.12749170616990049894e+4, + -0.14311157545429362017e+4, + -0.83736627466661168739e+1, + 0.11507743202112649215e+4, + -0.75162690519825764568e+3, + -0.33266693710186331145e+3, + 0.5988987418840860073e+3, + 0.27409326116978562027e+2, + -0.37274411434953867683e+3, + -0.10549487721623806635e+3, + 0.54592580835879562073e+3, + -0.63989711029345457405e+2, + -0.82102641144220910974e+3, + 0.79633968891804590839e+3, + 0.38281286969640319739e+3, + -0.13772677326897385228e+4, + 0.87519214741736516316e+3, + 0.69344782652472861173e+3, + -0.15771648825140478039e+4, + 0.76306259379519121921e+3, + 0.8263939483184888104e+3, + -0.14347198006637015624e+4, + 0.481460228263623776e+3, + 0.87217815925880563555e+3, + -0.11539828161535135678e+4, + 0.20721742704820647418e+3, + 0.80538452532138398965e+3, + -0.84000594363258710473e+3, + 0.59604483105806586707e+2, + 0.56170364623336661225e+3, + -0.45090299727488968529e+3, + -0.36192913142630217749e+2, + 0.23398747356078365556e+3, + -0.21343106023760370249e+2, + -0.15277926259462662983e+3, + -0.31930104925658827852e+2, + 0.31186244956662704908e+3, + -0.21828269097936481558e+3, + -0.24409291305724860877e+3, + 0.52006624613482699715e+3, + -0.18003064534726863144e+3, + -0.48294029786749996447e+3, + 0.70410561758708911384e+3, + -0.12682621820827961301e+3, + -0.70988413846635080517e+3, + 0.8898836654649526281e+3, + -0.13183065377308855659e+3, + -0.83497023139890450238e+3, + 0.99385101062288651974e+3, + -0.13070486390492064288e+3, + -0.89182591924953339912e+3, + 0.10057804069045788538e+4, + -0.6456645943955339817e+2, + -0.97348243901727369121e+3, + 0.10216760071935440237e+4, -0.44555898152963807624, - -0.10594112930143699032e+04, - 0.10675050775691283889e+04, - 0.47572970734507947554e+03, - -0.15595694467522628202e+04, - 0.51035535615890290728e+03, - 0.10108535719090457405e+04, - -0.15426780791482744917e+04, - 0.38346034766027042906e+03, - 0.11736854699815794447e+04, - -0.16091972486508245765e+04, - 0.30338764455185832958e+03, - 0.12971011777734754560e+04, - -0.16222015991399412087e+04, - 0.18626465852310514038e+03, - 0.13814044997963935657e+04, - -0.15037158210323452749e+04, - -0.87930506464177483394e+02, - 0.15481904262751404531e+04, - -0.13546230442134665282e+04, - -0.44733217837070060341e+03, - 0.17701991925742133844e+04, - -0.12197414411583024503e+04, - -0.76412928590989827171e+03, - 0.18752802622499273184e+04, - -0.96185532236154801922e+03, - -0.10776732574060249590e+04, - 0.18093643011549636412e+04, - -0.49165132039689967769e+03, - -0.14681338287519888581e+04, - 0.16550864613068083600e+04, - 0.77272238634945679792e+02, - -0.18200164430219012957e+04, - 0.13868525874710221615e+04, - 0.62056946624636361776e+03, - -0.19211560186296981101e+04, - 0.84998035850492544796e+03, - 0.11538779719391450271e+04, - -0.17140286238716544176e+04, - 0.30487471795678640518e+02, - 0.16482711131662399566e+04, - -0.12579152111299265471e+04, - -0.85186778515390778921e+03, - 0.18653320634218089253e+04, - -0.53205511008668543127e+03, - -0.15603862274639084262e+04, - 0.15542970268766425761e+04, - 0.48386627023115522661e+03, - -0.19594534192304340650e+04, - 0.72607796070917618181e+03, - 0.15405668724137024128e+04, - -0.18783534820049819700e+04, - -0.37559854527548486658e+03, - 0.21400015957223586156e+04, - -0.11107531775847016888e+04, - -0.14354555843658788490e+04, - 0.18941805997646038122e+04, - 0.25536546227232287265e+03, - -0.20506954635034330749e+04, - 0.80034464291304107064e+03, - 0.16062492662194622426e+04, - -0.17403025473820646312e+04, - -0.74594900160616145968e+03, - 0.20920425961975051905e+04, - -0.34039207123180511871e+03, - -0.20125133139455897435e+04, - 0.12488355007205345828e+04, - 0.14866561542540187020e+04, - -0.21175148340883074525e+04, - -0.53983508629328912320e+03, - 0.23893306906886573415e+04, - -0.66135170290087773992e+03, - -0.20521354245680036001e+04, - 0.13783491880847527682e+04, - 0.14723897151917547035e+04, - -0.19002838550589281112e+04, - -0.97060029746726615940e+03, - 0.23055860323528168010e+04, - 0.15679353086105780335e+03, - -0.24919915661135064511e+04, - 0.62698548685938715153e+03, - 0.22780032305024728885e+04, - -0.13300424354549572854e+04, - -0.19984720168224107510e+04, - 0.18345500248313007887e+04, - 0.14958705149985064509e+04, - -0.21753870957545314013e+04, - -0.11282979982446272516e+04, - 0.22974108863382671188e+04, - 0.86187724046383266341e+03, - -0.26432277058784261499e+04, - -0.52342158635484952356e+03, - 0.27989203460427052050e+04, - 0.34282548440255929734e+02, - -0.27093036837310633018e+04, - 0.12416151771945143079e+01, - 0.26695511225308459871e+04, - 0.59673942222163873339e+02, - -0.29447527592955166256e+04, - -0.35167912620088706888e+02, - 0.29663868682542333772e+04, - 0.69991615918866116886e+02, - -0.29265984513897792567e+04, - -0.49328505428136389810e+03, - 0.28995166525416852892e+04, - 0.93557637180946892386e+03, - -0.28816186303553067773e+04, - -0.15392121657782636248e+04, - 0.25982957360123564285e+04, - 0.21455965871514167702e+04, - -0.21397091062226791109e+04, - -0.27661865396062212312e+04, - 0.11592514719558519118e+04, - 0.32573354621832322664e+04, - 0.52240786779006995744e+02, - -0.35031590762965465728e+04, - -0.13893983327141434074e+04, - 0.27725346013243643029e+04, - 0.27425206617044536870e+04, - -0.12560543244582004263e+04, - -0.38049824767571649318e+04, - -0.73773361192916195250e+03, - 0.33445220713183562111e+04, - 0.27788643186285939919e+04, - -0.12613847358359166719e+04, - -0.40793927290364895271e+04, - -0.16742502685267595552e+04, - 0.28764320505723089809e+04, - 0.38748890805012879355e+04, - 0.71160609499746715301e+03, - -0.35605873473213728175e+04, - -0.41308614661506135235e+04, - -0.36132091433589943108e+03, - 0.36203748822779975853e+04, - 0.45133904812847958965e+04, - 0.13151249179973624450e+04, - -0.31560289628105460906e+04, - -0.51370227196525611362e+04, - -0.35228869134939754986e+04, - 0.62436881232005896436e+03, - 0.45096497356292666154e+04, - 0.58399886108952478025e+04, - 0.42054728206591926210e+04, - 0.57429377684396808945e+03, - -0.34610324280178624576e+04, - -0.64497037850536489714e+04, - -0.77735310445130198787e+04, - -0.76968955191245859169e+04, - -0.64797053887301608484e+04, - -0.49301479911887845446e+04, - -0.34788313769198548471e+04, - -0.21149402928921881539e+04, - -0.13504348955749371726e+04, - -0.71691798509186151023e+03, - -0.31832882893147814229e+03, - -0.27715022973778894766e+03, - 0.19948551708762649604e+01, - -0.73715113715403873584e+02, - -0.52104362148242834962e+02, - 0.90921454637667835641e+02, - -0.11629838024684596576e+03, - 0.75987605392912414004e+02, - -0.10036810417497696868e+01, - -0.78973261182326382368e+02, - 0.12398872498149485466e+03, - -0.11177447857226077588e+03, - 0.46581411688214366507e+02, - 0.42035831549993325496e+02, - -0.11253747106693047897e+03, - 0.13168241712927161302e+03, - -0.89733528995717847465e+02, - 0.59046874791451680053e+01, - 0.81205609670379118370e+02, - -0.13104384023653003055e+03, - 0.12066878524615367496e+03, - -0.54798622627750653180e+02, - -0.35925706644981808324e+02, - 0.10983780869786721723e+03, - -0.13302819346323283867e+03, - 0.95400487550320946184e+02, - -0.14566095490967718717e+02, - -0.72064354774139530946e+02, - 0.12508500516712591377e+03, - -0.12066252239517433509e+03, - 0.61594361067871290061e+02, - 0.24737704293358248719e+02, - -0.98770609338674987043e+02, - 0.12722516664435303824e+03, - -0.97731966268998732517e+02, - 0.24435886596672297344e+02, - 0.59072932395083086021e+02, - -0.11489749193867048405e+03, - 0.11822716253359789107e+03, - -0.68089206442918012385e+02, - -0.12288560569685291313e+02, - 0.86409220655095666075e+02, - -0.12086540263018164865e+03, - 0.10047880972613957340e+03, - -0.34804167126156109191e+02, - -0.46231947268029358611e+02, - 0.10601563907322058355e+03, - -0.11763706890730729526e+03, - 0.76001758497429136696e+02, - -0.28682186673578573988e+02, - -0.26590804658003371230e+02, - 0.10938773051345700082e+03, - -0.13187459320449860911e+03, - 0.10437755570550146444e+03, - -0.18027160741047438819e+02, - -0.66558980193342918596e+02, - 0.13121898619240784001e+03, - -0.12456897523339553402e+03, - 0.70222578215970202109e+02, - 0.27830279532394229136e+02, - -0.10279350611791834069e+03, - 0.14018402093552901988e+03, - -0.10096185991730293097e+03, - 0.24126006840251651653e+02, - 0.75081376210652280179e+02, - -0.12847833454829572020e+03, - 0.13109156921538973961e+03, - -0.60263727978889448877e+02, - -0.29525207019350435900e+02, - 0.11596523572458139029e+03, - -0.13616458052749172225e+03, - 0.10064898543938669206e+03, - -0.53766226863366171074e+01, - -0.82612490596709974966e+02, - 0.14090194224400451617e+03, - -0.11964236510596862217e+03, - 0.49510520171815485924e+02, - 0.55958655532805835264e+02, - -0.12375833888057698573e+03, - 0.14051507329461747986e+03, - -0.76598425933711936864e+02, - -0.15794281275538331499e+02, - 0.11109023058535137807e+03, - -0.14035875327709626958e+03, - 0.10890026984715696301e+03, - -0.11477966526138695613e+02, - -0.82015083163132189270e+02, - 0.14431263555702079771e+03, - -0.12243206799249033168e+03, - 0.47549747320393620953e+02, - 0.62606164229232774687e+02, - -0.13075667661716235557e+03, - 0.14089293733811092579e+03, - -0.68617370239401509480e+02, - -0.33638909514276818413e+02, - 0.11953781830737169400e+03, - -0.15480225645171759652e+03, - 0.68917802268897503382e+02, - -0.40096368936025058360e+02, - -0.20803855533408417955e+03, - -0.33883325749483070410e+02, - -0.41876751657100226112e+03, - -0.47535867146676309858e+03, - -0.60948821577472517674e+03, - -0.10746295537145265371e+04, - -0.96823955548638105029e+03, - -0.11416634371703185025e+04, - -0.99752939422779161305e+03, - -0.34323529720831561463e+03, - -0.49572160741397539141e+02, - 0.64866867567314147891e+03, - 0.90788322422918383836e+03, - 0.50002780596694776705e+03, - 0.23256722123878148523e+03, - -0.55356876840967686348e+03, - -0.79679874667519447939e+03, - -0.29897356839471586909e+03, - 0.43258876965772657286e+02, - 0.70841886430612180447e+03, - 0.58314947413547793076e+03, - -0.20151125538238946433e+03, - -0.43142651961798827642e+03, - -0.57403757652456943106e+03, - 0.43901634514612723592e+02, - 0.71338001793395005734e+03, - 0.25020430483423319856e+03, - -0.16104332021901421967e+03, - -0.52152058923427193804e+03, - -0.33687701184973366253e+03, - 0.56863299487125516407e+03, - 0.40142448281541419419e+03, - -0.15960039943301148924e+03, - -0.38035102642155089825e+03, - -0.34549647953327001915e+03, - 0.47229398783806999518e+03, - 0.45844715824512724112e+03, - -0.35557924292045470338e+03, - -0.33411550530605705944e+03, - -0.57503035680665398388e+02, - 0.40017481132350951611e+03, - 0.32922892017966444200e+03, - -0.54510616122728822575e+03, - -0.25328584593292652016e+03, - 0.39387248861278209233e+03, - 0.20976139322582434943e+03, - -0.77998301526655865246e+02, - -0.43262903136800377979e+03, - 0.28748508359402929813e+02, - 0.58808098653877868855e+03, - -0.19093768558097619348e+03, - -0.42132214449288403557e+03, - 0.14754764287151661506e+03, - 0.24865126537668655260e+03, - 0.10358775030250566829e+03, - -0.38010924484856963090e+03, - -0.14844534584914407560e+03, - 0.56452401171172073191e+03, - -0.80366462275864861908e+02, - -0.45337277147234658514e+03, - 0.18608621362313988357e+03, - 0.23118004781871005093e+03, - -0.19430885196812081261e+02, - -0.27394362340473043105e+03, - -0.60344567343753745092e+02, - 0.47817098584124488525e+03, - -0.16790770976560457939e+03, - -0.44049688666268070847e+03, - 0.39892966178162015467e+03, - 0.15948932166545583300e+03, - -0.32723869630715023504e+03, - -0.24204708592257645705e+02, - 0.16273306566254069594e+03, - 0.14183892658673420328e+03, - -0.24879070487077220264e+03, - -0.16057485716220708127e+03, - 0.46704784700673724274e+03, - -0.12051069256929777396e+03, - -0.42720144984036613778e+03, - 0.40483107554832042752e+03, - 0.11194970668144145520e+03, - -0.37121052594506846845e+03, - 0.10261439849886207298e+03, - 0.17464393009984488003e+03, - -0.50897702293044090993e+02, - -0.16051511873072431058e+03, - 0.15767023002511400875e+02, - 0.29474804794326405499e+03, - -0.22958390900625690279e+03, - -0.22598180102628055010e+03, - 0.46952360974045427611e+03, - -0.13066056604965143606e+03, - -0.38069230570965180505e+03, - 0.42518072882056736717e+03, - 0.17153703354158519545e+02, - -0.36402199291985448326e+03, - 0.23384004090064399861e+03, - 0.10787859420709247615e+03, - -0.19632557284356826699e+03, - 0.68274542728581151252e+01, - 0.10043750889184215680e+03, - 0.41835424754100870359e+02, - -0.16994681209087539742e+03, - 0.13820855183248752951e+02, - 0.26464689173468462968e+03, - -0.25983101971718849654e+03, - -0.10425086738832474964e+03, - 0.41516809160041037785e+03, - -0.26783927128172388166e+03, - -0.20739279673312177010e+03, - 0.47365965505219105580e+03, - -0.22076195954368259322e+03, - -0.26685635630435461962e+03, - 0.44924573019956363851e+03, - -0.14914747766296346754e+03, - -0.27423861909187928632e+03, - 0.36609518235933973074e+03, - -0.76828997320338359600e+02, - -0.23624099366496221819e+03, - 0.25146963022994640369e+03, - -0.17665991576798468543e+02, - -0.16715880626472903714e+03, - 0.12841447685248763833e+03, - 0.23239944735898045991e+02, - -0.82586014308271188611e+02, - 0.12862292709676914626e+02, - 0.46588677584930792364e+02, - 0.44167600372424669075e+01, - -0.86303132171877422252e+02, - 0.55952262721702375359e+02, - 0.84853426058616875594e+02, - -0.16573188630614501449e+03, - 0.55646276173220989847e+02, - 0.15375605612022644664e+03, - -0.22571968128118706431e+03, - 0.49514455747294910282e+02, - 0.20934627252018984223e+03, - -0.26853101280372248993e+03, - 0.40429181315391701901e+02, - 0.25195733920970457120e+03, - -0.29715000532826127255e+03, - 0.30237375631328358594e+02, - 0.28303934293283202805e+03, - -0.31446245142366717573e+03, - 0.19925444533644995460e+02, - 0.30438076708435613682e+03, - -0.32278126099344092381e+03, - 0.98558300076049718541e+01, - 0.31756317219374687966e+03, - -0.32361052267997251874e+03, - -0.13185547154198962971e+03, - 0.46423269210454657241e+03, - -0.17586988852980994125e+03, - -0.27898679983257028425e+03, - 0.46743083188067009814e+03, - -0.15566628759565290352e+03, - -0.30496613006244012922e+03, - 0.46701105558282517904e+03, - -0.12082941912938035500e+03, - -0.34055018740416318224e+03, - 0.45975604315165475100e+03, - -0.69632383911907211882e+02, - -0.38325385125639309081e+03, - 0.44102811524244253860e+03, + -0.10594112930143699032e+4, + 0.10675050775691283889e+4, + 0.47572970734507947554e+3, + -0.15595694467522628202e+4, + 0.51035535615890290728e+3, + 0.10108535719090457405e+4, + -0.15426780791482744917e+4, + 0.38346034766027042906e+3, + 0.11736854699815794447e+4, + -0.16091972486508245765e+4, + 0.30338764455185832958e+3, + 0.1297101177773475456e+4, + -0.16222015991399412087e+4, + 0.18626465852310514038e+3, + 0.13814044997963935657e+4, + -0.15037158210323452749e+4, + -0.87930506464177483394e+2, + 0.15481904262751404531e+4, + -0.13546230442134665282e+4, + -0.44733217837070060341e+3, + 0.17701991925742133844e+4, + -0.12197414411583024503e+4, + -0.76412928590989827171e+3, + 0.18752802622499273184e+4, + -0.96185532236154801922e+3, + -0.1077673257406024959e+4, + 0.18093643011549636412e+4, + -0.49165132039689967769e+3, + -0.14681338287519888581e+4, + 0.165508646130680836e+4, + 0.77272238634945679792e+2, + -0.18200164430219012957e+4, + 0.13868525874710221615e+4, + 0.62056946624636361776e+3, + -0.19211560186296981101e+4, + 0.84998035850492544796e+3, + 0.11538779719391450271e+4, + -0.17140286238716544176e+4, + 0.30487471795678640518e+2, + 0.16482711131662399566e+4, + -0.12579152111299265471e+4, + -0.85186778515390778921e+3, + 0.18653320634218089253e+4, + -0.53205511008668543127e+3, + -0.15603862274639084262e+4, + 0.15542970268766425761e+4, + 0.48386627023115522661e+3, + -0.1959453419230434065e+4, + 0.72607796070917618181e+3, + 0.15405668724137024128e+4, + -0.187835348200498197e+4, + -0.37559854527548486658e+3, + 0.21400015957223586156e+4, + -0.11107531775847016888e+4, + -0.1435455584365878849e+4, + 0.18941805997646038122e+4, + 0.25536546227232287265e+3, + -0.20506954635034330749e+4, + 0.80034464291304107064e+3, + 0.16062492662194622426e+4, + -0.17403025473820646312e+4, + -0.74594900160616145968e+3, + 0.20920425961975051905e+4, + -0.34039207123180511871e+3, + -0.20125133139455897435e+4, + 0.12488355007205345828e+4, + 0.1486656154254018702e+4, + -0.21175148340883074525e+4, + -0.5398350862932891232e+3, + 0.23893306906886573415e+4, + -0.66135170290087773992e+3, + -0.20521354245680036001e+4, + 0.13783491880847527682e+4, + 0.14723897151917547035e+4, + -0.19002838550589281112e+4, + -0.9706002974672661594e+3, + 0.2305586032352816801e+4, + 0.15679353086105780335e+3, + -0.24919915661135064511e+4, + 0.62698548685938715153e+3, + 0.22780032305024728885e+4, + -0.13300424354549572854e+4, + -0.1998472016822410751e+4, + 0.18345500248313007887e+4, + 0.14958705149985064509e+4, + -0.21753870957545314013e+4, + -0.11282979982446272516e+4, + 0.22974108863382671188e+4, + 0.86187724046383266341e+3, + -0.26432277058784261499e+4, + -0.52342158635484952356e+3, + 0.2798920346042705205e+4, + 0.34282548440255929734e+2, + -0.27093036837310633018e+4, + 0.12416151771945143079e+1, + 0.26695511225308459871e+4, + 0.59673942222163873339e+2, + -0.29447527592955166256e+4, + -0.35167912620088706888e+2, + 0.29663868682542333772e+4, + 0.69991615918866116886e+2, + -0.29265984513897792567e+4, + -0.4932850542813638981e+3, + 0.28995166525416852892e+4, + 0.93557637180946892386e+3, + -0.28816186303553067773e+4, + -0.15392121657782636248e+4, + 0.25982957360123564285e+4, + 0.21455965871514167702e+4, + -0.21397091062226791109e+4, + -0.27661865396062212312e+4, + 0.11592514719558519118e+4, + 0.32573354621832322664e+4, + 0.52240786779006995744e+2, + -0.35031590762965465728e+4, + -0.13893983327141434074e+4, + 0.27725346013243643029e+4, + 0.2742520661704453687e+4, + -0.12560543244582004263e+4, + -0.38049824767571649318e+4, + -0.7377336119291619525e+3, + 0.33445220713183562111e+4, + 0.27788643186285939919e+4, + -0.12613847358359166719e+4, + -0.40793927290364895271e+4, + -0.16742502685267595552e+4, + 0.28764320505723089809e+4, + 0.38748890805012879355e+4, + 0.71160609499746715301e+3, + -0.35605873473213728175e+4, + -0.41308614661506135235e+4, + -0.36132091433589943108e+3, + 0.36203748822779975853e+4, + 0.45133904812847958965e+4, + 0.1315124917997362445e+4, + -0.31560289628105460906e+4, + -0.51370227196525611362e+4, + -0.35228869134939754986e+4, + 0.62436881232005896436e+3, + 0.45096497356292666154e+4, + 0.58399886108952478025e+4, + 0.4205472820659192621e+4, + 0.57429377684396808945e+3, + -0.34610324280178624576e+4, + -0.64497037850536489714e+4, + -0.77735310445130198787e+4, + -0.76968955191245859169e+4, + -0.64797053887301608484e+4, + -0.49301479911887845446e+4, + -0.34788313769198548471e+4, + -0.21149402928921881539e+4, + -0.13504348955749371726e+4, + -0.71691798509186151023e+3, + -0.31832882893147814229e+3, + -0.27715022973778894766e+3, + 0.19948551708762649604e+1, + -0.73715113715403873584e+2, + -0.52104362148242834962e+2, + 0.90921454637667835641e+2, + -0.11629838024684596576e+3, + 0.75987605392912414004e+2, + -0.10036810417497696868e+1, + -0.78973261182326382368e+2, + 0.12398872498149485466e+3, + -0.11177447857226077588e+3, + 0.46581411688214366507e+2, + 0.42035831549993325496e+2, + -0.11253747106693047897e+3, + 0.13168241712927161302e+3, + -0.89733528995717847465e+2, + 0.59046874791451680053e+1, + 0.8120560967037911837e+2, + -0.13104384023653003055e+3, + 0.12066878524615367496e+3, + -0.5479862262775065318e+2, + -0.35925706644981808324e+2, + 0.10983780869786721723e+3, + -0.13302819346323283867e+3, + 0.95400487550320946184e+2, + -0.14566095490967718717e+2, + -0.72064354774139530946e+2, + 0.12508500516712591377e+3, + -0.12066252239517433509e+3, + 0.61594361067871290061e+2, + 0.24737704293358248719e+2, + -0.98770609338674987043e+2, + 0.12722516664435303824e+3, + -0.97731966268998732517e+2, + 0.24435886596672297344e+2, + 0.59072932395083086021e+2, + -0.11489749193867048405e+3, + 0.11822716253359789107e+3, + -0.68089206442918012385e+2, + -0.12288560569685291313e+2, + 0.86409220655095666075e+2, + -0.12086540263018164865e+3, + 0.1004788097261395734e+3, + -0.34804167126156109191e+2, + -0.46231947268029358611e+2, + 0.10601563907322058355e+3, + -0.11763706890730729526e+3, + 0.76001758497429136696e+2, + -0.28682186673578573988e+2, + -0.2659080465800337123e+2, + 0.10938773051345700082e+3, + -0.13187459320449860911e+3, + 0.10437755570550146444e+3, + -0.18027160741047438819e+2, + -0.66558980193342918596e+2, + 0.13121898619240784001e+3, + -0.12456897523339553402e+3, + 0.70222578215970202109e+2, + 0.27830279532394229136e+2, + -0.10279350611791834069e+3, + 0.14018402093552901988e+3, + -0.10096185991730293097e+3, + 0.24126006840251651653e+2, + 0.75081376210652280179e+2, + -0.1284783345482957202e+3, + 0.13109156921538973961e+3, + -0.60263727978889448877e+2, + -0.295252070193504359e+2, + 0.11596523572458139029e+3, + -0.13616458052749172225e+3, + 0.10064898543938669206e+3, + -0.53766226863366171074e+1, + -0.82612490596709974966e+2, + 0.14090194224400451617e+3, + -0.11964236510596862217e+3, + 0.49510520171815485924e+2, + 0.55958655532805835264e+2, + -0.12375833888057698573e+3, + 0.14051507329461747986e+3, + -0.76598425933711936864e+2, + -0.15794281275538331499e+2, + 0.11109023058535137807e+3, + -0.14035875327709626958e+3, + 0.10890026984715696301e+3, + -0.11477966526138695613e+2, + -0.8201508316313218927e+2, + 0.14431263555702079771e+3, + -0.12243206799249033168e+3, + 0.47549747320393620953e+2, + 0.62606164229232774687e+2, + -0.13075667661716235557e+3, + 0.14089293733811092579e+3, + -0.6861737023940150948e+2, + -0.33638909514276818413e+2, + 0.119537818307371694e+3, + -0.15480225645171759652e+3, + 0.68917802268897503382e+2, + -0.4009636893602505836e+2, + -0.20803855533408417955e+3, + -0.3388332574948307041e+2, + -0.41876751657100226112e+3, + -0.47535867146676309858e+3, + -0.60948821577472517674e+3, + -0.10746295537145265371e+4, + -0.96823955548638105029e+3, + -0.11416634371703185025e+4, + -0.99752939422779161305e+3, + -0.34323529720831561463e+3, + -0.49572160741397539141e+2, + 0.64866867567314147891e+3, + 0.90788322422918383836e+3, + 0.50002780596694776705e+3, + 0.23256722123878148523e+3, + -0.55356876840967686348e+3, + -0.79679874667519447939e+3, + -0.29897356839471586909e+3, + 0.43258876965772657286e+2, + 0.70841886430612180447e+3, + 0.58314947413547793076e+3, + -0.20151125538238946433e+3, + -0.43142651961798827642e+3, + -0.57403757652456943106e+3, + 0.43901634514612723592e+2, + 0.71338001793395005734e+3, + 0.25020430483423319856e+3, + -0.16104332021901421967e+3, + -0.52152058923427193804e+3, + -0.33687701184973366253e+3, + 0.56863299487125516407e+3, + 0.40142448281541419419e+3, + -0.15960039943301148924e+3, + -0.38035102642155089825e+3, + -0.34549647953327001915e+3, + 0.47229398783806999518e+3, + 0.45844715824512724112e+3, + -0.35557924292045470338e+3, + -0.33411550530605705944e+3, + -0.57503035680665398388e+2, + 0.40017481132350951611e+3, + 0.329228920179664442e+3, + -0.54510616122728822575e+3, + -0.25328584593292652016e+3, + 0.39387248861278209233e+3, + 0.20976139322582434943e+3, + -0.77998301526655865246e+2, + -0.43262903136800377979e+3, + 0.28748508359402929813e+2, + 0.58808098653877868855e+3, + -0.19093768558097619348e+3, + -0.42132214449288403557e+3, + 0.14754764287151661506e+3, + 0.2486512653766865526e+3, + 0.10358775030250566829e+3, + -0.3801092448485696309e+3, + -0.1484453458491440756e+3, + 0.56452401171172073191e+3, + -0.80366462275864861908e+2, + -0.45337277147234658514e+3, + 0.18608621362313988357e+3, + 0.23118004781871005093e+3, + -0.19430885196812081261e+2, + -0.27394362340473043105e+3, + -0.60344567343753745092e+2, + 0.47817098584124488525e+3, + -0.16790770976560457939e+3, + -0.44049688666268070847e+3, + 0.39892966178162015467e+3, + 0.159489321665455833e+3, + -0.32723869630715023504e+3, + -0.24204708592257645705e+2, + 0.16273306566254069594e+3, + 0.14183892658673420328e+3, + -0.24879070487077220264e+3, + -0.16057485716220708127e+3, + 0.46704784700673724274e+3, + -0.12051069256929777396e+3, + -0.42720144984036613778e+3, + 0.40483107554832042752e+3, + 0.1119497066814414552e+3, + -0.37121052594506846845e+3, + 0.10261439849886207298e+3, + 0.17464393009984488003e+3, + -0.50897702293044090993e+2, + -0.16051511873072431058e+3, + 0.15767023002511400875e+2, + 0.29474804794326405499e+3, + -0.22958390900625690279e+3, + -0.2259818010262805501e+3, + 0.46952360974045427611e+3, + -0.13066056604965143606e+3, + -0.38069230570965180505e+3, + 0.42518072882056736717e+3, + 0.17153703354158519545e+2, + -0.36402199291985448326e+3, + 0.23384004090064399861e+3, + 0.10787859420709247615e+3, + -0.19632557284356826699e+3, + 0.68274542728581151252e+1, + 0.1004375088918421568e+3, + 0.41835424754100870359e+2, + -0.16994681209087539742e+3, + 0.13820855183248752951e+2, + 0.26464689173468462968e+3, + -0.25983101971718849654e+3, + -0.10425086738832474964e+3, + 0.41516809160041037785e+3, + -0.26783927128172388166e+3, + -0.2073927967331217701e+3, + 0.4736596550521910558e+3, + -0.22076195954368259322e+3, + -0.26685635630435461962e+3, + 0.44924573019956363851e+3, + -0.14914747766296346754e+3, + -0.27423861909187928632e+3, + 0.36609518235933973074e+3, + -0.768289973203383596e+2, + -0.23624099366496221819e+3, + 0.25146963022994640369e+3, + -0.17665991576798468543e+2, + -0.16715880626472903714e+3, + 0.12841447685248763833e+3, + 0.23239944735898045991e+2, + -0.82586014308271188611e+2, + 0.12862292709676914626e+2, + 0.46588677584930792364e+2, + 0.44167600372424669075e+1, + -0.86303132171877422252e+2, + 0.55952262721702375359e+2, + 0.84853426058616875594e+2, + -0.16573188630614501449e+3, + 0.55646276173220989847e+2, + 0.15375605612022644664e+3, + -0.22571968128118706431e+3, + 0.49514455747294910282e+2, + 0.20934627252018984223e+3, + -0.26853101280372248993e+3, + 0.40429181315391701901e+2, + 0.2519573392097045712e+3, + -0.29715000532826127255e+3, + 0.30237375631328358594e+2, + 0.28303934293283202805e+3, + -0.31446245142366717573e+3, + 0.1992544453364499546e+2, + 0.30438076708435613682e+3, + -0.32278126099344092381e+3, + 0.98558300076049718541e+1, + 0.31756317219374687966e+3, + -0.32361052267997251874e+3, + -0.13185547154198962971e+3, + 0.46423269210454657241e+3, + -0.17586988852980994125e+3, + -0.27898679983257028425e+3, + 0.46743083188067009814e+3, + -0.15566628759565290352e+3, + -0.30496613006244012922e+3, + 0.46701105558282517904e+3, + -0.120829419129380355e+3, + -0.34055018740416318224e+3, + 0.459756043151654751e+3, + -0.69632383911907211882e+2, + -0.38325385125639309081e+3, + 0.4410281152424425386e+3, -0.70050035942850463755, - -0.42864733895297928257e+03, - 0.40493735579444273753e+03, - 0.86113313865172614214e+02, - -0.46976363569499193318e+03, - 0.34490825430349394765e+03, - 0.18847222628665591060e+03, - -0.49668562266036673236e+03, - 0.25488163900016974139e+03, - 0.29998994974330190644e+03, - -0.49668278999415713315e+03, - 0.13137638090297681970e+03, - 0.40864470281462939738e+03, - -0.45543233027796600254e+03, - -0.23515979421183292430e+02, - 0.49580620388922466191e+03, - -0.35994231708077069243e+03, - -0.19852153077380177137e+03, - 0.53693831526697260870e+03, - -0.20362165382493768107e+03, - -0.36998750430234571240e+03, - 0.50537703638697092856e+03, - 0.67373149672628906970e+01, - -0.50111043256501915266e+03, - 0.38044699077967243284e+03, - 0.24371350058154442308e+03, - -0.54650648272425542018e+03, - 0.15998249900257926015e+03, - 0.45551208623800630448e+03, - -0.46502796237248759326e+03, - -0.12550993154883242653e+03, - 0.57154694614663821994e+03, - -0.24145868764501287274e+03, - -0.40420637297761811624e+03, - 0.52328829377136526091e+03, - 0.88069381443604754622e+02, - -0.57120015895791607363e+03, - 0.28149533299219814353e+03, - 0.42101151719170576371e+03, - -0.52458769495207388900e+03, - -0.10121197399772661640e+03, - 0.60529801175739805785e+03, - -0.22905615201639017187e+03, - -0.47083676150200585653e+03, - 0.50571269527368150420e+03, - 0.21907248865497336965e+03, - -0.61442902478255200549e+03, - 0.10943431250646187891e+03, - 0.58211440510361069300e+03, - -0.38437371611099450774e+03, - -0.39155787318219904591e+03, - 0.58788156729850459215e+03, - 0.14218681534888173701e+03, - -0.64630971593504011707e+03, - 0.14894207669671715166e+03, - 0.60721268143738234357e+03, - -0.38485234404369481354e+03, - -0.45164414857465772002e+03, - 0.57605146097361648572e+03, - 0.26066971023882518921e+03, - -0.66406085586775759566e+03, - -0.26531050561710891600e+02, - 0.69642168530591845865e+03, - -0.17629903004005595335e+03, - -0.64284280934488879211e+03, - 0.37251085879300040915e+03, - 0.56729417254396969383e+03, - -0.50811123722873480801e+03, - -0.44525610807850563333e+03, - 0.62651537411215031170e+03, - 0.33852960599928343299e+03, - -0.68806672893154905069e+03, - -0.21610160448653473964e+03, - 0.74509280458301907402e+03, - 0.13176579252967076172e+03, - -0.76205601112981105416e+03, - -0.47291661735122893617e+02, - 0.79146689667578471017e+03, - 0.11037526393625782362e+02, - -0.79531569111170449560e+03, - 0.18315887723967946954e+02, - 0.82160717447319188977e+03, - 0.64244016666153074269e+01, - -0.82635679800635296033e+03, - -0.44148177789935587612e+02, - 0.84991958237047128932e+03, - 0.14221299519060596594e+03, - -0.83895887820589143757e+03, - -0.25797663803763856549e+03, - 0.82261279565810093573e+03, - 0.43282037597718857569e+03, - -0.73565634970738040010e+03, - -0.61069501005418544537e+03, - 0.59758892195123144120e+03, - 0.80897029098849066031e+03, - -0.34250198014074669572e+03, - -0.93651942019770820025e+03, - 0.86420158765381582811e+01, - 0.97021672539226824483e+03, - 0.41845448320189956348e+03, - -0.79133328995282636242e+03, - -0.80841757901269852482e+03, - 0.39653383765849741849e+03, - 0.10554885174105122587e+04, - 0.22015359394116464387e+03, - -0.93751605694820580084e+03, - -0.83046653133464928942e+03, - 0.39719582553082352661e+03, - 0.11464286083186227643e+04, - 0.47137617274488695784e+03, - -0.79357642705801788452e+03, - -0.11415887947939684182e+04, - -0.17946100270713677105e+03, - 0.10143044499225370600e+04, - 0.11634924460908321180e+04, - 0.12926596430630732470e+03, - -0.10560126294983119806e+04, - -0.12817081195826795010e+04, - -0.36872580345129904345e+03, - 0.88651927192762934737e+03, - 0.14816671332313912899e+04, - 0.10005997231755354733e+04, - -0.18105712822392078465e+03, - -0.12818170270183049979e+04, - -0.16730196075635883517e+04, - -0.12025632566274639430e+04, - -0.15919698912077984687e+03, - 0.98528318563821892440e+03, - 0.18402445313938505933e+04, - 0.22305017934812558451e+04, - 0.21871595583540724874e+04, - 0.18583163478527819734e+04, - 0.14126736914460980188e+04, - 0.97849859647679124919e+03, - 0.62478308580999555488e+03, - 0.37070941002789083996e+03, - 0.20559168570304223067e+03, - 0.10704243709196882151e+03, - 0.52500920567367380443e+02, - 0.24322637006813248917e+02, - 0.10666638043276888581e+02, - 0.44358687922286597072e+01, - 0.17517929848213005251e+01, + -0.42864733895297928257e+3, + 0.40493735579444273753e+3, + 0.86113313865172614214e+2, + -0.46976363569499193318e+3, + 0.34490825430349394765e+3, + 0.1884722262866559106e+3, + -0.49668562266036673236e+3, + 0.25488163900016974139e+3, + 0.29998994974330190644e+3, + -0.49668278999415713315e+3, + 0.1313763809029768197e+3, + 0.40864470281462939738e+3, + -0.45543233027796600254e+3, + -0.2351597942118329243e+2, + 0.49580620388922466191e+3, + -0.35994231708077069243e+3, + -0.19852153077380177137e+3, + 0.5369383152669726087e+3, + -0.20362165382493768107e+3, + -0.3699875043023457124e+3, + 0.50537703638697092856e+3, + 0.6737314967262890697e+1, + -0.50111043256501915266e+3, + 0.38044699077967243284e+3, + 0.24371350058154442308e+3, + -0.54650648272425542018e+3, + 0.15998249900257926015e+3, + 0.45551208623800630448e+3, + -0.46502796237248759326e+3, + -0.12550993154883242653e+3, + 0.57154694614663821994e+3, + -0.24145868764501287274e+3, + -0.40420637297761811624e+3, + 0.52328829377136526091e+3, + 0.88069381443604754622e+2, + -0.57120015895791607363e+3, + 0.28149533299219814353e+3, + 0.42101151719170576371e+3, + -0.524587694952073889e+3, + -0.1012119739977266164e+3, + 0.60529801175739805785e+3, + -0.22905615201639017187e+3, + -0.47083676150200585653e+3, + 0.5057126952736815042e+3, + 0.21907248865497336965e+3, + -0.61442902478255200549e+3, + 0.10943431250646187891e+3, + 0.582114405103610693e+3, + -0.38437371611099450774e+3, + -0.39155787318219904591e+3, + 0.58788156729850459215e+3, + 0.14218681534888173701e+3, + -0.64630971593504011707e+3, + 0.14894207669671715166e+3, + 0.60721268143738234357e+3, + -0.38485234404369481354e+3, + -0.45164414857465772002e+3, + 0.57605146097361648572e+3, + 0.26066971023882518921e+3, + -0.66406085586775759566e+3, + -0.265310505617108916e+2, + 0.69642168530591845865e+3, + -0.17629903004005595335e+3, + -0.64284280934488879211e+3, + 0.37251085879300040915e+3, + 0.56729417254396969383e+3, + -0.50811123722873480801e+3, + -0.44525610807850563333e+3, + 0.6265153741121503117e+3, + 0.33852960599928343299e+3, + -0.68806672893154905069e+3, + -0.21610160448653473964e+3, + 0.74509280458301907402e+3, + 0.13176579252967076172e+3, + -0.76205601112981105416e+3, + -0.47291661735122893617e+2, + 0.79146689667578471017e+3, + 0.11037526393625782362e+2, + -0.7953156911117044956e+3, + 0.18315887723967946954e+2, + 0.82160717447319188977e+3, + 0.64244016666153074269e+1, + -0.82635679800635296033e+3, + -0.44148177789935587612e+2, + 0.84991958237047128932e+3, + 0.14221299519060596594e+3, + -0.83895887820589143757e+3, + -0.25797663803763856549e+3, + 0.82261279565810093573e+3, + 0.43282037597718857569e+3, + -0.7356563497073804001e+3, + -0.61069501005418544537e+3, + 0.5975889219512314412e+3, + 0.80897029098849066031e+3, + -0.34250198014074669572e+3, + -0.93651942019770820025e+3, + 0.86420158765381582811e+1, + 0.97021672539226824483e+3, + 0.41845448320189956348e+3, + -0.79133328995282636242e+3, + -0.80841757901269852482e+3, + 0.39653383765849741849e+3, + 0.10554885174105122587e+4, + 0.22015359394116464387e+3, + -0.93751605694820580084e+3, + -0.83046653133464928942e+3, + 0.39719582553082352661e+3, + 0.11464286083186227643e+4, + 0.47137617274488695784e+3, + -0.79357642705801788452e+3, + -0.11415887947939684182e+4, + -0.17946100270713677105e+3, + 0.101430444992253706e+4, + 0.1163492446090832118e+4, + 0.1292659643063073247e+3, + -0.10560126294983119806e+4, + -0.1281708119582679501e+4, + -0.36872580345129904345e+3, + 0.88651927192762934737e+3, + 0.14816671332313912899e+4, + 0.10005997231755354733e+4, + -0.18105712822392078465e+3, + -0.12818170270183049979e+4, + -0.16730196075635883517e+4, + -0.1202563256627463943e+4, + -0.15919698912077984687e+3, + 0.9852831856382189244e+3, + 0.18402445313938505933e+4, + 0.22305017934812558451e+4, + 0.21871595583540724874e+4, + 0.18583163478527819734e+4, + 0.14126736914460980188e+4, + 0.97849859647679124919e+3, + 0.62478308580999555488e+3, + 0.37070941002789083996e+3, + 0.20559168570304223067e+3, + 0.10704243709196882151e+3, + 0.52500920567367380443e+2, + 0.24322637006813248917e+2, + 0.10666638043276888581e+2, + 0.44358687922286597072e+1, + 0.17517929848213005251e+1, 0.65772262546672499717, 0.23499867337220772812, - 0.79960552533103385064e-01, - 0.25925581308612846709e-01, - 0.80133866926208711934e-02, - 0.23619764519417405478e-02, - 0.66403855266165346186e-03, - 0.17807742983325160224e-03, - 0.45553093475665774957e-04, - 0.11114086765784721161e-04, - 0.25857665835955724681e-05, - 0.57350481120854891031e-06, - 0.12121310059322900773e-06, - 0.24401630204855643145e-07, - 0.46762257255732051178e-08, - 0.85248549521593675106e-09, - 0.14772565271086752904e-09, + 0.79960552533103385064e-1, + 0.25925581308612846709e-1, + 0.80133866926208711934e-2, + 0.23619764519417405478e-2, + 0.66403855266165346186e-3, + 0.17807742983325160224e-3, + 0.45553093475665774957e-4, + 0.11114086765784721161e-4, + 0.25857665835955724681e-5, + 0.57350481120854891031e-6, + 0.12121310059322900773e-6, + 0.24401630204855643145e-7, + 0.46762257255732051178e-8, + 0.85248549521593675106e-9, + 0.14772565271086752904e-9, 0.24311789815724972071e-10, - 0.37960646983427959170e-11, + 0.3796064698342795917e-11, 0.56171266008030390691e-12, 0.78669556980901884237e-13, - 0.10413401800510394220e-13, + 0.1041340180051039422e-13, 0.13007078649010077954e-14, 0.15303588817247669988e-15, 0.16926414654365305897e-16, @@ -31470,7 +31472,7 @@ function ESERK4ConstantCache(zprev) 0.15895318185039031462e-26, 0.78154160945136125563e-28, 0.34216591405495500497e-29, - 0.13176515712026948690e-30, + 0.1317651571202694869e-30, 0.43941430356458021856e-32, 0.12432840184849611651e-33, 0.29021510564060991753e-35, @@ -31478,275 +31480,275 @@ function ESERK4ConstantCache(zprev) 0.73691252503270639534e-39, 0.66819247821700726699e-41, 0.30007749542706335153e-43, - -0.17220475588157743707e-01, - 0.18855873202904088054e-01, - 0.13558073895864783745e-01, - -0.31400932973985593022e-01, - 0.22837100398477687413e-01, - -0.30752285792291348711e-02, - -0.52553638149286339976e-03, - -0.16871461450217815209e-01, - 0.35845258381383485191e-01, - -0.31218458303578673629e-01, - 0.42399839061537701948e-02, - 0.21659620927882254626e-01, - -0.22323435627874026188e-01, - 0.18722294138321538687e-02, - 0.16787042120030969822e-01, - -0.13999167963395328651e-01, - -0.30395299525165209685e-02, - 0.14894636262874353522e-01, - -0.99294012427029731960e-02, - -0.56108936607038276839e-04, - -0.43198538259023663713e-03, - 0.14652664613842288771e-01, - -0.27089772240801612835e-01, - 0.26539445360056750089e-01, - -0.15247538632593489460e-01, - 0.67433323436909345383e-02, - -0.36934444667164893945e-02, - -0.47499312367070442532e-03, - 0.11740480818093014526e-01, - -0.19472789587123704586e-01, - 0.12110833962464619823e-01, - 0.78392482103780223440e-02, - -0.18533431740751258460e-01, - 0.82070503918167010682e-02, - 0.10718833986331895158e-01, - -0.11216471998370478730e-01, - -0.96932185706570320183e-02, - 0.26636891892423981282e-01, - -0.12558123239015747327e-01, - -0.21229393272730844033e-01, - 0.38216818348780226544e-01, - -0.16843522819439252225e-01, - -0.18843270478446926680e-01, - 0.32118170730393469370e-01, - -0.15224945497695041574e-01, - -0.87690174167528588296e-03, - -0.65601320645450643745e-02, - 0.26175998230917020548e-01, - -0.29031242464842281492e-01, - 0.14289012668967737349e-01, - -0.46176786316864263174e-02, - 0.12091665812567970947e-01, - -0.15624403327917001094e-01, - -0.12934058418761387559e-02, - 0.22550126046259225815e-01, - -0.16610817743361361992e-01, - -0.98593576460134779715e-02, - 0.17883253784409480075e-01, - 0.11902321262584950740e-01, - -0.43925193352040543815e-01, - 0.38702417852759955774e-01, - -0.56056888978423561817e-02, - -0.97146999833127422458e-02, - -0.31681559311560730102e-02, - 0.11778122272783315277e-01, - 0.48832148852637532327e-02, - -0.18426680081939525446e-01, - 0.49539353698513531252e-02, - 0.12019714729553486118e-01, - 0.40180363707686987326e-02, - -0.32978003351892333506e-01, - 0.27395928318085540493e-01, - 0.11358964153777705020e-01, - -0.27173765593040320743e-01, - 0.21986821285227670618e-02, - 0.17840428361620568748e-01, - -0.32829331315382118866e-04, - -0.18701980038039734550e-01, - 0.61290292220130600936e-02, - 0.62034160712354695713e-02, - 0.18451066943026867007e-01, - -0.41091945650082520314e-01, - 0.13611520204150578603e-01, - 0.31394002591476476149e-01, - -0.29109676134463875058e-01, - -0.72729315475546631262e-03, - -0.15653902437411425577e-02, - 0.22334751434856227326e-01, - -0.35004759577229012726e-02, - -0.30786439764043552897e-01, - 0.18157212153145717293e-01, - 0.15615598303075187842e-01, - 0.10036643945611264245e-02, - -0.36936024353280590138e-01, - 0.19620034298553648555e-01, - 0.19338804392424257389e-01, - -0.93742915530150277420e-02, - -0.60135776703415097164e-02, - -0.29024788020027121604e-01, - 0.49690429073516902136e-01, - -0.23056373801181103030e-02, - -0.27179103065177394327e-01, - -0.47452134565472495198e-02, - 0.10834708497285024109e-01, - 0.22668433140889489297e-01, - 0.33736787487155371233e-03, - -0.47115093105827565712e-01, - 0.18635170817649825831e-01, - 0.18160496576803318580e-01, - 0.17092265351330893780e-01, - -0.24035202437102505535e-01, - -0.20694256005489509304e-01, - -0.31699064769203483781e-02, - 0.50871882934841121393e-01, - -0.10052560133184290300e-01, - -0.84059111592435838828e-02, - -0.39540861083150420641e-01, - 0.13327180516387277659e-01, - 0.26466860265331793034e-01, - 0.30567531448492550605e-01, - -0.29710341659236503414e-01, - -0.24295647861540897727e-01, - -0.20947890873126831512e-01, - 0.22942759616191230054e-01, - 0.42872594509022372844e-01, - 0.10374886576517460338e-01, - -0.23210662926173939585e-01, - -0.34114204284256620381e-01, - -0.31958876218667997549e-01, - 0.18910580559287289842e-01, - 0.45905153588371973294e-01, - 0.24850233179587084137e-01, - 0.29716701078354449544e-01, - -0.42332829450499140367e-01, - -0.42352857986616844477e-01, - -0.38904671039256981391e-01, - -0.36013962952642579463e-01, - 0.26888666177022884501e-01, - 0.38196542996993473884e-01, - 0.54235522767969300550e-01, - 0.85927930293709861576e-01, - 0.41213201368430055216e-01, - 0.64754519348057870687e-01, - 0.35112336546308672847e-01, - 0.14890039687080603228e-01, - 0.33049654346607913735e-01, - -0.77778927612259882857e-02, - 0.16374669196680978478e-01, - -0.17362766072497141934e-02, - 0.19162132167917728456e-02, - -0.15007683871085984121e-02, - 0.80659202169114721515e-02, - -0.14448229707528034357e-01, - 0.19048051491109080358e-01, - -0.19441419785338646259e-01, - 0.16635006529079964660e-01, - -0.12973963573491962067e-01, - 0.11076971372492685694e-01, - -0.12158343121245050733e-01, - 0.15443059389534621872e-01, - -0.18754156047814891928e-01, - 0.19781744617099177724e-01, - -0.17393082978092302276e-01, - 0.12098541090825837285e-01, - -0.56561353385039068314e-02, - -0.19884854485081329499e-04, - 0.37932918991106985042e-02, - -0.57023791154241698295e-02, - 0.65091214869536281190e-02, - -0.69197709898499238160e-02, - 0.68972273656264819139e-02, - -0.56793125669048890800e-02, - 0.23804964904807252198e-02, - 0.30784145521865948630e-02, - -0.94623518237620975191e-02, - 0.14422544775245665222e-01, - -0.15522412954335880475e-01, - 0.11471352427807789826e-01, - -0.29991240024542136292e-02, - -0.72659103547436411363e-02, - 0.15830645933545377246e-01, - -0.19903111901294574804e-01, - 0.18612395097093420437e-01, - -0.13341956805057822791e-01, - 0.69128077559259945226e-02, - -0.21176819627164414524e-02, - 0.29573118056230765071e-03, - -0.76666078513037776675e-03, - 0.13519495025227350887e-02, - 0.23873988231637796468e-03, - -0.49667471874184788289e-02, - 0.11709527994389484773e-01, - -0.17683088000652828070e-01, - 0.19815973412531297931e-01, - -0.16418838765721796569e-01, - 0.82324326714977753838e-02, - 0.16997272191184359044e-02, - -0.93574235328129674871e-02, - 0.11621176914302996583e-01, - -0.77964903134405431559e-02, - -0.70387003402805778385e-01, - 0.94982627816770026641e-01, - 0.17797103380132222455e-01, + -0.17220475588157743707e-1, + 0.18855873202904088054e-1, + 0.13558073895864783745e-1, + -0.31400932973985593022e-1, + 0.22837100398477687413e-1, + -0.30752285792291348711e-2, + -0.52553638149286339976e-3, + -0.16871461450217815209e-1, + 0.35845258381383485191e-1, + -0.31218458303578673629e-1, + 0.42399839061537701948e-2, + 0.21659620927882254626e-1, + -0.22323435627874026188e-1, + 0.18722294138321538687e-2, + 0.16787042120030969822e-1, + -0.13999167963395328651e-1, + -0.30395299525165209685e-2, + 0.14894636262874353522e-1, + -0.9929401242702973196e-2, + -0.56108936607038276839e-4, + -0.43198538259023663713e-3, + 0.14652664613842288771e-1, + -0.27089772240801612835e-1, + 0.26539445360056750089e-1, + -0.1524753863259348946e-1, + 0.67433323436909345383e-2, + -0.36934444667164893945e-2, + -0.47499312367070442532e-3, + 0.11740480818093014526e-1, + -0.19472789587123704586e-1, + 0.12110833962464619823e-1, + 0.7839248210378022344e-2, + -0.1853343174075125846e-1, + 0.82070503918167010682e-2, + 0.10718833986331895158e-1, + -0.1121647199837047873e-1, + -0.96932185706570320183e-2, + 0.26636891892423981282e-1, + -0.12558123239015747327e-1, + -0.21229393272730844033e-1, + 0.38216818348780226544e-1, + -0.16843522819439252225e-1, + -0.1884327047844692668e-1, + 0.3211817073039346937e-1, + -0.15224945497695041574e-1, + -0.87690174167528588296e-3, + -0.65601320645450643745e-2, + 0.26175998230917020548e-1, + -0.29031242464842281492e-1, + 0.14289012668967737349e-1, + -0.46176786316864263174e-2, + 0.12091665812567970947e-1, + -0.15624403327917001094e-1, + -0.12934058418761387559e-2, + 0.22550126046259225815e-1, + -0.16610817743361361992e-1, + -0.98593576460134779715e-2, + 0.17883253784409480075e-1, + 0.1190232126258495074e-1, + -0.43925193352040543815e-1, + 0.38702417852759955774e-1, + -0.56056888978423561817e-2, + -0.97146999833127422458e-2, + -0.31681559311560730102e-2, + 0.11778122272783315277e-1, + 0.48832148852637532327e-2, + -0.18426680081939525446e-1, + 0.49539353698513531252e-2, + 0.12019714729553486118e-1, + 0.40180363707686987326e-2, + -0.32978003351892333506e-1, + 0.27395928318085540493e-1, + 0.1135896415377770502e-1, + -0.27173765593040320743e-1, + 0.21986821285227670618e-2, + 0.17840428361620568748e-1, + -0.32829331315382118866e-4, + -0.1870198003803973455e-1, + 0.61290292220130600936e-2, + 0.62034160712354695713e-2, + 0.18451066943026867007e-1, + -0.41091945650082520314e-1, + 0.13611520204150578603e-1, + 0.31394002591476476149e-1, + -0.29109676134463875058e-1, + -0.72729315475546631262e-3, + -0.15653902437411425577e-2, + 0.22334751434856227326e-1, + -0.35004759577229012726e-2, + -0.30786439764043552897e-1, + 0.18157212153145717293e-1, + 0.15615598303075187842e-1, + 0.10036643945611264245e-2, + -0.36936024353280590138e-1, + 0.19620034298553648555e-1, + 0.19338804392424257389e-1, + -0.9374291553015027742e-2, + -0.60135776703415097164e-2, + -0.29024788020027121604e-1, + 0.49690429073516902136e-1, + -0.2305637380118110303e-2, + -0.27179103065177394327e-1, + -0.47452134565472495198e-2, + 0.10834708497285024109e-1, + 0.22668433140889489297e-1, + 0.33736787487155371233e-3, + -0.47115093105827565712e-1, + 0.18635170817649825831e-1, + 0.1816049657680331858e-1, + 0.1709226535133089378e-1, + -0.24035202437102505535e-1, + -0.20694256005489509304e-1, + -0.31699064769203483781e-2, + 0.50871882934841121393e-1, + -0.100525601331842903e-1, + -0.84059111592435838828e-2, + -0.39540861083150420641e-1, + 0.13327180516387277659e-1, + 0.26466860265331793034e-1, + 0.30567531448492550605e-1, + -0.29710341659236503414e-1, + -0.24295647861540897727e-1, + -0.20947890873126831512e-1, + 0.22942759616191230054e-1, + 0.42872594509022372844e-1, + 0.10374886576517460338e-1, + -0.23210662926173939585e-1, + -0.34114204284256620381e-1, + -0.31958876218667997549e-1, + 0.18910580559287289842e-1, + 0.45905153588371973294e-1, + 0.24850233179587084137e-1, + 0.29716701078354449544e-1, + -0.42332829450499140367e-1, + -0.42352857986616844477e-1, + -0.38904671039256981391e-1, + -0.36013962952642579463e-1, + 0.26888666177022884501e-1, + 0.38196542996993473884e-1, + 0.5423552276796930055e-1, + 0.85927930293709861576e-1, + 0.41213201368430055216e-1, + 0.64754519348057870687e-1, + 0.35112336546308672847e-1, + 0.14890039687080603228e-1, + 0.33049654346607913735e-1, + -0.77778927612259882857e-2, + 0.16374669196680978478e-1, + -0.17362766072497141934e-2, + 0.19162132167917728456e-2, + -0.15007683871085984121e-2, + 0.80659202169114721515e-2, + -0.14448229707528034357e-1, + 0.19048051491109080358e-1, + -0.19441419785338646259e-1, + 0.1663500652907996466e-1, + -0.12973963573491962067e-1, + 0.11076971372492685694e-1, + -0.12158343121245050733e-1, + 0.15443059389534621872e-1, + -0.18754156047814891928e-1, + 0.19781744617099177724e-1, + -0.17393082978092302276e-1, + 0.12098541090825837285e-1, + -0.56561353385039068314e-2, + -0.19884854485081329499e-4, + 0.37932918991106985042e-2, + -0.57023791154241698295e-2, + 0.6509121486953628119e-2, + -0.6919770989849923816e-2, + 0.68972273656264819139e-2, + -0.567931256690488908e-2, + 0.23804964904807252198e-2, + 0.3078414552186594863e-2, + -0.94623518237620975191e-2, + 0.14422544775245665222e-1, + -0.15522412954335880475e-1, + 0.11471352427807789826e-1, + -0.29991240024542136292e-2, + -0.72659103547436411363e-2, + 0.15830645933545377246e-1, + -0.19903111901294574804e-1, + 0.18612395097093420437e-1, + -0.13341956805057822791e-1, + 0.69128077559259945226e-2, + -0.21176819627164414524e-2, + 0.29573118056230765071e-3, + -0.76666078513037776675e-3, + 0.13519495025227350887e-2, + 0.23873988231637796468e-3, + -0.49667471874184788289e-2, + 0.11709527994389484773e-1, + -0.1768308800065282807e-1, + 0.19815973412531297931e-1, + -0.16418838765721796569e-1, + 0.82324326714977753838e-2, + 0.16997272191184359044e-2, + -0.93574235328129674871e-2, + 0.11621176914302996583e-1, + -0.77964903134405431559e-2, + -0.70387003402805778385e-1, + 0.94982627816770026641e-1, + 0.17797103380132222455e-1, -0.16166505649091181263, 0.24835373975086269538, -0.25256117518591592042, 0.15028972145334129618, - -0.36831982688276185267e-02, + -0.36831982688276185267e-2, -0.14223904991590705094, 0.20766612249015456437, -0.18961362463053196836, - 0.89512260113256081340e-01, - 0.14950903171104909517e-01, - -0.82178263730586273428e-01, - 0.55314779896561687422e-01, - 0.34920758098081275400e-01, + 0.8951226011325608134e-1, + 0.14950903171104909517e-1, + -0.82178263730586273428e-1, + 0.55314779896561687422e-1, + 0.349207580980812754e-1, -0.15716978709255496893, 0.22132900925381321366, -0.19729335904559758275, - 0.59335980435767966823e-01, - 0.12441506863051599030, + 0.59335980435767966823e-1, + 0.1244150686305159903, -0.29526048410998934068, 0.35743826444495901962, -0.29801747807018547087, 0.12128656043162995559, - 0.78056232105687670120e-01, + 0.7805623210568767012e-1, -0.23250757402255275985, 0.26012472863913976839, -0.17690481288008513827, - 0.14822907928703119365e-01, + 0.14822907928703119365e-1, 0.12178612900684213094, -0.18194296861047609681, 0.12078399944829074086, - 0.54200422326179014190e-02, + 0.5420042232617901419e-2, -0.14190845822091294193, 0.19233261387569283718, - -0.14282893206271526920, - -0.18234564192908108305e-02, + -0.1428289320627152692, + -0.18234564192908108305e-2, 0.14693758894607328314, -0.22945903744606691022, 0.17899074142555904121, - -0.28675256932927554315e-01, + -0.28675256932927554315e-1, -0.17253021192821521579, 0.31081523998351073823, -0.33757500242788818223, 0.22132920541319286989, - -0.34818513707087224429e-01, + -0.34818513707087224429e-1, -0.15236961996576095513, - 0.24457929967077887690, + 0.2445792996707788769, -0.21874339524604444196, 0.11068124616491419043, - 0.53671822222634266164e-01, - -0.86627915792548595975e-01, + 0.53671822222634266164e-1, + -0.86627915792548595975e-1, 0.21148874286920002485, - 0.76853542851775022426e-01, + 0.76853542851775022426e-1, 0.23338904129356288775, 0.46955206208840660764, - 0.52249588915355704710, + 0.5224958891535570471, 0.83484524947765825775, 0.99459442475105219739, - 0.10808853950960366497e+01, + 0.10808853950960366497e+1, 0.93816985048191858798, 0.81104036367957521581, - 0.48385707808273614727e-01, + 0.48385707808273614727e-1, -0.23005324412121455624, -0.73741533909657874801, -0.89718781822382731583, - -0.20180425494023002120, - -0.79222064417055260144e-01, + -0.2018042549402300212, + -0.79222064417055260144e-1, 0.82289298625962159495, 0.52964595808963543799, 0.31668093675325553749, @@ -31755,23 +31757,23 @@ function ESERK4ConstantCache(zprev) -0.52272495691016773733, 0.30978478676909793066, 0.70950790855245682298, - 0.45785096827555209209e-01, - 0.25251850805244957510, - -0.10836072344151979063e+01, - 0.85876121243079486800e-01, + 0.45785096827555209209e-1, + 0.2525185080524495751, + -0.10836072344151979063e+1, + 0.858761212430794868e-1, 0.21248782327393447855, - 0.40680693099087700260, + 0.4068069309908770026, 0.35188845535478846527, -0.68336047135005195674, -0.32554406730736534792, 0.24307218403809011109, - 0.34932651412298326710, + 0.3493265141229832671, 0.26893319755425892925, -0.41747181260761118127, -0.47958364412018267275, 0.36251803014785155543, 0.36473701326170715475, - 0.12660801596335714489e-01, + 0.12660801596335714489e-1, -0.39037185428732795733, -0.24358133461900605132, 0.34770688290601509118, @@ -31784,31 +31786,31 @@ function ESERK4ConstantCache(zprev) -0.46665194300110035552, -0.13250622967584047007, 0.55105592946482628847, - 0.19755591465442819132e-01, + 0.19755591465442819132e-1, -0.44773949239747090623, - 0.52427786680052435031e-01, + 0.52427786680052435031e-1, 0.15216404405760916574, 0.25744513677050695488, -0.25984570052527289352, -0.39323455210768060164, 0.55845622388025606408, - 0.91971375896092347202e-01, + 0.91971375896092347202e-1, -0.45893700707692913765, - 0.87351955344989434815e-01, + 0.87351955344989434815e-1, 0.13764600138140067886, 0.18527818744790847116, -0.27336069840261256747, - -0.21279601147329565980, + -0.2127960114732956598, 0.45079987704014923278, - 0.10024656344345225789e-01, + 0.10024656344345225789e-1, -0.38291310321552757268, - 0.24640794433687811943e-01, - 0.45768627799571121040, + 0.24640794433687811943e-1, + 0.4576862779957112104, -0.29124308462223041927, -0.18842803261858234731, 0.22601071680122752916, - 0.60575722064441339665e-01, - -0.29730157619041484851e-01, + 0.60575722064441339665e-1, + -0.29730157619041484851e-1, -0.25814864141213750282, 0.14101856257124251171, 0.42531568475548214847, @@ -31816,225 +31818,225 @@ function ESERK4ConstantCache(zprev) 0.20319642932581685746, 0.36827813915128188027, -0.35661844289655147966, - -0.20882991752165746407e-01, - 0.92428939377809604672e-01, + -0.20882991752165746407e-1, + 0.92428939377809604672e-1, 0.21001202263390233993, -0.34594070888629308014, - 0.89312966211495731228e-01, + 0.89312966211495731228e-1, 0.14506448830313350973, - -0.27906877417032262961e-01, + -0.27906877417032262961e-1, -0.13992750481499424686, - -0.64694031133303464554e-01, + -0.64694031133303464554e-1, 0.44817508062553490511, -0.41823501764122689162, -0.13853629165722591843, 0.62195687084934425659, -0.49529895753567376726, - -0.19580120896231519023e-01, + -0.19580120896231519023e-1, 0.27304482047893730012, - -0.45635063419624054271e-01, + -0.45635063419624054271e-1, -0.24089272343691148226, - 0.16019336802025660460, + 0.1601933680202566046, 0.16780539462195209754, -0.32177016706625116704, 0.17897924194481501514, - -0.19930458755818877825e-01, - 0.64399448250716542774e-01, - -0.16166893551822025810, - 0.63877031097126876769e-01, + -0.19930458755818877825e-1, + 0.64399448250716542774e-1, + -0.1616689355182202581, + 0.63877031097126876769e-1, 0.15193170158291094407, -0.15484005192966576736, -0.15774029621176136051, 0.44698008675418415825, - -0.32706008028012378830, + -0.3270600802801237883, -0.12479114383134183586, 0.41703023672716099668, -0.22650932143144253406, -0.20149839368693719943, - 0.33678318381936128700, - 0.20044306240370904186e-02, + 0.336783183819361287, + 0.20044306240370904186e-2, -0.42577659555797053859, 0.42543752876565871235, - 0.39154996832741692514e-01, + 0.39154996832741692514e-1, -0.49489716144021944633, 0.48705088603936358416, - -0.68291717489280118203e-01, + -0.68291717489280118203e-1, -0.29373593903048084153, 0.24867782800680032773, - 0.74595792359455265208e-01, + 0.74595792359455265208e-1, -0.25389017632555127557, - 0.58162086192790701800e-01, + 0.581620861927907018e-1, 0.31412546586678513627, -0.47539270797776317368, 0.26916675156369129773, - 0.85978533380168239986e-01, + 0.85978533380168239986e-1, -0.25175508843749289101, 0.12095762763900072545, 0.10304920280047656644, -0.14960194441631127771, - -0.34487113991814997982e-01, + -0.34487113991814997982e-1, 0.24923366536004304406, -0.26661246147866796141, - 0.67122407216106905192e-01, + 0.67122407216106905192e-1, 0.14920242683093282166, -0.17365301005146918656, - 0.23795800741899020281e+01, - -0.26671413743928815698e+01, - -0.12670055664654167327e+01, - 0.30594498821165307945e+01, - -0.14932978027520316111e+01, - -0.12365813367694773461e+01, - 0.15748131052194793700e+01, + 0.23795800741899020281e+1, + -0.26671413743928815698e+1, + -0.12670055664654167327e+1, + 0.30594498821165307945e+1, + -0.14932978027520316111e+1, + -0.12365813367694773461e+1, + 0.157481310521947937e+1, 0.87149474347693156595, - -0.34269255209214799507e+01, - 0.28629277677384292744e+01, + -0.34269255209214799507e+1, + 0.28629277677384292744e+1, 0.42216806470576651034, - -0.32986368002628418949e+01, - 0.27967233890543510277e+01, + -0.32986368002628418949e+1, + 0.27967233890543510277e+1, 0.18562544671455782908, - -0.25325948265269997428e+01, - 0.18955840646759332113e+01, + -0.25325948265269997428e+1, + 0.18955840646759332113e+1, 0.35955968241853858425, - -0.15412638209350231211e+01, + -0.15412638209350231211e+1, 0.36477241176818542279, - 0.11966589790507280444e+01, - -0.10110291629980276973e+01, - -0.10598251071580560012e+01, - 0.25863326338284444716e+01, - -0.21278523844909273954e+01, + 0.11966589790507280444e+1, + -0.10110291629980276973e+1, + -0.10598251071580560012e+1, + 0.25863326338284444716e+1, + -0.21278523844909273954e+1, 0.40210450432464117654, 0.39854044852900644136, - -0.49205920180973326816e-01, - -0.57280842063357394200e-01, - -0.13088630851453197934e+01, - 0.26164267597888999362e+01, - -0.18775199098529737896e+01, - -0.88121653057796711650, - 0.25674046227666180719e+01, - -0.12569059143449510252e+01, - -0.15173501611975535042e+01, - 0.18714184808094413981e+01, + -0.49205920180973326816e-1, + -0.572808420633573942e-1, + -0.13088630851453197934e+1, + 0.26164267597888999362e+1, + -0.18775199098529737896e+1, + -0.8812165305779671165, + 0.25674046227666180719e+1, + -0.12569059143449510252e+1, + -0.15173501611975535042e+1, + 0.18714184808094413981e+1, 0.88330156385044111822, - -0.33820139847881138806e+01, - 0.17608274365429403829e+01, - 0.26357097302397280991e+01, - -0.49391199110977490605e+01, - 0.22242865341841744353e+01, - 0.22113479034517649069e+01, - -0.34504325262289188281e+01, + -0.33820139847881138806e+1, + 0.17608274365429403829e+1, + 0.26357097302397280991e+1, + -0.49391199110977490605e+1, + 0.22242865341841744353e+1, + 0.22113479034517649069e+1, + -0.34504325262289188281e+1, 0.65556093042434437912, - 0.17177657186856996052e+01, + 0.17177657186856996052e+1, -0.62301099125853764971, - -0.20950276797641826931e+01, - 0.22832847867639172179e+01, - -0.53771407942063809138e-01, - -0.10904114565835933970e+01, + -0.20950276797641826931e+1, + 0.22832847867639172179e+1, + -0.53771407942063809138e-1, + -0.1090411456583593397e+1, -0.61462274810697881122, - 0.18961454269626309976e+01, - -0.54579753559319446610e-01, - -0.27574201664999336003e+01, - 0.18940484556509626923e+01, - 0.19526243445108033558e+01, - -0.33689868979527259896e+01, + 0.18961454269626309976e+1, + -0.5457975355931944661e-1, + -0.27574201664999336003e+1, + 0.18940484556509626923e+1, + 0.19526243445108033558e+1, + -0.33689868979527259896e+1, -0.47601085894466838022, - 0.47114981217729283713e+01, - -0.39145316582325815347e+01, + 0.47114981217729283713e+1, + -0.39145316582325815347e+1, -0.50197559294155635889, - 0.21469479186302384832e+01, + 0.21469479186302384832e+1, 0.19084586661537886187, - -0.16548744744098440318e+01, + -0.16548744744098440318e+1, -0.73276293271759196379, - 0.26743860761249971247e+01, + 0.26743860761249971247e+1, -0.54690927998223870521, - -0.22615854030119133533e+01, + -0.22615854030119133533e+1, 0.30039589672201649773, - 0.37701149701854537177e+01, - -0.32083208256422333093e+01, - -0.19102307690156132836e+01, - 0.37491123430691510876e+01, - 0.72790615130082725326e-01, - -0.29689705639839409912e+01, + 0.37701149701854537177e+1, + -0.32083208256422333093e+1, + -0.19102307690156132836e+1, + 0.37491123430691510876e+1, + 0.72790615130082725326e-1, + -0.29689705639839409912e+1, 0.36536640914910073485, - 0.22345249026083395805e+01, + 0.22345249026083395805e+1, -0.14480090995156877365, - -0.19435691998978690265e+01, - -0.15043008436302511832e+01, - 0.50303587145478090292e+01, - -0.16553842172819175360e+01, - -0.41749324397494893546e+01, - 0.34218032460144400808e+01, + -0.19435691998978690265e+1, + -0.15043008436302511832e+1, + 0.50303587145478090292e+1, + -0.1655384217281917536e+1, + -0.41749324397494893546e+1, + 0.34218032460144400808e+1, 0.90518580516584379314, -0.26014770971807371636, - -0.31838351351922287158e+01, + -0.31838351351922287158e+1, 0.84173764116375915378, - 0.39107447567158684087e+01, - -0.20491248929278480517e+01, - -0.28250735891499352270e+01, + 0.39107447567158684087e+1, + -0.20491248929278480517e+1, + -0.2825073589149935227e+1, 0.46565370999451516365, - 0.47102072658368170366e+01, - -0.23831296395381760256e+01, - -0.28122345118079103976e+01, + 0.47102072658368170366e+1, + -0.23831296395381760256e+1, + -0.28122345118079103976e+1, 0.77158220644365482777, - 0.20395159657097807759e+01, - 0.26604689632700098123e+01, - -0.56748288183223207781e+01, + 0.20395159657097807759e+1, + 0.26604689632700098123e+1, + -0.56748288183223207781e+1, -0.78747658973665468629, - 0.45762692252550758454e+01, - 0.30948064734189745240, - -0.11568618161558936741e+01, - -0.39759995848308826716e+01, - 0.10608723270838722463e+01, - 0.53989150495050788336e+01, - -0.12477155932316845721e+01, - -0.39298865203989135075e+01, - -0.12787024148168883997e+01, - 0.22707888843156771586e+01, - 0.43584338822466932584e+01, - -0.12016602681234678229e+01, - -0.54511629307288007595e+01, + 0.45762692252550758454e+1, + 0.3094806473418974524, + -0.11568618161558936741e+1, + -0.39759995848308826716e+1, + 0.10608723270838722463e+1, + 0.53989150495050788336e+1, + -0.12477155932316845721e+1, + -0.39298865203989135075e+1, + -0.12787024148168883997e+1, + 0.22707888843156771586e+1, + 0.43584338822466932584e+1, + -0.12016602681234678229e+1, + -0.54511629307288007595e+1, -0.46463122270547951853, - 0.29766732085221594417e+01, - 0.41564562470267052419e+01, + 0.29766732085221594417e+1, + 0.41564562470267052419e+1, -0.56218419245460982125, - -0.51086191161151459639e+01, - -0.30761150736779638848e+01, - 0.29461056792782271962e+01, - 0.47084602495427541058e+01, - 0.20840001372495833287e+01, - -0.27287830697456580964e+01, - -0.64409728901679077495e+01, - -0.13868712671807905679e+01, - 0.32477590102108120362e+01, - 0.50408638314428202420e+01, - 0.45294027056288221900e+01, - -0.28753614727669223328e+01, - -0.61034205182099920961e+01, - -0.44243038755867312162e+01, - -0.32829193650040893182e+01, - 0.52330514971534318747e+01, - 0.65899251658172541823e+01, - 0.55475226670379713667e+01, - 0.49528732498560090747e+01, - -0.36399337733512728832e+01, - -0.54519740560221787717e+01, - -0.82621653163884989368e+01, - -0.11616833015809531204e+02, - -0.67209763721869961728e+01, - -0.88281413134288424516e+01, - -0.50464495948480028176e+01, - -0.26887856730615080636e+01, - -0.38258408987293823778e+01, - 0.21477124573612487585e-01, - -0.12729470540573795123e+01, + -0.51086191161151459639e+1, + -0.30761150736779638848e+1, + 0.29461056792782271962e+1, + 0.47084602495427541058e+1, + 0.20840001372495833287e+1, + -0.27287830697456580964e+1, + -0.64409728901679077495e+1, + -0.13868712671807905679e+1, + 0.32477590102108120362e+1, + 0.5040863831442820242e+1, + 0.452940270562882219e+1, + -0.28753614727669223328e+1, + -0.61034205182099920961e+1, + -0.44243038755867312162e+1, + -0.32829193650040893182e+1, + 0.52330514971534318747e+1, + 0.65899251658172541823e+1, + 0.55475226670379713667e+1, + 0.49528732498560090747e+1, + -0.36399337733512728832e+1, + -0.54519740560221787717e+1, + -0.82621653163884989368e+1, + -0.11616833015809531204e+2, + -0.67209763721869961728e+1, + -0.88281413134288424516e+1, + -0.50464495948480028176e+1, + -0.26887856730615080636e+1, + -0.38258408987293823778e+1, + 0.21477124573612487585e-1, + -0.12729470540573795123e+1, -0.77017059245272156964, 0.75873971731529943341, -0.97599031563600502359, 0.30023862253582767057, 0.33308009541907873663, -0.79493740694310266459, - 0.78463262762323771060, + 0.7846326276232377106, -0.42211737321376929799, - -0.31131445528744663281e-01, + -0.31131445528744663281e-1, 0.27363961739755571223, -0.15912846826513885046, -0.23735430266192428239, @@ -32042,10 +32044,10 @@ function ESERK4ConstantCache(zprev) -0.92184325921463783349, 0.82801628870266885674, -0.44805994422059014504, - -0.38011406890956750404e-01, + -0.38011406890956750404e-1, 0.43823869962559230951, -0.64921255317593518086, - 0.69698242868441373510, + 0.6969824286844137351, -0.68194035195937652283, 0.68908386249434361304, -0.70897243102810125759, @@ -32053,2804 +32055,2804 @@ function ESERK4ConstantCache(zprev) -0.36207970106923864639, -0.16336549994076413062, 0.82342589739645222213, - -0.13751900037561277657e+01, - 0.15563778007954891525e+01, - -0.12208989691968383795e+01, + -0.13751900037561277657e+1, + 0.15563778007954891525e+1, + -0.12208989691968383795e+1, 0.43720337863806957301, 0.52362892829458951294, - -0.12993215101498005737e+01, - 0.16071311810487209915e+01, - -0.13749064176874021825e+01, + -0.12993215101498005737e+1, + 0.16071311810487209915e+1, + -0.13749064176874021825e+1, 0.77435001890891330678, -0.12635722257398096513, -0.26361227732729797246, 0.26406493905274724954, - 0.22699335117616577240e-01, + 0.2269933511761657724e-1, -0.32319213481010433675, 0.35311054784651202398, - 0.17204413563645892110e-01, + 0.1720441356364589211e-1, -0.67500712472336943382, - 0.13114417069162354057e+01, - -0.15759710549885859177e+01, - 0.12659010537874368918e+01, + 0.13114417069162354057e+1, + -0.15759710549885859177e+1, + 0.12659010537874368918e+1, -0.44708953380766919272, -0.55640403777628921755, - 0.13076233732174062929e+01, - -0.14647404131313994657e+01, + 0.13076233732174062929e+1, + -0.14647404131313994657e+1, 0.95121716159781688482, - 0.36018995252052294909e+01, - -0.61046683764743221445e+01, - 0.22145412810718458907e+01, - 0.33931986505580904456e+01, - -0.72830094974711254707e+01, - 0.83981288670260454410e+01, - -0.54555596365210048404e+01, + 0.36018995252052294909e+1, + -0.61046683764743221445e+1, + 0.22145412810718458907e+1, + 0.33931986505580904456e+1, + -0.72830094974711254707e+1, + 0.8398128867026045441e+1, + -0.54555596365210048404e+1, 0.65720992764333663327, - 0.44827600707693457949e+01, - -0.67830959812121163210e+01, - 0.60510811385387173189e+01, - -0.20891659098371868630e+01, - -0.21177122296986370387e+01, - 0.49855468210342825941e+01, - -0.40712143313079938167e+01, + 0.44827600707693457949e+1, + -0.6783095981212116321e+1, + 0.60510811385387173189e+1, + -0.2089165909837186863e+1, + -0.21177122296986370387e+1, + 0.49855468210342825941e+1, + -0.40712143313079938167e+1, 0.43910184919948991311, - 0.48850304601307694696e+01, - -0.82940448074238108944e+01, - 0.84891233013053817302e+01, - -0.41085549062502719764e+01, - -0.23990109006451723062e+01, - 0.89650514598527326626e+01, - -0.11766189204954493164e+02, - 0.10191044227266072397e+02, - -0.40922748779560036425e+01, - -0.29921816521567086156e+01, - 0.86229867273688292073e+01, - -0.95471678287080194991e+01, - 0.63800346423578746524e+01, + 0.48850304601307694696e+1, + -0.82940448074238108944e+1, + 0.84891233013053817302e+1, + -0.41085549062502719764e+1, + -0.23990109006451723062e+1, + 0.89650514598527326626e+1, + -0.11766189204954493164e+2, + 0.10191044227266072397e+2, + -0.40922748779560036425e+1, + -0.29921816521567086156e+1, + 0.86229867273688292073e+1, + -0.95471678287080194991e+1, + 0.63800346423578746524e+1, -0.19584069539599366361, - -0.49551225900915527589e+01, - 0.71954903083571721822e+01, - -0.47172449389220645344e+01, + -0.49551225900915527589e+1, + 0.71954903083571721822e+1, + -0.47172449389220645344e+1, -0.22217855816674175751, - 0.55526855456109194265e+01, - -0.74392985252132817209e+01, - 0.53982707618657581605e+01, + 0.55526855456109194265e+1, + -0.74392985252132817209e+1, + 0.53982707618657581605e+1, 0.44964464361149913962, - -0.63305932311234078824e+01, - 0.98341331109465599525e+01, - -0.81360843948887158206e+01, - 0.25896852179384017845e+01, - 0.49786853112824971390e+01, - -0.10111687354499215630e+02, - 0.11067743622021398053e+02, - -0.66576817690448004683e+01, + -0.63305932311234078824e+1, + 0.98341331109465599525e+1, + -0.81360843948887158206e+1, + 0.25896852179384017845e+1, + 0.4978685311282497139e+1, + -0.1011168735449921563e+2, + 0.11067743622021398053e+2, + -0.66576817690448004683e+1, -0.14809591487461776227, - 0.67231271104920553583e+01, - -0.94362286938052530871e+01, - 0.76654917310354280247e+01, - -0.30785503999833099265e+01, - -0.32995114175612556551e+01, - 0.38618987442282337597e+01, - -0.83510964313498146083e+01, - -0.41214887870340479736e+01, - -0.90933222776217608185e+01, - -0.19752148871866236135e+02, - -0.22841499032671194414e+02, - -0.33310269052293527636e+02, - -0.44021294587079658811e+02, - -0.43163235732799677180e+02, - -0.41129160898377335798e+02, - -0.33177101239257694942e+02, - -0.19597274607906847166e+01, - 0.86958328134278275456e+01, - 0.32684783962128591384e+02, - 0.35355376927212702753e+02, - 0.11357250086111632115e+02, - -0.99208637231220073160e-01, - -0.30630404169851146889e+02, - -0.26494478037586684849e+02, - -0.91305289071069601903e+01, - 0.16723404149017738973e+02, - 0.23205923727260337586e+02, - 0.21836694913088589232e+02, - -0.15208707306046351349e+02, - -0.25375575032084334737e+02, - -0.80371739128452031053e+01, - -0.36707727529980838099e+01, - 0.38758442595287071697e+02, - 0.20805398007524043003e+01, - -0.12981429983981373155e+02, - -0.14794695026990018150e+02, - -0.15566010045730681810e+02, - 0.28507427826732982368e+02, - 0.14265811313958632667e+02, - -0.10745695313728193199e+02, - -0.14398828502272706942e+02, - -0.11351250019305579642e+02, - 0.17596358378442591430e+02, - 0.19818747622510386464e+02, - -0.14485014158552353081e+02, - -0.16446096757866428106e+02, + 0.67231271104920553583e+1, + -0.94362286938052530871e+1, + 0.76654917310354280247e+1, + -0.30785503999833099265e+1, + -0.32995114175612556551e+1, + 0.38618987442282337597e+1, + -0.83510964313498146083e+1, + -0.41214887870340479736e+1, + -0.90933222776217608185e+1, + -0.19752148871866236135e+2, + -0.22841499032671194414e+2, + -0.33310269052293527636e+2, + -0.44021294587079658811e+2, + -0.4316323573279967718e+2, + -0.41129160898377335798e+2, + -0.33177101239257694942e+2, + -0.19597274607906847166e+1, + 0.86958328134278275456e+1, + 0.32684783962128591384e+2, + 0.35355376927212702753e+2, + 0.11357250086111632115e+2, + -0.9920863723122007316e-1, + -0.30630404169851146889e+2, + -0.26494478037586684849e+2, + -0.91305289071069601903e+1, + 0.16723404149017738973e+2, + 0.23205923727260337586e+2, + 0.21836694913088589232e+2, + -0.15208707306046351349e+2, + -0.25375575032084334737e+2, + -0.80371739128452031053e+1, + -0.36707727529980838099e+1, + 0.38758442595287071697e+2, + 0.20805398007524043003e+1, + -0.12981429983981373155e+2, + -0.1479469502699001815e+2, + -0.1556601004573068181e+2, + 0.28507427826732982368e+2, + 0.14265811313958632667e+2, + -0.10745695313728193199e+2, + -0.14398828502272706942e+2, + -0.11351250019305579642e+2, + 0.1759635837844259143e+2, + 0.19818747622510386464e+2, + -0.14485014158552353081e+2, + -0.16446096757866428106e+2, 0.77105914236420813879, - 0.15237145652717078548e+02, - 0.10938952437254428673e+02, - -0.14676558300823964842e+02, - -0.17811854512021405128e+02, - 0.15653995626680215381e+02, - 0.14813505818137938874e+02, - -0.93753810934158181567e+01, - -0.10585830776244355533e+02, - -0.46799955132518453738e+01, - 0.18988035281881877836e+02, - 0.62826414870848816818e+01, - -0.24128341095939148886e+02, + 0.15237145652717078548e+2, + 0.10938952437254428673e+2, + -0.14676558300823964842e+2, + -0.17811854512021405128e+2, + 0.15653995626680215381e+2, + 0.14813505818137938874e+2, + -0.93753810934158181567e+1, + -0.10585830776244355533e+2, + -0.46799955132518453738e+1, + 0.18988035281881877836e+2, + 0.62826414870848816818e+1, + -0.24128341095939148886e+2, 0.46615003524354109432, - 0.17305751901567838047e+02, + 0.17305751901567838047e+2, -0.72664916875826635057, - -0.75731204501979076937e+01, - -0.10126739248934443438e+02, - 0.10782780553820787262e+02, - 0.16211642747877313298e+02, - -0.22974515572109744710e+02, - -0.42098088478912476518e+01, - 0.19245512105025628813e+02, - -0.31758043303525185230e+01, - -0.66222618681209466374e+01, - -0.68730859749993902241e+01, - 0.10863081110025211373e+02, - 0.89564860345029657651e+01, - -0.18199406823423633028e+02, - -0.18478618572507596873e+01, - 0.17947927665060820601e+02, - -0.29742709230815509436e+01, - -0.17555772396565881621e+02, - 0.11047085051604449646e+02, - 0.86219484447612053657e+01, - -0.99373210853017166500e+01, - -0.20136040466050579845e+01, + -0.75731204501979076937e+1, + -0.10126739248934443438e+2, + 0.10782780553820787262e+2, + 0.16211642747877313298e+2, + -0.2297451557210974471e+2, + -0.42098088478912476518e+1, + 0.19245512105025628813e+2, + -0.3175804330352518523e+1, + -0.66222618681209466374e+1, + -0.68730859749993902241e+1, + 0.10863081110025211373e+2, + 0.89564860345029657651e+1, + -0.18199406823423633028e+2, + -0.18478618572507596873e+1, + 0.17947927665060820601e+2, + -0.29742709230815509436e+1, + -0.17555772396565881621e+2, + 0.11047085051604449646e+2, + 0.86219484447612053657e+1, + -0.993732108530171665e+1, + -0.20136040466050579845e+1, 0.28341111523797785088, - 0.12455410262928376497e+02, - -0.81570348224900399714e+01, - -0.15296537641491424253e+02, - 0.25790845678358760296e+02, - -0.68449068897132061551e+01, - -0.15975215778167937586e+02, - 0.14082611937712515626e+02, - 0.30777499555917278151e+01, - -0.69808966266952658941e+01, - -0.54342807030166380144e+01, - 0.11510826746626605654e+02, - -0.16199230647565463492e+01, - -0.70855759847315749056e+01, - 0.11068198422214228227e+01, - 0.66270601467669649765e+01, - 0.18344752543462732319e+01, - -0.18372925359794830769e+02, - 0.17965902307455458242e+02, - 0.44139269251899637680e+01, - -0.23857477736539099311e+02, - 0.18076567973657283517e+02, - 0.34720937830552367487e+01, - -0.13506014580304400496e+02, - 0.29444196449654409520e+01, - 0.10280449572498733701e+02, - -0.80235351136522599091e+01, - -0.48669315850160383974e+01, - 0.10793958680307760289e+02, - -0.45951915796358706601e+01, - -0.20391306462893732387e+01, - 0.12651713995959467871e-01, - 0.42222773162899045474e+01, + 0.12455410262928376497e+2, + -0.81570348224900399714e+1, + -0.15296537641491424253e+2, + 0.25790845678358760296e+2, + -0.68449068897132061551e+1, + -0.15975215778167937586e+2, + 0.14082611937712515626e+2, + 0.30777499555917278151e+1, + -0.69808966266952658941e+1, + -0.54342807030166380144e+1, + 0.11510826746626605654e+2, + -0.16199230647565463492e+1, + -0.70855759847315749056e+1, + 0.11068198422214228227e+1, + 0.66270601467669649765e+1, + 0.18344752543462732319e+1, + -0.18372925359794830769e+2, + 0.17965902307455458242e+2, + 0.4413926925189963768e+1, + -0.23857477736539099311e+2, + 0.18076567973657283517e+2, + 0.34720937830552367487e+1, + -0.13506014580304400496e+2, + 0.2944419644965440952e+1, + 0.10280449572498733701e+2, + -0.80235351136522599091e+1, + -0.48669315850160383974e+1, + 0.10793958680307760289e+2, + -0.45951915796358706601e+1, + -0.20391306462893732387e+1, + 0.12651713995959467871e-1, + 0.42222773162899045474e+1, -0.18319507386158701001, - -0.88921568465200788722e+01, - 0.90402104567344743202e+01, - 0.41495667784396914612e+01, - -0.16538822489587957421e+02, - 0.11969945181351741681e+02, - 0.63401627740591539606e+01, - -0.17844074486366721999e+02, - 0.91175934739279078656e+01, - 0.93827466924199516285e+01, - -0.15268095750557998613e+02, + -0.88921568465200788722e+1, + 0.90402104567344743202e+1, + 0.41495667784396914612e+1, + -0.16538822489587957421e+2, + 0.11969945181351741681e+2, + 0.63401627740591539606e+1, + -0.17844074486366721999e+2, + 0.91175934739279078656e+1, + 0.93827466924199516285e+1, + -0.15268095750557998613e+2, 0.87629784727721293791, - 0.17407617337193933338e+02, - -0.18073928015942655634e+02, + 0.17407617337193933338e+2, + -0.18073928015942655634e+2, -0.74300105688510131863, - 0.19362994929004283762e+02, - -0.18838759136995445687e+02, - 0.14613448174739838148e+01, - 0.13142989554380255512e+02, - -0.10361076877344521208e+02, - -0.42288074803070001551e+01, - 0.12705079750673677452e+02, - -0.51908577322911657603e+01, - -0.10098109028622628713e+02, - 0.16930350630354283226e+02, - -0.87032003850455534888e+01, - -0.54969402857993401312e+01, - 0.11594694388464692025e+02, - -0.52280482137370789530e+01, - -0.49393932619952156671e+01, - 0.74557572182139706385e+01, - -0.48204298405001580474e-01, - -0.88804407409577308385e+01, - 0.97194301303280372650e+01, - -0.16004128934372920945e+01, - -0.71256042048164012215e+01, - 0.77355680593945104206e+01, - -0.45683930262533912980e+02, - 0.44584141532084807125e+02, - 0.34951981644115647896e+02, - -0.64009686240871417340e+02, - 0.22871956447494973474e+02, - 0.37614570084205951161e+02, - -0.42036527295217595679e+02, - -0.12883054412957173795e+02, - 0.66967817171793498687e+02, - -0.52468638605680759213e+02, - -0.16912582221864315812e+02, - 0.72323809334804565196e+02, - -0.53596050552779878728e+02, - -0.12902389966228957618e+02, - 0.58026117951906947212e+02, - -0.35969241874512213997e+02, - -0.15329929191065481575e+02, - 0.35193919620940249615e+02, - -0.10341326977590130642e+01, - -0.35964552224706281436e+02, - 0.27980241282668796288e+02, - 0.21889830803614607646e+02, - -0.53131544451728068168e+02, - 0.35212430527220597298e+02, - 0.78280077103273812966e+01, - -0.20218668896882338260e+02, + 0.19362994929004283762e+2, + -0.18838759136995445687e+2, + 0.14613448174739838148e+1, + 0.13142989554380255512e+2, + -0.10361076877344521208e+2, + -0.42288074803070001551e+1, + 0.12705079750673677452e+2, + -0.51908577322911657603e+1, + -0.10098109028622628713e+2, + 0.16930350630354283226e+2, + -0.87032003850455534888e+1, + -0.54969402857993401312e+1, + 0.11594694388464692025e+2, + -0.5228048213737078953e+1, + -0.49393932619952156671e+1, + 0.74557572182139706385e+1, + -0.48204298405001580474e-1, + -0.88804407409577308385e+1, + 0.9719430130328037265e+1, + -0.16004128934372920945e+1, + -0.71256042048164012215e+1, + 0.77355680593945104206e+1, + -0.4568393026253391298e+2, + 0.44584141532084807125e+2, + 0.34951981644115647896e+2, + -0.6400968624087141734e+2, + 0.22871956447494973474e+2, + 0.37614570084205951161e+2, + -0.42036527295217595679e+2, + -0.12883054412957173795e+2, + 0.66967817171793498687e+2, + -0.52468638605680759213e+2, + -0.16912582221864315812e+2, + 0.72323809334804565196e+2, + -0.53596050552779878728e+2, + -0.12902389966228957618e+2, + 0.58026117951906947212e+2, + -0.35969241874512213997e+2, + -0.15329929191065481575e+2, + 0.35193919620940249615e+2, + -0.10341326977590130642e+1, + -0.35964552224706281436e+2, + 0.27980241282668796288e+2, + 0.21889830803614607646e+2, + -0.53131544451728068168e+2, + 0.35212430527220597298e+2, + 0.78280077103273812966e+1, + -0.2021866889688233826e+2, -0.48570691718579467322, - 0.13721384855505339928e+02, - 0.15798898664151989735e+02, - -0.52063744323457946450e+02, - 0.42475561533042551332e+02, - 0.18659836593759141721e+02, - -0.60132274922918689697e+02, - 0.32630028729743273175e+02, - 0.33011855103607246065e+02, - -0.46440148842335069901e+02, - -0.13205568829230106331e+02, - 0.72863173116041039634e+02, - -0.43113423718487268843e+02, - -0.49791178861570301706e+02, - 0.99341328517375089291e+02, - -0.40541532474748301240e+02, - -0.52706916556504140203e+02, - 0.72395479161342976226e+02, - -0.38509391943115867107e+01, - -0.49452754867770956082e+02, - 0.21172451718078345806e+02, - 0.41353242416129404546e+02, - -0.41224147868225287539e+02, - -0.14668628773712791613e+02, - 0.39995469536856511183e+02, - 0.71883800587301402985e+01, - -0.46539759208356180409e+02, - 0.95386794474220302220e+01, - 0.56263179649261246595e+02, - -0.40142469363362465629e+02, - -0.46980606834255112858e+02, - 0.82609517575961348257e+02, + 0.13721384855505339928e+2, + 0.15798898664151989735e+2, + -0.5206374432345794645e+2, + 0.42475561533042551332e+2, + 0.18659836593759141721e+2, + -0.60132274922918689697e+2, + 0.32630028729743273175e+2, + 0.33011855103607246065e+2, + -0.46440148842335069901e+2, + -0.13205568829230106331e+2, + 0.72863173116041039634e+2, + -0.43113423718487268843e+2, + -0.49791178861570301706e+2, + 0.99341328517375089291e+2, + -0.4054153247474830124e+2, + -0.52706916556504140203e+2, + 0.72395479161342976226e+2, + -0.38509391943115867107e+1, + -0.49452754867770956082e+2, + 0.21172451718078345806e+2, + 0.41353242416129404546e+2, + -0.41224147868225287539e+2, + -0.14668628773712791613e+2, + 0.39995469536856511183e+2, + 0.71883800587301402985e+1, + -0.46539759208356180409e+2, + 0.9538679447422030222e+1, + 0.56263179649261246595e+2, + -0.40142469363362465629e+2, + -0.46980606834255112858e+2, + 0.82609517575961348257e+2, 0.12954316047106823051, - -0.92367540890160540812e+02, - 0.72606671668886676230e+02, - 0.24868640154136997467e+02, - -0.54214320663399426792e+02, - -0.75183587516989511812e+01, - 0.43760580806223480010e+02, - 0.13996450058111122416e+02, - -0.61401267275630658560e+02, - 0.10335137550028969500e+02, - 0.60329151755578259042e+02, - -0.20010448259915428082e+02, - -0.73392878759734756500e+02, - 0.64248339488157284904e+02, - 0.47909293503089251942e+02, - -0.84606544256853766228e+02, - -0.64602291224602250708e+01, - 0.71919432385315332112e+02, - -0.84756791972159390980e+01, - -0.51664190873832453121e+02, - -0.18381245748309986698e+01, - 0.56797545378801260085e+02, - 0.20605699344820848751e+02, - -0.10621955832037666312e+03, - 0.36566345491467785678e+02, - 0.88915921371032908382e+02, - -0.64539473308266508411e+02, - -0.36502302239416806628e+02, - 0.15719280440790921460e+02, - 0.72463044247277181853e+02, - -0.23849890997095304357e+02, - -0.84373500045275832804e+02, - 0.40514033540431320546e+02, - 0.73688134546482359610e+02, - -0.20303411931235970656e+02, - -0.98698816897975788720e+02, - 0.45099786127579832851e+02, - 0.71158411298257405520e+02, - -0.15083942096286220291e+02, - -0.58970943727429180115e+02, - -0.46481138579742349748e+02, - 0.11925153276413124104e+03, - 0.23596992281026555105e+02, - -0.10268591466375355026e+03, - -0.17243574794408608852e+02, - 0.36956822955547778520e+02, - 0.87954860421167964546e+02, - -0.26510605672889123952e+02, - -0.12018004252108272567e+03, - 0.23730474621500654564e+02, - 0.93355380726515178935e+02, - 0.32093928018128508484e+02, - -0.56382460077551044719e+02, - -0.10080782888321228086e+03, - 0.31720014196745630386e+02, - 0.11975111855782218129e+03, - 0.19073276986069632954e+02, - -0.75361268660338495806e+02, - -0.94675948150643634449e+02, - 0.13258385391376824813e+02, - 0.11912192880068793954e+03, - 0.69874460856705965739e+02, - -0.64934172485633141036e+02, - -0.11354448840723823366e+03, - -0.47579323482686341151e+02, - 0.66393805117110801461e+02, - 0.14500570889790003548e+03, - 0.37315593160674474404e+02, - -0.77688675745779121939e+02, - -0.11939534596374417674e+03, - -0.10230527680078725439e+03, - 0.65803763760091584345e+02, - 0.13857663650674953715e+03, - 0.11251202904541968053e+03, - 0.64856839775046339014e+02, - -0.11275770394500807470e+03, - -0.15656572348994731669e+03, - -0.13421157813263502590e+03, - -0.10609371463284510639e+03, - 0.76211889769849392451e+02, - 0.12988352204801944367e+03, - 0.19862003964661693090e+03, - 0.25832984575477973976e+03, - 0.17164510387408253678e+03, - 0.19463894546259419371e+03, - 0.12200275714127215565e+03, - 0.65747520435549247964e+02, - 0.82009293784576911435e+02, - 0.66905591148694343318e+01, - 0.25918052587434768697e+02, - 0.17529590730706061663e+02, - -0.14768189462535646683e+02, - 0.20333644210361626392e+02, - -0.75061798030129160963e+01, - -0.36856874795647223131e+01, - 0.12146134355268079830e+02, - -0.11778056643098885559e+02, - 0.49098679712388468843e+01, - 0.38200155826808299686e+01, - -0.88597880106143254153e+01, - 0.74246007229093722302e+01, + -0.92367540890160540812e+2, + 0.7260667166888667623e+2, + 0.24868640154136997467e+2, + -0.54214320663399426792e+2, + -0.75183587516989511812e+1, + 0.4376058080622348001e+2, + 0.13996450058111122416e+2, + -0.6140126727563065856e+2, + 0.103351375500289695e+2, + 0.60329151755578259042e+2, + -0.20010448259915428082e+2, + -0.733928787597347565e+2, + 0.64248339488157284904e+2, + 0.47909293503089251942e+2, + -0.84606544256853766228e+2, + -0.64602291224602250708e+1, + 0.71919432385315332112e+2, + -0.8475679197215939098e+1, + -0.51664190873832453121e+2, + -0.18381245748309986698e+1, + 0.56797545378801260085e+2, + 0.20605699344820848751e+2, + -0.10621955832037666312e+3, + 0.36566345491467785678e+2, + 0.88915921371032908382e+2, + -0.64539473308266508411e+2, + -0.36502302239416806628e+2, + 0.1571928044079092146e+2, + 0.72463044247277181853e+2, + -0.23849890997095304357e+2, + -0.84373500045275832804e+2, + 0.40514033540431320546e+2, + 0.7368813454648235961e+2, + -0.20303411931235970656e+2, + -0.9869881689797578872e+2, + 0.45099786127579832851e+2, + 0.7115841129825740552e+2, + -0.15083942096286220291e+2, + -0.58970943727429180115e+2, + -0.46481138579742349748e+2, + 0.11925153276413124104e+3, + 0.23596992281026555105e+2, + -0.10268591466375355026e+3, + -0.17243574794408608852e+2, + 0.3695682295554777852e+2, + 0.87954860421167964546e+2, + -0.26510605672889123952e+2, + -0.12018004252108272567e+3, + 0.23730474621500654564e+2, + 0.93355380726515178935e+2, + 0.32093928018128508484e+2, + -0.56382460077551044719e+2, + -0.10080782888321228086e+3, + 0.31720014196745630386e+2, + 0.11975111855782218129e+3, + 0.19073276986069632954e+2, + -0.75361268660338495806e+2, + -0.94675948150643634449e+2, + 0.13258385391376824813e+2, + 0.11912192880068793954e+3, + 0.69874460856705965739e+2, + -0.64934172485633141036e+2, + -0.11354448840723823366e+3, + -0.47579323482686341151e+2, + 0.66393805117110801461e+2, + 0.14500570889790003548e+3, + 0.37315593160674474404e+2, + -0.77688675745779121939e+2, + -0.11939534596374417674e+3, + -0.10230527680078725439e+3, + 0.65803763760091584345e+2, + 0.13857663650674953715e+3, + 0.11251202904541968053e+3, + 0.64856839775046339014e+2, + -0.1127577039450080747e+3, + -0.15656572348994731669e+3, + -0.1342115781326350259e+3, + -0.10609371463284510639e+3, + 0.76211889769849392451e+2, + 0.12988352204801944367e+3, + 0.1986200396466169309e+3, + 0.25832984575477973976e+3, + 0.17164510387408253678e+3, + 0.19463894546259419371e+3, + 0.12200275714127215565e+3, + 0.65747520435549247964e+2, + 0.82009293784576911435e+2, + 0.66905591148694343318e+1, + 0.25918052587434768697e+2, + 0.17529590730706061663e+2, + -0.14768189462535646683e+2, + 0.20333644210361626392e+2, + -0.75061798030129160963e+1, + -0.36856874795647223131e+1, + 0.1214613435526807983e+2, + -0.11778056643098885559e+2, + 0.49098679712388468843e+1, + 0.38200155826808299686e+1, + -0.88597880106143254153e+1, + 0.74246007229093722302e+1, -0.67468995884536808738, - -0.73645006075424950254e+01, - 0.12247456133318017635e+02, - -0.11695807012844392503e+02, - 0.64764831400142588436e+01, + -0.73645006075424950254e+1, + 0.12247456133318017635e+2, + -0.11695807012844392503e+2, + 0.64764831400142588436e+1, 0.35590609297828290636, - -0.56168212899035676600e+01, - 0.77427752944859058459e+01, - -0.74831826933867322538e+01, - 0.68416288997573415642e+01, - -0.74283567781620654102e+01, - 0.90049888153477031238e+01, - -0.95562755128616068134e+01, - 0.65596513609911601961e+01, + -0.561682128990356766e+1, + 0.77427752944859058459e+1, + -0.74831826933867322538e+1, + 0.68416288997573415642e+1, + -0.74283567781620654102e+1, + 0.90049888153477031238e+1, + -0.95562755128616068134e+1, + 0.65596513609911601961e+1, 0.99517712155952886555, - -0.11447564907021856584e+02, - 0.20700167646200139160e+02, - -0.24182266646497289742e+02, - 0.19251841012782268336e+02, - -0.69730648719648486988e+01, - -0.80773371155508453256e+01, - 0.19755904123216751600e+02, - -0.23365548573012077327e+02, - 0.17938863582583785217e+02, - -0.67851052737627792766e+01, - -0.42563188148371349229e+01, - 0.97818284162452275865e+01, - -0.76618090106537888317e+01, - 0.66846498992282885054e-01, - 0.77156225227790793397e+01, - -0.10237381349953416532e+02, - 0.49198208697871717021e+01, - 0.63254521656630640081e+01, - -0.17921712900428822479e+02, - 0.23418835223008002799e+02, - -0.18945293232777160597e+02, - 0.54304334815754939925e+01, - 0.11524644792459124432e+02, - -0.24217669371052696903e+02, - 0.26559242084002534057e+02, - -0.17131288508886608923e+02, - -0.41760886765049541225e+02, - 0.78276330269379798210e+02, - -0.40517746642977762406e+02, - -0.20971408287747831167e+02, - 0.67564436781567337675e+02, - -0.86765585662248199128e+02, - 0.60753919158910910880e+02, - -0.12370070949300153273e+02, - -0.43465573956325130212e+02, - 0.69821421567367409011e+02, - -0.63418883741499136875e+02, - 0.19172752540147474321e+02, - 0.29841823632962224622e+02, - -0.66127107370689003574e+02, - 0.59607332173133450226e+02, - -0.20566995916951441359e+02, - -0.41893509079406179296e+02, - 0.86585547664981248772e+02, - -0.97961806856951127997e+02, - 0.57226349812160265174e+02, - 0.10063687564620620307e+02, - -0.82925458300774280929e+02, - 0.11751835999649831876e+03, - -0.10609982752457945310e+03, - 0.44029403556356946581e+02, - 0.30168391940055219180e+02, - -0.90811641321244863434e+02, - 0.10053244646093186532e+03, - -0.66157533470698709266e+02, - -0.19358220012051448045e+01, - 0.58160734129255480696e+02, - -0.82331299561278257215e+02, - 0.53270342631916079768e+02, - 0.31002203507685832662e+01, - -0.64245394505873989033e+02, - 0.86164137371449626812e+02, - -0.63914243922930054964e+02, - -0.20034847876724217741e+01, - 0.68457240232994564622e+02, - -0.10904253697296609005e+03, - 0.91330969375916097874e+02, - -0.31343356287284578343e+02, - -0.51153419680624864441e+02, - 0.10577286292594217798e+03, - -0.11459079561765310018e+03, - 0.64740696426417841280e+02, - 0.87754041270755500648e+01, - -0.77139488329974895464e+02, - 0.10035224673530045436e+03, - -0.74212142735265359761e+02, - 0.20256897994708253918e+02, - 0.49810456948413204259e+02, - -0.47339395546105315304e+02, - 0.92695720147945877443e+02, - 0.61646383969865830466e+02, - 0.97613800896336741175e+02, - 0.24290901755421114672e+03, - 0.27655991170230055332e+03, - 0.38910677664192104430e+03, - 0.54418896284724439738e+03, - 0.50084736502163582372e+03, - 0.50788130068416336371e+03, - 0.38902878535337811172e+03, - 0.26775953473886634271e+02, - -0.10267394339340273746e+03, - -0.39751254987817168285e+03, - -0.41613986263640163088e+03, - -0.14759107546692536062e+03, - 0.16827696220313640652e+02, - 0.34648346045528751347e+03, - 0.34425928535328591806e+03, - 0.80284671982728610828e+02, - -0.17296204018791485169e+03, - -0.29886454196542780437e+03, - -0.25442232998033350100e+03, - 0.19090398576242350259e+03, - 0.28029723537868233052e+03, - 0.13242727093938481175e+03, - 0.31941799091681510880e+01, - -0.42736938912118125700e+03, - -0.52746736145357580483e+02, - 0.16968992964527953404e+03, - 0.17755596690831299611e+03, - 0.17620127440550541564e+03, - -0.32640012205714231186e+03, - -0.18637803172444321831e+03, - 0.13959934791896301931e+03, - 0.16804060039134176918e+03, - 0.13629592618414264393e+03, - -0.20958030586015436825e+03, - -0.23778869370751021961e+03, - 0.16995434332574401992e+03, - 0.20531329799705486039e+03, - -0.19676074410290784300e+02, - -0.17280969658714806769e+03, - -0.13807833776203835896e+03, - 0.17791926835305349641e+03, - 0.21698991627690421069e+03, - -0.19456747561557085646e+03, - -0.17013045980923689626e+03, - 0.10641712634960953210e+03, - 0.13008758083755404300e+03, - 0.56104045290218913067e+02, - -0.22946564868851061192e+03, - -0.74142493812299520073e+02, - 0.29037272064887815759e+03, - -0.91942295273556364776e+01, - -0.20204580564764393102e+03, - 0.29286396351019874373e+01, - 0.94567985446654262205e+02, - 0.12160322706970927698e+03, - -0.13361514803180409672e+03, - -0.18744527770564735647e+03, - 0.26821663330031287842e+03, - 0.55476012255397371575e+02, - -0.23119308269827044455e+03, - 0.32981242802519894042e+02, - 0.88709679700714147543e+02, - 0.71917692103372260704e+02, - -0.12195016068170258450e+03, - -0.11083011861477173454e+03, - 0.21534341340515086927e+03, - 0.30851700231777520855e+02, - -0.22704325207921002061e+03, - 0.46677962725597978988e+02, - 0.20376308664620435707e+03, - -0.13170393417889363263e+03, - -0.98534938886080652765e+02, - 0.11095368087893309905e+03, - 0.31953191167864371636e+02, - -0.67103835734384089662e+01, - -0.15336703815103274451e+03, - 0.10940671142462599619e+03, - 0.16659764671496378696e+03, - -0.29137067172331086340e+03, - 0.67961033850501351594e+02, - 0.19753324906491005208e+03, - -0.16419838143997341717e+03, - -0.51750467070232311073e+02, - 0.10517195295082447615e+03, - 0.42544497184684232138e+02, - -0.11992891655239844795e+03, - 0.10179399928801178277e+02, - 0.83362300762567940637e+02, - -0.17826378826699160740e+01, - -0.97070350070254121988e+02, - -0.38392321881280135898e+01, - 0.20714930521465362290e+03, - -0.21117489231333644284e+03, - -0.46918401173771705714e+02, - 0.27101513301824581958e+03, - -0.19601229982443851441e+03, - -0.63372021174157865175e+02, - 0.17983491055352641297e+03, - -0.45748573069699105531e+02, - -0.12163425413590724133e+03, - 0.10237024398377901946e+03, - 0.47021458227535035235e+02, - -0.11613522118674286787e+03, - 0.42722762583092162458e+02, - 0.34019600554882714505e+02, - -0.64168556537249523686e+01, - -0.46795828482368776235e+02, + -0.11447564907021856584e+2, + 0.2070016764620013916e+2, + -0.24182266646497289742e+2, + 0.19251841012782268336e+2, + -0.69730648719648486988e+1, + -0.80773371155508453256e+1, + 0.197559041232167516e+2, + -0.23365548573012077327e+2, + 0.17938863582583785217e+2, + -0.67851052737627792766e+1, + -0.42563188148371349229e+1, + 0.97818284162452275865e+1, + -0.76618090106537888317e+1, + 0.66846498992282885054e-1, + 0.77156225227790793397e+1, + -0.10237381349953416532e+2, + 0.49198208697871717021e+1, + 0.63254521656630640081e+1, + -0.17921712900428822479e+2, + 0.23418835223008002799e+2, + -0.18945293232777160597e+2, + 0.54304334815754939925e+1, + 0.11524644792459124432e+2, + -0.24217669371052696903e+2, + 0.26559242084002534057e+2, + -0.17131288508886608923e+2, + -0.41760886765049541225e+2, + 0.7827633026937979821e+2, + -0.40517746642977762406e+2, + -0.20971408287747831167e+2, + 0.67564436781567337675e+2, + -0.86765585662248199128e+2, + 0.6075391915891091088e+2, + -0.12370070949300153273e+2, + -0.43465573956325130212e+2, + 0.69821421567367409011e+2, + -0.63418883741499136875e+2, + 0.19172752540147474321e+2, + 0.29841823632962224622e+2, + -0.66127107370689003574e+2, + 0.59607332173133450226e+2, + -0.20566995916951441359e+2, + -0.41893509079406179296e+2, + 0.86585547664981248772e+2, + -0.97961806856951127997e+2, + 0.57226349812160265174e+2, + 0.10063687564620620307e+2, + -0.82925458300774280929e+2, + 0.11751835999649831876e+3, + -0.1060998275245794531e+3, + 0.44029403556356946581e+2, + 0.3016839194005521918e+2, + -0.90811641321244863434e+2, + 0.10053244646093186532e+3, + -0.66157533470698709266e+2, + -0.19358220012051448045e+1, + 0.58160734129255480696e+2, + -0.82331299561278257215e+2, + 0.53270342631916079768e+2, + 0.31002203507685832662e+1, + -0.64245394505873989033e+2, + 0.86164137371449626812e+2, + -0.63914243922930054964e+2, + -0.20034847876724217741e+1, + 0.68457240232994564622e+2, + -0.10904253697296609005e+3, + 0.91330969375916097874e+2, + -0.31343356287284578343e+2, + -0.51153419680624864441e+2, + 0.10577286292594217798e+3, + -0.11459079561765310018e+3, + 0.6474069642641784128e+2, + 0.87754041270755500648e+1, + -0.77139488329974895464e+2, + 0.10035224673530045436e+3, + -0.74212142735265359761e+2, + 0.20256897994708253918e+2, + 0.49810456948413204259e+2, + -0.47339395546105315304e+2, + 0.92695720147945877443e+2, + 0.61646383969865830466e+2, + 0.97613800896336741175e+2, + 0.24290901755421114672e+3, + 0.27655991170230055332e+3, + 0.3891067766419210443e+3, + 0.54418896284724439738e+3, + 0.50084736502163582372e+3, + 0.50788130068416336371e+3, + 0.38902878535337811172e+3, + 0.26775953473886634271e+2, + -0.10267394339340273746e+3, + -0.39751254987817168285e+3, + -0.41613986263640163088e+3, + -0.14759107546692536062e+3, + 0.16827696220313640652e+2, + 0.34648346045528751347e+3, + 0.34425928535328591806e+3, + 0.80284671982728610828e+2, + -0.17296204018791485169e+3, + -0.29886454196542780437e+3, + -0.254422329980333501e+3, + 0.19090398576242350259e+3, + 0.28029723537868233052e+3, + 0.13242727093938481175e+3, + 0.3194179909168151088e+1, + -0.427369389121181257e+3, + -0.52746736145357580483e+2, + 0.16968992964527953404e+3, + 0.17755596690831299611e+3, + 0.17620127440550541564e+3, + -0.32640012205714231186e+3, + -0.18637803172444321831e+3, + 0.13959934791896301931e+3, + 0.16804060039134176918e+3, + 0.13629592618414264393e+3, + -0.20958030586015436825e+3, + -0.23778869370751021961e+3, + 0.16995434332574401992e+3, + 0.20531329799705486039e+3, + -0.196760744102907843e+2, + -0.17280969658714806769e+3, + -0.13807833776203835896e+3, + 0.17791926835305349641e+3, + 0.21698991627690421069e+3, + -0.19456747561557085646e+3, + -0.17013045980923689626e+3, + 0.1064171263496095321e+3, + 0.130087580837554043e+3, + 0.56104045290218913067e+2, + -0.22946564868851061192e+3, + -0.74142493812299520073e+2, + 0.29037272064887815759e+3, + -0.91942295273556364776e+1, + -0.20204580564764393102e+3, + 0.29286396351019874373e+1, + 0.94567985446654262205e+2, + 0.12160322706970927698e+3, + -0.13361514803180409672e+3, + -0.18744527770564735647e+3, + 0.26821663330031287842e+3, + 0.55476012255397371575e+2, + -0.23119308269827044455e+3, + 0.32981242802519894042e+2, + 0.88709679700714147543e+2, + 0.71917692103372260704e+2, + -0.1219501606817025845e+3, + -0.11083011861477173454e+3, + 0.21534341340515086927e+3, + 0.30851700231777520855e+2, + -0.22704325207921002061e+3, + 0.46677962725597978988e+2, + 0.20376308664620435707e+3, + -0.13170393417889363263e+3, + -0.98534938886080652765e+2, + 0.11095368087893309905e+3, + 0.31953191167864371636e+2, + -0.67103835734384089662e+1, + -0.15336703815103274451e+3, + 0.10940671142462599619e+3, + 0.16659764671496378696e+3, + -0.2913706717233108634e+3, + 0.67961033850501351594e+2, + 0.19753324906491005208e+3, + -0.16419838143997341717e+3, + -0.51750467070232311073e+2, + 0.10517195295082447615e+3, + 0.42544497184684232138e+2, + -0.11992891655239844795e+3, + 0.10179399928801178277e+2, + 0.83362300762567940637e+2, + -0.1782637882669916074e+1, + -0.97070350070254121988e+2, + -0.38392321881280135898e+1, + 0.2071493052146536229e+3, + -0.21117489231333644284e+3, + -0.46918401173771705714e+2, + 0.27101513301824581958e+3, + -0.19601229982443851441e+3, + -0.63372021174157865175e+2, + 0.17983491055352641297e+3, + -0.45748573069699105531e+2, + -0.12163425413590724133e+3, + 0.10237024398377901946e+3, + 0.47021458227535035235e+2, + -0.11613522118674286787e+3, + 0.42722762583092162458e+2, + 0.34019600554882714505e+2, + -0.64168556537249523686e+1, + -0.46795828482368776235e+2, -0.93073315475038564948, - 0.11070404711594102309e+03, - -0.11423851098605571508e+03, - -0.42542585320411511418e+02, - 0.19108344873608450598e+03, - -0.13818375703787936004e+03, - -0.77582464954613186592e+02, - 0.21038830315835522811e+03, - -0.10043796643610845365e+03, - -0.12535516493610097655e+03, - 0.19714213077070553481e+03, - -0.22441823446784692209e+02, - -0.20186501342960661987e+03, - 0.21661528868561771333e+03, - 0.21235461508824089449e+01, - -0.21987118410683487468e+03, - 0.21062705771563281587e+03, - -0.26266546360180251796e+01, - -0.16869274484265824299e+03, - 0.12880956823390931731e+03, - 0.53938813966117990617e+02, - -0.16289932705264220658e+03, - 0.78107321318399698384e+02, - 0.10281063883056567931e+03, - -0.18540537159084027508e+03, - 0.90109006637292793584e+02, - 0.74887169329729772471e+02, - -0.14181137900477619951e+03, - 0.59453328462055146986e+02, - 0.67311336629454260105e+02, - -0.10053026496501261988e+03, - 0.12809148163059617787e+02, - 0.94785084281374508919e+02, - -0.10648268499562729517e+03, - 0.11369282889230365896e+02, - 0.90747237204062656701e+02, - -0.95431070684646456925e+02, - 0.33685966479711947841e+03, - -0.27348017013348453474e+03, - -0.34561788418827705982e+03, - 0.51974221534529760902e+03, - -0.13584099038047446584e+03, - -0.36357702665341400916e+03, - 0.37108753925775386051e+03, - 0.98526371073003772949e+02, - -0.53177756083225415296e+03, - 0.38782196899341641938e+03, - 0.17950359389738113691e+03, - -0.59263847864290266898e+03, - 0.38617342570264611368e+03, - 0.16985024258747287718e+03, - -0.49290816688277999447e+03, - 0.24424077485560846412e+03, - 0.19941411732982655280e+03, - -0.32040519513991966960e+03, - -0.26166367434714441487e+02, - 0.35259577303058313191e+03, - -0.25232321038409912717e+03, - -0.20106553386790355376e+03, - 0.44640097989691912517e+03, - -0.23628195807758578439e+03, - -0.16578217865565062539e+03, - 0.23560895671503192261e+03, - 0.28881839034675600431e+02, - -0.21395293178179207416e+03, - -0.37005665346135508287e+02, - 0.40378719625530635540e+03, - -0.37809907978039649379e+03, - -0.13574203604449766658e+03, - 0.51726528749496469572e+03, - -0.29972339768353174350e+03, - -0.28227781189761986980e+03, - 0.43651487902263187380e+03, - 0.54622520741897737651e+02, - -0.58770188077138755034e+03, - 0.38199086243203163349e+03, - 0.36703292735564713212e+03, - -0.77181701752835010666e+03, - 0.28281288483061189254e+03, - 0.47183789583715275739e+03, - -0.58965309530140416427e+03, - -0.24793832420558395313e+02, - 0.46630252909986643317e+03, - -0.18734067504831861584e+03, - -0.36274331483311055990e+03, - 0.32994619192187246881e+03, - 0.19467520021621055548e+03, - -0.41787593715507478009e+03, - -0.36500480939822608661e+02, - 0.43462463219095855038e+03, - -0.13577500884790998725e+03, - -0.45906821949800684024e+03, - 0.35745834721895761277e+03, - 0.38281377234324310166e+03, - -0.71138380778485930023e+03, - 0.33427705482344691745e+02, - 0.72812506788026064442e+03, - -0.54113313371831725362e+03, - -0.28265019903195445750e+03, - 0.48300386627955202812e+03, - 0.10393693307320755537e+03, - -0.42913007060771741408e+03, - -0.10309121720519618748e+03, - 0.54465449400494185284e+03, - -0.93666232542759189528e+02, - -0.55805856866037822783e+03, - 0.23790465500845030533e+03, - 0.57382506738324741491e+03, - -0.51917733132214266334e+03, - -0.42189552977237553932e+03, - 0.70955040969454182687e+03, - 0.94352743123288703941e+02, - -0.64413444569218756897e+03, - 0.57249629099854438152e+02, - 0.47407416750563515961e+03, - 0.29203107900667056640e+02, - -0.56032521700175709611e+03, - -0.92718442474124671548e+02, - 0.86183941413441584700e+03, - -0.30575083901182807722e+03, - -0.72958637719603132155e+03, - 0.47015279255687914883e+03, - 0.41939543935905425087e+03, - -0.19898178571219384025e+03, - -0.62647024096350025957e+03, - 0.23352255993519958110e+03, - 0.70820561122943774990e+03, - -0.32605274261611805287e+03, - -0.67854030715692704234e+03, - 0.22071530278468014785e+03, - 0.81015963959218129276e+03, - -0.33704961811516147918e+03, - -0.65831788205605448638e+03, - 0.11205614986882662265e+03, - 0.59380681398310218810e+03, - 0.30817901768319029543e+03, - -0.96760412691766350690e+03, - -0.23349316222165322188e+03, - 0.86556609978214328294e+03, - 0.22837738846088092259e+03, - -0.39751477188291733000e+03, - -0.74149158513461611619e+03, - 0.24903276114985038703e+03, - 0.10138617505230166671e+04, - -0.17091306797319739985e+03, - -0.82865039128054456796e+03, - -0.30784228453906035838e+03, - 0.53373158024412089162e+03, - 0.86461710857696925814e+03, - -0.28782447357753488859e+03, - -0.10185474170547422545e+04, - -0.20924173535195100726e+03, - 0.68880967163211084880e+03, - 0.83229314460865111869e+03, - -0.13247102455782666652e+03, - -0.10337045887638503245e+04, - -0.61446719996149090548e+03, - 0.55623269405003065913e+03, - 0.10151615018846290468e+04, - 0.41896878519845932942e+03, - -0.60781717372755258566e+03, - -0.12389648457265500383e+04, - -0.35753051712626211156e+03, - 0.68520707486172932477e+03, - 0.10807214428763827527e+04, - 0.85480662991043232068e+03, - -0.54642900241076631573e+03, - -0.12156772532322136158e+04, - -0.10342457452283251769e+04, - -0.50654069307452834892e+03, - 0.94252611014593776417e+03, - 0.13829886683851523230e+04, - 0.12285379800369566965e+04, - 0.85295020468093753152e+03, - -0.59490655909299277937e+03, - -0.11766066536518817429e+04, - -0.17736665365522740103e+04, - -0.21994075195897648882e+04, - -0.15988041505760122618e+04, - -0.16487452319095325493e+04, - -0.10889438709559638028e+04, - -0.61167775872502772927e+03, - -0.66299426357653896957e+03, - -0.11146010138040497850e+03, - -0.20562565978593013938e+03, - -0.14126582512019851379e+03, - 0.94885382224873126233e+02, - -0.14433577699205642375e+03, - 0.50383288520249458031e+02, - 0.23989736247696004767e+02, - -0.83335164345065493308e+02, - 0.80936002485120454253e+02, - -0.34044280985089621083e+02, - -0.27188978627181242587e+02, - 0.64971727497371489335e+02, - -0.59936015159945725372e+02, - 0.18711432466835514532e+02, - 0.32941126486101524051e+02, - -0.66154403171278474360e+02, - 0.66069951271968818673e+02, - -0.37499689435517183256e+02, - -0.33664727675923628025e-01, - 0.26631300830878934960e+02, - -0.33376357223400482610e+02, - 0.26731145623688970403e+02, - -0.21109325175226778981e+02, - 0.27732282280837395660e+02, - -0.44731228851305608885e+02, - 0.57709017368198637143e+02, - -0.48291335712376266542e+02, - 0.79246063108805104847e+01, - 0.54128573887311965507e+02, - -0.11195542554913056676e+03, - 0.13586877203096395306e+03, - -0.10821036238406573204e+03, - 0.35248837001111745337e+02, - 0.54017875446147833429e+02, - -0.12051546520506309434e+03, - 0.13488463471282597084e+03, - -0.92306093634418601823e+02, - 0.15896387525782264660e+02, - 0.55156312531388081766e+02, - -0.85360149172326828193e+02, - 0.61758795349138530639e+02, + 0.11070404711594102309e+3, + -0.11423851098605571508e+3, + -0.42542585320411511418e+2, + 0.19108344873608450598e+3, + -0.13818375703787936004e+3, + -0.77582464954613186592e+2, + 0.21038830315835522811e+3, + -0.10043796643610845365e+3, + -0.12535516493610097655e+3, + 0.19714213077070553481e+3, + -0.22441823446784692209e+2, + -0.20186501342960661987e+3, + 0.21661528868561771333e+3, + 0.21235461508824089449e+1, + -0.21987118410683487468e+3, + 0.21062705771563281587e+3, + -0.26266546360180251796e+1, + -0.16869274484265824299e+3, + 0.12880956823390931731e+3, + 0.53938813966117990617e+2, + -0.16289932705264220658e+3, + 0.78107321318399698384e+2, + 0.10281063883056567931e+3, + -0.18540537159084027508e+3, + 0.90109006637292793584e+2, + 0.74887169329729772471e+2, + -0.14181137900477619951e+3, + 0.59453328462055146986e+2, + 0.67311336629454260105e+2, + -0.10053026496501261988e+3, + 0.12809148163059617787e+2, + 0.94785084281374508919e+2, + -0.10648268499562729517e+3, + 0.11369282889230365896e+2, + 0.90747237204062656701e+2, + -0.95431070684646456925e+2, + 0.33685966479711947841e+3, + -0.27348017013348453474e+3, + -0.34561788418827705982e+3, + 0.51974221534529760902e+3, + -0.13584099038047446584e+3, + -0.36357702665341400916e+3, + 0.37108753925775386051e+3, + 0.98526371073003772949e+2, + -0.53177756083225415296e+3, + 0.38782196899341641938e+3, + 0.17950359389738113691e+3, + -0.59263847864290266898e+3, + 0.38617342570264611368e+3, + 0.16985024258747287718e+3, + -0.49290816688277999447e+3, + 0.24424077485560846412e+3, + 0.1994141173298265528e+3, + -0.3204051951399196696e+3, + -0.26166367434714441487e+2, + 0.35259577303058313191e+3, + -0.25232321038409912717e+3, + -0.20106553386790355376e+3, + 0.44640097989691912517e+3, + -0.23628195807758578439e+3, + -0.16578217865565062539e+3, + 0.23560895671503192261e+3, + 0.28881839034675600431e+2, + -0.21395293178179207416e+3, + -0.37005665346135508287e+2, + 0.4037871962553063554e+3, + -0.37809907978039649379e+3, + -0.13574203604449766658e+3, + 0.51726528749496469572e+3, + -0.2997233976835317435e+3, + -0.2822778118976198698e+3, + 0.4365148790226318738e+3, + 0.54622520741897737651e+2, + -0.58770188077138755034e+3, + 0.38199086243203163349e+3, + 0.36703292735564713212e+3, + -0.77181701752835010666e+3, + 0.28281288483061189254e+3, + 0.47183789583715275739e+3, + -0.58965309530140416427e+3, + -0.24793832420558395313e+2, + 0.46630252909986643317e+3, + -0.18734067504831861584e+3, + -0.3627433148331105599e+3, + 0.32994619192187246881e+3, + 0.19467520021621055548e+3, + -0.41787593715507478009e+3, + -0.36500480939822608661e+2, + 0.43462463219095855038e+3, + -0.13577500884790998725e+3, + -0.45906821949800684024e+3, + 0.35745834721895761277e+3, + 0.38281377234324310166e+3, + -0.71138380778485930023e+3, + 0.33427705482344691745e+2, + 0.72812506788026064442e+3, + -0.54113313371831725362e+3, + -0.2826501990319544575e+3, + 0.48300386627955202812e+3, + 0.10393693307320755537e+3, + -0.42913007060771741408e+3, + -0.10309121720519618748e+3, + 0.54465449400494185284e+3, + -0.93666232542759189528e+2, + -0.55805856866037822783e+3, + 0.23790465500845030533e+3, + 0.57382506738324741491e+3, + -0.51917733132214266334e+3, + -0.42189552977237553932e+3, + 0.70955040969454182687e+3, + 0.94352743123288703941e+2, + -0.64413444569218756897e+3, + 0.57249629099854438152e+2, + 0.47407416750563515961e+3, + 0.2920310790066705664e+2, + -0.56032521700175709611e+3, + -0.92718442474124671548e+2, + 0.861839414134415847e+3, + -0.30575083901182807722e+3, + -0.72958637719603132155e+3, + 0.47015279255687914883e+3, + 0.41939543935905425087e+3, + -0.19898178571219384025e+3, + -0.62647024096350025957e+3, + 0.2335225599351995811e+3, + 0.7082056112294377499e+3, + -0.32605274261611805287e+3, + -0.67854030715692704234e+3, + 0.22071530278468014785e+3, + 0.81015963959218129276e+3, + -0.33704961811516147918e+3, + -0.65831788205605448638e+3, + 0.11205614986882662265e+3, + 0.5938068139831021881e+3, + 0.30817901768319029543e+3, + -0.9676041269176635069e+3, + -0.23349316222165322188e+3, + 0.86556609978214328294e+3, + 0.22837738846088092259e+3, + -0.39751477188291733e+3, + -0.74149158513461611619e+3, + 0.24903276114985038703e+3, + 0.10138617505230166671e+4, + -0.17091306797319739985e+3, + -0.82865039128054456796e+3, + -0.30784228453906035838e+3, + 0.53373158024412089162e+3, + 0.86461710857696925814e+3, + -0.28782447357753488859e+3, + -0.10185474170547422545e+4, + -0.20924173535195100726e+3, + 0.6888096716321108488e+3, + 0.83229314460865111869e+3, + -0.13247102455782666652e+3, + -0.10337045887638503245e+4, + -0.61446719996149090548e+3, + 0.55623269405003065913e+3, + 0.10151615018846290468e+4, + 0.41896878519845932942e+3, + -0.60781717372755258566e+3, + -0.12389648457265500383e+4, + -0.35753051712626211156e+3, + 0.68520707486172932477e+3, + 0.10807214428763827527e+4, + 0.85480662991043232068e+3, + -0.54642900241076631573e+3, + -0.12156772532322136158e+4, + -0.10342457452283251769e+4, + -0.50654069307452834892e+3, + 0.94252611014593776417e+3, + 0.1382988668385152323e+4, + 0.12285379800369566965e+4, + 0.85295020468093753152e+3, + -0.59490655909299277937e+3, + -0.11766066536518817429e+4, + -0.17736665365522740103e+4, + -0.21994075195897648882e+4, + -0.15988041505760122618e+4, + -0.16487452319095325493e+4, + -0.10889438709559638028e+4, + -0.61167775872502772927e+3, + -0.66299426357653896957e+3, + -0.1114601013804049785e+3, + -0.20562565978593013938e+3, + -0.14126582512019851379e+3, + 0.94885382224873126233e+2, + -0.14433577699205642375e+3, + 0.50383288520249458031e+2, + 0.23989736247696004767e+2, + -0.83335164345065493308e+2, + 0.80936002485120454253e+2, + -0.34044280985089621083e+2, + -0.27188978627181242587e+2, + 0.64971727497371489335e+2, + -0.59936015159945725372e+2, + 0.18711432466835514532e+2, + 0.32941126486101524051e+2, + -0.6615440317127847436e+2, + 0.66069951271968818673e+2, + -0.37499689435517183256e+2, + -0.33664727675923628025e-1, + 0.2663130083087893496e+2, + -0.3337635722340048261e+2, + 0.26731145623688970403e+2, + -0.21109325175226778981e+2, + 0.2773228228083739566e+2, + -0.44731228851305608885e+2, + 0.57709017368198637143e+2, + -0.48291335712376266542e+2, + 0.79246063108805104847e+1, + 0.54128573887311965507e+2, + -0.11195542554913056676e+3, + 0.13586877203096395306e+3, + -0.10821036238406573204e+3, + 0.35248837001111745337e+2, + 0.54017875446147833429e+2, + -0.12051546520506309434e+3, + 0.13488463471282597084e+3, + -0.92306093634418601823e+2, + 0.1589638752578226466e+2, + 0.55156312531388081766e+2, + -0.85360149172326828193e+2, + 0.61758795349138530639e+2, -0.49424332008887911227, - -0.61372509282032481792e+02, - 0.85934785979969461778e+02, - -0.54900730815460470069e+02, - -0.19397050159323601548e+02, - 0.99482743165005004471e+02, - -0.14142781219505548052e+03, - 0.11810185768468380729e+03, - -0.34261903960468053754e+02, - -0.73992157615717545127e+02, - 0.15611554515701439527e+03, - -0.17171886574156366123e+03, - 0.11094579826600191552e+03, - 0.20163081526374401165e+03, - -0.40704184808219372371e+03, - 0.24646019051202742389e+03, - 0.49557555831124560086e+02, - -0.28948787937180094332e+03, - 0.40882887404696452904e+03, - -0.30426958929846870205e+03, - 0.81004050829531863087e+02, - 0.19571807328715973995e+03, - -0.33655259498653163064e+03, - 0.31919127102358629600e+03, - -0.10452530192608790571e+03, - -0.14626434920109176119e+03, - 0.34795269514196485261e+03, - -0.33912926733537466362e+03, - 0.16213024977094630685e+03, - 0.15033610736913772143e+03, - -0.39263374568810826304e+03, - 0.48458177796249208313e+03, - -0.31787089546053596223e+03, - 0.10347686702565896510e+02, - 0.34470881379190552707e+03, - -0.52685431287556457391e+03, - 0.49464305732276085337e+03, - -0.21232575057058750190e+03, - -0.13420492274526282017e+03, - 0.42516749971703126221e+03, - -0.47151744479222185191e+03, - 0.30663196538896266929e+03, - 0.25673159725470462433e+02, - -0.29893452189842707867e+03, - 0.41681648533997770301e+03, - -0.26986265180305031208e+03, - -0.11666801283567167502e+02, - 0.32000991449382394194e+03, - -0.43333985393390457830e+03, - 0.32928905139426069582e+03, - -0.59019341461893954914e+01, - -0.32067616945449896093e+03, - 0.52361609128741679342e+03, - -0.43980180068267662818e+03, - 0.15261842500296134517e+03, - 0.24354315439365490192e+03, - -0.49812451874439420862e+03, - 0.53036569345625423466e+03, - -0.27928916864069975645e+03, - -0.73988093100399666469e+02, - 0.38972651154350427305e+03, - -0.47342135070121747731e+03, - 0.31702537619274721692e+03, - -0.39973448277706943088e+02, - -0.29867569557947069825e+03, - 0.24554490444116723324e+03, - -0.44557310008512632749e+03, - -0.38450270046973116678e+03, - -0.45046442835136315352e+03, - -0.13116113990044609636e+04, - -0.14427890619727870671e+04, - -0.20107512014929918678e+04, - -0.29003946856504385323e+04, - -0.25669404074553017381e+04, - -0.27088623756475226401e+04, - -0.20053607412568239852e+04, - -0.15605375200620440523e+03, - 0.54236786758353343885e+03, - 0.20827576844745372000e+04, - 0.21769088458008150155e+04, - 0.78164546871254299276e+03, - -0.11022768869997142360e+03, - -0.17707572437556914338e+04, - -0.18727971551850762353e+04, - -0.33128177664837801331e+03, - 0.81281342160105805306e+03, - 0.16405100510011016013e+04, - 0.12978820894192003834e+04, - -0.10194239592471431024e+04, - -0.13937808852872615262e+04, - -0.80862421704165024039e+03, - 0.11295156953831208568e+03, - 0.21242780803948139692e+04, - 0.35018887458392396184e+03, - -0.90921035980436909085e+03, - -0.96066654164065528221e+03, - -0.85748346974897242490e+03, - 0.16333679817181512135e+04, - 0.10401290024804916357e+04, - -0.76686225607606968424e+03, - -0.87644838609306088983e+03, - -0.69366442132934389520e+03, - 0.10689162048644652714e+04, - 0.12668799654432536954e+04, - -0.89280032202431448241e+03, - -0.10938114198396804113e+04, - 0.13580657454304403586e+03, - 0.87040465697681372603e+03, - 0.74748319583540217081e+03, - -0.93726274387752789607e+03, - -0.11510562073850624074e+04, - 0.10471839225637872914e+04, - 0.86017763526622877635e+03, - -0.53384344314762029171e+03, - -0.69117014971729872741e+03, - -0.29793992764846177579e+03, - 0.12142678215626494875e+04, - 0.37647460797197794591e+03, - -0.15170183873005269106e+04, - 0.55370322811034561994e+02, - 0.10426386293351447421e+04, - 0.15200008766860375609e+01, - -0.50426799434431904956e+03, - -0.64263085348429012811e+03, - 0.72137641256385336419e+03, - 0.95005613698469016981e+03, - -0.13732740077361775093e+04, - -0.31014170465736481219e+03, - 0.12097027481631403134e+04, - -0.14842077532146674912e+03, - -0.50600593861471503487e+03, - -0.33076142416716021444e+03, - 0.60321288896941700841e+03, - 0.59354754933621291002e+03, - -0.11132139684528083308e+04, - -0.20001105403931330784e+03, - 0.12390688773802276046e+04, - -0.28900884204568944824e+03, - -0.10434055947999361251e+04, - 0.69536300239780064203e+03, - 0.48238666860889355803e+03, - -0.53006588866754134415e+03, - -0.21830823450703522326e+03, - 0.67564999060330023894e+02, - 0.80266194699930133538e+03, - -0.60735166945308480990e+03, - -0.81146689799337980276e+03, - 0.14555342352790426048e+04, - -0.29717311270166567283e+03, - -0.10626754689445335771e+04, - 0.84691673509964891764e+03, - 0.32380331787167426683e+03, - -0.62965325474629582914e+03, - -0.13957420956660183720e+03, - 0.56380906436741088328e+03, - -0.26116008938458104893e+02, - -0.41864871545313548040e+03, - -0.49169553172254545359e+02, - 0.59160326610006939063e+03, - -0.65094843492088102721e+02, - -0.10204625798763873945e+04, - 0.10788046825587234707e+04, - 0.22973542126619841497e+03, - -0.13656619523282706723e+04, - 0.94999109873782947489e+03, - 0.41155520898849567857e+03, - -0.10052918958480227047e+04, - 0.27347768812130391325e+03, - 0.63699519749817227421e+03, - -0.56474714396782610493e+03, - -0.20089509373131238590e+03, - 0.56052443022451757315e+03, - -0.18612855450320310524e+03, - -0.19848079530738954190e+03, - 0.36246072898359791736e+02, - 0.25438864381302840911e+03, - -0.70708800558184670138e+01, - -0.57424337884069905158e+03, - 0.60466178018572691144e+03, - 0.20454684920972670170e+03, - -0.97587597167077194626e+03, - 0.70103834127886159422e+03, - 0.41734403585764806621e+03, - -0.10942128123975317067e+04, - 0.49774988833141861733e+03, - 0.70120876812646156395e+03, - -0.10839077935047375831e+04, - 0.16321100057964906682e+03, - 0.10291002396210346888e+04, - -0.11317090400402159958e+04, - 0.13325620048474386081e+02, - 0.11044645411085778051e+04, - -0.10433297925678114098e+04, - -0.45751970187432235093e+02, - 0.92971240030943033616e+03, - -0.69754509073529970919e+03, - -0.28742053333398848736e+03, - 0.88424876668749186592e+03, - -0.45911650399292807379e+03, - -0.48006984742042965308e+03, - 0.91572621605915253440e+03, - -0.42943787893713562198e+03, - -0.41558559176743295893e+03, - 0.74499261905705373010e+03, - -0.29474604210835985896e+03, - -0.38270132833324601052e+03, - 0.56333605357516876211e+03, - -0.10394621938260152660e+03, - -0.46444084603333271843e+03, - 0.53315473871168194364e+03, - -0.42846363790285010964e+02, - -0.48514971184059572806e+03, - 0.50426971576609321346e+03, - -0.12409661424882419851e+04, - 0.80386990150934411758e+03, - 0.15763387476510213219e+04, - -0.20553218975976960792e+04, - 0.35951938075638008740e+03, - 0.16382122744703067383e+04, - -0.15402394542384490705e+04, - -0.43107025431585333308e+03, - 0.21321255716349555769e+04, - -0.14445758602503372003e+04, - -0.84949525352098567055e+03, - 0.23717201382200260014e+04, - -0.13523002263249866246e+04, - -0.91786532144888894891e+03, - 0.20353532510006543816e+04, - -0.77630393745345293155e+03, - -0.10942065918895375489e+04, - 0.14190706689830935829e+04, - 0.22828621890573018050e+03, - -0.16238256174990995078e+04, - 0.10774638567623348990e+04, - 0.92751031536564232738e+03, - -0.18803900012747606070e+04, - 0.79418989021458719435e+03, - 0.10179131088159606406e+04, - -0.11897345303775130105e+04, - -0.22020019678660995055e+03, - 0.12395931105573818058e+04, - -0.17932287990462504013e+03, - -0.15730122422655463197e+04, - 0.16750776844207809972e+04, - 0.44592326306558959459e+03, - -0.21506083417798849950e+04, - 0.13181024355124995964e+04, - 0.11814256910378207976e+04, - -0.19661268457303890500e+04, - -0.16409546961494772432e+02, - 0.23217698545169555473e+04, - -0.16282995675260551707e+04, - -0.13491421236462567776e+04, - 0.29801906418243406733e+04, - -0.98596505975611773920e+03, - -0.20224806802414632330e+04, - 0.23484932580920949476e+04, - 0.29938354066528182784e+03, - -0.20652096927093084560e+04, - 0.73736575093145859228e+03, - 0.16366290496016376892e+04, - -0.13886422176555042824e+04, - -0.98359946059677588437e+03, - 0.19597284236885514019e+04, - 0.10073502604429660323e+03, - -0.19613104320255113180e+04, - 0.74605334791672305528e+03, - 0.18850493296733845909e+04, - -0.16112799146010192999e+04, - -0.14573651237412454975e+04, - 0.29174563072460114199e+04, - -0.19531510736061125044e+03, - -0.28810769903294794858e+04, - 0.20225745622642891703e+04, - 0.13977360060304110903e+04, - -0.20612969830638799067e+04, - -0.59772184732696257470e+03, - 0.19999722359945963035e+04, - 0.38208893622387455480e+03, - -0.23784262538246312033e+04, - 0.45666365689440118558e+03, - 0.24286813586895304979e+04, - -0.11707097646189658917e+04, - -0.22738797214588189490e+04, - 0.21253311600174993146e+04, - 0.17594320823131047291e+04, - -0.28890295267654178133e+04, - -0.53841202859665986580e+03, - 0.27744160654839265590e+04, - -0.13562873009216255582e+03, - -0.21615114409311895542e+04, - -0.10991099603789014338e+03, - 0.25658055640108013904e+04, - 0.11313164778975921365e+03, - -0.34404982163455024420e+04, - 0.12348747186147957109e+04, - 0.29771123445026191803e+04, - -0.17169923769024869671e+04, - -0.20955072295041277357e+04, - 0.10267516053437088885e+04, - 0.26688250402190042223e+04, - -0.10856165402759397693e+04, - -0.29359697023165376777e+04, - 0.13307710171702012758e+04, - 0.29625542632283536477e+04, - -0.10424519374186729692e+04, - -0.33081728922769043493e+04, - 0.12590031770705877534e+04, - 0.29281419791718794841e+04, - -0.41816571110324565552e+03, - -0.27849797215381872775e+04, - -0.99625922969414466479e+03, - 0.38907401709612754530e+04, - 0.10640533801612800744e+04, - -0.35570472978652542224e+04, - -0.12544195191009150676e+04, - 0.19503407643399186782e+04, - 0.30828374322948325243e+04, - -0.11486623913955838816e+04, - -0.41656412829451383004e+04, - 0.58060731834537864415e+03, - 0.35833590488152290163e+04, - 0.14142104298593878866e+04, - -0.24348422232403841008e+04, - -0.36058509550069779834e+04, - 0.12430276118988506369e+04, - 0.42595059053562699773e+04, - 0.10281748045102390279e+04, - -0.30319330776802894434e+04, - -0.35712454662577010822e+04, - 0.62878415128775452558e+03, - 0.43742196392420173652e+04, - 0.26368417265229873010e+04, - -0.23363584238626772276e+04, - -0.43995241085191310049e+04, - -0.18046547960627042357e+04, - 0.26948436789355437213e+04, - 0.51762684695925217966e+04, - 0.16311853375654391130e+04, - -0.29300343170011688017e+04, - -0.47569320018513271862e+04, - -0.34795100454219673338e+04, - 0.22035431368684849076e+04, - 0.52148450068132387969e+04, - 0.45781477332478316384e+04, - 0.19454962530365471594e+04, - -0.38575178184647411399e+04, - -0.59562495345137213008e+04, - -0.54210529497052330044e+04, - -0.33801420430590756041e+04, - 0.22870159055148869811e+04, - 0.51625108881427622691e+04, - 0.76846778183081896714e+04, - 0.91796958540113937488e+04, - 0.71435673020227095549e+04, - 0.68638976972273840147e+04, - 0.46962225772046194834e+04, - 0.27600996794024663359e+04, - 0.26189811030676064547e+04, - 0.66976736454964179757e+03, - 0.80462477573975684209e+03, - 0.54973107265957844447e+03, - -0.26920363687585427215e+03, - 0.48274561771362232321e+03, - -0.14955617598711341998e+03, - -0.80591450515801994925e+02, - 0.27950040059217889166e+03, - -0.27300257602929497125e+03, - 0.12419286358808959392e+03, - 0.76037365043726083513e+02, - -0.20630692445712401195e+03, - 0.20384425979438071863e+03, - -0.86442241342010646576e+02, - -0.67902059771110472752e+02, - 0.17070004229993736544e+03, - -0.17640522557900408174e+03, - 0.99642065540720196282e+02, + -0.61372509282032481792e+2, + 0.85934785979969461778e+2, + -0.54900730815460470069e+2, + -0.19397050159323601548e+2, + 0.99482743165005004471e+2, + -0.14142781219505548052e+3, + 0.11810185768468380729e+3, + -0.34261903960468053754e+2, + -0.73992157615717545127e+2, + 0.15611554515701439527e+3, + -0.17171886574156366123e+3, + 0.11094579826600191552e+3, + 0.20163081526374401165e+3, + -0.40704184808219372371e+3, + 0.24646019051202742389e+3, + 0.49557555831124560086e+2, + -0.28948787937180094332e+3, + 0.40882887404696452904e+3, + -0.30426958929846870205e+3, + 0.81004050829531863087e+2, + 0.19571807328715973995e+3, + -0.33655259498653163064e+3, + 0.319191271023586296e+3, + -0.10452530192608790571e+3, + -0.14626434920109176119e+3, + 0.34795269514196485261e+3, + -0.33912926733537466362e+3, + 0.16213024977094630685e+3, + 0.15033610736913772143e+3, + -0.39263374568810826304e+3, + 0.48458177796249208313e+3, + -0.31787089546053596223e+3, + 0.1034768670256589651e+2, + 0.34470881379190552707e+3, + -0.52685431287556457391e+3, + 0.49464305732276085337e+3, + -0.2123257505705875019e+3, + -0.13420492274526282017e+3, + 0.42516749971703126221e+3, + -0.47151744479222185191e+3, + 0.30663196538896266929e+3, + 0.25673159725470462433e+2, + -0.29893452189842707867e+3, + 0.41681648533997770301e+3, + -0.26986265180305031208e+3, + -0.11666801283567167502e+2, + 0.32000991449382394194e+3, + -0.4333398539339045783e+3, + 0.32928905139426069582e+3, + -0.59019341461893954914e+1, + -0.32067616945449896093e+3, + 0.52361609128741679342e+3, + -0.43980180068267662818e+3, + 0.15261842500296134517e+3, + 0.24354315439365490192e+3, + -0.49812451874439420862e+3, + 0.53036569345625423466e+3, + -0.27928916864069975645e+3, + -0.73988093100399666469e+2, + 0.38972651154350427305e+3, + -0.47342135070121747731e+3, + 0.31702537619274721692e+3, + -0.39973448277706943088e+2, + -0.29867569557947069825e+3, + 0.24554490444116723324e+3, + -0.44557310008512632749e+3, + -0.38450270046973116678e+3, + -0.45046442835136315352e+3, + -0.13116113990044609636e+4, + -0.14427890619727870671e+4, + -0.20107512014929918678e+4, + -0.29003946856504385323e+4, + -0.25669404074553017381e+4, + -0.27088623756475226401e+4, + -0.20053607412568239852e+4, + -0.15605375200620440523e+3, + 0.54236786758353343885e+3, + 0.20827576844745372e+4, + 0.21769088458008150155e+4, + 0.78164546871254299276e+3, + -0.1102276886999714236e+3, + -0.17707572437556914338e+4, + -0.18727971551850762353e+4, + -0.33128177664837801331e+3, + 0.81281342160105805306e+3, + 0.16405100510011016013e+4, + 0.12978820894192003834e+4, + -0.10194239592471431024e+4, + -0.13937808852872615262e+4, + -0.80862421704165024039e+3, + 0.11295156953831208568e+3, + 0.21242780803948139692e+4, + 0.35018887458392396184e+3, + -0.90921035980436909085e+3, + -0.96066654164065528221e+3, + -0.8574834697489724249e+3, + 0.16333679817181512135e+4, + 0.10401290024804916357e+4, + -0.76686225607606968424e+3, + -0.87644838609306088983e+3, + -0.6936644213293438952e+3, + 0.10689162048644652714e+4, + 0.12668799654432536954e+4, + -0.89280032202431448241e+3, + -0.10938114198396804113e+4, + 0.13580657454304403586e+3, + 0.87040465697681372603e+3, + 0.74748319583540217081e+3, + -0.93726274387752789607e+3, + -0.11510562073850624074e+4, + 0.10471839225637872914e+4, + 0.86017763526622877635e+3, + -0.53384344314762029171e+3, + -0.69117014971729872741e+3, + -0.29793992764846177579e+3, + 0.12142678215626494875e+4, + 0.37647460797197794591e+3, + -0.15170183873005269106e+4, + 0.55370322811034561994e+2, + 0.10426386293351447421e+4, + 0.15200008766860375609e+1, + -0.50426799434431904956e+3, + -0.64263085348429012811e+3, + 0.72137641256385336419e+3, + 0.95005613698469016981e+3, + -0.13732740077361775093e+4, + -0.31014170465736481219e+3, + 0.12097027481631403134e+4, + -0.14842077532146674912e+3, + -0.50600593861471503487e+3, + -0.33076142416716021444e+3, + 0.60321288896941700841e+3, + 0.59354754933621291002e+3, + -0.11132139684528083308e+4, + -0.20001105403931330784e+3, + 0.12390688773802276046e+4, + -0.28900884204568944824e+3, + -0.10434055947999361251e+4, + 0.69536300239780064203e+3, + 0.48238666860889355803e+3, + -0.53006588866754134415e+3, + -0.21830823450703522326e+3, + 0.67564999060330023894e+2, + 0.80266194699930133538e+3, + -0.6073516694530848099e+3, + -0.81146689799337980276e+3, + 0.14555342352790426048e+4, + -0.29717311270166567283e+3, + -0.10626754689445335771e+4, + 0.84691673509964891764e+3, + 0.32380331787167426683e+3, + -0.62965325474629582914e+3, + -0.1395742095666018372e+3, + 0.56380906436741088328e+3, + -0.26116008938458104893e+2, + -0.4186487154531354804e+3, + -0.49169553172254545359e+2, + 0.59160326610006939063e+3, + -0.65094843492088102721e+2, + -0.10204625798763873945e+4, + 0.10788046825587234707e+4, + 0.22973542126619841497e+3, + -0.13656619523282706723e+4, + 0.94999109873782947489e+3, + 0.41155520898849567857e+3, + -0.10052918958480227047e+4, + 0.27347768812130391325e+3, + 0.63699519749817227421e+3, + -0.56474714396782610493e+3, + -0.2008950937313123859e+3, + 0.56052443022451757315e+3, + -0.18612855450320310524e+3, + -0.1984807953073895419e+3, + 0.36246072898359791736e+2, + 0.25438864381302840911e+3, + -0.70708800558184670138e+1, + -0.57424337884069905158e+3, + 0.60466178018572691144e+3, + 0.2045468492097267017e+3, + -0.97587597167077194626e+3, + 0.70103834127886159422e+3, + 0.41734403585764806621e+3, + -0.10942128123975317067e+4, + 0.49774988833141861733e+3, + 0.70120876812646156395e+3, + -0.10839077935047375831e+4, + 0.16321100057964906682e+3, + 0.10291002396210346888e+4, + -0.11317090400402159958e+4, + 0.13325620048474386081e+2, + 0.11044645411085778051e+4, + -0.10433297925678114098e+4, + -0.45751970187432235093e+2, + 0.92971240030943033616e+3, + -0.69754509073529970919e+3, + -0.28742053333398848736e+3, + 0.88424876668749186592e+3, + -0.45911650399292807379e+3, + -0.48006984742042965308e+3, + 0.9157262160591525344e+3, + -0.42943787893713562198e+3, + -0.41558559176743295893e+3, + 0.7449926190570537301e+3, + -0.29474604210835985896e+3, + -0.38270132833324601052e+3, + 0.56333605357516876211e+3, + -0.1039462193826015266e+3, + -0.46444084603333271843e+3, + 0.53315473871168194364e+3, + -0.42846363790285010964e+2, + -0.48514971184059572806e+3, + 0.50426971576609321346e+3, + -0.12409661424882419851e+4, + 0.80386990150934411758e+3, + 0.15763387476510213219e+4, + -0.20553218975976960792e+4, + 0.3595193807563800874e+3, + 0.16382122744703067383e+4, + -0.15402394542384490705e+4, + -0.43107025431585333308e+3, + 0.21321255716349555769e+4, + -0.14445758602503372003e+4, + -0.84949525352098567055e+3, + 0.23717201382200260014e+4, + -0.13523002263249866246e+4, + -0.91786532144888894891e+3, + 0.20353532510006543816e+4, + -0.77630393745345293155e+3, + -0.10942065918895375489e+4, + 0.14190706689830935829e+4, + 0.2282862189057301805e+3, + -0.16238256174990995078e+4, + 0.1077463856762334899e+4, + 0.92751031536564232738e+3, + -0.1880390001274760607e+4, + 0.79418989021458719435e+3, + 0.10179131088159606406e+4, + -0.11897345303775130105e+4, + -0.22020019678660995055e+3, + 0.12395931105573818058e+4, + -0.17932287990462504013e+3, + -0.15730122422655463197e+4, + 0.16750776844207809972e+4, + 0.44592326306558959459e+3, + -0.2150608341779884995e+4, + 0.13181024355124995964e+4, + 0.11814256910378207976e+4, + -0.196612684573038905e+4, + -0.16409546961494772432e+2, + 0.23217698545169555473e+4, + -0.16282995675260551707e+4, + -0.13491421236462567776e+4, + 0.29801906418243406733e+4, + -0.9859650597561177392e+3, + -0.2022480680241463233e+4, + 0.23484932580920949476e+4, + 0.29938354066528182784e+3, + -0.2065209692709308456e+4, + 0.73736575093145859228e+3, + 0.16366290496016376892e+4, + -0.13886422176555042824e+4, + -0.98359946059677588437e+3, + 0.19597284236885514019e+4, + 0.10073502604429660323e+3, + -0.1961310432025511318e+4, + 0.74605334791672305528e+3, + 0.18850493296733845909e+4, + -0.16112799146010192999e+4, + -0.14573651237412454975e+4, + 0.29174563072460114199e+4, + -0.19531510736061125044e+3, + -0.28810769903294794858e+4, + 0.20225745622642891703e+4, + 0.13977360060304110903e+4, + -0.20612969830638799067e+4, + -0.5977218473269625747e+3, + 0.19999722359945963035e+4, + 0.3820889362238745548e+3, + -0.23784262538246312033e+4, + 0.45666365689440118558e+3, + 0.24286813586895304979e+4, + -0.11707097646189658917e+4, + -0.2273879721458818949e+4, + 0.21253311600174993146e+4, + 0.17594320823131047291e+4, + -0.28890295267654178133e+4, + -0.5384120285966598658e+3, + 0.2774416065483926559e+4, + -0.13562873009216255582e+3, + -0.21615114409311895542e+4, + -0.10991099603789014338e+3, + 0.25658055640108013904e+4, + 0.11313164778975921365e+3, + -0.3440498216345502442e+4, + 0.12348747186147957109e+4, + 0.29771123445026191803e+4, + -0.17169923769024869671e+4, + -0.20955072295041277357e+4, + 0.10267516053437088885e+4, + 0.26688250402190042223e+4, + -0.10856165402759397693e+4, + -0.29359697023165376777e+4, + 0.13307710171702012758e+4, + 0.29625542632283536477e+4, + -0.10424519374186729692e+4, + -0.33081728922769043493e+4, + 0.12590031770705877534e+4, + 0.29281419791718794841e+4, + -0.41816571110324565552e+3, + -0.27849797215381872775e+4, + -0.99625922969414466479e+3, + 0.3890740170961275453e+4, + 0.10640533801612800744e+4, + -0.35570472978652542224e+4, + -0.12544195191009150676e+4, + 0.19503407643399186782e+4, + 0.30828374322948325243e+4, + -0.11486623913955838816e+4, + -0.41656412829451383004e+4, + 0.58060731834537864415e+3, + 0.35833590488152290163e+4, + 0.14142104298593878866e+4, + -0.24348422232403841008e+4, + -0.36058509550069779834e+4, + 0.12430276118988506369e+4, + 0.42595059053562699773e+4, + 0.10281748045102390279e+4, + -0.30319330776802894434e+4, + -0.35712454662577010822e+4, + 0.62878415128775452558e+3, + 0.43742196392420173652e+4, + 0.2636841726522987301e+4, + -0.23363584238626772276e+4, + -0.43995241085191310049e+4, + -0.18046547960627042357e+4, + 0.26948436789355437213e+4, + 0.51762684695925217966e+4, + 0.1631185337565439113e+4, + -0.29300343170011688017e+4, + -0.47569320018513271862e+4, + -0.34795100454219673338e+4, + 0.22035431368684849076e+4, + 0.52148450068132387969e+4, + 0.45781477332478316384e+4, + 0.19454962530365471594e+4, + -0.38575178184647411399e+4, + -0.59562495345137213008e+4, + -0.54210529497052330044e+4, + -0.33801420430590756041e+4, + 0.22870159055148869811e+4, + 0.51625108881427622691e+4, + 0.76846778183081896714e+4, + 0.91796958540113937488e+4, + 0.71435673020227095549e+4, + 0.68638976972273840147e+4, + 0.46962225772046194834e+4, + 0.27600996794024663359e+4, + 0.26189811030676064547e+4, + 0.66976736454964179757e+3, + 0.80462477573975684209e+3, + 0.54973107265957844447e+3, + -0.26920363687585427215e+3, + 0.48274561771362232321e+3, + -0.14955617598711341998e+3, + -0.80591450515801994925e+2, + 0.27950040059217889166e+3, + -0.27300257602929497125e+3, + 0.12419286358808959392e+3, + 0.76037365043726083513e+2, + -0.20630692445712401195e+3, + 0.20384425979438071863e+3, + -0.86442241342010646576e+2, + -0.67902059771110472752e+2, + 0.17070004229993736544e+3, + -0.17640522557900408174e+3, + 0.99642065540720196282e+2, 0.12920612763486458152, - -0.63609810645362536263e+02, - 0.66521292757472863855e+02, - -0.32930860989630794222e+02, - 0.10913415418323719308e+02, - -0.37153201521000291052e+02, - 0.10527236851972271836e+03, - -0.16782825044233683798e+03, - 0.16334388589670899705e+03, - -0.60538914621880415723e+02, - -0.11591257721625018462e+03, - 0.28801862809421027123e+03, - -0.36444111655248309489e+03, - 0.28959708245536467075e+03, - -0.81205893322059381489e+02, - -0.17327795997449879906e+03, - 0.35560262845760377104e+03, - -0.37821651852051718379e+03, - 0.22984642198180682726e+03, - 0.14414930616273441188e+02, - -0.23095717830526555758e+03, - 0.30971841301529298107e+03, - -0.21318930330456541355e+03, - -0.37039657638277923013e+01, - 0.22002786440046133976e+03, - -0.31287167330636691531e+03, - 0.22227229866969494765e+03, - 0.13673708894884667231e+02, - -0.27603816715505507773e+03, - 0.42403098843676639262e+03, - -0.36873007760658117604e+03, - 0.12122672748146328559e+03, - 0.20824700535638297083e+03, - -0.46281273466589937016e+03, - 0.51585008181014518414e+03, - -0.33503283867974863597e+03, - -0.48904818557293759795e+03, - 0.10500316446330155031e+04, - -0.69919346948684562904e+03, - -0.34135485663213671614e+02, - 0.66229430089573759233e+03, - -0.10154092961256578747e+04, - 0.79628154355253468566e+03, - -0.25473803732835051505e+03, - -0.46230047025591460397e+03, - 0.85693093657448719114e+03, - -0.85655642967048515857e+03, - 0.32759674384070819997e+03, - 0.32756633479980189350e+03, - -0.89607072627258457942e+03, - 0.93792196933974821604e+03, - -0.53906623998531506459e+03, - -0.24852572991027966509e+03, - 0.90076733135540939656e+03, - -0.12084924833623563245e+04, - 0.86204050123669173900e+03, - -0.14072568578265961037e+03, - -0.74402098262708727816e+03, - 0.12255216324094778884e+04, - -0.11927729309358369392e+04, - 0.52645174305094087686e+03, - 0.31141942736835039796e+03, - -0.10331388066065915154e+04, - 0.11486508330424276210e+04, - -0.74173298866888501379e+03, - -0.93831225077922795208e+02, - 0.78044699262561027808e+03, - -0.10810538785985831964e+04, - 0.70571325809810991814e+03, - 0.11322454611986373152e+02, - -0.80623710080019452562e+03, - 0.11066875489434837618e+04, - -0.86059517435387488149e+03, - 0.51677419872622124331e+02, - 0.76626652623697168565e+03, - -0.12816524781273208191e+04, - 0.10751764103000871273e+04, - -0.36861012349480409966e+03, - -0.60673888244188856333e+03, - 0.12126552204676995643e+04, - -0.12637497614664171124e+04, - 0.61239910094127139928e+03, - 0.26241518681726734030e+03, - -0.10124513719386275170e+04, - 0.11519651090717211446e+04, - -0.69072405589423431138e+03, - -0.37726193585310873857e+02, - 0.88001166985091106199e+03, - -0.65077314420815048379e+03, - 0.11010336211204717074e+04, - 0.11621269335045826665e+04, - 0.10623632724703754775e+04, - 0.35939509722568068355e+04, - 0.38187369464116609379e+04, - 0.53230891036382508901e+04, - 0.78182393251769926792e+04, - 0.67486951954207825111e+04, - 0.73037651450873308931e+04, - 0.52976103126775715282e+04, - 0.43898426601023101057e+03, - -0.14572440327973631611e+04, - -0.55394737490735260508e+04, - -0.58296171865029045875e+04, - -0.20592215253448925978e+04, - 0.28923084685783055647e+03, - 0.46820713982493516596e+04, - 0.50920606510327488650e+04, - 0.73386576887995693141e+03, - -0.19960354380033697907e+04, - -0.45231414238103016032e+04, - -0.33825684974535611218e+04, - 0.27412401274578219272e+04, - 0.35887744577748799202e+04, - 0.23614626227732806001e+04, - -0.53174732322907937032e+03, - -0.54695487470801190284e+04, - -0.10440157502295235190e+04, - 0.24256689933421585010e+04, - 0.26603026178335439909e+04, - 0.21260945147938987247e+04, - -0.41864708827255308279e+04, - -0.29013958588787254484e+04, - 0.20992882618798398653e+04, - 0.23603349902011436825e+04, - 0.17707362528446669785e+04, - -0.27536981331135020810e+04, - -0.34537579442784453931e+04, - 0.24079146737478959039e+04, - 0.29436538852685530401e+04, - -0.42816840196533962626e+03, - -0.22444439730923968455e+04, - -0.20508544789170628064e+04, - 0.25174251141732906945e+04, - 0.30944669487734136055e+04, - -0.28481513235481888842e+04, - -0.22303602837036164601e+04, - 0.13751744219955717199e+04, - 0.18618715226966285172e+04, - 0.80599031495675308179e+03, - -0.32681064930745678794e+04, - -0.97401456037614468642e+03, - 0.40319631334515638628e+04, - -0.15818571463069648075e+03, - -0.27514451716114854207e+04, - -0.35894905820554903642e+02, - 0.13600498739461270361e+04, - 0.17287698835722724198e+04, - -0.19715082436536229125e+04, - -0.24652595431793238276e+04, - 0.35962323842201994921e+04, - 0.86463963489960929110e+03, - -0.32169721195887441354e+04, - 0.33679393065162452103e+03, - 0.14438577108597417009e+04, - 0.78030532309207956132e+03, - -0.15332731536090896043e+04, - -0.16049026400008003748e+04, - 0.29267550474872482482e+04, - 0.62847372743391019867e+03, - -0.34237636638747571851e+04, - 0.87598118761698935941e+03, - 0.27267737015060392878e+04, - -0.18688694991351117096e+04, - -0.12039314158890576891e+04, - 0.12879014388950765806e+04, - 0.71067934779445545246e+03, - -0.26914685296998868580e+03, - -0.21224290527559319344e+04, - 0.16817573941155631019e+04, - 0.20377328672174699022e+04, - -0.37288162045115623187e+04, - 0.66055537096790442320e+03, - 0.29024028780474382074e+04, - -0.22396500462451058411e+04, - -0.96792395041717475124e+03, - 0.18411155418067719438e+04, - 0.19831808243470928232e+03, - -0.13681973531740777617e+04, - 0.12583530823077715866e+02, - 0.10775381451198027207e+04, - 0.25604575398584967161e+03, - -0.17547819707009907688e+04, - 0.35477089377781146595e+03, - 0.25842369058556951131e+04, - -0.28190367450337380433e+04, - -0.57910701899238176793e+03, - 0.35298021820409367137e+04, - -0.23763021646442675774e+04, - -0.12564360200365040328e+04, - 0.28010774822541434332e+04, - -0.78431742239087930102e+03, - -0.17154990548290934385e+04, - 0.15808572056770669860e+04, - 0.43102710670806629878e+03, - -0.13935578389297534159e+04, - 0.42654645007519900446e+03, - 0.55278584638777761029e+03, - -0.75492152537001402379e+02, - -0.72844460815455465763e+03, - 0.73939750009958771670e+02, - 0.14945113459302328920e+04, - -0.16091570245545342459e+04, - -0.51305086426662398935e+03, - 0.25452563037389618330e+04, - -0.18082575428013371948e+04, - -0.11551744026925048274e+04, - 0.29230196076645374887e+04, - -0.12881104366000724895e+04, - -0.19473467858602182332e+04, - 0.29879191480089216384e+04, - -0.52776472618929039982e+03, - -0.26817380050886063145e+04, - 0.30032499361800573752e+04, - -0.74781949214727390540e+02, - -0.28598213238220964740e+04, - 0.26697969093254755535e+04, - 0.23563253387663914395e+03, - -0.25684244376450528762e+04, - 0.19054846702479233045e+04, - 0.77346767509448295641e+03, - -0.24137562798194348943e+04, - 0.13144533107124161688e+04, - 0.11765251960989824056e+04, - -0.23469005102815876853e+04, - 0.10768649243549664334e+04, - 0.11393454523085160872e+04, - -0.19793856768934394950e+04, - 0.74741584962043884843e+03, - 0.10778259500155688784e+04, - -0.15640019940254574067e+04, - 0.33122172623991417595e+03, - 0.11997162848828008919e+04, - -0.14000183564102737819e+04, - 0.10644890665400176033e+03, - 0.12935987404816958133e+04, - -0.13427624525896449086e+04, - 0.25161288206723493204e+04, - -0.12270741091071074607e+04, - -0.37576978138635477080e+04, - 0.43732632461457651516e+04, - -0.39291564908948686252e+03, - -0.39100016352550273950e+04, - 0.34034708747398231026e+04, - 0.10827170287374485724e+04, - -0.47057483004705327403e+04, - 0.29628347224108561022e+04, - 0.20923621709490835201e+04, - -0.51464085284869443058e+04, - 0.25428294569957975000e+04, - 0.24764361991383693749e+04, - -0.45390891097665298730e+04, - 0.12590863708951862918e+04, - 0.29944177654179247838e+04, - -0.33613716127603820496e+04, - -0.76086818264025566805e+03, - 0.39694200763647590975e+04, - -0.24630991074334438053e+04, - -0.23086854352315085634e+04, - 0.43310024395419859502e+04, - -0.14617942319255953407e+04, - -0.29073857945554100297e+04, - 0.30731572323090435930e+04, - 0.70054995894538978973e+03, - -0.34721576165903820765e+04, - 0.10295750569597832964e+04, - 0.33847323226406811045e+04, - -0.40342605321391624784e+04, - -0.72279825669777608255e+03, - 0.48211050842403083152e+04, - -0.31175698886140007744e+04, - -0.26484582184692530973e+04, - 0.46927967397906568294e+04, - -0.35238208888794230234e+03, - -0.50012817102721955962e+04, - 0.37425841491386399866e+04, - 0.27100828000181063544e+04, - -0.62987529108593726050e+04, - 0.18993088730519218643e+04, - 0.46157087515263192472e+04, - -0.50381978756547978264e+04, - -0.10791808890558954772e+04, - 0.48766716413221956827e+04, - -0.15146492539382545601e+04, - -0.40299236817605378747e+04, - 0.32582660197045001951e+04, - 0.24709489217107011427e+04, - -0.47846202405187659679e+04, - -0.16856118115681073277e+03, - 0.47355113943752776322e+04, - -0.20219689936412626139e+04, - -0.42451094192381942776e+04, - 0.39449419648674047494e+04, - 0.29378125343255578628e+04, - -0.64168456894116325202e+04, - 0.49296186376791229122e+03, - 0.62393223124815167466e+04, - -0.41329734689389642881e+04, - -0.35652392140214478786e+04, - 0.47246931236078908114e+04, - 0.16936788375077019282e+04, - -0.49415338768037363479e+04, - -0.77484227352347988926e+03, - 0.56090264728802949321e+04, - -0.12089067098744608302e+04, - -0.56210527484571375680e+04, - 0.29229646984911960317e+04, - 0.49756287543052676483e+04, - -0.47927128620821986260e+04, - -0.39151077310388727710e+04, - 0.63544087683566531268e+04, - 0.14950927710702924287e+04, - -0.63912257778884386425e+04, - 0.21565328897480085857e+02, - 0.53429362228030513506e+04, - 0.13065253464312365850e+03, - -0.61750743271378150894e+04, - 0.24917704511389806044e+03, - 0.74623613736037359558e+04, - -0.26726975513418919945e+04, - -0.66536393667105821805e+04, - 0.34699967085048492663e+04, - 0.53398186299609251364e+04, - -0.26426180509912273919e+04, - -0.61781534244144240802e+04, - 0.26800490316675313807e+04, - 0.66221717817833095978e+04, - -0.30047896999519634846e+04, - -0.68783317612744594953e+04, - 0.25227225987766660182e+04, - 0.73854832138602059786e+04, - -0.25817283330522564029e+04, - -0.69723895554054861350e+04, - 0.87097464418468985059e+03, - 0.68576008665572771861e+04, - 0.17270266570363041865e+04, - -0.85482438133786963590e+04, - -0.25394776181408224147e+04, - 0.79002838665215240326e+04, - 0.34360346923450288159e+04, - -0.49660036066519578526e+04, - -0.69779608038599408246e+04, - 0.28583137287642339288e+04, - 0.92358700322566128307e+04, - -0.10165662425046798489e+04, - -0.83557040959307196317e+04, - -0.34597982380922180710e+04, - 0.59355939901855472272e+04, - 0.81099235512192444730e+04, - -0.28609091933016406983e+04, - -0.96634639226619074179e+04, - -0.26161247057058885730e+04, - 0.71566656979572671844e+04, - 0.82592095834524752718e+04, - -0.15637257233164737045e+04, - -0.10010869651058836098e+05, - -0.60915532412332468084e+04, - 0.53017878622143216489e+04, - 0.10263337012642643458e+05, - 0.41918220711107160241e+04, - -0.64078476521789825711e+04, - -0.11700520970678360754e+05, - -0.39591077605446193957e+04, - 0.67480534641490339709e+04, - 0.11255116469655742549e+05, - 0.76626598140176793095e+04, - -0.48045297827465219598e+04, - -0.12073106626931066785e+05, - -0.10863693152899746565e+05, - -0.40455469142088372791e+04, - 0.85383215980665190727e+04, - 0.13851761036976580726e+05, - 0.12801324660348180259e+05, - 0.73024609666437145279e+04, - -0.47923351389240706339e+04, - -0.12158264428380151003e+05, - -0.17915897721305511368e+05, - -0.20753723472586243588e+05, - -0.17050506518843882077e+05, - -0.15500500910075337742e+05, - -0.10881118176995896647e+05, - -0.66715664467660117225e+04, - -0.56076152072722534285e+04, - -0.19218947421369032327e+04, - -0.17209122571090256315e+04, - -0.11453657541871502872e+04, - 0.33755873572543691807e+03, - -0.83973457575460111002e+03, - 0.21431318138169697818e+03, - 0.13487217590928443656e+03, - -0.47909425612359888191e+03, - 0.46921817300539055395e+03, - -0.23138658708619757931e+03, - -0.99462522694991079675e+02, - 0.32379774026664330222e+03, - -0.33924888407893683961e+03, - 0.16988039162365882362e+03, - 0.63636250988590411737e+02, - -0.22298214481326749592e+03, - 0.23713654363733832042e+03, - -0.12911804076633677596e+03, - -0.81831859881054107575e+01, - 0.84026789054637717413e+02, - -0.64431016906969631464e+02, - -0.70839154949496254687e+01, - 0.49825650014358203066e+02, - -0.30106544974390163638e+01, - -0.12272805943202169487e+03, - 0.24888009585510417310e+03, - -0.27242185012475079020e+03, - 0.13776369632937419851e+03, - 0.12128711383154862347e+03, - -0.38434897218406007369e+03, - 0.50783262837364594589e+03, - -0.40270871784623454914e+03, - 0.94834550427113697424e+02, - 0.28054958520681441314e+03, - -0.53999508859208367539e+03, - 0.54937538952212378263e+03, - -0.29545366553653462915e+03, - -0.98682249724441362559e+02, - 0.43492667692342945429e+03, - -0.53931726441884757151e+03, - 0.35618163701583216607e+03, - 0.21078572521873788048e+02, - -0.39320256580033850469e+03, - 0.55878559267384366649e+03, - -0.41893506135677608881e+03, - 0.34118466087302316225e+02, - 0.40346197445032902351e+03, - -0.66454554514822962119e+03, - 0.60170729429246182463e+03, - -0.22736704639364828040e+03, - -0.28645716268478230404e+03, - 0.69132626989091954783e+03, - -0.78487651329635650654e+03, - 0.51329144970982929408e+03, - 0.62968274745875248755e+03, - -0.14267448795788664029e+04, - 0.10149578221368905133e+04, - -0.38119133478261204573e+02, - -0.83867811412602657128e+03, - 0.13769497084216563962e+04, - -0.11293676162341243980e+04, - 0.41469975330555973869e+03, - 0.58977072696894572346e+03, - -0.11842698816104186790e+04, - 0.12484963620611929400e+04, - -0.55621672187119474984e+03, - -0.35547546822663122157e+03, - 0.12022663073482515301e+04, - -0.13478131186926993905e+04, - 0.88054743183963341835e+03, - 0.17003248656351578916e+03, - -0.10914342836399646330e+04, - 0.15944111716700833767e+04, - -0.12157715106085295247e+04, - 0.31041030904399809742e+03, - 0.86696226749339484741e+03, - -0.15387183461395400172e+04, - 0.15483020437018365101e+04, - -0.69898831269473078009e+03, - -0.39282310880929111363e+03, - 0.13562487836194616193e+04, - -0.15123655411234151416e+04, - 0.97382429910333314638e+03, - 0.15375253313596326166e+03, - -0.10817377997258306550e+04, - 0.14968118590252904596e+04, - -0.98884791916203641904e+03, - 0.15439468141528017497e+02, - 0.10782139674804905098e+04, - -0.15033387147292828558e+04, - 0.11949424174471184870e+04, - -0.11575095199891087816e+03, - -0.97669072884656281985e+03, - 0.16735101148627966268e+04, - -0.13993829983046268808e+04, - 0.46862699800716302434e+03, - 0.81543438856746229249e+03, - -0.15839158118623251994e+04, - 0.16107799081245736943e+04, - -0.70537069867696811798e+03, - -0.45683360694419593528e+03, - 0.14108030070790446189e+04, - -0.15067970077296529325e+04, - 0.79650133581001978200e+03, - 0.22853775515116123529e+03, - -0.13546737886826324484e+04, - 0.92833123867848064492e+03, - -0.14690653046094018919e+04, - -0.18005231261712078776e+04, - -0.13483755011106247821e+04, - -0.52098627531241490942e+04, - -0.53761336480779445992e+04, - -0.75157635503848050575e+04, - -0.11167362345232699226e+05, - -0.94814262090673018974e+04, - -0.10425760529790433793e+05, - -0.74794562649848166984e+04, - -0.62950954336775430420e+03, - 0.20690406383560584800e+04, - 0.78370525886896530210e+04, - 0.83115490988191922952e+04, - 0.28632423055681224469e+04, - -0.36793444818822183606e+03, - -0.66342202343580911474e+04, - -0.72962671971863628642e+04, - -0.89928912326251213472e+03, - 0.26535496812883993698e+04, - 0.65773233769176131318e+04, - 0.47033808744149728227e+04, - -0.39001816353465592329e+04, - -0.49639241433001634505e+04, - -0.35573794224297666915e+04, - 0.98790377477723598076e+03, - 0.75654716615094730514e+04, - 0.15749112009608425069e+04, - -0.34124872521829561265e+04, - -0.39080499470007166565e+04, - -0.28184570586190925496e+04, - 0.57425066685400461211e+04, - 0.42492980287536820470e+04, - -0.30164705708850688097e+04, - -0.34044186076047039933e+04, - -0.23875072565519608361e+04, - 0.37640797668938894276e+04, - 0.50074011013498302418e+04, - -0.34586284459181852071e+04, - -0.42033101982700172812e+04, - 0.68978740717981145281e+03, - 0.30826278585488112185e+04, - 0.29890046798566722828e+04, - -0.36040258853043201270e+04, - -0.44074026747506231914e+04, - 0.40973845912857977964e+04, - 0.30924396256103600535e+04, - -0.18945810177986602412e+04, - -0.26629834038531603255e+04, - -0.11552963243993588094e+04, - 0.46689253108848497504e+04, - 0.13468472148782541353e+04, - -0.57022211875905641136e+04, - 0.23597030491451971557e+03, - 0.38693912140849688512e+04, - 0.86689038182752980788e+02, - -0.19451628110093545274e+04, - -0.24706171934811709434e+04, - 0.28523863210655972580e+04, - 0.34173457886669466461e+04, - -0.50259326099988356873e+04, - -0.12653181388347945813e+04, - 0.45453807694098850334e+04, - -0.40156084562376361191e+03, - -0.21643189035045256787e+04, - -0.98407599147303824338e+03, - 0.20868349508526366662e+04, - 0.22968618774800274878e+04, - -0.40924654736735733422e+04, - -0.10145612840926064564e+04, - 0.50078734182297830557e+04, - -0.13757185091172696048e+04, - -0.37962275715563137055e+04, - 0.26676752921774768765e+04, - 0.16046355207796329978e+04, - -0.16682717561866029428e+04, - -0.11721258520849301021e+04, - 0.49955822241699064534e+03, - 0.29780121648203348741e+04, - -0.24516206422099580777e+04, - -0.27426922081057637115e+04, - 0.51047158702757706124e+04, - -0.77357873282800676407e+03, - -0.42072837372295025489e+04, - 0.31650816524921642667e+04, - 0.14859173933829890757e+04, - -0.27946596618975850106e+04, - -0.80202487944101179096e+02, - 0.17809655640243734069e+04, - 0.53091479926995120309e+02, - -0.14892933154468696557e+04, - -0.50086997930753977926e+03, - 0.26864048801854291924e+04, - -0.70530858233057597317e+03, - -0.35137563674437678856e+04, - 0.39375890679745070884e+04, - 0.77799649372824046623e+03, - -0.48753061187916164272e+04, - 0.31921244166720862268e+04, - 0.19564922184963968448e+04, - -0.40970612970181173296e+04, - 0.11576500232187929669e+04, - 0.24719171499543149366e+04, - -0.23459410823136336148e+04, - -0.47829101002366815010e+03, - 0.18556754674023788994e+04, - -0.53021090622084830102e+03, - -0.79578308180057490517e+03, - 0.60012545858620583772e+02, - 0.11172979289119709847e+04, - -0.19435638053476475307e+03, - -0.20558253767181627154e+04, - 0.22652431898403738160e+04, - 0.69324195528691814161e+03, - -0.35366288409391499954e+04, - 0.24780868589221972798e+04, - 0.17085525886111483942e+04, - -0.41750301619059437144e+04, - 0.18038628291523075404e+04, - 0.28332567284651536283e+04, - -0.43388070855308760656e+04, - 0.85191335047422785465e+03, - 0.37266724705213600828e+04, - -0.42312157137805388629e+04, - 0.13539016185301287010e+03, - 0.39758528330752383226e+04, - -0.36755248146046801594e+04, - -0.44832118882226978940e+03, - 0.37325898649899891097e+04, - -0.27476664013572699332e+04, - -0.11050908171501716879e+04, - 0.34803105599229043037e+04, - -0.19542269748865267047e+04, - -0.15681488378224366897e+04, - 0.32409767584857145266e+04, - -0.14708728023971395942e+04, - -0.16321615368282020881e+04, - 0.27851563166183732392e+04, - -0.10101671672407699134e+04, - -0.15903504624690708624e+04, - 0.22754615507238049759e+04, - -0.51015606536711220542e+03, - -0.16838640852423525303e+04, - 0.19892166466887558727e+04, - -0.16828919676027780383e+03, - -0.18143486558597421663e+04, - 0.18911943150416416302e+04, - -0.28531870788153100875e+04, - 0.94697752497422914075e+03, - 0.48458592032301612562e+04, - -0.51167318657388887004e+04, - 0.13816720329902288711e+02, - 0.50917802995623715105e+04, - -0.41207460778263475731e+04, - -0.15218628368165470874e+04, - 0.57936625841523309646e+04, - -0.33947297874259143100e+04, - -0.27872976105426218965e+04, - 0.61845742870575832058e+04, - -0.26115080098478879336e+04, - -0.35257237509617511932e+04, - 0.55884579129003577691e+04, - -0.10191950364194184431e+04, - -0.43091028280958325922e+04, - 0.43523469692732342082e+04, - 0.12359052625464953508e+04, - -0.52916119162414806851e+04, - 0.30937999786434829730e+04, - 0.31462834377889607822e+04, - -0.55361059322440451069e+04, - 0.14970664040663571086e+04, - 0.42679132590919080030e+04, - -0.42428217621785179290e+04, - -0.10990763752990199009e+04, - 0.50560771585406473605e+04, - -0.19366203747639467565e+04, - -0.40883043545561395149e+04, - 0.53629510542197804170e+04, - 0.54901787407925439766e+03, - -0.59617775710222640555e+04, - 0.40606170341456422648e+04, - 0.32441294443322199186e+04, - -0.60851408033328416423e+04, - 0.82488084437915210856e+03, - 0.60035933903164614094e+04, - -0.47535851596974307540e+04, - -0.30186107300604862758e+04, - 0.74134516989777766867e+04, - -0.20584990219995438565e+04, - -0.57523254303409312342e+04, - 0.59393535069393383310e+04, - 0.18225955661467228310e+04, - -0.63184745617919606957e+04, - 0.16917131298437820988e+04, - 0.54504656548086177281e+04, - -0.42633653907015786899e+04, - -0.32980606590084107665e+04, - 0.63178438047851641386e+04, - 0.17480205272971622321e+03, - -0.62551006395754748155e+04, - 0.28837055711228804284e+04, - 0.53117561268163854038e+04, - -0.53004764976638034568e+04, - -0.32307270602105877515e+04, - 0.77782065017344639273e+04, - -0.64749465711558264047e+03, - -0.75010311549551615826e+04, - 0.46816678573241042614e+04, - 0.48928249246185023367e+04, - -0.59598556271747429491e+04, - -0.25075670952775490150e+04, - 0.66475393456488491211e+04, - 0.86404129836433969558e+03, - -0.72677845179573896530e+04, - 0.17274671538727739062e+04, - 0.71256161491512339126e+04, - -0.39064878371467630132e+04, - -0.60850992657389915621e+04, - 0.60245407284599277773e+04, - 0.47768848477413639557e+04, - -0.77174911695795162814e+04, - -0.21656578102782191309e+04, - 0.80716329154313925756e+04, - 0.35494000133904506811e+03, - -0.72562616183918462411e+04, - 0.44828902735740243202e+02, - 0.80652573665051531862e+04, - -0.83956909544361167264e+03, - -0.89650085095652539167e+04, - 0.31711049687011559399e+04, - 0.82809371094959060429e+04, - -0.39481675679316731475e+04, - -0.72625356707529008418e+04, - 0.35964156710407742139e+04, - 0.79093783193695662703e+04, - -0.36006026749246816507e+04, - -0.82785801200302194047e+04, - 0.37999757330433039897e+04, - 0.87230504700754627265e+04, - -0.32699890299598660022e+04, - -0.91663874586969923257e+04, - 0.29548744109688700519e+04, - 0.90987811878588945547e+04, - -0.10314188896186230977e+04, - -0.91412970655171666294e+04, - -0.16246215460358321252e+04, - 0.10446564415262495459e+05, - 0.32824488270893543813e+04, - -0.96885292916739490465e+04, - -0.49530424708323253071e+04, - 0.67950241783582132484e+04, - 0.87595822788314308127e+04, - -0.39027674810225789770e+04, - -0.11289945026442723247e+05, - 0.91350870293922582732e+03, - 0.10724492559976815755e+05, - 0.46199275470470729488e+04, - -0.79120527053862142566e+04, - -0.10048728496220728630e+05, - 0.35981245003610083586e+04, - 0.12126860197846313895e+05, - 0.35756392448838146265e+04, - -0.92668575022629793239e+04, - -0.10512655560666613383e+05, - 0.20987397042537331799e+04, - 0.12648489539729991520e+05, - 0.77367961422413509354e+04, - -0.66318185504591720019e+04, - -0.13170569618200373952e+05, - -0.53585441879686322864e+04, - 0.83543316511202592665e+04, - 0.14603213721355303278e+05, - 0.52442835133632561337e+04, - -0.85570961350345769461e+04, - -0.14619544026043038684e+05, - -0.93271322571771979710e+04, - 0.57895566666555687334e+04, - 0.15395218657928113316e+05, - 0.14136304269538846711e+05, - 0.46474134474833981585e+04, - -0.10437821711695958584e+05, - -0.17747106910584203433e+05, - -0.16565187031689223659e+05, - -0.87594915012545625359e+04, - 0.55743911471595538387e+04, - 0.15719919389077060259e+05, - 0.22962274602307188616e+05, - 0.25929913867622050020e+05, - 0.22265284336019718467e+05, - 0.19358240243486816325e+05, - 0.13857767386161709510e+05, - 0.88221601762396912818e+04, - 0.66511058548437613354e+04, - 0.28432621895814586424e+04, - 0.20577465478918365989e+04, - 0.12995710571693334714e+04, - -0.10033535158232565720e+03, - 0.75704934572558602213e+03, - -0.13024871299763825050e+03, - -0.10279665035231218440e+03, - 0.40540646314631192126e+03, - -0.39399347154464965115e+03, - 0.20931086739695643928e+03, - 0.58863836564288639863e+02, - -0.24633879342362067177e+03, - 0.27234396008647161125e+03, - -0.15243028372849610719e+03, - -0.21083973678379397398e+02, - 0.14157587264158883045e+03, - -0.15449803524927733633e+03, - 0.77890184924265341238e+02, - 0.16398373609214182522e+02, - -0.59534585921336876879e+02, - 0.27911199977108566372e+02, - 0.40836712809951208669e+02, - -0.80580590202524248866e+02, - 0.41923330129323971960e+02, - 0.66606588494081123031e+02, - -0.18160305913745773410e+03, - 0.21896332178229218357e+03, - -0.13138194567038559057e+03, - -0.58146690678426850241e+02, - 0.25759798477522360827e+03, - -0.35550002882731263298e+03, - 0.28164473206560899143e+03, - -0.54820552188632035495e+02, - -0.22142805065859309366e+03, - 0.40622816665160132743e+03, - -0.39769075142061677752e+03, - 0.18838241338621014620e+03, - 0.12293568122288280620e+03, - -0.38011743864722677699e+03, - 0.44762161505868846234e+03, - -0.28452748895621652991e+03, - -0.31923932800540733012e+02, - 0.34097531094974772259e+03, - -0.48092390177685678054e+03, - 0.37206381433229188360e+03, - -0.61919599902348409159e+02, - -0.29659505273887339172e+03, - 0.51999433253908534880e+03, - -0.48854346514017532854e+03, - 0.20837591178455187446e+03, - 0.18791500115378207170e+03, - -0.50627106848485925639e+03, - 0.58731079813190854111e+03, - -0.38708869877633486567e+03, - -0.41163566976381258655e+03, - 0.97862607098343914913e+03, - -0.73146948910078606332e+03, - 0.66122184948273641680e+02, - 0.55550545262272521541e+03, - -0.96358167823319968193e+03, - 0.82104729967789012335e+03, - -0.33554284785758613907e+03, - -0.38411414484026687433e+03, - 0.83834172364049345560e+03, - -0.92929227657683748021e+03, - 0.47100080640522361364e+03, - 0.17190977438865445492e+03, - -0.80634595624191763363e+03, - 0.96741849956752389517e+03, - -0.69753648769247809014e+03, - -0.10291419557988373157e+02, - 0.66423240691629257526e+03, - -0.10621106353351297003e+04, - 0.85704907745056641488e+03, - -0.27888123292105950668e+03, - -0.51749342799819635275e+03, - 0.99004695123424653502e+03, - -0.10276486820805700972e+04, - 0.47272959905542529668e+03, - 0.25524550576434697291e+03, - -0.91242605776292600694e+03, - 0.10208314999865295931e+04, - -0.65763350872807495762e+03, - -0.11808002959971615553e+03, - 0.75834129049944408507e+03, - -0.10518673617291437949e+04, - 0.70421556123810250938e+03, - -0.33502857928804822052e+02, - -0.73058836420736122363e+03, - 0.10357448905773298975e+04, - -0.84066512541975032491e+03, - 0.10937307689341712091e+03, - 0.63171980296415517842e+03, - -0.11099163994988502964e+04, - 0.92425109468912398825e+03, - -0.30050535569422498838e+03, - -0.55895774975950928365e+03, - 0.10527878890879762821e+04, - -0.10419359975797624429e+04, - 0.40140526274945477780e+03, - 0.38563567359520726541e+03, - -0.10028711364868041755e+04, - 0.10076993919161828899e+04, - -0.46076146292055346976e+03, - -0.27337783867971381824e+03, - 0.10430661599301220122e+04, - -0.67752236401509230745e+03, - 0.10073051650940265063e+04, - 0.13766874237093334159e+04, - 0.87908147861483337238e+03, - 0.38044763461837901559e+04, - 0.38367178242550457981e+04, - 0.53789499609301510645e+04, - 0.80583613314424401324e+04, - 0.67641888826684908054e+04, - 0.75124724093557033484e+04, - 0.53638205694648868302e+04, - 0.44352819754954691689e+03, - -0.14781460420736573269e+04, - -0.56184057738476749364e+04, - -0.59970894994373948066e+04, - -0.20118585045576069206e+04, - 0.22448793749356391913e+03, - 0.47763449234040890587e+04, - 0.52664698043140670052e+04, - 0.57504486777911802164e+03, - -0.18088837972370031366e+04, - -0.48149112445623632084e+04, - -0.33201316877757835755e+04, - 0.28023977283660869944e+04, - 0.34976980180915966230e+04, - 0.26669616095543497067e+04, - -0.83582758666152994920e+03, - -0.53309175829461210014e+04, - -0.11741978400671489453e+04, - 0.24227376095309414268e+04, - 0.28938941912405889525e+04, - 0.19032889794626887578e+04, - -0.40091982122337371948e+04, - -0.31232856136584782689e+04, - 0.21769745763761175112e+04, - 0.24928405225048718421e+04, - 0.16255367812305817097e+04, - -0.26057688366396855599e+04, - -0.36684821194995338374e+04, - 0.25120876235148784872e+04, - 0.30372453244961234304e+04, - -0.55108007538331776232e+03, - -0.21442681786899652252e+04, - -0.22034749940436486213e+04, - 0.26159125367489577911e+04, - 0.31697107606091162779e+04, - -0.29733811630446189156e+04, - -0.21786256943521316316e+04, - 0.13256761028195696781e+04, - 0.19276509874348791982e+04, - 0.83408741591736611554e+03, - -0.33699568538130683919e+04, - -0.94845284365870043075e+03, - 0.40859671496181276780e+04, - -0.17732553532428624976e+03, - -0.27581923959091745928e+04, - -0.83310462250241812399e+02, - 0.14053764708716275891e+04, - 0.17863980423779653393e+04, - -0.20829757410958759465e+04, - -0.24054487836089801931e+04, - 0.35640579463033213869e+04, - 0.93046787822225860509e+03, - -0.32506726919512630047e+04, - 0.23938200476614414924e+03, - 0.16270543868839615698e+04, - 0.63079069538006740459e+03, - -0.14453010186731489739e+04, - -0.16596280068198518620e+04, - 0.28991866770059309601e+04, - 0.80786911954256959234e+03, - -0.36925885621165207340e+04, - 0.10723897804605501278e+04, - 0.26806782820442667798e+04, - -0.19263820616475936731e+04, - -0.10865659162199190177e+04, - 0.10966160449888554922e+04, - 0.94731011592104835017e+03, - -0.43610856374733708662e+03, - -0.21141077785197753656e+04, - 0.17982574981423997542e+04, - 0.18793426958425895918e+04, - -0.35505203893089151279e+04, - 0.45113313618698452956e+03, - 0.30823516719246758839e+04, - -0.22722249769807217490e+04, - -0.11297162113654908353e+04, - 0.21136456585864871158e+04, - -0.62365998963709316172e+02, - -0.11816239554563640013e+04, - -0.83783067211189973023e+02, - 0.10502947297399587114e+04, - 0.43698922246062181785e+03, - -0.20416123249867803224e+04, - 0.62174679552833504204e+03, - 0.24376180070054756470e+04, - -0.27955139037874523638e+04, - -0.52952365341090069251e+03, - 0.34211663090601064141e+04, - -0.21873135541451820245e+04, - -0.15040093425911113627e+04, - 0.30079672768136547347e+04, - -0.84814311396559025980e+03, - -0.18088096086152481803e+04, - 0.17560741819669863162e+04, - 0.25715979942594327667e+03, - -0.12577786672556044323e+04, - 0.33867757202009784123e+03, - 0.57083499386442633750e+03, - -0.35990081015697672484e+01, - -0.86586925762152566222e+03, - 0.20616452717011389950e+03, - 0.14271835889477044930e+04, - -0.16096805306454964466e+04, - -0.47861295171255000014e+03, - 0.24916371128713358303e+04, - -0.17191658172853515225e+04, - -0.12801289344583642560e+04, - 0.30278809602268538583e+04, - -0.12934279287234758158e+04, - -0.20672194190491122754e+04, - 0.31695328126503368367e+04, - -0.67159412358582983416e+03, - -0.26273977190996120044e+04, - 0.30148522457386520728e+04, - -0.10559735008673841605e+03, - -0.28175464626138796120e+04, - 0.25838352537244313680e+04, - 0.37992787008217072753e+03, - -0.27257458823709343960e+04, - 0.19951261132314011775e+04, - 0.79902319085797057596e+03, - -0.25294592147517164449e+04, - 0.14496276454306739652e+04, - 0.10761827760099856732e+04, - -0.22868099084151758689e+04, - 0.10347810808623185039e+04, - 0.11705963672510183642e+04, - -0.19785272393267396183e+04, - 0.69185132322561082674e+03, - 0.11773436269957885543e+04, - -0.16616065732138883959e+04, - 0.37980717489442554324e+03, - 0.12118695117632935307e+04, - -0.14447390449255624389e+04, - 0.14436099576386089893e+03, - 0.12804639830870573860e+04, - -0.13445158534154440986e+04, - 0.16959717574265521307e+04, - -0.30491518276937534893e+03, - -0.32034121502655902987e+04, - 0.30986952905206303512e+04, - 0.27428492720225409585e+03, - -0.34163992964474391556e+04, - 0.25804862844884432889e+04, - 0.11055322905089769847e+04, - -0.37268900929478795661e+04, - 0.20363051847993885985e+04, - 0.19032629432320761680e+04, - -0.38703266299127940329e+04, - 0.13702980826354635155e+04, - 0.25323551120879237715e+04, - -0.35740273387324650685e+04, - 0.34058305671685781135e+03, - 0.31191683325309008978e+04, - -0.29032577274031596062e+04, - -0.97534706150997590157e+03, - 0.36283615360142734971e+04, - -0.20112713508189699496e+04, - -0.22066055665485241661e+04, - 0.36831248307768428276e+04, - -0.80060267037217852248e+03, - -0.31206609293885971965e+04, - 0.29775261951664660955e+04, - 0.84097873154474518742e+03, - -0.36834548525432892347e+04, - 0.16110393059549915051e+04, - 0.25981380814308381559e+04, - -0.36925299310827404042e+04, - -0.13237121909208727288e+03, - 0.38262014038810571037e+04, - -0.27393455143564929131e+04, - -0.20455658924485549051e+04, - 0.40480414313745764048e+04, - -0.72986494128195579378e+03, - -0.37748876726128378323e+04, - 0.31404872328785017999e+04, - 0.17462648358992214526e+04, - -0.45586121878210278737e+04, - 0.11769358987105472352e+04, - 0.36944186542573979750e+04, - -0.36200948699922910237e+04, - -0.14758903683744567843e+04, - 0.42357769506284466843e+04, - -0.97422388334339336780e+03, - -0.37938528149796775324e+04, - 0.28997862257318879529e+04, - 0.22391618221674466440e+04, - -0.42773147920152505321e+04, - -0.10394093184281456388e+03, - 0.42572765288519767637e+04, - -0.20737077673973531091e+04, - -0.34602963934112590323e+04, - 0.36664335834462062849e+04, - 0.18291445232903674878e+04, - -0.48992160654575300214e+04, - 0.43499743867696594180e+03, - 0.46948809854510191144e+04, - -0.27559670377367338006e+04, - -0.34281108913645989560e+04, - 0.38953627609685927382e+04, - 0.18610529445508341269e+04, - -0.45960139048147639187e+04, - -0.49254794853845328362e+03, - 0.48621415830654823367e+04, - -0.12499291477962374302e+04, - -0.46711328561147238361e+04, - 0.26640561993406190595e+04, - 0.38934657626999146487e+04, - -0.39524163999883176075e+04, - -0.30133239474866568344e+04, - 0.48676463978278998184e+04, - 0.15752204135992117244e+04, - -0.52704734537982658367e+04, - -0.47897569271328285367e+03, - 0.50775271610467652863e+04, - -0.18267639999716149646e+03, - -0.54096302421847112782e+04, - 0.83812278256825527478e+03, - 0.56056010628788635586e+04, - -0.19430209570380891364e+04, - -0.53810410103598032947e+04, - 0.23701744943097996838e+04, - 0.50208888763199774985e+04, - -0.24776053519777810834e+04, - -0.52558497215102324844e+04, - 0.24817212763211241509e+04, - 0.53880443245698661485e+04, - -0.25177952687527540547e+04, - -0.57021288409072958530e+04, - 0.21596023428434564266e+04, - 0.59333339003531154958e+04, - -0.17703407483346491063e+04, - -0.61300025783357114051e+04, - 0.65067253800695152677e+03, - 0.62400325180985082625e+04, - 0.77039839205310852321e+03, - -0.66650657311739532815e+04, - -0.21756318269953462732e+04, - 0.61716308506171963018e+04, - 0.35929052213475706594e+04, - -0.47376034890801020083e+04, - -0.57262711351542784541e+04, - 0.27464471647322147874e+04, - 0.71592949714379401485e+04, - -0.37243657833382491162e+03, - -0.71266708085519849192e+04, - -0.31742062658410145559e+04, - 0.54322537473008169400e+04, - 0.64544904362877177846e+04, - -0.23323253811754916569e+04, - -0.79102247915862226364e+04, - -0.24901991760179066659e+04, - 0.61982419792904984206e+04, - 0.69289929709555144655e+04, - -0.14392429003639099392e+04, - -0.82948274558787434216e+04, - -0.50845502841208535756e+04, - 0.43011133437872540526e+04, - 0.87480583515920116042e+04, - 0.35467626339343141808e+04, - -0.56238769040797214984e+04, - -0.94616298929033455352e+04, - -0.35762040442421634907e+04, - 0.56233012257432555998e+04, - 0.98104694896273758786e+04, - 0.59027606594605676946e+04, - -0.36275829102630736998e+04, - -0.10169781806390852580e+05, - -0.94982437110074261000e+04, - -0.27737085505483305496e+04, - 0.66297579786794995016e+04, - 0.11777582747392143574e+05, - 0.11068790827352264387e+05, - 0.54770413423013042120e+04, - -0.33786070912415866587e+04, - -0.10507048427491983603e+05, - -0.15224740781513288312e+05, - -0.16830740095935474528e+05, - -0.14990751377381742714e+05, - -0.12563837913582870897e+05, - -0.91342891825492733915e+04, - -0.60084847352993856475e+04, - -0.41114293079688541184e+04, - -0.20923689041166749121e+04, - -0.12940288946343141561e+04, - -0.75266371615413254403e+03, - -0.13351237060378855404e+03, - -0.31467241422395204609e+03, - 0.49492727599841845887e+01, - 0.20731662620810421771e+02, - -0.13700685733958533774e+03, - 0.12702399050946354464e+03, - -0.73207515122320103274e+02, - -0.12033764421756254492e+02, - 0.72371190983673571395e+02, - -0.84304607289734661890e+02, - 0.51239023850250589476e+02, + -0.63609810645362536263e+2, + 0.66521292757472863855e+2, + -0.32930860989630794222e+2, + 0.10913415418323719308e+2, + -0.37153201521000291052e+2, + 0.10527236851972271836e+3, + -0.16782825044233683798e+3, + 0.16334388589670899705e+3, + -0.60538914621880415723e+2, + -0.11591257721625018462e+3, + 0.28801862809421027123e+3, + -0.36444111655248309489e+3, + 0.28959708245536467075e+3, + -0.81205893322059381489e+2, + -0.17327795997449879906e+3, + 0.35560262845760377104e+3, + -0.37821651852051718379e+3, + 0.22984642198180682726e+3, + 0.14414930616273441188e+2, + -0.23095717830526555758e+3, + 0.30971841301529298107e+3, + -0.21318930330456541355e+3, + -0.37039657638277923013e+1, + 0.22002786440046133976e+3, + -0.31287167330636691531e+3, + 0.22227229866969494765e+3, + 0.13673708894884667231e+2, + -0.27603816715505507773e+3, + 0.42403098843676639262e+3, + -0.36873007760658117604e+3, + 0.12122672748146328559e+3, + 0.20824700535638297083e+3, + -0.46281273466589937016e+3, + 0.51585008181014518414e+3, + -0.33503283867974863597e+3, + -0.48904818557293759795e+3, + 0.10500316446330155031e+4, + -0.69919346948684562904e+3, + -0.34135485663213671614e+2, + 0.66229430089573759233e+3, + -0.10154092961256578747e+4, + 0.79628154355253468566e+3, + -0.25473803732835051505e+3, + -0.46230047025591460397e+3, + 0.85693093657448719114e+3, + -0.85655642967048515857e+3, + 0.32759674384070819997e+3, + 0.3275663347998018935e+3, + -0.89607072627258457942e+3, + 0.93792196933974821604e+3, + -0.53906623998531506459e+3, + -0.24852572991027966509e+3, + 0.90076733135540939656e+3, + -0.12084924833623563245e+4, + 0.862040501236691739e+3, + -0.14072568578265961037e+3, + -0.74402098262708727816e+3, + 0.12255216324094778884e+4, + -0.11927729309358369392e+4, + 0.52645174305094087686e+3, + 0.31141942736835039796e+3, + -0.10331388066065915154e+4, + 0.1148650833042427621e+4, + -0.74173298866888501379e+3, + -0.93831225077922795208e+2, + 0.78044699262561027808e+3, + -0.10810538785985831964e+4, + 0.70571325809810991814e+3, + 0.11322454611986373152e+2, + -0.80623710080019452562e+3, + 0.11066875489434837618e+4, + -0.86059517435387488149e+3, + 0.51677419872622124331e+2, + 0.76626652623697168565e+3, + -0.12816524781273208191e+4, + 0.10751764103000871273e+4, + -0.36861012349480409966e+3, + -0.60673888244188856333e+3, + 0.12126552204676995643e+4, + -0.12637497614664171124e+4, + 0.61239910094127139928e+3, + 0.2624151868172673403e+3, + -0.1012451371938627517e+4, + 0.11519651090717211446e+4, + -0.69072405589423431138e+3, + -0.37726193585310873857e+2, + 0.88001166985091106199e+3, + -0.65077314420815048379e+3, + 0.11010336211204717074e+4, + 0.11621269335045826665e+4, + 0.10623632724703754775e+4, + 0.35939509722568068355e+4, + 0.38187369464116609379e+4, + 0.53230891036382508901e+4, + 0.78182393251769926792e+4, + 0.67486951954207825111e+4, + 0.73037651450873308931e+4, + 0.52976103126775715282e+4, + 0.43898426601023101057e+3, + -0.14572440327973631611e+4, + -0.55394737490735260508e+4, + -0.58296171865029045875e+4, + -0.20592215253448925978e+4, + 0.28923084685783055647e+3, + 0.46820713982493516596e+4, + 0.5092060651032748865e+4, + 0.73386576887995693141e+3, + -0.19960354380033697907e+4, + -0.45231414238103016032e+4, + -0.33825684974535611218e+4, + 0.27412401274578219272e+4, + 0.35887744577748799202e+4, + 0.23614626227732806001e+4, + -0.53174732322907937032e+3, + -0.54695487470801190284e+4, + -0.1044015750229523519e+4, + 0.2425668993342158501e+4, + 0.26603026178335439909e+4, + 0.21260945147938987247e+4, + -0.41864708827255308279e+4, + -0.29013958588787254484e+4, + 0.20992882618798398653e+4, + 0.23603349902011436825e+4, + 0.17707362528446669785e+4, + -0.2753698133113502081e+4, + -0.34537579442784453931e+4, + 0.24079146737478959039e+4, + 0.29436538852685530401e+4, + -0.42816840196533962626e+3, + -0.22444439730923968455e+4, + -0.20508544789170628064e+4, + 0.25174251141732906945e+4, + 0.30944669487734136055e+4, + -0.28481513235481888842e+4, + -0.22303602837036164601e+4, + 0.13751744219955717199e+4, + 0.18618715226966285172e+4, + 0.80599031495675308179e+3, + -0.32681064930745678794e+4, + -0.97401456037614468642e+3, + 0.40319631334515638628e+4, + -0.15818571463069648075e+3, + -0.27514451716114854207e+4, + -0.35894905820554903642e+2, + 0.13600498739461270361e+4, + 0.17287698835722724198e+4, + -0.19715082436536229125e+4, + -0.24652595431793238276e+4, + 0.35962323842201994921e+4, + 0.8646396348996092911e+3, + -0.32169721195887441354e+4, + 0.33679393065162452103e+3, + 0.14438577108597417009e+4, + 0.78030532309207956132e+3, + -0.15332731536090896043e+4, + -0.16049026400008003748e+4, + 0.29267550474872482482e+4, + 0.62847372743391019867e+3, + -0.34237636638747571851e+4, + 0.87598118761698935941e+3, + 0.27267737015060392878e+4, + -0.18688694991351117096e+4, + -0.12039314158890576891e+4, + 0.12879014388950765806e+4, + 0.71067934779445545246e+3, + -0.2691468529699886858e+3, + -0.21224290527559319344e+4, + 0.16817573941155631019e+4, + 0.20377328672174699022e+4, + -0.37288162045115623187e+4, + 0.6605553709679044232e+3, + 0.29024028780474382074e+4, + -0.22396500462451058411e+4, + -0.96792395041717475124e+3, + 0.18411155418067719438e+4, + 0.19831808243470928232e+3, + -0.13681973531740777617e+4, + 0.12583530823077715866e+2, + 0.10775381451198027207e+4, + 0.25604575398584967161e+3, + -0.17547819707009907688e+4, + 0.35477089377781146595e+3, + 0.25842369058556951131e+4, + -0.28190367450337380433e+4, + -0.57910701899238176793e+3, + 0.35298021820409367137e+4, + -0.23763021646442675774e+4, + -0.12564360200365040328e+4, + 0.28010774822541434332e+4, + -0.78431742239087930102e+3, + -0.17154990548290934385e+4, + 0.1580857205677066986e+4, + 0.43102710670806629878e+3, + -0.13935578389297534159e+4, + 0.42654645007519900446e+3, + 0.55278584638777761029e+3, + -0.75492152537001402379e+2, + -0.72844460815455465763e+3, + 0.7393975000995877167e+2, + 0.1494511345930232892e+4, + -0.16091570245545342459e+4, + -0.51305086426662398935e+3, + 0.2545256303738961833e+4, + -0.18082575428013371948e+4, + -0.11551744026925048274e+4, + 0.29230196076645374887e+4, + -0.12881104366000724895e+4, + -0.19473467858602182332e+4, + 0.29879191480089216384e+4, + -0.52776472618929039982e+3, + -0.26817380050886063145e+4, + 0.30032499361800573752e+4, + -0.7478194921472739054e+2, + -0.2859821323822096474e+4, + 0.26697969093254755535e+4, + 0.23563253387663914395e+3, + -0.25684244376450528762e+4, + 0.19054846702479233045e+4, + 0.77346767509448295641e+3, + -0.24137562798194348943e+4, + 0.13144533107124161688e+4, + 0.11765251960989824056e+4, + -0.23469005102815876853e+4, + 0.10768649243549664334e+4, + 0.11393454523085160872e+4, + -0.1979385676893439495e+4, + 0.74741584962043884843e+3, + 0.10778259500155688784e+4, + -0.15640019940254574067e+4, + 0.33122172623991417595e+3, + 0.11997162848828008919e+4, + -0.14000183564102737819e+4, + 0.10644890665400176033e+3, + 0.12935987404816958133e+4, + -0.13427624525896449086e+4, + 0.25161288206723493204e+4, + -0.12270741091071074607e+4, + -0.3757697813863547708e+4, + 0.43732632461457651516e+4, + -0.39291564908948686252e+3, + -0.3910001635255027395e+4, + 0.34034708747398231026e+4, + 0.10827170287374485724e+4, + -0.47057483004705327403e+4, + 0.29628347224108561022e+4, + 0.20923621709490835201e+4, + -0.51464085284869443058e+4, + 0.25428294569957975e+4, + 0.24764361991383693749e+4, + -0.4539089109766529873e+4, + 0.12590863708951862918e+4, + 0.29944177654179247838e+4, + -0.33613716127603820496e+4, + -0.76086818264025566805e+3, + 0.39694200763647590975e+4, + -0.24630991074334438053e+4, + -0.23086854352315085634e+4, + 0.43310024395419859502e+4, + -0.14617942319255953407e+4, + -0.29073857945554100297e+4, + 0.3073157232309043593e+4, + 0.70054995894538978973e+3, + -0.34721576165903820765e+4, + 0.10295750569597832964e+4, + 0.33847323226406811045e+4, + -0.40342605321391624784e+4, + -0.72279825669777608255e+3, + 0.48211050842403083152e+4, + -0.31175698886140007744e+4, + -0.26484582184692530973e+4, + 0.46927967397906568294e+4, + -0.35238208888794230234e+3, + -0.50012817102721955962e+4, + 0.37425841491386399866e+4, + 0.27100828000181063544e+4, + -0.6298752910859372605e+4, + 0.18993088730519218643e+4, + 0.46157087515263192472e+4, + -0.50381978756547978264e+4, + -0.10791808890558954772e+4, + 0.48766716413221956827e+4, + -0.15146492539382545601e+4, + -0.40299236817605378747e+4, + 0.32582660197045001951e+4, + 0.24709489217107011427e+4, + -0.47846202405187659679e+4, + -0.16856118115681073277e+3, + 0.47355113943752776322e+4, + -0.20219689936412626139e+4, + -0.42451094192381942776e+4, + 0.39449419648674047494e+4, + 0.29378125343255578628e+4, + -0.64168456894116325202e+4, + 0.49296186376791229122e+3, + 0.62393223124815167466e+4, + -0.41329734689389642881e+4, + -0.35652392140214478786e+4, + 0.47246931236078908114e+4, + 0.16936788375077019282e+4, + -0.49415338768037363479e+4, + -0.77484227352347988926e+3, + 0.56090264728802949321e+4, + -0.12089067098744608302e+4, + -0.5621052748457137568e+4, + 0.29229646984911960317e+4, + 0.49756287543052676483e+4, + -0.4792712862082198626e+4, + -0.3915107731038872771e+4, + 0.63544087683566531268e+4, + 0.14950927710702924287e+4, + -0.63912257778884386425e+4, + 0.21565328897480085857e+2, + 0.53429362228030513506e+4, + 0.1306525346431236585e+3, + -0.61750743271378150894e+4, + 0.24917704511389806044e+3, + 0.74623613736037359558e+4, + -0.26726975513418919945e+4, + -0.66536393667105821805e+4, + 0.34699967085048492663e+4, + 0.53398186299609251364e+4, + -0.26426180509912273919e+4, + -0.61781534244144240802e+4, + 0.26800490316675313807e+4, + 0.66221717817833095978e+4, + -0.30047896999519634846e+4, + -0.68783317612744594953e+4, + 0.25227225987766660182e+4, + 0.73854832138602059786e+4, + -0.25817283330522564029e+4, + -0.6972389555405486135e+4, + 0.87097464418468985059e+3, + 0.68576008665572771861e+4, + 0.17270266570363041865e+4, + -0.8548243813378696359e+4, + -0.25394776181408224147e+4, + 0.79002838665215240326e+4, + 0.34360346923450288159e+4, + -0.49660036066519578526e+4, + -0.69779608038599408246e+4, + 0.28583137287642339288e+4, + 0.92358700322566128307e+4, + -0.10165662425046798489e+4, + -0.83557040959307196317e+4, + -0.3459798238092218071e+4, + 0.59355939901855472272e+4, + 0.8109923551219244473e+4, + -0.28609091933016406983e+4, + -0.96634639226619074179e+4, + -0.2616124705705888573e+4, + 0.71566656979572671844e+4, + 0.82592095834524752718e+4, + -0.15637257233164737045e+4, + -0.10010869651058836098e+5, + -0.60915532412332468084e+4, + 0.53017878622143216489e+4, + 0.10263337012642643458e+5, + 0.41918220711107160241e+4, + -0.64078476521789825711e+4, + -0.11700520970678360754e+5, + -0.39591077605446193957e+4, + 0.67480534641490339709e+4, + 0.11255116469655742549e+5, + 0.76626598140176793095e+4, + -0.48045297827465219598e+4, + -0.12073106626931066785e+5, + -0.10863693152899746565e+5, + -0.40455469142088372791e+4, + 0.85383215980665190727e+4, + 0.13851761036976580726e+5, + 0.12801324660348180259e+5, + 0.73024609666437145279e+4, + -0.47923351389240706339e+4, + -0.12158264428380151003e+5, + -0.17915897721305511368e+5, + -0.20753723472586243588e+5, + -0.17050506518843882077e+5, + -0.15500500910075337742e+5, + -0.10881118176995896647e+5, + -0.66715664467660117225e+4, + -0.56076152072722534285e+4, + -0.19218947421369032327e+4, + -0.17209122571090256315e+4, + -0.11453657541871502872e+4, + 0.33755873572543691807e+3, + -0.83973457575460111002e+3, + 0.21431318138169697818e+3, + 0.13487217590928443656e+3, + -0.47909425612359888191e+3, + 0.46921817300539055395e+3, + -0.23138658708619757931e+3, + -0.99462522694991079675e+2, + 0.32379774026664330222e+3, + -0.33924888407893683961e+3, + 0.16988039162365882362e+3, + 0.63636250988590411737e+2, + -0.22298214481326749592e+3, + 0.23713654363733832042e+3, + -0.12911804076633677596e+3, + -0.81831859881054107575e+1, + 0.84026789054637717413e+2, + -0.64431016906969631464e+2, + -0.70839154949496254687e+1, + 0.49825650014358203066e+2, + -0.30106544974390163638e+1, + -0.12272805943202169487e+3, + 0.2488800958551041731e+3, + -0.2724218501247507902e+3, + 0.13776369632937419851e+3, + 0.12128711383154862347e+3, + -0.38434897218406007369e+3, + 0.50783262837364594589e+3, + -0.40270871784623454914e+3, + 0.94834550427113697424e+2, + 0.28054958520681441314e+3, + -0.53999508859208367539e+3, + 0.54937538952212378263e+3, + -0.29545366553653462915e+3, + -0.98682249724441362559e+2, + 0.43492667692342945429e+3, + -0.53931726441884757151e+3, + 0.35618163701583216607e+3, + 0.21078572521873788048e+2, + -0.39320256580033850469e+3, + 0.55878559267384366649e+3, + -0.41893506135677608881e+3, + 0.34118466087302316225e+2, + 0.40346197445032902351e+3, + -0.66454554514822962119e+3, + 0.60170729429246182463e+3, + -0.2273670463936482804e+3, + -0.28645716268478230404e+3, + 0.69132626989091954783e+3, + -0.78487651329635650654e+3, + 0.51329144970982929408e+3, + 0.62968274745875248755e+3, + -0.14267448795788664029e+4, + 0.10149578221368905133e+4, + -0.38119133478261204573e+2, + -0.83867811412602657128e+3, + 0.13769497084216563962e+4, + -0.1129367616234124398e+4, + 0.41469975330555973869e+3, + 0.58977072696894572346e+3, + -0.1184269881610418679e+4, + 0.124849636206119294e+4, + -0.55621672187119474984e+3, + -0.35547546822663122157e+3, + 0.12022663073482515301e+4, + -0.13478131186926993905e+4, + 0.88054743183963341835e+3, + 0.17003248656351578916e+3, + -0.1091434283639964633e+4, + 0.15944111716700833767e+4, + -0.12157715106085295247e+4, + 0.31041030904399809742e+3, + 0.86696226749339484741e+3, + -0.15387183461395400172e+4, + 0.15483020437018365101e+4, + -0.69898831269473078009e+3, + -0.39282310880929111363e+3, + 0.13562487836194616193e+4, + -0.15123655411234151416e+4, + 0.97382429910333314638e+3, + 0.15375253313596326166e+3, + -0.1081737799725830655e+4, + 0.14968118590252904596e+4, + -0.98884791916203641904e+3, + 0.15439468141528017497e+2, + 0.10782139674804905098e+4, + -0.15033387147292828558e+4, + 0.1194942417447118487e+4, + -0.11575095199891087816e+3, + -0.97669072884656281985e+3, + 0.16735101148627966268e+4, + -0.13993829983046268808e+4, + 0.46862699800716302434e+3, + 0.81543438856746229249e+3, + -0.15839158118623251994e+4, + 0.16107799081245736943e+4, + -0.70537069867696811798e+3, + -0.45683360694419593528e+3, + 0.14108030070790446189e+4, + -0.15067970077296529325e+4, + 0.796501335810019782e+3, + 0.22853775515116123529e+3, + -0.13546737886826324484e+4, + 0.92833123867848064492e+3, + -0.14690653046094018919e+4, + -0.18005231261712078776e+4, + -0.13483755011106247821e+4, + -0.52098627531241490942e+4, + -0.53761336480779445992e+4, + -0.75157635503848050575e+4, + -0.11167362345232699226e+5, + -0.94814262090673018974e+4, + -0.10425760529790433793e+5, + -0.74794562649848166984e+4, + -0.6295095433677543042e+3, + 0.206904063835605848e+4, + 0.7837052588689653021e+4, + 0.83115490988191922952e+4, + 0.28632423055681224469e+4, + -0.36793444818822183606e+3, + -0.66342202343580911474e+4, + -0.72962671971863628642e+4, + -0.89928912326251213472e+3, + 0.26535496812883993698e+4, + 0.65773233769176131318e+4, + 0.47033808744149728227e+4, + -0.39001816353465592329e+4, + -0.49639241433001634505e+4, + -0.35573794224297666915e+4, + 0.98790377477723598076e+3, + 0.75654716615094730514e+4, + 0.15749112009608425069e+4, + -0.34124872521829561265e+4, + -0.39080499470007166565e+4, + -0.28184570586190925496e+4, + 0.57425066685400461211e+4, + 0.4249298028753682047e+4, + -0.30164705708850688097e+4, + -0.34044186076047039933e+4, + -0.23875072565519608361e+4, + 0.37640797668938894276e+4, + 0.50074011013498302418e+4, + -0.34586284459181852071e+4, + -0.42033101982700172812e+4, + 0.68978740717981145281e+3, + 0.30826278585488112185e+4, + 0.29890046798566722828e+4, + -0.3604025885304320127e+4, + -0.44074026747506231914e+4, + 0.40973845912857977964e+4, + 0.30924396256103600535e+4, + -0.18945810177986602412e+4, + -0.26629834038531603255e+4, + -0.11552963243993588094e+4, + 0.46689253108848497504e+4, + 0.13468472148782541353e+4, + -0.57022211875905641136e+4, + 0.23597030491451971557e+3, + 0.38693912140849688512e+4, + 0.86689038182752980788e+2, + -0.19451628110093545274e+4, + -0.24706171934811709434e+4, + 0.2852386321065597258e+4, + 0.34173457886669466461e+4, + -0.50259326099988356873e+4, + -0.12653181388347945813e+4, + 0.45453807694098850334e+4, + -0.40156084562376361191e+3, + -0.21643189035045256787e+4, + -0.98407599147303824338e+3, + 0.20868349508526366662e+4, + 0.22968618774800274878e+4, + -0.40924654736735733422e+4, + -0.10145612840926064564e+4, + 0.50078734182297830557e+4, + -0.13757185091172696048e+4, + -0.37962275715563137055e+4, + 0.26676752921774768765e+4, + 0.16046355207796329978e+4, + -0.16682717561866029428e+4, + -0.11721258520849301021e+4, + 0.49955822241699064534e+3, + 0.29780121648203348741e+4, + -0.24516206422099580777e+4, + -0.27426922081057637115e+4, + 0.51047158702757706124e+4, + -0.77357873282800676407e+3, + -0.42072837372295025489e+4, + 0.31650816524921642667e+4, + 0.14859173933829890757e+4, + -0.27946596618975850106e+4, + -0.80202487944101179096e+2, + 0.17809655640243734069e+4, + 0.53091479926995120309e+2, + -0.14892933154468696557e+4, + -0.50086997930753977926e+3, + 0.26864048801854291924e+4, + -0.70530858233057597317e+3, + -0.35137563674437678856e+4, + 0.39375890679745070884e+4, + 0.77799649372824046623e+3, + -0.48753061187916164272e+4, + 0.31921244166720862268e+4, + 0.19564922184963968448e+4, + -0.40970612970181173296e+4, + 0.11576500232187929669e+4, + 0.24719171499543149366e+4, + -0.23459410823136336148e+4, + -0.4782910100236681501e+3, + 0.18556754674023788994e+4, + -0.53021090622084830102e+3, + -0.79578308180057490517e+3, + 0.60012545858620583772e+2, + 0.11172979289119709847e+4, + -0.19435638053476475307e+3, + -0.20558253767181627154e+4, + 0.2265243189840373816e+4, + 0.69324195528691814161e+3, + -0.35366288409391499954e+4, + 0.24780868589221972798e+4, + 0.17085525886111483942e+4, + -0.41750301619059437144e+4, + 0.18038628291523075404e+4, + 0.28332567284651536283e+4, + -0.43388070855308760656e+4, + 0.85191335047422785465e+3, + 0.37266724705213600828e+4, + -0.42312157137805388629e+4, + 0.1353901618530128701e+3, + 0.39758528330752383226e+4, + -0.36755248146046801594e+4, + -0.4483211888222697894e+3, + 0.37325898649899891097e+4, + -0.27476664013572699332e+4, + -0.11050908171501716879e+4, + 0.34803105599229043037e+4, + -0.19542269748865267047e+4, + -0.15681488378224366897e+4, + 0.32409767584857145266e+4, + -0.14708728023971395942e+4, + -0.16321615368282020881e+4, + 0.27851563166183732392e+4, + -0.10101671672407699134e+4, + -0.15903504624690708624e+4, + 0.22754615507238049759e+4, + -0.51015606536711220542e+3, + -0.16838640852423525303e+4, + 0.19892166466887558727e+4, + -0.16828919676027780383e+3, + -0.18143486558597421663e+4, + 0.18911943150416416302e+4, + -0.28531870788153100875e+4, + 0.94697752497422914075e+3, + 0.48458592032301612562e+4, + -0.51167318657388887004e+4, + 0.13816720329902288711e+2, + 0.50917802995623715105e+4, + -0.41207460778263475731e+4, + -0.15218628368165470874e+4, + 0.57936625841523309646e+4, + -0.339472978742591431e+4, + -0.27872976105426218965e+4, + 0.61845742870575832058e+4, + -0.26115080098478879336e+4, + -0.35257237509617511932e+4, + 0.55884579129003577691e+4, + -0.10191950364194184431e+4, + -0.43091028280958325922e+4, + 0.43523469692732342082e+4, + 0.12359052625464953508e+4, + -0.52916119162414806851e+4, + 0.3093799978643482973e+4, + 0.31462834377889607822e+4, + -0.55361059322440451069e+4, + 0.14970664040663571086e+4, + 0.4267913259091908003e+4, + -0.4242821762178517929e+4, + -0.10990763752990199009e+4, + 0.50560771585406473605e+4, + -0.19366203747639467565e+4, + -0.40883043545561395149e+4, + 0.5362951054219780417e+4, + 0.54901787407925439766e+3, + -0.59617775710222640555e+4, + 0.40606170341456422648e+4, + 0.32441294443322199186e+4, + -0.60851408033328416423e+4, + 0.82488084437915210856e+3, + 0.60035933903164614094e+4, + -0.4753585159697430754e+4, + -0.30186107300604862758e+4, + 0.74134516989777766867e+4, + -0.20584990219995438565e+4, + -0.57523254303409312342e+4, + 0.5939353506939338331e+4, + 0.1822595566146722831e+4, + -0.63184745617919606957e+4, + 0.16917131298437820988e+4, + 0.54504656548086177281e+4, + -0.42633653907015786899e+4, + -0.32980606590084107665e+4, + 0.63178438047851641386e+4, + 0.17480205272971622321e+3, + -0.62551006395754748155e+4, + 0.28837055711228804284e+4, + 0.53117561268163854038e+4, + -0.53004764976638034568e+4, + -0.32307270602105877515e+4, + 0.77782065017344639273e+4, + -0.64749465711558264047e+3, + -0.75010311549551615826e+4, + 0.46816678573241042614e+4, + 0.48928249246185023367e+4, + -0.59598556271747429491e+4, + -0.2507567095277549015e+4, + 0.66475393456488491211e+4, + 0.86404129836433969558e+3, + -0.7267784517957389653e+4, + 0.17274671538727739062e+4, + 0.71256161491512339126e+4, + -0.39064878371467630132e+4, + -0.60850992657389915621e+4, + 0.60245407284599277773e+4, + 0.47768848477413639557e+4, + -0.77174911695795162814e+4, + -0.21656578102782191309e+4, + 0.80716329154313925756e+4, + 0.35494000133904506811e+3, + -0.72562616183918462411e+4, + 0.44828902735740243202e+2, + 0.80652573665051531862e+4, + -0.83956909544361167264e+3, + -0.89650085095652539167e+4, + 0.31711049687011559399e+4, + 0.82809371094959060429e+4, + -0.39481675679316731475e+4, + -0.72625356707529008418e+4, + 0.35964156710407742139e+4, + 0.79093783193695662703e+4, + -0.36006026749246816507e+4, + -0.82785801200302194047e+4, + 0.37999757330433039897e+4, + 0.87230504700754627265e+4, + -0.32699890299598660022e+4, + -0.91663874586969923257e+4, + 0.29548744109688700519e+4, + 0.90987811878588945547e+4, + -0.10314188896186230977e+4, + -0.91412970655171666294e+4, + -0.16246215460358321252e+4, + 0.10446564415262495459e+5, + 0.32824488270893543813e+4, + -0.96885292916739490465e+4, + -0.49530424708323253071e+4, + 0.67950241783582132484e+4, + 0.87595822788314308127e+4, + -0.3902767481022578977e+4, + -0.11289945026442723247e+5, + 0.91350870293922582732e+3, + 0.10724492559976815755e+5, + 0.46199275470470729488e+4, + -0.79120527053862142566e+4, + -0.1004872849622072863e+5, + 0.35981245003610083586e+4, + 0.12126860197846313895e+5, + 0.35756392448838146265e+4, + -0.92668575022629793239e+4, + -0.10512655560666613383e+5, + 0.20987397042537331799e+4, + 0.1264848953972999152e+5, + 0.77367961422413509354e+4, + -0.66318185504591720019e+4, + -0.13170569618200373952e+5, + -0.53585441879686322864e+4, + 0.83543316511202592665e+4, + 0.14603213721355303278e+5, + 0.52442835133632561337e+4, + -0.85570961350345769461e+4, + -0.14619544026043038684e+5, + -0.9327132257177197971e+4, + 0.57895566666555687334e+4, + 0.15395218657928113316e+5, + 0.14136304269538846711e+5, + 0.46474134474833981585e+4, + -0.10437821711695958584e+5, + -0.17747106910584203433e+5, + -0.16565187031689223659e+5, + -0.87594915012545625359e+4, + 0.55743911471595538387e+4, + 0.15719919389077060259e+5, + 0.22962274602307188616e+5, + 0.2592991386762205002e+5, + 0.22265284336019718467e+5, + 0.19358240243486816325e+5, + 0.1385776738616170951e+5, + 0.88221601762396912818e+4, + 0.66511058548437613354e+4, + 0.28432621895814586424e+4, + 0.20577465478918365989e+4, + 0.12995710571693334714e+4, + -0.1003353515823256572e+3, + 0.75704934572558602213e+3, + -0.1302487129976382505e+3, + -0.1027966503523121844e+3, + 0.40540646314631192126e+3, + -0.39399347154464965115e+3, + 0.20931086739695643928e+3, + 0.58863836564288639863e+2, + -0.24633879342362067177e+3, + 0.27234396008647161125e+3, + -0.15243028372849610719e+3, + -0.21083973678379397398e+2, + 0.14157587264158883045e+3, + -0.15449803524927733633e+3, + 0.77890184924265341238e+2, + 0.16398373609214182522e+2, + -0.59534585921336876879e+2, + 0.27911199977108566372e+2, + 0.40836712809951208669e+2, + -0.80580590202524248866e+2, + 0.4192333012932397196e+2, + 0.66606588494081123031e+2, + -0.1816030591374577341e+3, + 0.21896332178229218357e+3, + -0.13138194567038559057e+3, + -0.58146690678426850241e+2, + 0.25759798477522360827e+3, + -0.35550002882731263298e+3, + 0.28164473206560899143e+3, + -0.54820552188632035495e+2, + -0.22142805065859309366e+3, + 0.40622816665160132743e+3, + -0.39769075142061677752e+3, + 0.1883824133862101462e+3, + 0.1229356812228828062e+3, + -0.38011743864722677699e+3, + 0.44762161505868846234e+3, + -0.28452748895621652991e+3, + -0.31923932800540733012e+2, + 0.34097531094974772259e+3, + -0.48092390177685678054e+3, + 0.3720638143322918836e+3, + -0.61919599902348409159e+2, + -0.29659505273887339172e+3, + 0.5199943325390853488e+3, + -0.48854346514017532854e+3, + 0.20837591178455187446e+3, + 0.1879150011537820717e+3, + -0.50627106848485925639e+3, + 0.58731079813190854111e+3, + -0.38708869877633486567e+3, + -0.41163566976381258655e+3, + 0.97862607098343914913e+3, + -0.73146948910078606332e+3, + 0.6612218494827364168e+2, + 0.55550545262272521541e+3, + -0.96358167823319968193e+3, + 0.82104729967789012335e+3, + -0.33554284785758613907e+3, + -0.38411414484026687433e+3, + 0.8383417236404934556e+3, + -0.92929227657683748021e+3, + 0.47100080640522361364e+3, + 0.17190977438865445492e+3, + -0.80634595624191763363e+3, + 0.96741849956752389517e+3, + -0.69753648769247809014e+3, + -0.10291419557988373157e+2, + 0.66423240691629257526e+3, + -0.10621106353351297003e+4, + 0.85704907745056641488e+3, + -0.27888123292105950668e+3, + -0.51749342799819635275e+3, + 0.99004695123424653502e+3, + -0.10276486820805700972e+4, + 0.47272959905542529668e+3, + 0.25524550576434697291e+3, + -0.91242605776292600694e+3, + 0.10208314999865295931e+4, + -0.65763350872807495762e+3, + -0.11808002959971615553e+3, + 0.75834129049944408507e+3, + -0.10518673617291437949e+4, + 0.70421556123810250938e+3, + -0.33502857928804822052e+2, + -0.73058836420736122363e+3, + 0.10357448905773298975e+4, + -0.84066512541975032491e+3, + 0.10937307689341712091e+3, + 0.63171980296415517842e+3, + -0.11099163994988502964e+4, + 0.92425109468912398825e+3, + -0.30050535569422498838e+3, + -0.55895774975950928365e+3, + 0.10527878890879762821e+4, + -0.10419359975797624429e+4, + 0.4014052627494547778e+3, + 0.38563567359520726541e+3, + -0.10028711364868041755e+4, + 0.10076993919161828899e+4, + -0.46076146292055346976e+3, + -0.27337783867971381824e+3, + 0.10430661599301220122e+4, + -0.67752236401509230745e+3, + 0.10073051650940265063e+4, + 0.13766874237093334159e+4, + 0.87908147861483337238e+3, + 0.38044763461837901559e+4, + 0.38367178242550457981e+4, + 0.53789499609301510645e+4, + 0.80583613314424401324e+4, + 0.67641888826684908054e+4, + 0.75124724093557033484e+4, + 0.53638205694648868302e+4, + 0.44352819754954691689e+3, + -0.14781460420736573269e+4, + -0.56184057738476749364e+4, + -0.59970894994373948066e+4, + -0.20118585045576069206e+4, + 0.22448793749356391913e+3, + 0.47763449234040890587e+4, + 0.52664698043140670052e+4, + 0.57504486777911802164e+3, + -0.18088837972370031366e+4, + -0.48149112445623632084e+4, + -0.33201316877757835755e+4, + 0.28023977283660869944e+4, + 0.3497698018091596623e+4, + 0.26669616095543497067e+4, + -0.8358275866615299492e+3, + -0.53309175829461210014e+4, + -0.11741978400671489453e+4, + 0.24227376095309414268e+4, + 0.28938941912405889525e+4, + 0.19032889794626887578e+4, + -0.40091982122337371948e+4, + -0.31232856136584782689e+4, + 0.21769745763761175112e+4, + 0.24928405225048718421e+4, + 0.16255367812305817097e+4, + -0.26057688366396855599e+4, + -0.36684821194995338374e+4, + 0.25120876235148784872e+4, + 0.30372453244961234304e+4, + -0.55108007538331776232e+3, + -0.21442681786899652252e+4, + -0.22034749940436486213e+4, + 0.26159125367489577911e+4, + 0.31697107606091162779e+4, + -0.29733811630446189156e+4, + -0.21786256943521316316e+4, + 0.13256761028195696781e+4, + 0.19276509874348791982e+4, + 0.83408741591736611554e+3, + -0.33699568538130683919e+4, + -0.94845284365870043075e+3, + 0.4085967149618127678e+4, + -0.17732553532428624976e+3, + -0.27581923959091745928e+4, + -0.83310462250241812399e+2, + 0.14053764708716275891e+4, + 0.17863980423779653393e+4, + -0.20829757410958759465e+4, + -0.24054487836089801931e+4, + 0.35640579463033213869e+4, + 0.93046787822225860509e+3, + -0.32506726919512630047e+4, + 0.23938200476614414924e+3, + 0.16270543868839615698e+4, + 0.63079069538006740459e+3, + -0.14453010186731489739e+4, + -0.1659628006819851862e+4, + 0.28991866770059309601e+4, + 0.80786911954256959234e+3, + -0.3692588562116520734e+4, + 0.10723897804605501278e+4, + 0.26806782820442667798e+4, + -0.19263820616475936731e+4, + -0.10865659162199190177e+4, + 0.10966160449888554922e+4, + 0.94731011592104835017e+3, + -0.43610856374733708662e+3, + -0.21141077785197753656e+4, + 0.17982574981423997542e+4, + 0.18793426958425895918e+4, + -0.35505203893089151279e+4, + 0.45113313618698452956e+3, + 0.30823516719246758839e+4, + -0.2272224976980721749e+4, + -0.11297162113654908353e+4, + 0.21136456585864871158e+4, + -0.62365998963709316172e+2, + -0.11816239554563640013e+4, + -0.83783067211189973023e+2, + 0.10502947297399587114e+4, + 0.43698922246062181785e+3, + -0.20416123249867803224e+4, + 0.62174679552833504204e+3, + 0.2437618007005475647e+4, + -0.27955139037874523638e+4, + -0.52952365341090069251e+3, + 0.34211663090601064141e+4, + -0.21873135541451820245e+4, + -0.15040093425911113627e+4, + 0.30079672768136547347e+4, + -0.8481431139655902598e+3, + -0.18088096086152481803e+4, + 0.17560741819669863162e+4, + 0.25715979942594327667e+3, + -0.12577786672556044323e+4, + 0.33867757202009784123e+3, + 0.5708349938644263375e+3, + -0.35990081015697672484e+1, + -0.86586925762152566222e+3, + 0.2061645271701138995e+3, + 0.1427183588947704493e+4, + -0.16096805306454964466e+4, + -0.47861295171255000014e+3, + 0.24916371128713358303e+4, + -0.17191658172853515225e+4, + -0.1280128934458364256e+4, + 0.30278809602268538583e+4, + -0.12934279287234758158e+4, + -0.20672194190491122754e+4, + 0.31695328126503368367e+4, + -0.67159412358582983416e+3, + -0.26273977190996120044e+4, + 0.30148522457386520728e+4, + -0.10559735008673841605e+3, + -0.2817546462613879612e+4, + 0.2583835253724431368e+4, + 0.37992787008217072753e+3, + -0.2725745882370934396e+4, + 0.19951261132314011775e+4, + 0.79902319085797057596e+3, + -0.25294592147517164449e+4, + 0.14496276454306739652e+4, + 0.10761827760099856732e+4, + -0.22868099084151758689e+4, + 0.10347810808623185039e+4, + 0.11705963672510183642e+4, + -0.19785272393267396183e+4, + 0.69185132322561082674e+3, + 0.11773436269957885543e+4, + -0.16616065732138883959e+4, + 0.37980717489442554324e+3, + 0.12118695117632935307e+4, + -0.14447390449255624389e+4, + 0.14436099576386089893e+3, + 0.1280463983087057386e+4, + -0.13445158534154440986e+4, + 0.16959717574265521307e+4, + -0.30491518276937534893e+3, + -0.32034121502655902987e+4, + 0.30986952905206303512e+4, + 0.27428492720225409585e+3, + -0.34163992964474391556e+4, + 0.25804862844884432889e+4, + 0.11055322905089769847e+4, + -0.37268900929478795661e+4, + 0.20363051847993885985e+4, + 0.1903262943232076168e+4, + -0.38703266299127940329e+4, + 0.13702980826354635155e+4, + 0.25323551120879237715e+4, + -0.35740273387324650685e+4, + 0.34058305671685781135e+3, + 0.31191683325309008978e+4, + -0.29032577274031596062e+4, + -0.97534706150997590157e+3, + 0.36283615360142734971e+4, + -0.20112713508189699496e+4, + -0.22066055665485241661e+4, + 0.36831248307768428276e+4, + -0.80060267037217852248e+3, + -0.31206609293885971965e+4, + 0.29775261951664660955e+4, + 0.84097873154474518742e+3, + -0.36834548525432892347e+4, + 0.16110393059549915051e+4, + 0.25981380814308381559e+4, + -0.36925299310827404042e+4, + -0.13237121909208727288e+3, + 0.38262014038810571037e+4, + -0.27393455143564929131e+4, + -0.20455658924485549051e+4, + 0.40480414313745764048e+4, + -0.72986494128195579378e+3, + -0.37748876726128378323e+4, + 0.31404872328785017999e+4, + 0.17462648358992214526e+4, + -0.45586121878210278737e+4, + 0.11769358987105472352e+4, + 0.3694418654257397975e+4, + -0.36200948699922910237e+4, + -0.14758903683744567843e+4, + 0.42357769506284466843e+4, + -0.9742238833433933678e+3, + -0.37938528149796775324e+4, + 0.28997862257318879529e+4, + 0.2239161822167446644e+4, + -0.42773147920152505321e+4, + -0.10394093184281456388e+3, + 0.42572765288519767637e+4, + -0.20737077673973531091e+4, + -0.34602963934112590323e+4, + 0.36664335834462062849e+4, + 0.18291445232903674878e+4, + -0.48992160654575300214e+4, + 0.4349974386769659418e+3, + 0.46948809854510191144e+4, + -0.27559670377367338006e+4, + -0.3428110891364598956e+4, + 0.38953627609685927382e+4, + 0.18610529445508341269e+4, + -0.45960139048147639187e+4, + -0.49254794853845328362e+3, + 0.48621415830654823367e+4, + -0.12499291477962374302e+4, + -0.46711328561147238361e+4, + 0.26640561993406190595e+4, + 0.38934657626999146487e+4, + -0.39524163999883176075e+4, + -0.30133239474866568344e+4, + 0.48676463978278998184e+4, + 0.15752204135992117244e+4, + -0.52704734537982658367e+4, + -0.47897569271328285367e+3, + 0.50775271610467652863e+4, + -0.18267639999716149646e+3, + -0.54096302421847112782e+4, + 0.83812278256825527478e+3, + 0.56056010628788635586e+4, + -0.19430209570380891364e+4, + -0.53810410103598032947e+4, + 0.23701744943097996838e+4, + 0.50208888763199774985e+4, + -0.24776053519777810834e+4, + -0.52558497215102324844e+4, + 0.24817212763211241509e+4, + 0.53880443245698661485e+4, + -0.25177952687527540547e+4, + -0.5702128840907295853e+4, + 0.21596023428434564266e+4, + 0.59333339003531154958e+4, + -0.17703407483346491063e+4, + -0.61300025783357114051e+4, + 0.65067253800695152677e+3, + 0.62400325180985082625e+4, + 0.77039839205310852321e+3, + -0.66650657311739532815e+4, + -0.21756318269953462732e+4, + 0.61716308506171963018e+4, + 0.35929052213475706594e+4, + -0.47376034890801020083e+4, + -0.57262711351542784541e+4, + 0.27464471647322147874e+4, + 0.71592949714379401485e+4, + -0.37243657833382491162e+3, + -0.71266708085519849192e+4, + -0.31742062658410145559e+4, + 0.543225374730081694e+4, + 0.64544904362877177846e+4, + -0.23323253811754916569e+4, + -0.79102247915862226364e+4, + -0.24901991760179066659e+4, + 0.61982419792904984206e+4, + 0.69289929709555144655e+4, + -0.14392429003639099392e+4, + -0.82948274558787434216e+4, + -0.50845502841208535756e+4, + 0.43011133437872540526e+4, + 0.87480583515920116042e+4, + 0.35467626339343141808e+4, + -0.56238769040797214984e+4, + -0.94616298929033455352e+4, + -0.35762040442421634907e+4, + 0.56233012257432555998e+4, + 0.98104694896273758786e+4, + 0.59027606594605676946e+4, + -0.36275829102630736998e+4, + -0.1016978180639085258e+5, + -0.94982437110074261e+4, + -0.27737085505483305496e+4, + 0.66297579786794995016e+4, + 0.11777582747392143574e+5, + 0.11068790827352264387e+5, + 0.5477041342301304212e+4, + -0.33786070912415866587e+4, + -0.10507048427491983603e+5, + -0.15224740781513288312e+5, + -0.16830740095935474528e+5, + -0.14990751377381742714e+5, + -0.12563837913582870897e+5, + -0.91342891825492733915e+4, + -0.60084847352993856475e+4, + -0.41114293079688541184e+4, + -0.20923689041166749121e+4, + -0.12940288946343141561e+4, + -0.75266371615413254403e+3, + -0.13351237060378855404e+3, + -0.31467241422395204609e+3, + 0.49492727599841845887e+1, + 0.20731662620810421771e+2, + -0.13700685733958533774e+3, + 0.12702399050946354464e+3, + -0.73207515122320103274e+2, + -0.12033764421756254492e+2, + 0.72371190983673571395e+2, + -0.8430460728973466189e+2, + 0.51239023850250589476e+2, -0.97054217795615527198, - -0.34391971950243927836e+02, - 0.38465479558527292170e+02, - -0.16813409445007788889e+02, - -0.87726273872088480488e+01, - 0.17792307712733720138e+02, - -0.37983357019243229047e+01, - -0.20745540802139537107e+02, - 0.34811726200790111818e+02, - -0.22777676918724413468e+02, - -0.12721827921379508908e+02, - 0.51810793843385518187e+02, - -0.67876641220370814267e+02, - 0.45481812540612509110e+02, - 0.92274893251954370754e+01, - -0.68652454292222955701e+02, - 0.98921298228681024511e+02, - -0.78412695821664314622e+02, - 0.12506414120825819936e+02, - 0.67707316983120236387e+02, - -0.11981090163288436656e+03, - 0.11341288758931364100e+03, - -0.46970640588103940161e+02, - -0.48696436520292934347e+02, - 0.12556253769912414953e+03, - -0.14234535960666184451e+03, - 0.87242224832225133468e+02, - 0.15022066182481047747e+02, - -0.11400660564479072434e+03, - 0.15919047844757679400e+03, - -0.12561351444130571053e+03, - 0.27912417129404584415e+02, - 0.86428406068658134132e+02, - -0.16015700075838734051e+03, - 0.15545518151742987811e+03, - -0.73224653533236548242e+02, - -0.46518753922822497771e+02, - 0.14450292197949690376e+03, - -0.17168242432331339842e+03, - 0.11409722812606111120e+03, - 0.10760336069527826908e+03, - -0.26716076282619235371e+03, - 0.20753931731531201876e+03, - -0.25611333711022641779e+02, - -0.15033961766718277886e+03, - 0.27210834769057606763e+03, - -0.23943769321207207668e+03, - 0.10653582130500842595e+03, - 0.99952260325863448998e+02, - -0.23775310403480918353e+03, - 0.27590604123342501452e+03, - -0.15524768128674904233e+03, - -0.25308285024045666489e+02, - 0.21338591432632432543e+03, - -0.27408297330016569049e+03, - 0.21420931129055477982e+03, - -0.24588435642739803200e+02, - -0.15928356864932820258e+03, - 0.28120418451608355781e+03, - -0.23860716611415253396e+03, - 0.91073433641573529940e+02, - 0.12410887184207679468e+03, - -0.25614253437597022867e+03, - 0.27374477854726637815e+03, - -0.12796266461411332216e+03, - -0.66898007409122115519e+02, - 0.24664065581362436319e+03, - -0.27694289062225567477e+03, - 0.17896045884029769013e+03, - 0.34558884479272876433e+02, - -0.21144933107501449854e+03, - 0.29465557614494377958e+03, - -0.19991844394395579343e+03, - 0.15503013124695117497e+02, - 0.19753467171479829290e+03, - -0.28481786219120283477e+03, - 0.23585740441884414054e+03, - -0.37983420622258535104e+02, - -0.16278604243917013150e+03, - 0.29381514651383514547e+03, - -0.24356171608397190198e+03, - 0.76610982458101375414e+02, - 0.15309315667358026758e+03, - -0.27933922400654898865e+03, - 0.26828097336982301613e+03, - -0.87227082528977916809e+02, - -0.12609109546107131905e+03, - 0.28560829066365920426e+03, - -0.27073288718524696606e+03, - 0.10468297742852334409e+03, - 0.10543528314354969666e+03, - -0.31656997489913163690e+03, - 0.19816078213405069164e+03, - -0.27842271675186702851e+03, - -0.41159152139305774654e+03, - -0.23146922071683999889e+03, - -0.11010942791061834214e+04, - -0.10913609557217976089e+04, - -0.15328283575014609141e+04, - -0.23112003287915763394e+04, - -0.19241948697474481378e+04, - -0.21503238651472397578e+04, - -0.15341085685650502910e+04, - -0.12176370095140171657e+03, - 0.41829871070782951392e+03, - 0.16044644708620733127e+04, - 0.17207925966530035566e+04, - 0.56282108027907838732e+03, - -0.52118617133388596585e+02, - -0.13708851564900048743e+04, - -0.15084422660195161825e+04, - -0.14987432724926628680e+03, - 0.49545514628036204385e+03, - 0.13971489305697439249e+04, - 0.93493316767500755304e+03, - -0.80040723570197962999e+03, - -0.98484045680509552767e+03, - -0.78732206884612344311e+03, - 0.26716136907249284604e+03, - 0.15010967300556892496e+04, - 0.34383656528490018900e+03, - -0.68385508245654659731e+03, - -0.84923410496771111866e+03, - -0.51449038524546131157e+03, - 0.11187601899747678544e+04, - 0.90821571245060545152e+03, - -0.62231361681020223386e+03, - -0.72675495126109274224e+03, - -0.44038380585454001448e+03, - 0.71908570498772337487e+03, - 0.10670119822394872244e+04, - -0.72475693142566103688e+03, - -0.87352090951436514388e+03, - 0.17277132100818906224e+03, - 0.59378438008503826495e+03, - 0.64564930085685716676e+03, - -0.75604305992150034399e+03, - -0.90580203256732966111e+03, - 0.85677348252973581566e+03, - 0.61218854561858393026e+03, - -0.36970518315468945048e+03, - -0.55555220734553688544e+03, - -0.23835785995601125364e+03, - 0.96616536092060675855e+03, - 0.26736619130174250358e+03, - -0.11661372510304083789e+04, - 0.52974309238878191763e+02, - 0.78312816421464879113e+03, - 0.28773661151709557515e+02, - -0.40330997897791286277e+03, - -0.51398707107823668139e+03, - 0.60423792114750710880e+03, - 0.67510875956125266839e+03, - -0.10072272114960854879e+04, - -0.27124934066949498401e+03, - 0.92547274812581406422e+03, - -0.56105612654461850752e+02, - -0.48310049967175024221e+03, - -0.16150350293402689772e+03, - 0.40004507503860696715e+03, - 0.47642282530118700379e+03, - -0.81817464102933854520e+03, - -0.25103705999795329262e+03, - 0.10795581917285644522e+04, - -0.32764017714557473937e+03, - -0.75481957737960453869e+03, - 0.55349796104383449347e+03, - 0.29356022232338830236e+03, - -0.28734141809859283967e+03, - -0.29793047776752399614e+03, - 0.14484168381355991073e+03, - 0.59723486559807065532e+03, - -0.52271058613424145278e+03, - -0.51477136576290445191e+03, - 0.98563454167327802224e+03, - -0.10211277192367492717e+03, - -0.89730775951992382033e+03, - 0.65073357512753102583e+03, - 0.33680333847285311322e+03, - -0.62913957724827298534e+03, - 0.46665230595018464044e+02, - 0.31383525583046832708e+03, - 0.35673524107828853857e+02, - -0.29646928381339051839e+03, - -0.14241360800593847102e+03, - 0.60935834390430534313e+03, - -0.20423618042592931943e+03, - -0.67713601535843292822e+03, - 0.79217686349503401289e+03, - 0.14354304558692365390e+03, - -0.95813554218817080255e+03, - 0.60010512048003818109e+03, - 0.45262426846325712404e+03, - -0.87373972937534335870e+03, - 0.24424238615255669060e+03, - 0.52737743505026969615e+03, - -0.52117086419327813474e+03, - -0.51187803512816643092e+02, - 0.34085622350096338096e+03, - -0.87205249680237812981e+02, - -0.16133276391697813779e+03, - -0.10973775522422803519e+02, - 0.26567609308691260139e+03, - -0.77845662171973756926e+02, - -0.39364926550612005940e+03, - 0.45445588252220852610e+03, - 0.13244794508137192679e+03, - -0.69959280226870907882e+03, - 0.47488199392826982148e+03, - 0.38117273192811234139e+03, - -0.87524556501911524720e+03, - 0.37181152928701703786e+03, - 0.59646571892496820055e+03, - -0.91735263110495213823e+03, - 0.20590041714696195640e+03, - 0.73857903620287879676e+03, - -0.85452633938618009779e+03, - 0.30229949916716300606e+02, - 0.79846035095250260838e+03, - -0.72741561616606293228e+03, - -0.12030655441314164023e+03, - 0.78808417338422168541e+03, - -0.57435315336582800683e+03, - -0.22991063851849150979e+03, - 0.72949858069915285341e+03, - -0.42394997964220664244e+03, - -0.29764843425335504890e+03, - 0.64628583971618809301e+03, - -0.29319089903120180907e+03, - -0.33177866105842844036e+03, - 0.55844963036279705193e+03, - -0.18875454898976235540e+03, - -0.34476339375300739221e+03, - 0.48022470805189806242e+03, - -0.10961261850864147505e+03, - -0.34973927405686384873e+03, - 0.41977523929793210300e+03, - -0.49684081273853635707e+02, - -0.35839199537384212135e+03, - 0.37980369691940614985e+03, - -0.41148529322276880293e+03, - 0.12560658989769081018e+02, - 0.85092166690561975884e+03, - -0.75852143540292547641e+03, - -0.14061224101176730983e+03, - 0.92393972430551366415e+03, - -0.65366405287769418919e+03, - -0.32198980427578544550e+03, - 0.97524094803600917203e+03, - -0.49798332321307611892e+03, - -0.52205918022217838370e+03, - 0.98415929273715198633e+03, - -0.28450354784841061928e+03, - -0.72266083247750304963e+03, - 0.92684728178128580112e+03, - -0.14078658967506653354e+02, - -0.89513507739693920939e+03, - 0.78013799263854355104e+03, - 0.29910225953936088672e+03, - -0.10005363865286560667e+04, - 0.52852739066211393038e+03, - 0.62207370547871698818e+03, - -0.99385534818083954178e+03, - 0.17431675078883992569e+03, - 0.90019182876093088908e+03, - -0.83426862169760522647e+03, - -0.25068913978314313340e+03, - 0.10606440120552229018e+04, - -0.50235837229529727210e+03, - -0.67620972544460710196e+03, - 0.10268747266766270059e+04, - -0.22191788547158804334e+02, - -0.99466486291058038205e+03, - 0.74675991424336075397e+03, - 0.51923837424727219059e+03, - -0.10816863151357240440e+04, - 0.23153464936463348067e+03, - 0.96926063386061957772e+03, - -0.84215438934030339624e+03, - -0.40829959991178310474e+03, - 0.11411342636528092953e+04, - -0.27624361278933173480e+03, - -0.95672150194309108429e+03, - 0.89101472067500526464e+03, - 0.46152314567248492949e+03, - -0.11477388497009490038e+04, - 0.22655382616994216960e+03, - 0.10605959412407662512e+04, - -0.79734078614109580485e+03, - -0.60857754301237594063e+03, - 0.11636881077437396925e+04, - 0.26903451772979746437e+02, - -0.11667587564395932986e+04, - 0.59249811919366118218e+03, - 0.91434938584672966044e+03, - -0.10192088599648900527e+04, - -0.41653024456026048483e+03, - 0.12527075953762391691e+04, - -0.11833271845912142339e+03, - -0.11925767912011810949e+04, - 0.65697278617039012261e+03, - 0.96149059934281285678e+03, - -0.10300290951773467896e+04, - -0.54643702665938167229e+03, - 0.12776597141732218006e+04, - 0.11093298283441279750e+03, - -0.13111609788287657921e+04, - 0.35869705041419359759e+03, - 0.12381762689837230482e+04, - -0.72823167056585384671e+03, - -0.10145535703516407011e+04, - 0.10537588400278798417e+04, - 0.76794950301127323655e+03, - -0.12442251881078580027e+04, - -0.45452445365951621170e+03, - 0.13911590145861960082e+04, - 0.18923860117347774690e+03, - -0.14279983818386508574e+04, - 0.90126867544286540124e+02, - 0.14594591339373826031e+04, - -0.28748878544538962387e+03, - -0.14232290974535080750e+04, - 0.48057136267696296272e+03, - 0.14217827875381522063e+04, - -0.58402726579344232505e+03, - -0.13869718610875827380e+04, - 0.68083778014593394801e+03, - 0.14133266555520797283e+04, - -0.68623475819972122736e+03, - -0.14238225930447968040e+04, - 0.67974524717745816815e+03, - 0.15027265238029319789e+04, - -0.57081117881614932230e+03, - -0.15607438826616003098e+04, - 0.43243148433268231656e+03, - 0.16660834664151975630e+04, - -0.17001091464525129027e+03, - -0.17086017045583475920e+04, - -0.14091889702713490351e+03, - 0.17304830354067214557e+04, - 0.57927083966805889759e+03, - -0.15938900821518216162e+04, - -0.10334942160615487410e+04, - 0.13204817735714611899e+04, - 0.15197136453306557087e+04, - -0.77733039179649063044e+03, - -0.18387891717357786092e+04, - 0.43076936383720443757e+02, - 0.19142867664647646961e+04, - 0.87722559778981019463e+03, - -0.15011549566530804896e+04, - -0.16782239675791936406e+04, - 0.60946814630898586529e+03, - 0.20920223209298828806e+04, - 0.69344196075596437367e+03, - -0.16730753020507468136e+04, - -0.18464450953026373554e+04, - 0.39526600463115147477e+03, - 0.22032826532252006473e+04, - 0.13503540473844391272e+04, - -0.11291054418021026322e+04, - -0.23483079704302554092e+04, - -0.94907555011927081523e+03, - 0.15271691116475888066e+04, - 0.24835204420598156503e+04, - 0.98180694103933990391e+03, - -0.14953625778966727466e+04, - -0.26562501808923980207e+04, - -0.15159857943570088992e+04, - 0.92259270181117551601e+03, - 0.27166922547707945341e+04, - 0.25744424286680427940e+04, - 0.67120570571876771737e+03, - -0.17079181218724279461e+04, - -0.31598590970118666519e+04, - -0.29845882845116561839e+04, - -0.13917648267822473827e+04, - 0.83180524353858629638e+03, - 0.28359020329080281044e+04, - 0.40780211207808520157e+04, - 0.44284472332890381949e+04, - 0.40675083525366208050e+04, - 0.33057878353938840519e+04, - 0.24340107108313281969e+04, - 0.16469284940207928685e+04, - 0.10338666461503366918e+04, - 0.60621423053855357921e+03, - 0.33368689242921612959e+03, - 0.17309188863851568385e+03, - 0.84870103284929840015e+02, - 0.39429999126819581079e+02, - 0.17391908424363162311e+02, - 0.72948268262322182309e+01, - 0.29134279085654544161e+01, - 0.11091426822519141471e+01, + -0.34391971950243927836e+2, + 0.3846547955852729217e+2, + -0.16813409445007788889e+2, + -0.87726273872088480488e+1, + 0.17792307712733720138e+2, + -0.37983357019243229047e+1, + -0.20745540802139537107e+2, + 0.34811726200790111818e+2, + -0.22777676918724413468e+2, + -0.12721827921379508908e+2, + 0.51810793843385518187e+2, + -0.67876641220370814267e+2, + 0.4548181254061250911e+2, + 0.92274893251954370754e+1, + -0.68652454292222955701e+2, + 0.98921298228681024511e+2, + -0.78412695821664314622e+2, + 0.12506414120825819936e+2, + 0.67707316983120236387e+2, + -0.11981090163288436656e+3, + 0.113412887589313641e+3, + -0.46970640588103940161e+2, + -0.48696436520292934347e+2, + 0.12556253769912414953e+3, + -0.14234535960666184451e+3, + 0.87242224832225133468e+2, + 0.15022066182481047747e+2, + -0.11400660564479072434e+3, + 0.159190478447576794e+3, + -0.12561351444130571053e+3, + 0.27912417129404584415e+2, + 0.86428406068658134132e+2, + -0.16015700075838734051e+3, + 0.15545518151742987811e+3, + -0.73224653533236548242e+2, + -0.46518753922822497771e+2, + 0.14450292197949690376e+3, + -0.17168242432331339842e+3, + 0.1140972281260611112e+3, + 0.10760336069527826908e+3, + -0.26716076282619235371e+3, + 0.20753931731531201876e+3, + -0.25611333711022641779e+2, + -0.15033961766718277886e+3, + 0.27210834769057606763e+3, + -0.23943769321207207668e+3, + 0.10653582130500842595e+3, + 0.99952260325863448998e+2, + -0.23775310403480918353e+3, + 0.27590604123342501452e+3, + -0.15524768128674904233e+3, + -0.25308285024045666489e+2, + 0.21338591432632432543e+3, + -0.27408297330016569049e+3, + 0.21420931129055477982e+3, + -0.245884356427398032e+2, + -0.15928356864932820258e+3, + 0.28120418451608355781e+3, + -0.23860716611415253396e+3, + 0.9107343364157352994e+2, + 0.12410887184207679468e+3, + -0.25614253437597022867e+3, + 0.27374477854726637815e+3, + -0.12796266461411332216e+3, + -0.66898007409122115519e+2, + 0.24664065581362436319e+3, + -0.27694289062225567477e+3, + 0.17896045884029769013e+3, + 0.34558884479272876433e+2, + -0.21144933107501449854e+3, + 0.29465557614494377958e+3, + -0.19991844394395579343e+3, + 0.15503013124695117497e+2, + 0.1975346717147982929e+3, + -0.28481786219120283477e+3, + 0.23585740441884414054e+3, + -0.37983420622258535104e+2, + -0.1627860424391701315e+3, + 0.29381514651383514547e+3, + -0.24356171608397190198e+3, + 0.76610982458101375414e+2, + 0.15309315667358026758e+3, + -0.27933922400654898865e+3, + 0.26828097336982301613e+3, + -0.87227082528977916809e+2, + -0.12609109546107131905e+3, + 0.28560829066365920426e+3, + -0.27073288718524696606e+3, + 0.10468297742852334409e+3, + 0.10543528314354969666e+3, + -0.3165699748991316369e+3, + 0.19816078213405069164e+3, + -0.27842271675186702851e+3, + -0.41159152139305774654e+3, + -0.23146922071683999889e+3, + -0.11010942791061834214e+4, + -0.10913609557217976089e+4, + -0.15328283575014609141e+4, + -0.23112003287915763394e+4, + -0.19241948697474481378e+4, + -0.21503238651472397578e+4, + -0.1534108568565050291e+4, + -0.12176370095140171657e+3, + 0.41829871070782951392e+3, + 0.16044644708620733127e+4, + 0.17207925966530035566e+4, + 0.56282108027907838732e+3, + -0.52118617133388596585e+2, + -0.13708851564900048743e+4, + -0.15084422660195161825e+4, + -0.1498743272492662868e+3, + 0.49545514628036204385e+3, + 0.13971489305697439249e+4, + 0.93493316767500755304e+3, + -0.80040723570197962999e+3, + -0.98484045680509552767e+3, + -0.78732206884612344311e+3, + 0.26716136907249284604e+3, + 0.15010967300556892496e+4, + 0.343836565284900189e+3, + -0.68385508245654659731e+3, + -0.84923410496771111866e+3, + -0.51449038524546131157e+3, + 0.11187601899747678544e+4, + 0.90821571245060545152e+3, + -0.62231361681020223386e+3, + -0.72675495126109274224e+3, + -0.44038380585454001448e+3, + 0.71908570498772337487e+3, + 0.10670119822394872244e+4, + -0.72475693142566103688e+3, + -0.87352090951436514388e+3, + 0.17277132100818906224e+3, + 0.59378438008503826495e+3, + 0.64564930085685716676e+3, + -0.75604305992150034399e+3, + -0.90580203256732966111e+3, + 0.85677348252973581566e+3, + 0.61218854561858393026e+3, + -0.36970518315468945048e+3, + -0.55555220734553688544e+3, + -0.23835785995601125364e+3, + 0.96616536092060675855e+3, + 0.26736619130174250358e+3, + -0.11661372510304083789e+4, + 0.52974309238878191763e+2, + 0.78312816421464879113e+3, + 0.28773661151709557515e+2, + -0.40330997897791286277e+3, + -0.51398707107823668139e+3, + 0.6042379211475071088e+3, + 0.67510875956125266839e+3, + -0.10072272114960854879e+4, + -0.27124934066949498401e+3, + 0.92547274812581406422e+3, + -0.56105612654461850752e+2, + -0.48310049967175024221e+3, + -0.16150350293402689772e+3, + 0.40004507503860696715e+3, + 0.47642282530118700379e+3, + -0.8181746410293385452e+3, + -0.25103705999795329262e+3, + 0.10795581917285644522e+4, + -0.32764017714557473937e+3, + -0.75481957737960453869e+3, + 0.55349796104383449347e+3, + 0.29356022232338830236e+3, + -0.28734141809859283967e+3, + -0.29793047776752399614e+3, + 0.14484168381355991073e+3, + 0.59723486559807065532e+3, + -0.52271058613424145278e+3, + -0.51477136576290445191e+3, + 0.98563454167327802224e+3, + -0.10211277192367492717e+3, + -0.89730775951992382033e+3, + 0.65073357512753102583e+3, + 0.33680333847285311322e+3, + -0.62913957724827298534e+3, + 0.46665230595018464044e+2, + 0.31383525583046832708e+3, + 0.35673524107828853857e+2, + -0.29646928381339051839e+3, + -0.14241360800593847102e+3, + 0.60935834390430534313e+3, + -0.20423618042592931943e+3, + -0.67713601535843292822e+3, + 0.79217686349503401289e+3, + 0.1435430455869236539e+3, + -0.95813554218817080255e+3, + 0.60010512048003818109e+3, + 0.45262426846325712404e+3, + -0.8737397293753433587e+3, + 0.2442423861525566906e+3, + 0.52737743505026969615e+3, + -0.52117086419327813474e+3, + -0.51187803512816643092e+2, + 0.34085622350096338096e+3, + -0.87205249680237812981e+2, + -0.16133276391697813779e+3, + -0.10973775522422803519e+2, + 0.26567609308691260139e+3, + -0.77845662171973756926e+2, + -0.3936492655061200594e+3, + 0.4544558825222085261e+3, + 0.13244794508137192679e+3, + -0.69959280226870907882e+3, + 0.47488199392826982148e+3, + 0.38117273192811234139e+3, + -0.8752455650191152472e+3, + 0.37181152928701703786e+3, + 0.59646571892496820055e+3, + -0.91735263110495213823e+3, + 0.2059004171469619564e+3, + 0.73857903620287879676e+3, + -0.85452633938618009779e+3, + 0.30229949916716300606e+2, + 0.79846035095250260838e+3, + -0.72741561616606293228e+3, + -0.12030655441314164023e+3, + 0.78808417338422168541e+3, + -0.57435315336582800683e+3, + -0.22991063851849150979e+3, + 0.72949858069915285341e+3, + -0.42394997964220664244e+3, + -0.2976484342533550489e+3, + 0.64628583971618809301e+3, + -0.29319089903120180907e+3, + -0.33177866105842844036e+3, + 0.55844963036279705193e+3, + -0.1887545489897623554e+3, + -0.34476339375300739221e+3, + 0.48022470805189806242e+3, + -0.10961261850864147505e+3, + -0.34973927405686384873e+3, + 0.419775239297932103e+3, + -0.49684081273853635707e+2, + -0.35839199537384212135e+3, + 0.37980369691940614985e+3, + -0.41148529322276880293e+3, + 0.12560658989769081018e+2, + 0.85092166690561975884e+3, + -0.75852143540292547641e+3, + -0.14061224101176730983e+3, + 0.92393972430551366415e+3, + -0.65366405287769418919e+3, + -0.3219898042757854455e+3, + 0.97524094803600917203e+3, + -0.49798332321307611892e+3, + -0.5220591802221783837e+3, + 0.98415929273715198633e+3, + -0.28450354784841061928e+3, + -0.72266083247750304963e+3, + 0.92684728178128580112e+3, + -0.14078658967506653354e+2, + -0.89513507739693920939e+3, + 0.78013799263854355104e+3, + 0.29910225953936088672e+3, + -0.10005363865286560667e+4, + 0.52852739066211393038e+3, + 0.62207370547871698818e+3, + -0.99385534818083954178e+3, + 0.17431675078883992569e+3, + 0.90019182876093088908e+3, + -0.83426862169760522647e+3, + -0.2506891397831431334e+3, + 0.10606440120552229018e+4, + -0.5023583722952972721e+3, + -0.67620972544460710196e+3, + 0.10268747266766270059e+4, + -0.22191788547158804334e+2, + -0.99466486291058038205e+3, + 0.74675991424336075397e+3, + 0.51923837424727219059e+3, + -0.1081686315135724044e+4, + 0.23153464936463348067e+3, + 0.96926063386061957772e+3, + -0.84215438934030339624e+3, + -0.40829959991178310474e+3, + 0.11411342636528092953e+4, + -0.2762436127893317348e+3, + -0.95672150194309108429e+3, + 0.89101472067500526464e+3, + 0.46152314567248492949e+3, + -0.11477388497009490038e+4, + 0.2265538261699421696e+3, + 0.10605959412407662512e+4, + -0.79734078614109580485e+3, + -0.60857754301237594063e+3, + 0.11636881077437396925e+4, + 0.26903451772979746437e+2, + -0.11667587564395932986e+4, + 0.59249811919366118218e+3, + 0.91434938584672966044e+3, + -0.10192088599648900527e+4, + -0.41653024456026048483e+3, + 0.12527075953762391691e+4, + -0.11833271845912142339e+3, + -0.11925767912011810949e+4, + 0.65697278617039012261e+3, + 0.96149059934281285678e+3, + -0.10300290951773467896e+4, + -0.54643702665938167229e+3, + 0.12776597141732218006e+4, + 0.1109329828344127975e+3, + -0.13111609788287657921e+4, + 0.35869705041419359759e+3, + 0.12381762689837230482e+4, + -0.72823167056585384671e+3, + -0.10145535703516407011e+4, + 0.10537588400278798417e+4, + 0.76794950301127323655e+3, + -0.12442251881078580027e+4, + -0.4545244536595162117e+3, + 0.13911590145861960082e+4, + 0.1892386011734777469e+3, + -0.14279983818386508574e+4, + 0.90126867544286540124e+2, + 0.14594591339373826031e+4, + -0.28748878544538962387e+3, + -0.1423229097453508075e+4, + 0.48057136267696296272e+3, + 0.14217827875381522063e+4, + -0.58402726579344232505e+3, + -0.1386971861087582738e+4, + 0.68083778014593394801e+3, + 0.14133266555520797283e+4, + -0.68623475819972122736e+3, + -0.1423822593044796804e+4, + 0.67974524717745816815e+3, + 0.15027265238029319789e+4, + -0.5708111788161493223e+3, + -0.15607438826616003098e+4, + 0.43243148433268231656e+3, + 0.1666083466415197563e+4, + -0.17001091464525129027e+3, + -0.1708601704558347592e+4, + -0.14091889702713490351e+3, + 0.17304830354067214557e+4, + 0.57927083966805889759e+3, + -0.15938900821518216162e+4, + -0.1033494216061548741e+4, + 0.13204817735714611899e+4, + 0.15197136453306557087e+4, + -0.77733039179649063044e+3, + -0.18387891717357786092e+4, + 0.43076936383720443757e+2, + 0.19142867664647646961e+4, + 0.87722559778981019463e+3, + -0.15011549566530804896e+4, + -0.16782239675791936406e+4, + 0.60946814630898586529e+3, + 0.20920223209298828806e+4, + 0.69344196075596437367e+3, + -0.16730753020507468136e+4, + -0.18464450953026373554e+4, + 0.39526600463115147477e+3, + 0.22032826532252006473e+4, + 0.13503540473844391272e+4, + -0.11291054418021026322e+4, + -0.23483079704302554092e+4, + -0.94907555011927081523e+3, + 0.15271691116475888066e+4, + 0.24835204420598156503e+4, + 0.98180694103933990391e+3, + -0.14953625778966727466e+4, + -0.26562501808923980207e+4, + -0.15159857943570088992e+4, + 0.92259270181117551601e+3, + 0.27166922547707945341e+4, + 0.2574442428668042794e+4, + 0.67120570571876771737e+3, + -0.17079181218724279461e+4, + -0.31598590970118666519e+4, + -0.29845882845116561839e+4, + -0.13917648267822473827e+4, + 0.83180524353858629638e+3, + 0.28359020329080281044e+4, + 0.40780211207808520157e+4, + 0.44284472332890381949e+4, + 0.4067508352536620805e+4, + 0.33057878353938840519e+4, + 0.24340107108313281969e+4, + 0.16469284940207928685e+4, + 0.10338666461503366918e+4, + 0.60621423053855357921e+3, + 0.33368689242921612959e+3, + 0.17309188863851568385e+3, + 0.84870103284929840015e+2, + 0.39429999126819581079e+2, + 0.17391908424363162311e+2, + 0.72948268262322182309e+1, + 0.29134279085654544161e+1, + 0.11091426822519141471e+1, 0.40285762516062506577, 0.13970487389330768502, - 0.46282781264135187949e-01, - 0.14654543062130723219e-01, - 0.44362686359899969335e-02, - 0.12842785412425492854e-02, - 0.35559727568309644529e-03, - 0.94175726007171954731e-04, - 0.23855471542258400129e-04, - 0.57790658737616999339e-05, - 0.13386466618221800977e-05, - 0.29641311035733535162e-06, - 0.62719543998479677134e-07, - 0.12676500948453908969e-07, - 0.24460719575274174134e-08, - 0.45035905579963747570e-09, + 0.46282781264135187949e-1, + 0.14654543062130723219e-1, + 0.44362686359899969335e-2, + 0.12842785412425492854e-2, + 0.35559727568309644529e-3, + 0.94175726007171954731e-4, + 0.23855471542258400129e-4, + 0.57790658737616999339e-5, + 0.13386466618221800977e-5, + 0.29641311035733535162e-6, + 0.62719543998479677134e-7, + 0.12676500948453908969e-7, + 0.24460719575274174134e-8, + 0.4503590557996374757e-9, 0.79063771261109339742e-10, - 0.13224974110696352760e-10, + 0.1322497411069635276e-10, 0.21059043343965461983e-11, 0.31892739186175708688e-12, 0.45886889130385712559e-13, @@ -34863,7 +34865,7 @@ function ESERK4ConstantCache(zprev) 0.12378092354338869334e-19, 0.11169925581964594126e-20, 0.94123026626129361292e-22, - 0.73819182470238482830e-23, + 0.7381918247023848283e-23, 0.53684811127589463904e-24, 0.36048391738553283529e-25, 0.22239564063318855407e-26, @@ -34875,230 +34877,230 @@ function ESERK4ConstantCache(zprev) 0.13645971191245563393e-34, 0.36231307632129651743e-36, 0.79412561042990551332e-38, - 0.13795801131494998190e-39, + 0.1379580113149499819e-39, 0.17810760075101064407e-41, 0.15191325786184074156e-43, 0.64209422094975009941e-46, - 0.77554641687330259231e-02, - -0.13449266435696966004e-01, - 0.92289681553286827959e-02, - -0.34457973691621912767e-02, - -0.74482249076185142334e-03, - 0.35201833764401742506e-02, - -0.39507238206488021204e-02, - 0.45808684529531056712e-02, - -0.56368100506861106014e-02, - 0.89869772656384731835e-02, - -0.12803031956138291245e-01, - 0.16764291914427586344e-01, - -0.18018674518482047375e-01, - 0.16989923568639292428e-01, - -0.12911944357090686733e-01, - 0.84553423375255155892e-02, - -0.40361545286663434717e-02, - 0.18863083746871330514e-02, - -0.76992838231467321079e-03, - 0.11316175139968408757e-02, - -0.87124076348826383527e-03, - 0.87771588935961063638e-03, - -0.30613544503523226715e-03, - 0.10929629340925863228e-02, - -0.23949569289005551674e-02, - 0.50321040582349567047e-02, - -0.66989380159465658840e-02, - 0.75233253694572815862e-02, - -0.59628126379242295599e-02, - 0.40768662596205361773e-02, - -0.22453014555704887793e-02, - 0.30770437919381949353e-02, - -0.54994004335449557866e-02, - 0.93114307745549712569e-02, - -0.10945929239807345931e-01, - 0.97603888231818855536e-02, - -0.44653056349865539315e-02, - -0.15802973009022324227e-02, - 0.61938335181794977255e-02, - -0.53245632992431467939e-02, - -0.28991203644938709971e-03, - 0.94530091545726429442e-02, - -0.16711625744934673760e-01, - 0.19539575006475337626e-01, - -0.15644615520114632523e-01, - 0.86568236748151682763e-02, - -0.20037804643494986669e-02, - 0.11238807953484388630e-02, - -0.59597873657391770355e-02, - 0.14803951901572734093e-01, - -0.20972143134522818614e-01, - 0.20348447558123268497e-01, - -0.10828425923450171395e-01, - -0.44470015697990420561e-02, - 0.16700614430040127550e-01, - -0.25081152215342336631e-01, - 0.13845614774180435916e-01, - -0.11911415953471478704e-01, - -0.22942620274740713193e-01, - -0.24109925831742929671e-02, - -0.48653077224424662317e-01, - -0.37237553046773716470e-01, - -0.50779896687425579715e-01, - -0.79729474059435992417e-01, - -0.48252241721734916158e-01, - -0.65024344997835104021e-01, - -0.21110440660230087029e-01, - -0.19037597656227761003e-03, - 0.43208606543729884131e-01, - 0.33252398938414397256e-01, - 0.62928956095783861180e-01, - -0.12350497593336584937e-01, - -0.52154738336505340052e-02, - -0.54000367839305542239e-01, - -0.28594666672604532320e-01, - -0.36045545484928867910e-02, - 0.39326910240906905181e-01, - 0.26193791115531411817e-01, - 0.26233410564501295076e-01, - -0.37262250594269970272e-01, - -0.27977941619616569086e-01, - -0.20116617663804767929e-01, - 0.29211819532155704898e-01, - 0.25405679817623798983e-01, - 0.19895310812375943676e-01, - -0.31736726311403333500e-01, - -0.35804838876065094022e-01, - 0.19264562691933200672e-01, - 0.31428305508447991305e-02, - 0.47517354314171832141e-01, - -0.27826421272220572961e-01, - -0.35476160025034446377e-01, - 0.12761258891033262081e-01, - 0.50380455158090791529e-02, - 0.35210425820251425866e-01, - -0.14843043501860185562e-01, - -0.39309728573759875059e-01, - 0.13892539563875525022e-01, - 0.18758074257758758363e-01, - 0.14256704793603247605e-01, - -0.19787711963552175043e-01, - -0.21590488832400812902e-01, - 0.97087332700846705469e-02, - 0.31928179254562420730e-01, - -0.86363639894585907814e-02, - -0.30374477755127023831e-01, - 0.76221090124329463414e-02, - 0.15912212742524290549e-01, - 0.10402939977013251488e-01, - -0.15707063586544934425e-01, - -0.25634485522564670612e-01, - 0.31780245362207658333e-01, - 0.11500606918789998967e-01, - -0.19988401280142634175e-01, - -0.17223334024143447524e-01, - 0.25696490052566939299e-01, - -0.18942514498513350098e-02, - 0.87402530152164790295e-02, - -0.35086806811411977436e-01, - 0.16741326423780376192e-01, - 0.28835118457959395960e-01, - -0.28955375707860400714e-01, - -0.99126124469226459257e-02, - 0.19634517821773618540e-01, - 0.34020909343701714878e-02, - -0.38389339106673575977e-02, - -0.20484161688021727127e-01, - 0.19001057083965700728e-01, - 0.88659261344361424417e-02, - -0.96167397550137884848e-02, - -0.23312826423235254170e-01, - 0.33472045884151625794e-01, - 0.89581705767210158329e-04, - -0.26165473375948152673e-01, - 0.81863143602442910857e-02, - 0.19185263507042780301e-01, - -0.14124008435963168739e-01, - -0.61462499861236067136e-02, - 0.61454660066275748273e-02, - 0.24428664964555018430e-02, - 0.13658813528006396101e-01, - -0.42530132149610488934e-01, - 0.39407838772995688881e-01, - 0.20467477423806578894e-03, - -0.28804036393557649887e-01, - 0.17826581212489003153e-01, - 0.13403216539607178300e-02, - 0.11575019209646916774e-01, - -0.44678496580796693560e-01, - 0.54728566286404184416e-01, - -0.31390686840113056488e-01, - 0.65964844241573972541e-02, - -0.27627579509413129066e-02, - 0.48271449296590236006e-02, - 0.60168398870746970727e-02, - -0.17472019012726255904e-01, - 0.71248235199815818444e-02, - 0.16451244623325391586e-01, - -0.20365641828448376172e-01, - -0.48022338704093682146e-02, - 0.27999146401474030166e-01, - -0.19350485756774164769e-01, - -0.75427940868647569417e-02, - 0.13226211749695718570e-01, - 0.13843658404219255295e-01, - -0.40832893167565526005e-01, - 0.33107713181392967039e-01, - 0.18331298126514846986e-02, - -0.25424711100045811057e-01, - 0.16366224403924923420e-01, - 0.71512927884402506529e-02, - -0.15203410086944701973e-01, - 0.31953479104843735166e-02, - 0.83277198545654261552e-02, - -0.43922945018929019506e-02, - -0.64984150253288887333e-02, - 0.74716764170742805060e-02, - 0.36822702160574862125e-02, - -0.14413643220593184632e-01, - 0.16356957454328906187e-01, - -0.14690365725832961810e-01, - 0.16545270148546467603e-01, - -0.17750593085131653737e-01, - 0.84632038862705958465e-02, - 0.10229624457620082115e-01, - -0.23360785877694821566e-01, - 0.19321659498483766126e-01, - -0.52470235976069500017e-02, - -0.85396089463239438673e-03, - -0.71917371766659450236e-02, - 0.15135604211101603631e-01, - -0.60729610992005965062e-02, - -0.16682001686066642854e-01, - 0.30833365407550550330e-01, - -0.20665820001613127710e-01, - -0.33613816541331054122e-02, - 0.15448823014239538784e-01, - -0.39052346107364445393e-02, - -0.15457490032078068445e-01, - 0.18158549115648976030e-01, + 0.77554641687330259231e-2, + -0.13449266435696966004e-1, + 0.92289681553286827959e-2, + -0.34457973691621912767e-2, + -0.74482249076185142334e-3, + 0.35201833764401742506e-2, + -0.39507238206488021204e-2, + 0.45808684529531056712e-2, + -0.56368100506861106014e-2, + 0.89869772656384731835e-2, + -0.12803031956138291245e-1, + 0.16764291914427586344e-1, + -0.18018674518482047375e-1, + 0.16989923568639292428e-1, + -0.12911944357090686733e-1, + 0.84553423375255155892e-2, + -0.40361545286663434717e-2, + 0.18863083746871330514e-2, + -0.76992838231467321079e-3, + 0.11316175139968408757e-2, + -0.87124076348826383527e-3, + 0.87771588935961063638e-3, + -0.30613544503523226715e-3, + 0.10929629340925863228e-2, + -0.23949569289005551674e-2, + 0.50321040582349567047e-2, + -0.6698938015946565884e-2, + 0.75233253694572815862e-2, + -0.59628126379242295599e-2, + 0.40768662596205361773e-2, + -0.22453014555704887793e-2, + 0.30770437919381949353e-2, + -0.54994004335449557866e-2, + 0.93114307745549712569e-2, + -0.10945929239807345931e-1, + 0.97603888231818855536e-2, + -0.44653056349865539315e-2, + -0.15802973009022324227e-2, + 0.61938335181794977255e-2, + -0.53245632992431467939e-2, + -0.28991203644938709971e-3, + 0.94530091545726429442e-2, + -0.1671162574493467376e-1, + 0.19539575006475337626e-1, + -0.15644615520114632523e-1, + 0.86568236748151682763e-2, + -0.20037804643494986669e-2, + 0.1123880795348438863e-2, + -0.59597873657391770355e-2, + 0.14803951901572734093e-1, + -0.20972143134522818614e-1, + 0.20348447558123268497e-1, + -0.10828425923450171395e-1, + -0.44470015697990420561e-2, + 0.1670061443004012755e-1, + -0.25081152215342336631e-1, + 0.13845614774180435916e-1, + -0.11911415953471478704e-1, + -0.22942620274740713193e-1, + -0.24109925831742929671e-2, + -0.48653077224424662317e-1, + -0.3723755304677371647e-1, + -0.50779896687425579715e-1, + -0.79729474059435992417e-1, + -0.48252241721734916158e-1, + -0.65024344997835104021e-1, + -0.21110440660230087029e-1, + -0.19037597656227761003e-3, + 0.43208606543729884131e-1, + 0.33252398938414397256e-1, + 0.6292895609578386118e-1, + -0.12350497593336584937e-1, + -0.52154738336505340052e-2, + -0.54000367839305542239e-1, + -0.2859466667260453232e-1, + -0.3604554548492886791e-2, + 0.39326910240906905181e-1, + 0.26193791115531411817e-1, + 0.26233410564501295076e-1, + -0.37262250594269970272e-1, + -0.27977941619616569086e-1, + -0.20116617663804767929e-1, + 0.29211819532155704898e-1, + 0.25405679817623798983e-1, + 0.19895310812375943676e-1, + -0.317367263114033335e-1, + -0.35804838876065094022e-1, + 0.19264562691933200672e-1, + 0.31428305508447991305e-2, + 0.47517354314171832141e-1, + -0.27826421272220572961e-1, + -0.35476160025034446377e-1, + 0.12761258891033262081e-1, + 0.50380455158090791529e-2, + 0.35210425820251425866e-1, + -0.14843043501860185562e-1, + -0.39309728573759875059e-1, + 0.13892539563875525022e-1, + 0.18758074257758758363e-1, + 0.14256704793603247605e-1, + -0.19787711963552175043e-1, + -0.21590488832400812902e-1, + 0.97087332700846705469e-2, + 0.3192817925456242073e-1, + -0.86363639894585907814e-2, + -0.30374477755127023831e-1, + 0.76221090124329463414e-2, + 0.15912212742524290549e-1, + 0.10402939977013251488e-1, + -0.15707063586544934425e-1, + -0.25634485522564670612e-1, + 0.31780245362207658333e-1, + 0.11500606918789998967e-1, + -0.19988401280142634175e-1, + -0.17223334024143447524e-1, + 0.25696490052566939299e-1, + -0.18942514498513350098e-2, + 0.87402530152164790295e-2, + -0.35086806811411977436e-1, + 0.16741326423780376192e-1, + 0.2883511845795939596e-1, + -0.28955375707860400714e-1, + -0.99126124469226459257e-2, + 0.1963451782177361854e-1, + 0.34020909343701714878e-2, + -0.38389339106673575977e-2, + -0.20484161688021727127e-1, + 0.19001057083965700728e-1, + 0.88659261344361424417e-2, + -0.96167397550137884848e-2, + -0.2331282642323525417e-1, + 0.33472045884151625794e-1, + 0.89581705767210158329e-4, + -0.26165473375948152673e-1, + 0.81863143602442910857e-2, + 0.19185263507042780301e-1, + -0.14124008435963168739e-1, + -0.61462499861236067136e-2, + 0.61454660066275748273e-2, + 0.2442866496455501843e-2, + 0.13658813528006396101e-1, + -0.42530132149610488934e-1, + 0.39407838772995688881e-1, + 0.20467477423806578894e-3, + -0.28804036393557649887e-1, + 0.17826581212489003153e-1, + 0.134032165396071783e-2, + 0.11575019209646916774e-1, + -0.4467849658079669356e-1, + 0.54728566286404184416e-1, + -0.31390686840113056488e-1, + 0.65964844241573972541e-2, + -0.27627579509413129066e-2, + 0.48271449296590236006e-2, + 0.60168398870746970727e-2, + -0.17472019012726255904e-1, + 0.71248235199815818444e-2, + 0.16451244623325391586e-1, + -0.20365641828448376172e-1, + -0.48022338704093682146e-2, + 0.27999146401474030166e-1, + -0.19350485756774164769e-1, + -0.75427940868647569417e-2, + 0.1322621174969571857e-1, + 0.13843658404219255295e-1, + -0.40832893167565526005e-1, + 0.33107713181392967039e-1, + 0.18331298126514846986e-2, + -0.25424711100045811057e-1, + 0.1636622440392492342e-1, + 0.71512927884402506529e-2, + -0.15203410086944701973e-1, + 0.31953479104843735166e-2, + 0.83277198545654261552e-2, + -0.43922945018929019506e-2, + -0.64984150253288887333e-2, + 0.7471676417074280506e-2, + 0.36822702160574862125e-2, + -0.14413643220593184632e-1, + 0.16356957454328906187e-1, + -0.1469036572583296181e-1, + 0.16545270148546467603e-1, + -0.17750593085131653737e-1, + 0.84632038862705958465e-2, + 0.10229624457620082115e-1, + -0.23360785877694821566e-1, + 0.19321659498483766126e-1, + -0.52470235976069500017e-2, + -0.85396089463239438673e-3, + -0.71917371766659450236e-2, + 0.15135604211101603631e-1, + -0.60729610992005965062e-2, + -0.16682001686066642854e-1, + 0.3083336540755055033e-1, + -0.2066582000161312771e-1, + -0.33613816541331054122e-2, + 0.15448823014239538784e-1, + -0.39052346107364445393e-2, + -0.15457490032078068445e-1, + 0.1815854911564897603e-1, 0.23832842001945717114, -0.27334104664374975213, - -0.14101491395697060560, + -0.1410149139569706056, 0.34250400037365968942, -0.11885726263138272907, -0.23909707779994379684, 0.33170044671370657596, - -0.52275020270297643810e-01, + -0.5227502027029764381e-1, -0.21990219527313417669, 0.11609937095331568369, - 0.32940272106507162420, + 0.3294027210650716242, -0.61530059858861541056, - 0.38895932814987166370, - 0.18807007663799540920, + 0.3889593281498716637, + 0.1880700766379954092, -0.52833924472986160126, 0.33603249111032701402, 0.10864939112408066035, -0.21600131776688888396, - -0.14508832318418771190, - 0.52997620751536855810, + -0.1450883231841877119, + 0.5299762075153685581, -0.38652866678356934127, -0.19602169058285850989, 0.61174655628521457107, @@ -35113,53 +35115,53 @@ function ESERK4ConstantCache(zprev) 0.21218493180220029948, 0.18410689234297361594, -0.28588759244288503014, - 0.59782460920845617580e-01, - 0.13526707457622993980, - -0.49720387358942491618e-01, - -0.67488082355166970072e-01, - -0.34642134149359432582e-01, + 0.5978246092084561758e-1, + 0.1352670745762299398, + -0.49720387358942491618e-1, + -0.67488082355166970072e-1, + -0.34642134149359432582e-1, 0.21590866906241656942, - -0.88712846227738284544e-01, + -0.88712846227738284544e-1, -0.27251188779935919815, 0.38487000081316696809, - 0.52558247332321113982e-02, + 0.52558247332321113982e-2, -0.40443701312099422651, 0.25618631338581804302, 0.28791219796504691208, -0.45627487159686186402, - -0.52800374909583872376e-02, + -0.52800374909583872376e-2, 0.49044983706591693817, -0.32425147510450141874, -0.22300594778066351598, 0.41423094308574759381, - -0.78837365157822109074e-01, + -0.78837365157822109074e-1, -0.16533708231689650536, - 0.42253864429721375157e-02, - 0.15236939100322638430, + 0.42253864429721375157e-2, + 0.1523693910032263843, 0.10053301014731248764, - -0.33958664725733855860, - 0.54641278710093263427e-01, + -0.3395866472573385586, + 0.54641278710093263427e-1, 0.43141151796556920228, -0.31312357096609211293, -0.30952543569226859121, 0.53118386859545640988, - -0.16230206600986441662e-01, + -0.16230206600986441662e-1, -0.38888772083802525259, - 0.90745134886660458462e-01, + 0.90745134886660458462e-1, 0.34399585158221890335, -0.16655610263083447942, -0.21334184428628960584, - 0.94377262757210228505e-01, + 0.94377262757210228505e-1, 0.21038303541364516969, - 0.88765884258644234261e-01, + 0.88765884258644234261e-1, -0.60772627942525780931, 0.36916322168706083851, 0.43131782114518307791, -0.57650370980912590824, - -0.10960622579991257872e-01, + -0.10960622579991257872e-1, 0.23724651284491893311, 0.13654809931001474221, - -0.91521359821682038427e-01, + -0.91521359821682038427e-1, -0.46112651437503326957, 0.44393069491522429981, 0.22499416167751909446, @@ -35168,25 +35170,25 @@ function ESERK4ConstantCache(zprev) 0.37541737611818115639, 0.39311030476930153288, -0.51025321406063006702, - -0.25014979174230182052e-01, - -0.66890988792511429928e-01, + -0.25014979174230182052e-1, + -0.66890988792511429928e-1, 0.50975980631599160375, - 0.20069181727225837014e-01, + 0.20069181727225837014e-1, -0.77530817412496089158, - 0.33165082678609558720, - 0.38087096759584510020, - -0.29235269176868240032e-01, - -0.19941757043431110330, + 0.3316508267860955872, + 0.3808709675958451002, + -0.29235269176868240032e-1, + -0.1994175704343111033, -0.47516572126239481344, 0.47788633146607345514, 0.43225776082514705267, -0.29219524369135735364, -0.49481203552406971546, - 0.97992548032823992288e-01, + 0.97992548032823992288e-1, 0.37521876251752650511, 0.35128433968110445162, -0.34820272934205021009, - -0.61937679920192723060, + -0.6193767992019272306, 0.27254125208051482865, 0.44218156035085759425, 0.31533246369455142366, @@ -35201,97 +35203,97 @@ function ESERK4ConstantCache(zprev) 0.52098723194895546484, 0.55886086913071342241, 0.37447241532462721691, - -0.55105965783315960516e-01, + -0.55105965783315960516e-1, -0.78972704665875359531, -0.61597708770541603762, 0.17397106871813278195, - 0.41387413205748835310, + 0.4138741320574883531, 0.83684699703156872896, 0.60194269950350764997, -0.57677426800061037948, -0.26292054682210719285, - -0.12700688975629239597e+01, + -0.12700688975629239597e+1, -0.43524553049374292701, - -0.38619112084383462602e-01, + -0.38619112084383462602e-1, 0.30255132701271469919, - 0.12038259019240535874e+01, - 0.95174541010507973660, - 0.13291112611459716675e+01, + 0.12038259019240535874e+1, + 0.9517454101050797366, + 0.13291112611459716675e+1, 0.89712121038224190706, 0.92786528581131133553, 0.42368672772897264522, 0.52463243021525740595, 0.13387823504696813592, 0.16984842856479140383, - 0.89075696989542180182e-01, - 0.28547308706221474067e-01, - -0.29553688378814543802e-01, + 0.89075696989542180182e-1, + 0.28547308706221474067e-1, + -0.29553688378814543802e-1, 0.13185004276900466613, - -0.15770607258707289300, + -0.157706072587072893, 0.13160634872049623012, - -0.35959902287414122202e-01, - -0.71424747471057467574e-01, + -0.35959902287414122202e-1, + -0.71424747471057467574e-1, 0.13796085760011073118, -0.13156935683084450273, - 0.68687277577567970588e-01, - -0.25024241640921340325e-02, - -0.10872396772540969881e-01, - -0.50038978691277012645e-01, - 0.15372152869334398950, + 0.68687277577567970588e-1, + -0.25024241640921340325e-2, + -0.10872396772540969881e-1, + -0.50038978691277012645e-1, + 0.1537215286933439895, -0.23163119751478883357, 0.21803316300744418621, - -0.93363661151776564107e-01, - -0.97918535239877826926e-01, + -0.93363661151776564107e-1, + -0.97918535239877826926e-1, 0.26483691735272424372, -0.31748393174183875409, 0.21648021711158599301, - 0.11200737279622265986e-02, + 0.11200737279622265986e-2, -0.23739078941046024007, 0.38109698777039480166, -0.36456383355726817985, 0.19730492974519761584, - 0.39413218555496482010e-01, + 0.3941321855549648201e-1, -0.23601317310978550679, 0.31057491589121632991, -0.24935884587565027015, 0.10890479611320054432, - 0.18578748308192886973e-01, - -0.58575753789782789016e-01, - -0.47194861277462469076e-02, + 0.18578748308192886973e-1, + -0.58575753789782789016e-1, + -0.47194861277462469076e-2, 0.12035792890083950313, -0.20109294659340093414, 0.17388666395457097469, - -0.24078829923342925934e-01, + -0.24078829923342925934e-1, -0.19243665989367894631, - 0.37486191215411468480, + 0.3748619121541146848, -0.42904890745304702371, 0.31682708266725850832, - -0.78235871037183241095e-01, + -0.78235871037183241095e-1, -0.18623868525813519481, 0.36362701529804575262, -0.38315784941890074222, - 0.24917569601520256350, - -0.36754315692814870653e-01, + 0.2491756960152025635, + -0.36754315692814870653e-1, -0.14780542009062755393, 0.22031573478649588149, -0.15917172439562268793, - 0.12339240092409034869e-01, + 0.12339240092409034869e-1, 0.13126313557479263316, -0.19056154636393629609, 0.13513724059543444356, -0.67895939569849872441, 0.98775900722997223014, -0.49699178541604599468, - -0.30462241433403366292e-01, + -0.30462241433403366292e-1, 0.21161104418072151923, -0.18546354172655538095, - -0.81090207650139356499e-01, + -0.81090207650139356499e-1, 0.17480348455389013718, - -0.89843868593324313632e-01, - -0.36650345674753004310, + -0.89843868593324313632e-1, + -0.3665034567475300431, 0.84693083704773852727, - -0.12642184820136743717e+01, - 0.12305263567886624010e+01, + -0.12642184820136743717e+1, + 0.1230526356788662401e+1, -0.88697520011588881772, 0.21751477027648216667, 0.33000518071203627235, @@ -35299,7 +35301,7 @@ function ESERK4ConstantCache(zprev) 0.64343645923886028104, -0.44760153571081839896, 0.14788646066575875104, - -0.95978886947036087807e-01, + -0.95978886947036087807e-1, 0.14385090262441943554, -0.34322468854106169545, 0.33092271435545989045, @@ -35307,3454 +35309,3454 @@ function ESERK4ConstantCache(zprev) -0.24362599158576228597, 0.54320505854121259315, -0.67432963975151338776, - 0.36579346639617071890, - 0.83645805694158567589e-01, + 0.3657934663961707189, + 0.83645805694158567589e-1, -0.56500496684836543082, 0.61640474568476477657, -0.31716911843326300868, -0.33408996492433357117, - 0.78947200432163955330, + 0.7894720043216395533, -0.87268932529927778496, 0.29642675814710750526, 0.53008485917416559019, - -0.13129042048497896467e+01, - 0.14266398488194327321e+01, + -0.13129042048497896467e+1, + 0.14266398488194327321e+1, -0.89702209224514695141, -0.18899660617711652733, - 0.10983901505535640375e+01, - -0.14718504145240254299e+01, + 0.10983901505535640375e+1, + -0.14718504145240254299e+1, 0.93971778779706982565, - 0.29455142712603844118e-01, + 0.29455142712603844118e-1, -0.98133034697202736751, - 0.11316867938734116450e+01, - -0.44882417309522648630, + 0.1131686793873411645e+1, + -0.4488241730952264863, -0.88286860020974933239, - 0.19487856125897009552e+01, - -0.21646603239115274064e+01, - 0.11822049990232588179e+01, + 0.19487856125897009552e+1, + -0.21646603239115274064e+1, + 0.11822049990232588179e+1, 0.63012254705355796869, - -0.21023379775806416703e+01, - 0.31759751891921164102e+01, - -0.15940922375181578730e+01, - 0.14688112084938211854e+01, - 0.33720674001411548026e+01, + -0.21023379775806416703e+1, + 0.31759751891921164102e+1, + -0.1594092237518157873e+1, + 0.14688112084938211854e+1, + 0.33720674001411548026e+1, 0.38162107132738715132, - 0.70125222860199922792e+01, - 0.51557837740935594795e+01, - 0.78356604656191057856e+01, - 0.10600639805600000187e+02, - 0.81437665305526039106e+01, - 0.79492296179400092626e+01, - 0.45646223943480341845e+01, - -0.15288441376043246933e+01, - -0.46639842467849081942e+01, - -0.63637281696508880557e+01, - -0.74352881729041255809e+01, - 0.79753905551860390655e-01, - 0.25070213780715779883e+01, - 0.60143742961614208298e+01, - 0.58146262539153328319e+01, - -0.10553324351355763966e+01, - -0.42322298990306874700e+01, - -0.50843369225117189814e+01, - -0.25289148173426903021e+01, - 0.41285427149216431530e+01, - 0.52665684792003961689e+01, - 0.17088992936228304398e+01, - -0.31798304635982486133e+01, - -0.43829877554132368189e+01, - -0.25653266813757396037e+01, - 0.47501147241432279955e+01, - 0.45391597104686649544e+01, - -0.18611460857784682954e+01, - -0.14586960390948038313e+01, - -0.59538150048449436369e+01, - 0.33939098894709633925e+01, - 0.53811625508605285262e+01, - -0.18098808964347128381e+01, + 0.70125222860199922792e+1, + 0.51557837740935594795e+1, + 0.78356604656191057856e+1, + 0.10600639805600000187e+2, + 0.81437665305526039106e+1, + 0.79492296179400092626e+1, + 0.45646223943480341845e+1, + -0.15288441376043246933e+1, + -0.46639842467849081942e+1, + -0.63637281696508880557e+1, + -0.74352881729041255809e+1, + 0.79753905551860390655e-1, + 0.25070213780715779883e+1, + 0.60143742961614208298e+1, + 0.58146262539153328319e+1, + -0.10553324351355763966e+1, + -0.423222989903068747e+1, + -0.50843369225117189814e+1, + -0.25289148173426903021e+1, + 0.4128542714921643153e+1, + 0.52665684792003961689e+1, + 0.17088992936228304398e+1, + -0.31798304635982486133e+1, + -0.43829877554132368189e+1, + -0.25653266813757396037e+1, + 0.47501147241432279955e+1, + 0.45391597104686649544e+1, + -0.18611460857784682954e+1, + -0.14586960390948038313e+1, + -0.59538150048449436369e+1, + 0.33939098894709633925e+1, + 0.53811625508605285262e+1, + -0.18098808964347128381e+1, -0.93208061059997215914, - -0.48417276627258436505e+01, - 0.20243985525198353592e+01, - 0.55807104391101756136e+01, - -0.17284791057356228006e+01, - -0.30990789597394452493e+01, - -0.16292320085440950006e+01, - 0.24927664855354070284e+01, - 0.33439315276542975752e+01, - -0.15090795975858939393e+01, - -0.45684681197350878179e+01, - 0.12316117187022721513e+01, - 0.44287743685631362212e+01, - -0.12324934845312824905e+01, - -0.20675002158930637641e+01, - -0.18018409605526981565e+01, - 0.26352941837911028067e+01, - 0.32432781067415228371e+01, - -0.40288239715147566855e+01, - -0.23403989902701960446e+01, - 0.37294382296415942157e+01, - 0.14602394404265313099e+01, - -0.25524073620664338158e+01, + -0.48417276627258436505e+1, + 0.20243985525198353592e+1, + 0.55807104391101756136e+1, + -0.17284791057356228006e+1, + -0.30990789597394452493e+1, + -0.16292320085440950006e+1, + 0.24927664855354070284e+1, + 0.33439315276542975752e+1, + -0.15090795975858939393e+1, + -0.45684681197350878179e+1, + 0.12316117187022721513e+1, + 0.44287743685631362212e+1, + -0.12324934845312824905e+1, + -0.20675002158930637641e+1, + -0.18018409605526981565e+1, + 0.26352941837911028067e+1, + 0.32432781067415228371e+1, + -0.40288239715147566855e+1, + -0.23403989902701960446e+1, + 0.37294382296415942157e+1, + 0.14602394404265313099e+1, + -0.25524073620664338158e+1, -0.92115920806747442207, -0.12469280824021243548, - 0.40785843727765085376e+01, - -0.16603273828100952869e+01, - -0.46743569643342954834e+01, - 0.45199104202917288475e+01, - 0.11465661476339443769e+01, - -0.24999023471314725242e+01, + 0.40785843727765085376e+1, + -0.16603273828100952869e+1, + -0.46743569643342954834e+1, + 0.45199104202917288475e+1, + 0.11465661476339443769e+1, + -0.24999023471314725242e+1, -0.95931298268259468376, - 0.12103942420863886831e+01, - 0.21169094745933674240e+01, - -0.17921916938749455905e+01, - -0.22413871827039617557e+01, - 0.22825056669686749622e+01, - 0.25865873090330899764e+01, - -0.42001734586023529161e+01, + 0.12103942420863886831e+1, + 0.2116909474593367424e+1, + -0.17921916938749455905e+1, + -0.22413871827039617557e+1, + 0.22825056669686749622e+1, + 0.25865873090330899764e+1, + -0.42001734586023529161e+1, -0.48932228028236379735, - 0.41188977398077817327e+01, - -0.14115047482590614703e+01, - -0.26679178924540289941e+01, - 0.21215316711771117220e+01, + 0.41188977398077817327e+1, + -0.14115047482590614703e+1, + -0.26679178924540289941e+1, + 0.2121531671177111722e+1, 0.56310952732063690451, -0.30047535937728853117, - -0.11726247469013995062e+01, - -0.10105224709139351003e+01, - 0.52058975114143706264e+01, - -0.50144371562767178219e+01, + -0.11726247469013995062e+1, + -0.10105224709139351003e+1, + 0.52058975114143706264e+1, + -0.50144371562767178219e+1, -0.21083901452588954539, - 0.36815855401837818128e+01, - -0.13826274495012493837e+01, - -0.20451737225391024566e+01, + 0.36815855401837818128e+1, + -0.13826274495012493837e+1, + -0.20451737225391024566e+1, 0.68689879149599897268, - 0.38256650442978341609e+01, - -0.52937057854013751523e+01, - 0.21987408579520351104e+01, + 0.38256650442978341609e+1, + -0.52937057854013751523e+1, + 0.21987408579520351104e+1, 0.93718014912483638135, -0.98550401727761305359, - 0.20924141244058067080, - -0.13821816284443118050e+01, - 0.27568958344569689523e+01, - -0.10887248146228090118e+01, - -0.24327014642910018694e+01, - 0.31223662588347496083e+01, + 0.2092414124405806708, + -0.1382181628444311805e+1, + 0.27568958344569689523e+1, + -0.10887248146228090118e+1, + -0.24327014642910018694e+1, + 0.31223662588347496083e+1, 0.33871797887247395709, - -0.34696660388731372926e+01, - 0.19898062083128116306e+01, - 0.20981929497536833118e+01, - -0.30628994776002791411e+01, + -0.34696660388731372926e+1, + 0.19898062083128116306e+1, + 0.20981929497536833118e+1, + -0.30628994776002791411e+1, -0.79631554709286600513, - 0.47636090315906756132e+01, - -0.38336954172055435208e+01, + 0.47636090315906756132e+1, + -0.38336954172055435208e+1, -0.95694962369188985019, - 0.41090558264064283023e+01, - -0.26033400123549630401e+01, - -0.91429736464888111680, - 0.21369413129263055140e+01, + 0.41090558264064283023e+1, + -0.26033400123549630401e+1, + -0.9142973646488811168, + 0.2136941312926305514e+1, -0.43196783777750291655, - -0.11982472403688044782e+01, + -0.11982472403688044782e+1, 0.55494200672634730331, - 0.11617554763204407386e+01, - -0.15180024567691337012e+01, + 0.11617554763204407386e+1, + -0.15180024567691337012e+1, 0.16095801434782411321, - 0.11583769782238957369e+01, - -0.12975493235464865549e+01, - 0.10512990010494351889e+01, - -0.14672063268932724611e+01, - 0.19284268562033024530e+01, - -0.96694561505461962270, - -0.13342896681669449421e+01, - 0.28982799479333998249e+01, - -0.21173258518316870891e+01, - 0.52954649517998032826e-01, + 0.11583769782238957369e+1, + -0.12975493235464865549e+1, + 0.10512990010494351889e+1, + -0.14672063268932724611e+1, + 0.1928426856203302453e+1, + -0.9669456150546196227, + -0.13342896681669449421e+1, + 0.28982799479333998249e+1, + -0.21173258518316870891e+1, + 0.52954649517998032826e-1, 0.70406642667111596356, - 0.69827174584170981220, - -0.21482594302472235448e+01, - 0.11446164294291576446e+01, - 0.18928022672513886704e+01, - -0.37889872063897671595e+01, - 0.22894213063068438174e+01, - 0.11154920159851215988e+01, - -0.27416410637999097943e+01, + 0.6982717458417098122, + -0.21482594302472235448e+1, + 0.11446164294291576446e+1, + 0.18928022672513886704e+1, + -0.37889872063897671595e+1, + 0.22894213063068438174e+1, + 0.11154920159851215988e+1, + -0.27416410637999097943e+1, 0.93965469224514097668, - 0.19870679640641470964e+01, - -0.25010425974564993723e+01, - -0.10057987051756727581e+02, - 0.12082126122159010606e+02, - 0.78437657035145882389e+01, - -0.19185835510083684596e+02, - 0.94638578572946681078e+01, - 0.86382662273330570457e+01, - -0.14922441478313992036e+02, - 0.17954523044819141742e+01, - 0.13193928833316594051e+02, - -0.10688904234301384477e+02, - -0.10142582868651654593e+02, - 0.25528172258371998993e+02, - -0.16956142884029009821e+02, - -0.95501398073759045104e+01, - 0.25431238199590168847e+02, - -0.15237603501586233889e+02, - -0.81144066386249633638e+01, - 0.14981815132501999699e+02, - 0.21567153574548720840e+01, - -0.21924513771649763783e+02, - 0.16408698284621046071e+02, - 0.10726469544965119951e+02, - -0.30063537846946932319e+02, - 0.18182018284120406548e+02, - 0.10407150220825187148e+02, - -0.23682758184782134236e+02, - 0.78402505405542735062e+01, - 0.13695366244057252558e+02, - -0.14084973119739174763e+02, - -0.61143477019571985664e+01, - 0.18351298082633149988e+02, - -0.75260451505740837419e+01, - -0.12035566960016936378e+02, - 0.14498833546923814097e+02, - -0.41703202281795082040, - -0.95006904555589510863e+01, - 0.25911011792212654825e+01, - 0.56148301373681643867e+01, - 0.33171286759385992804e-01, - -0.11786483876046171204e+02, - 0.70184267309294003923e+01, - 0.12042750027630898302e+02, - -0.19604819116768577913e+02, + 0.19870679640641470964e+1, + -0.25010425974564993723e+1, + -0.10057987051756727581e+2, + 0.12082126122159010606e+2, + 0.78437657035145882389e+1, + -0.19185835510083684596e+2, + 0.94638578572946681078e+1, + 0.86382662273330570457e+1, + -0.14922441478313992036e+2, + 0.17954523044819141742e+1, + 0.13193928833316594051e+2, + -0.10688904234301384477e+2, + -0.10142582868651654593e+2, + 0.25528172258371998993e+2, + -0.16956142884029009821e+2, + -0.95501398073759045104e+1, + 0.25431238199590168847e+2, + -0.15237603501586233889e+2, + -0.81144066386249633638e+1, + 0.14981815132501999699e+2, + 0.2156715357454872084e+1, + -0.21924513771649763783e+2, + 0.16408698284621046071e+2, + 0.10726469544965119951e+2, + -0.30063537846946932319e+2, + 0.18182018284120406548e+2, + 0.10407150220825187148e+2, + -0.23682758184782134236e+2, + 0.78402505405542735062e+1, + 0.13695366244057252558e+2, + -0.14084973119739174763e+2, + -0.61143477019571985664e+1, + 0.18351298082633149988e+2, + -0.75260451505740837419e+1, + -0.12035566960016936378e+2, + 0.14498833546923814097e+2, + -0.4170320228179508204, + -0.95006904555589510863e+1, + 0.25911011792212654825e+1, + 0.56148301373681643867e+1, + 0.33171286759385992804e-1, + -0.11786483876046171204e+2, + 0.70184267309294003923e+1, + 0.12042750027630898302e+2, + -0.19604819116768577913e+2, 0.45445418981266438863, - 0.20744774608456644671e+02, - -0.14377236044291002770e+02, - -0.13045231343831934723e+02, - 0.22064502082949818629e+02, + 0.20744774608456644671e+2, + -0.1437723604429100277e+2, + -0.13045231343831934723e+2, + 0.22064502082949818629e+2, 0.64733065983783788511, - -0.24246224599560328272e+02, - 0.14604629726459602779e+02, - 0.13255409078625683961e+02, - -0.21214951868949800229e+02, - 0.20822325051658663320e+01, - 0.10223445200128177035e+02, + -0.24246224599560328272e+2, + 0.14604629726459602779e+2, + 0.13255409078625683961e+2, + -0.21214951868949800229e+2, + 0.2082232505165866332e+1, + 0.10223445200128177035e+2, 0.26190541558666308175, - -0.99016880779091476228e+01, - -0.41040603955613699227e+01, - 0.18740783954477521434e+02, - -0.51344017211665402556e+01, - -0.20964722375846356783e+02, - 0.16619647998931295518e+02, - 0.14244945998903363105e+02, - -0.25000832237522381263e+02, - -0.16982445242932526774e+01, - 0.21598759732069879647e+02, - -0.45322051635252158519e+01, - -0.18529382617162927005e+02, - 0.82288049243070933159e+01, - 0.12239584159883913017e+02, - -0.46317820018667150705e+01, - -0.13866441037856814589e+02, + -0.99016880779091476228e+1, + -0.41040603955613699227e+1, + 0.18740783954477521434e+2, + -0.51344017211665402556e+1, + -0.20964722375846356783e+2, + 0.16619647998931295518e+2, + 0.14244945998903363105e+2, + -0.25000832237522381263e+2, + -0.16982445242932526774e+1, + 0.21598759732069879647e+2, + -0.45322051635252158519e+1, + -0.18529382617162927005e+2, + 0.82288049243070933159e+1, + 0.12239584159883913017e+2, + -0.46317820018667150705e+1, + -0.13866441037856814589e+2, -0.40590516026442180486, - 0.28342844277260624608e+02, - -0.17907092992212373161e+02, - -0.21851813938230812084e+02, - 0.27898614874342822390e+02, - 0.28262384862503240335e+01, - -0.12450966966406511460e+02, - -0.10205210072366094565e+02, - 0.92912344270470885732e+01, - 0.20385544387465728278e+02, - -0.20678434505817239852e+02, - -0.13849877750105484608e+02, - 0.15474196940842675829e+02, - 0.19474032769298858625e+02, - -0.20219781662564173530e+02, - -0.18764074128260183727e+02, - 0.22719347982623354198e+02, - 0.70785274527360995123e+01, - -0.13578535368112427673e+01, - -0.25033773120126266321e+02, + 0.28342844277260624608e+2, + -0.17907092992212373161e+2, + -0.21851813938230812084e+2, + 0.2789861487434282239e+2, + 0.28262384862503240335e+1, + -0.1245096696640651146e+2, + -0.10205210072366094565e+2, + 0.92912344270470885732e+1, + 0.20385544387465728278e+2, + -0.20678434505817239852e+2, + -0.13849877750105484608e+2, + 0.15474196940842675829e+2, + 0.19474032769298858625e+2, + -0.2021978166256417353e+2, + -0.18764074128260183727e+2, + 0.22719347982623354198e+2, + 0.70785274527360995123e+1, + -0.13578535368112427673e+1, + -0.25033773120126266321e+2, 0.14379238812787317747, - 0.37964850981944366026e+02, - -0.14440884025738847996e+02, - -0.21375333778160804599e+02, + 0.37964850981944366026e+2, + -0.14440884025738847996e+2, + -0.21375333778160804599e+2, -0.21996015275764341235, - 0.14332276645630434686e+02, - 0.21414715904019992365e+02, - -0.22611100496692266404e+02, - -0.24718115026379969379e+02, - 0.16805661731354962996e+02, - 0.24753479273931766613e+02, - -0.30628713840725345641e+01, - -0.21886698571212068742e+02, - -0.18340390828373731580e+02, - 0.20362077240877738404e+02, - 0.29341956629246197963e+02, - -0.10028137675963371578e+02, - -0.27768220782081680653e+02, - -0.13434243671804315667e+02, - 0.19498015272587807090e+02, - 0.27586209622909610317e+02, - 0.63943851112170078110e+01, - -0.37792604285774480388e+02, - -0.18994549888954736616e+02, - 0.94192281410451688117e+01, - 0.25378114111030551925e+02, - 0.33257257404553364211e+02, - -0.23182334112412029015e+02, - -0.32816659457855699600e+02, - -0.19009007804046465395e+02, - 0.33006491269796622845e+01, - 0.41694949072779081689e+02, - 0.32510158137670821077e+02, - -0.84631167609807320673e+01, - -0.22020504854301353959e+02, - -0.47158946166876646089e+02, - -0.26267803078475544964e+02, - 0.22197750208322943877e+02, - 0.23434668187745071322e+02, - 0.59837765765908187632e+02, - 0.27775373539341927653e+02, - 0.14435727936659981108e+01, - -0.18859960628968806873e+02, - -0.59398017879729408719e+02, - -0.56475410577178351446e+02, - -0.64893703191349729309e+02, - -0.54006183975003025921e+02, - -0.43115794346819491523e+02, - -0.28996256250476989180e+02, - -0.22057265099927100493e+02, - -0.12009138764927270060e+02, - -0.55034414207821669152e+01, - -0.72841450158006724180e+01, + 0.14332276645630434686e+2, + 0.21414715904019992365e+2, + -0.22611100496692266404e+2, + -0.24718115026379969379e+2, + 0.16805661731354962996e+2, + 0.24753479273931766613e+2, + -0.30628713840725345641e+1, + -0.21886698571212068742e+2, + -0.1834039082837373158e+2, + 0.20362077240877738404e+2, + 0.29341956629246197963e+2, + -0.10028137675963371578e+2, + -0.27768220782081680653e+2, + -0.13434243671804315667e+2, + 0.1949801527258780709e+2, + 0.27586209622909610317e+2, + 0.6394385111217007811e+1, + -0.37792604285774480388e+2, + -0.18994549888954736616e+2, + 0.94192281410451688117e+1, + 0.25378114111030551925e+2, + 0.33257257404553364211e+2, + -0.23182334112412029015e+2, + -0.328166594578556996e+2, + -0.19009007804046465395e+2, + 0.33006491269796622845e+1, + 0.41694949072779081689e+2, + 0.32510158137670821077e+2, + -0.84631167609807320673e+1, + -0.22020504854301353959e+2, + -0.47158946166876646089e+2, + -0.26267803078475544964e+2, + 0.22197750208322943877e+2, + 0.23434668187745071322e+2, + 0.59837765765908187632e+2, + 0.27775373539341927653e+2, + 0.14435727936659981108e+1, + -0.18859960628968806873e+2, + -0.59398017879729408719e+2, + -0.56475410577178351446e+2, + -0.64893703191349729309e+2, + -0.54006183975003025921e+2, + -0.43115794346819491523e+2, + -0.2899625625047698918e+2, + -0.22057265099927100493e+2, + -0.1200913876492727006e+2, + -0.55034414207821669152e+1, + -0.7284145015800672418e+1, 0.70117735019808102859, - -0.10405273354002062547e+01, - -0.37981348889291957072e+01, - 0.50044162197350008370e+01, - -0.43380480751004188988e+01, - 0.80680757018198168140, - 0.30381995965854833308e+01, - -0.50859529453316998371e+01, - 0.40563029194578783532e+01, + -0.10405273354002062547e+1, + -0.37981348889291957072e+1, + 0.5004416219735000837e+1, + -0.43380480751004188988e+1, + 0.8068075701819816814, + 0.30381995965854833308e+1, + -0.50859529453316998371e+1, + 0.40563029194578783532e+1, -0.75165173152802644552, - -0.24942586634698704628e+01, - 0.32520840105319552826e+01, + -0.24942586634698704628e+1, + 0.32520840105319552826e+1, -0.59365212209506745822, - -0.41263396250945989507e+01, - 0.79484362291303352066e+01, - -0.79940840477002410580e+01, - 0.33152826284354306452e+01, - 0.43315068676591774732e+01, - -0.11192269945458862779e+02, - 0.13501704259631674532e+02, - -0.95538075047294981346e+01, + -0.41263396250945989507e+1, + 0.79484362291303352066e+1, + -0.7994084047700241058e+1, + 0.33152826284354306452e+1, + 0.43315068676591774732e+1, + -0.11192269945458862779e+2, + 0.13501704259631674532e+2, + -0.95538075047294981346e+1, 0.80361946886206281349, - 0.87675096654835709131e+01, - -0.14617227175530656424e+02, - 0.14003673028123671429e+02, - -0.73705546191493009900e+01, - -0.18914698776605844976e+01, - 0.92710481022233928172e+01, - -0.11468613469680871475e+02, - 0.80739919967660664923e+01, - -0.16190551026643043020e+01, - -0.39057819732286236381e+01, - 0.53198979790724658656e+01, - -0.19851929741435141441e+01, - -0.38569561197019486265e+01, - 0.83847738337566699585e+01, - -0.83444615512707667193e+01, - 0.29416633321035994264e+01, - 0.56158613559072483312e+01, - -0.13168832660869211892e+02, - 0.15761160943139183033e+02, - -0.11713112560901839387e+02, - 0.25735642876685904668e+01, - 0.75999076661843565361e+01, - -0.14222166776565581259e+02, - 0.14448211447101069638e+02, - -0.85325942776635415044e+01, + 0.87675096654835709131e+1, + -0.14617227175530656424e+2, + 0.14003673028123671429e+2, + -0.737055461914930099e+1, + -0.18914698776605844976e+1, + 0.92710481022233928172e+1, + -0.11468613469680871475e+2, + 0.80739919967660664923e+1, + -0.1619055102664304302e+1, + -0.39057819732286236381e+1, + 0.53198979790724658656e+1, + -0.19851929741435141441e+1, + -0.38569561197019486265e+1, + 0.83847738337566699585e+1, + -0.83444615512707667193e+1, + 0.29416633321035994264e+1, + 0.56158613559072483312e+1, + -0.13168832660869211892e+2, + 0.15761160943139183033e+2, + -0.11713112560901839387e+2, + 0.25735642876685904668e+1, + 0.75999076661843565361e+1, + -0.14222166776565581259e+2, + 0.14448211447101069638e+2, + -0.85325942776635415044e+1, -0.36370266958380892408, - 0.78293171226416600206e+01, - -0.10425743873199666112e+02, - 0.73630667337591741983e+01, + 0.78293171226416600206e+1, + -0.10425743873199666112e+2, + 0.73630667337591741983e+1, -0.76540627568237262768, - -0.55546711579911240975e+01, - 0.81616705648568235176e+01, - -0.57987522658698500422e+01, - 0.98991424160896759332e+01, - -0.92625482166082768742e+01, - -0.12308822339605716145e+01, - 0.96160804965121453591e+01, - -0.81310855144015192764e+01, - 0.20003387011859867783e+01, - 0.77936315134648452840e+01, - -0.10829610461737235738e+02, - 0.75612319041357469729e+01, - 0.50053814865826282698e+01, - -0.17106326347481104477e+02, - 0.25848533271930545396e+02, - -0.22502777508889934666e+02, - 0.11764229903725107462e+02, - 0.50623480311155129030e+01, - -0.16378382844022826959e+02, - 0.20971084284619667670e+02, - -0.14241794003509355093e+02, - 0.48464488519980024606e+01, - 0.47496787279018386485e+01, - -0.56385252326535013623e+01, - 0.18713630710699029613e+01, - 0.62715546592955524474e+01, - -0.86136538325517619796e+01, - 0.57085588051385771635e+01, - 0.52115465149464448302e+01, - -0.14181445889146791828e+02, - 0.18615978418615206635e+02, - -0.11069493314647397497e+02, - -0.16290435023745903909e+01, - 0.16071832408983926399e+02, - -0.19947282037585484460e+02, - 0.13708414190087982121e+02, - 0.33203955087265701884e+01, - -0.17842755138076672239e+02, - 0.24345740082949365757e+02, - -0.14381543817899608229e+02, - -0.37658995674867190573e+01, - 0.23561148415670164269e+02, - -0.29637491262548646631e+02, - 0.21187868286928232209e+02, - 0.12012699731444433926e+01, - -0.21203303667114795417e+02, - 0.30318801543433966827e+02, - -0.19000475735646610076e+02, - -0.29559487425140127392e+01, - 0.25746417515623569727e+02, - -0.31035429910256869590e+02, - 0.17259751439173118825e+02, - 0.12562059229134149518e+02, - -0.38139838385308522106e+02, - 0.46161534817472833936e+02, - -0.27788941778279674821e+02, - -0.98467575536006162196e+01, - 0.41157047702574480752e+02, - -0.65973532672555720069e+02, - 0.31865068652636338697e+02, - -0.33868297015870780342e+02, - -0.73692692236989159937e+02, - -0.17926056317527873318e+02, - -0.15318537134817549372e+03, - -0.12924169159843688703e+03, - -0.17756907880286604495e+03, - -0.24812050618475706187e+03, - -0.19309416672226601008e+03, - -0.18014740778883407302e+03, - -0.11234155209813850718e+03, - 0.40820982693299704636e+02, - 0.10463865082198049095e+03, - 0.15226012580721115341e+03, - 0.16928863410136310108e+03, - 0.33393857194194813687e+01, - -0.64565707089406501495e+02, - -0.13420904432243017368e+03, - -0.14072630876707788161e+03, - 0.27763757984114057820e+02, - 0.97597089657296322684e+02, - 0.11867747864534622693e+03, - 0.58588814000777837521e+02, - -0.94056760701492564181e+02, - -0.12773341180834795239e+03, - -0.32969769575858087762e+02, - 0.67007021668743803389e+02, - 0.10725985028813158806e+03, - 0.59404325834358537861e+02, - -0.11617362498614049571e+03, - -0.95176864014280326387e+02, - 0.29374085144219311161e+02, - 0.48232882896285829588e+02, - 0.12788465314844910381e+03, - -0.73682044930581767517e+02, - -0.12480901913373746481e+03, - 0.36315013066851854262e+02, - 0.30365859371292138746e+02, - 0.10463745678715444853e+03, - -0.41681532410613741035e+02, - -0.13169297072848729613e+03, - 0.37934091098638774042e+02, - 0.77153276334731160091e+02, - 0.32765547567834481413e+02, - -0.54364182060922381368e+02, - -0.79272254715844255202e+02, - 0.33818557970382592259e+02, - 0.10988326521376932021e+03, - -0.32751914099152770632e+02, - -0.99641699791966004796e+02, - 0.25965768232038033858e+02, - 0.50111991044113118221e+02, - 0.40758530687980780272e+02, - -0.60430323152166799616e+02, - -0.76554794513346337226e+02, - 0.94314756505244218943e+02, - 0.55579034593855041635e+02, - -0.89937254908509856932e+02, - -0.28964311332174393243e+02, - 0.52738649733784974671e+02, - 0.28819688725750385316e+02, - -0.32752414882366363003e+01, - -0.91695823912853100524e+02, - 0.38953202520983950308e+02, - 0.10519899751779122710e+03, - -0.98999887523517031696e+02, - -0.33993077680675789054e+02, - 0.64336166062187913894e+02, - 0.19214907361206815750e+02, - -0.28620730008646088294e+02, - -0.45784446527074614153e+02, - 0.36133168324186776488e+02, - 0.58543244288969226830e+02, - -0.58723376747366394568e+02, - -0.56394280150435349697e+02, - 0.95544935101450519710e+02, - 0.12934213726276714951e+02, - -0.97342599479793960882e+02, - 0.34178136904096277249e+02, - 0.61426681091256703837e+02, - -0.50237419210384118173e+02, - -0.93158104277258075854e+01, - -0.12027625184655026391e+01, - 0.40405120602613536107e+02, - 0.65982530412210786963e+01, - -0.10283638740525394439e+03, - 0.10001325948422805823e+03, - 0.16727852346662622551e+02, - -0.89664328679324356131e+02, - 0.26601110853286229485e+02, - 0.62257391004466875017e+02, - -0.37042812156688810887e+02, - -0.65433742283124402661e+02, - 0.10089646364459942163e+03, - -0.33285580242293058006e+02, - -0.33265686731936050080e+02, - 0.27487384048458618935e+02, - -0.37377887333555879223e+01, - 0.27719501829628875100e+02, - -0.58829472552358446080e+02, - 0.20783267772129921269e+02, - 0.59729270141275691230e+02, - -0.74529202769226145620e+02, - -0.63274373066325546588e+01, - 0.78038962319910339716e+02, - -0.41089984158658282354e+02, - -0.56958226089977650020e+02, - 0.81408063819874726619e+02, - 0.81832623178634396055e+01, - -0.10205404530921101980e+03, - 0.83122715750100937271e+02, - 0.25196332736308093558e+02, - -0.95557032936309013849e+02, - 0.58364120737721798093e+02, - 0.24206375712453436222e+02, - -0.51770439888713212895e+02, - 0.10199373481710672706e+02, - 0.29524028172498830713e+02, - -0.15177106533536939281e+02, - -0.25817726504124131282e+02, - 0.36711988268778220856e+02, - -0.87215095836394933571e+01, - -0.18284848994186884141e+02, - 0.18796887876790759009e+02, - -0.12311540516426111580e+02, - 0.23746166216710722807e+02, - -0.38535574514046551542e+02, - 0.21642541507533945122e+02, - 0.26199573324953831843e+02, - -0.57823786697882887609e+02, - 0.36775066353215756010e+02, - 0.11631859732043107414e+02, - -0.27027108294773032782e+02, - -0.98076021013361120993e+01, - 0.48566041905377076660e+02, - -0.29766450008166504659e+02, - -0.37703085700040233519e+02, - 0.80252457123247580739e+02, - -0.45276888453006932878e+02, - -0.32864080164073051549e+02, - 0.68858816387718277952e+02, - -0.24871127304696791782e+02, - -0.44909642384469513843e+02, - 0.57820719976851449928e+02, - 0.13823169654951385610e+03, - -0.18802237597784989021e+03, - -0.92014043729865804266e+02, - 0.27512375332658075422e+03, - -0.15414520232912744291e+03, - -0.11163145810726578588e+03, - 0.22556340680920359887e+03, - -0.46705113728092094050e+02, - -0.18885809871717600572e+03, - 0.18773350826084416099e+03, - 0.95458056373927036020e+02, - -0.33107733603918779863e+03, - 0.23729792687950703112e+03, - 0.12570122240440493044e+03, - -0.35225860426682129400e+03, - 0.20732709931373051404e+03, - 0.13725777436749362437e+03, - -0.24916553440933154207e+03, - 0.68935050240103645791e+01, - 0.28951690576413187728e+03, - -0.22992599719691710902e+03, - -0.14202581036354811772e+03, - 0.40854850585589099410e+03, - -0.23283717324128093651e+03, - -0.17135511217746693546e+03, - 0.34406649117874042076e+03, - -0.96906580511917979948e+02, - -0.21530566143383941835e+03, - 0.20631756928781814509e+03, - 0.96519220897016353433e+02, - -0.26178237271366350569e+03, - 0.83145604661847798411e+02, - 0.20239205918352917024e+03, - -0.20771584792910729789e+03, - -0.30053054071977747697e+02, - 0.17298047590415853847e+03, - -0.34569820336225170365e+02, - -0.11756727423595539506e+03, - 0.28239846054493447980e+02, - 0.17929166958573722468e+03, - -0.13140096954594181966e+03, - -0.15987075728102394123e+03, - 0.29690142568837848103e+03, - -0.23857846740436816191e+02, - -0.30074713382100230774e+03, - 0.22219219572259237339e+03, - 0.17867863050719660123e+03, - -0.31544807467499362019e+03, - -0.13942060206906136344e+02, - 0.35267410598613264483e+03, - -0.19793413112624085670e+03, - -0.21208270189474959011e+03, - 0.30592522633672672328e+03, - 0.30216473126975396113e+01, - -0.18051803231291668794e+03, - -0.86429231553985097491e+01, - 0.17710168980863321053e+03, - 0.42323864390836206439e+02, - -0.29036747905234295786e+03, - 0.10163445826528675298e+03, - 0.30009411206849074460e+03, - -0.25448076325230496764e+03, - -0.19486394058603440271e+03, - 0.34984832788182598051e+03, - 0.50397306630869422861e+02, - -0.33589996884591408843e+03, - 0.60622958990017416170e+02, - 0.28952060855406239170e+03, - -0.11642337616320158133e+03, - -0.20504081336258988699e+03, - 0.74758625076677304833e+02, - 0.23672691069421040311e+03, - -0.37484074203911802670e+02, - -0.39601640375934982785e+03, - 0.26405990175114646945e+03, - 0.31090998349245393229e+03, - -0.38155813255906463155e+03, - -0.85767321047310545623e+02, - 0.20535385437649304663e+03, - 0.17595772220496326099e+03, - -0.17975603170406634490e+03, - -0.27904404327771590033e+03, - 0.29606321528632668105e+03, - 0.22586301234658222370e+03, - -0.24959819475389002719e+03, - -0.28713366184023539063e+03, - 0.30553950564225402786e+03, - 0.27460814641929084701e+03, - -0.30976778231869741376e+03, - -0.16387782720460467090e+03, - 0.66383126288494224809e+02, - 0.37276729680617620488e+03, - -0.29254387245094491732e+02, - -0.53243829785039883973e+03, - 0.17291886085598068235e+03, - 0.35161639625344656679e+03, - 0.14851784869202214523e+02, - -0.25353713538590821486e+03, - -0.29695173634260646622e+03, - 0.33069574593192555767e+03, - 0.38248063986960880811e+03, - -0.25681027905885889595e+03, - -0.37388414152813021474e+03, - 0.27067455376474036655e+02, - 0.36108116052752876612e+03, - 0.26897795997543448721e+03, - -0.31997367429409558781e+03, - -0.42794136744489725288e+03, - 0.12475588029620428188e+03, - 0.45095357046014686375e+03, - 0.19369638022082017415e+03, - -0.29069876334408121465e+03, - -0.44113764821442299535e+03, - -0.70887484530926982984e+02, - 0.55023692373570520431e+03, - 0.31274861725071525598e+03, - -0.13929365184592211335e+03, - -0.42543550784589365321e+03, - -0.46068172051468707195e+03, - 0.30926029860913968150e+03, - 0.53233852198244460396e+03, - 0.29009436461720497391e+03, - -0.61033265856198028132e+02, - -0.63719258462129266718e+03, - -0.48803339807390727856e+03, - 0.10283153323134295931e+03, - 0.36457148504987867454e+03, - 0.72432033580896734293e+03, - 0.36995806029241657598e+03, - -0.27463457680887717061e+03, - -0.44117009444115382166e+03, - -0.85369200098498163243e+03, - -0.46388613688971270221e+03, - -0.22579537358972995520e+02, - 0.31812482068787426215e+03, - 0.87560623924349454228e+03, - 0.90690466494927545682e+03, - 0.96955327628858537992e+03, - 0.85603487156128699098e+03, - 0.64106483653470104400e+03, - 0.46902677044899240855e+03, - 0.32133627309857365617e+03, - 0.19374988817539386332e+03, - 0.87676496560706638661e+02, - 0.10163517021424902964e+03, - -0.16538138267835633677e+01, - 0.17079020083383120721e+02, - 0.44332380631530632797e+02, - -0.55054311408537415673e+02, - 0.47657289092105450834e+02, - -0.60661573012486043055e+01, - -0.37007522469042093860e+02, - 0.57417992884171397350e+02, - -0.40286610703674973877e+02, - -0.36445592307137757437e+01, - 0.45410996758582292898e+02, - -0.55132418452701166700e+02, - 0.21386863091022362937e+02, - 0.39298089470971113712e+02, - -0.90658634251430385120e+02, - 0.97031872962687089057e+02, - -0.45835174459274156789e+02, - -0.42920465174830958688e+02, - 0.12482725855871004228e+03, - -0.15479944867152127586e+03, - 0.11184155676340181174e+03, - -0.12404613838755768285e+02, - -0.97060155885561727018e+02, - 0.16336638541478632192e+03, - -0.15467567094721317744e+03, - 0.76842839168034302588e+02, - 0.29547690785517865208e+02, - -0.11112982538865219340e+03, - 0.12957422517496257797e+03, - -0.81501387099818046522e+02, - -0.12263362733587159781e+01, - 0.69582837139555337558e+02, - -0.84863941643585903307e+02, - 0.39573102551687171058e+02, - 0.38532171150537770643e+02, - -0.10221569485942055167e+03, - 0.11078673491450189204e+03, - -0.53138525918087019306e+02, - -0.45456801217798265213e+02, - 0.13570617307032918575e+03, - -0.17006368440856158486e+03, - 0.12762382566901592895e+03, - -0.25730971647612019382e+02, - -0.88414576118896675894e+02, - 0.16121421390211398261e+03, - -0.15961855688424833488e+03, - 0.87228573244195970915e+02, - 0.18091040081809364182e+02, - -0.10404367243403486043e+03, - 0.13040171324569917033e+03, - -0.88876958059598379691e+02, - 0.60291649955358206370e+01, - 0.71668636413911045224e+02, - -0.10276879677016113135e+03, - 0.72494777510631152495e+02, - -0.64359130067511955531e+02, - 0.18554217918515298891e+02, - 0.72614310122082471821e+02, - -0.12507585638269706863e+03, - 0.78240033191004258128e+02, - 0.81468520662910357544e+01, - -0.11315617438667405281e+03, - 0.13957310649824938764e+03, - -0.95693382108125476293e+02, - -0.34045531123208945701e+02, - 0.15167437779756878058e+03, - -0.22542067847618037035e+03, - 0.18044905600699718207e+03, - -0.67843951651600264086e+02, - -0.89212945168112796068e+02, - 0.18059298787759129823e+03, - -0.19622863540615662714e+03, - 0.10431291265501504029e+03, - 0.56311316672060005573e+01, - -0.10084586064554206075e+03, - 0.98772299791021012538e+02, - -0.40316655555917080278e+02, - -0.60613930260582513654e+02, - 0.10170103281338022327e+03, - -0.80304706582028856587e+02, - -0.27531710388806434509e+02, - 0.12580133987199661760e+03, - -0.18051675059758196085e+03, - 0.11703869666135639704e+03, - 0.64780467631067910617e+01, - -0.15454102927542760426e+03, - 0.20804023360579014934e+03, - -0.16080555430000856632e+03, - 0.16952102621069242705e+01, - 0.14941101958380892256e+03, - -0.23495768406299302455e+03, - 0.16899870259706125353e+03, - -0.16137070168909144030e+02, - -0.16803076416270056370e+03, - 0.24264659231377422088e+03, - -0.19089470246386650842e+03, - 0.82549529010355318093e+01, - 0.16621877811722617935e+03, - -0.25593505833407047589e+03, - 0.16933995382126920504e+03, - 0.16129117560334300663e+02, - -0.22021577439650215524e+03, - 0.28114378892944876043e+03, - -0.17879031596579906704e+03, - -0.70253964860152933625e+02, - 0.29577141045367744709e+03, - -0.38370432985568646700e+03, - 0.25169831726712808972e+03, - 0.47716780751069251210e+02, - -0.30170764485667899635e+03, - 0.51765296278274195174e+03, - -0.23633113966610554257e+03, - 0.28804701721215184307e+03, - 0.62049703789301156576e+03, - 0.21490087531041825741e+03, - 0.12793400671141994280e+04, - 0.11977190034543120873e+04, - 0.15252128151954536861e+04, - 0.21925659372459217593e+04, - 0.17136313814054299201e+04, - 0.15584600578972731455e+04, - 0.10158179527731890630e+04, - -0.37910304753396252408e+03, - -0.90947147912047694263e+03, - -0.13472687244530943644e+04, - -0.14799295236917209877e+04, - -0.45795985494689908535e+02, - 0.59004833172100256888e+03, - 0.11598185232795547108e+04, - 0.12505830351984538993e+04, - -0.24149424128482070273e+03, - -0.87681677700499892580e+03, - -0.10184158170656028233e+04, - -0.53752909213103771435e+03, - 0.83340199857550419438e+03, - 0.11414030580289324917e+04, - 0.25188624117708266681e+03, - -0.54215463096178223168e+03, - -0.98332480313200869659e+03, - -0.50841827201677176618e+03, - 0.10430399342099706246e+04, - 0.78300504630316834209e+03, - -0.18304117109498875493e+03, - -0.50026139594949711409e+03, - -0.10707849033569916628e+04, - 0.63018711859998825275e+03, - 0.10761927764895372093e+04, - -0.26566115588750471943e+03, - -0.33523129259731257434e+03, - -0.85955084384973918077e+03, - 0.32922820727182516976e+03, - 0.11646966877545996795e+04, - -0.31056584266446230913e+03, - -0.71996284618228116869e+03, - -0.24488932855107191244e+03, - 0.44614957708698665328e+03, - 0.71080386946750957122e+03, - -0.29148924720340795602e+03, - -0.98660442596116411096e+03, - 0.31263956476274825036e+03, - 0.85526576994195568204e+03, - -0.21377475756521658923e+03, - -0.44927033550215588775e+03, - -0.35362190111972398654e+03, - 0.52644385000869817759e+03, - 0.68046210487411235590e+03, - -0.83599656625412342237e+03, - -0.48874768169617874491e+03, - 0.80189140340257233674e+03, - 0.23108771027557682487e+03, - -0.42921627119897840430e+03, - -0.29237618965057544074e+03, - 0.61013134822988618566e+02, - 0.79142637475936032843e+03, - -0.35024386353527967231e+03, - -0.89566423702733368373e+03, - 0.82558772930423697289e+03, - 0.34828115897306781790e+03, - -0.60589913383614555187e+03, - -0.14860348926573956874e+03, - 0.25421208807185533374e+03, - 0.38105084244791436277e+03, - -0.28532147463343170557e+03, - -0.54821833361260064521e+03, - 0.54190634689046692074e+03, - 0.48213964579626264140e+03, - -0.83504685268013236055e+03, - -0.11794347885856220159e+03, - 0.86632086689415473302e+03, - -0.31993650224972651586e+03, - -0.51421518277296479482e+03, - 0.41722373646491399768e+03, - 0.92653015312908962642e+02, - 0.26337725615010860736e+02, - -0.40467290913453405210e+03, - 0.22207239208054819102e+02, - 0.80569360050659713579e+03, - -0.78182445731822895141e+03, - -0.22191923388639574455e+03, - 0.82114798726707249443e+03, - -0.21385208150337166444e+03, - -0.61784057853633487412e+03, - 0.43104926338561665489e+03, - 0.45835972639203401968e+03, - -0.78276763775836298009e+03, - 0.22015218462675281330e+03, - 0.32276394341534751220e+03, - -0.23059499454771719229e+03, - -0.80759881942767748342e+01, - -0.19089919258494992960e+03, - 0.47031300657516720776e+03, - -0.15372152944085269155e+03, - -0.53249544400769195818e+03, - 0.64506935316653004975e+03, - 0.73273485720373813024e+02, - -0.69853233107087964981e+03, - 0.35783917029647892605e+03, - 0.52391031781160779701e+03, - -0.75404733179137883781e+03, - -0.29171256990369748507e+02, - 0.86207752526086608214e+03, - -0.71240627750064777501e+03, - -0.21931575711917554372e+03, - 0.81947457819458429640e+03, - -0.48187436091400496707e+03, - -0.24313169013003857799e+03, - 0.47298618358507383164e+03, - -0.88071513722959181791e+02, - -0.27999696692224767958e+03, - 0.16462256147699343956e+03, - 0.19755788463556848455e+03, - -0.30798354573579666749e+03, - 0.85847161810167861518e+02, - 0.12478228422479658377e+03, - -0.10754780605684450734e+03, - 0.40992079428111871664e+02, - -0.14816629278807062065e+03, - 0.30024122237057531493e+03, - -0.18400271096987594888e+03, - -0.20192574718794824662e+03, - 0.45100291910790662087e+03, - -0.24937227465329962683e+03, - -0.17672151832793258563e+03, - 0.29677350091175884472e+03, - 0.53715215754868800957e+02, - -0.42506050543290325550e+03, - 0.28646009417100799510e+03, - 0.28955837868734414542e+03, - -0.65805474005724852304e+03, - 0.35527686091715276007e+03, - 0.32006393140749315762e+03, - -0.62230236148768835847e+03, - 0.22322384626941882857e+03, - 0.39736982088185163775e+03, - -0.51172412702451055111e+03, - -0.85332026226930065604e+03, - 0.13063469603761438975e+04, - 0.45831707971449708339e+03, - -0.17621473265093018199e+04, - 0.10974081276364695441e+04, - 0.65178269502500359067e+03, - -0.15357355564721788141e+04, - 0.45132908925662712818e+03, - 0.11788904709220000768e+04, - -0.13730382799349804372e+04, - -0.36226666274059925854e+03, - 0.19710414389363986629e+04, - -0.15371026266940555161e+04, - -0.71316817184394915330e+03, - 0.21904910125598084960e+04, - -0.12948321189834971392e+04, - -0.95617553700369830949e+03, - 0.17413686128910314892e+04, - -0.19875583013982728176e+03, - -0.17802906700942462521e+04, - 0.14982886427249907229e+04, - 0.81377558283664984629e+03, - -0.24866616129861795343e+04, - 0.13416704106679769666e+04, - 0.12146019139190686928e+04, - -0.22188464484163096131e+04, - 0.51578308999975479310e+03, - 0.14990841867611579801e+04, - -0.13366956718208741677e+04, - -0.70385600549568209772e+03, - 0.17085739542890867142e+04, - -0.41190671534200083670e+03, - -0.14659244418370583389e+04, - 0.13285576083636990461e+04, - 0.40958826776515377333e+03, - -0.13257486679817473032e+04, - 0.19124464108717029376e+03, - 0.99656210068457107809e+03, - -0.36477627472623203175e+03, - -0.12161781519610678970e+04, - 0.10375375308719749228e+04, - 0.94717024569129989686e+03, - -0.20093791293612337086e+04, - 0.27024671679330776897e+03, - 0.19360652854774803018e+04, - -0.15022819859436331171e+04, - -0.11259816824123358856e+04, - 0.20477548123679910077e+04, - 0.10355976799422155921e+03, - -0.22972628785735723795e+04, - 0.12122110562164268686e+04, - 0.14822548309802048152e+04, - -0.19590947570470295886e+04, - -0.23702049439440210676e+03, - 0.13758724803425834580e+04, - 0.91770045930236776144e+02, - -0.13727187548597094064e+04, - -0.14624019372132812578e+03, - 0.19762576659095614104e+04, - -0.80832123455263956657e+03, - -0.19317631585197507320e+04, - 0.17239812584010098817e+04, - 0.12248167899171621684e+04, - -0.22382071903870323695e+04, - -0.43960118883674925883e+03, - 0.22812242978958897766e+04, - -0.33317136592134363582e+03, - -0.20242811098339784621e+04, - 0.73905068022487409962e+03, - 0.15136532777687330054e+04, - -0.55257728952508728071e+03, - -0.17344517110611734552e+04, - 0.48999581893977301661e+03, - 0.24940185250084823565e+04, - -0.17465927656546418802e+04, - -0.19863987002300948461e+04, - 0.23406881656277264483e+04, - 0.83775657780885148895e+03, - -0.15055635977761712638e+04, - -0.12817560852400092699e+04, - 0.13996904096253708758e+04, - 0.17611320104683577483e+04, - -0.19462926336090213226e+04, - -0.15875561641522656373e+04, - 0.17602171742678312967e+04, - 0.18915443958543582994e+04, - -0.20380766686910869794e+04, - -0.18389832773563327919e+04, - 0.19395562928615954661e+04, - 0.13946663393171627376e+04, - -0.68217876341593148481e+03, - -0.25015159992150438484e+04, - 0.35777858110294425842e+03, - 0.33624439263408348779e+04, - -0.91907764519856596053e+03, - -0.25251261558265905478e+04, - -0.17186999000266089865e+03, - 0.19152292892964496787e+04, - 0.18770343612350798139e+04, - -0.22117423937263606604e+04, - -0.25787087368125103239e+04, - 0.16930120322669988582e+04, - 0.25715473997662620604e+04, - -0.10512699408811668889e+03, - -0.26001013566351662121e+04, - -0.17567756785564627080e+04, - 0.21968765107494850781e+04, - 0.28506277636650229397e+04, - -0.75172301832198616012e+03, - -0.31539986887140826184e+04, - -0.13228779001768016315e+04, - 0.20009342609927091416e+04, - 0.30685447554812558337e+04, - 0.36197789705477987354e+03, - -0.36069822463040745788e+04, - -0.22636595734263000850e+04, - 0.94451631472976748682e+03, - 0.30750636103393298981e+04, - 0.29201465072770106417e+04, - -0.19147413673579123952e+04, - -0.37313826370049318939e+04, - -0.20460435905918557182e+04, - 0.53927054749636101860e+03, - 0.42970303115639726457e+04, - 0.32924819613733679944e+04, - -0.53431648875906910234e+03, - -0.26929766955892209808e+04, - -0.48764741027392801698e+04, - -0.24435431747569450636e+04, - 0.16175362543956125592e+04, - 0.33646253244571689720e+04, - 0.55724924355279081283e+04, - 0.33071529469587990206e+04, - 0.20212130067817503232e+03, - -0.23454030703257885762e+04, - -0.58135003515691705616e+04, - -0.63654314111997582586e+04, - -0.65672803943970729961e+04, - -0.59077760993345291354e+04, - -0.43668902265209171674e+04, - -0.32513426406764315288e+04, - -0.21771745090280915065e+04, - -0.13175252903627344949e+04, - -0.66315683859811690581e+03, - -0.60421243456673869332e+03, - -0.64999804072113477105e+02, - -0.10365414034994176973e+03, - -0.24008898052933335521e+03, - 0.26603044073917766354e+03, - -0.22662396223205888646e+03, - 0.56676975339255033504e+01, - 0.21025498014823298831e+03, - -0.30222855424286882453e+03, - 0.19354711538223065759e+03, - 0.54211156605072879699e+02, - -0.28509477763125096317e+03, - 0.33919595105499485044e+03, - -0.15526006358917308603e+03, - -0.17912531183999215045e+03, - 0.47088531468554185722e+03, - -0.52841121106191667423e+03, - 0.28057568116428205940e+03, - 0.17249020078902009345e+03, - -0.60103849808634129204e+03, - 0.76946025868787239688e+03, - -0.56561693422970665779e+03, - 0.71397463059916006500e+02, - 0.47561067097290134598e+03, - -0.80258895645306074584e+03, - 0.74752946481569586012e+03, - -0.34362069922277021305e+03, - -0.19669594578182892519e+03, - 0.59689629163650226928e+03, - -0.66135599660453885917e+03, - 0.37878547254227703434e+03, - 0.77699568570777017840e+02, - -0.44640828601514664342e+03, - 0.52220552397020605895e+03, - -0.26628868721470246328e+03, - -0.17256235818691834538e+03, - 0.54141521073086823890e+03, - -0.62048770108057374273e+03, - 0.34526998254204733030e+03, - 0.15673202919473908423e+03, - -0.62967716548470752969e+03, - 0.82403420371741844974e+03, - -0.62704106022972030132e+03, - 0.12432151315293998550e+03, - 0.44305604294076215410e+03, - -0.80010236783143852790e+03, - 0.77797039827592345773e+03, - -0.39741248032516813282e+03, - -0.14396291411560736151e+03, - 0.57536482151037580479e+03, - -0.69082351866510566651e+03, - 0.45222946054746063282e+03, - -0.33554816660576634035e+01, - -0.40934857012013191024e+03, - 0.56803800655282338994e+03, - -0.39694623104812654901e+03, - 0.22724546343219191158e+03, - 0.92105418396912014600e+02, - -0.49344233991322568045e+03, - 0.65749090826477606697e+03, - -0.35022056456570919636e+03, - -0.12404897795034483465e+03, - 0.63220680623466148518e+03, - -0.73747573609310256870e+03, - 0.49021918077182743900e+03, - 0.13864544053096173570e+03, - -0.68660043458106542857e+03, - 0.99514192571294256595e+03, - -0.75005708512522846831e+03, - 0.20446920143365974809e+03, - 0.50162551866513643972e+03, - -0.86818784480445219742e+03, - 0.85479803770833893850e+03, - -0.35570468206427807445e+03, - -0.19859030019023390423e+03, - 0.62997341836650252844e+03, - -0.57168188531139958286e+03, - 0.22007245657966592489e+03, - 0.32272658283069262097e+03, - -0.57141213663414896473e+03, - 0.48787411789425431152e+03, - 0.28296053269921898732e+02, - -0.53391417734549838769e+03, - 0.84076071949985134779e+03, - -0.59350331673127459453e+03, - 0.32093409697205558473e+02, - 0.67358013536145961098e+03, - -0.97516200041490151307e+03, - 0.80956600219814902175e+03, - -0.10875199952995261299e+03, - -0.60557369943554056135e+03, - 0.10574208941800241064e+04, - -0.83962505189798707761e+03, - 0.20171064247561008642e+03, - 0.62381021073730846638e+03, - -0.10129834724757724871e+04, - 0.86026842177727098715e+03, - -0.11362830574972258546e+03, - -0.64479863633992533778e+03, - 0.10778051045677852926e+04, - -0.76371134540711534555e+03, - 0.17107265380704155255e+01, - 0.88633227418420676713e+03, - -0.12048849234785334374e+04, - 0.84359055300115733189e+03, - 0.16427442397225931359e+03, - -0.11211660595300095338e+04, - 0.15514848166674360073e+04, - -0.10873132689504466271e+04, - -0.81969729847637623266e+02, - 0.10886759428239693079e+04, - -0.19970439183152766418e+04, - 0.84851186563675219077e+03, - -0.11818510852337985853e+04, - -0.25842605241694063807e+04, - -0.10953709001396623535e+04, - -0.52679669347912022204e+04, - -0.53216723320337096084e+04, - -0.64235008149979121299e+04, - -0.94174937423897808912e+04, - -0.73979644962458905866e+04, - -0.65893594266038917340e+04, - -0.44379715896999186953e+04, - 0.16789088247201229933e+04, - 0.38756665912724834016e+04, - 0.57822683473138522459e+04, - 0.63242179165996649317e+04, - 0.23967061533525145478e+03, - -0.25922803290467022634e+04, - -0.49102442523174022426e+04, - -0.53854662834988166651e+04, - 0.10037926186082612503e+04, - 0.38466619013508779972e+04, - 0.42445579760255641304e+04, - 0.24101964775908882075e+04, - -0.36179173719568684646e+04, - -0.49334982355810652734e+04, - -0.95416052241957083879e+03, - 0.21536858445546986331e+04, - 0.43679670684916327446e+04, - 0.21025433684560407528e+04, - -0.45086167472584493225e+04, - -0.32032938473711701590e+04, - 0.55985930815131416693e+03, - 0.23721852466770073988e+04, - 0.44299694519836384643e+04, - -0.26615697430739373885e+04, - -0.45193266159041895662e+04, - 0.94423813416600842174e+03, - 0.16707486984837614727e+04, - 0.34817480277362551533e+04, - -0.12978300332547023572e+04, - -0.49906015388148689453e+04, - 0.12288726401381350115e+04, - 0.32463702173673223115e+04, - 0.88567438612782370910e+03, - -0.17933515630859533303e+04, - -0.30933683502673011390e+04, - 0.12259618380878193875e+04, - 0.42988491072807455566e+04, - -0.14245444240428942067e+04, - -0.35949221825298168369e+04, - 0.87408971576777037171e+03, - 0.19419596543146644763e+04, - 0.15108775977695333950e+04, - -0.22480001250664213330e+04, - -0.29348117610100030106e+04, - 0.36060612070615511584e+04, - 0.20834093315819386589e+04, - -0.34561726270074395870e+04, - -0.92898484638442391770e+03, - 0.17411069722782578992e+04, - 0.13667163555473809993e+04, - -0.35715600791390596669e+03, - -0.33468719007013164628e+04, - 0.15271030417679121456e+04, - 0.37429508235199059527e+04, - -0.33967180020386558681e+04, - -0.16407379704588856839e+04, - 0.27101614070693294707e+04, - 0.58774954037499446713e+03, - -0.11121919445727121456e+04, - -0.15544942328817796806e+04, - 0.11215918577422301041e+04, - 0.24365514260417589867e+04, - -0.23686850010494918024e+04, - -0.20666605873160524425e+04, - 0.36092771401406575933e+04, - 0.47680366881715428917e+03, - -0.37192182966286554802e+04, - 0.14326197093228397534e+04, - 0.20917863882600991019e+04, - -0.16557894894347386980e+04, - -0.50160915363618187257e+03, - -0.85580848693595598320e+02, - 0.18172491182489502535e+04, - -0.29023007257521396696e+03, - -0.31792053031188979730e+04, - 0.30604562364207690734e+04, - 0.11840512598917437117e+04, - -0.36309872479573355122e+04, - 0.87303323690517856903e+03, - 0.28401480044704844659e+04, - -0.21419348670985909848e+04, - -0.16404727926123337056e+04, - 0.30803889209887711331e+04, - -0.78080107686678206846e+03, - -0.14057760094329578351e+04, - 0.88222723105877003036e+03, - 0.22351518569058839603e+03, - 0.61064036040819223672e+03, - -0.18515098521269871981e+04, - 0.57955533039598412870e+03, - 0.22668609778858099162e+04, - -0.26768957150827900477e+04, - -0.42988292150325588636e+03, - 0.30880646348517043407e+04, - -0.15682575673475230360e+04, - -0.22843658706584938045e+04, - 0.33308250051269528740e+04, - 0.12129505360455561380e+01, - -0.35903432947438031988e+04, - 0.30057750556085698008e+04, - 0.91317447779510985129e+03, - -0.34196540081207540425e+04, - 0.19388530812403714663e+04, - 0.11583531100213642731e+04, - -0.20919486533461604267e+04, - 0.36601988604314072973e+03, - 0.12872863061169537104e+04, - -0.84227445612375151995e+03, - -0.70481042238622023888e+03, - 0.12216598667372682030e+04, - -0.35079837780131401814e+03, - -0.45626292487199862080e+03, - 0.30070167198435524369e+03, - 0.27441610435033009452e+02, - 0.44193756216441738616e+03, - -0.11556557118831337903e+04, - 0.75571896079386624479e+03, - 0.78968757375601762760e+03, - -0.17666306620498407938e+04, - 0.85306314274958560873e+03, - 0.97022544523991155074e+03, - -0.14328128293782688161e+04, - -0.15409835170439467333e+03, - 0.18394550371223260754e+04, - -0.13238729638478109791e+04, - -0.10998932498892531839e+04, - 0.26749168626289342683e+04, - -0.14085068421462106016e+04, - -0.14339331700187453862e+04, - 0.26758760080291613122e+04, - -0.92782357851737060628e+03, - -0.17441268597369178224e+04, - 0.22213535009258953323e+04, - 0.27789993594647785358e+04, - -0.47616429472198969961e+04, - -0.11250519438690944298e+04, - 0.59799610382568534988e+04, - -0.40875738186094072262e+04, - -0.20016662062939412863e+04, - 0.55117752979911401781e+04, - -0.20445745562703241376e+04, - -0.38638987410507152163e+04, - 0.51547324547627349602e+04, - 0.50194428868595497306e+03, - -0.62969924732655354092e+04, - 0.53552334827751483317e+04, - 0.20759414983004849091e+04, - -0.72283184122990378455e+04, - 0.43495363202499947874e+04, - 0.33899133220253424952e+04, - -0.62521602907252581645e+04, - 0.10441363191255295533e+04, - 0.59111696184721586178e+04, - -0.52298482170635325019e+04, - -0.24505090536714410518e+04, - 0.80748997217820369769e+04, - -0.41623871764120131047e+04, - -0.43962132803610911651e+04, - 0.74847439021389382106e+04, - -0.13430842354708436233e+04, - -0.55029231044944863243e+04, - 0.45650932626664316558e+04, - 0.27250603147982046721e+04, - -0.59731206744832297773e+04, - 0.10644249016864446276e+04, - 0.54942872355816734853e+04, - -0.44960735992012141651e+04, - -0.20834160447220497190e+04, - 0.51812055920438651810e+04, - -0.51729514978691224769e+03, - -0.42003260286949334841e+04, - 0.18381957219795945093e+04, - 0.43759111251915410321e+04, - -0.42037680585276575584e+04, - -0.29218409407358390126e+04, - 0.71432743305804033298e+04, - -0.12919012121897742418e+04, - -0.65890100008109038754e+04, - 0.53198710356246638185e+04, - 0.38159670668728458622e+04, - -0.70949012644323120185e+04, - -0.35931096963464267446e+03, - 0.79091941095584170398e+04, - -0.39415010314351202396e+04, - -0.54128974249495840922e+04, - 0.66196802068662864258e+04, - 0.15400831061377209608e+04, - -0.53938395605264076949e+04, - -0.45217961815141484294e+03, - 0.54850262100200925488e+04, - 0.31457382060825331394e+02, - -0.70373651647806573237e+04, - 0.32250336721072408181e+04, - 0.65927996062310958223e+04, - -0.61254829026854486074e+04, - -0.41522033224301403607e+04, - 0.76824109633338266576e+04, - 0.17802275823664015206e+04, - -0.80915631697914432152e+04, - 0.90370556258033309405e+03, - 0.74371318162306988597e+04, - -0.24581712780361381192e+04, - -0.58511221515856750557e+04, - 0.21837587862914151629e+04, - 0.65450193894176181857e+04, - -0.24462955552191801871e+04, - -0.83335130111798116559e+04, - 0.60864650836197060926e+04, - 0.67720194490311932896e+04, - -0.76564187260154012620e+04, - -0.37561350163769661776e+04, - 0.57310153392407364663e+04, - 0.48269621250318241437e+04, - -0.55016642608520569411e+04, - -0.59775478649828883135e+04, - 0.68576446112551593615e+04, - 0.57830111844177299645e+04, - -0.64700316275637260333e+04, - -0.65872139627976084739e+04, - 0.71376226616028980061e+04, - 0.65842082298271361651e+04, - -0.65303460421832251086e+04, - -0.57820164300815440583e+04, - 0.31017166841752537039e+04, - 0.88828802776337943214e+04, - -0.17471656055123564784e+04, - -0.11319655807258275672e+05, - 0.25820751365284190797e+04, - 0.93904252364907260926e+04, - 0.88991751008613289287e+03, - -0.74746046715958609639e+04, - -0.63170387980412706384e+04, - 0.78833407764446610599e+04, - 0.90793332054084512492e+04, - -0.57939604358670667352e+04, - -0.94158529854075241019e+04, - 0.21544236658255726979e+03, - 0.97245519823548929708e+04, - 0.60759037639346615833e+04, - -0.78981767237005797142e+04, - -0.10117005481746804435e+05, - 0.25009270420436437234e+04, - 0.11464029787896495691e+05, - 0.48729610240040210556e+04, - -0.73485351564319935278e+04, - -0.11133971148886897936e+05, - -0.98359052167669426581e+03, - 0.12546370445448681494e+05, - 0.85384291879779684677e+04, - -0.34082377096706336488e+04, - -0.11526205409606269313e+05, - -0.99049162354592572228e+04, - 0.64007743085878328202e+04, - 0.13587842806414853840e+05, - 0.77038452689147961792e+04, - -0.24502742246860107116e+04, - -0.15187372951465191363e+05, - -0.11790895516029388091e+05, - 0.14181245328317729673e+04, - 0.10367071512651848025e+05, - 0.17219605952759146021e+05, - 0.87031816987810252613e+04, - -0.52244413947092089074e+04, - -0.12986750402712912546e+05, - -0.19441853861381376191e+05, - -0.12195224619718834219e+05, - -0.94437324632953527725e+03, - 0.89707020961501966667e+04, - 0.20476177669477285235e+05, - 0.23317509677528374596e+05, - 0.23614320300651259458e+05, - 0.21296561185359441879e+05, - 0.15816854584133403478e+05, - 0.11745356571148493458e+05, - 0.78438814851478909986e+04, - 0.47014502559813881817e+04, - 0.25761861844907539307e+04, - 0.19227513199929542225e+04, - 0.44257539943775600477e+03, - 0.34774151174950020504e+03, - 0.67435543653986894697e+03, - -0.63888334637305354136e+03, - 0.53987303792255636381e+03, - 0.65055618507513727877e+02, - -0.61832299657828798445e+03, - 0.83048585646699780227e+03, - -0.49605045197455672223e+03, - -0.20692873517954581075e+03, - 0.85311384667443974195e+03, - -0.10078477218993256201e+04, - 0.50420726843202561440e+03, - 0.42226800572589746707e+03, - -0.12499134988606824663e+04, - 0.14570090948079393911e+04, - -0.84208958218031773413e+03, - -0.33861639220523159111e+03, - 0.14791942356129493419e+04, - -0.19530221372290750423e+04, - 0.14565885241375676742e+04, - -0.19901423507474149233e+03, - -0.11987905350866706158e+04, - 0.20221944151924433299e+04, - -0.18500208192958602922e+04, - 0.77672770334229687705e+03, - 0.63099778919942730226e+03, - -0.16419518197421573404e+04, - 0.17453875418328934757e+04, - -0.92504271309585556082e+03, - -0.34393472431230020447e+03, - 0.13529450504369067403e+04, - -0.15495729438323821796e+04, - 0.83109392492216102255e+03, - 0.39865412892269057465e+03, - -0.14535419080932388169e+04, - 0.17333662779480805511e+04, - -0.10527080466661407172e+04, - -0.25864872630260765618e+03, - 0.15232083195614920896e+04, - -0.20741820964502790048e+04, - 0.16035175081067966403e+04, - -0.32805490147688510660e+03, - -0.11227470656622783736e+04, - 0.20278694059064271187e+04, - -0.19458931698475605572e+04, - 0.93562413539798842521e+03, - 0.47832747789096436009e+03, - -0.15815031228255916176e+04, - 0.18357162684701402213e+04, - -0.11514704683909772029e+04, - -0.77395388262729085227e+02, - 0.11870876932415453666e+04, - -0.15953921190090015898e+04, - 0.11044268835037653389e+04, - -0.46314530856188719099e+03, - -0.50374924468998005977e+03, - 0.14746438136396100163e+04, - -0.17557191825356458139e+04, - 0.85337358012165077525e+03, - 0.43561578956054648870e+03, - -0.17188761209045549094e+04, - 0.19460040406048728983e+04, - -0.12607545391843764264e+04, - -0.33280589516324317856e+03, - 0.16835357990541117488e+04, - -0.23823759261471477657e+04, - 0.17152274828043491652e+04, - -0.33304359498415175267e+03, - -0.13631271210271411292e+04, - 0.21641402519405751264e+04, - -0.19833364573153494348e+04, - 0.63597141144174042893e+03, - 0.79210854969723663999e+03, - -0.18178182398711476253e+04, - 0.15707144578952595566e+04, - -0.54901982593597938376e+03, - -0.92579329383757533378e+03, - 0.16387751346455536350e+04, - -0.14495702728033234052e+04, - 0.13166599138032060523e+03, - 0.12255767938419915026e+04, - -0.21004665972662137392e+04, - 0.15981479704421449242e+04, - -0.25168679608679059356e+03, - -0.15142812914540663769e+04, - 0.23589800624006006728e+04, - -0.20643045932463401186e+04, - 0.43047298356681397991e+03, - 0.13248293069275039215e+04, - -0.25110538332075061589e+04, - 0.21151680793388468373e+04, - -0.66382742405530689211e+03, - -0.13154610855658536366e+04, - 0.23409081358058801925e+04, - -0.21053038017581725398e+04, - 0.42756200526097273951e+03, - 0.13695867903151720384e+04, - -0.24854216645942433388e+04, - 0.18844082450224593686e+04, - -0.19222579844609251154e+03, - -0.18911864679730754233e+04, - 0.27526036272392452702e+04, - -0.20874228413190144238e+04, - -0.10521280084527005272e+03, - 0.22792555071192582545e+04, - -0.33649786692662792120e+04, - 0.24848884892824876260e+04, - -0.78890562069020777614e+01, - -0.21484831670446342287e+04, - 0.41982157971049200569e+04, - -0.16366457930464302990e+04, - 0.26068650187605408064e+04, - 0.58623875154607967488e+04, - 0.28266965537031856002e+04, - 0.11802483742235292084e+05, - 0.12624598245826531638e+05, - 0.14656858842810495844e+05, - 0.21786793470473847265e+05, - 0.17206512592564864462e+05, - 0.15062840138129082334e+05, - 0.10402245842270102003e+05, - -0.39612541966373246396e+04, - -0.89394867822501182673e+04, - -0.13357300240552025571e+05, - -0.14597001771597726474e+05, - -0.62788232624365900847e+03, - 0.61089620194182762134e+04, - 0.11234021645634307788e+05, - 0.12492032682307490177e+05, - -0.22506244323405439900e+04, - -0.90771819932877951942e+04, - -0.95565815826461748657e+04, - -0.58000132964180647832e+04, - 0.84732366305521172762e+04, - 0.11466049275245997705e+05, - 0.19693361849386333233e+04, - -0.46431969185224961620e+04, - -0.10410727451690690941e+05, - -0.46818486549228091462e+04, - 0.10456871745373302474e+05, - 0.71490326346695328539e+04, - -0.89888132888280949828e+03, - -0.58901867037561842153e+04, - -0.99546606794592007645e+04, - 0.60876529694703958739e+04, - 0.10265466386447325931e+05, - -0.18194711415283366023e+04, - -0.42905186925035959575e+04, - -0.76863560200748806892e+04, - 0.28133479185344299367e+04, - 0.11501792847364609770e+05, - -0.26195877630107852383e+04, - -0.78262749232764172120e+04, - -0.17292367979759699210e+04, - 0.39248119011603112085e+04, - 0.72231128346411023813e+04, - -0.27690296628013852569e+04, - -0.10087812004113706280e+05, - 0.34646093727111051521e+04, - 0.81735787027167771157e+04, - -0.19508662011632095528e+04, - -0.44999353474774879942e+04, - -0.35064291611123649091e+04, - 0.52010410893553571441e+04, - 0.68044439932990771922e+04, - -0.83763203090477054502e+04, - -0.47825941779905615476e+04, - 0.80019741072797414745e+04, - 0.20609717514451199349e+04, - -0.38706729397759731910e+04, - -0.33433129462919491743e+04, - 0.98339243015647423363e+03, - 0.76615703998558028616e+04, - -0.35761785209241556913e+04, - -0.84872016745312757848e+04, - 0.76146444470761425691e+04, - 0.40283424615023154729e+04, - -0.64281003054625198274e+04, - -0.13143641403246581376e+04, - 0.26524838927045307173e+04, - 0.34231894699359750120e+04, - -0.24050985214422380523e+04, - -0.57629993498033163632e+04, - 0.55021421818640219499e+04, - 0.48564362227072197129e+04, - -0.84873063218681036233e+04, - -0.96486111811351054257e+03, - 0.85440209260077517683e+04, - -0.33941946714083055667e+04, - -0.46184198403078962656e+04, - 0.35346615839194960245e+04, - 0.14309737995525604219e+04, - 0.50033596380625517952e+02, - -0.42513471901965349389e+04, - 0.93817088273573290280e+03, - 0.69157519359383441042e+04, - -0.65862926907266728449e+04, - -0.31438158123710300060e+04, - 0.86000334015919452213e+04, - -0.19614164141803412349e+04, - -0.68761550332456927208e+04, - 0.54356621824242720322e+04, - 0.32643920021107751381e+04, - -0.66926522613071656451e+04, - 0.15875363149971865369e+04, - 0.32108894812104299490e+04, - -0.17761697110801960662e+04, - -0.91117190089541998077e+03, - -0.10101669691239218309e+04, - 0.39886583715523120190e+04, - -0.12341644085933885435e+04, - -0.51485658534518579472e+04, - 0.59522881873770547827e+04, - 0.12775524503124861440e+04, - -0.73679172645446706156e+04, - 0.37247165311800413292e+04, - 0.53375497310625833052e+04, - -0.78858935484117882879e+04, - 0.24163259854054413722e+03, - 0.80878040268435670441e+04, - -0.68489633324806418386e+04, - -0.20588011453852868726e+04, - 0.77170881208823666384e+04, - -0.42226419240435961910e+04, - -0.29193656067486235770e+04, - 0.49759739132948661791e+04, - -0.83307292174223755410e+03, - -0.31456186324937439167e+04, - 0.22265571628179131949e+04, - 0.13246329984694627910e+04, - -0.25908563399042541278e+04, - 0.72649102008149338872e+03, - 0.95683039631174040096e+03, - -0.43600194688766794116e+03, - -0.41503693448705195124e+03, - -0.67403713505901441749e+03, - 0.24242539889661884445e+04, - -0.16690150738325526163e+04, - -0.17129467090224773074e+04, - 0.38129529211679673608e+04, - -0.16179755433227276171e+04, - -0.25854408997287091552e+04, - 0.35572102376021248347e+04, - 0.26314560438634350703e+03, - -0.43214326056564859755e+04, - 0.32580892919228049323e+04, - 0.22823975408968863121e+04, - -0.59388620523033441714e+04, - 0.30925340247814292525e+04, - 0.33636343529150749418e+04, - -0.61274480189119567513e+04, - 0.20214562212606340381e+04, - 0.41611704591400930440e+04, - -0.52157709377891924305e+04, - -0.51191914752288221280e+04, - 0.97853440484218899655e+04, - 0.13360919650643802470e+04, - -0.11479001997241728532e+05, - 0.85246794501466793008e+04, - 0.34639334933459535932e+04, - -0.11161428172362873738e+05, - 0.48933634070536645595e+04, - 0.71517334828657722028e+04, - -0.10778094368243824647e+05, - 0.29546577625797732480e+03, - 0.11491004635410663468e+05, - -0.10650404870748287067e+05, - -0.33107916632520245912e+04, - 0.13545559977639160934e+05, - -0.83713864818738893518e+04, - -0.66535820664260227204e+04, - 0.12499399457660658300e+05, - -0.25338269945017591454e+04, - -0.11252422103979910389e+05, - 0.10382027748216316468e+05, - 0.41723889525054119076e+04, - -0.14971820266143706249e+05, - 0.74391506099981070292e+04, - 0.88050700808414967469e+04, - -0.14182742712991834196e+05, - 0.17462220619697689017e+04, - 0.11375260448584585902e+05, - -0.87883860490191673307e+04, - -0.59631897301160579445e+04, - 0.11926888476091195116e+05, - -0.15188000117402748401e+04, - -0.11489065079820615210e+05, - 0.86284509071931515791e+04, - 0.52557088954763685251e+04, - -0.11172524382364532357e+05, - 0.68566802757067591756e+03, - 0.96450448907533391321e+04, - -0.46560087773161485529e+04, - -0.89204888149211674317e+04, - 0.94256587630120284302e+04, - 0.50010866779895604850e+04, - -0.14281698407197711276e+05, - 0.31438117067372445490e+04, - 0.12715140961425517162e+05, - -0.10613244852264428118e+05, - -0.73950645243263925295e+04, - 0.13990843926974077476e+05, - 0.65294054591998076376e+03, - -0.15404862282142588811e+05, - 0.72689258045646383835e+04, - 0.11100819860979545410e+05, - -0.12650593215600256372e+05, - -0.43568109253836501011e+04, - 0.11728215849767617328e+05, - 0.11612763794634497572e+04, - -0.12148901743304213596e+05, - 0.87457020619335582978e+03, - 0.14092281419410077433e+05, - -0.70645040514699121559e+04, - -0.12749942093294077495e+05, - 0.12242672995063385315e+05, - 0.80811209434236097877e+04, - -0.15067117481514358587e+05, - -0.38443951465072432256e+04, - 0.16135429847258412337e+05, - -0.12820733894991747093e+04, - -0.15343009191032793751e+05, - 0.45607494057664553111e+04, - 0.12698818512906356773e+05, - -0.48940962321478718877e+04, - -0.13723662468744094440e+05, - 0.61119801236457287814e+04, - 0.15790423759331111796e+05, - -0.11950667621715329005e+05, - -0.13184627782051635222e+05, - 0.14305650498869788862e+05, - 0.88396528781196302589e+04, - -0.12141817240364880490e+05, - -0.10163039078274681742e+05, - 0.11918067647744914211e+05, - 0.11608689270030696207e+05, - -0.13781805226548707651e+05, - -0.11766227417216183312e+05, - 0.13318160784690273431e+05, - 0.12987937863278668374e+05, - -0.14088589712704384510e+05, - -0.13411641450620589239e+05, - 0.12593463548075722429e+05, - 0.12963527393717764426e+05, - -0.73547376974718317797e+04, - -0.17847003413742262637e+05, - 0.43126324734526378961e+04, - 0.21706501624127613468e+05, - -0.40941671364741168873e+04, - -0.19471547047583109816e+05, - -0.23828103011160333153e+04, - 0.16249103773779239418e+05, - 0.12064631053402101315e+05, - -0.15936732358200028102e+05, - -0.17973363580093991914e+05, - 0.11107200755855792522e+05, - 0.19532749208800527413e+05, - -0.26016215731209678097e+03, - -0.20321362613173616410e+05, - -0.11922241087305068504e+05, - 0.15991546330305029187e+05, - 0.20363113155509479839e+05, - -0.48155676553736066126e+04, - -0.23368835124923771218e+05, - -0.10194652030014916818e+05, - 0.15271403972578240428e+05, - 0.22689714778773577564e+05, - 0.14949306721100956565e+04, - -0.24750164716072849842e+05, - -0.18006885962942429614e+05, - 0.69432798026923437646e+04, - 0.24173602354570859461e+05, - 0.19117152478424803121e+05, - -0.12233598867587694258e+05, - -0.27744190945564725553e+05, - -0.16380419688432884868e+05, - 0.60125936876544810730e+04, - 0.30223293850097612449e+05, - 0.23928357453645181522e+05, - -0.20285776256294966515e+04, - -0.22267253127635391138e+05, - -0.34281272671706072288e+05, - -0.17673579609089527366e+05, - 0.97597329152323782182e+04, - 0.27702576385394957470e+05, - 0.38580008101858540613e+05, - 0.25150629941001712723e+05, - 0.23490994941202111477e+04, - -0.19115331378797178331e+05, - -0.40892305469708553574e+05, - -0.47913329613079426053e+05, - -0.48080229611046001082e+05, - -0.43144012377526400087e+05, - -0.32413509871967336949e+05, - -0.23858772536919164850e+05, - -0.15948128900050844095e+05, - -0.95209020246808049706e+04, - -0.54840689810999429028e+04, - -0.35510152385211526962e+04, - -0.11913099254167195795e+04, - -0.70101501948764030203e+03, - -0.10397374665478530460e+04, - 0.78064394172841764430e+03, - -0.67928607328440705260e+03, - -0.21206220661215857604e+03, - 0.96220242181557000549e+03, - -0.12220703139793595255e+04, - 0.68887127581041681879e+03, - 0.36363726051243492066e+03, - -0.13216252161253244140e+04, - 0.15577467048501775935e+04, - -0.83064362482621004347e+03, - -0.52356872354882636955e+03, - 0.17570127322921177893e+04, - -0.21167130557869595577e+04, - 0.13025258968741452463e+04, - 0.33559942022453537902e+03, - -0.19469528962975548438e+04, - 0.26454405893060679773e+04, - -0.19957000430141229117e+04, - 0.28359269939438127039e+03, - 0.16253391986636636375e+04, - -0.27330375711063793460e+04, - 0.24554134438108849281e+04, - -0.93388265470092801479e+03, - -0.10271856569221317841e+04, - 0.23977355758024932584e+04, - -0.24659689633163907274e+04, - 0.12249736324469904503e+04, - 0.63559204015392242582e+03, - -0.20980849251943614036e+04, - 0.23726605636157241861e+04, - -0.13143465080666571794e+04, - -0.49595848197214746733e+03, - 0.20717360458108109924e+04, - -0.25454122412860924669e+04, - 0.16385878016176025085e+04, - 0.19275997517297983563e+03, - -0.19930194330599149453e+04, - 0.28146003938006538192e+04, - -0.22116462208934458431e+04, - 0.47796205816274618883e+03, - 0.15095838315003170464e+04, - -0.27427486711395308703e+04, - 0.26055666073361066992e+04, - -0.11849373482947303273e+04, - -0.77861099128798980473e+03, - 0.22816365508841790870e+04, - -0.25746496339478862865e+04, - 0.15456052021614159457e+04, - 0.23431663244023530979e+03, - -0.18159156647805323246e+04, - 0.23722556803366755958e+04, - -0.16281720731003397304e+04, - 0.54145797407134318746e+03, - 0.93938781724951286378e+03, - -0.22422537289679739843e+04, - 0.25096738029687112430e+04, - -0.11624682993770045414e+04, - -0.68376659225445189350e+03, - 0.24370326784605563262e+04, - -0.27137738068362646118e+04, - 0.17249350118370041400e+04, - 0.44917100326299595281e+03, - -0.22551621633494719390e+04, - 0.31270237652390865151e+04, - -0.21685666920644766833e+04, - 0.27951055312089653171e+03, - 0.19471835481724961028e+04, - -0.29156555864802962788e+04, - 0.25247039753427711730e+04, - -0.60450496825370214538e+03, - -0.13638840862974850552e+04, - 0.26894776736014723610e+04, - -0.22413851004106190885e+04, - 0.70496172683564532235e+03, - 0.14155883434343936642e+04, - -0.24703797713016679154e+04, - 0.22238445108059768245e+04, - -0.39448010482313623015e+03, - -0.15576251620606424240e+04, - 0.28711697831622523154e+04, - -0.23232364773871504440e+04, - 0.56618539016671138597e+03, - 0.18269605541630949119e+04, - -0.30699232086666061150e+04, - 0.28056403983891264033e+04, - -0.73078742108134781574e+03, - -0.15948503043358052764e+04, - 0.32390059607589992083e+04, - -0.28370125005130821592e+04, - 0.10075348873061201402e+04, - 0.15878622499002897257e+04, - -0.30199456728002865020e+04, - 0.28308927359446206538e+04, - -0.72668843896370185576e+03, - -0.16298586591258083445e+04, - 0.31929042764065316078e+04, - -0.25746754927877850605e+04, - 0.49826029672800621029e+03, - 0.21939454917989346541e+04, - -0.34408348299432241220e+04, - 0.27983547603342967705e+04, - -0.17689843060059251911e+03, - -0.25311745322156402835e+04, - 0.39998880774290219051e+04, - -0.30845736106584272420e+04, - 0.18074968447797044746e+03, - 0.23678171748354002375e+04, - -0.49066315833191338243e+04, - 0.17293581207568649916e+04, - -0.31642057063985262175e+04, - -0.73732638912555012212e+04, - -0.38785475913412819864e+04, - -0.14658186118904286559e+05, - -0.16384358225833260803e+05, - -0.18476924987666723609e+05, - -0.27737414527126857138e+05, - -0.22018953076430349029e+05, - -0.19001644731978853088e+05, - -0.13377092992713984131e+05, - 0.51046192240026275613e+04, - 0.11383644367195674931e+05, - 0.16972404214293492259e+05, - 0.18571697133641748223e+05, - 0.87301099322976881467e+03, - -0.79033436941392346853e+04, - -0.14169408039953963453e+05, - -0.15953888770253106486e+05, - 0.27924881376862044817e+04, - 0.11757074455936237428e+05, - 0.11882234561704073712e+05, - 0.76410025253650819650e+04, - -0.10916354297470368692e+05, - -0.14653965500511520077e+05, - -0.22541238330127157496e+04, - 0.55432048040677800600e+04, - 0.13604535374824656174e+05, - 0.57473831478809806868e+04, - -0.13325056036429637970e+05, - -0.88482953914477548096e+04, - 0.73856653067732145246e+03, - 0.79217123272354338042e+04, - 0.12370889091626924710e+05, - -0.76777354754133148163e+04, - -0.12882184083552205266e+05, - 0.19425157901034654060e+04, - 0.58999018628813701071e+04, - 0.94203902292067105009e+04, - -0.34051780374103236682e+04, - -0.14583892486439606728e+05, - 0.30847422910850677908e+04, - 0.10310266351527228835e+05, - 0.18690420500439861371e+04, - -0.47783552934029667085e+04, - -0.92470265850316973228e+04, - 0.34288220292142368635e+04, - 0.13024503579365871701e+05, - -0.46061936519024120571e+04, - -0.10259059942765814412e+05, - 0.24222061250357833160e+04, - 0.57165217191388564970e+04, - 0.45065835066187710254e+04, - -0.66522424019931113435e+04, - -0.86642230335378353629e+04, - 0.10698660124799769619e+05, - 0.60458848732559508790e+04, - -0.10180127517384307794e+05, - -0.25606567534986561441e+04, - 0.47973680970915502257e+04, - 0.44181435884789752890e+04, - -0.13921002139660179182e+04, - -0.96898114674448333972e+04, - 0.46040575914625460427e+04, - 0.10641736677017121110e+05, - -0.94701242842098254187e+04, - -0.53356306651048016647e+04, - 0.83049972119755566382e+04, - 0.16788296869610710473e+04, - -0.35088939511293510805e+04, - -0.41464729580728198925e+04, - 0.28546692227064168037e+04, - 0.74559915552857410148e+04, - -0.69874054402161082180e+04, - -0.63316968772004775019e+04, - 0.11033926448503159918e+05, - 0.10062762372048907764e+04, - -0.10756593249928251680e+05, - 0.43690815237628394243e+04, - 0.56578998589317679944e+04, - -0.41664645776602365004e+04, - -0.21590766560428778575e+04, - 0.16179872573718034801e+03, - 0.53881253908420567313e+04, - -0.14025955937378623730e+04, - -0.84074359285734371952e+04, - 0.79116248186103794069e+04, - 0.44096614186289370991e+04, - -0.11165297338741904241e+05, - 0.24562113998613681360e+04, - 0.90455973790863154136e+04, - -0.73825623904339381625e+04, - -0.36544740286501755691e+04, - 0.81269431520686448494e+04, - -0.18482045446646543496e+04, - -0.39981670584251191940e+04, - 0.19493804594306450326e+04, - 0.15908091077289868736e+04, - 0.86956762882296095540e+03, - -0.47984505634050938170e+04, - 0.15052056916235121662e+04, - 0.64021553410817705299e+04, - -0.72729057660511889480e+04, - -0.19719168567205886120e+04, - 0.96505158676018199913e+04, - -0.48547771943444186036e+04, - -0.68666823990022003272e+04, - 0.10262846911342547173e+05, - -0.60120404265994795878e+03, - -0.10037602562283665975e+05, - 0.85887436574308394484e+04, - 0.25759016118552081025e+04, - -0.96189618674759058194e+04, - 0.50813079284673440270e+04, - 0.40001401851542495933e+04, - -0.65122241267048948430e+04, - 0.10709224813803957659e+04, - 0.41707330058236193508e+04, - -0.31306917557944525470e+04, - -0.13492684261824497298e+04, - 0.30251577778385681086e+04, - -0.80184060191249170657e+03, - -0.11505178546798499610e+04, - 0.31454848662716574381e+03, - 0.87316213996384146867e+03, - 0.50795313128552606941e+03, - -0.28306536460877896388e+04, - 0.20360280893180670319e+04, - 0.20798753770187736336e+04, - -0.45968346285892994274e+04, - 0.17238654129583046597e+04, - 0.36091643218979597805e+04, - -0.47417948695978529940e+04, - -0.27778531974044216213e+03, - 0.56052551051536765954e+04, - -0.43717945262699331579e+04, - -0.26346760440006514727e+04, - 0.73265434988725501171e+04, - -0.38078913426418043855e+04, - -0.42760017142707374660e+04, - 0.76755187398641937762e+04, - -0.23838727733149730739e+04, - -0.54794693381012011741e+04, - 0.67498229013170830513e+04, - 0.53656101580868507881e+04, - -0.11411085887728577291e+05, - -0.53891016955273278199e+03, - 0.12501565515566318936e+05, - -0.10007521576836537861e+05, - -0.33946753019832490281e+04, - 0.12813145186204086713e+05, - -0.63727065272310564978e+04, - -0.75251547333341604826e+04, - 0.12685291425179480939e+05, - -0.16047771900945149355e+04, - -0.11990938937075696231e+05, - 0.12090412201058681603e+05, - 0.28757513160824191800e+04, - -0.14471295348507628660e+05, - 0.92379087411728669395e+04, - 0.73234329778919200180e+04, - -0.14066501537283662401e+05, - 0.32167355451486832862e+04, - 0.12276454612531399107e+05, - -0.11731928488853331146e+05, - -0.40394531393840061355e+04, - 0.15900947068447705533e+05, - -0.76752522770104214942e+04, - -0.98829393328409005335e+04, - 0.15205983051742232419e+05, - -0.97778329386373150101e+03, - -0.13282755401053913374e+05, - 0.95682367588794477342e+04, - 0.73915187824689101035e+04, - -0.13626841158674458711e+05, - 0.11832698755708711360e+04, - 0.13519453975364174767e+05, - -0.94390393136535931262e+04, - -0.70254289194290931846e+04, - 0.13437690424980473836e+05, - -0.34761186654412034613e+03, - -0.12274489557879835047e+05, - 0.63029344952719784487e+04, - 0.10324469857135365601e+05, - -0.11794753784457841903e+05, - -0.47522502014950850935e+04, - 0.16149151583970160573e+05, - -0.40963764466738330157e+04, - -0.13981910888941012672e+05, - 0.12008305497722469227e+05, - 0.81972797932195026078e+04, - -0.15734021148550002181e+05, - -0.63439255603584661003e+03, - 0.17052434868323500268e+05, - -0.76310097687095521906e+04, - -0.12867460555653746269e+05, - 0.13741263257745333249e+05, - 0.62670096434453716938e+04, - -0.14277419245742210478e+05, - -0.16038673287126882769e+04, - 0.15041864161127678017e+05, - -0.20016900321961311420e+04, - -0.15974784907961327917e+05, - 0.86251914890379066492e+04, - 0.14023829202499395251e+05, - -0.13843957105771951319e+05, - -0.90323548918553169642e+04, - 0.16904770058837613760e+05, - 0.45665219037190800009e+04, - -0.18217337822016648715e+05, - 0.90879583772169326039e+03, - 0.17862824600723026379e+05, - -0.47340709836107826050e+04, - -0.15545539135809751315e+05, - 0.62045566814181693189e+04, - 0.16145163717725059541e+05, - -0.81419228392230925238e+04, - -0.17026711786738167575e+05, - 0.13282243571139995765e+05, - 0.14704972163820359128e+05, - -0.15328213481253649661e+05, - -0.11299579044727222936e+05, - 0.14429084866443296050e+05, - 0.12061602952042292600e+05, - -0.14417392180592369186e+05, - -0.12916844342831549511e+05, - 0.15820414030671156070e+05, - 0.13475758515386005456e+05, - -0.15452444509801327513e+05, - -0.14569970727656977033e+05, - 0.15770001658916482484e+05, - 0.15558792613194607839e+05, - -0.13926669908043331816e+05, - -0.16050384417370401934e+05, - 0.94550709143974327162e+04, - 0.20377173130426228454e+05, - -0.57073351332565034681e+04, - -0.23769205992292081646e+05, - 0.36567239880546399036e+04, - 0.22712742197564984963e+05, - 0.34084020843718008109e+04, - -0.19831560408805144107e+05, - -0.13111116744900615231e+05, - 0.18306207922565154149e+05, - 0.20153054728886545490e+05, - -0.12034272994846298388e+05, - -0.22988554356069380447e+05, - 0.19881333754597258690e+03, - 0.23916388421379542706e+05, - 0.13323593418035306968e+05, - -0.18346566795489496144e+05, - -0.23293980830612606951e+05, - 0.53300658565654202903e+04, - 0.26933106966346964327e+05, - 0.12086006158124653666e+05, - -0.17971691543079155963e+05, - -0.26161850142163140845e+05, - -0.12454029742998434358e+04, - 0.27782515667297098844e+05, - 0.21378129196085930744e+05, - -0.80024652777943483670e+04, - -0.28595351108207280049e+05, - -0.21021177076845848205e+05, - 0.13351877835223102011e+05, - 0.32027756957072127989e+05, - 0.19671165251360624097e+05, - -0.80484671566130546125e+04, - -0.34084860663791376282e+05, - -0.27592672451254726184e+05, - 0.15130949504258931029e+04, - 0.26860982876545247564e+05, - 0.38713580147753564233e+05, - 0.20440355313457846933e+05, - -0.10503550031320624839e+05, - -0.33096019641173646960e+05, - -0.43611191195625615364e+05, - -0.29268752124811799149e+05, - -0.31529208219687170640e+04, - 0.22865991666339788935e+05, - 0.46463232841904129600e+05, - 0.55601285015638241020e+05, - 0.55590306841890749638e+05, - 0.49455243598577479133e+05, - 0.37670609917473469977e+05, - 0.27453030274347551313e+05, - 0.18345067715298704570e+05, - 0.11003603875871163837e+05, - 0.64740933489954040851e+04, - 0.38232470938932824538e+04, - 0.15969747935988325480e+04, - 0.83165374504525459542e+03, - 0.88004249735228825102e+03, - -0.43308738339483693380e+03, - 0.44114151836704871812e+03, - 0.24244895371977111154e+03, - -0.74848108261784364004e+03, - 0.91082255040483039465e+03, - -0.48739694063792632051e+03, - -0.30512707681324656050e+03, - 0.10215110850071140476e+04, - -0.12035225115182524860e+04, - 0.67502922605383594146e+03, - 0.32156973593803991207e+03, - -0.12443937060131702310e+04, - 0.15446798444363826093e+04, - -0.99788417907298321552e+03, - -0.15330966287888483635e+03, - 0.13037137507635566180e+04, - -0.18190836872043935273e+04, - 0.13840865490399157807e+04, - -0.19761126910687514169e+03, - -0.11280569792698161109e+04, - 0.18858010378061205756e+04, - -0.16645018838300443349e+04, - 0.57042915173880294333e+03, - 0.81822473383403223579e+03, - -0.17659196052953514027e+04, - 0.17690126168338620118e+04, - -0.83221425805505498374e+03, - -0.53984998938452690709e+03, - 0.16088708395691808164e+04, - -0.18038984559379041457e+04, - 0.10212245071542805590e+04, - 0.31719025063072638204e+03, - -0.14950288319567951021e+04, - 0.18796067753842210095e+04, - -0.12618613153473606872e+04, - -0.37764857809051953552e+02, - 0.13361264436418769037e+04, - -0.19515179411164103840e+04, - 0.15582026229225186853e+04, - -0.35868861542731707459e+03, - -0.10271189741926089027e+04, - 0.18839515163013368237e+04, - -0.17755069885732896182e+04, - 0.76602257465048523954e+03, - 0.61527846055486509158e+03, - -0.16542953405645032490e+04, - 0.18216303243087975261e+04, - -0.10461585630792794746e+04, - -0.25419942635911291973e+03, - 0.13931883886085834092e+04, - -0.17764775922163846644e+04, - 0.12100943678947846820e+04, - -0.33592671603686443405e+03, - -0.78713808510122748885e+03, - 0.16938077068643090115e+04, - -0.18257024476332296672e+04, - 0.82776846833260344738e+03, - 0.50647105435650411209e+03, - -0.17335806690009135309e+04, - 0.19134656983644517823e+04, - -0.12001770014516393985e+04, - -0.31187535486603798063e+03, - 0.15487842588200719547e+04, - -0.21121469958064808452e+04, - 0.14180441433819062240e+04, - -0.10008695869324721173e+03, - -0.14046889877295170663e+04, - 0.20122744119169005899e+04, - -0.16621674779975649017e+04, - 0.27993935389544355985e+03, - 0.11011096565520631430e+04, - -0.19826299415111107010e+04, - 0.16065196721708664427e+04, - -0.45526352938827506023e+03, - -0.10835682851851768191e+04, - 0.18620471076292358248e+04, - -0.16923522255297941683e+04, - 0.39296555399435453637e+03, - 0.10301733974323228722e+04, - -0.20183513059833944681e+04, - 0.17155701225863695072e+04, - -0.53595118641219778510e+03, - -0.11251379635577404770e+04, - 0.20443433641596673169e+04, - -0.19405513397329568761e+04, - 0.58441887902787357234e+03, - 0.99128466321276312101e+03, - -0.21433148142229324549e+04, - 0.19302382522544876338e+04, - -0.73181269195125037186e+03, - -0.10210785901952835957e+04, - 0.20317535597474859514e+04, - -0.19613647331449074045e+04, - 0.58111903597003401956e+03, - 0.10224152673818570065e+04, - -0.21427976767756385925e+04, - 0.18235287108867548795e+04, - -0.49892819095647621452e+03, - -0.13034602157558126692e+04, - 0.22192295812375950845e+04, - -0.19222142509856328161e+04, - 0.30085455505841542845e+03, - 0.14417914488068888659e+04, - -0.24534412903871639173e+04, - 0.19642892474838422459e+04, - -0.19334767154846741732e+03, - -0.13698685147825979129e+04, - 0.29957978770417348642e+04, - -0.93897931771591322558e+03, - 0.19902316066233574929e+04, - 0.48267728597719715253e+04, - 0.26977789896417302771e+04, - 0.94782596558963487041e+04, - 0.10965076112133097922e+05, - 0.12094959410897667112e+05, - 0.18286465443143915763e+05, - 0.14586145072797908142e+05, - 0.12438474042682131767e+05, - 0.88875750202843028092e+04, - -0.33882324691937424177e+04, - -0.75224569104596430407e+04, - -0.11163845028694051507e+05, - -0.12248617063819852774e+05, - -0.61499232502943414147e+03, - 0.52853055897832682604e+04, - 0.92652759064399397175e+04, - 0.10555455169865766948e+05, - -0.18048506788778595364e+04, - -0.78654537978561729687e+04, - -0.76751189704793732744e+04, - -0.51872126549602580781e+04, - 0.72756587260364303802e+04, - 0.96938673738777579274e+04, - 0.13438691024404338350e+04, - -0.34452580038404021252e+04, - -0.91756936937666378071e+04, - -0.36628962069811896072e+04, - 0.87871578373789943726e+04, - 0.56995262047233745761e+04, - -0.26297363933278660397e+03, - -0.54610051095737280775e+04, - -0.79870083404305141812e+04, - 0.50184461415560826936e+04, - 0.83974288286556802632e+04, - -0.10793380698136147657e+04, - -0.41275026322942421757e+04, - -0.60173541355713650773e+04, - 0.21552289171611150778e+04, - 0.95788229400287891622e+04, - -0.18917378728248513653e+04, - -0.69913617217292057830e+04, - -0.10543528626170600546e+04, - 0.30416221989252994717e+04, - 0.61119060262376560786e+04, - -0.21922998618592441744e+04, - -0.87031151382471234683e+04, - 0.31527009813318891247e+04, - 0.66858774252683115265e+04, - -0.15727579610332741140e+04, - -0.37477074110757948802e+04, - -0.30141773995999415092e+04, - 0.44217970786547748503e+04, - 0.57017684276643849444e+04, - -0.70689074723000603626e+04, - -0.39617555761753719707e+04, - 0.67005229284799506786e+04, - 0.16688688046121578736e+04, - -0.31101462625727945124e+04, - -0.29843094519374185438e+04, - 0.97870500606844711911e+03, - 0.63673970678760751980e+04, - -0.30707239478322676405e+04, - -0.69297954757847801375e+04, - 0.61319393300018145965e+04, - 0.36151212002559987013e+04, - -0.55198420361942607997e+04, - -0.11377250040153289774e+04, - 0.24133171736451940887e+04, - 0.25973921798946912531e+04, - -0.17581335633914202390e+04, - -0.49799947971464707734e+04, - 0.45818889818546376773e+04, - 0.42862801809386710374e+04, - -0.74384715931548225853e+04, - -0.50491100131313976362e+03, - 0.69967470938827018472e+04, - -0.28882822783546375831e+04, - -0.36144800120556060392e+04, - 0.25547367108283215202e+04, - 0.16311612019816730026e+04, - -0.26005010592376038403e+03, - -0.35086704063204988415e+04, - 0.10109108953691501256e+04, - 0.53483845151019331752e+04, - -0.49708876721119841022e+04, - -0.31274582529465828884e+04, - 0.74857405528932722518e+04, - -0.16067791083561633059e+04, - -0.61118902126915654662e+04, - 0.51057347050367325210e+04, - 0.21538769374153407625e+04, - -0.51637086575615494439e+04, - 0.11433117845403037336e+04, - 0.25710677625032226388e+04, - -0.11033040036383083589e+04, - -0.12888939742806251161e+04, - -0.35109211243332117647e+03, - 0.30269146014058433138e+04, - -0.97988602630916341241e+03, - -0.41112090475175109532e+04, - 0.46028477832838316317e+04, - 0.15101034675950106703e+04, - -0.65226098352608896676e+04, - 0.32609039303009412833e+04, - 0.45823422925451541232e+04, - -0.69140909978240579221e+04, - 0.58434194021538530706e+03, - 0.64530918797175600048e+04, - -0.55752072618489291926e+04, - -0.16809321305925059278e+04, - 0.62264546712498158740e+04, - -0.31754894548363940885e+04, - -0.28137022993327782387e+04, - 0.44135990122164430431e+04, - -0.73048142818540952703e+03, - -0.28294654204503203800e+04, - 0.22228120701539428410e+04, - 0.70137227109384014057e+03, - -0.18353899601867133242e+04, - 0.44759456520203008267e+03, - 0.73675458682115299780e+03, - -0.89799289368021334212e+02, - -0.75301750492006635795e+03, - -0.15166199481276669303e+03, - 0.17316393490107511752e+04, - -0.12951822613826150246e+04, - -0.13194053296948818570e+04, - 0.28978457974866259974e+04, - -0.96441228096316410756e+03, - -0.25388273526803400273e+04, - 0.32259123379724901497e+04, - 0.17038783392447305687e+03, - -0.37696241500289738724e+04, - 0.30165638111970179125e+04, - 0.15865823021460169002e+04, - -0.47108208165690803071e+04, - 0.24574560866792780871e+04, - 0.27920253139462943182e+04, - -0.49648449157696395559e+04, - 0.14406322720785949514e+04, - 0.37352170150225392717e+04, - -0.45236303918571766189e+04, - -0.29847412213354728010e+04, - 0.70415952784475748558e+04, - -0.23571847953148025567e+03, - -0.71966662302050326616e+04, - 0.61736560853158780446e+04, - 0.17537404934720964320e+04, - -0.77718223458071233836e+04, - 0.42654382329897607633e+04, - 0.42015304264686428724e+04, - -0.78586220814632470137e+04, - 0.16363539440721149276e+04, - 0.66540695354489598685e+04, - -0.72836099606049465365e+04, - -0.12391778405010575170e+04, - 0.82094098676809826429e+04, - -0.54314277176967061678e+04, - -0.42344332827503922090e+04, - 0.83365606963265126979e+04, - -0.20745819937471856065e+04, - -0.71316819466492979700e+04, - 0.70204291848541834042e+04, - 0.20737327699642946754e+04, - -0.90054694487400665821e+04, - 0.42507593702596132061e+04, - 0.58223145252147060091e+04, - -0.86129025479172814812e+04, - 0.30717682709584035905e+02, - 0.81641162737858358014e+04, - -0.54874934000754319641e+04, - -0.48302954617935902206e+04, - 0.82858096362451724417e+04, - -0.45622868020162439961e+03, - -0.83645602770115310705e+04, - 0.54867732407299463375e+04, - 0.47640877175105415517e+04, - -0.84389767887328252982e+04, - -0.68419885823928382251e+02, - 0.81257793908077464948e+04, - -0.43533887557194357214e+04, - -0.63149906392398970638e+04, - 0.77014187936823755081e+04, - 0.23217238212992692752e+04, - -0.96353203486526090273e+04, - 0.27226742302527190986e+04, - 0.81656534834566627978e+04, - -0.71897212403700659706e+04, - -0.48310395285075583161e+04, - 0.93899652368433744414e+04, - 0.30727234831651992408e+03, - -0.99999123548608258716e+04, - 0.42482820212757806075e+04, - 0.78666745394827667042e+04, - -0.79089981977675670350e+04, - -0.44884498580438166755e+04, - 0.90988167446993011254e+04, - 0.11293659302814342027e+04, - -0.97341985198623988254e+04, - 0.17726714316706625141e+04, - 0.95651174833194472740e+04, - -0.55014292356595442470e+04, - -0.81737614243487805652e+04, - 0.82633580872585971520e+04, - 0.53870733061897481093e+04, - -0.10090291516790717651e+05, - -0.28155857643375115913e+04, - 0.10867621997887386897e+05, - -0.24878794330598694273e+03, - -0.10950139853770824629e+05, - 0.25613080191075191578e+04, - 0.10004789700542431092e+05, - -0.41311579122875873509e+04, - -0.99676461861761818000e+04, - 0.55276012872457922640e+04, - 0.97315863429337405250e+04, - -0.77909411369575273056e+04, - -0.87428912670567806344e+04, - 0.87696160378843051149e+04, - 0.74272870469887238869e+04, - -0.89910510253829288558e+04, - -0.75327500414527248722e+04, - 0.91197492062253222684e+04, - 0.76605241014785106017e+04, - -0.96504001216158139869e+04, - -0.81127211752769217128e+04, - 0.94314526052715755213e+04, - 0.86692820062286100438e+04, - -0.93393800601446546352e+04, - -0.95620932427061397902e+04, - 0.82120353648112195515e+04, - 0.10319225091986207190e+05, - -0.62433979490459723820e+04, - -0.12323726261022098697e+05, - 0.38651932984885047517e+04, - 0.13830703699738254727e+05, - -0.16976231712505452833e+04, - -0.13931760465572879184e+05, - -0.24678067828989369445e+04, - 0.12691530659568368719e+05, - 0.75505204937131220504e+04, - -0.11122774509708831829e+05, - -0.11948501784589287126e+05, - 0.68867966953672748787e+04, - 0.14285035308592654474e+05, - -0.94326767612296578136e+02, - -0.14810267096539069826e+05, - -0.78960707135314842162e+04, - 0.11122070521604995520e+05, - 0.14102053279730620488e+05, - -0.31426433489660498708e+04, - -0.16386025351726413646e+05, - -0.75498695395184304289e+04, - 0.11148657618512817862e+05, - 0.15931386695602963300e+05, - 0.50774823854549873658e+03, - -0.16526296095508816506e+05, - -0.13343229866976145786e+05, - 0.48637411426655389732e+04, - 0.17812494627712592774e+05, - 0.12255770505822760242e+05, - -0.77342878774523132961e+04, - -0.19517142534525348310e+05, - -0.12422989278525665213e+05, - 0.55266088083996255591e+04, - 0.20325099128012549045e+05, - 0.16834721668868791312e+05, - -0.49548799131642090288e+03, - -0.16996163025817408197e+05, - -0.23130183287758012739e+05, - -0.12517048180082018007e+05, - 0.60400727834465842534e+04, - 0.20732942776948239043e+05, - 0.26135509343962450657e+05, - 0.17952350389232105954e+05, - 0.21578110020787671601e+04, - -0.14348489766091504862e+05, - -0.27974250988979885733e+05, - -0.34011874847109058464e+05, - -0.33990905601397229475e+05, - -0.29933544113263003965e+05, - -0.23123771437772367790e+05, - -0.16696310419992863899e+05, - -0.11126619795657836221e+05, - -0.67571461795207596879e+04, - -0.39770101016533972142e+04, - -0.22273485189862994957e+04, - -0.10625693052201295359e+04, - -0.52821551858690304471e+03, - -0.37913891370747154497e+03, - 0.47005027813725583030e+02, - -0.13036967925849739913e+03, - -0.10089239175856555164e+03, - 0.22678221810035498152e+03, - -0.27036224154892249771e+03, - 0.13718682700544985664e+03, - 0.98621067027445533881e+02, - -0.31118814009646234808e+03, - 0.36671948621910871680e+03, - -0.21441310679772854542e+03, - -0.76314469870032311860e+02, - 0.34939662324951410710e+03, - -0.44599778676297847824e+03, - 0.29967660152387895778e+03, - 0.22419312291165962137e+02, - -0.34882819308835632910e+03, - 0.49889506755878841204e+03, - -0.38190182234215114931e+03, - 0.53161526012459731305e+02, - 0.31462052180767398113e+03, - -0.52173259360555891817e+03, - 0.45276868776020882024e+03, - -0.13929627267994931117e+03, - -0.25325586067031701987e+03, - 0.51566062532466264656e+03, - -0.50577692816661107145e+03, - 0.22728502695990701454e+03, - 0.17334639327497336581e+03, - -0.48330088470361101827e+03, - 0.53851066524677116831e+03, - -0.30942984984124063885e+03, - -0.82188027624929404169e+02, - 0.42973478400745102590e+03, - -0.55006688565341266894e+03, - 0.38124351281291831128e+03, - -0.13164670147740368478e+02, - -0.35965321004567397267e+03, - 0.54205393588515869396e+03, - -0.43954645563682964848e+03, - 0.10789969697806709803e+03, - 0.27814553423806381716e+03, - -0.51632058544069775508e+03, - 0.48338997426688410997e+03, - -0.19810555486770195444e+03, - -0.18898878454730703425e+03, - 0.47548755266804874964e+03, - -0.51233433893570497730e+03, - 0.28154906007865912443e+03, - 0.95506509009218149231e+02, - -0.42158035357328100190e+03, - 0.52673142197818003751e+03, - -0.35646569683776067450e+03, - 0.85510462249618854003e+02, - 0.24934675796705934658e+03, - -0.50399362548454416810e+03, - 0.53007055521279733057e+03, - -0.23891580299682397026e+03, - -0.14431621616599139202e+03, - 0.48893511962161227302e+03, - -0.53747205161168915311e+03, - 0.33427951338227700262e+03, - 0.86124954092881722545e+02, - -0.42592724288693165136e+03, - 0.57317497657493925090e+03, - -0.37372243448326361204e+03, - 0.58994195058621441419e+01, - 0.40324522619769948051e+03, - -0.55738327330501920187e+03, - 0.44207687670304585481e+03, - -0.46300763432027508770e+02, - -0.34107675877058608194e+03, - 0.57732421358866781702e+03, - -0.45748559661435376711e+03, - 0.11762543961304065476e+03, - 0.32589434048718726444e+03, - -0.55274216371987540697e+03, - 0.50525362558634884635e+03, - -0.13598923874540400902e+03, - -0.27648968215991561692e+03, - 0.56975961720166048963e+03, - -0.50364392088475608489e+03, - 0.18465492780770819081e+03, - 0.27788565014273092402e+03, - -0.54709623288513432726e+03, - 0.53730325340612739637e+03, - -0.18022957654399422722e+03, - -0.24796227013955095231e+03, - 0.56945893216655065316e+03, - -0.52374341344158051470e+03, - 0.20577256564808888584e+03, - 0.27076505615645265834e+03, - -0.55436210572227571447e+03, - 0.54629513149263175364e+03, - -0.17767570370832186200e+03, - -0.26361041126576151328e+03, - 0.58493569790783499229e+03, - -0.52123419407834285266e+03, - 0.17832416495021215042e+03, - 0.30965736718943145434e+03, - -0.57739147936727886190e+03, - 0.52987102895267969416e+03, - -0.12469894250775872990e+03, - -0.32804952022610706308e+03, - 0.60658610452269124380e+03, - -0.50227121091151059318e+03, - 0.63871224854700862750e+02, - 0.32456144336091170999e+03, - -0.74525787350108112150e+03, - 0.20372584734371213244e+03, - -0.50670694856872296441e+03, - -0.12821628055947114717e+04, - -0.74811740218431259564e+03, - -0.24883170318262746150e+04, - -0.29580306326173017624e+04, - -0.32076663273403164567e+04, - -0.48745286350438946101e+04, - -0.39054544342696622152e+04, - -0.32973093879496223053e+04, - -0.23834029600600661070e+04, - 0.90596410156925867341e+03, - 0.20126818959207275839e+04, - 0.29685118131135295698e+04, - 0.32685977362628332230e+04, - 0.17265212471826612273e+03, - -0.14270726576955146356e+04, - -0.24517568534171077772e+04, - -0.28245783701941727486e+04, - 0.47411962281408784747e+03, - 0.21229195792805298879e+04, - 0.20101201703504998477e+04, - 0.14179509332352970432e+04, - -0.19586379134306712331e+04, - -0.25920412330301924158e+04, - -0.32551872539967655484e+03, - 0.86994218659897660473e+03, - 0.24951371391856978335e+04, - 0.94653062264345544463e+03, - -0.23425504854871783209e+04, - -0.14895851326868157685e+04, - 0.18772249185778356662e+02, - 0.15113532700041441785e+04, - 0.20900286163696441690e+04, - -0.13269759734532917719e+04, - -0.22186105716185743404e+04, - 0.24309458105047767162e+03, - 0.11536699560849538102e+04, - 0.15615067341418616707e+04, - -0.55513804710283909571e+03, - -0.25453820673166687811e+04, - 0.47217474752817332728e+03, - 0.19074139006516013524e+04, - 0.24266392350570288272e+03, - -0.78922415397648478574e+03, - -0.16298180970578737288e+04, - 0.56575653885088968309e+03, - 0.23495303070500181093e+04, - -0.86793453659977137704e+03, - -0.17660182709582134066e+04, - 0.41662917970588665639e+03, - 0.99039824985509346789e+03, - 0.81827263498298532340e+03, - -0.11917794179902402902e+04, - -0.15145104231311522653e+04, - 0.18865683983002759305e+04, - 0.10508530644397565084e+04, - -0.17822835649993469360e+04, - -0.44396644762835018128e+03, - 0.82167955737944919292e+03, - 0.80731065620193533050e+03, - -0.27037071352114395495e+03, - -0.16966795828032870759e+04, - 0.82908306090147652867e+03, - 0.18277135704000868373e+04, - -0.16110975375725206504e+04, - -0.98284181876032448599e+03, - 0.14771818963995594913e+04, - 0.31606347257491717073e+03, - -0.67188928946173632539e+03, - -0.65691548657015778190e+03, - 0.43784102767920501265e+03, - 0.13428349994951913686e+04, - -0.12137321467807184945e+04, - -0.11730545442659179116e+04, - 0.20269206015692388974e+04, - 0.92051302815424207893e+02, - -0.18383897215095191768e+04, - 0.76811686348920159162e+03, - 0.93880517204137538556e+03, - -0.63622445523904775655e+03, - -0.48568704057100779892e+03, - 0.10918154736743967703e+03, - 0.92020323466546085456e+03, - -0.28413090757493210958e+03, - -0.13857755995469201480e+04, - 0.12720434798975215926e+04, - 0.88338421968920692962e+03, - -0.20253071845532967927e+04, - 0.42776075815050847950e+03, - 0.16603578028817471477e+04, - -0.14120340559731685062e+04, - -0.52007739204999097637e+03, - 0.13364213320767014466e+04, - -0.29094179890074286732e+03, - -0.66857709684937765360e+03, - 0.25193301006632731287e+03, - 0.39753944925483324369e+03, - 0.45571379576443270309e+02, - -0.78007408815888470599e+03, - 0.26350882168697597763e+03, - 0.10660130563565160173e+04, - -0.11790529263300118146e+04, - -0.45344523196608759008e+03, - 0.17764387298539822950e+04, - -0.88149986028006060224e+03, - -0.12383720625246378404e+04, - 0.18827493878535183285e+04, - -0.20455799969319534171e+03, - -0.16778781761553088927e+04, - 0.14629624543448185250e+04, - 0.44586610519400443309e+03, - -0.16332365868227821011e+04, - 0.80406206014132328619e+03, - 0.79486940032979418902e+03, - -0.12092857761547045357e+04, - 0.20512701113166932032e+03, - 0.76886847940595407636e+03, - -0.62660482312578574238e+03, - -0.14473890996066327830e+03, - 0.45216965642391835445e+03, - -0.98605276653927717234e+02, - -0.19462418081081258947e+03, + -0.55546711579911240975e+1, + 0.81616705648568235176e+1, + -0.57987522658698500422e+1, + 0.98991424160896759332e+1, + -0.92625482166082768742e+1, + -0.12308822339605716145e+1, + 0.96160804965121453591e+1, + -0.81310855144015192764e+1, + 0.20003387011859867783e+1, + 0.7793631513464845284e+1, + -0.10829610461737235738e+2, + 0.75612319041357469729e+1, + 0.50053814865826282698e+1, + -0.17106326347481104477e+2, + 0.25848533271930545396e+2, + -0.22502777508889934666e+2, + 0.11764229903725107462e+2, + 0.5062348031115512903e+1, + -0.16378382844022826959e+2, + 0.2097108428461966767e+2, + -0.14241794003509355093e+2, + 0.48464488519980024606e+1, + 0.47496787279018386485e+1, + -0.56385252326535013623e+1, + 0.18713630710699029613e+1, + 0.62715546592955524474e+1, + -0.86136538325517619796e+1, + 0.57085588051385771635e+1, + 0.52115465149464448302e+1, + -0.14181445889146791828e+2, + 0.18615978418615206635e+2, + -0.11069493314647397497e+2, + -0.16290435023745903909e+1, + 0.16071832408983926399e+2, + -0.1994728203758548446e+2, + 0.13708414190087982121e+2, + 0.33203955087265701884e+1, + -0.17842755138076672239e+2, + 0.24345740082949365757e+2, + -0.14381543817899608229e+2, + -0.37658995674867190573e+1, + 0.23561148415670164269e+2, + -0.29637491262548646631e+2, + 0.21187868286928232209e+2, + 0.12012699731444433926e+1, + -0.21203303667114795417e+2, + 0.30318801543433966827e+2, + -0.19000475735646610076e+2, + -0.29559487425140127392e+1, + 0.25746417515623569727e+2, + -0.3103542991025686959e+2, + 0.17259751439173118825e+2, + 0.12562059229134149518e+2, + -0.38139838385308522106e+2, + 0.46161534817472833936e+2, + -0.27788941778279674821e+2, + -0.98467575536006162196e+1, + 0.41157047702574480752e+2, + -0.65973532672555720069e+2, + 0.31865068652636338697e+2, + -0.33868297015870780342e+2, + -0.73692692236989159937e+2, + -0.17926056317527873318e+2, + -0.15318537134817549372e+3, + -0.12924169159843688703e+3, + -0.17756907880286604495e+3, + -0.24812050618475706187e+3, + -0.19309416672226601008e+3, + -0.18014740778883407302e+3, + -0.11234155209813850718e+3, + 0.40820982693299704636e+2, + 0.10463865082198049095e+3, + 0.15226012580721115341e+3, + 0.16928863410136310108e+3, + 0.33393857194194813687e+1, + -0.64565707089406501495e+2, + -0.13420904432243017368e+3, + -0.14072630876707788161e+3, + 0.2776375798411405782e+2, + 0.97597089657296322684e+2, + 0.11867747864534622693e+3, + 0.58588814000777837521e+2, + -0.94056760701492564181e+2, + -0.12773341180834795239e+3, + -0.32969769575858087762e+2, + 0.67007021668743803389e+2, + 0.10725985028813158806e+3, + 0.59404325834358537861e+2, + -0.11617362498614049571e+3, + -0.95176864014280326387e+2, + 0.29374085144219311161e+2, + 0.48232882896285829588e+2, + 0.12788465314844910381e+3, + -0.73682044930581767517e+2, + -0.12480901913373746481e+3, + 0.36315013066851854262e+2, + 0.30365859371292138746e+2, + 0.10463745678715444853e+3, + -0.41681532410613741035e+2, + -0.13169297072848729613e+3, + 0.37934091098638774042e+2, + 0.77153276334731160091e+2, + 0.32765547567834481413e+2, + -0.54364182060922381368e+2, + -0.79272254715844255202e+2, + 0.33818557970382592259e+2, + 0.10988326521376932021e+3, + -0.32751914099152770632e+2, + -0.99641699791966004796e+2, + 0.25965768232038033858e+2, + 0.50111991044113118221e+2, + 0.40758530687980780272e+2, + -0.60430323152166799616e+2, + -0.76554794513346337226e+2, + 0.94314756505244218943e+2, + 0.55579034593855041635e+2, + -0.89937254908509856932e+2, + -0.28964311332174393243e+2, + 0.52738649733784974671e+2, + 0.28819688725750385316e+2, + -0.32752414882366363003e+1, + -0.91695823912853100524e+2, + 0.38953202520983950308e+2, + 0.1051989975177912271e+3, + -0.98999887523517031696e+2, + -0.33993077680675789054e+2, + 0.64336166062187913894e+2, + 0.1921490736120681575e+2, + -0.28620730008646088294e+2, + -0.45784446527074614153e+2, + 0.36133168324186776488e+2, + 0.5854324428896922683e+2, + -0.58723376747366394568e+2, + -0.56394280150435349697e+2, + 0.9554493510145051971e+2, + 0.12934213726276714951e+2, + -0.97342599479793960882e+2, + 0.34178136904096277249e+2, + 0.61426681091256703837e+2, + -0.50237419210384118173e+2, + -0.93158104277258075854e+1, + -0.12027625184655026391e+1, + 0.40405120602613536107e+2, + 0.65982530412210786963e+1, + -0.10283638740525394439e+3, + 0.10001325948422805823e+3, + 0.16727852346662622551e+2, + -0.89664328679324356131e+2, + 0.26601110853286229485e+2, + 0.62257391004466875017e+2, + -0.37042812156688810887e+2, + -0.65433742283124402661e+2, + 0.10089646364459942163e+3, + -0.33285580242293058006e+2, + -0.3326568673193605008e+2, + 0.27487384048458618935e+2, + -0.37377887333555879223e+1, + 0.277195018296288751e+2, + -0.5882947255235844608e+2, + 0.20783267772129921269e+2, + 0.5972927014127569123e+2, + -0.7452920276922614562e+2, + -0.63274373066325546588e+1, + 0.78038962319910339716e+2, + -0.41089984158658282354e+2, + -0.5695822608997765002e+2, + 0.81408063819874726619e+2, + 0.81832623178634396055e+1, + -0.1020540453092110198e+3, + 0.83122715750100937271e+2, + 0.25196332736308093558e+2, + -0.95557032936309013849e+2, + 0.58364120737721798093e+2, + 0.24206375712453436222e+2, + -0.51770439888713212895e+2, + 0.10199373481710672706e+2, + 0.29524028172498830713e+2, + -0.15177106533536939281e+2, + -0.25817726504124131282e+2, + 0.36711988268778220856e+2, + -0.87215095836394933571e+1, + -0.18284848994186884141e+2, + 0.18796887876790759009e+2, + -0.1231154051642611158e+2, + 0.23746166216710722807e+2, + -0.38535574514046551542e+2, + 0.21642541507533945122e+2, + 0.26199573324953831843e+2, + -0.57823786697882887609e+2, + 0.3677506635321575601e+2, + 0.11631859732043107414e+2, + -0.27027108294773032782e+2, + -0.98076021013361120993e+1, + 0.4856604190537707666e+2, + -0.29766450008166504659e+2, + -0.37703085700040233519e+2, + 0.80252457123247580739e+2, + -0.45276888453006932878e+2, + -0.32864080164073051549e+2, + 0.68858816387718277952e+2, + -0.24871127304696791782e+2, + -0.44909642384469513843e+2, + 0.57820719976851449928e+2, + 0.1382316965495138561e+3, + -0.18802237597784989021e+3, + -0.92014043729865804266e+2, + 0.27512375332658075422e+3, + -0.15414520232912744291e+3, + -0.11163145810726578588e+3, + 0.22556340680920359887e+3, + -0.4670511372809209405e+2, + -0.18885809871717600572e+3, + 0.18773350826084416099e+3, + 0.9545805637392703602e+2, + -0.33107733603918779863e+3, + 0.23729792687950703112e+3, + 0.12570122240440493044e+3, + -0.352258604266821294e+3, + 0.20732709931373051404e+3, + 0.13725777436749362437e+3, + -0.24916553440933154207e+3, + 0.68935050240103645791e+1, + 0.28951690576413187728e+3, + -0.22992599719691710902e+3, + -0.14202581036354811772e+3, + 0.4085485058558909941e+3, + -0.23283717324128093651e+3, + -0.17135511217746693546e+3, + 0.34406649117874042076e+3, + -0.96906580511917979948e+2, + -0.21530566143383941835e+3, + 0.20631756928781814509e+3, + 0.96519220897016353433e+2, + -0.26178237271366350569e+3, + 0.83145604661847798411e+2, + 0.20239205918352917024e+3, + -0.20771584792910729789e+3, + -0.30053054071977747697e+2, + 0.17298047590415853847e+3, + -0.34569820336225170365e+2, + -0.11756727423595539506e+3, + 0.2823984605449344798e+2, + 0.17929166958573722468e+3, + -0.13140096954594181966e+3, + -0.15987075728102394123e+3, + 0.29690142568837848103e+3, + -0.23857846740436816191e+2, + -0.30074713382100230774e+3, + 0.22219219572259237339e+3, + 0.17867863050719660123e+3, + -0.31544807467499362019e+3, + -0.13942060206906136344e+2, + 0.35267410598613264483e+3, + -0.1979341311262408567e+3, + -0.21208270189474959011e+3, + 0.30592522633672672328e+3, + 0.30216473126975396113e+1, + -0.18051803231291668794e+3, + -0.86429231553985097491e+1, + 0.17710168980863321053e+3, + 0.42323864390836206439e+2, + -0.29036747905234295786e+3, + 0.10163445826528675298e+3, + 0.3000941120684907446e+3, + -0.25448076325230496764e+3, + -0.19486394058603440271e+3, + 0.34984832788182598051e+3, + 0.50397306630869422861e+2, + -0.33589996884591408843e+3, + 0.6062295899001741617e+2, + 0.2895206085540623917e+3, + -0.11642337616320158133e+3, + -0.20504081336258988699e+3, + 0.74758625076677304833e+2, + 0.23672691069421040311e+3, + -0.3748407420391180267e+2, + -0.39601640375934982785e+3, + 0.26405990175114646945e+3, + 0.31090998349245393229e+3, + -0.38155813255906463155e+3, + -0.85767321047310545623e+2, + 0.20535385437649304663e+3, + 0.17595772220496326099e+3, + -0.1797560317040663449e+3, + -0.27904404327771590033e+3, + 0.29606321528632668105e+3, + 0.2258630123465822237e+3, + -0.24959819475389002719e+3, + -0.28713366184023539063e+3, + 0.30553950564225402786e+3, + 0.27460814641929084701e+3, + -0.30976778231869741376e+3, + -0.1638778272046046709e+3, + 0.66383126288494224809e+2, + 0.37276729680617620488e+3, + -0.29254387245094491732e+2, + -0.53243829785039883973e+3, + 0.17291886085598068235e+3, + 0.35161639625344656679e+3, + 0.14851784869202214523e+2, + -0.25353713538590821486e+3, + -0.29695173634260646622e+3, + 0.33069574593192555767e+3, + 0.38248063986960880811e+3, + -0.25681027905885889595e+3, + -0.37388414152813021474e+3, + 0.27067455376474036655e+2, + 0.36108116052752876612e+3, + 0.26897795997543448721e+3, + -0.31997367429409558781e+3, + -0.42794136744489725288e+3, + 0.12475588029620428188e+3, + 0.45095357046014686375e+3, + 0.19369638022082017415e+3, + -0.29069876334408121465e+3, + -0.44113764821442299535e+3, + -0.70887484530926982984e+2, + 0.55023692373570520431e+3, + 0.31274861725071525598e+3, + -0.13929365184592211335e+3, + -0.42543550784589365321e+3, + -0.46068172051468707195e+3, + 0.3092602986091396815e+3, + 0.53233852198244460396e+3, + 0.29009436461720497391e+3, + -0.61033265856198028132e+2, + -0.63719258462129266718e+3, + -0.48803339807390727856e+3, + 0.10283153323134295931e+3, + 0.36457148504987867454e+3, + 0.72432033580896734293e+3, + 0.36995806029241657598e+3, + -0.27463457680887717061e+3, + -0.44117009444115382166e+3, + -0.85369200098498163243e+3, + -0.46388613688971270221e+3, + -0.2257953735897299552e+2, + 0.31812482068787426215e+3, + 0.87560623924349454228e+3, + 0.90690466494927545682e+3, + 0.96955327628858537992e+3, + 0.85603487156128699098e+3, + 0.641064836534701044e+3, + 0.46902677044899240855e+3, + 0.32133627309857365617e+3, + 0.19374988817539386332e+3, + 0.87676496560706638661e+2, + 0.10163517021424902964e+3, + -0.16538138267835633677e+1, + 0.17079020083383120721e+2, + 0.44332380631530632797e+2, + -0.55054311408537415673e+2, + 0.47657289092105450834e+2, + -0.60661573012486043055e+1, + -0.3700752246904209386e+2, + 0.5741799288417139735e+2, + -0.40286610703674973877e+2, + -0.36445592307137757437e+1, + 0.45410996758582292898e+2, + -0.551324184527011667e+2, + 0.21386863091022362937e+2, + 0.39298089470971113712e+2, + -0.9065863425143038512e+2, + 0.97031872962687089057e+2, + -0.45835174459274156789e+2, + -0.42920465174830958688e+2, + 0.12482725855871004228e+3, + -0.15479944867152127586e+3, + 0.11184155676340181174e+3, + -0.12404613838755768285e+2, + -0.97060155885561727018e+2, + 0.16336638541478632192e+3, + -0.15467567094721317744e+3, + 0.76842839168034302588e+2, + 0.29547690785517865208e+2, + -0.1111298253886521934e+3, + 0.12957422517496257797e+3, + -0.81501387099818046522e+2, + -0.12263362733587159781e+1, + 0.69582837139555337558e+2, + -0.84863941643585903307e+2, + 0.39573102551687171058e+2, + 0.38532171150537770643e+2, + -0.10221569485942055167e+3, + 0.11078673491450189204e+3, + -0.53138525918087019306e+2, + -0.45456801217798265213e+2, + 0.13570617307032918575e+3, + -0.17006368440856158486e+3, + 0.12762382566901592895e+3, + -0.25730971647612019382e+2, + -0.88414576118896675894e+2, + 0.16121421390211398261e+3, + -0.15961855688424833488e+3, + 0.87228573244195970915e+2, + 0.18091040081809364182e+2, + -0.10404367243403486043e+3, + 0.13040171324569917033e+3, + -0.88876958059598379691e+2, + 0.6029164995535820637e+1, + 0.71668636413911045224e+2, + -0.10276879677016113135e+3, + 0.72494777510631152495e+2, + -0.64359130067511955531e+2, + 0.18554217918515298891e+2, + 0.72614310122082471821e+2, + -0.12507585638269706863e+3, + 0.78240033191004258128e+2, + 0.81468520662910357544e+1, + -0.11315617438667405281e+3, + 0.13957310649824938764e+3, + -0.95693382108125476293e+2, + -0.34045531123208945701e+2, + 0.15167437779756878058e+3, + -0.22542067847618037035e+3, + 0.18044905600699718207e+3, + -0.67843951651600264086e+2, + -0.89212945168112796068e+2, + 0.18059298787759129823e+3, + -0.19622863540615662714e+3, + 0.10431291265501504029e+3, + 0.56311316672060005573e+1, + -0.10084586064554206075e+3, + 0.98772299791021012538e+2, + -0.40316655555917080278e+2, + -0.60613930260582513654e+2, + 0.10170103281338022327e+3, + -0.80304706582028856587e+2, + -0.27531710388806434509e+2, + 0.1258013398719966176e+3, + -0.18051675059758196085e+3, + 0.11703869666135639704e+3, + 0.64780467631067910617e+1, + -0.15454102927542760426e+3, + 0.20804023360579014934e+3, + -0.16080555430000856632e+3, + 0.16952102621069242705e+1, + 0.14941101958380892256e+3, + -0.23495768406299302455e+3, + 0.16899870259706125353e+3, + -0.1613707016890914403e+2, + -0.1680307641627005637e+3, + 0.24264659231377422088e+3, + -0.19089470246386650842e+3, + 0.82549529010355318093e+1, + 0.16621877811722617935e+3, + -0.25593505833407047589e+3, + 0.16933995382126920504e+3, + 0.16129117560334300663e+2, + -0.22021577439650215524e+3, + 0.28114378892944876043e+3, + -0.17879031596579906704e+3, + -0.70253964860152933625e+2, + 0.29577141045367744709e+3, + -0.383704329855686467e+3, + 0.25169831726712808972e+3, + 0.4771678075106925121e+2, + -0.30170764485667899635e+3, + 0.51765296278274195174e+3, + -0.23633113966610554257e+3, + 0.28804701721215184307e+3, + 0.62049703789301156576e+3, + 0.21490087531041825741e+3, + 0.1279340067114199428e+4, + 0.11977190034543120873e+4, + 0.15252128151954536861e+4, + 0.21925659372459217593e+4, + 0.17136313814054299201e+4, + 0.15584600578972731455e+4, + 0.1015817952773189063e+4, + -0.37910304753396252408e+3, + -0.90947147912047694263e+3, + -0.13472687244530943644e+4, + -0.14799295236917209877e+4, + -0.45795985494689908535e+2, + 0.59004833172100256888e+3, + 0.11598185232795547108e+4, + 0.12505830351984538993e+4, + -0.24149424128482070273e+3, + -0.8768167770049989258e+3, + -0.10184158170656028233e+4, + -0.53752909213103771435e+3, + 0.83340199857550419438e+3, + 0.11414030580289324917e+4, + 0.25188624117708266681e+3, + -0.54215463096178223168e+3, + -0.98332480313200869659e+3, + -0.50841827201677176618e+3, + 0.10430399342099706246e+4, + 0.78300504630316834209e+3, + -0.18304117109498875493e+3, + -0.50026139594949711409e+3, + -0.10707849033569916628e+4, + 0.63018711859998825275e+3, + 0.10761927764895372093e+4, + -0.26566115588750471943e+3, + -0.33523129259731257434e+3, + -0.85955084384973918077e+3, + 0.32922820727182516976e+3, + 0.11646966877545996795e+4, + -0.31056584266446230913e+3, + -0.71996284618228116869e+3, + -0.24488932855107191244e+3, + 0.44614957708698665328e+3, + 0.71080386946750957122e+3, + -0.29148924720340795602e+3, + -0.98660442596116411096e+3, + 0.31263956476274825036e+3, + 0.85526576994195568204e+3, + -0.21377475756521658923e+3, + -0.44927033550215588775e+3, + -0.35362190111972398654e+3, + 0.52644385000869817759e+3, + 0.6804621048741123559e+3, + -0.83599656625412342237e+3, + -0.48874768169617874491e+3, + 0.80189140340257233674e+3, + 0.23108771027557682487e+3, + -0.4292162711989784043e+3, + -0.29237618965057544074e+3, + 0.61013134822988618566e+2, + 0.79142637475936032843e+3, + -0.35024386353527967231e+3, + -0.89566423702733368373e+3, + 0.82558772930423697289e+3, + 0.3482811589730678179e+3, + -0.60589913383614555187e+3, + -0.14860348926573956874e+3, + 0.25421208807185533374e+3, + 0.38105084244791436277e+3, + -0.28532147463343170557e+3, + -0.54821833361260064521e+3, + 0.54190634689046692074e+3, + 0.4821396457962626414e+3, + -0.83504685268013236055e+3, + -0.11794347885856220159e+3, + 0.86632086689415473302e+3, + -0.31993650224972651586e+3, + -0.51421518277296479482e+3, + 0.41722373646491399768e+3, + 0.92653015312908962642e+2, + 0.26337725615010860736e+2, + -0.4046729091345340521e+3, + 0.22207239208054819102e+2, + 0.80569360050659713579e+3, + -0.78182445731822895141e+3, + -0.22191923388639574455e+3, + 0.82114798726707249443e+3, + -0.21385208150337166444e+3, + -0.61784057853633487412e+3, + 0.43104926338561665489e+3, + 0.45835972639203401968e+3, + -0.78276763775836298009e+3, + 0.2201521846267528133e+3, + 0.3227639434153475122e+3, + -0.23059499454771719229e+3, + -0.80759881942767748342e+1, + -0.1908991925849499296e+3, + 0.47031300657516720776e+3, + -0.15372152944085269155e+3, + -0.53249544400769195818e+3, + 0.64506935316653004975e+3, + 0.73273485720373813024e+2, + -0.69853233107087964981e+3, + 0.35783917029647892605e+3, + 0.52391031781160779701e+3, + -0.75404733179137883781e+3, + -0.29171256990369748507e+2, + 0.86207752526086608214e+3, + -0.71240627750064777501e+3, + -0.21931575711917554372e+3, + 0.8194745781945842964e+3, + -0.48187436091400496707e+3, + -0.24313169013003857799e+3, + 0.47298618358507383164e+3, + -0.88071513722959181791e+2, + -0.27999696692224767958e+3, + 0.16462256147699343956e+3, + 0.19755788463556848455e+3, + -0.30798354573579666749e+3, + 0.85847161810167861518e+2, + 0.12478228422479658377e+3, + -0.10754780605684450734e+3, + 0.40992079428111871664e+2, + -0.14816629278807062065e+3, + 0.30024122237057531493e+3, + -0.18400271096987594888e+3, + -0.20192574718794824662e+3, + 0.45100291910790662087e+3, + -0.24937227465329962683e+3, + -0.17672151832793258563e+3, + 0.29677350091175884472e+3, + 0.53715215754868800957e+2, + -0.4250605054329032555e+3, + 0.2864600941710079951e+3, + 0.28955837868734414542e+3, + -0.65805474005724852304e+3, + 0.35527686091715276007e+3, + 0.32006393140749315762e+3, + -0.62230236148768835847e+3, + 0.22322384626941882857e+3, + 0.39736982088185163775e+3, + -0.51172412702451055111e+3, + -0.85332026226930065604e+3, + 0.13063469603761438975e+4, + 0.45831707971449708339e+3, + -0.17621473265093018199e+4, + 0.10974081276364695441e+4, + 0.65178269502500359067e+3, + -0.15357355564721788141e+4, + 0.45132908925662712818e+3, + 0.11788904709220000768e+4, + -0.13730382799349804372e+4, + -0.36226666274059925854e+3, + 0.19710414389363986629e+4, + -0.15371026266940555161e+4, + -0.7131681718439491533e+3, + 0.2190491012559808496e+4, + -0.12948321189834971392e+4, + -0.95617553700369830949e+3, + 0.17413686128910314892e+4, + -0.19875583013982728176e+3, + -0.17802906700942462521e+4, + 0.14982886427249907229e+4, + 0.81377558283664984629e+3, + -0.24866616129861795343e+4, + 0.13416704106679769666e+4, + 0.12146019139190686928e+4, + -0.22188464484163096131e+4, + 0.5157830899997547931e+3, + 0.14990841867611579801e+4, + -0.13366956718208741677e+4, + -0.70385600549568209772e+3, + 0.17085739542890867142e+4, + -0.4119067153420008367e+3, + -0.14659244418370583389e+4, + 0.13285576083636990461e+4, + 0.40958826776515377333e+3, + -0.13257486679817473032e+4, + 0.19124464108717029376e+3, + 0.99656210068457107809e+3, + -0.36477627472623203175e+3, + -0.1216178151961067897e+4, + 0.10375375308719749228e+4, + 0.94717024569129989686e+3, + -0.20093791293612337086e+4, + 0.27024671679330776897e+3, + 0.19360652854774803018e+4, + -0.15022819859436331171e+4, + -0.11259816824123358856e+4, + 0.20477548123679910077e+4, + 0.10355976799422155921e+3, + -0.22972628785735723795e+4, + 0.12122110562164268686e+4, + 0.14822548309802048152e+4, + -0.19590947570470295886e+4, + -0.23702049439440210676e+3, + 0.1375872480342583458e+4, + 0.91770045930236776144e+2, + -0.13727187548597094064e+4, + -0.14624019372132812578e+3, + 0.19762576659095614104e+4, + -0.80832123455263956657e+3, + -0.1931763158519750732e+4, + 0.17239812584010098817e+4, + 0.12248167899171621684e+4, + -0.22382071903870323695e+4, + -0.43960118883674925883e+3, + 0.22812242978958897766e+4, + -0.33317136592134363582e+3, + -0.20242811098339784621e+4, + 0.73905068022487409962e+3, + 0.15136532777687330054e+4, + -0.55257728952508728071e+3, + -0.17344517110611734552e+4, + 0.48999581893977301661e+3, + 0.24940185250084823565e+4, + -0.17465927656546418802e+4, + -0.19863987002300948461e+4, + 0.23406881656277264483e+4, + 0.83775657780885148895e+3, + -0.15055635977761712638e+4, + -0.12817560852400092699e+4, + 0.13996904096253708758e+4, + 0.17611320104683577483e+4, + -0.19462926336090213226e+4, + -0.15875561641522656373e+4, + 0.17602171742678312967e+4, + 0.18915443958543582994e+4, + -0.20380766686910869794e+4, + -0.18389832773563327919e+4, + 0.19395562928615954661e+4, + 0.13946663393171627376e+4, + -0.68217876341593148481e+3, + -0.25015159992150438484e+4, + 0.35777858110294425842e+3, + 0.33624439263408348779e+4, + -0.91907764519856596053e+3, + -0.25251261558265905478e+4, + -0.17186999000266089865e+3, + 0.19152292892964496787e+4, + 0.18770343612350798139e+4, + -0.22117423937263606604e+4, + -0.25787087368125103239e+4, + 0.16930120322669988582e+4, + 0.25715473997662620604e+4, + -0.10512699408811668889e+3, + -0.26001013566351662121e+4, + -0.1756775678556462708e+4, + 0.21968765107494850781e+4, + 0.28506277636650229397e+4, + -0.75172301832198616012e+3, + -0.31539986887140826184e+4, + -0.13228779001768016315e+4, + 0.20009342609927091416e+4, + 0.30685447554812558337e+4, + 0.36197789705477987354e+3, + -0.36069822463040745788e+4, + -0.2263659573426300085e+4, + 0.94451631472976748682e+3, + 0.30750636103393298981e+4, + 0.29201465072770106417e+4, + -0.19147413673579123952e+4, + -0.37313826370049318939e+4, + -0.20460435905918557182e+4, + 0.5392705474963610186e+3, + 0.42970303115639726457e+4, + 0.32924819613733679944e+4, + -0.53431648875906910234e+3, + -0.26929766955892209808e+4, + -0.48764741027392801698e+4, + -0.24435431747569450636e+4, + 0.16175362543956125592e+4, + 0.3364625324457168972e+4, + 0.55724924355279081283e+4, + 0.33071529469587990206e+4, + 0.20212130067817503232e+3, + -0.23454030703257885762e+4, + -0.58135003515691705616e+4, + -0.63654314111997582586e+4, + -0.65672803943970729961e+4, + -0.59077760993345291354e+4, + -0.43668902265209171674e+4, + -0.32513426406764315288e+4, + -0.21771745090280915065e+4, + -0.13175252903627344949e+4, + -0.66315683859811690581e+3, + -0.60421243456673869332e+3, + -0.64999804072113477105e+2, + -0.10365414034994176973e+3, + -0.24008898052933335521e+3, + 0.26603044073917766354e+3, + -0.22662396223205888646e+3, + 0.56676975339255033504e+1, + 0.21025498014823298831e+3, + -0.30222855424286882453e+3, + 0.19354711538223065759e+3, + 0.54211156605072879699e+2, + -0.28509477763125096317e+3, + 0.33919595105499485044e+3, + -0.15526006358917308603e+3, + -0.17912531183999215045e+3, + 0.47088531468554185722e+3, + -0.52841121106191667423e+3, + 0.2805756811642820594e+3, + 0.17249020078902009345e+3, + -0.60103849808634129204e+3, + 0.76946025868787239688e+3, + -0.56561693422970665779e+3, + 0.713974630599160065e+2, + 0.47561067097290134598e+3, + -0.80258895645306074584e+3, + 0.74752946481569586012e+3, + -0.34362069922277021305e+3, + -0.19669594578182892519e+3, + 0.59689629163650226928e+3, + -0.66135599660453885917e+3, + 0.37878547254227703434e+3, + 0.7769956857077701784e+2, + -0.44640828601514664342e+3, + 0.52220552397020605895e+3, + -0.26628868721470246328e+3, + -0.17256235818691834538e+3, + 0.5414152107308682389e+3, + -0.62048770108057374273e+3, + 0.3452699825420473303e+3, + 0.15673202919473908423e+3, + -0.62967716548470752969e+3, + 0.82403420371741844974e+3, + -0.62704106022972030132e+3, + 0.1243215131529399855e+3, + 0.4430560429407621541e+3, + -0.8001023678314385279e+3, + 0.77797039827592345773e+3, + -0.39741248032516813282e+3, + -0.14396291411560736151e+3, + 0.57536482151037580479e+3, + -0.69082351866510566651e+3, + 0.45222946054746063282e+3, + -0.33554816660576634035e+1, + -0.40934857012013191024e+3, + 0.56803800655282338994e+3, + -0.39694623104812654901e+3, + 0.22724546343219191158e+3, + 0.921054183969120146e+2, + -0.49344233991322568045e+3, + 0.65749090826477606697e+3, + -0.35022056456570919636e+3, + -0.12404897795034483465e+3, + 0.63220680623466148518e+3, + -0.7374757360931025687e+3, + 0.490219180771827439e+3, + 0.1386454405309617357e+3, + -0.68660043458106542857e+3, + 0.99514192571294256595e+3, + -0.75005708512522846831e+3, + 0.20446920143365974809e+3, + 0.50162551866513643972e+3, + -0.86818784480445219742e+3, + 0.8547980377083389385e+3, + -0.35570468206427807445e+3, + -0.19859030019023390423e+3, + 0.62997341836650252844e+3, + -0.57168188531139958286e+3, + 0.22007245657966592489e+3, + 0.32272658283069262097e+3, + -0.57141213663414896473e+3, + 0.48787411789425431152e+3, + 0.28296053269921898732e+2, + -0.53391417734549838769e+3, + 0.84076071949985134779e+3, + -0.59350331673127459453e+3, + 0.32093409697205558473e+2, + 0.67358013536145961098e+3, + -0.97516200041490151307e+3, + 0.80956600219814902175e+3, + -0.10875199952995261299e+3, + -0.60557369943554056135e+3, + 0.10574208941800241064e+4, + -0.83962505189798707761e+3, + 0.20171064247561008642e+3, + 0.62381021073730846638e+3, + -0.10129834724757724871e+4, + 0.86026842177727098715e+3, + -0.11362830574972258546e+3, + -0.64479863633992533778e+3, + 0.10778051045677852926e+4, + -0.76371134540711534555e+3, + 0.17107265380704155255e+1, + 0.88633227418420676713e+3, + -0.12048849234785334374e+4, + 0.84359055300115733189e+3, + 0.16427442397225931359e+3, + -0.11211660595300095338e+4, + 0.15514848166674360073e+4, + -0.10873132689504466271e+4, + -0.81969729847637623266e+2, + 0.10886759428239693079e+4, + -0.19970439183152766418e+4, + 0.84851186563675219077e+3, + -0.11818510852337985853e+4, + -0.25842605241694063807e+4, + -0.10953709001396623535e+4, + -0.52679669347912022204e+4, + -0.53216723320337096084e+4, + -0.64235008149979121299e+4, + -0.94174937423897808912e+4, + -0.73979644962458905866e+4, + -0.6589359426603891734e+4, + -0.44379715896999186953e+4, + 0.16789088247201229933e+4, + 0.38756665912724834016e+4, + 0.57822683473138522459e+4, + 0.63242179165996649317e+4, + 0.23967061533525145478e+3, + -0.25922803290467022634e+4, + -0.49102442523174022426e+4, + -0.53854662834988166651e+4, + 0.10037926186082612503e+4, + 0.38466619013508779972e+4, + 0.42445579760255641304e+4, + 0.24101964775908882075e+4, + -0.36179173719568684646e+4, + -0.49334982355810652734e+4, + -0.95416052241957083879e+3, + 0.21536858445546986331e+4, + 0.43679670684916327446e+4, + 0.21025433684560407528e+4, + -0.45086167472584493225e+4, + -0.3203293847371170159e+4, + 0.55985930815131416693e+3, + 0.23721852466770073988e+4, + 0.44299694519836384643e+4, + -0.26615697430739373885e+4, + -0.45193266159041895662e+4, + 0.94423813416600842174e+3, + 0.16707486984837614727e+4, + 0.34817480277362551533e+4, + -0.12978300332547023572e+4, + -0.49906015388148689453e+4, + 0.12288726401381350115e+4, + 0.32463702173673223115e+4, + 0.8856743861278237091e+3, + -0.17933515630859533303e+4, + -0.3093368350267301139e+4, + 0.12259618380878193875e+4, + 0.42988491072807455566e+4, + -0.14245444240428942067e+4, + -0.35949221825298168369e+4, + 0.87408971576777037171e+3, + 0.19419596543146644763e+4, + 0.1510877597769533395e+4, + -0.2248000125066421333e+4, + -0.29348117610100030106e+4, + 0.36060612070615511584e+4, + 0.20834093315819386589e+4, + -0.3456172627007439587e+4, + -0.9289848463844239177e+3, + 0.17411069722782578992e+4, + 0.13667163555473809993e+4, + -0.35715600791390596669e+3, + -0.33468719007013164628e+4, + 0.15271030417679121456e+4, + 0.37429508235199059527e+4, + -0.33967180020386558681e+4, + -0.16407379704588856839e+4, + 0.27101614070693294707e+4, + 0.58774954037499446713e+3, + -0.11121919445727121456e+4, + -0.15544942328817796806e+4, + 0.11215918577422301041e+4, + 0.24365514260417589867e+4, + -0.23686850010494918024e+4, + -0.20666605873160524425e+4, + 0.36092771401406575933e+4, + 0.47680366881715428917e+3, + -0.37192182966286554802e+4, + 0.14326197093228397534e+4, + 0.20917863882600991019e+4, + -0.1655789489434738698e+4, + -0.50160915363618187257e+3, + -0.8558084869359559832e+2, + 0.18172491182489502535e+4, + -0.29023007257521396696e+3, + -0.3179205303118897973e+4, + 0.30604562364207690734e+4, + 0.11840512598917437117e+4, + -0.36309872479573355122e+4, + 0.87303323690517856903e+3, + 0.28401480044704844659e+4, + -0.21419348670985909848e+4, + -0.16404727926123337056e+4, + 0.30803889209887711331e+4, + -0.78080107686678206846e+3, + -0.14057760094329578351e+4, + 0.88222723105877003036e+3, + 0.22351518569058839603e+3, + 0.61064036040819223672e+3, + -0.18515098521269871981e+4, + 0.5795553303959841287e+3, + 0.22668609778858099162e+4, + -0.26768957150827900477e+4, + -0.42988292150325588636e+3, + 0.30880646348517043407e+4, + -0.1568257567347523036e+4, + -0.22843658706584938045e+4, + 0.3330825005126952874e+4, + 0.1212950536045556138e+1, + -0.35903432947438031988e+4, + 0.30057750556085698008e+4, + 0.91317447779510985129e+3, + -0.34196540081207540425e+4, + 0.19388530812403714663e+4, + 0.11583531100213642731e+4, + -0.20919486533461604267e+4, + 0.36601988604314072973e+3, + 0.12872863061169537104e+4, + -0.84227445612375151995e+3, + -0.70481042238622023888e+3, + 0.1221659866737268203e+4, + -0.35079837780131401814e+3, + -0.4562629248719986208e+3, + 0.30070167198435524369e+3, + 0.27441610435033009452e+2, + 0.44193756216441738616e+3, + -0.11556557118831337903e+4, + 0.75571896079386624479e+3, + 0.7896875737560176276e+3, + -0.17666306620498407938e+4, + 0.85306314274958560873e+3, + 0.97022544523991155074e+3, + -0.14328128293782688161e+4, + -0.15409835170439467333e+3, + 0.18394550371223260754e+4, + -0.13238729638478109791e+4, + -0.10998932498892531839e+4, + 0.26749168626289342683e+4, + -0.14085068421462106016e+4, + -0.14339331700187453862e+4, + 0.26758760080291613122e+4, + -0.92782357851737060628e+3, + -0.17441268597369178224e+4, + 0.22213535009258953323e+4, + 0.27789993594647785358e+4, + -0.47616429472198969961e+4, + -0.11250519438690944298e+4, + 0.59799610382568534988e+4, + -0.40875738186094072262e+4, + -0.20016662062939412863e+4, + 0.55117752979911401781e+4, + -0.20445745562703241376e+4, + -0.38638987410507152163e+4, + 0.51547324547627349602e+4, + 0.50194428868595497306e+3, + -0.62969924732655354092e+4, + 0.53552334827751483317e+4, + 0.20759414983004849091e+4, + -0.72283184122990378455e+4, + 0.43495363202499947874e+4, + 0.33899133220253424952e+4, + -0.62521602907252581645e+4, + 0.10441363191255295533e+4, + 0.59111696184721586178e+4, + -0.52298482170635325019e+4, + -0.24505090536714410518e+4, + 0.80748997217820369769e+4, + -0.41623871764120131047e+4, + -0.43962132803610911651e+4, + 0.74847439021389382106e+4, + -0.13430842354708436233e+4, + -0.55029231044944863243e+4, + 0.45650932626664316558e+4, + 0.27250603147982046721e+4, + -0.59731206744832297773e+4, + 0.10644249016864446276e+4, + 0.54942872355816734853e+4, + -0.44960735992012141651e+4, + -0.2083416044722049719e+4, + 0.5181205592043865181e+4, + -0.51729514978691224769e+3, + -0.42003260286949334841e+4, + 0.18381957219795945093e+4, + 0.43759111251915410321e+4, + -0.42037680585276575584e+4, + -0.29218409407358390126e+4, + 0.71432743305804033298e+4, + -0.12919012121897742418e+4, + -0.65890100008109038754e+4, + 0.53198710356246638185e+4, + 0.38159670668728458622e+4, + -0.70949012644323120185e+4, + -0.35931096963464267446e+3, + 0.79091941095584170398e+4, + -0.39415010314351202396e+4, + -0.54128974249495840922e+4, + 0.66196802068662864258e+4, + 0.15400831061377209608e+4, + -0.53938395605264076949e+4, + -0.45217961815141484294e+3, + 0.54850262100200925488e+4, + 0.31457382060825331394e+2, + -0.70373651647806573237e+4, + 0.32250336721072408181e+4, + 0.65927996062310958223e+4, + -0.61254829026854486074e+4, + -0.41522033224301403607e+4, + 0.76824109633338266576e+4, + 0.17802275823664015206e+4, + -0.80915631697914432152e+4, + 0.90370556258033309405e+3, + 0.74371318162306988597e+4, + -0.24581712780361381192e+4, + -0.58511221515856750557e+4, + 0.21837587862914151629e+4, + 0.65450193894176181857e+4, + -0.24462955552191801871e+4, + -0.83335130111798116559e+4, + 0.60864650836197060926e+4, + 0.67720194490311932896e+4, + -0.7656418726015401262e+4, + -0.37561350163769661776e+4, + 0.57310153392407364663e+4, + 0.48269621250318241437e+4, + -0.55016642608520569411e+4, + -0.59775478649828883135e+4, + 0.68576446112551593615e+4, + 0.57830111844177299645e+4, + -0.64700316275637260333e+4, + -0.65872139627976084739e+4, + 0.71376226616028980061e+4, + 0.65842082298271361651e+4, + -0.65303460421832251086e+4, + -0.57820164300815440583e+4, + 0.31017166841752537039e+4, + 0.88828802776337943214e+4, + -0.17471656055123564784e+4, + -0.11319655807258275672e+5, + 0.25820751365284190797e+4, + 0.93904252364907260926e+4, + 0.88991751008613289287e+3, + -0.74746046715958609639e+4, + -0.63170387980412706384e+4, + 0.78833407764446610599e+4, + 0.90793332054084512492e+4, + -0.57939604358670667352e+4, + -0.94158529854075241019e+4, + 0.21544236658255726979e+3, + 0.97245519823548929708e+4, + 0.60759037639346615833e+4, + -0.78981767237005797142e+4, + -0.10117005481746804435e+5, + 0.25009270420436437234e+4, + 0.11464029787896495691e+5, + 0.48729610240040210556e+4, + -0.73485351564319935278e+4, + -0.11133971148886897936e+5, + -0.98359052167669426581e+3, + 0.12546370445448681494e+5, + 0.85384291879779684677e+4, + -0.34082377096706336488e+4, + -0.11526205409606269313e+5, + -0.99049162354592572228e+4, + 0.64007743085878328202e+4, + 0.1358784280641485384e+5, + 0.77038452689147961792e+4, + -0.24502742246860107116e+4, + -0.15187372951465191363e+5, + -0.11790895516029388091e+5, + 0.14181245328317729673e+4, + 0.10367071512651848025e+5, + 0.17219605952759146021e+5, + 0.87031816987810252613e+4, + -0.52244413947092089074e+4, + -0.12986750402712912546e+5, + -0.19441853861381376191e+5, + -0.12195224619718834219e+5, + -0.94437324632953527725e+3, + 0.89707020961501966667e+4, + 0.20476177669477285235e+5, + 0.23317509677528374596e+5, + 0.23614320300651259458e+5, + 0.21296561185359441879e+5, + 0.15816854584133403478e+5, + 0.11745356571148493458e+5, + 0.78438814851478909986e+4, + 0.47014502559813881817e+4, + 0.25761861844907539307e+4, + 0.19227513199929542225e+4, + 0.44257539943775600477e+3, + 0.34774151174950020504e+3, + 0.67435543653986894697e+3, + -0.63888334637305354136e+3, + 0.53987303792255636381e+3, + 0.65055618507513727877e+2, + -0.61832299657828798445e+3, + 0.83048585646699780227e+3, + -0.49605045197455672223e+3, + -0.20692873517954581075e+3, + 0.85311384667443974195e+3, + -0.10078477218993256201e+4, + 0.5042072684320256144e+3, + 0.42226800572589746707e+3, + -0.12499134988606824663e+4, + 0.14570090948079393911e+4, + -0.84208958218031773413e+3, + -0.33861639220523159111e+3, + 0.14791942356129493419e+4, + -0.19530221372290750423e+4, + 0.14565885241375676742e+4, + -0.19901423507474149233e+3, + -0.11987905350866706158e+4, + 0.20221944151924433299e+4, + -0.18500208192958602922e+4, + 0.77672770334229687705e+3, + 0.63099778919942730226e+3, + -0.16419518197421573404e+4, + 0.17453875418328934757e+4, + -0.92504271309585556082e+3, + -0.34393472431230020447e+3, + 0.13529450504369067403e+4, + -0.15495729438323821796e+4, + 0.83109392492216102255e+3, + 0.39865412892269057465e+3, + -0.14535419080932388169e+4, + 0.17333662779480805511e+4, + -0.10527080466661407172e+4, + -0.25864872630260765618e+3, + 0.15232083195614920896e+4, + -0.20741820964502790048e+4, + 0.16035175081067966403e+4, + -0.3280549014768851066e+3, + -0.11227470656622783736e+4, + 0.20278694059064271187e+4, + -0.19458931698475605572e+4, + 0.93562413539798842521e+3, + 0.47832747789096436009e+3, + -0.15815031228255916176e+4, + 0.18357162684701402213e+4, + -0.11514704683909772029e+4, + -0.77395388262729085227e+2, + 0.11870876932415453666e+4, + -0.15953921190090015898e+4, + 0.11044268835037653389e+4, + -0.46314530856188719099e+3, + -0.50374924468998005977e+3, + 0.14746438136396100163e+4, + -0.17557191825356458139e+4, + 0.85337358012165077525e+3, + 0.4356157895605464887e+3, + -0.17188761209045549094e+4, + 0.19460040406048728983e+4, + -0.12607545391843764264e+4, + -0.33280589516324317856e+3, + 0.16835357990541117488e+4, + -0.23823759261471477657e+4, + 0.17152274828043491652e+4, + -0.33304359498415175267e+3, + -0.13631271210271411292e+4, + 0.21641402519405751264e+4, + -0.19833364573153494348e+4, + 0.63597141144174042893e+3, + 0.79210854969723663999e+3, + -0.18178182398711476253e+4, + 0.15707144578952595566e+4, + -0.54901982593597938376e+3, + -0.92579329383757533378e+3, + 0.1638775134645553635e+4, + -0.14495702728033234052e+4, + 0.13166599138032060523e+3, + 0.12255767938419915026e+4, + -0.21004665972662137392e+4, + 0.15981479704421449242e+4, + -0.25168679608679059356e+3, + -0.15142812914540663769e+4, + 0.23589800624006006728e+4, + -0.20643045932463401186e+4, + 0.43047298356681397991e+3, + 0.13248293069275039215e+4, + -0.25110538332075061589e+4, + 0.21151680793388468373e+4, + -0.66382742405530689211e+3, + -0.13154610855658536366e+4, + 0.23409081358058801925e+4, + -0.21053038017581725398e+4, + 0.42756200526097273951e+3, + 0.13695867903151720384e+4, + -0.24854216645942433388e+4, + 0.18844082450224593686e+4, + -0.19222579844609251154e+3, + -0.18911864679730754233e+4, + 0.27526036272392452702e+4, + -0.20874228413190144238e+4, + -0.10521280084527005272e+3, + 0.22792555071192582545e+4, + -0.3364978669266279212e+4, + 0.2484888489282487626e+4, + -0.78890562069020777614e+1, + -0.21484831670446342287e+4, + 0.41982157971049200569e+4, + -0.1636645793046430299e+4, + 0.26068650187605408064e+4, + 0.58623875154607967488e+4, + 0.28266965537031856002e+4, + 0.11802483742235292084e+5, + 0.12624598245826531638e+5, + 0.14656858842810495844e+5, + 0.21786793470473847265e+5, + 0.17206512592564864462e+5, + 0.15062840138129082334e+5, + 0.10402245842270102003e+5, + -0.39612541966373246396e+4, + -0.89394867822501182673e+4, + -0.13357300240552025571e+5, + -0.14597001771597726474e+5, + -0.62788232624365900847e+3, + 0.61089620194182762134e+4, + 0.11234021645634307788e+5, + 0.12492032682307490177e+5, + -0.225062443234054399e+4, + -0.90771819932877951942e+4, + -0.95565815826461748657e+4, + -0.58000132964180647832e+4, + 0.84732366305521172762e+4, + 0.11466049275245997705e+5, + 0.19693361849386333233e+4, + -0.4643196918522496162e+4, + -0.10410727451690690941e+5, + -0.46818486549228091462e+4, + 0.10456871745373302474e+5, + 0.71490326346695328539e+4, + -0.89888132888280949828e+3, + -0.58901867037561842153e+4, + -0.99546606794592007645e+4, + 0.60876529694703958739e+4, + 0.10265466386447325931e+5, + -0.18194711415283366023e+4, + -0.42905186925035959575e+4, + -0.76863560200748806892e+4, + 0.28133479185344299367e+4, + 0.1150179284736460977e+5, + -0.26195877630107852383e+4, + -0.7826274923276417212e+4, + -0.1729236797975969921e+4, + 0.39248119011603112085e+4, + 0.72231128346411023813e+4, + -0.27690296628013852569e+4, + -0.1008781200411370628e+5, + 0.34646093727111051521e+4, + 0.81735787027167771157e+4, + -0.19508662011632095528e+4, + -0.44999353474774879942e+4, + -0.35064291611123649091e+4, + 0.52010410893553571441e+4, + 0.68044439932990771922e+4, + -0.83763203090477054502e+4, + -0.47825941779905615476e+4, + 0.80019741072797414745e+4, + 0.20609717514451199349e+4, + -0.3870672939775973191e+4, + -0.33433129462919491743e+4, + 0.98339243015647423363e+3, + 0.76615703998558028616e+4, + -0.35761785209241556913e+4, + -0.84872016745312757848e+4, + 0.76146444470761425691e+4, + 0.40283424615023154729e+4, + -0.64281003054625198274e+4, + -0.13143641403246581376e+4, + 0.26524838927045307173e+4, + 0.3423189469935975012e+4, + -0.24050985214422380523e+4, + -0.57629993498033163632e+4, + 0.55021421818640219499e+4, + 0.48564362227072197129e+4, + -0.84873063218681036233e+4, + -0.96486111811351054257e+3, + 0.85440209260077517683e+4, + -0.33941946714083055667e+4, + -0.46184198403078962656e+4, + 0.35346615839194960245e+4, + 0.14309737995525604219e+4, + 0.50033596380625517952e+2, + -0.42513471901965349389e+4, + 0.9381708827357329028e+3, + 0.69157519359383441042e+4, + -0.65862926907266728449e+4, + -0.3143815812371030006e+4, + 0.86000334015919452213e+4, + -0.19614164141803412349e+4, + -0.68761550332456927208e+4, + 0.54356621824242720322e+4, + 0.32643920021107751381e+4, + -0.66926522613071656451e+4, + 0.15875363149971865369e+4, + 0.3210889481210429949e+4, + -0.17761697110801960662e+4, + -0.91117190089541998077e+3, + -0.10101669691239218309e+4, + 0.3988658371552312019e+4, + -0.12341644085933885435e+4, + -0.51485658534518579472e+4, + 0.59522881873770547827e+4, + 0.1277552450312486144e+4, + -0.73679172645446706156e+4, + 0.37247165311800413292e+4, + 0.53375497310625833052e+4, + -0.78858935484117882879e+4, + 0.24163259854054413722e+3, + 0.80878040268435670441e+4, + -0.68489633324806418386e+4, + -0.20588011453852868726e+4, + 0.77170881208823666384e+4, + -0.4222641924043596191e+4, + -0.2919365606748623577e+4, + 0.49759739132948661791e+4, + -0.8330729217422375541e+3, + -0.31456186324937439167e+4, + 0.22265571628179131949e+4, + 0.1324632998469462791e+4, + -0.25908563399042541278e+4, + 0.72649102008149338872e+3, + 0.95683039631174040096e+3, + -0.43600194688766794116e+3, + -0.41503693448705195124e+3, + -0.67403713505901441749e+3, + 0.24242539889661884445e+4, + -0.16690150738325526163e+4, + -0.17129467090224773074e+4, + 0.38129529211679673608e+4, + -0.16179755433227276171e+4, + -0.25854408997287091552e+4, + 0.35572102376021248347e+4, + 0.26314560438634350703e+3, + -0.43214326056564859755e+4, + 0.32580892919228049323e+4, + 0.22823975408968863121e+4, + -0.59388620523033441714e+4, + 0.30925340247814292525e+4, + 0.33636343529150749418e+4, + -0.61274480189119567513e+4, + 0.20214562212606340381e+4, + 0.4161170459140093044e+4, + -0.52157709377891924305e+4, + -0.5119191475228822128e+4, + 0.97853440484218899655e+4, + 0.1336091965064380247e+4, + -0.11479001997241728532e+5, + 0.85246794501466793008e+4, + 0.34639334933459535932e+4, + -0.11161428172362873738e+5, + 0.48933634070536645595e+4, + 0.71517334828657722028e+4, + -0.10778094368243824647e+5, + 0.2954657762579773248e+3, + 0.11491004635410663468e+5, + -0.10650404870748287067e+5, + -0.33107916632520245912e+4, + 0.13545559977639160934e+5, + -0.83713864818738893518e+4, + -0.66535820664260227204e+4, + 0.124993994576606583e+5, + -0.25338269945017591454e+4, + -0.11252422103979910389e+5, + 0.10382027748216316468e+5, + 0.41723889525054119076e+4, + -0.14971820266143706249e+5, + 0.74391506099981070292e+4, + 0.88050700808414967469e+4, + -0.14182742712991834196e+5, + 0.17462220619697689017e+4, + 0.11375260448584585902e+5, + -0.87883860490191673307e+4, + -0.59631897301160579445e+4, + 0.11926888476091195116e+5, + -0.15188000117402748401e+4, + -0.1148906507982061521e+5, + 0.86284509071931515791e+4, + 0.52557088954763685251e+4, + -0.11172524382364532357e+5, + 0.68566802757067591756e+3, + 0.96450448907533391321e+4, + -0.46560087773161485529e+4, + -0.89204888149211674317e+4, + 0.94256587630120284302e+4, + 0.5001086677989560485e+4, + -0.14281698407197711276e+5, + 0.3143811706737244549e+4, + 0.12715140961425517162e+5, + -0.10613244852264428118e+5, + -0.73950645243263925295e+4, + 0.13990843926974077476e+5, + 0.65294054591998076376e+3, + -0.15404862282142588811e+5, + 0.72689258045646383835e+4, + 0.1110081986097954541e+5, + -0.12650593215600256372e+5, + -0.43568109253836501011e+4, + 0.11728215849767617328e+5, + 0.11612763794634497572e+4, + -0.12148901743304213596e+5, + 0.87457020619335582978e+3, + 0.14092281419410077433e+5, + -0.70645040514699121559e+4, + -0.12749942093294077495e+5, + 0.12242672995063385315e+5, + 0.80811209434236097877e+4, + -0.15067117481514358587e+5, + -0.38443951465072432256e+4, + 0.16135429847258412337e+5, + -0.12820733894991747093e+4, + -0.15343009191032793751e+5, + 0.45607494057664553111e+4, + 0.12698818512906356773e+5, + -0.48940962321478718877e+4, + -0.1372366246874409444e+5, + 0.61119801236457287814e+4, + 0.15790423759331111796e+5, + -0.11950667621715329005e+5, + -0.13184627782051635222e+5, + 0.14305650498869788862e+5, + 0.88396528781196302589e+4, + -0.1214181724036488049e+5, + -0.10163039078274681742e+5, + 0.11918067647744914211e+5, + 0.11608689270030696207e+5, + -0.13781805226548707651e+5, + -0.11766227417216183312e+5, + 0.13318160784690273431e+5, + 0.12987937863278668374e+5, + -0.1408858971270438451e+5, + -0.13411641450620589239e+5, + 0.12593463548075722429e+5, + 0.12963527393717764426e+5, + -0.73547376974718317797e+4, + -0.17847003413742262637e+5, + 0.43126324734526378961e+4, + 0.21706501624127613468e+5, + -0.40941671364741168873e+4, + -0.19471547047583109816e+5, + -0.23828103011160333153e+4, + 0.16249103773779239418e+5, + 0.12064631053402101315e+5, + -0.15936732358200028102e+5, + -0.17973363580093991914e+5, + 0.11107200755855792522e+5, + 0.19532749208800527413e+5, + -0.26016215731209678097e+3, + -0.2032136261317361641e+5, + -0.11922241087305068504e+5, + 0.15991546330305029187e+5, + 0.20363113155509479839e+5, + -0.48155676553736066126e+4, + -0.23368835124923771218e+5, + -0.10194652030014916818e+5, + 0.15271403972578240428e+5, + 0.22689714778773577564e+5, + 0.14949306721100956565e+4, + -0.24750164716072849842e+5, + -0.18006885962942429614e+5, + 0.69432798026923437646e+4, + 0.24173602354570859461e+5, + 0.19117152478424803121e+5, + -0.12233598867587694258e+5, + -0.27744190945564725553e+5, + -0.16380419688432884868e+5, + 0.6012593687654481073e+4, + 0.30223293850097612449e+5, + 0.23928357453645181522e+5, + -0.20285776256294966515e+4, + -0.22267253127635391138e+5, + -0.34281272671706072288e+5, + -0.17673579609089527366e+5, + 0.97597329152323782182e+4, + 0.2770257638539495747e+5, + 0.38580008101858540613e+5, + 0.25150629941001712723e+5, + 0.23490994941202111477e+4, + -0.19115331378797178331e+5, + -0.40892305469708553574e+5, + -0.47913329613079426053e+5, + -0.48080229611046001082e+5, + -0.43144012377526400087e+5, + -0.32413509871967336949e+5, + -0.2385877253691916485e+5, + -0.15948128900050844095e+5, + -0.95209020246808049706e+4, + -0.54840689810999429028e+4, + -0.35510152385211526962e+4, + -0.11913099254167195795e+4, + -0.70101501948764030203e+3, + -0.1039737466547853046e+4, + 0.7806439417284176443e+3, + -0.6792860732844070526e+3, + -0.21206220661215857604e+3, + 0.96220242181557000549e+3, + -0.12220703139793595255e+4, + 0.68887127581041681879e+3, + 0.36363726051243492066e+3, + -0.1321625216125324414e+4, + 0.15577467048501775935e+4, + -0.83064362482621004347e+3, + -0.52356872354882636955e+3, + 0.17570127322921177893e+4, + -0.21167130557869595577e+4, + 0.13025258968741452463e+4, + 0.33559942022453537902e+3, + -0.19469528962975548438e+4, + 0.26454405893060679773e+4, + -0.19957000430141229117e+4, + 0.28359269939438127039e+3, + 0.16253391986636636375e+4, + -0.2733037571106379346e+4, + 0.24554134438108849281e+4, + -0.93388265470092801479e+3, + -0.10271856569221317841e+4, + 0.23977355758024932584e+4, + -0.24659689633163907274e+4, + 0.12249736324469904503e+4, + 0.63559204015392242582e+3, + -0.20980849251943614036e+4, + 0.23726605636157241861e+4, + -0.13143465080666571794e+4, + -0.49595848197214746733e+3, + 0.20717360458108109924e+4, + -0.25454122412860924669e+4, + 0.16385878016176025085e+4, + 0.19275997517297983563e+3, + -0.19930194330599149453e+4, + 0.28146003938006538192e+4, + -0.22116462208934458431e+4, + 0.47796205816274618883e+3, + 0.15095838315003170464e+4, + -0.27427486711395308703e+4, + 0.26055666073361066992e+4, + -0.11849373482947303273e+4, + -0.77861099128798980473e+3, + 0.2281636550884179087e+4, + -0.25746496339478862865e+4, + 0.15456052021614159457e+4, + 0.23431663244023530979e+3, + -0.18159156647805323246e+4, + 0.23722556803366755958e+4, + -0.16281720731003397304e+4, + 0.54145797407134318746e+3, + 0.93938781724951286378e+3, + -0.22422537289679739843e+4, + 0.2509673802968711243e+4, + -0.11624682993770045414e+4, + -0.6837665922544518935e+3, + 0.24370326784605563262e+4, + -0.27137738068362646118e+4, + 0.172493501183700414e+4, + 0.44917100326299595281e+3, + -0.2255162163349471939e+4, + 0.31270237652390865151e+4, + -0.21685666920644766833e+4, + 0.27951055312089653171e+3, + 0.19471835481724961028e+4, + -0.29156555864802962788e+4, + 0.2524703975342771173e+4, + -0.60450496825370214538e+3, + -0.13638840862974850552e+4, + 0.2689477673601472361e+4, + -0.22413851004106190885e+4, + 0.70496172683564532235e+3, + 0.14155883434343936642e+4, + -0.24703797713016679154e+4, + 0.22238445108059768245e+4, + -0.39448010482313623015e+3, + -0.1557625162060642424e+4, + 0.28711697831622523154e+4, + -0.2323236477387150444e+4, + 0.56618539016671138597e+3, + 0.18269605541630949119e+4, + -0.3069923208666606115e+4, + 0.28056403983891264033e+4, + -0.73078742108134781574e+3, + -0.15948503043358052764e+4, + 0.32390059607589992083e+4, + -0.28370125005130821592e+4, + 0.10075348873061201402e+4, + 0.15878622499002897257e+4, + -0.3019945672800286502e+4, + 0.28308927359446206538e+4, + -0.72668843896370185576e+3, + -0.16298586591258083445e+4, + 0.31929042764065316078e+4, + -0.25746754927877850605e+4, + 0.49826029672800621029e+3, + 0.21939454917989346541e+4, + -0.3440834829943224122e+4, + 0.27983547603342967705e+4, + -0.17689843060059251911e+3, + -0.25311745322156402835e+4, + 0.39998880774290219051e+4, + -0.3084573610658427242e+4, + 0.18074968447797044746e+3, + 0.23678171748354002375e+4, + -0.49066315833191338243e+4, + 0.17293581207568649916e+4, + -0.31642057063985262175e+4, + -0.73732638912555012212e+4, + -0.38785475913412819864e+4, + -0.14658186118904286559e+5, + -0.16384358225833260803e+5, + -0.18476924987666723609e+5, + -0.27737414527126857138e+5, + -0.22018953076430349029e+5, + -0.19001644731978853088e+5, + -0.13377092992713984131e+5, + 0.51046192240026275613e+4, + 0.11383644367195674931e+5, + 0.16972404214293492259e+5, + 0.18571697133641748223e+5, + 0.87301099322976881467e+3, + -0.79033436941392346853e+4, + -0.14169408039953963453e+5, + -0.15953888770253106486e+5, + 0.27924881376862044817e+4, + 0.11757074455936237428e+5, + 0.11882234561704073712e+5, + 0.7641002525365081965e+4, + -0.10916354297470368692e+5, + -0.14653965500511520077e+5, + -0.22541238330127157496e+4, + 0.554320480406778006e+4, + 0.13604535374824656174e+5, + 0.57473831478809806868e+4, + -0.1332505603642963797e+5, + -0.88482953914477548096e+4, + 0.73856653067732145246e+3, + 0.79217123272354338042e+4, + 0.1237088909162692471e+5, + -0.76777354754133148163e+4, + -0.12882184083552205266e+5, + 0.1942515790103465406e+4, + 0.58999018628813701071e+4, + 0.94203902292067105009e+4, + -0.34051780374103236682e+4, + -0.14583892486439606728e+5, + 0.30847422910850677908e+4, + 0.10310266351527228835e+5, + 0.18690420500439861371e+4, + -0.47783552934029667085e+4, + -0.92470265850316973228e+4, + 0.34288220292142368635e+4, + 0.13024503579365871701e+5, + -0.46061936519024120571e+4, + -0.10259059942765814412e+5, + 0.2422206125035783316e+4, + 0.5716521719138856497e+4, + 0.45065835066187710254e+4, + -0.66522424019931113435e+4, + -0.86642230335378353629e+4, + 0.10698660124799769619e+5, + 0.6045884873255950879e+4, + -0.10180127517384307794e+5, + -0.25606567534986561441e+4, + 0.47973680970915502257e+4, + 0.4418143588478975289e+4, + -0.13921002139660179182e+4, + -0.96898114674448333972e+4, + 0.46040575914625460427e+4, + 0.1064173667701712111e+5, + -0.94701242842098254187e+4, + -0.53356306651048016647e+4, + 0.83049972119755566382e+4, + 0.16788296869610710473e+4, + -0.35088939511293510805e+4, + -0.41464729580728198925e+4, + 0.28546692227064168037e+4, + 0.74559915552857410148e+4, + -0.6987405440216108218e+4, + -0.63316968772004775019e+4, + 0.11033926448503159918e+5, + 0.10062762372048907764e+4, + -0.1075659324992825168e+5, + 0.43690815237628394243e+4, + 0.56578998589317679944e+4, + -0.41664645776602365004e+4, + -0.21590766560428778575e+4, + 0.16179872573718034801e+3, + 0.53881253908420567313e+4, + -0.1402595593737862373e+4, + -0.84074359285734371952e+4, + 0.79116248186103794069e+4, + 0.44096614186289370991e+4, + -0.11165297338741904241e+5, + 0.2456211399861368136e+4, + 0.90455973790863154136e+4, + -0.73825623904339381625e+4, + -0.36544740286501755691e+4, + 0.81269431520686448494e+4, + -0.18482045446646543496e+4, + -0.3998167058425119194e+4, + 0.19493804594306450326e+4, + 0.15908091077289868736e+4, + 0.8695676288229609554e+3, + -0.4798450563405093817e+4, + 0.15052056916235121662e+4, + 0.64021553410817705299e+4, + -0.7272905766051188948e+4, + -0.1971916856720588612e+4, + 0.96505158676018199913e+4, + -0.48547771943444186036e+4, + -0.68666823990022003272e+4, + 0.10262846911342547173e+5, + -0.60120404265994795878e+3, + -0.10037602562283665975e+5, + 0.85887436574308394484e+4, + 0.25759016118552081025e+4, + -0.96189618674759058194e+4, + 0.5081307928467344027e+4, + 0.40001401851542495933e+4, + -0.6512224126704894843e+4, + 0.10709224813803957659e+4, + 0.41707330058236193508e+4, + -0.3130691755794452547e+4, + -0.13492684261824497298e+4, + 0.30251577778385681086e+4, + -0.80184060191249170657e+3, + -0.1150517854679849961e+4, + 0.31454848662716574381e+3, + 0.87316213996384146867e+3, + 0.50795313128552606941e+3, + -0.28306536460877896388e+4, + 0.20360280893180670319e+4, + 0.20798753770187736336e+4, + -0.45968346285892994274e+4, + 0.17238654129583046597e+4, + 0.36091643218979597805e+4, + -0.4741794869597852994e+4, + -0.27778531974044216213e+3, + 0.56052551051536765954e+4, + -0.43717945262699331579e+4, + -0.26346760440006514727e+4, + 0.73265434988725501171e+4, + -0.38078913426418043855e+4, + -0.4276001714270737466e+4, + 0.76755187398641937762e+4, + -0.23838727733149730739e+4, + -0.54794693381012011741e+4, + 0.67498229013170830513e+4, + 0.53656101580868507881e+4, + -0.11411085887728577291e+5, + -0.53891016955273278199e+3, + 0.12501565515566318936e+5, + -0.10007521576836537861e+5, + -0.33946753019832490281e+4, + 0.12813145186204086713e+5, + -0.63727065272310564978e+4, + -0.75251547333341604826e+4, + 0.12685291425179480939e+5, + -0.16047771900945149355e+4, + -0.11990938937075696231e+5, + 0.12090412201058681603e+5, + 0.287575131608241918e+4, + -0.1447129534850762866e+5, + 0.92379087411728669395e+4, + 0.7323432977891920018e+4, + -0.14066501537283662401e+5, + 0.32167355451486832862e+4, + 0.12276454612531399107e+5, + -0.11731928488853331146e+5, + -0.40394531393840061355e+4, + 0.15900947068447705533e+5, + -0.76752522770104214942e+4, + -0.98829393328409005335e+4, + 0.15205983051742232419e+5, + -0.97778329386373150101e+3, + -0.13282755401053913374e+5, + 0.95682367588794477342e+4, + 0.73915187824689101035e+4, + -0.13626841158674458711e+5, + 0.1183269875570871136e+4, + 0.13519453975364174767e+5, + -0.94390393136535931262e+4, + -0.70254289194290931846e+4, + 0.13437690424980473836e+5, + -0.34761186654412034613e+3, + -0.12274489557879835047e+5, + 0.63029344952719784487e+4, + 0.10324469857135365601e+5, + -0.11794753784457841903e+5, + -0.47522502014950850935e+4, + 0.16149151583970160573e+5, + -0.40963764466738330157e+4, + -0.13981910888941012672e+5, + 0.12008305497722469227e+5, + 0.81972797932195026078e+4, + -0.15734021148550002181e+5, + -0.63439255603584661003e+3, + 0.17052434868323500268e+5, + -0.76310097687095521906e+4, + -0.12867460555653746269e+5, + 0.13741263257745333249e+5, + 0.62670096434453716938e+4, + -0.14277419245742210478e+5, + -0.16038673287126882769e+4, + 0.15041864161127678017e+5, + -0.2001690032196131142e+4, + -0.15974784907961327917e+5, + 0.86251914890379066492e+4, + 0.14023829202499395251e+5, + -0.13843957105771951319e+5, + -0.90323548918553169642e+4, + 0.1690477005883761376e+5, + 0.45665219037190800009e+4, + -0.18217337822016648715e+5, + 0.90879583772169326039e+3, + 0.17862824600723026379e+5, + -0.4734070983610782605e+4, + -0.15545539135809751315e+5, + 0.62045566814181693189e+4, + 0.16145163717725059541e+5, + -0.81419228392230925238e+4, + -0.17026711786738167575e+5, + 0.13282243571139995765e+5, + 0.14704972163820359128e+5, + -0.15328213481253649661e+5, + -0.11299579044727222936e+5, + 0.1442908486644329605e+5, + 0.120616029520422926e+5, + -0.14417392180592369186e+5, + -0.12916844342831549511e+5, + 0.1582041403067115607e+5, + 0.13475758515386005456e+5, + -0.15452444509801327513e+5, + -0.14569970727656977033e+5, + 0.15770001658916482484e+5, + 0.15558792613194607839e+5, + -0.13926669908043331816e+5, + -0.16050384417370401934e+5, + 0.94550709143974327162e+4, + 0.20377173130426228454e+5, + -0.57073351332565034681e+4, + -0.23769205992292081646e+5, + 0.36567239880546399036e+4, + 0.22712742197564984963e+5, + 0.34084020843718008109e+4, + -0.19831560408805144107e+5, + -0.13111116744900615231e+5, + 0.18306207922565154149e+5, + 0.2015305472888654549e+5, + -0.12034272994846298388e+5, + -0.22988554356069380447e+5, + 0.1988133375459725869e+3, + 0.23916388421379542706e+5, + 0.13323593418035306968e+5, + -0.18346566795489496144e+5, + -0.23293980830612606951e+5, + 0.53300658565654202903e+4, + 0.26933106966346964327e+5, + 0.12086006158124653666e+5, + -0.17971691543079155963e+5, + -0.26161850142163140845e+5, + -0.12454029742998434358e+4, + 0.27782515667297098844e+5, + 0.21378129196085930744e+5, + -0.8002465277794348367e+4, + -0.28595351108207280049e+5, + -0.21021177076845848205e+5, + 0.13351877835223102011e+5, + 0.32027756957072127989e+5, + 0.19671165251360624097e+5, + -0.80484671566130546125e+4, + -0.34084860663791376282e+5, + -0.27592672451254726184e+5, + 0.15130949504258931029e+4, + 0.26860982876545247564e+5, + 0.38713580147753564233e+5, + 0.20440355313457846933e+5, + -0.10503550031320624839e+5, + -0.3309601964117364696e+5, + -0.43611191195625615364e+5, + -0.29268752124811799149e+5, + -0.3152920821968717064e+4, + 0.22865991666339788935e+5, + 0.464632328419041296e+5, + 0.5560128501563824102e+5, + 0.55590306841890749638e+5, + 0.49455243598577479133e+5, + 0.37670609917473469977e+5, + 0.27453030274347551313e+5, + 0.1834506771529870457e+5, + 0.11003603875871163837e+5, + 0.64740933489954040851e+4, + 0.38232470938932824538e+4, + 0.1596974793598832548e+4, + 0.83165374504525459542e+3, + 0.88004249735228825102e+3, + -0.4330873833948369338e+3, + 0.44114151836704871812e+3, + 0.24244895371977111154e+3, + -0.74848108261784364004e+3, + 0.91082255040483039465e+3, + -0.48739694063792632051e+3, + -0.3051270768132465605e+3, + 0.10215110850071140476e+4, + -0.1203522511518252486e+4, + 0.67502922605383594146e+3, + 0.32156973593803991207e+3, + -0.1244393706013170231e+4, + 0.15446798444363826093e+4, + -0.99788417907298321552e+3, + -0.15330966287888483635e+3, + 0.1303713750763556618e+4, + -0.18190836872043935273e+4, + 0.13840865490399157807e+4, + -0.19761126910687514169e+3, + -0.11280569792698161109e+4, + 0.18858010378061205756e+4, + -0.16645018838300443349e+4, + 0.57042915173880294333e+3, + 0.81822473383403223579e+3, + -0.17659196052953514027e+4, + 0.17690126168338620118e+4, + -0.83221425805505498374e+3, + -0.53984998938452690709e+3, + 0.16088708395691808164e+4, + -0.18038984559379041457e+4, + 0.1021224507154280559e+4, + 0.31719025063072638204e+3, + -0.14950288319567951021e+4, + 0.18796067753842210095e+4, + -0.12618613153473606872e+4, + -0.37764857809051953552e+2, + 0.13361264436418769037e+4, + -0.1951517941116410384e+4, + 0.15582026229225186853e+4, + -0.35868861542731707459e+3, + -0.10271189741926089027e+4, + 0.18839515163013368237e+4, + -0.17755069885732896182e+4, + 0.76602257465048523954e+3, + 0.61527846055486509158e+3, + -0.1654295340564503249e+4, + 0.18216303243087975261e+4, + -0.10461585630792794746e+4, + -0.25419942635911291973e+3, + 0.13931883886085834092e+4, + -0.17764775922163846644e+4, + 0.1210094367894784682e+4, + -0.33592671603686443405e+3, + -0.78713808510122748885e+3, + 0.16938077068643090115e+4, + -0.18257024476332296672e+4, + 0.82776846833260344738e+3, + 0.50647105435650411209e+3, + -0.17335806690009135309e+4, + 0.19134656983644517823e+4, + -0.12001770014516393985e+4, + -0.31187535486603798063e+3, + 0.15487842588200719547e+4, + -0.21121469958064808452e+4, + 0.1418044143381906224e+4, + -0.10008695869324721173e+3, + -0.14046889877295170663e+4, + 0.20122744119169005899e+4, + -0.16621674779975649017e+4, + 0.27993935389544355985e+3, + 0.1101109656552063143e+4, + -0.1982629941511110701e+4, + 0.16065196721708664427e+4, + -0.45526352938827506023e+3, + -0.10835682851851768191e+4, + 0.18620471076292358248e+4, + -0.16923522255297941683e+4, + 0.39296555399435453637e+3, + 0.10301733974323228722e+4, + -0.20183513059833944681e+4, + 0.17155701225863695072e+4, + -0.5359511864121977851e+3, + -0.1125137963557740477e+4, + 0.20443433641596673169e+4, + -0.19405513397329568761e+4, + 0.58441887902787357234e+3, + 0.99128466321276312101e+3, + -0.21433148142229324549e+4, + 0.19302382522544876338e+4, + -0.73181269195125037186e+3, + -0.10210785901952835957e+4, + 0.20317535597474859514e+4, + -0.19613647331449074045e+4, + 0.58111903597003401956e+3, + 0.10224152673818570065e+4, + -0.21427976767756385925e+4, + 0.18235287108867548795e+4, + -0.49892819095647621452e+3, + -0.13034602157558126692e+4, + 0.22192295812375950845e+4, + -0.19222142509856328161e+4, + 0.30085455505841542845e+3, + 0.14417914488068888659e+4, + -0.24534412903871639173e+4, + 0.19642892474838422459e+4, + -0.19334767154846741732e+3, + -0.13698685147825979129e+4, + 0.29957978770417348642e+4, + -0.93897931771591322558e+3, + 0.19902316066233574929e+4, + 0.48267728597719715253e+4, + 0.26977789896417302771e+4, + 0.94782596558963487041e+4, + 0.10965076112133097922e+5, + 0.12094959410897667112e+5, + 0.18286465443143915763e+5, + 0.14586145072797908142e+5, + 0.12438474042682131767e+5, + 0.88875750202843028092e+4, + -0.33882324691937424177e+4, + -0.75224569104596430407e+4, + -0.11163845028694051507e+5, + -0.12248617063819852774e+5, + -0.61499232502943414147e+3, + 0.52853055897832682604e+4, + 0.92652759064399397175e+4, + 0.10555455169865766948e+5, + -0.18048506788778595364e+4, + -0.78654537978561729687e+4, + -0.76751189704793732744e+4, + -0.51872126549602580781e+4, + 0.72756587260364303802e+4, + 0.96938673738777579274e+4, + 0.1343869102440433835e+4, + -0.34452580038404021252e+4, + -0.91756936937666378071e+4, + -0.36628962069811896072e+4, + 0.87871578373789943726e+4, + 0.56995262047233745761e+4, + -0.26297363933278660397e+3, + -0.54610051095737280775e+4, + -0.79870083404305141812e+4, + 0.50184461415560826936e+4, + 0.83974288286556802632e+4, + -0.10793380698136147657e+4, + -0.41275026322942421757e+4, + -0.60173541355713650773e+4, + 0.21552289171611150778e+4, + 0.95788229400287891622e+4, + -0.18917378728248513653e+4, + -0.6991361721729205783e+4, + -0.10543528626170600546e+4, + 0.30416221989252994717e+4, + 0.61119060262376560786e+4, + -0.21922998618592441744e+4, + -0.87031151382471234683e+4, + 0.31527009813318891247e+4, + 0.66858774252683115265e+4, + -0.1572757961033274114e+4, + -0.37477074110757948802e+4, + -0.30141773995999415092e+4, + 0.44217970786547748503e+4, + 0.57017684276643849444e+4, + -0.70689074723000603626e+4, + -0.39617555761753719707e+4, + 0.67005229284799506786e+4, + 0.16688688046121578736e+4, + -0.31101462625727945124e+4, + -0.29843094519374185438e+4, + 0.97870500606844711911e+3, + 0.6367397067876075198e+4, + -0.30707239478322676405e+4, + -0.69297954757847801375e+4, + 0.61319393300018145965e+4, + 0.36151212002559987013e+4, + -0.55198420361942607997e+4, + -0.11377250040153289774e+4, + 0.24133171736451940887e+4, + 0.25973921798946912531e+4, + -0.1758133563391420239e+4, + -0.49799947971464707734e+4, + 0.45818889818546376773e+4, + 0.42862801809386710374e+4, + -0.74384715931548225853e+4, + -0.50491100131313976362e+3, + 0.69967470938827018472e+4, + -0.28882822783546375831e+4, + -0.36144800120556060392e+4, + 0.25547367108283215202e+4, + 0.16311612019816730026e+4, + -0.26005010592376038403e+3, + -0.35086704063204988415e+4, + 0.10109108953691501256e+4, + 0.53483845151019331752e+4, + -0.49708876721119841022e+4, + -0.31274582529465828884e+4, + 0.74857405528932722518e+4, + -0.16067791083561633059e+4, + -0.61118902126915654662e+4, + 0.5105734705036732521e+4, + 0.21538769374153407625e+4, + -0.51637086575615494439e+4, + 0.11433117845403037336e+4, + 0.25710677625032226388e+4, + -0.11033040036383083589e+4, + -0.12888939742806251161e+4, + -0.35109211243332117647e+3, + 0.30269146014058433138e+4, + -0.97988602630916341241e+3, + -0.41112090475175109532e+4, + 0.46028477832838316317e+4, + 0.15101034675950106703e+4, + -0.65226098352608896676e+4, + 0.32609039303009412833e+4, + 0.45823422925451541232e+4, + -0.69140909978240579221e+4, + 0.58434194021538530706e+3, + 0.64530918797175600048e+4, + -0.55752072618489291926e+4, + -0.16809321305925059278e+4, + 0.6226454671249815874e+4, + -0.31754894548363940885e+4, + -0.28137022993327782387e+4, + 0.44135990122164430431e+4, + -0.73048142818540952703e+3, + -0.282946542045032038e+4, + 0.2222812070153942841e+4, + 0.70137227109384014057e+3, + -0.18353899601867133242e+4, + 0.44759456520203008267e+3, + 0.7367545868211529978e+3, + -0.89799289368021334212e+2, + -0.75301750492006635795e+3, + -0.15166199481276669303e+3, + 0.17316393490107511752e+4, + -0.12951822613826150246e+4, + -0.1319405329694881857e+4, + 0.28978457974866259974e+4, + -0.96441228096316410756e+3, + -0.25388273526803400273e+4, + 0.32259123379724901497e+4, + 0.17038783392447305687e+3, + -0.37696241500289738724e+4, + 0.30165638111970179125e+4, + 0.15865823021460169002e+4, + -0.47108208165690803071e+4, + 0.24574560866792780871e+4, + 0.27920253139462943182e+4, + -0.49648449157696395559e+4, + 0.14406322720785949514e+4, + 0.37352170150225392717e+4, + -0.45236303918571766189e+4, + -0.2984741221335472801e+4, + 0.70415952784475748558e+4, + -0.23571847953148025567e+3, + -0.71966662302050326616e+4, + 0.61736560853158780446e+4, + 0.1753740493472096432e+4, + -0.77718223458071233836e+4, + 0.42654382329897607633e+4, + 0.42015304264686428724e+4, + -0.78586220814632470137e+4, + 0.16363539440721149276e+4, + 0.66540695354489598685e+4, + -0.72836099606049465365e+4, + -0.1239177840501057517e+4, + 0.82094098676809826429e+4, + -0.54314277176967061678e+4, + -0.4234433282750392209e+4, + 0.83365606963265126979e+4, + -0.20745819937471856065e+4, + -0.713168194664929797e+4, + 0.70204291848541834042e+4, + 0.20737327699642946754e+4, + -0.90054694487400665821e+4, + 0.42507593702596132061e+4, + 0.58223145252147060091e+4, + -0.86129025479172814812e+4, + 0.30717682709584035905e+2, + 0.81641162737858358014e+4, + -0.54874934000754319641e+4, + -0.48302954617935902206e+4, + 0.82858096362451724417e+4, + -0.45622868020162439961e+3, + -0.83645602770115310705e+4, + 0.54867732407299463375e+4, + 0.47640877175105415517e+4, + -0.84389767887328252982e+4, + -0.68419885823928382251e+2, + 0.81257793908077464948e+4, + -0.43533887557194357214e+4, + -0.63149906392398970638e+4, + 0.77014187936823755081e+4, + 0.23217238212992692752e+4, + -0.96353203486526090273e+4, + 0.27226742302527190986e+4, + 0.81656534834566627978e+4, + -0.71897212403700659706e+4, + -0.48310395285075583161e+4, + 0.93899652368433744414e+4, + 0.30727234831651992408e+3, + -0.99999123548608258716e+4, + 0.42482820212757806075e+4, + 0.78666745394827667042e+4, + -0.7908998197767567035e+4, + -0.44884498580438166755e+4, + 0.90988167446993011254e+4, + 0.11293659302814342027e+4, + -0.97341985198623988254e+4, + 0.17726714316706625141e+4, + 0.9565117483319447274e+4, + -0.5501429235659544247e+4, + -0.81737614243487805652e+4, + 0.8263358087258597152e+4, + 0.53870733061897481093e+4, + -0.10090291516790717651e+5, + -0.28155857643375115913e+4, + 0.10867621997887386897e+5, + -0.24878794330598694273e+3, + -0.10950139853770824629e+5, + 0.25613080191075191578e+4, + 0.10004789700542431092e+5, + -0.41311579122875873509e+4, + -0.99676461861761818e+4, + 0.5527601287245792264e+4, + 0.9731586342933740525e+4, + -0.77909411369575273056e+4, + -0.87428912670567806344e+4, + 0.87696160378843051149e+4, + 0.74272870469887238869e+4, + -0.89910510253829288558e+4, + -0.75327500414527248722e+4, + 0.91197492062253222684e+4, + 0.76605241014785106017e+4, + -0.96504001216158139869e+4, + -0.81127211752769217128e+4, + 0.94314526052715755213e+4, + 0.86692820062286100438e+4, + -0.93393800601446546352e+4, + -0.95620932427061397902e+4, + 0.82120353648112195515e+4, + 0.1031922509198620719e+5, + -0.6243397949045972382e+4, + -0.12323726261022098697e+5, + 0.38651932984885047517e+4, + 0.13830703699738254727e+5, + -0.16976231712505452833e+4, + -0.13931760465572879184e+5, + -0.24678067828989369445e+4, + 0.12691530659568368719e+5, + 0.75505204937131220504e+4, + -0.11122774509708831829e+5, + -0.11948501784589287126e+5, + 0.68867966953672748787e+4, + 0.14285035308592654474e+5, + -0.94326767612296578136e+2, + -0.14810267096539069826e+5, + -0.78960707135314842162e+4, + 0.1112207052160499552e+5, + 0.14102053279730620488e+5, + -0.31426433489660498708e+4, + -0.16386025351726413646e+5, + -0.75498695395184304289e+4, + 0.11148657618512817862e+5, + 0.159313866956029633e+5, + 0.50774823854549873658e+3, + -0.16526296095508816506e+5, + -0.13343229866976145786e+5, + 0.48637411426655389732e+4, + 0.17812494627712592774e+5, + 0.12255770505822760242e+5, + -0.77342878774523132961e+4, + -0.1951714253452534831e+5, + -0.12422989278525665213e+5, + 0.55266088083996255591e+4, + 0.20325099128012549045e+5, + 0.16834721668868791312e+5, + -0.49548799131642090288e+3, + -0.16996163025817408197e+5, + -0.23130183287758012739e+5, + -0.12517048180082018007e+5, + 0.60400727834465842534e+4, + 0.20732942776948239043e+5, + 0.26135509343962450657e+5, + 0.17952350389232105954e+5, + 0.21578110020787671601e+4, + -0.14348489766091504862e+5, + -0.27974250988979885733e+5, + -0.34011874847109058464e+5, + -0.33990905601397229475e+5, + -0.29933544113263003965e+5, + -0.2312377143777236779e+5, + -0.16696310419992863899e+5, + -0.11126619795657836221e+5, + -0.67571461795207596879e+4, + -0.39770101016533972142e+4, + -0.22273485189862994957e+4, + -0.10625693052201295359e+4, + -0.52821551858690304471e+3, + -0.37913891370747154497e+3, + 0.4700502781372558303e+2, + -0.13036967925849739913e+3, + -0.10089239175856555164e+3, + 0.22678221810035498152e+3, + -0.27036224154892249771e+3, + 0.13718682700544985664e+3, + 0.98621067027445533881e+2, + -0.31118814009646234808e+3, + 0.3667194862191087168e+3, + -0.21441310679772854542e+3, + -0.7631446987003231186e+2, + 0.3493966232495141071e+3, + -0.44599778676297847824e+3, + 0.29967660152387895778e+3, + 0.22419312291165962137e+2, + -0.3488281930883563291e+3, + 0.49889506755878841204e+3, + -0.38190182234215114931e+3, + 0.53161526012459731305e+2, + 0.31462052180767398113e+3, + -0.52173259360555891817e+3, + 0.45276868776020882024e+3, + -0.13929627267994931117e+3, + -0.25325586067031701987e+3, + 0.51566062532466264656e+3, + -0.50577692816661107145e+3, + 0.22728502695990701454e+3, + 0.17334639327497336581e+3, + -0.48330088470361101827e+3, + 0.53851066524677116831e+3, + -0.30942984984124063885e+3, + -0.82188027624929404169e+2, + 0.4297347840074510259e+3, + -0.55006688565341266894e+3, + 0.38124351281291831128e+3, + -0.13164670147740368478e+2, + -0.35965321004567397267e+3, + 0.54205393588515869396e+3, + -0.43954645563682964848e+3, + 0.10789969697806709803e+3, + 0.27814553423806381716e+3, + -0.51632058544069775508e+3, + 0.48338997426688410997e+3, + -0.19810555486770195444e+3, + -0.18898878454730703425e+3, + 0.47548755266804874964e+3, + -0.5123343389357049773e+3, + 0.28154906007865912443e+3, + 0.95506509009218149231e+2, + -0.4215803535732810019e+3, + 0.52673142197818003751e+3, + -0.3564656968377606745e+3, + 0.85510462249618854003e+2, + 0.24934675796705934658e+3, + -0.5039936254845441681e+3, + 0.53007055521279733057e+3, + -0.23891580299682397026e+3, + -0.14431621616599139202e+3, + 0.48893511962161227302e+3, + -0.53747205161168915311e+3, + 0.33427951338227700262e+3, + 0.86124954092881722545e+2, + -0.42592724288693165136e+3, + 0.5731749765749392509e+3, + -0.37372243448326361204e+3, + 0.58994195058621441419e+1, + 0.40324522619769948051e+3, + -0.55738327330501920187e+3, + 0.44207687670304585481e+3, + -0.4630076343202750877e+2, + -0.34107675877058608194e+3, + 0.57732421358866781702e+3, + -0.45748559661435376711e+3, + 0.11762543961304065476e+3, + 0.32589434048718726444e+3, + -0.55274216371987540697e+3, + 0.50525362558634884635e+3, + -0.13598923874540400902e+3, + -0.27648968215991561692e+3, + 0.56975961720166048963e+3, + -0.50364392088475608489e+3, + 0.18465492780770819081e+3, + 0.27788565014273092402e+3, + -0.54709623288513432726e+3, + 0.53730325340612739637e+3, + -0.18022957654399422722e+3, + -0.24796227013955095231e+3, + 0.56945893216655065316e+3, + -0.5237434134415805147e+3, + 0.20577256564808888584e+3, + 0.27076505615645265834e+3, + -0.55436210572227571447e+3, + 0.54629513149263175364e+3, + -0.177675703708321862e+3, + -0.26361041126576151328e+3, + 0.58493569790783499229e+3, + -0.52123419407834285266e+3, + 0.17832416495021215042e+3, + 0.30965736718943145434e+3, + -0.5773914793672788619e+3, + 0.52987102895267969416e+3, + -0.1246989425077587299e+3, + -0.32804952022610706308e+3, + 0.6065861045226912438e+3, + -0.50227121091151059318e+3, + 0.6387122485470086275e+2, + 0.32456144336091170999e+3, + -0.7452578735010811215e+3, + 0.20372584734371213244e+3, + -0.50670694856872296441e+3, + -0.12821628055947114717e+4, + -0.74811740218431259564e+3, + -0.2488317031826274615e+4, + -0.29580306326173017624e+4, + -0.32076663273403164567e+4, + -0.48745286350438946101e+4, + -0.39054544342696622152e+4, + -0.32973093879496223053e+4, + -0.2383402960060066107e+4, + 0.90596410156925867341e+3, + 0.20126818959207275839e+4, + 0.29685118131135295698e+4, + 0.3268597736262833223e+4, + 0.17265212471826612273e+3, + -0.14270726576955146356e+4, + -0.24517568534171077772e+4, + -0.28245783701941727486e+4, + 0.47411962281408784747e+3, + 0.21229195792805298879e+4, + 0.20101201703504998477e+4, + 0.14179509332352970432e+4, + -0.19586379134306712331e+4, + -0.25920412330301924158e+4, + -0.32551872539967655484e+3, + 0.86994218659897660473e+3, + 0.24951371391856978335e+4, + 0.94653062264345544463e+3, + -0.23425504854871783209e+4, + -0.14895851326868157685e+4, + 0.18772249185778356662e+2, + 0.15113532700041441785e+4, + 0.2090028616369644169e+4, + -0.13269759734532917719e+4, + -0.22186105716185743404e+4, + 0.24309458105047767162e+3, + 0.11536699560849538102e+4, + 0.15615067341418616707e+4, + -0.55513804710283909571e+3, + -0.25453820673166687811e+4, + 0.47217474752817332728e+3, + 0.19074139006516013524e+4, + 0.24266392350570288272e+3, + -0.78922415397648478574e+3, + -0.16298180970578737288e+4, + 0.56575653885088968309e+3, + 0.23495303070500181093e+4, + -0.86793453659977137704e+3, + -0.17660182709582134066e+4, + 0.41662917970588665639e+3, + 0.99039824985509346789e+3, + 0.8182726349829853234e+3, + -0.11917794179902402902e+4, + -0.15145104231311522653e+4, + 0.18865683983002759305e+4, + 0.10508530644397565084e+4, + -0.1782283564999346936e+4, + -0.44396644762835018128e+3, + 0.82167955737944919292e+3, + 0.8073106562019353305e+3, + -0.27037071352114395495e+3, + -0.16966795828032870759e+4, + 0.82908306090147652867e+3, + 0.18277135704000868373e+4, + -0.16110975375725206504e+4, + -0.98284181876032448599e+3, + 0.14771818963995594913e+4, + 0.31606347257491717073e+3, + -0.67188928946173632539e+3, + -0.6569154865701577819e+3, + 0.43784102767920501265e+3, + 0.13428349994951913686e+4, + -0.12137321467807184945e+4, + -0.11730545442659179116e+4, + 0.20269206015692388974e+4, + 0.92051302815424207893e+2, + -0.18383897215095191768e+4, + 0.76811686348920159162e+3, + 0.93880517204137538556e+3, + -0.63622445523904775655e+3, + -0.48568704057100779892e+3, + 0.10918154736743967703e+3, + 0.92020323466546085456e+3, + -0.28413090757493210958e+3, + -0.1385775599546920148e+4, + 0.12720434798975215926e+4, + 0.88338421968920692962e+3, + -0.20253071845532967927e+4, + 0.4277607581505084795e+3, + 0.16603578028817471477e+4, + -0.14120340559731685062e+4, + -0.52007739204999097637e+3, + 0.13364213320767014466e+4, + -0.29094179890074286732e+3, + -0.6685770968493776536e+3, + 0.25193301006632731287e+3, + 0.39753944925483324369e+3, + 0.45571379576443270309e+2, + -0.78007408815888470599e+3, + 0.26350882168697597763e+3, + 0.10660130563565160173e+4, + -0.11790529263300118146e+4, + -0.45344523196608759008e+3, + 0.1776438729853982295e+4, + -0.88149986028006060224e+3, + -0.12383720625246378404e+4, + 0.18827493878535183285e+4, + -0.20455799969319534171e+3, + -0.16778781761553088927e+4, + 0.1462962454344818525e+4, + 0.44586610519400443309e+3, + -0.16332365868227821011e+4, + 0.80406206014132328619e+3, + 0.79486940032979418902e+3, + -0.12092857761547045357e+4, + 0.20512701113166932032e+3, + 0.76886847940595407636e+3, + -0.62660482312578574238e+3, + -0.1447389099606632783e+3, + 0.45216965642391835445e+3, + -0.98605276653927717234e+2, + -0.19462418081081258947e+3, 0.67364586938078574452, - 0.23773348190282348469e+03, - 0.17344369744377681197e+01, - -0.43338289702965550987e+03, - 0.33595515235718278291e+03, - 0.33980282286595848973e+03, - -0.74345037790052549553e+03, - 0.22010892765968017670e+03, - 0.71014585525865686577e+03, - -0.87914739983020103864e+03, - -0.46397828793031393957e+02, - 0.10254533683036972889e+04, - -0.83728777200030651784e+03, - -0.38799684519065129962e+03, - 0.12299083514016892877e+04, - -0.64591775549643989507e+03, - -0.73424547937701936462e+03, - 0.12973457872991825752e+04, - -0.34967004485313566420e+03, - -0.10275904631847320161e+04, - 0.12249907686953608845e+04, - 0.68423763006392357511e+03, - -0.17847190170059016054e+04, - 0.18993594342983453771e+03, - 0.17000197569446104353e+04, - -0.15561181565639149085e+04, - -0.36970073748985277007e+03, - 0.19331868409714459176e+04, - -0.11480202590663436695e+04, - -0.96737292097891304365e+03, - 0.19930605413671776205e+04, - -0.55283879622325355285e+03, - -0.15218829330027865581e+04, - 0.18049328316948622160e+04, - 0.19490325504142313662e+03, - -0.19184703782438891722e+04, - 0.13178479806222653679e+04, - 0.10016586137514501615e+04, - -0.20244832287193662523e+04, - 0.53758169647968020399e+03, - 0.17086177624747454047e+04, - -0.17250823514957298812e+04, - -0.43853450939120210705e+03, - 0.21092200007350488704e+04, - -0.97904995786081326514e+03, - -0.14016477066973893670e+04, - 0.20028230992862734183e+04, - 0.11762926369399440318e+03, - -0.20511153173684983813e+04, - 0.12865794815160213602e+04, - 0.12907684410847432446e+04, - -0.20779605457272950844e+04, - 0.63440677561730588252e+02, - 0.21155736609368286736e+04, - -0.13152964443219707391e+04, - -0.12903617985471471457e+04, - 0.21549381231222851056e+04, - 0.88787557885287768045e+02, - -0.21813034418069801177e+04, - 0.12053001831654312355e+04, - 0.15837560271513968928e+04, - -0.20421727647725927000e+04, - -0.44749576503443518050e+03, - 0.23563910084120102510e+04, - -0.72512206693977032046e+03, - -0.19657532217185685113e+04, - 0.17692553183970883310e+04, - 0.11729784178683717073e+04, - -0.23060311343898638370e+04, - -0.56727147087516804902e+02, - 0.24116327749637048328e+04, - -0.97319608329456696083e+03, - -0.19706396728516315306e+04, - 0.18727015108823925402e+04, - 0.12705810386141952222e+04, - -0.23616096916302117279e+04, - -0.31819487974495581284e+03, - 0.25622872055347579590e+04, - -0.56952005190916815991e+03, - -0.23496947625606162546e+04, - 0.14277240031260998876e+04, - 0.19593837328944364344e+04, - -0.20225438471013885646e+04, - -0.13277537342691689446e+04, - 0.24834231984679367997e+04, - 0.70415327395595625148e+03, - -0.26608773523668260168e+04, - -0.47990812131989288858e+01, - 0.27465033588052037885e+04, - -0.56035855885114892772e+03, - -0.26282743940048803779e+04, - 0.11196830711903760402e+04, - 0.25128710131887087300e+04, - -0.15040416669838161852e+04, - -0.22874481791513726421e+04, - 0.18729262579775220274e+04, - 0.21478384824834711253e+04, - -0.20773150881921906148e+04, - -0.19663953716924465880e+04, - 0.22855405113869542220e+04, - 0.19233777120126146656e+04, - -0.23482013242097518742e+04, - -0.18772368467364740354e+04, - 0.24252242862146222251e+04, - 0.19954582251836293381e+04, - -0.23530757446548959706e+04, - -0.21238682536562032510e+04, - 0.22729460042182190591e+04, - 0.24139250127076816170e+04, - -0.20007997376511514176e+04, - -0.26885761654274097054e+04, - 0.16587682111648127830e+04, - 0.30645487666998651548e+04, - -0.10525050350967446775e+04, - -0.33155805816595129727e+04, - 0.31299507137092848552e+03, - 0.34951982680551795966e+04, - 0.70982431867338675602e+03, - -0.33110188168443492032e+04, - -0.17880557974170749276e+04, - 0.27734812216966083724e+04, - 0.29102778237123388863e+04, - -0.16185535294481724122e+04, - -0.36358496181646114565e+04, - 0.21159945747309670594e+02, - 0.37519458181557074568e+04, - 0.19246499179613285833e+04, - -0.27660286928796144821e+04, - -0.35061234615344123995e+04, - 0.76406100070094146304e+03, - 0.40886243525379086350e+04, - 0.19281768218779259314e+04, - -0.28295654325454424907e+04, - -0.39804278473098288487e+04, - -0.70810608362179920050e+02, - 0.40416613899643966761e+04, - 0.34037778210498299813e+04, - -0.12109336624077129727e+04, - -0.45399454570592743039e+04, - -0.29389591354289723313e+04, - 0.18434119244959626940e+04, - 0.48777342216714496317e+04, - 0.32036018638920427293e+04, - -0.15224391803321955194e+04, - -0.49773518447706610459e+04, - -0.42164891927860180658e+04, - 0.32486086541264960204e+02, - 0.43862172057543284609e+04, - 0.56773266377405016101e+04, - 0.31468236653021481288e+04, - -0.14364224446624623397e+04, - -0.53002934052484988570e+04, - -0.64405760531370115132e+04, - -0.45102562469243803207e+04, - -0.59073791786106448853e+03, - 0.36736076387750795220e+04, - 0.69240933595648511982e+04, - 0.85216222555658441706e+04, - 0.85290620779892706196e+04, - 0.74315213051155769790e+04, - 0.58186653364007734126e+04, - 0.41682203417441523925e+04, - 0.27634138598687036392e+04, - 0.17090246337790015332e+04, - 0.99165731559933931294e+03, - 0.54222724096833485419e+03, - 0.28033972792544750519e+03, - 0.13741938206987137505e+03, - 0.64006422473758050273e+02, - 0.28378614261435117783e+02, - 0.11994849105165098280e+02, - 0.48391442368676873542e+01, - 0.18653330416360118793e+01, + 0.23773348190282348469e+3, + 0.17344369744377681197e+1, + -0.43338289702965550987e+3, + 0.33595515235718278291e+3, + 0.33980282286595848973e+3, + -0.74345037790052549553e+3, + 0.2201089276596801767e+3, + 0.71014585525865686577e+3, + -0.87914739983020103864e+3, + -0.46397828793031393957e+2, + 0.10254533683036972889e+4, + -0.83728777200030651784e+3, + -0.38799684519065129962e+3, + 0.12299083514016892877e+4, + -0.64591775549643989507e+3, + -0.73424547937701936462e+3, + 0.12973457872991825752e+4, + -0.3496700448531356642e+3, + -0.10275904631847320161e+4, + 0.12249907686953608845e+4, + 0.68423763006392357511e+3, + -0.17847190170059016054e+4, + 0.18993594342983453771e+3, + 0.17000197569446104353e+4, + -0.15561181565639149085e+4, + -0.36970073748985277007e+3, + 0.19331868409714459176e+4, + -0.11480202590663436695e+4, + -0.96737292097891304365e+3, + 0.19930605413671776205e+4, + -0.55283879622325355285e+3, + -0.15218829330027865581e+4, + 0.1804932831694862216e+4, + 0.19490325504142313662e+3, + -0.19184703782438891722e+4, + 0.13178479806222653679e+4, + 0.10016586137514501615e+4, + -0.20244832287193662523e+4, + 0.53758169647968020399e+3, + 0.17086177624747454047e+4, + -0.17250823514957298812e+4, + -0.43853450939120210705e+3, + 0.21092200007350488704e+4, + -0.97904995786081326514e+3, + -0.1401647706697389367e+4, + 0.20028230992862734183e+4, + 0.11762926369399440318e+3, + -0.20511153173684983813e+4, + 0.12865794815160213602e+4, + 0.12907684410847432446e+4, + -0.20779605457272950844e+4, + 0.63440677561730588252e+2, + 0.21155736609368286736e+4, + -0.13152964443219707391e+4, + -0.12903617985471471457e+4, + 0.21549381231222851056e+4, + 0.88787557885287768045e+2, + -0.21813034418069801177e+4, + 0.12053001831654312355e+4, + 0.15837560271513968928e+4, + -0.20421727647725927e+4, + -0.4474957650344351805e+3, + 0.2356391008412010251e+4, + -0.72512206693977032046e+3, + -0.19657532217185685113e+4, + 0.1769255318397088331e+4, + 0.11729784178683717073e+4, + -0.2306031134389863837e+4, + -0.56727147087516804902e+2, + 0.24116327749637048328e+4, + -0.97319608329456696083e+3, + -0.19706396728516315306e+4, + 0.18727015108823925402e+4, + 0.12705810386141952222e+4, + -0.23616096916302117279e+4, + -0.31819487974495581284e+3, + 0.2562287205534757959e+4, + -0.56952005190916815991e+3, + -0.23496947625606162546e+4, + 0.14277240031260998876e+4, + 0.19593837328944364344e+4, + -0.20225438471013885646e+4, + -0.13277537342691689446e+4, + 0.24834231984679367997e+4, + 0.70415327395595625148e+3, + -0.26608773523668260168e+4, + -0.47990812131989288858e+1, + 0.27465033588052037885e+4, + -0.56035855885114892772e+3, + -0.26282743940048803779e+4, + 0.11196830711903760402e+4, + 0.251287101318870873e+4, + -0.15040416669838161852e+4, + -0.22874481791513726421e+4, + 0.18729262579775220274e+4, + 0.21478384824834711253e+4, + -0.20773150881921906148e+4, + -0.1966395371692446588e+4, + 0.2285540511386954222e+4, + 0.19233777120126146656e+4, + -0.23482013242097518742e+4, + -0.18772368467364740354e+4, + 0.24252242862146222251e+4, + 0.19954582251836293381e+4, + -0.23530757446548959706e+4, + -0.2123868253656203251e+4, + 0.22729460042182190591e+4, + 0.2413925012707681617e+4, + -0.20007997376511514176e+4, + -0.26885761654274097054e+4, + 0.1658768211164812783e+4, + 0.30645487666998651548e+4, + -0.10525050350967446775e+4, + -0.33155805816595129727e+4, + 0.31299507137092848552e+3, + 0.34951982680551795966e+4, + 0.70982431867338675602e+3, + -0.33110188168443492032e+4, + -0.17880557974170749276e+4, + 0.27734812216966083724e+4, + 0.29102778237123388863e+4, + -0.16185535294481724122e+4, + -0.36358496181646114565e+4, + 0.21159945747309670594e+2, + 0.37519458181557074568e+4, + 0.19246499179613285833e+4, + -0.27660286928796144821e+4, + -0.35061234615344123995e+4, + 0.76406100070094146304e+3, + 0.4088624352537908635e+4, + 0.19281768218779259314e+4, + -0.28295654325454424907e+4, + -0.39804278473098288487e+4, + -0.7081060836217992005e+2, + 0.40416613899643966761e+4, + 0.34037778210498299813e+4, + -0.12109336624077129727e+4, + -0.45399454570592743039e+4, + -0.29389591354289723313e+4, + 0.1843411924495962694e+4, + 0.48777342216714496317e+4, + 0.32036018638920427293e+4, + -0.15224391803321955194e+4, + -0.49773518447706610459e+4, + -0.42164891927860180658e+4, + 0.32486086541264960204e+2, + 0.43862172057543284609e+4, + 0.56773266377405016101e+4, + 0.31468236653021481288e+4, + -0.14364224446624623397e+4, + -0.5300293405248498857e+4, + -0.64405760531370115132e+4, + -0.45102562469243803207e+4, + -0.59073791786106448853e+3, + 0.3673607638775079522e+4, + 0.69240933595648511982e+4, + 0.85216222555658441706e+4, + 0.85290620779892706196e+4, + 0.7431521305115576979e+4, + 0.58186653364007734126e+4, + 0.41682203417441523925e+4, + 0.27634138598687036392e+4, + 0.17090246337790015332e+4, + 0.99165731559933931294e+3, + 0.54222724096833485419e+3, + 0.28033972792544750519e+3, + 0.13741938206987137505e+3, + 0.64006422473758050273e+2, + 0.28378614261435117783e+2, + 0.1199484910516509828e+2, + 0.48391442368676873542e+1, + 0.18653330416360118793e+1, 0.68758490434810781711, 0.24253916573916528554, - 0.81916326166149203147e-01, - 0.26502708326749630646e-01, - 0.82166620492391782837e-02, - 0.24417451393974553241e-02, - 0.69563722791316439601e-03, - 0.19001450780257447219e-03, - 0.49765008087844279873e-04, - 0.12496148866967786501e-04, - 0.30081194653244435138e-05, - 0.69407112078045468218e-06, - 0.15346087792447892061e-06, - 0.32504432903886635603e-07, - 0.65928991727389799610e-08, - 0.12799931475975213398e-08, - 0.23774670986207973727e-09, + 0.81916326166149203147e-1, + 0.26502708326749630646e-1, + 0.82166620492391782837e-2, + 0.24417451393974553241e-2, + 0.69563722791316439601e-3, + 0.19001450780257447219e-3, + 0.49765008087844279873e-4, + 0.12496148866967786501e-4, + 0.30081194653244435138e-5, + 0.69407112078045468218e-6, + 0.15346087792447892061e-6, + 0.32504432903886635603e-7, + 0.6592899172738979961e-8, + 0.12799931475975213398e-8, + 0.23774670986207973727e-9, 0.42222503860637820635e-10, 0.71648995150865986384e-11, 0.11608928893951767708e-11, 0.17944539935847491407e-12, 0.26438269017140866486e-13, 0.37089716408839972325e-14, - 0.49488712441139445900e-15, + 0.494887124411394459e-15, 0.62726601459505180028e-16, 0.75421332449603116977e-17, 0.85896211795228827948e-18, 0.92504046892370660074e-19, - 0.94025098912766735260e-20, + 0.9402509891276673526e-20, 0.90016381894724210221e-21, 0.80981898331467599418e-22, - 0.68283588610559963090e-23, + 0.6828358861055996309e-23, 0.53807078873528303355e-24, 0.39493384070202563483e-25, - 0.26899322082337408230e-26, + 0.2689932208233740823e-26, 0.16928694205574669833e-27, 0.97952286830057522517e-29, 0.51808430332105786082e-30, 0.24878013040268407777e-31, 0.10757600363671907845e-32, 0.41475545953617952053e-34, - 0.14083362378273620600e-35, - 0.41464135768184666180e-37, + 0.140833623782736206e-35, + 0.4146413576818466618e-37, 0.10370229612804640671e-38, 0.21422490184581503064e-40, 0.35094408651670043748e-42, 0.42747579306953107805e-44, 0.34417937698836789337e-46, 0.13739296428011708841e-48, - -0.36041485143632253502e-02, - 0.47524986860515774922e-02, - -0.38569982704386430962e-03, - -0.40140464376572397229e-02, - 0.70798789340609626433e-02, - -0.11289927561201992812e-01, - 0.14515711692552306020e-01, - -0.14645954067283013453e-01, - 0.10193000551425598563e-01, - -0.65300664630509337033e-02, - 0.56456179569731390969e-02, - -0.50100361767631594948e-02, - -0.23001052212289082276e-02, - 0.12975598320488493029e-01, - -0.17553409219718495854e-01, - 0.96222192685973990944e-02, - -0.51226833411193752055e-03, - 0.44172524341883250346e-02, - -0.21556549463277743794e-01, - 0.30791717066756384841e-01, - -0.18357013899461677164e-01, - -0.43703301554791715994e-02, - 0.89405794625474627191e-02, - 0.98768550833551564672e-02, - -0.26423417453649015313e-01, - 0.12536453965741470654e-01, - 0.19845118227578568970e-01, - -0.32540232799192395086e-01, - 0.66663132857588602506e-02, - 0.27150593617989462331e-01, - -0.29241641882398673735e-01, - -0.60082445285563148597e-03, - 0.20172182577694611205e-01, - -0.48022808237554301045e-02, - -0.22726365973576845986e-01, - 0.21854895860496666160e-01, - 0.67349146027030114617e-02, - -0.26816080013541937488e-01, - 0.15161638156712961903e-01, - 0.69167954202015340462e-02, - -0.13047128952761020970e-01, - 0.73104304731371203344e-02, - -0.12581325590190886587e-01, - 0.24228930877524351012e-01, - -0.18688498334815673019e-01, - -0.58526375986139873159e-02, - 0.16446680377129530709e-01, - 0.49847092046168017289e-03, - -0.14601710669897044470e-01, - -0.63086047536307834210e-02, - 0.37818424474603935803e-01, - -0.33156220069779335224e-01, - -0.66309625444509190384e-02, - 0.27109537544919778962e-01, - -0.41965617451599646764e-02, - -0.24780264152177645248e-01, - 0.21025338409703289710e-01, - -0.54329243814697008794e-02, - 0.10631702486023594453e-01, - -0.22222582882646790131e-01, - 0.55884811621728404385e-02, - 0.20886013914006251041e-01, - -0.14697058645835396271e-01, - -0.14038196680725045090e-01, - 0.10955992256858365641e-01, - 0.22747061704160048690e-01, - -0.27720290310229322994e-01, - -0.13862248847856504380e-01, - 0.42108119984913809641e-01, - -0.25463676690555627630e-01, - 0.73805593097283983886e-02, - -0.18883327019490109278e-01, - 0.18185891171638390168e-01, - 0.14342432013183905801e-01, - -0.25255453414751192348e-01, - -0.13828730230154264585e-01, - 0.38323572212619845534e-01, - -0.97298561721966547733e-02, - -0.12542248323132979340e-01, - -0.14191911845422103614e-01, - 0.30964047748528823745e-01, - -0.42844922733087653643e-02, - -0.65894332965510818770e-02, - -0.20927163602670644654e-01, - 0.15269087092775777276e-01, - 0.29892819280971483220e-01, - -0.29259309037581268664e-01, - -0.19567583885401723665e-01, - 0.24792017252776053088e-01, - 0.38642828000684656051e-02, - 0.10965227576280548588e-01, - -0.32859546416201201868e-01, - -0.49423959708136512917e-02, - 0.27568357183735372334e-01, - 0.18565001018073186423e-01, - -0.37214242669927385943e-01, - -0.33161613156999715686e-02, - 0.41459201803526249657e-03, - 0.27388824474129946224e-01, - 0.10226156894067547562e-01, - -0.37064349057761576678e-01, - -0.15521015926201477478e-01, - 0.28746552895132813227e-01, - 0.10572387657669992181e-01, - 0.16666952393195200860e-01, - -0.45906046453749502212e-01, - -0.41066691707187978969e-02, - 0.27351246573968185328e-03, - 0.50612600252184468397e-01, - -0.99206749142665990454e-02, - -0.18476709876711506358e-01, - -0.23858984285308016543e-01, - -0.18133653179286359641e-01, - 0.53994024030460649466e-01, - 0.12793808667445503643e-01, - -0.13984516563992641439e-02, - -0.24774089162151777255e-01, - -0.42209669197014111630e-01, - 0.22635734997514356075e-02, - 0.41750403362776175586e-01, - 0.19144095226378634450e-01, - 0.30104539260202196199e-01, - -0.29191293860520797082e-01, - -0.48123780090379597585e-01, - -0.21601233030574533422e-01, - -0.14790478683903844279e-01, - 0.28666199041229422501e-01, - 0.60041727470414710255e-01, - 0.22335008254429331714e-01, - 0.43041710129192028988e-01, - -0.31941405183057665351e-01, - -0.23071243045816310774e-01, - -0.75831384145067029512e-01, - -0.46788812394684485552e-01, - -0.80232671984304892998e-01, - -0.35585824968801756107e-01, - -0.46154781152060390947e-01, - -0.29629339493188289884e-01, - -0.72925913315879708002e-02, - -0.24243712862878370046e-01, - 0.64165807770707019089e-02, - -0.14402727988770741216e-01, - 0.10441606335377754192e-01, - -0.17718129248099612899e-01, - 0.22282664061946649836e-01, - -0.25705855639305719151e-01, - 0.22707658455245260248e-01, - -0.15478344601232410863e-01, - 0.79994190143848689645e-02, - -0.56768170533466810398e-02, - 0.10857790870616416609e-01, - -0.21170845099361602915e-01, - 0.30394297180742643749e-01, - -0.31999781699491684772e-01, - 0.23191881890916705988e-01, - -0.68726655261017828222e-02, - -0.96359990918424617140e-02, - 0.18602862175468533323e-01, - -0.16155610425509014244e-01, - 0.44557914851750301047e-02, - 0.96326184276007715407e-02, - -0.18430653111957333995e-01, - 0.17740315318114575904e-01, - -0.89321126017188820501e-02, - -0.21696158884670167094e-02, - 0.89659486797035101158e-02, - -0.79632586731862332885e-02, - 0.70188337072414077288e-03, - 0.74452810901357475981e-02, - -0.10678787777933438502e-01, - 0.64227144035230530200e-02, - 0.30537454895178369266e-02, - -0.11864360235270520957e-01, - 0.13944535838565069036e-01, - -0.65979460157560270578e-02, - -0.77778469752196079112e-02, - 0.22840297533614144915e-01, - -0.31567344903842775583e-01, - 0.29908593302583930812e-01, - -0.18764307173005451146e-01, - 0.33769297873043617637e-02, - 0.95068144782764190531e-02, - -0.15025293815667374250e-01, - 0.12406446143665419632e-01, - -0.48537598846744006015e-02, - -0.25851987255091383663e-02, - 0.59300412029135969941e-02, - -0.42763579627698965202e-02, - -0.69544120121980271330e-04, - 0.33147611753412613116e-02, - -0.26324610457230694302e-02, - -0.20462365968737859616e-02, - 0.79448301391724495540e-02, - -0.11043043853996932849e-01, - 0.84771415537043294519e-02, - -0.35251479559981883406e-03, - -0.10034297713004087377e-01, - 0.17747901428297425258e-01, - -0.18722571355253025266e-01, - 0.11923378761951783020e-01, - 0.45458322807605706928e-02, - -0.67351738149252160515e-01, + -0.36041485143632253502e-2, + 0.47524986860515774922e-2, + -0.38569982704386430962e-3, + -0.40140464376572397229e-2, + 0.70798789340609626433e-2, + -0.11289927561201992812e-1, + 0.1451571169255230602e-1, + -0.14645954067283013453e-1, + 0.10193000551425598563e-1, + -0.65300664630509337033e-2, + 0.56456179569731390969e-2, + -0.50100361767631594948e-2, + -0.23001052212289082276e-2, + 0.12975598320488493029e-1, + -0.17553409219718495854e-1, + 0.96222192685973990944e-2, + -0.51226833411193752055e-3, + 0.44172524341883250346e-2, + -0.21556549463277743794e-1, + 0.30791717066756384841e-1, + -0.18357013899461677164e-1, + -0.43703301554791715994e-2, + 0.89405794625474627191e-2, + 0.98768550833551564672e-2, + -0.26423417453649015313e-1, + 0.12536453965741470654e-1, + 0.1984511822757856897e-1, + -0.32540232799192395086e-1, + 0.66663132857588602506e-2, + 0.27150593617989462331e-1, + -0.29241641882398673735e-1, + -0.60082445285563148597e-3, + 0.20172182577694611205e-1, + -0.48022808237554301045e-2, + -0.22726365973576845986e-1, + 0.2185489586049666616e-1, + 0.67349146027030114617e-2, + -0.26816080013541937488e-1, + 0.15161638156712961903e-1, + 0.69167954202015340462e-2, + -0.1304712895276102097e-1, + 0.73104304731371203344e-2, + -0.12581325590190886587e-1, + 0.24228930877524351012e-1, + -0.18688498334815673019e-1, + -0.58526375986139873159e-2, + 0.16446680377129530709e-1, + 0.49847092046168017289e-3, + -0.1460171066989704447e-1, + -0.6308604753630783421e-2, + 0.37818424474603935803e-1, + -0.33156220069779335224e-1, + -0.66309625444509190384e-2, + 0.27109537544919778962e-1, + -0.41965617451599646764e-2, + -0.24780264152177645248e-1, + 0.2102533840970328971e-1, + -0.54329243814697008794e-2, + 0.10631702486023594453e-1, + -0.22222582882646790131e-1, + 0.55884811621728404385e-2, + 0.20886013914006251041e-1, + -0.14697058645835396271e-1, + -0.1403819668072504509e-1, + 0.10955992256858365641e-1, + 0.2274706170416004869e-1, + -0.27720290310229322994e-1, + -0.1386224884785650438e-1, + 0.42108119984913809641e-1, + -0.2546367669055562763e-1, + 0.73805593097283983886e-2, + -0.18883327019490109278e-1, + 0.18185891171638390168e-1, + 0.14342432013183905801e-1, + -0.25255453414751192348e-1, + -0.13828730230154264585e-1, + 0.38323572212619845534e-1, + -0.97298561721966547733e-2, + -0.1254224832313297934e-1, + -0.14191911845422103614e-1, + 0.30964047748528823745e-1, + -0.42844922733087653643e-2, + -0.6589433296551081877e-2, + -0.20927163602670644654e-1, + 0.15269087092775777276e-1, + 0.2989281928097148322e-1, + -0.29259309037581268664e-1, + -0.19567583885401723665e-1, + 0.24792017252776053088e-1, + 0.38642828000684656051e-2, + 0.10965227576280548588e-1, + -0.32859546416201201868e-1, + -0.49423959708136512917e-2, + 0.27568357183735372334e-1, + 0.18565001018073186423e-1, + -0.37214242669927385943e-1, + -0.33161613156999715686e-2, + 0.41459201803526249657e-3, + 0.27388824474129946224e-1, + 0.10226156894067547562e-1, + -0.37064349057761576678e-1, + -0.15521015926201477478e-1, + 0.28746552895132813227e-1, + 0.10572387657669992181e-1, + 0.1666695239319520086e-1, + -0.45906046453749502212e-1, + -0.41066691707187978969e-2, + 0.27351246573968185328e-3, + 0.50612600252184468397e-1, + -0.99206749142665990454e-2, + -0.18476709876711506358e-1, + -0.23858984285308016543e-1, + -0.18133653179286359641e-1, + 0.53994024030460649466e-1, + 0.12793808667445503643e-1, + -0.13984516563992641439e-2, + -0.24774089162151777255e-1, + -0.4220966919701411163e-1, + 0.22635734997514356075e-2, + 0.41750403362776175586e-1, + 0.1914409522637863445e-1, + 0.30104539260202196199e-1, + -0.29191293860520797082e-1, + -0.48123780090379597585e-1, + -0.21601233030574533422e-1, + -0.14790478683903844279e-1, + 0.28666199041229422501e-1, + 0.60041727470414710255e-1, + 0.22335008254429331714e-1, + 0.43041710129192028988e-1, + -0.31941405183057665351e-1, + -0.23071243045816310774e-1, + -0.75831384145067029512e-1, + -0.46788812394684485552e-1, + -0.80232671984304892998e-1, + -0.35585824968801756107e-1, + -0.46154781152060390947e-1, + -0.29629339493188289884e-1, + -0.72925913315879708002e-2, + -0.24243712862878370046e-1, + 0.64165807770707019089e-2, + -0.14402727988770741216e-1, + 0.10441606335377754192e-1, + -0.17718129248099612899e-1, + 0.22282664061946649836e-1, + -0.25705855639305719151e-1, + 0.22707658455245260248e-1, + -0.15478344601232410863e-1, + 0.79994190143848689645e-2, + -0.56768170533466810398e-2, + 0.10857790870616416609e-1, + -0.21170845099361602915e-1, + 0.30394297180742643749e-1, + -0.31999781699491684772e-1, + 0.23191881890916705988e-1, + -0.68726655261017828222e-2, + -0.9635999091842461714e-2, + 0.18602862175468533323e-1, + -0.16155610425509014244e-1, + 0.44557914851750301047e-2, + 0.96326184276007715407e-2, + -0.18430653111957333995e-1, + 0.17740315318114575904e-1, + -0.89321126017188820501e-2, + -0.21696158884670167094e-2, + 0.89659486797035101158e-2, + -0.79632586731862332885e-2, + 0.70188337072414077288e-3, + 0.74452810901357475981e-2, + -0.10678787777933438502e-1, + 0.642271440352305302e-2, + 0.30537454895178369266e-2, + -0.11864360235270520957e-1, + 0.13944535838565069036e-1, + -0.65979460157560270578e-2, + -0.77778469752196079112e-2, + 0.22840297533614144915e-1, + -0.31567344903842775583e-1, + 0.29908593302583930812e-1, + -0.18764307173005451146e-1, + 0.33769297873043617637e-2, + 0.95068144782764190531e-2, + -0.1502529381566737425e-1, + 0.12406446143665419632e-1, + -0.48537598846744006015e-2, + -0.25851987255091383663e-2, + 0.59300412029135969941e-2, + -0.42763579627698965202e-2, + -0.6954412012198027133e-4, + 0.33147611753412613116e-2, + -0.26324610457230694302e-2, + -0.20462365968737859616e-2, + 0.7944830139172449554e-2, + -0.11043043853996932849e-1, + 0.84771415537043294519e-2, + -0.35251479559981883406e-3, + -0.10034297713004087377e-1, + 0.17747901428297425258e-1, + -0.18722571355253025266e-1, + 0.1192337876195178302e-1, + 0.45458322807605706928e-2, + -0.67351738149252160515e-1, 0.19970046225103346704, -0.29973655859722275752, 0.30690261115425787608, -0.17179779948703766124, - -0.40892804147160101425e-01, + -0.40892804147160101425e-1, 0.25744724025165915959, -0.36210756549934769444, 0.33172154392320257754, -0.17514036953124748064, - -0.11504350098606945085e-02, + -0.11504350098606945085e-2, 0.12472063439083534708, -0.12451300124340032582, - 0.39261848645980382266e-01, - 0.80420086204879032143e-01, + 0.39261848645980382266e-1, + 0.80420086204879032143e-1, -0.13277861299515705817, - 0.96275250220952318658e-01, - 0.30235599616349122937e-01, + 0.96275250220952318658e-1, + 0.30235599616349122937e-1, -0.15741575318050080035, 0.23057567193593914157, -0.19074514796014846452, - 0.79485242218230070521e-01, - 0.58481181452432078050e-01, + 0.79485242218230070521e-1, + 0.5848118145243207805e-1, -0.13147835227216778109, 0.12564115936495962034, - -0.39640541668986131740e-01, - -0.46554130317439247622e-01, - 0.92768434442081229574e-01, - -0.51938026985332369501e-01, - -0.32533228994947926971e-01, + -0.3964054166898613174e-1, + -0.46554130317439247622e-1, + 0.92768434442081229574e-1, + -0.51938026985332369501e-1, + -0.32533228994947926971e-1, 0.12671905687669862695, -0.15774664913994798643, 0.12836840105973967852, - -0.41418664571869656665e-01, - -0.35316799999804346366e-01, - 0.84066788486200014208e-01, - -0.76367039585009940938e-01, - 0.55972422407867344907e-01, - -0.33217635232718770166e-01, - 0.41770346733484391144e-01, - -0.43954507440177502386e-01, - 0.27738712673599980052e-01, - 0.47556978522331094794e-01, + -0.41418664571869656665e-1, + -0.35316799999804346366e-1, + 0.84066788486200014208e-1, + -0.76367039585009940938e-1, + 0.55972422407867344907e-1, + -0.33217635232718770166e-1, + 0.41770346733484391144e-1, + -0.43954507440177502386e-1, + 0.27738712673599980052e-1, + 0.47556978522331094794e-1, -0.14430926013587705437, 0.23156810309677045012, -0.23071658883346418678, 0.13850732312858501927, - 0.33400740934962785955e-01, + 0.33400740934962785955e-1, -0.18696514982220699408, 0.26423155677701243293, -0.21269797480927768452, - 0.89674673050442701983e-01, - 0.40005192695274437165e-01, - -0.81636972833449700238e-01, - 0.28433061632950933778e-01, - 0.63456042259581069143e-01, + 0.89674673050442701983e-1, + 0.40005192695274437165e-1, + -0.81636972833449700238e-1, + 0.28433061632950933778e-1, + 0.63456042259581069143e-1, -0.12582285545605581545, - 0.89145641989620393736e-02, - 0.90174872706855549453e-01, - -0.45821664627559899330, + 0.89145641989620393736e-2, + 0.90174872706855549453e-1, + -0.4582166462755989933, 0.24928305055632490883, -0.65824071033227660177, -0.40269615908398631587, -0.47443993180552962441, - -0.13299289866684407269e+01, - -0.69588172962050920400, - -0.13846932730961838409e+01, - -0.10964107861499181595e+01, + -0.13299289866684407269e+1, + -0.695881729620509204, + -0.13846932730961838409e+1, + -0.10964107861499181595e+1, -0.52212019387555386185, -0.40680105900254198703, 0.41978920249241657991, 0.90770141105260271353, 0.63136461599052484672, - 0.71861815228501890740, + 0.7186181522850189074, -0.16192904192377596817, -0.64030437946771312507, -0.70790373330438660648, @@ -38763,61 +38765,61 @@ function ESERK4ConstantCache(zprev) 0.70246309954627828009, 0.65791627888613746222, -0.22594767071159096994, - -0.26311884943480495780, + -0.2631188494348049578, -0.85850987491757468906, - 0.48297391258228614119e-01, + 0.48297391258228614119e-1, 0.55392182080330398808, 0.45999599217687825448, - 0.80808231478574493734e-01, + 0.80808231478574493734e-1, -0.52313318329562263909, -0.51238588429534481783, - 0.76967145224746860710e-01, + 0.7696714522474686071e-1, 0.79355725894328543735, - -0.32822670019736537028e-01, - -0.44800452618684531714e-01, + -0.32822670019736537028e-1, + -0.44800452618684531714e-1, -0.60596406206142827688, -0.24232219412350181065, - 0.89827061894869397740, - -0.20686191247662411019e-01, + 0.8982706189486939774, + -0.20686191247662411019e-1, -0.16031233523128513019, -0.35585181826734824106, -0.27886515875399991993, - 0.76440269103245528370, + 0.7644026910324552837, 0.13039050755254527614, -0.47702419734313850075, -0.22649539163486068216, 0.10986496417186512875, 0.50618045881197759606, - -0.88063267150709334530e-01, + -0.8806326715070933453e-1, -0.35784039217898111485, -0.29503824315033705394, 0.60562438420734276967, 0.19887545409254744899, -0.54201147214946465702, - -0.40463369382483009573e-01, + -0.40463369382483009573e-1, 0.13087338946222371039, 0.30390707697657726172, - 0.33980699790705356719e-02, + 0.33980699790705356719e-2, -0.62366107817146954062, 0.22102811119442489218, 0.61070592956067426549, -0.47953989405167551929, -0.13622761295080315636, - 0.60120213755416526680e-01, + 0.6012021375541652668e-1, 0.25349534566319981144, - 0.94819011778526737788e-01, + 0.94819011778526737788e-1, -0.48028626197698254252, - 0.58989368210961894146e-01, + 0.58989368210961894146e-1, 0.43181525139496412802, - -0.44949918843877646746e-01, + -0.44949918843877646746e-1, -0.53683207135208355076, 0.24956353649144666362, - 0.43878381276956945900, + 0.438783812769569459, -0.46374827208279006951, - 0.31671632469484324590e-01, - -0.15265871200628538390e-01, + 0.3167163246948432459e-1, + -0.1526587120062853839e-1, 0.27073764924207999183, - -0.53186054883985631192e-01, + -0.53186054883985631192e-1, -0.42575638685591843391, 0.31802515093617172992, 0.25676511021332482088, @@ -38828,19 +38830,19 @@ function ESERK4ConstantCache(zprev) -0.16413426691675334079, 0.16358691637453121048, 0.11221272948331774411, - -0.10023713366786745141e-01, - -0.34298246052815339890, + -0.10023713366786745141e-1, + -0.3429824605281533989, 0.36653830242853174814, - -0.94770559103070264872e-01, - 0.92804576364165322633e-01, + -0.94770559103070264872e-1, + 0.92804576364165322633e-1, -0.40969569998749189033, 0.41655660955816531388, 0.14060673633750614409, -0.60208333841919703389, 0.31755226390991053709, 0.35895757096065883385, - -0.53566743648016268420, - 0.30203781750861580235e-01, + -0.5356674364801626842, + 0.30203781750861580235e-1, 0.42857119898835677185, -0.26983710279120276532, -0.17071233029827101446, @@ -38848,28 +38850,28 @@ function ESERK4ConstantCache(zprev) 0.15557106831284145398, -0.42880325460849422203, 0.27737566096138127625, - 0.20962248184523676886e-01, + 0.20962248184523676886e-1, -0.10218301848654902375, - 0.27717561870507612110e-01, - -0.62072130204054311309e-01, + 0.2771756187050761211e-1, + -0.62072130204054311309e-1, 0.17294068032968856752, - -0.80314930449961435821e-01, + -0.80314930449961435821e-1, -0.23587997720174536109, 0.40303441988419019815, -0.16148867692424995202, -0.21994994471211115616, 0.27222678990297788371, - 0.18798267909587395436e-01, + 0.18798267909587395436e-1, -0.15903412642683592559, -0.17769914540302975126, 0.64736620703441438707, -0.62328503913812682846, - 0.11429957691904598857e-01, + 0.11429957691904598857e-1, 0.57217899542623074094, -0.52662134847373764934, - -0.61278555880068695180e-02, - 0.33247018234980912910, - -0.78763286373000521157e-01, + -0.6127855588006869518e-2, + 0.3324701823498091291, + -0.78763286373000521157e-1, -0.35098961480418866543, 0.30264394835876656797, 0.28137681715425344464, @@ -38886,184 +38888,184 @@ function ESERK4ConstantCache(zprev) -0.22648989239923988936, 0.23638164415242030048, 0.67182021923326307178, - -0.17694401154228043271e+01, - 0.20165898830093507144e+01, + -0.17694401154228043271e+1, + 0.20165898830093507144e+1, -0.95650531713235387166, - 0.39390601026979499277e-01, + 0.39390601026979499277e-1, -0.18058963711329323321, 0.89416606557242650499, -0.34349991231667181824, - -0.13515174585985674227e+01, - 0.23271674844159280227e+01, + -0.13515174585985674227e+1, + 0.23271674844159280227e+1, -0.84109030078629676286, - -0.13896807459876940882e+01, - 0.14865772380440949174e+01, - 0.12226784384476709899e+01, - -0.32008355020511896072e+01, - 0.16147789479051639638e+01, - 0.20582718510976634185e+01, - -0.28720451315817836502e+01, + -0.13896807459876940882e+1, + 0.14865772380440949174e+1, + 0.12226784384476709899e+1, + -0.32008355020511896072e+1, + 0.16147789479051639638e+1, + 0.20582718510976634185e+1, + -0.28720451315817836502e+1, -0.47242735143761960259, - 0.37924612973818900841e+01, - -0.19973710608662957888e+01, - -0.32613366017489653359e+01, - 0.55801942647220545979e+01, - -0.15055421891087747976e+01, - -0.39850519145952771893e+01, - 0.42489286650565389891e+01, + 0.37924612973818900841e+1, + -0.19973710608662957888e+1, + -0.32613366017489653359e+1, + 0.55801942647220545979e+1, + -0.15055421891087747976e+1, + -0.39850519145952771893e+1, + 0.42489286650565389891e+1, 0.75223955729700842099, - -0.38571353482182590966e+01, - 0.10133022811782594896e+01, - 0.37303971271269116272e+01, - -0.34624255043729084136e+01, - -0.14261318850037743022e+01, - 0.45961410994089506588e+01, - -0.23431501364518192432e+01, - -0.11997165454444147503e+01, - 0.14914773916279626675e+01, + -0.38571353482182590966e+1, + 0.10133022811782594896e+1, + 0.37303971271269116272e+1, + -0.34624255043729084136e+1, + -0.14261318850037743022e+1, + 0.45961410994089506588e+1, + -0.23431501364518192432e+1, + -0.11997165454444147503e+1, + 0.14914773916279626675e+1, 0.18350813470694171681, 0.70971399138464852374, - -0.32789505668363450042e+01, - 0.28590320217985647488e+01, - 0.12419422795144960947e+01, - -0.30788954329565560997e+01, - -0.10394217369316852140, - 0.30712786865560457450e+01, - 0.90581874436782991444e-01, - -0.53666155496150258486e+01, - 0.46045203426673912972e+01, - 0.21380431140430795622e+01, - -0.55006836713454543286e+01, - 0.15133225572527502223e+01, - 0.31426533990423051179e+01, - -0.18960398841993775232e+01, - -0.10521124690590397677e+01, + -0.32789505668363450042e+1, + 0.28590320217985647488e+1, + 0.12419422795144960947e+1, + -0.30788954329565560997e+1, + -0.1039421736931685214, + 0.3071278686556045745e+1, + 0.90581874436782991444e-1, + -0.53666155496150258486e+1, + 0.46045203426673912972e+1, + 0.21380431140430795622e+1, + -0.55006836713454543286e+1, + 0.15133225572527502223e+1, + 0.31426533990423051179e+1, + -0.18960398841993775232e+1, + -0.10521124690590397677e+1, -0.27942326527409006021, - 0.30204721041697943917e+01, + 0.30204721041697943917e+1, -0.54175312545969722677, - -0.40294067761417453610e+01, - 0.29121633111825948603e+01, - 0.23154794951509898304e+01, - -0.19324198349595940183e+01, - -0.40506783073849401688e+01, - 0.52339379671083081647e+01, - 0.15317342327104352950e+01, - -0.57514362189844980833e+01, - 0.22009789986235972492e+01, - 0.10156849361564324052e+01, - 0.15804556102742144397e+01, - -0.20569829025167569725e+01, - -0.35193883153032334832e+01, - 0.56351669570210081162e+01, - 0.10397755666338808211e+01, - -0.52046594422883059039e+01, - 0.86740724722956713544e-01, - 0.37288824402099076671e+01, - 0.12127845543825741537e+01, - -0.41849485674461783802e+01, + -0.4029406776141745361e+1, + 0.29121633111825948603e+1, + 0.23154794951509898304e+1, + -0.19324198349595940183e+1, + -0.40506783073849401688e+1, + 0.52339379671083081647e+1, + 0.1531734232710435295e+1, + -0.57514362189844980833e+1, + 0.22009789986235972492e+1, + 0.10156849361564324052e+1, + 0.15804556102742144397e+1, + -0.20569829025167569725e+1, + -0.35193883153032334832e+1, + 0.56351669570210081162e+1, + 0.10397755666338808211e+1, + -0.52046594422883059039e+1, + 0.86740724722956713544e-1, + 0.37288824402099076671e+1, + 0.12127845543825741537e+1, + -0.41849485674461783802e+1, -0.72107197972213998849, - 0.25993364436577199861e+01, - 0.27441691225837829826e+01, - -0.22934933186252308701e+01, - -0.54152789974990449551e+01, - 0.53054560094087310773e+01, - 0.30439723699812604174e+01, - -0.33807263633109241319e+01, - -0.21880617221637828074e+01, + 0.25993364436577199861e+1, + 0.27441691225837829826e+1, + -0.22934933186252308701e+1, + -0.54152789974990449551e+1, + 0.53054560094087310773e+1, + 0.30439723699812604174e+1, + -0.33807263633109241319e+1, + -0.21880617221637828074e+1, -0.44814373808705509905, - 0.46309656448385236871e+01, - 0.19408341815627847549e+01, - -0.60153441591790599574e+01, - -0.20624495266797566728e+01, - 0.51966536825487690265e+01, - 0.20684040509855972090e+01, - -0.12008601180183651191e+01, - -0.42729553994831022123e+01, - -0.22149420984890242359e+01, - 0.71600727475502203845e+01, - 0.18281773304725588147e+01, - -0.36101464724840646170e+01, - -0.39132132323983119804e+01, - -0.82540708679350005550, - 0.61441103859992605152e+01, - 0.27321265653680826269e+01, - -0.19252575617044098699e+01, - -0.74074522393423443134e+01, - 0.45862244607509544680, - 0.40027162491958794277e+01, - 0.44298001752709490475e+01, - 0.24255019420270387265e+01, - -0.85521785302402371087e+01, - -0.33395473211176796013e+01, + 0.46309656448385236871e+1, + 0.19408341815627847549e+1, + -0.60153441591790599574e+1, + -0.20624495266797566728e+1, + 0.51966536825487690265e+1, + 0.2068404050985597209e+1, + -0.12008601180183651191e+1, + -0.42729553994831022123e+1, + -0.22149420984890242359e+1, + 0.71600727475502203845e+1, + 0.18281773304725588147e+1, + -0.3610146472484064617e+1, + -0.39132132323983119804e+1, + -0.8254070867935000555, + 0.61441103859992605152e+1, + 0.27321265653680826269e+1, + -0.19252575617044098699e+1, + -0.74074522393423443134e+1, + 0.4586224460750954468, + 0.40027162491958794277e+1, + 0.44298001752709490475e+1, + 0.24255019420270387265e+1, + -0.85521785302402371087e+1, + -0.33395473211176796013e+1, 0.87040651586063833012, - 0.42241807561588604614e+01, - 0.77553732056450881416e+01, + 0.42241807561588604614e+1, + 0.77553732056450881416e+1, -0.84216548382792699723, - -0.66425901756439618140e+01, - -0.46190729881379359867e+01, - -0.42778614781449055826e+01, - 0.44432008023400459962e+01, - 0.90876342545871686696e+01, - 0.36175450108276665517e+01, - 0.31642516974833125865e+01, - -0.62157690825175668792e+01, - -0.90976022127693418895e+01, - -0.62495155586392137081e+01, - -0.52471883676744992542e+01, - 0.31873701530096454348e+01, - 0.66838221502567147780e+01, - 0.11166829301675972985e+02, - 0.10807572366587152146e+02, - 0.12316063779233376252e+02, - 0.80128475100130174269e+01, - 0.74660311518478570392e+01, - 0.52989999090240180735e+01, - 0.21451605016307846441e+01, - 0.29432912102992898618e+01, + -0.6642590175643961814e+1, + -0.46190729881379359867e+1, + -0.42778614781449055826e+1, + 0.44432008023400459962e+1, + 0.90876342545871686696e+1, + 0.36175450108276665517e+1, + 0.31642516974833125865e+1, + -0.62157690825175668792e+1, + -0.90976022127693418895e+1, + -0.62495155586392137081e+1, + -0.52471883676744992542e+1, + 0.31873701530096454348e+1, + 0.6683822150256714778e+1, + 0.11166829301675972985e+2, + 0.10807572366587152146e+2, + 0.12316063779233376252e+2, + 0.80128475100130174269e+1, + 0.74660311518478570392e+1, + 0.52989999090240180735e+1, + 0.21451605016307846441e+1, + 0.29432912102992898618e+1, 0.63828581533753792066, - 0.53921865670340995980, + 0.5392186567034099598, 0.44270272651056014057, 0.54645399801074956425, - -0.10637320960130784986e+01, - 0.15171392207568510369e+01, - -0.10345265392697715612e+01, - -0.34203395044648345069e-01, - 0.11311894791522578707e+01, - -0.14594268152174461051e+01, + -0.10637320960130784986e+1, + 0.15171392207568510369e+1, + -0.10345265392697715612e+1, + -0.34203395044648345069e-1, + 0.11311894791522578707e+1, + -0.14594268152174461051e+1, 0.66782079942870020695, 0.91764182782673631156, - -0.24086632723099854481e+01, - 0.28621600704843972451e+01, - -0.18608334530612242741e+01, + -0.24086632723099854481e+1, + 0.28621600704843972451e+1, + -0.18608334530612242741e+1, -0.20253407651112187438, - 0.23036826348285721622e+01, - -0.33587734655854499799e+01, - 0.28319029012902747766e+01, - -0.10441546748379697540e+01, - -0.10208768443733440279e+01, - 0.22748585171255233384e+01, - -0.21395383605798721227e+01, + 0.23036826348285721622e+1, + -0.33587734655854499799e+1, + 0.28319029012902747766e+1, + -0.1044154674837969754e+1, + -0.10208768443733440279e+1, + 0.22748585171255233384e+1, + -0.21395383605798721227e+1, 0.84013647769113775077, 0.76161397046623524609, - -0.17037620455384128171e+01, - 0.14854146091352584680e+01, + -0.17037620455384128171e+1, + 0.1485414609135258468e+1, -0.34469603911856233625, -0.91870468700293606013, - 0.14399899451696871466e+01, + 0.14399899451696871466e+1, -0.82307858628444374727, -0.61942936785510871456, - 0.20380282190486016525e+01, - -0.25409806569836259627e+01, - 0.17075082767652005611e+01, + 0.20380282190486016525e+1, + -0.25409806569836259627e+1, + 0.17075082767652005611e+1, 0.15696354837580597796, - -0.21783987549454852939e+01, - 0.33755425067816124951e+01, - -0.31794693962550559796e+01, - 0.17148646251805346186e+01, + -0.21783987549454852939e+1, + 0.33755425067816124951e+1, + -0.31794693962550559796e+1, + 0.17148646251805346186e+1, 0.28642378644035215718, - -0.18896277956688123378e+01, - 0.24370977428958915390e+01, - -0.18571616761351235070e+01, + -0.18896277956688123378e+1, + 0.2437097742895891539e+1, + -0.1857161676135123507e+1, 0.63926509179047341647, 0.47823023731096042654, -0.92930295586495503812, @@ -39071,3186 +39073,3186 @@ function ESERK4ConstantCache(zprev) 0.12333285029319024373, -0.67966631459231430235, 0.62559030288605799175, - 0.65224716260428056147e-01, + 0.65224716260428056147e-1, -0.99295308615134059149, - 0.15624650336719223542e+01, - -0.13332858108794003460e+01, + 0.15624650336719223542e+1, + -0.1333285810879400346e+1, 0.28743602044751503932, - 0.11304175016870969817e+01, - -0.22292929426702472462e+01, - 0.24282496848918233567e+01, - -0.15664596278043256827e+01, - 0.26225228472940540492e+01, - -0.12452789133068853378e+01, - -0.63593353050914824820e+01, - 0.12036386882908798768e+02, - -0.12986359442048392765e+02, - 0.69612078630200047158e+01, - 0.25153378150752212505e+01, - -0.11873715244095892629e+02, - 0.15572491142487002946e+02, - -0.12986587215416854235e+02, - 0.48448849967643061731e+01, - 0.33858851566444294612e+01, - -0.84354152567563627230e+01, - 0.71696183493633949269e+01, - -0.20675709210624062528e+01, - -0.42040266163140316280e+01, - 0.66255552508523853916e+01, - -0.45974430947085789256e+01, - -0.15857732830062420959e+01, - 0.71879004103076793442e+01, - -0.97204222371229658251e+01, - 0.66342193356521157455e+01, + 0.11304175016870969817e+1, + -0.22292929426702472462e+1, + 0.24282496848918233567e+1, + -0.15664596278043256827e+1, + 0.26225228472940540492e+1, + -0.12452789133068853378e+1, + -0.6359335305091482482e+1, + 0.12036386882908798768e+2, + -0.12986359442048392765e+2, + 0.69612078630200047158e+1, + 0.25153378150752212505e+1, + -0.11873715244095892629e+2, + 0.15572491142487002946e+2, + -0.12986587215416854235e+2, + 0.48448849967643061731e+1, + 0.33858851566444294612e+1, + -0.8435415256756362723e+1, + 0.71696183493633949269e+1, + -0.20675709210624062528e+1, + -0.4204026616314031628e+1, + 0.66255552508523853916e+1, + -0.45974430947085789256e+1, + -0.15857732830062420959e+1, + 0.71879004103076793442e+1, + -0.97204222371229658251e+1, + 0.66342193356521157455e+1, -0.62211633344444150495, - -0.58337197611890774240e+01, - 0.81585631789396746427e+01, - -0.61989806776976061897e+01, + -0.5833719761189077424e+1, + 0.81585631789396746427e+1, + -0.61989806776976061897e+1, 0.43957964626144896414, - 0.45699486150521222427e+01, - -0.67966230283101678467e+01, - 0.41194209164268169587e+01, + 0.45699486150521222427e+1, + -0.67966230283101678467e+1, + 0.41194209164268169587e+1, 0.69858099239541138203, - -0.56099704549380939866e+01, - 0.68121688540360532116e+01, - -0.48186040148701225760e+01, + -0.56099704549380939866e+1, + 0.68121688540360532116e+1, + -0.4818604014870122576e+1, 0.19916916144745949735, - 0.31960969125108156241e+01, - -0.45469212852349532028e+01, - 0.27871762615760502513e+01, + 0.31960969125108156241e+1, + -0.45469212852349532028e+1, + 0.27871762615760502513e+1, -0.84832972603544631873, -0.27082947593026024391, - -0.13144503608911606296e+01, - 0.32457148452298376640e+01, - -0.42434466486295319143e+01, - 0.14597814021925612504e+01, - 0.35245708855535378135e+01, - -0.90875450146041689692e+01, - 0.10670183003580293146e+02, - -0.75362715846819181564e+01, + -0.13144503608911606296e+1, + 0.3245714845229837664e+1, + -0.42434466486295319143e+1, + 0.14597814021925612504e+1, + 0.35245708855535378135e+1, + -0.90875450146041689692e+1, + 0.10670183003580293146e+2, + -0.75362715846819181564e+1, -0.21931625445674443609, - 0.76425997631255420117e+01, - -0.11619527624966682566e+02, - 0.91020164990611913680e+01, - -0.28716498412657331940e+01, - -0.37593770511077386764e+01, - 0.56679968917731180511e+01, - -0.22808296878852689638e+01, - -0.36126881535565336101e+01, - 0.83874649015907500882e+01, - -0.38066558871231372940e+01, - -0.92672780404167279245e-01, - 0.19111539762118763264e+02, - -0.84641456244244981377e+01, - 0.31850509142452800404e+02, - 0.22471872813392760548e+02, - 0.26611136367557165272e+02, - 0.67918729678720694665e+02, - 0.40820903525745123375e+02, - 0.70466738384704783016e+02, - 0.60868482114746058187e+02, - 0.26540317087221559689e+02, - 0.22347285569942847872e+02, - -0.23102303280875780445e+02, - -0.46993366891921937167e+02, - -0.36063073801930279672e+02, - -0.35203919143885890719e+02, - 0.54397902911097668621e+01, - 0.36590709748967114479e+02, - 0.36758958573763443667e+02, - 0.20958542121454950546e+02, - -0.79175128675916726095e+01, - -0.41143125597246402947e+02, - -0.30753000173437715858e+02, - 0.75627229231296038137e+01, - 0.18339084675666203594e+02, - 0.41833628449066488031e+02, + 0.76425997631255420117e+1, + -0.11619527624966682566e+2, + 0.9102016499061191368e+1, + -0.2871649841265733194e+1, + -0.37593770511077386764e+1, + 0.56679968917731180511e+1, + -0.22808296878852689638e+1, + -0.36126881535565336101e+1, + 0.83874649015907500882e+1, + -0.3806655887123137294e+1, + -0.92672780404167279245e-1, + 0.19111539762118763264e+2, + -0.84641456244244981377e+1, + 0.31850509142452800404e+2, + 0.22471872813392760548e+2, + 0.26611136367557165272e+2, + 0.67918729678720694665e+2, + 0.40820903525745123375e+2, + 0.70466738384704783016e+2, + 0.60868482114746058187e+2, + 0.26540317087221559689e+2, + 0.22347285569942847872e+2, + -0.23102303280875780445e+2, + -0.46993366891921937167e+2, + -0.36063073801930279672e+2, + -0.35203919143885890719e+2, + 0.54397902911097668621e+1, + 0.36590709748967114479e+2, + 0.36758958573763443667e+2, + 0.20958542121454950546e+2, + -0.79175128675916726095e+1, + -0.41143125597246402947e+2, + -0.30753000173437715858e+2, + 0.75627229231296038137e+1, + 0.18339084675666203594e+2, + 0.41833628449066488031e+2, 0.90233500793156362629, - -0.32352954200155117803e+02, - -0.22712754612759486150e+02, - -0.47555282089168189330e+01, - 0.26680731752778442001e+02, - 0.30214358049053771538e+02, - -0.82586115915579423330e+01, - -0.37687705772560839534e+02, - -0.23879797309774826175e+01, - 0.51430090606180813850e+01, - 0.31452752040469174943e+02, - 0.11948867961833336437e+02, - -0.45679833323245425447e+02, - -0.14661266545501618896e+01, - 0.10547101297635210315e+02, - 0.18140903148775223030e+02, - 0.14484266394078046503e+02, - -0.39611802132980848512e+02, - -0.80926928569784113421e+01, - 0.25753528891824419844e+02, - 0.13114960910972907726e+02, - -0.82951204207343458563e+01, - -0.23582773454971892590e+02, - 0.10259807668813547554e+01, - 0.22260644697538076286e+02, - 0.13572400526400572929e+02, - -0.31288266393569873713e+02, - -0.10702563211140859067e+02, - 0.28536995438910661704e+02, - 0.25519107348553577985e+01, - -0.71659669369015794871e+01, - -0.16164084023813188651e+02, + -0.32352954200155117803e+2, + -0.2271275461275948615e+2, + -0.4755528208916818933e+1, + 0.26680731752778442001e+2, + 0.30214358049053771538e+2, + -0.8258611591557942333e+1, + -0.37687705772560839534e+2, + -0.23879797309774826175e+1, + 0.5143009060618081385e+1, + 0.31452752040469174943e+2, + 0.11948867961833336437e+2, + -0.45679833323245425447e+2, + -0.14661266545501618896e+1, + 0.10547101297635210315e+2, + 0.1814090314877522303e+2, + 0.14484266394078046503e+2, + -0.39611802132980848512e+2, + -0.80926928569784113421e+1, + 0.25753528891824419844e+2, + 0.13114960910972907726e+2, + -0.82951204207343458563e+1, + -0.2358277345497189259e+2, + 0.10259807668813547554e+1, + 0.22260644697538076286e+2, + 0.13572400526400572929e+2, + -0.31288266393569873713e+2, + -0.10702563211140859067e+2, + 0.28536995438910661704e+2, + 0.25519107348553577985e+1, + -0.71659669369015794871e+1, + -0.16164084023813188651e+2, -0.40066693515930784653, - 0.34053136783058370440e+02, - -0.13423629903102693106e+02, - -0.30107942522436502486e+02, - 0.22630541233188232297e+02, - 0.10106120594596685436e+02, - -0.53160019193561032225e+01, - -0.12589147809993168181e+02, - -0.47106274184546785833e+01, - 0.24287783510757872563e+02, - -0.14438583553293196093e+01, - -0.24384089233636341731e+02, - 0.27829917384811766468e+01, - 0.29545282230930222767e+02, - -0.15487928258025924322e+02, - -0.20336655263508500724e+02, - 0.21371569313643643540e+02, - 0.13206210086231475742e+01, - -0.12831360549781780644e+01, - -0.13646496423299957712e+02, - 0.35506132907266239052e+01, - 0.20440949896262392116e+02, - -0.13218871242418158474e+02, - -0.18738724773331625784e+02, - 0.21919853359494783973e+02, - 0.13968818267253507059e+02, - -0.36874220531110239563e+02, - 0.16018304617676431434e+02, - 0.12987148068383765676e+02, - -0.10689295387890838995e+02, - -0.67018927698130337234e+01, - 0.39343537958776204633e+01, - 0.12662813363330164051e+02, - -0.12524513375838038698e+02, - -0.23294457711088485397e+01, - 0.17946044861264454084e+01, - 0.16482217504316658108e+02, - -0.18557177428367388927e+02, - -0.95392046650336670410e+01, - 0.32934133031261225710e+02, - -0.17064519896438451241e+02, - -0.19278161049273528249e+02, - 0.28770457226275777174e+02, - -0.19682198788439655424e+01, - -0.22051307206383036430e+02, - 0.12797091692305796684e+02, - 0.11693500303633067361e+02, - -0.15560551796916955780e+02, - -0.41651269467392966206e+01, - 0.18673196359161593705e+02, - -0.11099707206631029166e+02, - -0.39015962613693879746e+01, - 0.72073664178310004047e+01, - -0.24139119305237444202e+01, - 0.38525602346205696236e+01, - -0.98427003581003269517e+01, - 0.52844183530136898952e+01, - 0.11210328959991183950e+02, - -0.20125507405185270926e+02, - 0.78688916989820523185e+01, - 0.11173328904899817005e+02, - -0.12185189525599948723e+02, - -0.51847152138010601519e+01, - 0.14096771425182081927e+02, - 0.32604771398990401998e+01, - -0.28742328523901530701e+02, - 0.28838743448607136344e+02, - 0.18272982968774316159e+01, - -0.30938640420174230883e+02, - 0.26997374115903138403e+02, - 0.20229943072153804273e+01, - -0.18998528901256616308e+02, - 0.41712651365210513532e+01, - 0.20500049664744334876e+02, - -0.19608510282159443250e+02, - -0.10382239440045205825e+02, - 0.35387803046921582961e+02, - -0.24927719856898669093e+02, - -0.10362510199433801361e+02, - 0.30901718398189935044e+02, - -0.15220659343902049443e+02, - -0.15183002945634290981e+02, - 0.22862049988526813138e+02, - -0.14097468556506857595e+02, - -0.30073738036865447221e+01, - 0.68261299111625755032e+01, - 0.14360988012886348741e+02, - -0.27924459505361120648e+02, - -0.18382385745492422213e+01, - 0.45190381216467230274e+02, - -0.55854588709702134963e+02, - 0.15986793349532657516e+02, - 0.20221055688749224544e+02, - -0.12569449555826436082e+02, - -0.23876027530171292312e+02, - 0.20997082569762397952e+02, - 0.29064547405563612159e+02, - -0.67570762407775347924e+02, - 0.28848153809165040684e+02, - 0.45079085324210957708e+02, - -0.62675896335810200810e+02, - -0.10397187194124818177e+02, - 0.76469615157527201177e+02, - -0.43925162026348658628e+02, - -0.57238056995981750674e+02, - 0.85466531848275252514e+02, - 0.67031064614060653639e+01, - -0.10778567819498196911e+03, - 0.68469983364372211554e+02, - 0.74509731759760043701e+02, - -0.14467911418702630044e+03, - 0.39755885178022658977e+02, - 0.10663379109468665717e+03, - -0.11117845339635746882e+03, - -0.27509560265520203615e+02, - 0.10981004653186853659e+03, - -0.25946354111513763030e+02, - -0.10692696373072263327e+03, - 0.95769150140365042034e+02, - 0.41262890217811673210e+02, - -0.12256226855561334332e+03, - 0.51108908049945306118e+02, - 0.44318716537208452166e+02, - -0.34969215117620862543e+02, - -0.28756119331538172901e+02, - 0.41263113607047952058e+01, - 0.81165771327618330133e+02, - -0.80216995690605628511e+02, - -0.35786533292857846789e+02, - 0.91773514392856796462e+02, + 0.3405313678305837044e+2, + -0.13423629903102693106e+2, + -0.30107942522436502486e+2, + 0.22630541233188232297e+2, + 0.10106120594596685436e+2, + -0.53160019193561032225e+1, + -0.12589147809993168181e+2, + -0.47106274184546785833e+1, + 0.24287783510757872563e+2, + -0.14438583553293196093e+1, + -0.24384089233636341731e+2, + 0.27829917384811766468e+1, + 0.29545282230930222767e+2, + -0.15487928258025924322e+2, + -0.20336655263508500724e+2, + 0.2137156931364364354e+2, + 0.13206210086231475742e+1, + -0.12831360549781780644e+1, + -0.13646496423299957712e+2, + 0.35506132907266239052e+1, + 0.20440949896262392116e+2, + -0.13218871242418158474e+2, + -0.18738724773331625784e+2, + 0.21919853359494783973e+2, + 0.13968818267253507059e+2, + -0.36874220531110239563e+2, + 0.16018304617676431434e+2, + 0.12987148068383765676e+2, + -0.10689295387890838995e+2, + -0.67018927698130337234e+1, + 0.39343537958776204633e+1, + 0.12662813363330164051e+2, + -0.12524513375838038698e+2, + -0.23294457711088485397e+1, + 0.17946044861264454084e+1, + 0.16482217504316658108e+2, + -0.18557177428367388927e+2, + -0.9539204665033667041e+1, + 0.3293413303126122571e+2, + -0.17064519896438451241e+2, + -0.19278161049273528249e+2, + 0.28770457226275777174e+2, + -0.19682198788439655424e+1, + -0.2205130720638303643e+2, + 0.12797091692305796684e+2, + 0.11693500303633067361e+2, + -0.1556055179691695578e+2, + -0.41651269467392966206e+1, + 0.18673196359161593705e+2, + -0.11099707206631029166e+2, + -0.39015962613693879746e+1, + 0.72073664178310004047e+1, + -0.24139119305237444202e+1, + 0.38525602346205696236e+1, + -0.98427003581003269517e+1, + 0.52844183530136898952e+1, + 0.1121032895999118395e+2, + -0.20125507405185270926e+2, + 0.78688916989820523185e+1, + 0.11173328904899817005e+2, + -0.12185189525599948723e+2, + -0.51847152138010601519e+1, + 0.14096771425182081927e+2, + 0.32604771398990401998e+1, + -0.28742328523901530701e+2, + 0.28838743448607136344e+2, + 0.18272982968774316159e+1, + -0.30938640420174230883e+2, + 0.26997374115903138403e+2, + 0.20229943072153804273e+1, + -0.18998528901256616308e+2, + 0.41712651365210513532e+1, + 0.20500049664744334876e+2, + -0.1960851028215944325e+2, + -0.10382239440045205825e+2, + 0.35387803046921582961e+2, + -0.24927719856898669093e+2, + -0.10362510199433801361e+2, + 0.30901718398189935044e+2, + -0.15220659343902049443e+2, + -0.15183002945634290981e+2, + 0.22862049988526813138e+2, + -0.14097468556506857595e+2, + -0.30073738036865447221e+1, + 0.68261299111625755032e+1, + 0.14360988012886348741e+2, + -0.27924459505361120648e+2, + -0.18382385745492422213e+1, + 0.45190381216467230274e+2, + -0.55854588709702134963e+2, + 0.15986793349532657516e+2, + 0.20221055688749224544e+2, + -0.12569449555826436082e+2, + -0.23876027530171292312e+2, + 0.20997082569762397952e+2, + 0.29064547405563612159e+2, + -0.67570762407775347924e+2, + 0.28848153809165040684e+2, + 0.45079085324210957708e+2, + -0.6267589633581020081e+2, + -0.10397187194124818177e+2, + 0.76469615157527201177e+2, + -0.43925162026348658628e+2, + -0.57238056995981750674e+2, + 0.85466531848275252514e+2, + 0.67031064614060653639e+1, + -0.10778567819498196911e+3, + 0.68469983364372211554e+2, + 0.74509731759760043701e+2, + -0.14467911418702630044e+3, + 0.39755885178022658977e+2, + 0.10663379109468665717e+3, + -0.11117845339635746882e+3, + -0.27509560265520203615e+2, + 0.10981004653186853659e+3, + -0.2594635411151376303e+2, + -0.10692696373072263327e+3, + 0.95769150140365042034e+2, + 0.4126289021781167321e+2, + -0.12256226855561334332e+3, + 0.51108908049945306118e+2, + 0.44318716537208452166e+2, + -0.34969215117620862543e+2, + -0.28756119331538172901e+2, + 0.41263113607047952058e+1, + 0.81165771327618330133e+2, + -0.80216995690605628511e+2, + -0.35786533292857846789e+2, + 0.91773514392856796462e+2, 0.81500897365572610997, - -0.94227483066318399096e+02, - 0.12140931624438893621e+02, - 0.13676943643631088321e+03, - -0.11979648820344833382e+03, - -0.64527693300947532862e+02, - 0.15224202221593620266e+03, - -0.35869888352839289780e+02, - -0.89217079651711060251e+02, - 0.39862336987788374643e+02, - 0.50321895805965390025e+02, - -0.32961051627395274721e+01, - -0.90300979897103545113e+02, - 0.26893852236207674622e+02, - 0.10555887281280030265e+03, - -0.75089022265962782399e+02, - -0.78357033643619175223e+02, - 0.71455274301077224663e+02, - 0.10038302500168633458e+03, - -0.13916328655388315383e+03, - -0.45587064060215851669e+02, - 0.15230241099162452656e+03, - -0.38139162620627544698e+02, - -0.52797816208016570272e+02, - -0.37501050386667678538e+02, - 0.66520290757955777394e+02, - 0.90505855567642086612e+02, - -0.15680019186197512226e+03, - -0.29570570555780022914e+02, - 0.14508175355597515477e+03, - 0.51165601306191934583e+01, - -0.11321586972466529630e+03, - -0.33850336126336756593e+02, - 0.11859985059591727463e+03, - 0.29459255108799844436e+02, - -0.84582017708093630404e+02, - -0.79570216698286657220e+02, - 0.78280588569465479054e+02, - 0.13886383133760455166e+03, - -0.13603242618513596085e+03, - -0.98952857400162784529e+02, - 0.95746692817676560594e+02, - 0.75555396437942150101e+02, - 0.29777271293633198468e+01, - -0.13315329823249572883e+03, - -0.53021548208951749359e+02, - 0.17237951781945298535e+03, - 0.58592800704693253522e+02, - -0.14415660815337759004e+03, - -0.69329138028705870056e+02, - 0.36337277120853805457e+02, - 0.13546711279993419907e+03, - 0.47177963518455619862e+02, - -0.19325963974300051973e+03, - -0.61204781860571628727e+02, - 0.10142633583452291646e+03, - 0.12815082843423911640e+03, - 0.76685629423615369049e+01, - -0.16435238589208859139e+03, - -0.95270927292492160632e+02, - 0.72612147559521247331e+02, - 0.20024825504763842332e+03, + -0.94227483066318399096e+2, + 0.12140931624438893621e+2, + 0.13676943643631088321e+3, + -0.11979648820344833382e+3, + -0.64527693300947532862e+2, + 0.15224202221593620266e+3, + -0.3586988835283928978e+2, + -0.89217079651711060251e+2, + 0.39862336987788374643e+2, + 0.50321895805965390025e+2, + -0.32961051627395274721e+1, + -0.90300979897103545113e+2, + 0.26893852236207674622e+2, + 0.10555887281280030265e+3, + -0.75089022265962782399e+2, + -0.78357033643619175223e+2, + 0.71455274301077224663e+2, + 0.10038302500168633458e+3, + -0.13916328655388315383e+3, + -0.45587064060215851669e+2, + 0.15230241099162452656e+3, + -0.38139162620627544698e+2, + -0.52797816208016570272e+2, + -0.37501050386667678538e+2, + 0.66520290757955777394e+2, + 0.90505855567642086612e+2, + -0.15680019186197512226e+3, + -0.29570570555780022914e+2, + 0.14508175355597515477e+3, + 0.51165601306191934583e+1, + -0.1132158697246652963e+3, + -0.33850336126336756593e+2, + 0.11859985059591727463e+3, + 0.29459255108799844436e+2, + -0.84582017708093630404e+2, + -0.7957021669828665722e+2, + 0.78280588569465479054e+2, + 0.13886383133760455166e+3, + -0.13603242618513596085e+3, + -0.98952857400162784529e+2, + 0.95746692817676560594e+2, + 0.75555396437942150101e+2, + 0.29777271293633198468e+1, + -0.13315329823249572883e+3, + -0.53021548208951749359e+2, + 0.17237951781945298535e+3, + 0.58592800704693253522e+2, + -0.14415660815337759004e+3, + -0.69329138028705870056e+2, + 0.36337277120853805457e+2, + 0.13546711279993419907e+3, + 0.47177963518455619862e+2, + -0.19325963974300051973e+3, + -0.61204781860571628727e+2, + 0.10142633583452291646e+3, + 0.1281508284342391164e+3, + 0.76685629423615369049e+1, + -0.16435238589208859139e+3, + -0.95270927292492160632e+2, + 0.72612147559521247331e+2, + 0.20024825504763842332e+3, 0.40560766504880685357, - -0.12176769774920985867e+03, - -0.13921103053801195415e+03, - -0.50240372533366887353e+02, - 0.22646355607526044196e+03, - 0.11578296803452184349e+03, - -0.30727341380483625954e+02, - -0.12982910094978572602e+03, - -0.21826611118545284285e+03, - 0.20919686618448050552e+02, - 0.18930401058872126896e+03, - 0.14693700593820994982e+03, - 0.11639904786503556977e+03, - -0.13112122274639472153e+03, - -0.25412728751833711272e+03, - -0.12512685334898721123e+03, - -0.76078855595027420122e+02, - 0.17530663024707473596e+03, - 0.26183124771760918748e+03, - 0.19744449531352094596e+03, - 0.13594556479955076611e+03, - -0.75510544960252261149e+02, - -0.21348925599541610154e+03, - -0.30906584265521070165e+03, - -0.33763898826227000427e+03, - -0.34021410623060148737e+03, - -0.25230087554450838638e+03, - -0.20997991987779371925e+03, - -0.15445101765220994139e+03, - -0.71865887622960329395e+02, - -0.74012413570861042444e+02, - -0.30273350067812561548e+02, - -0.63734187580692216457e+01, - -0.22070825911033001177e+02, - -0.45507719359078180332e+01, - 0.16356747665598177832e+02, - -0.28529094147848695684e+02, - 0.17551717544689115158e+02, - 0.72530787688473505881e+01, - -0.33305213288393758830e+02, - 0.41502041010263731380e+02, - -0.23352126022042895670e+02, - -0.13930843670013159041e+02, - 0.49849776464426497569e+02, - -0.62430840826901146556e+02, - 0.41742471807242431225e+02, - 0.34465672620758112110e+01, - -0.49731069307211271280e+02, - 0.72311606613710821989e+02, - -0.59032488957106110661e+02, - 0.17518561153247137696e+02, - 0.29417344834434388190e+02, - -0.56747408140894073370e+02, - 0.51505543051699326895e+02, - -0.19493457922320601483e+02, - -0.18734481739226751529e+02, - 0.40510846496894600932e+02, - -0.34198237133864900272e+02, - 0.56828453158068628071e+01, - 0.25852307869301501597e+02, - -0.39622067870897843989e+02, - 0.25853688650632232537e+02, - 0.84923129481127226370e+01, - -0.43628877077559742759e+02, - 0.58473249445693213033e+02, - -0.42660857877529856808e+02, - 0.26253370565455171892e+01, - 0.41937310235812681469e+02, - -0.68669487725031487457e+02, - 0.64561222413341099013e+02, - -0.32441869485862575573e+02, - -0.11015204564229657436e+02, - 0.44647129989204536571e+02, - -0.53854421119142607211e+02, - 0.37652844242171504163e+02, - -0.79381252576158871648e+01, - -0.17892245592709400626e+02, - 0.26804814722813937067e+02, - -0.16765776280439649071e+02, - -0.30452617280945992739e+01, - 0.18378433135391013309e+02, - -0.18495512649612532385e+02, - 0.24806060684654283044e+01, - 0.20326316623764462577e+02, - -0.35721228929028079335e+02, - 0.32884910640391389336e+02, - -0.10761160690261879935e+02, - -0.20851737845361718371e+02, - 0.46213868436084993618e+02, - -0.51866931734044086966e+02, - 0.33848468140979626639e+02, - -0.53880609592297645349e+02, - 0.38385698946564176026e+02, - 0.79824228181147688588e+02, - -0.16422169310876225268e+03, - 0.17793973201880714896e+03, - -0.91945264301362129800e+02, - -0.37976061582646600812e+02, - 0.16104382274249621787e+03, - -0.19965497533602706426e+03, - 0.15179105026151415814e+03, - -0.31879963753265275983e+02, - -0.78548268995045944507e+02, - 0.13661179060328214518e+03, - -0.10229288700737602369e+03, - 0.18965569860625596021e+02, - 0.72823831299236488235e+02, - -0.10109811241331921394e+03, - 0.63903334139911677880e+02, - 0.29279128122710101678e+02, - -0.10528670750028118164e+03, - 0.13061879348865224415e+03, - -0.73002808615202326337e+02, - -0.20417136511297609758e+02, - 0.11030200714527333616e+03, - -0.12996373562179766736e+03, - 0.83980660420482323048e+02, - 0.13859606762647597833e+02, - -0.90651290799946906418e+02, - 0.11721246578690065121e+03, - -0.66344380923756361312e+02, - -0.13418931168608574822e+02, - 0.87546613021763079132e+02, - -0.98810893842478520810e+02, - 0.60278401054119321145e+02, - 0.13351854078188743813e+02, - -0.59157611293202961633e+02, - 0.65596136418843698834e+02, - -0.21634365886636324205e+02, - -0.20044162285244574662e+02, - 0.38150251605284196899e+02, - -0.20139949232896450226e+01, - -0.48266371864268734271e+02, - 0.85589261622144235275e+02, - -0.58033323530410697799e+02, - -0.15152873470869639760e+02, - 0.10939406058486321172e+03, - -0.15018158006941419558e+03, - 0.11965638622141858605e+03, - -0.13327055647653871517e+02, - -0.95253889620955405348e+02, - 0.15724609315231955975e+03, - -0.12218128517097655106e+03, - 0.29326747524772240894e+02, - 0.71983023569529720476e+02, - -0.10150764993794014401e+03, - 0.47165756781442922829e+02, - 0.51355376464956400184e+02, - -0.13901631325873609057e+03, - 0.86343523533500700751e+02, - -0.42240806362678135599e+02, - -0.24288935969121470748e+03, - 0.83611316703047833698e+02, - -0.46081581644177981616e+03, - -0.35093543774395988066e+03, - -0.42976958984906900696e+03, - -0.10088561168246108082e+04, - -0.67032888972801049476e+03, - -0.10513775497787248696e+04, - -0.95544023789635468802e+03, - -0.40695526046804877751e+03, - -0.33582432750795715037e+03, - 0.34729048754428566781e+03, - 0.72324665481906640707e+03, - 0.56930692231645491574e+03, - 0.51650369392253560363e+03, - -0.53434228586294103991e+02, - -0.58928643052909114886e+03, - -0.55256300791855392163e+03, - -0.32045414723772478283e+03, - 0.10519616204925770830e+03, - 0.65981435392715127364e+03, - 0.44396758395950456588e+03, - -0.88045858528762963147e+02, - -0.30756468317045698768e+03, - -0.62220157606106317871e+03, - -0.33504280080723738422e+02, - 0.51487427063925042603e+03, - 0.33887574365846876390e+03, - 0.74121571016528491782e+02, - -0.39786292138740714108e+03, - -0.49320807094452095498e+03, - 0.16647703252264918206e+03, - 0.53769038470824807519e+03, - 0.72577475131537383390e+02, - -0.98789645970481160475e+02, - -0.48581925947974627888e+03, - -0.16315917771936102554e+03, - 0.67109749886327392687e+03, - 0.55011332172876713287e+02, - -0.18382310032606488903e+03, - -0.27573451274732104821e+03, - -0.20882491675560666522e+03, - 0.58438346423649477401e+03, - 0.15125558447543426155e+03, - -0.41370457889348142544e+03, - -0.20112204548039352403e+03, - 0.14389290680871147288e+03, - 0.33526960705194102275e+03, - 0.14993081542862235267e+02, - -0.36741570200986961936e+03, - -0.19650821923099601918e+03, - 0.48237145991997164174e+03, - 0.15511770955608872669e+03, - -0.42712641133878116761e+03, - -0.48016839246957147225e+02, - 0.11215562771376517048e+03, - 0.25319918013938070089e+03, + -0.12176769774920985867e+3, + -0.13921103053801195415e+3, + -0.50240372533366887353e+2, + 0.22646355607526044196e+3, + 0.11578296803452184349e+3, + -0.30727341380483625954e+2, + -0.12982910094978572602e+3, + -0.21826611118545284285e+3, + 0.20919686618448050552e+2, + 0.18930401058872126896e+3, + 0.14693700593820994982e+3, + 0.11639904786503556977e+3, + -0.13112122274639472153e+3, + -0.25412728751833711272e+3, + -0.12512685334898721123e+3, + -0.76078855595027420122e+2, + 0.17530663024707473596e+3, + 0.26183124771760918748e+3, + 0.19744449531352094596e+3, + 0.13594556479955076611e+3, + -0.75510544960252261149e+2, + -0.21348925599541610154e+3, + -0.30906584265521070165e+3, + -0.33763898826227000427e+3, + -0.34021410623060148737e+3, + -0.25230087554450838638e+3, + -0.20997991987779371925e+3, + -0.15445101765220994139e+3, + -0.71865887622960329395e+2, + -0.74012413570861042444e+2, + -0.30273350067812561548e+2, + -0.63734187580692216457e+1, + -0.22070825911033001177e+2, + -0.45507719359078180332e+1, + 0.16356747665598177832e+2, + -0.28529094147848695684e+2, + 0.17551717544689115158e+2, + 0.72530787688473505881e+1, + -0.3330521328839375883e+2, + 0.4150204101026373138e+2, + -0.2335212602204289567e+2, + -0.13930843670013159041e+2, + 0.49849776464426497569e+2, + -0.62430840826901146556e+2, + 0.41742471807242431225e+2, + 0.3446567262075811211e+1, + -0.4973106930721127128e+2, + 0.72311606613710821989e+2, + -0.59032488957106110661e+2, + 0.17518561153247137696e+2, + 0.2941734483443438819e+2, + -0.5674740814089407337e+2, + 0.51505543051699326895e+2, + -0.19493457922320601483e+2, + -0.18734481739226751529e+2, + 0.40510846496894600932e+2, + -0.34198237133864900272e+2, + 0.56828453158068628071e+1, + 0.25852307869301501597e+2, + -0.39622067870897843989e+2, + 0.25853688650632232537e+2, + 0.8492312948112722637e+1, + -0.43628877077559742759e+2, + 0.58473249445693213033e+2, + -0.42660857877529856808e+2, + 0.26253370565455171892e+1, + 0.41937310235812681469e+2, + -0.68669487725031487457e+2, + 0.64561222413341099013e+2, + -0.32441869485862575573e+2, + -0.11015204564229657436e+2, + 0.44647129989204536571e+2, + -0.53854421119142607211e+2, + 0.37652844242171504163e+2, + -0.79381252576158871648e+1, + -0.17892245592709400626e+2, + 0.26804814722813937067e+2, + -0.16765776280439649071e+2, + -0.30452617280945992739e+1, + 0.18378433135391013309e+2, + -0.18495512649612532385e+2, + 0.24806060684654283044e+1, + 0.20326316623764462577e+2, + -0.35721228929028079335e+2, + 0.32884910640391389336e+2, + -0.10761160690261879935e+2, + -0.20851737845361718371e+2, + 0.46213868436084993618e+2, + -0.51866931734044086966e+2, + 0.33848468140979626639e+2, + -0.53880609592297645349e+2, + 0.38385698946564176026e+2, + 0.79824228181147688588e+2, + -0.16422169310876225268e+3, + 0.17793973201880714896e+3, + -0.919452643013621298e+2, + -0.37976061582646600812e+2, + 0.16104382274249621787e+3, + -0.19965497533602706426e+3, + 0.15179105026151415814e+3, + -0.31879963753265275983e+2, + -0.78548268995045944507e+2, + 0.13661179060328214518e+3, + -0.10229288700737602369e+3, + 0.18965569860625596021e+2, + 0.72823831299236488235e+2, + -0.10109811241331921394e+3, + 0.6390333413991167788e+2, + 0.29279128122710101678e+2, + -0.10528670750028118164e+3, + 0.13061879348865224415e+3, + -0.73002808615202326337e+2, + -0.20417136511297609758e+2, + 0.11030200714527333616e+3, + -0.12996373562179766736e+3, + 0.83980660420482323048e+2, + 0.13859606762647597833e+2, + -0.90651290799946906418e+2, + 0.11721246578690065121e+3, + -0.66344380923756361312e+2, + -0.13418931168608574822e+2, + 0.87546613021763079132e+2, + -0.9881089384247852081e+2, + 0.60278401054119321145e+2, + 0.13351854078188743813e+2, + -0.59157611293202961633e+2, + 0.65596136418843698834e+2, + -0.21634365886636324205e+2, + -0.20044162285244574662e+2, + 0.38150251605284196899e+2, + -0.20139949232896450226e+1, + -0.48266371864268734271e+2, + 0.85589261622144235275e+2, + -0.58033323530410697799e+2, + -0.1515287347086963976e+2, + 0.10939406058486321172e+3, + -0.15018158006941419558e+3, + 0.11965638622141858605e+3, + -0.13327055647653871517e+2, + -0.95253889620955405348e+2, + 0.15724609315231955975e+3, + -0.12218128517097655106e+3, + 0.29326747524772240894e+2, + 0.71983023569529720476e+2, + -0.10150764993794014401e+3, + 0.47165756781442922829e+2, + 0.51355376464956400184e+2, + -0.13901631325873609057e+3, + 0.86343523533500700751e+2, + -0.42240806362678135599e+2, + -0.24288935969121470748e+3, + 0.83611316703047833698e+2, + -0.46081581644177981616e+3, + -0.35093543774395988066e+3, + -0.42976958984906900696e+3, + -0.10088561168246108082e+4, + -0.67032888972801049476e+3, + -0.10513775497787248696e+4, + -0.95544023789635468802e+3, + -0.40695526046804877751e+3, + -0.33582432750795715037e+3, + 0.34729048754428566781e+3, + 0.72324665481906640707e+3, + 0.56930692231645491574e+3, + 0.51650369392253560363e+3, + -0.53434228586294103991e+2, + -0.58928643052909114886e+3, + -0.55256300791855392163e+3, + -0.32045414723772478283e+3, + 0.1051961620492577083e+3, + 0.65981435392715127364e+3, + 0.44396758395950456588e+3, + -0.88045858528762963147e+2, + -0.30756468317045698768e+3, + -0.62220157606106317871e+3, + -0.33504280080723738422e+2, + 0.51487427063925042603e+3, + 0.3388757436584687639e+3, + 0.74121571016528491782e+2, + -0.39786292138740714108e+3, + -0.49320807094452095498e+3, + 0.16647703252264918206e+3, + 0.53769038470824807519e+3, + 0.7257747513153738339e+2, + -0.98789645970481160475e+2, + -0.48581925947974627888e+3, + -0.16315917771936102554e+3, + 0.67109749886327392687e+3, + 0.55011332172876713287e+2, + -0.18382310032606488903e+3, + -0.27573451274732104821e+3, + -0.20882491675560666522e+3, + 0.58438346423649477401e+3, + 0.15125558447543426155e+3, + -0.41370457889348142544e+3, + -0.20112204548039352403e+3, + 0.14389290680871147288e+3, + 0.33526960705194102275e+3, + 0.14993081542862235267e+2, + -0.36741570200986961936e+3, + -0.19650821923099601918e+3, + 0.48237145991997164174e+3, + 0.15511770955608872669e+3, + -0.42712641133878116761e+3, + -0.48016839246957147225e+2, + 0.11215562771376517048e+3, + 0.25319918013938070089e+3, 0.26091452595874420339, - -0.52268122973125582575e+03, - 0.21367429920329314541e+03, - 0.44705636188953815235e+03, - -0.32549965209939551869e+03, - -0.17851397119339640085e+03, - 0.97199851509662948956e+02, - 0.19168232482910926251e+03, - 0.60008458081606164569e+02, - -0.34985194649384686727e+03, - -0.67126766346085640080e+01, - 0.40080657084024517189e+03, - -0.57076607011986453699e+02, - -0.45607467992289798531e+03, - 0.25501122610052485129e+03, - 0.28491254719605410628e+03, - -0.29500472201469807487e+03, - -0.53852139790287409937e+02, - 0.47288342306389310465e+02, - 0.19220988247767951407e+03, - -0.48107681691545394642e+02, - -0.30938385784509375753e+03, - 0.18622221227143549527e+03, - 0.31745621046919256969e+03, - -0.37682071713447874117e+03, - -0.16801489488853999887e+03, - 0.51743213936449194534e+03, - -0.19940259652514069444e+03, - -0.23651379144579314584e+03, - 0.18330182936873322319e+03, - 0.10691090442758064682e+03, - -0.87078811744809840434e+02, - -0.15006210494753230478e+03, - 0.13782816737465236656e+03, - 0.90713537699212395182e+02, - -0.72648766464876430859e+02, - -0.22499746066977670012e+03, - 0.27473975498029381015e+03, - 0.14335424506065680816e+03, - -0.49551354207004317232e+03, - 0.25030336428233945867e+03, - 0.30466382451083063643e+03, - -0.44412888527113875625e+03, - 0.26590073747172986884e+02, - 0.34337007004273033317e+03, - -0.19551321399195475692e+03, - -0.19067122695819949740e+03, - 0.25959289410084704741e+03, - 0.38187103040502769602e+02, - -0.26154062246439576711e+03, - 0.15116076649732883652e+03, - 0.69326603428760606107e+02, - -0.10915401397907069736e+03, - 0.27804990031709920117e+02, - -0.48839067639601495330e+02, - 0.14687581100978638915e+03, - -0.87151901720840896814e+02, - -0.15593800213479326544e+03, - 0.28666728650744306606e+03, - -0.99335230162452475611e+02, - -0.18346721583857512883e+03, - 0.18171545352620015024e+03, - 0.10523125403463801320e+03, - -0.25806722088889296174e+03, - -0.27108595281520075915e+01, - 0.40038023426153915807e+03, - -0.41806514129956747183e+03, - -0.31226310791748435491e+02, - 0.45615614314998168766e+03, - -0.37819287359062326459e+03, - -0.75140112510908210197e+02, - 0.33067108961870042094e+03, - -0.86301857832403229054e+02, - -0.31474259350866208251e+03, - 0.32093631844203451919e+03, - 0.12765711817095558445e+03, - -0.50914706964320924953e+03, - 0.35389360660739578179e+03, - 0.17750669362176765276e+03, - -0.48035133017172626069e+03, - 0.22874579457131079607e+03, - 0.24329217526785268433e+03, - -0.35885019252197002970e+03, - 0.10752723818468849970e+03, - 0.22329783165295381764e+03, - -0.20321355079178883329e+03, - -0.20286996367129390251e+03, - 0.46701241970042713092e+03, - -0.96886234887004434313e+02, - -0.49633921987064144332e+03, - 0.64810083272873691840e+03, - -0.11809969116197808603e+03, - -0.37730711971701794027e+03, - 0.26361993430197946964e+03, - 0.28186300019275182649e+03, - -0.36194401922716974696e+03, - -0.21825250429954041920e+03, - 0.76247336808466809543e+03, - -0.39719797215123168144e+03, - -0.48803652076367364998e+03, - 0.80579474358462209693e+03, - -0.38511110561384931827e+02, - -0.77459219860974542371e+03, - 0.52808454056857431169e+03, - 0.56420183342534778603e+03, - -0.94569080216690610996e+03, - -0.74354069545368757232e+01, - 0.11556386441184856722e+04, - -0.82960208955332950609e+03, - -0.66785712381341204491e+03, - 0.14679272836166710476e+04, - -0.41916717533030538334e+03, - -0.10934607726675903905e+04, - 0.11213111059428888439e+04, - 0.35547613034903343987e+03, - -0.11984667424346500866e+04, - 0.26119405664524134636e+03, - 0.11622901573310546155e+04, - -0.10034633067685833794e+04, - -0.46971497263209857920e+03, - 0.12632352512160180140e+04, - -0.40029712307867913523e+03, - -0.60375167662141973324e+03, - 0.34521798386213737331e+03, - 0.49565998930299059566e+03, - -0.23158921264898512504e+03, - -0.81261695692565751870e+03, - 0.89890980115873810519e+03, - 0.37281638934796211515e+03, - -0.10328479646298274020e+04, - 0.15173787323815137285e+02, - 0.10809140265287505827e+04, - -0.25401255166727827373e+03, - -0.13643647554979443157e+04, - 0.12290469442471053299e+04, - 0.70507735991383992769e+03, - -0.15805323955552919415e+04, - 0.27827560102733337999e+03, - 0.10177020141589185869e+04, - -0.34372583808783957693e+03, - -0.70825409289853644168e+03, - 0.12044000740517871861e+03, - 0.10329309130467938758e+04, - -0.38912923858550516343e+03, - -0.10985260195382475104e+04, - 0.79364321862974929900e+03, - 0.91849675896257372187e+03, - -0.88316613505186410293e+03, - -0.99706830577457981235e+03, - 0.14527493479630654747e+04, - 0.50840133655978229399e+03, - -0.15637256309346989838e+04, - 0.20718241031065844027e+03, - 0.76976314138487919081e+03, - 0.37682763807967319281e+03, - -0.83998119265120897126e+03, - -0.86321082506967070458e+03, - 0.16517734224889600227e+04, - 0.34214370574290489913e+03, - -0.15704727345538990448e+04, - -0.11352792117067161826e+03, - 0.12886471671613537637e+04, - 0.37741732394099125258e+03, - -0.13008249041170499822e+04, - -0.40238168046972083403e+03, - 0.10291977931312642340e+04, - 0.86769445965268971577e+03, - -0.95440479366938063777e+03, - -0.14009838118592076626e+04, - 0.13751830057879981268e+04, - 0.11674760336823414946e+04, - -0.10181539156872205467e+04, - -0.96261973848913373786e+03, - 0.59325218603976672682e+02, - 0.14784105785699869102e+04, - 0.54017880860048205705e+03, - -0.18766060664779256513e+04, - -0.64768781038020767937e+03, - 0.15360304739595044339e+04, - 0.86964377433401205053e+03, - -0.43799713879837833019e+03, - -0.15885767739514456025e+04, - -0.38057294463995464184e+03, - 0.20138995811533750384e+04, - 0.76840525661296726412e+03, - -0.11271292222340341596e+04, - -0.15075522597773860980e+04, - 0.12896984021595765402e+01, - 0.17670406825191266762e+04, - 0.11354205091888657080e+04, - -0.90123361406667174833e+03, - -0.21295014590624805351e+04, - -0.10893913447700042241e+03, - 0.14009325264081805926e+04, - 0.16301217196933250762e+04, - 0.39760437771705602472e+03, - -0.23473779979751520841e+04, - -0.14216435068981286349e+04, - 0.35360957714936267848e+03, - 0.15420572103718850485e+04, - 0.23344317282158017406e+04, - -0.18448625630258959518e+03, - -0.20737271436950095449e+04, - -0.17550984814303049006e+04, - -0.12105690010520202122e+04, - 0.14648073319215584434e+04, - 0.27403508248792959421e+04, - 0.15737369484363168795e+04, - 0.69115461124335638488e+03, - -0.18786749594083767079e+04, - -0.29232687065139502920e+04, - -0.22844457333431264487e+04, - -0.14349738971093913733e+04, - 0.77691325003031272445e+03, - 0.24410562238692741630e+04, - 0.34075229037205895111e+04, - 0.38588669786470950385e+04, - 0.37157687713853833884e+04, - 0.29068558342150763565e+04, - 0.23192235365628089312e+04, - 0.17005112660230026904e+04, - 0.87725618120776039177e+03, - 0.75273843562476497482e+03, - 0.38616838539360605864e+03, - 0.58828344723270760142e+02, - 0.24835069609024199622e+03, - 0.29930558405971819269e+02, - -0.12947631985184938230e+03, - 0.25233382917764419062e+03, - -0.15597691103861401984e+03, - -0.63172692890340314875e+02, - 0.29969251213036665149e+03, - -0.38046747211526457022e+03, - 0.22865120369861827498e+03, - 0.95569537471505384474e+02, - -0.41370106114631244054e+03, - 0.53282179529695997644e+03, - -0.36428420953027153928e+03, - -0.17506446170331528833e+02, - 0.41007582026506730699e+03, - -0.59868640846629409680e+03, - 0.47883924034487341714e+03, - -0.11855703497008937575e+03, - -0.28245889011550389114e+03, - 0.50666535027426266424e+03, - -0.44383609305280077706e+03, - 0.14903361348322511049e+03, - 0.19357257546172252205e+03, - -0.38288031139360890620e+03, - 0.31683962951604218006e+03, - -0.49684859667992178345e+02, - -0.24589922271174830826e+03, - 0.38246816168560633287e+03, - -0.26999674489253328602e+03, - -0.32908023145132027310e+02, - 0.35261878263727282956e+03, - -0.50187501765904329432e+03, - 0.38575060079349572106e+03, - -0.56052608076533346093e+02, - -0.31880758139330788481e+03, - 0.54590514357355675656e+03, - -0.51268335605527818188e+03, - 0.24354665736542204968e+03, - 0.11753640931448580886e+03, - -0.38882061061329591212e+03, - 0.44698790286792336701e+03, - -0.28811997223219401576e+03, - 0.20116062555640734644e+02, - 0.20288157284141138348e+03, - -0.26756806530502746000e+03, - 0.15947429960427777473e+03, - 0.35909605628565678614e+02, - -0.18832596527063245162e+03, - 0.19934039014397160372e+03, - -0.58800182492047852634e+02, - -0.15093179351768552010e+03, - 0.30246913112216805075e+03, - -0.29660750452828557400e+03, - 0.11938376657880978371e+03, - 0.14719479886412531755e+03, - -0.36741222924736479172e+03, - 0.42354487136675288639e+03, - -0.27920218830784233432e+03, - 0.39635811377673041989e+03, - -0.28571993418002449516e+03, - -0.51132282656510966490e+03, - 0.10493052767486226458e+04, - -0.11142334609214028660e+04, - 0.54130137109750728541e+03, - 0.27656911079785015772e+03, - -0.10144932321199598846e+04, - 0.11844557564128085687e+04, - -0.81664771481738603143e+03, - 0.28799926698417841919e+02, - 0.63467849355249984455e+03, - -0.92243886230476323362e+03, - 0.60724947652393564113e+03, - -0.16587654927005960559e+02, - -0.57443150044323033399e+03, - 0.70281388251598275474e+03, - -0.39764335510710401422e+03, - -0.24648469758735518553e+03, - 0.72460252267265616410e+03, - -0.83252308858512196821e+03, - 0.38683188488637159708e+03, - 0.25802405559740282115e+03, - -0.82642287929071437702e+03, - 0.88177880953753333415e+03, - -0.49344105905597319861e+03, - -0.21062212171788104342e+03, - 0.71719395482441802869e+03, - -0.84128695242383855657e+03, - 0.42974205239438202852e+03, - 0.14926535872491604096e+03, - -0.64211604980783704377e+03, - 0.66544105203372407686e+03, - -0.34094544189905383291e+03, - -0.19374515032941471304e+03, - 0.48331157381045557031e+03, - -0.45252590485431687739e+03, - 0.55128971185956707757e+02, - 0.30442339423798711096e+03, - -0.44511596472213113884e+03, - 0.14476579719656848511e+03, - 0.30296629460677814905e+03, - -0.67300599491940704411e+03, - 0.56553110025085720736e+03, - -0.84826865738676758610e+02, - -0.60294422341663403131e+03, - 0.96347243489058655541e+03, - -0.83941626157767018412e+03, - 0.16880908266801191076e+03, - 0.55657383420739347457e+03, - -0.99433681689591253416e+03, - 0.77658385074088755573e+03, - -0.15184177269823899792e+03, - -0.55042285780142344720e+03, - 0.77038135500742566819e+03, - -0.40414731903228630472e+03, - -0.29766243799997306496e+03, - 0.96459180827541013059e+03, - -0.69579284568770538044e+03, - 0.48089940045108562572e+03, - 0.14272401278892882601e+04, - -0.35369997438122646827e+03, - 0.30253781447233855033e+04, - 0.24138708314009818423e+04, - 0.30658181272574306604e+04, - 0.67161058552249796776e+04, - 0.48110943448008674750e+04, - 0.70512855310113209271e+04, - 0.66105648935416538734e+04, - 0.28317575617763977789e+04, - 0.21989348833591238872e+04, - -0.22738060360222862073e+04, - -0.50164158342566979627e+04, - -0.39262993998839169763e+04, - -0.34465976150210371998e+04, - 0.23476812679802509365e+03, - 0.41599348293477623884e+04, - 0.37230356245337479777e+04, - 0.21922009428803721676e+04, - -0.65382398116865113025e+03, - -0.46272935718228864062e+04, - -0.29373561837300640036e+04, - 0.51354544245950239656e+03, - 0.21775338002484713797e+04, - 0.42110287666146023184e+04, - 0.28342336288856216697e+03, - -0.35854345307380499435e+04, - -0.22795679021808173275e+04, - -0.51855928748089331748e+03, - 0.26808160808594361697e+04, - 0.34967596229523896909e+04, - -0.13097578353338642501e+04, - -0.35039842288167956212e+04, - -0.64369161201424788032e+03, - 0.73913821430938742196e+03, - 0.33771780796311509221e+04, - 0.97672097558201517131e+03, - -0.44084310970479309617e+04, - -0.55848213059614477061e+03, - 0.13694960316013650754e+04, - 0.18886766707211686480e+04, - 0.13299329647008646589e+04, - -0.38406095003000518773e+04, - -0.12075937862679575119e+04, - 0.29509983947196665213e+04, - 0.13584800207160592436e+04, - -0.10621703263879844599e+04, - -0.21589889388138512913e+04, - -0.25570161242545290747e+03, - 0.26334074306889151558e+04, - 0.13047319092889938474e+04, - -0.33390368421348439369e+04, - -0.98366079841435407616e+03, - 0.28409532416943206954e+04, - 0.38632324254509319417e+03, - -0.77475494655721024628e+03, - -0.17772051790018406336e+04, - 0.58808751291680458451e+02, - 0.35403691966802884963e+04, - -0.14685757188211089215e+04, - -0.30047281639863495002e+04, - 0.21280096016840961965e+04, - 0.13369492139641922677e+04, - -0.74704383789889436684e+03, - -0.12991762353368449112e+04, - -0.34932703022856031794e+03, - 0.22724552612269958445e+04, - 0.20292688314025866703e+03, - -0.28925719070479926813e+04, - 0.48422002163773413486e+03, - 0.31083458684358533901e+04, - -0.18051587743581185350e+04, - -0.18387639718986220032e+04, - 0.18773424433219704497e+04, - 0.51621458626820026439e+03, - -0.44993758724689712380e+03, - -0.12268830063203429290e+04, - 0.27824483183454316304e+03, - 0.21324975740742165726e+04, - -0.12463838564870513892e+04, - -0.22513974417784738762e+04, - 0.27036789734223834785e+04, - 0.99149654869390758449e+03, - -0.33615181321311147258e+04, - 0.11811720628423674953e+04, - 0.17728499870306452522e+04, - -0.13385419788577980853e+04, - -0.74453033518693712267e+03, - 0.70513138867037798718e+03, - 0.84436920284209691090e+03, - -0.72407451452754423826e+03, - -0.82982527078694749889e+03, - 0.64756108951089174752e+03, - 0.14789192535033680542e+04, - -0.19070574549030272919e+04, - -0.89642582991170650075e+03, - 0.32874426971652801512e+04, - -0.16241344935903650821e+04, - -0.21336054767350151451e+04, - 0.30341725429013226858e+04, - -0.13053999411608165815e+03, - -0.24156235540638904240e+04, - 0.13765103571336580899e+04, - 0.13206313434930466428e+04, - -0.18458812933070937561e+04, - -0.16192057077550569488e+03, - 0.16930469615808351591e+04, - -0.97185254208684693822e+03, - -0.48016718252933321764e+03, - 0.69107104605180097678e+03, - -0.92934474093945880213e+02, - 0.23574363335884675053e+03, - -0.94878452816228627853e+03, - 0.60956333866453883275e+03, - 0.98210711910714962869e+03, - -0.18268784078861342550e+04, - 0.53621131722133338826e+03, - 0.13560779687699850911e+04, - -0.12548895995988477807e+04, - -0.81810443597359699197e+03, - 0.19542066701407657092e+04, - -0.20715166345413942395e+03, - -0.25416027927047530284e+04, - 0.27442742358627560861e+04, - 0.21790175359368220143e+03, - -0.30101449999379947258e+04, - 0.23866214639636577886e+04, - 0.75266311424772140981e+03, - -0.24699546973309984423e+04, - 0.70635019739634594771e+03, - 0.21562332114629462012e+04, - -0.23013713230580392519e+04, - -0.71148599639465373912e+03, - 0.33188528504856362815e+04, - -0.22970108105568365318e+04, - -0.12726642940857482245e+04, - 0.32723853914922488002e+04, - -0.14947959761001975494e+04, - -0.17533053385265905035e+04, - 0.25158729884023655359e+04, - -0.42196127482832673650e+03, - -0.20615963771135666320e+04, - 0.17082121769824602779e+04, - 0.12980032716376872486e+04, - -0.32598130045088114457e+04, - 0.10019406889778244931e+04, - 0.28182900684458440992e+04, - -0.38148582119657053227e+04, - 0.46427245840560044599e+03, - 0.27225075226850276522e+04, - -0.19595444326941212694e+04, - -0.17209711310163606868e+04, - 0.26809620711845082042e+04, - 0.67373468465931227911e+03, - -0.42841302745588036487e+04, - 0.26279023810917105948e+04, - 0.25169462328345157403e+04, - -0.48115590618755995820e+04, - 0.75725734996329356363e+03, - 0.41062564075852997121e+04, - -0.32464984029665997696e+04, - -0.27132579858299650368e+04, - 0.52220717118049560668e+04, - -0.35312192674864172659e+03, - -0.60740541444694727033e+04, - 0.47814859466089037596e+04, - 0.30549630932019772445e+04, - -0.75390353411555461207e+04, - 0.22410572285584130441e+04, - 0.56336581315532066583e+04, - -0.57084812114344003930e+04, - -0.21541841238382094161e+04, - 0.64973436354141549600e+04, - -0.13169179111823702897e+04, - -0.62752649553126620958e+04, - 0.52078780460538782791e+04, - 0.27124379838045824727e+04, - -0.65622962158228074259e+04, - 0.14212845567123138153e+04, - 0.39137067361069057370e+04, - -0.17908080060536135534e+04, - -0.34657166314766268442e+04, - 0.20436323305346420511e+04, - 0.41771915202117734225e+04, - -0.50812904329525736102e+04, - -0.19167242598039322274e+04, - 0.57905719188992725321e+04, - -0.24368346522271195909e+03, - -0.60795882912088745798e+04, - 0.19023335714037450543e+04, - 0.68793191769326167559e+04, - -0.63797584272301819510e+04, - -0.37824770733187065161e+04, - 0.81508943325732998346e+04, - -0.89205962908657670596e+03, - -0.58407303972499394149e+04, - 0.15132492757612465084e+04, - 0.45606737430271850826e+04, - -0.10299067089208126617e+04, - -0.58443765036100821817e+04, - 0.25155136259657297160e+04, - 0.58443843771631409254e+04, - -0.43549199189484797898e+04, - -0.51394662383697932455e+04, - 0.51536847999670671925e+04, - 0.50739080677436877522e+04, - -0.76567403953803423065e+04, - -0.28229473728903112715e+04, - 0.80989653035367382472e+04, - -0.21243035684957771991e+03, - -0.50190779269602999193e+04, - -0.19996756575443248494e+04, - 0.52074319376747862407e+04, - 0.40513379820528598430e+04, - -0.86904783272350396146e+04, - -0.19602308610222999050e+04, - 0.84918696149097904708e+04, - 0.88966763187850165195e+03, - -0.72532291633780996563e+04, - -0.21325489584742022089e+04, - 0.71603175523460995464e+04, - 0.25504829700700011017e+04, - -0.61114956642769084283e+04, - -0.46982152292290547848e+04, - 0.56228068362646581591e+04, - 0.71657336569762401268e+04, - -0.70602807373489931706e+04, - -0.66959184979911196933e+04, - 0.53589729406314618245e+04, - 0.59275449718650834257e+04, - -0.73857355253126684147e+03, - -0.82399982696463357570e+04, - -0.26766346583296667632e+04, - 0.10128728245497311946e+05, - 0.36088313866446314933e+04, - -0.81810423521928023547e+04, - -0.53429593182369535498e+04, - 0.26885912498465036151e+04, - 0.90613417997531541914e+04, - 0.15454426595079553408e+04, - -0.10600459307386889122e+05, - -0.46365678487448722080e+04, - 0.62696992868166635162e+04, - 0.86418198904255459638e+04, - -0.26750705822030641912e+03, - -0.96771608712209163059e+04, - -0.64681557973521767053e+04, - 0.52828529222882198155e+04, - 0.11434679330185208528e+05, - 0.10553718333152799005e+04, - -0.79983353196578764255e+04, - -0.93454982342133898783e+04, - -0.15454570113233248776e+04, - 0.12313907661128343534e+05, - 0.83830965293609351647e+04, - -0.19049097454319180542e+04, - -0.90885147468786726677e+04, - -0.12438407561302259637e+05, - 0.78063157479076846812e+03, - 0.11311572853920686612e+05, - 0.10349508230704395828e+05, - 0.62223942474502455298e+04, - -0.80384637267819207409e+04, - -0.14886565566327575652e+05, - -0.94605720544127871108e+04, - -0.31996311406670824908e+04, - 0.10147161906908289893e+05, - 0.16206169999121551882e+05, - 0.13054284664251685172e+05, - 0.76605015272707369149e+04, - -0.41417860385159001453e+04, - -0.13650262398319751810e+05, - -0.18944372120991327392e+05, - -0.21645739448703974631e+05, - -0.20451636718137764547e+05, - -0.16428135660609088518e+05, - -0.12854769060785083639e+05, - -0.93184547666353264503e+04, - -0.51809935856376896481e+04, - -0.39340147126575843686e+04, - -0.22422243797035903299e+04, - -0.41033322289944618433e+03, - -0.12559491331516724131e+04, - -0.17952091164626966702e+03, - 0.55422634555905756315e+03, - -0.11527375216361431285e+04, - 0.72777445347471098103e+03, - 0.21886174247280135319e+03, - -0.12688777804582871340e+04, - 0.16552203498700978344e+04, - -0.10426641493375825576e+04, - -0.32413052577095214701e+03, - 0.16869971193740609579e+04, - -0.22209999655994629393e+04, - 0.15417373619974714529e+04, - 0.41945184606467272204e+02, - -0.16749956604220617464e+04, - 0.24499054400587288001e+04, - -0.19278632041320984172e+04, - 0.40388515745542844115e+03, - 0.12698939793979004662e+04, - -0.21708313855780793347e+04, - 0.18405590578940243631e+04, - -0.52958271079973212636e+03, - -0.96075905756691054194e+03, - 0.17625652421247095845e+04, - -0.14395677251941574468e+04, - 0.23285777058158905106e+03, - 0.11036021553117659550e+04, - -0.17500515522674656950e+04, - 0.13059747394534074374e+04, - -0.12638224946637194535e+02, - -0.13881006846975690223e+04, - 0.20880349766059325702e+04, - -0.16675068300516027193e+04, - 0.33176281594291214105e+03, - 0.12147523115204944588e+04, - -0.21587587627473476459e+04, - 0.20248489125096143653e+04, - -0.91605353937669144671e+03, - -0.56010603471111119234e+03, - 0.16403254511756529155e+04, - -0.18140204086718485996e+04, - 0.10808632480118590138e+04, - 0.85684137568352440439e+02, - -0.10216297945397510603e+04, - 0.12466006527731819915e+04, - -0.71094122776451547452e+03, - -0.20214247585918897698e+03, - 0.91718457922973698260e+03, - -0.99847393315243277812e+03, - 0.39531877920999960452e+03, - 0.53837419177964522987e+03, - -0.12478062717352929667e+04, - 0.12932784444162580257e+04, - -0.59806255451946026369e+03, - -0.50156572141409191090e+03, - 0.14339853759878367327e+04, - -0.16971407988510379710e+04, - 0.11295080152581522270e+04, - -0.14302353196806336655e+04, - 0.96553400627913151766e+03, - 0.18290944223575029355e+04, - -0.36012476885349697113e+04, - 0.37035840927758067664e+04, - -0.16501085613765967537e+04, - -0.11058142498406957657e+04, - 0.34624633342829074536e+04, - -0.37936807828982641695e+04, - 0.23458687870574517547e+04, - 0.39624443410093482498e+03, - -0.25095260136475249055e+04, - 0.32166440725335701245e+04, - -0.18415739092693142993e+04, - -0.33955868327264261097e+03, - 0.23410722298886053068e+04, - -0.25834466405220164233e+04, - 0.13024949440900622903e+04, - 0.10678319926668646076e+04, - -0.26900238448086233802e+04, - 0.29005801281085668961e+04, - -0.11482875038432835026e+04, - -0.11945437604096139239e+04, - 0.31161451076026305600e+04, - -0.31015691623885036279e+04, - 0.15136395689360383585e+04, - 0.10895342173501785510e+04, - -0.28205662314282112675e+04, - 0.30644180835357492469e+04, - -0.13745309898540638187e+04, - -0.80890017238079781237e+03, - 0.25196896481131575456e+04, - -0.24047050331134059888e+04, - 0.10080837131453705524e+04, - 0.10534395381508450100e+04, - -0.20552100284959415148e+04, - 0.17321405143396075346e+04, - -0.37369668465357133158e+01, - -0.15369253887423335527e+04, - 0.21259167577809407703e+04, - -0.91833413114322934234e+03, - -0.97535527905049218589e+03, - 0.26300842833106980834e+04, - -0.24738387551717087263e+04, - 0.80209512264494173905e+03, - 0.17924544453054240876e+04, - -0.33116636261514090620e+04, - 0.30866198154485377927e+04, - -0.80510672106271010762e+03, - -0.17880513402062811110e+04, - 0.34278159835273440876e+04, - -0.27150097630201753418e+04, - 0.48312959997722310845e+03, - 0.21032351705510895954e+04, - -0.29883660399140117079e+04, - 0.17270140278796536677e+04, - 0.84828622194709976156e+03, - -0.34265280290601185698e+04, - 0.27191576130279886456e+04, - -0.22054837296084233458e+04, - -0.45327111403626731772e+04, - 0.69342236149159714387e+03, - -0.10574161639021491283e+05, - -0.87095188693799282191e+04, - -0.11434643960372568472e+05, - -0.23661152478231291752e+05, - -0.17983606178863032255e+05, - -0.25039571275445989158e+05, - -0.23982206663243741787e+05, - -0.10426958793853576935e+05, - -0.75445854086268200263e+04, - 0.78019312114353051584e+04, - 0.18369111565054925450e+05, - 0.14169796657767634315e+05, - 0.12225727791103054187e+05, - -0.50353894402355683724e+03, - -0.15346721144974799245e+05, - -0.13256612117833292359e+05, - -0.79168999442063859533e+04, - 0.22041974497948062890e+04, - 0.16942850815000900184e+05, - 0.10387446732949818397e+05, - -0.17025387676953153004e+04, - -0.79452347641414917234e+04, - -0.15153814269732394678e+05, - -0.10947210788316422168e+04, - 0.13057510021090422015e+05, - 0.81126824560398836184e+04, - 0.19311100275828785016e+04, - -0.96011042894099919067e+04, - -0.12884228368073328966e+05, - 0.51349155328569586345e+04, - 0.12203229592141880858e+05, - 0.26747255008871616155e+04, - -0.27858668369293573051e+04, - -0.12376905871475077220e+05, - -0.30827945870501225727e+04, - 0.15345860236669996084e+05, - 0.25335468755836759556e+04, - -0.52315974460269744668e+04, - -0.68603938729561286891e+04, - -0.44528265898442696198e+04, - 0.13335397082477868025e+05, - 0.48913926290833442181e+04, - -0.11003403862736176961e+05, - -0.48502769124364513118e+04, - 0.40727584844276152580e+04, - 0.73701613385514792753e+04, - 0.13760995759313930193e+04, - -0.98289409099652875739e+04, - -0.46218551106351860653e+04, - 0.12200740958859954844e+05, - 0.32622640675014199587e+04, - -0.99558835456941123994e+04, - -0.15849845395628526603e+04, - 0.28067031369447968245e+04, - 0.65763413666324177029e+04, - -0.45227889600873822928e+03, - -0.12582796961739746621e+05, - 0.52427666950157044994e+04, - 0.10725888366673689234e+05, - -0.74074474829000091631e+04, - -0.51602842878927485799e+04, - 0.29626318658101517940e+04, - 0.45975073007260907616e+04, - 0.11393969331441180657e+04, - -0.78951131971712065933e+04, - -0.11436381365841750721e+04, - 0.10839282874947972232e+05, - -0.20193388320459812348e+04, - -0.11138626375244653900e+05, - 0.66224499620720953317e+04, - 0.63920847598359077892e+04, - -0.64591611121159321556e+04, - -0.21846928793326974301e+04, - 0.18962180817517000833e+04, - 0.42300993889806841253e+04, - -0.87589275389487522716e+03, - -0.77630837727011239622e+04, - 0.44946083070922632032e+04, - 0.82196975342378300411e+04, - -0.99546818391175911529e+04, - -0.32806625056426746596e+04, - 0.11753721589456761649e+05, - -0.38536367453074635705e+04, - -0.67526164544578796267e+04, - 0.50308772573564356207e+04, - 0.27120053090736028025e+04, - -0.28042014242004188418e+04, - -0.26075578225237823062e+04, - 0.20966470637303491458e+04, - 0.34584010551627106906e+04, - -0.26253258118241110424e+04, - -0.52940267771097596778e+04, - 0.70723108353538855226e+04, - 0.28987561516323607975e+04, - -0.11502992843554789943e+05, - 0.55907852619686173057e+04, - 0.78023313260882659961e+04, - -0.10863898900526166472e+05, - 0.24572173587582770438e+03, - 0.89766070299033108313e+04, - -0.51396298551889140072e+04, - -0.47607970822060515275e+04, - 0.68294186727776441330e+04, - 0.30851581876124328119e+03, - -0.58324742291724041934e+04, - 0.33382896005947650337e+04, - 0.17173189353986524566e+04, - -0.22823906186311073725e+04, - -0.61653416030813996684e+01, - -0.50340375142978541589e+03, - 0.32069112920953257344e+04, - -0.22075539713652906357e+04, - -0.32930207947755593523e+04, - 0.61637073627260087960e+04, - -0.14602438474818443410e+04, - -0.52522257605398317537e+04, - 0.46319191296757289820e+04, - 0.31663555973731977247e+04, - -0.75386883106774766929e+04, - 0.13667987272125008076e+04, - 0.86053858502439597942e+04, - -0.95583389445356078795e+04, - -0.80654542660981826430e+03, - 0.10547740474260885094e+05, - -0.80483644824331295240e+04, - -0.33670527000615147699e+04, - 0.94584707504921861982e+04, - -0.28301651135913657527e+04, - -0.78309458025757303403e+04, - 0.86406624291815369361e+04, - 0.20781333125347323403e+04, - -0.11498960669953228717e+05, - 0.79657536602068757929e+04, - 0.46811495130285038613e+04, - -0.11662374068942513986e+05, - 0.50913260266100242006e+04, - 0.66528508556385258998e+04, - -0.92869803585653462505e+04, - 0.97137984917394248896e+03, - 0.84375828446563064063e+04, - -0.68136560645844574537e+04, - -0.44185276296291076505e+04, - 0.11761903983443460675e+05, - -0.41897295191156272267e+04, - -0.90609296351271441381e+04, - 0.12539884488086030615e+05, - -0.10318025765499671706e+04, - -0.10030936602155197761e+05, - 0.73095907347290321923e+04, - 0.58574474390675259201e+04, - -0.10208366202049042840e+05, - -0.58538433480457717906e+03, - 0.13422786020378329340e+05, - -0.93679641030605780543e+04, - -0.71109550029070906021e+04, - 0.15571564764573542561e+05, - -0.35123850532709147956e+04, - -0.12483189393680944704e+05, - 0.11095776763144358483e+05, - 0.72352924316521912260e+04, - -0.16201468657834830083e+05, - 0.23497083358124864390e+04, - 0.17656168303513477440e+05, - -0.15026852550439887636e+05, - -0.79434866100387671395e+04, - 0.21861083526361177064e+05, - -0.67135066175004667457e+04, - -0.16411166563893853890e+05, - 0.16484632606504655996e+05, - 0.70060277086451405921e+04, - -0.19630097702869257773e+05, - 0.37109570602952826448e+04, - 0.18916523575002494908e+05, - -0.15045255576557134191e+05, - -0.88465573366334519960e+04, - 0.19266142481067181507e+05, - -0.23060374559583833616e+04, - -0.13698271276830093484e+05, - 0.53641053265925766027e+04, - 0.12455598237756048547e+05, - -0.81504683388110834130e+04, - -0.12241803314465092626e+05, - 0.16111126952505212103e+05, - 0.55160245182941289386e+04, - -0.18173221041143442562e+05, - 0.13007458896731091045e+04, - 0.18926360331744082941e+05, - -0.70845436521699530203e+04, - -0.19581726042049998796e+05, - 0.18674952228596237546e+05, - 0.11325070350223430069e+05, - -0.23559983480195314769e+05, - 0.95367202226118183717e+03, - 0.18713066278863974730e+05, - -0.37348812631148339278e+04, - -0.15740269664447661853e+05, - 0.41151535244919805336e+04, - 0.18397321034998043615e+05, - -0.86427052536057035468e+04, - -0.17638975053382422630e+05, - 0.13620261897417087312e+05, - 0.15784077761865226421e+05, - -0.16426204932947355701e+05, - -0.14651373583730044629e+05, - 0.22696114172312612936e+05, - 0.88284984477856305602e+04, - -0.23723753117445190583e+05, - -0.16386888933532336523e+04, - 0.17350926691538610612e+05, - 0.61210811589260983965e+04, - -0.17697959029706973524e+05, - -0.10574775698396248117e+05, - 0.25728812392011976044e+05, - 0.61528014080192406254e+04, - -0.25649609495464224892e+05, - -0.34931147893565221239e+04, - 0.22741556189864964836e+05, - 0.67909805209435635334e+04, - -0.22153607901007813780e+05, - -0.86523850470052620949e+04, - 0.19956895197247653414e+05, - 0.14246620093540352173e+05, - -0.18221437765392391157e+05, - -0.20737843176161848533e+05, - 0.20541898443105699698e+05, - 0.21177618614521150448e+05, - -0.15731689076286456839e+05, - -0.19959464741849631537e+05, - 0.33001169500857677122e+04, - 0.25810957261061026657e+05, - 0.72318145721155397041e+04, - -0.30445109100337882410e+05, - -0.11358558697903352368e+05, - 0.24473873859379822534e+05, - 0.18042093456364840677e+05, - -0.92239400370542425662e+04, - -0.28489010502424585866e+05, - -0.35492754148292769969e+04, - 0.31551774144114500814e+05, - 0.15246274654814789756e+05, - -0.19480568910693891667e+05, - -0.27400317486063024262e+05, - 0.12877552539455830356e+04, - 0.29959988599150783557e+05, - 0.20194830840713006182e+05, - -0.16871924238921765209e+05, - -0.34602565484679551446e+05, - -0.44150590523145647239e+04, - 0.25445615356564754620e+05, - 0.29637218355727534799e+05, - 0.32251475668281250364e+04, - -0.36502322838344654883e+05, - -0.27088974268288453459e+05, - 0.55589992684557400935e+04, - 0.29746488839451285457e+05, - 0.37093325389103774796e+05, - -0.17358317046438367015e+04, - -0.34525296304389259603e+05, - -0.33792947935211253935e+05, - -0.17847364349563402357e+05, - 0.24521147504944179673e+05, - 0.45491330056195984071e+05, - 0.31066958809008705430e+05, - 0.84294993815865291253e+04, - -0.30899637917954816658e+05, - -0.50077052308870770503e+05, - -0.41530196575313646463e+05, - -0.22992440436442459031e+05, - 0.12538014004058220962e+05, - 0.42366771023872948717e+05, - 0.59117879528945370112e+05, - 0.67433731479118927382e+05, - 0.63224021330683790438e+05, - 0.51540235234529769514e+05, - 0.39904275287270211265e+05, - 0.28594820932679587713e+05, - 0.16785337853764194733e+05, - 0.11728485169285893789e+05, - 0.70095599835669681852e+04, - 0.16896226630394016865e+04, - 0.34227783053451944397e+04, - 0.66978063202543307852e+03, - -0.12891920485974201256e+04, - 0.28729164603511626410e+04, - -0.18289731871159021921e+04, - -0.37251978750666472706e+03, - 0.28871176386193164944e+04, - -0.38679144322816778185e+04, - 0.25369327661397337579e+04, - 0.57049573717904138448e+03, - -0.37145636794515203292e+04, - 0.49927084753364133576e+04, - -0.35072864357965036106e+04, - -0.48192216442699475465e+02, - 0.37231294137503996353e+04, - -0.54459924894539917659e+04, - 0.42208962054933072068e+04, - -0.73698048794135638673e+03, - -0.30435257399651322885e+04, - 0.50072345835875312332e+04, - -0.41225873786903757718e+04, - 0.99734506573956605280e+03, - 0.24923493109867176827e+04, - -0.43283580947807531629e+04, - 0.35040060861565102641e+04, - -0.59312293554255791150e+03, - -0.26348270905145373035e+04, - 0.42530232845945665758e+04, - -0.33068243645481225030e+04, - 0.33391132783086067093e+03, - 0.29562029984432551828e+04, - -0.46853019811573612969e+04, - 0.38590221122269308580e+04, - -0.91946359968169292642e+03, - -0.25388542365567432171e+04, - 0.46626346457899417146e+04, - -0.43668978074241031209e+04, - 0.18869549210665888950e+04, - 0.13912084495020701524e+04, - -0.37334648582821287164e+04, - 0.39941638807290601108e+04, - -0.22041237221697733730e+04, - -0.52145043416834778327e+03, - 0.26418103505604049133e+04, - -0.30572664794442534912e+04, - 0.16772877860439155029e+04, - 0.57968769356753887223e+03, - -0.23503154208271257630e+04, - 0.26009303220436854645e+04, - -0.12008479851039894584e+04, - -0.10296956837411692049e+04, - 0.27906684822420324963e+04, - -0.30370389475597917226e+04, - 0.15581510865176535390e+04, - 0.89865962447611434527e+03, - -0.30319010469547347384e+04, - 0.36859355103851148669e+04, - -0.24762874475361950317e+04, - 0.28241152754329500567e+04, - -0.17230321276193271842e+04, - -0.37665847780346280160e+04, - 0.70216819820951632209e+04, - -0.69519893122468047295e+04, - 0.27631843222651891665e+04, - 0.25224827139264880316e+04, - -0.67883948090524045256e+04, - 0.69640296082901568298e+04, - -0.37965342476863716001e+04, - -0.16190632425814410453e+04, - 0.54377290704707911573e+04, - -0.63039143362106333370e+04, - 0.30941474611680605449e+04, - 0.14260737730295447818e+04, - -0.52604942579204634967e+04, - 0.53510302764981643122e+04, - -0.24063928264531332388e+04, - -0.25270316152021923699e+04, - 0.56780036676984564110e+04, - -0.58190431673241637327e+04, - 0.20150794106608555012e+04, - 0.27822493325614559581e+04, - -0.64865011239535051573e+04, - 0.61183328732112895523e+04, - -0.26085060798510294262e+04, - -0.27470622683595452145e+04, - 0.60539229402231567292e+04, - -0.61613492061278593610e+04, - 0.23519451425951879173e+04, - 0.22447731569944057810e+04, - -0.55752569892690926281e+04, - 0.49435659814091868611e+04, - -0.16497511268228925019e+04, - -0.28313425206120346047e+04, - 0.48366308124752431468e+04, - -0.38304794332966675938e+04, - -0.20444346424032175946e+03, - 0.37915264411262214708e+04, - -0.51779833753935090499e+04, - 0.25597139550685783433e+04, - 0.17247482039539656853e+04, - -0.56065586003078460635e+04, - 0.56685080459871151106e+04, - -0.23757764222887753931e+04, - -0.30779936382082387354e+04, - 0.65079294317720241452e+04, - -0.63845982794332985577e+04, - 0.19274090283004195499e+04, - 0.33540628377670600457e+04, - -0.68259114445641971542e+04, - 0.55099888724629699936e+04, - -0.99143705687920919445e+03, - -0.43994496605827835083e+04, - 0.64099374495602660318e+04, - -0.40028526602979172822e+04, - -0.12624142358432789024e+04, - 0.67701925025906421070e+04, - -0.57675611051331870840e+04, - 0.51764969043996889013e+04, - 0.82640584165942927939e+04, - -0.48272280686873097011e+03, - 0.20973824161341577565e+05, - 0.17707427906017073838e+05, - 0.23901730634423740412e+05, - 0.47194038562556183024e+05, - 0.37626323430529831967e+05, - 0.50317554566031285503e+05, - 0.48962523646846901102e+05, - 0.21647680955381081731e+05, - 0.14613320304640434188e+05, - -0.15118273243304794960e+05, - -0.37903602790792887390e+05, - -0.28787628223625535611e+05, - -0.24561533088019055867e+05, - 0.46817820213225309089e+03, - 0.31787069235581886460e+05, - 0.26679059202224336332e+05, - 0.16137794367893560775e+05, - -0.42606838077030206478e+04, - -0.34832061592616890266e+05, - -0.20872195848934487003e+05, - 0.33210921485266426316e+04, - 0.16200314938009547404e+05, - 0.30875690703501939424e+05, - 0.22726606125093985611e+04, - -0.26741167368494705443e+05, - -0.16306990359350911604e+05, - -0.40863484639065868578e+04, - 0.19502823331246454472e+05, - 0.26569547802957928070e+05, - -0.11039448989433984025e+05, - -0.24179528765835468221e+05, - -0.59690502797068393193e+04, - 0.58246893310587283850e+04, - 0.25531043535544518818e+05, - 0.55312306915906247013e+04, - -0.30308226768369375350e+05, - -0.59851082916532477611e+04, - 0.11075493249897317583e+05, - 0.14104409916472030091e+05, - 0.84173172075096081244e+04, - -0.26214287484400938411e+05, - -0.10868938889815517541e+05, - 0.22973569593166346749e+05, - 0.98288624036499277281e+04, - -0.87523272476390757220e+04, - -0.14235905757903283302e+05, - -0.35961812449067051602e+04, - 0.20548423671629883756e+05, - 0.93044366464618724422e+04, - -0.25160029740090441919e+05, - -0.60695418187865670916e+04, - 0.19688992483084926789e+05, - 0.35894515442121696651e+04, - -0.57271422938281830284e+04, - -0.13709982046638149768e+05, - 0.14136623357425630729e+04, - 0.25175304022689644626e+05, - -0.10469964434471730783e+05, - -0.21712189761818561237e+05, - 0.14658000967004436461e+05, - 0.11074313567154713382e+05, - -0.65305358464990176799e+04, - -0.91167393893090447818e+04, - -0.22240702722795626869e+04, - 0.15668723762939565859e+05, - 0.29165439207758790872e+04, - -0.22658371612828304933e+05, - 0.45296912643419836968e+04, - 0.22527727169635611062e+05, - -0.13599463092590985980e+05, - -0.12707839079207686154e+05, - 0.12758736514380987501e+05, - 0.48266608200211558142e+04, - -0.41628521331059137083e+04, - -0.84011453120547794242e+04, - 0.16380555651783224675e+04, - 0.15909014976729315094e+05, - -0.92080883682850126206e+04, - -0.16761210556353122229e+05, - 0.20421557817959746899e+05, - 0.63672063977594025346e+04, - -0.23470521196178709943e+05, - 0.73071764843990149529e+04, - 0.14236737785993020225e+05, - -0.10530460753999068402e+05, - -0.55490724899987872050e+04, - 0.60777156981371526854e+04, - 0.46764852115703579329e+04, - -0.35365386703680542269e+04, - -0.76673988830121152205e+04, - 0.56793483957137077596e+04, - 0.10833145995963051973e+05, - -0.14812337419864417825e+05, - -0.52792034403904726787e+04, - 0.22798966398504588142e+05, - -0.10965293189345224164e+05, - -0.15973101921356208550e+05, - 0.21864969515336677432e+05, - -0.16650482317166492408e+02, - -0.18793200778042533784e+05, - 0.10805447390547036775e+05, - 0.96642989897968054720e+04, - -0.14201243987506484700e+05, - -0.12183059453220867852e+03, - 0.11356410738987278819e+05, - -0.64753256206782007212e+04, - -0.34773108873506316741e+04, - 0.42651959625919707833e+04, - 0.63964746996877545371e+03, - 0.37184094310927395099e+03, - -0.60948372392985820625e+04, - 0.44576000856264363392e+04, - 0.62969514857097883578e+04, - -0.11804211747044779258e+05, - 0.21215741445237176777e+04, - 0.11367209831903786835e+05, - -0.96849107831941237237e+04, - -0.67245002679110457393e+04, - 0.16095906637213227441e+05, - -0.37780685212127414161e+04, - -0.16584616860727463063e+05, - 0.18875954212631302653e+05, - 0.16918410403859254529e+04, - -0.20971362256590062316e+05, - 0.15482140051480162583e+05, - 0.78809658036612800061e+04, - -0.20088003659915775643e+05, - 0.61481417535132286503e+04, - 0.16100890924414456094e+05, - -0.18210354739879534463e+05, - -0.33800168703869817364e+04, - 0.22617036434639798244e+05, - -0.15732300935381759700e+05, - -0.95721979476849955972e+04, - 0.23361733151274136617e+05, - -0.97249409164191929449e+04, - -0.14190974135377384300e+05, - 0.19308480567050130048e+05, - -0.13754488683783336000e+04, - -0.18384426120269446983e+05, - 0.14761588721490850730e+05, - 0.84974163101777612610e+04, - -0.23736026193244033493e+05, - 0.90991814057743777084e+04, - 0.17104129553746879537e+05, - -0.23967136264434120676e+05, - 0.12842686870270106283e+04, - 0.20662785461575724185e+05, - -0.15162015861659543589e+05, - -0.11505039511571403636e+05, - 0.21581468859265260107e+05, - -0.13834692391654336916e+04, - -0.24536585248987743398e+05, - 0.18978425511502646259e+05, - 0.11628531562596703225e+05, - -0.29010857702150162368e+05, - 0.79200989015945342544e+04, - 0.22497142243715643417e+05, - -0.21908527494136611494e+05, - -0.11232767320947508779e+05, - 0.29520645086233231268e+05, - -0.65071066425491626433e+04, - -0.29817775259427471610e+05, - 0.27245964918157482316e+05, - 0.12203637737943236061e+05, - -0.37312566844395878434e+05, - 0.11719520372993225465e+05, - 0.28282525496976202703e+05, - -0.28223299864707507368e+05, - -0.12978597952495756545e+05, - 0.34623226731673494214e+05, - -0.61233357059438367287e+04, - -0.33321075924729542749e+05, - 0.25320920153978531744e+05, - 0.16965766324529708072e+05, - -0.33410916816018063400e+05, - 0.94802284531118630184e+03, - 0.27347697655811774894e+05, - -0.95925848326645009365e+04, - -0.25037168459611824801e+05, - 0.17379807456249385723e+05, - 0.21286281452917806746e+05, - -0.29891566096652804845e+05, - -0.93178541131894999126e+04, - 0.33387408006866971846e+05, - -0.33830187478384291353e+04, - -0.34249206877926684683e+05, - 0.14562317918738484877e+05, - 0.32837502621125568112e+05, - -0.32151956168511384021e+05, - -0.19888403951945641893e+05, - 0.40009151576901182125e+05, - 0.11459411610473571272e+04, - -0.34919669691253220662e+05, - 0.53280500321522067679e+04, - 0.30986575400543395517e+05, - -0.88696782549395229580e+04, - -0.33773118953988610883e+05, - 0.16901086008049838711e+05, - 0.31396704041012853850e+05, - -0.25115047697650970804e+05, - -0.28129146080312471895e+05, - 0.30286882286364791071e+05, - 0.24951673280167284247e+05, - -0.39468457163640217914e+05, - -0.16271417038283159854e+05, - 0.41048571258344665694e+05, - 0.63345582059080625186e+04, - -0.34045957222727054614e+05, - -0.11121911847400853731e+05, - 0.34569703980631122249e+05, - 0.16112911529343429720e+05, - -0.44886703208357903350e+05, - -0.11073998709039686219e+05, - 0.45254688138531440927e+05, - 0.75820003514918853398e+04, - -0.41608873318640908110e+05, - -0.12708576931403655180e+05, - 0.40261771878792904317e+05, - 0.16679878385563293705e+05, - -0.37641978845883262693e+05, - -0.25353086441441919305e+05, - 0.34196653753681901435e+05, - 0.35432689951978311001e+05, - -0.35337973288594796031e+05, - -0.38827210326894877653e+05, - 0.26970269695598886756e+05, - 0.38714149158329288184e+05, - -0.74768865411784663593e+04, - -0.47424441426681085431e+05, - -0.11137595462736897389e+05, - 0.53392029187236308644e+05, - 0.21066683327142123744e+05, - -0.43036202366756995616e+05, - -0.35114781190345958748e+05, - 0.18341417780026582477e+05, - 0.51953937838483252563e+05, - 0.48133912281500943209e+04, - -0.55416514241404998756e+05, - -0.28825216821305559279e+05, - 0.35338430689162392810e+05, - 0.50515282541994180065e+05, - -0.28154968193266731760e+04, - -0.54563295766503433697e+05, - -0.36495280435755281360e+05, - 0.31076437719963447307e+05, - 0.61573610655653035792e+05, - 0.97392621331336031290e+04, - -0.47198570470485989063e+05, - -0.54626295596322059282e+05, - -0.35771256415623670364e+04, - 0.63749060016727686161e+05, - 0.50624241648707786226e+05, - -0.93480726705355336890e+04, - -0.56534424573441603570e+05, - -0.64833681815497628122e+05, - 0.20290222703029367040e+04, - 0.61717863997119886335e+05, - 0.63997255204881170357e+05, - 0.29987649744595964876e+05, - -0.43696222913040684944e+05, - -0.81573169188043073518e+05, - -0.58872602222738161799e+05, - -0.13124792011741594251e+05, - 0.55315621690578569542e+05, - 0.90363715187705500284e+05, - 0.77027580325046932558e+05, - 0.40501138454491308948e+05, - -0.22369896521173850488e+05, - -0.76663419151852212963e+05, - -0.10803470546182987164e+06, - -0.12247594839455268811e+06, - -0.11455348658323564450e+06, - -0.94233994048965992988e+05, - -0.72458386744290430215e+05, - -0.51436811731720721582e+05, - -0.31404339961994668556e+05, - -0.20740653547422130941e+05, - -0.12571598524530745635e+05, - -0.39053412441133227730e+04, - -0.53581121744304073218e+04, - -0.13978536019131890953e+04, - 0.15747359526586949414e+04, - -0.39578952610326455215e+04, - 0.24844180989414517171e+04, - 0.31351825037496070081e+03, - -0.36307649151788177733e+04, - 0.49785194798202501261e+04, - -0.33843382788821681970e+04, - -0.51198564676333711532e+03, - 0.45068321090036024543e+04, - -0.61837678709157453341e+04, - 0.43894168129694035088e+04, - 0.16402736001529046206e+02, - -0.45797573691155621418e+04, - 0.66931955564986101308e+04, - -0.51097553893431004326e+04, - 0.71505026638892184110e+03, - 0.40011983954154516141e+04, - -0.63698882270806543602e+04, - 0.51088100797639981465e+04, - -0.10233527482032116041e+04, - -0.34716295468782395801e+04, - 0.57935725975007890156e+04, - -0.46623475757148298726e+04, - 0.82604901109837294371e+03, - 0.34341606469828357149e+04, - -0.56307503973460034103e+04, - 0.45169512112906513721e+04, - -0.75494365568317334692e+03, - -0.34854404332919166336e+04, - 0.58030603590199707469e+04, - -0.49061725317428936251e+04, - 0.13228095209431626245e+04, - 0.29538979473971139669e+04, - -0.55936504115316729440e+04, - 0.52305926249673984785e+04, - -0.21613027639057104352e+04, - -0.18695604082796869534e+04, - 0.46871714858395953343e+04, - -0.48703635967000154778e+04, - 0.24923107417597220774e+04, - 0.10052408767281883684e+04, - -0.36549184732063827141e+04, - 0.40688169120522511548e+04, - -0.21581713587558342624e+04, - -0.87240137461853601053e+03, - 0.32516049350681714714e+04, - -0.36351093607031698411e+04, - 0.18422938479563986220e+04, - 0.10799229737353134624e+04, - -0.34570503344758985804e+04, - 0.39272379721716606582e+04, - -0.21857594554673369203e+04, - -0.84888139644752550339e+03, - 0.35415808350685183541e+04, - -0.44264387780753659172e+04, - 0.30016386668649374769e+04, - -0.31161963208919273711e+04, - 0.16754961903283062838e+04, - 0.44139584255952368039e+04, - -0.77752433917635644320e+04, - 0.73854614849552781379e+04, - -0.25264976363248683811e+04, - -0.32505225171684728593e+04, - 0.76332298201730709479e+04, - -0.73232769960573032222e+04, - 0.34338072383592179904e+04, - 0.26600194652027494158e+04, - -0.65894224781588500264e+04, - 0.70178356712387449079e+04, - -0.29030708997441124666e+04, - -0.23933426280910121022e+04, - 0.65761118751711101140e+04, - -0.62716241526518906539e+04, - 0.25256153494149111793e+04, - 0.32914626574093590534e+04, - -0.67950432926709090680e+04, - 0.66885146842583635589e+04, - -0.20747795198999606328e+04, - -0.34867757847387069887e+04, - 0.75653156440809052583e+04, - -0.68275451284143837256e+04, - 0.25364788073464824265e+04, - 0.36596000287477622805e+04, - -0.72225071039824852051e+04, - 0.69336814880737911153e+04, - -0.21619741575330222076e+04, - -0.32818655368744089174e+04, - 0.69439546781042117800e+04, - -0.57770098181066132383e+04, - 0.14807899014305176024e+04, - 0.40161329080463774517e+04, - -0.63273413325251558490e+04, - 0.48333178126158827581e+04, - 0.34297264825222492846e+03, - -0.49561948016179512706e+04, - 0.67828363990041707439e+04, - -0.36497579949313271754e+04, - -0.16757941531780159039e+04, - 0.66307894219248119043e+04, - -0.70624909080243132848e+04, - 0.33752959264006226476e+04, - 0.30675179965233851362e+04, - -0.73246826496852227137e+04, - 0.74715379713189577160e+04, - -0.24704913125776602101e+04, - -0.36635204991936502665e+04, - 0.78272137555896842969e+04, - -0.64507637462812099329e+04, - 0.12509135661532495760e+04, - 0.51224716490439050176e+04, - -0.76897596953287893484e+04, - 0.51170332159165664052e+04, - 0.94028400225630582554e+03, - -0.75238987301888082584e+04, - 0.67902958846798301238e+04, - -0.65639663984168055322e+04, - -0.86486278662142613030e+04, - -0.31768935417986517677e+03, - -0.23666426268072085804e+05, - -0.20407371051806141622e+05, - -0.28167637284664117033e+05, - -0.53509266998458719172e+05, - -0.44370530316044321808e+05, - -0.57434092220322621870e+05, - -0.56581370569301623618e+05, - -0.25422282223472320766e+05, - -0.16091095117714359731e+05, - 0.16661222168959040573e+05, - 0.44243544521786236146e+05, - 0.33137347566635915427e+05, - 0.28020154810732514306e+05, - 0.11969853877797165254e+01, - -0.37198856034641736187e+05, - -0.30474510748533637525e+05, - -0.18641420882671787695e+05, - 0.47093995631860407229e+04, - 0.40482385952331409499e+05, - 0.23857447540227636637e+05, - -0.37507243004372321593e+04, - -0.18647405784603866778e+05, - -0.35700181169782314100e+05, - -0.26269143943226840747e+04, - 0.30994194067515294591e+05, - 0.18584660979788564873e+05, - 0.49157174257926062637e+04, - -0.22524226462580205407e+05, - -0.30907734575729831704e+05, - 0.13239194252820152542e+05, - 0.27296957033580241841e+05, - 0.73659603353740121747e+04, - -0.68597371952749736010e+04, - -0.29766206632865458232e+05, - -0.56835905140364648105e+04, - 0.34096240231983327249e+05, - 0.76589004004431462818e+04, - -0.13135728964475631074e+05, - -0.16455061420125068253e+05, - -0.90424449547567382979e+04, - 0.29316098720002337359e+05, - 0.13412532244632608126e+05, - -0.27019365514948251075e+05, - -0.11354503266138543040e+05, - 0.10612471464925391047e+05, - 0.15617332398516526155e+05, - 0.49530598043797608625e+04, - -0.24222953659018407052e+05, - -0.10674660437472854028e+05, - 0.29409497815389684547e+05, - 0.63609444796478001081e+04, - -0.22073546434436429990e+05, - -0.45410659120103182431e+04, - 0.66261940325186706104e+04, - 0.16166085876142455163e+05, - -0.21843829890584893292e+04, - -0.28517272583525089431e+05, - 0.11782690528975928828e+05, - 0.25006905174685565726e+05, - -0.16546902274650830805e+05, - -0.13320365090980922105e+05, - 0.80520892753491434632e+04, - 0.10212153431865041057e+05, - 0.25662836891542583544e+04, - -0.17786940864561336639e+05, - -0.38349194175961488327e+04, - 0.26629746349773962720e+05, - -0.55789370275809260420e+04, - -0.25856977555875477265e+05, - 0.15771551913089435402e+05, - 0.14436580361267249828e+05, - -0.14446774898519339331e+05, - -0.58076178563953199045e+04, - 0.49665093781991208743e+04, - 0.95968820001190797484e+04, - -0.18205520927902416588e+04, - -0.18432795063559493428e+05, - 0.10711611630235998746e+05, - 0.19280205957023226802e+05, - -0.23592047644564234361e+05, - -0.71756446208677225513e+04, - 0.26759290499067625205e+05, - -0.80127013735332047872e+04, - -0.16828985647811623494e+05, - 0.12400978397629629399e+05, - 0.64125860898473165435e+04, - -0.73158903677863090707e+04, - -0.48627811410182675900e+04, - 0.34677876425993063094e+04, - 0.93503823822340964398e+04, - -0.67812433246375567251e+04, - -0.12626720802201745755e+05, - 0.17536666670162812807e+05, - 0.54742928920734502753e+04, - -0.25724849144218514994e+05, - 0.12303461988920851581e+05, - 0.18430983006467598898e+05, - -0.24887929254405335087e+05, - -0.53276405041866280499e+03, - 0.22241612198230432114e+05, - -0.12820941619075201743e+05, - -0.11136073962869571915e+05, - 0.16719122946088220488e+05, - -0.41890168434998219027e+03, - -0.12527312210187901655e+05, - 0.71022135659607301932e+04, - 0.40210212757191297896e+04, - -0.45436059843733191883e+04, - -0.13848102340801974606e+04, - 0.26448570207629325068e+03, - 0.65439848805347710368e+04, - -0.50503680146681499536e+04, - -0.69033732278771321944e+04, - 0.12901074584836032955e+05, - -0.15992301791074246466e+04, - -0.13811569485617401369e+05, - 0.11475864604344584222e+05, - 0.79698407533740464714e+04, - -0.19243482012523480080e+05, - 0.52856432288125160994e+04, - 0.18249249813944432390e+05, - -0.21218373730780909682e+05, - -0.20056916507881983307e+04, - 0.23725654880538753787e+05, - -0.17019309262696566293e+05, - -0.10037186704364617981e+05, - 0.23918797145468517556e+05, - -0.73991388463128832882e+04, - -0.18792589126789029251e+05, - 0.21658281757589400513e+05, - 0.30508230074465300277e+04, - -0.25334340010794345289e+05, - 0.17729564321411515266e+05, - 0.10999425909573725221e+05, - -0.26477018411371042021e+05, - 0.10493661222522334356e+05, - 0.17082221051561864442e+05, - -0.22710809923969056399e+05, - 0.11846792992850680548e+04, - 0.22137610614850862476e+05, - -0.17817907803742811666e+05, - -0.92484116330892302358e+04, - 0.27028429266813909635e+05, - -0.10798496418638289470e+05, - -0.18741934773218694318e+05, - 0.26414527173525868420e+05, - -0.80844375401815273108e+03, - -0.24061408016145305737e+05, - 0.17743209932840047259e+05, - 0.12932083368167872322e+05, - -0.25588092951231821644e+05, - 0.37615701205106711313e+04, - 0.25983260298050801794e+05, - -0.21842099466378509533e+05, - -0.10978464272658591653e+05, - 0.31104906828389437578e+05, - -0.95982735372550941975e+04, - -0.23704257940879757371e+05, - 0.24804537836627889192e+05, - 0.10082362540953192365e+05, - -0.31313595172085806553e+05, - 0.91241335784262410016e+04, - 0.29115088997020990064e+05, - -0.28464597105435797857e+05, - -0.10935780133608364849e+05, - 0.37129211231275490718e+05, - -0.11809859727841421773e+05, - -0.28592288071403290814e+05, - 0.28385803993977559003e+05, - 0.13717918586297149886e+05, - -0.35428594636871217517e+05, - 0.58876515749316968140e+04, - 0.34046454249834918301e+05, - -0.24641332925704769877e+05, - -0.18926270310314099333e+05, - 0.33929567673952136829e+05, - 0.19053041342788417296e+04, - -0.31123962886096873262e+05, - 0.10093661326925808680e+05, - 0.28430860387621214613e+05, - -0.20493723988265792286e+05, - -0.21727152651002572384e+05, - 0.32179680577521681698e+05, - 0.91712690687143058312e+04, - -0.35619294688451685943e+05, - 0.46385682741499504118e+04, - 0.35840311332040146226e+05, - -0.16798802992712975538e+05, - -0.32155704245315053413e+05, - 0.32269204050421602005e+05, - 0.20357240591661593498e+05, - -0.39636443212414204027e+05, - -0.38393832479301431704e+04, - 0.37665258157393167494e+05, - -0.42993441737091643517e+04, - -0.34831000596366931859e+05, - 0.10603639090616183239e+05, - 0.35926887912527723529e+05, - -0.18873079992123119155e+05, - -0.32603829084511762630e+05, - 0.26957648819727957743e+05, - 0.29009513030507878284e+05, - -0.32236862068504786293e+05, - -0.24797720802967898635e+05, - 0.39924202244368978427e+05, - 0.17502874762568928418e+05, - -0.41565423666263683117e+05, - -0.95851034781797679898e+04, - 0.38069598856841985253e+05, - 0.11800028345209833788e+05, - -0.38651117329845954373e+05, - -0.14241569296620118621e+05, - 0.45784462286338595732e+05, - 0.11386747080965122223e+05, - -0.46313233214345469605e+05, - -0.92085159362501308351e+04, - 0.44111261602736085479e+05, - 0.13855156141511683018e+05, - -0.42629410166711299098e+05, - -0.18291834359341602976e+05, - 0.40826493279958471248e+05, - 0.26291437762997418758e+05, - -0.37012502430802553135e+05, - -0.35419318454847576504e+05, - 0.35615210642726975493e+05, - 0.41063765664002115955e+05, - -0.26800841035165733047e+05, - -0.43131273050578041875e+05, - 0.91937200511511000514e+04, - 0.50643874715243335231e+05, - 0.96739940571685147006e+04, - -0.54284574227981007425e+05, - -0.22790034160184692155e+05, - 0.44143061283554743568e+05, - 0.39201163339265156537e+05, - -0.20933715525739236909e+05, - -0.54736457887658718391e+05, - -0.38121616149844471693e+04, - 0.56886507669821694435e+05, - 0.31274613946423003654e+05, - -0.37153154046343290247e+05, - -0.53877009645777929109e+05, - 0.32592121729698596937e+04, - 0.57850228401254098571e+05, - 0.38078026425845586346e+05, - -0.32967383648528382764e+05, - -0.63842206395997010986e+05, - -0.11810593980716534134e+05, - 0.50686085700743140478e+05, - 0.58220525813970787567e+05, - 0.17865101439707009376e+04, - -0.64963944884107731923e+05, - -0.54557702236476063263e+05, - 0.90748873741502829944e+04, - 0.61957575708866868808e+05, - 0.65958907409045845270e+05, - -0.10896457861112610317e+04, - -0.64132938311814315966e+05, - -0.69884020325572870206e+05, - -0.29338732791549828107e+05, - 0.45236273484139950597e+05, - 0.85068719961315902765e+05, - 0.64223450464260735316e+05, - 0.11918182851803709127e+05, - -0.57662848772573765018e+05, - -0.94606418462771864142e+05, - -0.82712205612576712156e+05, - -0.41527263431430314085e+05, - 0.23270789514874326414e+05, - 0.80416672663419274613e+05, - 0.11463141322765973746e+06, - 0.12892440762065628951e+06, - 0.12061130217956310662e+06, - 0.99820703834788000677e+05, - 0.76352984171803123900e+05, - 0.53826302740072875167e+05, - 0.33814020493582640484e+05, - 0.21503229563138389494e+05, - 0.12949604865603218059e+05, - 0.49978749415244747070e+04, - 0.48145974208157640533e+04, - 0.16029202200620457006e+04, - -0.84669887535164389192e+03, - 0.28638699540139550663e+04, - -0.16998208885993315107e+04, - -0.10312735893639862184e+03, - 0.23790696806158289291e+04, - -0.33209873051515119187e+04, - 0.23314539411887358256e+04, - 0.20435282813983991446e+03, - -0.28350032205260008595e+04, - 0.39714755083545223897e+04, - -0.28462455304413606427e+04, - 0.12884961921632950066e+02, - 0.29274570363542320592e+04, - -0.42726368261866464309e+04, - 0.32125247560878437980e+04, - -0.33619217512778459422e+03, - -0.27191084211299321396e+04, - 0.42053421979494387415e+04, - -0.32948458704073386798e+04, - 0.53709654106892685377e+03, - 0.24598698081173420178e+04, - -0.39849334029911069592e+04, - 0.31943189401058211843e+04, - -0.59120722148219135761e+03, - -0.23038931774819952807e+04, - 0.38307440932737986259e+04, - -0.31491124837037350517e+04, - 0.68275470241654568326e+03, - 0.21412564917670893010e+04, - -0.37339546692736203113e+04, - 0.32289316135670810581e+04, - -0.95482827750333694894e+03, - -0.17947515373940448171e+04, - 0.34994583678651656555e+04, - -0.32673148323264567807e+04, - 0.12922474547949818771e+04, - 0.12862943874842387686e+04, - -0.30526030400153836126e+04, - 0.30904934764653139609e+04, - -0.14673901018958092664e+04, - -0.85354411633878123666e+03, - 0.25716245793182602029e+04, - -0.27785544340660467242e+04, - 0.14309392192292309574e+04, - 0.65660499093147950589e+03, - -0.22956742287717852378e+04, - 0.25836245693660862344e+04, - -0.13934126126867472522e+04, - -0.58277539699239127913e+03, - 0.22292943860853929436e+04, - -0.26298837258811900028e+04, - 0.15625779969525729030e+04, - 0.38571886043745899997e+03, - -0.21490982356145955237e+04, - 0.27637520009600980302e+04, - -0.18915407363599690598e+04, - 0.18049165413013663510e+04, - -0.83502891567699862208e+03, - -0.27275249338156104386e+04, - 0.45493870973247258007e+04, - -0.41355831984217929858e+04, - 0.11552329109735226211e+04, - 0.21927894279773195194e+04, - -0.45701213609612213986e+04, - 0.40986880117320561112e+04, - -0.15938039237644288733e+04, - -0.20449906011124503493e+04, - 0.41892984067880752264e+04, - -0.41459954974257179856e+04, - 0.14158943953735270043e+04, - 0.18590813747851889275e+04, - -0.42826732498604505963e+04, - 0.38792504564953073896e+04, - -0.14073426971297330965e+04, - -0.22109156589251774676e+04, - 0.42837642824885306254e+04, - -0.40831150995433617936e+04, - 0.11565332079735617299e+04, - 0.22460937232860028416e+04, - -0.46321027659679511999e+04, - 0.40250341283262350771e+04, - -0.12945667588039250404e+04, - -0.24757891421828053353e+04, - 0.44987783641283658653e+04, - -0.40932187142333132215e+04, - 0.98121830828383667722e+03, - 0.24065261488540318169e+04, - -0.45300856227307840527e+04, - 0.35675018761475985229e+04, - -0.66477686100508810796e+03, - -0.28782405204559559024e+04, - 0.42988254845531273531e+04, - -0.32162180110645854256e+04, - -0.21998508225096543356e+03, - 0.32966743721553325486e+04, - -0.45495828060661842756e+04, - 0.26016809310075132089e+04, - 0.82721009455176590563e+03, - -0.40852047064860780665e+04, - 0.45318776962181327690e+04, - -0.23449951543933311768e+04, - -0.16524369272067963266e+04, - 0.43900831590550324108e+04, - -0.46129599029678056468e+04, - 0.16191270949881543402e+04, - 0.21585682689873228810e+04, - -0.47916427715842310135e+04, - 0.40309514593475823858e+04, - -0.86313094539814971995e+03, - -0.31163575279836609297e+04, - 0.48306811537207913716e+04, - -0.33906219865514708545e+04, - -0.27516523951316912644e+03, - 0.43979017834328788012e+04, - -0.41712177985059715866e+04, - 0.42778382635337984539e+04, - 0.48290884657061560574e+04, - 0.64143756714429844124e+03, - 0.14145444905589178234e+05, - 0.12433350340088911253e+05, - 0.17465613622146247508e+05, - 0.32133395451240034163e+05, - 0.27531387327929340245e+05, - 0.34693998765850745258e+05, - 0.34519899393208870606e+05, - 0.15739152694446069290e+05, - 0.93963107181225368549e+04, - -0.97413128232210019632e+04, - -0.27233846154547205515e+05, - -0.20159852911538724584e+05, - -0.16906746776655701979e+05, - -0.28816986157066651231e+03, - 0.22948379592903282173e+05, - 0.18413445921930371696e+05, - 0.11372440010573183827e+05, - -0.27635558813847273996e+04, - -0.24821623399631440407e+05, - -0.14435525508339713269e+05, - 0.22607657778958182462e+04, - 0.11323070393650876213e+05, - 0.21815676287705624418e+05, - 0.15941871598671073116e+04, - -0.18965750082096601545e+05, - -0.11194135829486145667e+05, - -0.31235800506815276094e+04, - 0.13767604524174674225e+05, - 0.18942383000969290151e+05, - -0.83091460876304736303e+04, - -0.16337298561291609076e+05, - -0.47359684893732855926e+04, - 0.42597288732048491511e+04, - 0.18289391881743391423e+05, - 0.31198286216512228748e+04, - -0.20349792485769965424e+05, - -0.50363279156949365643e+04, - 0.81693097581787196759e+04, - 0.10141966386478032291e+05, - 0.51529133643742470667e+04, - -0.17385747090632092295e+05, - -0.86140326873362209881e+04, - 0.16707827095706408727e+05, - 0.69634063138829051240e+04, - -0.67727527713803783627e+04, - -0.90686129060802340973e+04, - -0.34519444754615647071e+04, - 0.15026379731905051813e+05, - 0.64998629004357908343e+04, - -0.18163603393775356381e+05, - -0.34955100345143991944e+04, - 0.13075585423268052182e+05, - 0.30050502214695698058e+04, - -0.40567955125722428420e+04, - -0.10048284825931143132e+05, - 0.16531496075055556503e+04, - 0.17059067474596740794e+05, - -0.69769889219011956811e+04, - -0.15262290943590978713e+05, - 0.99252044989680252911e+04, - 0.83894916505304536258e+04, - -0.51846784747498268189e+04, - -0.60392743273195428628e+04, - -0.16032009805529123696e+04, - 0.10736040791001219986e+05, - 0.25341362733063219821e+04, - -0.16442007374812921626e+05, - 0.35535139500798459267e+04, - 0.15703021333992337532e+05, - -0.96488567354914266616e+04, - -0.87071818959015417931e+04, - 0.87047116929874100606e+04, - 0.36112403373843676491e+04, - -0.30571800838470790040e+04, - -0.58473507777978466038e+04, - 0.11065342448014002912e+04, - 0.11262637809730173103e+05, - -0.65847532795249289848e+04, - -0.11689574914554301358e+05, - 0.14348882053330997223e+05, - 0.43372759532635345749e+04, - -0.16193318419244553297e+05, - 0.47066187856878459570e+04, - 0.10441675998281973079e+05, - -0.76818397324103834762e+04, - -0.39033246078797774317e+04, - 0.45916478592438688793e+04, - 0.27223189194020665127e+04, - -0.18358702145144118276e+04, - -0.59204135677804842999e+04, - 0.42167160291660120492e+04, - 0.77874847648867871612e+04, - -0.10932252905554420067e+05, - -0.30199856740915001865e+04, - 0.15397256629976596741e+05, - -0.73508309256285911033e+04, - -0.11193383617714353022e+05, - 0.14950460520028478641e+05, - 0.64706713991394860841e+03, - -0.13868115997275013797e+05, - 0.80015949791737275518e+04, - 0.67957212564323945116e+04, - -0.10395709453697927529e+05, - 0.58722592619709166684e+03, - 0.72947166660236789539e+04, - -0.41041130075790861156e+04, - -0.24730007631170105924e+04, - 0.25720995616875111409e+04, - 0.11985725706130979233e+04, - -0.55245500373623576706e+03, - -0.36989848335642827806e+04, - 0.29969209885206178114e+04, - 0.40432455215347681587e+04, - -0.75005646649287964465e+04, - 0.53093220963398857748e+03, - 0.87939949338737696962e+04, - -0.71725959713645643205e+04, - -0.49431240933073931956e+04, - 0.12054938898234511726e+05, - -0.36834870037461255379e+04, - -0.10677035292133468829e+05, - 0.12650049978130111413e+05, - 0.12477609527650470227e+04, - -0.14220181982729176525e+05, - 0.99461846403863000887e+04, - 0.65893446149270803289e+04, - -0.14938172738704990479e+05, - 0.46387821982848990956e+04, - 0.11595595401003200095e+05, - -0.13560896487254349267e+05, - -0.14058732961794878520e+04, - 0.15049042963489187969e+05, - -0.10607101798839037656e+05, - -0.66455406739239642775e+04, - 0.15845188177139914842e+05, - -0.59730624719715706306e+04, - -0.10816598101003064585e+05, - 0.14087691070174294509e+05, - -0.57066498728876922542e+03, - -0.13905211977117176502e+05, - 0.11259351204885240804e+05, - 0.53079786830034418017e+04, - -0.16224718511013115858e+05, - 0.66458765485198318856e+04, - 0.11013206228618018940e+05, - -0.15543640159589524046e+05, - 0.16771234202139683589e+03, - 0.14796382201697339042e+05, - -0.10955722592898357107e+05, - -0.77129139558158294676e+04, - 0.15914577763216691892e+05, - -0.32980133985766988189e+04, - -0.14759103785737306680e+05, - 0.13287694509862853010e+05, - 0.55540397348041051373e+04, - -0.17832042110534934181e+05, - 0.60047812712229069803e+04, - 0.13468035694658299690e+05, - -0.14928755779977860584e+05, - -0.48395130769683510152e+04, - 0.17878911093484242883e+05, - -0.63792092240891215624e+04, - -0.15238827808919875679e+05, - 0.15915554175854449568e+05, - 0.52664747298250495078e+04, - -0.19912838118213159760e+05, - 0.63563698195284423491e+04, - 0.15673309941826886643e+05, - -0.15494163131339149913e+05, - -0.77018461909142442892e+04, - 0.19484035620467264380e+05, - -0.30599816238403232092e+04, - -0.18680120077869018132e+05, - 0.12833486990809908093e+05, - 0.11342159983457966518e+05, - -0.18652946442295258748e+05, - -0.24878809380854086157e+04, - 0.18779278776404160453e+05, - -0.57589831337614432414e+04, - -0.17037014768522680242e+05, - 0.12601858270942677336e+05, - 0.12022644657496048239e+05, - -0.18600036782100451092e+05, - -0.48660829582543483411e+04, - 0.20417025576925876521e+05, - -0.32200442569425736110e+04, - -0.20102916765575075260e+05, - 0.10187992984657228590e+05, - 0.17005421575798722188e+05, - -0.17463595649667335238e+05, - -0.11240329821722280030e+05, - 0.21199307361920538824e+05, - 0.34705312121488877892e+04, - -0.21749012788862557500e+05, - 0.17812828088989592743e+04, - 0.20793607143470071605e+05, - -0.66178481242491088778e+04, - -0.20510868465250896406e+05, - 0.11201231715802608960e+05, - 0.18250649962003531982e+05, - -0.15553935379551741789e+05, - -0.16060007692486844462e+05, - 0.18379548737858884124e+05, - 0.13292597886637075135e+05, - -0.21736987104435575020e+05, - -0.10147235636536181119e+05, - 0.22761589581966432888e+05, - 0.68073999881846511926e+04, - -0.22595841085390282387e+05, - -0.67364078977064737046e+04, - 0.22965707813657929364e+05, - 0.67579609206909626664e+04, - -0.25249488820462160220e+05, - -0.62147485555609464427e+04, - 0.25462535254021120636e+05, - 0.58504696380515561032e+04, - -0.25084189862619361520e+05, - -0.81387003841867899609e+04, - 0.24324252598385872261e+05, - 0.10619829682110810609e+05, - -0.23621106872188120178e+05, - -0.14703137535928106445e+05, - 0.21425316685839145066e+05, - 0.19152271853566635400e+05, - -0.19440179807206717669e+05, - -0.23225174714006498107e+05, - 0.14284718571054008862e+05, - 0.25623603960679742158e+05, - -0.58514843409487402823e+04, - -0.29062853801317451143e+05, - -0.43542497304180351421e+04, - 0.29640631615242728003e+05, - 0.13282978957902867478e+05, - -0.24436553649316796509e+05, - -0.23288003355984081281e+05, - 0.12696803724855068140e+05, - 0.30903249750862669316e+05, - 0.16222260402336482912e+04, - -0.31538065714250697056e+05, - -0.18090273879195199697e+05, - 0.20962913511650978762e+05, - 0.30809075893384957453e+05, - -0.19420607521714687209e+04, - -0.32997254454101981537e+05, - -0.21290979007978039590e+05, - 0.18709704947935373639e+05, - 0.35659791566396488633e+05, - 0.74494104606091605092e+04, - -0.29184307062964835495e+05, - -0.33254396944857908238e+05, - -0.60530232281901483304e+02, - 0.35708440360205924662e+05, - 0.31462055079874604417e+05, - -0.47318526503235125347e+04, - -0.36273479033313582477e+05, - -0.36159925603734183824e+05, - 0.96158825326879920681e+02, - 0.35851097769249507110e+05, - 0.40786467439556698082e+05, - 0.15477436239829110491e+05, - -0.25201130998379936500e+05, - -0.47721675719382554234e+05, - -0.37432732114654194447e+05, - -0.58171882142397407733e+04, - 0.32361470102869909169e+05, - 0.53219718180140174809e+05, - 0.47614992666973215819e+05, - 0.22931582027983917214e+05, - -0.13042877469649407431e+05, - -0.45300473490049713291e+05, - -0.65339987847497817711e+05, - -0.72863656151817704085e+05, - -0.68270079679412199766e+05, - -0.56749849144698448072e+05, - -0.43214928115481794521e+05, - -0.30319576421141555329e+05, - -0.19446504249618410540e+05, - -0.12061371113081027943e+05, - -0.71245802938102797270e+04, - -0.33067092899818744627e+04, - -0.23047086439793633872e+04, - -0.94416710135825110228e+03, - 0.17328937170733460960e+02, - -0.89810132966849846525e+03, - 0.43655747322722038462e+03, - -0.88377289125244207213e+01, - -0.63737680895002188208e+03, - 0.89473749860159239233e+03, - -0.64808204090465540048e+03, - -0.21255572054698465223e+02, - 0.72195115247065837139e+03, - -0.10328017051027525213e+04, - 0.74689126844035195063e+03, - -0.87953398788023218202e+01, - -0.75857667456062495148e+03, - 0.11053844770749226427e+04, - -0.81846920604301669755e+03, - 0.56175418998014912120e+02, - 0.74589709229876700647e+03, - -0.11243639969563776049e+04, - 0.86270616150105286124e+03, - -0.11180679177878239727e+03, - -0.69574938301308816335e+03, - 0.11016530710042877672e+04, - -0.88088025613860622798e+03, - 0.16988287459825437509e+03, - 0.62207701816377596060e+03, - -0.10475811581722630308e+04, - 0.87832008179855381513e+03, - -0.22425747149476586628e+03, - -0.53493184207804074504e+03, - 0.97423649849699620518e+03, - -0.85923544350814381687e+03, - 0.27307528890695652990e+03, - 0.44404043348427785531e+03, - -0.89041065805554978851e+03, - 0.83017508660478927141e+03, - -0.31467318753171798562e+03, - -0.35474790367571193883e+03, - 0.80478941985536482662e+03, - -0.79594853588856517490e+03, - 0.35063636947270089195e+03, - 0.27142175665707225107e+03, - -0.72258793556903083299e+03, - 0.76226507092261567777e+03, - -0.38241727360541273129e+03, - -0.19497566570782285567e+03, - 0.64824186006169577468e+03, - -0.73290713103392613448e+03, - 0.41327817295056678404e+03, - 0.12557817759751161191e+03, - -0.58341254972244303190e+03, - 0.71157954360441885910e+03, - -0.44595297177864944160e+03, - -0.61332912258376765635e+02, - 0.52887729811843144034e+03, - -0.70028373223563380634e+03, - 0.48366037576757952365e+03, - -0.42771030799169858483e+03, - 0.16562118564186701519e+03, - 0.68880510874155652346e+03, - -0.10914367861593680118e+04, - 0.94745333052463502099e+03, - -0.19782546472945455207e+03, - -0.60012584088341270672e+03, - 0.11279089560098766469e+04, - -0.94559610641986409973e+03, - 0.28781509506461634373e+03, - 0.60666838161453904377e+03, - -0.10880160548826106606e+04, - 0.10098249446277790184e+04, - -0.27741860445496007515e+03, - -0.55276538467262389531e+03, - 0.11319511015465848232e+04, - -0.98357989069456982634e+03, - 0.32388314106609618648e+03, - 0.59754520663743971909e+03, - -0.11032238427679151300e+04, - 0.10245789820193126616e+04, - -0.26880154555612307377e+03, - -0.58421399527883534120e+03, - 0.11591988254395191689e+04, - -0.97416813185343369241e+03, - 0.26843360086611357929e+03, - 0.67023774052196267803e+03, - -0.11408284932550711801e+04, - 0.98724578595148602744e+03, - -0.16391740144375549448e+03, - -0.69738758888176585060e+03, - 0.12020887751977038533e+04, - -0.90278720374622082545e+03, - 0.11088887509830013300e+03, - 0.82061828467799864484e+03, - -0.11806709649416343382e+04, - 0.87297459312731700720e+03, - 0.48906638591600028576e+02, - -0.87884649920353854213e+03, - 0.12264162383458151453e+04, - -0.73508125386010044622e+03, - -0.15856632712808468000e+03, - 0.10225682100670970840e+04, - -0.11731955796353829555e+04, - 0.64008052742264442259e+03, - 0.37289992725134192142e+03, - -0.10855415505833977932e+04, - 0.11667165514608577723e+04, - -0.42626211505794879031e+03, - -0.52999211095160592322e+03, - 0.12112798961967412197e+04, - -0.10387700349762051246e+04, - 0.24599528836149573863e+03, - 0.77231543107594507092e+03, - -0.12371932167540398950e+04, - 0.90896815777382380475e+03, - -0.13721602648853543638e+01, - -0.10514315528727020137e+04, - 0.10425893710379543791e+04, - -0.11236914859835296738e+04, - -0.11148614888806243926e+04, - -0.25633114186713498839e+03, - -0.34747842017841899178e+04, - -0.31093677198061400304e+04, - -0.44279036832441597653e+04, - -0.79318275073121612877e+04, - -0.69855447777974013661e+04, - -0.86079960682804594398e+04, - -0.86349010647738305124e+04, - -0.39890748921419599355e+04, - -0.22591530887236585841e+04, - 0.23458135756126648630e+04, - 0.68650580709344794741e+04, - 0.50334810174501781148e+04, - 0.41874445781126551083e+04, - 0.13588086979930054099e+03, - -0.57973836518474772674e+04, - -0.45684777938119723331e+04, - -0.28445854032918455232e+04, - 0.66702092347178745513e+03, - 0.62372971478149465838e+04, - 0.35867635067523824546e+04, - -0.56151906313232996126e+03, - -0.28191217706760417059e+04, - -0.54679948279140498926e+04, - -0.39608272148144612856e+03, - 0.47582094302764153326e+04, - 0.27670938817403889516e+04, - 0.81234289594320068773e+03, - -0.34546655323814588883e+04, - -0.47539517739134089425e+04, - 0.21263817863822018808e+04, - 0.40202033919823288670e+04, - 0.12382030383883848117e+04, - -0.10845101033185565029e+04, - -0.46001560783821933001e+04, - -0.70994700478501249563e+03, - 0.49985646134816370250e+04, - 0.13342971017477605074e+04, - -0.20739489599183602877e+04, - -0.25619361762539801930e+04, - -0.12104466466534220217e+04, - 0.42441885429764624860e+04, - 0.22436245528888061926e+04, - -0.42216672489628454059e+04, - -0.17581719373884427569e+04, - 0.17668021642680430432e+04, - 0.21638910215518581026e+04, - 0.95899509298405951085e+03, - -0.38112863364625327449e+04, - -0.16297387918108011036e+04, - 0.46017663140998511153e+04, - 0.78051873413654357137e+03, - -0.31769379521876294348e+04, - -0.80974426358083576361e+03, - 0.10210154773765092386e+04, - 0.25560352338886632424e+04, - -0.48901381673916364434e+03, - -0.41857852034255211038e+04, - 0.16896087805468064289e+04, - 0.38295660860926063833e+04, - -0.24539702889361569760e+04, - -0.21518036410761433217e+04, - 0.13557683404932558915e+04, - 0.14663823759467657055e+04, - 0.41557634314969322986e+03, - -0.26694681623657334057e+04, - -0.66706842476542033182e+03, - 0.41476539897386837765e+04, - -0.91493494081816618291e+03, - -0.39169799502758087328e+04, - 0.24200578599658547319e+04, - 0.21603970773898590778e+04, - -0.21610827069747124369e+04, - -0.90936280951135063333e+03, - 0.76126196404883933155e+03, - 0.14698656284290671010e+04, - -0.28189518050540664262e+03, - -0.28192564828746244530e+04, - 0.16599282043602233898e+04, - 0.29036519998863877845e+04, - -0.35726199652341538240e+04, - -0.10854284761308722409e+04, - 0.40315221094124999581e+04, - -0.11449367703018674547e+04, - -0.26464301675344540854e+04, - 0.19465899003439892567e+04, - 0.97204844730468948910e+03, - -0.11713403980472257899e+04, - -0.63521289916618832194e+03, - 0.40644429443912304123e+03, - 0.15207679360973370422e+04, - -0.10664210655176680120e+04, - -0.19701878272426110925e+04, - 0.27865011085552232544e+04, - 0.68867823886773112463e+03, - -0.37931893998785772055e+04, - 0.18128070890835836053e+04, - 0.27812327342922735625e+04, - -0.36821520846027638072e+04, - -0.23775546868906036480e+03, - 0.35376393196424119196e+04, - -0.20403471829478960444e+04, - -0.17049262592331895121e+04, - 0.26505784402416720695e+04, - -0.22754681556895761219e+03, - -0.17410829406172595100e+04, - 0.97040983037147952928e+03, - 0.62682507262378567248e+03, - -0.60030786286501484028e+03, - -0.37999137684257408409e+03, - 0.22913369727023484757e+03, - 0.85437670461738127869e+03, - -0.72415448023211263262e+03, - -0.98111820462587638758e+03, - 0.18000912959760726153e+04, - -0.37452406956516043124e+02, - -0.22814827157989893749e+04, - 0.18352286331895586500e+04, - 0.12495387394564822898e+04, - -0.30791472159392733374e+04, - 0.10160518840531937030e+04, - 0.25766659704961070929e+04, - -0.31041613541138290202e+04, - -0.31583727632703420340e+03, - 0.35028397397601670491e+04, - -0.23957100869866071662e+04, - -0.17459869170330762245e+04, - 0.38074279450247258865e+04, - -0.11818446254955706536e+04, - -0.29351985399882105412e+04, - 0.34728173731075135038e+04, - 0.25058375280278286823e+03, - -0.36773593254474594687e+04, - 0.26117884629105351451e+04, - 0.16427880857324112185e+04, - -0.38903459707634692677e+04, - 0.13940285639077360429e+04, - 0.27979716635464105821e+04, - -0.35784396978153431519e+04, - 0.11791243807792373843e+03, - 0.35569337738698673093e+04, - -0.29019342258258689071e+04, - -0.12477258802688018022e+04, - 0.39913211179305108089e+04, - -0.16609447277383787878e+04, - -0.26800607246436038622e+04, - 0.37772173937886577733e+04, - 0.27342776738059917818e+02, - -0.37330520330269828264e+04, - 0.27742242230089959776e+04, - 0.18905994163007399038e+04, - -0.40398113679254952331e+04, - 0.10224454996231067980e+04, - 0.34767511455105641289e+04, - -0.33151281186083920147e+04, - -0.11657826040178586027e+04, - 0.42338207407889540264e+04, - -0.15240847095896317569e+04, - -0.31828671424183557974e+04, - 0.36981084367177986678e+04, - 0.95882436591561963724e+03, - -0.42439224162723839981e+04, - 0.17673098621506364907e+04, - 0.33076387950337825714e+04, - -0.36886115434373873541e+04, - -0.10490562369479696372e+04, - 0.44453123599175996787e+04, - -0.14125330844955035445e+04, - -0.35955845110826294331e+04, - 0.35414548885553790569e+04, - 0.17819554066044665888e+04, - -0.44535732146513073531e+04, - 0.66542171964059070888e+03, - 0.42544300875805893156e+04, - -0.27643061631343234694e+04, - -0.28182010468472067259e+04, - 0.42855194129527653786e+04, - 0.87117127521547217839e+03, - -0.46584919218611803444e+04, - 0.13731558221882016824e+04, - 0.41866368806973132450e+04, - -0.31545539500726808910e+04, - -0.27827993383465768602e+04, - 0.44610992976044681200e+04, - 0.10750533776100915020e+04, - -0.48587924352380805431e+04, - 0.89184538733232272989e+03, - 0.46754609207010526006e+04, - -0.25277211011407807746e+04, - -0.37519811235565521201e+04, - 0.39374938807610860749e+04, - 0.25863047432357493562e+04, - -0.47291980857895605368e+04, - -0.10830086650145303793e+04, - 0.51999854483749986684e+04, - -0.28253491153688679560e+03, - -0.51111481725899684534e+04, - 0.16819647996627286375e+04, - 0.48589647737402001439e+04, - -0.27396157631474261507e+04, - -0.42522148958153302374e+04, - 0.37248944691066208179e+04, - 0.36927460567101720699e+04, - -0.43437495050130755772e+04, - -0.29683879938476852658e+04, - 0.49231692669321364519e+04, - 0.24462136871149537001e+04, - -0.52031097217344522505e+04, - -0.18773236480395162289e+04, - 0.55229553233585620546e+04, - 0.15961132239649969051e+04, - -0.56188518638367913809e+04, - -0.13295555346135497530e+04, - 0.58131878920720992028e+04, - 0.13957946105420160166e+04, - -0.58159178579105264362e+04, - -0.15123553511263689870e+04, - 0.59146147975076592047e+04, - 0.19893627053817049273e+04, - -0.57776536449332534175e+04, - -0.25323442473170607627e+04, - 0.56443678423465071319e+04, - 0.34257518876541353166e+04, - -0.51327837910783082407e+04, - -0.43263879382868653920e+04, - 0.44374030036525336982e+04, - 0.54353589656424173882e+04, - -0.31553090669779589916e+04, - -0.62863467357513063689e+04, - 0.15116960321076633136e+04, - 0.69231218129405460786e+04, - 0.77332697305189537929e+03, - -0.67215819296919098633e+04, - -0.32192699060040627046e+04, - 0.56403079340294671056e+04, - 0.57005864321776844008e+04, - -0.31665756536763165059e+04, - -0.72363031322408578490e+04, - -0.28385513938681441459e+03, - 0.72893180044863902367e+04, - 0.43225948721279582969e+04, - -0.49084158723426062352e+04, - -0.73060889665372078525e+04, - 0.46995313532357278064e+03, - 0.78193607423298217327e+04, - 0.49389649995306717756e+04, - -0.43994981845838774461e+04, - -0.82871072160798266850e+04, - -0.19107270351709742044e+04, - 0.69671007434152816131e+04, - 0.78736372307073525008e+04, - -0.17844601773193497252e+03, - -0.81761313274937683673e+04, - -0.75141756410630150640e+04, - 0.10271903361850652345e+04, - 0.87767937679098085937e+04, - 0.82562653235409179615e+04, - 0.84164886371524673336e+02, - -0.83317570366871150327e+04, - -0.98444691429526537831e+04, - -0.34029900849524688056e+04, - 0.58406765903842460830e+04, - 0.11126737162856003124e+05, - 0.90242259679122144007e+04, - 0.11755556549321656803e+04, - -0.75526936406426057147e+04, - -0.12436441502175779533e+05, - -0.11362259029894736159e+05, - -0.52694939821322786884e+04, - 0.30413624104052596522e+04, - 0.10597197441630709363e+05, - 0.15461439781148190377e+05, - 0.17096398468211369618e+05, - 0.16053243190750043141e+05, - 0.13389526276376660462e+05, - 0.10154861746325599597e+05, - 0.71029013240398562630e+04, - 0.46253090670147948913e+04, - 0.28228879782786739270e+04, - 0.16227635537024671066e+04, - 0.88204132038604052468e+03, - 0.45468278005638234163e+03, - 0.22282920980640611219e+03, - 0.10402666510241434139e+03, - 0.46338385683976120788e+02, - 0.19722228197795441673e+02, - 0.80294895422381884487e+01, - 0.31300719491532200678e+01, - 0.11692432964658319161e+01, + -0.52268122973125582575e+3, + 0.21367429920329314541e+3, + 0.44705636188953815235e+3, + -0.32549965209939551869e+3, + -0.17851397119339640085e+3, + 0.97199851509662948956e+2, + 0.19168232482910926251e+3, + 0.60008458081606164569e+2, + -0.34985194649384686727e+3, + -0.6712676634608564008e+1, + 0.40080657084024517189e+3, + -0.57076607011986453699e+2, + -0.45607467992289798531e+3, + 0.25501122610052485129e+3, + 0.28491254719605410628e+3, + -0.29500472201469807487e+3, + -0.53852139790287409937e+2, + 0.47288342306389310465e+2, + 0.19220988247767951407e+3, + -0.48107681691545394642e+2, + -0.30938385784509375753e+3, + 0.18622221227143549527e+3, + 0.31745621046919256969e+3, + -0.37682071713447874117e+3, + -0.16801489488853999887e+3, + 0.51743213936449194534e+3, + -0.19940259652514069444e+3, + -0.23651379144579314584e+3, + 0.18330182936873322319e+3, + 0.10691090442758064682e+3, + -0.87078811744809840434e+2, + -0.15006210494753230478e+3, + 0.13782816737465236656e+3, + 0.90713537699212395182e+2, + -0.72648766464876430859e+2, + -0.22499746066977670012e+3, + 0.27473975498029381015e+3, + 0.14335424506065680816e+3, + -0.49551354207004317232e+3, + 0.25030336428233945867e+3, + 0.30466382451083063643e+3, + -0.44412888527113875625e+3, + 0.26590073747172986884e+2, + 0.34337007004273033317e+3, + -0.19551321399195475692e+3, + -0.1906712269581994974e+3, + 0.25959289410084704741e+3, + 0.38187103040502769602e+2, + -0.26154062246439576711e+3, + 0.15116076649732883652e+3, + 0.69326603428760606107e+2, + -0.10915401397907069736e+3, + 0.27804990031709920117e+2, + -0.4883906763960149533e+2, + 0.14687581100978638915e+3, + -0.87151901720840896814e+2, + -0.15593800213479326544e+3, + 0.28666728650744306606e+3, + -0.99335230162452475611e+2, + -0.18346721583857512883e+3, + 0.18171545352620015024e+3, + 0.1052312540346380132e+3, + -0.25806722088889296174e+3, + -0.27108595281520075915e+1, + 0.40038023426153915807e+3, + -0.41806514129956747183e+3, + -0.31226310791748435491e+2, + 0.45615614314998168766e+3, + -0.37819287359062326459e+3, + -0.75140112510908210197e+2, + 0.33067108961870042094e+3, + -0.86301857832403229054e+2, + -0.31474259350866208251e+3, + 0.32093631844203451919e+3, + 0.12765711817095558445e+3, + -0.50914706964320924953e+3, + 0.35389360660739578179e+3, + 0.17750669362176765276e+3, + -0.48035133017172626069e+3, + 0.22874579457131079607e+3, + 0.24329217526785268433e+3, + -0.3588501925219700297e+3, + 0.1075272381846884997e+3, + 0.22329783165295381764e+3, + -0.20321355079178883329e+3, + -0.20286996367129390251e+3, + 0.46701241970042713092e+3, + -0.96886234887004434313e+2, + -0.49633921987064144332e+3, + 0.6481008327287369184e+3, + -0.11809969116197808603e+3, + -0.37730711971701794027e+3, + 0.26361993430197946964e+3, + 0.28186300019275182649e+3, + -0.36194401922716974696e+3, + -0.2182525042995404192e+3, + 0.76247336808466809543e+3, + -0.39719797215123168144e+3, + -0.48803652076367364998e+3, + 0.80579474358462209693e+3, + -0.38511110561384931827e+2, + -0.77459219860974542371e+3, + 0.52808454056857431169e+3, + 0.56420183342534778603e+3, + -0.94569080216690610996e+3, + -0.74354069545368757232e+1, + 0.11556386441184856722e+4, + -0.82960208955332950609e+3, + -0.66785712381341204491e+3, + 0.14679272836166710476e+4, + -0.41916717533030538334e+3, + -0.10934607726675903905e+4, + 0.11213111059428888439e+4, + 0.35547613034903343987e+3, + -0.11984667424346500866e+4, + 0.26119405664524134636e+3, + 0.11622901573310546155e+4, + -0.10034633067685833794e+4, + -0.4697149726320985792e+3, + 0.1263235251216018014e+4, + -0.40029712307867913523e+3, + -0.60375167662141973324e+3, + 0.34521798386213737331e+3, + 0.49565998930299059566e+3, + -0.23158921264898512504e+3, + -0.8126169569256575187e+3, + 0.89890980115873810519e+3, + 0.37281638934796211515e+3, + -0.1032847964629827402e+4, + 0.15173787323815137285e+2, + 0.10809140265287505827e+4, + -0.25401255166727827373e+3, + -0.13643647554979443157e+4, + 0.12290469442471053299e+4, + 0.70507735991383992769e+3, + -0.15805323955552919415e+4, + 0.27827560102733337999e+3, + 0.10177020141589185869e+4, + -0.34372583808783957693e+3, + -0.70825409289853644168e+3, + 0.12044000740517871861e+3, + 0.10329309130467938758e+4, + -0.38912923858550516343e+3, + -0.10985260195382475104e+4, + 0.793643218629749299e+3, + 0.91849675896257372187e+3, + -0.88316613505186410293e+3, + -0.99706830577457981235e+3, + 0.14527493479630654747e+4, + 0.50840133655978229399e+3, + -0.15637256309346989838e+4, + 0.20718241031065844027e+3, + 0.76976314138487919081e+3, + 0.37682763807967319281e+3, + -0.83998119265120897126e+3, + -0.86321082506967070458e+3, + 0.16517734224889600227e+4, + 0.34214370574290489913e+3, + -0.15704727345538990448e+4, + -0.11352792117067161826e+3, + 0.12886471671613537637e+4, + 0.37741732394099125258e+3, + -0.13008249041170499822e+4, + -0.40238168046972083403e+3, + 0.1029197793131264234e+4, + 0.86769445965268971577e+3, + -0.95440479366938063777e+3, + -0.14009838118592076626e+4, + 0.13751830057879981268e+4, + 0.11674760336823414946e+4, + -0.10181539156872205467e+4, + -0.96261973848913373786e+3, + 0.59325218603976672682e+2, + 0.14784105785699869102e+4, + 0.54017880860048205705e+3, + -0.18766060664779256513e+4, + -0.64768781038020767937e+3, + 0.15360304739595044339e+4, + 0.86964377433401205053e+3, + -0.43799713879837833019e+3, + -0.15885767739514456025e+4, + -0.38057294463995464184e+3, + 0.20138995811533750384e+4, + 0.76840525661296726412e+3, + -0.11271292222340341596e+4, + -0.1507552259777386098e+4, + 0.12896984021595765402e+1, + 0.17670406825191266762e+4, + 0.1135420509188865708e+4, + -0.90123361406667174833e+3, + -0.21295014590624805351e+4, + -0.10893913447700042241e+3, + 0.14009325264081805926e+4, + 0.16301217196933250762e+4, + 0.39760437771705602472e+3, + -0.23473779979751520841e+4, + -0.14216435068981286349e+4, + 0.35360957714936267848e+3, + 0.15420572103718850485e+4, + 0.23344317282158017406e+4, + -0.18448625630258959518e+3, + -0.20737271436950095449e+4, + -0.17550984814303049006e+4, + -0.12105690010520202122e+4, + 0.14648073319215584434e+4, + 0.27403508248792959421e+4, + 0.15737369484363168795e+4, + 0.69115461124335638488e+3, + -0.18786749594083767079e+4, + -0.2923268706513950292e+4, + -0.22844457333431264487e+4, + -0.14349738971093913733e+4, + 0.77691325003031272445e+3, + 0.2441056223869274163e+4, + 0.34075229037205895111e+4, + 0.38588669786470950385e+4, + 0.37157687713853833884e+4, + 0.29068558342150763565e+4, + 0.23192235365628089312e+4, + 0.17005112660230026904e+4, + 0.87725618120776039177e+3, + 0.75273843562476497482e+3, + 0.38616838539360605864e+3, + 0.58828344723270760142e+2, + 0.24835069609024199622e+3, + 0.29930558405971819269e+2, + -0.1294763198518493823e+3, + 0.25233382917764419062e+3, + -0.15597691103861401984e+3, + -0.63172692890340314875e+2, + 0.29969251213036665149e+3, + -0.38046747211526457022e+3, + 0.22865120369861827498e+3, + 0.95569537471505384474e+2, + -0.41370106114631244054e+3, + 0.53282179529695997644e+3, + -0.36428420953027153928e+3, + -0.17506446170331528833e+2, + 0.41007582026506730699e+3, + -0.5986864084662940968e+3, + 0.47883924034487341714e+3, + -0.11855703497008937575e+3, + -0.28245889011550389114e+3, + 0.50666535027426266424e+3, + -0.44383609305280077706e+3, + 0.14903361348322511049e+3, + 0.19357257546172252205e+3, + -0.3828803113936089062e+3, + 0.31683962951604218006e+3, + -0.49684859667992178345e+2, + -0.24589922271174830826e+3, + 0.38246816168560633287e+3, + -0.26999674489253328602e+3, + -0.3290802314513202731e+2, + 0.35261878263727282956e+3, + -0.50187501765904329432e+3, + 0.38575060079349572106e+3, + -0.56052608076533346093e+2, + -0.31880758139330788481e+3, + 0.54590514357355675656e+3, + -0.51268335605527818188e+3, + 0.24354665736542204968e+3, + 0.11753640931448580886e+3, + -0.38882061061329591212e+3, + 0.44698790286792336701e+3, + -0.28811997223219401576e+3, + 0.20116062555640734644e+2, + 0.20288157284141138348e+3, + -0.26756806530502746e+3, + 0.15947429960427777473e+3, + 0.35909605628565678614e+2, + -0.18832596527063245162e+3, + 0.19934039014397160372e+3, + -0.58800182492047852634e+2, + -0.1509317935176855201e+3, + 0.30246913112216805075e+3, + -0.296607504528285574e+3, + 0.11938376657880978371e+3, + 0.14719479886412531755e+3, + -0.36741222924736479172e+3, + 0.42354487136675288639e+3, + -0.27920218830784233432e+3, + 0.39635811377673041989e+3, + -0.28571993418002449516e+3, + -0.5113228265651096649e+3, + 0.10493052767486226458e+4, + -0.1114233460921402866e+4, + 0.54130137109750728541e+3, + 0.27656911079785015772e+3, + -0.10144932321199598846e+4, + 0.11844557564128085687e+4, + -0.81664771481738603143e+3, + 0.28799926698417841919e+2, + 0.63467849355249984455e+3, + -0.92243886230476323362e+3, + 0.60724947652393564113e+3, + -0.16587654927005960559e+2, + -0.57443150044323033399e+3, + 0.70281388251598275474e+3, + -0.39764335510710401422e+3, + -0.24648469758735518553e+3, + 0.7246025226726561641e+3, + -0.83252308858512196821e+3, + 0.38683188488637159708e+3, + 0.25802405559740282115e+3, + -0.82642287929071437702e+3, + 0.88177880953753333415e+3, + -0.49344105905597319861e+3, + -0.21062212171788104342e+3, + 0.71719395482441802869e+3, + -0.84128695242383855657e+3, + 0.42974205239438202852e+3, + 0.14926535872491604096e+3, + -0.64211604980783704377e+3, + 0.66544105203372407686e+3, + -0.34094544189905383291e+3, + -0.19374515032941471304e+3, + 0.48331157381045557031e+3, + -0.45252590485431687739e+3, + 0.55128971185956707757e+2, + 0.30442339423798711096e+3, + -0.44511596472213113884e+3, + 0.14476579719656848511e+3, + 0.30296629460677814905e+3, + -0.67300599491940704411e+3, + 0.56553110025085720736e+3, + -0.8482686573867675861e+2, + -0.60294422341663403131e+3, + 0.96347243489058655541e+3, + -0.83941626157767018412e+3, + 0.16880908266801191076e+3, + 0.55657383420739347457e+3, + -0.99433681689591253416e+3, + 0.77658385074088755573e+3, + -0.15184177269823899792e+3, + -0.5504228578014234472e+3, + 0.77038135500742566819e+3, + -0.40414731903228630472e+3, + -0.29766243799997306496e+3, + 0.96459180827541013059e+3, + -0.69579284568770538044e+3, + 0.48089940045108562572e+3, + 0.14272401278892882601e+4, + -0.35369997438122646827e+3, + 0.30253781447233855033e+4, + 0.24138708314009818423e+4, + 0.30658181272574306604e+4, + 0.67161058552249796776e+4, + 0.4811094344800867475e+4, + 0.70512855310113209271e+4, + 0.66105648935416538734e+4, + 0.28317575617763977789e+4, + 0.21989348833591238872e+4, + -0.22738060360222862073e+4, + -0.50164158342566979627e+4, + -0.39262993998839169763e+4, + -0.34465976150210371998e+4, + 0.23476812679802509365e+3, + 0.41599348293477623884e+4, + 0.37230356245337479777e+4, + 0.21922009428803721676e+4, + -0.65382398116865113025e+3, + -0.46272935718228864062e+4, + -0.29373561837300640036e+4, + 0.51354544245950239656e+3, + 0.21775338002484713797e+4, + 0.42110287666146023184e+4, + 0.28342336288856216697e+3, + -0.35854345307380499435e+4, + -0.22795679021808173275e+4, + -0.51855928748089331748e+3, + 0.26808160808594361697e+4, + 0.34967596229523896909e+4, + -0.13097578353338642501e+4, + -0.35039842288167956212e+4, + -0.64369161201424788032e+3, + 0.73913821430938742196e+3, + 0.33771780796311509221e+4, + 0.97672097558201517131e+3, + -0.44084310970479309617e+4, + -0.55848213059614477061e+3, + 0.13694960316013650754e+4, + 0.1888676670721168648e+4, + 0.13299329647008646589e+4, + -0.38406095003000518773e+4, + -0.12075937862679575119e+4, + 0.29509983947196665213e+4, + 0.13584800207160592436e+4, + -0.10621703263879844599e+4, + -0.21589889388138512913e+4, + -0.25570161242545290747e+3, + 0.26334074306889151558e+4, + 0.13047319092889938474e+4, + -0.33390368421348439369e+4, + -0.98366079841435407616e+3, + 0.28409532416943206954e+4, + 0.38632324254509319417e+3, + -0.77475494655721024628e+3, + -0.17772051790018406336e+4, + 0.58808751291680458451e+2, + 0.35403691966802884963e+4, + -0.14685757188211089215e+4, + -0.30047281639863495002e+4, + 0.21280096016840961965e+4, + 0.13369492139641922677e+4, + -0.74704383789889436684e+3, + -0.12991762353368449112e+4, + -0.34932703022856031794e+3, + 0.22724552612269958445e+4, + 0.20292688314025866703e+3, + -0.28925719070479926813e+4, + 0.48422002163773413486e+3, + 0.31083458684358533901e+4, + -0.1805158774358118535e+4, + -0.18387639718986220032e+4, + 0.18773424433219704497e+4, + 0.51621458626820026439e+3, + -0.4499375872468971238e+3, + -0.1226883006320342929e+4, + 0.27824483183454316304e+3, + 0.21324975740742165726e+4, + -0.12463838564870513892e+4, + -0.22513974417784738762e+4, + 0.27036789734223834785e+4, + 0.99149654869390758449e+3, + -0.33615181321311147258e+4, + 0.11811720628423674953e+4, + 0.17728499870306452522e+4, + -0.13385419788577980853e+4, + -0.74453033518693712267e+3, + 0.70513138867037798718e+3, + 0.8443692028420969109e+3, + -0.72407451452754423826e+3, + -0.82982527078694749889e+3, + 0.64756108951089174752e+3, + 0.14789192535033680542e+4, + -0.19070574549030272919e+4, + -0.89642582991170650075e+3, + 0.32874426971652801512e+4, + -0.16241344935903650821e+4, + -0.21336054767350151451e+4, + 0.30341725429013226858e+4, + -0.13053999411608165815e+3, + -0.2415623554063890424e+4, + 0.13765103571336580899e+4, + 0.13206313434930466428e+4, + -0.18458812933070937561e+4, + -0.16192057077550569488e+3, + 0.16930469615808351591e+4, + -0.97185254208684693822e+3, + -0.48016718252933321764e+3, + 0.69107104605180097678e+3, + -0.92934474093945880213e+2, + 0.23574363335884675053e+3, + -0.94878452816228627853e+3, + 0.60956333866453883275e+3, + 0.98210711910714962869e+3, + -0.1826878407886134255e+4, + 0.53621131722133338826e+3, + 0.13560779687699850911e+4, + -0.12548895995988477807e+4, + -0.81810443597359699197e+3, + 0.19542066701407657092e+4, + -0.20715166345413942395e+3, + -0.25416027927047530284e+4, + 0.27442742358627560861e+4, + 0.21790175359368220143e+3, + -0.30101449999379947258e+4, + 0.23866214639636577886e+4, + 0.75266311424772140981e+3, + -0.24699546973309984423e+4, + 0.70635019739634594771e+3, + 0.21562332114629462012e+4, + -0.23013713230580392519e+4, + -0.71148599639465373912e+3, + 0.33188528504856362815e+4, + -0.22970108105568365318e+4, + -0.12726642940857482245e+4, + 0.32723853914922488002e+4, + -0.14947959761001975494e+4, + -0.17533053385265905035e+4, + 0.25158729884023655359e+4, + -0.4219612748283267365e+3, + -0.2061596377113566632e+4, + 0.17082121769824602779e+4, + 0.12980032716376872486e+4, + -0.32598130045088114457e+4, + 0.10019406889778244931e+4, + 0.28182900684458440992e+4, + -0.38148582119657053227e+4, + 0.46427245840560044599e+3, + 0.27225075226850276522e+4, + -0.19595444326941212694e+4, + -0.17209711310163606868e+4, + 0.26809620711845082042e+4, + 0.67373468465931227911e+3, + -0.42841302745588036487e+4, + 0.26279023810917105948e+4, + 0.25169462328345157403e+4, + -0.4811559061875599582e+4, + 0.75725734996329356363e+3, + 0.41062564075852997121e+4, + -0.32464984029665997696e+4, + -0.27132579858299650368e+4, + 0.52220717118049560668e+4, + -0.35312192674864172659e+3, + -0.60740541444694727033e+4, + 0.47814859466089037596e+4, + 0.30549630932019772445e+4, + -0.75390353411555461207e+4, + 0.22410572285584130441e+4, + 0.56336581315532066583e+4, + -0.5708481211434400393e+4, + -0.21541841238382094161e+4, + 0.649734363541415496e+4, + -0.13169179111823702897e+4, + -0.62752649553126620958e+4, + 0.52078780460538782791e+4, + 0.27124379838045824727e+4, + -0.65622962158228074259e+4, + 0.14212845567123138153e+4, + 0.3913706736106905737e+4, + -0.17908080060536135534e+4, + -0.34657166314766268442e+4, + 0.20436323305346420511e+4, + 0.41771915202117734225e+4, + -0.50812904329525736102e+4, + -0.19167242598039322274e+4, + 0.57905719188992725321e+4, + -0.24368346522271195909e+3, + -0.60795882912088745798e+4, + 0.19023335714037450543e+4, + 0.68793191769326167559e+4, + -0.6379758427230181951e+4, + -0.37824770733187065161e+4, + 0.81508943325732998346e+4, + -0.89205962908657670596e+3, + -0.58407303972499394149e+4, + 0.15132492757612465084e+4, + 0.45606737430271850826e+4, + -0.10299067089208126617e+4, + -0.58443765036100821817e+4, + 0.2515513625965729716e+4, + 0.58443843771631409254e+4, + -0.43549199189484797898e+4, + -0.51394662383697932455e+4, + 0.51536847999670671925e+4, + 0.50739080677436877522e+4, + -0.76567403953803423065e+4, + -0.28229473728903112715e+4, + 0.80989653035367382472e+4, + -0.21243035684957771991e+3, + -0.50190779269602999193e+4, + -0.19996756575443248494e+4, + 0.52074319376747862407e+4, + 0.4051337982052859843e+4, + -0.86904783272350396146e+4, + -0.1960230861022299905e+4, + 0.84918696149097904708e+4, + 0.88966763187850165195e+3, + -0.72532291633780996563e+4, + -0.21325489584742022089e+4, + 0.71603175523460995464e+4, + 0.25504829700700011017e+4, + -0.61114956642769084283e+4, + -0.46982152292290547848e+4, + 0.56228068362646581591e+4, + 0.71657336569762401268e+4, + -0.70602807373489931706e+4, + -0.66959184979911196933e+4, + 0.53589729406314618245e+4, + 0.59275449718650834257e+4, + -0.73857355253126684147e+3, + -0.8239998269646335757e+4, + -0.26766346583296667632e+4, + 0.10128728245497311946e+5, + 0.36088313866446314933e+4, + -0.81810423521928023547e+4, + -0.53429593182369535498e+4, + 0.26885912498465036151e+4, + 0.90613417997531541914e+4, + 0.15454426595079553408e+4, + -0.10600459307386889122e+5, + -0.4636567848744872208e+4, + 0.62696992868166635162e+4, + 0.86418198904255459638e+4, + -0.26750705822030641912e+3, + -0.96771608712209163059e+4, + -0.64681557973521767053e+4, + 0.52828529222882198155e+4, + 0.11434679330185208528e+5, + 0.10553718333152799005e+4, + -0.79983353196578764255e+4, + -0.93454982342133898783e+4, + -0.15454570113233248776e+4, + 0.12313907661128343534e+5, + 0.83830965293609351647e+4, + -0.19049097454319180542e+4, + -0.90885147468786726677e+4, + -0.12438407561302259637e+5, + 0.78063157479076846812e+3, + 0.11311572853920686612e+5, + 0.10349508230704395828e+5, + 0.62223942474502455298e+4, + -0.80384637267819207409e+4, + -0.14886565566327575652e+5, + -0.94605720544127871108e+4, + -0.31996311406670824908e+4, + 0.10147161906908289893e+5, + 0.16206169999121551882e+5, + 0.13054284664251685172e+5, + 0.76605015272707369149e+4, + -0.41417860385159001453e+4, + -0.1365026239831975181e+5, + -0.18944372120991327392e+5, + -0.21645739448703974631e+5, + -0.20451636718137764547e+5, + -0.16428135660609088518e+5, + -0.12854769060785083639e+5, + -0.93184547666353264503e+4, + -0.51809935856376896481e+4, + -0.39340147126575843686e+4, + -0.22422243797035903299e+4, + -0.41033322289944618433e+3, + -0.12559491331516724131e+4, + -0.17952091164626966702e+3, + 0.55422634555905756315e+3, + -0.11527375216361431285e+4, + 0.72777445347471098103e+3, + 0.21886174247280135319e+3, + -0.1268877780458287134e+4, + 0.16552203498700978344e+4, + -0.10426641493375825576e+4, + -0.32413052577095214701e+3, + 0.16869971193740609579e+4, + -0.22209999655994629393e+4, + 0.15417373619974714529e+4, + 0.41945184606467272204e+2, + -0.16749956604220617464e+4, + 0.24499054400587288001e+4, + -0.19278632041320984172e+4, + 0.40388515745542844115e+3, + 0.12698939793979004662e+4, + -0.21708313855780793347e+4, + 0.18405590578940243631e+4, + -0.52958271079973212636e+3, + -0.96075905756691054194e+3, + 0.17625652421247095845e+4, + -0.14395677251941574468e+4, + 0.23285777058158905106e+3, + 0.1103602155311765955e+4, + -0.1750051552267465695e+4, + 0.13059747394534074374e+4, + -0.12638224946637194535e+2, + -0.13881006846975690223e+4, + 0.20880349766059325702e+4, + -0.16675068300516027193e+4, + 0.33176281594291214105e+3, + 0.12147523115204944588e+4, + -0.21587587627473476459e+4, + 0.20248489125096143653e+4, + -0.91605353937669144671e+3, + -0.56010603471111119234e+3, + 0.16403254511756529155e+4, + -0.18140204086718485996e+4, + 0.10808632480118590138e+4, + 0.85684137568352440439e+2, + -0.10216297945397510603e+4, + 0.12466006527731819915e+4, + -0.71094122776451547452e+3, + -0.20214247585918897698e+3, + 0.9171845792297369826e+3, + -0.99847393315243277812e+3, + 0.39531877920999960452e+3, + 0.53837419177964522987e+3, + -0.12478062717352929667e+4, + 0.12932784444162580257e+4, + -0.59806255451946026369e+3, + -0.5015657214140919109e+3, + 0.14339853759878367327e+4, + -0.1697140798851037971e+4, + 0.1129508015258152227e+4, + -0.14302353196806336655e+4, + 0.96553400627913151766e+3, + 0.18290944223575029355e+4, + -0.36012476885349697113e+4, + 0.37035840927758067664e+4, + -0.16501085613765967537e+4, + -0.11058142498406957657e+4, + 0.34624633342829074536e+4, + -0.37936807828982641695e+4, + 0.23458687870574517547e+4, + 0.39624443410093482498e+3, + -0.25095260136475249055e+4, + 0.32166440725335701245e+4, + -0.18415739092693142993e+4, + -0.33955868327264261097e+3, + 0.23410722298886053068e+4, + -0.25834466405220164233e+4, + 0.13024949440900622903e+4, + 0.10678319926668646076e+4, + -0.26900238448086233802e+4, + 0.29005801281085668961e+4, + -0.11482875038432835026e+4, + -0.11945437604096139239e+4, + 0.311614510760263056e+4, + -0.31015691623885036279e+4, + 0.15136395689360383585e+4, + 0.1089534217350178551e+4, + -0.28205662314282112675e+4, + 0.30644180835357492469e+4, + -0.13745309898540638187e+4, + -0.80890017238079781237e+3, + 0.25196896481131575456e+4, + -0.24047050331134059888e+4, + 0.10080837131453705524e+4, + 0.105343953815084501e+4, + -0.20552100284959415148e+4, + 0.17321405143396075346e+4, + -0.37369668465357133158e+1, + -0.15369253887423335527e+4, + 0.21259167577809407703e+4, + -0.91833413114322934234e+3, + -0.97535527905049218589e+3, + 0.26300842833106980834e+4, + -0.24738387551717087263e+4, + 0.80209512264494173905e+3, + 0.17924544453054240876e+4, + -0.3311663626151409062e+4, + 0.30866198154485377927e+4, + -0.80510672106271010762e+3, + -0.1788051340206281111e+4, + 0.34278159835273440876e+4, + -0.27150097630201753418e+4, + 0.48312959997722310845e+3, + 0.21032351705510895954e+4, + -0.29883660399140117079e+4, + 0.17270140278796536677e+4, + 0.84828622194709976156e+3, + -0.34265280290601185698e+4, + 0.27191576130279886456e+4, + -0.22054837296084233458e+4, + -0.45327111403626731772e+4, + 0.69342236149159714387e+3, + -0.10574161639021491283e+5, + -0.87095188693799282191e+4, + -0.11434643960372568472e+5, + -0.23661152478231291752e+5, + -0.17983606178863032255e+5, + -0.25039571275445989158e+5, + -0.23982206663243741787e+5, + -0.10426958793853576935e+5, + -0.75445854086268200263e+4, + 0.78019312114353051584e+4, + 0.1836911156505492545e+5, + 0.14169796657767634315e+5, + 0.12225727791103054187e+5, + -0.50353894402355683724e+3, + -0.15346721144974799245e+5, + -0.13256612117833292359e+5, + -0.79168999442063859533e+4, + 0.2204197449794806289e+4, + 0.16942850815000900184e+5, + 0.10387446732949818397e+5, + -0.17025387676953153004e+4, + -0.79452347641414917234e+4, + -0.15153814269732394678e+5, + -0.10947210788316422168e+4, + 0.13057510021090422015e+5, + 0.81126824560398836184e+4, + 0.19311100275828785016e+4, + -0.96011042894099919067e+4, + -0.12884228368073328966e+5, + 0.51349155328569586345e+4, + 0.12203229592141880858e+5, + 0.26747255008871616155e+4, + -0.27858668369293573051e+4, + -0.1237690587147507722e+5, + -0.30827945870501225727e+4, + 0.15345860236669996084e+5, + 0.25335468755836759556e+4, + -0.52315974460269744668e+4, + -0.68603938729561286891e+4, + -0.44528265898442696198e+4, + 0.13335397082477868025e+5, + 0.48913926290833442181e+4, + -0.11003403862736176961e+5, + -0.48502769124364513118e+4, + 0.4072758484427615258e+4, + 0.73701613385514792753e+4, + 0.13760995759313930193e+4, + -0.98289409099652875739e+4, + -0.46218551106351860653e+4, + 0.12200740958859954844e+5, + 0.32622640675014199587e+4, + -0.99558835456941123994e+4, + -0.15849845395628526603e+4, + 0.28067031369447968245e+4, + 0.65763413666324177029e+4, + -0.45227889600873822928e+3, + -0.12582796961739746621e+5, + 0.52427666950157044994e+4, + 0.10725888366673689234e+5, + -0.74074474829000091631e+4, + -0.51602842878927485799e+4, + 0.2962631865810151794e+4, + 0.45975073007260907616e+4, + 0.11393969331441180657e+4, + -0.78951131971712065933e+4, + -0.11436381365841750721e+4, + 0.10839282874947972232e+5, + -0.20193388320459812348e+4, + -0.111386263752446539e+5, + 0.66224499620720953317e+4, + 0.63920847598359077892e+4, + -0.64591611121159321556e+4, + -0.21846928793326974301e+4, + 0.18962180817517000833e+4, + 0.42300993889806841253e+4, + -0.87589275389487522716e+3, + -0.77630837727011239622e+4, + 0.44946083070922632032e+4, + 0.82196975342378300411e+4, + -0.99546818391175911529e+4, + -0.32806625056426746596e+4, + 0.11753721589456761649e+5, + -0.38536367453074635705e+4, + -0.67526164544578796267e+4, + 0.50308772573564356207e+4, + 0.27120053090736028025e+4, + -0.28042014242004188418e+4, + -0.26075578225237823062e+4, + 0.20966470637303491458e+4, + 0.34584010551627106906e+4, + -0.26253258118241110424e+4, + -0.52940267771097596778e+4, + 0.70723108353538855226e+4, + 0.28987561516323607975e+4, + -0.11502992843554789943e+5, + 0.55907852619686173057e+4, + 0.78023313260882659961e+4, + -0.10863898900526166472e+5, + 0.24572173587582770438e+3, + 0.89766070299033108313e+4, + -0.51396298551889140072e+4, + -0.47607970822060515275e+4, + 0.6829418672777644133e+4, + 0.30851581876124328119e+3, + -0.58324742291724041934e+4, + 0.33382896005947650337e+4, + 0.17173189353986524566e+4, + -0.22823906186311073725e+4, + -0.61653416030813996684e+1, + -0.50340375142978541589e+3, + 0.32069112920953257344e+4, + -0.22075539713652906357e+4, + -0.32930207947755593523e+4, + 0.6163707362726008796e+4, + -0.1460243847481844341e+4, + -0.52522257605398317537e+4, + 0.4631919129675728982e+4, + 0.31663555973731977247e+4, + -0.75386883106774766929e+4, + 0.13667987272125008076e+4, + 0.86053858502439597942e+4, + -0.95583389445356078795e+4, + -0.8065454266098182643e+3, + 0.10547740474260885094e+5, + -0.8048364482433129524e+4, + -0.33670527000615147699e+4, + 0.94584707504921861982e+4, + -0.28301651135913657527e+4, + -0.78309458025757303403e+4, + 0.86406624291815369361e+4, + 0.20781333125347323403e+4, + -0.11498960669953228717e+5, + 0.79657536602068757929e+4, + 0.46811495130285038613e+4, + -0.11662374068942513986e+5, + 0.50913260266100242006e+4, + 0.66528508556385258998e+4, + -0.92869803585653462505e+4, + 0.97137984917394248896e+3, + 0.84375828446563064063e+4, + -0.68136560645844574537e+4, + -0.44185276296291076505e+4, + 0.11761903983443460675e+5, + -0.41897295191156272267e+4, + -0.90609296351271441381e+4, + 0.12539884488086030615e+5, + -0.10318025765499671706e+4, + -0.10030936602155197761e+5, + 0.73095907347290321923e+4, + 0.58574474390675259201e+4, + -0.1020836620204904284e+5, + -0.58538433480457717906e+3, + 0.1342278602037832934e+5, + -0.93679641030605780543e+4, + -0.71109550029070906021e+4, + 0.15571564764573542561e+5, + -0.35123850532709147956e+4, + -0.12483189393680944704e+5, + 0.11095776763144358483e+5, + 0.7235292431652191226e+4, + -0.16201468657834830083e+5, + 0.2349708335812486439e+4, + 0.1765616830351347744e+5, + -0.15026852550439887636e+5, + -0.79434866100387671395e+4, + 0.21861083526361177064e+5, + -0.67135066175004667457e+4, + -0.1641116656389385389e+5, + 0.16484632606504655996e+5, + 0.70060277086451405921e+4, + -0.19630097702869257773e+5, + 0.37109570602952826448e+4, + 0.18916523575002494908e+5, + -0.15045255576557134191e+5, + -0.8846557336633451996e+4, + 0.19266142481067181507e+5, + -0.23060374559583833616e+4, + -0.13698271276830093484e+5, + 0.53641053265925766027e+4, + 0.12455598237756048547e+5, + -0.8150468338811083413e+4, + -0.12241803314465092626e+5, + 0.16111126952505212103e+5, + 0.55160245182941289386e+4, + -0.18173221041143442562e+5, + 0.13007458896731091045e+4, + 0.18926360331744082941e+5, + -0.70845436521699530203e+4, + -0.19581726042049998796e+5, + 0.18674952228596237546e+5, + 0.11325070350223430069e+5, + -0.23559983480195314769e+5, + 0.95367202226118183717e+3, + 0.1871306627886397473e+5, + -0.37348812631148339278e+4, + -0.15740269664447661853e+5, + 0.41151535244919805336e+4, + 0.18397321034998043615e+5, + -0.86427052536057035468e+4, + -0.1763897505338242263e+5, + 0.13620261897417087312e+5, + 0.15784077761865226421e+5, + -0.16426204932947355701e+5, + -0.14651373583730044629e+5, + 0.22696114172312612936e+5, + 0.88284984477856305602e+4, + -0.23723753117445190583e+5, + -0.16386888933532336523e+4, + 0.17350926691538610612e+5, + 0.61210811589260983965e+4, + -0.17697959029706973524e+5, + -0.10574775698396248117e+5, + 0.25728812392011976044e+5, + 0.61528014080192406254e+4, + -0.25649609495464224892e+5, + -0.34931147893565221239e+4, + 0.22741556189864964836e+5, + 0.67909805209435635334e+4, + -0.2215360790100781378e+5, + -0.86523850470052620949e+4, + 0.19956895197247653414e+5, + 0.14246620093540352173e+5, + -0.18221437765392391157e+5, + -0.20737843176161848533e+5, + 0.20541898443105699698e+5, + 0.21177618614521150448e+5, + -0.15731689076286456839e+5, + -0.19959464741849631537e+5, + 0.33001169500857677122e+4, + 0.25810957261061026657e+5, + 0.72318145721155397041e+4, + -0.3044510910033788241e+5, + -0.11358558697903352368e+5, + 0.24473873859379822534e+5, + 0.18042093456364840677e+5, + -0.92239400370542425662e+4, + -0.28489010502424585866e+5, + -0.35492754148292769969e+4, + 0.31551774144114500814e+5, + 0.15246274654814789756e+5, + -0.19480568910693891667e+5, + -0.27400317486063024262e+5, + 0.12877552539455830356e+4, + 0.29959988599150783557e+5, + 0.20194830840713006182e+5, + -0.16871924238921765209e+5, + -0.34602565484679551446e+5, + -0.44150590523145647239e+4, + 0.2544561535656475462e+5, + 0.29637218355727534799e+5, + 0.32251475668281250364e+4, + -0.36502322838344654883e+5, + -0.27088974268288453459e+5, + 0.55589992684557400935e+4, + 0.29746488839451285457e+5, + 0.37093325389103774796e+5, + -0.17358317046438367015e+4, + -0.34525296304389259603e+5, + -0.33792947935211253935e+5, + -0.17847364349563402357e+5, + 0.24521147504944179673e+5, + 0.45491330056195984071e+5, + 0.3106695880900870543e+5, + 0.84294993815865291253e+4, + -0.30899637917954816658e+5, + -0.50077052308870770503e+5, + -0.41530196575313646463e+5, + -0.22992440436442459031e+5, + 0.12538014004058220962e+5, + 0.42366771023872948717e+5, + 0.59117879528945370112e+5, + 0.67433731479118927382e+5, + 0.63224021330683790438e+5, + 0.51540235234529769514e+5, + 0.39904275287270211265e+5, + 0.28594820932679587713e+5, + 0.16785337853764194733e+5, + 0.11728485169285893789e+5, + 0.70095599835669681852e+4, + 0.16896226630394016865e+4, + 0.34227783053451944397e+4, + 0.66978063202543307852e+3, + -0.12891920485974201256e+4, + 0.2872916460351162641e+4, + -0.18289731871159021921e+4, + -0.37251978750666472706e+3, + 0.28871176386193164944e+4, + -0.38679144322816778185e+4, + 0.25369327661397337579e+4, + 0.57049573717904138448e+3, + -0.37145636794515203292e+4, + 0.49927084753364133576e+4, + -0.35072864357965036106e+4, + -0.48192216442699475465e+2, + 0.37231294137503996353e+4, + -0.54459924894539917659e+4, + 0.42208962054933072068e+4, + -0.73698048794135638673e+3, + -0.30435257399651322885e+4, + 0.50072345835875312332e+4, + -0.41225873786903757718e+4, + 0.9973450657395660528e+3, + 0.24923493109867176827e+4, + -0.43283580947807531629e+4, + 0.35040060861565102641e+4, + -0.5931229355425579115e+3, + -0.26348270905145373035e+4, + 0.42530232845945665758e+4, + -0.3306824364548122503e+4, + 0.33391132783086067093e+3, + 0.29562029984432551828e+4, + -0.46853019811573612969e+4, + 0.3859022112226930858e+4, + -0.91946359968169292642e+3, + -0.25388542365567432171e+4, + 0.46626346457899417146e+4, + -0.43668978074241031209e+4, + 0.1886954921066588895e+4, + 0.13912084495020701524e+4, + -0.37334648582821287164e+4, + 0.39941638807290601108e+4, + -0.2204123722169773373e+4, + -0.52145043416834778327e+3, + 0.26418103505604049133e+4, + -0.30572664794442534912e+4, + 0.16772877860439155029e+4, + 0.57968769356753887223e+3, + -0.2350315420827125763e+4, + 0.26009303220436854645e+4, + -0.12008479851039894584e+4, + -0.10296956837411692049e+4, + 0.27906684822420324963e+4, + -0.30370389475597917226e+4, + 0.1558151086517653539e+4, + 0.89865962447611434527e+3, + -0.30319010469547347384e+4, + 0.36859355103851148669e+4, + -0.24762874475361950317e+4, + 0.28241152754329500567e+4, + -0.17230321276193271842e+4, + -0.3766584778034628016e+4, + 0.70216819820951632209e+4, + -0.69519893122468047295e+4, + 0.27631843222651891665e+4, + 0.25224827139264880316e+4, + -0.67883948090524045256e+4, + 0.69640296082901568298e+4, + -0.37965342476863716001e+4, + -0.16190632425814410453e+4, + 0.54377290704707911573e+4, + -0.6303914336210633337e+4, + 0.30941474611680605449e+4, + 0.14260737730295447818e+4, + -0.52604942579204634967e+4, + 0.53510302764981643122e+4, + -0.24063928264531332388e+4, + -0.25270316152021923699e+4, + 0.5678003667698456411e+4, + -0.58190431673241637327e+4, + 0.20150794106608555012e+4, + 0.27822493325614559581e+4, + -0.64865011239535051573e+4, + 0.61183328732112895523e+4, + -0.26085060798510294262e+4, + -0.27470622683595452145e+4, + 0.60539229402231567292e+4, + -0.6161349206127859361e+4, + 0.23519451425951879173e+4, + 0.2244773156994405781e+4, + -0.55752569892690926281e+4, + 0.49435659814091868611e+4, + -0.16497511268228925019e+4, + -0.28313425206120346047e+4, + 0.48366308124752431468e+4, + -0.38304794332966675938e+4, + -0.20444346424032175946e+3, + 0.37915264411262214708e+4, + -0.51779833753935090499e+4, + 0.25597139550685783433e+4, + 0.17247482039539656853e+4, + -0.56065586003078460635e+4, + 0.56685080459871151106e+4, + -0.23757764222887753931e+4, + -0.30779936382082387354e+4, + 0.65079294317720241452e+4, + -0.63845982794332985577e+4, + 0.19274090283004195499e+4, + 0.33540628377670600457e+4, + -0.68259114445641971542e+4, + 0.55099888724629699936e+4, + -0.99143705687920919445e+3, + -0.43994496605827835083e+4, + 0.64099374495602660318e+4, + -0.40028526602979172822e+4, + -0.12624142358432789024e+4, + 0.6770192502590642107e+4, + -0.5767561105133187084e+4, + 0.51764969043996889013e+4, + 0.82640584165942927939e+4, + -0.48272280686873097011e+3, + 0.20973824161341577565e+5, + 0.17707427906017073838e+5, + 0.23901730634423740412e+5, + 0.47194038562556183024e+5, + 0.37626323430529831967e+5, + 0.50317554566031285503e+5, + 0.48962523646846901102e+5, + 0.21647680955381081731e+5, + 0.14613320304640434188e+5, + -0.1511827324330479496e+5, + -0.3790360279079288739e+5, + -0.28787628223625535611e+5, + -0.24561533088019055867e+5, + 0.46817820213225309089e+3, + 0.3178706923558188646e+5, + 0.26679059202224336332e+5, + 0.16137794367893560775e+5, + -0.42606838077030206478e+4, + -0.34832061592616890266e+5, + -0.20872195848934487003e+5, + 0.33210921485266426316e+4, + 0.16200314938009547404e+5, + 0.30875690703501939424e+5, + 0.22726606125093985611e+4, + -0.26741167368494705443e+5, + -0.16306990359350911604e+5, + -0.40863484639065868578e+4, + 0.19502823331246454472e+5, + 0.2656954780295792807e+5, + -0.11039448989433984025e+5, + -0.24179528765835468221e+5, + -0.59690502797068393193e+4, + 0.5824689331058728385e+4, + 0.25531043535544518818e+5, + 0.55312306915906247013e+4, + -0.3030822676836937535e+5, + -0.59851082916532477611e+4, + 0.11075493249897317583e+5, + 0.14104409916472030091e+5, + 0.84173172075096081244e+4, + -0.26214287484400938411e+5, + -0.10868938889815517541e+5, + 0.22973569593166346749e+5, + 0.98288624036499277281e+4, + -0.8752327247639075722e+4, + -0.14235905757903283302e+5, + -0.35961812449067051602e+4, + 0.20548423671629883756e+5, + 0.93044366464618724422e+4, + -0.25160029740090441919e+5, + -0.60695418187865670916e+4, + 0.19688992483084926789e+5, + 0.35894515442121696651e+4, + -0.57271422938281830284e+4, + -0.13709982046638149768e+5, + 0.14136623357425630729e+4, + 0.25175304022689644626e+5, + -0.10469964434471730783e+5, + -0.21712189761818561237e+5, + 0.14658000967004436461e+5, + 0.11074313567154713382e+5, + -0.65305358464990176799e+4, + -0.91167393893090447818e+4, + -0.22240702722795626869e+4, + 0.15668723762939565859e+5, + 0.29165439207758790872e+4, + -0.22658371612828304933e+5, + 0.45296912643419836968e+4, + 0.22527727169635611062e+5, + -0.1359946309259098598e+5, + -0.12707839079207686154e+5, + 0.12758736514380987501e+5, + 0.48266608200211558142e+4, + -0.41628521331059137083e+4, + -0.84011453120547794242e+4, + 0.16380555651783224675e+4, + 0.15909014976729315094e+5, + -0.92080883682850126206e+4, + -0.16761210556353122229e+5, + 0.20421557817959746899e+5, + 0.63672063977594025346e+4, + -0.23470521196178709943e+5, + 0.73071764843990149529e+4, + 0.14236737785993020225e+5, + -0.10530460753999068402e+5, + -0.5549072489998787205e+4, + 0.60777156981371526854e+4, + 0.46764852115703579329e+4, + -0.35365386703680542269e+4, + -0.76673988830121152205e+4, + 0.56793483957137077596e+4, + 0.10833145995963051973e+5, + -0.14812337419864417825e+5, + -0.52792034403904726787e+4, + 0.22798966398504588142e+5, + -0.10965293189345224164e+5, + -0.1597310192135620855e+5, + 0.21864969515336677432e+5, + -0.16650482317166492408e+2, + -0.18793200778042533784e+5, + 0.10805447390547036775e+5, + 0.9664298989796805472e+4, + -0.142012439875064847e+5, + -0.12183059453220867852e+3, + 0.11356410738987278819e+5, + -0.64753256206782007212e+4, + -0.34773108873506316741e+4, + 0.42651959625919707833e+4, + 0.63964746996877545371e+3, + 0.37184094310927395099e+3, + -0.60948372392985820625e+4, + 0.44576000856264363392e+4, + 0.62969514857097883578e+4, + -0.11804211747044779258e+5, + 0.21215741445237176777e+4, + 0.11367209831903786835e+5, + -0.96849107831941237237e+4, + -0.67245002679110457393e+4, + 0.16095906637213227441e+5, + -0.37780685212127414161e+4, + -0.16584616860727463063e+5, + 0.18875954212631302653e+5, + 0.16918410403859254529e+4, + -0.20971362256590062316e+5, + 0.15482140051480162583e+5, + 0.78809658036612800061e+4, + -0.20088003659915775643e+5, + 0.61481417535132286503e+4, + 0.16100890924414456094e+5, + -0.18210354739879534463e+5, + -0.33800168703869817364e+4, + 0.22617036434639798244e+5, + -0.157323009353817597e+5, + -0.95721979476849955972e+4, + 0.23361733151274136617e+5, + -0.97249409164191929449e+4, + -0.141909741353773843e+5, + 0.19308480567050130048e+5, + -0.13754488683783336e+4, + -0.18384426120269446983e+5, + 0.1476158872149085073e+5, + 0.8497416310177761261e+4, + -0.23736026193244033493e+5, + 0.90991814057743777084e+4, + 0.17104129553746879537e+5, + -0.23967136264434120676e+5, + 0.12842686870270106283e+4, + 0.20662785461575724185e+5, + -0.15162015861659543589e+5, + -0.11505039511571403636e+5, + 0.21581468859265260107e+5, + -0.13834692391654336916e+4, + -0.24536585248987743398e+5, + 0.18978425511502646259e+5, + 0.11628531562596703225e+5, + -0.29010857702150162368e+5, + 0.79200989015945342544e+4, + 0.22497142243715643417e+5, + -0.21908527494136611494e+5, + -0.11232767320947508779e+5, + 0.29520645086233231268e+5, + -0.65071066425491626433e+4, + -0.2981777525942747161e+5, + 0.27245964918157482316e+5, + 0.12203637737943236061e+5, + -0.37312566844395878434e+5, + 0.11719520372993225465e+5, + 0.28282525496976202703e+5, + -0.28223299864707507368e+5, + -0.12978597952495756545e+5, + 0.34623226731673494214e+5, + -0.61233357059438367287e+4, + -0.33321075924729542749e+5, + 0.25320920153978531744e+5, + 0.16965766324529708072e+5, + -0.334109168160180634e+5, + 0.94802284531118630184e+3, + 0.27347697655811774894e+5, + -0.95925848326645009365e+4, + -0.25037168459611824801e+5, + 0.17379807456249385723e+5, + 0.21286281452917806746e+5, + -0.29891566096652804845e+5, + -0.93178541131894999126e+4, + 0.33387408006866971846e+5, + -0.33830187478384291353e+4, + -0.34249206877926684683e+5, + 0.14562317918738484877e+5, + 0.32837502621125568112e+5, + -0.32151956168511384021e+5, + -0.19888403951945641893e+5, + 0.40009151576901182125e+5, + 0.11459411610473571272e+4, + -0.34919669691253220662e+5, + 0.53280500321522067679e+4, + 0.30986575400543395517e+5, + -0.8869678254939522958e+4, + -0.33773118953988610883e+5, + 0.16901086008049838711e+5, + 0.3139670404101285385e+5, + -0.25115047697650970804e+5, + -0.28129146080312471895e+5, + 0.30286882286364791071e+5, + 0.24951673280167284247e+5, + -0.39468457163640217914e+5, + -0.16271417038283159854e+5, + 0.41048571258344665694e+5, + 0.63345582059080625186e+4, + -0.34045957222727054614e+5, + -0.11121911847400853731e+5, + 0.34569703980631122249e+5, + 0.1611291152934342972e+5, + -0.4488670320835790335e+5, + -0.11073998709039686219e+5, + 0.45254688138531440927e+5, + 0.75820003514918853398e+4, + -0.4160887331864090811e+5, + -0.1270857693140365518e+5, + 0.40261771878792904317e+5, + 0.16679878385563293705e+5, + -0.37641978845883262693e+5, + -0.25353086441441919305e+5, + 0.34196653753681901435e+5, + 0.35432689951978311001e+5, + -0.35337973288594796031e+5, + -0.38827210326894877653e+5, + 0.26970269695598886756e+5, + 0.38714149158329288184e+5, + -0.74768865411784663593e+4, + -0.47424441426681085431e+5, + -0.11137595462736897389e+5, + 0.53392029187236308644e+5, + 0.21066683327142123744e+5, + -0.43036202366756995616e+5, + -0.35114781190345958748e+5, + 0.18341417780026582477e+5, + 0.51953937838483252563e+5, + 0.48133912281500943209e+4, + -0.55416514241404998756e+5, + -0.28825216821305559279e+5, + 0.3533843068916239281e+5, + 0.50515282541994180065e+5, + -0.2815496819326673176e+4, + -0.54563295766503433697e+5, + -0.3649528043575528136e+5, + 0.31076437719963447307e+5, + 0.61573610655653035792e+5, + 0.9739262133133603129e+4, + -0.47198570470485989063e+5, + -0.54626295596322059282e+5, + -0.35771256415623670364e+4, + 0.63749060016727686161e+5, + 0.50624241648707786226e+5, + -0.9348072670535533689e+4, + -0.5653442457344160357e+5, + -0.64833681815497628122e+5, + 0.2029022270302936704e+4, + 0.61717863997119886335e+5, + 0.63997255204881170357e+5, + 0.29987649744595964876e+5, + -0.43696222913040684944e+5, + -0.81573169188043073518e+5, + -0.58872602222738161799e+5, + -0.13124792011741594251e+5, + 0.55315621690578569542e+5, + 0.90363715187705500284e+5, + 0.77027580325046932558e+5, + 0.40501138454491308948e+5, + -0.22369896521173850488e+5, + -0.76663419151852212963e+5, + -0.10803470546182987164e+6, + -0.12247594839455268811e+6, + -0.1145534865832356445e+6, + -0.94233994048965992988e+5, + -0.72458386744290430215e+5, + -0.51436811731720721582e+5, + -0.31404339961994668556e+5, + -0.20740653547422130941e+5, + -0.12571598524530745635e+5, + -0.3905341244113322773e+4, + -0.53581121744304073218e+4, + -0.13978536019131890953e+4, + 0.15747359526586949414e+4, + -0.39578952610326455215e+4, + 0.24844180989414517171e+4, + 0.31351825037496070081e+3, + -0.36307649151788177733e+4, + 0.49785194798202501261e+4, + -0.3384338278882168197e+4, + -0.51198564676333711532e+3, + 0.45068321090036024543e+4, + -0.61837678709157453341e+4, + 0.43894168129694035088e+4, + 0.16402736001529046206e+2, + -0.45797573691155621418e+4, + 0.66931955564986101308e+4, + -0.51097553893431004326e+4, + 0.7150502663889218411e+3, + 0.40011983954154516141e+4, + -0.63698882270806543602e+4, + 0.51088100797639981465e+4, + -0.10233527482032116041e+4, + -0.34716295468782395801e+4, + 0.57935725975007890156e+4, + -0.46623475757148298726e+4, + 0.82604901109837294371e+3, + 0.34341606469828357149e+4, + -0.56307503973460034103e+4, + 0.45169512112906513721e+4, + -0.75494365568317334692e+3, + -0.34854404332919166336e+4, + 0.58030603590199707469e+4, + -0.49061725317428936251e+4, + 0.13228095209431626245e+4, + 0.29538979473971139669e+4, + -0.5593650411531672944e+4, + 0.52305926249673984785e+4, + -0.21613027639057104352e+4, + -0.18695604082796869534e+4, + 0.46871714858395953343e+4, + -0.48703635967000154778e+4, + 0.24923107417597220774e+4, + 0.10052408767281883684e+4, + -0.36549184732063827141e+4, + 0.40688169120522511548e+4, + -0.21581713587558342624e+4, + -0.87240137461853601053e+3, + 0.32516049350681714714e+4, + -0.36351093607031698411e+4, + 0.1842293847956398622e+4, + 0.10799229737353134624e+4, + -0.34570503344758985804e+4, + 0.39272379721716606582e+4, + -0.21857594554673369203e+4, + -0.84888139644752550339e+3, + 0.35415808350685183541e+4, + -0.44264387780753659172e+4, + 0.30016386668649374769e+4, + -0.31161963208919273711e+4, + 0.16754961903283062838e+4, + 0.44139584255952368039e+4, + -0.7775243391763564432e+4, + 0.73854614849552781379e+4, + -0.25264976363248683811e+4, + -0.32505225171684728593e+4, + 0.76332298201730709479e+4, + -0.73232769960573032222e+4, + 0.34338072383592179904e+4, + 0.26600194652027494158e+4, + -0.65894224781588500264e+4, + 0.70178356712387449079e+4, + -0.29030708997441124666e+4, + -0.23933426280910121022e+4, + 0.6576111875171110114e+4, + -0.62716241526518906539e+4, + 0.25256153494149111793e+4, + 0.32914626574093590534e+4, + -0.6795043292670909068e+4, + 0.66885146842583635589e+4, + -0.20747795198999606328e+4, + -0.34867757847387069887e+4, + 0.75653156440809052583e+4, + -0.68275451284143837256e+4, + 0.25364788073464824265e+4, + 0.36596000287477622805e+4, + -0.72225071039824852051e+4, + 0.69336814880737911153e+4, + -0.21619741575330222076e+4, + -0.32818655368744089174e+4, + 0.694395467810421178e+4, + -0.57770098181066132383e+4, + 0.14807899014305176024e+4, + 0.40161329080463774517e+4, + -0.6327341332525155849e+4, + 0.48333178126158827581e+4, + 0.34297264825222492846e+3, + -0.49561948016179512706e+4, + 0.67828363990041707439e+4, + -0.36497579949313271754e+4, + -0.16757941531780159039e+4, + 0.66307894219248119043e+4, + -0.70624909080243132848e+4, + 0.33752959264006226476e+4, + 0.30675179965233851362e+4, + -0.73246826496852227137e+4, + 0.7471537971318957716e+4, + -0.24704913125776602101e+4, + -0.36635204991936502665e+4, + 0.78272137555896842969e+4, + -0.64507637462812099329e+4, + 0.1250913566153249576e+4, + 0.51224716490439050176e+4, + -0.76897596953287893484e+4, + 0.51170332159165664052e+4, + 0.94028400225630582554e+3, + -0.75238987301888082584e+4, + 0.67902958846798301238e+4, + -0.65639663984168055322e+4, + -0.8648627866214261303e+4, + -0.31768935417986517677e+3, + -0.23666426268072085804e+5, + -0.20407371051806141622e+5, + -0.28167637284664117033e+5, + -0.53509266998458719172e+5, + -0.44370530316044321808e+5, + -0.5743409222032262187e+5, + -0.56581370569301623618e+5, + -0.25422282223472320766e+5, + -0.16091095117714359731e+5, + 0.16661222168959040573e+5, + 0.44243544521786236146e+5, + 0.33137347566635915427e+5, + 0.28020154810732514306e+5, + 0.11969853877797165254e+1, + -0.37198856034641736187e+5, + -0.30474510748533637525e+5, + -0.18641420882671787695e+5, + 0.47093995631860407229e+4, + 0.40482385952331409499e+5, + 0.23857447540227636637e+5, + -0.37507243004372321593e+4, + -0.18647405784603866778e+5, + -0.357001811697823141e+5, + -0.26269143943226840747e+4, + 0.30994194067515294591e+5, + 0.18584660979788564873e+5, + 0.49157174257926062637e+4, + -0.22524226462580205407e+5, + -0.30907734575729831704e+5, + 0.13239194252820152542e+5, + 0.27296957033580241841e+5, + 0.73659603353740121747e+4, + -0.6859737195274973601e+4, + -0.29766206632865458232e+5, + -0.56835905140364648105e+4, + 0.34096240231983327249e+5, + 0.76589004004431462818e+4, + -0.13135728964475631074e+5, + -0.16455061420125068253e+5, + -0.90424449547567382979e+4, + 0.29316098720002337359e+5, + 0.13412532244632608126e+5, + -0.27019365514948251075e+5, + -0.1135450326613854304e+5, + 0.10612471464925391047e+5, + 0.15617332398516526155e+5, + 0.49530598043797608625e+4, + -0.24222953659018407052e+5, + -0.10674660437472854028e+5, + 0.29409497815389684547e+5, + 0.63609444796478001081e+4, + -0.2207354643443642999e+5, + -0.45410659120103182431e+4, + 0.66261940325186706104e+4, + 0.16166085876142455163e+5, + -0.21843829890584893292e+4, + -0.28517272583525089431e+5, + 0.11782690528975928828e+5, + 0.25006905174685565726e+5, + -0.16546902274650830805e+5, + -0.13320365090980922105e+5, + 0.80520892753491434632e+4, + 0.10212153431865041057e+5, + 0.25662836891542583544e+4, + -0.17786940864561336639e+5, + -0.38349194175961488327e+4, + 0.2662974634977396272e+5, + -0.5578937027580926042e+4, + -0.25856977555875477265e+5, + 0.15771551913089435402e+5, + 0.14436580361267249828e+5, + -0.14446774898519339331e+5, + -0.58076178563953199045e+4, + 0.49665093781991208743e+4, + 0.95968820001190797484e+4, + -0.18205520927902416588e+4, + -0.18432795063559493428e+5, + 0.10711611630235998746e+5, + 0.19280205957023226802e+5, + -0.23592047644564234361e+5, + -0.71756446208677225513e+4, + 0.26759290499067625205e+5, + -0.80127013735332047872e+4, + -0.16828985647811623494e+5, + 0.12400978397629629399e+5, + 0.64125860898473165435e+4, + -0.73158903677863090707e+4, + -0.486278114101826759e+4, + 0.34677876425993063094e+4, + 0.93503823822340964398e+4, + -0.67812433246375567251e+4, + -0.12626720802201745755e+5, + 0.17536666670162812807e+5, + 0.54742928920734502753e+4, + -0.25724849144218514994e+5, + 0.12303461988920851581e+5, + 0.18430983006467598898e+5, + -0.24887929254405335087e+5, + -0.53276405041866280499e+3, + 0.22241612198230432114e+5, + -0.12820941619075201743e+5, + -0.11136073962869571915e+5, + 0.16719122946088220488e+5, + -0.41890168434998219027e+3, + -0.12527312210187901655e+5, + 0.71022135659607301932e+4, + 0.40210212757191297896e+4, + -0.45436059843733191883e+4, + -0.13848102340801974606e+4, + 0.26448570207629325068e+3, + 0.65439848805347710368e+4, + -0.50503680146681499536e+4, + -0.69033732278771321944e+4, + 0.12901074584836032955e+5, + -0.15992301791074246466e+4, + -0.13811569485617401369e+5, + 0.11475864604344584222e+5, + 0.79698407533740464714e+4, + -0.1924348201252348008e+5, + 0.52856432288125160994e+4, + 0.1824924981394443239e+5, + -0.21218373730780909682e+5, + -0.20056916507881983307e+4, + 0.23725654880538753787e+5, + -0.17019309262696566293e+5, + -0.10037186704364617981e+5, + 0.23918797145468517556e+5, + -0.73991388463128832882e+4, + -0.18792589126789029251e+5, + 0.21658281757589400513e+5, + 0.30508230074465300277e+4, + -0.25334340010794345289e+5, + 0.17729564321411515266e+5, + 0.10999425909573725221e+5, + -0.26477018411371042021e+5, + 0.10493661222522334356e+5, + 0.17082221051561864442e+5, + -0.22710809923969056399e+5, + 0.11846792992850680548e+4, + 0.22137610614850862476e+5, + -0.17817907803742811666e+5, + -0.92484116330892302358e+4, + 0.27028429266813909635e+5, + -0.1079849641863828947e+5, + -0.18741934773218694318e+5, + 0.2641452717352586842e+5, + -0.80844375401815273108e+3, + -0.24061408016145305737e+5, + 0.17743209932840047259e+5, + 0.12932083368167872322e+5, + -0.25588092951231821644e+5, + 0.37615701205106711313e+4, + 0.25983260298050801794e+5, + -0.21842099466378509533e+5, + -0.10978464272658591653e+5, + 0.31104906828389437578e+5, + -0.95982735372550941975e+4, + -0.23704257940879757371e+5, + 0.24804537836627889192e+5, + 0.10082362540953192365e+5, + -0.31313595172085806553e+5, + 0.91241335784262410016e+4, + 0.29115088997020990064e+5, + -0.28464597105435797857e+5, + -0.10935780133608364849e+5, + 0.37129211231275490718e+5, + -0.11809859727841421773e+5, + -0.28592288071403290814e+5, + 0.28385803993977559003e+5, + 0.13717918586297149886e+5, + -0.35428594636871217517e+5, + 0.5887651574931696814e+4, + 0.34046454249834918301e+5, + -0.24641332925704769877e+5, + -0.18926270310314099333e+5, + 0.33929567673952136829e+5, + 0.19053041342788417296e+4, + -0.31123962886096873262e+5, + 0.1009366132692580868e+5, + 0.28430860387621214613e+5, + -0.20493723988265792286e+5, + -0.21727152651002572384e+5, + 0.32179680577521681698e+5, + 0.91712690687143058312e+4, + -0.35619294688451685943e+5, + 0.46385682741499504118e+4, + 0.35840311332040146226e+5, + -0.16798802992712975538e+5, + -0.32155704245315053413e+5, + 0.32269204050421602005e+5, + 0.20357240591661593498e+5, + -0.39636443212414204027e+5, + -0.38393832479301431704e+4, + 0.37665258157393167494e+5, + -0.42993441737091643517e+4, + -0.34831000596366931859e+5, + 0.10603639090616183239e+5, + 0.35926887912527723529e+5, + -0.18873079992123119155e+5, + -0.3260382908451176263e+5, + 0.26957648819727957743e+5, + 0.29009513030507878284e+5, + -0.32236862068504786293e+5, + -0.24797720802967898635e+5, + 0.39924202244368978427e+5, + 0.17502874762568928418e+5, + -0.41565423666263683117e+5, + -0.95851034781797679898e+4, + 0.38069598856841985253e+5, + 0.11800028345209833788e+5, + -0.38651117329845954373e+5, + -0.14241569296620118621e+5, + 0.45784462286338595732e+5, + 0.11386747080965122223e+5, + -0.46313233214345469605e+5, + -0.92085159362501308351e+4, + 0.44111261602736085479e+5, + 0.13855156141511683018e+5, + -0.42629410166711299098e+5, + -0.18291834359341602976e+5, + 0.40826493279958471248e+5, + 0.26291437762997418758e+5, + -0.37012502430802553135e+5, + -0.35419318454847576504e+5, + 0.35615210642726975493e+5, + 0.41063765664002115955e+5, + -0.26800841035165733047e+5, + -0.43131273050578041875e+5, + 0.91937200511511000514e+4, + 0.50643874715243335231e+5, + 0.96739940571685147006e+4, + -0.54284574227981007425e+5, + -0.22790034160184692155e+5, + 0.44143061283554743568e+5, + 0.39201163339265156537e+5, + -0.20933715525739236909e+5, + -0.54736457887658718391e+5, + -0.38121616149844471693e+4, + 0.56886507669821694435e+5, + 0.31274613946423003654e+5, + -0.37153154046343290247e+5, + -0.53877009645777929109e+5, + 0.32592121729698596937e+4, + 0.57850228401254098571e+5, + 0.38078026425845586346e+5, + -0.32967383648528382764e+5, + -0.63842206395997010986e+5, + -0.11810593980716534134e+5, + 0.50686085700743140478e+5, + 0.58220525813970787567e+5, + 0.17865101439707009376e+4, + -0.64963944884107731923e+5, + -0.54557702236476063263e+5, + 0.90748873741502829944e+4, + 0.61957575708866868808e+5, + 0.6595890740904584527e+5, + -0.10896457861112610317e+4, + -0.64132938311814315966e+5, + -0.69884020325572870206e+5, + -0.29338732791549828107e+5, + 0.45236273484139950597e+5, + 0.85068719961315902765e+5, + 0.64223450464260735316e+5, + 0.11918182851803709127e+5, + -0.57662848772573765018e+5, + -0.94606418462771864142e+5, + -0.82712205612576712156e+5, + -0.41527263431430314085e+5, + 0.23270789514874326414e+5, + 0.80416672663419274613e+5, + 0.11463141322765973746e+6, + 0.12892440762065628951e+6, + 0.12061130217956310662e+6, + 0.99820703834788000677e+5, + 0.763529841718031239e+5, + 0.53826302740072875167e+5, + 0.33814020493582640484e+5, + 0.21503229563138389494e+5, + 0.12949604865603218059e+5, + 0.4997874941524474707e+4, + 0.48145974208157640533e+4, + 0.16029202200620457006e+4, + -0.84669887535164389192e+3, + 0.28638699540139550663e+4, + -0.16998208885993315107e+4, + -0.10312735893639862184e+3, + 0.23790696806158289291e+4, + -0.33209873051515119187e+4, + 0.23314539411887358256e+4, + 0.20435282813983991446e+3, + -0.28350032205260008595e+4, + 0.39714755083545223897e+4, + -0.28462455304413606427e+4, + 0.12884961921632950066e+2, + 0.29274570363542320592e+4, + -0.42726368261866464309e+4, + 0.3212524756087843798e+4, + -0.33619217512778459422e+3, + -0.27191084211299321396e+4, + 0.42053421979494387415e+4, + -0.32948458704073386798e+4, + 0.53709654106892685377e+3, + 0.24598698081173420178e+4, + -0.39849334029911069592e+4, + 0.31943189401058211843e+4, + -0.59120722148219135761e+3, + -0.23038931774819952807e+4, + 0.38307440932737986259e+4, + -0.31491124837037350517e+4, + 0.68275470241654568326e+3, + 0.2141256491767089301e+4, + -0.37339546692736203113e+4, + 0.32289316135670810581e+4, + -0.95482827750333694894e+3, + -0.17947515373940448171e+4, + 0.34994583678651656555e+4, + -0.32673148323264567807e+4, + 0.12922474547949818771e+4, + 0.12862943874842387686e+4, + -0.30526030400153836126e+4, + 0.30904934764653139609e+4, + -0.14673901018958092664e+4, + -0.85354411633878123666e+3, + 0.25716245793182602029e+4, + -0.27785544340660467242e+4, + 0.14309392192292309574e+4, + 0.65660499093147950589e+3, + -0.22956742287717852378e+4, + 0.25836245693660862344e+4, + -0.13934126126867472522e+4, + -0.58277539699239127913e+3, + 0.22292943860853929436e+4, + -0.26298837258811900028e+4, + 0.1562577996952572903e+4, + 0.38571886043745899997e+3, + -0.21490982356145955237e+4, + 0.27637520009600980302e+4, + -0.18915407363599690598e+4, + 0.1804916541301366351e+4, + -0.83502891567699862208e+3, + -0.27275249338156104386e+4, + 0.45493870973247258007e+4, + -0.41355831984217929858e+4, + 0.11552329109735226211e+4, + 0.21927894279773195194e+4, + -0.45701213609612213986e+4, + 0.40986880117320561112e+4, + -0.15938039237644288733e+4, + -0.20449906011124503493e+4, + 0.41892984067880752264e+4, + -0.41459954974257179856e+4, + 0.14158943953735270043e+4, + 0.18590813747851889275e+4, + -0.42826732498604505963e+4, + 0.38792504564953073896e+4, + -0.14073426971297330965e+4, + -0.22109156589251774676e+4, + 0.42837642824885306254e+4, + -0.40831150995433617936e+4, + 0.11565332079735617299e+4, + 0.22460937232860028416e+4, + -0.46321027659679511999e+4, + 0.40250341283262350771e+4, + -0.12945667588039250404e+4, + -0.24757891421828053353e+4, + 0.44987783641283658653e+4, + -0.40932187142333132215e+4, + 0.98121830828383667722e+3, + 0.24065261488540318169e+4, + -0.45300856227307840527e+4, + 0.35675018761475985229e+4, + -0.66477686100508810796e+3, + -0.28782405204559559024e+4, + 0.42988254845531273531e+4, + -0.32162180110645854256e+4, + -0.21998508225096543356e+3, + 0.32966743721553325486e+4, + -0.45495828060661842756e+4, + 0.26016809310075132089e+4, + 0.82721009455176590563e+3, + -0.40852047064860780665e+4, + 0.4531877696218132769e+4, + -0.23449951543933311768e+4, + -0.16524369272067963266e+4, + 0.43900831590550324108e+4, + -0.46129599029678056468e+4, + 0.16191270949881543402e+4, + 0.2158568268987322881e+4, + -0.47916427715842310135e+4, + 0.40309514593475823858e+4, + -0.86313094539814971995e+3, + -0.31163575279836609297e+4, + 0.48306811537207913716e+4, + -0.33906219865514708545e+4, + -0.27516523951316912644e+3, + 0.43979017834328788012e+4, + -0.41712177985059715866e+4, + 0.42778382635337984539e+4, + 0.48290884657061560574e+4, + 0.64143756714429844124e+3, + 0.14145444905589178234e+5, + 0.12433350340088911253e+5, + 0.17465613622146247508e+5, + 0.32133395451240034163e+5, + 0.27531387327929340245e+5, + 0.34693998765850745258e+5, + 0.34519899393208870606e+5, + 0.1573915269444606929e+5, + 0.93963107181225368549e+4, + -0.97413128232210019632e+4, + -0.27233846154547205515e+5, + -0.20159852911538724584e+5, + -0.16906746776655701979e+5, + -0.28816986157066651231e+3, + 0.22948379592903282173e+5, + 0.18413445921930371696e+5, + 0.11372440010573183827e+5, + -0.27635558813847273996e+4, + -0.24821623399631440407e+5, + -0.14435525508339713269e+5, + 0.22607657778958182462e+4, + 0.11323070393650876213e+5, + 0.21815676287705624418e+5, + 0.15941871598671073116e+4, + -0.18965750082096601545e+5, + -0.11194135829486145667e+5, + -0.31235800506815276094e+4, + 0.13767604524174674225e+5, + 0.18942383000969290151e+5, + -0.83091460876304736303e+4, + -0.16337298561291609076e+5, + -0.47359684893732855926e+4, + 0.42597288732048491511e+4, + 0.18289391881743391423e+5, + 0.31198286216512228748e+4, + -0.20349792485769965424e+5, + -0.50363279156949365643e+4, + 0.81693097581787196759e+4, + 0.10141966386478032291e+5, + 0.51529133643742470667e+4, + -0.17385747090632092295e+5, + -0.86140326873362209881e+4, + 0.16707827095706408727e+5, + 0.6963406313882905124e+4, + -0.67727527713803783627e+4, + -0.90686129060802340973e+4, + -0.34519444754615647071e+4, + 0.15026379731905051813e+5, + 0.64998629004357908343e+4, + -0.18163603393775356381e+5, + -0.34955100345143991944e+4, + 0.13075585423268052182e+5, + 0.30050502214695698058e+4, + -0.4056795512572242842e+4, + -0.10048284825931143132e+5, + 0.16531496075055556503e+4, + 0.17059067474596740794e+5, + -0.69769889219011956811e+4, + -0.15262290943590978713e+5, + 0.99252044989680252911e+4, + 0.83894916505304536258e+4, + -0.51846784747498268189e+4, + -0.60392743273195428628e+4, + -0.16032009805529123696e+4, + 0.10736040791001219986e+5, + 0.25341362733063219821e+4, + -0.16442007374812921626e+5, + 0.35535139500798459267e+4, + 0.15703021333992337532e+5, + -0.96488567354914266616e+4, + -0.87071818959015417931e+4, + 0.87047116929874100606e+4, + 0.36112403373843676491e+4, + -0.3057180083847079004e+4, + -0.58473507777978466038e+4, + 0.11065342448014002912e+4, + 0.11262637809730173103e+5, + -0.65847532795249289848e+4, + -0.11689574914554301358e+5, + 0.14348882053330997223e+5, + 0.43372759532635345749e+4, + -0.16193318419244553297e+5, + 0.4706618785687845957e+4, + 0.10441675998281973079e+5, + -0.76818397324103834762e+4, + -0.39033246078797774317e+4, + 0.45916478592438688793e+4, + 0.27223189194020665127e+4, + -0.18358702145144118276e+4, + -0.59204135677804842999e+4, + 0.42167160291660120492e+4, + 0.77874847648867871612e+4, + -0.10932252905554420067e+5, + -0.30199856740915001865e+4, + 0.15397256629976596741e+5, + -0.73508309256285911033e+4, + -0.11193383617714353022e+5, + 0.14950460520028478641e+5, + 0.64706713991394860841e+3, + -0.13868115997275013797e+5, + 0.80015949791737275518e+4, + 0.67957212564323945116e+4, + -0.10395709453697927529e+5, + 0.58722592619709166684e+3, + 0.72947166660236789539e+4, + -0.41041130075790861156e+4, + -0.24730007631170105924e+4, + 0.25720995616875111409e+4, + 0.11985725706130979233e+4, + -0.55245500373623576706e+3, + -0.36989848335642827806e+4, + 0.29969209885206178114e+4, + 0.40432455215347681587e+4, + -0.75005646649287964465e+4, + 0.53093220963398857748e+3, + 0.87939949338737696962e+4, + -0.71725959713645643205e+4, + -0.49431240933073931956e+4, + 0.12054938898234511726e+5, + -0.36834870037461255379e+4, + -0.10677035292133468829e+5, + 0.12650049978130111413e+5, + 0.12477609527650470227e+4, + -0.14220181982729176525e+5, + 0.99461846403863000887e+4, + 0.65893446149270803289e+4, + -0.14938172738704990479e+5, + 0.46387821982848990956e+4, + 0.11595595401003200095e+5, + -0.13560896487254349267e+5, + -0.1405873296179487852e+4, + 0.15049042963489187969e+5, + -0.10607101798839037656e+5, + -0.66455406739239642775e+4, + 0.15845188177139914842e+5, + -0.59730624719715706306e+4, + -0.10816598101003064585e+5, + 0.14087691070174294509e+5, + -0.57066498728876922542e+3, + -0.13905211977117176502e+5, + 0.11259351204885240804e+5, + 0.53079786830034418017e+4, + -0.16224718511013115858e+5, + 0.66458765485198318856e+4, + 0.1101320622861801894e+5, + -0.15543640159589524046e+5, + 0.16771234202139683589e+3, + 0.14796382201697339042e+5, + -0.10955722592898357107e+5, + -0.77129139558158294676e+4, + 0.15914577763216691892e+5, + -0.32980133985766988189e+4, + -0.1475910378573730668e+5, + 0.1328769450986285301e+5, + 0.55540397348041051373e+4, + -0.17832042110534934181e+5, + 0.60047812712229069803e+4, + 0.1346803569465829969e+5, + -0.14928755779977860584e+5, + -0.48395130769683510152e+4, + 0.17878911093484242883e+5, + -0.63792092240891215624e+4, + -0.15238827808919875679e+5, + 0.15915554175854449568e+5, + 0.52664747298250495078e+4, + -0.1991283811821315976e+5, + 0.63563698195284423491e+4, + 0.15673309941826886643e+5, + -0.15494163131339149913e+5, + -0.77018461909142442892e+4, + 0.1948403562046726438e+5, + -0.30599816238403232092e+4, + -0.18680120077869018132e+5, + 0.12833486990809908093e+5, + 0.11342159983457966518e+5, + -0.18652946442295258748e+5, + -0.24878809380854086157e+4, + 0.18779278776404160453e+5, + -0.57589831337614432414e+4, + -0.17037014768522680242e+5, + 0.12601858270942677336e+5, + 0.12022644657496048239e+5, + -0.18600036782100451092e+5, + -0.48660829582543483411e+4, + 0.20417025576925876521e+5, + -0.3220044256942573611e+4, + -0.2010291676557507526e+5, + 0.1018799298465722859e+5, + 0.17005421575798722188e+5, + -0.17463595649667335238e+5, + -0.1124032982172228003e+5, + 0.21199307361920538824e+5, + 0.34705312121488877892e+4, + -0.217490127888625575e+5, + 0.17812828088989592743e+4, + 0.20793607143470071605e+5, + -0.66178481242491088778e+4, + -0.20510868465250896406e+5, + 0.1120123171580260896e+5, + 0.18250649962003531982e+5, + -0.15553935379551741789e+5, + -0.16060007692486844462e+5, + 0.18379548737858884124e+5, + 0.13292597886637075135e+5, + -0.2173698710443557502e+5, + -0.10147235636536181119e+5, + 0.22761589581966432888e+5, + 0.68073999881846511926e+4, + -0.22595841085390282387e+5, + -0.67364078977064737046e+4, + 0.22965707813657929364e+5, + 0.67579609206909626664e+4, + -0.2524948882046216022e+5, + -0.62147485555609464427e+4, + 0.25462535254021120636e+5, + 0.58504696380515561032e+4, + -0.2508418986261936152e+5, + -0.81387003841867899609e+4, + 0.24324252598385872261e+5, + 0.10619829682110810609e+5, + -0.23621106872188120178e+5, + -0.14703137535928106445e+5, + 0.21425316685839145066e+5, + 0.191522718535666354e+5, + -0.19440179807206717669e+5, + -0.23225174714006498107e+5, + 0.14284718571054008862e+5, + 0.25623603960679742158e+5, + -0.58514843409487402823e+4, + -0.29062853801317451143e+5, + -0.43542497304180351421e+4, + 0.29640631615242728003e+5, + 0.13282978957902867478e+5, + -0.24436553649316796509e+5, + -0.23288003355984081281e+5, + 0.1269680372485506814e+5, + 0.30903249750862669316e+5, + 0.16222260402336482912e+4, + -0.31538065714250697056e+5, + -0.18090273879195199697e+5, + 0.20962913511650978762e+5, + 0.30809075893384957453e+5, + -0.19420607521714687209e+4, + -0.32997254454101981537e+5, + -0.2129097900797803959e+5, + 0.18709704947935373639e+5, + 0.35659791566396488633e+5, + 0.74494104606091605092e+4, + -0.29184307062964835495e+5, + -0.33254396944857908238e+5, + -0.60530232281901483304e+2, + 0.35708440360205924662e+5, + 0.31462055079874604417e+5, + -0.47318526503235125347e+4, + -0.36273479033313582477e+5, + -0.36159925603734183824e+5, + 0.96158825326879920681e+2, + 0.3585109776924950711e+5, + 0.40786467439556698082e+5, + 0.15477436239829110491e+5, + -0.252011309983799365e+5, + -0.47721675719382554234e+5, + -0.37432732114654194447e+5, + -0.58171882142397407733e+4, + 0.32361470102869909169e+5, + 0.53219718180140174809e+5, + 0.47614992666973215819e+5, + 0.22931582027983917214e+5, + -0.13042877469649407431e+5, + -0.45300473490049713291e+5, + -0.65339987847497817711e+5, + -0.72863656151817704085e+5, + -0.68270079679412199766e+5, + -0.56749849144698448072e+5, + -0.43214928115481794521e+5, + -0.30319576421141555329e+5, + -0.1944650424961841054e+5, + -0.12061371113081027943e+5, + -0.7124580293810279727e+4, + -0.33067092899818744627e+4, + -0.23047086439793633872e+4, + -0.94416710135825110228e+3, + 0.1732893717073346096e+2, + -0.89810132966849846525e+3, + 0.43655747322722038462e+3, + -0.88377289125244207213e+1, + -0.63737680895002188208e+3, + 0.89473749860159239233e+3, + -0.64808204090465540048e+3, + -0.21255572054698465223e+2, + 0.72195115247065837139e+3, + -0.10328017051027525213e+4, + 0.74689126844035195063e+3, + -0.87953398788023218202e+1, + -0.75857667456062495148e+3, + 0.11053844770749226427e+4, + -0.81846920604301669755e+3, + 0.5617541899801491212e+2, + 0.74589709229876700647e+3, + -0.11243639969563776049e+4, + 0.86270616150105286124e+3, + -0.11180679177878239727e+3, + -0.69574938301308816335e+3, + 0.11016530710042877672e+4, + -0.88088025613860622798e+3, + 0.16988287459825437509e+3, + 0.6220770181637759606e+3, + -0.10475811581722630308e+4, + 0.87832008179855381513e+3, + -0.22425747149476586628e+3, + -0.53493184207804074504e+3, + 0.97423649849699620518e+3, + -0.85923544350814381687e+3, + 0.2730752889069565299e+3, + 0.44404043348427785531e+3, + -0.89041065805554978851e+3, + 0.83017508660478927141e+3, + -0.31467318753171798562e+3, + -0.35474790367571193883e+3, + 0.80478941985536482662e+3, + -0.7959485358885651749e+3, + 0.35063636947270089195e+3, + 0.27142175665707225107e+3, + -0.72258793556903083299e+3, + 0.76226507092261567777e+3, + -0.38241727360541273129e+3, + -0.19497566570782285567e+3, + 0.64824186006169577468e+3, + -0.73290713103392613448e+3, + 0.41327817295056678404e+3, + 0.12557817759751161191e+3, + -0.5834125497224430319e+3, + 0.7115795436044188591e+3, + -0.4459529717786494416e+3, + -0.61332912258376765635e+2, + 0.52887729811843144034e+3, + -0.70028373223563380634e+3, + 0.48366037576757952365e+3, + -0.42771030799169858483e+3, + 0.16562118564186701519e+3, + 0.68880510874155652346e+3, + -0.10914367861593680118e+4, + 0.94745333052463502099e+3, + -0.19782546472945455207e+3, + -0.60012584088341270672e+3, + 0.11279089560098766469e+4, + -0.94559610641986409973e+3, + 0.28781509506461634373e+3, + 0.60666838161453904377e+3, + -0.10880160548826106606e+4, + 0.10098249446277790184e+4, + -0.27741860445496007515e+3, + -0.55276538467262389531e+3, + 0.11319511015465848232e+4, + -0.98357989069456982634e+3, + 0.32388314106609618648e+3, + 0.59754520663743971909e+3, + -0.110322384276791513e+4, + 0.10245789820193126616e+4, + -0.26880154555612307377e+3, + -0.5842139952788353412e+3, + 0.11591988254395191689e+4, + -0.97416813185343369241e+3, + 0.26843360086611357929e+3, + 0.67023774052196267803e+3, + -0.11408284932550711801e+4, + 0.98724578595148602744e+3, + -0.16391740144375549448e+3, + -0.6973875888817658506e+3, + 0.12020887751977038533e+4, + -0.90278720374622082545e+3, + 0.110888875098300133e+3, + 0.82061828467799864484e+3, + -0.11806709649416343382e+4, + 0.8729745931273170072e+3, + 0.48906638591600028576e+2, + -0.87884649920353854213e+3, + 0.12264162383458151453e+4, + -0.73508125386010044622e+3, + -0.15856632712808468e+3, + 0.1022568210067097084e+4, + -0.11731955796353829555e+4, + 0.64008052742264442259e+3, + 0.37289992725134192142e+3, + -0.10855415505833977932e+4, + 0.11667165514608577723e+4, + -0.42626211505794879031e+3, + -0.52999211095160592322e+3, + 0.12112798961967412197e+4, + -0.10387700349762051246e+4, + 0.24599528836149573863e+3, + 0.77231543107594507092e+3, + -0.1237193216754039895e+4, + 0.90896815777382380475e+3, + -0.13721602648853543638e+1, + -0.10514315528727020137e+4, + 0.10425893710379543791e+4, + -0.11236914859835296738e+4, + -0.11148614888806243926e+4, + -0.25633114186713498839e+3, + -0.34747842017841899178e+4, + -0.31093677198061400304e+4, + -0.44279036832441597653e+4, + -0.79318275073121612877e+4, + -0.69855447777974013661e+4, + -0.86079960682804594398e+4, + -0.86349010647738305124e+4, + -0.39890748921419599355e+4, + -0.22591530887236585841e+4, + 0.2345813575612664863e+4, + 0.68650580709344794741e+4, + 0.50334810174501781148e+4, + 0.41874445781126551083e+4, + 0.13588086979930054099e+3, + -0.57973836518474772674e+4, + -0.45684777938119723331e+4, + -0.28445854032918455232e+4, + 0.66702092347178745513e+3, + 0.62372971478149465838e+4, + 0.35867635067523824546e+4, + -0.56151906313232996126e+3, + -0.28191217706760417059e+4, + -0.54679948279140498926e+4, + -0.39608272148144612856e+3, + 0.47582094302764153326e+4, + 0.27670938817403889516e+4, + 0.81234289594320068773e+3, + -0.34546655323814588883e+4, + -0.47539517739134089425e+4, + 0.21263817863822018808e+4, + 0.4020203391982328867e+4, + 0.12382030383883848117e+4, + -0.10845101033185565029e+4, + -0.46001560783821933001e+4, + -0.70994700478501249563e+3, + 0.4998564613481637025e+4, + 0.13342971017477605074e+4, + -0.20739489599183602877e+4, + -0.2561936176253980193e+4, + -0.12104466466534220217e+4, + 0.4244188542976462486e+4, + 0.22436245528888061926e+4, + -0.42216672489628454059e+4, + -0.17581719373884427569e+4, + 0.17668021642680430432e+4, + 0.21638910215518581026e+4, + 0.95899509298405951085e+3, + -0.38112863364625327449e+4, + -0.16297387918108011036e+4, + 0.46017663140998511153e+4, + 0.78051873413654357137e+3, + -0.31769379521876294348e+4, + -0.80974426358083576361e+3, + 0.10210154773765092386e+4, + 0.25560352338886632424e+4, + -0.48901381673916364434e+3, + -0.41857852034255211038e+4, + 0.16896087805468064289e+4, + 0.38295660860926063833e+4, + -0.2453970288936156976e+4, + -0.21518036410761433217e+4, + 0.13557683404932558915e+4, + 0.14663823759467657055e+4, + 0.41557634314969322986e+3, + -0.26694681623657334057e+4, + -0.66706842476542033182e+3, + 0.41476539897386837765e+4, + -0.91493494081816618291e+3, + -0.39169799502758087328e+4, + 0.24200578599658547319e+4, + 0.21603970773898590778e+4, + -0.21610827069747124369e+4, + -0.90936280951135063333e+3, + 0.76126196404883933155e+3, + 0.1469865628429067101e+4, + -0.28189518050540664262e+3, + -0.2819256482874624453e+4, + 0.16599282043602233898e+4, + 0.29036519998863877845e+4, + -0.3572619965234153824e+4, + -0.10854284761308722409e+4, + 0.40315221094124999581e+4, + -0.11449367703018674547e+4, + -0.26464301675344540854e+4, + 0.19465899003439892567e+4, + 0.9720484473046894891e+3, + -0.11713403980472257899e+4, + -0.63521289916618832194e+3, + 0.40644429443912304123e+3, + 0.15207679360973370422e+4, + -0.1066421065517668012e+4, + -0.19701878272426110925e+4, + 0.27865011085552232544e+4, + 0.68867823886773112463e+3, + -0.37931893998785772055e+4, + 0.18128070890835836053e+4, + 0.27812327342922735625e+4, + -0.36821520846027638072e+4, + -0.2377554686890603648e+3, + 0.35376393196424119196e+4, + -0.20403471829478960444e+4, + -0.17049262592331895121e+4, + 0.26505784402416720695e+4, + -0.22754681556895761219e+3, + -0.174108294061725951e+4, + 0.97040983037147952928e+3, + 0.62682507262378567248e+3, + -0.60030786286501484028e+3, + -0.37999137684257408409e+3, + 0.22913369727023484757e+3, + 0.85437670461738127869e+3, + -0.72415448023211263262e+3, + -0.98111820462587638758e+3, + 0.18000912959760726153e+4, + -0.37452406956516043124e+2, + -0.22814827157989893749e+4, + 0.183522863318955865e+4, + 0.12495387394564822898e+4, + -0.30791472159392733374e+4, + 0.1016051884053193703e+4, + 0.25766659704961070929e+4, + -0.31041613541138290202e+4, + -0.3158372763270342034e+3, + 0.35028397397601670491e+4, + -0.23957100869866071662e+4, + -0.17459869170330762245e+4, + 0.38074279450247258865e+4, + -0.11818446254955706536e+4, + -0.29351985399882105412e+4, + 0.34728173731075135038e+4, + 0.25058375280278286823e+3, + -0.36773593254474594687e+4, + 0.26117884629105351451e+4, + 0.16427880857324112185e+4, + -0.38903459707634692677e+4, + 0.13940285639077360429e+4, + 0.27979716635464105821e+4, + -0.35784396978153431519e+4, + 0.11791243807792373843e+3, + 0.35569337738698673093e+4, + -0.29019342258258689071e+4, + -0.12477258802688018022e+4, + 0.39913211179305108089e+4, + -0.16609447277383787878e+4, + -0.26800607246436038622e+4, + 0.37772173937886577733e+4, + 0.27342776738059917818e+2, + -0.37330520330269828264e+4, + 0.27742242230089959776e+4, + 0.18905994163007399038e+4, + -0.40398113679254952331e+4, + 0.1022445499623106798e+4, + 0.34767511455105641289e+4, + -0.33151281186083920147e+4, + -0.11657826040178586027e+4, + 0.42338207407889540264e+4, + -0.15240847095896317569e+4, + -0.31828671424183557974e+4, + 0.36981084367177986678e+4, + 0.95882436591561963724e+3, + -0.42439224162723839981e+4, + 0.17673098621506364907e+4, + 0.33076387950337825714e+4, + -0.36886115434373873541e+4, + -0.10490562369479696372e+4, + 0.44453123599175996787e+4, + -0.14125330844955035445e+4, + -0.35955845110826294331e+4, + 0.35414548885553790569e+4, + 0.17819554066044665888e+4, + -0.44535732146513073531e+4, + 0.66542171964059070888e+3, + 0.42544300875805893156e+4, + -0.27643061631343234694e+4, + -0.28182010468472067259e+4, + 0.42855194129527653786e+4, + 0.87117127521547217839e+3, + -0.46584919218611803444e+4, + 0.13731558221882016824e+4, + 0.4186636880697313245e+4, + -0.3154553950072680891e+4, + -0.27827993383465768602e+4, + 0.446109929760446812e+4, + 0.1075053377610091502e+4, + -0.48587924352380805431e+4, + 0.89184538733232272989e+3, + 0.46754609207010526006e+4, + -0.25277211011407807746e+4, + -0.37519811235565521201e+4, + 0.39374938807610860749e+4, + 0.25863047432357493562e+4, + -0.47291980857895605368e+4, + -0.10830086650145303793e+4, + 0.51999854483749986684e+4, + -0.2825349115368867956e+3, + -0.51111481725899684534e+4, + 0.16819647996627286375e+4, + 0.48589647737402001439e+4, + -0.27396157631474261507e+4, + -0.42522148958153302374e+4, + 0.37248944691066208179e+4, + 0.36927460567101720699e+4, + -0.43437495050130755772e+4, + -0.29683879938476852658e+4, + 0.49231692669321364519e+4, + 0.24462136871149537001e+4, + -0.52031097217344522505e+4, + -0.18773236480395162289e+4, + 0.55229553233585620546e+4, + 0.15961132239649969051e+4, + -0.56188518638367913809e+4, + -0.1329555534613549753e+4, + 0.58131878920720992028e+4, + 0.13957946105420160166e+4, + -0.58159178579105264362e+4, + -0.1512355351126368987e+4, + 0.59146147975076592047e+4, + 0.19893627053817049273e+4, + -0.57776536449332534175e+4, + -0.25323442473170607627e+4, + 0.56443678423465071319e+4, + 0.34257518876541353166e+4, + -0.51327837910783082407e+4, + -0.4326387938286865392e+4, + 0.44374030036525336982e+4, + 0.54353589656424173882e+4, + -0.31553090669779589916e+4, + -0.62863467357513063689e+4, + 0.15116960321076633136e+4, + 0.69231218129405460786e+4, + 0.77332697305189537929e+3, + -0.67215819296919098633e+4, + -0.32192699060040627046e+4, + 0.56403079340294671056e+4, + 0.57005864321776844008e+4, + -0.31665756536763165059e+4, + -0.7236303132240857849e+4, + -0.28385513938681441459e+3, + 0.72893180044863902367e+4, + 0.43225948721279582969e+4, + -0.49084158723426062352e+4, + -0.73060889665372078525e+4, + 0.46995313532357278064e+3, + 0.78193607423298217327e+4, + 0.49389649995306717756e+4, + -0.43994981845838774461e+4, + -0.8287107216079826685e+4, + -0.19107270351709742044e+4, + 0.69671007434152816131e+4, + 0.78736372307073525008e+4, + -0.17844601773193497252e+3, + -0.81761313274937683673e+4, + -0.7514175641063015064e+4, + 0.10271903361850652345e+4, + 0.87767937679098085937e+4, + 0.82562653235409179615e+4, + 0.84164886371524673336e+2, + -0.83317570366871150327e+4, + -0.98444691429526537831e+4, + -0.34029900849524688056e+4, + 0.5840676590384246083e+4, + 0.11126737162856003124e+5, + 0.90242259679122144007e+4, + 0.11755556549321656803e+4, + -0.75526936406426057147e+4, + -0.12436441502175779533e+5, + -0.11362259029894736159e+5, + -0.52694939821322786884e+4, + 0.30413624104052596522e+4, + 0.10597197441630709363e+5, + 0.15461439781148190377e+5, + 0.17096398468211369618e+5, + 0.16053243190750043141e+5, + 0.13389526276376660462e+5, + 0.10154861746325599597e+5, + 0.7102901324039856263e+4, + 0.46253090670147948913e+4, + 0.2822887978278673927e+4, + 0.16227635537024671066e+4, + 0.88204132038604052468e+3, + 0.45468278005638234163e+3, + 0.22282920980640611219e+3, + 0.10402666510241434139e+3, + 0.46338385683976120788e+2, + 0.19722228197795441673e+2, + 0.80294895422381884487e+1, + 0.31300719491532200678e+1, + 0.11692432964658319161e+1, 0.41882383646603266181, 0.14393791457055654659, - 0.47482477169928316574e-01, - 0.15040537076728659541e-01, - 0.45760088051652646549e-02, - 0.13374972384578868913e-02, - 0.37561262886321030666e-03, - 0.10135823852451124631e-03, - 0.26281667680860620146e-04, - 0.65478602546289546254e-05, - 0.15672963272800902136e-05, - 0.36035966454146028358e-06, - 0.79571663016978683975e-07, - 0.16869317248410519274e-07, - 0.34324839401357286494e-08, - 0.67007227145109071229e-09, - 0.12544156410579374431e-09, + 0.47482477169928316574e-1, + 0.15040537076728659541e-1, + 0.45760088051652646549e-2, + 0.13374972384578868913e-2, + 0.37561262886321030666e-3, + 0.10135823852451124631e-3, + 0.26281667680860620146e-4, + 0.65478602546289546254e-5, + 0.15672963272800902136e-5, + 0.36035966454146028358e-6, + 0.79571663016978683975e-7, + 0.16869317248410519274e-7, + 0.34324839401357286494e-8, + 0.67007227145109071229e-9, + 0.12544156410579374431e-9, 0.22508468801723317543e-10, 0.38688810159281056036e-11, 0.63662073336441549986e-12, - 0.10021258520759436840e-12, + 0.1002125852075943684e-12, 0.15078803852218188215e-13, 0.21668867032879685022e-14, 0.29710731632424137614e-15, @@ -42261,7 +42263,7 @@ function ESERK4ConstantCache(zprev) 0.68337123628163133109e-20, 0.68859551137027912816e-21, 0.65540677669807047869e-22, - 0.58800857546743492140e-23, + 0.5880085754674349214e-23, 0.49609560867195281703e-24, 0.39257176978773155768e-25, 0.29051435583774851934e-26, @@ -42278,240 +42280,240 @@ function ESERK4ConstantCache(zprev) 0.29210777263200567568e-41, 0.57061136857920055842e-43, 0.88436669532091003622e-45, - 0.10196077492413166440e-46, - 0.77737734647534539190e-49, + 0.1019607749241316644e-46, + 0.7773773464753453919e-49, 0.29398864798248892658e-51, - -0.48478744007284371720e-01, - 0.90550839900968196905e-01, - -0.75348807128520406406e-01, - 0.57401249183621147476e-01, - -0.45277058119620489096e-01, - 0.41754625397638953088e-01, - -0.46510052030996160144e-01, - 0.53135010408416068206e-01, - -0.57071419369474331307e-01, - 0.54701465745079988490e-01, - -0.49054469796134460291e-01, - 0.43858020091698549092e-01, - -0.44554946443036001769e-01, - 0.50896628219074632749e-01, - -0.60581697888416441433e-01, - 0.66866530375660634955e-01, - -0.66462468307653496669e-01, - 0.57979858695249596179e-01, - -0.46699509681381944082e-01, - 0.37848379046482742705e-01, - -0.37332121170199315807e-01, - 0.44566024692185256251e-01, - -0.56604246437699193284e-01, - 0.66112970924570524378e-01, - -0.69271192002762368989e-01, - 0.63940658019756749231e-01, - -0.54226122618871518133e-01, - 0.43952755276997337863e-01, - -0.38084706936607981564e-01, - 0.36396584814957402831e-01, - -0.38021760973758707280e-01, - 0.38967494831346267958e-01, - -0.38697745550622754396e-01, - 0.36707148768026845453e-01, - -0.36079626265556628828e-01, - 0.37211865236558998304e-01, - -0.40720526269846610279e-01, - 0.43110904808925175347e-01, - -0.42753148102360166716e-01, - 0.37471884612597192166e-01, - -0.29856215455822815441e-01, - 0.22032212916165080235e-01, - -0.18020932964427353873e-01, - 0.17575648499021205573e-01, - -0.20331877132209824621e-01, - 0.22868150041050343962e-01, - -0.25105076481552846684e-01, - 0.26885546687290904494e-01, - -0.31424225160399534007e-01, - 0.38675538997925112961e-01, - -0.47912226838293645037e-01, - 0.53593082601024931433e-01, - -0.52307229431794173558e-01, - 0.41721187558268722773e-01, - -0.26676632882345140130e-01, - 0.13415399159821947070e-01, - -0.97540967408805238914e-02, - 0.16757602927161781292e-01, - -0.30713897119883801223e-01, - 0.43117215880851336718e-01, - -0.45621946125786440318e-01, - 0.40037360634990033781e-01, - -0.22967290705455813138e-01, - 0.19577020282700897946e-01, - -0.30396759776935154858e-02, - 0.31226817855438307459e-01, - -0.13572813947108363394e-03, - 0.56780540389892983355e-01, - 0.31142375320235657354e-01, - 0.55299286036995902449e-01, - 0.78290045315193484976e-01, - 0.42194910344812944225e-01, - 0.63814898335990646872e-01, - 0.22666234446572952610e-01, - -0.10536205546860809984e-01, - -0.26555015711516943844e-01, - -0.46794715078964994881e-01, - -0.51417131242458481710e-01, - 0.13053827495410881641e-02, - 0.28531734187246388101e-02, - 0.51409425304305388094e-01, - 0.29967876678961977849e-01, - 0.15183277699745076350e-01, - -0.31567351117274725092e-01, - -0.32912366835958405120e-01, - -0.23077305223927997019e-01, - 0.33985207242227975441e-02, - 0.49575715842956988300e-01, - 0.14399800735022675463e-01, - -0.30099336206169621279e-02, - -0.26295683462816514531e-01, - -0.35100230874962314032e-01, - 0.89896157830008337208e-02, - 0.46094360514969789921e-01, - -0.53406977206686247553e-02, - 0.13238159992177533919e-01, - -0.47700452302205167965e-01, - -0.11926686281052020777e-01, - 0.34464741325475584111e-01, - 0.15617339265573036700e-01, - -0.24096660043087586638e-04, - -0.21660522223727846775e-01, - -0.26531363292416620947e-01, - 0.24950711489380592023e-01, - 0.26273026064881979669e-01, - -0.42808511732723951437e-02, - -0.31694761661995904389e-01, - -0.19326050267744220891e-03, - 0.83659409894999200302e-02, - 0.28936296168733256773e-01, - -0.10492769613586762009e-01, - -0.31711073985446702750e-01, - 0.28572148068190554235e-02, - 0.34085947299998163584e-01, - -0.72357303209578307385e-02, - -0.99497513115418493440e-02, - -0.17362099551038030071e-01, - 0.10774896836180783422e-01, - 0.26737819165284868600e-01, - -0.92632596507365473626e-02, - -0.38500171172069483361e-01, - 0.28345460351318269021e-01, - 0.11051421377374753482e-01, - -0.61155422657009940457e-02, - -0.10666803291860616279e-01, - -0.10925345068595422246e-01, - 0.22848782694255991010e-01, - 0.13962989038349034321e-01, - -0.37660398771290376496e-01, - 0.70014237159817770129e-02, - 0.15808798732521601310e-01, - 0.11633906164214774873e-01, - -0.32689952977889027985e-01, - 0.53001698881727787871e-02, - 0.23663566786827218424e-01, - -0.17834284411570328760e-01, - 0.15065525303117591541e-01, - -0.37269695463005542146e-01, - 0.37665959661922356061e-01, - 0.67226853229726780611e-02, - -0.39709146518856618113e-01, - 0.19274938080598151557e-01, - 0.10444646222664470334e-01, - 0.20004735460716089462e-02, - -0.30257741040049048603e-01, - 0.24214303226354750437e-01, - 0.33856793826285416435e-02, - -0.82008388271603855496e-02, - -0.59218873231725900619e-02, - 0.26508893737215168639e-02, - 0.14872517682660920876e-01, - -0.11777167588088161346e-01, - -0.82067423440724471262e-02, - 0.17180493827392972084e-02, - 0.38505329588804523833e-01, - -0.62394353473994204617e-01, - 0.37294988602764457541e-01, - 0.10404344569296436647e-02, - -0.32274162725981119307e-02, - -0.21187402996155665913e-01, - 0.24603089608114695613e-01, - 0.34706462459148791459e-02, - -0.24513993832705950615e-01, - 0.12352554909337669364e-01, - 0.12055105325541553771e-01, - -0.18993624312816981270e-01, - 0.12360860949517243901e-01, - -0.12512525516805681619e-01, - 0.17436844657231980599e-01, - -0.89886655844529806531e-02, - -0.10293753818159166388e-01, - 0.15391652707074991030e-01, - 0.17749622765784785899e-02, - -0.15908321090288446431e-01, - 0.51711256746394262951e-02, - 0.13173433647468223151e-01, - -0.54335406764778231350e-02, - -0.27445692710851933571e-01, - 0.45878948165234738343e-01, - -0.24566146030829304897e-01, - -0.10890392932428490796e-01, - 0.16471112538216023391e-01, - 0.11589297225214767115e-01, - -0.31892167208056418359e-01, - 0.13447061591470436601e-01, - 0.23133498907094793978e-01, - -0.33441700568103124858e-01, - 0.79775413245067247625e-02, - 0.16042431712316618242e-01, - -0.41472349406734675820e-02, - -0.30413154649403480179e-01, - 0.44038927197668678581e-01, - -0.18571823255351466858e-01, - -0.16575712643857057338e-01, - 0.22686912451786698380e-01, - 0.78939756811713186795e-05, - -0.15151397648166080312e-01, - -0.12966510510543573665e-02, - 0.29657606900310547887e-01, - -0.31736488048548804064e-01, - 0.21124563949183039480, + -0.4847874400728437172e-1, + 0.90550839900968196905e-1, + -0.75348807128520406406e-1, + 0.57401249183621147476e-1, + -0.45277058119620489096e-1, + 0.41754625397638953088e-1, + -0.46510052030996160144e-1, + 0.53135010408416068206e-1, + -0.57071419369474331307e-1, + 0.5470146574507998849e-1, + -0.49054469796134460291e-1, + 0.43858020091698549092e-1, + -0.44554946443036001769e-1, + 0.50896628219074632749e-1, + -0.60581697888416441433e-1, + 0.66866530375660634955e-1, + -0.66462468307653496669e-1, + 0.57979858695249596179e-1, + -0.46699509681381944082e-1, + 0.37848379046482742705e-1, + -0.37332121170199315807e-1, + 0.44566024692185256251e-1, + -0.56604246437699193284e-1, + 0.66112970924570524378e-1, + -0.69271192002762368989e-1, + 0.63940658019756749231e-1, + -0.54226122618871518133e-1, + 0.43952755276997337863e-1, + -0.38084706936607981564e-1, + 0.36396584814957402831e-1, + -0.3802176097375870728e-1, + 0.38967494831346267958e-1, + -0.38697745550622754396e-1, + 0.36707148768026845453e-1, + -0.36079626265556628828e-1, + 0.37211865236558998304e-1, + -0.40720526269846610279e-1, + 0.43110904808925175347e-1, + -0.42753148102360166716e-1, + 0.37471884612597192166e-1, + -0.29856215455822815441e-1, + 0.22032212916165080235e-1, + -0.18020932964427353873e-1, + 0.17575648499021205573e-1, + -0.20331877132209824621e-1, + 0.22868150041050343962e-1, + -0.25105076481552846684e-1, + 0.26885546687290904494e-1, + -0.31424225160399534007e-1, + 0.38675538997925112961e-1, + -0.47912226838293645037e-1, + 0.53593082601024931433e-1, + -0.52307229431794173558e-1, + 0.41721187558268722773e-1, + -0.2667663288234514013e-1, + 0.1341539915982194707e-1, + -0.97540967408805238914e-2, + 0.16757602927161781292e-1, + -0.30713897119883801223e-1, + 0.43117215880851336718e-1, + -0.45621946125786440318e-1, + 0.40037360634990033781e-1, + -0.22967290705455813138e-1, + 0.19577020282700897946e-1, + -0.30396759776935154858e-2, + 0.31226817855438307459e-1, + -0.13572813947108363394e-3, + 0.56780540389892983355e-1, + 0.31142375320235657354e-1, + 0.55299286036995902449e-1, + 0.78290045315193484976e-1, + 0.42194910344812944225e-1, + 0.63814898335990646872e-1, + 0.2266623444657295261e-1, + -0.10536205546860809984e-1, + -0.26555015711516943844e-1, + -0.46794715078964994881e-1, + -0.5141713124245848171e-1, + 0.13053827495410881641e-2, + 0.28531734187246388101e-2, + 0.51409425304305388094e-1, + 0.29967876678961977849e-1, + 0.1518327769974507635e-1, + -0.31567351117274725092e-1, + -0.3291236683595840512e-1, + -0.23077305223927997019e-1, + 0.33985207242227975441e-2, + 0.495757158429569883e-1, + 0.14399800735022675463e-1, + -0.30099336206169621279e-2, + -0.26295683462816514531e-1, + -0.35100230874962314032e-1, + 0.89896157830008337208e-2, + 0.46094360514969789921e-1, + -0.53406977206686247553e-2, + 0.13238159992177533919e-1, + -0.47700452302205167965e-1, + -0.11926686281052020777e-1, + 0.34464741325475584111e-1, + 0.156173392655730367e-1, + -0.24096660043087586638e-4, + -0.21660522223727846775e-1, + -0.26531363292416620947e-1, + 0.24950711489380592023e-1, + 0.26273026064881979669e-1, + -0.42808511732723951437e-2, + -0.31694761661995904389e-1, + -0.19326050267744220891e-3, + 0.83659409894999200302e-2, + 0.28936296168733256773e-1, + -0.10492769613586762009e-1, + -0.3171107398544670275e-1, + 0.28572148068190554235e-2, + 0.34085947299998163584e-1, + -0.72357303209578307385e-2, + -0.9949751311541849344e-2, + -0.17362099551038030071e-1, + 0.10774896836180783422e-1, + 0.267378191652848686e-1, + -0.92632596507365473626e-2, + -0.38500171172069483361e-1, + 0.28345460351318269021e-1, + 0.11051421377374753482e-1, + -0.61155422657009940457e-2, + -0.10666803291860616279e-1, + -0.10925345068595422246e-1, + 0.2284878269425599101e-1, + 0.13962989038349034321e-1, + -0.37660398771290376496e-1, + 0.70014237159817770129e-2, + 0.1580879873252160131e-1, + 0.11633906164214774873e-1, + -0.32689952977889027985e-1, + 0.53001698881727787871e-2, + 0.23663566786827218424e-1, + -0.1783428441157032876e-1, + 0.15065525303117591541e-1, + -0.37269695463005542146e-1, + 0.37665959661922356061e-1, + 0.67226853229726780611e-2, + -0.39709146518856618113e-1, + 0.19274938080598151557e-1, + 0.10444646222664470334e-1, + 0.20004735460716089462e-2, + -0.30257741040049048603e-1, + 0.24214303226354750437e-1, + 0.33856793826285416435e-2, + -0.82008388271603855496e-2, + -0.59218873231725900619e-2, + 0.26508893737215168639e-2, + 0.14872517682660920876e-1, + -0.11777167588088161346e-1, + -0.82067423440724471262e-2, + 0.17180493827392972084e-2, + 0.38505329588804523833e-1, + -0.62394353473994204617e-1, + 0.37294988602764457541e-1, + 0.10404344569296436647e-2, + -0.32274162725981119307e-2, + -0.21187402996155665913e-1, + 0.24603089608114695613e-1, + 0.34706462459148791459e-2, + -0.24513993832705950615e-1, + 0.12352554909337669364e-1, + 0.12055105325541553771e-1, + -0.1899362431281698127e-1, + 0.12360860949517243901e-1, + -0.12512525516805681619e-1, + 0.17436844657231980599e-1, + -0.89886655844529806531e-2, + -0.10293753818159166388e-1, + 0.1539165270707499103e-1, + 0.17749622765784785899e-2, + -0.15908321090288446431e-1, + 0.51711256746394262951e-2, + 0.13173433647468223151e-1, + -0.5433540676477823135e-2, + -0.27445692710851933571e-1, + 0.45878948165234738343e-1, + -0.24566146030829304897e-1, + -0.10890392932428490796e-1, + 0.16471112538216023391e-1, + 0.11589297225214767115e-1, + -0.31892167208056418359e-1, + 0.13447061591470436601e-1, + 0.23133498907094793978e-1, + -0.33441700568103124858e-1, + 0.79775413245067247625e-2, + 0.16042431712316618242e-1, + -0.4147234940673467582e-2, + -0.30413154649403480179e-1, + 0.44038927197668678581e-1, + -0.18571823255351466858e-1, + -0.16575712643857057338e-1, + 0.2268691245178669838e-1, + 0.78939756811713186795e-5, + -0.15151397648166080312e-1, + -0.12966510510543573665e-2, + 0.29657606900310547887e-1, + -0.31736488048548804064e-1, + 0.2112456394918303948, -0.18157574302629050922, -0.21853152035345654869, 0.34195749743329162396, -0.17593357166570555705, - 0.37322717915214943807e-01, + 0.37322717915214943807e-1, -0.16028248628075708604, 0.32078313318513262953, -0.22469802775311570331, -0.11797834465073529786, 0.33662974807964474167, -0.24594394739026617658, - 0.57210822668956069076e-02, - 0.84617545443320382748e-01, - -0.43376516585516187996e-01, - 0.43000546486249575928e-01, + 0.57210822668956069076e-2, + 0.84617545443320382748e-1, + -0.43376516585516187996e-1, + 0.43000546486249575928e-1, -0.12984117574867259925, - 0.85491492398413401754e-01, + 0.85491492398413401754e-1, 0.13860526411259357915, -0.32335834222031389906, 0.22934431664211768487, - -0.43077330774272976077e-01, - 0.70640558795629665445e-01, + -0.43077330774272976077e-1, + 0.70640558795629665445e-1, -0.28322958334565845329, 0.23241986691441646196, 0.20689690068557772817, - -0.56175354934624244230, + -0.5617535493462424423, 0.28742672993517570657, 0.33895837846919724123, -0.53651594562139015565, - 0.32102635701573324634e-01, + 0.32102635701573324634e-1, 0.44518008915945417314, -0.22266371295674108888, -0.37643089343607594177, @@ -42521,32 +42523,32 @@ function ESERK4ConstantCache(zprev) 0.38204109178052925166, 0.27954807280903043454, -0.40460630417638387968, - -0.39677295752401199949e-02, - 0.19175993153477652320, - 0.34317556349189717868e-01, + -0.39677295752401199949e-2, + 0.1917599315347765232, + 0.34317556349189717868e-1, -0.14242877075774609819, -0.14807765268402833803, 0.29830011883215401536, - 0.76597533960440448292e-02, + 0.76597533960440448292e-2, -0.25305244916339186823, - -0.81627229943831536296e-01, + -0.81627229943831536296e-1, 0.43603848386899229927, - -0.62758381502635532390e-01, + -0.6275838150263553239e-1, -0.65302091810120810322, 0.60806669050954431643, 0.16181835246326495281, -0.51242142438149329564, - -0.89712121159432785256e-02, + -0.89712121159432785256e-2, 0.42544118481436915546, -0.10763430880840954562, -0.26731366166326897549, - 0.46071114892772747906e-01, + 0.46071114892772747906e-1, 0.13727439702913349362, 0.26239301611705512229, -0.53181550670997224106, - -0.23343006561072656563e-01, + -0.23343006561072656563e-1, 0.52647787088561581736, - -0.67326699035789472347e-01, + -0.67326699035789472347e-1, -0.55963239873974734984, 0.18269011522466069297, 0.51165650292672149035, @@ -42566,13 +42568,13 @@ function ESERK4ConstantCache(zprev) -0.26052482412566446701, -0.46434129605724727696, 0.28018793200584429792, - 0.55082213508998922880, + 0.5508221350899892288, -0.20771355021204329638, - -0.63345607416569960080, - 0.20493786856685283770, + -0.6334560741656996008, + 0.2049378685668528377, 0.34308827369958982967, - 0.16041068749187606390, - -0.81926053649949454050e-01, + 0.1604106874918760639, + -0.8192605364994945405e-1, -0.88651280238074003925, 0.52425313962285857716, 0.56813649690319956154, @@ -42582,15 +42584,15 @@ function ESERK4ConstantCache(zprev) 0.32413681797000115647, 0.73510141615608592947, -0.13826141482318782261, - -0.41913791370123903990, + -0.4191379137012390399, -0.54390313919713983992, 0.33918084017155930576, 0.46650138734225155002, 0.42511060741652911821, - -0.42485185785386975210, + -0.4248518578538697521, -0.85738106843647221567, 0.21357648540926382763, - 0.13815404325824398590, + 0.1381540432582439859, 0.86862456693611844738, 0.12410360613776642846, -0.66532260484138461276, @@ -42601,39 +42603,39 @@ function ESERK4ConstantCache(zprev) 0.73536934683325949624, -0.62809781775933315462, -0.26792980974622226942, - -0.10910962915427149245e+01, + -0.10910962915427149245e+1, -0.41960196272826749686, 0.63131166223064627552, 0.37915090539997625685, - 0.12755084098825804073e+01, + 0.12755084098825804073e+1, 0.55578550020217543093, - 0.75315602067370472639e-02, + 0.75315602067370472639e-2, -0.38860427228068489258, - -0.10255095802547731232e+01, - -0.13538006666266237943e+01, - -0.10801173959412921910e+01, - -0.12938682494987532312e+01, + -0.10255095802547731232e+1, + -0.13538006666266237943e+1, + -0.1080117395941292191e+1, + -0.12938682494987532312e+1, -0.84788543372652769303, -0.63677507868801752622, -0.53785867497996320274, -0.21679979214881114902, -0.26279010531172825038, - 0.37472585024852900215e-01, + 0.37472585024852900215e-1, -0.27955794416600149299, 0.25170201190513480372, -0.25385126013078840312, - 0.89764070802918885517e-01, - 0.86606451035153200757e-01, + 0.89764070802918885517e-1, + 0.86606451035153200757e-1, -0.22078355766570953445, 0.22790824967361103526, -0.12988463430801777676, - 0.10007896630568318547e-01, - 0.31106502297048317651e-01, - 0.46911861703459810380e-01, + 0.10007896630568318547e-1, + 0.31106502297048317651e-1, + 0.4691186170345981038e-1, -0.19286421261970862484, 0.29505207988318304935, -0.25707107602367545995, - 0.68894768732279051959e-01, + 0.68894768732279051959e-1, 0.17847272425476587432, -0.34467540090995424373, 0.32890632690666293803, @@ -42641,3610 +42643,3610 @@ function ESERK4ConstantCache(zprev) -0.12252695168696481343, 0.29411228218265739187, -0.27918784821719322409, - 0.91871403646089699890e-01, + 0.9187140364608969989e-1, 0.15002504404957300865, -0.29780583051521636317, 0.26389296909113962863, - -0.73685287514150196730e-01, - -0.15165970347797064210, + -0.7368528751415019673e-1, + -0.1516597034779706421, 0.27163773254770495758, -0.21185616123204573102, - 0.83930827371184024005e-02, - 0.21655601923496498040, + 0.83930827371184024005e-2, + 0.2165560192349649804, -0.32898063180972686448, 0.26290145724365648894, - -0.56144240485143423469e-01, + -0.56144240485143423469e-1, -0.17561075771112602539, 0.30999852805372540843, -0.28849323025750878147, 0.14626743899796046389, - 0.15549794978773573070e-01, - -0.94250124365168233553e-01, - 0.47864504779604126472e-01, - 0.82762501683647710093e-01, + 0.1554979497877357307e-1, + -0.94250124365168233553e-1, + 0.47864504779604126472e-1, + 0.82762501683647710093e-1, -0.20203734245393331626, 0.22018546742500705315, -0.10802417137342125442, - -0.84972753361469130495e-01, + -0.84972753361469130495e-1, 0.25968017054828512746, -0.32400908900049213424, 0.24472735773381715241, - -0.64204532593584884292e-01, + -0.64204532593584884292e-1, -0.12516925704634074279, 0.23351184339391178879, -0.22161899100754403613, 0.11877207403188529133, - -0.11575582721172464253e-02, - -0.54517972212408997990e-01, - 0.15445470101915001818e-01, - 0.90260088295791657265e-01, + -0.11575582721172464253e-2, + -0.5451797221240899799e-1, + 0.15445470101915001818e-1, + 0.90260088295791657265e-1, -0.19213290940247840233, - 0.22007358200339588450, + 0.2200735820033958845, -0.14587800661347122277, - 0.23157732746770607335e+01, - -0.35356129132020583938e+01, - 0.12675757397976996632e+01, - 0.12251003797467268086e+01, - -0.26230042593622444613e+01, - 0.26344221530971649869e+01, - -0.14228261019153116695e+01, + 0.23157732746770607335e+1, + -0.35356129132020583938e+1, + 0.12675757397976996632e+1, + 0.12251003797467268086e+1, + -0.26230042593622444613e+1, + 0.26344221530971649869e+1, + -0.14228261019153116695e+1, 0.11856697548651551344, 0.57438909028591356165, -0.13284312052022606565, -0.82745228441941409692, - 0.16529727468596391304e+01, - -0.14375583164312373263e+01, + 0.16529727468596391304e+1, + -0.14375583164312373263e+1, 0.29710742318712046739, - 0.13432343006591709322e+01, - -0.23293315661548281703e+01, - 0.21676053907222732064e+01, + 0.13432343006591709322e+1, + -0.23293315661548281703e+1, + 0.21676053907222732064e+1, -0.68008311954287004042, - -0.11834569278749973442e+01, - 0.25654606470985616973e+01, - -0.25223817219612292284e+01, - 0.12482866440143072229e+01, + -0.11834569278749973442e+1, + 0.25654606470985616973e+1, + -0.25223817219612292284e+1, + 0.12482866440143072229e+1, 0.72890159040642488186, - -0.21909366925800131121e+01, - 0.26112067980814179791e+01, - -0.17453690109954456133e+01, + -0.21909366925800131121e+1, + 0.26112067980814179791e+1, + -0.17453690109954456133e+1, 0.38416432161548758062, 0.85207800566065583503, - -0.12263080537226369593e+01, + -0.12263080537226369593e+1, 0.95580820378418551719, -0.31324728503025972559, - 0.31230852924751136696e-01, - -0.12058729551985555850, + 0.31230852924751136696e-1, + -0.1205872955198555585, 0.54088064857167250654, -0.62368025360667533885, 0.25302524366357304064, 0.65374444807603437901, - -0.13959055101260304799e+01, - 0.16172435611924971255e+01, + -0.13959055101260304799e+1, + 0.16172435611924971255e+1, -0.90579829661983846112, -0.24452263117381375923, - 0.14080596253599915180e+01, - -0.18442561315597374438e+01, - 0.16393969908802192847e+01, + 0.1408059625359991518e+1, + -0.18442561315597374438e+1, + 0.16393969908802192847e+1, -0.95194062135369772459, 0.50371059684581565019, - -0.36856714257008266200, + -0.368567142570082662, 0.54736867012783241293, -0.33918343681175883164, -0.42336526948293379258, - 0.17736480523673745502e+01, - -0.27995667138731188395e+01, - 0.28632010241971785902e+01, - -0.14229267095927657927e+01, - -0.81225289170549774820, - 0.28559800394344829755e+01, - -0.33583626543010272059e+01, - 0.20934314763602093201e+01, + 0.17736480523673745502e+1, + -0.27995667138731188395e+1, + 0.28632010241971785902e+1, + -0.14229267095927657927e+1, + -0.8122528917054977482, + 0.28559800394344829755e+1, + -0.33583626543010272059e+1, + 0.20934314763602093201e+1, 0.37133760064840654058, - -0.26171813210320498122e+01, - 0.32175935705332725512e+01, - -0.25094618671343411620e+01, + -0.26171813210320498122e+1, + 0.32175935705332725512e+1, + -0.2509461867134341162e+1, -0.16070124473089120176, 0.32688169932366450965, - -0.28617498574624846697e+01, - -0.26477565206801165765e+01, - -0.24856478782138049510e+01, - -0.82397355826790139588e+01, - -0.69784241750761140111e+01, - -0.92298553274077921316e+01, - -0.14206404294389232135e+02, - -0.79592945169253601634e+01, - -0.10836335030726747419e+02, - -0.48240062468113489302e+01, - 0.26088201922573617253e+01, - 0.41199998939643363016e+01, - 0.91087977306776508613e+01, - 0.84190466061272637432e+01, + -0.28617498574624846697e+1, + -0.26477565206801165765e+1, + -0.2485647878213804951e+1, + -0.82397355826790139588e+1, + -0.69784241750761140111e+1, + -0.92298553274077921316e+1, + -0.14206404294389232135e+2, + -0.79592945169253601634e+1, + -0.10836335030726747419e+2, + -0.48240062468113489302e+1, + 0.26088201922573617253e+1, + 0.41199998939643363016e+1, + 0.91087977306776508613e+1, + 0.84190466061272637432e+1, 0.84950950160082694396, - -0.18548510332681309443e+01, - -0.77590666986979908160e+01, - -0.68526933516403900626e+01, - -0.15205779366450566936e+01, - 0.48735011622055282032e+01, - 0.62748581258115665449e+01, - 0.42069162180086685510e+01, + -0.18548510332681309443e+1, + -0.7759066698697990816e+1, + -0.68526933516403900626e+1, + -0.15205779366450566936e+1, + 0.48735011622055282032e+1, + 0.62748581258115665449e+1, + 0.4206916218008668551e+1, -0.94326563831669374416, - -0.84443840491501518386e+01, - -0.31404585302875496211e+01, - 0.11616697586029360867e+01, - 0.39758628508444795457e+01, - 0.72942909648790266175e+01, - -0.28502012519826815939e+01, - -0.68552796884996523019e+01, + -0.84443840491501518386e+1, + -0.31404585302875496211e+1, + 0.11616697586029360867e+1, + 0.39758628508444795457e+1, + 0.72942909648790266175e+1, + -0.28502012519826815939e+1, + -0.68552796884996523019e+1, -0.55882570721821434034, -0.96038729878467465895, - 0.74206557016626595313e+01, - 0.29722969195383139862e+01, - -0.67118900269525072488e+01, - -0.25023898428443067665e+01, + 0.74206557016626595313e+1, + 0.29722969195383139862e+1, + -0.67118900269525072488e+1, + -0.25023898428443067665e+1, -0.26975256879787889996, - 0.42888320116815314975e+01, - 0.41862783015627629268e+01, - -0.37057596665866525676e+01, - -0.56348976432043871299e+01, - 0.16920528553219307266e+01, - 0.48537100936430679354e+01, + 0.42888320116815314975e+1, + 0.41862783015627629268e+1, + -0.37057596665866525676e+1, + -0.56348976432043871299e+1, + 0.16920528553219307266e+1, + 0.48537100936430679354e+1, 0.78315185329992154095, - -0.21763211470054337759e+01, - -0.45537684699494311857e+01, - 0.11868587688368026356e+01, - 0.64891593505846278944e+01, - -0.13628391090642508754e+01, - -0.52642073011133803107e+01, + -0.21763211470054337759e+1, + -0.45537684699494311857e+1, + 0.11868587688368026356e+1, + 0.64891593505846278944e+1, + -0.13628391090642508754e+1, + -0.52642073011133803107e+1, 0.45922905094345473076, - 0.25788831795513877942e+01, - 0.23815934004691294845e+01, - -0.11968519758778524142e+01, - -0.56044997838226473519e+01, - 0.25344273145454581098e+01, - 0.60065559301239810353e+01, - -0.41842500259325241529e+01, - -0.28210229529473203058e+01, - 0.17862861556894920056e+01, - 0.13870635948525185110e+01, - 0.24073563139538882716e+01, - -0.45689312054125794660e+01, - -0.19318018405382626490e+01, - 0.60150232453420571233e+01, + 0.25788831795513877942e+1, + 0.23815934004691294845e+1, + -0.11968519758778524142e+1, + -0.56044997838226473519e+1, + 0.25344273145454581098e+1, + 0.60065559301239810353e+1, + -0.41842500259325241529e+1, + -0.28210229529473203058e+1, + 0.17862861556894920056e+1, + 0.1387063594852518511e+1, + 0.24073563139538882716e+1, + -0.4568931205412579466e+1, + -0.1931801840538262649e+1, + 0.60150232453420571233e+1, -0.35138988533250398172, - -0.37584583028225733159e+01, - -0.13894475551981775308e+01, - 0.56070094793960558732e+01, - -0.12537133527041299796e+01, - -0.33633917169149540882e+01, - 0.18508792221179142246e+01, - -0.11485910841164954643e+01, - 0.52610255641974843499e+01, - -0.57419189401584471710e+01, - -0.16461049235627671639e+01, - 0.69345921863577562050e+01, - -0.27033161197835617884e+01, - -0.30016356086050230978e+01, + -0.37584583028225733159e+1, + -0.13894475551981775308e+1, + 0.56070094793960558732e+1, + -0.12537133527041299796e+1, + -0.33633917169149540882e+1, + 0.18508792221179142246e+1, + -0.11485910841164954643e+1, + 0.52610255641974843499e+1, + -0.5741918940158447171e+1, + -0.16461049235627671639e+1, + 0.6934592186357756205e+1, + -0.27033161197835617884e+1, + -0.30016356086050230978e+1, 0.88210958617625456757, - 0.42939523711682063833e+01, - -0.34420165953135199999e+01, - -0.12140896458215475473e+01, - 0.17409274959062219779e+01, - 0.11578502515025148600e+01, - -0.96136343537275026350, - -0.17367913807421895278e+01, + 0.42939523711682063833e+1, + -0.34420165953135199999e+1, + -0.12140896458215475473e+1, + 0.17409274959062219779e+1, + 0.115785025150251486e+1, + -0.9613634353727502635, + -0.17367913807421895278e+1, 0.65007057535570356155, - 0.35224510324727269506e+01, - -0.29065383568594502783e+01, - -0.38992996591666018169e+01, - 0.79733908829946917862e+01, - -0.34920986451434647968e+01, - -0.31136701305650973381e+01, - 0.30226026129740968251e+01, - 0.19333656525342293175e+01, - -0.30588087294179469033e+01, - -0.16374993843154528328e+01, - 0.52721082648094048650e+01, - -0.31186814391106216782e+01, - -0.11199473121900294093e+01, - 0.21932538801633625347e+01, + 0.35224510324727269506e+1, + -0.29065383568594502783e+1, + -0.38992996591666018169e+1, + 0.79733908829946917862e+1, + -0.34920986451434647968e+1, + -0.31136701305650973381e+1, + 0.30226026129740968251e+1, + 0.19333656525342293175e+1, + -0.30588087294179469033e+1, + -0.16374993843154528328e+1, + 0.5272108264809404865e+1, + -0.31186814391106216782e+1, + -0.11199473121900294093e+1, + 0.21932538801633625347e+1, -0.89453829108969740158, 0.94332779769644592438, - -0.19800213846051053501e+01, + -0.19800213846051053501e+1, 0.69099681907084020693, - 0.25458876211871062090e+01, - -0.33089909932646448532e+01, + 0.2545887621187106209e+1, + -0.33089909932646448532e+1, 0.20131765644007212912, - 0.22088329265618993347e+01, - -0.21385501131793244189e-01, - -0.35911645878381515118e+01, - 0.24858910567814422876e+01, - 0.32366650880138241320e+01, - -0.64945419722147912367e+01, - 0.27446176126096082371e+01, - 0.34226145853188087997e+01, - -0.41183609466859376624e+01, - -0.12970304513540589220e+01, - 0.53411232038912483944e+01, - -0.24158225281825722597e+01, - -0.37805424851191826718e+01, - 0.52664950394136225142e+01, + 0.22088329265618993347e+1, + -0.21385501131793244189e-1, + -0.35911645878381515118e+1, + 0.24858910567814422876e+1, + 0.3236665088013824132e+1, + -0.64945419722147912367e+1, + 0.27446176126096082371e+1, + 0.34226145853188087997e+1, + -0.41183609466859376624e+1, + -0.1297030451354058922e+1, + 0.53411232038912483944e+1, + -0.24158225281825722597e+1, + -0.37805424851191826718e+1, + 0.52664950394136225142e+1, -0.35127834365143911777, - -0.42360445539687665573e+01, - 0.22534395118344532349e+01, - 0.39489859164496499133e+01, - -0.65426295654821391423e+01, - 0.22516024613556555600e+01, - 0.36694028184429465789e+01, - -0.43190226489815009003e+01, + -0.42360445539687665573e+1, + 0.22534395118344532349e+1, + 0.39489859164496499133e+1, + -0.65426295654821391423e+1, + 0.225160246135565556e+1, + 0.36694028184429465789e+1, + -0.43190226489815009003e+1, -0.17841859002165313952, - 0.31997873417613207359e+01, + 0.31997873417613207359e+1, -0.36303073620789599874, - -0.48052795734187014887e+01, - 0.54009093502040323997e+01, - -0.13178894588390850373e+02, - 0.89153973148614902300e+01, - 0.13395798718816896766e+02, - -0.15715094626407848821e+02, - 0.25966504582549365665e+01, - 0.42370818100702312137e+01, - 0.67054728158361731616e+01, - -0.17329050087583429018e+02, - 0.96381254645215594934e+01, - 0.11842902579090742066e+02, - -0.21736790431087669617e+02, - 0.11517170211426941862e+02, - 0.41722454473343990600e+01, - -0.59769826871354041486e+01, + -0.48052795734187014887e+1, + 0.54009093502040323997e+1, + -0.13178894588390850373e+2, + 0.891539731486149023e+1, + 0.13395798718816896766e+2, + -0.15715094626407848821e+2, + 0.25966504582549365665e+1, + 0.42370818100702312137e+1, + 0.67054728158361731616e+1, + -0.17329050087583429018e+2, + 0.96381254645215594934e+1, + 0.11842902579090742066e+2, + -0.21736790431087669617e+2, + 0.11517170211426941862e+2, + 0.417224544733439906e+1, + -0.59769826871354041486e+1, -0.25091622605965990811, -0.61591534249842327942, - 0.10591798330144261087e+02, - -0.11057877347726288164e+02, - -0.35613014816759820391e+01, - 0.16996233506738157359e+02, - -0.10205670930197531021e+02, - -0.48114472543485815592e+01, - 0.46029048641646346240e+01, - 0.11982204440510807686e+02, - -0.14403829481469575313e+02, - -0.98945493975707528023e+01, - 0.33019876235198424297e+02, - -0.18075177885981222659e+02, - -0.20543542987799021660e+02, - 0.33921905954601740518e+02, - -0.28940367170081531256e+01, - -0.27491414085578263382e+02, - 0.14073755168270400517e+02, - 0.23878216199861149960e+02, - -0.27156598594496347943e+02, - -0.12288034718758295227e+02, - 0.40792051631645605880e+02, - -0.17583269055707337003e+02, - -0.22467538191806539771e+02, - 0.26516978941388952506e+02, - 0.18636771831289002943e+01, - -0.12469114724951422701e+02, - -0.48048400801366479840e+01, - 0.12135197871328610830e+02, - 0.90481133382406184751e+01, - -0.20758888446777952197e+02, - 0.99394364415312838612e-01, - 0.18188849238742452741e+02, - 0.29189177622581272686e+01, - -0.28385368800715959026e+02, - 0.79004489196738809653e+01, - 0.36254516007577528569e+02, - -0.33619092020555591205e+02, - -0.14025434687405699208e+02, - 0.34003694032122773194e+02, - 0.12613912900004515816e+01, - -0.27621530658407138503e+02, - 0.59477567595557045976e+01, - 0.17169069701874981604e+02, + 0.10591798330144261087e+2, + -0.11057877347726288164e+2, + -0.35613014816759820391e+1, + 0.16996233506738157359e+2, + -0.10205670930197531021e+2, + -0.48114472543485815592e+1, + 0.4602904864164634624e+1, + 0.11982204440510807686e+2, + -0.14403829481469575313e+2, + -0.98945493975707528023e+1, + 0.33019876235198424297e+2, + -0.18075177885981222659e+2, + -0.2054354298779902166e+2, + 0.33921905954601740518e+2, + -0.28940367170081531256e+1, + -0.27491414085578263382e+2, + 0.14073755168270400517e+2, + 0.2387821619986114996e+2, + -0.27156598594496347943e+2, + -0.12288034718758295227e+2, + 0.4079205163164560588e+2, + -0.17583269055707337003e+2, + -0.22467538191806539771e+2, + 0.26516978941388952506e+2, + 0.18636771831289002943e+1, + -0.12469114724951422701e+2, + -0.4804840080136647984e+1, + 0.1213519787132861083e+2, + 0.90481133382406184751e+1, + -0.20758888446777952197e+2, + 0.99394364415312838612e-1, + 0.18188849238742452741e+2, + 0.29189177622581272686e+1, + -0.28385368800715959026e+2, + 0.79004489196738809653e+1, + 0.36254516007577528569e+2, + -0.33619092020555591205e+2, + -0.14025434687405699208e+2, + 0.34003694032122773194e+2, + 0.12613912900004515816e+1, + -0.27621530658407138503e+2, + 0.59477567595557045976e+1, + 0.17169069701874981604e+2, 0.80792727605486647224, - -0.15453187792518729538e+02, - -0.11313516676464432820e+02, - 0.32075263414658898853e+02, - 0.14485732858774695853e+01, - -0.33673973483187566558e+02, - 0.46352095110713280590e+01, - 0.35156616498910693736e+02, - -0.10274333312147554409e+02, - -0.33985072824835214078e+02, - 0.20067933197003238632e+02, - 0.17830397311344786004e+02, - -0.62894488556409102742e+01, - -0.14413974517964842192e+02, - -0.16022647858073618465e+02, - 0.40870291497844817741e+02, - 0.53114685335150753076e+01, - -0.45576616453943998408e+02, - 0.85472018598067336370e+01, - 0.27619970082237319531e+02, - 0.55734420692832289390e+01, - -0.23875973059345795946e+02, - -0.16309073275647694601e+02, - 0.21166659191608893309e+02, - 0.27228811269619914270e+02, - -0.16830082839824775931e+02, - -0.36585602630960245563e+02, - 0.14053878473453163878e+02, - 0.40187671998222555203e+02, - -0.11242240842678418389e+02, - -0.23357714429319980098e+02, - -0.13549816066868253017e+02, - 0.12100318819971715101e+02, - 0.50586047253708194660e+02, - -0.29039442943308294787e+02, - -0.38355464473820866544e+02, - 0.12427667421038925966e+02, - 0.15059230489167356737e+02, - 0.37147882386098949326e+02, - -0.21142113833380047794e+02, - -0.46050670094003358201e+02, - 0.55018288180580858793e+01, - 0.31254435129525475645e+02, - 0.32477660890392336057e+02, - -0.18771046807420322722e+02, - -0.34349484441251043165e+02, - -0.25937618050575593998e+02, - 0.29217455948877304905e+02, - 0.51202479922769001064e+02, - -0.55292531347142146458e+01, - -0.18196658064897960116e+02, - -0.50590776333495284689e+02, - -0.11117691474641384630e+02, - 0.43472452516889489971e+02, - 0.42040109701014081622e+02, - 0.13042871955930978700e+02, - -0.22795519699631075383e+02, - -0.54603389611370424461e+02, - -0.39696371564504246976e+02, - 0.30787947259874247408e+02, - 0.27462521667398874570e+02, - 0.66294598316898685653e+02, - 0.27536556092769071569e+02, - -0.36261748874057595060e+02, - -0.32997512288991266871e+02, - -0.76769012574202434962e+02, - -0.41678396495711972136e+02, - 0.22392553896146223380e+01, - 0.23608308273763551455e+02, - 0.70602396799419764761e+02, - 0.85134034271387804438e+02, - 0.75876833202267505385e+02, - 0.81950391253498636956e+02, - 0.57186795891626232446e+02, - 0.43129652682399012065e+02, - 0.32658736204571283679e+02, - 0.18303296095021501344e+02, - 0.12287999755137018809e+02, - 0.38894443986299083171e+01, - 0.10853199481994131759e+02, - -0.87230218357635287418e+01, - 0.10313119686986009782e+02, - -0.26841718526014899382e+01, - -0.49711030113753533755e+01, - 0.10515603261661389922e+02, - -0.94066936212442371357e+01, - 0.31043493962568668998e+01, - 0.38754181081830112454e+01, - -0.61232012417934473802e+01, - 0.15502951174603594175e+01, - 0.69877685256453663243e+01, - -0.13371885203044611146e+02, - 0.12295920409545335161e+02, - -0.30915784443096585576e+01, - -0.94741609279350100792e+01, - 0.17944086326517815877e+02, - -0.16922709519460443772e+02, - 0.66028612030145215073e+01, - 0.71075154043217825262e+01, - -0.16166551236734580499e+02, - 0.15302118208784694531e+02, - -0.52944798246019955101e+01, - -0.75687279950789276839e+01, - 0.15366096501693240484e+02, - -0.13445702385700165848e+02, - 0.31815685637963984078e+01, - 0.89437113126513203554e+01, - -0.15417220758925131108e+02, - 0.12248038069198170064e+02, - -0.13348565924101147839e+01, - -0.10834683912189433386e+02, - 0.17138537367089746510e+02, - -0.14073183055135737973e+02, - 0.36489983223443624993e+01, - 0.79986861163165272615e+01, - -0.14410451999570994985e+02, - 0.12556438555225959419e+02, - -0.44184079222792345121e+01, - -0.45112134571628148549e+01, - 0.86817168186480806469e+01, - -0.58285759115025186361e+01, - -0.18402368646062681190e+01, - 0.91387076294949043387e+01, - -0.11146581432756033081e+02, - 0.61504306534720107891e+01, - 0.33635724776478639342e+01, - -0.12230520407757133228e+02, - 0.15606575773508815530e+02, - -0.11722634134957795382e+02, - 0.27771250848849713400e+01, - 0.64138649660326061408e+01, - -0.11197340267845346418e+02, - 0.96257501956523832121e+01, - -0.33840411444507649819e+01, - -0.33791854313327527315e+01, - 0.65322475861264965857e+01, - -0.43278117043115669205e+01, - -0.16994611618754531523e+01, - 0.77366251390088276452e+01, - -0.99843780935584280911e+01, - 0.68809558241407087209e+01, - -0.51507430553350950220e+02, - 0.72201060778951884345e+02, - -0.15064516776101660511e+02, - -0.43731709929764200240e+02, - 0.70414461993829604580e+02, - -0.60945905251115902956e+02, - 0.22162976835420561628e+02, - 0.13730598246704888155e+02, - -0.29170150580313993771e+02, - 0.12029983290796337769e+02, - 0.17895530777338350958e+02, - -0.41908249097499123081e+02, - 0.35282278805444128977e+02, - -0.32326388328693478336e+01, - -0.41423074225341004251e+02, - 0.66189383522570096829e+02, - -0.58893604946955939283e+02, - 0.15972559698237374093e+02, - 0.34829947970009143887e+02, - -0.70510832632564699907e+02, - 0.66449961198071889612e+02, - -0.30698747085856251005e+02, - -0.21097218279956194920e+02, - 0.55464899140022787094e+02, - -0.60731202736064737735e+02, - 0.33105180892958792072e+02, - 0.28485115124892210758e+01, - -0.30356944002014724759e+02, - 0.31272263494425498465e+02, - -0.15920147919663339309e+02, - -0.51603649116843195443e+01, - 0.10316776253194390733e+02, - -0.13619933889614093125e+01, - -0.17402158814485577665e+02, - 0.23759229082854869120e+02, - -0.13394547555654915172e+02, - -0.15302430194096432459e+02, - 0.39978560996389880700e+02, - -0.48704044994393953516e+02, - 0.29034229336294398394e+02, - 0.36433620323571358490e+01, - -0.35533732442087497816e+02, - 0.44227210653908613835e+02, - -0.33044595675426130299e+02, - 0.87538778828305350288e+01, - 0.48821778973240199662e+01, - -0.40742012550823138994e+01, - -0.10878211932130229300e+02, - 0.16892910209844131941e+02, - -0.52939747314383511778e+01, - -0.28436251877659337595e+02, - 0.59270648362255165864e+02, - -0.67735319291149622245e+02, - 0.34967317714073722357e+02, - 0.22064499308247835785e+02, - -0.77569104866514791752e+02, - 0.93125042374170462267e+02, - -0.61103017103212948768e+02, - -0.44032243258320740154e+01, - 0.64529867953640518863e+02, - -0.79244337227493431897e+02, - 0.58634587581838509607e+02, - 0.17555290838299082878e+02, - -0.19912238543820915737e+02, - 0.92417801166958824410e+02, - 0.70360625155403511144e+02, - 0.78775314276384065693e+02, - 0.23872727538046873974e+03, - 0.20275835780682402287e+03, - 0.27899108515034447464e+03, - 0.40243550873743140528e+03, - 0.25149003321160463997e+03, - 0.29977281937053601268e+03, - 0.15603821386157972029e+03, - -0.85438758141505090293e+02, - -0.11717808156865751812e+03, - -0.26831348499674038521e+03, - -0.24464680314802083672e+03, - -0.31531543944672868918e+02, - 0.66317796448393721676e+02, - 0.21200308514630208379e+03, - 0.21670248072275981599e+03, - 0.32842674245474533734e+02, - -0.13790034474377938523e+03, - -0.18203694173662378830e+03, - -0.13046588050143083137e+03, - 0.36296055743826599382e+02, - 0.24078491794665910675e+03, - 0.95665905586650140435e+02, - -0.34863734795716112558e+02, - -0.11617654264036158906e+03, - -0.21703660223895167292e+03, - 0.91243223522608616349e+02, - 0.18899818048487199462e+03, - 0.30610571178303384698e+02, - 0.15461749092284845730e+02, - -0.20997488685133268405e+03, - -0.87956764565407283385e+02, - 0.19113389464500528447e+03, - 0.83107405083745021557e+02, - -0.21118482032142700255e+01, - -0.11876862432980203721e+03, - -0.12508024770095104827e+03, - 0.10645717914772154700e+03, - 0.17019362700866426508e+03, - -0.54700702155552349382e+02, - -0.13915626191465455008e+03, - -0.23606829648700763613e+02, - 0.62509442363376827245e+02, - 0.13539776792707002073e+03, - -0.35682335447688885210e+02, - -0.19112667395326889164e+03, - 0.42036752448267499460e+02, - 0.15218678786386161050e+03, - -0.12277819468119627544e+02, - -0.75226228228595999781e+02, - -0.71503570463819357883e+02, - 0.36767007227325819940e+02, - 0.16409351086499600569e+03, - -0.76173632212615231651e+02, - -0.17257107771964606968e+03, - 0.11874497740208231278e+03, - 0.85218476007422225393e+02, - -0.51941964389553390902e+02, - -0.44133848209090849934e+02, - -0.65792689988742012019e+02, - 0.13067370809538772392e+03, - 0.55516297109596550285e+02, - -0.16896090421949051574e+03, - -0.31037470924339998213e+01, - 0.12665177502721404323e+03, - 0.26147849207539533012e+02, - -0.15684133800859984831e+03, - 0.39919706618520386598e+02, - 0.83741834883069813600e+02, - -0.29972134615486304199e+02, - 0.51458589713218234607e+01, - -0.12807465173573638140e+03, - 0.15043280840902639284e+03, - 0.54298733598236033515e+02, - -0.19683809552927826303e+03, - 0.62486732097517325712e+02, - 0.11081907325325126124e+03, - -0.49954085215283733135e+02, - -0.10421002759313117281e+03, - 0.83370560461165950983e+02, - 0.49014792583595600206e+02, - -0.61273939305401555089e+02, - -0.25989622798980075657e+02, - 0.22407543419606771096e+02, - 0.53372140908592491826e+02, - -0.16124226801198322079e+02, - -0.11352824967397842215e+03, - 0.10338635906526376118e+03, - 0.89630280446320995225e+02, - -0.20587653624580826772e+03, - 0.75868808354030932151e+02, - 0.11167075817446050223e+03, - -0.99322174667791742309e+02, - -0.56799003531235648268e+02, - 0.98920639401336387664e+02, - 0.33526258599122961357e+02, - -0.13958680540672767734e+03, - 0.80097404111630510215e+02, - 0.38086100536177617926e+02, - -0.63334295220164641194e+02, - 0.21105011568464099980e+02, - -0.21808785385622137198e+02, - 0.54929988456625693516e+02, - -0.22113453070266174905e+02, - -0.67461718104990310962e+02, - 0.86063896054024155546e+02, - 0.58798953181810977853e+01, - -0.73950838276639458968e+02, - 0.43688684826372865544e+01, - 0.10840852266402940529e+03, - -0.82518999316567672508e+02, - -0.80523113293984650340e+02, - 0.17379234946593345512e+03, - -0.64100526357599022731e+02, - -0.11443394039112595806e+03, - 0.13123619203523111310e+03, - 0.31668836936065147825e+02, - -0.15430866782273150761e+03, - 0.72344506424022924307e+02, - 0.10561540370919564680e+03, - -0.14531288174498894250e+03, - -0.27650949240651092609e+01, - 0.14079639433736446108e+03, - -0.84942310984121576212e+02, - -0.96694486542697930531e+02, - 0.17508462207659925980e+03, - -0.54227829462667251903e+02, - -0.11233545581277584802e+03, - 0.12340870661580973433e+03, - 0.15722950381480742976e+02, - -0.10915943421978670358e+03, - 0.27197625023844491210e+02, - 0.12707156464721799694e+03, - -0.15053328710201836316e+03, - 0.21406597144861379434e+03, - -0.73273731268383642146e+02, - -0.28838127558005334095e+03, - 0.24145506651076706817e+03, - 0.41833955189683045717e+02, - -0.13352947855130054222e+03, - -0.12181116149142970073e+03, - 0.32276812380097277355e+03, - -0.14651852684996197240e+03, - -0.25735998901525510973e+03, - 0.38558284313958336043e+03, - -0.13244989258835235546e+03, - -0.15610790756351562436e+03, - 0.11503261042556908933e+03, - 0.69525560816019392973e+02, - -0.47932091169152954535e+02, - -0.20134363201728342574e+03, - 0.25375768622014751941e+03, - 0.34637121293543927436e+02, - -0.32091667616063563173e+03, - 0.18588098153830841852e+03, - 0.14638424778650971803e+03, - -0.17403106755200971634e+03, - -0.17459365780261768464e+03, - 0.29971662930806672875e+03, - 0.10622714039440701583e+03, - -0.55862712532877742433e+03, - 0.33232393133008923769e+03, - 0.35912042102694448431e+03, - -0.61799473225908002405e+03, - 0.56698096926969384413e+02, - 0.51065123850182339993e+03, - -0.27652899837085232093e+03, - -0.42154263551991670056e+03, - 0.49356440255247377991e+03, - 0.20962767095817520158e+03, - -0.70457569465073777337e+03, - 0.26008090629547183426e+03, - 0.45170243175327124163e+03, - -0.46665573446344535569e+03, - -0.93415455638347594913e+02, - 0.25935799320204745300e+03, - 0.11900362292291042365e+03, - -0.27068725347757339250e+03, - -0.16221496206040382049e+03, - 0.41151165326432885649e+03, - -0.41166825608542083614e+01, - -0.38363648651213253515e+03, - -0.23283991283899680980e+01, - 0.52036205684478875355e+03, - -0.18947918091284523712e+03, - -0.61164852495976310820e+03, - 0.56652755154149576811e+03, - 0.30089070480221454318e+03, - -0.64096817336802916998e+03, - -0.39646037514637008314e+02, - 0.51606636296574765765e+03, - -0.77573762014565105005e+02, - -0.34892656619125972384e+03, - -0.45377014058703544208e+02, - 0.36676261793487583418e+03, - 0.15012267299226297723e+03, - -0.59088486922462732309e+03, - -0.88264377598937322489e+01, - 0.61630313581429902570e+03, - -0.80771804182088061452e+02, - -0.65906449102161400333e+03, - 0.18480607623936916184e+03, - 0.63545131706580878017e+03, - -0.34490255397619301903e+03, - -0.36873958336250393586e+03, - 0.97143841758949164955e+02, - 0.35013983536359586424e+03, - 0.22548788432978224705e+03, - -0.74524208544299574442e+03, - -0.76752646402165595418e+02, - 0.80756562600794222817e+03, - -0.10037497355333299254e+03, - -0.55817931565262824734e+03, - -0.11153863201544783124e+03, - 0.46666869530077946138e+03, - 0.32484695812388770264e+03, - -0.43562721393109308110e+03, - -0.49897187922424842554e+03, - 0.32262736335379207731e+03, - 0.68632420990145624273e+03, - -0.26330394302696925024e+03, - -0.74881125040022880057e+03, - 0.17316231767058314972e+03, - 0.47459078915611581806e+03, - 0.28620449220690898073e+03, - -0.31424561126501288300e+03, - -0.87023104851284665529e+03, - 0.49198230707157574670e+03, - 0.73106979855420524927e+03, - -0.16948104647720529670e+03, - -0.37933097577799435385e+03, - -0.64993361087893288186e+03, - 0.39269400863341502372e+03, - 0.85676498206625683451e+03, - -0.63422721480028137364e+02, - -0.63891457659902573596e+03, - -0.58778391226210067089e+03, - 0.31798369667414738160e+03, - 0.70869433966974418126e+03, - 0.46090128015051669763e+03, - -0.56416560497443697386e+03, - -0.92403240015479093472e+03, - 0.40046374195530871631e+01, - 0.45767652362459620008e+03, - 0.89562825220945808269e+03, - 0.23973080494928652229e+03, - -0.82379330407891643517e+03, - -0.82832817722549987138e+03, - -0.23628941599219874092e+03, - 0.42361749827525852652e+03, - 0.10866659302328866943e+04, - 0.68094016270826534765e+03, - -0.47510490410077488832e+03, - -0.64091535031347018503e+03, - -0.12080700951249993977e+04, - -0.51761127306034336470e+03, - 0.61897739163962194198e+03, - 0.73629201333545358921e+03, - 0.13923029562131684997e+04, - 0.83515432857015252921e+03, - -0.37898072478001779473e+02, - -0.46945868793637174576e+03, - -0.13570628659951521513e+04, - -0.16055542597614196438e+04, - -0.15013572136216762374e+04, - -0.15352877076102590763e+04, - -0.11144619856508538760e+04, - -0.83401027265691368484e+03, - -0.60811194677393746133e+03, - -0.37556498083705304225e+03, - -0.20500021279737157442e+03, - -0.12082585967338368960e+03, - -0.14261572537182945553e+03, - 0.91260559456554190660e+02, - -0.13366121641955575683e+03, - 0.22784041368141878081e+02, - 0.78517809335926415315e+02, - -0.15037030334636267526e+03, - 0.12031120549683487297e+03, - -0.14806858818573978454e+02, - -0.96304141559495931801e+02, - 0.12923351662658006944e+03, - -0.52705465269588351873e+02, - -0.87842191772648945403e+02, - 0.19633704604594791476e+03, - -0.18926359441985195531e+03, - 0.54954795613720044400e+02, - 0.13397337481448565200e+03, - -0.26277371540923348903e+03, - 0.24791444954561848135e+03, - -0.91525892793960693439e+02, - -0.11633522625205962697e+03, - 0.25268137833602071396e+03, - -0.23690208819456265132e+03, - 0.81328748184594033432e+02, - 0.11718407781557937142e+03, - -0.23676507632432259243e+03, - 0.20599593280110337901e+03, - -0.46233457941330350138e+02, - -0.14248700668385987456e+03, - 0.24428820369225761056e+03, - -0.19745916151889306889e+03, - 0.30929613178289756092e+02, - 0.15580792894810389271e+03, - -0.25349414717407367448e+03, - 0.20853700089144231811e+03, - -0.52024242353667716543e+02, - -0.12173895473472360607e+03, - 0.21386175611884112868e+03, - -0.17859996844271395844e+03, - 0.47625543989035598713e+02, - 0.93338829464540651770e+02, - -0.15790034394884611402e+03, - 0.11076220897066514226e+03, - 0.13894383453122623351e+02, - -0.13537221296474106680e+03, - 0.17655996218891058902e+03, - -0.10943333232958788415e+03, - -0.29321477610261300839e+02, - 0.16144387631982206699e+03, - -0.21302761358354294430e+03, - 0.15682660481732506241e+03, - -0.26006236215341331786e+02, - -0.10646432901061332643e+03, - 0.17039712461616232986e+03, - -0.13723026776923941839e+03, - 0.34062799610178380760e+02, - 0.74527785884241524172e+02, - -0.12472399576732708226e+03, - 0.89871309114141268992e+02, - 0.58589396919533536234e+01, - -0.10310426190789067391e+03, - 0.14277794763203991124e+03, - -0.10041163938257079735e+03, - 0.46426916845436369385e+03, - -0.59207893701898717609e+03, - 0.27436094939792340597e+02, - 0.51636927079959218645e+03, - -0.70420315092168630144e+03, - 0.52999417956087290804e+03, - -0.86553005676145815528e+02, - -0.27633446693577167252e+03, - 0.39187715751829819055e+03, - -0.15441825677529121208e+03, - -0.19877208418865404838e+03, - 0.46382231447680817382e+03, - -0.38226336906542951510e+03, - 0.30485413385088104832e+02, - 0.44415460705183352275e+03, - -0.69014480603407719173e+03, - 0.59280369998895469053e+03, - -0.12781479677620545488e+03, - -0.39511745650051727807e+03, - 0.73880324734007615461e+03, - -0.65670210153273342257e+03, - 0.26209472088813390656e+03, - 0.26715719829735024859e+03, - -0.57617262046925316099e+03, - 0.56883125865824126777e+03, - -0.23409938682216602501e+03, - -0.13943858280357406443e+03, - 0.37602084341430850145e+03, - -0.30315391810814179507e+03, - 0.71766011493189168391e+02, - 0.17777545955092367080e+03, - -0.20214518781755364785e+03, - 0.41555850800069052298e+02, - 0.22754482491193707006e+03, - -0.33328019751244414692e+03, - 0.22043225421423355215e+03, - 0.12003184418622107898e+03, - -0.41999315692827104840e+03, - 0.53189464296413405009e+03, - -0.31366147718490373109e+03, - -0.52445848122297597627e+02, - 0.39775829447483243939e+03, - -0.46274332822984632685e+03, - 0.29022924377603305857e+03, - 0.25312597346304883672e+02, - -0.19367312412927230980e+03, - 0.15644916214876587901e+03, - 0.81713714862558646246e+02, - -0.24096612519090521687e+03, - 0.19139321646351490358e+03, - 0.14859797382775883534e+03, - -0.51337364396392558774e+03, - 0.67719596365985307784e+03, - -0.40132187557406086853e+03, - -0.15883517463315200757e+03, - 0.74228277223390671224e+03, - -0.92807277086895635421e+03, - 0.62018078602552373013e+03, - 0.48104113319548261529e+02, - -0.66717881289083925367e+03, - 0.80497011537682385551e+03, - -0.57522522982507302913e+03, - -0.26034065212040871984e+03, - 0.26833662904552755890e+03, - -0.10718437479757312758e+04, - -0.74969705859275450166e+03, - -0.92273415450446680097e+03, - -0.26427138550770077927e+04, - -0.22740415682832845050e+04, - -0.31636015722839765658e+04, - -0.44262644810908259387e+04, - -0.29217544275200143602e+04, - -0.32586617484584544400e+04, - -0.18097041312778742395e+04, - 0.96578066784063639716e+03, - 0.13514478684654104654e+04, - 0.29439713993407481212e+04, - 0.27882968748108219188e+04, - 0.34662720122834736003e+03, - -0.78725755133043026035e+03, - -0.22932360303750065214e+04, - -0.25129913866176138981e+04, - -0.31224833831872200562e+03, - 0.15420432320879494910e+04, - 0.19878760259514274367e+04, - 0.15436461904501788922e+04, - -0.48620443660778721551e+03, - -0.26506915965099315144e+04, - -0.10698593881611570851e+04, - 0.34998707838668320846e+03, - 0.13536056034340983842e+04, - 0.23992308111219085731e+04, - -0.10345273571514971991e+04, - -0.20564803241109384544e+04, - -0.43248770329251294697e+03, - -0.86296560265369535614e+02, - 0.23001522500626078909e+04, - 0.98222794968867810894e+03, - -0.20848594299451269762e+04, - -0.10185105862614886973e+04, - 0.11212518544477724447e+03, - 0.12695312444682786008e+04, - 0.14188468450726418268e+04, - -0.11703051687289953406e+04, - -0.19508057399150904985e+04, - 0.65729881017756144956e+03, - 0.15317923525347794111e+04, - 0.26718362766220911908e+03, - -0.68517254656603438434e+03, - -0.15353220729263184694e+04, - 0.40934353820812361846e+03, - 0.21459456392825518378e+04, - -0.48710822963785165030e+03, - -0.16880721053724894318e+04, - 0.13238897056846676037e+03, - 0.83121475882316906336e+03, - 0.82443015629459432603e+03, - -0.43573316359152158839e+03, - -0.18268602215349014841e+04, - 0.86260884509699735645e+03, - 0.19063975423811248220e+04, - -0.13006270133230145802e+04, - -0.96784279196020804648e+03, - 0.56497815965042821063e+03, - 0.54275058926921133207e+03, - 0.67163942733651799699e+03, - -0.14089309186893558490e+04, - -0.63561665804757706155e+03, - 0.18453807646733309866e+04, - 0.14246658664086632484e+03, - -0.15632179593141652276e+04, - -0.15264243251244451471e+03, - 0.16674336867113074732e+04, - -0.44434816426159017055e+03, - -0.84272079861687700486e+03, - 0.16032919307953889643e+03, - 0.15577287023887510031e+03, - 0.12365829396272758913e+04, - -0.15506911347977625155e+04, - -0.65024374562950958989e+03, - 0.21534806647628233804e+04, - -0.57924016953749332970e+03, - -0.13929018658101113033e+04, - 0.70363422821075062075e+03, - 0.10571002911684204264e+04, - -0.86541021029238288520e+03, - -0.58524028350939227039e+03, - 0.70930309274143894527e+03, - 0.26458090666033962179e+03, - -0.21548478056088455901e+03, - -0.63290867630344985173e+03, - 0.19504954682078312089e+03, - 0.13000456889628446788e+04, - -0.12426427669688109745e+04, - -0.86682390142124972954e+03, - 0.21393268379741966783e+04, - -0.68998717553270421377e+03, - -0.13651013609499541417e+04, - 0.11532109026109253591e+04, - 0.67724361536615992918e+03, - -0.12160226580006285531e+04, - -0.23377204706273894885e+03, - 0.14293969638625526386e+04, - -0.80693139906335977685e+03, - -0.45310865413069927854e+03, - 0.67423749028434099273e+03, - -0.16133661969435300421e+03, - 0.16259821734348540190e+03, - -0.56017757726625814030e+03, - 0.24164496113745641992e+03, - 0.70778844547781011443e+03, - -0.87556471889063391245e+03, - -0.16872785123841615018e+03, - 0.91583937981904557546e+03, - -0.96975700594606891514e+02, - -0.12176015631773377663e+04, - 0.97661454034518908429e+03, - 0.81488516418408869413e+03, - -0.18452938085138250699e+04, - 0.62215575683530482820e+03, - 0.13584619379826428940e+04, - -0.15222573403857043104e+04, - -0.32513232591764898416e+03, - 0.17166917781169420323e+04, - -0.81255904170137443998e+03, - -0.11672920774427416291e+04, - 0.15953751335287411166e+04, - 0.84398037074698351034e+02, - -0.16540724051076745127e+04, - 0.10486370993185023508e+04, - 0.97705990847563259649e+03, - -0.18646767117226177106e+04, - 0.54179191882789882584e+03, - 0.12750835051290039246e+04, - -0.13415828720882871039e+04, - -0.27010780801911852222e+03, - 0.13524433729957886499e+04, - -0.44267356551413809029e+03, - -0.13081177693683130201e+04, - 0.16206973671201346860e+04, - -0.15749375103239194686e+04, - -0.54973130707130025030e+02, - 0.27068570411221862742e+04, - -0.16552839895541014812e+04, - -0.99562762379260641410e+03, - 0.14695608575559006113e+04, - 0.10925245922419132967e+04, - -0.28106235515972271060e+04, - 0.10549482835911758229e+04, - 0.24117417599171849361e+04, - -0.31007621182686275461e+04, - 0.51361927051282327739e+03, - 0.18807690550337104014e+04, - -0.96527712122714376619e+03, - -0.11109313884352943660e+04, - 0.89096879626815587017e+03, - 0.16804466121755210679e+04, - -0.24303306530986260441e+04, - -0.15578158276101009960e+03, - 0.28741740895925267978e+04, - -0.16889274380253721120e+04, - -0.15118705960427150785e+04, - 0.20042985228074001043e+04, - 0.11988301256246470530e+04, - -0.28092422220962039319e+04, - -0.31459295814986933237e+03, - 0.43352516949493410721e+04, - -0.28376723450687222794e+04, - -0.27895165328961802516e+04, - 0.50655328658688022188e+04, - -0.47792210645932533453e+03, - -0.43008590211019327398e+04, - 0.24362982965365681594e+04, - 0.33804651970734371389e+04, - -0.40476600697688400032e+04, - -0.16809372541156280931e+04, - 0.56164796131118073390e+04, - -0.17914696426811447054e+04, - -0.39547522402910417441e+04, - 0.36371784031582619718e+04, - 0.13027681432246597524e+04, - -0.24350398771647996909e+04, - -0.12123748355400107357e+04, - 0.26237629815575096472e+04, - 0.13142528233623550022e+04, - -0.36558362204529321389e+04, - 0.49486517594941858533e+02, - 0.35821076876731140146e+04, - -0.39151055426177344998e+03, - -0.42873517129920292064e+04, - 0.18466306507200217766e+04, - 0.47843412243200982630e+04, - -0.44530628933760253858e+04, - -0.27156301563256624831e+04, - 0.53637979896035867569e+04, - 0.52164623882638613850e+03, - -0.43820654551453899330e+04, - 0.36642410511255735628e+03, - 0.32435188221335215530e+04, - 0.51273617918415482109e+03, - -0.35940352589146823448e+04, - -0.88614457614003129038e+03, - 0.49818086889782398430e+04, - -0.71888242422095188999e+02, - -0.51359359840332044769e+04, - 0.66532678763299134062e+03, - 0.55786455263124389603e+04, - -0.15182037074455508900e+04, - -0.53425511801388165622e+04, - 0.26240493241864014635e+04, - 0.34763492151478430969e+04, - -0.75732867545937779141e+03, - -0.35001372352578146092e+04, - -0.13943421379097571844e+04, - 0.61743690385113168304e+04, - 0.51254315929885433434e+03, - -0.65669498148121419945e+04, - 0.48609024932497754889e+03, - 0.49488509461457942962e+04, - 0.10940465612125301504e+04, - -0.41950637885288088000e+04, - -0.28169770726683027533e+04, - 0.39115961130367686565e+04, - 0.42212115299873676122e+04, - -0.28542823616928094452e+04, - -0.57829869589526597338e+04, - 0.22092595682301262059e+04, - 0.63187656631109994123e+04, - -0.11520239457703864900e+04, - -0.43698976218108555258e+04, - -0.25852314249219689373e+04, - 0.32307517519888006063e+04, - 0.68859209690418556420e+04, - -0.38447266630991985039e+04, - -0.62663349065513039022e+04, - 0.96312380137898173871e+03, - 0.39249481266159591542e+04, - 0.51997697743560956951e+04, - -0.33266121615143069903e+04, - -0.72302962459586788100e+04, - 0.28018697500581083659e+03, - 0.57509734611869289438e+04, - 0.49194285406839771895e+04, - -0.25264281566387721796e+04, - -0.64530325560627343293e+04, - -0.37175152324959080943e+04, - 0.48405137504381918916e+04, - 0.77140245100646943683e+04, - 0.52514888633090788517e+03, - -0.45495128977867652793e+04, - -0.74042082857964396680e+04, - -0.21225532280393781548e+04, - 0.69899159401959013849e+04, - 0.73108882786962731188e+04, - 0.20592421159197024281e+04, - -0.37584472144171745640e+04, - -0.94619682919546157791e+04, - -0.55536534749076236039e+04, - 0.34914481041734752580e+04, - 0.62144852586994038575e+04, - 0.10099385032646665422e+05, - 0.43747622136657473675e+04, - -0.48376510320424767997e+04, - -0.70383773289943310374e+04, - -0.11603520990969833292e+05, - -0.73363089370473444433e+04, - 0.12643863946343255122e+03, - 0.43467991492778455722e+04, - 0.11626809064942508485e+05, - 0.13826104110766047597e+05, - 0.13242196251311796004e+05, - 0.13086875970053368292e+05, - 0.97611927051233742532e+04, - 0.72408872849626031893e+04, - 0.52143218220222224772e+04, - 0.32986982973845470042e+04, - 0.17248977347812526659e+04, - 0.11842927695747603138e+04, - 0.96008400442230811223e+03, - -0.41931640852819037946e+03, - 0.83167086443777532168e+03, - -0.71239710946584409612e+02, - -0.54253053053974451814e+03, - 0.98268491404255019006e+03, - -0.71945458092359490365e+03, - -0.37320914839258847451e+02, - 0.81098183784971809018e+03, - -0.10234183271573932643e+04, - 0.46542206387107751198e+03, - 0.54398615774074892215e+03, - -0.13366244357343086904e+04, - 0.13308539411691585883e+04, - -0.44017139786536932888e+03, - -0.84086128235316948576e+03, - 0.17250147082858634349e+04, - -0.16364443834337910175e+04, - 0.58475859864965025281e+03, - 0.81763559788259067318e+03, - -0.17319233572419229858e+04, - 0.16081252740517077200e+04, - -0.53209210342908045277e+03, - -0.83232867611551762366e+03, - 0.16503436119209511617e+04, - -0.14335146567440485796e+04, - 0.32917719137141710917e+03, - 0.97593258238662576787e+03, - -0.16867172040872746948e+04, - 0.13790504357086069831e+04, - -0.24991223165431495090e+03, - -0.10207141737369397561e+04, - 0.16861444629877273655e+04, - -0.13814132945032663429e+04, - 0.32113374837699166164e+03, - 0.84810741185233848682e+03, - -0.14505161043128236997e+04, - 0.11766327286041901061e+04, - -0.24939744222470997670e+03, - -0.73742021555321161941e+03, - 0.11863453005674577980e+04, - -0.85265050402127019424e+03, - -0.28985412579313724279e+02, - 0.90153100748864403613e+03, - -0.12299236082362087927e+04, - 0.81408518703943570927e+03, - 0.10217091165403071784e+03, - -0.98835804697815740383e+03, - 0.13408426498994967915e+04, - -0.97250009617960427022e+03, - 0.10704788793130144597e+03, - 0.76122216710065447387e+03, - -0.11581893346202502926e+04, - 0.89462387532097511667e+03, - -0.16123480242312575683e+03, - -0.59687491460904084306e+03, - 0.94242376529900855076e+03, - -0.69510162387108118764e+03, - 0.24205789638965800492e+02, - 0.65963561725437421046e+03, - -0.94864611118707944115e+03, - 0.67385417478393139845e+03, - -0.21667207311990559901e+04, - 0.24806612320601666397e+04, - 0.35442394750858835550e+03, - -0.29049701904715993805e+04, - 0.34966164682237408670e+04, - -0.22698859765933893868e+04, - -0.19058701355569004932e+03, - 0.19926947765709949181e+04, - -0.23502793701699079065e+04, - 0.81469823523059426407e+03, - 0.12230102472451305857e+04, - -0.26592001346122410723e+04, - 0.21461880191093632675e+04, - -0.19867555236563859467e+03, - -0.23427548567395137979e+04, - 0.35783561983659128600e+04, - -0.29733957408518967895e+04, - 0.46819180197045159275e+03, - 0.22142874878127763623e+04, - -0.38484244529116654121e+04, - 0.31991032799040076497e+04, - -0.10092557447238204986e+04, - -0.17143827487320859291e+04, - 0.30851705118726504224e+04, - -0.27285186157925345469e+04, - 0.73033255350936178729e+03, - 0.12360991545283368396e+04, - -0.22448702772706697033e+04, - 0.14744946169533961893e+04, - 0.73045992215605380693e+02, - -0.15150091897208662886e+04, - 0.14938402683215347224e+04, - -0.32703843837048515297e+03, - -0.14298189124434852602e+04, - 0.21586087868119680024e+04, - -0.15258331866356581941e+04, - -0.47067888172408032688e+03, - 0.22491626965919435861e+04, - -0.29208857032195705870e+04, - 0.16835579623272665231e+04, - 0.39527293942529655624e+03, - -0.23022301212333400144e+04, - 0.25432819080858339476e+04, - -0.13772994462214196574e+04, - -0.58562895143405546605e+03, - 0.16157271073818642435e+04, - -0.13098229107586969349e+04, - -0.30597458470727400481e+03, - 0.15791821550173215201e+04, - -0.16394853776533975633e+04, - -0.10764759648209064835e+03, - 0.22473996225808296003e+04, - -0.34857090799057241384e+04, - 0.23653209680009936164e+04, - 0.40586752392384374843e+03, - -0.34988849730036049550e+04, - 0.46061710783887720027e+04, - -0.31383157814363448779e+04, - -0.28023372258000495094e+03, - 0.34874624970304657836e+04, - -0.41495577795926092222e+04, - 0.28982143933437228043e+04, - 0.16539573531514715796e+04, - -0.16021797643059881011e+04, - 0.60422319535000824544e+04, - 0.40807625861129890836e+04, - 0.52776151704354624599e+04, - 0.14592451193840075575e+05, - 0.12710851636425319157e+05, - 0.17744923413787408208e+05, - 0.24371977719849677669e+05, - 0.16663341606948521076e+05, - 0.17804010417548375699e+05, - 0.10268097997193437550e+05, - -0.53303334944299049312e+04, - -0.77879393296156322322e+04, - -0.16056000982913765256e+05, - -0.15808871593504054545e+05, - -0.18584759924999352734e+04, - 0.45522276594231007039e+04, - 0.12443038848167352626e+05, - 0.14351024992192145874e+05, - 0.15343440438080942840e+04, - -0.86310308651104314777e+04, - -0.10799038912176674785e+05, - -0.90008448004008860153e+04, - 0.30651977075286540639e+04, - 0.14604321471975754321e+05, - 0.58673998924192201230e+04, - -0.16483340921160204289e+04, - -0.79132978452373226901e+04, - -0.13093346131575950494e+05, - 0.57115241811375344696e+04, - 0.11260168288717119140e+05, - 0.27775562738024473219e+04, - 0.91019857089166364972e+02, - -0.12559551898784486184e+05, - -0.54967722312591567970e+04, - 0.11406184419979072118e+05, - 0.60288670649973892068e+04, - -0.98677628962513108490e+03, - -0.68309816675265701633e+04, - -0.79604278829008326284e+04, - 0.64021033621544647758e+04, - 0.11081463305276276515e+05, - -0.38672783848580506856e+04, - -0.84161485471819341910e+04, - -0.14951819822594168272e+04, - 0.37443102098278209269e+04, - 0.86411399779210205452e+04, - -0.23214819081030841517e+04, - -0.11986934509061513381e+05, - 0.27951396973200708089e+04, - 0.93259967333217900887e+04, - -0.71486310062962434131e+03, - -0.45748275038538595254e+04, - -0.47061827531514536531e+04, - 0.25380573285605910314e+04, - 0.10135305207375533428e+05, - -0.48664654904073950092e+04, - -0.10475925177813433038e+05, - 0.70863771353716892918e+04, - 0.54716103654029557219e+04, - -0.30722743062854797245e+04, - -0.32675353214802676121e+04, - -0.33968147523176658069e+04, - 0.75326300312757421125e+04, - 0.36829261468733993752e+04, - -0.10143180212784269315e+05, - -0.12250358503757709059e+04, - 0.93371365507257123681e+04, - 0.20756881304361607476e+03, - -0.88408153614973452932e+04, - 0.23826571396194053705e+04, - 0.43743825679379297071e+04, - -0.23104778011708586405e+03, - -0.16916613817867926173e+04, - -0.61333147978104143476e+04, - 0.81525792953250975188e+04, - 0.37299260287277666066e+04, - -0.11737217987842950606e+05, - 0.27187921417228230894e+04, - 0.83374796529284267308e+04, - -0.43961861642995472721e+04, - -0.56178162240095807647e+04, - 0.47615800236969062098e+04, - 0.31851105660405487470e+04, - -0.38586200467701537491e+04, - -0.14830361266578950108e+04, - 0.10848900120221273937e+04, - 0.37262249758070956887e+04, - -0.12681008912934100863e+04, - -0.72019812232433523604e+04, - 0.71077066790476164897e+04, - 0.44115352512509252847e+04, - -0.11350052523389003909e+05, - 0.32732780522117241162e+04, - 0.80111564029089395262e+04, - -0.65391984861587870910e+04, - -0.39904407154496871044e+04, - 0.72606438022736738276e+04, - 0.69429136053663978601e+03, - -0.74148810739844020645e+04, - 0.41636130892118671909e+04, - 0.25563354860664767330e+04, - -0.35034540223728690762e+04, - 0.46562566830972980370e+03, - -0.44876233045193811222e+03, - 0.27943886853047674776e+04, - -0.12537470401908558415e+04, - -0.37796591576904506837e+04, - 0.45180969621443973665e+04, - 0.13790040238778394723e+04, - -0.54875750208961471799e+04, - 0.76555665775869988465e+03, - 0.67670735669019777561e+04, - -0.56169711559531142484e+04, - -0.42390433218316611601e+04, - 0.99443018337719677220e+04, - -0.31744402960290876763e+04, - -0.77685133474593831124e+04, - 0.85828425461623610317e+04, - 0.17817933481937300257e+04, - -0.95682251179949125799e+04, - 0.45351740017036127028e+04, - 0.64957256206959455085e+04, - -0.88592125320744980854e+04, - -0.55811300896573925456e+03, - 0.93939669633699468250e+04, - -0.61179627407683119600e+04, - -0.51020736557355630794e+04, - 0.10048507736463494439e+05, - -0.27664777051899245635e+04, - -0.71866345498272712575e+04, - 0.73398395972733396775e+04, - 0.18516310197538728062e+04, - -0.80309658718887912983e+04, - 0.30035639752270635654e+04, - 0.68352752428585736197e+04, - -0.87712314131212024222e+04, - 0.63331346216401007041e+04, - 0.27854921367876577278e+04, - -0.13283756487806744190e+05, - 0.59043282830016150911e+04, - 0.71225537100606279637e+04, - -0.79457951824387018860e+04, - -0.54601838699988202279e+04, - 0.13371401610720560711e+05, - -0.41978907608719955533e+04, - -0.11942018408986798022e+05, - 0.13558724511613123468e+05, - 0.31937662576289927330e+02, - -0.10772556289362571988e+05, - 0.42970337990674042885e+04, - 0.72428989348699751645e+04, - -0.60379245196379861227e+04, - -0.76204173907796039202e+04, - 0.12271965404203085200e+05, - 0.21076763516386952801e+03, - -0.13927962974859761744e+05, - 0.84025398765913796524e+04, - 0.77971187235178458650e+04, - -0.11142356237452015193e+05, - -0.44440822783722105669e+04, - 0.13944882260472601047e+05, - -0.82989360051816447594e+03, - -0.18410373614146443288e+05, - 0.13294860953340410560e+05, - 0.11548165907268161391e+05, - -0.22390640653099460906e+05, - 0.21973896077320164295e+04, - 0.19460216413400143210e+05, - -0.11372137326993319220e+05, - -0.14827635676498384782e+05, - 0.18049772146432231239e+05, - 0.73121904238237693789e+04, - -0.24351697225396717840e+05, - 0.66702736356438908842e+04, - 0.18441340706653816596e+05, - -0.15202674945957487580e+05, - -0.81331457934744985323e+04, - 0.12127797202120456859e+05, - 0.64108710484826106040e+04, - -0.13391918018294740250e+05, - -0.57613025996255328209e+04, - 0.17466980630109981576e+05, - -0.38779816931042819306e+03, - -0.17619938750808028999e+05, - 0.33714170036324026114e+04, - 0.19145704107611378276e+05, - -0.93521293222631156823e+04, - -0.20464235271798723261e+05, - 0.19252193205828065402e+05, - 0.12765677882491279888e+05, - -0.23957518884706267272e+05, - -0.33580138156217599317e+04, - 0.20157203271306221723e+05, - -0.40474202501124278797e+03, - -0.16219798667365523215e+05, - -0.25991272109632732281e+04, - 0.18166573224330069934e+05, - 0.26744067713692375037e+04, - -0.22781772762941553083e+05, - 0.90357991308219720850e+03, - 0.23260063596215317375e+05, - -0.31175854095365848480e+04, - -0.25370542783474964381e+05, - 0.66914901617821360560e+04, - 0.24235863414443439979e+05, - -0.10654314366905629868e+05, - -0.17540158219208184164e+05, - 0.34079042658704693167e+04, - 0.18015765495051855396e+05, - 0.43783331428838646389e+04, - -0.27699856628249548521e+05, - -0.18404963786742596312e+04, - 0.29037589129485229932e+05, - -0.88264693640375799077e+03, - -0.23389249833540980035e+05, - -0.57485902841136694406e+04, - 0.20290937767429892119e+05, - 0.13056013495942042937e+05, - -0.18706429043170392106e+05, - -0.19382292812060630240e+05, - 0.13650184314160935173e+05, - 0.26241976093428227614e+05, - -0.99704927899272224749e+04, - -0.28792489908104671485e+05, - 0.38946346564178120389e+04, - 0.21579733831907127751e+05, - 0.12272881279941282628e+05, - -0.16884475452862126986e+05, - -0.29694385965043409669e+05, - 0.16369518669799184863e+05, - 0.28965744732356833993e+05, - -0.25758054940276088018e+04, - -0.20691467404545335739e+05, - -0.22723844243940620800e+05, - 0.15358476819170980889e+05, - 0.32924944505473817117e+05, - -0.32902701057144651031e+03, - -0.27463076447828545497e+05, - -0.22574992675406338094e+05, - 0.11201663179775121534e+05, - 0.31102713138439201430e+05, - 0.16342980836283797544e+05, - -0.22292358091163612698e+05, - -0.35134079072937689489e+05, - -0.42063075451499726114e+04, - 0.22987748257327664760e+05, - 0.33683607522919744952e+05, - 0.96413605278548075148e+04, - -0.31781551027830708335e+05, - -0.34635515254494610417e+05, - -0.99135584501591820299e+04, - 0.18346096674270753283e+05, - 0.43755950388126671896e+05, - 0.25122982886901118036e+05, - -0.14313719480700927306e+05, - -0.31259338138110502769e+05, - -0.45847748643677485234e+05, - -0.19955638492872698407e+05, - 0.20610269230151592637e+05, - 0.35221567968443829159e+05, - 0.52609784072379210556e+05, - 0.34302241554474217992e+05, - 0.52834846752688770266e+03, - -0.21675638247771566967e+05, - -0.53479296838978283631e+05, - -0.64373546914138816646e+05, - -0.62548108477711080923e+05, - -0.60322932219238311518e+05, - -0.45895980654619073903e+05, - -0.33827006863264949061e+05, - -0.24225208685650617554e+05, - -0.15343863079351140186e+05, - -0.81697217152242274096e+04, - -0.56737985474239894756e+04, - -0.38065216845312502301e+04, - 0.87111579340653702275e+03, - -0.28875922951093921256e+04, - 0.54042507408567423965e+01, - 0.19653538855367019096e+04, - -0.34540741556826155829e+04, - 0.23545245426630494876e+04, - 0.45376864848048950307e+03, - -0.32735910525339963897e+04, - 0.40003372082270057035e+04, - -0.18955664183929684441e+04, - -0.18691782206092595970e+04, - 0.48552186005906096398e+04, - -0.49382535901711780753e+04, - 0.17892936219575276482e+04, - 0.28135119679383892617e+04, - -0.60244095368738035177e+04, - 0.57540035520769779396e+04, - -0.20219776807062455646e+04, - -0.29746028647746270508e+04, - 0.62188043370726354624e+04, - -0.57309875145717132909e+04, - 0.18232542492699665218e+04, - 0.31096409208685163321e+04, - -0.60566924184143754246e+04, - 0.52581600760981464191e+04, - -0.12480619044111936091e+04, - -0.34925977362357425591e+04, - 0.60928215146482671116e+04, - -0.50198214522177950130e+04, - 0.98223987672500243207e+03, - 0.35703389344153179081e+04, - -0.59489395921400446241e+04, - 0.48439486384845376961e+04, - -0.10360954141405497921e+04, - -0.31378699814520050495e+04, - 0.52422330212877113809e+04, - -0.41698008880649667844e+04, - 0.74101201663067297432e+03, - 0.28834507501607376980e+04, - -0.45312930628447111303e+04, - 0.33103163474840334857e+04, - -0.67504864218430412848e+02, - -0.31766496764489820634e+04, - 0.44737443937704301788e+04, - -0.30804222272494207573e+04, - -0.14322937669228275581e+03, - 0.32975568608884154855e+04, - -0.45714724861549539128e+04, - 0.32874516488416552420e+04, - -0.24236055287554671622e+03, - -0.27958077683885280749e+04, - 0.41342086673821495424e+04, - -0.31062785755059535404e+04, - 0.41177950245105796512e+03, - 0.23388050022684683427e+04, - -0.35706853248175093540e+04, - 0.26426827543416261506e+04, - -0.17820113556368025343e+03, - -0.23291557850046874591e+04, - 0.34003723594869725275e+04, - -0.24243000723290620044e+04, - 0.58049577463823834478e+04, - -0.58534990872156404293e+04, - -0.22326934372179448474e+04, - 0.90118519073315947026e+04, - -0.97665779031472848146e+04, - 0.53785050376871849949e+04, - 0.21706519277827164842e+04, - -0.71537817409262415822e+04, - 0.75076563567847406375e+04, - -0.22015507336542041230e+04, - -0.42649088941548689036e+04, - 0.85597856723276909179e+04, - -0.67493650429353419895e+04, - 0.68236089712143007091e+03, - 0.69712594258456847456e+04, - -0.10459462401936763854e+05, - 0.84039662929864916805e+04, - -0.82907292617508551302e+03, - -0.69033475823061835399e+04, - 0.11232201080201419245e+05, - -0.86835064430729617015e+04, - 0.18717212661615753859e+04, - 0.60223910512807651685e+04, - -0.93621415310338779818e+04, - 0.74057826581513718338e+04, - -0.81055406414936055626e+03, - -0.50400714730565787249e+04, - 0.74012852426539757289e+04, - -0.40786339064756921289e+04, - -0.13912911107575744154e+04, - 0.60031776964575001330e+04, - -0.55323474359591127723e+04, - 0.12150929333268763912e+04, - 0.48822001932975535965e+04, - -0.74607887432871903002e+04, - 0.54285506008193906382e+04, - 0.10807384706114830806e+04, - -0.69021132035810178422e+04, - 0.90909151786286565766e+04, - -0.51262108583441604424e+04, - -0.15207080574291067023e+04, - 0.74866965382751695870e+04, - -0.79792511011696551577e+04, - 0.38450243482735168072e+04, - 0.28033122203241778152e+04, - -0.62837396272725118251e+04, - 0.51289799997382942820e+04, - 0.59179738670030872072e+03, - -0.55035950707421725383e+04, - 0.65242382233494472530e+04, - -0.14426962734787200588e+04, - -0.55059860347297799308e+04, - 0.10199974313352055105e+05, - -0.77735806969965460667e+04, - 0.21155403606550439832e+02, - 0.92418074642811570811e+04, - -0.12922045378108594377e+05, - 0.90309843438086154492e+04, - 0.80840894969610098997e+03, - -0.10186628352572077347e+05, - 0.12030113098829871888e+05, - -0.82846347928663089988e+04, - -0.55400769729171361178e+04, - 0.50818563631315837483e+04, - -0.18788058953302839654e+05, - -0.12613320653070972185e+05, - -0.16663091283532347006e+05, - -0.45096099883651048003e+05, - -0.39686740446782459912e+05, - -0.55420304732852702728e+05, - -0.75209794645598682109e+05, - -0.52688101225418635295e+05, - -0.54628181711301585892e+05, - -0.32295013574549699115e+05, - 0.16351147763265204048e+05, - 0.24963639686471375171e+05, - 0.49030153249764676730e+05, - 0.49881760999054000422e+05, - 0.56315496081614483046e+04, - -0.14640135857398910957e+05, - -0.37811020055641754880e+05, - -0.45561729611280927202e+05, - -0.42728498955120767278e+04, - 0.27020599778686773789e+05, - 0.32799494335999166651e+05, - 0.29110344690917769185e+05, - -0.10488171101895926768e+05, - -0.45044440778808391769e+05, - -0.17911864982404524199e+05, - 0.41918128849899003399e+04, - 0.25763909860657196987e+05, - 0.39852536468915124715e+05, - -0.17501255831139369548e+05, - -0.34591172972672458855e+05, - -0.95907046728257701034e+04, - 0.78068391886472306851e+03, - 0.38319279035068742814e+05, - 0.17273534479736492358e+05, - -0.35049483937070617685e+05, - -0.19584293336849208572e+05, - 0.39406677768518543417e+04, - 0.20668280411962121434e+05, - 0.24888137195874707686e+05, - -0.19609860738241619401e+05, - -0.35011654842313459085e+05, - 0.12535706941653090325e+05, - 0.25911875490373640787e+05, - 0.46346704637558959803e+04, - -0.11432462926409560168e+05, - -0.27125019582304783398e+05, - 0.73320699595846481316e+04, - 0.37376537440317093569e+05, - -0.89099511059359374485e+04, - -0.28813512303334919125e+05, - 0.21800213053371408023e+04, - 0.14064499854827587114e+05, - 0.14954929350774093109e+05, - -0.81878460787750300369e+04, - -0.31442353219119235291e+05, - 0.15351009583191367710e+05, - 0.32133314057688203320e+05, - -0.21538404088275692629e+05, - -0.17310636330416127748e+05, - 0.94092326996143856377e+04, - 0.10805239810533210402e+05, - 0.96025818034125841223e+04, - -0.22485098944480650971e+05, - -0.11991939638703393939e+05, - 0.31378115898258092784e+05, - 0.47653933187799893858e+04, - -0.30554619963369026664e+05, - 0.96150865163235039290e+03, - 0.26325402082204025646e+05, - -0.70786991271793567648e+04, - -0.12944190936502305703e+05, - -0.76932205105212790386e+03, - 0.71276300210614417665e+04, - 0.17406823180164774385e+05, - -0.24367108799363260914e+05, - -0.11674497675088505275e+05, - 0.35728674241854867432e+05, - -0.71546929199000296649e+04, - -0.27281832645818336459e+05, - 0.14627923002178542447e+05, - 0.17154515891968221695e+05, - -0.15086459424897648205e+05, - -0.93009240203161261888e+04, - 0.11428174268435945123e+05, - 0.48448655836755933706e+04, - -0.31288934131691239600e+04, - -0.12212291397880488148e+05, - 0.46463795869105724705e+04, - 0.21982302027430196176e+05, - -0.22239378193243090209e+05, - -0.12976963012622185488e+05, - 0.34116061851670572651e+05, - -0.89034768546631439676e+04, - -0.25862938889947628923e+05, - 0.20610467293718844303e+05, - 0.12939806844811131668e+05, - -0.23760703844221308827e+05, - -0.70024667781990774529e+03, - 0.21775443622898772446e+05, - -0.12221864196846345294e+05, - -0.79164086303706144463e+04, - 0.10140961207544236458e+05, - -0.24163443714058425371e+03, - 0.14498214506048128669e+03, - -0.77938211700534166084e+04, - 0.36132813740919987140e+04, - 0.11383449875832306134e+05, - -0.13178409468410623958e+05, - -0.53664243295475944251e+04, - 0.18010073807036733342e+05, - -0.29204609188614667801e+04, - -0.21021138509997879737e+05, - 0.17889969100196012732e+05, - 0.12513517220361069121e+05, - -0.30237630804752374388e+05, - 0.93466024391985010880e+04, - 0.24430996234254806041e+05, - -0.26716945106276067236e+05, - -0.56681865574151042892e+04, - 0.29896379894393216091e+05, - -0.14141774358731376196e+05, - -0.20291669010182660713e+05, - 0.27691021230151181953e+05, - 0.16868302186203768542e+04, - -0.29380470329655418027e+05, - 0.19456796202742858441e+05, - 0.15218946592185779082e+05, - -0.30518039546035317471e+05, - 0.79820161214708505213e+04, - 0.22652915429678716464e+05, - -0.22657681131662244297e+05, - -0.64271429328808890205e+04, - 0.26016692189163935836e+05, - -0.10501820955405926725e+05, - -0.20271440156094173290e+05, - 0.26715791139638804452e+05, - -0.15093217605706542599e+05, - -0.13131801101653585647e+05, - 0.37468224269561120309e+05, - -0.11733088160355240689e+05, - -0.25091658469381360192e+05, - 0.23863096264240812161e+05, - 0.16198549430029528594e+05, - -0.37457845790620980551e+05, - 0.99475990839178066381e+04, - 0.34204201668209956551e+05, - -0.35030971850723311945e+05, - -0.55116906262775037249e+04, - 0.33788199445450518397e+05, - -0.11029535234510743976e+05, - -0.24653878182128657500e+05, - 0.20793820741103707405e+05, - 0.20459694054721981956e+05, - -0.35852707623609516304e+05, - 0.72379926660329851984e+03, - 0.39279661744280063431e+05, - -0.24365566983384731429e+05, - -0.22726832785610575229e+05, - 0.34355838716233243758e+05, - 0.95337000746974117646e+04, - -0.39949608974911199766e+05, - 0.74531397998276297585e+04, - 0.46271452735783866956e+05, - -0.36764422846849527559e+05, - -0.27735010128318313946e+05, - 0.58007785451320763968e+05, - -0.60149978857641735885e+04, - -0.51359946723190376360e+05, - 0.30668533490311059722e+05, - 0.38526447706241357082e+05, - -0.47451733087515036459e+05, - -0.18642220030737902562e+05, - 0.62136196216824340809e+05, - -0.14408170498530842451e+05, - -0.50042701352340038284e+05, - 0.37134086330265534343e+05, - 0.27054982577685386786e+05, - -0.34785107316402391007e+05, - -0.19420851293230785814e+05, - 0.39365927044425756321e+05, - 0.14815998438653210542e+05, - -0.48741414615781286557e+05, - 0.17272720901255599983e+04, - 0.49802534279961582797e+05, - -0.12477342004424057450e+05, - -0.50407389682136454212e+05, - 0.27242338151842359366e+05, - 0.51670499623257514031e+05, - -0.49376274063385513728e+05, - -0.34431629459602780116e+05, - 0.62219760401832383650e+05, - 0.11763818718625849215e+05, - -0.54448131842066090030e+05, - -0.21025675627881591936e+04, - 0.47159896071073926578e+05, - 0.70772717692270944099e+04, - -0.52341136153694809764e+05, - -0.42145190897674692678e+04, - 0.61194383073491357209e+05, - -0.37442376546706659610e+04, - -0.62008217913547290664e+05, - 0.88652198255551993498e+04, - 0.67315687763732319581e+05, - -0.17128162487617279112e+05, - -0.64472415174485169700e+05, - 0.25146107430131982255e+05, - 0.51220024991011778184e+05, - -0.93041925598557045305e+04, - -0.52845918977424254990e+05, - -0.70639119026250300521e+04, - 0.72932852113920744159e+05, - 0.38147659109040882868e+04, - -0.75563619563116270001e+05, - -0.68053732339261512152e+03, - 0.64329612465263649938e+05, - 0.17298436172613211966e+05, - -0.57077224651019772864e+05, - -0.35364881670338887488e+05, - 0.52041866185616047005e+05, - 0.52198058979773770261e+05, - -0.38135991019581997534e+05, - -0.69664543369175007683e+05, - 0.26281675087046478438e+05, - 0.76902302462868596194e+05, - -0.70131929119830147101e+04, - -0.61897482249810331268e+05, - -0.33631061821102019167e+05, - 0.49967648052696080413e+05, - 0.75499061894120022771e+05, - -0.41050712467696488602e+05, - -0.78427070427598227980e+05, - 0.27794246838188114452e+04, - 0.61613576928675785894e+05, - 0.58792957986374072789e+05, - -0.41857578260830377985e+05, - -0.87720503613567649154e+05, - -0.12729706217889211075e+04, - 0.75948750624146618065e+05, - 0.61301216651802016713e+05, - -0.29864668266382581351e+05, - -0.86557470104750434984e+05, - -0.42540499304004413716e+05, - 0.60074700898264825810e+05, - 0.94192422945527214324e+05, - 0.14872650636768119512e+05, - -0.65903229762140283128e+05, - -0.90760260172874055570e+05, - -0.24902291796203553531e+05, - 0.84262592489570946782e+05, - 0.95702365328686093562e+05, - 0.28148440503847021319e+05, - -0.52657601265278579376e+05, - -0.11749700658905705495e+06, - -0.67537522415855928557e+05, - 0.35104426075785355351e+05, - 0.90105777365305460989e+05, - 0.12218586518043719116e+06, - 0.53445856492380196869e+05, - -0.51887627566168288467e+05, - -0.10123425295758275024e+06, - -0.14030000031712130294e+06, - -0.93303996350745612290e+05, - -0.43963761665925358102e+04, - 0.62623384830021183006e+05, - 0.14385312090702055139e+06, - 0.17534586416885856306e+06, - 0.17222712639017411857e+06, - 0.16288861106408422347e+06, - 0.12585458180117821030e+06, - 0.92414088844170692028e+05, - 0.65845732662724709371e+05, - 0.41550247870433180651e+05, - 0.22902388597792909422e+05, - 0.15348712519491404237e+05, - 0.93386854437465954106e+04, - -0.35131498168525649817e+03, - 0.59669162332822288590e+04, - 0.50170101047193622890e+03, - -0.39983486407878253885e+04, - 0.69641102499837352298e+04, - -0.44743269369375857423e+04, - -0.13446494725304316944e+04, - 0.71320022111042781034e+04, - -0.85510748954760110792e+04, - 0.41329658853913333587e+04, - 0.37093542579863365063e+04, - -0.99688225575670203398e+04, - 0.10283017439656003262e+05, - -0.39574856210778493733e+04, - -0.53971069659516879256e+04, - 0.11978566207872148880e+05, - -0.11514632514358894696e+05, - 0.40203911482419698586e+04, - 0.60525459366702498301e+04, - -0.12578453429341680021e+05, - 0.11533424104004223409e+05, - -0.35533776103862769560e+04, - -0.64921069713158804007e+04, - 0.12478989550821692319e+05, - -0.10831068400545722398e+05, - 0.26378875607964610026e+04, - 0.70486125158792046932e+04, - -0.12385524362502821532e+05, - 0.10252591468653023185e+05, - -0.20912795397722652524e+04, - -0.71183595522143932612e+04, - 0.11912317857003650715e+05, - -0.96386029514128968003e+04, - 0.18985908280982616816e+04, - 0.65431901135462367165e+04, - -0.10731409381004734314e+05, - 0.84254929094703729788e+04, - -0.13194625167470392171e+04, - -0.61608355607087351018e+04, - 0.95676860044350614771e+04, - -0.70697550314598429395e+04, - 0.38960602515020372039e+03, - 0.63453130768411965619e+04, - -0.91429354519404751045e+04, - 0.64575815543185217393e+04, - -0.98300436912501556463e+01, - -0.63557986544996238081e+04, - 0.89614190355248138076e+04, - -0.64226466630278955563e+04, - 0.34303888534841763658e+03, - 0.57048674848561022372e+04, - -0.83041273167158124124e+04, - 0.61221147463519891971e+04, - -0.59806779262221857607e+03, - -0.49881009867194607068e+04, - 0.74415067866796489398e+04, - -0.54771808554730378091e+04, - 0.38736971640737903044e+03, - 0.47676416929777515179e+04, - -0.69666033745991508113e+04, - 0.49667711038391526017e+04, - -0.92722192326444474020e+04, - 0.80159332675543810183e+04, - 0.56529729530157246700e+04, - -0.16307246402827637212e+05, - 0.16115454219336601454e+05, - -0.73558685747322142561e+04, - -0.61323258145497748046e+04, - 0.14194952116865772041e+05, - -0.13681800807985489882e+05, - 0.32795866309876259947e+04, - 0.85783000489222376928e+04, - -0.16016881170304319312e+05, - 0.12309683629433018723e+05, - -0.12208957769410358196e+04, - -0.12306762799575768440e+05, - 0.18068764031619550224e+05, - -0.14021602263645001585e+05, - 0.55344204427666807078e+03, - 0.12570390554974464976e+05, - -0.19265089195013741119e+05, - 0.13792286073715742532e+05, - -0.13891208538255482381e+04, - -0.12076048386380789452e+05, - 0.16709220285941311886e+05, - -0.11820859402258622140e+05, - -0.78560830543414954263e+03, - 0.11039612840449086434e+05, - -0.14158099995843822398e+05, - 0.67073179920493321333e+04, - 0.42341995086374718085e+04, - -0.12806563685782726679e+05, - 0.11331715325708675664e+05, - -0.24490465465384331765e+04, - -0.95614566965295052796e+04, - 0.14662031762619439178e+05, - -0.10799053247359706802e+05, - -0.15480468673077166386e+04, - 0.12592148096206359696e+05, - -0.16693964116869898135e+05, - 0.92351740676273602730e+04, - 0.32220812312036473486e+04, - -0.14214133818159778457e+05, - 0.14779372237585866969e+05, - -0.65069646452220258652e+04, - -0.64341058704057168143e+04, - 0.13238825740502254121e+05, - -0.10896014363058520757e+05, - -0.50477347748015438356e+03, - 0.10841405299738788017e+05, - -0.13940521884752648475e+05, - 0.52267715221175594706e+04, - 0.78542432967454678874e+04, - -0.17660643127304560039e+05, - 0.14833199013629247929e+05, - -0.20106213703303824332e+04, - -0.14352556787246636304e+05, - 0.21474500955490395427e+05, - -0.15483034599323496877e+05, - -0.11805864486868326821e+04, - 0.17356094495678375097e+05, - -0.20464815105868503451e+05, - 0.13993556079705273078e+05, - 0.10516170090600560798e+05, - -0.91521652906115614314e+04, - 0.33883695607751746138e+05, - 0.23036580618045485608e+05, - 0.30516044019859557011e+05, - 0.81584358291644850397e+05, - 0.72417892614159980440e+05, - 0.10096993729560574866e+06, - 0.13597522113063937286e+06, - 0.96904083431425635354e+05, - 0.98336687730887919315e+05, - 0.59104100321948943019e+05, - -0.29270476718895857630e+05, - -0.46559557556471190765e+05, - -0.87750388382982200710e+05, - -0.91689212105037426227e+05, - -0.10126924167033279446e+05, - 0.27483659173602543888e+05, - 0.67252124948985234369e+05, - 0.84304923991266288795e+05, - 0.70061210001648014440e+04, - -0.49459775003673013998e+05, - -0.58294780245129804825e+05, - -0.54750656028900564706e+05, - 0.20616570942583697615e+05, - 0.81281148573500948260e+05, - 0.31977982636160108086e+05, - -0.60523926401405360593e+04, - -0.48768308155181883194e+05, - -0.70944189973602042301e+05, - 0.31294126961090234545e+05, - 0.62261782432788371807e+05, - 0.18924123707308644953e+05, - -0.31413810676033281197e+04, - -0.68390585702951255371e+05, - -0.31798073656850639964e+05, - 0.63164733219418143563e+05, - 0.36801471196179998515e+05, - -0.84589887010822985758e+04, - -0.36694781470069632633e+05, - -0.45450909817112398741e+05, - 0.35210619336666182789e+05, - 0.64439996687392878812e+05, - -0.23520066987561905989e+05, - -0.46741340801069658482e+05, - -0.83622066188705903187e+04, - 0.20429100608616976388e+05, - 0.49696994607775857730e+05, - -0.13493835023574016304e+05, - -0.68096950089289370226e+05, - 0.16532131684211748507e+05, - 0.52093853105702321045e+05, - -0.39316784297143030926e+04, - -0.25262784837432536733e+05, - -0.27721591715399488749e+05, - 0.15360633163665916072e+05, - 0.57048279333424259676e+05, - -0.28307801499678716937e+05, - -0.57597209547494712751e+05, - 0.38228173250363157422e+05, - 0.32064374350291280280e+05, - -0.16987469582955935039e+05, - -0.20589888790066619549e+05, - -0.15929157680910746421e+05, - 0.39291958082608187397e+05, - 0.22819122607977984444e+05, - -0.57005746830601296097e+05, - -0.99041772531858041475e+04, - 0.57677392529788899992e+05, - -0.40913833904638718195e+04, - -0.46096964446808575303e+05, - 0.12310587636229556665e+05, - 0.22651362447850155149e+05, - 0.34631796996126608974e+04, - -0.15536494787559826364e+05, - -0.29400872983326764370e+05, - 0.43095135419462305435e+05, - 0.21062077337089875073e+05, - -0.63578638054896873655e+05, - 0.10971265078426773471e+05, - 0.51540064998484725947e+05, - -0.27775358296788737789e+05, - -0.31095576191471402126e+05, - 0.28310052272358319897e+05, - 0.15531009206130176608e+05, - -0.19538905545845464076e+05, - -0.93681796403972057306e+04, - 0.53353294647061929936e+04, - 0.23306306451539618138e+05, - -0.98146657100284301123e+04, - -0.38946410222900725785e+05, - 0.40245213577746784722e+05, - 0.22782916077438523644e+05, - -0.60439202256146767468e+05, - 0.14355019727272445380e+05, - 0.48444704500105945044e+05, - -0.37953454029704735149e+05, - -0.24199748314191681857e+05, - 0.44837053326431043388e+05, - -0.80314351668166204945e+03, - -0.37750438834539469099e+05, - 0.21206884067819661141e+05, - 0.14270853090728145617e+05, - -0.17249256008238924551e+05, - -0.14018289902115468522e+04, - 0.16211332382104487806e+04, - 0.12833020512606601187e+05, - -0.61616354934035598490e+04, - -0.20116256683836993034e+05, - 0.22649082851311959530e+05, - 0.11330324530372165100e+05, - -0.34073576455182657810e+05, - 0.60156937251370800368e+04, - 0.38270798366834431363e+05, - -0.33209053319085476687e+05, - -0.21752952997935168241e+05, - 0.54032928874458368227e+05, - -0.16397352518797222729e+05, - -0.44548729633575880143e+05, - 0.48311895861675846390e+05, - 0.10745163809172352558e+05, - -0.54713690122161220643e+05, - 0.25797293067595703178e+05, - 0.37123096632728476834e+05, - -0.50773317285594552231e+05, - -0.26723665766950794023e+04, - 0.53299284968230640516e+05, - -0.35688244118812282977e+05, - -0.26928916281840534793e+05, - 0.54491122488844725012e+05, - -0.13561774086128389172e+05, - -0.41767254900544656266e+05, - 0.41164708587383342092e+05, - 0.12394279224172265458e+05, - -0.48548167350141317002e+05, - 0.20560615867062722828e+05, - 0.35567554169401788386e+05, - -0.47822591461681622604e+05, - 0.21896969441225224728e+05, - 0.29029559370153911004e+05, - -0.63001280381253403903e+05, - 0.13012695075673769679e+05, - 0.48976002307755159563e+05, - -0.41761521279660213622e+05, - -0.29058167880889730441e+05, - 0.63365292564780393150e+05, - -0.14384132651888974578e+05, - -0.58573223569186877285e+05, - 0.55048603116787620820e+05, - 0.16338214339864365684e+05, - -0.61306809721636636823e+05, - 0.16804737628622904595e+05, - 0.47554802642763097538e+05, - -0.40163657201646819885e+05, - -0.33428563231481093680e+05, - 0.62587970673655443534e+05, - -0.32688719413439589516e+04, - -0.66293070045341330115e+05, - 0.42234046374852092413e+05, - 0.39104532316791002813e+05, - -0.61782787264835627866e+05, - -0.12108760054820239020e+05, - 0.68295103815703143482e+05, - -0.19462376797473429178e+05, - -0.70638226244639794459e+05, - 0.61444051059236517176e+05, - 0.39826408135138357466e+05, - -0.90705152659874802339e+05, - 0.10025372610824586445e+05, - 0.81522614559227833524e+05, - -0.49454020536693577014e+05, - -0.60809809840231740964e+05, - 0.75509732320311755757e+05, - 0.28724816950361659110e+05, - -0.95989455703494604677e+05, - 0.18457011460123394500e+05, - 0.81542492521312145982e+05, - -0.54633265858037135331e+05, - -0.51313620897601307661e+05, - 0.59302929841018754814e+05, - 0.34951001412374571373e+05, - -0.68926734347187477397e+05, - -0.22953681540605233749e+05, - 0.81738622956481587607e+05, - -0.41965481469924652629e+04, - -0.83691091841759553063e+05, - 0.24639290647167515999e+05, - 0.80516779860855705920e+05, - -0.47310754458951771085e+05, - -0.79070375227085198276e+05, - 0.77054154941360073281e+05, - 0.55255653574652220414e+05, - -0.96926204825922744931e+05, - -0.23575997868717822712e+05, - 0.88827142055206393707e+05, - 0.81661512664045658312e+04, - -0.81999701532648192369e+05, - -0.11011817130121229638e+05, - 0.89306836898683526670e+05, - 0.29550420505065972065e+04, - -0.99291067173071554862e+05, - 0.79231533930104815227e+04, - 0.99990772250056455960e+05, - -0.15473248824930707997e+05, - -0.10737834075745845621e+06, - 0.26226492779465675994e+05, - 0.10354976614665309899e+06, - -0.35542481335144715558e+05, - -0.89154532796403218526e+05, - 0.15572290816793862177e+05, - 0.91806740452697413275e+05, - 0.47219484652415367236e+04, - -0.11593304406249713793e+06, - -0.46415749016886666141e+04, - 0.11895431288177294482e+06, - 0.53978854348669938190e+04, - -0.10625366143764162553e+06, - -0.30723478532105698832e+05, - 0.96109861733862504479e+05, - 0.57750579669255013869e+05, - -0.86895999165800050832e+05, - -0.84763365204504909343e+05, - 0.64025689852756186156e+05, - 0.11139941720314513077e+06, - -0.41653431199753067631e+05, - -0.12394322937561299477e+06, - 0.62512418717880682379e+04, - 0.10618600452837036573e+06, - 0.55052865224128981936e+05, - -0.87223384507962342468e+05, - -0.11634369195309682982e+06, - 0.62342878485226414341e+05, - 0.12799912025234712928e+06, - 0.11597513822015012011e+04, - -0.10798990700767096132e+06, - -0.92527483943197396002e+05, - 0.69153205548270416330e+05, - 0.14072338450568349799e+06, - 0.51032135440231313623e+04, - -0.12567888208181421214e+06, - -0.10095264329024913604e+06, - 0.48880429801037833386e+05, - 0.14375605802483976004e+06, - 0.67394061138313889387e+05, - -0.97641322358451972832e+05, - -0.15258844409262380213e+06, - -0.28550300096835348086e+05, - 0.11178363536131395085e+06, - 0.14835448117534909397e+06, - 0.38051950460419546289e+05, - -0.13435168847251366242e+06, - -0.15885000335887089022e+06, - -0.48201472438144439366e+05, - 0.90916204536677687429e+05, - 0.18928318017336778576e+06, - 0.11028400025800301228e+06, - -0.52619854717481408443e+05, - -0.15448171204799634870e+06, - -0.19643066293069301173e+06, - -0.86569731004892091732e+05, - 0.79392610577876112075e+05, - 0.17305682169740062091e+06, - 0.22610508943679172080e+06, - 0.15246439117048354819e+06, - 0.11585949287344876211e+05, - -0.10779445097162092861e+06, - -0.23327697797855158569e+06, - -0.28735675988548382884e+06, - -0.28499767745445814217e+06, - -0.26504591800478991354e+06, - -0.20735803556202742038e+06, - -0.15205770837172909523e+06, - -0.10760944277649364085e+06, - -0.67764772355383436661e+05, - -0.38631477372216795629e+05, - -0.24690096686719465652e+05, - -0.14263284223613844006e+05, - -0.18575827185411008031e+04, - -0.74651514807967096203e+04, - -0.13014135080472497066e+04, - 0.45534541198141196219e+04, - -0.80772304083776043626e+04, - 0.49191083288233339772e+04, - 0.18625089781438571208e+04, - -0.85977847493669323740e+04, - 0.10186447883032498794e+05, - -0.49825773193028871901e+04, - -0.42121506055102190658e+04, - 0.11581592364065261791e+05, - -0.12060451035305461119e+05, - 0.48264639564301560313e+04, - 0.59620231085026316578e+04, - -0.13601669810354196670e+05, - 0.13145893733874761892e+05, - -0.45886513054696924883e+04, - -0.69530887626843223188e+04, - 0.14425731020352066480e+05, - -0.13189954543167634256e+05, - 0.39767855781013799970e+04, - 0.76045725938585956101e+04, - -0.14496537871462413023e+05, - 0.12580094701536210778e+05, - -0.31131135055310155622e+04, - -0.80777430298399285675e+04, - 0.14257271963093027807e+05, - -0.11829399642365509862e+05, - 0.24589089911261730776e+04, - 0.81139066184124658321e+04, - -0.13594696481899860373e+05, - 0.10938277556274981180e+05, - -0.20049332374165669535e+04, - -0.76994607364491148473e+04, - 0.12458967268853188216e+05, - -0.96989142049615165888e+04, - 0.13940231517321290085e+04, - 0.73258877394943901891e+04, - -0.11306464892864407375e+05, - 0.84208338438895152649e+04, - -0.65361581855708027433e+03, - -0.72216233206613133007e+04, - 0.10577241238194203106e+05, - -0.76013536370170359078e+04, - 0.25218858506853399604e+03, - 0.70547255471867929373e+04, - -0.10083079505295909257e+05, - 0.72292790165446731407e+04, - -0.32416015401116487737e+03, - -0.65366578084748771289e+04, - 0.94384532613387164020e+04, - -0.68648848747330694096e+04, - 0.48694601453275646463e+03, - 0.59145215187346666426e+04, - -0.86686423371059408964e+04, - 0.63161890549663439742e+04, - -0.37244219699868705220e+03, - -0.56126703758797784758e+04, - 0.81450494669295640051e+04, - -0.57951835757285616637e+04, - 0.87232690149598547578e+04, - -0.62194038368811752662e+04, - -0.73423720662913119668e+04, - 0.17150265170968537859e+05, - -0.15608139519422777084e+05, - 0.57244484762460688216e+04, - 0.82476534450248709618e+04, - -0.15838723623248029980e+05, - 0.14277286972916754166e+05, - -0.26821009426944738152e+04, - -0.98331091503989282501e+04, - 0.17258780537000904587e+05, - -0.12905617852788594973e+05, - 0.11266300980214082301e+04, - 0.12782240985138636461e+05, - -0.18294589678713487956e+05, - 0.13693656539586281724e+05, - 0.28162501600547659564e+03, - -0.13301149244891594208e+05, - 0.19299013914506558649e+05, - -0.12751712462687588413e+05, - -0.36482653813840624935e+03, - 0.13774501356934790238e+05, - -0.17356091378777768114e+05, - 0.10982921241279180322e+05, - 0.28873098166103900439e+04, - -0.13369308658347246819e+05, - 0.15605228640813240418e+05, - -0.64764809025367821960e+04, - -0.59598869578332478341e+04, - 0.15166655254143921411e+05, - -0.13050877939631407571e+05, - 0.27593664964619624698e+04, - 0.10716779693170956307e+05, - -0.16424681903142980445e+05, - 0.12148427407431307074e+05, - 0.13777896023741864155e+04, - -0.13454457874988751428e+05, - 0.17867942853795655537e+05, - -0.97173646751196356490e+04, - -0.38320546346306900887e+04, - 0.15626761954928659179e+05, - -0.15968494357959694753e+05, - 0.65689756160381612062e+04, - 0.78785555736245996741e+04, - -0.15536214809152734233e+05, - 0.12903738254107505782e+05, - -0.28050235156746094134e+02, - -0.12104968012236984578e+05, - 0.16473364250865331996e+05, - -0.77480908777390513933e+04, - -0.64453974927543904414e+04, - 0.17912958058043768688e+05, - -0.16317191329203598798e+05, - 0.38821711310800101273e+04, - 0.13012288379602838177e+05, - -0.20971786588831011613e+05, - 0.15664852438130283190e+05, - 0.80787656144439336003e+03, - -0.17123026322264082410e+05, - 0.20260887928207666846e+05, - -0.13835868540210109131e+05, - -0.11363519407514126215e+05, - 0.93816435815517670562e+04, - -0.35280190503057681781e+05, - -0.24586226742574068339e+05, - -0.32261824801154321904e+05, - -0.85745282688278821297e+05, - -0.76666844700942994677e+05, - -0.10660109832656750223e+06, - -0.14289593807669921080e+06, - -0.10306827194129909913e+06, - -0.10299889075511720148e+06, - -0.62578844007426690951e+05, - 0.30387971190515800117e+05, - 0.50197935983166142250e+05, - 0.91346228854765053256e+05, - 0.97540362862131310976e+05, - 0.10703132734663300653e+05, - -0.29907181408062937408e+05, - -0.69482803757880203193e+05, - -0.90329592201901628869e+05, - -0.66942853626057722067e+04, - 0.52530423276817338774e+05, - 0.60189153000792175590e+05, - 0.59517210449075289944e+05, - -0.23238397929911010579e+05, - -0.85144733515742787858e+05, - -0.33187649860103301762e+05, - 0.48997191465896003137e+04, - 0.53285072746822246700e+05, - 0.73375254122050464503e+05, - -0.32467291877838197252e+05, - -0.65137897468146235042e+05, - -0.21329115341967022687e+05, - 0.49291698084080726403e+04, - 0.70913955665071334806e+05, - 0.33973885398135978903e+05, - -0.66184421192848967621e+05, - -0.39871055024718807545e+05, - 0.10087720479119834636e+05, - 0.37897962765484655392e+05, - 0.48155586501616351597e+05, - -0.36776454509320792567e+05, - -0.68655491206031292677e+05, - 0.25442401575633542961e+05, - 0.48993994234181198408e+05, - 0.87550076170130396349e+04, - -0.21233273649138674955e+05, - -0.52753486334542263648e+05, - 0.14359939928754774883e+05, - 0.71983979986490900046e+05, - -0.17745446385969455150e+05, - -0.54708291093484607700e+05, - 0.41621491342721428737e+04, - 0.26310488932722793834e+05, - 0.29787603174611511349e+05, - -0.16676633715396812477e+05, - -0.60069201588853480644e+05, - 0.30266734781122529967e+05, - 0.59920769372812108486e+05, - -0.39358107079144188901e+05, - -0.34495352843600325286e+05, - 0.17925731000950723683e+05, - 0.22509681073938299960e+05, - 0.15421170614583419592e+05, - -0.39945380134790088050e+05, - -0.25116295191643672297e+05, - 0.60258957506662271044e+05, - 0.11396301718368500588e+05, - -0.62607876077699846064e+05, - 0.63129453025895154497e+04, - 0.47100506146466592327e+05, - -0.12485727982883165168e+05, - -0.23160299742658720788e+05, - -0.53907790133235348549e+04, - 0.18535409962418201758e+05, - 0.29205446794287618104e+05, - -0.44599872434050426818e+05, - -0.21867895656789743953e+05, - 0.65682923615476131090e+05, - -0.96879910097548727208e+04, - -0.56054586062026959553e+05, - 0.30189319592820011167e+05, - 0.32982361817307129968e+05, - -0.30966433154959173407e+05, - -0.14844521216565446593e+05, - 0.19266072485831606173e+05, - 0.10506657153296058823e+05, - -0.52997162638958288881e+04, - -0.25713012774117843946e+05, - 0.11810176525063094232e+05, - 0.39897259830306124059e+05, - -0.42024764179235746269e+05, - -0.23510145145750695519e+05, - 0.62450597544910473516e+05, - -0.13521575103621096787e+05, - -0.52442343098506513343e+05, - 0.40588976275197142968e+05, - 0.25985002742192144069e+05, - -0.48620505526982233278e+05, - 0.25856434208434425273e+04, - 0.38259467238909492153e+05, - -0.21504029445797448716e+05, - -0.14947232774596526724e+05, - 0.17172561946010351676e+05, - 0.30578046682782073731e+04, - -0.33103033999199151367e+04, - -0.12430345527127668902e+05, - 0.62093393087414096954e+04, - 0.20660383700179725565e+05, - -0.22725335855109882687e+05, - -0.13302327230353352206e+05, - 0.37029048203047532297e+05, - -0.68444624774951616928e+04, - -0.40551587648444736260e+05, - 0.35743162008095736383e+05, - 0.22017974953728418768e+05, - -0.56200876056710818375e+05, - 0.16890218715027749568e+05, - 0.46923289989274780964e+05, - -0.50513217578509051236e+05, - -0.11930075582697256323e+05, - 0.58182526801136795257e+05, - -0.27343946899850252521e+05, - -0.39419514446860819589e+05, - 0.54094361916159461543e+05, - 0.22435598271209032646e+04, - -0.55865520744598121382e+05, - 0.37686365122908056946e+05, - 0.27931803972503425030e+05, - -0.56694722586207179120e+05, - 0.13455887350073953712e+05, - 0.44679968437421266572e+05, - -0.43577647575907511055e+05, - -0.13480043603433119642e+05, - 0.52086260997986522852e+05, - -0.22781186900204058475e+05, - -0.36535042514841501543e+05, - 0.49867432592493496486e+05, - -0.18986224058838004566e+05, - -0.34313891580633026024e+05, - 0.62365063117985235294e+05, - -0.73801367728364648428e+04, - -0.53955049139210641442e+05, - 0.42351780956549591792e+05, - 0.30811787119863762200e+05, - -0.63522225340750548639e+05, - 0.12435834281094093967e+05, - 0.59118192151529670809e+05, - -0.51715007118337765860e+05, - -0.21692428161991305387e+05, - 0.64177561240949231433e+05, - -0.14957992674208790049e+05, - -0.52328766670970719133e+05, - 0.44043601352142279211e+05, - 0.32629398501651790866e+05, - -0.64322178159947812674e+05, - 0.51860955298081207729e+04, - 0.65893016700896027032e+05, - -0.43036620833460394351e+05, - -0.39342206669383005647e+05, - 0.64423704964251483034e+05, - 0.88990071702641944285e+04, - -0.68733663054522534367e+05, - 0.25011052346611675603e+05, - 0.64278541568247339455e+05, - -0.60867452699608627881e+05, - -0.33641178151869251451e+05, - 0.84210807315842292155e+05, - -0.99480966966262603819e+04, - -0.76646725642518169479e+05, - 0.47076475625181941723e+05, - 0.57175461663106179913e+05, - -0.71393026752087171189e+05, - -0.26368893597473401314e+05, - 0.88291106041820370592e+05, - -0.13684559050895242763e+05, - -0.78565860129479755415e+05, - 0.47639277945925503445e+05, - 0.55654387904408897157e+05, - -0.59264420689702026721e+05, - -0.36890492120008922939e+05, - 0.70913741202710501966e+05, - 0.21029251993383157242e+05, - -0.81002879066909095854e+05, - 0.55396825294988602764e+04, - 0.82556180446491591283e+05, - -0.27056011205212707864e+05, - -0.76671067402063665213e+05, - 0.48329415947729576146e+05, - 0.72023571757885962143e+05, - -0.71795096019803764648e+05, - -0.52113340397294850845e+05, - 0.89206016535156391910e+05, - 0.26964316762734863005e+05, - -0.86029768093574544764e+05, - -0.12035862017897201440e+05, - 0.83891359681657821056e+05, - 0.97611217588253330177e+04, - -0.89241246624603125383e+05, - 0.17938680313714175441e+03, - 0.95657095034072612179e+05, - -0.91936754689129429607e+04, - -0.95815062656886977493e+05, - 0.16113323294346808325e+05, - 0.10137279569662621361e+06, - -0.23653267958839271159e+05, - -0.98745600451477672323e+05, - 0.29575365790494048269e+05, - 0.91120525820232389378e+05, - -0.15561972677784566258e+05, - -0.93396457774419846828e+05, - 0.12281112026275993685e+04, - 0.10939465934118589212e+06, - 0.31966982551606170091e+04, - -0.11132650333653009147e+06, - -0.88387703396789329418e+04, - 0.10378847595451386587e+06, - 0.31804783911296686711e+05, - -0.95374966137293245993e+05, - -0.55940220929663999414e+05, - 0.85731784723017335637e+05, - 0.81612650029587544850e+05, - -0.63549561551413295092e+05, - -0.10554775762908594334e+06, - 0.39041003158131476084e+05, - 0.11855847956240571511e+06, - -0.15389470695978397998e+04, - -0.10726321032690259744e+06, - -0.53097353016561122786e+05, - 0.88903788538782842807e+05, - 0.10680637105690067983e+06, - -0.56384562333662732271e+05, - -0.12380127738382521784e+06, - -0.57716607064271047420e+04, - 0.11039343340755983081e+06, - 0.86960400544740172336e+05, - -0.67977195934807139565e+05, - -0.13370775215428258525e+06, - -0.75195603457725892440e+04, - 0.12269915068421552132e+06, - 0.98868961567069505691e+05, - -0.47970728654086167808e+05, - -0.14055849921816366259e+06, - -0.63781466070940157806e+05, - 0.94155894439599083853e+05, - 0.14672139693354573683e+06, - 0.30828222137472901522e+05, - -0.11108425147599578486e+06, - -0.14425584092654913547e+06, - -0.34035007867296852055e+05, - 0.12686764325870368339e+06, - 0.15584300433790730312e+06, - 0.48835776378984308394e+05, - -0.92667680489301696070e+05, - -0.18027876015733755776e+06, - -0.10718098866746714339e+06, - 0.47196913872105476912e+05, - 0.15560851535162093933e+06, - 0.18722211304438952357e+06, - 0.83401893717621394899e+05, - -0.72560937629352032673e+05, - -0.17368995096679800190e+06, - -0.21636914886840953841e+06, - -0.14743365459535329137e+06, - -0.14965756181447182826e+05, - 0.10887184337440870877e+06, - 0.22442441340908623533e+06, - 0.27863086867773957783e+06, - 0.27898465835873782635e+06, - 0.25554927224013375235e+06, - 0.20202722742923631449e+06, - 0.14823842652396438643e+06, - 0.10397156802077722386e+06, - 0.65591280273283977294e+05, - 0.38408288722184188373e+05, - 0.23455037637081753928e+05, - 0.13152573209420073908e+05, - 0.36274760277668706294e+04, - 0.55146023774819877872e+04, - 0.14867974562454487568e+04, - -0.26311426379322424509e+04, - 0.50382517644550316618e+04, - -0.28871756166549930640e+04, - -0.12475818272550613983e+04, - 0.54005087165398581419e+04, - -0.63472034275533796972e+04, - 0.31333098473537488644e+04, - 0.25347688945642471481e+04, - -0.70902678616881412381e+04, - 0.74317577357467998809e+04, - -0.30482092759302772720e+04, - -0.35288480646711241207e+04, - 0.82086015798661137524e+04, - -0.79672929593158569332e+04, - 0.27896275819308248174e+04, - 0.42143367388358028620e+04, - -0.87513429828722291859e+04, - 0.79936893363468016105e+04, - -0.23839797799377279262e+04, - -0.46651732666659563620e+04, - 0.88571323352806539333e+04, - -0.76852125846598446515e+04, - 0.19157553987073526969e+04, - 0.49022143681566485611e+04, - -0.86685654919517510280e+04, - 0.71952781122460455663e+04, - -0.14995449830789918906e+04, - -0.49217365681681612841e+04, - 0.82366559995008155965e+04, - -0.65968639404372297577e+04, - 0.11433094471474657894e+04, - 0.47625703257296145239e+04, - -0.76363653888010776427e+04, - 0.59127440156144875800e+04, - -0.80447625817833898054e+03, - -0.45508383681431923833e+04, - 0.70005297466090933085e+04, - -0.52413619458612911330e+04, - 0.48125702378182836583e+03, - 0.43649412037267247797e+04, - -0.64664091073712070283e+04, - 0.47051298069627182485e+04, - -0.26197219429360023923e+03, - -0.41810441565669079864e+04, - 0.60444231452744534181e+04, - -0.43466242057498402573e+04, - 0.19296848825220396861e+03, - 0.39339199934556604603e+04, - -0.56618827219046470418e+04, - 0.40766233127589985088e+04, - -0.20051603895177146342e+03, - -0.36656203005776133068e+04, - 0.52941264218762926248e+04, - -0.38092681830324850125e+04, - 0.14823208690803650711e+03, - 0.35150955249317507878e+04, - -0.50472402358178751456e+04, - 0.35803279533300510593e+04, - -0.44604220095166492683e+04, - 0.24708415682985400963e+04, - 0.48254692399166633550e+04, - -0.97128702396432981914e+04, - 0.82099537585547168419e+04, - -0.23166066645128444179e+04, - -0.54615620573651713130e+04, - 0.93140946735909674317e+04, - -0.79445866653278098966e+04, - 0.10992838174249236545e+04, - 0.59560417228816122588e+04, - -0.99187324233499311958e+04, - 0.72073989696749258655e+04, - -0.48401165235821315491e+03, - -0.72100363479824509341e+04, - 0.10031627847239275070e+05, - -0.72334676462618881487e+04, - -0.59531344060980097765e+03, - 0.75805539928258194777e+04, - -0.10458332316956351860e+05, - 0.63619400885238810588e+04, - 0.10946263657194708685e+04, - -0.83092719561669582617e+04, - 0.96996406496216986852e+04, - -0.54906038537472131793e+04, - -0.26510603338870041625e+04, - 0.84265072842399931687e+04, - -0.91760779338954635023e+04, - 0.33806347817784685503e+04, - 0.41028891269779041977e+04, - -0.93967559331400843803e+04, - 0.79202615456361190809e+04, - -0.16386460692372909307e+04, - -0.63844032479347933986e+04, - 0.97637407192884438700e+04, - -0.72242877862417753931e+04, - -0.69978233389615240867e+03, - 0.77545121170826432717e+04, - -0.10286438140203736111e+05, - 0.55053623849439400146e+04, - 0.24023722051010813630e+04, - -0.92105904066455386783e+04, - 0.92951064047741183458e+04, - -0.36394147577313183319e+04, - -0.49522342375183270633e+04, - 0.95509259300913436164e+04, - -0.80082833960546868184e+04, - 0.32072430404255214853e+03, - 0.71390308590419326720e+04, - -0.10144194531401957647e+05, - 0.54279514581425546567e+04, - 0.28009879219454719532e+04, - -0.98352231003488759598e+04, - 0.95891515517545540206e+04, - -0.30506617647198077066e+04, - -0.63725469024978556263e+04, - 0.11127853850587071065e+05, - -0.86333872272445842100e+04, - -0.15974833200534439470e+03, - 0.90574290129190649168e+04, - -0.10802162300800795492e+05, - 0.74024275292349957454e+04, - 0.65130508824665384964e+04, - -0.50946662867403119890e+04, - 0.19666505319638195942e+05, - 0.14157690350392113032e+05, - 0.18257060492416825582e+05, - 0.48452546792505578196e+05, - 0.43592971575568888511e+05, - 0.60401330926538343192e+05, - 0.80770597149232067750e+05, - 0.58743933838746401307e+05, - 0.58071228661460074363e+05, - 0.35518211353303006035e+05, - -0.16945852028036893898e+05, - -0.28983064213031328109e+05, - -0.51180955969229573384e+05, - -0.55628559730306682468e+05, - -0.61348791711251360539e+04, - 0.17460619666184498783e+05, - 0.38598406583556687110e+05, - 0.51905451355073215382e+05, - 0.34449745099278302405e+04, - -0.29963594418073058478e+05, - -0.33419816628911074076e+05, - -0.34643520879650233837e+05, - 0.13947016365067123843e+05, - 0.47923965471820461971e+05, - 0.18541648692448889051e+05, - -0.20284339750898843704e+04, - -0.31130379608449002262e+05, - -0.40823156549885010463e+05, - 0.18102708005653552391e+05, - 0.36655138968256287626e+05, - 0.12762601881134012729e+05, - -0.36049197642101412384e+04, - -0.39554729233558995475e+05, - -0.19483544075611043809e+05, - 0.37295866716623335378e+05, - 0.23105595331329335750e+05, - -0.62949481161213816449e+04, - -0.21063404091192431224e+05, - -0.27404920130441503716e+05, - 0.20672190192292167922e+05, - 0.39226721290253139159e+05, - -0.14722833144758678827e+05, - -0.27606049876976387168e+05, - -0.49372675995472927752e+04, - 0.11890449418374428205e+05, - 0.30035257116920045519e+05, - -0.81802330995755137337e+04, - -0.40875490509786286566e+05, - 0.10207917671558308939e+05, - 0.30891642322094146948e+05, - -0.23926377725746447140e+04, - -0.14704359208314190255e+05, - -0.17186706816377980431e+05, - 0.97143121755250103888e+04, - 0.33968996336865246121e+05, - -0.17359541815444343229e+05, - -0.33506698524430663383e+05, - 0.21771514036252832739e+05, - 0.19939108851750017493e+05, - -0.10218429327579797246e+05, - -0.13102196247451294767e+05, - -0.80738748157232066660e+04, - 0.21881844397317305265e+05, - 0.14785515346612824942e+05, - -0.34265483315443008905e+05, - -0.68553994221702605500e+04, - 0.36276240556866709085e+05, - -0.45022248936848527592e+04, - -0.25976851177325166645e+05, - 0.68430899638111914101e+04, - 0.12775377132760633685e+05, - 0.38684066283922575167e+04, - -0.11493214359829338719e+05, - -0.15741711349313252867e+05, - 0.24937235316854032135e+05, - 0.12138749731899410108e+05, - -0.36480420849013709812e+05, - 0.45416560396665126973e+04, - 0.32568945064391213236e+05, - -0.17478609902006483026e+05, - -0.18875686202948807477e+05, - 0.18202207585176449356e+05, - 0.75479120938601263333e+04, - -0.10176309596930030239e+05, - -0.62961001653882922255e+04, - 0.28268148297428642763e+04, - 0.15185559873892629184e+05, - -0.75027615961042965864e+04, - -0.21916045946724625537e+05, - 0.23501800772401089489e+05, - 0.13138190821302387121e+05, - -0.34780556982789603353e+05, - 0.68587830565676276819e+04, - 0.30416836410271651403e+05, - -0.23339720303261387016e+05, - -0.14868270415231547304e+05, - 0.28122791651095551060e+05, - -0.22575748169997468722e+04, - -0.20948897453327626863e+05, - 0.11768134352403973026e+05, - 0.84364578007222917222e+04, - -0.92713522537528879184e+04, - -0.24481444056996192558e+04, - 0.25945957514379228996e+04, - 0.65627262344278897217e+04, - -0.34235279968434665534e+04, - -0.11408746833878079997e+05, - 0.12310920957677777551e+05, - 0.81630418850216628925e+04, - -0.21452232947819695255e+05, - 0.40460186803171918655e+04, - 0.23143230978477342433e+05, - -0.20662998713758057420e+05, - -0.11989925652934109166e+05, - 0.31461759099568618694e+05, - -0.94171159431275591487e+04, - -0.26476770038293710968e+05, - 0.28308124897192810749e+05, - 0.71437416832524450001e+04, - -0.33268222485130223504e+05, - 0.15594246364241438641e+05, - 0.22470640808554562682e+05, - -0.30963315210065062274e+05, - -0.90655931796277513968e+03, - 0.31379019529448421963e+05, - -0.21273899423676935839e+05, - -0.15675853598147556113e+05, - 0.31788524377915553487e+05, - -0.72163429274937816444e+04, - -0.25654183475060472119e+05, - 0.24835789374084615702e+05, - 0.77460372688210136403e+04, - -0.29842867198909036233e+05, - 0.13352036595896706785e+05, - 0.20289860883945737442e+05, - -0.28010583212485984404e+05, - 0.90438078189455736720e+04, - 0.20935221212773853040e+05, - -0.33526199201866169460e+05, - 0.14850078991718432917e+04, - 0.31425997724419983570e+05, - -0.23069563599657893064e+05, - -0.17717855522960126109e+05, - 0.34687664832747504988e+05, - -0.58964094690927277043e+04, - -0.32413460564503850037e+05, - 0.26707322697066654655e+05, - 0.14026477656902008675e+05, - -0.35972750751648076402e+05, - 0.71643045180237322711e+04, - 0.30605912448870709341e+05, - -0.25608038518926772667e+05, - -0.17484555063676809368e+05, - 0.35861813637030405516e+05, - -0.38110681950291518660e+04, - -0.35533313865423835523e+05, - 0.23748270475214754697e+05, - 0.21389817977762460941e+05, - -0.36080599758202253724e+05, - -0.34496376548976204504e+04, - 0.37556541661050665425e+05, - -0.16105372332901259142e+05, - -0.32037610667918550462e+05, - 0.32845638436944274872e+05, - 0.15381374010879289926e+05, - -0.42728883346900642209e+05, - 0.53911673332723194108e+04, - 0.39321601478103140835e+05, - -0.24405897265684958256e+05, - -0.29416305419977619749e+05, - 0.36868478707514368580e+05, - 0.13292824686505884529e+05, - -0.44500256574331171578e+05, - 0.53405828256076210891e+04, - 0.41227759395821471117e+05, - -0.22663513183767634473e+05, - -0.32126810105013992143e+05, - 0.32027062386391156906e+05, - 0.21062976772311925743e+05, - -0.39532236252301328932e+05, - -0.10473407460510068631e+05, - 0.43664116726882886724e+05, - -0.37391951698189254785e+04, - -0.44116855394226673525e+05, - 0.15596041970673888500e+05, - 0.40021007179207481386e+05, - -0.26776297717867761094e+05, - -0.35908293370096384024e+05, - 0.36700124942641523376e+05, - 0.26658758287498087157e+05, - -0.44689020328473932750e+05, - -0.16353727006603232439e+05, - 0.45506821147376052977e+05, - 0.83199660783136896498e+04, - -0.46514674052865972044e+05, - -0.45606909383535357847e+04, - 0.48237735828505399695e+05, - -0.13885524585919438323e+04, - -0.50340234199740283657e+05, - 0.55647469276596111740e+04, - 0.50180198325168516021e+05, - -0.91547352569343875075e+04, - -0.52167888269374670926e+05, - 0.11575637410383764291e+05, - 0.51447831126960874826e+05, - -0.13315978414675821114e+05, - -0.50412819509021748672e+05, - 0.85054227620723049768e+04, - 0.51375325982486407156e+05, - -0.33609807355994034879e+04, - -0.56392359029294158972e+05, - -0.11010480722428901572e+04, - 0.56978326081479259301e+05, - 0.63528174884360241776e+04, - -0.55221502794818399707e+05, - -0.17729073123217756802e+05, - 0.51394426698219074751e+05, - 0.29579325955194424751e+05, - -0.46022950281727156835e+05, - -0.42885918361189062125e+05, - 0.34339841822941452847e+05, - 0.54539864397932746215e+05, - -0.19918863968920944899e+05, - -0.61949666527545457939e+05, - -0.13200959481812715239e+04, - 0.58782629447814841114e+05, - 0.27817967202446299780e+05, - -0.48894379472352869925e+05, - -0.53743066525457346870e+05, - 0.27956075899034865870e+05, - 0.65293551537528561312e+05, - 0.51510762583599180289e+04, - -0.60868851728772089700e+05, - -0.44850897932861946174e+05, - 0.36535874362656068115e+05, - 0.69268824702994592371e+05, - 0.51989350062197863735e+04, - -0.65153870159043442982e+05, - -0.52897764358834559971e+05, - 0.25848942022535335127e+05, - 0.74626714770648686681e+05, - 0.33125097323298170522e+05, - -0.49571545471578283468e+05, - -0.77029816479061890277e+05, - -0.17613615160960591311e+05, - 0.59759312846198299667e+05, - 0.76666852518598345341e+05, - 0.16458106349696201505e+05, - -0.65359044204335164977e+05, - -0.83206734348291007336e+05, - -0.26921694454154916457e+05, - 0.51295444171907372947e+05, - 0.93539382521858089603e+05, - 0.56944322008826980891e+05, - -0.23249083563544088975e+05, - -0.84974739847717413795e+05, - -0.97348745283071228187e+05, - -0.43968685055268782889e+05, - 0.36433594179493018601e+05, - 0.94430155405846104259e+05, - 0.11310061009241349529e+06, - 0.77715248613551273593e+05, - 0.96171255135703540873e+04, - -0.59489659231408295454e+05, - -0.11790878769197579823e+06, - -0.14715750801541592227e+06, - -0.14876659554857067997e+06, - -0.13437796302052092506e+06, - -0.10718524225637757627e+06, - -0.78816342768376794993e+05, - -0.54675753731975542905e+05, - -0.34699869566670582572e+05, - -0.20701272927399444598e+05, - -0.12163688402523674085e+05, - -0.66856491453144753905e+04, - -0.26915604136998149443e+04, - -0.21985413143833729919e+04, - -0.81087949780835992897e+03, - 0.50416631008836390038e+03, - -0.13464134686326349311e+04, - 0.68309521560605139712e+03, - 0.31984759372149869705e+03, - -0.13818521524887698888e+04, - 0.16112971506604283149e+04, - -0.80286520657225617015e+03, - -0.62582115970312179343e+03, - 0.17757620603624186515e+04, - -0.18698570415402011804e+04, - 0.77817024654252475102e+03, - 0.86682860612554918589e+03, - -0.20413029341967753680e+04, - 0.19874956198001918892e+04, - -0.69922287832637118754e+03, - -0.10476241827941657903e+04, - 0.21807246032436878522e+04, - -0.19927839592165366867e+04, - 0.59349228880931275398e+03, - 0.11656442396564139017e+04, - -0.22116967809893026242e+04, - 0.19188661532313815314e+04, - -0.47849917331291902656e+03, - -0.12229270556842463975e+04, - 0.21618497165882372428e+04, - -0.17924549152298072840e+04, - 0.36993156135701394760e+03, - 0.12316688043300903246e+04, - -0.20552072775426963744e+04, - 0.16402668805648550006e+04, - -0.27370048941082092142e+03, - -0.12027297203109255861e+04, - 0.19175707138039754227e+04, - -0.14800369695750512165e+04, - 0.19501534547308787637e+03, - 0.11510046384412323732e+04, - -0.17676463634710926272e+04, - 0.13277157284410620832e+04, - -0.13279902318781475401e+03, - -0.10873427173129932726e+04, - 0.16229832749473405329e+04, - -0.11918884671149126007e+04, - 0.86793873901947392824e+02, - 0.10235580877291473598e+04, - -0.14946114622697132290e+04, - 0.10799065714011608179e+04, - -0.53358162390946077380e+02, - -0.96736075680249018660e+03, - 0.13921415006153858940e+04, - -0.99436158369998577200e+03, - 0.30177635203426678601e+02, - 0.92633279473697700723e+03, - -0.13207030610581264227e+04, - 0.93724561900662945391e+03, - -0.13382120851211702472e+02, - -0.90515928987886582036e+03, - 0.12842753985418992215e+04, - -0.90794431215988629447e+03, - 0.95608916687120392908e+03, - -0.37101471969239463533e+03, - -0.12716311375920552109e+04, - 0.22892816141377256827e+04, - -0.18109361751104411269e+04, - 0.36761273360028866364e+03, - 0.14322099197748561892e+04, - -0.22469757644712581168e+04, - 0.18285837456807773833e+04, - -0.16741060870945045735e+03, - -0.14776782219531892224e+04, - 0.23527095845796434332e+04, - -0.16597870807334638812e+04, - 0.66857471046540780435e+02, - 0.17022007985557081611e+04, - -0.22985346279788077481e+04, - 0.15947104201595582254e+04, - 0.23390066057836830282e+03, - -0.17996025056360156213e+04, - 0.23700670052160025989e+04, - -0.13254575497890743918e+04, - -0.43584253828201781289e+03, - 0.20561734931992095881e+04, - -0.22529924849354874823e+04, - 0.11405080873972428890e+04, - 0.83254130024860216963e+03, - -0.21568878228709932046e+04, - 0.22261551940244476100e+04, - -0.73411699280850564264e+03, - -0.11160843464146682891e+04, - 0.23766127199676752753e+04, - -0.19711013742007100973e+04, - 0.40027313323432866810e+03, - 0.15661858637165921664e+04, - -0.23890376343105854176e+04, - 0.17651141482863342844e+04, - 0.15457765318472755212e+03, - -0.18579758038133977607e+04, - 0.24577817495516396775e+04, - -0.12949895720676861401e+04, - -0.61813590940237315863e+03, - 0.22502519555837784537e+04, - -0.22500183627353358133e+04, - 0.85101831646361779349e+03, - 0.12571179067767182005e+04, - -0.23975740398794418979e+04, - 0.20297670119941096800e+04, - -0.14531755656337466576e+03, - -0.17266459051956580879e+04, - 0.25410758851909190525e+04, - -0.14783480062304436160e+04, - -0.49437241071104841694e+03, - 0.22565315663504629811e+04, - -0.23293975056077315458e+04, - 0.88986012532734105207e+03, - 0.13023476878406702326e+04, - -0.24766073651348901876e+04, - 0.19980447587997105074e+04, - -0.40056573665532781092e+02, - -0.19859226885221232806e+04, - 0.23965407409285858193e+04, - -0.16546149702755519684e+04, - -0.15367107300915595260e+04, - 0.11366922465648219713e+04, - -0.45420438879760758937e+04, - -0.33939264007613573995e+04, - -0.42796011065097545725e+04, - -0.11376607347859773654e+05, - -0.10290727730212045572e+05, - -0.14201931177164500696e+05, - -0.18975569669808868639e+05, - -0.13877740851339620349e+05, - -0.13616243932367420712e+05, - -0.83586085281259347539e+04, - 0.39247827130529103670e+04, - 0.69312326730845043130e+04, - 0.11927042420480733199e+05, - 0.13153431853030384445e+05, - 0.14698948922098970797e+04, - -0.42269358169362740227e+04, - -0.89111872022124989599e+04, - -0.12368071397309651729e+05, - -0.73737252045757054475e+03, - 0.70950049993061038549e+04, - 0.77132197814908577129e+04, - 0.83510276946279191179e+04, - -0.34519072528338851953e+04, - -0.11202601350368822750e+05, - -0.43105154466817439243e+04, - 0.32123018017330662133e+03, - 0.75223897372975616236e+04, - 0.94439216513504725299e+04, - -0.41938576732804267522e+04, - -0.85743726379917043232e+04, - -0.31423102270647759724e+04, - 0.10173714826821183124e+04, - 0.91747019366100539628e+04, - 0.46340291299984746729e+04, - -0.87329649608139861812e+04, - -0.55433052687182125737e+04, - 0.16029120724397130289e+04, - 0.48680865479898811827e+04, - 0.64751478493581244038e+04, - -0.48313945268456091071e+04, - -0.92955821146728612803e+04, - 0.35281661904997631609e+04, - 0.64605558055334267920e+04, - 0.11608077620936271614e+04, - -0.27735793522652406864e+04, - -0.70908744431112390885e+04, - 0.19287728777168758825e+04, - 0.96383337691693905072e+04, - -0.24335493589356724442e+04, - -0.72491541030107073311e+04, - 0.57662869671116129666e+03, - 0.34084555433698383240e+04, - 0.41172111939473097664e+04, - -0.23487732924977813127e+04, - -0.79731092864742504389e+04, - 0.41273766690001784809e+04, - 0.77864192378159259533e+04, - -0.50036833010470427325e+04, - -0.47842457022250109731e+04, - 0.24287714909488558988e+04, - 0.31448004040389537295e+04, - 0.17680405482055916764e+04, - -0.49935276804549648659e+04, - -0.35975521092947674333e+04, - 0.80954596838453971941e+04, - 0.16841537855774295167e+04, - -0.86887734414030328480e+04, - 0.12397240739429601035e+04, - 0.59728774205046402130e+04, - -0.15663435179491611962e+04, - -0.29344029299790431651e+04, - -0.10729191707340373796e+04, - 0.28989973199427486179e+04, - 0.35499586651882186743e+04, - -0.58123312056355825916e+04, - -0.27909604982371329243e+04, - 0.84216562524209839466e+04, - -0.86954899944978205895e+03, - -0.78256015718077442216e+04, - 0.41785640428678889293e+04, - 0.44955941480278825111e+04, - -0.44361254587504108713e+04, - -0.15809387861524990058e+04, - 0.22297439835174304790e+04, - 0.15562524447756900372e+04, - -0.62434146271168992826e+03, - -0.37120425036472161082e+04, - 0.19498717241166420990e+04, - 0.49949047588885005098e+04, - -0.54486184566506244664e+04, - -0.30647381650787465333e+04, - 0.80622564736170406832e+04, - -0.14443338661404723098e+04, - -0.73116593719241282088e+04, - 0.55766367267822124631e+04, - 0.35114366064077562442e+04, - -0.67196356246951527282e+04, - 0.68306116276408249632e+03, - 0.47844430374816802214e+04, - -0.26828373207446925335e+04, - -0.19841396830600369867e+04, - 0.20976917033900476781e+04, - 0.70929541270542154052e+03, - -0.74337667565967433347e+03, - -0.14589252941614317933e+04, - 0.79622014543800298725e+03, - 0.26180614002148154214e+04, - -0.27816916453992239440e+04, - -0.20411299589341176670e+04, - 0.51304713081131676518e+04, - -0.96962000017965999632e+03, - -0.54962388625997218696e+04, - 0.49599178775674590725e+04, - 0.27128712352985849066e+04, - -0.73229951026628423278e+04, - 0.21915500020996305466e+04, - 0.61925142240155510081e+04, - -0.65777290502678079065e+04, - -0.17781813454617592924e+04, - 0.79044451061247500547e+04, - -0.36988864379850415389e+04, - -0.53131107868412273092e+04, - 0.73557046404508546402e+04, - 0.12526548734101274363e+03, - -0.73091567300231808986e+04, - 0.49711949543704004100e+04, - 0.36722156771955815202e+04, - -0.74199383633172237751e+04, - 0.16170718321645119886e+04, - 0.61091920617995483553e+04, - -0.58829266769935093180e+04, - -0.18303824980870599575e+04, - 0.70731607763612219060e+04, - -0.32176788913918280741e+04, - -0.47006588196878819872e+04, - 0.65460839574757474111e+04, - -0.18206344217074124572e+04, - -0.51854952927731701493e+04, - 0.75465792449255395695e+04, - 0.14070794477255964239e+03, - -0.75270693942358711865e+04, - 0.52219156928188795064e+04, - 0.42489818504477761962e+04, - -0.79398220013686659513e+04, - 0.11769901128346532460e+04, - 0.74408376809737610529e+04, - -0.58324958384604533421e+04, - -0.35851443469375994937e+04, - 0.83578996778169293975e+04, - -0.14223162695466201058e+04, - -0.73798123288824272095e+04, - 0.61300169308071845080e+04, - 0.39553839206937032031e+04, - -0.83602188384370510903e+04, - 0.10843412023292914910e+04, - 0.80118898233242607603e+04, - -0.54698554490549568072e+04, - -0.48523442377406991000e+04, - 0.83917340079642817727e+04, - 0.53384203297947146893e+03, - -0.85901808462261324166e+04, - 0.41521506418771887184e+04, - 0.67270389146228790196e+04, - -0.74298196818057667770e+04, - -0.29290287922558109130e+04, - 0.91253225113483131281e+04, - -0.12268348491408717109e+04, - -0.84806777039003991376e+04, - 0.53136102602313358148e+04, - 0.63694568892915540346e+04, - -0.80024191207681878950e+04, - -0.28355841532263802947e+04, - 0.94624291637728856585e+04, - -0.82651133844049218169e+03, - -0.90780027231560798100e+04, - 0.45293225553600314015e+04, - 0.76535019640731443360e+04, - -0.72204676517604675610e+04, - -0.50159639629514558692e+04, - 0.92069420096276480763e+04, - 0.21820915648714285453e+04, - -0.98611118194872251479e+04, - 0.10113640410689308737e+04, - 0.98529847161467259866e+04, - -0.36824452916154796185e+04, - -0.88105849299555993639e+04, - 0.62029689190119397608e+04, - 0.75405175448427498850e+04, - -0.79157792409397707161e+04, - -0.57064425378763025947e+04, - 0.93904635126541252248e+04, - 0.40769927820681036792e+04, - -0.10120641097328700198e+05, - -0.22378389795005696215e+04, - 0.10772041328828780024e+05, - 0.86499122566505457144e+03, - -0.10886699391899544935e+05, - 0.54149550161213221600e+03, - 0.11139467214708329266e+05, - -0.13743149497552317371e+04, - -0.11055467182951240829e+05, - 0.21782163624211029855e+04, - 0.11274222891714340221e+05, - -0.23685883450878818621e+04, - -0.11275220894652618881e+05, - 0.24921683029036598782e+04, - 0.11642599377110374917e+05, - -0.19533568359960729595e+04, - -0.11791720255835569333e+05, - 0.12812940320112279551e+04, - 0.12228808067296828085e+05, - 0.13049220347760814320e+03, - -0.12276042891140197753e+05, - -0.17431688915583179096e+04, - 0.12329001702121158814e+05, - 0.41101285089335287921e+04, - -0.11591640456331238966e+05, - -0.65728418503610591870e+04, - 0.10355277330614546372e+05, - 0.94723054710995129426e+04, - -0.77825208187399548478e+04, - -0.11836333156901733673e+05, - 0.42601730613677955262e+04, - 0.13615670166302339567e+05, - 0.71647767408526533472e+03, - -0.13470144813662906017e+05, - -0.61029488432773960085e+04, - 0.11202729553819483044e+05, - 0.11410641572315646044e+05, - -0.58521348898103851752e+04, - -0.14457396025418684076e+05, - -0.15489820731811139467e+04, - 0.13983478056957756053e+05, - 0.97628475114968296111e+04, - -0.82585930340686027193e+04, - -0.15070272789552347604e+05, - -0.14030548528919839555e+04, - 0.14505691601466058273e+05, - 0.11892138515485894459e+05, - -0.58690494650585042109e+04, - -0.16591938853345487587e+05, - -0.72582373463576113863e+04, - 0.10969822128611267544e+05, - 0.16998853969978445093e+05, - 0.41456920067252594890e+04, - -0.13433806454642601238e+05, - -0.17131338256935676327e+05, - -0.33201919992458151683e+04, - 0.14153479004903647365e+05, - 0.18623552949754670408e+05, - 0.62173186565348323711e+04, - -0.11876189692225992985e+05, - -0.20373924770429599448e+05, - -0.12721756385222292010e+05, - 0.48348152481630559123e+04, - 0.19401866992965591635e+05, - 0.21263092308084495016e+05, - 0.97625969465391426638e+04, - -0.77338662148548528421e+04, - -0.21450598726820167940e+05, - -0.24860469027090668533e+05, - -0.17202592514410633157e+05, - -0.24602626967227870409e+04, - 0.13564524633590572193e+05, - 0.26049289150730266556e+05, - 0.32607776131937429454e+05, - 0.33286476750654575881e+05, - 0.29677673617310894770e+05, - 0.23855266755063235905e+05, - 0.17600000629922538792e+05, - 0.12055043514257156858e+05, - 0.77261851943537112675e+04, - 0.46600030005294438524e+04, - 0.26565335388615176271e+04, - 0.14362290604894146782e+04, - 0.73839297968214145840e+03, - 0.36179603617373243196e+03, - 0.16925505549075319323e+03, - 0.75714419197234306580e+02, - 0.32428468207838903936e+02, - 0.13312218976079659427e+02, - 0.52425658721108199245e+01, - 0.19821616473717063034e+01, + -0.15453187792518729538e+2, + -0.1131351667646443282e+2, + 0.32075263414658898853e+2, + 0.14485732858774695853e+1, + -0.33673973483187566558e+2, + 0.4635209511071328059e+1, + 0.35156616498910693736e+2, + -0.10274333312147554409e+2, + -0.33985072824835214078e+2, + 0.20067933197003238632e+2, + 0.17830397311344786004e+2, + -0.62894488556409102742e+1, + -0.14413974517964842192e+2, + -0.16022647858073618465e+2, + 0.40870291497844817741e+2, + 0.53114685335150753076e+1, + -0.45576616453943998408e+2, + 0.8547201859806733637e+1, + 0.27619970082237319531e+2, + 0.5573442069283228939e+1, + -0.23875973059345795946e+2, + -0.16309073275647694601e+2, + 0.21166659191608893309e+2, + 0.2722881126961991427e+2, + -0.16830082839824775931e+2, + -0.36585602630960245563e+2, + 0.14053878473453163878e+2, + 0.40187671998222555203e+2, + -0.11242240842678418389e+2, + -0.23357714429319980098e+2, + -0.13549816066868253017e+2, + 0.12100318819971715101e+2, + 0.5058604725370819466e+2, + -0.29039442943308294787e+2, + -0.38355464473820866544e+2, + 0.12427667421038925966e+2, + 0.15059230489167356737e+2, + 0.37147882386098949326e+2, + -0.21142113833380047794e+2, + -0.46050670094003358201e+2, + 0.55018288180580858793e+1, + 0.31254435129525475645e+2, + 0.32477660890392336057e+2, + -0.18771046807420322722e+2, + -0.34349484441251043165e+2, + -0.25937618050575593998e+2, + 0.29217455948877304905e+2, + 0.51202479922769001064e+2, + -0.55292531347142146458e+1, + -0.18196658064897960116e+2, + -0.50590776333495284689e+2, + -0.1111769147464138463e+2, + 0.43472452516889489971e+2, + 0.42040109701014081622e+2, + 0.130428719559309787e+2, + -0.22795519699631075383e+2, + -0.54603389611370424461e+2, + -0.39696371564504246976e+2, + 0.30787947259874247408e+2, + 0.2746252166739887457e+2, + 0.66294598316898685653e+2, + 0.27536556092769071569e+2, + -0.3626174887405759506e+2, + -0.32997512288991266871e+2, + -0.76769012574202434962e+2, + -0.41678396495711972136e+2, + 0.2239255389614622338e+1, + 0.23608308273763551455e+2, + 0.70602396799419764761e+2, + 0.85134034271387804438e+2, + 0.75876833202267505385e+2, + 0.81950391253498636956e+2, + 0.57186795891626232446e+2, + 0.43129652682399012065e+2, + 0.32658736204571283679e+2, + 0.18303296095021501344e+2, + 0.12287999755137018809e+2, + 0.38894443986299083171e+1, + 0.10853199481994131759e+2, + -0.87230218357635287418e+1, + 0.10313119686986009782e+2, + -0.26841718526014899382e+1, + -0.49711030113753533755e+1, + 0.10515603261661389922e+2, + -0.94066936212442371357e+1, + 0.31043493962568668998e+1, + 0.38754181081830112454e+1, + -0.61232012417934473802e+1, + 0.15502951174603594175e+1, + 0.69877685256453663243e+1, + -0.13371885203044611146e+2, + 0.12295920409545335161e+2, + -0.30915784443096585576e+1, + -0.94741609279350100792e+1, + 0.17944086326517815877e+2, + -0.16922709519460443772e+2, + 0.66028612030145215073e+1, + 0.71075154043217825262e+1, + -0.16166551236734580499e+2, + 0.15302118208784694531e+2, + -0.52944798246019955101e+1, + -0.75687279950789276839e+1, + 0.15366096501693240484e+2, + -0.13445702385700165848e+2, + 0.31815685637963984078e+1, + 0.89437113126513203554e+1, + -0.15417220758925131108e+2, + 0.12248038069198170064e+2, + -0.13348565924101147839e+1, + -0.10834683912189433386e+2, + 0.1713853736708974651e+2, + -0.14073183055135737973e+2, + 0.36489983223443624993e+1, + 0.79986861163165272615e+1, + -0.14410451999570994985e+2, + 0.12556438555225959419e+2, + -0.44184079222792345121e+1, + -0.45112134571628148549e+1, + 0.86817168186480806469e+1, + -0.58285759115025186361e+1, + -0.1840236864606268119e+1, + 0.91387076294949043387e+1, + -0.11146581432756033081e+2, + 0.61504306534720107891e+1, + 0.33635724776478639342e+1, + -0.12230520407757133228e+2, + 0.1560657577350881553e+2, + -0.11722634134957795382e+2, + 0.277712508488497134e+1, + 0.64138649660326061408e+1, + -0.11197340267845346418e+2, + 0.96257501956523832121e+1, + -0.33840411444507649819e+1, + -0.33791854313327527315e+1, + 0.65322475861264965857e+1, + -0.43278117043115669205e+1, + -0.16994611618754531523e+1, + 0.77366251390088276452e+1, + -0.99843780935584280911e+1, + 0.68809558241407087209e+1, + -0.5150743055335095022e+2, + 0.72201060778951884345e+2, + -0.15064516776101660511e+2, + -0.4373170992976420024e+2, + 0.7041446199382960458e+2, + -0.60945905251115902956e+2, + 0.22162976835420561628e+2, + 0.13730598246704888155e+2, + -0.29170150580313993771e+2, + 0.12029983290796337769e+2, + 0.17895530777338350958e+2, + -0.41908249097499123081e+2, + 0.35282278805444128977e+2, + -0.32326388328693478336e+1, + -0.41423074225341004251e+2, + 0.66189383522570096829e+2, + -0.58893604946955939283e+2, + 0.15972559698237374093e+2, + 0.34829947970009143887e+2, + -0.70510832632564699907e+2, + 0.66449961198071889612e+2, + -0.30698747085856251005e+2, + -0.2109721827995619492e+2, + 0.55464899140022787094e+2, + -0.60731202736064737735e+2, + 0.33105180892958792072e+2, + 0.28485115124892210758e+1, + -0.30356944002014724759e+2, + 0.31272263494425498465e+2, + -0.15920147919663339309e+2, + -0.51603649116843195443e+1, + 0.10316776253194390733e+2, + -0.13619933889614093125e+1, + -0.17402158814485577665e+2, + 0.2375922908285486912e+2, + -0.13394547555654915172e+2, + -0.15302430194096432459e+2, + 0.399785609963898807e+2, + -0.48704044994393953516e+2, + 0.29034229336294398394e+2, + 0.3643362032357135849e+1, + -0.35533732442087497816e+2, + 0.44227210653908613835e+2, + -0.33044595675426130299e+2, + 0.87538778828305350288e+1, + 0.48821778973240199662e+1, + -0.40742012550823138994e+1, + -0.108782119321302293e+2, + 0.16892910209844131941e+2, + -0.52939747314383511778e+1, + -0.28436251877659337595e+2, + 0.59270648362255165864e+2, + -0.67735319291149622245e+2, + 0.34967317714073722357e+2, + 0.22064499308247835785e+2, + -0.77569104866514791752e+2, + 0.93125042374170462267e+2, + -0.61103017103212948768e+2, + -0.44032243258320740154e+1, + 0.64529867953640518863e+2, + -0.79244337227493431897e+2, + 0.58634587581838509607e+2, + 0.17555290838299082878e+2, + -0.19912238543820915737e+2, + 0.9241780116695882441e+2, + 0.70360625155403511144e+2, + 0.78775314276384065693e+2, + 0.23872727538046873974e+3, + 0.20275835780682402287e+3, + 0.27899108515034447464e+3, + 0.40243550873743140528e+3, + 0.25149003321160463997e+3, + 0.29977281937053601268e+3, + 0.15603821386157972029e+3, + -0.85438758141505090293e+2, + -0.11717808156865751812e+3, + -0.26831348499674038521e+3, + -0.24464680314802083672e+3, + -0.31531543944672868918e+2, + 0.66317796448393721676e+2, + 0.21200308514630208379e+3, + 0.21670248072275981599e+3, + 0.32842674245474533734e+2, + -0.13790034474377938523e+3, + -0.1820369417366237883e+3, + -0.13046588050143083137e+3, + 0.36296055743826599382e+2, + 0.24078491794665910675e+3, + 0.95665905586650140435e+2, + -0.34863734795716112558e+2, + -0.11617654264036158906e+3, + -0.21703660223895167292e+3, + 0.91243223522608616349e+2, + 0.18899818048487199462e+3, + 0.30610571178303384698e+2, + 0.1546174909228484573e+2, + -0.20997488685133268405e+3, + -0.87956764565407283385e+2, + 0.19113389464500528447e+3, + 0.83107405083745021557e+2, + -0.21118482032142700255e+1, + -0.11876862432980203721e+3, + -0.12508024770095104827e+3, + 0.106457179147721547e+3, + 0.17019362700866426508e+3, + -0.54700702155552349382e+2, + -0.13915626191465455008e+3, + -0.23606829648700763613e+2, + 0.62509442363376827245e+2, + 0.13539776792707002073e+3, + -0.3568233544768888521e+2, + -0.19112667395326889164e+3, + 0.4203675244826749946e+2, + 0.1521867878638616105e+3, + -0.12277819468119627544e+2, + -0.75226228228595999781e+2, + -0.71503570463819357883e+2, + 0.3676700722732581994e+2, + 0.16409351086499600569e+3, + -0.76173632212615231651e+2, + -0.17257107771964606968e+3, + 0.11874497740208231278e+3, + 0.85218476007422225393e+2, + -0.51941964389553390902e+2, + -0.44133848209090849934e+2, + -0.65792689988742012019e+2, + 0.13067370809538772392e+3, + 0.55516297109596550285e+2, + -0.16896090421949051574e+3, + -0.31037470924339998213e+1, + 0.12665177502721404323e+3, + 0.26147849207539533012e+2, + -0.15684133800859984831e+3, + 0.39919706618520386598e+2, + 0.837418348830698136e+2, + -0.29972134615486304199e+2, + 0.51458589713218234607e+1, + -0.1280746517357363814e+3, + 0.15043280840902639284e+3, + 0.54298733598236033515e+2, + -0.19683809552927826303e+3, + 0.62486732097517325712e+2, + 0.11081907325325126124e+3, + -0.49954085215283733135e+2, + -0.10421002759313117281e+3, + 0.83370560461165950983e+2, + 0.49014792583595600206e+2, + -0.61273939305401555089e+2, + -0.25989622798980075657e+2, + 0.22407543419606771096e+2, + 0.53372140908592491826e+2, + -0.16124226801198322079e+2, + -0.11352824967397842215e+3, + 0.10338635906526376118e+3, + 0.89630280446320995225e+2, + -0.20587653624580826772e+3, + 0.75868808354030932151e+2, + 0.11167075817446050223e+3, + -0.99322174667791742309e+2, + -0.56799003531235648268e+2, + 0.98920639401336387664e+2, + 0.33526258599122961357e+2, + -0.13958680540672767734e+3, + 0.80097404111630510215e+2, + 0.38086100536177617926e+2, + -0.63334295220164641194e+2, + 0.2110501156846409998e+2, + -0.21808785385622137198e+2, + 0.54929988456625693516e+2, + -0.22113453070266174905e+2, + -0.67461718104990310962e+2, + 0.86063896054024155546e+2, + 0.58798953181810977853e+1, + -0.73950838276639458968e+2, + 0.43688684826372865544e+1, + 0.10840852266402940529e+3, + -0.82518999316567672508e+2, + -0.8052311329398465034e+2, + 0.17379234946593345512e+3, + -0.64100526357599022731e+2, + -0.11443394039112595806e+3, + 0.1312361920352311131e+3, + 0.31668836936065147825e+2, + -0.15430866782273150761e+3, + 0.72344506424022924307e+2, + 0.1056154037091956468e+3, + -0.1453128817449889425e+3, + -0.27650949240651092609e+1, + 0.14079639433736446108e+3, + -0.84942310984121576212e+2, + -0.96694486542697930531e+2, + 0.1750846220765992598e+3, + -0.54227829462667251903e+2, + -0.11233545581277584802e+3, + 0.12340870661580973433e+3, + 0.15722950381480742976e+2, + -0.10915943421978670358e+3, + 0.2719762502384449121e+2, + 0.12707156464721799694e+3, + -0.15053328710201836316e+3, + 0.21406597144861379434e+3, + -0.73273731268383642146e+2, + -0.28838127558005334095e+3, + 0.24145506651076706817e+3, + 0.41833955189683045717e+2, + -0.13352947855130054222e+3, + -0.12181116149142970073e+3, + 0.32276812380097277355e+3, + -0.1465185268499619724e+3, + -0.25735998901525510973e+3, + 0.38558284313958336043e+3, + -0.13244989258835235546e+3, + -0.15610790756351562436e+3, + 0.11503261042556908933e+3, + 0.69525560816019392973e+2, + -0.47932091169152954535e+2, + -0.20134363201728342574e+3, + 0.25375768622014751941e+3, + 0.34637121293543927436e+2, + -0.32091667616063563173e+3, + 0.18588098153830841852e+3, + 0.14638424778650971803e+3, + -0.17403106755200971634e+3, + -0.17459365780261768464e+3, + 0.29971662930806672875e+3, + 0.10622714039440701583e+3, + -0.55862712532877742433e+3, + 0.33232393133008923769e+3, + 0.35912042102694448431e+3, + -0.61799473225908002405e+3, + 0.56698096926969384413e+2, + 0.51065123850182339993e+3, + -0.27652899837085232093e+3, + -0.42154263551991670056e+3, + 0.49356440255247377991e+3, + 0.20962767095817520158e+3, + -0.70457569465073777337e+3, + 0.26008090629547183426e+3, + 0.45170243175327124163e+3, + -0.46665573446344535569e+3, + -0.93415455638347594913e+2, + 0.259357993202047453e+3, + 0.11900362292291042365e+3, + -0.2706872534775733925e+3, + -0.16221496206040382049e+3, + 0.41151165326432885649e+3, + -0.41166825608542083614e+1, + -0.38363648651213253515e+3, + -0.2328399128389968098e+1, + 0.52036205684478875355e+3, + -0.18947918091284523712e+3, + -0.6116485249597631082e+3, + 0.56652755154149576811e+3, + 0.30089070480221454318e+3, + -0.64096817336802916998e+3, + -0.39646037514637008314e+2, + 0.51606636296574765765e+3, + -0.77573762014565105005e+2, + -0.34892656619125972384e+3, + -0.45377014058703544208e+2, + 0.36676261793487583418e+3, + 0.15012267299226297723e+3, + -0.59088486922462732309e+3, + -0.88264377598937322489e+1, + 0.6163031358142990257e+3, + -0.80771804182088061452e+2, + -0.65906449102161400333e+3, + 0.18480607623936916184e+3, + 0.63545131706580878017e+3, + -0.34490255397619301903e+3, + -0.36873958336250393586e+3, + 0.97143841758949164955e+2, + 0.35013983536359586424e+3, + 0.22548788432978224705e+3, + -0.74524208544299574442e+3, + -0.76752646402165595418e+2, + 0.80756562600794222817e+3, + -0.10037497355333299254e+3, + -0.55817931565262824734e+3, + -0.11153863201544783124e+3, + 0.46666869530077946138e+3, + 0.32484695812388770264e+3, + -0.4356272139310930811e+3, + -0.49897187922424842554e+3, + 0.32262736335379207731e+3, + 0.68632420990145624273e+3, + -0.26330394302696925024e+3, + -0.74881125040022880057e+3, + 0.17316231767058314972e+3, + 0.47459078915611581806e+3, + 0.28620449220690898073e+3, + -0.314245611265012883e+3, + -0.87023104851284665529e+3, + 0.4919823070715757467e+3, + 0.73106979855420524927e+3, + -0.1694810464772052967e+3, + -0.37933097577799435385e+3, + -0.64993361087893288186e+3, + 0.39269400863341502372e+3, + 0.85676498206625683451e+3, + -0.63422721480028137364e+2, + -0.63891457659902573596e+3, + -0.58778391226210067089e+3, + 0.3179836966741473816e+3, + 0.70869433966974418126e+3, + 0.46090128015051669763e+3, + -0.56416560497443697386e+3, + -0.92403240015479093472e+3, + 0.40046374195530871631e+1, + 0.45767652362459620008e+3, + 0.89562825220945808269e+3, + 0.23973080494928652229e+3, + -0.82379330407891643517e+3, + -0.82832817722549987138e+3, + -0.23628941599219874092e+3, + 0.42361749827525852652e+3, + 0.10866659302328866943e+4, + 0.68094016270826534765e+3, + -0.47510490410077488832e+3, + -0.64091535031347018503e+3, + -0.12080700951249993977e+4, + -0.5176112730603433647e+3, + 0.61897739163962194198e+3, + 0.73629201333545358921e+3, + 0.13923029562131684997e+4, + 0.83515432857015252921e+3, + -0.37898072478001779473e+2, + -0.46945868793637174576e+3, + -0.13570628659951521513e+4, + -0.16055542597614196438e+4, + -0.15013572136216762374e+4, + -0.15352877076102590763e+4, + -0.1114461985650853876e+4, + -0.83401027265691368484e+3, + -0.60811194677393746133e+3, + -0.37556498083705304225e+3, + -0.20500021279737157442e+3, + -0.1208258596733836896e+3, + -0.14261572537182945553e+3, + 0.9126055945655419066e+2, + -0.13366121641955575683e+3, + 0.22784041368141878081e+2, + 0.78517809335926415315e+2, + -0.15037030334636267526e+3, + 0.12031120549683487297e+3, + -0.14806858818573978454e+2, + -0.96304141559495931801e+2, + 0.12923351662658006944e+3, + -0.52705465269588351873e+2, + -0.87842191772648945403e+2, + 0.19633704604594791476e+3, + -0.18926359441985195531e+3, + 0.549547956137200444e+2, + 0.133973374814485652e+3, + -0.26277371540923348903e+3, + 0.24791444954561848135e+3, + -0.91525892793960693439e+2, + -0.11633522625205962697e+3, + 0.25268137833602071396e+3, + -0.23690208819456265132e+3, + 0.81328748184594033432e+2, + 0.11718407781557937142e+3, + -0.23676507632432259243e+3, + 0.20599593280110337901e+3, + -0.46233457941330350138e+2, + -0.14248700668385987456e+3, + 0.24428820369225761056e+3, + -0.19745916151889306889e+3, + 0.30929613178289756092e+2, + 0.15580792894810389271e+3, + -0.25349414717407367448e+3, + 0.20853700089144231811e+3, + -0.52024242353667716543e+2, + -0.12173895473472360607e+3, + 0.21386175611884112868e+3, + -0.17859996844271395844e+3, + 0.47625543989035598713e+2, + 0.9333882946454065177e+2, + -0.15790034394884611402e+3, + 0.11076220897066514226e+3, + 0.13894383453122623351e+2, + -0.1353722129647410668e+3, + 0.17655996218891058902e+3, + -0.10943333232958788415e+3, + -0.29321477610261300839e+2, + 0.16144387631982206699e+3, + -0.2130276135835429443e+3, + 0.15682660481732506241e+3, + -0.26006236215341331786e+2, + -0.10646432901061332643e+3, + 0.17039712461616232986e+3, + -0.13723026776923941839e+3, + 0.3406279961017838076e+2, + 0.74527785884241524172e+2, + -0.12472399576732708226e+3, + 0.89871309114141268992e+2, + 0.58589396919533536234e+1, + -0.10310426190789067391e+3, + 0.14277794763203991124e+3, + -0.10041163938257079735e+3, + 0.46426916845436369385e+3, + -0.59207893701898717609e+3, + 0.27436094939792340597e+2, + 0.51636927079959218645e+3, + -0.70420315092168630144e+3, + 0.52999417956087290804e+3, + -0.86553005676145815528e+2, + -0.27633446693577167252e+3, + 0.39187715751829819055e+3, + -0.15441825677529121208e+3, + -0.19877208418865404838e+3, + 0.46382231447680817382e+3, + -0.3822633690654295151e+3, + 0.30485413385088104832e+2, + 0.44415460705183352275e+3, + -0.69014480603407719173e+3, + 0.59280369998895469053e+3, + -0.12781479677620545488e+3, + -0.39511745650051727807e+3, + 0.73880324734007615461e+3, + -0.65670210153273342257e+3, + 0.26209472088813390656e+3, + 0.26715719829735024859e+3, + -0.57617262046925316099e+3, + 0.56883125865824126777e+3, + -0.23409938682216602501e+3, + -0.13943858280357406443e+3, + 0.37602084341430850145e+3, + -0.30315391810814179507e+3, + 0.71766011493189168391e+2, + 0.1777754595509236708e+3, + -0.20214518781755364785e+3, + 0.41555850800069052298e+2, + 0.22754482491193707006e+3, + -0.33328019751244414692e+3, + 0.22043225421423355215e+3, + 0.12003184418622107898e+3, + -0.4199931569282710484e+3, + 0.53189464296413405009e+3, + -0.31366147718490373109e+3, + -0.52445848122297597627e+2, + 0.39775829447483243939e+3, + -0.46274332822984632685e+3, + 0.29022924377603305857e+3, + 0.25312597346304883672e+2, + -0.1936731241292723098e+3, + 0.15644916214876587901e+3, + 0.81713714862558646246e+2, + -0.24096612519090521687e+3, + 0.19139321646351490358e+3, + 0.14859797382775883534e+3, + -0.51337364396392558774e+3, + 0.67719596365985307784e+3, + -0.40132187557406086853e+3, + -0.15883517463315200757e+3, + 0.74228277223390671224e+3, + -0.92807277086895635421e+3, + 0.62018078602552373013e+3, + 0.48104113319548261529e+2, + -0.66717881289083925367e+3, + 0.80497011537682385551e+3, + -0.57522522982507302913e+3, + -0.26034065212040871984e+3, + 0.2683366290455275589e+3, + -0.10718437479757312758e+4, + -0.74969705859275450166e+3, + -0.92273415450446680097e+3, + -0.26427138550770077927e+4, + -0.2274041568283284505e+4, + -0.31636015722839765658e+4, + -0.44262644810908259387e+4, + -0.29217544275200143602e+4, + -0.325866174845845444e+4, + -0.18097041312778742395e+4, + 0.96578066784063639716e+3, + 0.13514478684654104654e+4, + 0.29439713993407481212e+4, + 0.27882968748108219188e+4, + 0.34662720122834736003e+3, + -0.78725755133043026035e+3, + -0.22932360303750065214e+4, + -0.25129913866176138981e+4, + -0.31224833831872200562e+3, + 0.1542043232087949491e+4, + 0.19878760259514274367e+4, + 0.15436461904501788922e+4, + -0.48620443660778721551e+3, + -0.26506915965099315144e+4, + -0.10698593881611570851e+4, + 0.34998707838668320846e+3, + 0.13536056034340983842e+4, + 0.23992308111219085731e+4, + -0.10345273571514971991e+4, + -0.20564803241109384544e+4, + -0.43248770329251294697e+3, + -0.86296560265369535614e+2, + 0.23001522500626078909e+4, + 0.98222794968867810894e+3, + -0.20848594299451269762e+4, + -0.10185105862614886973e+4, + 0.11212518544477724447e+3, + 0.12695312444682786008e+4, + 0.14188468450726418268e+4, + -0.11703051687289953406e+4, + -0.19508057399150904985e+4, + 0.65729881017756144956e+3, + 0.15317923525347794111e+4, + 0.26718362766220911908e+3, + -0.68517254656603438434e+3, + -0.15353220729263184694e+4, + 0.40934353820812361846e+3, + 0.21459456392825518378e+4, + -0.4871082296378516503e+3, + -0.16880721053724894318e+4, + 0.13238897056846676037e+3, + 0.83121475882316906336e+3, + 0.82443015629459432603e+3, + -0.43573316359152158839e+3, + -0.18268602215349014841e+4, + 0.86260884509699735645e+3, + 0.1906397542381124822e+4, + -0.13006270133230145802e+4, + -0.96784279196020804648e+3, + 0.56497815965042821063e+3, + 0.54275058926921133207e+3, + 0.67163942733651799699e+3, + -0.1408930918689355849e+4, + -0.63561665804757706155e+3, + 0.18453807646733309866e+4, + 0.14246658664086632484e+3, + -0.15632179593141652276e+4, + -0.15264243251244451471e+3, + 0.16674336867113074732e+4, + -0.44434816426159017055e+3, + -0.84272079861687700486e+3, + 0.16032919307953889643e+3, + 0.15577287023887510031e+3, + 0.12365829396272758913e+4, + -0.15506911347977625155e+4, + -0.65024374562950958989e+3, + 0.21534806647628233804e+4, + -0.5792401695374933297e+3, + -0.13929018658101113033e+4, + 0.70363422821075062075e+3, + 0.10571002911684204264e+4, + -0.8654102102923828852e+3, + -0.58524028350939227039e+3, + 0.70930309274143894527e+3, + 0.26458090666033962179e+3, + -0.21548478056088455901e+3, + -0.63290867630344985173e+3, + 0.19504954682078312089e+3, + 0.13000456889628446788e+4, + -0.12426427669688109745e+4, + -0.86682390142124972954e+3, + 0.21393268379741966783e+4, + -0.68998717553270421377e+3, + -0.13651013609499541417e+4, + 0.11532109026109253591e+4, + 0.67724361536615992918e+3, + -0.12160226580006285531e+4, + -0.23377204706273894885e+3, + 0.14293969638625526386e+4, + -0.80693139906335977685e+3, + -0.45310865413069927854e+3, + 0.67423749028434099273e+3, + -0.16133661969435300421e+3, + 0.1625982173434854019e+3, + -0.5601775772662581403e+3, + 0.24164496113745641992e+3, + 0.70778844547781011443e+3, + -0.87556471889063391245e+3, + -0.16872785123841615018e+3, + 0.91583937981904557546e+3, + -0.96975700594606891514e+2, + -0.12176015631773377663e+4, + 0.97661454034518908429e+3, + 0.81488516418408869413e+3, + -0.18452938085138250699e+4, + 0.6221557568353048282e+3, + 0.1358461937982642894e+4, + -0.15222573403857043104e+4, + -0.32513232591764898416e+3, + 0.17166917781169420323e+4, + -0.81255904170137443998e+3, + -0.11672920774427416291e+4, + 0.15953751335287411166e+4, + 0.84398037074698351034e+2, + -0.16540724051076745127e+4, + 0.10486370993185023508e+4, + 0.97705990847563259649e+3, + -0.18646767117226177106e+4, + 0.54179191882789882584e+3, + 0.12750835051290039246e+4, + -0.13415828720882871039e+4, + -0.27010780801911852222e+3, + 0.13524433729957886499e+4, + -0.44267356551413809029e+3, + -0.13081177693683130201e+4, + 0.1620697367120134686e+4, + -0.15749375103239194686e+4, + -0.5497313070713002503e+2, + 0.27068570411221862742e+4, + -0.16552839895541014812e+4, + -0.9956276237926064141e+3, + 0.14695608575559006113e+4, + 0.10925245922419132967e+4, + -0.2810623551597227106e+4, + 0.10549482835911758229e+4, + 0.24117417599171849361e+4, + -0.31007621182686275461e+4, + 0.51361927051282327739e+3, + 0.18807690550337104014e+4, + -0.96527712122714376619e+3, + -0.1110931388435294366e+4, + 0.89096879626815587017e+3, + 0.16804466121755210679e+4, + -0.24303306530986260441e+4, + -0.1557815827610100996e+3, + 0.28741740895925267978e+4, + -0.1688927438025372112e+4, + -0.15118705960427150785e+4, + 0.20042985228074001043e+4, + 0.1198830125624647053e+4, + -0.28092422220962039319e+4, + -0.31459295814986933237e+3, + 0.43352516949493410721e+4, + -0.28376723450687222794e+4, + -0.27895165328961802516e+4, + 0.50655328658688022188e+4, + -0.47792210645932533453e+3, + -0.43008590211019327398e+4, + 0.24362982965365681594e+4, + 0.33804651970734371389e+4, + -0.40476600697688400032e+4, + -0.16809372541156280931e+4, + 0.5616479613111807339e+4, + -0.17914696426811447054e+4, + -0.39547522402910417441e+4, + 0.36371784031582619718e+4, + 0.13027681432246597524e+4, + -0.24350398771647996909e+4, + -0.12123748355400107357e+4, + 0.26237629815575096472e+4, + 0.13142528233623550022e+4, + -0.36558362204529321389e+4, + 0.49486517594941858533e+2, + 0.35821076876731140146e+4, + -0.39151055426177344998e+3, + -0.42873517129920292064e+4, + 0.18466306507200217766e+4, + 0.4784341224320098263e+4, + -0.44530628933760253858e+4, + -0.27156301563256624831e+4, + 0.53637979896035867569e+4, + 0.5216462388263861385e+3, + -0.4382065455145389933e+4, + 0.36642410511255735628e+3, + 0.3243518822133521553e+4, + 0.51273617918415482109e+3, + -0.35940352589146823448e+4, + -0.88614457614003129038e+3, + 0.4981808688978239843e+4, + -0.71888242422095188999e+2, + -0.51359359840332044769e+4, + 0.66532678763299134062e+3, + 0.55786455263124389603e+4, + -0.151820370744555089e+4, + -0.53425511801388165622e+4, + 0.26240493241864014635e+4, + 0.34763492151478430969e+4, + -0.75732867545937779141e+3, + -0.35001372352578146092e+4, + -0.13943421379097571844e+4, + 0.61743690385113168304e+4, + 0.51254315929885433434e+3, + -0.65669498148121419945e+4, + 0.48609024932497754889e+3, + 0.49488509461457942962e+4, + 0.10940465612125301504e+4, + -0.41950637885288088e+4, + -0.28169770726683027533e+4, + 0.39115961130367686565e+4, + 0.42212115299873676122e+4, + -0.28542823616928094452e+4, + -0.57829869589526597338e+4, + 0.22092595682301262059e+4, + 0.63187656631109994123e+4, + -0.115202394577038649e+4, + -0.43698976218108555258e+4, + -0.25852314249219689373e+4, + 0.32307517519888006063e+4, + 0.6885920969041855642e+4, + -0.38447266630991985039e+4, + -0.62663349065513039022e+4, + 0.96312380137898173871e+3, + 0.39249481266159591542e+4, + 0.51997697743560956951e+4, + -0.33266121615143069903e+4, + -0.723029624595867881e+4, + 0.28018697500581083659e+3, + 0.57509734611869289438e+4, + 0.49194285406839771895e+4, + -0.25264281566387721796e+4, + -0.64530325560627343293e+4, + -0.37175152324959080943e+4, + 0.48405137504381918916e+4, + 0.77140245100646943683e+4, + 0.52514888633090788517e+3, + -0.45495128977867652793e+4, + -0.7404208285796439668e+4, + -0.21225532280393781548e+4, + 0.69899159401959013849e+4, + 0.73108882786962731188e+4, + 0.20592421159197024281e+4, + -0.3758447214417174564e+4, + -0.94619682919546157791e+4, + -0.55536534749076236039e+4, + 0.3491448104173475258e+4, + 0.62144852586994038575e+4, + 0.10099385032646665422e+5, + 0.43747622136657473675e+4, + -0.48376510320424767997e+4, + -0.70383773289943310374e+4, + -0.11603520990969833292e+5, + -0.73363089370473444433e+4, + 0.12643863946343255122e+3, + 0.43467991492778455722e+4, + 0.11626809064942508485e+5, + 0.13826104110766047597e+5, + 0.13242196251311796004e+5, + 0.13086875970053368292e+5, + 0.97611927051233742532e+4, + 0.72408872849626031893e+4, + 0.52143218220222224772e+4, + 0.32986982973845470042e+4, + 0.17248977347812526659e+4, + 0.11842927695747603138e+4, + 0.96008400442230811223e+3, + -0.41931640852819037946e+3, + 0.83167086443777532168e+3, + -0.71239710946584409612e+2, + -0.54253053053974451814e+3, + 0.98268491404255019006e+3, + -0.71945458092359490365e+3, + -0.37320914839258847451e+2, + 0.81098183784971809018e+3, + -0.10234183271573932643e+4, + 0.46542206387107751198e+3, + 0.54398615774074892215e+3, + -0.13366244357343086904e+4, + 0.13308539411691585883e+4, + -0.44017139786536932888e+3, + -0.84086128235316948576e+3, + 0.17250147082858634349e+4, + -0.16364443834337910175e+4, + 0.58475859864965025281e+3, + 0.81763559788259067318e+3, + -0.17319233572419229858e+4, + 0.160812527405170772e+4, + -0.53209210342908045277e+3, + -0.83232867611551762366e+3, + 0.16503436119209511617e+4, + -0.14335146567440485796e+4, + 0.32917719137141710917e+3, + 0.97593258238662576787e+3, + -0.16867172040872746948e+4, + 0.13790504357086069831e+4, + -0.2499122316543149509e+3, + -0.10207141737369397561e+4, + 0.16861444629877273655e+4, + -0.13814132945032663429e+4, + 0.32113374837699166164e+3, + 0.84810741185233848682e+3, + -0.14505161043128236997e+4, + 0.11766327286041901061e+4, + -0.2493974422247099767e+3, + -0.73742021555321161941e+3, + 0.1186345300567457798e+4, + -0.85265050402127019424e+3, + -0.28985412579313724279e+2, + 0.90153100748864403613e+3, + -0.12299236082362087927e+4, + 0.81408518703943570927e+3, + 0.10217091165403071784e+3, + -0.98835804697815740383e+3, + 0.13408426498994967915e+4, + -0.97250009617960427022e+3, + 0.10704788793130144597e+3, + 0.76122216710065447387e+3, + -0.11581893346202502926e+4, + 0.89462387532097511667e+3, + -0.16123480242312575683e+3, + -0.59687491460904084306e+3, + 0.94242376529900855076e+3, + -0.69510162387108118764e+3, + 0.24205789638965800492e+2, + 0.65963561725437421046e+3, + -0.94864611118707944115e+3, + 0.67385417478393139845e+3, + -0.21667207311990559901e+4, + 0.24806612320601666397e+4, + 0.3544239475085883555e+3, + -0.29049701904715993805e+4, + 0.3496616468223740867e+4, + -0.22698859765933893868e+4, + -0.19058701355569004932e+3, + 0.19926947765709949181e+4, + -0.23502793701699079065e+4, + 0.81469823523059426407e+3, + 0.12230102472451305857e+4, + -0.26592001346122410723e+4, + 0.21461880191093632675e+4, + -0.19867555236563859467e+3, + -0.23427548567395137979e+4, + 0.357835619836591286e+4, + -0.29733957408518967895e+4, + 0.46819180197045159275e+3, + 0.22142874878127763623e+4, + -0.38484244529116654121e+4, + 0.31991032799040076497e+4, + -0.10092557447238204986e+4, + -0.17143827487320859291e+4, + 0.30851705118726504224e+4, + -0.27285186157925345469e+4, + 0.73033255350936178729e+3, + 0.12360991545283368396e+4, + -0.22448702772706697033e+4, + 0.14744946169533961893e+4, + 0.73045992215605380693e+2, + -0.15150091897208662886e+4, + 0.14938402683215347224e+4, + -0.32703843837048515297e+3, + -0.14298189124434852602e+4, + 0.21586087868119680024e+4, + -0.15258331866356581941e+4, + -0.47067888172408032688e+3, + 0.22491626965919435861e+4, + -0.2920885703219570587e+4, + 0.16835579623272665231e+4, + 0.39527293942529655624e+3, + -0.23022301212333400144e+4, + 0.25432819080858339476e+4, + -0.13772994462214196574e+4, + -0.58562895143405546605e+3, + 0.16157271073818642435e+4, + -0.13098229107586969349e+4, + -0.30597458470727400481e+3, + 0.15791821550173215201e+4, + -0.16394853776533975633e+4, + -0.10764759648209064835e+3, + 0.22473996225808296003e+4, + -0.34857090799057241384e+4, + 0.23653209680009936164e+4, + 0.40586752392384374843e+3, + -0.3498884973003604955e+4, + 0.46061710783887720027e+4, + -0.31383157814363448779e+4, + -0.28023372258000495094e+3, + 0.34874624970304657836e+4, + -0.41495577795926092222e+4, + 0.28982143933437228043e+4, + 0.16539573531514715796e+4, + -0.16021797643059881011e+4, + 0.60422319535000824544e+4, + 0.40807625861129890836e+4, + 0.52776151704354624599e+4, + 0.14592451193840075575e+5, + 0.12710851636425319157e+5, + 0.17744923413787408208e+5, + 0.24371977719849677669e+5, + 0.16663341606948521076e+5, + 0.17804010417548375699e+5, + 0.1026809799719343755e+5, + -0.53303334944299049312e+4, + -0.77879393296156322322e+4, + -0.16056000982913765256e+5, + -0.15808871593504054545e+5, + -0.18584759924999352734e+4, + 0.45522276594231007039e+4, + 0.12443038848167352626e+5, + 0.14351024992192145874e+5, + 0.1534344043808094284e+4, + -0.86310308651104314777e+4, + -0.10799038912176674785e+5, + -0.90008448004008860153e+4, + 0.30651977075286540639e+4, + 0.14604321471975754321e+5, + 0.5867399892419220123e+4, + -0.16483340921160204289e+4, + -0.79132978452373226901e+4, + -0.13093346131575950494e+5, + 0.57115241811375344696e+4, + 0.1126016828871711914e+5, + 0.27775562738024473219e+4, + 0.91019857089166364972e+2, + -0.12559551898784486184e+5, + -0.5496772231259156797e+4, + 0.11406184419979072118e+5, + 0.60288670649973892068e+4, + -0.9867762896251310849e+3, + -0.68309816675265701633e+4, + -0.79604278829008326284e+4, + 0.64021033621544647758e+4, + 0.11081463305276276515e+5, + -0.38672783848580506856e+4, + -0.8416148547181934191e+4, + -0.14951819822594168272e+4, + 0.37443102098278209269e+4, + 0.86411399779210205452e+4, + -0.23214819081030841517e+4, + -0.11986934509061513381e+5, + 0.27951396973200708089e+4, + 0.93259967333217900887e+4, + -0.71486310062962434131e+3, + -0.45748275038538595254e+4, + -0.47061827531514536531e+4, + 0.25380573285605910314e+4, + 0.10135305207375533428e+5, + -0.48664654904073950092e+4, + -0.10475925177813433038e+5, + 0.70863771353716892918e+4, + 0.54716103654029557219e+4, + -0.30722743062854797245e+4, + -0.32675353214802676121e+4, + -0.33968147523176658069e+4, + 0.75326300312757421125e+4, + 0.36829261468733993752e+4, + -0.10143180212784269315e+5, + -0.12250358503757709059e+4, + 0.93371365507257123681e+4, + 0.20756881304361607476e+3, + -0.88408153614973452932e+4, + 0.23826571396194053705e+4, + 0.43743825679379297071e+4, + -0.23104778011708586405e+3, + -0.16916613817867926173e+4, + -0.61333147978104143476e+4, + 0.81525792953250975188e+4, + 0.37299260287277666066e+4, + -0.11737217987842950606e+5, + 0.27187921417228230894e+4, + 0.83374796529284267308e+4, + -0.43961861642995472721e+4, + -0.56178162240095807647e+4, + 0.47615800236969062098e+4, + 0.3185110566040548747e+4, + -0.38586200467701537491e+4, + -0.14830361266578950108e+4, + 0.10848900120221273937e+4, + 0.37262249758070956887e+4, + -0.12681008912934100863e+4, + -0.72019812232433523604e+4, + 0.71077066790476164897e+4, + 0.44115352512509252847e+4, + -0.11350052523389003909e+5, + 0.32732780522117241162e+4, + 0.80111564029089395262e+4, + -0.6539198486158787091e+4, + -0.39904407154496871044e+4, + 0.72606438022736738276e+4, + 0.69429136053663978601e+3, + -0.74148810739844020645e+4, + 0.41636130892118671909e+4, + 0.2556335486066476733e+4, + -0.35034540223728690762e+4, + 0.4656256683097298037e+3, + -0.44876233045193811222e+3, + 0.27943886853047674776e+4, + -0.12537470401908558415e+4, + -0.37796591576904506837e+4, + 0.45180969621443973665e+4, + 0.13790040238778394723e+4, + -0.54875750208961471799e+4, + 0.76555665775869988465e+3, + 0.67670735669019777561e+4, + -0.56169711559531142484e+4, + -0.42390433218316611601e+4, + 0.9944301833771967722e+4, + -0.31744402960290876763e+4, + -0.77685133474593831124e+4, + 0.85828425461623610317e+4, + 0.17817933481937300257e+4, + -0.95682251179949125799e+4, + 0.45351740017036127028e+4, + 0.64957256206959455085e+4, + -0.88592125320744980854e+4, + -0.55811300896573925456e+3, + 0.9393966963369946825e+4, + -0.611796274076831196e+4, + -0.51020736557355630794e+4, + 0.10048507736463494439e+5, + -0.27664777051899245635e+4, + -0.71866345498272712575e+4, + 0.73398395972733396775e+4, + 0.18516310197538728062e+4, + -0.80309658718887912983e+4, + 0.30035639752270635654e+4, + 0.68352752428585736197e+4, + -0.87712314131212024222e+4, + 0.63331346216401007041e+4, + 0.27854921367876577278e+4, + -0.1328375648780674419e+5, + 0.59043282830016150911e+4, + 0.71225537100606279637e+4, + -0.7945795182438701886e+4, + -0.54601838699988202279e+4, + 0.13371401610720560711e+5, + -0.41978907608719955533e+4, + -0.11942018408986798022e+5, + 0.13558724511613123468e+5, + 0.3193766257628992733e+2, + -0.10772556289362571988e+5, + 0.42970337990674042885e+4, + 0.72428989348699751645e+4, + -0.60379245196379861227e+4, + -0.76204173907796039202e+4, + 0.122719654042030852e+5, + 0.21076763516386952801e+3, + -0.13927962974859761744e+5, + 0.84025398765913796524e+4, + 0.7797118723517845865e+4, + -0.11142356237452015193e+5, + -0.44440822783722105669e+4, + 0.13944882260472601047e+5, + -0.82989360051816447594e+3, + -0.18410373614146443288e+5, + 0.1329486095334041056e+5, + 0.11548165907268161391e+5, + -0.22390640653099460906e+5, + 0.21973896077320164295e+4, + 0.1946021641340014321e+5, + -0.1137213732699331922e+5, + -0.14827635676498384782e+5, + 0.18049772146432231239e+5, + 0.73121904238237693789e+4, + -0.2435169722539671784e+5, + 0.66702736356438908842e+4, + 0.18441340706653816596e+5, + -0.1520267494595748758e+5, + -0.81331457934744985323e+4, + 0.12127797202120456859e+5, + 0.6410871048482610604e+4, + -0.1339191801829474025e+5, + -0.57613025996255328209e+4, + 0.17466980630109981576e+5, + -0.38779816931042819306e+3, + -0.17619938750808028999e+5, + 0.33714170036324026114e+4, + 0.19145704107611378276e+5, + -0.93521293222631156823e+4, + -0.20464235271798723261e+5, + 0.19252193205828065402e+5, + 0.12765677882491279888e+5, + -0.23957518884706267272e+5, + -0.33580138156217599317e+4, + 0.20157203271306221723e+5, + -0.40474202501124278797e+3, + -0.16219798667365523215e+5, + -0.25991272109632732281e+4, + 0.18166573224330069934e+5, + 0.26744067713692375037e+4, + -0.22781772762941553083e+5, + 0.9035799130821972085e+3, + 0.23260063596215317375e+5, + -0.3117585409536584848e+4, + -0.25370542783474964381e+5, + 0.6691490161782136056e+4, + 0.24235863414443439979e+5, + -0.10654314366905629868e+5, + -0.17540158219208184164e+5, + 0.34079042658704693167e+4, + 0.18015765495051855396e+5, + 0.43783331428838646389e+4, + -0.27699856628249548521e+5, + -0.18404963786742596312e+4, + 0.29037589129485229932e+5, + -0.88264693640375799077e+3, + -0.23389249833540980035e+5, + -0.57485902841136694406e+4, + 0.20290937767429892119e+5, + 0.13056013495942042937e+5, + -0.18706429043170392106e+5, + -0.1938229281206063024e+5, + 0.13650184314160935173e+5, + 0.26241976093428227614e+5, + -0.99704927899272224749e+4, + -0.28792489908104671485e+5, + 0.38946346564178120389e+4, + 0.21579733831907127751e+5, + 0.12272881279941282628e+5, + -0.16884475452862126986e+5, + -0.29694385965043409669e+5, + 0.16369518669799184863e+5, + 0.28965744732356833993e+5, + -0.25758054940276088018e+4, + -0.20691467404545335739e+5, + -0.227238442439406208e+5, + 0.15358476819170980889e+5, + 0.32924944505473817117e+5, + -0.32902701057144651031e+3, + -0.27463076447828545497e+5, + -0.22574992675406338094e+5, + 0.11201663179775121534e+5, + 0.3110271313843920143e+5, + 0.16342980836283797544e+5, + -0.22292358091163612698e+5, + -0.35134079072937689489e+5, + -0.42063075451499726114e+4, + 0.2298774825732766476e+5, + 0.33683607522919744952e+5, + 0.96413605278548075148e+4, + -0.31781551027830708335e+5, + -0.34635515254494610417e+5, + -0.99135584501591820299e+4, + 0.18346096674270753283e+5, + 0.43755950388126671896e+5, + 0.25122982886901118036e+5, + -0.14313719480700927306e+5, + -0.31259338138110502769e+5, + -0.45847748643677485234e+5, + -0.19955638492872698407e+5, + 0.20610269230151592637e+5, + 0.35221567968443829159e+5, + 0.52609784072379210556e+5, + 0.34302241554474217992e+5, + 0.52834846752688770266e+3, + -0.21675638247771566967e+5, + -0.53479296838978283631e+5, + -0.64373546914138816646e+5, + -0.62548108477711080923e+5, + -0.60322932219238311518e+5, + -0.45895980654619073903e+5, + -0.33827006863264949061e+5, + -0.24225208685650617554e+5, + -0.15343863079351140186e+5, + -0.81697217152242274096e+4, + -0.56737985474239894756e+4, + -0.38065216845312502301e+4, + 0.87111579340653702275e+3, + -0.28875922951093921256e+4, + 0.54042507408567423965e+1, + 0.19653538855367019096e+4, + -0.34540741556826155829e+4, + 0.23545245426630494876e+4, + 0.45376864848048950307e+3, + -0.32735910525339963897e+4, + 0.40003372082270057035e+4, + -0.18955664183929684441e+4, + -0.1869178220609259597e+4, + 0.48552186005906096398e+4, + -0.49382535901711780753e+4, + 0.17892936219575276482e+4, + 0.28135119679383892617e+4, + -0.60244095368738035177e+4, + 0.57540035520769779396e+4, + -0.20219776807062455646e+4, + -0.29746028647746270508e+4, + 0.62188043370726354624e+4, + -0.57309875145717132909e+4, + 0.18232542492699665218e+4, + 0.31096409208685163321e+4, + -0.60566924184143754246e+4, + 0.52581600760981464191e+4, + -0.12480619044111936091e+4, + -0.34925977362357425591e+4, + 0.60928215146482671116e+4, + -0.5019821452217795013e+4, + 0.98223987672500243207e+3, + 0.35703389344153179081e+4, + -0.59489395921400446241e+4, + 0.48439486384845376961e+4, + -0.10360954141405497921e+4, + -0.31378699814520050495e+4, + 0.52422330212877113809e+4, + -0.41698008880649667844e+4, + 0.74101201663067297432e+3, + 0.2883450750160737698e+4, + -0.45312930628447111303e+4, + 0.33103163474840334857e+4, + -0.67504864218430412848e+2, + -0.31766496764489820634e+4, + 0.44737443937704301788e+4, + -0.30804222272494207573e+4, + -0.14322937669228275581e+3, + 0.32975568608884154855e+4, + -0.45714724861549539128e+4, + 0.3287451648841655242e+4, + -0.24236055287554671622e+3, + -0.27958077683885280749e+4, + 0.41342086673821495424e+4, + -0.31062785755059535404e+4, + 0.41177950245105796512e+3, + 0.23388050022684683427e+4, + -0.3570685324817509354e+4, + 0.26426827543416261506e+4, + -0.17820113556368025343e+3, + -0.23291557850046874591e+4, + 0.34003723594869725275e+4, + -0.24243000723290620044e+4, + 0.58049577463823834478e+4, + -0.58534990872156404293e+4, + -0.22326934372179448474e+4, + 0.90118519073315947026e+4, + -0.97665779031472848146e+4, + 0.53785050376871849949e+4, + 0.21706519277827164842e+4, + -0.71537817409262415822e+4, + 0.75076563567847406375e+4, + -0.2201550733654204123e+4, + -0.42649088941548689036e+4, + 0.85597856723276909179e+4, + -0.67493650429353419895e+4, + 0.68236089712143007091e+3, + 0.69712594258456847456e+4, + -0.10459462401936763854e+5, + 0.84039662929864916805e+4, + -0.82907292617508551302e+3, + -0.69033475823061835399e+4, + 0.11232201080201419245e+5, + -0.86835064430729617015e+4, + 0.18717212661615753859e+4, + 0.60223910512807651685e+4, + -0.93621415310338779818e+4, + 0.74057826581513718338e+4, + -0.81055406414936055626e+3, + -0.50400714730565787249e+4, + 0.74012852426539757289e+4, + -0.40786339064756921289e+4, + -0.13912911107575744154e+4, + 0.6003177696457500133e+4, + -0.55323474359591127723e+4, + 0.12150929333268763912e+4, + 0.48822001932975535965e+4, + -0.74607887432871903002e+4, + 0.54285506008193906382e+4, + 0.10807384706114830806e+4, + -0.69021132035810178422e+4, + 0.90909151786286565766e+4, + -0.51262108583441604424e+4, + -0.15207080574291067023e+4, + 0.7486696538275169587e+4, + -0.79792511011696551577e+4, + 0.38450243482735168072e+4, + 0.28033122203241778152e+4, + -0.62837396272725118251e+4, + 0.5128979999738294282e+4, + 0.59179738670030872072e+3, + -0.55035950707421725383e+4, + 0.6524238223349447253e+4, + -0.14426962734787200588e+4, + -0.55059860347297799308e+4, + 0.10199974313352055105e+5, + -0.77735806969965460667e+4, + 0.21155403606550439832e+2, + 0.92418074642811570811e+4, + -0.12922045378108594377e+5, + 0.90309843438086154492e+4, + 0.80840894969610098997e+3, + -0.10186628352572077347e+5, + 0.12030113098829871888e+5, + -0.82846347928663089988e+4, + -0.55400769729171361178e+4, + 0.50818563631315837483e+4, + -0.18788058953302839654e+5, + -0.12613320653070972185e+5, + -0.16663091283532347006e+5, + -0.45096099883651048003e+5, + -0.39686740446782459912e+5, + -0.55420304732852702728e+5, + -0.75209794645598682109e+5, + -0.52688101225418635295e+5, + -0.54628181711301585892e+5, + -0.32295013574549699115e+5, + 0.16351147763265204048e+5, + 0.24963639686471375171e+5, + 0.4903015324976467673e+5, + 0.49881760999054000422e+5, + 0.56315496081614483046e+4, + -0.14640135857398910957e+5, + -0.3781102005564175488e+5, + -0.45561729611280927202e+5, + -0.42728498955120767278e+4, + 0.27020599778686773789e+5, + 0.32799494335999166651e+5, + 0.29110344690917769185e+5, + -0.10488171101895926768e+5, + -0.45044440778808391769e+5, + -0.17911864982404524199e+5, + 0.41918128849899003399e+4, + 0.25763909860657196987e+5, + 0.39852536468915124715e+5, + -0.17501255831139369548e+5, + -0.34591172972672458855e+5, + -0.95907046728257701034e+4, + 0.78068391886472306851e+3, + 0.38319279035068742814e+5, + 0.17273534479736492358e+5, + -0.35049483937070617685e+5, + -0.19584293336849208572e+5, + 0.39406677768518543417e+4, + 0.20668280411962121434e+5, + 0.24888137195874707686e+5, + -0.19609860738241619401e+5, + -0.35011654842313459085e+5, + 0.12535706941653090325e+5, + 0.25911875490373640787e+5, + 0.46346704637558959803e+4, + -0.11432462926409560168e+5, + -0.27125019582304783398e+5, + 0.73320699595846481316e+4, + 0.37376537440317093569e+5, + -0.89099511059359374485e+4, + -0.28813512303334919125e+5, + 0.21800213053371408023e+4, + 0.14064499854827587114e+5, + 0.14954929350774093109e+5, + -0.81878460787750300369e+4, + -0.31442353219119235291e+5, + 0.1535100958319136771e+5, + 0.3213331405768820332e+5, + -0.21538404088275692629e+5, + -0.17310636330416127748e+5, + 0.94092326996143856377e+4, + 0.10805239810533210402e+5, + 0.96025818034125841223e+4, + -0.22485098944480650971e+5, + -0.11991939638703393939e+5, + 0.31378115898258092784e+5, + 0.47653933187799893858e+4, + -0.30554619963369026664e+5, + 0.9615086516323503929e+3, + 0.26325402082204025646e+5, + -0.70786991271793567648e+4, + -0.12944190936502305703e+5, + -0.76932205105212790386e+3, + 0.71276300210614417665e+4, + 0.17406823180164774385e+5, + -0.24367108799363260914e+5, + -0.11674497675088505275e+5, + 0.35728674241854867432e+5, + -0.71546929199000296649e+4, + -0.27281832645818336459e+5, + 0.14627923002178542447e+5, + 0.17154515891968221695e+5, + -0.15086459424897648205e+5, + -0.93009240203161261888e+4, + 0.11428174268435945123e+5, + 0.48448655836755933706e+4, + -0.312889341316912396e+4, + -0.12212291397880488148e+5, + 0.46463795869105724705e+4, + 0.21982302027430196176e+5, + -0.22239378193243090209e+5, + -0.12976963012622185488e+5, + 0.34116061851670572651e+5, + -0.89034768546631439676e+4, + -0.25862938889947628923e+5, + 0.20610467293718844303e+5, + 0.12939806844811131668e+5, + -0.23760703844221308827e+5, + -0.70024667781990774529e+3, + 0.21775443622898772446e+5, + -0.12221864196846345294e+5, + -0.79164086303706144463e+4, + 0.10140961207544236458e+5, + -0.24163443714058425371e+3, + 0.14498214506048128669e+3, + -0.77938211700534166084e+4, + 0.3613281374091998714e+4, + 0.11383449875832306134e+5, + -0.13178409468410623958e+5, + -0.53664243295475944251e+4, + 0.18010073807036733342e+5, + -0.29204609188614667801e+4, + -0.21021138509997879737e+5, + 0.17889969100196012732e+5, + 0.12513517220361069121e+5, + -0.30237630804752374388e+5, + 0.9346602439198501088e+4, + 0.24430996234254806041e+5, + -0.26716945106276067236e+5, + -0.56681865574151042892e+4, + 0.29896379894393216091e+5, + -0.14141774358731376196e+5, + -0.20291669010182660713e+5, + 0.27691021230151181953e+5, + 0.16868302186203768542e+4, + -0.29380470329655418027e+5, + 0.19456796202742858441e+5, + 0.15218946592185779082e+5, + -0.30518039546035317471e+5, + 0.79820161214708505213e+4, + 0.22652915429678716464e+5, + -0.22657681131662244297e+5, + -0.64271429328808890205e+4, + 0.26016692189163935836e+5, + -0.10501820955405926725e+5, + -0.2027144015609417329e+5, + 0.26715791139638804452e+5, + -0.15093217605706542599e+5, + -0.13131801101653585647e+5, + 0.37468224269561120309e+5, + -0.11733088160355240689e+5, + -0.25091658469381360192e+5, + 0.23863096264240812161e+5, + 0.16198549430029528594e+5, + -0.37457845790620980551e+5, + 0.99475990839178066381e+4, + 0.34204201668209956551e+5, + -0.35030971850723311945e+5, + -0.55116906262775037249e+4, + 0.33788199445450518397e+5, + -0.11029535234510743976e+5, + -0.246538781821286575e+5, + 0.20793820741103707405e+5, + 0.20459694054721981956e+5, + -0.35852707623609516304e+5, + 0.72379926660329851984e+3, + 0.39279661744280063431e+5, + -0.24365566983384731429e+5, + -0.22726832785610575229e+5, + 0.34355838716233243758e+5, + 0.95337000746974117646e+4, + -0.39949608974911199766e+5, + 0.74531397998276297585e+4, + 0.46271452735783866956e+5, + -0.36764422846849527559e+5, + -0.27735010128318313946e+5, + 0.58007785451320763968e+5, + -0.60149978857641735885e+4, + -0.5135994672319037636e+5, + 0.30668533490311059722e+5, + 0.38526447706241357082e+5, + -0.47451733087515036459e+5, + -0.18642220030737902562e+5, + 0.62136196216824340809e+5, + -0.14408170498530842451e+5, + -0.50042701352340038284e+5, + 0.37134086330265534343e+5, + 0.27054982577685386786e+5, + -0.34785107316402391007e+5, + -0.19420851293230785814e+5, + 0.39365927044425756321e+5, + 0.14815998438653210542e+5, + -0.48741414615781286557e+5, + 0.17272720901255599983e+4, + 0.49802534279961582797e+5, + -0.1247734200442405745e+5, + -0.50407389682136454212e+5, + 0.27242338151842359366e+5, + 0.51670499623257514031e+5, + -0.49376274063385513728e+5, + -0.34431629459602780116e+5, + 0.6221976040183238365e+5, + 0.11763818718625849215e+5, + -0.5444813184206609003e+5, + -0.21025675627881591936e+4, + 0.47159896071073926578e+5, + 0.70772717692270944099e+4, + -0.52341136153694809764e+5, + -0.42145190897674692678e+4, + 0.61194383073491357209e+5, + -0.3744237654670665961e+4, + -0.62008217913547290664e+5, + 0.88652198255551993498e+4, + 0.67315687763732319581e+5, + -0.17128162487617279112e+5, + -0.644724151744851697e+5, + 0.25146107430131982255e+5, + 0.51220024991011778184e+5, + -0.93041925598557045305e+4, + -0.5284591897742425499e+5, + -0.70639119026250300521e+4, + 0.72932852113920744159e+5, + 0.38147659109040882868e+4, + -0.75563619563116270001e+5, + -0.68053732339261512152e+3, + 0.64329612465263649938e+5, + 0.17298436172613211966e+5, + -0.57077224651019772864e+5, + -0.35364881670338887488e+5, + 0.52041866185616047005e+5, + 0.52198058979773770261e+5, + -0.38135991019581997534e+5, + -0.69664543369175007683e+5, + 0.26281675087046478438e+5, + 0.76902302462868596194e+5, + -0.70131929119830147101e+4, + -0.61897482249810331268e+5, + -0.33631061821102019167e+5, + 0.49967648052696080413e+5, + 0.75499061894120022771e+5, + -0.41050712467696488602e+5, + -0.7842707042759822798e+5, + 0.27794246838188114452e+4, + 0.61613576928675785894e+5, + 0.58792957986374072789e+5, + -0.41857578260830377985e+5, + -0.87720503613567649154e+5, + -0.12729706217889211075e+4, + 0.75948750624146618065e+5, + 0.61301216651802016713e+5, + -0.29864668266382581351e+5, + -0.86557470104750434984e+5, + -0.42540499304004413716e+5, + 0.6007470089826482581e+5, + 0.94192422945527214324e+5, + 0.14872650636768119512e+5, + -0.65903229762140283128e+5, + -0.9076026017287405557e+5, + -0.24902291796203553531e+5, + 0.84262592489570946782e+5, + 0.95702365328686093562e+5, + 0.28148440503847021319e+5, + -0.52657601265278579376e+5, + -0.11749700658905705495e+6, + -0.67537522415855928557e+5, + 0.35104426075785355351e+5, + 0.90105777365305460989e+5, + 0.12218586518043719116e+6, + 0.53445856492380196869e+5, + -0.51887627566168288467e+5, + -0.10123425295758275024e+6, + -0.14030000031712130294e+6, + -0.9330399635074561229e+5, + -0.43963761665925358102e+4, + 0.62623384830021183006e+5, + 0.14385312090702055139e+6, + 0.17534586416885856306e+6, + 0.17222712639017411857e+6, + 0.16288861106408422347e+6, + 0.1258545818011782103e+6, + 0.92414088844170692028e+5, + 0.65845732662724709371e+5, + 0.41550247870433180651e+5, + 0.22902388597792909422e+5, + 0.15348712519491404237e+5, + 0.93386854437465954106e+4, + -0.35131498168525649817e+3, + 0.5966916233282228859e+4, + 0.5017010104719362289e+3, + -0.39983486407878253885e+4, + 0.69641102499837352298e+4, + -0.44743269369375857423e+4, + -0.13446494725304316944e+4, + 0.71320022111042781034e+4, + -0.85510748954760110792e+4, + 0.41329658853913333587e+4, + 0.37093542579863365063e+4, + -0.99688225575670203398e+4, + 0.10283017439656003262e+5, + -0.39574856210778493733e+4, + -0.53971069659516879256e+4, + 0.1197856620787214888e+5, + -0.11514632514358894696e+5, + 0.40203911482419698586e+4, + 0.60525459366702498301e+4, + -0.12578453429341680021e+5, + 0.11533424104004223409e+5, + -0.3553377610386276956e+4, + -0.64921069713158804007e+4, + 0.12478989550821692319e+5, + -0.10831068400545722398e+5, + 0.26378875607964610026e+4, + 0.70486125158792046932e+4, + -0.12385524362502821532e+5, + 0.10252591468653023185e+5, + -0.20912795397722652524e+4, + -0.71183595522143932612e+4, + 0.11912317857003650715e+5, + -0.96386029514128968003e+4, + 0.18985908280982616816e+4, + 0.65431901135462367165e+4, + -0.10731409381004734314e+5, + 0.84254929094703729788e+4, + -0.13194625167470392171e+4, + -0.61608355607087351018e+4, + 0.95676860044350614771e+4, + -0.70697550314598429395e+4, + 0.38960602515020372039e+3, + 0.63453130768411965619e+4, + -0.91429354519404751045e+4, + 0.64575815543185217393e+4, + -0.98300436912501556463e+1, + -0.63557986544996238081e+4, + 0.89614190355248138076e+4, + -0.64226466630278955563e+4, + 0.34303888534841763658e+3, + 0.57048674848561022372e+4, + -0.83041273167158124124e+4, + 0.61221147463519891971e+4, + -0.59806779262221857607e+3, + -0.49881009867194607068e+4, + 0.74415067866796489398e+4, + -0.54771808554730378091e+4, + 0.38736971640737903044e+3, + 0.47676416929777515179e+4, + -0.69666033745991508113e+4, + 0.49667711038391526017e+4, + -0.9272219232644447402e+4, + 0.80159332675543810183e+4, + 0.565297295301572467e+4, + -0.16307246402827637212e+5, + 0.16115454219336601454e+5, + -0.73558685747322142561e+4, + -0.61323258145497748046e+4, + 0.14194952116865772041e+5, + -0.13681800807985489882e+5, + 0.32795866309876259947e+4, + 0.85783000489222376928e+4, + -0.16016881170304319312e+5, + 0.12309683629433018723e+5, + -0.12208957769410358196e+4, + -0.1230676279957576844e+5, + 0.18068764031619550224e+5, + -0.14021602263645001585e+5, + 0.55344204427666807078e+3, + 0.12570390554974464976e+5, + -0.19265089195013741119e+5, + 0.13792286073715742532e+5, + -0.13891208538255482381e+4, + -0.12076048386380789452e+5, + 0.16709220285941311886e+5, + -0.1182085940225862214e+5, + -0.78560830543414954263e+3, + 0.11039612840449086434e+5, + -0.14158099995843822398e+5, + 0.67073179920493321333e+4, + 0.42341995086374718085e+4, + -0.12806563685782726679e+5, + 0.11331715325708675664e+5, + -0.24490465465384331765e+4, + -0.95614566965295052796e+4, + 0.14662031762619439178e+5, + -0.10799053247359706802e+5, + -0.15480468673077166386e+4, + 0.12592148096206359696e+5, + -0.16693964116869898135e+5, + 0.9235174067627360273e+4, + 0.32220812312036473486e+4, + -0.14214133818159778457e+5, + 0.14779372237585866969e+5, + -0.65069646452220258652e+4, + -0.64341058704057168143e+4, + 0.13238825740502254121e+5, + -0.10896014363058520757e+5, + -0.50477347748015438356e+3, + 0.10841405299738788017e+5, + -0.13940521884752648475e+5, + 0.52267715221175594706e+4, + 0.78542432967454678874e+4, + -0.17660643127304560039e+5, + 0.14833199013629247929e+5, + -0.20106213703303824332e+4, + -0.14352556787246636304e+5, + 0.21474500955490395427e+5, + -0.15483034599323496877e+5, + -0.11805864486868326821e+4, + 0.17356094495678375097e+5, + -0.20464815105868503451e+5, + 0.13993556079705273078e+5, + 0.10516170090600560798e+5, + -0.91521652906115614314e+4, + 0.33883695607751746138e+5, + 0.23036580618045485608e+5, + 0.30516044019859557011e+5, + 0.81584358291644850397e+5, + 0.7241789261415998044e+5, + 0.10096993729560574866e+6, + 0.13597522113063937286e+6, + 0.96904083431425635354e+5, + 0.98336687730887919315e+5, + 0.59104100321948943019e+5, + -0.2927047671889585763e+5, + -0.46559557556471190765e+5, + -0.8775038838298220071e+5, + -0.91689212105037426227e+5, + -0.10126924167033279446e+5, + 0.27483659173602543888e+5, + 0.67252124948985234369e+5, + 0.84304923991266288795e+5, + 0.7006121000164801444e+4, + -0.49459775003673013998e+5, + -0.58294780245129804825e+5, + -0.54750656028900564706e+5, + 0.20616570942583697615e+5, + 0.8128114857350094826e+5, + 0.31977982636160108086e+5, + -0.60523926401405360593e+4, + -0.48768308155181883194e+5, + -0.70944189973602042301e+5, + 0.31294126961090234545e+5, + 0.62261782432788371807e+5, + 0.18924123707308644953e+5, + -0.31413810676033281197e+4, + -0.68390585702951255371e+5, + -0.31798073656850639964e+5, + 0.63164733219418143563e+5, + 0.36801471196179998515e+5, + -0.84589887010822985758e+4, + -0.36694781470069632633e+5, + -0.45450909817112398741e+5, + 0.35210619336666182789e+5, + 0.64439996687392878812e+5, + -0.23520066987561905989e+5, + -0.46741340801069658482e+5, + -0.83622066188705903187e+4, + 0.20429100608616976388e+5, + 0.4969699460777585773e+5, + -0.13493835023574016304e+5, + -0.68096950089289370226e+5, + 0.16532131684211748507e+5, + 0.52093853105702321045e+5, + -0.39316784297143030926e+4, + -0.25262784837432536733e+5, + -0.27721591715399488749e+5, + 0.15360633163665916072e+5, + 0.57048279333424259676e+5, + -0.28307801499678716937e+5, + -0.57597209547494712751e+5, + 0.38228173250363157422e+5, + 0.3206437435029128028e+5, + -0.16987469582955935039e+5, + -0.20589888790066619549e+5, + -0.15929157680910746421e+5, + 0.39291958082608187397e+5, + 0.22819122607977984444e+5, + -0.57005746830601296097e+5, + -0.99041772531858041475e+4, + 0.57677392529788899992e+5, + -0.40913833904638718195e+4, + -0.46096964446808575303e+5, + 0.12310587636229556665e+5, + 0.22651362447850155149e+5, + 0.34631796996126608974e+4, + -0.15536494787559826364e+5, + -0.2940087298332676437e+5, + 0.43095135419462305435e+5, + 0.21062077337089875073e+5, + -0.63578638054896873655e+5, + 0.10971265078426773471e+5, + 0.51540064998484725947e+5, + -0.27775358296788737789e+5, + -0.31095576191471402126e+5, + 0.28310052272358319897e+5, + 0.15531009206130176608e+5, + -0.19538905545845464076e+5, + -0.93681796403972057306e+4, + 0.53353294647061929936e+4, + 0.23306306451539618138e+5, + -0.98146657100284301123e+4, + -0.38946410222900725785e+5, + 0.40245213577746784722e+5, + 0.22782916077438523644e+5, + -0.60439202256146767468e+5, + 0.1435501972727244538e+5, + 0.48444704500105945044e+5, + -0.37953454029704735149e+5, + -0.24199748314191681857e+5, + 0.44837053326431043388e+5, + -0.80314351668166204945e+3, + -0.37750438834539469099e+5, + 0.21206884067819661141e+5, + 0.14270853090728145617e+5, + -0.17249256008238924551e+5, + -0.14018289902115468522e+4, + 0.16211332382104487806e+4, + 0.12833020512606601187e+5, + -0.6161635493403559849e+4, + -0.20116256683836993034e+5, + 0.2264908285131195953e+5, + 0.113303245303721651e+5, + -0.3407357645518265781e+5, + 0.60156937251370800368e+4, + 0.38270798366834431363e+5, + -0.33209053319085476687e+5, + -0.21752952997935168241e+5, + 0.54032928874458368227e+5, + -0.16397352518797222729e+5, + -0.44548729633575880143e+5, + 0.4831189586167584639e+5, + 0.10745163809172352558e+5, + -0.54713690122161220643e+5, + 0.25797293067595703178e+5, + 0.37123096632728476834e+5, + -0.50773317285594552231e+5, + -0.26723665766950794023e+4, + 0.53299284968230640516e+5, + -0.35688244118812282977e+5, + -0.26928916281840534793e+5, + 0.54491122488844725012e+5, + -0.13561774086128389172e+5, + -0.41767254900544656266e+5, + 0.41164708587383342092e+5, + 0.12394279224172265458e+5, + -0.48548167350141317002e+5, + 0.20560615867062722828e+5, + 0.35567554169401788386e+5, + -0.47822591461681622604e+5, + 0.21896969441225224728e+5, + 0.29029559370153911004e+5, + -0.63001280381253403903e+5, + 0.13012695075673769679e+5, + 0.48976002307755159563e+5, + -0.41761521279660213622e+5, + -0.29058167880889730441e+5, + 0.6336529256478039315e+5, + -0.14384132651888974578e+5, + -0.58573223569186877285e+5, + 0.5504860311678762082e+5, + 0.16338214339864365684e+5, + -0.61306809721636636823e+5, + 0.16804737628622904595e+5, + 0.47554802642763097538e+5, + -0.40163657201646819885e+5, + -0.3342856323148109368e+5, + 0.62587970673655443534e+5, + -0.32688719413439589516e+4, + -0.66293070045341330115e+5, + 0.42234046374852092413e+5, + 0.39104532316791002813e+5, + -0.61782787264835627866e+5, + -0.1210876005482023902e+5, + 0.68295103815703143482e+5, + -0.19462376797473429178e+5, + -0.70638226244639794459e+5, + 0.61444051059236517176e+5, + 0.39826408135138357466e+5, + -0.90705152659874802339e+5, + 0.10025372610824586445e+5, + 0.81522614559227833524e+5, + -0.49454020536693577014e+5, + -0.60809809840231740964e+5, + 0.75509732320311755757e+5, + 0.2872481695036165911e+5, + -0.95989455703494604677e+5, + 0.184570114601233945e+5, + 0.81542492521312145982e+5, + -0.54633265858037135331e+5, + -0.51313620897601307661e+5, + 0.59302929841018754814e+5, + 0.34951001412374571373e+5, + -0.68926734347187477397e+5, + -0.22953681540605233749e+5, + 0.81738622956481587607e+5, + -0.41965481469924652629e+4, + -0.83691091841759553063e+5, + 0.24639290647167515999e+5, + 0.8051677986085570592e+5, + -0.47310754458951771085e+5, + -0.79070375227085198276e+5, + 0.77054154941360073281e+5, + 0.55255653574652220414e+5, + -0.96926204825922744931e+5, + -0.23575997868717822712e+5, + 0.88827142055206393707e+5, + 0.81661512664045658312e+4, + -0.81999701532648192369e+5, + -0.11011817130121229638e+5, + 0.8930683689868352667e+5, + 0.29550420505065972065e+4, + -0.99291067173071554862e+5, + 0.79231533930104815227e+4, + 0.9999077225005645596e+5, + -0.15473248824930707997e+5, + -0.10737834075745845621e+6, + 0.26226492779465675994e+5, + 0.10354976614665309899e+6, + -0.35542481335144715558e+5, + -0.89154532796403218526e+5, + 0.15572290816793862177e+5, + 0.91806740452697413275e+5, + 0.47219484652415367236e+4, + -0.11593304406249713793e+6, + -0.46415749016886666141e+4, + 0.11895431288177294482e+6, + 0.5397885434866993819e+4, + -0.10625366143764162553e+6, + -0.30723478532105698832e+5, + 0.96109861733862504479e+5, + 0.57750579669255013869e+5, + -0.86895999165800050832e+5, + -0.84763365204504909343e+5, + 0.64025689852756186156e+5, + 0.11139941720314513077e+6, + -0.41653431199753067631e+5, + -0.12394322937561299477e+6, + 0.62512418717880682379e+4, + 0.10618600452837036573e+6, + 0.55052865224128981936e+5, + -0.87223384507962342468e+5, + -0.11634369195309682982e+6, + 0.62342878485226414341e+5, + 0.12799912025234712928e+6, + 0.11597513822015012011e+4, + -0.10798990700767096132e+6, + -0.92527483943197396002e+5, + 0.6915320554827041633e+5, + 0.14072338450568349799e+6, + 0.51032135440231313623e+4, + -0.12567888208181421214e+6, + -0.10095264329024913604e+6, + 0.48880429801037833386e+5, + 0.14375605802483976004e+6, + 0.67394061138313889387e+5, + -0.97641322358451972832e+5, + -0.15258844409262380213e+6, + -0.28550300096835348086e+5, + 0.11178363536131395085e+6, + 0.14835448117534909397e+6, + 0.38051950460419546289e+5, + -0.13435168847251366242e+6, + -0.15885000335887089022e+6, + -0.48201472438144439366e+5, + 0.90916204536677687429e+5, + 0.18928318017336778576e+6, + 0.11028400025800301228e+6, + -0.52619854717481408443e+5, + -0.1544817120479963487e+6, + -0.19643066293069301173e+6, + -0.86569731004892091732e+5, + 0.79392610577876112075e+5, + 0.17305682169740062091e+6, + 0.2261050894367917208e+6, + 0.15246439117048354819e+6, + 0.11585949287344876211e+5, + -0.10779445097162092861e+6, + -0.23327697797855158569e+6, + -0.28735675988548382884e+6, + -0.28499767745445814217e+6, + -0.26504591800478991354e+6, + -0.20735803556202742038e+6, + -0.15205770837172909523e+6, + -0.10760944277649364085e+6, + -0.67764772355383436661e+5, + -0.38631477372216795629e+5, + -0.24690096686719465652e+5, + -0.14263284223613844006e+5, + -0.18575827185411008031e+4, + -0.74651514807967096203e+4, + -0.13014135080472497066e+4, + 0.45534541198141196219e+4, + -0.80772304083776043626e+4, + 0.49191083288233339772e+4, + 0.18625089781438571208e+4, + -0.8597784749366932374e+4, + 0.10186447883032498794e+5, + -0.49825773193028871901e+4, + -0.42121506055102190658e+4, + 0.11581592364065261791e+5, + -0.12060451035305461119e+5, + 0.48264639564301560313e+4, + 0.59620231085026316578e+4, + -0.1360166981035419667e+5, + 0.13145893733874761892e+5, + -0.45886513054696924883e+4, + -0.69530887626843223188e+4, + 0.1442573102035206648e+5, + -0.13189954543167634256e+5, + 0.3976785578101379997e+4, + 0.76045725938585956101e+4, + -0.14496537871462413023e+5, + 0.12580094701536210778e+5, + -0.31131135055310155622e+4, + -0.80777430298399285675e+4, + 0.14257271963093027807e+5, + -0.11829399642365509862e+5, + 0.24589089911261730776e+4, + 0.81139066184124658321e+4, + -0.13594696481899860373e+5, + 0.1093827755627498118e+5, + -0.20049332374165669535e+4, + -0.76994607364491148473e+4, + 0.12458967268853188216e+5, + -0.96989142049615165888e+4, + 0.13940231517321290085e+4, + 0.73258877394943901891e+4, + -0.11306464892864407375e+5, + 0.84208338438895152649e+4, + -0.65361581855708027433e+3, + -0.72216233206613133007e+4, + 0.10577241238194203106e+5, + -0.76013536370170359078e+4, + 0.25218858506853399604e+3, + 0.70547255471867929373e+4, + -0.10083079505295909257e+5, + 0.72292790165446731407e+4, + -0.32416015401116487737e+3, + -0.65366578084748771289e+4, + 0.9438453261338716402e+4, + -0.68648848747330694096e+4, + 0.48694601453275646463e+3, + 0.59145215187346666426e+4, + -0.86686423371059408964e+4, + 0.63161890549663439742e+4, + -0.3724421969986870522e+3, + -0.56126703758797784758e+4, + 0.81450494669295640051e+4, + -0.57951835757285616637e+4, + 0.87232690149598547578e+4, + -0.62194038368811752662e+4, + -0.73423720662913119668e+4, + 0.17150265170968537859e+5, + -0.15608139519422777084e+5, + 0.57244484762460688216e+4, + 0.82476534450248709618e+4, + -0.1583872362324802998e+5, + 0.14277286972916754166e+5, + -0.26821009426944738152e+4, + -0.98331091503989282501e+4, + 0.17258780537000904587e+5, + -0.12905617852788594973e+5, + 0.11266300980214082301e+4, + 0.12782240985138636461e+5, + -0.18294589678713487956e+5, + 0.13693656539586281724e+5, + 0.28162501600547659564e+3, + -0.13301149244891594208e+5, + 0.19299013914506558649e+5, + -0.12751712462687588413e+5, + -0.36482653813840624935e+3, + 0.13774501356934790238e+5, + -0.17356091378777768114e+5, + 0.10982921241279180322e+5, + 0.28873098166103900439e+4, + -0.13369308658347246819e+5, + 0.15605228640813240418e+5, + -0.6476480902536782196e+4, + -0.59598869578332478341e+4, + 0.15166655254143921411e+5, + -0.13050877939631407571e+5, + 0.27593664964619624698e+4, + 0.10716779693170956307e+5, + -0.16424681903142980445e+5, + 0.12148427407431307074e+5, + 0.13777896023741864155e+4, + -0.13454457874988751428e+5, + 0.17867942853795655537e+5, + -0.9717364675119635649e+4, + -0.38320546346306900887e+4, + 0.15626761954928659179e+5, + -0.15968494357959694753e+5, + 0.65689756160381612062e+4, + 0.78785555736245996741e+4, + -0.15536214809152734233e+5, + 0.12903738254107505782e+5, + -0.28050235156746094134e+2, + -0.12104968012236984578e+5, + 0.16473364250865331996e+5, + -0.77480908777390513933e+4, + -0.64453974927543904414e+4, + 0.17912958058043768688e+5, + -0.16317191329203598798e+5, + 0.38821711310800101273e+4, + 0.13012288379602838177e+5, + -0.20971786588831011613e+5, + 0.1566485243813028319e+5, + 0.80787656144439336003e+3, + -0.1712302632226408241e+5, + 0.20260887928207666846e+5, + -0.13835868540210109131e+5, + -0.11363519407514126215e+5, + 0.93816435815517670562e+4, + -0.35280190503057681781e+5, + -0.24586226742574068339e+5, + -0.32261824801154321904e+5, + -0.85745282688278821297e+5, + -0.76666844700942994677e+5, + -0.10660109832656750223e+6, + -0.1428959380766992108e+6, + -0.10306827194129909913e+6, + -0.10299889075511720148e+6, + -0.62578844007426690951e+5, + 0.30387971190515800117e+5, + 0.5019793598316614225e+5, + 0.91346228854765053256e+5, + 0.97540362862131310976e+5, + 0.10703132734663300653e+5, + -0.29907181408062937408e+5, + -0.69482803757880203193e+5, + -0.90329592201901628869e+5, + -0.66942853626057722067e+4, + 0.52530423276817338774e+5, + 0.6018915300079217559e+5, + 0.59517210449075289944e+5, + -0.23238397929911010579e+5, + -0.85144733515742787858e+5, + -0.33187649860103301762e+5, + 0.48997191465896003137e+4, + 0.532850727468222467e+5, + 0.73375254122050464503e+5, + -0.32467291877838197252e+5, + -0.65137897468146235042e+5, + -0.21329115341967022687e+5, + 0.49291698084080726403e+4, + 0.70913955665071334806e+5, + 0.33973885398135978903e+5, + -0.66184421192848967621e+5, + -0.39871055024718807545e+5, + 0.10087720479119834636e+5, + 0.37897962765484655392e+5, + 0.48155586501616351597e+5, + -0.36776454509320792567e+5, + -0.68655491206031292677e+5, + 0.25442401575633542961e+5, + 0.48993994234181198408e+5, + 0.87550076170130396349e+4, + -0.21233273649138674955e+5, + -0.52753486334542263648e+5, + 0.14359939928754774883e+5, + 0.71983979986490900046e+5, + -0.1774544638596945515e+5, + -0.547082910934846077e+5, + 0.41621491342721428737e+4, + 0.26310488932722793834e+5, + 0.29787603174611511349e+5, + -0.16676633715396812477e+5, + -0.60069201588853480644e+5, + 0.30266734781122529967e+5, + 0.59920769372812108486e+5, + -0.39358107079144188901e+5, + -0.34495352843600325286e+5, + 0.17925731000950723683e+5, + 0.2250968107393829996e+5, + 0.15421170614583419592e+5, + -0.3994538013479008805e+5, + -0.25116295191643672297e+5, + 0.60258957506662271044e+5, + 0.11396301718368500588e+5, + -0.62607876077699846064e+5, + 0.63129453025895154497e+4, + 0.47100506146466592327e+5, + -0.12485727982883165168e+5, + -0.23160299742658720788e+5, + -0.53907790133235348549e+4, + 0.18535409962418201758e+5, + 0.29205446794287618104e+5, + -0.44599872434050426818e+5, + -0.21867895656789743953e+5, + 0.6568292361547613109e+5, + -0.96879910097548727208e+4, + -0.56054586062026959553e+5, + 0.30189319592820011167e+5, + 0.32982361817307129968e+5, + -0.30966433154959173407e+5, + -0.14844521216565446593e+5, + 0.19266072485831606173e+5, + 0.10506657153296058823e+5, + -0.52997162638958288881e+4, + -0.25713012774117843946e+5, + 0.11810176525063094232e+5, + 0.39897259830306124059e+5, + -0.42024764179235746269e+5, + -0.23510145145750695519e+5, + 0.62450597544910473516e+5, + -0.13521575103621096787e+5, + -0.52442343098506513343e+5, + 0.40588976275197142968e+5, + 0.25985002742192144069e+5, + -0.48620505526982233278e+5, + 0.25856434208434425273e+4, + 0.38259467238909492153e+5, + -0.21504029445797448716e+5, + -0.14947232774596526724e+5, + 0.17172561946010351676e+5, + 0.30578046682782073731e+4, + -0.33103033999199151367e+4, + -0.12430345527127668902e+5, + 0.62093393087414096954e+4, + 0.20660383700179725565e+5, + -0.22725335855109882687e+5, + -0.13302327230353352206e+5, + 0.37029048203047532297e+5, + -0.68444624774951616928e+4, + -0.4055158764844473626e+5, + 0.35743162008095736383e+5, + 0.22017974953728418768e+5, + -0.56200876056710818375e+5, + 0.16890218715027749568e+5, + 0.46923289989274780964e+5, + -0.50513217578509051236e+5, + -0.11930075582697256323e+5, + 0.58182526801136795257e+5, + -0.27343946899850252521e+5, + -0.39419514446860819589e+5, + 0.54094361916159461543e+5, + 0.22435598271209032646e+4, + -0.55865520744598121382e+5, + 0.37686365122908056946e+5, + 0.2793180397250342503e+5, + -0.5669472258620717912e+5, + 0.13455887350073953712e+5, + 0.44679968437421266572e+5, + -0.43577647575907511055e+5, + -0.13480043603433119642e+5, + 0.52086260997986522852e+5, + -0.22781186900204058475e+5, + -0.36535042514841501543e+5, + 0.49867432592493496486e+5, + -0.18986224058838004566e+5, + -0.34313891580633026024e+5, + 0.62365063117985235294e+5, + -0.73801367728364648428e+4, + -0.53955049139210641442e+5, + 0.42351780956549591792e+5, + 0.308117871198637622e+5, + -0.63522225340750548639e+5, + 0.12435834281094093967e+5, + 0.59118192151529670809e+5, + -0.5171500711833776586e+5, + -0.21692428161991305387e+5, + 0.64177561240949231433e+5, + -0.14957992674208790049e+5, + -0.52328766670970719133e+5, + 0.44043601352142279211e+5, + 0.32629398501651790866e+5, + -0.64322178159947812674e+5, + 0.51860955298081207729e+4, + 0.65893016700896027032e+5, + -0.43036620833460394351e+5, + -0.39342206669383005647e+5, + 0.64423704964251483034e+5, + 0.88990071702641944285e+4, + -0.68733663054522534367e+5, + 0.25011052346611675603e+5, + 0.64278541568247339455e+5, + -0.60867452699608627881e+5, + -0.33641178151869251451e+5, + 0.84210807315842292155e+5, + -0.99480966966262603819e+4, + -0.76646725642518169479e+5, + 0.47076475625181941723e+5, + 0.57175461663106179913e+5, + -0.71393026752087171189e+5, + -0.26368893597473401314e+5, + 0.88291106041820370592e+5, + -0.13684559050895242763e+5, + -0.78565860129479755415e+5, + 0.47639277945925503445e+5, + 0.55654387904408897157e+5, + -0.59264420689702026721e+5, + -0.36890492120008922939e+5, + 0.70913741202710501966e+5, + 0.21029251993383157242e+5, + -0.81002879066909095854e+5, + 0.55396825294988602764e+4, + 0.82556180446491591283e+5, + -0.27056011205212707864e+5, + -0.76671067402063665213e+5, + 0.48329415947729576146e+5, + 0.72023571757885962143e+5, + -0.71795096019803764648e+5, + -0.52113340397294850845e+5, + 0.8920601653515639191e+5, + 0.26964316762734863005e+5, + -0.86029768093574544764e+5, + -0.1203586201789720144e+5, + 0.83891359681657821056e+5, + 0.97611217588253330177e+4, + -0.89241246624603125383e+5, + 0.17938680313714175441e+3, + 0.95657095034072612179e+5, + -0.91936754689129429607e+4, + -0.95815062656886977493e+5, + 0.16113323294346808325e+5, + 0.10137279569662621361e+6, + -0.23653267958839271159e+5, + -0.98745600451477672323e+5, + 0.29575365790494048269e+5, + 0.91120525820232389378e+5, + -0.15561972677784566258e+5, + -0.93396457774419846828e+5, + 0.12281112026275993685e+4, + 0.10939465934118589212e+6, + 0.31966982551606170091e+4, + -0.11132650333653009147e+6, + -0.88387703396789329418e+4, + 0.10378847595451386587e+6, + 0.31804783911296686711e+5, + -0.95374966137293245993e+5, + -0.55940220929663999414e+5, + 0.85731784723017335637e+5, + 0.8161265002958754485e+5, + -0.63549561551413295092e+5, + -0.10554775762908594334e+6, + 0.39041003158131476084e+5, + 0.11855847956240571511e+6, + -0.15389470695978397998e+4, + -0.10726321032690259744e+6, + -0.53097353016561122786e+5, + 0.88903788538782842807e+5, + 0.10680637105690067983e+6, + -0.56384562333662732271e+5, + -0.12380127738382521784e+6, + -0.5771660706427104742e+4, + 0.11039343340755983081e+6, + 0.86960400544740172336e+5, + -0.67977195934807139565e+5, + -0.13370775215428258525e+6, + -0.7519560345772589244e+4, + 0.12269915068421552132e+6, + 0.98868961567069505691e+5, + -0.47970728654086167808e+5, + -0.14055849921816366259e+6, + -0.63781466070940157806e+5, + 0.94155894439599083853e+5, + 0.14672139693354573683e+6, + 0.30828222137472901522e+5, + -0.11108425147599578486e+6, + -0.14425584092654913547e+6, + -0.34035007867296852055e+5, + 0.12686764325870368339e+6, + 0.15584300433790730312e+6, + 0.48835776378984308394e+5, + -0.9266768048930169607e+5, + -0.18027876015733755776e+6, + -0.10718098866746714339e+6, + 0.47196913872105476912e+5, + 0.15560851535162093933e+6, + 0.18722211304438952357e+6, + 0.83401893717621394899e+5, + -0.72560937629352032673e+5, + -0.1736899509667980019e+6, + -0.21636914886840953841e+6, + -0.14743365459535329137e+6, + -0.14965756181447182826e+5, + 0.10887184337440870877e+6, + 0.22442441340908623533e+6, + 0.27863086867773957783e+6, + 0.27898465835873782635e+6, + 0.25554927224013375235e+6, + 0.20202722742923631449e+6, + 0.14823842652396438643e+6, + 0.10397156802077722386e+6, + 0.65591280273283977294e+5, + 0.38408288722184188373e+5, + 0.23455037637081753928e+5, + 0.13152573209420073908e+5, + 0.36274760277668706294e+4, + 0.55146023774819877872e+4, + 0.14867974562454487568e+4, + -0.26311426379322424509e+4, + 0.50382517644550316618e+4, + -0.2887175616654993064e+4, + -0.12475818272550613983e+4, + 0.54005087165398581419e+4, + -0.63472034275533796972e+4, + 0.31333098473537488644e+4, + 0.25347688945642471481e+4, + -0.70902678616881412381e+4, + 0.74317577357467998809e+4, + -0.3048209275930277272e+4, + -0.35288480646711241207e+4, + 0.82086015798661137524e+4, + -0.79672929593158569332e+4, + 0.27896275819308248174e+4, + 0.4214336738835802862e+4, + -0.87513429828722291859e+4, + 0.79936893363468016105e+4, + -0.23839797799377279262e+4, + -0.4665173266665956362e+4, + 0.88571323352806539333e+4, + -0.76852125846598446515e+4, + 0.19157553987073526969e+4, + 0.49022143681566485611e+4, + -0.8668565491951751028e+4, + 0.71952781122460455663e+4, + -0.14995449830789918906e+4, + -0.49217365681681612841e+4, + 0.82366559995008155965e+4, + -0.65968639404372297577e+4, + 0.11433094471474657894e+4, + 0.47625703257296145239e+4, + -0.76363653888010776427e+4, + 0.591274401561448758e+4, + -0.80447625817833898054e+3, + -0.45508383681431923833e+4, + 0.70005297466090933085e+4, + -0.5241361945861291133e+4, + 0.48125702378182836583e+3, + 0.43649412037267247797e+4, + -0.64664091073712070283e+4, + 0.47051298069627182485e+4, + -0.26197219429360023923e+3, + -0.41810441565669079864e+4, + 0.60444231452744534181e+4, + -0.43466242057498402573e+4, + 0.19296848825220396861e+3, + 0.39339199934556604603e+4, + -0.56618827219046470418e+4, + 0.40766233127589985088e+4, + -0.20051603895177146342e+3, + -0.36656203005776133068e+4, + 0.52941264218762926248e+4, + -0.38092681830324850125e+4, + 0.14823208690803650711e+3, + 0.35150955249317507878e+4, + -0.50472402358178751456e+4, + 0.35803279533300510593e+4, + -0.44604220095166492683e+4, + 0.24708415682985400963e+4, + 0.4825469239916663355e+4, + -0.97128702396432981914e+4, + 0.82099537585547168419e+4, + -0.23166066645128444179e+4, + -0.5461562057365171313e+4, + 0.93140946735909674317e+4, + -0.79445866653278098966e+4, + 0.10992838174249236545e+4, + 0.59560417228816122588e+4, + -0.99187324233499311958e+4, + 0.72073989696749258655e+4, + -0.48401165235821315491e+3, + -0.72100363479824509341e+4, + 0.1003162784723927507e+5, + -0.72334676462618881487e+4, + -0.59531344060980097765e+3, + 0.75805539928258194777e+4, + -0.1045833231695635186e+5, + 0.63619400885238810588e+4, + 0.10946263657194708685e+4, + -0.83092719561669582617e+4, + 0.96996406496216986852e+4, + -0.54906038537472131793e+4, + -0.26510603338870041625e+4, + 0.84265072842399931687e+4, + -0.91760779338954635023e+4, + 0.33806347817784685503e+4, + 0.41028891269779041977e+4, + -0.93967559331400843803e+4, + 0.79202615456361190809e+4, + -0.16386460692372909307e+4, + -0.63844032479347933986e+4, + 0.976374071928844387e+4, + -0.72242877862417753931e+4, + -0.69978233389615240867e+3, + 0.77545121170826432717e+4, + -0.10286438140203736111e+5, + 0.55053623849439400146e+4, + 0.2402372205101081363e+4, + -0.92105904066455386783e+4, + 0.92951064047741183458e+4, + -0.36394147577313183319e+4, + -0.49522342375183270633e+4, + 0.95509259300913436164e+4, + -0.80082833960546868184e+4, + 0.32072430404255214853e+3, + 0.7139030859041932672e+4, + -0.10144194531401957647e+5, + 0.54279514581425546567e+4, + 0.28009879219454719532e+4, + -0.98352231003488759598e+4, + 0.95891515517545540206e+4, + -0.30506617647198077066e+4, + -0.63725469024978556263e+4, + 0.11127853850587071065e+5, + -0.863338722724458421e+4, + -0.1597483320053443947e+3, + 0.90574290129190649168e+4, + -0.10802162300800795492e+5, + 0.74024275292349957454e+4, + 0.65130508824665384964e+4, + -0.5094666286740311989e+4, + 0.19666505319638195942e+5, + 0.14157690350392113032e+5, + 0.18257060492416825582e+5, + 0.48452546792505578196e+5, + 0.43592971575568888511e+5, + 0.60401330926538343192e+5, + 0.8077059714923206775e+5, + 0.58743933838746401307e+5, + 0.58071228661460074363e+5, + 0.35518211353303006035e+5, + -0.16945852028036893898e+5, + -0.28983064213031328109e+5, + -0.51180955969229573384e+5, + -0.55628559730306682468e+5, + -0.61348791711251360539e+4, + 0.17460619666184498783e+5, + 0.3859840658355668711e+5, + 0.51905451355073215382e+5, + 0.34449745099278302405e+4, + -0.29963594418073058478e+5, + -0.33419816628911074076e+5, + -0.34643520879650233837e+5, + 0.13947016365067123843e+5, + 0.47923965471820461971e+5, + 0.18541648692448889051e+5, + -0.20284339750898843704e+4, + -0.31130379608449002262e+5, + -0.40823156549885010463e+5, + 0.18102708005653552391e+5, + 0.36655138968256287626e+5, + 0.12762601881134012729e+5, + -0.36049197642101412384e+4, + -0.39554729233558995475e+5, + -0.19483544075611043809e+5, + 0.37295866716623335378e+5, + 0.2310559533132933575e+5, + -0.62949481161213816449e+4, + -0.21063404091192431224e+5, + -0.27404920130441503716e+5, + 0.20672190192292167922e+5, + 0.39226721290253139159e+5, + -0.14722833144758678827e+5, + -0.27606049876976387168e+5, + -0.49372675995472927752e+4, + 0.11890449418374428205e+5, + 0.30035257116920045519e+5, + -0.81802330995755137337e+4, + -0.40875490509786286566e+5, + 0.10207917671558308939e+5, + 0.30891642322094146948e+5, + -0.2392637772574644714e+4, + -0.14704359208314190255e+5, + -0.17186706816377980431e+5, + 0.97143121755250103888e+4, + 0.33968996336865246121e+5, + -0.17359541815444343229e+5, + -0.33506698524430663383e+5, + 0.21771514036252832739e+5, + 0.19939108851750017493e+5, + -0.10218429327579797246e+5, + -0.13102196247451294767e+5, + -0.8073874815723206666e+4, + 0.21881844397317305265e+5, + 0.14785515346612824942e+5, + -0.34265483315443008905e+5, + -0.685539942217026055e+4, + 0.36276240556866709085e+5, + -0.45022248936848527592e+4, + -0.25976851177325166645e+5, + 0.68430899638111914101e+4, + 0.12775377132760633685e+5, + 0.38684066283922575167e+4, + -0.11493214359829338719e+5, + -0.15741711349313252867e+5, + 0.24937235316854032135e+5, + 0.12138749731899410108e+5, + -0.36480420849013709812e+5, + 0.45416560396665126973e+4, + 0.32568945064391213236e+5, + -0.17478609902006483026e+5, + -0.18875686202948807477e+5, + 0.18202207585176449356e+5, + 0.75479120938601263333e+4, + -0.10176309596930030239e+5, + -0.62961001653882922255e+4, + 0.28268148297428642763e+4, + 0.15185559873892629184e+5, + -0.75027615961042965864e+4, + -0.21916045946724625537e+5, + 0.23501800772401089489e+5, + 0.13138190821302387121e+5, + -0.34780556982789603353e+5, + 0.68587830565676276819e+4, + 0.30416836410271651403e+5, + -0.23339720303261387016e+5, + -0.14868270415231547304e+5, + 0.2812279165109555106e+5, + -0.22575748169997468722e+4, + -0.20948897453327626863e+5, + 0.11768134352403973026e+5, + 0.84364578007222917222e+4, + -0.92713522537528879184e+4, + -0.24481444056996192558e+4, + 0.25945957514379228996e+4, + 0.65627262344278897217e+4, + -0.34235279968434665534e+4, + -0.11408746833878079997e+5, + 0.12310920957677777551e+5, + 0.81630418850216628925e+4, + -0.21452232947819695255e+5, + 0.40460186803171918655e+4, + 0.23143230978477342433e+5, + -0.2066299871375805742e+5, + -0.11989925652934109166e+5, + 0.31461759099568618694e+5, + -0.94171159431275591487e+4, + -0.26476770038293710968e+5, + 0.28308124897192810749e+5, + 0.71437416832524450001e+4, + -0.33268222485130223504e+5, + 0.15594246364241438641e+5, + 0.22470640808554562682e+5, + -0.30963315210065062274e+5, + -0.90655931796277513968e+3, + 0.31379019529448421963e+5, + -0.21273899423676935839e+5, + -0.15675853598147556113e+5, + 0.31788524377915553487e+5, + -0.72163429274937816444e+4, + -0.25654183475060472119e+5, + 0.24835789374084615702e+5, + 0.77460372688210136403e+4, + -0.29842867198909036233e+5, + 0.13352036595896706785e+5, + 0.20289860883945737442e+5, + -0.28010583212485984404e+5, + 0.9043807818945573672e+4, + 0.2093522121277385304e+5, + -0.3352619920186616946e+5, + 0.14850078991718432917e+4, + 0.3142599772441998357e+5, + -0.23069563599657893064e+5, + -0.17717855522960126109e+5, + 0.34687664832747504988e+5, + -0.58964094690927277043e+4, + -0.32413460564503850037e+5, + 0.26707322697066654655e+5, + 0.14026477656902008675e+5, + -0.35972750751648076402e+5, + 0.71643045180237322711e+4, + 0.30605912448870709341e+5, + -0.25608038518926772667e+5, + -0.17484555063676809368e+5, + 0.35861813637030405516e+5, + -0.3811068195029151866e+4, + -0.35533313865423835523e+5, + 0.23748270475214754697e+5, + 0.21389817977762460941e+5, + -0.36080599758202253724e+5, + -0.34496376548976204504e+4, + 0.37556541661050665425e+5, + -0.16105372332901259142e+5, + -0.32037610667918550462e+5, + 0.32845638436944274872e+5, + 0.15381374010879289926e+5, + -0.42728883346900642209e+5, + 0.53911673332723194108e+4, + 0.39321601478103140835e+5, + -0.24405897265684958256e+5, + -0.29416305419977619749e+5, + 0.3686847870751436858e+5, + 0.13292824686505884529e+5, + -0.44500256574331171578e+5, + 0.53405828256076210891e+4, + 0.41227759395821471117e+5, + -0.22663513183767634473e+5, + -0.32126810105013992143e+5, + 0.32027062386391156906e+5, + 0.21062976772311925743e+5, + -0.39532236252301328932e+5, + -0.10473407460510068631e+5, + 0.43664116726882886724e+5, + -0.37391951698189254785e+4, + -0.44116855394226673525e+5, + 0.155960419706738885e+5, + 0.40021007179207481386e+5, + -0.26776297717867761094e+5, + -0.35908293370096384024e+5, + 0.36700124942641523376e+5, + 0.26658758287498087157e+5, + -0.4468902032847393275e+5, + -0.16353727006603232439e+5, + 0.45506821147376052977e+5, + 0.83199660783136896498e+4, + -0.46514674052865972044e+5, + -0.45606909383535357847e+4, + 0.48237735828505399695e+5, + -0.13885524585919438323e+4, + -0.50340234199740283657e+5, + 0.5564746927659611174e+4, + 0.50180198325168516021e+5, + -0.91547352569343875075e+4, + -0.52167888269374670926e+5, + 0.11575637410383764291e+5, + 0.51447831126960874826e+5, + -0.13315978414675821114e+5, + -0.50412819509021748672e+5, + 0.85054227620723049768e+4, + 0.51375325982486407156e+5, + -0.33609807355994034879e+4, + -0.56392359029294158972e+5, + -0.11010480722428901572e+4, + 0.56978326081479259301e+5, + 0.63528174884360241776e+4, + -0.55221502794818399707e+5, + -0.17729073123217756802e+5, + 0.51394426698219074751e+5, + 0.29579325955194424751e+5, + -0.46022950281727156835e+5, + -0.42885918361189062125e+5, + 0.34339841822941452847e+5, + 0.54539864397932746215e+5, + -0.19918863968920944899e+5, + -0.61949666527545457939e+5, + -0.13200959481812715239e+4, + 0.58782629447814841114e+5, + 0.2781796720244629978e+5, + -0.48894379472352869925e+5, + -0.5374306652545734687e+5, + 0.2795607589903486587e+5, + 0.65293551537528561312e+5, + 0.51510762583599180289e+4, + -0.608688517287720897e+5, + -0.44850897932861946174e+5, + 0.36535874362656068115e+5, + 0.69268824702994592371e+5, + 0.51989350062197863735e+4, + -0.65153870159043442982e+5, + -0.52897764358834559971e+5, + 0.25848942022535335127e+5, + 0.74626714770648686681e+5, + 0.33125097323298170522e+5, + -0.49571545471578283468e+5, + -0.77029816479061890277e+5, + -0.17613615160960591311e+5, + 0.59759312846198299667e+5, + 0.76666852518598345341e+5, + 0.16458106349696201505e+5, + -0.65359044204335164977e+5, + -0.83206734348291007336e+5, + -0.26921694454154916457e+5, + 0.51295444171907372947e+5, + 0.93539382521858089603e+5, + 0.56944322008826980891e+5, + -0.23249083563544088975e+5, + -0.84974739847717413795e+5, + -0.97348745283071228187e+5, + -0.43968685055268782889e+5, + 0.36433594179493018601e+5, + 0.94430155405846104259e+5, + 0.11310061009241349529e+6, + 0.77715248613551273593e+5, + 0.96171255135703540873e+4, + -0.59489659231408295454e+5, + -0.11790878769197579823e+6, + -0.14715750801541592227e+6, + -0.14876659554857067997e+6, + -0.13437796302052092506e+6, + -0.10718524225637757627e+6, + -0.78816342768376794993e+5, + -0.54675753731975542905e+5, + -0.34699869566670582572e+5, + -0.20701272927399444598e+5, + -0.12163688402523674085e+5, + -0.66856491453144753905e+4, + -0.26915604136998149443e+4, + -0.21985413143833729919e+4, + -0.81087949780835992897e+3, + 0.50416631008836390038e+3, + -0.13464134686326349311e+4, + 0.68309521560605139712e+3, + 0.31984759372149869705e+3, + -0.13818521524887698888e+4, + 0.16112971506604283149e+4, + -0.80286520657225617015e+3, + -0.62582115970312179343e+3, + 0.17757620603624186515e+4, + -0.18698570415402011804e+4, + 0.77817024654252475102e+3, + 0.86682860612554918589e+3, + -0.2041302934196775368e+4, + 0.19874956198001918892e+4, + -0.69922287832637118754e+3, + -0.10476241827941657903e+4, + 0.21807246032436878522e+4, + -0.19927839592165366867e+4, + 0.59349228880931275398e+3, + 0.11656442396564139017e+4, + -0.22116967809893026242e+4, + 0.19188661532313815314e+4, + -0.47849917331291902656e+3, + -0.12229270556842463975e+4, + 0.21618497165882372428e+4, + -0.1792454915229807284e+4, + 0.3699315613570139476e+3, + 0.12316688043300903246e+4, + -0.20552072775426963744e+4, + 0.16402668805648550006e+4, + -0.27370048941082092142e+3, + -0.12027297203109255861e+4, + 0.19175707138039754227e+4, + -0.14800369695750512165e+4, + 0.19501534547308787637e+3, + 0.11510046384412323732e+4, + -0.17676463634710926272e+4, + 0.13277157284410620832e+4, + -0.13279902318781475401e+3, + -0.10873427173129932726e+4, + 0.16229832749473405329e+4, + -0.11918884671149126007e+4, + 0.86793873901947392824e+2, + 0.10235580877291473598e+4, + -0.1494611462269713229e+4, + 0.10799065714011608179e+4, + -0.5335816239094607738e+2, + -0.9673607568024901866e+3, + 0.1392141500615385894e+4, + -0.994361583699985772e+3, + 0.30177635203426678601e+2, + 0.92633279473697700723e+3, + -0.13207030610581264227e+4, + 0.93724561900662945391e+3, + -0.13382120851211702472e+2, + -0.90515928987886582036e+3, + 0.12842753985418992215e+4, + -0.90794431215988629447e+3, + 0.95608916687120392908e+3, + -0.37101471969239463533e+3, + -0.12716311375920552109e+4, + 0.22892816141377256827e+4, + -0.18109361751104411269e+4, + 0.36761273360028866364e+3, + 0.14322099197748561892e+4, + -0.22469757644712581168e+4, + 0.18285837456807773833e+4, + -0.16741060870945045735e+3, + -0.14776782219531892224e+4, + 0.23527095845796434332e+4, + -0.16597870807334638812e+4, + 0.66857471046540780435e+2, + 0.17022007985557081611e+4, + -0.22985346279788077481e+4, + 0.15947104201595582254e+4, + 0.23390066057836830282e+3, + -0.17996025056360156213e+4, + 0.23700670052160025989e+4, + -0.13254575497890743918e+4, + -0.43584253828201781289e+3, + 0.20561734931992095881e+4, + -0.22529924849354874823e+4, + 0.1140508087397242889e+4, + 0.83254130024860216963e+3, + -0.21568878228709932046e+4, + 0.222615519402444761e+4, + -0.73411699280850564264e+3, + -0.11160843464146682891e+4, + 0.23766127199676752753e+4, + -0.19711013742007100973e+4, + 0.4002731332343286681e+3, + 0.15661858637165921664e+4, + -0.23890376343105854176e+4, + 0.17651141482863342844e+4, + 0.15457765318472755212e+3, + -0.18579758038133977607e+4, + 0.24577817495516396775e+4, + -0.12949895720676861401e+4, + -0.61813590940237315863e+3, + 0.22502519555837784537e+4, + -0.22500183627353358133e+4, + 0.85101831646361779349e+3, + 0.12571179067767182005e+4, + -0.23975740398794418979e+4, + 0.202976701199410968e+4, + -0.14531755656337466576e+3, + -0.17266459051956580879e+4, + 0.25410758851909190525e+4, + -0.1478348006230443616e+4, + -0.49437241071104841694e+3, + 0.22565315663504629811e+4, + -0.23293975056077315458e+4, + 0.88986012532734105207e+3, + 0.13023476878406702326e+4, + -0.24766073651348901876e+4, + 0.19980447587997105074e+4, + -0.40056573665532781092e+2, + -0.19859226885221232806e+4, + 0.23965407409285858193e+4, + -0.16546149702755519684e+4, + -0.1536710730091559526e+4, + 0.11366922465648219713e+4, + -0.45420438879760758937e+4, + -0.33939264007613573995e+4, + -0.42796011065097545725e+4, + -0.11376607347859773654e+5, + -0.10290727730212045572e+5, + -0.14201931177164500696e+5, + -0.18975569669808868639e+5, + -0.13877740851339620349e+5, + -0.13616243932367420712e+5, + -0.83586085281259347539e+4, + 0.3924782713052910367e+4, + 0.6931232673084504313e+4, + 0.11927042420480733199e+5, + 0.13153431853030384445e+5, + 0.14698948922098970797e+4, + -0.42269358169362740227e+4, + -0.89111872022124989599e+4, + -0.12368071397309651729e+5, + -0.73737252045757054475e+3, + 0.70950049993061038549e+4, + 0.77132197814908577129e+4, + 0.83510276946279191179e+4, + -0.34519072528338851953e+4, + -0.1120260135036882275e+5, + -0.43105154466817439243e+4, + 0.32123018017330662133e+3, + 0.75223897372975616236e+4, + 0.94439216513504725299e+4, + -0.41938576732804267522e+4, + -0.85743726379917043232e+4, + -0.31423102270647759724e+4, + 0.10173714826821183124e+4, + 0.91747019366100539628e+4, + 0.46340291299984746729e+4, + -0.87329649608139861812e+4, + -0.55433052687182125737e+4, + 0.16029120724397130289e+4, + 0.48680865479898811827e+4, + 0.64751478493581244038e+4, + -0.48313945268456091071e+4, + -0.92955821146728612803e+4, + 0.35281661904997631609e+4, + 0.6460555805533426792e+4, + 0.11608077620936271614e+4, + -0.27735793522652406864e+4, + -0.70908744431112390885e+4, + 0.19287728777168758825e+4, + 0.96383337691693905072e+4, + -0.24335493589356724442e+4, + -0.72491541030107073311e+4, + 0.57662869671116129666e+3, + 0.3408455543369838324e+4, + 0.41172111939473097664e+4, + -0.23487732924977813127e+4, + -0.79731092864742504389e+4, + 0.41273766690001784809e+4, + 0.77864192378159259533e+4, + -0.50036833010470427325e+4, + -0.47842457022250109731e+4, + 0.24287714909488558988e+4, + 0.31448004040389537295e+4, + 0.17680405482055916764e+4, + -0.49935276804549648659e+4, + -0.35975521092947674333e+4, + 0.80954596838453971941e+4, + 0.16841537855774295167e+4, + -0.8688773441403032848e+4, + 0.12397240739429601035e+4, + 0.5972877420504640213e+4, + -0.15663435179491611962e+4, + -0.29344029299790431651e+4, + -0.10729191707340373796e+4, + 0.28989973199427486179e+4, + 0.35499586651882186743e+4, + -0.58123312056355825916e+4, + -0.27909604982371329243e+4, + 0.84216562524209839466e+4, + -0.86954899944978205895e+3, + -0.78256015718077442216e+4, + 0.41785640428678889293e+4, + 0.44955941480278825111e+4, + -0.44361254587504108713e+4, + -0.15809387861524990058e+4, + 0.2229743983517430479e+4, + 0.15562524447756900372e+4, + -0.62434146271168992826e+3, + -0.37120425036472161082e+4, + 0.1949871724116642099e+4, + 0.49949047588885005098e+4, + -0.54486184566506244664e+4, + -0.30647381650787465333e+4, + 0.80622564736170406832e+4, + -0.14443338661404723098e+4, + -0.73116593719241282088e+4, + 0.55766367267822124631e+4, + 0.35114366064077562442e+4, + -0.67196356246951527282e+4, + 0.68306116276408249632e+3, + 0.47844430374816802214e+4, + -0.26828373207446925335e+4, + -0.19841396830600369867e+4, + 0.20976917033900476781e+4, + 0.70929541270542154052e+3, + -0.74337667565967433347e+3, + -0.14589252941614317933e+4, + 0.79622014543800298725e+3, + 0.26180614002148154214e+4, + -0.2781691645399223944e+4, + -0.2041129958934117667e+4, + 0.51304713081131676518e+4, + -0.96962000017965999632e+3, + -0.54962388625997218696e+4, + 0.49599178775674590725e+4, + 0.27128712352985849066e+4, + -0.73229951026628423278e+4, + 0.21915500020996305466e+4, + 0.61925142240155510081e+4, + -0.65777290502678079065e+4, + -0.17781813454617592924e+4, + 0.79044451061247500547e+4, + -0.36988864379850415389e+4, + -0.53131107868412273092e+4, + 0.73557046404508546402e+4, + 0.12526548734101274363e+3, + -0.73091567300231808986e+4, + 0.497119495437040041e+4, + 0.36722156771955815202e+4, + -0.74199383633172237751e+4, + 0.16170718321645119886e+4, + 0.61091920617995483553e+4, + -0.5882926676993509318e+4, + -0.18303824980870599575e+4, + 0.7073160776361221906e+4, + -0.32176788913918280741e+4, + -0.47006588196878819872e+4, + 0.65460839574757474111e+4, + -0.18206344217074124572e+4, + -0.51854952927731701493e+4, + 0.75465792449255395695e+4, + 0.14070794477255964239e+3, + -0.75270693942358711865e+4, + 0.52219156928188795064e+4, + 0.42489818504477761962e+4, + -0.79398220013686659513e+4, + 0.1176990112834653246e+4, + 0.74408376809737610529e+4, + -0.58324958384604533421e+4, + -0.35851443469375994937e+4, + 0.83578996778169293975e+4, + -0.14223162695466201058e+4, + -0.73798123288824272095e+4, + 0.6130016930807184508e+4, + 0.39553839206937032031e+4, + -0.83602188384370510903e+4, + 0.1084341202329291491e+4, + 0.80118898233242607603e+4, + -0.54698554490549568072e+4, + -0.48523442377406991e+4, + 0.83917340079642817727e+4, + 0.53384203297947146893e+3, + -0.85901808462261324166e+4, + 0.41521506418771887184e+4, + 0.67270389146228790196e+4, + -0.7429819681805766777e+4, + -0.2929028792255810913e+4, + 0.91253225113483131281e+4, + -0.12268348491408717109e+4, + -0.84806777039003991376e+4, + 0.53136102602313358148e+4, + 0.63694568892915540346e+4, + -0.8002419120768187895e+4, + -0.28355841532263802947e+4, + 0.94624291637728856585e+4, + -0.82651133844049218169e+3, + -0.907800272315607981e+4, + 0.45293225553600314015e+4, + 0.7653501964073144336e+4, + -0.7220467651760467561e+4, + -0.50159639629514558692e+4, + 0.92069420096276480763e+4, + 0.21820915648714285453e+4, + -0.98611118194872251479e+4, + 0.10113640410689308737e+4, + 0.98529847161467259866e+4, + -0.36824452916154796185e+4, + -0.88105849299555993639e+4, + 0.62029689190119397608e+4, + 0.7540517544842749885e+4, + -0.79157792409397707161e+4, + -0.57064425378763025947e+4, + 0.93904635126541252248e+4, + 0.40769927820681036792e+4, + -0.10120641097328700198e+5, + -0.22378389795005696215e+4, + 0.10772041328828780024e+5, + 0.86499122566505457144e+3, + -0.10886699391899544935e+5, + 0.541495501612132216e+3, + 0.11139467214708329266e+5, + -0.13743149497552317371e+4, + -0.11055467182951240829e+5, + 0.21782163624211029855e+4, + 0.11274222891714340221e+5, + -0.23685883450878818621e+4, + -0.11275220894652618881e+5, + 0.24921683029036598782e+4, + 0.11642599377110374917e+5, + -0.19533568359960729595e+4, + -0.11791720255835569333e+5, + 0.12812940320112279551e+4, + 0.12228808067296828085e+5, + 0.1304922034776081432e+3, + -0.12276042891140197753e+5, + -0.17431688915583179096e+4, + 0.12329001702121158814e+5, + 0.41101285089335287921e+4, + -0.11591640456331238966e+5, + -0.6572841850361059187e+4, + 0.10355277330614546372e+5, + 0.94723054710995129426e+4, + -0.77825208187399548478e+4, + -0.11836333156901733673e+5, + 0.42601730613677955262e+4, + 0.13615670166302339567e+5, + 0.71647767408526533472e+3, + -0.13470144813662906017e+5, + -0.61029488432773960085e+4, + 0.11202729553819483044e+5, + 0.11410641572315646044e+5, + -0.58521348898103851752e+4, + -0.14457396025418684076e+5, + -0.15489820731811139467e+4, + 0.13983478056957756053e+5, + 0.97628475114968296111e+4, + -0.82585930340686027193e+4, + -0.15070272789552347604e+5, + -0.14030548528919839555e+4, + 0.14505691601466058273e+5, + 0.11892138515485894459e+5, + -0.58690494650585042109e+4, + -0.16591938853345487587e+5, + -0.72582373463576113863e+4, + 0.10969822128611267544e+5, + 0.16998853969978445093e+5, + 0.4145692006725259489e+4, + -0.13433806454642601238e+5, + -0.17131338256935676327e+5, + -0.33201919992458151683e+4, + 0.14153479004903647365e+5, + 0.18623552949754670408e+5, + 0.62173186565348323711e+4, + -0.11876189692225992985e+5, + -0.20373924770429599448e+5, + -0.1272175638522229201e+5, + 0.48348152481630559123e+4, + 0.19401866992965591635e+5, + 0.21263092308084495016e+5, + 0.97625969465391426638e+4, + -0.77338662148548528421e+4, + -0.2145059872682016794e+5, + -0.24860469027090668533e+5, + -0.17202592514410633157e+5, + -0.24602626967227870409e+4, + 0.13564524633590572193e+5, + 0.26049289150730266556e+5, + 0.32607776131937429454e+5, + 0.33286476750654575881e+5, + 0.2967767361731089477e+5, + 0.23855266755063235905e+5, + 0.17600000629922538792e+5, + 0.12055043514257156858e+5, + 0.77261851943537112675e+4, + 0.46600030005294438524e+4, + 0.26565335388615176271e+4, + 0.14362290604894146782e+4, + 0.7383929796821414584e+3, + 0.36179603617373243196e+3, + 0.16925505549075319323e+3, + 0.7571441919723430658e+2, + 0.32428468207838903936e+2, + 0.13312218976079659427e+2, + 0.52425658721108199245e+1, + 0.19821616473717063034e+1, 0.71997259217186937441, 0.25136746085818584273, - 0.84394221493349880214e-01, - 0.27257466787145225029e-01, - 0.84713700759025487713e-02, - 0.25340428177399788347e-02, - 0.72968577040068377613e-03, - 0.20228491989842200638e-03, - 0.53990445757808367246e-04, - 0.13873731599654503841e-04, - 0.34321621417141247236e-05, - 0.81732384504757285166e-06, - 0.18732903311821788379e-06, - 0.41315440025942135325e-07, - 0.87661115201652485437e-08, - 0.17887877364455834488e-08, - 0.35092661013625587041e-09, + 0.84394221493349880214e-1, + 0.27257466787145225029e-1, + 0.84713700759025487713e-2, + 0.25340428177399788347e-2, + 0.72968577040068377613e-3, + 0.20228491989842200638e-3, + 0.53990445757808367246e-4, + 0.13873731599654503841e-4, + 0.34321621417141247236e-5, + 0.81732384504757285166e-6, + 0.18732903311821788379e-6, + 0.41315440025942135325e-7, + 0.87661115201652485437e-8, + 0.17887877364455834488e-8, + 0.35092661013625587041e-9, 0.66161594643733598419e-10, 0.11982062763938392685e-10, 0.20834032743503809564e-11, @@ -46274,15 +46276,15 @@ function ESERK4ConstantCache(zprev) 0.34024440183946799566e-36, 0.13130426251485154863e-37, 0.45226389160035131993e-39, - 0.13733435793187908330e-40, + 0.1373343579318790833e-40, 0.36194622600098632253e-42, 0.81109792573263635093e-44, 0.15027026086025338929e-45, 0.22098056283279005105e-47, 0.24183893120880619259e-49, 0.17509531235990047362e-51, - 0.62906701403698332886e-54 + 0.62906701403698332886e-54, ] - ESERK4ConstantCache{eltype(Bᵢ), typeof(zprev)}(ms, Cᵤ, Cₑ, zprev, Bᵢ, 1, 0, 0) + return ESERK4ConstantCache{eltype(Bᵢ), typeof(zprev)}(ms, Cᵤ, Cₑ, zprev, Bᵢ, 1, 0, 0) end diff --git a/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_eserk5.jl b/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_eserk5.jl index 02de7c8dd4..b55f69babd 100644 --- a/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_eserk5.jl +++ b/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_eserk5.jl @@ -3,12 +3,13 @@ function ESERK5ConstantCache(zprev) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 30, 35, 40, 45, 50, 60, 70, 80, 90, 100, 150, 200, 250, 300, 350, 400, 450, 500, 600, 700, 800, 900, 1000, 1200, 1400, - 1600, 1800, 2000] + 1600, 1800, 2000, + ] Cᵤ = [1, -64, 486, -1024, 625] Cₑ = [1, -32, 162, -256, 125] Bᵢ = [ - 0.51000000000000000000, - 0.49000000000000000000, + 0.51, + 0.49, 0.15175595325054784514243973703433162892622352081811541271, 0.4776587289992695398100803506208911614317019722425127830533, 0.3705853177501826150474799123447772096420745069393718042367, @@ -886,7 +887,7 @@ function ESERK5ConstantCache(zprev) -0.01207371575512900842, 0.00505952906935149774, -0.01246643748119653436, - 0.00546706434325942240, + 0.0054670643432594224, -0.01287676013732901199, 0.00587852922967377171, -0.01327483458369148675, @@ -894,7 +895,7 @@ function ESERK5ConstantCache(zprev) -0.01362386180428826199, 0.00657297629435848671, -0.01387899001788521665, - 0.00676592611035669190, + 0.0067659261103566919, -0.01398600047880395325, 0.00678010580840181058, -0.01387975550942632287, @@ -903,7 +904,7 @@ function ESERK5ConstantCache(zprev) 0.00597334401353584975, -0.01270112440295574283, 0.00496629865386127595, - -0.01142591486675509360, + -0.0114259148667550936, 0.00340331839083577933, -0.00952646299502411115, 0.00114279993524864861, @@ -921,7 +922,7 @@ function ESERK5ConstantCache(zprev) -0.03877009056170410695, 0.03823246648181807122, -0.05261539489752908166, - 0.05361115619148085210, + 0.0536111561914808521, -0.06964185631800622056, -0.72702340658979747179, -0.11901788557702494553, @@ -929,12 +930,12 @@ function ESERK5ConstantCache(zprev) -0.08494126330907547651, 0.07680659957975853602, -0.05725479542641895292, - 0.05166648969129684910, + 0.0516664896912968491, -0.03496258376741386703, 0.03147542870447711527, -0.01721102568611536376, 0.01544375563467406329, - -0.00326981200558040200, + -0.003269812005580402, 0.00289653740890911298, 0.00748463573807822864, -0.00674189129058601171, @@ -946,9 +947,9 @@ function ESERK5ConstantCache(zprev) -0.02274285748261718754, 0.02812841568535804498, -0.02495360526982505489, - 0.02947908647541628430, + 0.0294790864754162843, -0.02605957928046208349, - 0.02983300128191120060, + 0.0298330012819112006, -0.02626977220770847221, 0.02938117640677757533, -0.02575841177026127332, @@ -966,7 +967,7 @@ function ESERK5ConstantCache(zprev) -0.01406407203908390316, 0.01402682760879008124, -0.01137692579242408249, - 0.01100488357798883390, + 0.0110048835779888339, -0.00860174810816324853, 0.00790895228496566079, -0.00576588095846940814, @@ -981,11 +982,11 @@ function ESERK5ConstantCache(zprev) 0.00288269837782265028, 0.03457538605806446258, -0.00070718154447934939, - 0.03789781489998973740, + 0.0378978148999897374, -0.00435209503936459172, 0.04124221012766234734, -0.00798964437355055568, - 0.04453807684650341880, + 0.0445380768465034188, -0.01154029487439305578, 0.04769620758153732959, -0.01490409560449625255, @@ -1009,9 +1010,9 @@ function ESERK5ConstantCache(zprev) -0.00399707758156321938, 0.02951005227143552526, 0.00822406083905695244, - 0.01488516616701007940, - 0.02476920719336211940, - -0.00450354747991990600, + 0.0148851661670100794, + 0.0247692071933621194, + -0.004503547479919906, 0.04654995474726647542, -0.02964414876330540363, 0.07463688519997778437, @@ -1025,7 +1026,7 @@ function ESERK5ConstantCache(zprev) 0.27853838615601622664, 0.96994481533499166126, 0.23070909730061650578, - 0.08149241132275680810, + 0.0814924113227568081, -0.06774581401434494332, 0.05331239626178230218, -0.04303160439824205152, @@ -1034,7 +1035,7 @@ function ESERK5ConstantCache(zprev) 0.01569727107231399729, -0.01042939853782810442, 0.00389027240941400201, - -0.00037999722004080890, + -0.0003799972200408089, -0.00449979461058223722, 0.00663797160724996765, -0.01020770787409374172, @@ -1042,9 +1043,9 @@ function ESERK5ConstantCache(zprev) -0.01383630083283237527, 0.01412242189469396954, -0.01587739864326751307, - 0.01557698652863863560, - -0.01672964496852928640, - 0.01601204779640731310, + 0.0155769865286386356, + -0.0167296449685292864, + 0.0160120477964073131, -0.01671365667553798007, 0.01571415348735234752, -0.01608488491198662926, @@ -1054,7 +1055,7 @@ function ESERK5ConstantCache(zprev) -0.01374865411880199159, 0.01245441605309204579, -0.01231615511703713223, - 0.01104155844772387700, + 0.011041558447723877, -0.01083511663632664296, 0.00961453287377285297, -0.00936841522024787002, @@ -1071,27 +1072,27 @@ function ESERK5ConstantCache(zprev) 0.00255256280417961567, -0.00223480951053625686, 0.00166279521983652627, - -0.00131726446603322380, + -0.0013172644660332238, 0.00081947357475553855, -0.00043508911665919581, 0.01552929451626864146, -0.05336338722930451112, 0.02981016188833992761, - -0.05162318820478238590, + -0.0516231882047823859, 0.02768344576255073186, -0.04899663879425891072, 0.02466668408448949648, -0.04547723361898219074, 0.02075939273058108672, -0.04107145081706938677, - 0.01597605983865807780, + 0.0159760598386580778, -0.03580302477116303894, 0.01035102806803796065, -0.02971847893838695451, 0.00394472370978003316, -0.02289410187313737147, -0.00314856451713282177, - -0.01544459018983806650, + -0.0154445901898380665, -0.01079111104619678678, -0.00753362799154610324, -0.01879008878219779952, @@ -1099,7 +1100,7 @@ function ESERK5ConstantCache(zprev) -0.02688346418291742007, 0.00869331191684856799, -0.03472303898783447168, - 0.01630780841524732960, + 0.0163078084152473296, -0.04185415321759954066, 0.02294005713789529569, -0.04769148119595777169, @@ -1112,8 +1113,8 @@ function ESERK5ConstantCache(zprev) 0.02355756774465384701, -0.04005480723501154972, 0.01124749799956109748, - -0.02373024792409280520, - -0.00949879501844577180, + -0.0237302479240928052, + -0.0094987950184457718, 0.00218398141555323829, -0.04110673070859165168, 0.04036442295163183286, @@ -1135,7 +1136,7 @@ function ESERK5ConstantCache(zprev) 0.04895325066279562071, -0.01957217450123023908, 0.00784459362269569055, - 0.01472725501829331290, + 0.0147272550182933129, -0.02105815407424898797, 0.03821882915708051109, -0.04042175942749363926, @@ -1149,10 +1150,10 @@ function ESERK5ConstantCache(zprev) -0.06042633467192215502, 0.06395616875373164034, -0.05763139740953419909, - 0.06005273862665716500, + 0.060052738626657165, -0.05346836372608086002, 0.05507431751415364091, - -0.04848772935921919630, + -0.0484877293592191963, 0.04950047954615872242, -0.04310456247092351451, 0.04368789597652989604, @@ -1175,7 +1176,7 @@ function ESERK5ConstantCache(zprev) -0.00324095144175490235, 0.00179027820335208037, -0.00998176481558320401, - 0.07004910008566912760, + 0.0700491000856691276, -0.01615596565298059797, 0.06528753785208610272, -0.01112862737122684298, @@ -1184,7 +1185,7 @@ function ESERK5ConstantCache(zprev) 0.05192039075180831381, 0.00284994391272265415, 0.04321771933647901992, - 0.01186990602904763360, + 0.0118699060290476336, 0.03315738354834902452, 0.02222763539109498532, 0.02178728014789379705, @@ -1199,12 +1200,12 @@ function ESERK5ConstantCache(zprev) 0.08848025875338605406, -0.04757871513674043207, 0.10200561061851648459, - -0.06085193970034134120, + -0.0608519397003413412, 0.11400814109471586744, -0.07206619857091911552, 0.12333816282194977332, -0.07991859020768683763, - 0.12852409250778265570, + 0.1285240925077826557, -0.08275174368034798889, 0.12770442677674642695, -0.07847980533410439663, @@ -1229,7 +1230,7 @@ function ESERK5ConstantCache(zprev) 0.01580499621916471586, -0.01144760591712027167, 0.01558269875924717281, - -0.01111250172140038940, + -0.0111125017214003894, 0.01513238495107778123, -0.01054460332755289588, 0.01444309932674875917, @@ -1243,8 +1244,8 @@ function ESERK5ConstantCache(zprev) 0.00896558376199439559, -0.00366971695827939893, 0.00683684897838245185, - -0.00138326498771233070, - 0.00439325007084866680, + -0.0013832649877123307, + 0.0043932500708486668, 0.00121122874188986417, 0.00165345215733650377, 0.00408366303559632923, @@ -1259,7 +1260,7 @@ function ESERK5ConstantCache(zprev) -0.01347824818066666215, 0.01881900229829784957, -0.01538855712520405955, - 0.02016819755461847150, + 0.0201681975546184715, -0.01603813104009708598, 0.01995229004835750997, -0.01477398011964489027, @@ -1280,17 +1281,17 @@ function ESERK5ConstantCache(zprev) -0.34537195956701954858, 0.26598910085814125859, -0.20625562104050748635, - 0.14939710693947058640, + 0.1493971069394705864, -0.10909411319805968621, 0.06950537004565966737, -0.04392368558630291298, 0.01739216863393270099, -0.00276832182828219437, - -0.01406102295873830690, - 0.02071363109127160110, + -0.0140610229587383069, + 0.0207136310912716011, -0.03049274235873340386, 0.03152490979851345354, - -0.03633144501519722930, + -0.0363314450151972293, 0.03357575011029523965, -0.03502032375385425583, 0.02988885974413912558, @@ -1320,14 +1321,14 @@ function ESERK5ConstantCache(zprev) -0.02090626000824665626, 0.01829427291825631852, -0.01661479817752003693, - 0.01373842443106997220, + 0.0137384244310699722, -0.01152570838728820234, 0.00851338498935017701, -0.00589834944126419423, 0.00288303256307973757, 0.03706762815338294353, -0.13232268952516326732, - 0.07908111910398271660, + 0.0790811191039827166, -0.13604076873058337793, 0.08182829526033189027, -0.13739629460592203691, @@ -1341,7 +1342,7 @@ function ESERK5ConstantCache(zprev) -0.11196891955397671181, 0.05023681637416833184, -0.09612482025475252434, - 0.03242571877104945960, + 0.0324257187710494596, -0.07595707340757139325, 0.01024506910281987142, -0.05141805056226591425, @@ -1354,7 +1355,7 @@ function ESERK5ConstantCache(zprev) -0.11636482170313142137, 0.08137315332606614993, -0.15247073188785426057, - 0.11683688666548140700, + 0.116836886665481407, -0.18612120972402373953, 0.14810821982175723099, -0.21353561017617853079, @@ -1371,7 +1372,7 @@ function ESERK5ConstantCache(zprev) -0.13176602111215210411, 0.18821751939414829713, -0.37182188441841318438, - 0.48016129360857134900, + 0.480161293608571349, -0.72269605095184941135, 0.89865789069106283282, -1.21765886561580138903, @@ -1379,31 +1380,31 @@ function ESERK5ConstantCache(zprev) -0.82714299222235865283, 0.66073717457451164314, -0.49920115918363411334, - 0.38329479015258888230, - -0.26699209406679702550, + 0.3832947901525888823, + -0.2669920940667970255, 0.18986487939902060851, -0.10827991520961283145, 0.06050660097121394326, -0.00520826907291782083, -0.02074451463651781971, - 0.05647187678426078550, + 0.0564718767842607855, -0.06658326051982915716, 0.08804861379689243872, -0.08702562136455353758, 0.09838888708667400951, -0.08990159581478025796, - 0.09438813335651045910, + 0.0943881333565104591, -0.08126514764652317813, 0.08134377429537625881, -0.06573422145058493982, - 0.06326450405844750990, + 0.0632645040584475099, -0.04677183808148174804, 0.04312553136018459909, -0.02691763940521117032, 0.02307841389062597129, -0.00797784320367831562, 0.00462282011622913627, - 0.00881963507931733670, + 0.0088196350793173367, -0.01125355918255364039, 0.02269916482142772182, -0.02396167612926488472, @@ -1448,7 +1449,7 @@ function ESERK5ConstantCache(zprev) 0.01954845402917694541, 0.03717373726664351119, 0.05804164019356757714, - -0.00435358317559762700, + -0.004353583175597627, 0.10130710062161024654, -0.04995711895703210809, 0.14775589534041025375, @@ -1485,28 +1486,28 @@ function ESERK5ConstantCache(zprev) 0.00879758601648085274, 0.00135250988137868683, -0.00802003919987646745, - 0.01357295671320827950, + 0.0135729567132082795, -0.01645295305268028307, 0.01883799741766243457, -0.01917330739622202448, 0.01946738527582608097, - -0.01818773102045551440, + -0.0181877310204555144, 0.01719002835079487534, -0.01497928092406673739, 0.01327180115816274826, -0.01062239613609019216, - 0.00861881354978876260, + 0.0086188135497887626, -0.00587555447910280675, 0.00386043615339759331, -0.00125556291519500528, -0.00058432583742357234, - 0.00290323803016417480, + 0.0029032380301641748, -0.00445411591407307832, 0.00640212360405201329, -0.00760367521267675799, 0.00914121748940977322, -0.00997138927575066253, - 0.01109092547743342760, + 0.0110909254774334276, -0.01155422027597101907, 0.01227001340142968785, -0.01238861028879211651, @@ -1514,8 +1515,8 @@ function ESERK5ConstantCache(zprev) -0.01253619017297744921, 0.01253812299202200498, -0.01207333600258605859, - 0.01177806464982560780, - -0.01108378701724867590, + 0.0117780646498256078, + -0.0110837870172486759, 0.01053430149429654232, -0.00965368096024160974, 0.00889291880484974033, @@ -1532,7 +1533,7 @@ function ESERK5ConstantCache(zprev) 0.00854366701471974757, 0.01169900784177251539, 0.01185861308956835669, - 0.00826431563170655810, + 0.0082643156317065581, 0.01528922552810627403, 0.00487552312028703781, 0.01849070535326601677, @@ -1565,11 +1566,11 @@ function ESERK5ConstantCache(zprev) 0.15455340755559737742, -0.13531813799933661846, 0.15459911872122725218, - -0.12554976252732219510, + -0.1255497625273221951, 0.13240033916483390231, -0.08800765620246746301, 0.07601171078538733472, - -0.00886225854539771270, + -0.0088622585453977127, -0.03051626813943424804, 0.13021714218188712442, -0.20818480350043536142, @@ -1587,12 +1588,12 @@ function ESERK5ConstantCache(zprev) 0.08202696921098251437, -0.14939896138854211194, 0.18045561210942365205, - -0.20992135680519644070, + -0.2099213568051964407, 0.21076072927148972735, -0.21524393456546592196, 0.19702267149432001192, -0.18611213621241445848, - 0.15703450968589521830, + 0.1570345096858952183, -0.13771081696677117678, 0.10368194474670434924, -0.08090392532771109591, @@ -1606,7 +1607,7 @@ function ESERK5ConstantCache(zprev) 0.11382937644008681022, -0.13306738282890528957, 0.14139799759486090802, - -0.15536127351444004030, + -0.1553612735144400403, 0.15924910459789504147, -0.16812114554534593469, 0.16784515355554516236, @@ -1619,14 +1620,14 @@ function ESERK5ConstantCache(zprev) -0.13939967533730598936, 0.12716076190898484288, -0.11728548839832635131, - 0.10336366948448301450, + 0.1033636694844830145, -0.09129336305527438467, 0.07619843602360935886, -0.06243416066907948869, 0.04665899753308404285, -0.03168579241846158911, 0.01570892404081728616, - -0.00788062830360144670, + -0.0078806283036014467, -0.12373533419306789738, 0.01702953888771774685, -0.15684692710737777044, @@ -1641,8 +1642,8 @@ function ESERK5ConstantCache(zprev) 0.16184161319619022601, -0.28908616967681888266, 0.17158827863632020172, - -0.29240374193862378460, - 0.16853912570017323680, + -0.2924037419386237846, + 0.1685391257001732368, -0.28145028561572560388, 0.14977768840941624306, -0.25339849617225362888, @@ -1665,7 +1666,7 @@ function ESERK5ConstantCache(zprev) -0.71792077287422317866, 0.62033132040903371518, -0.73183163962652064694, - 0.58254357856967897700, + 0.582543578569678977, -0.62782417946293456179, 0.39728206593152798343, -0.34205877453803362753, @@ -1682,7 +1683,7 @@ function ESERK5ConstantCache(zprev) -0.93047108737206218887, 0.62628126583998089405, -0.35701172104697992404, - 0.17316135164382245870, + 0.1731613516438224587, -0.00732919215686259409, -0.09037867382483064094, 0.18276136211462354342, @@ -1691,17 +1692,17 @@ function ESERK5ConstantCache(zprev) -0.26014455618892162736, 0.26861354577232826601, -0.24124721114721894843, - 0.22916068620749183160, + 0.2291606862074918316, -0.18758966123724415964, 0.16425360963945004333, - -0.11634974523975871730, + -0.1163497452397587173, 0.08837334002685265366, -0.03964299294921509731, - 0.01156655916043822750, + 0.0115665591604382275, 0.03428791287575121138, - -0.05949162424676426170, + -0.0594916242467642617, 0.10012510618911137084, - -0.12065347665671814770, + -0.1206534766567181477, 0.15472522722969000997, -0.16963315366962500308, 0.19653050625365278692, @@ -1713,7 +1714,7 @@ function ESERK5ConstantCache(zprev) 0.24449703668784661392, -0.23720045816080989609, 0.23733316458200365284, - -0.22577571919939026790, + -0.2257757191993902679, 0.22066819936680218128, -0.20555603004556366464, 0.19592321701528309097, @@ -1734,7 +1735,7 @@ function ESERK5ConstantCache(zprev) 0.23272540736885632962, -0.12548473565597237367, 0.27465071048384004371, - -0.16607720673827730540, + -0.1660772067382773054, 0.31197219123579994493, -0.20086049801282088167, 0.34220531340728777003, @@ -1747,7 +1748,7 @@ function ESERK5ConstantCache(zprev) -0.22714511694659381136, 0.33603991795013204991, -0.19133844201912553196, - 0.28887946770514283390, + 0.2888794677051428339, -0.13379813674830676185, 0.21929367023296578165, -0.05345190044821659242, @@ -1756,23 +1757,23 @@ function ESERK5ConstantCache(zprev) 0.01315816653870439598, 0.17160017060527305022, -0.11776812138083775361, - 0.30774478653137771200, + 0.307744786531377712, -0.25800744025621086264, 0.44745934954810107076, -0.39461830637661754473, 0.57465928120604226059, -0.50789885305005533223, - 0.66549438553515050110, + 0.6654943855351505011, -0.56925627762057684489, 0.68596560461038769141, - -0.53854466816872059720, + -0.5385446681687205972, 0.58895519457058143065, -0.36075610285008674616, 0.31054437977114512925, 0.03807271034957853545, -0.23453207161462180652, 0.75590275551533880893, - -1.15847401222081325400, + -1.158474012220813254, 1.92088012861285961641, -2.60726085495302806194, 3.69890202943744350605, @@ -2134,22 +2135,22 @@ function ESERK5ConstantCache(zprev) 0.05122652652822255043, -0.02361828111729003671, 0.00328461990902793183, - 0.01016697954863024500, + 0.010166979548630245, -0.01919783022391419181, 0.02379034964927153814, -0.02595566601290856881, 0.02538315354097932589, -0.02373678263884605039, 0.02050355650039226499, - -0.01707978561657483990, + -0.0170797856165748399, 0.01281981233108658337, - -0.00891314000363757630, + -0.0089131400036375763, 0.00463458987832051847, -0.00101301148927019193, -0.00271618395854253316, - 0.00565017062583661120, + 0.0056501706258366112, -0.00856301915538093712, - 0.01065227329185829130, + 0.0106522732918582913, -0.01267946280085774022, 0.01392378897851559959, -0.01511830910699629021, @@ -2164,18 +2165,18 @@ function ESERK5ConstantCache(zprev) 0.01219303326356336974, -0.01132590237483011367, 0.01023164259729165623, - -0.00933162341333112350, + -0.0093316234133311235, 0.00826943668385697779, -0.00740801788798979479, 0.00643586871938298024, - -0.00565789978033121380, + -0.0056578997803312138, 0.00480813151786172507, -0.00413417185534362477, 0.00341641495586699666, -0.00284608611143452117, 0.00225095858258427765, -0.00176691433433226485, - 0.00127019762701695640, + 0.0012701976270169564, -0.00084245433325484946, 0.00040953743305730694, -0.03828206317070226988, @@ -2190,12 +2191,12 @@ function ESERK5ConstantCache(zprev) 0.00167836815315975611, -0.01185027098132572509, -0.02186048242665663763, - 0.01318248778041110000, + 0.0131824877804111, -0.04808582865097689452, 0.04031541589106143325, -0.07574305797088287662, 0.06812735728276833602, - -0.10323870533529846960, + -0.1032387053352984696, 0.09484919097065595828, -0.12862784027395601782, 0.11836410438530202416, @@ -2209,7 +2210,7 @@ function ESERK5ConstantCache(zprev) 0.12972199841657219843, -0.13812315099983601963, 0.09980670073315330015, - -0.10034952847525563380, + -0.1003495284752556338, 0.05433993719289352542, -0.04760789495910075497, -0.00479750420769441046, @@ -2218,7 +2219,7 @@ function ESERK5ConstantCache(zprev) 0.08444445257165009155, -0.13686846252233897392, 0.14150912139360893871, - -0.18039602633869905590, + -0.1803960263386990559, 0.16421779906896361023, -0.17320466449297244882, 0.11608297079696286436, @@ -2232,7 +2233,7 @@ function ESERK5ConstantCache(zprev) -3.26188309685461330645, 2.07928975968822227216, -1.16323588948711997837, - 0.49895610510748455990, + 0.4989561051074845599, -0.00549458244117491303, -0.31880793608615071166, 0.54058479233600065239, @@ -2245,7 +2246,7 @@ function ESERK5ConstantCache(zprev) -0.40223818178329318052, 0.31138021985310959661, -0.20835431095459683304, - 0.12373060236356339670, + 0.1237306023635633967, -0.03344339661609748576, -0.03529943511231296155, 0.10644940390601009828, @@ -2255,12 +2256,12 @@ function ESERK5ConstantCache(zprev) 0.26615764155913473887, -0.27816551522092286541, 0.29235027715668393533, - -0.29027962839838389320, + -0.2902796283983838932, 0.29145844837699874663, -0.27905703438041512543, 0.27097480088277131616, -0.25188811720456250054, - 0.23801445810281138260, + 0.2380144581028113826, -0.21547943662228510875, 0.19877598559881132223, -0.17545068183462800282, @@ -2275,7 +2276,7 @@ function ESERK5ConstantCache(zprev) 0.03805043949390526231, -0.02847413789304003087, 0.02205747994084103492, - -0.01504839025944109190, + -0.0150483902594410919, 0.00999107977205408032, -0.00466556424439917676, 0.43115574262207345679, @@ -2287,13 +2288,13 @@ function ESERK5ConstantCache(zprev) 0.64258660349587171101, -0.34767629462069393753, 0.48564926814805903232, - -0.17194127999119637740, + -0.1719412799911963774, 0.29158077011155092428, 0.03803899702031000168, 0.06685356986172223681, - 0.27432832728477840600, + 0.274328327284778406, -0.17902813418357646502, - 0.52575907730151971720, + 0.5257590773015197172, -0.43315121461113353929, 0.77760964230182438861, -0.67894805481266362612, @@ -2313,7 +2314,7 @@ function ESERK5ConstantCache(zprev) -0.25150243808192834782, 0.19474909733943149281, 0.32206030907987059919, - -0.42750433440684609820, + -0.4275043344068460982, 0.97283657550849600426, -1.08107943555021779325, 1.59298956111724065998, @@ -2325,7 +2326,7 @@ function ESERK5ConstantCache(zprev) 0.82804932157319377506, 0.46916254835280080115, -1.84286338687297379657, - 4.27119440778852776930, + 4.2711944077885277693, -7.05005362347872832629, 11.20470290966020598944, 31.01684953697291291519, @@ -2334,7 +2335,7 @@ function ESERK5ConstantCache(zprev) 3.79775574415761285607, -1.58442233270164090086, -0.07296627537953742637, - 1.15303797167981070260, + 1.1530379716798107026, -1.90415548723565608569, 2.27444883765401639764, -2.47397534414523434521, @@ -2342,7 +2343,7 @@ function ESERK5ConstantCache(zprev) -2.32171918086456052777, 2.06305422680158523363, -1.81002515983951295375, - 1.46746182655722057220, + 1.4674618265572205722, -1.17280884899864523696, 0.82685341821591507028, -0.55188968973595409206, @@ -2356,7 +2357,7 @@ function ESERK5ConstantCache(zprev) 0.78641112070462126926, -0.83902068282470698701, 0.83076254624001188986, - -0.84056098763511732930, + -0.8405609876351173293, 0.79898456202095091694, -0.77842108467967519037, 0.71563930198500524948, @@ -2379,14 +2380,14 @@ function ESERK5ConstantCache(zprev) -0.01792173225381077026, 0.00770122838184682853, -0.97609414695659169059, - 1.38260449821184261410, + 1.3826044982118426141, -1.89258620839194846575, 1.28053959536395201013, -1.74368679042709073812, 1.08734200606295661196, -1.50271249038299870016, 0.80217044640531398603, - -1.17101771705191226580, + -1.1710177170519122658, 0.42884714212169894321, -0.75517447525414360676, -0.02301914008082621768, @@ -2412,31 +2413,31 @@ function ESERK5ConstantCache(zprev) -1.32563295740251585464, 0.23122509052116163586, -0.10846711002869069418, - -1.12782590726851750240, + -1.1278259072685175024, 1.36407901477064674722, -2.66426690766115603637, 2.90419154221962250162, -4.11995908830849000282, - 4.16909037712575436530, + 4.1690903771257543653, -5.05095065498341355692, 4.59461854567531080562, -4.75102175774805957076, 3.30745232877780237501, - -2.15112185137519285050, + -2.1511218513751928505, -0.98983525830738827711, 4.31172193316853658018, -10.16800120855391220687, 16.86396589962381042938, -26.86346895195370265697, -49.58243301680786885299, - -8.63695392482518364830, - 5.48691280855822594020, + -8.6369539248251836483, + 5.4869128085582259402, -3.02455835914614867832, - 1.25634980878071012000, + 1.25634980878071012, 0.07837540405723548986, -0.94012606647637664281, 1.54946203739771926067, - -1.84347241737896272440, + -1.8434724173789627244, 2.01109757726292714963, -1.97350198817999333833, 1.89459806592530966007, @@ -2448,14 +2449,14 @@ function ESERK5ConstantCache(zprev) 0.49087070916356023709, -0.24509469126392452454, 0.07168826187072827039, - 0.12365866114292595190, + 0.1236586611429259519, -0.24625532828823215592, 0.38676685324341231187, - -0.45855271246654411010, + -0.4585527124665441101, 0.54761220742158667196, - -0.57450062283717340250, + -0.5745006228371734025, 0.61982856423978971439, - -0.61075169308580479210, + -0.6107516930858047921, 0.62199443265346365806, -0.58691210822952299964, 0.57401405170526154098, @@ -2489,14 +2490,14 @@ function ESERK5ConstantCache(zprev) 0.74766951117146107642, -0.25582180907118073909, 0.49589832632273883606, - 0.01874745339050226320, + 0.0187474533905022632, 0.19785149749863767399, 0.33404816624213451437, -0.13403000846328722018, - 0.67483848451619365960, + 0.6748384845161936596, -0.48155959607106513243, - 1.01987651164781722990, - -0.82037249480425855630, + 1.0198765116478172299, + -0.8203724948042585563, 1.34166242366815868792, -1.11989038137449981036, 1.60668127488526901736, @@ -2505,7 +2506,7 @@ function ESERK5ConstantCache(zprev) -1.45209410501895064272, 1.80940525394914653035, -1.40282517034752363116, - 1.66501125835932461960, + 1.6650112583593246196, -1.15783305054940743872, 1.30913568077475161999, -0.68937502791897942167, @@ -2518,9 +2519,9 @@ function ESERK5ConstantCache(zprev) -2.07277472880842950076, 2.87893419973839304049, -2.90094217966628020733, - 3.48252763074681448430, + 3.4825276307468144843, -3.16663655041365954546, - 3.26284039972349360070, + 3.2628403997234936007, -2.28810436582617748869, 1.50765509525329810536, 0.59910456914092824476, @@ -2534,8 +2535,8 @@ function ESERK5ConstantCache(zprev) 0.02366760744916501444, -0.02091146738655667164, 0.02272373429327278344, - -0.01965100973027534420, - 0.02114551388320260600, + -0.0196510097302753442, + 0.021145513883202606, -0.01775445229554873175, 0.01893080893496497386, -0.01522351022457045337, @@ -2550,7 +2551,7 @@ function ESERK5ConstantCache(zprev) -0.00043229627185002099, 0.00515970722510431662, -0.00513069566878917357, - 0.00975186019138153670, + 0.0097518601913815367, -0.00952518880620872171, 0.01384620269301161354, -0.01320780701278399631, @@ -2562,7 +2563,7 @@ function ESERK5ConstantCache(zprev) -0.01502523382435444477, 0.01569691525175001198, -0.01095780937229151077, - 0.01024561016718025450, + 0.0102456101671802545, -0.00413867721864448566, 0.00214268887360162443, 0.00507359599781768457, @@ -2592,7 +2593,7 @@ function ESERK5ConstantCache(zprev) 0.16911867807528219165, -0.14147814153326615516, 0.10422583333337434586, - -0.06808531807861449570, + -0.0680853180786144957, 0.02900010983992349842, 0.00439872570784303682, -0.03721613538830184642, @@ -2606,7 +2607,7 @@ function ESERK5ConstantCache(zprev) -0.11444913116851269941, 0.10531190658624060841, -0.09622762785307355238, - 0.08328701650101816290, + 0.0832870165010181629, -0.07129740681224133736, 0.05664868551328293422, -0.04370383272011902492, @@ -2621,10 +2622,10 @@ function ESERK5ConstantCache(zprev) -0.04213288236818562432, 0.04385288086041266853, -0.04492784183199288045, - 0.04370100443462789780, - -0.04182297173514639560, + 0.0437010044346278978, + -0.0418229717351463956, 0.03805046575041177992, - -0.03371217464400146080, + -0.0337121746440014608, 0.02796584716674249682, -0.02180606357242264107, 0.01477982702201681778, @@ -2671,7 +2672,7 @@ function ESERK5ConstantCache(zprev) 0.72108345596208034411, -0.98557040285617081299, 1.00546380388574796427, - -1.12865163280505353960, + -1.1286516328050535396, 0.93628350912979840803, -0.75769656934612084065, 0.15294661122376862483, @@ -2681,10 +2682,10 @@ function ESERK5ConstantCache(zprev) -6.01549351377702024024, -21.99408726856634999081, -12.19691849491231927516, - 7.41777655255724344130, + 7.4177765525572434413, -3.87416689987663209749, 1.40725276963657575102, - 0.30599475360109246180, + 0.3059947536010924618, -1.34678936926878001223, 1.96354821638567789144, -2.18201732151115912473, @@ -2699,17 +2700,17 @@ function ESERK5ConstantCache(zprev) -0.32056318394843902331, 0.55697060080885918421, -0.70651385566175917141, - 0.84017121425538765500, + 0.840171214255387655, -0.89302969742917559515, 0.93467018288205716559, - -0.90671441524161855430, + -0.9067144152416185543, 0.87565785074962787515, -0.78829041617744788351, 0.70692194204691338744, -0.58264350817751409117, 0.47290209834461144345, -0.33257875015694232657, - 0.21387845557283471920, + 0.2138784555728347192, -0.07520856633901888688, -0.03664256371752601382, 0.15983794985794777532, @@ -2738,7 +2739,7 @@ function ESERK5ConstantCache(zprev) 2.75525899200422585977, -2.06308898924730366176, 2.51776543264594820926, - -1.75438113882861812520, + -1.7543811388286181252, 2.13379172810559047946, -1.29655102099220265188, 1.60010489012577616919, @@ -2750,15 +2751,15 @@ function ESERK5ConstantCache(zprev) -0.76451815868606742832, 1.80898462380501623414, -1.68416788908539416525, - 2.71621176573806843990, + 2.7162117657380684399, -2.55949049541212270142, 3.53287677704659364153, -3.29291917050646620879, 4.15166039171011114206, - -3.76857688211500407860, + -3.7685768821150040786, 4.44993807550097919545, -3.85964803429933001055, - 4.30015753581799398120, + 4.3001575358179939812, -3.44237037673473134092, 3.58814705513054876818, -2.41946750370200458491, @@ -2773,14 +2774,14 @@ function ESERK5ConstantCache(zprev) -6.23770057902145236284, 6.95913790151320199584, -5.78167730252874711994, - 4.69002986337042226950, + 4.6900298633704222695, -1.03724389354214108216, -3.34934699750021236397, 11.29138256201905043952, -21.17686633807399587681, 36.06856485582710547533, 79.52864344593601231281, - 29.04526602369451282470, + 29.0452660236945128247, -17.56983997416358178612, 9.03696700506058903102, -3.11240754249168016798, @@ -2793,12 +2794,12 @@ function ESERK5ConstantCache(zprev) -4.48093921336470568662, 3.57775658860312617549, -2.73546176256006434713, - 1.78369851209788055080, - -1.00074359930929390750, + 1.7836985120978805508, + -1.0007435993092939075, 0.19497451681906954879, 0.39526046503869349813, -0.97080967490529102015, - 1.32308006230253227820, + 1.3230800623025322782, -1.65356777663565690517, 1.77626454789853438498, -1.88733505113501198736, @@ -2817,7 +2818,7 @@ function ESERK5ConstantCache(zprev) -1.08004769171938752592, 1.22296440481415591428, -1.37242857738553181157, - 1.44163834002324486860, + 1.4416383400232448686, -1.50919012211853020844, 1.50272695115281118561, -1.48984165860349748733, @@ -2826,9 +2827,9 @@ function ESERK5ConstantCache(zprev) 1.18772539671117538518, -1.04091203333055659641, 0.85508906638574211367, - -0.66297583060929876630, + -0.6629758306092987663, 0.44693893471938211936, - -0.22749951266459186860, + -0.2274995126645918686, -2.09605784235203707055, 3.26370766337405360247, -4.56877483905605608072, @@ -2844,7 +2845,7 @@ function ESERK5ConstantCache(zprev) -3.07996015463132577494, 1.43612941561351648012, -1.96022134003309433936, - 0.19017048894400431780, + 0.1901704889440043178, -0.59364708312350000785, -1.27435744270567496983, 0.95465422457059723182, @@ -2856,13 +2857,13 @@ function ESERK5ConstantCache(zprev) 5.47048405765353606967, -7.07103502193759858585, 6.33092399697887397991, - -7.60889213194552471720, + -7.6088921319455247172, 6.49242593213818963704, -7.32871467552770372578, - 5.72267146307356977530, + 5.7226714630735697753, -6.01596949954625070944, 3.83856959274676245997, - -3.53596515208130002250, + -3.5359651520813000225, 0.77464944435871674333, 0.08221979028611466067, -3.31489253320957066862, @@ -2873,9 +2874,9 @@ function ESERK5ConstantCache(zprev) 12.04784537977509017992, -13.35826303526457792259, 11.11376297155557146823, - -9.03583122162078566930, + -9.0358312216207856693, 2.16939072284252398859, - 6.06224808440866969050, + 6.0622480844086696905, -20.93585412687845703772, 39.43448295043651796732, -67.28061223004438318185, @@ -2900,10 +2901,10 @@ function ESERK5ConstantCache(zprev) 0.48509248405410143601, -0.71456980892562038665, 0.94057422926763512017, - -1.01831316659552983950, + -1.0183131665955298395, 1.09864301501610928113, -1.04989893480073259724, - 1.01532153455142015730, + 1.0153215345514201573, -0.87418954032998008596, 0.76036714859225063012, -0.56269147838150068708, @@ -2933,12 +2934,12 @@ function ESERK5ConstantCache(zprev) -1.57269689116422495267, 2.36716223594700458932, -1.80930681190181585904, - 2.55023110804695329890, + 2.5502311080469532989, -1.93736955259230447801, - 2.61227234872922453590, + 2.6122723487292245359, -1.93266083030699009626, 2.53080642732021932062, - -1.77506479127805638640, + -1.7750647912780563864, 2.28875601321404253952, -1.45126996181041922895, 1.87735138729450223849, @@ -2960,22 +2961,22 @@ function ESERK5ConstantCache(zprev) -3.34137046850736263437, 3.82915529969772183705, -2.90962944245779153718, - 3.09025535213025559500, + 3.090255352130255595, -1.84847783219000016963, 1.69134390105743159793, -0.11976171607055380308, -0.35172372063289131239, - 2.18918049804070813380, + 2.1891804980407081338, -2.85918261688344443883, 4.78120519012751454824, -5.38693705818294965582, 7.03037865068800194024, -7.08623458404849859704, - 7.81717263976429244110, + 7.8171726397642924411, -6.51084336478848069163, - 5.30363522684232524540, - -1.35572800869285026160, - -3.36947412165662196770, + 5.3036352268423252454, + -1.3557280086928502616, + -3.3694741216566219677, 11.89302194410945645586, -22.48631833330700402485, 38.42251051038211073774, @@ -2992,16 +2993,16 @@ function ESERK5ConstantCache(zprev) 0.03197594909189348938, -0.02718784382960316368, 0.02176998370318927387, - -0.01575876250646160090, + -0.0157587625064616009, 0.01027710121567707545, -0.00504403976662262579, 0.00087091733447824341, 0.00270967872825650597, - -0.00508877119296891490, + -0.0050887711929689149, 0.00682956785513975234, -0.00745074440009065551, 0.00755014900428113266, - -0.00672453124314334200, + -0.006724531243143342, 0.00556655070620727319, -0.00371946915830470093, 0.00174608117069214946, @@ -3009,11 +3010,11 @@ function ESERK5ConstantCache(zprev) -0.00304817117012522133, 0.00566193140713088829, -0.00805624152632864604, - 0.01052977297675033660, + 0.0105297729767503366, -0.01266816204376762164, 0.01475781921781130906, -0.01643731962702458041, - 0.01797940370620213640, + 0.0179794037062021364, -0.01907352572398452947, 0.01997622477179268261, -0.02042503556443520107, @@ -3027,7 +3028,7 @@ function ESERK5ConstantCache(zprev) -0.01351656959698801716, 0.01157619034710595345, -0.00943676900024478273, - 0.00720264053254417690, + 0.0072026405325441769, -0.00484741527951893479, 0.00244402336040747689, 0.05946552802972392138, @@ -3036,11 +3037,11 @@ function ESERK5ConstantCache(zprev) -0.10422198364953824679, 0.12746104445721123666, -0.10739374710268584368, - 0.12967878743925123630, + 0.1296787874392512363, -0.10838986860883481622, 0.12912351803439542364, -0.10596860815601411021, - 0.12447760864319258600, + 0.124477608643192586, -0.09877645081073582745, 0.11439721996963164719, -0.08553023299006505542, @@ -3056,20 +3057,20 @@ function ESERK5ConstantCache(zprev) 0.08065067915928661457, -0.08039308485024843076, 0.12168785964868400473, - -0.11829465466912993110, + -0.1182946546691299311, 0.15472399605444336901, -0.14461694392126403508, 0.17232761244922203958, -0.15147804370879047742, 0.16640418215135013846, - -0.13089635641436814240, + -0.1308963564143681424, 0.12951666388267440988, -0.07653844209984735081, 0.05714643125084903352, 0.01340751058524805063, -0.04870569407424780312, 0.13177039865722717238, - -0.17404518141452243740, + -0.1740451814145224374, 0.25573356624695453565, -0.28483172903317133251, 0.33716331471027083388, @@ -3078,15 +3079,15 @@ function ESERK5ConstantCache(zprev) -0.15233041837123514894, -0.03454069600699952169, 0.38832476742524263402, - -0.86307054298998253650, - 1.59156226495810271260, + -0.8630705429899825365, + 1.5915622649581027126, 8.73630353617817867473, 6.49349227197141676271, -3.67449290866817213086, - 1.67946560839844893920, + 1.6794656083984489392, -0.35492049094671607179, -0.49237358847420426011, - 0.95249241523648486840, + 0.9524924152364848684, -1.16237146883957631616, 1.16783407331948740904, -1.06599652954268897531, @@ -3098,11 +3099,11 @@ function ESERK5ConstantCache(zprev) 0.17859360794326853417, -0.32233181522922449425, 0.41533111567541958209, - -0.48484949020880302450, + -0.4848494902088030245, 0.50701195702686419065, -0.51018229604670084498, 0.47389443961844540665, - -0.42602499689648604120, + -0.4260249968964860412, 0.34825471961694648426, -0.26698608807785029207, 0.16529136520896928197, @@ -3111,7 +3112,7 @@ function ESERK5ConstantCache(zprev) 0.14196168033791400909, -0.24679262881022426268, 0.33709819701153714844, - -0.42723739887802097970, + -0.4272373988780209797, 0.49998122903379166315, -0.56885508984138344335, 0.61894528400786985589, @@ -3123,7 +3124,7 @@ function ESERK5ConstantCache(zprev) 0.67286058570230455889, -0.64141703217200163323, 0.59601132704548909214, - -0.54436780342590496140, + -0.5443678034259049614, 0.48150176714999415317, -0.41369783505251123135, 0.33770029875426876842, @@ -3134,7 +3135,7 @@ function ESERK5ConstantCache(zprev) 0.93217185014288883593, -1.36800130494669591741, 1.10076078593330484168, - -1.52724431091254331250, + -1.5272443109125433125, 1.24704192263687629882, -1.65482329192280275265, 1.35137862177564471722, @@ -3144,14 +3145,14 @@ function ESERK5ConstantCache(zprev) 1.34347254529493520536, -1.62767564713238055418, 1.18678467805829512827, - -1.40974540453016627950, + -1.4097454045301662795, 0.90550264886101006212, -1.06266557664940397565, 0.49343835374625544254, -0.58664847843696699137, -0.04166305374174811976, 0.00189780480480570787, - -0.67363556640979560530, + -0.6736355664097956053, 0.66603039302676558808, -1.35386744456365004652, 1.34476594050870823516, @@ -3168,15 +3169,15 @@ function ESERK5ConstantCache(zprev) -0.98704893767135615246, -0.14421594953856048393, 0.70826107326445852941, - -2.04078115302535900710, - 2.71812904846229130840, + -2.0407811530253590071, + 2.7181290484622913084, -4.02978512481106410092, 4.49799467673138941848, -5.34104882018646698327, 4.99746620067698810175, -4.57933150421288281962, 2.40023108168379506466, - 0.58231320892221982710, + 0.5823132089222198271, -6.23617903783484184288, 13.82433893224587073689, -25.47278464139897380392, @@ -3185,7 +3186,7 @@ function ESERK5ConstantCache(zprev) 22.33055047867799558503, -10.35133040046546959445, 2.41636037299735395578, - 2.67435349547022971350, + 2.6743534954702297135, -5.42172356913767750086, 6.68624311762980738649, -6.70505056431791235383, @@ -3194,7 +3195,7 @@ function ESERK5ConstantCache(zprev) 3.63244120771236334022, -2.16662150981781742587, 0.86179760274986183521, - 0.41379711293295645680, + 0.4137971129329564568, -1.40235952626023041567, 2.27699035652084713632, -2.83191024277143954535, @@ -3216,7 +3217,7 @@ function ESERK5ConstantCache(zprev) 3.11650067842290212639, -3.42489494928738080759, 3.70412454896539644622, - -3.86436452251125306390, + -3.8643645225112530639, 3.98746396035918015954, -3.99784135206796209516, 3.96856850826514850894, @@ -3231,23 +3232,23 @@ function ESERK5ConstantCache(zprev) -1.00105214761627880904, 0.50571772022851124717, 1.84178359334532681935, - -2.68997289695558139400, + -2.689972896955581394, 4.68672075478592553566, -3.67304395252083848433, 5.62430325506305983652, -4.54912070412095559391, 6.40973873671829696974, - -5.22488194692122043250, - 6.94446770564578219620, + -5.2248819469212204325, + 6.9444677056457821962, -5.59835596706018367996, 7.12526343976423692794, -5.56755719212218558312, 6.85422140694145554107, - -5.04184373651734940580, + -5.0418437365173494058, 6.05147760178989368995, -3.95595983496421554904, 4.67050118038347861216, - -2.28645840165574210090, + -2.2864584016557421009, 2.71546958640374791472, -0.06978186411496464792, 0.25972436011423893909, @@ -3258,20 +3259,20 @@ function ESERK5ConstantCache(zprev) 8.23094464480145582286, -7.99571452361336287851, 10.49608828049746378497, - -9.81917833167789844140, + -9.8191783316778984414, 11.73580197941154956709, -10.34117629086030198948, 11.39591101654892746353, -9.01595496128817686099, 8.96815616917929681051, -5.41036926112471583394, - 4.14233771498398173350, + 4.1423377149839817335, 0.60286903246948986279, -2.95159935369697334906, 8.54534960315436897815, -11.37570114742995741608, 16.88528671926995983199, - -18.84300183332808487080, + -18.8430018333280848708, 22.38773051673566172326, -20.94129478046622594434, 19.19177056627063038263, @@ -3303,7 +3304,7 @@ function ESERK5ConstantCache(zprev) -6.54398851156316840871, 6.12555184911824657235, -5.62293188399131604882, - 4.73672635947360909370, + 4.7367263594736090937, -3.85321956870067028333, 2.69522617305146372502, -1.61964058825957546439, @@ -3312,7 +3313,7 @@ function ESERK5ConstantCache(zprev) -1.94061500134858677669, 2.94855260934574348042, -3.99085101652553131402, - 4.81016163846720612440, + 4.8101616384672061244, -5.61901121532400971148, 6.19253846878692915112, -6.72616240099883899717, @@ -3320,17 +3321,17 @@ function ESERK5ConstantCache(zprev) -7.26982984805601972766, 7.29315875062493912395, -7.25349865510950841951, - 7.01580869000653706280, + 7.0158086900065370628, -6.71640921555788406039, - 6.24782912184076089090, + 6.2478291218407608909, -5.72445271639235464534, 5.06547508782236821645, -4.36253175931013092992, 3.56076916282439093209, - -2.72844081146344263900, + -2.728440811463442639, 1.83609250086440489724, -0.92810741669548657562, - -2.20342924351108804260, + -2.2034292435110880426, 3.00576851706421743771, -6.25001518795906108039, 4.81699050687453578234, @@ -3342,17 +3343,17 @@ function ESERK5ConstantCache(zprev) 8.53868242699089208259, -10.99945882716123080058, 8.67599078527912404013, - -10.74665120678811547350, + -10.7466512067881154735, 8.01467527208279051365, -9.63940382620074309727, 6.45637181972228280102, - -7.60899801610755943670, + -7.6089980161075594367, 3.96851269132249795391, - -4.66580088401928527730, + -4.6658008840192852773, 0.61133798601700206632, -0.92685809977467381593, -3.43458193437564140993, - 3.35748867211007606670, + 3.3574886721100760667, -7.84368492644507675493, 7.78220150001282817698, -12.12888137358947204802, @@ -3366,10 +3367,10 @@ function ESERK5ConstantCache(zprev) -13.50524209041096668216, 8.09740145947762890444, -6.20573974052248011901, - -1.01420785373646293870, + -1.0142078537364629387, 4.55941262487481946408, -13.07578604278682554707, - 17.36210863264463455380, + 17.3621086326446345538, -25.75385231197509128265, 28.71764629443316252377, -34.11870888007892688165, @@ -3380,7 +3381,7 @@ function ESERK5ConstantCache(zprev) -39.96239927078673304095, 88.50743727770181124015, -163.04386879534706622508, - -225.63898325894774643530, + -225.6389832589477464353, -41.75927536578417686997, 23.75204549274604559628, -10.95250264483586555286, @@ -3398,9 +3399,9 @@ function ESERK5ConstantCache(zprev) -1.51966374083908850601, 2.48187078168812691459, -3.07004325545144984844, - 3.55436102108452711690, + 3.5543610210845271169, -3.68872937415691071195, - 3.74471647921217920540, + 3.7447164792121792054, -3.50378873863942441602, 3.22870847716754028056, -2.72043097470618766565, @@ -3408,7 +3409,7 @@ function ESERK5ConstantCache(zprev) -1.56281851737475396824, 0.95799506208171303356, -0.23979399410842155982, - -0.38342825062280772030, + -0.3834282506228077203, 1.07307755072332011714, -1.64195107414735042006, 2.24072023064833913963, @@ -3417,7 +3418,7 @@ function ESERK5ConstantCache(zprev) -3.49249356075139605338, 3.80145168758868567949, -3.97005755231171697517, - 4.11364857487610269260, + 4.1136485748761026926, -4.12542788534282944823, 4.10748651977165479821, -3.97136134370885551803, @@ -3440,7 +3441,7 @@ function ESERK5ConstantCache(zprev) -3.85846797855206702366, 5.31237809057062282392, -4.34375232831514601628, - 5.62999391145840810680, + 5.6299939114584081068, -4.48230739616025442018, 5.56366494857899152038, -4.20376569492438267872, @@ -3461,7 +3462,7 @@ function ESERK5ConstantCache(zprev) -7.13444075103977226604, 8.64639425316217469231, -7.59670065287868734316, - 8.44963330153240299580, + 8.4496333015324029958, -6.64962935895906337436, 6.65844021676452246794, -3.95992546027987302182, @@ -3506,7 +3507,7 @@ function ESERK5ConstantCache(zprev) 0.01240358248569266991, -0.00920200201309109497, 0.00649224684258885819, - -0.00351298450360462830, + -0.0035129845036046283, 0.00123104527702433755, 0.00114292034571421676, -0.00271264851478955019, @@ -3522,9 +3523,9 @@ function ESERK5ConstantCache(zprev) -0.00030539558557910287, -0.00104683684048862812, 0.00280822360308890986, - -0.00423755282831077100, - 0.00598425657806781960, - -0.00733744418651194330, + -0.004237552828310771, + 0.0059842565780678196, + -0.0073374441865119433, 0.00893163787922396715, -0.01008753084947032301, 0.01142542805507678304, @@ -3543,30 +3544,30 @@ function ESERK5ConstantCache(zprev) -0.01146169000996873077, 0.01061294689718220337, -0.00945494019012086545, - 0.00846033199084385810, + 0.0084603319908438581, -0.00719853779760964204, 0.00611863883213363546, -0.00481233609339771964, - 0.00370447337640536110, + 0.0037044733764053611, -0.00240849102778788616, 0.00132452551095482035, -0.00008738802091911069, -0.00092779355814004384, - 0.00206504897061011560, + 0.0020650489706101156, -0.00297441464640828832, 0.00397884102052138439, -0.00475356467044697664, 0.00560043046642066771, -0.00621981706534220982, 0.00689235709765118835, - -0.00734344418025036170, + -0.0073434441802503617, 0.00783233545577250931, -0.00810926595529166613, 0.00841191874365557375, -0.00851516999889419084, 0.00863491286031774219, -0.00857045406395653617, - 0.00851567839860039970, + 0.0085156783986003997, -0.00829411519830062886, 0.00807743113144203731, -0.00771318234205878653, @@ -3574,7 +3575,7 @@ function ESERK5ConstantCache(zprev) -0.00686116224294551925, 0.00637146871429217741, -0.00577664327268027737, - 0.00518062633570495670, + 0.0051806263357049567, -0.00450207876908363495, 0.00382208369884454212, -0.00308275138031262851, @@ -3620,7 +3621,7 @@ function ESERK5ConstantCache(zprev) -0.01843123053598809402, 0.03260448321198015226, -0.02497576371913783413, - 0.03883315866726063520, + 0.0388331586672606352, -0.03075048591721223079, 0.04398435346650019645, -0.03513286416808195783, @@ -3639,7 +3640,7 @@ function ESERK5ConstantCache(zprev) 0.00556886803048687457, 0.01386915677454629049, -0.01225155874845314935, - 0.03252765809269195230, + 0.0325276580926919523, -0.03143173475896753749, 0.05183465769033178405, -0.05045180179228015566, @@ -3669,11 +3670,11 @@ function ESERK5ConstantCache(zprev) 0.09424425552440519882, -0.06497721841572701162, 0.04748750318520382485, - 0.00078949314914145510, + 0.0007894931491414551, -0.03616849749742881426, 0.09891578799815364809, -0.14227177023566997538, - 0.20232374179680029380, + 0.2023237417968002938, -0.22690824787478686142, 0.24506888463542111922, -0.19573951984346490973, @@ -3682,9 +3683,9 @@ function ESERK5ConstantCache(zprev) -0.47570071154233639632, 1.04524053426423635393, 2.92111900843485239321, - 2.04875334229057592950, + 2.0487533422905759295, -0.93859784873589746645, - 0.21888321299471411030, + 0.2188832129947141103, 0.19984723194505832344, -0.42046506925516807796, 0.48989661920679944407, @@ -3694,7 +3695,7 @@ function ESERK5ConstantCache(zprev) 0.18297790519470144566, -0.07921011983807652035, -0.02100627853971309689, - 0.09601277550311990150, + 0.0960127755031199015, -0.16045067913630409184, 0.19757338397292650845, -0.22484403450059758933, @@ -3715,14 +3716,14 @@ function ESERK5ConstantCache(zprev) -0.10372570807935942161, 0.10237930480752456541, -0.10316437388265266295, - 0.09357355254261298660, - -0.08685736370198574030, + 0.0935735525426129866, + -0.0868573637019857403, 0.07099802411890106246, - -0.05892950800591175570, - 0.03904101891566295890, + -0.0589295080059117557, + 0.0390410189156629589, -0.02387820019318036974, 0.00217696958316882135, - 0.01395547752833554110, + 0.0139554775283355411, -0.03547623984579666157, 0.05074754899240953299, -0.07044174620034762691, @@ -3731,7 +3732,7 @@ function ESERK5ConstantCache(zprev) 0.10966470813303887122, -0.12241129952674868753, 0.12809113089314103084, - -0.13653297711155185090, + -0.1365329771115518509, 0.13802298898117398851, -0.14208759803737450178, 0.13946784220042984792, @@ -3742,7 +3743,7 @@ function ESERK5ConstantCache(zprev) -0.11257152464982068951, 0.10033102204980559602, -0.09094932330245783514, - 0.07682818258469381600, + 0.076828182584693816, -0.06574231216151123214, 0.05047575685312149368, -0.03841387656040012866, @@ -3753,7 +3754,7 @@ function ESERK5ConstantCache(zprev) -0.03179219582753904649, 0.04293430725973351042, -0.05630369886436967924, - 0.06613026476341489490, + 0.0661302647634148949, -0.07780770382537367802, 0.08597483629593581644, -0.09566585123564654014, @@ -3769,11 +3770,11 @@ function ESERK5ConstantCache(zprev) -0.12078105393383511967, 0.11680309771214060499, -0.11323504126019988403, - 0.10752962224781174860, - -0.10214535834501839440, + 0.1075296222478117486, + -0.1021453583450183944, 0.09492779387629492194, -0.08795796841171552027, - 0.07947236778281066560, + 0.0794723677828106656, -0.07117274939689922919, 0.06168494426552566245, -0.05232990061657451925, @@ -3791,24 +3792,24 @@ function ESERK5ConstantCache(zprev) -0.00850011580704478423, -0.06656113527630362625, 0.01871441446320790472, - -0.09317408342809885280, + -0.0931740834280988528, 0.04460266619308353442, -0.11781672140417381867, 0.06786603938048854645, -0.13917514197156138911, 0.08718976985319139283, - -0.15594919753155286890, + -0.1559491975315528689, 0.10130472855001948496, -0.16691802398962574117, 0.10905627569290353429, - -0.17101175496905196560, + -0.1710117549690519656, 0.10947828400702429297, -0.16738721779078807872, 0.10186978206072799802, -0.15550470632118931769, 0.08587094382250076707, -0.13520217798353950656, - 0.06153438708844935490, + 0.0615343870884493549, -0.10676245184638159802, 0.02938697645594130423, -0.07096823325955477213, @@ -3821,12 +3822,12 @@ function ESERK5ConstantCache(zprev) -0.14820058538295113881, 0.11126791945716726917, -0.19299512251691233744, - 0.15356006541837249890, - -0.23170883620088308930, - 0.18801625703821286950, - -0.26082339432011070190, + 0.1535600654183724989, + -0.2317088362008830893, + 0.1880162570382128695, + -0.2608233943201107019, 0.21113295196407222409, - -0.27691287328856578620, + -0.2769128732885657862, 0.21963078782291037272, -0.27691912447322386548, 0.21075257844172440302, @@ -3834,16 +3835,16 @@ function ESERK5ConstantCache(zprev) 0.18259849555187179782, -0.22022727149509396805, 0.13448177908906683298, - -0.16224400393187179970, + -0.1622440039318717997, 0.06727999394271429179, -0.08630105750360057837, -0.01625277996214562204, 0.00381642457690451299, -0.11125801974321394838, - 0.10215359444290536550, + 0.1021535944429053655, -0.21068513821187437318, 0.20059263878619118526, - -0.30541017017022403790, + -0.3054101701702240379, 0.28910180554921838247, -0.38463400820070309249, 0.35630174972680139778, @@ -3854,7 +3855,7 @@ function ESERK5ConstantCache(zprev) -0.41498740905267822443, 0.31928567222795928293, -0.32618825913164395391, - 0.20350558099963034220, + 0.2035055809996303422, -0.18446425161139584636, 0.03852974045376281187, 0.00010874200833458515, @@ -3866,9 +3867,9 @@ function ESERK5ConstantCache(zprev) 0.52917593326460921066, -0.61211419848456183335, 0.54371352512413606561, - -0.54740300194587843130, + -0.5474030019458784313, 0.38820640121923150057, - -0.29268374706124167250, + -0.2926837470612416725, 0.03202577474209825081, 0.15910305066161381515, -0.49698733691585850192, @@ -3886,22 +3887,22 @@ function ESERK5ConstantCache(zprev) 1.25439190855387860957, -0.29339146604848903577, -0.26266490835003625248, - 0.55824932993358233890, - -0.64869510225202209330, - 0.63133764785091883720, - -0.52465244201930161250, + 0.5582493299335823389, + -0.6486951022520220933, + 0.6313376478509188372, + -0.5246524420193016125, 0.39529339694874526812, -0.23856580264220311749, 0.10177201023574256045, - 0.03362168215345819750, + 0.0336216821534581975, -0.13202622258022705948, 0.21960122373191998113, -0.26745686251036848713, - 0.30536549848705396570, + 0.3053654984870539657, -0.30795874192952449322, 0.30613403452645837621, -0.27612719479239966613, - 0.24850857803105072530, + 0.2485085780310507253, -0.20004581770025917087, 0.16021399635404984241, -0.10578890977519207761, @@ -3910,22 +3911,22 @@ function ESERK5ConstantCache(zprev) -0.02040743320797135107, 0.06166712163764408866, -0.08474640169488872887, - 0.11323763133140489490, + 0.1132376313314048949, -0.12328307281111913762, - 0.13834833323981698960, + 0.1383483332398169896, -0.13567973321220597183, 0.13844768545710206542, -0.12484121960396987738, 0.11758332832452829397, -0.09566685985858548735, - 0.08124172538962386170, + 0.0812417253896238617, -0.05399457998693973221, 0.03540646323462741385, -0.00577758097811317296, -0.01414680073859285112, 0.04350579651086713268, -0.06233129697712329331, - 0.08923127341029241100, + 0.089231273410292411, -0.10503511036320788141, 0.12783052700529953793, -0.13924843756643653925, @@ -3933,7 +3934,7 @@ function ESERK5ConstantCache(zprev) -0.16306958298969684296, 0.17492577067069012275, -0.17562467171737897176, - 0.18163961336800243940, + 0.1816396133680024394, -0.17693161265499440793, 0.17739717450528028064, -0.16773354735906714774, @@ -3956,11 +3957,11 @@ function ESERK5ConstantCache(zprev) -0.09824905575842418637, 0.11420333846127540822, -0.12442487265911301997, - 0.13764769461910816850, + 0.1376476946191081685, -0.14532314818193270423, 0.15555186115341224085, -0.16048001259473168578, - 0.16757212274124003160, + 0.1675721227412400316, -0.16966647709731949578, 0.17358822831221629168, -0.17286460535793238269, @@ -3977,7 +3978,7 @@ function ESERK5ConstantCache(zprev) 0.09840152766668000539, -0.08514988571029194486, 0.07229782989489440259, - -0.05811175275454322220, + -0.0581117527545432222, 0.04418796769035818195, -0.02946134322633679054, 0.01486467533606057427, @@ -3986,33 +3987,33 @@ function ESERK5ConstantCache(zprev) 0.02556721887689816092, 0.02353619039954565201, 0.05776454611599225741, - -0.00921371526173692980, - 0.09045854094323034500, + -0.0092137152617369298, + 0.090458540943230345, -0.04189782367571787819, 0.12249628982370902586, -0.07331258733330403565, 0.15263187657885421422, -0.10217904949100543865, 0.17956372245450194503, - -0.12718448469405072010, - 0.20198049049867219940, + -0.1271844846940507201, + 0.2019804904986721994, -0.14703247861507043326, 0.21861519525259043295, -0.16050085930778179577, - 0.22830667914757959980, - -0.16650636884494030010, + 0.2283066791475795998, + -0.1665063688449403001, 0.23006705082716730204, -0.16417435622439305321, 0.22315303249997023305, -0.15291108702696817878, 0.20713844445539397743, -0.13247551756631395503, - 0.18198428438026981180, + 0.1819842843802698118, -0.10304659539468244422, 0.14810206670925032957, -0.06528135957230279951, 0.10640531497972385844, - -0.02035837219471701640, + -0.0203583721947170164, 0.05834340480045453747, 0.02999961775259482946, 0.00591141024505222219, @@ -4025,9 +4026,9 @@ function ESERK5ConstantCache(zprev) 0.23354151146228571689, -0.19077118798457545767, 0.26858569776238833127, - -0.21972858771543843370, + -0.2197285877154384337, 0.29026704504756523084, - -0.23369655665888203200, + -0.233696556658882032, 0.29546466048994202147, -0.22986105925245897685, 0.28175537785654863887, @@ -4036,7 +4037,7 @@ function ESERK5ConstantCache(zprev) -0.16222371350184988659, 0.19350730267008542373, -0.09855522753529161184, - 0.12075536893613454670, + 0.1207553689361345467, -0.01801208603973828218, 0.03328183792273937958, 0.07455178866143233329, @@ -4057,7 +4058,7 @@ function ESERK5ConstantCache(zprev) -0.16367879941185348169, 0.14633208210296369534, -0.00030972472366438747, - -0.03653668302775427840, + -0.0365366830277542784, 0.19631792501186171029, -0.24026794446298724295, 0.39810327721279548108, @@ -4072,20 +4073,20 @@ function ESERK5ConstantCache(zprev) -0.05274351450992236651, -0.13960149483781381097, 0.47952372456762548669, - -0.71471635973409308740, + -0.7147163597340930874, 1.04027269620199724898, -1.17562064335830918083, 1.27773253629739125259, - -1.01911063206972740680, + -1.0191106320697274068, 0.49594433694917572364, 0.69356297739749339648, -2.54691724871987146273, - 5.57961266446317694090, + 5.5796126644631769409, 5.17656002221390387774, 0.00492757220171445229, - -0.01133289356406465970, + -0.0113328935640646597, 0.00968107339650685697, - -0.01098590832469398780, + -0.0109859083246939878, 0.00916350809325548396, -0.01030124676229938856, 0.00831644461215963991, @@ -4097,7 +4098,7 @@ function ESERK5ConstantCache(zprev) 0.00408171505902639974, -0.00470505455415456703, 0.00224903931629656531, - -0.00280675897802403320, + -0.0028067589780240332, 0.00030200329460178927, -0.00082885531447688104, -0.00168770980766425093, @@ -4139,15 +4140,15 @@ function ESERK5ConstantCache(zprev) 0.01595094551943444794, -0.01792512436000814544, 0.01659637613806150963, - -0.01802896359051542330, + -0.0180289635905154233, 0.01613583957968563187, - -0.01699360646071726780, + -0.0169936064607172678, 0.01453040436009533226, -0.01483875862439209582, 0.01186526058428061595, -0.01172106092938320424, 0.00837321546970496745, - -0.00795253804495889630, + -0.0079525380449588963, 0.00444644250269722163, -0.00400383295189710164, 0.00062924601787425478, @@ -4155,26 +4156,26 @@ function ESERK5ConstantCache(zprev) -0.00241634676940103094, 0.00190843186403953711, -0.00398044959689476414, - 0.00248020014453578450, + 0.0024802001445357845, -0.00341744122779892015, 0.00067355140173690664, -0.00030303553640811069, - -0.00375337528126744400, + -0.003753375281267444, 0.00536931500223758115, -0.01051728195717652886, 0.01297295885519664758, -0.01859937909862330666, 0.02105788889463507466, - -0.02609562683844654160, + -0.0260956268384465416, 0.02726797270483610064, -0.03023533488060101138, - 0.02850477036294824310, + 0.0285047703629482431, -0.02774549262534988306, 0.02156144300529528809, -0.01583981980570400155, 0.00457219415675569861, - 0.00574274934868579650, - -0.02020381896786211870, + 0.0057427493486857965, + -0.0202038189678621187, 0.03101958263796368923, -0.04150169362875365253, 0.04144817451632641647, @@ -4182,19 +4183,19 @@ function ESERK5ConstantCache(zprev) -0.00430155500905537568, 0.06965261236677645906, -0.18634168574352147352, - -1.03298957548508996140, + -1.0329895754850899614, -1.10846541956532784745, 0.41493713402644905042, -0.00834755531860681931, -0.19676692698346903709, - 0.27409650919982608830, + 0.2740965091998260883, -0.26791246089633335981, - 0.21944704731764758110, + 0.2194470473176475811, -0.14802736769371241388, 0.07558814166027248704, -0.00710404673360707627, -0.04632470312160975878, - 0.08736873413259167720, + 0.0873687341325916772, -0.11049713859736631782, 0.12193793136032901603, -0.11859755283321132824, @@ -4205,16 +4206,16 @@ function ESERK5ConstantCache(zprev) 0.01071294995153046145, 0.01669346085077818426, -0.03952120265197750504, - 0.06144848530352926830, - -0.07732247331467428930, + 0.0614484853035292683, + -0.0773224733146742893, 0.09129781879139577117, -0.09885619985213091321, 0.10447225725998754431, -0.10409808442635845593, - 0.10236571162169197380, + 0.1023657116216919738, -0.09554340498367804024, - 0.08827890884258701720, - -0.07703050743957791380, + 0.0882789088425870172, + -0.0770305074395779138, 0.06635220762935076233, -0.05280018716883854574, 0.04075936431616874328, @@ -4223,8 +4224,8 @@ function ESERK5ConstantCache(zprev) -0.00238939696769304615, -0.00757037731639511897, 0.01811140514331657445, - -0.02552923481911468020, - 0.03321824455698192680, + -0.0255292348191146802, + 0.0332182445569819268, -0.03769578904409207759, 0.04233505148186550437, -0.04385578506768973706, @@ -4236,8 +4237,8 @@ function ESERK5ConstantCache(zprev) -0.03262514928118415147, 0.02855556678245887298, -0.02266603869101922047, - 0.01790185520202699360, - -0.01167820449874743850, + 0.0179018552020269936, + -0.0116782044987474385, 0.00680514710651333905, -0.00079270607612589835, -0.00369214321484861649, @@ -4249,7 +4250,7 @@ function ESERK5ConstantCache(zprev) -0.02453037276592388502, 0.02647638954970827144, -0.02678318107265164477, - 0.02749704474744263730, + 0.0274970447474426373, -0.02667752962555288224, 0.02627311169652087053, -0.02447771445856714023, @@ -4258,14 +4259,14 @@ function ESERK5ConstantCache(zprev) 0.01852225905167608627, -0.01543207098290329954, 0.01292465348560602016, - -0.00956513711694979840, + -0.0095651371169497984, 0.00685754152411345835, -0.00348132823239337376, 0.00081788763747169446, 0.00234258294051785084, -0.00474455092390381212, 0.00748986261581540379, - -0.00945123478154696710, + -0.0094512347815469671, 0.01162449605135091289, -0.01301216347560452298, 0.01450516135119339287, @@ -4283,10 +4284,10 @@ function ESERK5ConstantCache(zprev) 0.00454181075157362394, -0.00227863792299523712, -0.06931062178709043731, - 0.17809233717193659330, + 0.1780923371719365933, -0.13994108631474208582, 0.17604772644615857002, - -0.13454608598942430220, + -0.1345460859894243022, 0.16722266295315602047, -0.12235575914222222849, 0.15164055324838970895, @@ -4312,22 +4313,22 @@ function ESERK5ConstantCache(zprev) -0.19473198224660828726, 0.24311729331633044615, -0.21394336295198787545, - 0.25726171087453014730, + 0.2572617108745301473, -0.22266562626554012305, 0.26013156955921212798, -0.21943714336674000065, 0.25050273218131258179, -0.20331015836482271841, - 0.22774234005393437230, + 0.2277423400539343723, -0.17400410079906289407, 0.19195754441299275883, - -0.13204639488386510360, + -0.1320463948838651036, 0.14412471258544734543, -0.07888606109049906001, 0.08618313232120172751, - -0.01696298059754571680, + -0.0169629805975457168, 0.02107509822156832663, - 0.05028606062436954960, + 0.0502860606243695496, -0.04728699120841731857, 0.11850406293882860542, -0.11414576690989597374, @@ -4335,25 +4336,25 @@ function ESERK5ConstantCache(zprev) -0.17413337517999513682, 0.23700158164745638301, -0.22162763935711221608, - 0.27615734873820640960, - -0.25123399076178015710, + 0.2761573487382064096, + -0.2512339907617801571, 0.29499643641649103687, -0.25838484939905448368, 0.28961981648998647021, -0.24003088150364224052, 0.25801279006482291667, - -0.19537605829100762600, + -0.195376058291007626, 0.20077545364202634137, -0.12658075920217370935, 0.12177154442521345712, - -0.03932519314439777980, + -0.0393251931443977798, 0.02857096263444019318, 0.05690865400748738867, -0.06747243488670419398, 0.14901032013923734554, -0.15169468114382261836, 0.22106598558926307541, - -0.20734837866739283530, + -0.2073483786673928353, 0.25603426716914290395, -0.21776941590493567591, 0.23843604788907107883, @@ -4374,7 +4375,7 @@ function ESERK5ConstantCache(zprev) 0.29684543906166416249, -0.03321535690708418698, -0.20707290875065695324, - 0.54697584204023796950, + 0.5469758420402379695, -0.79900781036397861001, 1.04311455374201211832, -1.03407749614613075906, @@ -4383,7 +4384,7 @@ function ESERK5ConstantCache(zprev) -1.65577573046217452202, 4.46426272775262678039, 8.25679615932540400536, - 5.93446828729420072790, + 5.9344682872942007279, -2.23555474154200695125, 0.06270936925290425401, 1.03122540494035486169, @@ -4402,18 +4403,18 @@ function ESERK5ConstantCache(zprev) 0.46431138964488943843, -0.34369755557280529112, 0.19304478262545643474, - -0.05548824960435739390, - -0.09267299144640145370, + -0.0554882496043573939, + -0.0926729914464014537, 0.21279251426325962449, -0.33146071626303180713, 0.41431636560006379622, -0.49031524203654358596, 0.52865729394874749758, - -0.55982907916699531370, + -0.5598290791669953137, 0.55571653639477736064, -0.54746962095991358321, - 0.50883763182232333300, - -0.47087813574471276690, + 0.508837631822323333, + -0.4708781357447127669, 0.40853096144296396908, -0.35217736466195098677, 0.27745636534416495689, @@ -4424,7 +4425,7 @@ function ESERK5ConstantCache(zprev) 0.04868624636033483388, -0.10747435736322559496, 0.14695996949475037541, - -0.19053206016561857750, + -0.1905320601656185775, 0.21440773339341262504, -0.24168585991935670476, 0.24984035122073949831, @@ -4432,9 +4433,9 @@ function ESERK5ConstantCache(zprev) 0.25546918980437449687, -0.25371818107198951253, 0.23593591011079387276, - -0.22364002403805019470, + -0.2236400240380501947, 0.19735750960131681619, - -0.17785505825398345570, + -0.1778550582539834557, 0.14646854734934802722, -0.12312931264979518065, 0.08990885976400198043, @@ -4458,9 +4459,9 @@ function ESERK5ConstantCache(zprev) -0.06512832060041373605, 0.04849406117302455105, -0.03620769023327489317, - 0.01834392341376173130, + 0.0183439234137617313, -0.00510549657162123749, - -0.01264551741494319460, + -0.0126455174149431946, 0.02553890713778355845, -0.04194436268116916167, 0.05334141743558284271, @@ -4490,7 +4491,7 @@ function ESERK5ConstantCache(zprev) -0.53390787435450814957, 0.38961196845577306114, -0.50267266527607723514, - 0.34816307899527620950, + 0.3481630789952762095, -0.45068725803637849081, 0.28623969648477093353, -0.37872470578067879421, @@ -4498,12 +4499,12 @@ function ESERK5ConstantCache(zprev) -0.28848661822714866121, 0.10684348377239936967, -0.18266008564355881716, - -0.00525037057911091100, + -0.005250370579110911, -0.06493624061809073755, -0.12702619810867671335, 0.06001972390641448912, -0.25336086035482541234, - 0.18665673075613453680, + 0.1866567307561345368, -0.37831392589301643392, 0.30869252344709185998, -0.49531810407851273315, @@ -4511,7 +4512,7 @@ function ESERK5ConstantCache(zprev) -0.59744417758583057143, 0.51161490601717618532, -0.67774114398301221751, - 0.57870239813800072870, + 0.5787023981380007287, -0.72964721014602373916, 0.61440982672943611487, -0.74746099512193409087, @@ -4527,16 +4528,16 @@ function ESERK5ConstantCache(zprev) -0.25044511292338395014, 0.02762233125339572798, -0.05547589789755356243, - -0.17393307571852095750, + -0.1739330757185209575, 0.14956463862458377334, -0.37817442402873041596, 0.34927954184241583047, - -0.56855914827057985050, + -0.5685591482705798505, 0.52622317374725835482, -0.72703310653915065309, 0.66208042996041804873, -0.83542056610725645704, - 0.73926644752423564810, + 0.7392664475242356481, -0.87722695348522472525, 0.74291907004358537225, -0.83979999161498064542, @@ -4553,7 +4554,7 @@ function ESERK5ConstantCache(zprev) -0.69325958463458758896, 0.70304475477112082782, -0.93770101228027702422, - 0.89156199470706676280, + 0.8915619947070667628, -1.05580466695629504592, 0.92659284762967475402, -0.99598739761790200387, @@ -4568,12 +4569,12 @@ function ESERK5ConstantCache(zprev) -1.52278078913399839145, 1.64024576572792124551, -1.90598132480924253862, - 1.79412996294540705300, + 1.794129962945407053, -1.76409384068831864845, - 1.29857966165726157470, + 1.2985796616572615747, -0.87360393967592009368, 0.00369818995536004991, - 0.78702579991575583040, + 0.7870257999157558304, -1.91045152166933518423, 2.73987024594355332852, -3.54337685673641678008, @@ -4585,7 +4586,7 @@ function ESERK5ConstantCache(zprev) -16.53740738476985683292, -5.93646713629761535458, 2.23873420620245955348, - -0.06253922371217464360, + -0.0625392237121746436, -1.03016551642609477391, 1.44995073089234693953, -1.41553356029562049656, @@ -4594,7 +4595,7 @@ function ESERK5ConstantCache(zprev) 0.40164361522053138032, -0.03447050913379994669, -0.24439185870560725666, - 0.46549585361323803090, + 0.4654958536132380309, -0.58322200852350447597, 0.64673261141555349329, -0.62376682157134000217, @@ -4645,7 +4646,7 @@ function ESERK5ConstantCache(zprev) -0.01501455004379918454, 0.03914874041452793413, -0.05075818041194513075, - 0.06877056909020122510, + 0.0687705690902012251, -0.07446960677242976667, 0.08594255014580977348, -0.08560540809606573265, @@ -4656,8 +4657,8 @@ function ESERK5ConstantCache(zprev) 0.06766658060404025232, -0.05311588862759161062, 0.04400341611621037125, - -0.02701138250020488490, - 0.01564081449976907970, + -0.0270113825002048849, + 0.0156408144997690797, 0.00242833198120145921, -0.01469403231834410725, 0.03250161498945007554, @@ -4666,8 +4667,8 @@ function ESERK5ConstantCache(zprev) -0.07101137116899391977, 0.08479022266857932921, -0.09263049206531649704, - 0.10305026650966464530, - -0.10771480560526468240, + 0.1030502665096646453, + -0.1077148056052646824, 0.11421735534737884055, -0.11528582952646120041, 0.11759031686686946538, @@ -4681,9 +4682,9 @@ function ESERK5ConstantCache(zprev) 0.05790976990666850399, -0.04390957607416088454, 0.02992968584860729309, - -0.01496385892695038800, + -0.014963858926950388, -0.13708469946503715198, - 0.39758001647779345200, + 0.397580016477793452, -0.29818599600234435565, 0.41473658816357522605, -0.30857683800010166086, @@ -4713,7 +4714,7 @@ function ESERK5ConstantCache(zprev) 0.45529213571406124128, -0.37339225401755193889, 0.49825880703172148456, - -0.40446570069770870770, + -0.4044657006977087077, 0.51588080127530011598, -0.40824236433771748933, 0.50457065407735246509, @@ -4721,7 +4722,7 @@ function ESERK5ConstantCache(zprev) 0.46222595371781821649, -0.32400769564396830758, 0.38864331253599043725, - -0.23568075553013825840, + -0.2356807555301382584, 0.28588036215185558264, -0.12013901687437911203, 0.15852268962992352441, @@ -4738,15 +4739,15 @@ function ESERK5ConstantCache(zprev) 0.64740596428430308151, -0.56272058736023566894, 0.66955533071939210554, - -0.55475702884533362180, + -0.5547570288453336218, 0.62900477360697781837, -0.48086631604065244172, 0.52078885397722829431, - -0.33930512933839340750, - 0.34685891939945157070, + -0.3393051293383934075, + 0.3468589193994515707, -0.13615672995296240755, 0.11781133935146442804, - 0.11316796444322503590, + 0.1131679644432250359, -0.14593321461437266939, 0.38317873468929686265, -0.41392200800153039486, @@ -4764,19 +4765,19 @@ function ESERK5ConstantCache(zprev) 0.06881119242540326142, -0.24057920980391811483, 0.62193684904556800763, - -0.79730199824048531010, + -0.7973019982404853101, 1.14377814402483934941, -1.24000386770399839698, 1.45651473171504997062, -1.36986028592730790798, - 1.35012325815823430730, + 1.3501232581582343073, -0.98105845587582463097, 0.64568408301921431658, 0.04643110619288610963, -0.67414855807088502893, 1.56867723412440240871, -2.22715676251962291232, - 2.86541074932260730890, + 2.8654107493226073089, -2.82731721123250645533, 2.12304085758786342808, 0.16977793073691832548, @@ -4788,7 +4789,7 @@ function ESERK5ConstantCache(zprev) -0.05579949493362588997, -0.01668941796573128813, 0.04662328731961140615, - -0.05144133029755035280, + -0.0514413302975503528, 0.04217689281171281557, -0.02722234013788040613, 0.01092330784608116188, @@ -4802,12 +4803,12 @@ function ESERK5ConstantCache(zprev) -0.01285489833756397159, 0.00679586354918884031, -0.00102148720337662843, - -0.00458632777189534480, + -0.0045863277718953448, 0.00920443563369214082, -0.01315909573698219488, 0.01584055505326479804, -0.01773536673632406316, - 0.01838894013145065190, + 0.0183889401314506519, -0.01838611276821566429, 0.01736633852219336346, -0.01595562060770061227, @@ -4822,13 +4823,13 @@ function ESERK5ConstantCache(zprev) -0.00302660957775084194, 0.00379158178196900304, -0.00435794441515086062, - 0.00433225282082201190, + 0.0043322528208220119, -0.00413291399821026553, 0.00340244847771736759, -0.00256494603727178312, 0.00128980946220599965, 0.00000199180312745303, - -0.00162245391068435480, + -0.0016224539106843548, 0.00316133422284426823, -0.00491882812185526555, 0.00650135689188967823, @@ -4846,7 +4847,7 @@ function ESERK5ConstantCache(zprev) 0.01482535525546675552, -0.01425035051487267418, 0.01337041782108053245, - -0.01245197092786422960, + -0.0124519709278642296, 0.01127289931859770666, -0.01008978611766547448, 0.00869551807819058352, @@ -4856,15 +4857,15 @@ function ESERK5ConstantCache(zprev) 0.00280609317826129197, -0.00135355655138307972, -0.00016333820019967817, - 0.00154284644355620550, + 0.0015428464435562055, -0.00294610256215044157, - 0.00418738764964404590, + 0.0041873876496440459, -0.00541825567389853709, 0.00646933040774220602, -0.00748277208151582919, 0.00830562244021265834, -0.00907061825831023162, - 0.00964110368904607870, + 0.0096411036890460787, -0.01014019773626791826, 0.01044729220941489553, -0.01067557998410621073, @@ -4878,7 +4879,7 @@ function ESERK5ConstantCache(zprev) -0.00789885749461721916, 0.00708614190125855282, -0.00622265948009756518, - 0.00527619758702206620, + 0.0052761975870220662, -0.00429235350162975038, 0.00325245584093616317, -0.00218969520623136984, @@ -4888,7 +4889,7 @@ function ESERK5ConstantCache(zprev) -0.01445652145870532888, 0.00146432348101391101, -0.00968307966899631042, - -0.00403566204880642220, + -0.0040356620488064222, -0.00354196905489630133, -0.01070414242240891496, 0.00353956565635837319, @@ -4903,7 +4904,7 @@ function ESERK5ConstantCache(zprev) -0.04239356606880857747, 0.03283482823510715937, -0.04419808812929799935, - 0.03334831499691787160, + 0.0333483149969178716, -0.04333342016229159432, 0.03105483961178938379, -0.03957152387718007591, @@ -4916,9 +4917,9 @@ function ESERK5ConstantCache(zprev) -0.00531553052469591059, 0.00128502662824293411, -0.01891109636698489957, - 0.01506268495555928080, + 0.0150626849555592808, -0.03258797297403857179, - 0.02835481410315863690, + 0.0283548141031586369, -0.04518640221924043188, 0.03996059904158115461, -0.05548790623673544031, @@ -4930,7 +4931,7 @@ function ESERK5ConstantCache(zprev) -0.06184636412768346886, 0.04765812178362360124, -0.05356080304102953799, - 0.03671302209368933200, + 0.036713022093689332, -0.04009473292749856504, 0.02096234654159766925, -0.02236584441841241513, @@ -4950,8 +4951,8 @@ function ESERK5ConstantCache(zprev) 0.02973413232954505089, -0.02629410711425022099, -0.00142970192145554405, - 0.01034679475727550910, - -0.04267791662234613620, + 0.0103467947572755091, + -0.0426779166223461362, 0.05502960007775929002, -0.08928494734019869206, 0.10175754228783552569, @@ -4978,18 +4979,18 @@ function ESERK5ConstantCache(zprev) -0.11945502501692079056, 0.23591999993218812359, -0.36509040356686273121, - 0.42489866070984111390, + 0.4248986607098411139, -0.39557592838574895389, 0.14146904141323382587, 0.42948039127818093963, -1.54890162951564702709, - -4.28661321834297659450, + -4.2866132183429765945, -4.70577132301904299538, 1.39653339748609717219, 0.34096667701802030326, -1.05507163472442222485, 1.16844107690506282538, - -0.94182556427257069220, + -0.9418255642725706922, 0.58067524663872327473, -0.18531936686387287527, -0.15629415957323911091, @@ -4999,20 +5000,20 @@ function ESERK5ConstantCache(zprev) -0.68686915912764578973, 0.63557657452913929319, -0.53139076907570281794, - 0.40808207368015692040, + 0.4080820736801569204, -0.26412890287120310839, 0.12863869073450065472, 0.00474238875210593325, - -0.11279334963630392730, + -0.1127933496363039273, 0.20677789092916057379, -0.26867981124860779163, 0.31352380344316116423, -0.32710096976390246049, - 0.32670875833580681480, + 0.3267087583358068148, -0.30047881435209605749, 0.26661050122879637048, - -0.21434866836612326280, - 0.16173585521610026050, + -0.2143486683661232628, + 0.1617358552161002605, -0.09825052823317732831, 0.04107597552857419204, 0.02060968067617998528, @@ -5031,7 +5032,7 @@ function ESERK5ConstantCache(zprev) -0.06531596356725787034, 0.02708529794941780602, 0.01763154885034263694, - -0.05709963036810618980, + -0.0570996303681061898, 0.10059390857103114869, -0.13696343860151377614, 0.17531309019831531337, @@ -5043,7 +5044,7 @@ function ESERK5ConstantCache(zprev) 0.29668569510878928241, -0.29663051707376886235, 0.29551015050380796678, - -0.28535487994257324740, + -0.2853548799425732474, 0.27446925792150511647, -0.25542485874008535873, 0.23625391243432658506, @@ -5052,7 +5053,7 @@ function ESERK5ConstantCache(zprev) -0.15300882326562026403, 0.12308742493189463174, -0.08858545231857363478, - 0.05644707290094673480, + 0.0564470729009467348, -0.02095747432239108976, -0.01137185210763438231, 0.04591084461314329235, @@ -5067,7 +5068,7 @@ function ESERK5ConstantCache(zprev) -0.25589566758286813597, 0.26642214379243894795, -0.27200779814198555728, - 0.27611536584597273780, + 0.2761153658459727378, -0.27552090609041418601, 0.27335398852374753753, -0.26684300269032396047, @@ -5078,11 +5079,11 @@ function ESERK5ConstantCache(zprev) 0.19862865101097632037, -0.17785245823410228416, 0.15603274174659914619, - -0.13211536971074444580, + -0.1321153697107444458, 0.10742608833687732062, -0.08132098746932948929, 0.05474247350944393131, - -0.02745097658927909620, + -0.0274509765892790962, 0.10334153582589750142, -0.06590242509369341473, 0.14421494605882798079, @@ -5103,15 +5104,15 @@ function ESERK5ConstantCache(zprev) 0.51458766384452481191, -0.41328375624758184603, 0.52601616434671738531, - -0.41058309698602535320, - 0.50839327045442572750, + -0.4105830969860253532, + 0.5083932704544257275, -0.37788078210186204497, 0.46029869606112128189, -0.31475751130787787968, 0.38238695191347576996, -0.22300123100521737629, 0.27762360742110198109, - -0.10678164074635418390, + -0.1067816407463541839, 0.15138914340860248897, 0.02732529738159397009, 0.01141582240039421686, @@ -5119,52 +5120,52 @@ function ESERK5ConstantCache(zprev) -0.13247296906839986508, 0.31202700058680188366, -0.26884374589189580229, - 0.43993293050021514690, + 0.4399329305002151469, -0.38536511592515904079, 0.54177147849324169826, -0.46974504568285901929, 0.60568512835390142524, -0.51086512013238982721, 0.62161497159696388337, - -0.50005679718943729650, - 0.58261774707691282860, + -0.5000567971894372965, + 0.5826177470769128286, -0.43243357472893312332, 0.48618320113565610674, -0.30815932689427166791, 0.33541500551428732324, - -0.13349947026812306050, - 0.13990629626041953260, + -0.1334994702681230605, + 0.1399062962604195326, 0.07852796210024547141, -0.08388472642112840272, 0.30810434773491929272, -0.31296645462022737449, - 0.52937202740206268370, + 0.5293720274020626837, -0.51905195080724797485, 0.71218966112314618933, -0.67086386598978586804, 0.82500757281100300933, -0.73758634701014924584, - 0.83888398088510862660, + 0.8388839808851086266, -0.69341102532240650458, 0.73249966100667029956, -0.52292840423158715168, 0.49779887139277656516, -0.22685167540857559265, - 0.14558610862462934010, + 0.1455861086246293401, 0.17277000874797393548, -0.28994910018630520865, 0.62906934949189075024, -0.74919427602801469401, 1.07021193046946994087, -1.14933334928805552799, - 1.40448470295919713990, + 1.4044847029591971399, -1.39280685637211520955, 1.53260468574866925984, -1.38388258107080241999, 1.36885172864666815329, -1.05447227624303163651, 0.87142904206594640204, - -0.39852767505060593400, + -0.398527675050605934, 0.07988473401840179289, 0.48919030347545833237, -0.84732268806369093195, @@ -5173,7 +5174,7 @@ function ESERK5ConstantCache(zprev) 1.90765925359115273707, -1.78720953378505131859, 1.62250965373195210617, - -0.94790311517628833560, + -0.9479031151762883356, 0.18097128969016501587, 1.06438301753637776237, -2.24392037366519447872, @@ -5182,19 +5183,19 @@ function ESERK5ConstantCache(zprev) 3.88856175500311973536, -1.36395704936458450618, -4.32867053143996027842, - 15.50601690336145033200, + 15.506016903361450332, 21.51797968325463017436, 15.65535183383512496391, - -4.63261223529149379630, + -4.6326122352914937963, -1.15813578250686766147, - 3.53033952376025617070, + 3.5303395237602561707, -3.90712907745208992694, 3.14360299921450092597, -1.93856602316381554374, 0.61267055909644174694, 0.52724714404495687248, -1.43676607040999404497, - 2.00251757123593554510, + 2.0025175712359355451, -2.30559789831337402788, 2.31336933311142400882, -2.14964446411590826003, @@ -5204,19 +5205,19 @@ function ESERK5ConstantCache(zprev) -0.47429012114823082547, 0.02981117995101359441, 0.32446888466741335977, - -0.63799837203266740460, + -0.6379983720326674046, 0.83898329044168518109, -0.98911218586252480645, 1.02957350243058010086, - -1.02933515921759344280, + -1.0293351592175934428, 0.93767902072336595243, -0.82628287688117696419, 0.64843110454000696397, -0.47498223626782953843, - 0.26029145489143512560, + 0.2602914548914351256, -0.07205664725076567356, -0.13607579300032224268, - 0.30083690379045346930, + 0.3008369037904534693, -0.47010201122054479095, 0.58545414896951297745, -0.69638544392744483602, @@ -5241,9 +5242,9 @@ function ESERK5ConstantCache(zprev) -0.90290045590229683903, 0.93933703257438172507, -0.97554959259612139544, - 0.97655789982150453810, + 0.9765578998215045381, -0.97706965919352106731, - 0.94436412128966551460, + 0.9443641212896655146, -0.91211012639030830673, 0.84968791865701764898, -0.78956389566734042074, @@ -5254,51 +5255,51 @@ function ESERK5ConstantCache(zprev) 0.30634066713275664995, -0.20205612787733903679, 0.08416652165184297651, - 0.02110947258827128650, + 0.0211094725882712865, -0.13604441076455769943, 0.23623035799048627825, -0.34255333642579482989, - 0.43246450986081441670, + 0.4324645098608144167, -0.52549942642349400934, 0.60099382567558001789, -0.67714770079049424467, 0.73518755149350811795, -0.79197547439519278001, - 0.83061968262313712330, + 0.8306196826231371233, -0.86662891512464912402, 0.88497295107608886511, - -0.89978263239145461760, + -0.8997826323914546176, 0.89786194076384762131, -0.89193387442232285878, 0.87060544910769943616, -0.84515958034640781271, 0.80597413560050212844, - -0.76285986447711606750, + -0.7628598644771160675, 0.70793438387749363372, -0.64950608543059207278, 0.58140369215004261694, -0.51040596710564489769, 0.43202724974913303546, -0.35149270207361155149, - 0.26598002389963359970, + 0.2659800238996335997, -0.17913990995038300835, 0.08979396242173713627, -0.27310096588509114035, 0.17667906041796727079, -0.35111110546665791343, - -0.03111087033866121940, + -0.0311108703386612194, -0.13208994979049404339, -0.25801470927094566354, 0.10072640516295228164, -0.49293854211483661976, - 0.33539223890585495580, + 0.3353922389058549558, -0.72321044267986567267, 0.55865323022157487021, -0.93515510982405547491, 0.75659116460883946154, -1.11480494718209377503, 0.91539648867717293701, - -1.24872792340101601560, + -1.2487279234010160156, 1.02224397309705317127, -1.32494214858911885102, 1.06623588958066828347, @@ -5314,7 +5315,7 @@ function ESERK5ConstantCache(zprev) 0.21254102722868209452, -0.31438060756855878974, -0.13095152392890044291, - 0.04175319343549319800, + 0.041753193435493198, -0.49274291381312651517, 0.40336897836617796598, -0.84627248780708497211, @@ -5325,7 +5326,7 @@ function ESERK5ConstantCache(zprev) 1.23150268094935366747, -1.56102812901654863786, 1.32520040458095000879, - -1.59124860795435685290, + -1.5912486079543568529, 1.28860625615230861563, -1.48408803465849348235, 1.11025351122541948712, @@ -5351,7 +5352,7 @@ function ESERK5ConstantCache(zprev) -1.43118001601214328566, 0.79191024610204907574, -0.61268121378019546608, - -0.14212867828365066680, + -0.1421286782836506668, 0.40980624362406548045, -1.21651746626817591768, 1.49380341554284634675, @@ -5359,15 +5360,15 @@ function ESERK5ConstantCache(zprev) 2.44103227844107584232, -3.05105852051619219623, 3.01771267054312453126, - -3.35354423704569715170, + -3.3535442370456971517, 2.99432709194239299322, -2.96129672467136595415, 2.20757877879168828983, -1.77405635274947837132, - 0.64294261167350641450, + 0.6429426116735064145, 0.11333192253359228308, -1.47228593963367426767, - 2.32075738733745051690, + 2.3207573873374505169, -3.59054344209839459978, 4.12837916637901436445, -4.83012911792652399612, @@ -5382,13 +5383,13 @@ function ESERK5ConstantCache(zprev) -9.24548819501871044224, 3.20759495956306484032, 10.43274453756728448184, - -37.23654329154006603630, + -37.2365432915400660363, -34.54087677308262271936, -12.49560383390995177422, 3.68221746677957462168, 0.95154069704314259148, -2.84446082213820039541, - 3.14691764954337172000, + 3.14691764954337172, -2.53126562539820776365, 1.56817488948121375181, -0.50268616723770020993, @@ -5396,7 +5397,7 @@ function ESERK5ConstantCache(zprev) 1.14063435098903775966, -1.59233569631413152123, 1.83932582633789887261, - -1.84460296929601641480, + -1.8446029692960164148, 1.71796905619354900452, -1.43971982009848331607, 1.12050904953787688889, @@ -5419,7 +5420,7 @@ function ESERK5ConstantCache(zprev) -0.24974494354033760501, 0.38679060313154584039, -0.47654189116248674152, - 0.56666389938801131620, + 0.5666638993880113162, -0.60623017293862324628, 0.64365396703553090507, -0.63157973424709012988, @@ -5428,8 +5429,8 @@ function ESERK5ConstantCache(zprev) 0.50557620914128087453, -0.41181007513356038263, 0.32666371970835772487, - -0.21012648497826896810, - 0.10821060349396358080, + -0.2101264849782689681, + 0.1082106034939635808, 0.01762942686501338396, -0.12315591394402952696, 0.24577124529802985009, @@ -5442,11 +5443,11 @@ function ESERK5ConstantCache(zprev) -0.76553504316605081037, 0.79707063547604994902, -0.79775108759850221762, - 0.80057727930143751660, + 0.8005772793014375166, -0.77425024309146217583, 0.75069405520299503642, -0.70053734369402298476, - 0.65449652701283078660, + 0.6544965270128307866, -0.58499722870200121516, 0.52141931979477784687, -0.43786175494145890275, @@ -5462,7 +5463,7 @@ function ESERK5ConstantCache(zprev) 0.39415268368556177769, -0.45411672533479879865, 0.51611796516475483276, - -0.56236058008034595090, + -0.5623605800803459509, 0.60898527324925133541, -0.63994756858572976466, 0.67005817289651226076, @@ -5522,7 +5523,7 @@ function ESERK5ConstantCache(zprev) 0.85696953218343663305, -0.76618233684966174923, 1.02573411434408146015, - -0.90392167949443757990, + -0.9039216794944375799, 1.12713843985326822583, -0.96571265856805221794, 1.14504270024545107276, @@ -5538,13 +5539,13 @@ function ESERK5ConstantCache(zprev) -0.10937311308531975917, 0.49203438436126778477, -0.51357905408491955068, - 0.88463047971746888720, + 0.8846304797174688872, -0.88297011089432853037, 1.21715459968088546283, -1.16643532118072990045, 1.43805305288446039214, -1.31359530988832440279, - 1.49995215301323736590, + 1.4999521530132373659, -1.28210371903057174237, 1.36770844357970910998, -1.04629899680234728088, @@ -5566,7 +5567,7 @@ function ESERK5ConstantCache(zprev) 1.05898947542213939244, -0.30524297907008096642, -0.19574471453177116897, - 1.09999417118643583180, + 1.0999941711864358318, -1.66131630684222364458, 2.50478927532082717988, -2.85796307851147091128, @@ -5577,9 +5578,9 @@ function ESERK5ConstantCache(zprev) 0.49018219736740714643, 1.52308754700474735522, -3.43008479406560562452, - 5.54422540780052397480, + 5.5442254078005239748, -6.54784372603158271176, - 6.12814125245676510900, + 6.128141252456765109, -2.11142062321759693688, -6.97310750382111699253, 24.83341625303393129798, @@ -5596,7 +5597,7 @@ function ESERK5ConstantCache(zprev) -0.01444294468780636664, 0.01433443759535474836, -0.01177587232279883947, - 0.01150773106450128820, + 0.0115077310645012882, -0.00881891303166568337, 0.00845186719753602406, -0.00569733325623310999, @@ -5604,15 +5605,15 @@ function ESERK5ConstantCache(zprev) -0.00254960587196999483, 0.00219319801546034908, 0.00047737794674568485, - -0.00071734623938132010, + -0.0007173462393813201, 0.00323439419343099326, -0.00328469734260557677, 0.00557726943364905692, -0.00537034916782567952, 0.00737542790601287707, - -0.00685401666082526180, + -0.0068540166608252618, 0.00852130244232333911, - -0.00764330782525377700, + -0.007643307825253777, 0.00894012053585366458, -0.00768345164777630135, 0.00859937698192963888, @@ -5644,14 +5645,14 @@ function ESERK5ConstantCache(zprev) 0.00120637774937722782, -0.00205840103346118571, 0.00528828624697432262, - -0.00609641164273012470, + -0.0060964116427301247, 0.00912358252106915298, -0.00956210566736690783, - 0.01204990090612900050, + 0.0120499009061290005, -0.01178362602391566129, 0.01341279599285653303, -0.01215477748057069117, - 0.01268853032845031550, + 0.0126885303284503155, -0.01027098767733621021, 0.00962968604151016178, -0.00607965681601644291, @@ -5672,13 +5673,13 @@ function ESERK5ConstantCache(zprev) 0.01189072969600174154, -0.01789294682783109172, 0.02530523772723293138, - -0.02834585464429247720, + -0.0283458546442924772, 0.03056818387789730571, -0.02612048057853497834, 0.01884016717864587034, -0.00371709120928178901, - -0.01374075901292644460, - 0.03567982500997449180, + -0.0137407590129264446, + 0.0356798250099744918, -0.05206078298088805123, 0.05821188167101448707, -0.03419603540469017683, @@ -5697,14 +5698,14 @@ function ESERK5ConstantCache(zprev) -0.17060825697848186477, 0.19752070100840343758, -0.19226063156464226478, - 0.15986124557182210260, + 0.1598612455718221026, -0.11361184944804329777, 0.05806922506269369261, -0.00420208622161479667, -0.04640289569205458681, 0.08618727324844195625, -0.11667866703173192244, - 0.13327124002307899620, + 0.1332712400230789962, -0.13979994089325584183, 0.13363693215566449513, -0.11990858349257832449, @@ -5739,7 +5740,7 @@ function ESERK5ConstantCache(zprev) 0.03438291182537418778, -0.03633557286619564647, 0.03550656827953529299, - -0.03419285455189944450, + -0.0341928545518994445, 0.03052909353141675108, -0.02676848406081934473, 0.02116691922334373172, @@ -5765,15 +5766,15 @@ function ESERK5ConstantCache(zprev) -0.01369679622548651381, 0.00908032835787784751, -0.00486678390949193442, - 0.00023454759810837380, + 0.0002345475981083738, 0.00382019786298401585, -0.00804029242815594396, 0.01153707990334726201, -0.01498219312680814166, 0.01760098683364032593, - -0.01999921217116263500, + -0.019999212171162635, 0.02152039658761849966, - -0.02270737553312262430, + -0.0227073755331226243, 0.02302364881785022577, -0.02294977413929919635, 0.02206875713015202939, @@ -5781,14 +5782,14 @@ function ESERK5ConstantCache(zprev) 0.01883551340973871682, -0.01653274509499207123, 0.01370170839850487488, - -0.01061955584378478090, + -0.0106195558437847809, 0.00720594413144663975, -0.00365944620375080378, -0.24790171585233580775, 0.44868009655293444871, -0.49354739718029305706, - 0.43680750450800137630, - -0.47202163091833060360, + 0.4368075045080013763, + -0.4720216309183306036, 0.40578305474007447806, -0.43166331590609952062, 0.35645182638639277828, @@ -5797,7 +5798,7 @@ function ESERK5ConstantCache(zprev) -0.30033839524972344437, 0.21044467014182605125, -0.21442220042661899737, - 0.11964657827210202490, + 0.1196465782721020249, -0.11972378680971779152, 0.02220779355561379453, -0.02068711250506110808, @@ -5826,7 +5827,7 @@ function ESERK5ConstantCache(zprev) -0.06851226718905138735, -0.03503856499952483911, 0.04219037292470857042, - -0.14329253559813276420, + -0.1432925355981327642, 0.14524799686818867794, -0.23825937340438552159, 0.22934822170680230213, @@ -5844,7 +5845,7 @@ function ESERK5ConstantCache(zprev) -0.06885876946708764657, 0.10071203883822754666, -0.22850121039958568026, - 0.25834176267859837450, + 0.2583417626785983745, -0.37774180810747853831, 0.39259036510304318179, -0.49019217183139951466, @@ -5866,7 +5867,7 @@ function ESERK5ConstantCache(zprev) 0.64792560086404737962, -0.64791204794391710209, 0.49407947648253308648, - -0.37536860255124127050, + -0.3753686025512412705, 0.10674498288091945064, 0.11097900844077181193, -0.44843556671946094294, @@ -5888,9 +5889,9 @@ function ESERK5ConstantCache(zprev) -15.50289707069072164813, 2.72067426100263931588, 3.22433091892078849128, - -5.04487959880503922250, + -5.0448795988050392225, 4.66478662857695436372, - -3.24865410648482333400, + -3.248654106484823334, 1.59993252257861184873, -0.09250749085981470332, -1.01666259164566263884, @@ -5954,7 +5955,7 @@ function ESERK5ConstantCache(zprev) -0.15287208047599759597, 0.18812686953340232443, -0.20574428483735582307, - 0.22310540609946374890, + 0.2231054060994637489, -0.22338624786091507146, 0.22332503119014773807, -0.20763175460049790311, @@ -5976,13 +5977,13 @@ function ESERK5ConstantCache(zprev) 0.26125519796613871915, -0.26087943747133557348, 0.25715113031146535905, - -0.24494666411181381660, + -0.2449466641118138166, 0.22927980338845094233, -0.20639592317764823837, 0.18043528139429534929, -0.14896949958795419056, 0.11521501362670846791, - -0.07801288028129715890, + -0.0780128802812971589, 0.03959332246701368491, 1.09663738243983011067, -1.92379793391949727166, @@ -6001,7 +6002,7 @@ function ESERK5ConstantCache(zprev) 0.51302461908120233769, 0.02970571526542764573, 0.01427244761080837671, - 0.53313371175749657560, + 0.5331337117574965756, -0.48717057545884151493, 1.02449823923009675219, -0.96129037944991535536, @@ -6009,7 +6010,7 @@ function ESERK5ConstantCache(zprev) -1.37689302786376122079, 1.84748666115071813465, -1.70352368641137830174, - 2.11876019827830219810, + 2.1187601982783021981, -1.91369730112828873025, 2.26170465389940700263, -1.98533573879585500954, @@ -6020,7 +6021,7 @@ function ESERK5ConstantCache(zprev) 1.78388705444898576502, -1.28039125633797956638, 1.33054401699825919358, - -0.76758362859336315420, + -0.7675836285933631542, 0.76659118406530080136, -0.16362880735076204552, 0.13419417516610090968, @@ -6030,7 +6031,7 @@ function ESERK5ConstantCache(zprev) -1.11115392736647722316, 1.66285691024647541703, -1.59496748308463431876, - 2.06464933630143265830, + 2.0646493363014326583, -1.90030296064724835148, 2.25949222649405534469, -1.97388566278103216867, @@ -6044,7 +6045,7 @@ function ESERK5ConstantCache(zprev) 0.28346071513254322838, -0.47409278526489445627, 1.24551437576320767064, - -1.42262293908757064820, + -1.4226229390875706482, 2.14205796618773769424, -2.22794690743668466482, 2.81515670600395040424, @@ -6052,7 +6053,7 @@ function ESERK5ConstantCache(zprev) 3.10908508286684215349, -2.78480881105691890909, 2.89971191859872146068, - -2.29687244376979604610, + -2.2968724437697960461, 2.12936057569693470981, -1.25532350604126508031, 0.84239204620073704355, @@ -6063,7 +6064,7 @@ function ESERK5ConstantCache(zprev) 3.43301787922598666825, -3.68930041882581960522, 4.29528921959152309995, - -4.04910829870314969980, + -4.0491082987031496998, 4.04971740195914442495, -3.12383944670723634474, 2.41064848305173606846, @@ -6087,10 +6088,10 @@ function ESERK5ConstantCache(zprev) 53.76776744529013996043, 37.35495129269128256055, -6.68281461361596829107, - -7.59289135770639411760, + -7.5928913577063941176, 11.95868773474363422338, -11.05553049984535185501, - 7.65484357873777110370, + 7.6548435787377711037, -3.70821204427738315701, 0.08982613679187069489, 2.56080553016920919873, @@ -6120,10 +6121,10 @@ function ESERK5ConstantCache(zprev) 2.83529734789504406223, -3.04492677564285063596, 3.08759286982345138028, - -3.07443642553156459840, + -3.0744364255315645984, 2.91461534413267164823, -2.72190640310839393479, - 2.41264058676381232260, + 2.4126405867638123226, -2.09982679530212079655, 1.70385575848873971339, -1.33421004116368902004, @@ -6142,7 +6143,7 @@ function ESERK5ConstantCache(zprev) -1.31064841059041081728, 1.20919461635106695319, -1.11542584480963391513, - 0.96633151697179497930, + 0.9663315169717949793, -0.83492461127767492179, 0.66134841579255765343, -0.51514187272547340424, @@ -6175,26 +6176,26 @@ function ESERK5ConstantCache(zprev) 0.61848669529558908398, -0.63885805812230145317, 0.63588374357254640046, - -0.62620491857076998610, + -0.6262049185707699861, 0.59516323826174644118, - -0.55688902950142504800, + -0.556889029501425048, 0.50050365055454981711, -0.43754428867546474313, 0.36080973867979743153, -0.27912358429838690643, 0.18882603700794040047, - -0.09587765297073458370, + -0.0958776529707345837, -1.64453971178319569013, - 2.79775577400067509970, + 2.7977557740006750997, -3.40597963700915018492, 2.83787111409367609483, -3.36506313742919127563, 2.71577686622319136589, -3.15948050150089931876, - 2.42864504355508925570, + 2.4286450435550892557, -2.79069608662686308165, 1.98246568926597732663, - -2.26941404172727656530, + -2.2694140417272765653, 1.39279299078000518008, -1.61611459905602217191, 0.68504193264185020418, @@ -6206,14 +6207,14 @@ function ESERK5ConstantCache(zprev) -1.75501034161674529521, 1.58195028250438807227, -2.50762630768408234516, - 2.28094803590409833660, + 2.2809480359040983366, -3.13742017085452351566, 2.82962337595736812546, -3.59058092155274533042, - 3.17711908193050440730, - -3.82036314338006421920, + 3.1771190819305044073, + -3.8203631433800642192, 3.28198592234586383753, - -3.79180350106356511830, + -3.7918035010635651183, 3.11691756323852597887, -3.48637865527256973763, 2.67322546659711290928, @@ -6225,7 +6226,7 @@ function ESERK5ConstantCache(zprev) -0.06766970659627666307, 0.09690197988098522841, -1.23903049245755281227, - 1.26671953201288256530, + 1.2667195320128825653, -2.37681810078712718592, 2.34399339388085836688, -3.36124272254386369241, @@ -6242,7 +6243,7 @@ function ESERK5ConstantCache(zprev) 1.20259925225684161099, -0.94148843859504283138, -0.47329752863315599498, - 0.82938660417546528070, + 0.8293866041754652807, -2.27976648051501751269, 2.60815252358842242231, -3.95858749156243661105, @@ -6255,7 +6256,7 @@ function ESERK5ConstantCache(zprev) 4.22848123775048279072, -3.91528072039974395224, 2.27436757474403528079, - -1.50220717446676621520, + -1.5022071744667662152, -0.51450999760582438736, 1.54923189504886993362, -3.67881508298135306845, @@ -6275,15 +6276,15 @@ function ESERK5ConstantCache(zprev) 12.07609584619722298271, -13.10957864684615614692, 11.15056877169092608426, - -7.93475186439988267040, - 1.20210170159272511370, - 6.56655609979098642270, + -7.9347518643998826704, + 1.2021017015927251137, + 6.5665560997909864227, -16.34518119417681347727, 23.62617001005075678677, -26.32579322136927402198, - 15.50549489492130561530, + 15.5054948949213056153, 17.18983026178549522456, - -89.37135780150485686590, + -89.3713578015048568659, -71.42601040334382389574, -24.97946305028164104556, 4.53635983337713799557, @@ -6292,26 +6293,26 @@ function ESERK5ConstantCache(zprev) 7.29315353388449327809, -5.02267209387324609082, 2.39654421007790441323, - 0.01834677202144067640, + 0.0183467720214406764, -1.77995664612683124339, - 2.89897816582955547560, + 2.8989781658295554756, -3.30224725275123764945, 3.21184723212558598249, -2.66466064132809776765, 1.91668024669245284919, -0.99815118244849243556, - 0.12695360645134035060, + 0.1269536064513403506, 0.71320582013133171362, -1.35999689488883723776, - 1.87856009976098703440, + 1.8785600997609870344, -2.15479505003412707964, - 2.28977950832453780450, + 2.2897795083245378045, -2.20205125584584360254, 2.01237215295155102979, -1.65635603862205771364, 1.26041587103768648603, -0.76520582562906380719, - 0.29294146502382839570, + 0.2929414650238283957, 0.21833846536054857257, -0.65620711829475186772, 1.08897014822220361552, @@ -6319,10 +6320,10 @@ function ESERK5ConstantCache(zprev) 1.71304243515978238399, -1.89085466024487725001, 2.03094652186987412179, - -2.05426613957844983460, + -2.0542661395784498346, 2.04606404007637809883, -1.93480242166803706461, - 1.80714739486116160450, + 1.8071473948611616045, -1.59668055825435706296, 1.38921436060893421782, -1.12137443816435444788, @@ -6340,7 +6341,7 @@ function ESERK5ConstantCache(zprev) 0.93513485691034825553, -0.91120541460438519987, 0.89026964840099820364, - -0.81998754012288543880, + -0.8199875401228854388, 0.75849997427672344319, -0.65639761900633408764, 0.56960698172243706683, @@ -6354,12 +6355,12 @@ function ESERK5ConstantCache(zprev) -0.19140786424519162789, 0.25402968727342567501, -0.28302630935024408743, - 0.31675999134977617100, - -0.31806099697713213770, - 0.32359460483361524030, + 0.316759991349776171, + -0.3180609969771321377, + 0.3235946048336152403, -0.29931860325110792864, 0.28004961583720300311, - -0.23470520193537416920, + -0.2347052019353741692, 0.19607326209063535849, -0.13584447792119416776, 0.08458804700067297511, @@ -6398,11 +6399,11 @@ function ESERK5ConstantCache(zprev) -0.69813568823544835951, 0.85708213904319163756, -0.34184303315002650958, - 0.47279822309226060550, + 0.4727982230922606055, 0.06398475294822453252, 0.05003745744481236796, 0.49601929485325535474, - -0.38558002823895393130, + -0.3855800282389539313, 0.92663594885142064328, -0.80477097797295293891, 1.32529687270679175093, @@ -6417,7 +6418,7 @@ function ESERK5ConstantCache(zprev) -1.61009115757004206415, 1.82852798758430035164, -1.36136940215489543604, - 1.50426254884245302890, + 1.5042625488424530289, -0.96628306086754012227, 1.04238402848634170716, -0.44597374512999482521, @@ -6431,7 +6432,7 @@ function ESERK5ConstantCache(zprev) 1.98509411947040215196, -1.88200758223313591166, 2.37029159539997680284, - -2.16566489033608222670, + -2.1656648903360822267, 2.53718021519738101688, -2.20527875538699236202, 2.43928239872057694981, @@ -6453,7 +6454,7 @@ function ESERK5ConstantCache(zprev) -2.97859321002834764869, 3.10217230925030085231, -2.44893743691231691173, - 2.26970360661050829520, + 2.2697036066105082952, -1.32650645469460726211, 0.88441767630718393089, 0.27368454740086617383, @@ -6461,7 +6462,7 @@ function ESERK5ConstantCache(zprev) 2.08873255027869353384, -2.64469858783492917098, 3.71247134469472905849, - -3.98786095656984906910, + -3.9878609565698490691, 4.64316071123357509975, -4.38191821997721220328, 4.39001350594895445312, @@ -6469,11 +6470,11 @@ function ESERK5ConstantCache(zprev) 2.64778174563423451815, -0.92324102549943642959, -0.46917678731335588083, - 2.63710475250080511600, + 2.637104752500805116, -4.17895183658183455577, 6.09361392287548309099, -6.88418509873007877786, - 7.47569870705499273100, + 7.475698707054992731, -6.35574292855415823311, 4.51953072436962077774, -0.67251745118328998263, @@ -6497,15 +6498,15 @@ function ESERK5ConstantCache(zprev) -0.03552824163152198261, 0.03910475612979191773, -0.03669284588345672615, - 0.03041414230122781170, + 0.0304141423012278117, -0.02166503780929384879, 0.01234501991475442546, -0.00331253856717190348, -0.00422556410926025992, 0.01010001203395239668, - -0.01374655701729816590, + -0.0137465570172981659, 0.01551870334965804385, - -0.01527169623291800560, + -0.0152716962329180056, 0.01364244330612397228, -0.01067614700104903107, 0.00708900437716333646, @@ -6515,17 +6516,17 @@ function ESERK5ConstantCache(zprev) -0.00836221428473684324, 0.01118585086561293962, -0.01310994572966157901, - 0.01438131530133532690, - -0.01471525126685136430, + 0.0143813153013353269, + -0.0147152512668513643, 0.01444512317318148373, -0.01337140568916795474, - 0.01187775709940674940, + 0.0118777570994067494, -0.00981316433249610105, - 0.00757641247062708530, + 0.0075764124706270853, -0.00503276220735785536, - 0.00256775735666754570, + 0.0025677573566675457, -0.00003900865949015105, - -0.00220042106692536340, + -0.0022004210669253634, 0.00431513016487588847, -0.00599462985444748023, 0.00743170074732989877, @@ -6545,10 +6546,10 @@ function ESERK5ConstantCache(zprev) -0.00421317697635954693, 0.00556077953375250841, -0.00664163982996249496, - 0.00759938051146826030, - -0.00824737696565282230, + 0.0075993805114682603, + -0.0082473769656528223, 0.00873465953658754402, - -0.00889625565385141100, + -0.008896255653851411, 0.00888592358460392473, -0.00855909139070902721, 0.00807251478484842869, @@ -6559,8 +6560,8 @@ function ESERK5ConstantCache(zprev) -0.00262724195707964838, 0.00118960296696952474, 0.00036681820318649956, - -0.00189911110013220720, - 0.00348685302958636400, + -0.0018991111001322072, + 0.003486853029586364, -0.00499677935995595981, 0.00650261481449256138, -0.00788250863875818164, @@ -6570,8 +6571,8 @@ function ESERK5ConstantCache(zprev) -0.01228461904170208979, 0.01301589329662241126, -0.01353380052843492637, - 0.01389935965329834600, - -0.01404485917764696640, + 0.013899359653298346, + -0.0140448591776469664, 0.01402874182784835319, -0.01379700377135894933, 0.01340512979979466626, @@ -6601,7 +6602,7 @@ function ESERK5ConstantCache(zprev) 0.02439821564128215325, -0.01020407823154323608, 0.01803007227836072798, - -0.00507616066304967910, + -0.0050761606630496791, 0.01426718600934222259, -0.00277610901912689985, 0.01347890436235433045, @@ -6638,7 +6639,7 @@ function ESERK5ConstantCache(zprev) 0.13854584228390662282, -0.13535109503481884685, 0.15050007669614651196, - -0.14088130370321869100, + -0.140881303703218691, 0.14885852687249229165, -0.13150383536685081309, 0.13138864786538803631, @@ -6649,7 +6650,7 @@ function ESERK5ConstantCache(zprev) -0.01182781649646554543, -0.00655311771995224432, 0.04662515347659873521, - -0.06455660768488237500, + -0.064556607684882375, 0.10170661698437884202, -0.11410399361613450531, 0.14305635854779330529, @@ -6665,17 +6666,17 @@ function ESERK5ConstantCache(zprev) -0.05972841358667026895, 0.10931068654166656295, -0.13018513094169784083, - 0.16095142427731981560, + 0.1609514242773198156, -0.15530622225242876611, 0.15270854117408197426, -0.10867930922786582515, - 0.06557918996043142490, + 0.0655791899604314249, 0.01694991049547012879, -0.09125072614689509753, 0.19132802683361124774, -0.26256284726206963187, 0.33210481816065201555, - -0.33988448468680904080, + -0.3398844846868090408, 0.31090012493178870168, -0.18913459338067623028, 0.01388829420044625923, @@ -6703,17 +6704,17 @@ function ESERK5ConstantCache(zprev) -0.06708731848299970268, 0.36510650743541495089, -0.59771605907161784454, - 0.73940216052758600540, + 0.7394021605275860054, -0.80723941930163589653, - 0.79256680723037076230, - -0.72372680538159694930, + 0.7925668072303707623, + -0.7237268053815969493, 0.59972930584583827862, -0.45201964162458185825, 0.28045239873712485279, -0.11419879400043991824, -0.04999941356998766073, 0.18790273860095926817, - -0.30740918979955950130, + -0.3074091897995595013, 0.38980012391514373693, -0.44746017429740742033, 0.46648308786071390752, @@ -6740,7 +6741,7 @@ function ESERK5ConstantCache(zprev) 0.14232567332824985762, -0.07695726915478992569, 0.00540777968883854408, - 0.06087142698992912410, + 0.0608714269899291241, -0.12896225465253041698, 0.18815070257669386233, -0.24553618855464667825, @@ -6768,7 +6769,7 @@ function ESERK5ConstantCache(zprev) 0.37563696109460348316, -0.41933626529467682431, 0.45500880742719329586, - -0.48584291044057398290, + -0.4858429104405739829, 0.50794400744420220573, -0.52433144455239832915, 0.53174041474773003912, @@ -6777,13 +6778,13 @@ function ESERK5ConstantCache(zprev) -0.51188975197929065253, 0.49009808705447405197, -0.46258349779718982431, - 0.42787482807629256820, - -0.38817634858989397140, + 0.4278748280762925682, + -0.3881763485898939714, 0.34256114417541655426, -0.29296186150770586742, 0.23896329309273042774, -0.18219311991533587713, - 0.12271396213765967120, + 0.1227139621376596712, -0.06181427014471471693, 0.23269112336812552977, -0.57479221004746683388, @@ -6792,7 +6793,7 @@ function ESERK5ConstantCache(zprev) 0.16635443309838909842, -0.25560669723290724287, -0.00620652734869082175, - -0.08196267260397938070, + -0.0819626726039793807, -0.17722891890201919463, 0.08302553253196406913, -0.33233237270895182869, @@ -6800,20 +6801,20 @@ function ESERK5ConstantCache(zprev) -0.45720144489922498465, 0.32972221729502099175, -0.53894710873468554269, - 0.38600438055307545460, + 0.3860043805530754546, -0.56750647273894672118, 0.38554866235672197172, -0.53696557059604144158, 0.32495297958079966127, -0.44667802741378875853, 0.20652426613118238241, - -0.30204737542232590330, + -0.3020473754223259033, 0.03884391643385309151, -0.11484498374257957887, -0.16319011131956603911, 0.09704880658829546924, -0.37894420472753431728, - 0.31056371288269074560, + 0.3105637128826907456, -0.58331636282948129413, 0.49905819529451106442, -0.74870159482900500159, @@ -6825,15 +6826,15 @@ function ESERK5ConstantCache(zprev) -0.75545616340494470276, 0.48862806929039048764, -0.53909772631561836409, - 0.21540797668689751210, + 0.2154079766868975121, -0.21192323992940667599, -0.16046776558471881335, 0.20585370413223078034, - -0.61096916330328643330, + -0.6109691633032864333, 0.67844555788278715358, -1.09286026167649308327, 1.15575208165788390069, - -1.55005534229147423630, + -1.5500553422914742363, 1.57688872586395323339, -1.91837047605004595852, 1.87617945508146855005, @@ -6843,11 +6844,11 @@ function ESERK5ConstantCache(zprev) 1.87462140279192746029, -1.89271911794992453437, 1.50213390501875831973, - -1.39428976138343285740, - 0.88611831079774050490, + -1.3942897613834328574, + 0.8861183107977405049, -0.67422326383492270363, 0.08174771122438841131, - 0.18941177480879917150, + 0.1894117748087991715, -0.81028751176786439903, 1.07466269976857264901, -1.64937173410623727499, @@ -6873,11 +6874,11 @@ function ESERK5ConstantCache(zprev) -0.10534505333225561985, 1.29851904585487543109, -2.90628301936495292424, - 4.05284487975245966140, + 4.0528448797524596614, -5.17422142079721858465, 5.30767257259646907386, -4.85451323766168219009, - 2.91710198864776648620, + 2.9171019886477664862, -0.12530929200663440404, -3.93341697030713266514, 7.76442685932752230116, @@ -6893,7 +6894,7 @@ function ESERK5ConstantCache(zprev) 11.61132241904219775108, -5.67559285299951632453, -0.02378817676461228436, - 4.39874247699308718040, + 4.3987424769930871804, -6.91668592424010508779, 7.78459698313771664147, -7.19969830463170890056, @@ -6908,7 +6909,7 @@ function ESERK5ConstantCache(zprev) -5.06898134626991136997, 4.64884129365215947871, -3.88808597462040061998, - 2.99256038135772772790, + 2.9925603813577277279, -1.94456733125897329728, 0.93587878697783788429, 0.06943966425542394405, @@ -6916,7 +6917,7 @@ function ESERK5ConstantCache(zprev) 1.64804724443378125542, -2.15647714708087789859, 2.52474463894961642652, - -2.65396374954058655860, + -2.6539637495405865586, 2.65386724411199326212, -2.44687429702909176044, 2.15393223223480223538, @@ -6954,12 +6955,12 @@ function ESERK5ConstantCache(zprev) 2.48388582555827319709, -2.30123970963029611525, 2.09282251921427731034, - -1.81813267026174885110, + -1.8181326702617488511, 1.52805400453418949169, -1.18605401942532640014, 0.84098946569405652607, -0.45965290632158856132, - 0.08825850810918667300, + 0.088258508109186673, 0.30365267007587143366, -0.67304044703124321636, 1.04809507486065123238, @@ -6970,17 +6971,17 @@ function ESERK5ConstantCache(zprev) -2.50899027095477089588, 2.70496468125288869189, -2.84707814029071837325, - 2.95702349598868075020, + 2.9570234959886807502, -3.01180299887931735014, 3.03163045551319054738, -2.99766161960266819264, - 2.92853981188776169020, + 2.9285398118877616902, -2.80945814498024803996, 2.65735201385045627376, -2.46129723772904673851, 2.23635228184314005517, -1.97529562735753305702, - 1.69111991102168590650, + 1.6911199110216859065, -1.38011099087885424908, 1.05299550134558383974, -0.70936327527431541906, @@ -6995,14 +6996,14 @@ function ESERK5ConstantCache(zprev) -1.06333409285941349331, 2.18462019709368604481, -1.78190991500392081903, - 2.83539157204250402700, + 2.835391572042504027, -2.35126306519681893548, 3.30773099227275402257, -2.71508373759041443662, 3.55024299416135091789, -2.82828476121430449908, - 3.52550938432355787100, - -2.66241394420670030030, + 3.525509384323557871, + -2.6624139442067003003, 3.21524555055450900198, -2.21042750064333670679, 2.62456012406725180952, @@ -7013,7 +7014,7 @@ function ESERK5ConstantCache(zprev) 0.54796692404553959399, -0.38256340050673981468, 1.69901178763148652529, - -1.52059636260962238730, + -1.5205963626096223873, 2.79248904980674250709, -2.53995822759773881572, 3.70505710473037241925, @@ -7024,19 +7025,19 @@ function ESERK5ConstantCache(zprev) -3.69831426316721412206, 4.22718520109861728429, -3.15123624076297748076, - 3.41707752859808788770, + 3.4170775285980878877, -2.08466641415312325947, 2.10555053000396563689, - -0.55085583144702754410, + -0.5508558314470275441, 0.37761074510583347852, 1.33177515466705864711, -1.61518594963931749753, 3.37986807371402120381, - -3.66016914467586929050, + -3.6601691446758692905, 5.35517121810088703171, -5.49853118815242325468, - 6.98466141721870137360, - -6.85066746883698041160, + 6.9846614172187013736, + -6.8506674688369804116, 7.99100996771155092091, -7.45147915518861303497, 8.13220904872104455308, @@ -7044,17 +7045,17 @@ function ESERK5ConstantCache(zprev) 7.24728114898880537709, -5.67409929979710003778, 5.30275203966467856276, - -3.23899945614523643300, + -3.238999456145236433, 2.43219048317164476813, -0.01536581125694595935, - -1.04102538953280743250, - 3.57827355811271186070, + -1.0410253895328074325, + 3.5782735581127118607, -4.60890278724715329872, 6.95535607511645270762, -7.62295446835915768702, 9.42824208285969334042, -9.38543450833235581854, - 10.32424109590092520250, + 10.3242410959009252025, -9.28943903512750068785, 9.14751512607658590071, -6.99843713511523457527, @@ -7074,12 +7075,12 @@ function ESERK5ConstantCache(zprev) -4.88321932598324082164, 11.66021866895103720196, -16.50026658159707082518, - 21.24168859330157488330, + 21.2416885933015748833, -21.83402225245405503529, - 19.96864837763820688110, + 19.9686483776382068811, -11.86965693859903758778, 0.18717099178225682365, - 16.81620062849824392970, + 16.8162006284982439297, -32.85944671548272566497, 43.73754819195137599763, -33.98763602542324946398, @@ -7087,7 +7088,7 @@ function ESERK5ConstantCache(zprev) 136.23851832916008675056, 126.04425541854854486701, 91.38018201222152470109, - -10.46032672753610626160, + -10.4603267275361062616, -22.41958197209601166833, 28.53507086761052136126, -22.00184275782881826444, @@ -7117,7 +7118,7 @@ function ESERK5ConstantCache(zprev) 3.77485222056733293883, -4.49015672556311074004, 4.74529435658993214986, - -4.77401738764784688840, + -4.7740173876478468884, 4.40280538029349344242, -3.88551286053136868404, 3.07280263354010640953, @@ -7172,9 +7173,9 @@ function ESERK5ConstantCache(zprev) 5.08534163158253793569, -5.30439088033603667327, 5.41773859507026855908, - -5.46914941782791785840, + -5.4691494178279178584, 5.41777373312711851838, - -5.30360935646551290290, + -5.3036093564655129029, 5.09418002958477078579, -4.82546018433812040627, 4.47305826399223604994, @@ -7240,7 +7241,7 @@ function ESERK5ConstantCache(zprev) -11.21742722129292602062, 10.46331897235305241622, -11.59432579625004677837, - 10.08792447855010898650, + 10.0879244785501089865, -10.42183744847396198452, 8.10639241551336731106, -7.64338429277120834371, @@ -7253,7 +7254,7 @@ function ESERK5ConstantCache(zprev) -10.40561537976059724997, 11.33279073729687169703, -14.01287767077897683521, - 13.86599548201674458880, + 13.8659954820167445888, -15.23409637396583704572, 13.58561304928569413164, -13.31663693587984909072, @@ -7268,9 +7269,9 @@ function ESERK5ConstantCache(zprev) -19.40410665172252180355, 18.83159959298378893777, -18.57386834865769031921, - 14.02741773571212924310, + 14.0274177357121292431, -9.57723039547669507954, - 1.04735769830372138500, + 1.047357698303721385, 6.63996259962656321107, -17.00456713399118058305, 24.41648478216415796282, @@ -7279,14 +7280,14 @@ function ESERK5ConstantCache(zprev) -29.84811657701686371524, 17.56037254621574206226, 0.18112571374192146245, - -26.03103899195820503110, + -26.0310389919582050311, 50.41275452749624719218, -66.92402797856955487532, 51.99868470867278347214, 21.59734281796415444887, -207.53167037610992906593, -144.44480768099555234585, - -52.12712863160621168390, + -52.1271286316062116839, 5.88121936023590929921, 12.92464718100216458652, -16.42403490429128609662, @@ -7305,22 +7306,22 @@ function ESERK5ConstantCache(zprev) 4.61912387890984632577, -5.49917455493558549051, 5.93286913372460489313, - -5.80657230683036740260, + -5.8065723068303674026, 5.35941040242106048197, -4.52828989435767592653, 3.57078891584675961468, -2.43066396375894866466, - 1.34952767082262514720, + 1.3495276708226251472, -0.25265446214510001166, -0.65132195475716792021, 1.46538555424884719969, -2.01765642883958440379, 2.43840059783904328228, - -2.58796222102959339040, + -2.5879622210295933904, 2.61688461174041986368, -2.40920171043435482616, 2.12645593105757768626, - -1.66698936470137693000, + -1.66698936470137693, 1.19434697080135410197, -0.61293136302392403625, 0.08103206992528828867, @@ -7339,14 +7340,14 @@ function ESERK5ConstantCache(zprev) 0.94152587264666109945, -0.47928833741090492992, 0.04276809353738420666, - 0.44836698573963018610, + 0.4483669857396301861, -0.88747299286256497997, 1.35244468823635455301, -1.74280370541055140698, 2.13513999414712252189, -2.43602263673352048556, 2.72137257854511016575, - -2.90521109595509496870, + -2.9052110959550949687, 3.06297889276474366582, -3.11614509381483406614, 3.13949354568087546369, @@ -7355,7 +7356,7 @@ function ESERK5ConstantCache(zprev) -2.75842052257509706692, 2.54023614839286304701, -2.24274129019051926548, - 1.93547801060765922720, + 1.9354780106076592272, -1.56474298251767662826, 1.19695151196572147079, -0.78291682931957196079, @@ -7370,10 +7371,10 @@ function ESERK5ConstantCache(zprev) -2.44669943586503491062, 2.66797866744270173456, -2.82814442503325125244, - 2.95829236169566289760, + 2.9582923616956628976, -3.02636009926812743487, 3.06089846568413070926, - -3.03524419077001361700, + -3.035244190770013617, 2.97530580017109969049, -2.85969535982834388577, 2.71153248165778126832, @@ -7388,7 +7389,7 @@ function ESERK5ConstantCache(zprev) -0.07656500885077702212, 0.37316583696850846863, 0.60356595376144950293, - -0.39645248535350469110, + -0.3964524853535046911, 1.37225786743360900211, -1.15382864460693235209, 2.10356159518210539261, @@ -7418,7 +7419,7 @@ function ESERK5ConstantCache(zprev) -2.52069592752970006444, 3.51587918124980980394, -3.28937328509970949852, - 4.14415071870402318410, + 4.1441507187040231841, -3.75748893105134529335, 4.43089101245835603748, -3.84898907973739357047, @@ -7428,10 +7429,10 @@ function ESERK5ConstantCache(zprev) -2.75336501579861403499, 2.79401583674178910499, -1.59812943100771964744, - 1.47284171193266466560, + 1.4728417119326646656, -0.14237769304761951905, - -0.08396357565530820910, - 1.47211287063955631460, + -0.0839635756553082091, + 1.4721128706395563146, -1.71180996698484610974, 3.06082264330425779519, -3.21011967712506196548, @@ -7451,12 +7452,12 @@ function ESERK5ConstantCache(zprev) 2.62061042860522830367, -3.31848910641463801241, 5.03822994891337572199, - -5.46582760801140654650, + -5.4658276080114065465, 6.77949726286791776175, -6.67378984499181626688, - 7.33503601049252562660, + 7.3350360104925256266, -6.48284714178307286403, - 6.32965629817239783250, + 6.3296562981723978325, -4.63889839240367596318, 3.66765044668563167107, -1.24023125182361182439, @@ -7477,13 +7478,13 @@ function ESERK5ConstantCache(zprev) 15.53683280175500591724, -16.03211358453145862768, 14.66298443647034233095, - -8.54347262314847455400, + -8.543472623148474554, -0.29975116990505734638, 13.19767831836444571536, -25.35911574351862896037, 33.58567421394389640454, -26.09232237603507087442, - -10.73617114784464909860, + -10.7361711478446490986, 103.73461806502612603254, 57.90703436804812298533, -0.09796498638346064214, @@ -7495,7 +7496,7 @@ function ESERK5ConstantCache(zprev) -0.00480649822768446956, -0.01903837180619273595, 0.03022609461742453707, - -0.02993142096229719010, + -0.0299314209622971901, 0.02212929702260025416, -0.00995175073870575161, -0.00288050207689621732, @@ -7513,7 +7514,7 @@ function ESERK5ConstantCache(zprev) 0.00909297691290201528, -0.01122075553362210376, 0.01217238863081795269, - -0.01155697094176571030, + -0.0115569709417657103, 0.01006825689125587578, -0.00745653211648837459, 0.00449065479080945976, @@ -7530,11 +7531,11 @@ function ESERK5ConstantCache(zprev) 0.01160428714433085415, -0.00958754773485765745, 0.00747306350084908384, - -0.00492333079498631730, + -0.0049233307949863173, 0.00250557735823170834, 0.00011897353731472765, -0.00240489702226307812, - 0.00470855173041157590, + 0.0047085517304115759, -0.00651883725514601064, 0.00821845533246175382, -0.00933582394621534049, @@ -7553,7 +7554,7 @@ function ESERK5ConstantCache(zprev) -0.00080616617635376393, 0.00219884942057835264, -0.00324625926828567193, - 0.00431046678262587100, + 0.004310466782625871, -0.00498661670841977003, 0.00564522378474517552, -0.00590117303468345056, @@ -7593,13 +7594,13 @@ function ESERK5ConstantCache(zprev) -0.00504309517218663305, 0.00604844069075580453, -0.00686090294923090514, - 0.00774168134222912550, - -0.00840953787581803780, - 0.00912292773083127340, + 0.0077416813422291255, + -0.0084095378758180378, + 0.0091229277308312734, -0.00960958235914378608, 0.01012550542171703621, -0.01040756847200668272, - 0.01070937334426056570, + 0.0107093733442605657, -0.01077687254435401656, 0.01086110207475276049, -0.01071684083724344302, @@ -7620,13 +7621,13 @@ function ESERK5ConstantCache(zprev) 0.00144165566170920741, -0.00063169574645951371, -0.00004809506440327813, - 0.00078656877591073580, + 0.0007865687759107358, -0.00138533088947496714, 0.00202896930233452009, -0.00252644449591351693, 0.00305816792494324752, -0.00344049830020393263, - 0.00384966850674559090, + 0.0038496685067455909, -0.00410939414155087317, 0.00439164888425117635, -0.00452739198467517166, @@ -7637,7 +7638,7 @@ function ESERK5ConstantCache(zprev) 0.00457293943703892657, -0.00437955428476236204, 0.00421585189766841926, - -0.00393972463315449620, + -0.0039397246331544962, 0.00369891742798014343, -0.00335745162034207199, 0.00305750670326579389, @@ -7645,7 +7646,7 @@ function ESERK5ConstantCache(zprev) 0.00232832714590628254, -0.00191109210794555514, 0.00154770571829932705, - -0.00111928746687769910, + -0.0011192874668776991, 0.00075010331576194579, -0.00032664239805992485, -0.00003309748802925524, @@ -7662,20 +7663,20 @@ function ESERK5ConstantCache(zprev) 0.00311810505543734648, -0.00322951385170649899, 0.00335186258402570122, - -0.00341162197689793200, - 0.00348032438963821180, + -0.003411621976897932, + 0.0034803243896382118, -0.00349058209910176401, 0.00350843817864154688, -0.00347256069322940007, 0.00344341788781106625, -0.00336565067449064647, 0.00329407210674106856, - -0.00317922022534699840, + -0.0031792202253469984, 0.00307018167403607864, -0.00292332662655437388, 0.00278195625361337892, -0.00260822109087413198, - 0.00243959190958837040, + 0.0024395919095883704, -0.00224396251709163335, 0.00205294342652894085, -0.00184014971967556948, @@ -7690,12 +7691,12 @@ function ESERK5ConstantCache(zprev) 0.05132853664661048143, -0.04514703329711765994, 0.04961596481467100972, - -0.04283526021552492430, + -0.0428352602155249243, 0.04671904443115414141, -0.03937799402809815524, 0.04272515259298303308, -0.03488163859028541036, - 0.03775898453035116120, + 0.0377589845303511612, -0.02948829114993575112, 0.03197900022908074791, -0.02337159022377042344, @@ -7706,7 +7707,7 @@ function ESERK5ConstantCache(zprev) 0.01174045406922898972, -0.00277291877668349495, 0.00477782170867076424, - 0.00407523530226268360, + 0.0040752353022626836, -0.00190018349912612645, 0.01052262357960847758, -0.00806427823924493227, @@ -7722,7 +7723,7 @@ function ESERK5ConstantCache(zprev) -0.02473529417543373493, 0.03020777732835605578, -0.02445479523480145745, - 0.02929301896687450460, + 0.0292930189668745046, -0.02292322078956467168, 0.02716253423361976449, -0.02022452749870599226, @@ -7732,9 +7733,9 @@ function ESERK5ConstantCache(zprev) -0.01191744542600259825, 0.01482590229966461795, -0.00671962863977913858, - 0.00941213452998955480, + 0.0094121345299895548, -0.00116173560617578633, - 0.00377827639536299420, + 0.0037782763953629942, 0.00447170685330750689, -0.00178362177412871728, 0.00988434303655987348, @@ -7778,7 +7779,7 @@ function ESERK5ConstantCache(zprev) -0.02907124247118625035, 0.03266490832325250754, -0.02495693742211619465, - 0.02760519395861403200, + 0.027605193958614032, -0.01902258386839158349, 0.02087916917431209898, -0.01161311548051720266, @@ -7800,7 +7801,7 @@ function ESERK5ConstantCache(zprev) 0.02774124017004158185, -0.01968557809647446602, 0.02161424341101315233, - -0.01201626125677237450, + -0.0120162612567723745, 0.01250212059725367905, -0.00160706553795247073, 0.00097295706598386278, @@ -7819,7 +7820,7 @@ function ESERK5ConstantCache(zprev) 0.06216483075840385092, -0.05452570227297924566, 0.05623566284318760877, - -0.04584322047956368440, + -0.0458432204795636844, 0.04490440250958058904, -0.03205976598090221757, 0.02894387719374076975, @@ -7830,7 +7831,7 @@ function ESERK5ConstantCache(zprev) 0.02562831678106134228, -0.02939191099049513062, 0.04287646044280686575, - -0.04431582164514297900, + -0.044315821645142979, 0.05485354733033040442, -0.05279343204080596402, 0.05936110615670871921, @@ -7841,7 +7842,7 @@ function ESERK5ConstantCache(zprev) -0.02662920176401675776, 0.02066860252368641487, -0.00280673468378687821, - -0.00503953499183431870, + -0.0050395349918343187, 0.02367727158209331773, -0.03105720729153326962, 0.04788223300426379392, @@ -7851,7 +7852,7 @@ function ESERK5ConstantCache(zprev) 0.06805596879115871634, -0.05869142286885806192, 0.05583451584927479755, - -0.03820835875109385160, + -0.0382083587510938516, 0.02752432213583367107, -0.00305298416178034424, -0.01293901155018538536, @@ -7861,9 +7862,9 @@ function ESERK5ConstantCache(zprev) -0.09347175130291898726, 0.10977578312671738836, -0.10861158948052176965, - 0.11014150607065610610, + 0.1101415060706561061, -0.09236853195930820604, - 0.07660157723634372640, + 0.0766015772363437264, -0.04233100664170385413, 0.01261003940201982539, 0.03113863782649141376, @@ -7898,7 +7899,7 @@ function ESERK5ConstantCache(zprev) 0.40798203787733272607, -0.31396212061241818292, 0.16616348252576540467, - -0.01174428164788603700, + -0.011744281647886037, -0.13015353237431545597, 0.23308037650249338602, -0.29800969128077953174, @@ -7908,7 +7909,7 @@ function ESERK5ConstantCache(zprev) -0.18606816331415435006, 0.10736075903238720408, -0.03217168432254703669, - -0.04071461197204963300, + -0.040714611972049633, 0.09730311714169818937, -0.14259697989849315358, 0.16654367827814173242, @@ -7925,10 +7926,10 @@ function ESERK5ConstantCache(zprev) 0.12989295960539781749, -0.14538866769535085943, 0.14853179282054984611, - -0.14739148813346600320, + -0.1473914881334660032, 0.13491937705094189659, -0.11978345150118288598, - 0.09555586392533246820, + 0.0955558639253324682, -0.07116657779854290711, 0.04047747547612710883, -0.01237025331375733901, @@ -7968,20 +7969,20 @@ function ESERK5ConstantCache(zprev) 0.00392570714961767205, -0.01724548333657074939, 0.02758319345843083387, - -0.04035854410818929400, + -0.040358544108189294, 0.04959882156394252589, -0.06068121005136666024, 0.06779091316330002059, - -0.07627960060925920160, + -0.0762796006092592016, 0.08050320673784373826, -0.08579647987808493304, 0.08669072179401782208, -0.08850457449421604561, 0.08594209557958003287, -0.08430002604296142621, - 0.07844667638270265420, - -0.07364597826374530420, - 0.06491768963756520960, + 0.0784466763827026542, + -0.0736459782637453042, + 0.0649176896375652096, -0.05747854935257036557, 0.04648430365539763659, -0.03708826406361413752, @@ -8000,33 +8001,33 @@ function ESERK5ConstantCache(zprev) -0.09548062608889286429, 0.09868262939974192793, -0.10272521693500634432, - 0.10339562061185803010, + 0.1033956206118580301, -0.10485668820299007264, 0.10302801971406194692, -0.10201099964322907221, 0.09785270635663778638, -0.09458741226885360176, - 0.08838347692466014260, + 0.0883834769246601426, -0.08320137691354576037, 0.07532378724432829686, -0.06863019632403968839, 0.05951036684360155177, -0.05175557840205164545, - 0.04185564046677653360, + 0.0418556404667765336, -0.03350678815617028766, 0.02329239780336167173, -0.01480754186357248134, - 0.00472353394678786710, + 0.0047235339467878671, 0.00347087156506793596, -0.01302100191912529056, - 0.02054845590153838580, + 0.0205484559015383858, -0.02921861319234326723, - 0.03576626619046779920, + 0.0357662661904677992, -0.04327905634252760675, 0.04860661592772425738, -0.05475988908184112325, 0.05870386420649338632, - -0.06337275190048191620, + -0.0633727519004819162, 0.06584639795323569966, -0.06898130150594189436, 0.06997080449753242948, @@ -8037,7 +8038,7 @@ function ESERK5ConstantCache(zprev) -0.06846382905852710365, 0.06553014700007551985, -0.06329536392129317401, - 0.05938228887154805430, + 0.0593822888715480543, -0.05622353384465740567, 0.05154201977109116456, -0.04767692129891868552, @@ -8051,8 +8052,8 @@ function ESERK5ConstantCache(zprev) -0.00744981944468348176, 0.00211788873806448893, 0.00215355968142399382, - -0.00708704510047541460, - 0.01094670540874187470, + -0.0070870451004754146, + 0.0109467054087418747, -0.01536648142572087476, 0.01871422319330920056, -0.02253526775878065408, @@ -8065,14 +8066,14 @@ function ESERK5ConstantCache(zprev) 0.03726818498000535052, -0.03839825302641231702, 0.03866498746320148894, - -0.03916082225530245070, + -0.0391608222553024507, 0.03886358123423130223, -0.03877221005109988267, 0.03796289087860054562, -0.03734011225487379043, - 0.03607750397321763530, + 0.0360775039732176353, -0.03498423816654188528, - 0.03333060973323668380, + 0.0333306097332366838, -0.03182976076936340493, 0.02984802702335629526, -0.02800197639834409863, @@ -8090,20 +8091,20 @@ function ESERK5ConstantCache(zprev) -0.16759072545773670559, 0.13216840410885943857, -0.15728925119284872802, - 0.11960135528020200690, + 0.1196013552802020069, -0.14249167637097806538, 0.10272471538280662784, -0.12361034946841288618, 0.08202848985573524265, - -0.10121027644512006760, + -0.1012102764451200676, 0.05814933772399247941, - -0.07599573675875291590, + -0.0759957367587529159, 0.03185445059559677272, -0.04879146721316814789, 0.00402010593191504031, - -0.02051867270735918680, + -0.0205186727073591868, -0.02439475253136614771, - 0.00783368684489365100, + 0.007833686844893651, -0.05237935958286960014, 0.03524168616223159745, -0.07890565115685872766, @@ -8111,11 +8112,11 @@ function ESERK5ConstantCache(zprev) -0.10296551907252389502, 0.08317237772150094799, -0.12360966299081356523, - 0.10180627751932627700, - -0.13998673330227448530, + 0.101806277519326277, + -0.1399867333022744853, 0.11579615480189540955, - -0.15138131461079096240, - 0.12450801890697130170, + -0.1513813146107909624, + 0.1245080189069713017, -0.15724919282801266829, 0.12749519117158056303, -0.15724828985205693832, @@ -8129,7 +8130,7 @@ function ESERK5ConstantCache(zprev) -0.09996804571607385836, 0.05696874037215205605, -0.07385786380067538293, - 0.02929774433826473970, + 0.0292977443382647397, -0.04487287370753484383, -0.00063383025182301052, -0.01428096370750672056, @@ -8144,7 +8145,7 @@ function ESERK5ConstantCache(zprev) -0.13492142405192325549, 0.11251897331611346309, -0.14885147347273017249, - 0.12307702919955161580, + 0.1230770291995516158, -0.15578607586724096956, 0.12627831130593775155, -0.15508838376051795049, @@ -8164,7 +8165,7 @@ function ESERK5ConstantCache(zprev) 0.03291061181592861568, -0.08151221821308239635, 0.06958059459045858042, - -0.11654122872918472320, + -0.1165412287291847232, 0.10243372653181023746, -0.14659557712595480683, 0.12919173388241947387, @@ -8189,7 +8190,7 @@ function ESERK5ConstantCache(zprev) 0.05614950614218737479, -0.10981372256580305968, 0.10283344384544888805, - -0.15314610701123473890, + -0.1531461070112347389, 0.14188026134453410321, -0.18691106691880227109, 0.16953357675618863087, @@ -8222,7 +8223,7 @@ function ESERK5ConstantCache(zprev) 0.19718081168654635893, -0.19456162378750468944, 0.12745851205160149688, - -0.11343594103635194770, + -0.1134359410363519477, 0.03690472709092398884, -0.01574887374805209253, -0.06512967759615780061, @@ -8241,12 +8242,12 @@ function ESERK5ConstantCache(zprev) 0.14195852221166302409, -0.10794773889537417899, 0.00972737040615069548, - 0.03425095277200766730, + 0.0342509527720076673, -0.13646958963130753628, 0.17783803087737773407, -0.27021686067283018362, 0.29439850676862017176, - -0.36225983016633689360, + -0.3622598301663368936, 0.35521897533404200864, -0.38599593313837771147, 0.33751668158149095156, @@ -8260,28 +8261,28 @@ function ESERK5ConstantCache(zprev) -0.40604219971657362631, 0.46367318077366725948, -0.55045272904058883956, - 0.54376580241902361390, + 0.5437658024190236139, -0.55203011436342075413, 0.45707578503237078493, -0.37336774063916666755, 0.19073448302681264566, -0.03287608970640355094, - -0.20000742183162004140, + -0.2000074218316200414, 0.37397004707013098423, -0.57942010172423763503, 0.67581248046401409812, -0.75113865913547828157, 0.66910528848915484801, -0.53029583860912454796, - 0.22163223585690566830, + 0.2216322358569056683, 0.12179565574022031826, -0.56722276681412864274, 0.92577705032925095008, - -1.20961465051501115830, - 1.18725469282481577160, + -1.2096146505150111583, + 1.1872546928248157716, -0.86279204743341908479, 0.06730719690363315411, - 1.00833281730108326180, + 1.0083328173010832618, -2.14228777096016553827, 2.43565936349832012908, -0.48101803934737286106, @@ -8290,13 +8291,13 @@ function ESERK5ConstantCache(zprev) -3.21561143638093360764, -0.26114130171188104645, 1.25894918761884477831, - -1.09619032063555477130, + -1.0961903206355547713, 0.54949309711019089786, 0.00456737336351403962, -0.38226509405299791133, 0.56093182825545029324, -0.55232921130709655699, - 0.42706610603881822730, + 0.4270661060388182273, -0.22829261805512832129, 0.02247776250342891843, 0.16842494201500077255, @@ -8318,7 +8319,7 @@ function ESERK5ConstantCache(zprev) -0.14989131521885248888, 0.10219895526141532793, -0.04238659221879935435, - -0.01128786975883824470, + -0.0112878697588382447, 0.06900027775933999241, -0.11374451417655243035, 0.15687656804361052587, @@ -8332,8 +8333,8 @@ function ESERK5ConstantCache(zprev) 0.10794262280163155476, -0.06651847736723107141, 0.02998960535739575786, - 0.01276565052516374400, - -0.04735467316387981240, + 0.012765650525163744, + -0.0473546731638798124, 0.08510743524657911341, -0.11225281373546716623, 0.14046927255173155547, @@ -8348,7 +8349,7 @@ function ESERK5ConstantCache(zprev) -0.11074150141470323616, 0.09098827186274838219, -0.06435732461196116971, - 0.04325947736240094710, + 0.0432594773624009471, -0.01700654079974960736, -0.00228165869490339025, 0.02529196473694702782, @@ -8382,13 +8383,13 @@ function ESERK5ConstantCache(zprev) -0.10202348288531411236, 0.09644610904304087851, -0.08461403636922526506, - 0.07549093579335407200, + 0.075490935793354072, -0.06062785632909651473, 0.04886605851154562918, -0.03195383270741718879, 0.01858788964206482819, -0.00069211254537945703, - -0.01320227488293669940, + -0.0132022748829366994, 0.03101553534090193201, -0.04440034583488246256, 0.06113781851641259674, @@ -8397,7 +8398,7 @@ function ESERK5ConstantCache(zprev) -0.09760152849496632477, 0.10978076846182817372, -0.11669600738332354395, - 0.12577202759657643560, + 0.1257720275965764356, -0.12950623897788282601, 0.13521149112598074282, -0.13560366705426388223, @@ -8406,8 +8407,8 @@ function ESERK5ConstantCache(zprev) 0.13396068606696209802, -0.12797945298299190364, 0.12398102844148557733, - -0.11530330885113415640, - 0.10876061527543967600, + -0.1153033088511341564, + 0.108760615275439676, -0.09788123640847803952, 0.08933345669269714129, -0.07682633205569933121, @@ -8445,14 +8446,14 @@ function ESERK5ConstantCache(zprev) 0.05024629302448157392, -0.04254154942903743547, 0.03650357900359967739, - -0.02866571359546856920, + -0.0286657135954685692, 0.02254537284280752965, -0.01483530795931230044, 0.00887892418204722957, -0.00152672356277179988, -0.00405329816243488097, 0.01085395215489925319, - -0.01588345163082263700, + -0.015883451630822637, 0.02197840820539766898, -0.02632348871108435712, 0.03159906836587433182, @@ -8464,7 +8465,7 @@ function ESERK5ConstantCache(zprev) 0.05012709177128595039, -0.05116261711572286236, 0.05276571748695677022, - -0.05299277309926334750, + -0.0529927730992633475, 0.05372974650933828172, -0.05320367281106642976, 0.05313774391728194602, @@ -8478,7 +8479,7 @@ function ESERK5ConstantCache(zprev) 0.03829856113121854477, -0.03517599410433301654, 0.03230217991224332286, - -0.02890580015770468150, + -0.0289058001577046815, 0.02571266305167239571, -0.02211659786156967497, 0.01867574743694152065, @@ -8494,7 +8495,7 @@ function ESERK5ConstantCache(zprev) 0.09810925605688487761, -0.05700279916084022291, 0.08025603017158140784, - -0.03783314275794346510, + -0.0378331427579434651, 0.05982814305919557235, -0.01638636547969662266, 0.03744768590589585278, @@ -8511,12 +8512,12 @@ function ESERK5ConstantCache(zprev) 0.11736119854477621016, -0.09325841353464427164, 0.13256090402481313095, - -0.10650517685853277960, + -0.1065051768585327796, 0.14360471837289628949, -0.11528155024715841526, 0.14989929477533689428, -0.11906965323276268165, - 0.15100995453140558800, + 0.151009954531405588, -0.11752521770882806695, 0.14668942358153713723, -0.11050382074740965066, @@ -8528,7 +8529,7 @@ function ESERK5ConstantCache(zprev) -0.05849709635203159674, 0.07780982034529092262, -0.03265157659056520251, - 0.05038912889076608420, + 0.0503891288907660842, -0.00401101128729409832, 0.02073563484989857097, 0.02625891307428492374, @@ -8546,8 +8547,8 @@ function ESERK5ConstantCache(zprev) 0.16588353760895888089, -0.13757068366289385009, 0.17024525244048518968, - -0.13814825040065237260, - 0.16685766617911107490, + -0.1381482504006523726, + 0.1668576661791110749, -0.13083383735197798292, 0.15553322001167516064, -0.11564024902846402332, @@ -8564,12 +8565,12 @@ function ESERK5ConstantCache(zprev) -0.03716384455457835689, 0.08753094532205056566, -0.07505125306533398655, - 0.12357633613369747860, + 0.1235763361336974786, -0.10875169473914358953, 0.15427085434836876332, -0.13597719075684158718, 0.17742534559400133243, - -0.15467620645821777980, + -0.1546762064582177798, 0.19116471362095091568, -0.16318829820684821463, 0.19408011338841790749, @@ -8587,7 +8588,7 @@ function ESERK5ConstantCache(zprev) -0.00727788998431243717, 0.06420527056100100438, -0.05964506889900022396, - 0.11523867385761618620, + 0.1152386738576161862, -0.10841298285398308365, 0.16063465200306437097, -0.14952585194171294503, @@ -8597,7 +8598,7 @@ function ESERK5ConstantCache(zprev) -0.19415068804610449704, 0.22570628843835599531, -0.19217177701851023697, - 0.21473301908893296930, + 0.2147330190889329693, -0.17221283383738059114, 0.18581590774192041637, -0.13474470481477263117, @@ -8655,7 +8656,7 @@ function ESERK5ConstantCache(zprev) 0.20294523562467833844, -0.07363260963801029901, -0.00953486584037783677, - 0.15638270836272705200, + 0.156382708362727052, -0.24333069249929373257, 0.37785022327634065764, -0.43514839744050948234, @@ -8666,7 +8667,7 @@ function ESERK5ConstantCache(zprev) 0.34604421463945717052, -0.16367105980825585876, 0.00655521852762364597, - 0.22587811986077671600, + 0.225878119860776716, -0.39894768214584525046, 0.60376527713229077854, -0.69912300490787815388, @@ -8675,24 +8676,24 @@ function ESERK5ConstantCache(zprev) 0.55067163688970888202, -0.24072550285485966315, -0.10381334657912344444, - 0.55062544190331386140, - -0.91042100985900520360, - 1.19572949300535569250, + 0.5506254419033138614, + -0.9104210098590052036, + 1.1957294930053556925, -1.17472386672491335702, 0.85180005510996792406, -0.05776402935602854838, -1.01628829827953781617, 2.14871951058431776005, -2.44047455462389484282, - 0.48425490950345467800, + 0.484254909503454678, 6.50274545337563836256, 3.02644654545471780693, -0.00416932496684814524, - 0.00754183010998490510, + 0.0075418301099849051, -0.00819442140728940914, 0.00725485452498268214, -0.00776764663002176437, - 0.00669267335394551320, + 0.0066926733539455132, -0.00707585189872618654, 0.00587841562024637738, -0.00614756565428842099, @@ -8704,7 +8705,7 @@ function ESERK5ConstantCache(zprev) -0.00237042078981301212, 0.00090487663921361074, -0.00095884370897238039, - -0.00050251379932530940, + -0.0005025137993253094, 0.00042878916833863199, -0.00185483667809831741, 0.00173046013058615156, @@ -8713,16 +8714,16 @@ function ESERK5ConstantCache(zprev) -0.00415268714420700437, 0.00384113030298463554, -0.00498839089755192568, - 0.00454675039754341530, - -0.00555415941061364760, + 0.0045467503975434153, + -0.0055541594106136476, 0.00496427639788470446, -0.00581648487840333902, 0.00506603371776518339, -0.00575392244227365419, 0.00483714892713096433, -0.00535845161176691943, - 0.00427667075608436590, - -0.00463633676661213880, + 0.0042766707560843659, + -0.0046363367666121388, 0.00339815168477161211, -0.00360841340769975111, 0.00222962472466300575, @@ -8733,7 +8734,7 @@ function ESERK5ConstantCache(zprev) 0.00089517389783935037, -0.00253731109886819357, 0.00267257838261389944, - -0.00433353603163755090, + -0.0043335360316375509, 0.00446829020707365139, -0.00610910416623193942, 0.00620412367691848977, @@ -8748,10 +8749,10 @@ function ESERK5ConstantCache(zprev) -0.01212413331449553253, 0.01153431182121508053, -0.01237138852396358658, - 0.01159352144264045800, + 0.011593521442640458, -0.01224361380983925857, - 0.01128253991581220500, - -0.01175579357596199560, + 0.011282539915812205, + -0.0117557935759619956, 0.01062693798624272414, -0.01094394393174960567, 0.00967286981238073447, @@ -8759,7 +8760,7 @@ function ESERK5ConstantCache(zprev) 0.00848516246785766849, -0.00858862208425484677, 0.00714404735585486873, - -0.00720447114730973000, + -0.00720447114730973, 0.00574060455373401595, -0.00580586410434926446, 0.00437108866317831388, @@ -8767,7 +8768,7 @@ function ESERK5ConstantCache(zprev) 0.00313040605252020831, -0.00334620765507201391, 0.00210511169160304849, - -0.00245650295654958970, + -0.0024565029565495897, 0.00136638115062006748, -0.00188110681996811794, 0.00096348097626092763, @@ -8805,27 +8806,27 @@ function ESERK5ConstantCache(zprev) -0.00580908641891156752, 0.00627233918559059241, -0.00816718753939729182, - 0.00842340998150138340, + 0.0084234099815013834, -0.01005015124692743358, 0.00998098057917560025, - -0.01123048941773472850, + -0.0112304894177347285, 0.01073985294466522043, -0.01153285093563002905, 0.01056182058368822577, -0.01086296362389030032, 0.00940256602391235582, -0.00923144880217183911, - 0.00733133237617628660, + 0.0073313323761762866, -0.00676829968425479451, 0.00453920413110958914, -0.00372404552482761544, - 0.00133236376247224250, + 0.0013323637624722425, -0.00045448284663653971, -0.00189210137484537109, 0.00261257682528685852, - -0.00468833829331988770, + -0.0046883382933198877, 0.00502781546019346985, - -0.00661971090378903060, + -0.0066197109037890306, 0.00638456953273712231, -0.00732743240911815346, 0.00638981828134407241, @@ -8854,7 +8855,7 @@ function ESERK5ConstantCache(zprev) -0.01024384365896452258, 0.01187759049775275258, -0.01430438496871685831, - 0.01430376193769024480, + 0.0143037619376902448, -0.01477077637071220681, 0.01259347649759073179, -0.01081054826380941497, @@ -8870,7 +8871,7 @@ function ESERK5ConstantCache(zprev) 0.01280990712659921607, -0.00741669954276540956, -0.00119005213199609074, - 0.00914213977758773430, + 0.0091421397775877343, -0.01829484846561495875, 0.02417026647614625365, -0.02825136660976312539, @@ -8891,7 +8892,7 @@ function ESERK5ConstantCache(zprev) -1.15690559744525911512, -0.32741912374481557668, 0.57456400285662512228, - -0.35671618583161784910, + -0.3567161858316178491, 0.06322218638837939775, 0.14816747351330164517, -0.23572018407021694264, @@ -8904,16 +8905,16 @@ function ESERK5ConstantCache(zprev) -0.18568508484650170232, 0.16512819438649958825, -0.12330540709497868346, - 0.07222607245416465260, + 0.0722260724541646526, -0.01787586436238770837, -0.02999711407553444509, 0.06903717835858950991, - -0.09374481195555997570, + -0.0937448119555599757, 0.10586963852214990867, -0.10355730485148841036, 0.09137902824151215853, -0.06949653950246917344, - 0.04358887346372503080, + 0.0435888734637250308, -0.01422274122692581202, -0.01320209042894024409, 0.03881085115722502504, @@ -8934,7 +8935,7 @@ function ESERK5ConstantCache(zprev) 0.08160557484797041627, -0.08514681095302441272, 0.08607054133304423149, - -0.08235365998199919990, + -0.0823536599819991999, 0.07663715536656123817, -0.06719186667136881064, 0.05682366595803420295, @@ -8944,10 +8945,10 @@ function ESERK5ConstantCache(zprev) 0.00540310157626611946, 0.00697239826624166965, -0.01690881418288234239, - 0.02618559846115840750, + 0.0261855984611584075, -0.03245590692338417432, 0.03766430388741836416, - -0.03968557506009445790, + -0.0396855750600944579, 0.04061840458135170667, -0.03853470275924900795, 0.03565176311696868772, @@ -8958,14 +8959,14 @@ function ESERK5ConstantCache(zprev) -0.00071694229424816536, -0.00696311674160278275, 0.01529235029673222182, - -0.02208138823963947880, - 0.02899020309575496210, + -0.0220813882396394788, + 0.0289902030957549621, -0.03393392677197430013, 0.03862754648638138527, -0.04110515573233591152, 0.04314456417445099168, -0.04290040751077691533, - 0.04220919334787837790, + 0.0422091933478783779, -0.03933695357399188269, 0.03616544012937313729, -0.03105513010881101946, @@ -8995,15 +8996,15 @@ function ESERK5ConstantCache(zprev) 0.01742214113204336792, -0.01074635294349328592, 0.00461179157289343025, - 0.00223670924695544950, + 0.0022367092469554495, -0.00832661045636044587, 0.01489405606430936613, - -0.02050981145890825100, + -0.020509811458908251, 0.02639792287899214371, -0.03117836858512950532, 0.03606792695858883346, -0.03973953794223561431, - 0.04340536530248433750, + 0.0434053653024843375, -0.04579290918476226074, 0.04811028801147698708, -0.04913917750456090611, @@ -9014,7 +9015,7 @@ function ESERK5ConstantCache(zprev) 0.04633377143537417697, -0.04373533352568716864, 0.04123738614804575014, - -0.03780625508961188430, + -0.0378062550896118843, 0.03458618205646012134, -0.03057805530197487201, 0.02689957695324657339, @@ -9026,7 +9027,7 @@ function ESERK5ConstantCache(zprev) 0.00281932305614385117, 0.00096717586889232118, -0.00403492775322147369, - 0.00726820102858409100, + 0.007268201028584091, -0.00973496640125226867, 0.01230253159854765611, -0.01408071514660535692, @@ -9040,12 +9041,12 @@ function ESERK5ConstantCache(zprev) -0.01724744000829872559, 0.01642740533582926973, -0.01501653935049226257, - 0.01375843705489421080, + 0.0137584370548942108, -0.01198657885870274206, 0.01041687025928324413, -0.00841280394419023116, 0.00666051875243703784, - -0.00455156695789897450, + -0.0045515669578989745, 0.00274050667568100439, -0.00064530256131426671, -0.00111254094141287839, @@ -9058,16 +9059,16 @@ function ESERK5ConstantCache(zprev) 0.01167957366168919341, -0.01248582661915583272, 0.01335937883304722656, - -0.01385222619665589690, + -0.0138522261966558969, 0.01440086582831033059, -0.01459110486907475024, 0.01483401835590920925, -0.01474831891420782214, 0.01471868130808784425, - -0.01439569769531364590, + -0.0143956976953136459, 0.01413658282517241647, -0.01362273861809584242, - 0.01318285335065914020, + 0.0131828533506591402, -0.01252809743581492254, 0.01195762839821944666, -0.01121143702156309624, @@ -9079,7 +9080,7 @@ function ESERK5ConstantCache(zprev) -0.00679697028642424483, 0.00611662511502028116, -0.00538209072820779698, - 0.00473545500885023170, + 0.0047354550088502317, -0.00405288238039474419, 0.00344464674562470824, -0.00281407391283938681, @@ -9094,7 +9095,7 @@ function ESERK5ConstantCache(zprev) 0.11254673838808357256, -0.08711034123867798795, 0.09843447239560794426, - -0.07067038339439016270, + -0.0706703833943901627, 0.07980174734066958209, -0.05003350499634381249, 0.05734242047633080624, @@ -9125,36 +9126,36 @@ function ESERK5ConstantCache(zprev) 0.14441173061416132106, -0.11648114440301589323, 0.12484642910590582066, - -0.09415639303993890430, + -0.0941563930399389043, 0.09996562840104082637, -0.06698794745809812101, 0.07077965443754688502, -0.03611480904533737046, 0.03854561148920670338, -0.00289976064085853934, - 0.00471775665233610270, + 0.0047177566523361027, 0.03112735225490322749, - -0.02911591711369728580, + -0.0291159171136972858, 0.06433923140479468061, -0.06130886783389796757, 0.09509116348545763875, -0.09024005915673485867, 0.12180815432041494639, -0.11440313914537574014, - 0.14307502738869359860, + 0.1430750273886935986, -0.13249625364282807682, 0.15772467892413000179, -0.14350741545076620143, - 0.16491919465168281000, + 0.16491919465168281, -0.14678998076527266514, 0.16421829602025062034, -0.14212269416695935687, 0.15562965410883208839, - -0.12974900633711752840, + -0.1297490063371175284, 0.13963603524809958811, -0.11039098596321723911, 0.11719505721165400514, - -0.08523416304242933950, + -0.0852341630424293395, 0.08970855190927368161, -0.05588105627271117842, 0.05896013784529684915, @@ -9163,14 +9164,14 @@ function ESERK5ConstantCache(zprev) 0.00741860247196809899, -0.00386940710277751398, 0.03692607384704790774, - -0.03145434077381089460, + -0.0314543407738108946, 0.06204050778544849959, -0.05361520891626669894, 0.08077673249516691134, -0.06854127763163796183, 0.09153891651606900492, -0.07489014813859397324, - 0.09327384634273558350, + 0.0932738463427355835, -0.07192991386995119252, 0.08559856632810777799, -0.05964891246415466447, @@ -9178,7 +9179,7 @@ function ESERK5ConstantCache(zprev) -0.03882003884921522707, 0.04431695305783143329, -0.01100823355951476012, - 0.01382611604215052900, + 0.013826116042150529, 0.02148733543984456679, -0.01996067066373376567, 0.05576070724792998867, @@ -9197,7 +9198,7 @@ function ESERK5ConstantCache(zprev) -0.08646253598290169762, 0.08702648860256574637, -0.04744754441178833382, - 0.04241281554460105130, + 0.0424128155446010513, 0.00191683058142037518, -0.01071774392622742121, 0.05764279815469412066, @@ -9211,10 +9212,10 @@ function ESERK5ConstantCache(zprev) 0.23438586568842906255, -0.22126535425466273277, 0.23971331134351947512, - -0.21542182640582363540, + -0.2154218264058236354, 0.22239633440536588083, -0.18669263183700932074, - 0.18263638634076814760, + 0.1826363863407681476, -0.13668297429133488552, 0.12349392751468335483, -0.06991718071722742567, @@ -9226,9 +9227,9 @@ function ESERK5ConstantCache(zprev) 0.14819459393415321258, -0.15525516116485021945, 0.19278270771065733613, - -0.18594407345429661560, + -0.1859440734542966156, 0.20778714524196117974, - -0.18401154435869154780, + -0.1840115443586915478, 0.18822608326179812721, -0.14683913711192006502, 0.13416276718971850701, @@ -9236,7 +9237,7 @@ function ESERK5ConstantCache(zprev) 0.05164789043167208882, 0.01512759192940297225, -0.04719766776295962474, - 0.11593851591456272310, + 0.1159385159145627231, -0.14522528823741631676, 0.20614210677574537622, -0.22255978472776635768, @@ -9270,7 +9271,7 @@ function ESERK5ConstantCache(zprev) -0.30545545742374002884, 0.17626957420181876834, 0.03019848384553195861, - -0.22083368936832073470, + -0.2208336893683207347, 0.44042324990599335255, -0.58124929056752383527, 0.67913376143731929435, @@ -9279,7 +9280,7 @@ function ESERK5ConstantCache(zprev) -0.15696596135584914289, -0.22661192110612660144, 0.66906602665612635583, - -0.97444117492367554600, + -0.974441174923675546, 1.05770868285149410859, -0.68957462538601899116, -0.13213120304566861041, @@ -9289,25 +9290,25 @@ function ESERK5ConstantCache(zprev) 4.75604108543791159747, 4.47191329112243352029, 6.22808310253652219757, - 1.68685593535995415060, + 1.6868559353599541506, -3.00583089586405005633, - 1.84279794763504889410, + 1.8427979476350488941, -0.27862476563610311109, - -0.84968487635727241170, + -0.8496848763572724117, 1.31524880386084586092, -1.23750622056891623757, 0.80568560961795443465, -0.24954961974150377535, -0.28597572168128437831, 0.67897400120056183859, - -0.90255725420184118590, + -0.9025572542018411859, 0.93690269217174515504, -0.82957425295831910272, 0.60688136215002419505, -0.33695941990196165428, 0.04765880621002504397, 0.20498941827818722983, - -0.41245131082421115920, + -0.4124513108242111592, 0.54139922643123894463, -0.60515059257066927678, 0.58986284951593126458, @@ -9317,12 +9318,12 @@ function ESERK5ConstantCache(zprev) 0.10498546271825383303, 0.04254087516054459728, -0.18232023170509711885, - 0.28741497093113210770, + 0.2874149709311321077, -0.36852484655308664907, 0.40554293464147223025, - -0.41528192732883389970, + -0.4152819273288338997, 0.38342354324698146861, - -0.33118100179613574330, + -0.3311810017961357433, 0.24789911734087308193, -0.15687966926368240861, 0.04882156265711595083, @@ -9340,7 +9341,7 @@ function ESERK5ConstantCache(zprev) -0.28414624215340195112, 0.21308586524284253705, -0.14551680813829084848, - 0.06984086390294486080, + 0.0698408639029448608, -0.00393999436864328565, -0.06416905889502622085, 0.11758108775978295957, @@ -9358,9 +9359,9 @@ function ESERK5ConstantCache(zprev) 0.03976396102581017389, 0.00024466486742438808, -0.04523901090211114584, - 0.08063998314802559020, + 0.0806399831480255902, -0.11817653105969061489, - 0.14387085891940676330, + 0.1438708589194067633, -0.16970083162601001803, 0.18236712331643176177, -0.19413819054818268195, @@ -9376,7 +9377,7 @@ function ESERK5ConstantCache(zprev) 0.04153263085158934859, -0.08292438803611398845, 0.11746633094707843725, - -0.15555745772472320820, + -0.1555574577247232082, 0.18516282722598795263, -0.21666600091470278322, 0.23844538796757511201, @@ -9429,7 +9430,7 @@ function ESERK5ConstantCache(zprev) -0.06296270928911670839, 0.07617996917980192351, -0.09060071425200762196, - 0.10015030541246776330, + 0.1001503054124677633, -0.11066427678056181549, 0.11633339846037447918, -0.12285380912872098658, @@ -9438,8 +9439,8 @@ function ESERK5ConstantCache(zprev) 0.12557340003698208575, -0.12474265697435465983, 0.11979755244088879929, - -0.11596255047961841200, - 0.10840709399247724920, + -0.115962550479618412, + 0.1084070939924772492, -0.10217549874869266691, 0.09265346963240073119, -0.08469327193321024572, @@ -9456,7 +9457,7 @@ function ESERK5ConstantCache(zprev) -0.02154899797812379406, 0.02756302497864734566, -0.03445824222045726359, - 0.03893742890100745230, + 0.0389374289010074523, -0.04416156107033044481, 0.04706184993833470442, -0.05062330296971501858, @@ -9468,21 +9469,21 @@ function ESERK5ConstantCache(zprev) -0.05288921669640989781, 0.05077743856941288603, -0.04932985330699970333, - 0.04654830288223191920, + 0.0465483028822319192, -0.04446157698420102888, 0.04126959768109240284, - -0.03879422689248529510, + -0.0387942268924852951, 0.03542920972553970788, -0.03278569180975789144, 0.02944799075295285659, -0.02681383707276250097, - 0.02365602095969320320, + 0.0236560209596932032, -0.02115735340741538989, 0.01827821288438866501, -0.01598620630185135227, 0.01342961825650613311, -0.01136173561560909623, - 0.00912018159008940940, + 0.0091201815900894094, -0.00724585379809280367, 0.00526810734197884645, -0.00351824495497423057, @@ -9493,22 +9494,22 @@ function ESERK5ConstantCache(zprev) 0.28971290514716441233, -0.34109245051386827274, 0.25729908909027376929, - -0.30180411260013095820, + -0.3018041126001309582, 0.21155326203692964571, -0.24988801627782608605, 0.15402627370712773658, -0.18717412146773665382, 0.08681499721096157252, -0.11601099732983648216, - 0.01250149556717612340, + 0.0125014955671761234, -0.03919308208578401592, -0.06593135503827703137, 0.04013493235577532403, -0.14520618969922272079, 0.11859447004070762521, -0.22187677002283459626, - 0.19270699646731734300, - -0.29246915036703424740, + 0.192706996467317343, + -0.2924691503670342474, 0.25904122501011350721, -0.35363359777933212058, 0.31436830432147921943, @@ -9517,7 +9518,7 @@ function ESERK5ConstantCache(zprev) -0.43584057665609571286, 0.38103429741889749405, -0.45220134824352614666, - 0.38830677522901613230, + 0.3883067752290161323, -0.45004688570200740427, 0.37669700344616247056, -0.42885850665848801455, @@ -9528,8 +9529,8 @@ function ESERK5ConstantCache(zprev) 0.23237056943225467553, -0.25945966301163092549, 0.15361822436777822221, - -0.17506819781589286200, - 0.06465524282403822820, + -0.175068197815892862, + 0.0646552428240382282, -0.08247703865231620357, -0.03034366326483717985, 0.01385715383663325799, @@ -9559,7 +9560,7 @@ function ESERK5ConstantCache(zprev) 0.04947091221867380706, -0.06034232534761058836, -0.05744377617876764153, - 0.04642465504076847410, + 0.0464246550407684741, -0.16209794574352637264, 0.14719208836919703276, -0.25700872930158946694, @@ -9579,10 +9580,10 @@ function ESERK5ConstantCache(zprev) -0.20406763423245305455, 0.08383660007709373141, -0.08681382278944585473, - -0.04023796348290741010, + -0.0402379634829074101, 0.04168163855456501199, - -0.17034745980766616280, - 0.17066294135333456850, + -0.1703474598076661628, + 0.1706629413533345685, -0.29515355644209217978, 0.28842570682605211951, -0.40282386991470908733, @@ -9617,14 +9618,14 @@ function ESERK5ConstantCache(zprev) -0.51093991025376517268, 0.35889562359390786428, -0.31818379571152682894, - 0.14118964582444418210, + 0.1411896458244441821, -0.08148413900414340494, -0.10732949331015236016, 0.17105961215984771817, -0.35526237033465418724, 0.40559138320597043492, - -0.56730894814698040740, - 0.58653144670822243700, + -0.5673089481469804074, + 0.586531446708222437, -0.70889982153623376515, 0.68170232308701206314, -0.75168022994540883985, @@ -9642,7 +9643,7 @@ function ESERK5ConstantCache(zprev) 0.72398390955047198236, -0.87143706204614868049, 0.85472038463609822934, - -0.91627831765765133110, + -0.9162783176576513311, 0.80531604865201456001, -0.76846333364451802073, 0.56030985966490820527, @@ -9661,7 +9662,7 @@ function ESERK5ConstantCache(zprev) 0.51843639774951677524, -0.22685855458903778081, -0.22886199847962415688, - 0.57103991466099957020, + 0.5710399146609995702, -1.00695494193384327275, 1.24952747512928108442, -1.50248092297402968676, @@ -9676,7 +9677,7 @@ function ESERK5ConstantCache(zprev) -2.25162393438726837758, 2.07969499352255393632, -1.58062814099667670042, - 0.51311415807653626420, + 0.5131141580765362642, 0.76453085611604254535, -2.23866284614346078286, 3.25560173911579919803, @@ -9684,19 +9685,19 @@ function ESERK5ConstantCache(zprev) 2.30425979699765282049, 0.43561447945897691092, -4.41194908562903709281, - 7.24024488771350505090, + 7.2402448877135050509, -4.01050012317885951063, -15.85444596916714310453, -8.88778087228576652024, -6.25377028840464621595, - -1.65944966610659450090, + -1.6594496661065945009, 2.97909400382810707342, -1.81450851773727306337, 0.25114840546844924285, 0.87854730286933191419, -1.34315559498706726949, 1.26663474498256123368, - -0.83371907077383788920, + -0.8337190707738378892, 0.27864457094387390379, 0.25811023802311350295, -0.65020136593344268761, @@ -9711,7 +9712,7 @@ function ESERK5ConstantCache(zprev) -0.56455400966902902216, 0.62858113949523586328, -0.61144806921697913982, - 0.54562866298965795320, + 0.5456286629896579532, -0.42395517869717219694, 0.28471981453940353735, -0.12300518396376930452, @@ -9745,9 +9746,9 @@ function ESERK5ConstantCache(zprev) 0.07079119174727500907, -0.12383579143511973253, 0.17652616955919134267, - -0.20979846331024545880, + -0.2097984633102454588, 0.24052460298977218489, - -0.25091424448512539280, + -0.2509142444851253928, 0.25857134773581230691, -0.24684837958393529567, 0.23389187846196091147, @@ -9788,7 +9789,7 @@ function ESERK5ConstantCache(zprev) -0.27708995833154193011, 0.26798508531255021969, -0.24790529026983809668, - 0.22973507620991440170, + 0.2297350762099144017, -0.20162880466527921541, 0.17635346537188273386, -0.14241246945168695159, @@ -9802,12 +9803,12 @@ function ESERK5ConstantCache(zprev) 0.12547797175666985936, -0.15019594584754389355, 0.17742637379875486614, - -0.19613780907260283670, + -0.1961378090726028367, 0.21670353231089808932, -0.22847475411960485592, 0.24171238597014890748, -0.24614823945207275901, - 0.25192398200826870980, + 0.2519239820082687098, -0.24914091938651325431, 0.24780648987470588196, -0.23837329337399890128, @@ -9823,7 +9824,7 @@ function ESERK5ConstantCache(zprev) -0.05406255840919291233, 0.03376189086919416382, -0.00997894235378066728, - -0.00888129011695501860, + -0.0088812901169550186, 0.03057600358680704483, -0.04700589054293993069, 0.06574195916386696426, @@ -9837,21 +9838,21 @@ function ESERK5ConstantCache(zprev) 0.13320490564051834514, -0.13148663466082557982, 0.13131392796900079323, - -0.12641802962567139090, + -0.1264180296256713909, 0.12320753897965926182, -0.11568897165348185352, 0.11004394568636743923, -0.10054223027428667303, 0.09312656722712626955, -0.08231846346422527771, - 0.07381072610903438580, + 0.0738107261090343858, -0.06236621833568491147, 0.05341815438376572994, -0.04196199786852673058, 0.03316352819384701944, -0.02224401844746402152, - 0.01409604956520090630, - -0.00416206372799996210, + 0.0140960495652009063, + -0.0041620637279999621, -0.00294213068750282967, 0.01155537276620884762, -0.01734004004197639559, @@ -9871,10 +9872,10 @@ function ESERK5ConstantCache(zprev) -0.03834323396520099986, 0.03666982656276017438, -0.03369889352551451445, - 0.03166241519663225840, + 0.0316624151966322584, -0.02856593203728825456, 0.02638365812646261549, - -0.02335856897593827780, + -0.0233585689759382778, 0.02120442173304152786, -0.01839953812496667937, 0.01639572312284542227, @@ -9883,11 +9884,11 @@ function ESERK5ConstantCache(zprev) -0.00998379585331951765, 0.00842761630483854912, -0.00663457255510725187, - 0.00527352178794100040, + 0.0052735217879410004, -0.00376696696089795762, 0.00252718236384272005, -0.00121848363660603332, - 0.13814893193195648680, + 0.1381489319319564868, -0.21887676563497354687, 0.26882707222978580175, -0.20648905764260236384, @@ -9895,7 +9896,7 @@ function ESERK5ConstantCache(zprev) -0.18432402569269357162, 0.22451918933946854451, -0.15296805061695481487, - 0.18885494004191885620, + 0.1888549400419188562, -0.11342070607045229291, 0.14564925261806663248, -0.06707726455291759815, @@ -9903,17 +9904,17 @@ function ESERK5ConstantCache(zprev) -0.01569268134877108492, 0.04327138507873833084, 0.03867299580867714082, - -0.01179882031150282160, + -0.0117988203115028216, 0.09372700631402187954, -0.06635085274379612374, - 0.14703236053908255720, + 0.1470323605390825572, -0.11791313267186361025, 0.19610981476978397997, -0.16402680483831652558, - 0.23854980846759660240, + 0.2385498084675966024, -0.20236106208756066138, 0.27212997859490439811, - -0.23083156462882314930, + -0.2308315646288231493, 0.29493311884957573721, -0.24771650669193226446, 0.30545986705375077763, @@ -9927,18 +9928,18 @@ function ESERK5ConstantCache(zprev) 0.21457586501711850557, -0.13562087517118232016, 0.16180193382488441967, - -0.07839648169962143420, + -0.0783964816996214342, 0.10065868484909942793, -0.01418780778214386723, 0.03404726017573406205, - 0.05385732111521504550, + 0.0538573211152150455, -0.03467139716131217159, 0.12220278326601724528, - -0.10182799806362009820, + -0.1018279980636200982, 0.18709183367769902095, -0.16362730273028600059, - 0.24474242780231969530, - -0.21635428587815797030, + 0.2447424278023196953, + -0.2163542858781579703, 0.29156185876992740669, -0.25659460895364377686, 0.32437018027657898989, @@ -9962,12 +9963,12 @@ function ESERK5ConstantCache(zprev) -0.10212822468275019328, 0.19590097248401530661, -0.18208441727605748084, - 0.27052944770316067480, + 0.2705294477031606748, -0.25007516398988827167, 0.33038472785028510925, -0.30064937085221721258, 0.37039924634423804228, - -0.32923181068051388110, + -0.3292318106805138811, 0.38659585098848364693, -0.33254389497401865006, 0.37648752851532257813, @@ -9981,7 +9982,7 @@ function ESERK5ConstantCache(zprev) 0.09076976284456751698, 0.01583188792248236415, -0.01956221817244807593, - 0.12743077368285296580, + 0.1274307736828529658, -0.13024184092639165544, 0.23467389885774803115, -0.23176395976826802414, @@ -10004,7 +10005,7 @@ function ESERK5ConstantCache(zprev) -0.05975201913279566679, 0.18409462358239542246, -0.20326320080023926873, - 0.32038994456239189290, + 0.3203899445623918929, -0.32842783240068867956, 0.43035609412751024694, -0.41961436072217545012, @@ -10021,7 +10022,7 @@ function ESERK5ConstantCache(zprev) 0.03529126416634398994, 0.11471183018793500163, -0.16307209664212457545, - 0.30923871330046587280, + 0.3092387133004658728, -0.34679444754255966954, 0.47486458249203911119, -0.48749042082334576031, @@ -10041,7 +10042,7 @@ function ESERK5ConstantCache(zprev) 0.54216953832854353212, -0.58884360526632506527, 0.70879412594246349322, - -0.69628491055325647530, + -0.6962849105532564753, 0.74733243943891258798, -0.65927966157882234022, 0.63140347247398254105, @@ -10056,7 +10057,7 @@ function ESERK5ConstantCache(zprev) 0.90308310007381109585, -0.89945479872331324245, 0.92811823289435313455, - -0.78579560035098494630, + -0.7857956003509849463, 0.67093336155195770765, -0.39169983243882128265, 0.15890341975503186056, @@ -10071,13 +10072,13 @@ function ESERK5ConstantCache(zprev) 0.50079465184021421109, 0.05126145455173738291, -0.56040994306131608482, - 1.14758998094562736370, + 1.1475899809456273637, -1.52412128593108309182, - 1.78686306422990659470, + 1.7868630642299065947, -1.65008168406424737817, 1.25190714550941861738, -0.39873471049751241235, - -0.62227472070740075250, + -0.6222747207074007525, 1.80067436878196862615, -2.61310080716648363008, 2.83355063418544927956, @@ -10093,17 +10094,17 @@ function ESERK5ConstantCache(zprev) 0.07562841616499595132, -0.08842253917188380719, 0.02762675339324764667, - 0.02768848989353560330, + 0.0276884898935356033, -0.05416117766964752972, 0.05316093922412389733, -0.03556402800945593357, - 0.01221519304144080310, - 0.00830809685677904100, + 0.0122151930414408031, + 0.008308096856779041, -0.02175157135000937644, 0.02648845395188651614, - -0.02377588944763609630, + -0.0237758894476360963, 0.01553214620068133975, - -0.00469848555368042840, + -0.0046984855536804284, -0.00656071388950411893, 0.01602204701007869936, -0.02274259908317575324, @@ -10126,11 +10127,11 @@ function ESERK5ConstantCache(zprev) 0.00452557570985201267, -0.00799747125831708379, 0.01064470007666748486, - -0.01257621453599424600, + -0.012576214535994246, 0.01345282696573058163, -0.01352893096216050209, 0.01260428577842185802, - -0.01104575124435405210, + -0.0110457512443540521, 0.00874722054988898157, -0.00613624031452956499, 0.00314650356346127171, @@ -10145,7 +10146,7 @@ function ESERK5ConstantCache(zprev) 0.01081981993211846363, -0.00992590135915539726, 0.00849870429387933855, - -0.00685762631779296850, + -0.0068576263177929685, 0.00486702132341688791, -0.00285535290875584512, 0.00069251493078124177, @@ -10154,7 +10155,7 @@ function ESERK5ConstantCache(zprev) 0.00492129178000170944, -0.00641368502579733012, 0.00748732409944671915, - -0.00833378493711959580, + -0.0083337849371195958, 0.00872527314895934179, -0.00888042351388902175, 0.00860286969191913047, @@ -10178,7 +10179,7 @@ function ESERK5ConstantCache(zprev) -0.00273150022970995764, 0.00183709251308330091, -0.00089159689269264586, - -0.00025293940431404620, + -0.0002529394043140462, 0.00138451721441869096, -0.00264464044339711522, 0.00382339822411475192, @@ -10188,23 +10189,23 @@ function ESERK5ConstantCache(zprev) 0.00811856969110467605, -0.00894558822093661013, 0.00953210465455761255, - -0.01002760466894556460, + -0.0100276046689455646, 0.01026051055445166039, -0.01038625529396512183, 0.01024556291721807726, -0.00999943434394384191, 0.00950010329179523313, - -0.00891298129057562470, + -0.0089129812905756247, 0.00810034473599182195, - -0.00723029470025773630, + -0.0072302947002577363, 0.00617323540791399426, -0.00509790597848475396, 0.00388070909149846937, -0.00268886772389875621, - 0.00140265635777726350, + 0.0014026563577772635, -0.00018572752138019881, -0.00107971195538784123, - 0.00223537072784941180, + 0.0022353707278494118, -0.00339872093024317637, 0.00441824261362330686, -0.00541227768011322535, @@ -10213,7 +10214,7 @@ function ESERK5ConstantCache(zprev) 0.00760299723038224129, -0.00813043006934962079, 0.00846747438072744003, - -0.00873762453849252600, + -0.008737624538492526, 0.00882150975609156084, -0.00884380047946238708, 0.00869237731310110867, @@ -10249,7 +10250,7 @@ function ESERK5ConstantCache(zprev) -0.00070204706054099563, 0.00043933955400869126, -0.00019880382786149431, - -0.00007914794267091590, + -0.0000791479426709159, 0.00032531297284683073, -0.00059671884039241569, 0.00082820742706243833, @@ -10281,13 +10282,13 @@ function ESERK5ConstantCache(zprev) 0.00058788218820656401, -0.00050004472330669465, 0.00041352659052791075, - -0.00034202522962347250, + -0.0003420252296234725, 0.00027311414817503092, -0.00021667848382345297, 0.00016298431050081286, - -0.00011821559483380890, + -0.0001182155948338089, 0.00007546397955739889, - -0.00003736398981447760, + -0.0000373639898144776, 0.03631793980831531099, -0.07765027337356482373, 0.07116461046615653319, @@ -10309,17 +10310,17 @@ function ESERK5ConstantCache(zprev) -0.01275460452329934755, 0.01375629452576311411, -0.02525334013543111683, - 0.02560253695017628700, + 0.025602536950176287, -0.03631209237973705151, 0.03575092941265174684, -0.04543428889303084695, 0.04374638518505744728, - -0.05221243805635425450, + -0.0522124380563542545, 0.04923468822797985589, -0.05635076981646341271, - 0.05198309590071352460, + 0.0519830959007135246, -0.05768348575785894189, - 0.05189593491433835970, + 0.0518959349143383597, -0.05618741696691833404, 0.04902405924886384103, -0.05198804693667022359, @@ -10336,19 +10337,19 @@ function ESERK5ConstantCache(zprev) -0.00642032897522229039, 0.00624295627158918173, -0.01651969949756997708, - 0.01563978014573293510, + 0.0156397801457329351, -0.02505233068068314292, 0.02316174570391102069, -0.03142790653536981643, 0.02827549573553880466, - -0.03517992225435484510, + -0.0351799222543548451, 0.03059055681950170746, - -0.03600221950882043220, + -0.0360022195088204322, 0.02989229767110182165, -0.03377766525110919432, - 0.02616565569370147420, - -0.02859629666527732650, - 0.01960712812853175960, + 0.0261656556937014742, + -0.0285962966652773265, + 0.0196071281285317596, -0.02076065736487215166, 0.01062303695583281804, -0.01077667281234008512, @@ -10356,9 +10357,9 @@ function ESERK5ConstantCache(zprev) 0.00067075281965968934, -0.01206306857883535956, 0.01275721761100228127, - -0.02412962001154317360, + -0.0241296200115431736, 0.02457202396785689372, - -0.03545656731859627570, + -0.0354565673185962757, 0.03518251854302397591, -0.04512688094797168842, 0.04370577538885474234, @@ -10372,14 +10373,14 @@ function ESERK5ConstantCache(zprev) 0.04501733766771998796, -0.04648304980845818085, 0.03642996921753535039, - -0.03641115687583110910, + -0.0364111568758311091, 0.02507368583837465623, -0.02400175517217327179, 0.01187708758410004756, -0.01030614942914626075, -0.00200533989037952106, - 0.00344099732292583310, - -0.01528492478956629090, + 0.0034409973229258331, + -0.0152849247895662909, 0.01592592344904504575, -0.02665397129796062692, 0.02587978251558537696, @@ -10399,10 +10400,10 @@ function ESERK5ConstantCache(zprev) -0.01628413656917340746, 0.01814612779418169758, -0.03020024676289197879, - 0.03077381797906333580, + 0.0307738179790633358, -0.04102501222685589477, 0.03931247340617097241, - -0.04683486461722753680, + -0.0468348646172275368, 0.04201600654272136942, -0.04612815226355859027, 0.03769156022974325809, @@ -10410,17 +10411,17 @@ function ESERK5ConstantCache(zprev) 0.02593495665632528438, -0.02274996729139621907, 0.00729837178160303371, - -0.00119918953526146560, + -0.0011991895352614656, -0.01664620310119152916, - 0.02450738265664192950, + 0.0245073826566419295, -0.04337749281180810351, 0.05144727284097729697, -0.06964643737881591468, 0.07613788464629420161, -0.09184680299531439163, 0.09497369269097051536, - -0.10650931453599780940, - 0.10476432491274392800, + -0.1065093145359978094, + 0.104764324912743928, -0.11086739518524059422, 0.10330856000219824919, -0.10341726640637771695, @@ -10444,20 +10445,20 @@ function ESERK5ConstantCache(zprev) -0.00217863152692303113, 0.01715830362602113746, -0.04353416597880189337, - 0.05861333150798791330, + 0.0586133315079879133, -0.08225130795704284348, 0.09166125813452689897, -0.10678075427312169743, 0.10511988204129621427, -0.10712296055559972219, 0.09103138126339899161, - -0.07821013277687964560, + -0.0782101327768796456, 0.04799014890519779503, - -0.02292059977299357870, + -0.0229205997729935787, -0.01644975044819159751, 0.04643367829307379346, -0.08551907461360432061, - 0.10936787153162456920, + 0.1093678715316245692, -0.13623403477978063281, 0.14208961076497741982, -0.14611071351975285504, @@ -10466,7 +10467,7 @@ function ESERK5ConstantCache(zprev) 0.05716387054359083758, -0.01365103497855491878, -0.04415025573241838919, - 0.08870592718091323270, + 0.0887059271809132327, -0.13418746052422259041, 0.15216866558753439076, -0.15775517369432828785, @@ -10482,7 +10483,7 @@ function ESERK5ConstantCache(zprev) -0.04587988494576868831, 0.22732264239898053448, -0.37473643621592983566, - 0.37764078813887796970, + 0.3776407881388779697, -0.17274466826308160217, -0.27465334968668181359, 0.75391771877883873021, @@ -10493,14 +10494,14 @@ function ESERK5ConstantCache(zprev) -1.90409522205926040606, 2.21005748887198372188, -0.74876248984935878106, - -0.58000061255369483870, + -0.5800006125536948387, 1.21761354137765498429, -1.19487031577035307528, 0.77485019706792535032, -0.21577148212460778298, -0.27447811654560594352, 0.59583024277373541899, - -0.70723439227435014320, + -0.7072343922743501432, 0.64087449544504326848, -0.44080160635154885806, 0.17959666395283174767, @@ -10514,7 +10515,7 @@ function ESERK5ConstantCache(zprev) -0.20817054913246707537, 0.04858440855949413412, 0.10492864972584374506, - -0.22899568965320366010, + -0.2289956896532036601, 0.32230725124187215025, -0.37135763584191294751, 0.38423901686813199952, @@ -10542,11 +10543,11 @@ function ESERK5ConstantCache(zprev) 0.30660132259408529043, -0.32095736916391831572, 0.32523269883315725215, - -0.31285571301464715210, + -0.3128557130146471521, 0.29232560850313138445, -0.25820877627121985309, 0.21970520593088202488, - -0.17202560981647588290, + -0.1720256098164758829, 0.12456661851601050217, -0.07269342321380749261, 0.02554433942415287873, @@ -10560,12 +10561,12 @@ function ESERK5ConstantCache(zprev) -0.14858509216380627604, 0.13781035852633369276, -0.11768719376500363927, - 0.09571446725826526780, + 0.0957144672582652678, -0.06679361983226078658, 0.03852579074912367008, -0.00600371986194907486, -0.02327881515730110401, - 0.05423322728989378450, + 0.0542332272898937845, -0.07964892603243896307, 0.10459337624589176707, -0.12226423903030436691, @@ -10575,7 +10576,7 @@ function ESERK5ConstantCache(zprev) -0.14644144553074947557, 0.14007435868712861393, -0.12569189568387537093, - 0.10939972292947217070, + 0.1093997229294721707, -0.08618119358431841626, 0.06227440581718092505, -0.03294238458908917838, @@ -10603,12 +10604,12 @@ function ESERK5ConstantCache(zprev) 0.06700179784867221766, -0.03775033248464241403, 0.01059315319219051796, - 0.01822283151466618650, + 0.0182228315146661865, -0.04398938723339784751, 0.07043031764407481354, - -0.09302091727336539440, + -0.0930209172733653944, 0.11548425374276592714, - -0.13350221577087414970, + -0.1335022157708741497, 0.15081454906855035203, -0.16332154831648404425, 0.17478593176170151291, @@ -10623,7 +10624,7 @@ function ESERK5ConstantCache(zprev) -0.14330751255436768865, 0.13017101651656559635, -0.11425277892891877451, - 0.09914559671375984540, + 0.0991455967137598454, -0.08192064687938230283, 0.06606144677240954888, -0.04871693794860821464, @@ -10634,13 +10635,13 @@ function ESERK5ConstantCache(zprev) -0.02378566857028384385, 0.03584787511311805092, -0.04511512892121883472, - 0.05425353880190454670, + 0.0542535388019045467, -0.06052615486580106147, 0.06655979146428958604, -0.06977314041127101463, 0.07274780487591613054, -0.07305058090718304087, - 0.07320891258080362840, + 0.0732089125808036284, -0.07092761468766348165, 0.06866897568248005179, -0.06426419885456373382, @@ -10666,7 +10667,7 @@ function ESERK5ConstantCache(zprev) 0.03105012938461845437, -0.03074029710647357277, 0.03053728987766025915, - -0.02933485837395841470, + -0.0293348583739584147, 0.02830401416885677118, -0.02644485156595319589, 0.02483399821795308215, @@ -10678,25 +10679,25 @@ function ESERK5ConstantCache(zprev) 0.01191931035437952639, -0.00980860139556665421, 0.00815230141392810949, - -0.00640507618854742420, + -0.0064050761885474242, 0.00510080048521225921, -0.00377739242502391371, 0.00285453803079736878, -0.00195414156700466583, - 0.00138311730213742890, + 0.0013831173021374289, -0.00084941669009575623, 0.00054982912602153722, -0.00028152483131873153, - 0.00013478861363643130, + 0.0001347886136364313, -0.24892604313593230669, 0.55070215055372750967, -0.48676198961813937904, - 0.52878960622783732770, + 0.5287896062278373277, -0.45424585817582013858, 0.48591137576003240461, -0.40146614544826825233, 0.42370883887769628107, - -0.33053159803503667780, + -0.3305315980350366778, 0.34474121959334025345, -0.24442973056323447079, 0.25239692607298103155, @@ -10711,7 +10712,7 @@ function ESERK5ConstantCache(zprev) 0.26446705731484970725, -0.25265197547109519149, 0.34799476569142573368, - -0.32827487158260898470, + -0.3282748715826089847, 0.41468376440178761344, -0.38520218786111670717, 0.46103553609282532655, @@ -10732,7 +10733,7 @@ function ESERK5ConstantCache(zprev) -0.05043264595351347468, 0.05317484652881588475, 0.05438812349118683082, - -0.05078671479463467420, + -0.0507867147946346742, 0.15579200901397294299, -0.14804492258161125462, 0.24724893090900240677, @@ -10745,8 +10746,8 @@ function ESERK5ConstantCache(zprev) -0.35341435157114198251, 0.40481281980426248035, -0.33890735738916266673, - 0.37576189982159124980, - -0.29565414856154653700, + 0.3757618998215912498, + -0.295654148561546537, 0.31880097507338178708, -0.22583723777754433071, 0.23712563441180728452, @@ -10763,7 +10764,7 @@ function ESERK5ConstantCache(zprev) 0.40959461751356396331, -0.39112972056092926154, 0.47489864161559841582, - -0.44111491709598049660, + -0.4411149170959804966, 0.50819162364682046729, -0.45675260377030818537, 0.50544676006579891681, @@ -10782,15 +10783,15 @@ function ESERK5ConstantCache(zprev) 0.23569148464538561272, -0.23939378609657901986, 0.34518649332186601697, - -0.33354934520867507430, + -0.3335493452086750743, 0.42119150937536165014, - -0.38905676085223717120, + -0.3890567608522371712, 0.45418756743364474548, -0.39814461173622905932, 0.43844120466236835565, -0.35737295127871610001, - 0.37301738548627966230, - -0.26846995090307795850, + 0.3730173854862796623, + -0.2684699509030779585, 0.26240440068136439145, -0.13871220438014600362, 0.11662049627017984088, @@ -10805,7 +10806,7 @@ function ESERK5ConstantCache(zprev) 0.55748425491219910644, -0.51930719817848192132, 0.57176596697473780484, - -0.49716567398442984560, + -0.4971656739844298456, 0.51200792338136591475, -0.39987104249429616942, 0.37839486363049090745, @@ -10824,13 +10825,13 @@ function ESERK5ConstantCache(zprev) 0.87834340829338708456, -0.80056581881089439179, 0.80129721074024873317, - -0.66555787856143922010, - 0.61122138484887633680, + -0.6655578785614392201, + 0.6112213848488763368, -0.42593276064831325778, 0.32994616259222103727, - -0.11335983368595288490, + -0.1133598336859528849, -0.00159973787643288802, - 0.22303597622915408150, + 0.2230359762291540815, -0.32765221200521038591, 0.52289072849282469679, -0.58573233149910297612, @@ -10841,14 +10842,14 @@ function ESERK5ConstantCache(zprev) 0.65470314771866533476, -0.47524137321570425474, 0.36597483589678186933, - -0.11956144975966648270, + -0.1195614497596664827, -0.03911930382863518935, 0.31271447041279804013, -0.47271651802373809703, 0.71913440317275201252, -0.82258844310978873615, 0.98384132656850242782, - -0.97655088085993446700, + -0.976550880859934467, 1.00648125735587656848, -0.85467251491186491119, 0.73603035329365984474, @@ -10862,22 +10863,22 @@ function ESERK5ConstantCache(zprev) -1.40377421815429692664, 1.43814236935668837702, -1.22984665226680234262, - 0.99393550708594780030, + 0.9939355070859478003, -0.53318857030201249891, 0.09422300047126874745, 0.48749293536822480011, - -0.93582091723120175430, + -0.9358209172312017543, 1.39323144436611867647, -1.57473840051608027224, 1.63209232528822001385, -1.31274458452386433294, 0.82631075462194825132, - -0.00341286152750289260, + -0.0034128615275028926, -0.84375550758438644383, 1.77415756366738608385, -2.37774725378083351401, 2.65621295385104971842, - -2.21906145395730991510, + -2.2190614539573099151, 1.20286308650637829842, 0.49940847231607321532, -2.31011817016962250904, @@ -10888,29 +10889,29 @@ function ESERK5ConstantCache(zprev) -7.52425239698525682996, 6.55251073439715447932, 15.14136800650187097972, - 10.52114460979744592350, - 15.21911583691113278860, - 6.39328678795770333210, + 10.5211446097974459235, + 15.2191158369111327886, + 6.3932867879577033321, -7.41011180789404999558, 2.53239353046181792095, - 1.89997011468264598300, + 1.899970114682645983, -4.03211079373534264647, 3.95948143261477669697, -2.56613291921550068508, 0.70567301299961449068, 0.92189152649360672775, - -1.99004520307769516840, + -1.9900452030776951684, 2.35497733792939101249, -2.13093891673292334943, 1.45786296077691401862, - -0.58458244299576245240, + -0.5845824429957624524, -0.32914117618479610261, 1.09205127582772809625, -1.64196428390098714267, - 1.89834118993075984250, + 1.8983411899307598425, -1.90130264214295885417, 1.65378421918737950058, - -1.25349834069664534120, + -1.2534983406966453412, 0.73612280128129647938, -0.20837703281842834269, -0.30260372847880728786, @@ -10919,7 +10920,7 @@ function ESERK5ConstantCache(zprev) 1.18346392458882387899, -1.22658378924620303785, 1.12946035541972400473, - -0.94740308180195964560, + -0.9474030818019596456, 0.67360009642812412878, -0.37220585253240795476, 0.03984880747310132892, @@ -10943,21 +10944,21 @@ function ESERK5ConstantCache(zprev) 1.03755684793826774559, -1.05574680113225793932, 1.01575088086706899482, - -0.95130213322205736670, + -0.9513021332220573667, 0.83889955801219684428, -0.71453893482129404724, 0.55694098646817702392, -0.40268386767241776125, 0.23107738465042826359, - -0.07776568008901044160, + -0.0777656800890104416, -0.07869797608855501336, 0.20473920000220752202, -0.32346178913142709099, 0.40401499695541082113, - -0.47156680482878715610, + -0.4715668048287871561, 0.49816112435228793176, -0.51098349554888367052, - 0.48473367122981220190, + 0.4847336712298122019, -0.44821320133819947396, 0.37824620161964511711, -0.30462224077819455292, @@ -10966,7 +10967,7 @@ function ESERK5ConstantCache(zprev) 0.00048939136838098093, 0.09700617916370998794, -0.20222805569632520961, - 0.28657214230070643390, + 0.2865721423007064339, -0.37145946291103920656, 0.42972160198810321896, -0.48354851297556766809, @@ -10978,7 +10979,7 @@ function ESERK5ConstantCache(zprev) -0.38732436984004525726, 0.30827206154428765661, -0.22887405610282010593, - 0.12921997271399962570, + 0.1292199727139996257, -0.03430039899403965892, -0.07513267417005277393, 0.17439879391046470003, @@ -10993,7 +10994,7 @@ function ESERK5ConstantCache(zprev) -0.77219381006011145185, 0.76765446152624772225, -0.75824702559641032895, - 0.72512758560489010140, + 0.7251275856048901014, -0.68843905734490706827, 0.63028615681805300053, -0.57088262017610569288, @@ -11007,13 +11008,13 @@ function ESERK5ConstantCache(zprev) 0.12162083376040949689, -0.20877360511826736911, 0.28160750966241454574, - -0.35559110744117350400, - 0.41331795972296492270, + -0.355591107441173504, + 0.4133179597229649227, -0.47023771530942876096, 0.50974529002267632283, -0.54729236587931584523, 0.56707869842696045914, - -0.58454494984790283940, + -0.5845449498479028394, 0.58466763527417953128, -0.58283469108620811205, 0.56474594512201969909, @@ -11041,11 +11042,11 @@ function ESERK5ConstantCache(zprev) -0.28529882505267295523, 0.28511358117761886888, -0.28530805972459727382, - 0.27643891371935142010, + 0.2764389137193514201, -0.26847644000729531388, 0.25247266340686536079, -0.23806653923132489736, - 0.21676479007934959520, + 0.2167647900793495952, -0.19783454496424515701, 0.17319773455557191388, -0.15171172693402698584, @@ -11053,11 +11054,11 @@ function ESERK5ConstantCache(zprev) -0.10351098460664354128, 0.07786187882016040729, -0.05667597056016079188, - 0.03293135102568308520, + 0.0329313510256830852, -0.01408543019169738834, -0.00657125899438328141, 0.02207973409034850662, - -0.03884341766405001450, + -0.0388434176640500145, 0.05040422049219203671, -0.06285815531255829758, 0.07024312477191040072, @@ -11065,8 +11066,8 @@ function ESERK5ConstantCache(zprev) 0.08167003645663367672, -0.08568565426151310283, 0.08537792814399740304, - -0.08585052602415998990, - 0.08254464378237437450, + -0.0858505260241599899, + 0.0825446437823743745, -0.08019647624725073642, 0.07467613351919169529, -0.07033147513594018019, @@ -11080,7 +11081,7 @@ function ESERK5ConstantCache(zprev) -0.02065713965596042631, 0.01539281483409480136, -0.01177373994949019141, - 0.00790904974579188270, + 0.0079090497457918827, -0.00551400015504532968, 0.00305195514280329292, -0.00178834490301122188, @@ -11094,7 +11095,7 @@ function ESERK5ConstantCache(zprev) -0.98043424984515759046, 0.80582597081430007435, -0.89641200980738777737, - 0.70209200249851866360, + 0.7020920024985186636, -0.77375813198465459575, 0.56195449672983155409, -0.61739933237842847813, @@ -11102,10 +11103,10 @@ function ESERK5ConstantCache(zprev) -0.43405397648071875061, 0.19753891743428092509, -0.23199108019583383755, - -0.01028402428243826820, + -0.0102840242824382682, -0.02069927807289547242, -0.22226003674869992954, - 0.18952516670081778760, + 0.1895251667008177876, -0.42786515741247727052, 0.38805736595635603736, -0.61650576414995328367, @@ -11114,24 +11115,24 @@ function ESERK5ConstantCache(zprev) 0.70909149970148388498, -0.90344136294076049509, 0.81354585601541551387, - -0.98512158582068076740, - 0.87128393542528359550, + -0.9851215858206807674, + 0.8712839354252835955, -1.01764016259535483577, 0.87803607906462255439, -0.99801178766455622693, 0.83217883553499616411, -0.92603629563372968914, 0.73497910576850611353, - -0.80447237014111272480, + -0.8044723701411127248, 0.59069178852439963023, -0.63905428452332102562, 0.40649168086700682156, -0.43833604829652444979, 0.19222808665926299776, -0.21335592236169098612, - -0.04000000097176021480, + -0.0400000009717602148, 0.02287558175594005955, - -0.27643948837801968210, + -0.2764394883780196821, 0.25604979949221468027, -0.50242920735126272991, 0.47136979108452703446, @@ -11161,20 +11162,20 @@ function ESERK5ConstantCache(zprev) -0.73749138849298456755, 0.71358211988198094744, -0.94442346597576520839, - 0.89099890600147335640, + 0.8909989060014733564, -1.08790490478177281908, 0.99709414264366835745, - -1.15339661116074188030, + -1.1533966111607418803, 1.01992154207313201475, -1.13189988949188813372, - 0.95374161132707369060, - -1.02119362945030145440, + 0.9537416113270736906, + -1.0211936294503014544, 0.80004956813747651889, -0.82661797220606092473, 0.56808252224225408433, -0.56127645114627966461, - 0.27469264082477956590, - -0.24556179443725112410, + 0.2746926408247795659, + -0.2455617944372511241, -0.05648636454350901975, 0.09404159676015234892, -0.39659746610162882607, @@ -11192,7 +11193,7 @@ function ESERK5ConstantCache(zprev) -1.00379737939842161865, 0.74198401731305607676, -0.71987540131364835538, - 0.41065212837538395130, + 0.4106521283753839513, -0.34863458849935630157, 0.00889211516269770678, 0.07338561749279438884, @@ -11200,25 +11201,25 @@ function ESERK5ConstantCache(zprev) 0.50031081911219266178, -0.83193453767660230369, 0.88124177484173149555, - -1.17059805362829072450, + -1.1705980536282907245, 1.16580612062963928643, -1.38986821636076873787, 1.31047776066340460055, -1.45207321268915867662, 1.28499411301834043364, - -1.33579689832859460630, + -1.3357968983285946063, 1.07804767891441644068, -1.04087016849643032579, 0.70134927041213379617, -0.59128509209787705192, 0.19118747404542044133, -0.03521848564395468895, - -0.39323116488816245440, + -0.3932311648881624544, 0.55841561353847446458, -0.97506929640861383923, 1.10708362374665369998, -1.46872925484800886942, - 1.52510331025546297390, + 1.5251033102554629739, -1.79169311425600730203, 1.73654126707801204077, -1.87808662428867778615, @@ -11244,7 +11245,7 @@ function ESERK5ConstantCache(zprev) 0.36606890358495725035, 0.02774125125270622202, -0.69944211368106601334, - 1.09671072624372123450, + 1.0967107262437212345, -1.70324502315363512928, 1.96479751531745150395, -2.36670765670708904693, @@ -11253,7 +11254,7 @@ function ESERK5ConstantCache(zprev) 2.09649232940916441237, -1.82536971262108904668, 1.13263942002057937941, - -0.56535604680004902800, + -0.565356046800049028, -0.34931705282391056766, 1.03732694091078969656, -1.94804329037403989311, @@ -11266,13 +11267,13 @@ function ESERK5ConstantCache(zprev) 1.11767841786991750652, -0.06151102322973400066, -1.33732222168263281681, - 2.41410344726619019440, + 2.4141034472661901944, -3.51265636488364885182, 3.94720656360043520294, -4.08369099671833168941, 3.31436323338834437635, -2.14387721384825846727, - 0.16427378813282544900, + 0.164273788132825449, 1.87376540043128136936, -4.11302687139543277084, 5.56814317288179250198, @@ -11284,7 +11285,7 @@ function ESERK5ConstantCache(zprev) -9.15633456552399138673, 9.20461134800343927509, -4.26523156874811615324, - -6.49539784294017064070, + -6.4953978429401706407, 18.02112718256827506025, -15.70123760175066252032, -36.35173179781369157126, @@ -11293,24 +11294,24 @@ function ESERK5ConstantCache(zprev) -5.12715083004321847682, 5.93928745676061176084, -2.03274557675847056259, - -1.51451009252370027980, + -1.5145100925237002798, 3.22457972631658007501, -3.16784045871479191803, 2.05746726843837457466, - -0.57042250337407318650, + -0.5704225033740731865, -0.72741459330420699114, 1.58069397183810012031, - -1.86855356052987997550, + -1.8685535605298799755, 1.68819483339611720041, -1.14581087658173763622, 0.44620696081727234672, 0.28850096967280602911, -0.89963063118378705507, 1.34306835529483636904, - -1.54876794465888689700, + -1.548767944658886897, 1.55439912431969551321, -1.35675743862027275988, - 1.03952607928391715930, + 1.0395260792839171593, -0.62575648606060352286, 0.20627752262105078507, 0.20263126292798566697, @@ -11328,18 +11329,18 @@ function ESERK5ConstantCache(zprev) -0.64455582752186413309, 0.77067292565377065738, -0.82163216900163649203, - 0.82806135946382519730, - -0.76293003598903885720, + 0.8280613594638251973, + -0.7629300359890388572, 0.66389032989737928325, -0.51011541151129768945, 0.34296730962854332647, - -0.14434496157897311330, + -0.1443449615789731133, -0.04408038983469282635, 0.24081397165276860473, -0.40659137416184176761, 0.56252897969290927005, -0.67341740450394871331, - 0.76406253412745739340, + 0.7640625341274573934, -0.80384082239861698316, 0.82127836286434341417, -0.78993478321866505976, @@ -11351,13 +11352,13 @@ function ESERK5ConstantCache(zprev) -0.17315843824168436482, 0.05339065771050366394, 0.07105813907723647349, - -0.16907038339904245650, + -0.1690703833990424565, 0.26336720973583410688, -0.32507080628234136244, - 0.37849185362108217490, - -0.39712907310076922540, + 0.3784918536210821749, + -0.3971290731007692254, 0.40684533343248008297, - -0.38332480530026880050, + -0.3833248053002688005, 0.35366125923260804953, -0.29529911254294649581, 0.23606060786948154795, @@ -11369,7 +11370,7 @@ function ESERK5ConstantCache(zprev) -0.24343218337725786027, 0.31310492203661655086, -0.35953775050177311234, - 0.40419368103845898510, + 0.4041936810384589851, -0.42298504269968256741, 0.43803134159363332767, -0.42666344101943859402, @@ -11385,7 +11386,7 @@ function ESERK5ConstantCache(zprev) 0.20731303569443726431, -0.28094752401685890719, 0.35908932278526367599, - -0.41995843106375413400, + -0.419958431063754134, 0.48195542190018864082, -0.52419015712949301733, 0.56522971152364476222, @@ -11403,25 +11404,25 @@ function ESERK5ConstantCache(zprev) 0.18459837826565755892, -0.10753409130926362691, 0.03865274404790749324, - 0.03728867755777333370, + 0.0372886775577733337, -0.10257441363210667573, - 0.17224806543860243790, + 0.1722480654386024379, -0.22920329467451441841, 0.28836034827747436537, -0.33328377121196645083, 0.37881682809333583339, -0.40922641281965271842, 0.43929554114256019748, - -0.45399623791761062330, + -0.4539962379176106233, 0.46804081107410278051, -0.46708395142408032363, - 0.46573388328452991480, + 0.4657338832845299148, -0.45028521013336758605, 0.43519126547796882498, -0.40732938218323239132, 0.38093584726485024694, -0.34340527704596701675, - 0.30868952957031164930, + 0.3086895295703116493, -0.26463275381757944693, 0.22483545827655807003, -0.17752659732684564209, @@ -11430,7 +11431,7 @@ function ESERK5ConstantCache(zprev) 0.04804782517726757796, -0.00339434389327539394, -0.03325051867275744671, - 0.07280246605507072200, + 0.072802466055070722, -0.10357793254215029444, 0.13626590148467246366, -0.15972928895170029895, @@ -11476,17 +11477,17 @@ function ESERK5ConstantCache(zprev) 0.03839504732452599794, -0.03239272408625110122, 0.02794381651458949581, - -0.02255505110132232510, + -0.0225550511013223251, 0.01871228337707497164, -0.01426747871965153985, 0.01128131444118630165, - -0.00794903362503778660, + -0.0079490336250377866, 0.00590612271123511397, -0.00369300928781135214, - 0.00252371248590957170, + 0.0025237124859095717, -0.00128928610250669015, 0.00078928191888214243, - -0.00027377956112764460, + -0.0002737795611276446, 0.00013745678214764474, -0.23249802019049525814, 0.55668432602463802095, @@ -11494,9 +11495,9 @@ function ESERK5ConstantCache(zprev) 0.53227667388444865892, -0.41646559088030182805, 0.48410919882651337609, - -0.35702099710292029000, + -0.35702099710292029, 0.41372938347107485191, - -0.27657840016169321640, + -0.2765784001616932164, 0.32385217851643899323, -0.17841540196981037214, 0.21829363599935833196, @@ -11509,7 +11510,7 @@ function ESERK5ConstantCache(zprev) 0.29301928959008227693, -0.25465724063285333223, 0.40072516412370157157, - -0.35494472455217668250, + -0.3549447245521766825, 0.49192237407030009466, -0.43585212667231387762, 0.56105965134165336483, @@ -11528,9 +11529,9 @@ function ESERK5ConstantCache(zprev) -0.19995026876170843289, 0.22610623224930581632, -0.06274867069642647843, - 0.08271058998739976020, + 0.0827105899873997602, 0.08457318400193283847, - -0.06654055660008792450, + -0.0665405566000879245, 0.23327769032583739461, -0.21255644266570117296, 0.37405146632101893278, @@ -11561,7 +11562,7 @@ function ESERK5ConstantCache(zprev) 0.50937834376351087684, -0.48873652006309969975, 0.64140742491236812928, - -0.60057558300622737590, + -0.6005755830062273759, 0.73012382585966328907, -0.66400277392209905436, 0.76613734476702155529, @@ -11575,7 +11576,7 @@ function ESERK5ConstantCache(zprev) 0.34019953566913097021, -0.14415312032732482961, 0.12335354944294529833, - 0.08243944524205833180, + 0.0824394452420583318, -0.10829126349482874614, 0.31374638473087118617, -0.33407297827000242973, @@ -11583,7 +11584,7 @@ function ESERK5ConstantCache(zprev) -0.53227393565673764009, 0.70472335017150644632, -0.68212347732269296152, - 0.82339424105844305490, + 0.8233942410584430549, -0.76595423777283011546, 0.86904428603766847861, -0.77131464356629186874, @@ -11613,14 +11614,14 @@ function ESERK5ConstantCache(zprev) 0.45574231622054495183, -0.19219060004345947523, 0.09333392025045668394, - 0.18973415403756116460, + 0.1897341540375611646, -0.29545835333512510124, 0.57137415510868405644, -0.65579681678645496135, 0.89583108978474323969, -0.93070797512477332347, 1.10822142574585713604, - -1.06967775178194091090, + -1.0696777517819409109, 1.16471644697466381047, -1.03782596837726281969, 1.04149670645637604238, @@ -11640,13 +11641,13 @@ function ESERK5ConstantCache(zprev) -1.21708723822120790103, 1.15638237227452034261, -0.85280612890078355548, - 0.66396212407029731040, + 0.6639621240702973104, -0.25262138332276629082, -0.01588156087054487173, 0.47103214460002479358, -0.74191878211444906022, 1.15357621088123707409, - -1.33392696995948911720, + -1.3339269699594891172, 1.60898370801269785524, -1.61176024477343982078, 1.67604514943933424753, @@ -11665,7 +11666,7 @@ function ESERK5ConstantCache(zprev) 1.38835124898718875741, -0.64637925054535472214, -0.05821614859134709163, - 0.99148388396323927640, + 0.9914838839632392764, -1.70890149327622009601, 2.44100171471338311946, -2.72934606745985108844, @@ -11681,7 +11682,7 @@ function ESERK5ConstantCache(zprev) 1.78537626253131143095, 0.92671190785142176782, -3.81113160563622876964, - 6.15069560943301762990, + 6.1506956094330176299, -6.17657310433698381047, 2.87732978169126774048, 4.30305434876685755086, @@ -11695,13 +11696,13 @@ function ESERK5ConstantCache(zprev) -0.00001521000595557011, 0.00027398548342579915, 0.00073512373866757206, - -0.00064260917193460180, + -0.0006426091719346018, 0.00180417053214422204, - -0.00184794280435666850, + -0.0018479428043566685, 0.00312747526494955123, -0.00326900104639994736, - 0.00462442772676165820, - -0.00481864772506705990, + 0.0046244277267616582, + -0.0048186477250670599, 0.00620253007552077924, -0.00640026874402108495, 0.00776236406301094358, @@ -11715,7 +11716,7 @@ function ESERK5ConstantCache(zprev) 0.01189648836463305832, -0.01142121994003524911, 0.01201580161974482794, - -0.01131415408743564020, + -0.0113141540874356402, 0.01167809054720951936, -0.01074480307056118085, 0.01087941698956511501, @@ -11728,7 +11729,7 @@ function ESERK5ConstantCache(zprev) -0.00442009333208929611, 0.00390617999497150674, -0.00218196050828947793, - 0.00162510252038028120, + 0.0016251025203802812, 0.00011244329115171834, -0.00065253523439866138, 0.00234317930148224144, @@ -11765,13 +11766,13 @@ function ESERK5ConstantCache(zprev) 0.00160212889649769897, -0.00100605158723758494, 0.00148233154909979139, - -0.00067292207076228650, + -0.0006729220707622865, 0.00094771717591868353, 0.00004555942976554221, 0.00006840643276674164, 0.00105758677948408156, -0.00104379941506538786, - 0.00223364027472677980, + 0.0022336402747267798, -0.00224450217332825865, 0.00341780756354929851, -0.00337010909935793425, @@ -11785,7 +11786,7 @@ function ESERK5ConstantCache(zprev) -0.00416414370591024294, 0.00425444856961323861, -0.00303025510467323225, - 0.00286584487534922950, + 0.0028658448753492295, -0.00141591080922636955, 0.00106360228953643701, 0.00052805504172830011, @@ -11793,10 +11794,10 @@ function ESERK5ConstantCache(zprev) 0.00258883309394235695, -0.00299368833279022592, 0.00451100320350257718, - -0.00474483148909560400, + -0.004744831489095604, 0.00602413561108030952, -0.00595644473049580792, - 0.00687638514313882940, + 0.0068763851431388294, -0.00639952971108802022, 0.00687061902247397636, -0.00591744811328860035, @@ -11806,14 +11807,14 @@ function ESERK5ConstantCache(zprev) -0.00209146638737344945, 0.00121846382855522956, 0.00097471559036164945, - -0.00208192436083393020, - 0.00441422459554120360, + -0.0020819243608339302, + 0.0044142245955412036, -0.00555527890460705623, 0.00780898852157403157, -0.00875564432325425489, 0.01069975716812583341, - -0.01122676212471061460, - 0.01265077333707491890, + -0.0112267621247106146, + 0.0126507733370749189, -0.01257153319225289695, 0.01332173335505935398, -0.01252382586749448828, @@ -11826,7 +11827,7 @@ function ESERK5ConstantCache(zprev) 0.00304652115755459432, -0.00045160667461188378, -0.00085737124043553422, - 0.00314795500060798070, + 0.0031479550006079807, -0.00397051990250311612, 0.00560659413059132541, -0.00563034642788333168, @@ -11836,7 +11837,7 @@ function ESERK5ConstantCache(zprev) -0.00320707557070130239, 0.00206115519590946384, 0.00058154647792309667, - -0.00224507645764156780, + -0.0022450764576415678, 0.00515285741726696431, -0.00679182627396027975, 0.00936228511767712643, @@ -11855,7 +11856,7 @@ function ESERK5ConstantCache(zprev) 0.01574120805366409706, -0.01689098479978232842, 0.01802117747482252785, - -0.01663593374186915150, + -0.0166359337418691515, 0.01506774136407418828, -0.01105825775361300549, 0.00720798532964134989, @@ -11879,9 +11880,9 @@ function ESERK5ConstantCache(zprev) -0.01247162704983761396, 0.02591476189131122418, -0.03216820142540192939, - 0.02965907221571128030, + 0.0296590722157112803, -0.01387770969262426199, - -0.01120582373395884700, + -0.011205823733958847, 0.04061182280895620639, -0.05804583552485841069, 0.04766045066510570666, @@ -11890,7 +11891,7 @@ function ESERK5ConstantCache(zprev) 0.10806696084114807144, 0.17843682378793163101, 0.47842391227520308927, - 1.45825968300747077500, + 1.458259683007470775, 0.83132576462511231785, -0.66723464476680049984, 0.02171225490928733667, @@ -11901,24 +11902,24 @@ function ESERK5ConstantCache(zprev) -0.10646053626150528415, 0.23111198299028817837, -0.26012796714001290566, - 0.20854516714871929040, + 0.2085451671487192904, -0.10993948511887567665, -0.00442714422254985186, 0.10485121032524796769, -0.17534029023886726906, 0.20577192002948105354, -0.19888456998144313226, - 0.15953007320330386820, + 0.1595300732033038682, -0.10028989920355950438, 0.03077376583883944042, 0.03611794005561586723, -0.09367360270626558238, 0.13396250518739630242, - -0.15607999855204812700, + -0.156079998552048127, 0.15789287799136256241, -0.14351370195760165815, 0.11471653327137916467, - -0.07813411900576229530, + -0.0781341190057622953, 0.03676690214936276929, 0.00276866973258433876, -0.03841030208840185561, @@ -11927,12 +11928,12 @@ function ESERK5ConstantCache(zprev) 0.08956488893820782615, -0.08649968549226806636, 0.07318993624414650567, - -0.05324279800936745910, + -0.0532427980093674591, 0.02699531440582213226, 0.00132165309775911948, -0.03113691091231646918, 0.05841768735102845916, - -0.08306412741099257480, + -0.0830641274109925748, 0.10179846633630319774, -0.11538486902816166846, 0.12152771681129140302, @@ -11940,7 +11941,7 @@ function ESERK5ConstantCache(zprev) 0.11520460382167241331, -0.10381971930719761932, 0.08705074567645035288, - -0.06779917932192189300, + -0.067799179321921893, 0.04565426807492626443, -0.02361002725863552143, 0.00123380427684040544, @@ -11959,23 +11960,23 @@ function ESERK5ConstantCache(zprev) 0.00351467629417575363, 0.00998329693407704055, -0.02325992673822114415, - 0.03426286202690650290, + 0.0342628620269065029, -0.04402288716346459962, 0.05072640928538115629, - -0.05561579631937920570, + -0.0556157963193792057, 0.05714130427647745591, -0.05676012609673805609, 0.05316975604513151515, -0.04800830648407070772, 0.04017229934495260973, - -0.03142146096117826720, + -0.0314214609611782672, 0.02078426272328487423, - -0.01007044534691206410, + -0.0100704453469120641, -0.00163258327056630239, 0.01253667084173202585, -0.02356315685522314407, 0.03300714531932495699, - -0.04185267825881714560, + -0.0418526782588171456, 0.04852311877943987078, -0.05410043289906278641, 0.05716128899052499296, @@ -11985,13 +11986,13 @@ function ESERK5ConstantCache(zprev) 0.05138719967417147011, -0.04584148761603049765, 0.03828435709523574093, - -0.03016492982784246130, + -0.0301649298278424613, 0.02056815127266224327, -0.01096391735668368964, 0.00048451971329553195, - 0.00941671836057298220, + 0.0094167183605729822, -0.01959614628087994956, - 0.02865069659845986480, + 0.0286506965984598648, -0.03745592224784768942, 0.04468581116984651075, -0.05125765643928380244, @@ -12017,7 +12018,7 @@ function ESERK5ConstantCache(zprev) 0.04669456975554708844, -0.05231192631998033554, 0.05647882444788344253, - -0.05997376795302732100, + -0.059973767953027321, 0.06193622755687495235, -0.06316919791166732134, 0.06288082470258132828, @@ -12039,12 +12040,12 @@ function ESERK5ConstantCache(zprev) -0.02507038161175876093, 0.03039415433526109975, -0.03546651785664508422, - 0.03965557738318532810, + 0.0396555773831853281, -0.04350393592484021188, 0.04642730018850034501, - -0.04896975704422644460, + -0.0489697570442264446, 0.05059305500231987135, - -0.05184039928865975810, + -0.0518403992886597581, 0.05221651202074010373, -0.05226004765821485459, 0.05151454705813745399, @@ -12063,7 +12064,7 @@ function ESERK5ConstantCache(zprev) -0.01790529836345496062, 0.01505756760715391829, -0.01253846175160943342, - 0.01005426234393985360, + 0.0100542623439398536, -0.00792129909982936149, 0.00585839848527716124, -0.00414936650725931076, @@ -12085,7 +12086,7 @@ function ESERK5ConstantCache(zprev) 0.00216835792784213135, -0.00189796130886759826, 0.00158002644754376854, - -0.00128196380477484020, + -0.0012819638047748402, 0.00095592498008923203, -0.00064410984095413209, 0.00031948461989576708, @@ -12100,7 +12101,7 @@ function ESERK5ConstantCache(zprev) -0.08700764785635747844, 0.03885804175843953628, -0.03752493321563430545, - -0.01332907757463144480, + -0.0133290775746314448, 0.01660299069074136491, -0.06857441453678440879, 0.07213955163058374809, @@ -12120,9 +12121,9 @@ function ESERK5ConstantCache(zprev) 0.24243351959784947836, -0.25337716610357485791, 0.21245424684345662336, - -0.21633847717697315960, + -0.2163384771769731596, 0.16880717103897560638, - -0.16662037858669298540, + -0.1666203785866929854, 0.11368247159462982476, -0.10682550778657684543, 0.05006312410541545466, @@ -12135,18 +12136,18 @@ function ESERK5ConstantCache(zprev) 0.15995287176078451519, -0.21202456530303329107, 0.21310334887417931027, - -0.25907973695716435270, + -0.2590797369571643527, 0.25329552495976326298, -0.29172413520090229033, 0.27785232424115402505, -0.30776354394729010799, - 0.28511302351074147010, + 0.2851130235107414701, -0.30611337911601727013, - 0.27460270229655803220, - -0.28693175976927054460, + 0.2746027022965580322, + -0.2869317597692705446, 0.24712485385584279096, -0.25166811432168029183, - 0.20476308116486363620, + 0.2047630811648636362, -0.20301579817081033541, 0.15078329643671972704, -0.14476344537522831124, @@ -12158,7 +12159,7 @@ function ESERK5ConstantCache(zprev) 0.03907830424062719993, -0.08828274400090191376, 0.08631875459822523078, - -0.12872831048133981380, + -0.1287283104813398138, 0.11908445253999626334, -0.15306935414123079564, 0.13446677678816776336, @@ -12189,7 +12190,7 @@ function ESERK5ConstantCache(zprev) 0.03273142877035532805, -0.01810538211934932876, -0.04705028969683502926, - 0.06593420868468305440, + 0.0659342086846830544, -0.13291489838960521275, 0.15102459861599404345, -0.21448564743899872775, @@ -12214,7 +12215,7 @@ function ESERK5ConstantCache(zprev) -0.33260815976823798756, 0.35163376737968538022, -0.40730190563858481578, - 0.40273772891666154150, + 0.4027377289166615415, -0.43213071903516508954, 0.39953267755793997473, -0.40014514438697096343, @@ -12229,32 +12230,32 @@ function ESERK5ConstantCache(zprev) -0.21161987716467769993, 0.24082996183761201658, -0.30262942013516386242, - 0.29929471941645813260, + 0.2992947194164581326, -0.32412581807148205248, 0.28110189462146828454, -0.26546842709083035006, 0.18342067213847890184, -0.13248966423033042838, - 0.02121165254855078910, + 0.0212116525485507891, 0.05072314320592521963, -0.17284182836902853286, 0.24399194249190370165, -0.35275221468047901485, 0.39776819883882352791, -0.46816216596921572668, - 0.46403924066050589170, + 0.4640392406605058917, -0.47681183480061528623, - 0.40977106036587129800, + 0.409771060365871298, -0.35820223509060739042, 0.22988557541046383825, -0.12486081019244382739, - -0.04428069082373820020, + -0.0442806908237382002, 0.17310507395712107503, -0.34534642645284396867, 0.45414102149345608739, -0.58233352659798975903, 0.62415825240054068068, - -0.66567958056419251900, + -0.665679580564192519, 0.60666853525985742213, -0.54083398213240907459, 0.37746753995665865977, @@ -12292,7 +12293,7 @@ function ESERK5ConstantCache(zprev) -6.49141135681125014401, -14.48210407128309462621, -8.41552552066393388941, - 6.77840318992035761880, + 6.7784031899203576188, -0.32404965168956317845, -3.88862613590191497082, 4.73850434131788489367, @@ -12300,9 +12301,9 @@ function ESERK5ConstantCache(zprev) 0.92025138808756179465, 1.17606567785156568284, -2.42062218037937038062, - 2.71072155450642826580, + 2.7107215545064282658, -2.19201416071106969241, - 1.20496808485742645800, + 1.204968084857426458, -0.05753979178165068847, -0.94857227575248803664, 1.65805354688819606146, @@ -12311,7 +12312,7 @@ function ESERK5ConstantCache(zprev) -1.51143344968107795623, 0.92506286091367495583, -0.23400124633942939734, - -0.42829508581612146800, + -0.428295085816121468, 0.99918623119938143606, -1.39496404014389474568, 1.61101026959292115137, @@ -12319,7 +12320,7 @@ function ESERK5ConstantCache(zprev) 1.47236704121828188008, -1.17662390223455592952, 0.80507152505145451737, - -0.38346465853474942520, + -0.3834646585347494252, -0.01775118960966866333, 0.38215333500056658522, -0.65610758005132852055, @@ -12332,14 +12333,14 @@ function ESERK5ConstantCache(zprev) 0.03773258037574108575, 0.25548957559635876446, -0.52161031361883158919, - 0.76360507697375756830, + 0.7636050769737575683, -0.94478377629955101469, 1.07670970628485540566, -1.13256117926400512452, 1.13320728077494403685, -1.06104791019800548391, 0.94449163804411129242, - -0.77255035855469589290, + -0.7725503585546958929, 0.57800268880176874919, -0.35301574433026944311, 0.13124053808255145559, @@ -12347,7 +12348,7 @@ function ESERK5ConstantCache(zprev) -0.29515565334935101038, 0.47894488745768087901, -0.61925933192443838315, - 0.73089862125022020400, + 0.730898621250220204, -0.79133855686032972265, 0.81973353451292108041, -0.79822741747277925484, @@ -12376,7 +12377,7 @@ function ESERK5ConstantCache(zprev) 0.26942999657958871529, -0.35874472288628511674, 0.44357351161531971551, - -0.50530656132607021380, + -0.5053065613260702138, 0.55761469589132117708, -0.58346984113115962778, 0.59761933925461641071, @@ -12384,7 +12385,7 @@ function ESERK5ConstantCache(zprev) 0.56039155032747955953, -0.51090240037677359108, 0.45281271022624325351, - -0.37347264710018263090, + -0.3734726471001826309, 0.29001917229517953922, -0.19070017146447676426, 0.09280869769234598166, @@ -12396,11 +12397,11 @@ function ESERK5ConstantCache(zprev) -0.47377170782685251726, 0.54091360029394275344, -0.58772960031510435019, - 0.62630314336408754450, + 0.6263031433640875445, -0.64302260389691656695, 0.65050934915772640199, -0.63622949347469548442, - 0.61329289665702768630, + 0.6132928966570276863, -0.57015659900895587775, 0.52029941267730994703, -0.45302237397572864275, @@ -12442,30 +12443,30 @@ function ESERK5ConstantCache(zprev) -0.30525457959059110191, 0.34155436549345891128, -0.36815313452097281344, - 0.39171062942384149430, + 0.3917106294238414943, -0.40566255638742060308, 0.41660889684148189049, -0.41846410768034753014, 0.41773169719036118419, -0.40876331387548586749, - 0.39792066779035778490, + 0.3979206677903577849, -0.37994468949857257423, 0.36100585689823200264, -0.33618453781210960729, 0.31141068063306931446, -0.28205631414172538385, 0.25376539607451137348, - -0.22215925130900179840, + -0.2221592513090017984, 0.19255716588353649632, -0.16079532017461384275, 0.13183848745154888582, -0.10171278219958229672, - 0.07500859138456912600, + 0.075008591384569126, -0.04792722807365094179, 0.02467500740327805558, -0.00162368786153293393, -0.01740458337350176202, - 0.03586333232041159780, + 0.0358633323204115978, -0.05030636675610298397, 0.06400076207579481757, -0.07386154887722712337, @@ -12484,13 +12485,13 @@ function ESERK5ConstantCache(zprev) 0.06172091516942627282, -0.05427998539241363218, 0.04706949290380223194, - -0.03925678480645312940, + -0.0392567848064531294, 0.03166201071910214326, -0.02370273376843754984, 0.01589710956668752284, - -0.00792095838999789040, + -0.0079209583899978904, 0.59594546208995546888, - -1.02661170966368020530, + -1.0266117096636802053, 1.14183213901979496718, -0.94297974892419078596, 1.02546852381067776783, @@ -12516,7 +12517,7 @@ function ESERK5ConstantCache(zprev) -1.22098527960456948449, 1.38030015271803740973, -1.22364305871293077566, - 1.34240969649256336460, + 1.3424096964925633646, -1.14528022189260525465, 1.22400278361695891149, -0.98818054709447700201, @@ -12528,13 +12529,13 @@ function ESERK5ConstantCache(zprev) -0.14212746869743445033, 0.11482656760597757806, 0.21033996724203551931, - -0.24062098885702531970, - 0.56284530134581090000, + -0.2406209888570253197, + 0.5628453013458109, -0.58447654879626487201, 0.89208936180497877544, -0.89356202048784627578, 1.17541860574063572464, - -1.14615720626332739940, + -1.1461572062633273994, 1.39245334814881771557, -1.32362116660913908817, 1.52667315266327729972, @@ -12571,10 +12572,10 @@ function ESERK5ConstantCache(zprev) 0.54572749027856637394, -0.21925180355369067176, 0.17563540459276325012, - 0.16383984106979235240, + 0.1638398410697923524, -0.21030384075507982389, - 0.54176895869301544550, - -0.56949952057027741770, + 0.5417689586930154455, + -0.5694995205702774177, 0.87134183687239907812, -0.85926546493849342845, 1.11153848519968612152, @@ -12612,12 +12613,12 @@ function ESERK5ConstantCache(zprev) 1.14506221028463883727, -1.34103670478069414429, 1.78466982659155459778, - -1.88566239422755832500, + -1.885662394227558325, 2.21046270394766564138, -2.17244072441686997266, 2.34217661277563138356, -2.13872342898469147698, - 2.13857172657293492790, + 2.1385717265729349279, -1.76790255497277448704, 1.61013047349129578834, -1.09905859648358594782, @@ -12627,16 +12628,16 @@ function ESERK5ConstantCache(zprev) 0.69970272030800384488, -0.98774874967487080735, 1.51245902049424030267, - -1.67714600436022731600, + -1.677146004360227316, 2.03829755547225799361, - -2.00525168090596883630, + -2.0052516809059688363, 2.14219065285017329359, -1.86882331174244820104, 1.76087352848056077903, -1.25149893678793633356, 0.93000291128843637356, -0.24373902611686773523, - -0.20517044741272072450, + -0.2051704474127207245, 0.95760444903433972197, -1.40280585920259759369, 2.07581809220647039993, @@ -12651,11 +12652,11 @@ function ESERK5ConstantCache(zprev) 0.13272933642650369679, -0.88747074921238477963, 1.90483681361401990806, - -2.54090384771053257040, + -2.5409038477105325704, 3.29555538464906705443, -3.53158915507848236714, 3.76805458670076154348, - -3.40110205541081889180, + -3.4011020554108188918, 2.99549478950535297272, -2.00463851364444645142, 1.05731116522040458072, @@ -12664,7 +12665,7 @@ function ESERK5ConstantCache(zprev) 2.76068872554192346058, -3.52226424987372288555, 4.17006637937478963352, - -4.02139871157654837930, + -4.0213987115765483793, 3.58186027659860295458, -2.28555369724722989844, 0.78893317191864598126, @@ -12676,7 +12677,7 @@ function ESERK5ConstantCache(zprev) -5.08419550326378466565, 3.04714703702382205819, 0.20293243902119373345, - -3.55444083703427082810, + -3.5544408370342708281, 6.74743234772333266847, -8.21186439954236213623, 7.57201773140732470324, @@ -12686,20 +12687,20 @@ function ESERK5ConstantCache(zprev) -13.64631968199630485117, 11.19965524443965598778, 1.65635779690326345737, - -20.91020683117760015080, + -20.9102068311776001508, 26.03305923876658312111, 42.77627972726131133641, 23.62141028976840928522, - 34.59473447854172434290, + 34.5947344785417243429, 20.36008057906158796868, -16.43693196389389399314, - 0.94566325588572230920, + 0.9456632558857223092, 9.16022411797918323373, -11.20211904851593232024, 7.63757220513639190074, -2.03878559446375229314, -2.99403072467878050844, - 5.97602871333167051660, + 5.9760287133316705166, -6.67250921809408392704, 5.42134508160879935446, -3.05131595742217776035, @@ -12714,7 +12715,7 @@ function ESERK5ConstantCache(zprev) 1.12288775131990314904, -2.48667632640009461653, 3.42441411754898927811, - -3.93596210869791152120, + -3.9359621086979115212, 3.94888427051623169817, -3.58321670262247282679, 2.86054283847402235352, @@ -12752,7 +12753,7 @@ function ESERK5ConstantCache(zprev) -2.11383918888976696238, 2.05732693440798408702, -1.93961643080185330845, - 1.71805810374398371110, + 1.7180581037439837111, -1.46174153429627340373, 1.13343110046541473146, -0.80420642236649475532, @@ -12765,22 +12766,22 @@ function ESERK5ConstantCache(zprev) -1.06858394068754125605, 1.11860723788013061153, -1.13108202405408198032, - 1.05938697914394119870, + 1.0593869791439411987, -0.95792321144921610543, 0.78508804966032030848, -0.59795804994145063116, 0.35834055068005482569, -0.12427031614449363106, -0.14078643348877301067, - 0.37955410495548802530, + 0.3795541049554880253, -0.62853089739395284763, 0.83267940571488818779, -1.02975614392061487479, 1.16804103998510178108, -1.28739330549026376183, 1.34001048693201019191, - -1.36820981849903078320, - 1.32822495541751317560, + -1.3682098184990307832, + 1.3282249554175131756, -1.26472735182833617706, 1.13768185148310552179, -0.99363319020487661515, @@ -12792,8 +12793,8 @@ function ESERK5ConstantCache(zprev) 0.39979734146094475511, -0.65502413898177291873, 0.87621675759377337656, - -1.09637638521843316930, - 1.27178651229876726880, + -1.0963763852184331693, + 1.2717865122987672688, -1.43621424639951356106, 1.54847396437243256528, -1.64341483827312129229, @@ -12804,14 +12805,14 @@ function ESERK5ConstantCache(zprev) 1.50526001864662073437, -1.38527699316095054272, 1.22038609713516654764, - -1.04878162017739451350, + -1.0487816201773945135, 0.84108645723863806332, -0.63538400133367367584, 0.40352272077932299643, -0.18299356965190169411, -0.05359884330210062942, 0.26980315145635513918, - -0.49267406813641173580, + -0.4926740681364117358, 0.68717613577266678515, -0.88035408693209971087, 1.03886899473168159425, @@ -12819,22 +12820,22 @@ function ESERK5ConstantCache(zprev) 1.30222491855499833413, -1.40319107961495470605, 1.46334157447410095898, - -1.51061498761098111920, + -1.5106149876109811192, 1.51736274357076861286, -1.51178150879691042263, 1.46798826060976628227, -1.41427688232698089976, 1.32633957428221926911, -1.23235335618675678759, - 1.10935406755853760430, + 1.1093540675585376043, -0.98515855412424691018, 0.83789729151172553934, -0.69477759395182259183, 0.53478023445404165859, - -0.38426818755087166490, + -0.3842681875508716649, 0.22285163286710321651, -0.07584565532180281844, - -0.07669316516795707250, + -0.0766931651679570725, 0.21065789609261695303, -0.34568113281144102755, 0.45897402513528229306, @@ -12847,14 +12848,14 @@ function ESERK5ConstantCache(zprev) -0.90173835093180687572, 0.90161835735890283328, -0.89693710800826031981, - 0.87145141161982675460, + 0.8714514116198267546, -0.84306755937702682058, 0.79659884841895967078, -0.74936717395026342103, 0.68712270874117875596, -0.62648464979459084212, 0.55402541112470915508, - -0.48555240998093884830, + -0.4855524099809388483, 0.40835866725473357608, -0.33734702351296103062, 0.26044850150444404102, @@ -12884,7 +12885,7 @@ function ESERK5ConstantCache(zprev) -0.19563119253029118139, 0.17196743330577979325, -0.14897774394598053971, - 0.12427451706924270980, + 0.1242745170692427098, -0.10018031091345634687, 0.07503217485380180019, -0.05030420737395071423, @@ -12941,9 +12942,9 @@ function ESERK5ConstantCache(zprev) 2.31965947257777038715, -2.58575837985762113647, 2.24866191871924314682, - -2.42690445153374279030, + -2.4269044515337427903, 2.00388432518996539855, - -2.09901493390754856350, + -2.0990149339075485635, 1.59818122358823888618, -1.62163193380095238538, 1.05762880447415774654, @@ -12983,7 +12984,7 @@ function ESERK5ConstantCache(zprev) 2.37481569751986620886, -2.59682988967909977873, 2.19295770511747889486, - -2.26553508443648699000, + -2.26553508443648699, 1.71718983407227177018, -1.65379313677724071319, 0.98311348143237164976, @@ -12996,17 +12997,17 @@ function ESERK5ConstantCache(zprev) 2.10861390201412435275, -2.77164476281974492267, 2.81812321913489194358, - -3.33090399383155100210, + -3.3309039938315510021, 3.20363110325769229192, -3.52284482322003533739, - 3.18842668077215973810, + 3.1884266807721597381, -3.29230360998578497345, 2.74202653686693631485, -2.63599775658306034742, 1.89011823338498308189, -1.60947692480251447478, 0.71802051170243030853, - -0.32666798463289847820, + -0.3266679846328984782, -0.63401306105107502198, 1.04926736371086759547, -1.98444429039785852353, @@ -13023,11 +13024,11 @@ function ESERK5ConstantCache(zprev) 1.72977061383190933164, -1.21694386085421335508, 0.09970820807623341497, - 0.50088534734295586670, - -1.62930535526084874220, + 0.5008853473429558667, + -1.6293053552608487422, 2.16007269973959292741, -3.13506648519954111975, - 3.43180470864680797760, + 3.4318047086468079776, -4.09772375957571455274, 4.02188331290644729421, -4.26582602714857817006, @@ -13042,24 +13043,24 @@ function ESERK5ConstantCache(zprev) -3.78921782625700442892, 4.35090455418745580829, -5.20401140495916347817, - 5.21627541090531643420, + 5.2162754109053164342, -5.42404838673919531544, - 4.73129934670989449330, + 4.7312993467098944933, -4.21722698862222511451, 2.83663327698185518955, -1.72144233093284615421, -0.11909860463002801267, - 1.50437022299179967710, + 1.5043702229917996771, -3.38340538719017080993, 4.54888500442019161341, -5.93931155326802073802, 6.36017531763175192339, -6.78546760604093623925, - 6.08319860084922670040, + 6.0831986008492267004, -5.31240355980904510602, 3.44823015099854046639, - -1.66891862042765048990, - -0.92543913261400534420, + -1.6689186204276504899, + -0.9254391326140053442, 3.04171813135196345002, -5.48629139503767682129, 6.91297221273139950171, @@ -13068,14 +13069,14 @@ function ESERK5ConstantCache(zprev) -7.03369245284395105955, 4.61281535712008317063, -1.81802985061357791352, - -2.08618390213284010670, + -2.0861839021328401067, 5.54562472199520950511, -9.01796652731561287908, 10.78630725689564506808, -11.32661620837851224053, - 9.18800748237369546700, + 9.188007482373695467, -5.39807482045303821394, - -0.65595035078980734600, + -0.655950350789807346, 6.89714678965865690685, -12.84220496205862005468, 15.55873156060332540562, @@ -13088,8 +13089,8 @@ function ESERK5ConstantCache(zprev) -3.18220042145033410463, 39.10036818257688651101, -48.64059426903086347238, - -79.82626654488079509520, - -31.70922585325089926300, + -79.8262665448807950952, + -31.709225853250899263, -22.99454959415861665661, -13.64090114499016159755, 11.02827978225523430922, @@ -13106,7 +13107,7 @@ function ESERK5ConstantCache(zprev) -0.24895110790718327776, -1.36338076244347550237, 2.50949386369697835519, - -3.00457250505300166310, + -3.0045725050530016631, 2.91504246820919110661, -2.29591233169649955315, 1.37084076188051540157, @@ -13147,7 +13148,7 @@ function ESERK5ConstantCache(zprev) -0.65830026485477577403, 0.95515675542169597989, -1.17573579887776347164, - 1.35574617901093419370, + 1.3557461790109341937, -1.44722312684968446028, 1.49268109919032876398, -1.45179600570296862827, @@ -13177,14 +13178,14 @@ function ESERK5ConstantCache(zprev) -0.54383244607142045002, 0.67207895643266890584, -0.75878879572066137982, - 0.83538027200236408820, + 0.8353802720023640882, -0.86520767753402361144, 0.88124198251699503714, -0.84961206474555439616, 0.80477221350051064697, -0.71542250192954903731, 0.61717979443270065687, - -0.48089673797478099670, + -0.4808967379747809967, 0.34285660522734084932, -0.17551239168926222045, 0.01522634341175772149, @@ -13193,7 +13194,7 @@ function ESERK5ConstantCache(zprev) 0.50117062119194166758, -0.64935507002826875489, 0.79871991365449246381, - -0.91596613095507017910, + -0.9159661309550701791, 1.02771356484948683807, -1.10243695937964614195, 1.16739393715382666628, @@ -13208,14 +13209,14 @@ function ESERK5ConstantCache(zprev) -0.62789565857235829505, 0.49023755742355695775, -0.33319178474154309555, - 0.18527377469489159090, - -0.02475546541876378140, + 0.1852737746948915909, + -0.0247554654187637814, -0.12062506849122385522, 0.27228293042252832423, -0.40350842016824906011, 0.53562426817348918195, -0.64313636565632759101, - 0.74742659054969884380, + 0.7474265905496988438, -0.82433128697236557336, 0.89536926130472449525, -0.93774882749979260321, @@ -13248,15 +13249,15 @@ function ESERK5ConstantCache(zprev) -0.55800593744443627298, 0.55352068234024032201, -0.53438691848391828287, - 0.51435649260289018070, + 0.5143564926028901807, -0.48153892763662964338, 0.44921048478240205304, -0.40618970936080694978, 0.36519841271489306145, - -0.31568775402860277390, + -0.3156877540286027739, 0.26975238432591580606, -0.21740834086019306115, - 0.17006126634650109430, + 0.1700612663465010943, -0.11823703189822321047, 0.07260458052658518013, -0.02415981483963245205, @@ -13275,8 +13276,8 @@ function ESERK5ConstantCache(zprev) -0.25526132749422258961, 0.25296536762607335636, -0.24556202053811373998, - 0.23808785960476611110, - -0.22639084445259075040, + 0.2380878596047661111, + -0.2263908444525907504, 0.21488576020745875361, -0.20001176090371464156, 0.18553983339155410981, @@ -13293,7 +13294,7 @@ function ESERK5ConstantCache(zprev) -0.92136501082776733895, 1.04741414735739213349, -0.82682006702067090131, - 0.92599615650539990330, + 0.9259961565053999033, -0.68007807372916950772, 0.75524923949731759265, -0.48763002842814989757, @@ -13301,12 +13302,12 @@ function ESERK5ConstantCache(zprev) -0.25885645279113261852, 0.30037859255168575245, -0.00565725335717889247, - 0.03991837533840957020, + 0.0399183753384095702, 0.25809239353168844655, -0.22362761420206500595, 0.51724268656870020511, -0.47477638554052292719, - 0.75619772712765498390, + 0.7561977271276549839, -0.69804916192056465363, 0.95983257369706032058, -0.87891490775358560583, @@ -13315,24 +13316,24 @@ function ESERK5ConstantCache(zprev) 1.20872051907212485489, -1.06572807418756920761, 1.23454489392468746978, - -1.05565841414792460640, + -1.0556584141479246064, 1.18777614820783972149, -0.97257684796714405362, 1.06874172656580568308, -0.81916651072561741387, 0.88251249217167837546, -0.60287997021683559229, - 0.63887697132022858160, + 0.6388769713202285816, -0.33575515536312644516, 0.35199468102544734238, -0.03390432377630763633, 0.03972168727738099175, 0.28331997851355406048, - -0.27737625254639780570, + -0.2773762525463978057, 0.59445477461503715144, -0.57728367731176566391, 0.87730088903238800935, - -0.83800509187747240780, + -0.8380050918774724078, 1.11046647956273702995, -1.03915823252750283423, 1.27498363167124373341, @@ -13340,13 +13341,13 @@ function ESERK5ConstantCache(zprev) 1.35588505085826138696, -1.19886555187884757956, 1.34361754176944803163, - -1.13859639535385093190, + -1.1385963953538509319, 1.23516676680129400268, -0.98333211380951857095, 1.03477515207898984606, - -0.74105745575706183370, + -0.7410574557570618337, 0.75415264445861351916, - -0.42711605180875755750, + -0.4271160518087575575, 0.41210850432103907082, -0.06353746023083443883, 0.03357077459962517357, @@ -13355,10 +13356,10 @@ function ESERK5ConstantCache(zprev) 0.69926516418794026908, -0.71268885001898363285, 1.03533435903940418399, - -1.01671987417975695500, + -1.016719874179756955, 1.29973755161886694864, -1.23515238753009226613, - 1.46602558465820531630, + 1.4660255846582053163, -1.34470266236615376698, 1.51472460040637324497, -1.33029823889691378724, @@ -13369,10 +13370,10 @@ function ESERK5ConstantCache(zprev) 0.90995284266425835451, -0.55390586090018090193, 0.50068773693295098859, - -0.11265775831288575570, + -0.1126577583128857557, 0.03702634267358934084, 0.36232237104634262836, - -0.43813378714794715130, + -0.4381337871479471513, 0.82548189443689123923, -0.87760577535661909998, 1.22911875130090941788, @@ -13388,7 +13389,7 @@ function ESERK5ConstantCache(zprev) 1.13785633235258432094, -0.74990634530350175346, 0.65176758002910695211, - -0.21371977184761556390, + -0.2137197718476155639, 0.07937793823860138376, 0.37867968968942827823, -0.51618855072980374121, @@ -13396,7 +13397,7 @@ function ESERK5ConstantCache(zprev) -1.06350472926260364304, 1.45493077652877289552, -1.49088907895112288138, - 1.79773237015494391500, + 1.797732370154943915, -1.73559282475892961983, 1.93276254436524252966, -1.75309640013692780158, @@ -13412,11 +13413,11 @@ function ESERK5ConstantCache(zprev) 1.06967124309564787232, -1.25052717222091835936, 1.70324520053547412424, - -1.78577444271563900990, - 2.11481256721327914860, + -1.7857744427156390099, + 2.1148125672132791486, -2.05251678604932807914, 2.21964784815725213463, - -1.98471779316039809160, + -1.9847177931603980916, 1.97444641251239283442, -1.56524108107771198206, 1.39086141806681240496, @@ -13451,15 +13452,15 @@ function ESERK5ConstantCache(zprev) 0.04604053128235353898, -0.82726093843860371013, 1.89253923309131755204, - -2.54881827467386612440, + -2.5488182746738661244, 3.33554934088187682306, - -3.56715207716575788410, + -3.5671520771657578841, 3.80318958562926834333, -3.39396382983750743989, 2.94746652354281879482, -1.87537736894353157524, 0.85363699626047395697, - 0.63452208318242830920, + 0.6345220831824283092, -1.84767920231994509095, 3.24899721609168379288, -4.06690288959991441686, @@ -13477,9 +13478,9 @@ function ESERK5ConstantCache(zprev) 2.97810888080858715554, 0.47700055658448387019, -4.03800578980502233861, - 7.42985227912494661240, + 7.4298522791249466124, -8.97590151082268938865, - 8.27729586860347943400, + 8.277295868603479434, -4.17656317813288424645, -2.30676069396751604046, 9.90023167412110005614, @@ -13531,7 +13532,7 @@ function ESERK5ConstantCache(zprev) -0.00109491240702263627, 0.00468999380004739199, -0.00731923783408790305, - 0.00899015331335654630, + 0.0089901533133565463, -0.00948536311053301689, 0.00900945103921586138, -0.00752383388365930692, @@ -13551,8 +13552,8 @@ function ESERK5ConstantCache(zprev) 0.00442431601822311851, -0.00167122187912683152, -0.00109082600069477587, - 0.00386316559357502290, - -0.00637193567132411740, + 0.0038631655935750229, + -0.0063719356713241174, 0.00864695778963337283, -0.01045731692065710559, 0.01187889441984512143, @@ -13567,14 +13568,14 @@ function ESERK5ConstantCache(zprev) -0.00507690116694243902, 0.00330726973074844987, -0.00155582162274432354, - 0.00001951797781828090, + 0.0000195179778182809, 0.00137101658895176222, -0.00244582075636396584, 0.00329983274880002323, -0.00379403039280142842, 0.00405015171315332816, -0.00395883837164784803, - 0.00366511321397982410, + 0.0036651132139798241, -0.00308386491541357607, 0.00237646181264656838, -0.00147398200347354674, @@ -13582,12 +13583,12 @@ function ESERK5ConstantCache(zprev) 0.00047118363623389366, -0.00140818121543369551, 0.00232895255418576023, - -0.00307538315170321000, + -0.00307538315170321, 0.00371934051784777054, -0.00411800840767834447, 0.00435646646751737358, -0.00431056429604376266, - 0.00408063162032962310, + 0.0040806316203296231, -0.00356191983052277488, 0.00286951120686593014, -0.00191643375550391111, @@ -13599,7 +13600,7 @@ function ESERK5ConstantCache(zprev) 0.00636313050093501986, -0.00782723906420198373, 0.00926726538742187779, - -0.01055329238636587390, + -0.0105532923863658739, 0.01174807483115537787, -0.01273171257634547228, 0.01357419666492449585, @@ -13612,26 +13613,26 @@ function ESERK5ConstantCache(zprev) -0.01336262300399029997, 0.01256986578888426818, -0.01158900993736466933, - 0.01052678968120862590, + 0.0105267896812086259, -0.00932948873090863606, - 0.00810489751279753340, + 0.0081048975127975334, -0.00680301048407753843, 0.00552980281420850737, -0.00423621018759056094, - 0.00302378691690682530, + 0.0030237869169068253, -0.00184202280776620659, 0.00078592714152683491, - 0.00019828153761354490, + 0.0001982815376135449, -0.00102364038958371157, 0.00174836303138163011, -0.00229434712630361814, 0.00272470714791168793, -0.00297033500653222197, 0.00309906152012563328, - -0.00305029390693377280, + -0.0030502939069337728, 0.00289583413930594429, -0.00258262651128419486, - 0.00218526833018637800, + 0.002185268330186378, -0.00165690589328417381, 0.00107347604799200324, -0.00039278998031738271, @@ -13653,19 +13654,19 @@ function ESERK5ConstantCache(zprev) 0.00683880790321036124, -0.00658295295783414922, 0.00625726332598277452, - -0.00582873016720392850, + -0.0058287301672039285, 0.00534363885047408043, -0.00477318098282594316, 0.00416334884885096509, -0.00348876265944094311, - 0.00279434279070448020, + 0.0027943427907044802, -0.00205736746486688028, 0.00132093622641824937, -0.00056427045145840469, -0.00017202161583582712, 0.00090739250487866603, -0.00160428209275844248, - 0.00228130795552947260, + 0.0022813079555294726, -0.00290438025343287822, 0.00349163280870747484, -0.00401272626820126359, @@ -13674,8 +13675,8 @@ function ESERK5ConstantCache(zprev) 0.00522454332521003241, -0.00548590582142089063, 0.00568509827186768676, - -0.00580342328774974790, - 0.00585797239228960480, + -0.0058034232877497479, + 0.0058579723922896048, -0.00583372672611612384, 0.00574724635403585458, -0.00558698625047459544, @@ -13713,8 +13714,8 @@ function ESERK5ConstantCache(zprev) 0.05645434505185595309, -0.05462899862190654515, 0.06251859938260564964, - -0.05863474092455030900, - 0.06439509471167109700, + -0.058634740924550309, + 0.064395094711671097, -0.05835014531824838507, 0.06195312801435155087, -0.05379470465794202599, @@ -13726,7 +13727,7 @@ function ESERK5ConstantCache(zprev) -0.01910120847241401562, 0.01667642118982597468, -0.00331622369778651485, - 0.00059930224730310390, + 0.0005993022473031039, 0.01275351764100494251, -0.01516458289746976974, 0.02791549274570881423, @@ -13735,15 +13736,15 @@ function ESERK5ConstantCache(zprev) -0.04116288745127288234, 0.05113811207030585088, -0.04945605361074844469, - 0.05747101714654059140, + 0.0574710171465405914, -0.05371804667142363737, 0.05959199029625773802, - -0.05367501390491530300, + -0.053675013904915303, 0.05740585116683233347, -0.04941529907999622773, 0.05118552095896355264, -0.04139348922947727605, - 0.04156028578935537510, + 0.0415602857893553751, -0.03040254002161648858, 0.02947175862601813384, -0.01751389802248016353, @@ -13753,17 +13754,17 @@ function ESERK5ConstantCache(zprev) 0.00883653287893961664, -0.00922840847896550139, 0.01967437674818574636, - -0.01864304378222148700, + -0.018643043782221487, 0.02742170032649772146, -0.02452337553585653626, 0.03128167675876711296, -0.02626606023009312244, 0.03086629628712541165, - -0.02371562800460954440, + -0.0237156280046095444, 0.02626451328613060507, -0.01721143544105846815, 0.01806568808376426277, - -0.00758573642031584380, + -0.0075857364203158438, 0.00733096419661796814, 0.00389234618723815909, -0.00449020308611388242, @@ -13775,40 +13776,40 @@ function ESERK5ConstantCache(zprev) -0.02928620830816616033, 0.03508087688999443621, -0.02873114787411237825, - 0.03153628637666793660, + 0.0315362863766679366, -0.02209183641251618105, 0.02178666992468709929, -0.00931632538881232292, 0.00616788622604592073, - 0.00886005764533409450, + 0.0088600576453340945, -0.01418521285665476708, 0.03091529996348899023, -0.03738872783703850455, 0.05464192681678774199, - -0.06096268230123363940, - 0.07735059063587973460, + -0.0609626823012336394, + 0.0773505906358797346, -0.08208239295638304622, - 0.09616460993400409440, + 0.0961646099340040944, -0.09790977642111854673, 0.10837989680948921511, -0.10597210945053107956, 0.11185129287358271111, -0.10454345466643620577, 0.10535567838178083733, - -0.09297550025753426040, + -0.0929755002575342604, 0.08887647779729163089, -0.07192204180692809978, 0.06375533173555517075, -0.04340651728797573911, - 0.03266619289919222430, + 0.0326661928991922243, -0.01069594309026239247, - -0.00061451287604651940, - 0.02203274068131609240, + -0.0006145128760465194, + 0.0220327406813160924, -0.03164143649046552431, 0.05021795377743232952, -0.05590477402142107061, 0.06958020352084812177, - -0.06953814026042637320, + -0.0695381402604263732, 0.07684618713932836465, -0.07003077046832795194, 0.07041855394115434374, @@ -13828,7 +13829,7 @@ function ESERK5ConstantCache(zprev) -0.07560099337882814075, 0.07004394544169251224, -0.04946311600111980011, - 0.03577418439004274170, + 0.0357741843900427417, -0.00852995798002847277, -0.00987631690050602869, 0.03948060061828018857, @@ -13839,7 +13840,7 @@ function ESERK5ConstantCache(zprev) -0.11506679133041688989, 0.12002271129835855035, -0.10717790964550680255, - 0.09792268885775272380, + 0.0979226888577527238, -0.07155507646642962627, 0.05046516036777711628, -0.01494165868707781133, @@ -13864,8 +13865,8 @@ function ESERK5ConstantCache(zprev) 0.11936521791658059877, -0.05936864149753229986, 0.00077709027216603464, - 0.07006754251789269750, - -0.12285257449359410220, + 0.0700675425178926975, + -0.1228525744935941022, 0.16935793416325939376, -0.17977965193230913132, 0.16934458007510724831, @@ -13882,15 +13883,15 @@ function ESERK5ConstantCache(zprev) -0.27952077278492842849, 0.37830480524002996212, -0.33261030190358770176, - 0.13183680283794349530, + 0.1318368028379434953, 0.21103193242417200848, - -0.53951848442163619080, + -0.5395184844216361908, 0.63369183198869560858, -0.20773406269398581037, -0.72894411006221726534, 1.30161558460830550921, 1.65692979180632704583, - 2.37915312824182656470, + 2.3791531282418265647, 6.46283572120655946946, 5.35486451750676906158, -3.09406806106666776301, @@ -13906,7 +13907,7 @@ function ESERK5ConstantCache(zprev) 0.07710033446633476895, -0.65063002712830464436, 0.97240848481648023416, - -1.02871451145268988370, + -1.0287145114526898837, 0.84910901196386945333, -0.51835412566290695047, 0.11595026554653574402, @@ -13928,17 +13929,17 @@ function ESERK5ConstantCache(zprev) 0.44942277973691047155, -0.27944645681278906801, 0.09946056441259822078, - 0.06544889915275907410, + 0.0654488991527590741, -0.20929156235017484788, 0.31360552055410889638, -0.38011981186937959798, 0.39873639830877832813, - -0.37905170438269930600, - 0.31813899794293998280, + -0.379051704382699306, + 0.3181389979429399828, -0.23124049397494161884, - 0.11968544602466484050, - -0.00108140137066104250, - -0.12233317165183411890, + 0.1196854460246648405, + -0.0010814013706610425, + -0.1223331716518341189, 0.23374571878408503811, -0.33278498776518578017, 0.40568763359560477966, @@ -13948,8 +13949,8 @@ function ESERK5ConstantCache(zprev) 0.42470313467647030636, -0.36395079478292424735, 0.27935079765422404785, - -0.18331725192056483320, - 0.07449483544104321120, + -0.1833172519205648332, + 0.0744948354410432112, 0.03415261433113565143, -0.14393723225018503764, 0.24268303421637998918, @@ -13961,7 +13962,7 @@ function ESERK5ConstantCache(zprev) 0.50354578654783610503, -0.48233432990749641744, 0.44194289331773967122, - -0.39167571667133055380, + -0.3916757166713305538, 0.32826656650882252153, -0.26156511992148406831, 0.18869487848872454339, @@ -13977,10 +13978,10 @@ function ESERK5ConstantCache(zprev) -0.13922420630144335951, 0.11238865985826654303, -0.08083315947685656977, - 0.04079601231315436310, + 0.0407960123131543631, -0.00005106987312687438, - -0.04485978865773485730, - 0.08623674833402210360, + -0.0448597886577348573, + 0.0862367483340221036, -0.12757963696389282293, 0.16158059358221779633, -0.19206212049594698077, @@ -13998,7 +13999,7 @@ function ESERK5ConstantCache(zprev) 0.09305642491016612172, -0.15069071695617761164, 0.20471402250355860697, - -0.25830803362007792590, + -0.2583080336200779259, 0.30546961703018421508, -0.34953273087552322318, 0.38491155716557839961, @@ -14020,7 +14021,7 @@ function ESERK5ConstantCache(zprev) 0.01391113281769839997, 0.03429497799937369917, -0.08134264884086253589, - 0.12280065308146689840, + 0.1228006530814668984, -0.16144899585299532507, 0.19319761874616406261, -0.22098764115260602359, @@ -14051,7 +14052,7 @@ function ESERK5ConstantCache(zprev) -0.21377076867752858869, 0.21514917325603552523, -0.21354446551306066615, - 0.20707066305010607410, + 0.2070706630501060741, -0.19790149262203310387, 0.18436601067240487861, -0.16863943945999976259, @@ -14063,7 +14064,7 @@ function ESERK5ConstantCache(zprev) -0.02693603719866297791, -0.00064516028704845779, 0.02742410061710473523, - -0.05443475764250420290, + -0.0544347576425042029, 0.07993334666674013766, -0.10490134710558596254, 0.12775015121441962718, @@ -14075,10 +14076,10 @@ function ESERK5ConstantCache(zprev) 0.22202145860678565437, -0.22903120521036665624, 0.23286562237831348599, - -0.23435001161660945490, + -0.2343500116166094549, 0.23274093517127514286, -0.22882361031998910139, - 0.22201024784621090080, + 0.2220102478462109008, -0.21303728970142599142, 0.20146353411915401965, -0.18796741746507805715, @@ -14100,7 +14101,7 @@ function ESERK5ConstantCache(zprev) -0.44263723153972334146, 0.24911519763653014459, -0.22514931563714624119, - 0.02271398554392903280, + 0.0227139855439290328, 0.00660271036779400307, -0.21059759696353513858, 0.23771551282454367326, @@ -14115,7 +14116,7 @@ function ESERK5ConstantCache(zprev) -0.97824616291041466276, 0.89773084558284177437, -0.97606260554082613368, - 0.86427677564922600340, + 0.8642767756492260034, -0.91170325405230634441, 0.77002943380273602969, -0.78902604840710988121, @@ -14128,7 +14129,7 @@ function ESERK5ConstantCache(zprev) -0.03741299351407464946, 0.07039257614139256269, -0.27468152016183700059, - 0.29969569590871780740, + 0.2996956959087178074, -0.49162056926535824264, 0.50017238462707946933, -0.67171829719394393621, @@ -14144,7 +14145,7 @@ function ESERK5ConstantCache(zprev) -0.68535048343526450143, 0.51774971439873085366, -0.51364600606274612993, - 0.32764841477727024710, + 0.3276484147772702471, -0.30963131251169051517, 0.11469838383799146886, -0.09290759319990773979, @@ -14154,13 +14155,13 @@ function ESERK5ConstantCache(zprev) 0.29310716760811045267, -0.45151424937025103068, 0.42202450994663492922, - -0.54996527610767420580, - 0.48703885399981811100, - -0.57927977551506382170, + -0.5499652761076742058, + 0.487038853999818111, + -0.5792797755150638217, 0.47939114425656531582, -0.53426611807068014048, 0.39771980792917288605, - -0.41756947398954791240, + -0.4175694739895479124, 0.24875831559461838993, -0.23999069109619175499, 0.04724629177022648258, @@ -14215,7 +14216,7 @@ function ESERK5ConstantCache(zprev) 0.96282484381258337525, -0.85565411377051980857, 0.53582063098383103661, - -0.35636324132079683080, + -0.3563632413207968308, -0.01530010255002104205, 0.22278806216344021474, -0.59599471477612964154, @@ -14238,27 +14239,27 @@ function ESERK5ConstantCache(zprev) -1.71896941724820062625, 1.73216799576933411231, -1.80790649408061931958, - 1.59785634042201829530, + 1.5978563404220182953, -1.44602002543888596975, 1.01941181780033218729, -0.67797251176626538438, 0.10464457142580545213, - 0.32633615001670124300, + 0.326336150016701243, -0.92018936428584041654, 1.29499457805108164621, -1.75315367747142536459, 1.91616955169604818998, -2.09626835625405760766, - 1.93176344125758925330, + 1.9317634412575892533, -1.75782560374168883577, 1.24123774319546931189, -0.74899811394291349043, - -0.01887479659051526440, + -0.0188747965905152644, 0.66415265913905408013, -1.46054648408821452499, 1.99252944327273584513, -2.52845908377913497489, - 2.66269009712670934320, + 2.6626900971267093432, -2.69007033637099812751, 2.24879271378680467564, -1.69277096460217069129, @@ -14266,14 +14267,14 @@ function ESERK5ConstantCache(zprev) 0.20740037586918530499, -1.34162859800865175153, 2.18582663063734194964, - -2.92930527447384525530, + -2.9293052744738452553, 3.09434588693566103856, -2.92535024374963414928, 2.05119439752482790595, -0.87067032775732089434, -0.79792748123490842005, 2.35677810984443958375, - -3.81558114658910207950, + -3.8155811465891020795, 4.47906297222962823668, -4.38500372410592209604, 3.03763976769098187347, @@ -14294,7 +14295,7 @@ function ESERK5ConstantCache(zprev) -38.91644413559397719382, -31.99139406785222305984, 18.43437305642810031259, - 4.15398660120642926330, + 4.1539866012064292633, -14.20146871442127256557, 12.06102802033701593132, -4.01408680045897447997, @@ -14303,7 +14304,7 @@ function ESERK5ConstantCache(zprev) -10.00472056710649937372, 7.77205603951482970615, -3.74761369033722901989, - -0.51320101487476710300, + -0.513201014874767103, 3.94743679073962239201, -5.86608904309801193477, 6.19699865490217582931, @@ -14317,18 +14318,18 @@ function ESERK5ConstantCache(zprev) -4.44404562525792012906, 3.40677116926663225982, -1.93192982990867156978, - 0.30931358704846684260, + 0.3093135870484668426, 1.30463647044206854098, -2.66583832907225382058, 3.70220692799024275743, -4.27770365452509793158, 4.43287768343311316954, - -4.13835498727229644800, - 3.52278734626565093180, + -4.138354987272296448, + 3.5227873462656509318, -2.62314739102970495566, 1.60734073089834472725, -0.52776622569792430717, - -0.45616891011490973140, + -0.4561689101149097314, 1.31739639489224669155, -1.93637117626583843411, 2.33224156714770858301, @@ -14340,7 +14341,7 @@ function ESERK5ConstantCache(zprev) 0.01380944651661288394, 0.73766259832992397971, -1.41328491048921844886, - 2.01902923069207451690, + 2.0190292306920745169, -2.46405585702604756904, 2.77533714802767583762, -2.88656261781416523249, @@ -14350,7 +14351,7 @@ function ESERK5ConstantCache(zprev) -1.76457539327862988898, 1.19960471266677792812, -0.55374114269138363653, - -0.08757656968749016890, + -0.0875765696874901689, 0.73993441530653725202, -1.32272575388873780966, 1.85814696514303734354, @@ -14373,7 +14374,7 @@ function ESERK5ConstantCache(zprev) 0.96881930117169956507, -1.06235786008483223952, 1.10307805233865630079, - -1.05203296723662043100, + -1.052032967236620431, 0.95675001975038176383, -0.78433490235112779398, 0.58604059442515554768, @@ -14381,12 +14382,12 @@ function ESERK5ConstantCache(zprev) 0.07835563186825623971, 0.20500358012237837602, -0.46466289411940586707, - 0.72759976021933092660, + 0.7275997602193309266, -0.94394557122160438478, 1.14250090365859935382, -1.27727437894005602104, - 1.38001424899361491150, - -1.40941706955850976080, + 1.3800142489936149115, + -1.4094170695585097608, 1.40067036257349775141, -1.31733780175456716144, 1.19792930921110452047, @@ -14397,14 +14398,14 @@ function ESERK5ConstantCache(zprev) 0.07437558395407291301, -0.38848695080974193772, 0.72154383506769326218, - -1.03077439415692784230, + -1.0307743941569278423, 1.34041968120513321772, -1.60946384511314999344, 1.86294854273530030575, -2.06246638912758362139, 2.23456884006255984687, -2.34401165967529045986, - 2.41924994771064305610, + 2.4192499477106430561, -2.42843477443892830081, 2.40199875794782169436, -2.31141185832754825213, @@ -14414,23 +14415,23 @@ function ESERK5ConstantCache(zprev) -1.55361204210158909689, 1.28956309680464653589, -0.99129819149219466912, - 0.69305408877125862510, + 0.6930540887712586251, -0.37459520306225452257, 0.06948993704291904494, 0.24207334817316200626, -0.52781966907060495764, 0.80770917906192307711, -1.05126956903863533199, - 1.27904690067853810120, + 1.2790469006785381012, -1.46273108462076528724, 1.62373177199531548709, - -1.73609544743327703920, + -1.7360954474332770392, 1.82220668726440315766, -1.85849942200940798642, 1.86828752571234835145, -1.83027602100665420792, 1.76852772122590673476, - -1.66378240131381605060, + -1.6637824013138160506, 1.54056796307512922084, -1.38133682417176451018, 1.21073081683060457259, @@ -14441,7 +14442,7 @@ function ESERK5ConstantCache(zprev) -0.15280309511366033104, -0.05775937992349042954, 0.26931422766138946034, - -0.46038390754179159270, + -0.4603839075417915927, 0.64530155078014217462, -0.80406797593012979686, 0.95115205178671990982, @@ -14451,7 +14452,7 @@ function ESERK5ConstantCache(zprev) 1.29162363283684245019, -1.31164813604658414548, 1.31447731138490619962, - -1.28654567004512099260, + -1.2865456700451209926, 1.24301402018977369401, -1.17172037229457415286, 1.08772976406155308382, @@ -14477,10 +14478,10 @@ function ESERK5ConstantCache(zprev) -1.26900126926626888313, 1.28287079595020858669, -1.27836704948255275305, - 1.26096372052761718230, + 1.2609637205276171823, -1.22636606233799239085, 1.17964180403114871076, - -1.11748098090324732290, + -1.1174809809032473229, 1.04449048797306054404, -0.95829038143098188574, 0.86297294434687632503, @@ -14497,7 +14498,7 @@ function ESERK5ConstantCache(zprev) -1.98727936204582444901, 2.02902793019107408057, -1.28854647349114914689, - 1.26930109259468792970, + 1.2693010925946879297, -0.47957187674779061526, 0.42310186651855830053, 0.39031394181853007463, @@ -14507,7 +14508,7 @@ function ESERK5ConstantCache(zprev) 2.09098598051487583049, -2.09305843271324443222, 2.80921802186196423179, - -2.73892815420362278900, + -2.738928154203622789, 3.37082206817512508579, -3.20632337612473250488, 3.73480027585739549068, @@ -14530,7 +14531,7 @@ function ESERK5ConstantCache(zprev) 1.44843802862202197801, -1.50011651303246873468, 2.26029415306300940358, - -2.23492855409569290970, + -2.2349285540956929097, 2.90279944437709591654, -2.77218941388452311259, 3.32307198118949287391, @@ -14559,10 +14560,10 @@ function ESERK5ConstantCache(zprev) 3.01023636828382423758, -2.54400647965069959255, 2.73305944877231432599, - -2.10457556995473193950, + -2.1045755699547319395, 2.13900960682958807269, -1.36862295912671805276, - 1.27734728678246955980, + 1.2773472867824695598, -0.40211823206691110766, 0.22970285442400142917, 0.69915970292622675597, @@ -14577,11 +14578,11 @@ function ESERK5ConstantCache(zprev) -3.70272295122238981335, 4.01279550235721238494, -3.47291505740905082078, - 3.55278525381434207020, + 3.5527852538143420702, -2.78765981811164520465, 2.65347464010217359842, -1.69319021081391340999, - 1.38877302551514780760, + 1.3887730255151478076, -0.29025738746321860795, -0.11543665705241926145, 1.27271749094690966864, @@ -14599,9 +14600,9 @@ function ESERK5ConstantCache(zprev) 4.21527593936048727841, -3.16649362017945312786, 2.72480826679766829912, - -1.45366073896746539340, + -1.4536607389674653934, 0.84293505229565646175, - 0.53448064776234127660, + 0.5344806477623412766, -1.18256194173300399619, 2.52301977416904632534, -3.05847532949257416846, @@ -14611,7 +14612,7 @@ function ESERK5ConstantCache(zprev) -5.21131946002627621795, 5.61764139290455766229, -5.06708766448879543987, - 5.01623441686568138920, + 5.0162344168656813892, -4.01867861921873181785, 3.55008373754151707047, -2.18464576809365640386, @@ -14622,11 +14623,11 @@ function ESERK5ConstantCache(zprev) -3.39528935122955521919, 4.74424997279335691758, -5.16612000968157314418, - 6.06516218442623689100, + 6.065162184426236891, -5.95081931423771948175, 6.24888310422845183467, -5.49690994510171027088, - 5.15143940786679799260, + 5.1514394078667979926, -3.78510346696595068039, 2.88925375623662317182, -1.07220298066099006817, @@ -14658,30 +14659,30 @@ function ESERK5ConstantCache(zprev) 5.81353019205663823499, -8.03390703508036807534, 10.27367693787363300828, - -10.82438989782770022430, + -10.8243898978277002243, 10.92928703256117195508, -9.06432876927887143381, - 6.72053698257571241470, + 6.7205369825757124147, -2.67121048127142346473, -1.27612245100174570567, 6.04692466937513994907, -9.59630243824288520216, 12.72297424732798809544, -13.41685737738026062971, - 12.70778284649778733240, + 12.7077828464977873324, -9.03368090685816760299, 4.07255527862316135668, 2.94178815341866117805, -9.49568779707162669013, 15.63259266590402063457, - -18.42980204148660661190, + -18.4298020414866066119, 18.04838208626823714553, -12.40383582048256272401, 3.31279901024596368231, 8.91238493359957395512, -19.67948422887858583863, 26.25126776469848266515, - -23.10877845353307336040, + -23.1087784535330733604, 9.54269774590775377021, 13.57658668370296339845, -35.73128369134857251765, @@ -14701,7 +14702,7 @@ function ESERK5ConstantCache(zprev) 7.52450796541970756692, -16.81411625347310945244, 18.59641878029975003983, - -14.44335568511853651330, + -14.4433556851185365133, 6.93614771564211896049, 1.00221577499725378324, -7.40719809374264137602, @@ -14720,7 +14721,7 @@ function ESERK5ConstantCache(zprev) -0.65769133871825413706, -2.35491559824543195134, 4.88762721086148044236, - -6.82380622036772521710, + -6.8238062203677252171, 7.89175469261823536726, -8.18486544380783698216, 7.63074267961369923086, @@ -14733,25 +14734,25 @@ function ESERK5ConstantCache(zprev) 3.67760574114305427429, -4.41328779652427627411, 4.59415592173535181075, - -4.36046496467685251730, - 3.64710989146974950970, + -4.3604649646768525173, + 3.6471098914697495097, -2.65718976744274604229, 1.37369763296997482449, -0.02583209665964924726, -1.39280317397682806835, 2.66230954640478101325, -3.80957265214310369927, - 4.64924517077734922310, + 4.6492451707773492231, -5.24720226114080467994, 5.46408983487653010513, - -5.40935826687132692570, - 4.98799018788580994510, + -5.4093582668713269257, + 4.9879901878858099451, -4.34602772183359853386, - 3.42159237621308598420, + 3.4215923762130859842, -2.38311314635170745646, - 1.18585580810819735120, + 1.1858558081081973512, -0.00400328915535480816, - -1.20627392601748661960, + -1.2062739260174866196, 2.28001622659916991509, -3.27317881334230209589, 4.04062183137274733014, @@ -14763,7 +14764,7 @@ function ESERK5ConstantCache(zprev) 4.37995637143829164017, -3.81747077937805290304, 3.09707937613122608056, - -2.35564431003541008280, + -2.3556443100354100828, 1.53470097791322168668, -0.76902201004394377115, -0.00233338771951805118, @@ -14774,10 +14775,10 @@ function ESERK5ConstantCache(zprev) 2.19760261255832212157, -2.26781792003484028442, 2.15959391714905768467, - -1.97395425605825192150, + -1.9739542560582519215, 1.63737094603194965892, -1.25762232778011417977, - 0.76908268531506573940, + 0.7690826853150657394, -0.28235276596594838239, -0.26436334262375033033, 0.76168902143263006455, @@ -14792,10 +14793,10 @@ function ESERK5ConstantCache(zprev) -2.29085920782006269292, 1.95654949897635765943, -1.57725205896522413518, - 1.08966539145010243850, + 1.0896653914501024385, -0.58411339452069510614, 0.00226148540709405566, - 0.56478298312824004590, + 0.5647829831282400459, -1.17264674398680335266, 1.73168397604603829798, -2.29697594013191119799, @@ -14814,13 +14815,13 @@ function ESERK5ConstantCache(zprev) 2.57613254070344899205, -2.08375474135221949723, 1.52459012121276105134, - -0.97064590482607049360, + -0.9706459048260704936, 0.37615268821247788145, 0.18834782364712310265, -0.76763389906009360519, 1.29379593168489659405, -1.81168935373945516609, - 2.25698693066633948590, + 2.2569869306663394859, -2.67543729849030142987, 3.00696627918736414387, -3.29873349814399796642, @@ -14834,7 +14835,7 @@ function ESERK5ConstantCache(zprev) -3.02974422414476673993, 2.71392260675625518473, -2.37946749077561170438, - 1.99018555059973145660, + 1.9901855505997314566, -1.59754762395450611301, 1.16736181780503800454, -0.74969029310808132927, @@ -14848,15 +14849,15 @@ function ESERK5ConstantCache(zprev) 2.09343094634194715198, -2.30121058475752260364, 2.44623088491589912863, - -2.56084191094961255430, - 2.61234646032955675210, - -2.63321632451117348950, + -2.5608419109496125543, + 2.6123464603295567521, + -2.6332163245111734895, 2.59384440869183929834, -2.52661004688242796234, - 2.40474084563943657500, + 2.404740845639436575, -2.26023456059724958678, 2.06883868532179659994, - -1.86183645760434002270, + -1.8618364576043400227, 1.61715192628703507971, -1.36500708872878973033, 1.08515931744365978773, @@ -14869,14 +14870,14 @@ function ESERK5ConstantCache(zprev) 0.87869864193355862181, -1.12343710375230942944, 1.33916331006060818076, - -1.54071656363129316780, + -1.5407165636312931678, 1.70961875583010680657, -1.85997813296877523292, 1.97564950457527266359, -2.06999678342791870733, 2.12917345504834898406, -2.16574665676073463416, - 2.16810095097179766910, + 2.1681009509717976691, -2.14792680954273373928, 2.09575065759746603788, -2.02229042952510607023, @@ -14886,7 +14887,7 @@ function ESERK5ConstantCache(zprev) -1.49115083880236687364, 1.30950582475451859921, -1.11532404941113760799, - 0.90671518143909601850, + 0.9067151814390960185, -0.68953453670258491037, 0.46357126005523829892, -0.23325970393871503505, @@ -14899,7 +14900,7 @@ function ESERK5ConstantCache(zprev) 1.39633750910705844994, -1.41227712419989126502, 0.24077264987316682188, - -0.21635012272708684100, + -0.216350122727086841, -0.97609674436860727198, 1.00286253986970308461, -2.17710148200595954293, @@ -14920,7 +14921,7 @@ function ESERK5ConstantCache(zprev) 3.53436268365069850006, -3.62785683786929924466, 2.50558224204713830829, - -2.48587605042674120170, + -2.4858760504267412017, 1.27053751301306783184, -1.17849215214929192719, -0.08512016543339800956, @@ -14931,16 +14932,16 @@ function ESERK5ConstantCache(zprev) 2.76845959671729646701, -3.87060165311105119912, 3.75277363264557228817, - -4.70567649474727733860, + -4.7056764947472773386, 4.42074783946404181734, -5.19010577379704685086, - 4.71012099875255962900, + 4.710120998752559629, -5.27509553026956989896, 4.58698543709133677027, -4.94279163159603740496, 4.05041986262195674584, -4.20976482579639199599, - 3.13469896564698879970, + 3.1346989656469887997, -3.12783702341426295135, 1.90865188794124329696, -1.78191415743805259275, @@ -14952,7 +14953,7 @@ function ESERK5ConstantCache(zprev) 2.62537981789432883772, -3.80421131234295195611, 3.75953964378753813236, - -4.76128240619947717960, + -4.7612824061994771796, 4.51329668906607128775, -5.28806612309917145609, 4.79584969386778858791, @@ -14964,9 +14965,9 @@ function ESERK5ConstantCache(zprev) 2.56881459491101882264, -2.37844417449188538782, 0.97637974841924124458, - -0.65780125171516634630, + -0.6578012517151663463, -0.82913504565950180147, - 1.18704926452319448060, + 1.1870492645231944806, -2.66352363670196368162, 2.96125737287175416768, -4.32608112569619240872, @@ -14976,9 +14977,9 @@ function ESERK5ConstantCache(zprev) -6.37629091890339161353, 5.94564198143230004945, -6.47283338003897235069, - 5.68783887705599688900, + 5.687838877055996889, -5.85603090539181092566, - 4.71935458041359900960, + 4.7193545804135990096, -4.55231847622045560087, 3.10916073113229707303, -2.67321884544175647491, @@ -14987,7 +14988,7 @@ function ESERK5ConstantCache(zprev) -1.35178179764649097905, 1.98114461320103640851, -3.69786685740301690473, - 4.20708425629564519710, + 4.2070842562956451971, -5.72785416278806192025, 5.97003500602199377312, -7.15679088124056050901, @@ -14999,16 +15000,16 @@ function ESERK5ConstantCache(zprev) -6.03671323074506815942, 4.46565740043136294446, -3.83113591417826748753, - 1.92269051942133595290, + 1.9226905194213359529, -1.03113711574222244316, -1.03910963432896275016, 1.98830461874451480675, -4.00331522763892699857, - 4.78275019197742867760, + 4.7827501919774286776, -6.51297768748295791141, 6.89987313732664730992, -8.13861149765103775167, - 7.95169364363339425950, + 7.9516936436333942595, -8.55212817140574443897, 7.68733284519164161708, -7.59528408284325884381, @@ -15024,7 +15025,7 @@ function ESERK5ConstantCache(zprev) 7.99116484998637677251, -9.36159940300958126613, 9.17871907868791581109, - -9.63072213146775268910, + -9.6307221314677526891, 8.47415493139560460634, -7.94362721984439179579, 5.84959799958932080699, @@ -15036,9 +15037,9 @@ function ESERK5ConstantCache(zprev) -7.71652550890289035124, 8.93081549379503591979, -10.74287235476374569032, - 10.82547010407843224300, + 10.825470104078432243, -11.31839661109590622345, - 9.96804949342500101750, + 9.9680494934250010175, -8.99948463819900545957, 6.25827221389928034512, -4.07065488271934139419, @@ -15082,16 +15083,16 @@ function ESERK5ConstantCache(zprev) 30.22884728823828481836, -40.22732139168714127209, 35.42041732704110756913, - -14.72954694341913217670, + -14.7295469434191321767, -20.52079756438108759653, - 54.30165974703549380820, + 54.3016597470354938082, -64.09572187213066740696, 20.63081185725096133865, 75.12719825943990770156, -133.60939683556816248711, -169.50737144934362277127, -59.48433955333090494833, - -41.63904512849007488740, + -41.6390451284900748874, -33.99231401054399270834, 19.54080797462349394777, 4.55502829849072021773, @@ -15104,11 +15105,11 @@ function ESERK5ConstantCache(zprev) 8.22425561888591261095, -3.93551997564432465282, -0.59370052425162889165, - 4.25231302764825969120, + 4.2523130276482596912, -6.28295485383557483772, 6.63113776496695006557, -5.45322092404674041433, - 3.32464860860422728450, + 3.3246486086042272845, -0.72174179537998761624, -1.73600276622615212752, 3.72743418815548643863, @@ -15140,7 +15141,7 @@ function ESERK5ConstantCache(zprev) 0.01782425772482717011, 0.79982916520908431401, -1.52777964579206115836, - 2.19063008943328085820, + 2.1906300894332808582, -2.67322919924064095198, 3.02233610023077803319, -3.14920215486500643109, @@ -15148,7 +15149,7 @@ function ESERK5ConstantCache(zprev) -2.88752930281527486756, 2.52802255896745631247, -2.00261060574737204121, - 1.41628854711359730700, + 1.416288547113597307, -0.73474316150517171575, 0.06613683269867334791, 0.62320295862315566726, @@ -15170,7 +15171,7 @@ function ESERK5ConstantCache(zprev) -0.46340533305202302738, 0.80551049590822643154, -1.04900109572744959507, - 1.24687233037410738490, + 1.2468723303741073849, -1.33519138989903529691, 1.37337515387613695594, -1.30558596407717164567, @@ -15195,7 +15196,7 @@ function ESERK5ConstantCache(zprev) -0.67386296859152894356, 0.39345309523237803617, -0.06630420019528697473, - -0.24964180933781424110, + -0.2496418093378142411, 0.59204882237304268244, -0.90393067744921606899, 1.22251525424021401101, @@ -15210,7 +15211,7 @@ function ESERK5ConstantCache(zprev) -2.16265972775240644665, 2.02908445392619007919, -1.83031751931261355004, - 1.61197782461515704000, + 1.61197782461515704, -1.33969227404366431067, 1.05958332281437939137, -0.73941469259667325087, @@ -15220,15 +15221,15 @@ function ESERK5ConstantCache(zprev) 0.56334347730314737746, -0.85993865931544666292, 1.15355380075085678371, - -1.40306234169566979020, + -1.4030623416956697902, 1.63893898008094884844, -1.82261333889625243287, 1.98524726049448907439, -2.09103327073781963819, - 2.17193843983594758740, + 2.1719384398359475874, -2.19495042784403082692, 2.19279208859516039354, - -2.13512131262470017390, + -2.1351213126247001739, 2.05522349364857603859, -1.92517378376399994622, 1.77851640906494634642, @@ -15237,7 +15238,7 @@ function ESERK5ConstantCache(zprev) -1.15989237858786520263, 0.92822999525679505961, -0.67335391614435835539, - 0.42724042918907328970, + 0.4272404291890732897, -0.16786040866833609742, -0.07410194924083186863, 0.32013291647182384736, @@ -15252,7 +15253,7 @@ function ESERK5ConstantCache(zprev) -1.58568918912120992992, 1.60440097318669594451, -1.58711959590678031162, - 1.55474689021980583270, + 1.5547468902198058327, -1.48960550996303919824, 1.41225945797069551979, -1.30659672321418773855, @@ -15266,7 +15267,7 @@ function ESERK5ConstantCache(zprev) -0.10103385877493661904, -0.05716681331738498323, 0.21622718922519248985, - -0.36140680255428325740, + -0.3614068025542832574, 0.50312173808986693224, -0.62804062257029935612, 0.74601488413363170604, @@ -15281,7 +15282,7 @@ function ESERK5ConstantCache(zprev) -1.10481531618038042453, 1.06955121381055628937, -1.01784259371584329124, - 0.95581962191674607610, + 0.9558196219167460761, -0.87973738345246554893, 0.79493084675791947369, -0.69882976314208455904, @@ -15289,7 +15290,7 @@ function ESERK5ConstantCache(zprev) -0.48476115234862016123, 0.36894175992122868468, -0.24809962142074662439, - 0.12489275394198096070, + 0.1248927539419809607, -0.85780827449441809929, 1.87311135815871554477, -1.40838964617257844658, @@ -15299,7 +15300,7 @@ function ESERK5ConstantCache(zprev) -0.50747983332533763701, 0.53701836782916634316, 0.03515625425156850004, - -0.01958264392830722650, + -0.0195826439283072265, 0.59646954782771133274, -0.57707569418250370674, 1.14046822460767693919, @@ -15312,7 +15313,7 @@ function ESERK5ConstantCache(zprev) -2.10978152453728418081, 2.45605233636000264141, -2.17343321962911106837, - 2.43967327697667801800, + 2.439673276976678018, -2.07639382788092863308, 2.26173990559339310735, -1.81977592374179253376, @@ -15338,7 +15339,7 @@ function ESERK5ConstantCache(zprev) 2.66801136586207343626, -2.28588196314601921344, 2.43509577132545906863, - -1.95199470173242173310, + -1.9519947017324217331, 2.00464505489753097578, -1.43257446865560900129, 1.40494018730467207234, @@ -15357,7 +15358,7 @@ function ESERK5ConstantCache(zprev) 2.95933029642088785138, -2.70218270891704470671, 2.95521357734111900228, - -2.56176201377990286900, + -2.561762013779902869, 2.67820118059230916074, -2.15224301550462726595, 2.14265054817842415247, @@ -15374,19 +15375,19 @@ function ESERK5ConstantCache(zprev) 2.81608240133038556507, -2.77725694698999969745, 3.23496724231648480341, - -3.03503998360083082630, + -3.0350399836008308263, 3.31952785645927539449, -2.93980156225781152912, - 3.04183396255613835990, + 3.0418339625561383599, -2.48325019944946179251, 2.41439383249833383616, -1.69930609927331621734, 1.49254767036226332344, -0.66409209398160262694, 0.37189332009631109743, - 0.50930286450736328430, - -0.81963473024248156840, - 1.68136930431824160870, + 0.5093028645073632843, + -0.8196347302424815684, + 1.6813693043182416087, -1.93478793241133373293, 2.70143811420589274874, -2.82417238408201676236, @@ -15396,7 +15397,7 @@ function ESERK5ConstantCache(zprev) -3.43533939724581305342, 3.57452036928739946831, -3.02245910744027179717, - 2.92066509752646119580, + 2.9206650975264611958, -2.14350895444062006234, 1.84028647864847472171, -0.89482393420570593978, @@ -15421,7 +15422,7 @@ function ESERK5ConstantCache(zprev) 2.11545108151931193774, -2.69548274454682879053, 3.72458975879092957229, - -4.03777504989926061540, + -4.0377750498992606154, 4.72114648584837492962, -4.62337978488568079882, 4.84654382750967194227, @@ -15437,15 +15438,15 @@ function ESERK5ConstantCache(zprev) -4.48842352034151659268, 5.40044080607088172741, -5.44406191014984397469, - 5.69550708319509180200, + 5.695507083195091802, -5.02167434231604570272, 4.54119726028438996934, -3.17080776703337274824, - 2.07951317135702717920, + 2.0795131713570271792, -0.23575542432270046866, - -1.14634107652135908140, + -1.1463410765213590814, 3.05971292687276674727, - -4.26627257252743330440, + -4.2662725725274333044, 5.74920081827091955518, -6.28199543916729918891, 6.87853996202356565703, @@ -15456,7 +15457,7 @@ function ESERK5ConstantCache(zprev) -0.20999396108836054786, -1.82844539669973205065, 4.35625482986863321599, - -6.03185618623979191710, + -6.0318561862397919171, 7.72604861288495836646, -8.12956796039805240639, 8.19730238541001199337, @@ -15465,19 +15466,19 @@ function ESERK5ConstantCache(zprev) -1.86432702668585648098, -1.15336316764613067143, 4.80067756449165372601, - -7.51335681582440262360, + -7.5133568158244026236, 9.90572301763357287996, -10.44052035142463452644, 9.90771576476919335619, -7.11188150283440201349, 3.33639304322946816939, 2.00730798404884636099, - -6.99958912648036690740, + -6.9995891264803669074, 11.67785575660025187972, -13.81125972418755942783, 13.52632834426499641722, -9.23127753746672041757, - 2.31352987610601390500, + 2.313529876106013905, 6.99210139750832038175, -15.18394391708127422191, 20.17921613415559889404, @@ -15490,8 +15491,8 @@ function ESERK5ConstantCache(zprev) -37.58600600492959387111, 66.81980314062600712077, 84.74613000143813223985, - 23.68169873246636214503 + 23.68169873246636214503, ] - ESERK5ConstantCache{eltype(Bᵢ), typeof(zprev)}(ms, Cᵤ, Cₑ, zprev, Bᵢ, 1, 0, 0) + return ESERK5ConstantCache{eltype(Bᵢ), typeof(zprev)}(ms, Cᵤ, Cₑ, zprev, Bᵢ, 1, 0, 0) end diff --git a/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_rock2.jl b/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_rock2.jl index b7b4e1a2e9..792b7f2382 100644 --- a/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_rock2.jl +++ b/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_rock2.jl @@ -4,69 +4,74 @@ function ROCK2ConstantCache(T, T2, zprev) 20, 22, 24, 26, 28, 30, 33, 36, 39, 43, 47, 51, 56, 61, 66, 72, 78, 85, 93, - 102, 112, 123, 135, 148, 163, 180, 198) - fp1 = SVector{46, T}(0.4102693550421609e+00, 0.3889624104727243e+00, - 0.3804692420283886e+00, - 0.3760815680865637e+00, 0.3735177579729938e+00, - 0.3719340231904236e+00, - 0.3708571145968057e+00, 0.3700947006022557e+00, - 0.3695328931459086e+00, - 0.3691085831661758e+00, 0.3687813249652330e+00, - 0.3685244707068931e+00, - 0.3683185599507446e+00, 0.3681542178682514e+00, - 0.3680181997765286e+00, - 0.3679084456991284e+00, 0.3678181571053212e+00, - 0.3678314333608541e+00, - 0.3677897070402892e+00, 0.3681800192470787e+00, - 0.3681272993461229e+00, - 0.3680840569645587e+00, 0.3680522380648169e+00, - 0.3680263578626069e+00, - 0.3680061275157194e+00, 0.3679837719607466e+00, - 0.3679668653311732e+00, - 0.3679542340323301e+00, 0.3679429332584250e+00, - 0.3679349432021754e+00, - 0.3679290943359695e+00, 0.3679242023884676e+00, - 0.3679207541681089e+00, - 0.3679185472223537e+00, 0.3679168690130640e+00, - 0.3679158588043139e+00, - 0.3679154592969145e+00, 0.3679154025286917e+00, - 0.3679157536198652e+00, - 0.3679163676763697e+00, 0.3679171904021983e+00, - 0.3679181786833088e+00, - 0.3679192462983425e+00, 0.3679204323079710e+00, - 0.3679216942157868e+00, - 0.3679229127010114e+00) - fp2 = SVector{46, T}(0.4495196112243335e+00, 0.4219428123056774e+00, - 0.4084335547255627e+00, - 0.4009301129475925e+00, 0.3963598727888637e+00, - 0.3934034185789226e+00, - 0.3913676516238603e+00, 0.3899091428928617e+00, - 0.3888276962996660e+00, - 0.3880048656683555e+00, 0.3873650613539532e+00, - 0.3868583585730354e+00, - 0.3864499054795832e+00, 0.3861178821587815e+00, - 0.3858426294881124e+00, - 0.3856144554520791e+00, 0.3854228843194507e+00, - 0.3853156085078759e+00, - 0.3851902798680153e+00, 0.3853705093720269e+00, - 0.3851957294861824e+00, - 0.3850587241670235e+00, 0.3849515900397918e+00, - 0.3848648995575697e+00, - 0.3847945082231300e+00, 0.3847117224407400e+00, - 0.3846478726309070e+00, - 0.3845979020112835e+00, 0.3845472492329918e+00, - 0.3845088319509754e+00, - 0.3844789634065264e+00, 0.3844504092359686e+00, - 0.3844285235163634e+00, - 0.3844115660464609e+00, 0.3843957877945634e+00, - 0.3843835767106759e+00, - 0.3843727001444428e+00, 0.3843632394180673e+00, - 0.3843553120908175e+00, - 0.3843487746818896e+00, 0.3843434800804404e+00, - 0.3843392605995229e+00, - 0.3843359163858929e+00, 0.3843331309176606e+00, - 0.3843309056586355e+00, - 0.3843292556220249e+00) + 102, 112, 123, 135, 148, 163, 180, 198 + ) + fp1 = SVector{46, T}( + 0.4102693550421609e+0, 0.3889624104727243e+0, + 0.3804692420283886e+0, + 0.3760815680865637e+0, 0.3735177579729938e+0, + 0.3719340231904236e+0, + 0.3708571145968057e+0, 0.3700947006022557e+0, + 0.3695328931459086e+0, + 0.3691085831661758e+0, 0.368781324965233e+0, + 0.3685244707068931e+0, + 0.3683185599507446e+0, 0.3681542178682514e+0, + 0.3680181997765286e+0, + 0.3679084456991284e+0, 0.3678181571053212e+0, + 0.3678314333608541e+0, + 0.3677897070402892e+0, 0.3681800192470787e+0, + 0.3681272993461229e+0, + 0.3680840569645587e+0, 0.3680522380648169e+0, + 0.3680263578626069e+0, + 0.3680061275157194e+0, 0.3679837719607466e+0, + 0.3679668653311732e+0, + 0.3679542340323301e+0, 0.367942933258425e+0, + 0.3679349432021754e+0, + 0.3679290943359695e+0, 0.3679242023884676e+0, + 0.3679207541681089e+0, + 0.3679185472223537e+0, 0.367916869013064e+0, + 0.3679158588043139e+0, + 0.3679154592969145e+0, 0.3679154025286917e+0, + 0.3679157536198652e+0, + 0.3679163676763697e+0, 0.3679171904021983e+0, + 0.3679181786833088e+0, + 0.3679192462983425e+0, 0.367920432307971e+0, + 0.3679216942157868e+0, + 0.3679229127010114e+0 + ) + fp2 = SVector{46, T}( + 0.4495196112243335e+0, 0.4219428123056774e+0, + 0.4084335547255627e+0, + 0.4009301129475925e+0, 0.3963598727888637e+0, + 0.3934034185789226e+0, + 0.3913676516238603e+0, 0.3899091428928617e+0, + 0.388827696299666e+0, + 0.3880048656683555e+0, 0.3873650613539532e+0, + 0.3868583585730354e+0, + 0.3864499054795832e+0, 0.3861178821587815e+0, + 0.3858426294881124e+0, + 0.3856144554520791e+0, 0.3854228843194507e+0, + 0.3853156085078759e+0, + 0.3851902798680153e+0, 0.3853705093720269e+0, + 0.3851957294861824e+0, + 0.3850587241670235e+0, 0.3849515900397918e+0, + 0.3848648995575697e+0, + 0.38479450822313e+0, 0.38471172244074e+0, + 0.384647872630907e+0, + 0.3845979020112835e+0, 0.3845472492329918e+0, + 0.3845088319509754e+0, + 0.3844789634065264e+0, 0.3844504092359686e+0, + 0.3844285235163634e+0, + 0.3844115660464609e+0, 0.3843957877945634e+0, + 0.3843835767106759e+0, + 0.3843727001444428e+0, 0.3843632394180673e+0, + 0.3843553120908175e+0, + 0.3843487746818896e+0, 0.3843434800804404e+0, + 0.3843392605995229e+0, + 0.3843359163858929e+0, 0.3843331309176606e+0, + 0.3843309056586355e+0, + 0.3843292556220249e+0 + ) recf = [ 0.1794612899156781, 0.09326607661089206, @@ -4543,8 +4548,8 @@ function ROCK2ConstantCache(T, T2, zprev) 0.0001211987755701019, 0.9633747238043349, 0.0001212297589117476, - 0.9638702662671197 + 0.9638702662671197, ] - ROCK2ConstantCache{T, T2, typeof(zprev)}(ms, fp1, fp2, recf, zprev, 1, 1, 1, 0, 200) + return ROCK2ConstantCache{T, T2, typeof(zprev)}(ms, fp1, fp2, recf, zprev, 1, 1, 1, 0, 200) end diff --git a/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_rock4.jl b/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_rock4.jl index 561c68659d..a8f33caf94 100644 --- a/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_rock4.jl +++ b/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_rock4.jl @@ -4,365 +4,572 @@ function ROCK4ConstantCache(T, T2, zprev) 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 41, 44, 47, 50, 53, 56, 59, 63, 67, 71, 76, 81, 86, - 92, 98, 105, 112, 120, 129, 138, 148) - fpa = [(-0.149352078672699, 0.629768962985252, - -0.355201061573650, 0.0146745996307541, - -0.0558517281602565, 0.590312931352706) - (-0.179313593132677, 0.522354978881996, - -0.268020263243268, 0.0410644459848542, - -0.0673692676033641, 0.534974252895965) - (-0.182428104178289, 0.488581974232839, - -0.243999027372673, 0.0403844469216897, - -0.0621100542563179, 0.510891501054959) - (-0.177747282156689, 0.475598890858970, - -0.236544145857569, 0.0357873367680739, - -0.0561802405454197, 0.498502393780149) - (-0.171097214294784, 0.471021380996139, - -0.235432301175529, 0.0305165148305403, - -0.0508758913107147, 0.491537536121394) - (-0.164446145110292, 0.470315341552133, - -0.237054736024656, 0.0253636332272387, - -0.0462365759807733, 0.487394153808489) - (-0.158427655171257, 0.471468878620055, - -0.239853802450812, 0.0205746749952032, - -0.0421744356707249, 0.484829913014008) - (-0.153293058075572, 0.473282079177035, - -0.242910850765406, 0.0163722321103915, - -0.0387108095861697, 0.483081034299037) - (-0.148972804305139, 0.475296959544537, - -0.245899260153289, 0.0127203010191100, - -0.0357508839759137, 0.481825981739298) - (-0.145179937599982, 0.477661231491125, - -0.248988404183759, 0.00930730703798092, - -0.0330359105371527, 0.481074258113903) - (-0.141803779162182, 0.480294472251598, - -0.252149638985389, 0.00605980548716020, - -0.0304878190339923, 0.480717680079251) - (-0.139121943562170, 0.482307569354585, - -0.254656989245024, 0.00349723479360248, - -0.0284636204606306, 0.480267545886151) - (-0.136626653539895, 0.484641896383759, - -0.257332057712838, 0.000915869293860006, - -0.0264509129364182, 0.480154720984400) - (-0.134486447576714, 0.486757723660692, - -0.259733624852103, -0.00135988997170157, - -0.0246765061257936, 0.480084593714673) - (-0.132780674018083, 0.488321952587049, - -0.261588769418801, -0.00313701049350723, - -0.0232786280695929, 0.479882004899598) - (-0.131117609799413, 0.490193639754613, - -0.263646432339284, -0.00502134729674226, - -0.0218133033112692, 0.479929065438669) - (-0.129737943206222, 0.491700319201409, - -0.265337954300747, -0.00657602712355092, - -0.0205977998576123, 0.479898556782486) - (-0.128546948141681, 0.493011323225514, - -0.266816177922376, -0.00793004771706004, - -0.0195369613099883, 0.479857299633325) - (-0.127460377104448, 0.494293149884316, - -0.268231271325724, -0.00920717061172173, - -0.0185386009080156, 0.479869528636923) - (-0.126496410155342, 0.495458691659965, - -0.269513232370108, -0.0103575442717928, - -0.0176387115527810, 0.479887174404288) - (-0.124868416118615, 0.497490597051425, - -0.271737391165211, -0.0123394260182449, - -0.0160868868427959, 0.479932724633469) - (-0.123564405510046, 0.499164732520327, - -0.273565616640958, -0.0139585436258901, - -0.0148169722656038, 0.479973747650230) - (-0.122505008329286, 0.500555383947992, - -0.275081797679137, -0.0152951780850662, - -0.0137670777523960, 0.480009428375171) - (-0.121640329449530, 0.501700402349954, - -0.276333007672789, -0.0163961730000813, - -0.0129007107727469, 0.480031673127157) - (-0.120917917691482, 0.502675119491259, - -0.277395466055127, -0.0173277807640047, - -0.0121670308408281, 0.480054118477096) - (-0.120710248396632, 0.502361065588637, - -0.277299180400763, -0.0173459597107178, - -0.0121268146405534, 0.479596544727020) - (-0.120151946726542, 0.503187463625006, - -0.278173489088946, -0.0180998664145073, - -0.0115355117518033, 0.479663327238431) - (-0.119650804512964, 0.503968844736113, - -0.278987558251327, -0.0187954561730573, - -0.0109907774512063, 0.479748806593835) - (-0.119231690274109, 0.504610327555198, - -0.279662019452110, -0.0193736976241804, - -0.0105368584242475, 0.479807172254604) - (-0.118685223311611, 0.505479309944796, - -0.280566027535941, -0.0201436607277488, - -0.00993291024114479, 0.479903135786603) - (-0.118231796286135, 0.506213890671776, - -0.281327499307895, -0.0207902381330527, - -0.00942553811892237, 0.479988558979737) - (-0.117860168810132, 0.506813986559461, - -0.281951733666353, -0.0213206692268858, - -0.00900871675159034, 0.480053891764692) - (-0.117541632407920, 0.507340547092223, - -0.282496164808253, -0.0217814864430309, - -0.00864670120809640, 0.480116952219068) - (-0.117280791290490, 0.507762024730383, - -0.282936101835780, -0.0221553810871189, - -0.00835235476491614, 0.480159581641243) - (-0.117020809344219, 0.508234853606851, - -0.283411245544839, -0.0225511383509412, - -0.00804255449961079, 0.480240908974576) - (-0.116840110106662, 0.508513931927332, - -0.283708061860511, -0.0228054436800931, - -0.00784157438541911, 0.480258758199155) - (-0.116999141776097, 0.507738965363869, - -0.283085550597818, -0.0223557928014705, - -0.00817646181729438, 0.479839084150866) - (-0.116787474223622, 0.508124510062097, - -0.283473179991593, -0.0226786360708563, - -0.00792370493215401, 0.479905001144018) - (-0.116543053242319, 0.508649023059358, - -0.283975543942050, -0.0230858609767789, - -0.00760742817737876, 0.480040247388773) - (-0.116369877848172, 0.508950670881779, - -0.284284071372858, -0.0233448484372084, - -0.00740387836067644, 0.480081925815726) - (-0.115981831952477, 0.509942937789055, - -0.285192892337194, -0.0240615204888854, - -0.00685134671736066, 0.480412958109969) - (-0.115934409239879, 0.509932625794726, - -0.285214065725890, -0.0240929036649298, - -0.00682325905888604, 0.480353282861487) - (-0.114543930853965, 0.514055666969259, - -0.288877128663596, -0.0269187182378037, - -0.00465261555222027, 0.481928410401348) - (-0.114338190892959, 0.514568129329710, - -0.289354467784058, -0.0272970253684862, - -0.00435838305221696, 0.482082731512007) - (-0.113900806706479, 0.515815247278763, - -0.290479621681517, -0.0281706242269155, - -0.00368286974902504, 0.482524745170433) - (-0.114241230745559, 0.514642605930859, - -0.289464730587169, -0.0274037778296787, - -0.00427016797791793, 0.482029696494976) - (-0.113830853818569, 0.515834254672657, - -0.290535565769687, -0.0282330735764243, - -0.00362939602828681, 0.482459847410651) - (-0.113105039346215, 0.518047629039909, - -0.292508542364670, -0.0297505373346793, - -0.00245703714012197, 0.483285747825278) - (-0.113373695071906, 0.517118156325443, - -0.291701320745508, -0.0291406743553601, - -0.00292560575875699, 0.482899951273987) - (-0.112938370080633, 0.518440212713205, - -0.292882869228272, -0.0300502325911247, - -0.00222188377341845, 0.483386803334408)] - fpb = [(0.934502625489809, -0.426556402801135, -0.428612609028723, 0.744370090574855) - (0.727428506710284, -0.281882500610754, -0.366883181811475, 0.684341322628128) - (0.671969568061243, -0.247327027296030, -0.348410422675722, 0.657516722491004) - (0.655616700297981, -0.238808679740035, -0.342918097601918, 0.643274312048176) - (0.653766630051757, -0.239717659625342, -0.342124625373560, 0.634842894408973) - (0.657958401550080, -0.244504571310874, -0.343125007747822, 0.629452994091047) - (0.664644828327504, -0.250836131475691, -0.344767760715637, 0.625804292371554) - (0.671778926897883, -0.257341094888494, -0.346437936729090, 0.623113789954589) - (0.678662206121957, -0.263538563990534, -0.347971227180309, 0.621040683222628) - (0.685711960310753, -0.269724027269246, -0.349535907736682, 0.619566456617273) - (0.692884607363355, -0.275886628173354, -0.351131980732774, 0.618568501341401) - (0.698546656891454, -0.280881006247969, -0.352285102713857, 0.617571192399056) - (0.704573921792281, -0.286045457291729, -0.353563979295968, 0.616965030808178) - (0.709971428905986, -0.290682008221983, -0.354679184547433, 0.616462060289197) - (0.714125178664410, -0.294349691347616, -0.355464510591820, 0.615888572779772) - (0.718736274563484, -0.298288036358834, -0.356401512165052, 0.615594896206387) - (0.722517387767685, -0.301568462204942, -0.357129478686764, 0.615267647826005) - (0.725816343813274, -0.304448113195281, -0.357746756688570, 0.614963961979991) - (0.728974076820863, -0.307182320589777, -0.358345483491417, 0.614739362936109) - (0.731832397913825, -0.309659464712225, -0.358881456195461, 0.614544900863432) - (0.736786729484850, -0.313957288328657, -0.359797924432667, 0.614228100935116) - (0.740854099130286, -0.317495426161459, -0.360535121685962, 0.613973796355241) - (0.744223896195403, -0.320433632193417, -0.361135560093482, 0.613766054898060) - (0.747001832700433, -0.322865419691933, -0.361620350229670, 0.613586121252665) - (0.749359431920161, -0.324930741701897, -0.362028107948934, 0.613438378039065) - (0.749100998320598, -0.324985993239383, -0.361796607662197, 0.612867258144605) - (0.751043873200700, -0.326661586308774, -0.362147816931696, 0.612807453647952) - (0.752854624396087, -0.328210433831008, -0.362482431451812, 0.612782100341090) - (0.754353169889782, -0.329501139703409, -0.362752509396770, 0.612745403519662) - (0.756363017447499, -0.331222786188901, -0.363119850550614, 0.612719466518580) - (0.758055963580132, -0.332671506824595, -0.363429198770158, 0.612703916106263) - (0.759443004727975, -0.333862330033422, -0.363679324780792, 0.612685408765563) - (0.760653160327002, -0.334898139570366, -0.363899175365336, 0.612677301460611) - (0.761629956010211, -0.335739950284413, -0.364072376423153, 0.612660139381166) - (0.762688789887627, -0.336630474589357, -0.364274785126092, 0.612687294013859) - (0.763346400554849, -0.337204680067583, -0.364385896133756, 0.612661785846953) - (0.761923304846226, -0.336206156720779, -0.363978603432088, 0.612221699604794) - (0.762786806785331, -0.336933071907623, -0.364142956905108, 0.612243212238912) - (0.763911644345184, -0.337848624997397, -0.364378249037553, 0.612335667041690) - (0.764597562248984, -0.338433363367646, -0.364503441229143, 0.612339040874567) - (0.766642781170500, -0.340044276021276, -0.364967251951014, 0.612618883157375) - (0.766682555493412, -0.340118220148353, -0.364946973037536, 0.612538317898983) - (0.774955438746513, -0.346489297090328, -0.366916081411072, 0.613985554671875) - (0.776027351639685, -0.347348043660042, -0.367147411126057, 0.614109087783370) - (0.778563137974742, -0.349330512988104, -0.367727843519890, 0.614502095324990) - (0.776264664166250, -0.347594735539935, -0.367159451116240, 0.614023148520995) - (0.778679038214519, -0.349476481579656, -0.367715953710640, 0.614409463784688) - (0.783131247138323, -0.352927933064792, -0.368752741091226, 0.615166687043411) - (0.781304104495501, -0.351541585232233, -0.368306700790280, 0.614794688266817) - (0.783969323650751, -0.353613571196170, -0.368922535023076, 0.615238813023293)] - fpbe = [(1.13509972110540, -0.584333360989720, -0.319172911177732, 0.482853558185876, - 0.109256697110981) - (1.00479199674788, -0.436644602461537, -0.423443966877378, 0.538770645909717, - 0.0795300735974956) - (0.984907410167693, -0.403297625005343, - -0.485090625106059, 0.576309835350610, - 0.0609198451735942) - (0.980171201303714, -0.394437889689979, - -0.517381582925487, 0.601142288908999, - 0.0476702174069568) - (0.974834695776200, -0.392308952799017, - -0.530263724070033, 0.616510618632796, - 0.0379946019218839) - (0.966668353329992, -0.391741144639394, - -0.531455776704021, 0.625494551194751, - 0.0308158334011040) - (0.956319747720222, -0.391138376736994, - -0.526142643689543, 0.630404554467362, - 0.0254019467466823) - (0.943587787064690, -0.389377300510789, - -0.516876350192269, 0.632531861517858, - 0.0212476873553974) - (0.929868441621807, -0.386750527439590, - -0.505935645060380, 0.633001592986906, - 0.0180092360649997) - (0.917878947092234, -0.384686528119553, - -0.495511556683115, 0.632891756120139, - 0.0154458635123923) - (0.907921031017813, -0.383354597608536, - -0.486086276370317, 0.632568615019003, - 0.0133857277406643) - (0.896388476009400, -0.380504535913835, - -0.476131894672218, 0.631491892380436, - 0.0117078025249012) - (0.887685870010584, -0.378944197433540, - -0.467828653690999, 0.630692391160778, - 0.0103241059659401) - (0.879470814062224, -0.377245094706344, - -0.460102121012690, 0.629778007382364, - 0.00917069070021292) - (0.870530751362587, -0.374648589005799, - -0.452452352164561, 0.628569291738020, - 0.00820044757449899) - (0.864018892596866, -0.373280954775127, - -0.446202255714937, 0.627730565946685, - 0.00737537419249938) - (0.857357924295629, -0.371485680656218, - -0.440234425775788, 0.626780133051391, - 0.00666914378696866) - (0.851096961215784, -0.369663988413454, - -0.434754090977242, 0.625846657124080, - 0.00605989696024640) - (0.845691163494378, -0.368162878390094, - -0.429905486466339, 0.625032425385260, - 0.00553041165257352) - (0.840754783321373, -0.366754374490097, - -0.425504080282415, 0.624272520855683, - 0.00506752846502820) - (0.832129732678031, -0.364215201885908, - -0.417868687835329, 0.622912972095680, - 0.00430080260616755) - (0.824841358445432, -0.361969316759517, - -0.411506554101034, 0.621735648069777, - 0.00369621198344728) - (0.818660702021942, -0.359997706140366, - -0.406173910081373, 0.620720634622955, - 0.00321103838340649) - (0.813343156361523, -0.358234931076463, - -0.401657773073081, 0.619835953653306, - 0.00281577816620828) - (0.808812551334635, -0.356709737514645, - -0.397829666549206, 0.619076368359449, - 0.00248944467816156) - (0.802058241484851, -0.353305127983149, - -0.393665858753007, 0.617880189866334, - 0.00221821094859412) - (0.799023019885202, -0.352371068280062, - -0.390970958156562, 0.617372975124671, - 0.00198795503493263) - (0.796533707522770, -0.351659214274525, - -0.388680577600314, 0.616958145987822, - 0.00179179781860265) - (0.794254415802991, -0.350955011234794, - -0.386652430547127, 0.616574541234043, - 0.00162340905415174) - (0.791451974069317, -0.350127723737597, - -0.384099751306937, 0.616103218945433, - 0.00141212925634866) - (0.789140296939903, -0.349447391105024, - -0.381986708309451, 0.615713343205178, - 0.00123963336103694) - (0.787155036742462, -0.348839107260454, - -0.380202863720354, 0.615376708082511, - 0.00109698483515876) - (0.785509443687073, -0.348347728366112, - -0.378703894403193, 0.615097681507449, - 0.000977644426693831) - (0.784038223206202, -0.347876842227869, - -0.377407083344177, 0.614846655967241, - 0.000876815082414696) - (0.783010378301710, -0.347648245486129, - -0.376356876713355, 0.614674780335034, - 0.000790787748777402) - (0.781833266343420, -0.347234482878725, - -0.375370253527294, 0.614472179428255, - 0.000716900834807566) - (0.778157258445688, -0.345006104027160, - -0.373629716648469, 0.613804905745683, - 0.000633900782409020) - (0.777300034873279, -0.344806720424309, - -0.372764739426396, 0.613661241678936, - 0.000564173510000384) - (0.776985336763925, -0.344948310351192, - -0.372138199888685, 0.613616309802328, - 0.000505301025547597) - (0.776123576908821, -0.344696744011525, - -0.371340582024658, 0.613469644712914, - 0.000443902941209962) - (0.776949282583553, -0.345654199916775, - -0.371072531043118, 0.613634699306968, - 0.000392885424956897) - (0.775876610212432, -0.345123309087147, - -0.370392356339381, 0.613444359409516, - 0.000350376011087039) - (0.783347589653809, -0.351086251339795, - -0.371860974551612, 0.614828131953302, - 0.000307119201283797) - (0.783496656673086, -0.351443051706240, - -0.371545102252444, 0.614860564019234, - 0.000271917903319380) - (0.785178130625954, -0.352964147655529, - -0.371615967722576, 0.615170969674100, - 0.000237891869788885) - (0.782045229930799, -0.350764936286095, - -0.370561648626977, 0.614604810918108, - 0.000210170095234033) - (0.783792445229447, -0.352285904984906, - -0.370720709266521, 0.614926468923107, - 0.000183766807783551) - (0.787664243592327, -0.355426631067992, - -0.371408773264980, 0.615628921926696, - 0.000159498839664580) - (0.785248632105467, -0.353713152595833, - -0.370620439974436, 0.615195478568662, - 0.000139988635943928) - (0.787452369208138, -0.355534844520464, - -0.370962019539811, 0.615594462312992, - 0.000122062993942758)] + 92, 98, 105, 112, 120, 129, 138, 148 + ) + fpa = [ + ( + -0.149352078672699, 0.629768962985252, + -0.35520106157365, 0.0146745996307541, + -0.0558517281602565, 0.590312931352706, + ) + ( + -0.179313593132677, 0.522354978881996, + -0.268020263243268, 0.0410644459848542, + -0.0673692676033641, 0.534974252895965, + ) + ( + -0.182428104178289, 0.488581974232839, + -0.243999027372673, 0.0403844469216897, + -0.0621100542563179, 0.510891501054959, + ) + ( + -0.177747282156689, 0.47559889085897, + -0.236544145857569, 0.0357873367680739, + -0.0561802405454197, 0.498502393780149, + ) + ( + -0.171097214294784, 0.471021380996139, + -0.235432301175529, 0.0305165148305403, + -0.0508758913107147, 0.491537536121394, + ) + ( + -0.164446145110292, 0.470315341552133, + -0.237054736024656, 0.0253636332272387, + -0.0462365759807733, 0.487394153808489, + ) + ( + -0.158427655171257, 0.471468878620055, + -0.239853802450812, 0.0205746749952032, + -0.0421744356707249, 0.484829913014008, + ) + ( + -0.153293058075572, 0.473282079177035, + -0.242910850765406, 0.0163722321103915, + -0.0387108095861697, 0.483081034299037, + ) + ( + -0.148972804305139, 0.475296959544537, + -0.245899260153289, 0.01272030101911, + -0.0357508839759137, 0.481825981739298, + ) + ( + -0.145179937599982, 0.477661231491125, + -0.248988404183759, 0.00930730703798092, + -0.0330359105371527, 0.481074258113903, + ) + ( + -0.141803779162182, 0.480294472251598, + -0.252149638985389, 0.0060598054871602, + -0.0304878190339923, 0.480717680079251, + ) + ( + -0.13912194356217, 0.482307569354585, + -0.254656989245024, 0.00349723479360248, + -0.0284636204606306, 0.480267545886151, + ) + ( + -0.136626653539895, 0.484641896383759, + -0.257332057712838, 0.000915869293860006, + -0.0264509129364182, 0.4801547209844, + ) + ( + -0.134486447576714, 0.486757723660692, + -0.259733624852103, -0.00135988997170157, + -0.0246765061257936, 0.480084593714673, + ) + ( + -0.132780674018083, 0.488321952587049, + -0.261588769418801, -0.00313701049350723, + -0.0232786280695929, 0.479882004899598, + ) + ( + -0.131117609799413, 0.490193639754613, + -0.263646432339284, -0.00502134729674226, + -0.0218133033112692, 0.479929065438669, + ) + ( + -0.129737943206222, 0.491700319201409, + -0.265337954300747, -0.00657602712355092, + -0.0205977998576123, 0.479898556782486, + ) + ( + -0.128546948141681, 0.493011323225514, + -0.266816177922376, -0.00793004771706004, + -0.0195369613099883, 0.479857299633325, + ) + ( + -0.127460377104448, 0.494293149884316, + -0.268231271325724, -0.00920717061172173, + -0.0185386009080156, 0.479869528636923, + ) + ( + -0.126496410155342, 0.495458691659965, + -0.269513232370108, -0.0103575442717928, + -0.017638711552781, 0.479887174404288, + ) + ( + -0.124868416118615, 0.497490597051425, + -0.271737391165211, -0.0123394260182449, + -0.0160868868427959, 0.479932724633469, + ) + ( + -0.123564405510046, 0.499164732520327, + -0.273565616640958, -0.0139585436258901, + -0.0148169722656038, 0.47997374765023, + ) + ( + -0.122505008329286, 0.500555383947992, + -0.275081797679137, -0.0152951780850662, + -0.013767077752396, 0.480009428375171, + ) + ( + -0.12164032944953, 0.501700402349954, + -0.276333007672789, -0.0163961730000813, + -0.0129007107727469, 0.480031673127157, + ) + ( + -0.120917917691482, 0.502675119491259, + -0.277395466055127, -0.0173277807640047, + -0.0121670308408281, 0.480054118477096, + ) + ( + -0.120710248396632, 0.502361065588637, + -0.277299180400763, -0.0173459597107178, + -0.0121268146405534, 0.47959654472702, + ) + ( + -0.120151946726542, 0.503187463625006, + -0.278173489088946, -0.0180998664145073, + -0.0115355117518033, 0.479663327238431, + ) + ( + -0.119650804512964, 0.503968844736113, + -0.278987558251327, -0.0187954561730573, + -0.0109907774512063, 0.479748806593835, + ) + ( + -0.119231690274109, 0.504610327555198, + -0.27966201945211, -0.0193736976241804, + -0.0105368584242475, 0.479807172254604, + ) + ( + -0.118685223311611, 0.505479309944796, + -0.280566027535941, -0.0201436607277488, + -0.00993291024114479, 0.479903135786603, + ) + ( + -0.118231796286135, 0.506213890671776, + -0.281327499307895, -0.0207902381330527, + -0.00942553811892237, 0.479988558979737, + ) + ( + -0.117860168810132, 0.506813986559461, + -0.281951733666353, -0.0213206692268858, + -0.00900871675159034, 0.480053891764692, + ) + ( + -0.11754163240792, 0.507340547092223, + -0.282496164808253, -0.0217814864430309, + -0.0086467012080964, 0.480116952219068, + ) + ( + -0.11728079129049, 0.507762024730383, + -0.28293610183578, -0.0221553810871189, + -0.00835235476491614, 0.480159581641243, + ) + ( + -0.117020809344219, 0.508234853606851, + -0.283411245544839, -0.0225511383509412, + -0.00804255449961079, 0.480240908974576, + ) + ( + -0.116840110106662, 0.508513931927332, + -0.283708061860511, -0.0228054436800931, + -0.00784157438541911, 0.480258758199155, + ) + ( + -0.116999141776097, 0.507738965363869, + -0.283085550597818, -0.0223557928014705, + -0.00817646181729438, 0.479839084150866, + ) + ( + -0.116787474223622, 0.508124510062097, + -0.283473179991593, -0.0226786360708563, + -0.00792370493215401, 0.479905001144018, + ) + ( + -0.116543053242319, 0.508649023059358, + -0.28397554394205, -0.0230858609767789, + -0.00760742817737876, 0.480040247388773, + ) + ( + -0.116369877848172, 0.508950670881779, + -0.284284071372858, -0.0233448484372084, + -0.00740387836067644, 0.480081925815726, + ) + ( + -0.115981831952477, 0.509942937789055, + -0.285192892337194, -0.0240615204888854, + -0.00685134671736066, 0.480412958109969, + ) + ( + -0.115934409239879, 0.509932625794726, + -0.28521406572589, -0.0240929036649298, + -0.00682325905888604, 0.480353282861487, + ) + ( + -0.114543930853965, 0.514055666969259, + -0.288877128663596, -0.0269187182378037, + -0.00465261555222027, 0.481928410401348, + ) + ( + -0.114338190892959, 0.51456812932971, + -0.289354467784058, -0.0272970253684862, + -0.00435838305221696, 0.482082731512007, + ) + ( + -0.113900806706479, 0.515815247278763, + -0.290479621681517, -0.0281706242269155, + -0.00368286974902504, 0.482524745170433, + ) + ( + -0.114241230745559, 0.514642605930859, + -0.289464730587169, -0.0274037778296787, + -0.00427016797791793, 0.482029696494976, + ) + ( + -0.113830853818569, 0.515834254672657, + -0.290535565769687, -0.0282330735764243, + -0.00362939602828681, 0.482459847410651, + ) + ( + -0.113105039346215, 0.518047629039909, + -0.29250854236467, -0.0297505373346793, + -0.00245703714012197, 0.483285747825278, + ) + ( + -0.113373695071906, 0.517118156325443, + -0.291701320745508, -0.0291406743553601, + -0.00292560575875699, 0.482899951273987, + ) + ( + -0.112938370080633, 0.518440212713205, + -0.292882869228272, -0.0300502325911247, + -0.00222188377341845, 0.483386803334408, + ) + ] + fpb = [ + (0.934502625489809, -0.426556402801135, -0.428612609028723, 0.744370090574855) + (0.727428506710284, -0.281882500610754, -0.366883181811475, 0.684341322628128) + (0.671969568061243, -0.24732702729603, -0.348410422675722, 0.657516722491004) + (0.655616700297981, -0.238808679740035, -0.342918097601918, 0.643274312048176) + (0.653766630051757, -0.239717659625342, -0.34212462537356, 0.634842894408973) + (0.65795840155008, -0.244504571310874, -0.343125007747822, 0.629452994091047) + (0.664644828327504, -0.250836131475691, -0.344767760715637, 0.625804292371554) + (0.671778926897883, -0.257341094888494, -0.34643793672909, 0.623113789954589) + (0.678662206121957, -0.263538563990534, -0.347971227180309, 0.621040683222628) + (0.685711960310753, -0.269724027269246, -0.349535907736682, 0.619566456617273) + (0.692884607363355, -0.275886628173354, -0.351131980732774, 0.618568501341401) + (0.698546656891454, -0.280881006247969, -0.352285102713857, 0.617571192399056) + (0.704573921792281, -0.286045457291729, -0.353563979295968, 0.616965030808178) + (0.709971428905986, -0.290682008221983, -0.354679184547433, 0.616462060289197) + (0.71412517866441, -0.294349691347616, -0.35546451059182, 0.615888572779772) + (0.718736274563484, -0.298288036358834, -0.356401512165052, 0.615594896206387) + (0.722517387767685, -0.301568462204942, -0.357129478686764, 0.615267647826005) + (0.725816343813274, -0.304448113195281, -0.35774675668857, 0.614963961979991) + (0.728974076820863, -0.307182320589777, -0.358345483491417, 0.614739362936109) + (0.731832397913825, -0.309659464712225, -0.358881456195461, 0.614544900863432) + (0.73678672948485, -0.313957288328657, -0.359797924432667, 0.614228100935116) + (0.740854099130286, -0.317495426161459, -0.360535121685962, 0.613973796355241) + (0.744223896195403, -0.320433632193417, -0.361135560093482, 0.61376605489806) + (0.747001832700433, -0.322865419691933, -0.36162035022967, 0.613586121252665) + (0.749359431920161, -0.324930741701897, -0.362028107948934, 0.613438378039065) + (0.749100998320598, -0.324985993239383, -0.361796607662197, 0.612867258144605) + (0.7510438732007, -0.326661586308774, -0.362147816931696, 0.612807453647952) + (0.752854624396087, -0.328210433831008, -0.362482431451812, 0.61278210034109) + (0.754353169889782, -0.329501139703409, -0.36275250939677, 0.612745403519662) + (0.756363017447499, -0.331222786188901, -0.363119850550614, 0.61271946651858) + (0.758055963580132, -0.332671506824595, -0.363429198770158, 0.612703916106263) + (0.759443004727975, -0.333862330033422, -0.363679324780792, 0.612685408765563) + (0.760653160327002, -0.334898139570366, -0.363899175365336, 0.612677301460611) + (0.761629956010211, -0.335739950284413, -0.364072376423153, 0.612660139381166) + (0.762688789887627, -0.336630474589357, -0.364274785126092, 0.612687294013859) + (0.763346400554849, -0.337204680067583, -0.364385896133756, 0.612661785846953) + (0.761923304846226, -0.336206156720779, -0.363978603432088, 0.612221699604794) + (0.762786806785331, -0.336933071907623, -0.364142956905108, 0.612243212238912) + (0.763911644345184, -0.337848624997397, -0.364378249037553, 0.61233566704169) + (0.764597562248984, -0.338433363367646, -0.364503441229143, 0.612339040874567) + (0.7666427811705, -0.340044276021276, -0.364967251951014, 0.612618883157375) + (0.766682555493412, -0.340118220148353, -0.364946973037536, 0.612538317898983) + (0.774955438746513, -0.346489297090328, -0.366916081411072, 0.613985554671875) + (0.776027351639685, -0.347348043660042, -0.367147411126057, 0.61410908778337) + (0.778563137974742, -0.349330512988104, -0.36772784351989, 0.61450209532499) + (0.77626466416625, -0.347594735539935, -0.36715945111624, 0.614023148520995) + (0.778679038214519, -0.349476481579656, -0.36771595371064, 0.614409463784688) + (0.783131247138323, -0.352927933064792, -0.368752741091226, 0.615166687043411) + (0.781304104495501, -0.351541585232233, -0.36830670079028, 0.614794688266817) + (0.783969323650751, -0.35361357119617, -0.368922535023076, 0.615238813023293) + ] + fpbe = [ + ( + 1.1350997211054, -0.58433336098972, -0.319172911177732, 0.482853558185876, + 0.109256697110981, + ) + ( + 1.00479199674788, -0.436644602461537, -0.423443966877378, 0.538770645909717, + 0.0795300735974956, + ) + ( + 0.984907410167693, -0.403297625005343, + -0.485090625106059, 0.57630983535061, + 0.0609198451735942, + ) + ( + 0.980171201303714, -0.394437889689979, + -0.517381582925487, 0.601142288908999, + 0.0476702174069568, + ) + ( + 0.9748346957762, -0.392308952799017, + -0.530263724070033, 0.616510618632796, + 0.0379946019218839, + ) + ( + 0.966668353329992, -0.391741144639394, + -0.531455776704021, 0.625494551194751, + 0.030815833401104, + ) + ( + 0.956319747720222, -0.391138376736994, + -0.526142643689543, 0.630404554467362, + 0.0254019467466823, + ) + ( + 0.94358778706469, -0.389377300510789, + -0.516876350192269, 0.632531861517858, + 0.0212476873553974, + ) + ( + 0.929868441621807, -0.38675052743959, + -0.50593564506038, 0.633001592986906, + 0.0180092360649997, + ) + ( + 0.917878947092234, -0.384686528119553, + -0.495511556683115, 0.632891756120139, + 0.0154458635123923, + ) + ( + 0.907921031017813, -0.383354597608536, + -0.486086276370317, 0.632568615019003, + 0.0133857277406643, + ) + ( + 0.8963884760094, -0.380504535913835, + -0.476131894672218, 0.631491892380436, + 0.0117078025249012, + ) + ( + 0.887685870010584, -0.37894419743354, + -0.467828653690999, 0.630692391160778, + 0.0103241059659401, + ) + ( + 0.879470814062224, -0.377245094706344, + -0.46010212101269, 0.629778007382364, + 0.00917069070021292, + ) + ( + 0.870530751362587, -0.374648589005799, + -0.452452352164561, 0.62856929173802, + 0.00820044757449899, + ) + ( + 0.864018892596866, -0.373280954775127, + -0.446202255714937, 0.627730565946685, + 0.00737537419249938, + ) + ( + 0.857357924295629, -0.371485680656218, + -0.440234425775788, 0.626780133051391, + 0.00666914378696866, + ) + ( + 0.851096961215784, -0.369663988413454, + -0.434754090977242, 0.62584665712408, + 0.0060598969602464, + ) + ( + 0.845691163494378, -0.368162878390094, + -0.429905486466339, 0.62503242538526, + 0.00553041165257352, + ) + ( + 0.840754783321373, -0.366754374490097, + -0.425504080282415, 0.624272520855683, + 0.0050675284650282, + ) + ( + 0.832129732678031, -0.364215201885908, + -0.417868687835329, 0.62291297209568, + 0.00430080260616755, + ) + ( + 0.824841358445432, -0.361969316759517, + -0.411506554101034, 0.621735648069777, + 0.00369621198344728, + ) + ( + 0.818660702021942, -0.359997706140366, + -0.406173910081373, 0.620720634622955, + 0.00321103838340649, + ) + ( + 0.813343156361523, -0.358234931076463, + -0.401657773073081, 0.619835953653306, + 0.00281577816620828, + ) + ( + 0.808812551334635, -0.356709737514645, + -0.397829666549206, 0.619076368359449, + 0.00248944467816156, + ) + ( + 0.802058241484851, -0.353305127983149, + -0.393665858753007, 0.617880189866334, + 0.00221821094859412, + ) + ( + 0.799023019885202, -0.352371068280062, + -0.390970958156562, 0.617372975124671, + 0.00198795503493263, + ) + ( + 0.79653370752277, -0.351659214274525, + -0.388680577600314, 0.616958145987822, + 0.00179179781860265, + ) + ( + 0.794254415802991, -0.350955011234794, + -0.386652430547127, 0.616574541234043, + 0.00162340905415174, + ) + ( + 0.791451974069317, -0.350127723737597, + -0.384099751306937, 0.616103218945433, + 0.00141212925634866, + ) + ( + 0.789140296939903, -0.349447391105024, + -0.381986708309451, 0.615713343205178, + 0.00123963336103694, + ) + ( + 0.787155036742462, -0.348839107260454, + -0.380202863720354, 0.615376708082511, + 0.00109698483515876, + ) + ( + 0.785509443687073, -0.348347728366112, + -0.378703894403193, 0.615097681507449, + 0.000977644426693831, + ) + ( + 0.784038223206202, -0.347876842227869, + -0.377407083344177, 0.614846655967241, + 0.000876815082414696, + ) + ( + 0.78301037830171, -0.347648245486129, + -0.376356876713355, 0.614674780335034, + 0.000790787748777402, + ) + ( + 0.78183326634342, -0.347234482878725, + -0.375370253527294, 0.614472179428255, + 0.000716900834807566, + ) + ( + 0.778157258445688, -0.34500610402716, + -0.373629716648469, 0.613804905745683, + 0.00063390078240902, + ) + ( + 0.777300034873279, -0.344806720424309, + -0.372764739426396, 0.613661241678936, + 0.000564173510000384, + ) + ( + 0.776985336763925, -0.344948310351192, + -0.372138199888685, 0.613616309802328, + 0.000505301025547597, + ) + ( + 0.776123576908821, -0.344696744011525, + -0.371340582024658, 0.613469644712914, + 0.000443902941209962, + ) + ( + 0.776949282583553, -0.345654199916775, + -0.371072531043118, 0.613634699306968, + 0.000392885424956897, + ) + ( + 0.775876610212432, -0.345123309087147, + -0.370392356339381, 0.613444359409516, + 0.000350376011087039, + ) + ( + 0.783347589653809, -0.351086251339795, + -0.371860974551612, 0.614828131953302, + 0.000307119201283797, + ) + ( + 0.783496656673086, -0.35144305170624, + -0.371545102252444, 0.614860564019234, + 0.00027191790331938, + ) + ( + 0.785178130625954, -0.352964147655529, + -0.371615967722576, 0.6151709696741, + 0.000237891869788885, + ) + ( + 0.782045229930799, -0.350764936286095, + -0.370561648626977, 0.614604810918108, + 0.000210170095234033, + ) + ( + 0.783792445229447, -0.352285904984906, + -0.370720709266521, 0.614926468923107, + 0.000183766807783551, + ) + ( + 0.787664243592327, -0.355426631067992, + -0.37140877326498, 0.615628921926696, + 0.00015949883966458, + ) + ( + 0.785248632105467, -0.353713152595833, + -0.370620439974436, 0.615195478568662, + 0.000139988635943928, + ) + ( + 0.787452369208138, -0.355534844520464, + -0.370962019539811, 0.615594462312992, + 0.000122062993942758, + ) + ] recf = [ 0.1762962957651941, - 0.1067131485543800, + 0.10671314855438, 0.1296319693918818, 0.006097984609869632, 0.07296375286357569, 0.08749824867149327, 0.006126949805354446, 0.1026802330400501, - 0.03026744779900850, + 0.0302674477990085, 0.05345766591735225, 0.06421114488497465, 0.006297251335072349, @@ -373,21 +580,21 @@ function ROCK4ConstantCache(T, T2, zprev) 0.04102541073974864, 0.04936734181284644, 0.006437548414781547, - 0.05655964819916140, - 0.03008674068005620, + 0.0565596481991614, + 0.0300867406800562, 0.06301337991392047, 0.06092514503458917, 0.07122116739390528, 0.1014508394981259, 0.03256098772501858, - 0.03923994550846150, + 0.0392399455084615, 0.006548791582739922, 0.04499511886194148, 0.03061034821432499, 0.05000269311882022, 0.06157339578289546, 0.05465516336291797, - 0.09570538881974760, + 0.0957053888197476, 0.06104333020232396, 0.1406290220864037, 0.02651417777294218, @@ -406,7 +613,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.02203688946407306, 0.02661454798174795, 0.006708509073973803, - 0.03056730958573840, + 0.0305673095857384, 0.03140468274131318, 0.03399153986085689, 0.06314347647488826, @@ -422,16 +629,16 @@ function ROCK4ConstantCache(T, T2, zprev) 0.02250861576538788, 0.006766202022280821, 0.02586805882924489, - 0.03170042346032810, + 0.0317004234603281, 0.02877953008086195, 0.06376714023863055, 0.03131867762450776, 0.09801783524123061, - 0.03355864056201850, + 0.0335586405620185, 0.1322218594416999, - 0.03560688231225300, + 0.035606882312253, 0.1658724905539629, - 0.03777371673577270, + 0.0377737167357727, 0.2016177039517425, 0.04119698781191684, 0.2539572842035754, @@ -470,8 +677,8 @@ function ROCK4ConstantCache(T, T2, zprev) 0.02780637354179997, 0.1998070962536277, 0.02908398701850636, - 0.2312827828857880, - 0.03054428937166170, + 0.231282782885788, + 0.0305442893716617, 0.2663434084812225, 0.03290759457513454, 0.3198421010321994, @@ -484,14 +691,14 @@ function ROCK4ConstantCache(T, T2, zprev) 0.06513176017688395, 0.02043905166732186, 0.1002021458157551, - 0.02190770330626050, + 0.0219077033062605, 0.1351369448238108, 0.02320633429617816, 0.1688220571485906, 0.02436655982458731, 0.2008416611727759, - 0.02542750723914090, - 0.2313613787046680, + 0.0254275072391409, + 0.231361378704668, 0.02646792773501215, 0.2616749611549993, 0.02769967463189309, @@ -503,9 +710,9 @@ function ROCK4ConstantCache(T, T2, zprev) 0.006914320860943588, 0.01487812037525849, 0.03248006428304434, - 0.01657652594868420, + 0.0165765259486842, 0.06546254336130322, - 0.01805880263820550, + 0.0180588026382055, 0.1007449363462607, 0.01936010074490956, 0.1358990057232774, @@ -530,7 +737,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.03260808020167218, 0.01475188210924817, 0.06574755356940067, - 0.01607452560476730, + 0.0160745256047673, 0.1012162270929412, 0.01723591531771676, 0.1365667423922086, @@ -541,13 +748,13 @@ function ROCK4ConstantCache(T, T2, zprev) 0.01999362278384748, 0.2333350798953319, 0.02073811037471499, - 0.2619641661449880, + 0.261964166144988, 0.02143841440760416, 0.2894413776906615, 0.02215820736295387, - 0.3175489053704050, + 0.317548905370405, 0.02305270619849904, - 0.3512439576972030, + 0.351243957697203, 0.02449014264738941, 0.4036179314586852, 0.008494564197695063, @@ -581,7 +788,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.4283514372117345, 0.007648100953017721, 0.009270847111494889, - 0.006976054938079860, + 0.00697605493807986, 0.01068147039692487, 0.03281359708712486, 0.01190898600388846, @@ -598,15 +805,15 @@ function ROCK4ConstantCache(T, T2, zprev) 0.2353135758405889, 0.01675598207974404, 0.2639750061864973, - 0.01729863164965770, + 0.0172986316496577, 0.2908276346191939, 0.01780176282268598, 0.3162404475076796, 0.01828983612841132, 0.3410641528662292, 0.01881415834433531, - 0.3673520724841440, - 0.01948852933531380, + 0.367352072484144, + 0.0194885293353138, 0.4000529139809629, 0.02055287002810484, 0.4505930922691549, @@ -617,7 +824,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.03289687833321025, 0.01078755757084805, 0.06639729788616958, - 0.01176100014874140, + 0.0117610001487414, 0.1023029830546846, 0.01261643557454879, 0.1381259991601194, @@ -631,13 +838,13 @@ function ROCK4ConstantCache(T, T2, zprev) 0.2649344026216049, 0.01567717541900471, 0.2918033340368942, - 0.01612624123496420, + 0.0161262412349642, 0.3170079069341164, 0.01654688879900881, 0.3409811920927984, 0.01696136666824286, 0.3646547307991162, - 0.01741546145080310, + 0.0174154614508031, 0.3901537483439419, 0.01800636597179543, 0.4223218228522266, @@ -665,18 +872,18 @@ function ROCK4ConstantCache(T, T2, zprev) 0.01427674437223498, 0.2927507447256686, 0.01468343958863289, - 0.3179214676099940, + 0.317921467609994, 0.01505875998976432, 0.3415951393087426, 0.01541407984395701, - 0.3642544652079210, + 0.364254465207921, 0.01576969712450036, 0.3868951368176343, 0.01616644053575092, 0.4116861214445555, 0.01668748198434585, 0.4433331570075596, - 0.01749188724059570, + 0.0174918872405957, 0.4916033800451471, 0.005754360678751824, 0.006979206263458857, @@ -692,8 +899,8 @@ function ROCK4ConstantCache(T, T2, zprev) 0.01113260003649783, 0.1736928024956524, 0.01169428623074936, - 0.2066843246414360, - 0.01219657523409050, + 0.206684324641436, + 0.0121965752340905, 0.2376686083847098, 0.01264820000840307, 0.2666274169278879, @@ -713,7 +920,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.4319869811400004, 0.01550494890247615, 0.4630491704469774, - 0.01620775053166640, + 0.0162077505316664, 0.5100139240423402, 0.005278040811520425, 0.006402421198476983, @@ -731,11 +938,11 @@ function ROCK4ConstantCache(T, T2, zprev) 0.01073483180895483, 0.2072226942408981, 0.01119665624742548, - 0.2383105498941010, + 0.238310549894101, 0.01161186412382382, 0.2673653866792523, 0.01198709958412187, - 0.2944607083863120, + 0.294460708386312, 0.01232800940556657, 0.3197217653056301, 0.01263963481803662, @@ -748,18 +955,18 @@ function ROCK4ConstantCache(T, T2, zprev) 0.4067976665874104, 0.01372517143690529, 0.4276578990766819, - 0.01403368592830970, - 0.4511616717492440, + 0.0140336859283097, + 0.451161671749244, 0.01444284729184994, - 0.4816264620225250, + 0.481626462022525, 0.01505946839641039, 0.5272614695163532, - 0.004487666665675140, + 0.00448766666567514, 0.005444990141910759, 0.007044130283096086, - 0.006279049188091140, - 0.03318723192008640, - 0.007006368632847780, + 0.00627904918809114, + 0.0331872319200864, + 0.00700636863284778, 0.06706002621750721, 0.007643068862200888, 0.1034291291409337, @@ -778,7 +985,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.01050001965367601, 0.3213027967445414, 0.01076530680194359, - 0.3449782554868110, + 0.344978255486811, 0.01100855051222504, 0.3670882760306343, 0.01123309242673613, @@ -792,7 +999,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.01204780719832178, 0.4640454326093743, 0.01229306401377462, - 0.4864269389633110, + 0.486426938963311, 0.01261927726417314, 0.5156669165861498, 0.01309943489239065, @@ -804,7 +1011,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.03326430524210259, 0.006034411186094848, 0.06723753885455682, - 0.006583863333832890, + 0.00658386333383289, 0.1037337930420006, 0.007067509494777436, 0.1402191813726617, @@ -816,9 +1023,9 @@ function ROCK4ConstantCache(T, T2, zprev) 0.2403434536707747, 0.008523653399761676, 0.2697261364777181, - 0.008800501778860810, + 0.00880050177886081, 0.2971251237465357, - 0.009051782217229110, + 0.00905178221722911, 0.3226519291781493, 0.009280855010852164, 0.3464394048134897, @@ -831,25 +1038,25 @@ function ROCK4ConstantCache(T, T2, zprev) 0.01002812139311295, 0.4271141176574624, 0.01018513471380169, - 0.4445422442202590, + 0.444542244220259, 0.01033699621003472, 0.4614490459910935, - 0.01049031549106710, - 0.4784539901229190, + 0.0104903154910671, + 0.478453990122919, 0.01065642152893932, 0.4966599824214358, 0.01085488420737215, 0.5180410345089337, 0.01111843432827249, - 0.5460483341177160, + 0.546048334117716, 0.01149782035140485, 0.5864065338958527, 0.003360562419718235, 0.004078879630499024, 0.007069329073407106, 0.004705262542208223, - 0.03332708647415080, - 0.005251963413756800, + 0.0333270864741508, + 0.0052519634137568, 0.06738262760022461, 0.005730951315737387, 0.1039837553534775, @@ -871,10 +1078,10 @@ function ROCK4ConstantCache(T, T2, zprev) 0.3476971265301733, 0.008267390411961632, 0.3699801584879876, - 0.008435502610509800, + 0.0084355026105098, 0.3907862310698117, 0.008590582044778893, - 0.4102493117101150, + 0.410249311710115, 0.008734298913651078, 0.4285042785031379, 0.008868296093454296, @@ -887,7 +1094,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.4930576673885005, 0.009355505324217098, 0.5088149715467647, - 0.009490326792694050, + 0.00949032679269405, 0.5260104590494338, 0.009653243364999375, 0.5464780715474396, @@ -895,13 +1102,13 @@ function ROCK4ConstantCache(T, T2, zprev) 0.5732601989067468, 0.01017225716053114, 0.6111363239215825, - 0.002950437825487400, + 0.0029504378254874, 0.003581555112941687, 0.007078620126622295, 0.004132082643231012, 0.03337886298886408, 0.004612740002118506, - 0.06750261702445300, + 0.067502617024453, 0.005034004128539568, 0.1041911190752577, 0.005405066674282486, @@ -928,7 +1135,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.4115626674210771, 0.007677539108440712, 0.4298493831220752, - 0.007794746313920410, + 0.00779474631392041, 0.4470176901244603, 0.007904145004284749, 0.4631903418970273, @@ -941,7 +1148,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.008293770604485683, 0.5214794128662904, 0.008392826136597125, - 0.5362017345344410, + 0.536201734534441, 0.008504035938797334, 0.5525322098044688, 0.008639408222270374, @@ -955,7 +1162,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.007086356419628467, 0.003657766349841741, 0.03342206181054271, - 0.004083661809252030, + 0.00408366180925203, 0.06760295824860309, 0.004457037354538724, 0.1043649740346678, @@ -983,16 +1190,16 @@ function ROCK4ConstantCache(T, T2, zprev) 0.4127244218331418, 0.006802219694622686, 0.4310650456887266, - 0.006906009314473870, + 0.00690600931447387, 0.4482657882348953, 0.007002625080460826, 0.4644331547605672, 0.007092934548851317, - 0.4796729107857300, + 0.47967291078573, 0.007177811732959676, 0.4940976831610963, 0.007258232689273568, - 0.5078399409574430, + 0.507839940957443, 0.007335424050171227, 0.5210737517163408, 0.007411097366633641, @@ -1018,9 +1225,9 @@ function ROCK4ConstantCache(T, T2, zprev) 0.06768640663901933, 0.003976979208186409, 0.1045098632090649, - 0.004270848280167040, - 0.1413735187729310, - 0.004531221910361700, + 0.00427084828016704, + 0.141373518772931, + 0.0045312219103617, 0.1770326285691667, 0.004763154723278143, 0.2109095929304028, @@ -1040,16 +1247,16 @@ function ROCK4ConstantCache(T, T2, zprev) 0.3940742505245702, 0.005973273864880296, 0.4137303052977993, - 0.006073300781079440, + 0.00607330078107944, 0.4321274134643955, 0.006166042448892977, 0.4493743356584487, 0.006252291618234036, - 0.4655722399143190, + 0.465572239914319, 0.006332757862946729, 0.4808165109947856, 0.006408099103723341, - 0.4951999355274510, + 0.495199935527451, 0.006478961616347051, 0.5088179499753192, 0.006546036269964925, @@ -1062,9 +1269,9 @@ function ROCK4ConstantCache(T, T2, zprev) 0.5582886150793852, 0.006797988292026415, 0.5705940457094262, - 0.006867157346618580, + 0.00686715734661858, 0.5838243594874886, - 0.006946966207628190, + 0.00694696620762819, 0.5989305413025341, 0.007045163972244657, 0.6173557330297905, @@ -1078,7 +1285,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.002927174164471204, 0.03348897507192802, 0.003268517695916878, - 0.06775879346915350, + 0.0677587934691535, 0.003567904939390041, 0.1046357814625728, 0.003831806772332035, @@ -1086,22 +1293,22 @@ function ROCK4ConstantCache(T, T2, zprev) 0.004065677361393518, 0.1772903102475344, 0.004274043151934446, - 0.2112406912998520, + 0.211240691299852, 0.004460643560808929, 0.2431839618927255, 0.004628570053481958, - 0.2730769378663360, + 0.273076937866336, 0.004780387068478273, 0.3009740811016449, 0.004918231891978967, - 0.3269788261694700, + 0.32697882616947, 0.005043895306797768, 0.3512164460435231, 0.005158886125836192, - 0.3738189139504120, + 0.373818913950412, 0.005264482738771292, - 0.3949165867949340, - 0.005361774417899160, + 0.394916586794934, + 0.00536177441789916, 0.4146338301275897, 0.005451694687903237, 0.4330869551935628, @@ -1123,19 +1330,19 @@ function ROCK4ConstantCache(T, T2, zprev) 0.5467225528673463, 0.006037272660724469, 0.5580413411348073, - 0.006088067820748090, - 0.5691395094905580, + 0.00608806782074809, + 0.569139509490558, 0.006139174903693435, 0.5802765872262356, 0.006192552890264469, 0.5918411775133858, 0.006251110114702117, - 0.6044203697962170, - 0.006319123951993900, + 0.604420369796217, + 0.0063191239519939, 0.6188952404877303, 0.006402719127039078, 0.6365612063366765, - 0.006510255774185010, + 0.00651025577418501, 0.6592545134576846, 0.006652267840556133, 0.6894261807467007, @@ -1146,7 +1353,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.03351561092037226, 0.002948504867845529, 0.06782096720073962, - 0.003218776897022670, + 0.00321877689702267, 0.1047441025101927, 0.003457059211747976, 0.1417245576749319, @@ -1158,13 +1365,13 @@ function ROCK4ConstantCache(T, T2, zprev) 0.2435368006995073, 0.004176773382240289, 0.2734972927884814, - 0.004313964750721690, + 0.00431396475072169, 0.3014619731636417, 0.004438544635664399, 0.3275333564649527, 0.004552126174118954, 0.3518359485899692, - 0.004656068554335920, + 0.00465606855433592, 0.3745010840861863, 0.004751523397588311, 0.3956585819539499, @@ -1198,7 +1405,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.5899366290511978, 0.005618111542531525, 0.6003405110877628, - 0.005663297103480300, + 0.0056632971034803, 0.6112631579002907, 0.005713326390293707, 0.6232591473997167, @@ -1207,16 +1414,16 @@ function ROCK4ConstantCache(T, T2, zprev) 0.005843235308872718, 0.6540591245646711, 0.005934415308321717, - 0.6756138475691030, + 0.675613847569103, 0.006053127455671619, 0.7038679036965546, - 0.001708003175642380, + 0.00170800317564238, 0.002074181532622547, 0.007107154835723396, 0.002393937473496849, - 0.03353858755734360, + 0.0335385875573436, 0.002673414535955727, - 0.06787466315584890, + 0.0678746631558489, 0.002918625868457997, 0.1048377783441727, 0.003134849526067874, @@ -1232,7 +1439,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.003912767381261045, 0.3018885114907114, 0.004025912539016479, - 0.3280192335266340, + 0.328019233526634, 0.004129078986309924, 0.3523800195135267, 0.004223497595500826, @@ -1249,16 +1456,16 @@ function ROCK4ConstantCache(T, T2, zprev) 0.4684083677796514, 0.004655271425546727, 0.4837553218910148, - 0.004710634539896850, + 0.00471063453989685, 0.4982065930947042, 0.004762473060977909, 0.5118367810144925, 0.004811128680431732, 0.5247147588413267, 0.004856912649796014, - 0.5369051384586530, - 0.004900116799220620, - 0.5484702216816450, + 0.536905138458653, + 0.00490011679922062, + 0.548470221681645, 0.004941026937249812, 0.5594727154468603, 0.004979940477837468, @@ -1267,7 +1474,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.5800680268418966, 0.005053182300865962, 0.5898333966076153, - 0.005088439691236800, + 0.0050884396912368, 0.5994021272105722, 0.005123679830879367, 0.6089495614023648, @@ -1277,7 +1484,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.6290926122189227, 0.005241701843449486, 0.6405709220757223, - 0.005292158145073340, + 0.00529215814507334, 0.6539038212088008, 0.005353817484714892, 0.6701255576222123, @@ -1285,7 +1492,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.6906222214439113, 0.005531783368314496, 0.7171434625046844, - 0.001486821222610860, + 0.00148682122261086, 0.001805710570607849, 0.007112315426865264, 0.002084226678642758, @@ -1294,10 +1501,10 @@ function ROCK4ConstantCache(T, T2, zprev) 0.06794252207314784, 0.002541382628281658, 0.1049563283476954, - 0.002729837665345000, + 0.002729837665345, 0.1420436509870845, - 0.002896941194350830, - 0.1779508117794810, + 0.00289694119435083, + 0.177950811779481, 0.003045903028705765, 0.2120926886975343, 0.003179374802697815, @@ -1316,7 +1523,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.3971603743636597, 0.003824863905497256, 0.4170554403005484, - 0.003889329651040080, + 0.00388932965104008, 0.4356764468047173, 0.003949081575434511, 0.4531296561693286, @@ -1326,7 +1533,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.4849135873526999, 0.004104670535603563, 0.4994139167345992, - 0.004149900758174290, + 0.00414990075817429, 0.5130869342770428, 0.004192331932996859, 0.5259996460201358, @@ -1338,7 +1545,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.5607677074343013, 0.004338901239307418, 0.5712128128876574, - 0.004370809641681970, + 0.00437080964168197, 0.5811716792241682, 0.004401228508048884, 0.5906984004679025, @@ -1346,7 +1553,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.5998536784140458, 0.004458532691684085, 0.6087103236556506, - 0.004486011931533010, + 0.00448601193153301, 0.6173611125584528, 0.004513254549169507, 0.6259299431307766, @@ -1356,7 +1563,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.6435727138959286, 0.004600712887286172, 0.6532217324580875, - 0.004635683708228730, + 0.00463568370822873, 0.6640046346388578, 0.004676663849565939, 0.6765693546213282, @@ -1384,7 +1591,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.002793973015829898, 0.2445602455405584, 0.002899716152387136, - 0.2747216803842120, + 0.274721680384212, 0.002995373840546507, 0.3028893817005614, 0.003082275794427197, @@ -1414,20 +1621,20 @@ function ROCK4ConstantCache(T, T2, zprev) 0.003720880775408019, 0.5393646641028532, 0.003753943164375919, - 0.5509623620882760, + 0.550962362088276, 0.003785138236518451, 0.5619615952404358, 0.003814629199517684, 0.5724092815186362, - 0.003842566733485300, + 0.0038425667334853, 0.5823495672538734, 0.003869093316887355, 0.5918249678197956, 0.003894348333795344, 0.6008778302882713, 0.003918474488962536, - 0.6095522840022940, - 0.003941626226723230, + 0.609552284002294, + 0.00394162622672323, 0.6178969082896937, 0.003963981072925327, 0.6259684294183701, @@ -1437,7 +1644,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.6415926549632834, 0.004028751796394626, 0.6493564801329609, - 0.004050828701392520, + 0.00405082870139252, 0.6572925493481835, 0.004074120789204574, 0.6656262309872097, @@ -1451,7 +1658,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7109733150553114, 0.004252599514137185, 0.7285986885865631, - 0.004314833901724070, + 0.00431483390172407, 0.7506571441023483, 0.001156343000755387, 0.001404504257957441, @@ -1460,8 +1667,8 @@ function ROCK4ConstantCache(T, T2, zprev) 0.03361118414788869, 0.001810903712325119, 0.06804470745318069, - 0.001977340288814310, - 0.1051351961493040, + 0.00197734028881431, + 0.105135196149304, 0.002124181703071103, 0.1423133589772792, 0.002254430165931555, @@ -1470,7 +1677,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.2125738546054181, 0.002474681149731246, 0.2448322054772776, - 0.002568443387429520, + 0.00256844338742952, 0.2750483122588739, 0.002653275289328116, 0.3032717571879833, @@ -1479,7 +1686,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.002800662377663822, 0.3541603675689819, 0.002865033605362301, - 0.3770763523850850, + 0.377076352385085, 0.002924170474532069, 0.3984776764701321, 0.002978672551304409, @@ -1500,7 +1707,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.5280889117936882, 0.003297020454653708, 0.5403696166527656, - 0.003326352123823280, + 0.00332635212382328, 0.5519974959907685, 0.003354018561785408, 0.5630223474016425, @@ -1525,22 +1732,22 @@ function ROCK4ConstantCache(T, T2, zprev) 0.003565630852851213, 0.6489931729721409, 0.003582822510857449, - 0.6560604660107810, + 0.656060466010781, 0.003599938804777734, 0.6630894993854867, 0.003617285646093928, 0.6701969730666828, 0.003635269699036237, - 0.6775393849143700, + 0.67753938491437, 0.003654433055424882, 0.6853273049469121, 0.003675494570182433, 0.6938429782822218, - 0.003699395273559710, + 0.00369939527355971, 0.7034607793792287, 0.003727340922414418, 0.7146686166221225, - 0.003760827388752240, + 0.00376082738875224, 0.7280857713064263, 0.003801623782166765, 0.7444684055765861, @@ -1556,14 +1763,14 @@ function ROCK4ConstantCache(T, T2, zprev) 0.001763306316297053, 0.1052035845952689, 0.001894326321527065, - 0.1424166653656900, + 0.14241666536569, 0.002010556629704488, 0.1784647514196653, 0.002114217175592618, 0.2127589198858749, 0.002207141797804957, 0.2450622274788554, - 0.002290846453223580, + 0.00229084645322358, 0.2753249929535957, 0.002366588574329418, 0.3035961777269406, @@ -1586,15 +1793,15 @@ function ROCK4ConstantCache(T, T2, zprev) 0.002818873396984337, 0.4874910203110806, 0.002852621192436532, - 0.5021193021763500, + 0.50211930217635, 0.002884206960364913, 0.5159118365654818, 0.002913830143454304, - 0.5289346889752990, - 0.002941666946802540, + 0.528934688975299, + 0.00294166694680254, 0.5412478085861132, 0.002967873641281116, - 0.5529056351590590, + 0.552905635159059, 0.002992589359741792, 0.5639576722484762, 0.003015938493650994, @@ -1620,13 +1827,13 @@ function ROCK4ConstantCache(T, T2, zprev) 0.003194918182718492, 0.6563684284758635, 0.003209156415539186, - 0.6629738949529550, + 0.662973894952955, 0.003223109375845204, 0.6694489043071365, 0.003236931170179888, 0.6758593906225592, 0.003250819601641628, - 0.6822906541085610, + 0.682290654108561, 0.003265032236292007, 0.6888546193197504, 0.003279906508904962, @@ -1638,7 +1845,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.003333603169205194, 0.7201861618009667, 0.003356997989054186, - 0.7307875953685270, + 0.730787595368527, 0.003384836571738381, 0.7433987921789071, 0.003418406731492194, @@ -1679,16 +1886,16 @@ function ROCK4ConstantCache(T, T2, zprev) 0.002425624979060079, 0.4383511386477932, 0.002463132778750725, - 0.4559927053277270, + 0.455992705327727, 0.002497996973377256, 0.4725561248235422, 0.002530483119020393, 0.4881294636884907, 0.002560823028544199, - 0.5027928098555960, + 0.502792809855596, 0.002589219901343181, 0.5166188766435952, - 0.002615852559843530, + 0.00261585255984353, 0.5296736371549673, 0.002640878968300298, 0.5420169498193963, @@ -1707,17 +1914,17 @@ function ROCK4ConstantCache(T, T2, zprev) 0.002781147686318178, 0.6125007272671443, 0.002797299589001256, - 0.6207523898606690, + 0.620752389860669, 0.002812695171020565, 0.6286422822922934, - 0.002827392896389240, + 0.00282739289638924, 0.6361963859104227, 0.002841448574941446, 0.6434397776056558, 0.002854916813399088, 0.6503972618317222, 0.002867852754331386, - 0.6570941566018360, + 0.657094156601836, 0.002880314232961717, 0.6635572959395679, 0.002892364515113282, @@ -1726,7 +1933,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.6759054182903871, 0.002915533879795195, 0.6818654639717365, - 0.002926843832981620, + 0.00292684383298162, 0.6877470127613112, 0.002938137802322835, 0.6936140357564597, @@ -1737,17 +1944,17 @@ function ROCK4ConstantCache(T, T2, zprev) 0.002973868789530239, 0.7120802208967371, 0.002987347661611534, - 0.7189955103325420, + 0.718995510332542, 0.003002297518260188, 0.7266352712733982, - 0.003019294818352010, + 0.00301929481835201, 0.7352935018498777, 0.003039046378540213, 0.7453365750657752, 0.003062391179964571, 0.7572088751614536, 0.003090279763155639, - 0.7714291475982730, + 0.771429147598273, 0.003123717004293759, 0.7885701646946724, 0.0008345540180276686, @@ -1764,7 +1971,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.001628063138328361, 0.1786901034175123, 0.001712103666468225, - 0.2130519545476170, + 0.213051954547617, 0.001787456941371129, 0.2454270534974888, 0.001855348698944282, @@ -1789,10 +1996,10 @@ function ROCK4ConstantCache(T, T2, zprev) 0.4730815132757386, 0.002284029531207622, 0.4886876674022503, - 0.002311451825653930, + 0.00231145182565393, 0.5033827203854437, 0.002337118829323729, - 0.5172392978550550, + 0.517239297855055, 0.002361191787080918, 0.5303232962672809, 0.002383813132113577, @@ -1804,13 +2011,13 @@ function ROCK4ConstantCache(T, T2, zprev) 0.002444162273064263, 0.5760498017810869, 0.002462109412745146, - 0.5860654077087350, + 0.586065407708735, 0.002479114147565534, 0.5955947674756841, 0.002495249164658244, 0.6046719571441241, 0.002510580239462893, - 0.6133282164799120, + 0.613328216479912, 0.002525167157099261, 0.6215922842757839, 0.002539064554606323, @@ -1834,7 +2041,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.002640653254172355, 0.6878976884216645, 0.002650156867702621, - 0.6934046853762110, + 0.693404685376211, 0.002659513138546438, 0.6988262090327137, 0.002668812530675645, @@ -1851,8 +2058,8 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7334537129952923, 0.002732430278157871, 0.7407088522578688, - 0.002746907645451310, - 0.7489289818382320, + 0.00274690764545131, + 0.748928981838232, 0.002763663754705104, 0.7584310317783358, 0.002783335043530471, @@ -1874,7 +2081,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.1426446444034435, 0.001476601139740284, 0.1787798638427945, - 0.001552859914551620, + 0.00155285991455162, 0.2131688271751633, 0.001621242048290884, 0.2455727658693272, @@ -1886,8 +2093,8 @@ function ROCK4ConstantCache(T, T2, zprev) 0.3308076883028777, 0.001835591597189766, 0.3555252435875009, - 0.001877965170693660, - 0.3786000160301540, + 0.00187796517069366, + 0.378600016030154, 0.001916907758736738, 0.4001588169674569, 0.001952810766576543, @@ -1901,14 +2108,14 @@ function ROCK4ConstantCache(T, T2, zprev) 0.002072077518345742, 0.4891761844801786, 0.002096986074148179, - 0.5038997769424400, + 0.50389977694244, 0.002120301203878496, 0.5177839552843484, 0.002142169061433792, 0.5308945491240521, 0.002162718750455528, 0.5432912893815535, - 0.002182064718440740, + 0.00218206471844074, 0.5550283971155782, 0.002200308763672422, 0.5661551304354499, @@ -1929,7 +2136,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.002315767145022433, 0.6378259782215101, 0.002327257411049353, - 0.6450721605572670, + 0.645072160557267, 0.002338242730369626, 0.6520181930839076, 0.002348758560479908, @@ -1938,7 +2145,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.6650877664469207, 0.002368514298725632, 0.6712482569089239, - 0.002377817752650840, + 0.00237781775265084, 0.6771832029067319, 0.002386780309439892, 0.6829107580966474, @@ -1954,7 +2161,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7091737632918418, 0.002435484820891955, 0.7141442820039481, - 0.002443235844427740, + 0.00244323584442774, 0.7191129655073966, 0.002451089922557623, 0.7241392431779231, @@ -1964,7 +2171,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7346847122783368, 0.002476668140634181, 0.7404188178940524, - 0.002486522120258960, + 0.00248652212025896, 0.7466510642206331, 0.002497491395393781, 0.7535686551625321, @@ -1976,7 +2183,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7809597539113882, 0.002560694413103588, 0.7933718506147267, - 0.002583840650378180, + 0.00258384065037818, 0.8080481691101191, 0.0006694334606038313, 0.0008132301052210061, @@ -1999,14 +2206,14 @@ function ROCK4ConstantCache(T, T2, zprev) 0.2761379595225904, 0.001538336359526358, 0.3045521719476219, - 0.001583231069003380, + 0.00158323106900338, 0.3310762180672609, 0.001624204791259703, 0.3558301646036297, 0.001661736860472097, 0.3789415592809941, 0.001696233421123923, - 0.4005369903859170, + 0.400536990385917, 0.001728040504318892, 0.4207375854097784, 0.001757454499192354, @@ -2021,7 +2228,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.5044884954562696, 0.001876463652712977, 0.5184050523373731, - 0.001895846655550170, + 0.00189584665555017, 0.5315470026926565, 0.001914062012192412, 0.5439740105721099, @@ -2030,7 +2237,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.001947383334819745, 0.5668948928266588, 0.001962659608717758, - 0.5774827218315940, + 0.577482721831594, 0.001977111607276341, 0.5875444685962498, 0.001990803855373865, @@ -2046,7 +2253,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.002049717757561867, 0.6387387713071162, 0.002059895595863033, - 0.6459984324868040, + 0.645998432486804, 0.002069622662222278, 0.6529551075171532, 0.002078929209927277, @@ -2065,7 +2272,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.6946307179415828, 0.002134464291583733, 0.6997682556089891, - 0.002141306288121780, + 0.00214130628812178, 0.7047475089834524, 0.002147947060772256, 0.7095855038862377, @@ -2078,7 +2285,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.002173130824735037, 0.7279532479715103, 0.002179293122829263, - 0.7324434288116620, + 0.732443428811662, 0.002185519670818465, 0.7369740050569291, 0.002191894031123936, @@ -2090,7 +2297,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.002213069905688267, 0.7568970038541067, 0.002221345878507691, - 0.7628411564127120, + 0.762841156412712, 0.002230587003169685, 0.7694637214568848, 0.002241069745958558, @@ -2112,23 +2319,23 @@ function ROCK4ConstantCache(T, T2, zprev) 0.06822000216330427, 0.001019831142421348, 0.1054430127732599, - 0.001095758216195270, + 0.00109575821619527, 0.1427791507549994, 0.001163147152914922, 0.1789661337538298, 0.001223278163696114, 0.2134116378937676, 0.001277208785600386, - 0.2458758686973440, + 0.245875868697344, 0.001325813205911649, 0.2763067382696023, 0.001369816492784942, 0.3047511618662466, 0.001409822883247175, 0.3313061633300986, - 0.001446338629616970, + 0.00144633862961697, 0.3560915640558304, - 0.001479790274040400, + 0.0014797902740404, 0.3792346990474591, 0.001510539225034315, 0.4008619710852165, @@ -2137,18 +2344,18 @@ function ROCK4ConstantCache(T, T2, zprev) 0.001565116520065816, 0.4400451277298846, 0.001589435653602577, - 0.4578190692609130, + 0.457819069260913, 0.001612047223434259, 0.4745122222302962, 0.001633121950929719, - 0.4902122192180130, + 0.490212219218013, 0.001652808868600187, 0.5049987699443599, 0.001671238618449212, 0.5189442584592429, 0.001688526174140261, 0.5321143706133679, - 0.001704773099175760, + 0.00170477309917576, 0.5445687118458739, 0.001720069429524861, 0.5563613934916154, @@ -2156,18 +2363,18 @@ function ROCK4ConstantCache(T, T2, zprev) 0.5675415768232118, 0.001748122025406067, 0.5781539706502275, - 0.001761013715337100, - 0.5882392821853880, + 0.0017610137153371, + 0.588239282185388, 0.001773227734809691, 0.5978346230971775, 0.001784815763538346, - 0.6069738738486110, + 0.606973873848611, 0.001795824443291854, 0.6156880099806808, 0.001806295977494385, 0.6240053941930317, 0.001816268649874427, - 0.6319520380671680, + 0.631952038067168, 0.001825777275563891, 0.6395518371737207, 0.001834853595977716, @@ -2176,13 +2383,13 @@ function ROCK4ConstantCache(T, T2, zprev) 0.6537971564070679, 0.001851822970482422, 0.6604817024077319, - 0.001859767092366030, - 0.6668977957794100, - 0.001867381581918830, + 0.00185976709236603, + 0.66689779577941, + 0.00186738158191883, 0.6730615950017611, 0.001874687391723729, 0.6789881919521959, - 0.001881704069826390, + 0.00188170406982639, 0.6846917603173716, 0.001888449989971118, 0.6901857076183885, @@ -2196,19 +2403,19 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7103161434075709, 0.001918710615393293, 0.7149486637645913, - 0.001924184802344570, + 0.00192418480234457, 0.7194465147858177, 0.001929507302533566, 0.7238237692546146, 0.001934698524185406, 0.7280960290730413, 0.001939781574913619, - 0.7322810475484290, + 0.732281047548429, 0.001944783238404899, 0.7363994980480986, 0.001949735169676031, 0.7404759210790995, - 0.001954675350226750, + 0.00195467535022675, 0.7445398854214426, 0.001959649844884542, 0.7486274009877383, @@ -2230,23 +2437,23 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7902511335384258, 0.002020787431823991, 0.7982992156041412, - 0.002032237508156190, + 0.00203223750815619, 0.8075719965967809, - 0.002045456833973120, + 0.00204545683397312, 0.8183078136932541, 0.002060712530690398, 0.8307507916355182, 0.0005338928457208802, - 0.0006486041055927330, + 0.000648604105592733, 0.007134757145335637, 0.0007488783022520046, 0.03369410911427631, 0.0008366191792139075, 0.06823966328875076, 0.0009136926200367255, - 0.1054776147161770, + 0.105477614716177, 0.0009817372289705743, - 0.1428316413133060, + 0.142831641313306, 0.001042134467481678, 0.1790388973189992, 0.001096030851195136, @@ -2255,13 +2462,13 @@ function ROCK4ConstantCache(T, T2, zprev) 0.2459945403613866, 0.001187945232547193, 0.2764503284138904, - 0.001227395462237520, + 0.00122739546223752, 0.3049205940601908, 0.001263265290388587, 0.3315021246228428, 0.001296008087702652, 0.3563145379544189, - 0.001326005836926910, + 0.00132600583692691, 0.3794849926333959, 0.001353582187798311, 0.4011397375442878, @@ -2280,11 +2487,11 @@ function ROCK4ConstantCache(T, T2, zprev) 0.001497741365648968, 0.5194090599684319, 0.001513253919449596, - 0.5326041243428160, + 0.532604124342816, 0.001527833434485045, 0.5450827895910497, 0.001541560536285142, - 0.5568991222679660, + 0.556899122267966, 0.001554506940716115, 0.5681022442899654, 0.001566736642551277, @@ -2304,18 +2511,18 @@ function ROCK4ConstantCache(T, T2, zprev) 0.001636432923609736, 0.6402668207058439, 0.001644578295050302, - 0.6475569836949800, + 0.64755698369498, 0.001652361225240263, 0.6545415270716049, 0.001659805444262448, 0.6612391097238539, - 0.001666932725870720, + 0.00166693272587072, 0.6676669834625878, 0.001673763100099416, 0.6738411327196651, - 0.001680315045376260, + 0.00168031504537626, 0.6797764037527307, - 0.001686605664538830, + 0.00168660566453883, 0.6854866258810527, 0.001692650848960719, 0.6909847273635962, @@ -2323,11 +2530,11 @@ function ROCK4ConstantCache(T, T2, zprev) 0.6962828487057689, 0.001704063356777271, 0.7013924564580136, - 0.001709457800739110, + 0.00170945780073911, 0.7063244609630222, 0.001714661365618782, 0.7110893420369401, - 0.001719686234962450, + 0.00171968623496245, 0.7156972872545727, 0.001724544367953908, 0.7201583483730915, @@ -2337,7 +2544,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7286804659046311, 0.001738239393121469, 0.7327627499609472, - 0.001742554104306060, + 0.00174255410430606, 0.7367411704788124, 0.001746767585796486, 0.7406286238588718, @@ -2359,12 +2566,12 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7708708209501843, 0.001784164011861242, 0.7750450585439046, - 0.001789035459753730, + 0.00178903545975373, 0.7794912616154927, 0.001794313751342973, 0.7842981311142257, 0.001800114989664162, - 0.7895713343902400, + 0.78957133439024, 0.001806574577713146, 0.7954352514919308, 0.001813847605191753, @@ -2373,7 +2580,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8095311799649906, 0.001831542366827648, 0.8181074940047334, - 0.001842347120393410, + 0.00184234712039341, 0.8279553875468303, 0.001854711901010908, 0.8392695503623823, @@ -2387,7 +2594,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0008029397345236971, 0.1055137237879695, 0.0008627543786402343, - 0.1428864460309730, + 0.142886446030973, 0.0009158506408206921, 0.1791149115084724, 0.0009632356479495138, @@ -2412,14 +2619,14 @@ function ROCK4ConstantCache(T, T2, zprev) 0.4407282102151493, 0.001252007377470389, 0.4585583904118685, - 0.001269858457651580, - 0.4753072483903950, + 0.00126985845765158, + 0.475307248390395, 0.001286498741428814, - 0.4910622490186240, + 0.491062249018624, 0.001302045444889013, 0.5059029528099534, 0.001316601318761973, - 0.5199016110853500, + 0.51990161108535, 0.001330256790211312, 0.5331237917441728, 0.001343091739511245, @@ -2430,11 +2637,11 @@ function ROCK4ConstantCache(T, T2, zprev) 0.5686996086005114, 0.001377343518145096, 0.5793587340271479, - 0.001387531331581560, + 0.00138753133158156, 0.5894892612975623, 0.001397184105238413, 0.5991282456659598, - 0.001406342488530390, + 0.00140634248853039, 0.6083095167442896, 0.001415043166390284, 0.6170640027934311, @@ -2442,13 +2649,13 @@ function ROCK4ConstantCache(T, T2, zprev) 0.6254200202131955, 0.001431201074983781, 0.6334035318149531, - 0.001438715764876940, + 0.00143871576487694, 0.6410383772701038, 0.001445888322283529, 0.6483464788808477, 0.001452741500792328, 0.6553480255553266, - 0.001459296115932730, + 0.00145929611593273, 0.6620616376107076, 0.001465571249361709, 0.6685045147893643, @@ -2465,14 +2672,14 @@ function ROCK4ConstantCache(T, T2, zprev) 0.001498244619060822, 0.7022917269886535, 0.001502985443992799, - 0.7072269415837240, - 0.001507555168249840, - 0.7119916912919050, - 0.001511963563977790, + 0.707226941583724, + 0.00150755516824984, + 0.711991691291905, + 0.00151196356397779, 0.7165952549304837, 0.001516219896245011, 0.7210464706718194, - 0.001520333020996940, + 0.00152033302099694, 0.7253538247205133, 0.001524311488991586, 0.7295255473336399, @@ -2485,14 +2692,14 @@ function ROCK4ConstantCache(T, T2, zprev) 0.001539045885576599, 0.7450181862940887, 0.001542477466093639, - 0.7486346594874230, + 0.748634659487423, 0.001545826846727079, 0.7521667748753935, 0.001549104730812699, 0.7556251385226099, 0.001552323114613247, 0.7590216806350385, - 0.001555495687246740, + 0.00155549568724674, 0.7623700617184821, 0.001558638308120671, 0.7656861600411088, @@ -2509,7 +2716,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.001578192387667105, 0.7862448284470696, 0.001581898599185298, - 0.7901183291700260, + 0.790118329170026, 0.001585871246475873, 0.7942619768635446, 0.001590184264311382, @@ -2529,13 +2736,13 @@ function ROCK4ConstantCache(T, T2, zprev) 0.001638556304338204, 0.8491431596995497, 0.0004152983993727092, - 0.0005045486166497230, + 0.000504548616649723, 0.007137584516676377, 0.0005825747502812775, 0.03371009582559231, 0.0006508564339714855, 0.06827733616228911, - 0.0007108440797559780, + 0.000710844079755978, 0.1055439591076286, 0.0007638115008710665, 0.1429323580617065, @@ -2553,7 +2760,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.3318803708195339, 0.001008578703487142, 0.3567454603219721, - 0.001031958817701520, + 0.00103195881770152, 0.3799693497349148, 0.001053455282818112, 0.4016780028151404, @@ -2567,7 +2774,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.4756529875379346, 0.001139211008944395, 0.4914325418394411, - 0.001152993225032100, + 0.0011529932250321, 0.5062975349402129, 0.001165897950461469, 0.5203201620487163, @@ -2596,7 +2803,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.001274192780889601, 0.6417055723602077, 0.001280554850208162, - 0.6490303707240170, + 0.649030370724017, 0.001286633597682126, 0.6560479135277237, 0.001292447438469551, @@ -2609,7 +2816,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.6813970276241349, 0.001313371388331951, 0.6871307708378881, - 0.001318088240100810, + 0.00131808824010081, 0.6926499652502783, 0.001322623304669488, 0.6979664018971263, @@ -2621,25 +2828,25 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7128054602082953, 0.001339143063206245, 0.7174137831602817, - 0.001342911496162030, + 0.00134291149616203, 0.7218676570980016, 0.001346550857633121, 0.7261750739540748, 0.001350068128634278, 0.7303436111948426, - 0.001353469937828520, + 0.00135346993782852, 0.7343804925285762, 0.001356762622556962, 0.7382926510963945, - 0.001359952292807390, + 0.00135995229280739, 0.7420867968756576, 0.001363044899939134, 0.7457694902776256, 0.001366046312228174, - 0.7493472242304510, + 0.749347224230451, 0.001368962399598178, 0.7528265174113487, - 0.001371799130263930, + 0.00137179913026393, 0.7562140217340938, 0.001374562682436201, 0.7595166477149035, @@ -2651,7 +2858,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7689915310079312, 0.001385024001753947, 0.7720346888027838, - 0.001387532231477270, + 0.00138753223147727, 0.7750376290830836, 0.001390017948880056, 0.7780130684490018, @@ -2678,23 +2885,23 @@ function ROCK4ConstantCache(T, T2, zprev) 0.001421873399672547, 0.8158599058260445, 0.001426145003995468, - 0.8208979110240450, + 0.820897911024045, 0.001430905213100405, - 0.8265121682023010, + 0.826512168202301, 0.001436239345537763, - 0.8328076907174900, - 0.001442237275146430, + 0.83280769071749, + 0.00144223727514643, 0.8398970330439564, - 0.001448990003811190, + 0.00144899000381119, 0.8478968323160648, 0.001456584666833031, - 0.8569224819892680, + 0.856922481989268, 0.0003704312646343119, 0.0004500459652486567, 0.007138650748115411, 0.0005196512293102546, 0.03371612727399277, - 0.0005805664280060180, + 0.000580566428006018, 0.06829155668533947, 0.0006340849446568049, 0.1055690170651003, @@ -2713,17 +2920,17 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0008769959255269664, 0.3320240933589542, 0.0008997703900142133, - 0.3569093819512950, + 0.356909381951295, 0.0009206403645220593, 0.3801538161111002, 0.0009398302000432457, 0.4018832556603875, - 0.0009575310308788060, + 0.000957531030878806, 0.4222181893493448, 0.0009739065619456522, 0.4412715038513685, 0.0009890977229041295, - 0.4591475776827830, + 0.459147577682783, 0.001003226429225417, 0.4759421328870969, 0.001016398637371945, @@ -2733,7 +2940,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.001040232113307033, 0.5206712056814181, 0.001051045809625145, - 0.5339371545956020, + 0.533937154595602, 0.001061210957702222, 0.5464854138565951, 0.001070783432788909, @@ -2762,11 +2969,11 @@ function ROCK4ConstantCache(T, T2, zprev) 0.6566448969707471, 0.001153290896971796, 0.6633877011656901, - 0.001158264384001310, + 0.00115826438400131, 0.6698584786727629, 0.001163030034968892, 0.6760731065636836, - 0.001167600556950560, + 0.00116760055695056, 0.6820462859911614, 0.001171987657658222, 0.6877916474950851, @@ -2777,9 +2984,9 @@ function ROCK4ConstantCache(T, T2, zprev) 0.001184152481040773, 0.7037829988914664, 0.001187906165063826, - 0.7087351155643580, + 0.708735115564358, 0.001191523024697338, - 0.7135145279256490, + 0.713514527925649, 0.001195010481397003, 0.7181301497708876, 0.001198375457282797, @@ -2793,7 +3000,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.001210734100078424, 0.7390267154202931, 0.001213576199187821, - 0.7428186592069160, + 0.742818659206916, 0.001216329345156313, 0.7464961346090013, 0.001218998168739366, @@ -2804,9 +3011,9 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7568981954218305, 0.001226542779750137, 0.7601735199195562, - 0.001228917969342930, + 0.00122891796934293, 0.7633617207306558, - 0.001231230430958390, + 0.00123123043095839, 0.7664681829190014, 0.001233484548321435, 0.7694984395410563, @@ -2822,11 +3029,11 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7837246313034256, 0.001246065128479356, 0.7864369818849385, - 0.001248062343408890, + 0.00124806234340889, 0.7891268582478557, 0.001250052675057249, 0.7918064106168962, - 0.001252047046705140, + 0.00125204704670514, 0.7944897630608011, 0.001254058189642781, 0.7971934181681546, @@ -2842,7 +3049,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8118237698928188, 0.001267513661363494, 0.8151948348470072, - 0.001270232874562430, + 0.00127023287456243, 0.8188143727609828, 0.001273184545147458, 0.8227388097836817, @@ -2861,16 +3068,16 @@ function ROCK4ConstantCache(T, T2, zprev) 0.001304934730786103, 0.8650272688993226, 0.0003247324487808653, - 0.0003945315229438140, + 0.000394531522943814, 0.007139767532965116, 0.0004555578699667749, 0.03372244637254624, 0.0005089677216150194, 0.06830646000320411, 0.0005558945983563953, - 0.1055952873791690, - 0.0005973340508520150, - 0.1430103457525390, + 0.105595287379169, + 0.000597334050852015, + 0.143010345752539, 0.0006341254407194094, 0.1792869234600663, 0.0006669653938797302, @@ -2879,38 +3086,38 @@ function ROCK4ConstantCache(T, T2, zprev) 0.2464001780084456, 0.0007229930587138452, 0.2769419073380583, - 0.0007470509916283250, + 0.000747050991628325, 0.3055016129403092, 0.0007689319468807855, - 0.3321753151236530, + 0.332175315123653, 0.0007889113759410096, 0.3570819738779806, 0.0008072213501811222, 0.3803481790268297, 0.0008240584940970029, 0.4020996841123463, - 0.0008395903192560990, + 0.000839590319256099, 0.4224568848461668, 0.0008539602966613761, 0.4415325859147346, - 0.0008672919359416600, + 0.00086729193594166, 0.4594310931563854, 0.0008796920818161035, - 0.4762480638503880, + 0.476248063850388, 0.0008912535918781442, 0.4920707781580621, 0.0009020575233992923, - 0.5069786309167420, + 0.506978630916742, 0.0009121749286872399, 0.5210437244980383, 0.0009216683368023415, 0.5343314926832955, 0.0009305929826843983, 0.5469013154214589, - 0.0009389978318087510, + 0.000938997831808751, 0.5588071025313237, 0.0009469264384779324, - 0.5700978354396460, + 0.570097835439646, 0.0009544176680744464, 0.5808180626619678, 0.0009615063075283847, @@ -2924,7 +3131,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0009864149311092719, 0.6271633999553797, 0.0009919020030614374, - 0.6351990293204530, + 0.635199029320453, 0.0009971338717269585, 0.6428843212420017, 0.001002127771980826, @@ -2938,12 +3145,12 @@ function ROCK4ConstantCache(T, T2, zprev) 0.001020019027701906, 0.6767643668025705, 0.001024034222710236, - 0.6827519516206730, - 0.001027888260690500, + 0.682751951620673, + 0.0010278882606905, 0.6885111629699746, 0.001031590608007845, 0.6940546451402459, - 0.001035150013900340, + 0.00103515001390034, 0.6993941502179868, 0.001038574577276322, 0.7045406145358273, @@ -2954,7 +3161,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.001048111656019274, 0.7189202961898697, 0.001051066793794383, - 0.7233899327913630, + 0.723389932791363, 0.001053919714044959, 0.7277111803329067, 0.001056675674131018, @@ -2965,11 +3172,11 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7398553106107196, 0.001064409463539858, 0.7436516502756216, - 0.001066823818705570, + 0.00106682381870557, 0.7473319747524817, 0.001069162988716224, - 0.7509017069698120, - 0.001071430610707160, + 0.750901706969812, + 0.00107143061070716, 0.7543659942763458, 0.001073630138329335, 0.7577297390145481, @@ -3003,26 +3210,26 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7967278899584393, 0.001100538449478067, 0.7991200496055508, - 0.001102075246684770, + 0.00110207524668477, 0.8014913325065773, - 0.001103604708628230, + 0.00110360470862823, 0.8038506309404848, 0.001105133699816469, 0.8062081381315597, 0.001106670112111886, 0.8085755975333251, - 0.001108223049519360, + 0.00110822304951936, 0.8109665857911905, 0.001109803034693859, 0.8133968310607946, 0.001111422236740111, - 0.8158845670237690, + 0.815884567023769, 0.001113094718271409, - 0.8184509208406880, + 0.818450920840688, 0.001114836697350123, 0.8211203301382262, - 0.001116666816628120, - 0.8239209796093340, + 0.00111666681662812, + 0.823920979609334, 0.001118606407495873, 0.8268852415235039, 0.001120679731089786, @@ -3037,7 +3244,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8456332754097852, 0.001134121959793832, 0.8505347650275864, - 0.001137680591275090, + 0.00113768059127509, 0.8559644039843292, 0.001141623657948933, 0.8619901524142233, @@ -3049,12 +3256,12 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0004034136512140228, 0.03372745678580264, 0.0004507156263114678, - 0.06831827979235850, + 0.0683182797923585, 0.0004922776751319498, 0.1056161282055053, 0.0005289812044432154, 0.1430420271934089, - 0.0005615693465755460, + 0.000561569346575546, 0.1793309426893349, 0.0005906588650957148, 0.2138882776015863, @@ -3077,7 +3284,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0007563375079342728, 0.4417409357850834, 0.0007681532808226864, - 0.4596575017826150, + 0.459657501782615, 0.0007791441427437137, 0.4764925487070491, 0.0007893923017930954, @@ -3086,7 +3293,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.5072591452826548, 0.0008079386954131118, 0.5213421151585618, - 0.0008163551890154100, + 0.00081635518901541, 0.5346476220690836, 0.0008242678979707145, 0.5472350159192663, @@ -3096,8 +3303,8 @@ function ROCK4ConstantCache(T, T2, zprev) 0.5704660684234719, 0.0008453934839008121, 0.5812032094226068, - 0.0008516797268548300, - 0.5914101459193340, + 0.00085167972685483, + 0.591410145919334, 0.0008576369361234619, 0.6011238433265917, 0.0008632899945099273, @@ -3130,10 +3337,10 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7000046309052734, 0.0009200423475395102, 0.7051618563365225, - 0.0009229674520990890, + 0.000922967452099089, 0.7101357996343394, - 0.0009257857213720340, - 0.7149359585989350, + 0.000925785721372034, + 0.714935958598935, 0.0009285028895757936, 0.7195712019621512, 0.0009311242942067709, @@ -3142,7 +3349,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7283795729669328, 0.0009360993802001778, 0.7325677293146301, - 0.0009384620434241330, + 0.000938462043424133, 0.7366211084358048, 0.0009407469600177421, 0.7405461140927553, @@ -3166,7 +3373,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7709838449309258, 0.0009600554871248025, 0.7739067387317117, - 0.0009616935326914640, + 0.000961693532691464, 0.7767523058059454, 0.0009632878103157287, 0.7795240464721949, @@ -3180,10 +3387,10 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7899402294061247, 0.0009706745980610887, 0.7923932344258478, - 0.0009720492589794330, + 0.000972049258979433, 0.7947925911586078, 0.0009733945624476692, - 0.7971418516523020, + 0.797141851652302, 0.0009747127519265526, 0.7994447432038601, 0.0009760062076207416, @@ -3197,7 +3404,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0009809875538617746, 0.8104147812911904, 0.0009822010600294816, - 0.8125363833872510, + 0.812536383387251, 0.0009834097502974072, 0.8146489864477286, 0.0009846185085894264, @@ -3219,18 +3426,18 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0009951611734340783, 0.8351057766377819, 0.0009967462469844777, - 0.8378506048585280, + 0.837850604858528, 0.0009984402163659223, 0.8407811560526175, 0.001000263181294734, - 0.8439324337673380, + 0.843932433767338, 0.001002237346041166, - 0.8473433317092810, + 0.847343331709281, 0.001004386958434913, 0.8510566173745598, 0.001006738125009853, 0.8551187210241215, - 0.001009318463085570, + 0.00100931846308557, 0.8595792618934147, 0.001012156547280817, 0.8644902349222623, @@ -3242,9 +3449,9 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0003056959967091976, 0.007141513331248321, 0.0003529898095786411, - 0.03373232773731790, + 0.0337323277373179, 0.0003943840897337921, - 0.06832977329356830, + 0.0683297732935683, 0.0004307567414106005, 0.1056363991444212, 0.0004628788405472162, @@ -3255,7 +3462,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.2139443476569179, 0.0005397069428251232, 0.2465426458452338, - 0.0005603058824394920, + 0.000560305882439492, 0.2771148378485354, 0.0005789637011504982, 0.3057063604036936, @@ -3274,7 +3481,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0006722541319677103, 0.4598791158936434, 0.0006818799359437668, - 0.4767320228947860, + 0.476732022894786, 0.0006908558354114982, 0.4925906511342484, 0.0006992446058387721, @@ -3290,7 +3497,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0007340952968696949, 0.5708287967136168, 0.0007399159843938746, - 0.5815829447836500, + 0.58158294478365, 0.0007454244513185431, 0.5918066692004921, 0.0007506448786223955, @@ -3308,7 +3515,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0007770020715316172, 0.6512573014043507, 0.0007807126029873436, - 0.6583343252310160, + 0.658334325231016, 0.0007842617179394069, 0.6651209142221997, 0.0007876596287823588, @@ -3331,7 +3538,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7155823096970855, 0.0008127658246549895, 0.7202280054070732, - 0.0008150640845261530, + 0.000815064084526153, 0.7247166787741906, 0.0008172827039407797, 0.7290560824713176, @@ -3348,7 +3555,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0008291317238207998, 0.7523346791167432, 0.0008308929618041609, - 0.7558094481526250, + 0.755809448152625, 0.0008326006397480466, 0.7591821202261264, 0.0008342571910138194, @@ -3399,7 +3606,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8166882104165335, 0.0008624236969844256, 0.8186109874227465, - 0.0008633715978728290, + 0.000863371597872829, 0.8205120024888089, 0.0008643109912587642, 0.8223958554353771, @@ -3414,7 +3621,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0008689855872887505, 0.8317616421559534, 0.0008699428822395237, - 0.8336763097907850, + 0.833676309790785, 0.0008709190839453324, 0.8356271482143981, 0.0008719204500557906, @@ -3423,7 +3630,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8396880045621392, 0.0008740279666600877, 0.8418277064895145, - 0.0008751511753462460, + 0.000875151175346246, 0.8440633426727417, 0.0008763338492436154, 0.8464149949224021, @@ -3435,27 +3642,27 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8544043019385164, 0.0008819050864333951, 0.8574716026611897, - 0.0008835806429514380, + 0.000883580642951438, 0.8607941542532526, 0.0008854025895229178, - 0.8644076876951290, + 0.864407687695129, 0.0008873893010135113, 0.8683500591389794, 0.0008895596827024104, 0.8726606635323475, 0.0008919326940631082, 0.8773795829320804, - 0.0008945267194288890, + 0.000894526719428889, 0.8825464274388153, 0.0002223192652822833, - 0.0002701145057190040, + 0.000270114505719004, 0.007142201961578917, 0.0003119065510375409, 0.03373622651253249, 0.0003484864321264339, 0.06833897467046082, 0.0003806297364820721, - 0.1056526311462410, + 0.105652631146241, 0.0004090176838012951, 0.1430975404471804, 0.0004342246342064952, @@ -3463,7 +3670,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0004567272828059632, 0.2139892833907438, 0.0004769194148963887, - 0.2465990011834060, + 0.246599001183406, 0.0004951265406555741, 0.2771832823761325, 0.0005116186382371054, @@ -3471,7 +3678,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0005266206864730374, 0.3325071660393497, 0.0005403211724599088, - 0.3574610980955170, + 0.357461098095517, 0.0005528788972227103, 0.3807755762784305, 0.0005644284045399661, @@ -3486,7 +3693,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.4769249128064807, 0.0006105435941597527, 0.4927980565571165, - 0.0006179622488629170, + 0.000617962248862917, 0.5077562335628903, 0.0006249106954973403, 0.5218714480507487, @@ -3508,28 +3715,28 @@ function ROCK4ConstantCache(T, T2, zprev) 0.6111560033299172, 0.0006719765063612168, 0.6200109188606474, - 0.0006759393764906060, + 0.000675939376490606, 0.6284649670553408, 0.0006797141664962577, 0.6365440293006893, 0.0006833138185165486, 0.6442718713535327, 0.0006867501222863375, - 0.6516703477465010, + 0.651670347746501, 0.0006900338401544602, 0.6587595841259685, 0.0006931748162308895, 0.6655581400283747, - 0.0006961820719554190, + 0.000696182071955419, 0.6720831543307668, - 0.0006990638900109890, + 0.000699063890010989, 0.6783504753604156, 0.0007018278882011304, 0.6843747774195197, 0.0007044810846600041, 0.6901696652750492, 0.0007070299555552817, - 0.6957477679800600, + 0.69574776798006, 0.0007094804862707378, 0.7011208232299629, 0.0007118382169105868, @@ -3538,7 +3745,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7112947335920807, 0.0007162954509237486, 0.7161152543292093, - 0.0007184041518653100, + 0.00071840415186531, 0.7207701765965301, 0.0007204385093230375, 0.7252677828954485, @@ -3547,10 +3754,10 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0007242993070741803, 0.7338215559473337, 0.0007261326815532289, - 0.7378917873419190, + 0.737891787341919, 0.0007279056212778734, 0.7418329044971879, - 0.0007296210583486120, + 0.000729621058348612, 0.7456509076357754, 0.0007312817408508591, 0.7493514387389932, @@ -3558,13 +3765,13 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7529398078995253, 0.0007344489990066897, 0.7564210174894084, - 0.0007359602733269230, + 0.000735960273326923, 0.7597997843696403, 0.0007374262132138434, 0.7630805603462782, 0.0007388488378909974, 0.7662675510594492, - 0.0007402300519233290, + 0.000740230051923329, 0.7693647334760027, 0.0007415716537192339, 0.7723758721433454, @@ -3573,7 +3780,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0007441427302069922, 0.7781541043385911, 0.0007453753392414597, - 0.7809277966791060, + 0.780927796679106, 0.0007465746180687906, 0.7836286689677923, 0.0007477419427901918, @@ -3581,7 +3788,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0007488786239238555, 0.7888234711170709, 0.0007499859120665148, - 0.7913228381802210, + 0.791322838180221, 0.0007510650034123837, 0.7937602820697135, 0.0007521170451945067, @@ -3594,7 +3801,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8029385121019574, 0.0007560762541391865, 0.8051014514262963, - 0.0007570089286545360, + 0.000757008928654536, 0.8072160569092491, 0.0007579207215452834, 0.8092844249546161, @@ -3605,7 +3812,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0007605404784685073, 0.8152330010832001, 0.0007613784515200193, - 0.8171374172145180, + 0.817137417214518, 0.0007622004676113267, 0.8190062670610542, 0.0007630075901355534, @@ -3630,7 +3837,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8363369473861753, 0.0007705540088076615, 0.8380133953277569, - 0.0007712959087329680, + 0.000771295908732968, 0.8396995173132502, 0.0007720456224088709, 0.8414023791296488, @@ -3638,8 +3845,8 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8431299531191393, 0.0007735833198629735, 0.8448912369930949, - 0.0007743799114709090, - 0.8466963812112370, + 0.000774379911470909, + 0.846696381211237, 0.0007752016451809944, 0.8485568235840266, 0.0007760542751796868, @@ -3689,7 +3896,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.2466538170423533, 0.0004330069180398755, 0.2772498801896881, - 0.0004474339038008580, + 0.000447433903800858, 0.3058663763636773, 0.0004605579911155484, 0.3325988808094674, @@ -3704,7 +3911,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0005115878016710237, 0.4422687522901076, 0.0005195943228286058, - 0.4602317415082190, + 0.460231741508219, 0.0005270430946153614, 0.4771133961932997, 0.0005339896662637906, @@ -3713,7 +3920,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.5079733438010129, 0.0005465641777837335, 0.5221028734536996, - 0.0005522720230787040, + 0.000552272023078704, 0.5354547549768437, 0.0005576391012124826, 0.5480882663954187, @@ -3729,10 +3936,10 @@ function ROCK4ConstantCache(T, T2, zprev) 0.6022017124008726, 0.0005841213892159104, 0.6114992931083616, - 0.0005877686840933180, + 0.000587768684093318, 0.6203676226097062, 0.0005912389839103901, - 0.6288349163028890, + 0.628834916302889, 0.0005945447364939478, 0.6369270455027728, 0.0005976972565551031, @@ -3741,9 +3948,9 @@ function ROCK4ConstantCache(T, T2, zprev) 0.6520789256394533, 0.0006035829296188047, 0.6591806401656133, - 0.0006063340977673600, + 0.00060633409776736, 0.6659914624065441, - 0.0006089682426829690, + 0.000608968242682969, 0.6725285244645835, 0.0006114926054781716, 0.6788076684377859, @@ -3756,11 +3963,11 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0006206178660351128, 0.7016229527864589, 0.0006226834546060953, - 0.7068125053216800, + 0.70681250532168, 0.0006246722844146502, 0.7118178556622645, 0.0006265885230237052, - 0.7166484908292960, + 0.716648490829296, 0.0006284360441552101, 0.7213132689469173, 0.0006302184530805945, @@ -3781,15 +3988,15 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7535521384979339, 0.0006424938780717482, 0.7570407630365846, - 0.0006438179218450410, + 0.000643817921845041, 0.7604266577520003, 0.0006451022103519516, 0.7637142688659893, 0.0006463485065869407, - 0.7669077950147200, + 0.76690779501472, 0.0006475584725197199, 0.7700112043418378, - 0.0006487336763355520, + 0.000648733676335552, 0.7730282502703713, 0.0006498755990944187, 0.7759624860841656, @@ -3800,9 +4007,9 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0006531153104498718, 0.7843011406686931, 0.0006541373824907589, - 0.7869361194320170, + 0.786936119432017, 0.0006551324714664429, - 0.7895034936680300, + 0.78950349366803, 0.0006561016499619955, 0.7920058692573547, 0.0006570459382452019, @@ -3811,7 +4018,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7968254443729997, 0.0006588636863112547, 0.7991472777018847, - 0.0006597389584201900, + 0.00065973895842019, 0.8014133963335314, 0.0006605929718067311, 0.8036258773716017, @@ -3821,13 +4028,13 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8078978328788472, 0.0006630354315293254, 0.8099610821822974, - 0.0006638122371188470, + 0.000663812237118847, 0.8119782589091303, 0.0006645715641033481, - 0.8139511070129370, + 0.813951107012937, 0.0006653141000107842, 0.8158813275773382, - 0.0006660405175299570, + 0.000666040517529957, 0.8177705874338766, 0.0006667514782449204, 0.8196205282970527, @@ -3861,11 +4068,11 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8423547299689948, 0.0006760347921811532, 0.8438348406117731, - 0.0006766001934827970, + 0.000676600193482797, 0.8453105011300979, 0.0006771655742948708, 0.8467856854705638, - 0.0006777326771850360, + 0.000677732677185036, 0.8482648196070496, 0.0006783034446530447, 0.8497528435300649, @@ -3873,7 +4080,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8512552789714525, 0.0006794649009063182, 0.8527783028853924, - 0.0006800607183903050, + 0.000680060718390305, 0.8543288265058851, 0.0006806705196006733, 0.8559145795259218, @@ -3907,18 +4114,18 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8887999886800295, 0.0006948482698509175, 0.8926260022952612, - 0.0006964431366613300, + 0.00069644313666133, 0.8967668406721245, 0.0001687522084062742, 0.0002050350430521891, 0.007143489225104815, 0.0002367622652786059, - 0.03374351625166600, + 0.033743516251666, 0.0002645340906026387, 0.06835618366232366, 0.0002889390544558335, 0.1056829987008023, - 0.0003104940979691790, + 0.000310494097969179, 0.1431437456375445, 0.0003296350786177901, 0.1794723727318731, @@ -3926,12 +4133,12 @@ function ROCK4ConstantCache(T, T2, zprev) 0.2140734485464243, 0.0003620589217153205, 0.2467046039766637, - 0.0003758876341573480, + 0.000375887634157348, 0.2773116025546536, 0.0003884147581578293, 0.3059395516583021, 0.0003998110227339366, - 0.3326839408735750, + 0.332683940873575, 0.0004102194641152033, 0.3576632785546656, 0.0004197605903284232, @@ -3959,13 +4166,13 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0004885256949620448, 0.5603131593778051, 0.0004926706640505523, - 0.5716797819868060, + 0.571679781986806, 0.0004965880152488166, 0.5824751443673352, 0.0005002958048415423, 0.5927397262665235, - 0.0005038102406673260, - 0.6025104342019820, + 0.000503810240667326, + 0.602510434201982, 0.0005071459114881099, 0.6118209628858234, 0.0005103159832377398, @@ -3974,13 +4181,13 @@ function ROCK4ConstantCache(T, T2, zprev) 0.6291821059168485, 0.0005162058670665758, 0.6372867879128392, - 0.0005189463009622880, + 0.000518946300962288, 0.6450399121650791, 0.0005215626140454308, 0.6524633166362534, 0.0005240629715848113, 0.6595771116117261, - 0.0005264548421517410, + 0.000526454842151741, 0.6663998424002746, 0.0005287450701469129, 0.6729486347171443, @@ -3988,7 +4195,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.6792393247326799, 0.0005330452296408964, 0.6852865755411093, - 0.0005350662651709710, + 0.000535066265170971, 0.6911039815981985, 0.0005370079594647384, 0.6967041624928251, @@ -4006,28 +4213,28 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7263469705865458, 0.0005487207676758462, 0.7307138044675716, - 0.0005501663297110800, + 0.00055016632971108, 0.7349378395946277, 0.0005515634752832511, 0.7390258773726449, 0.0005529145806065207, 0.7429843008159668, 0.0005542218702305272, - 0.7468191059101640, + 0.746819105910164, 0.0005554874289292619, 0.7505359302293567, - 0.0005567132124919160, + 0.000556713212491916, 0.7541400790825443, 0.0005579010575325747, 0.7576365494325465, 0.0005590526904217706, - 0.7610300518048510, + 0.761030051804851, 0.0005601697354308826, 0.7643250303805051, 0.0005612537221699207, 0.7675256814467769, 0.0005623060923901496, - 0.7706359703613220, + 0.770635970361322, 0.0005633282062150818, 0.7736596471697186, 0.0005643213478564601, @@ -4037,7 +4244,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0005662255029669265, 0.7822455704165419, 0.0005671387505098367, - 0.7849564743577130, + 0.784956474357713, 0.0005680275025831865, 0.7875967539612229, 0.0005688927348179374, @@ -4056,24 +4263,24 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8043142210972835, 0.0005743630525397174, 0.8064773188650033, - 0.0005750698922165000, + 0.0005750698922165, 0.8085901275829018, 0.0005757600967488519, - 0.8106544280606480, + 0.810654428060648, 0.0005764342671629149, 0.8126719275136132, - 0.0005770929796147660, + 0.000577092979614766, 0.8146442648700572, 0.0005777367872959363, - 0.8165730159477090, + 0.816573015947709, 0.0005783662222969873, - 0.8184596985434300, - 0.0005789817974456180, + 0.81845969854343, + 0.000578981797445618, 0.8203057774808211, 0.0005795840081362118, 0.8221126696623233, 0.0005801733341683536, - 0.8238817491745800, + 0.82388174917458, 0.0005807502416126773, 0.8256143524986065, 0.0005813151847234263, @@ -4088,16 +4295,16 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8337750680287443, 0.0005839757648761716, 0.8353154840714917, - 0.0005844780624078450, + 0.000584478062407845, 0.8368282133969516, 0.0005849714252682631, 0.8383145120235179, 0.0005854562952230521, - 0.8397756606357110, + 0.839775660635711, 0.0005859331255265216, 0.8412129747325485, 0.0005864023847522156, - 0.8426278158130220, + 0.842627815813022, 0.0005868645610151844, 0.8440216037344282, 0.0005873201666349592, @@ -4138,7 +4345,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8679789966288171, 0.0005953133679941353, 0.8694725996326263, - 0.0005958301904145430, + 0.000595830190414543, 0.8710223121296252, 0.0005963691659207649, 0.8726374019561603, @@ -4148,8 +4355,8 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8761052619650037, 0.0005981544508145503, 0.8779811606467382, - 0.0005988190057157910, - 0.8799687393004150, + 0.000598819005715791, + 0.879968739300415, 0.0005995257270899495, 0.8820819854186045, 0.0006002795149823573, @@ -4172,20 +4379,20 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0002078249765617697, 0.03374626735466673, 0.0002322040770469374, - 0.06836267972058510, + 0.0683626797205851, 0.0002536281024389343, - 0.1056944648470500, + 0.10569446484705, 0.0002725507603509361, 0.1431611968300346, 0.0002893545952483257, 0.1794966519846322, 0.0003043571067937865, - 0.2141052583069300, + 0.21410525830693, 0.0003178205747305427, 0.2467445313185863, 0.0003299618049127232, 0.2773601392459256, - 0.0003409606161517330, + 0.000340960616151733, 0.3059971101361032, 0.0003509668551995601, 0.3327508670011682, @@ -4194,7 +4401,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0003684840080409944, 0.3810902489006329, 0.0003761903012944965, - 0.4029274050222500, + 0.40292740502225, 0.0003833012841788339, 0.4233713978033811, 0.0003898823401138323, @@ -4204,7 +4411,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0004016722146902933, 0.4774270820870889, 0.0004069720358522181, - 0.4933385831828130, + 0.493338583182813, 0.0004119261525257769, 0.5083352115151812, 0.0004165669396400193, @@ -4214,7 +4421,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0004250191616382618, 0.5485225906897057, 0.0004288780707755034, - 0.5605156131771370, + 0.560515613177137, 0.0004325194571969843, 0.5718928863819531, 0.0004359610264298928, @@ -4225,7 +4432,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.6027551866407443, 0.0004452373902181403, 0.6120761317679944, - 0.0004480229143725210, + 0.000448022914372521, 0.6209676230156103, 0.0004506735052476993, 0.6294578582946426, @@ -4244,10 +4451,10 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0004661482037761131, 0.6795838002301146, 0.0004679987643218002, - 0.6856403732164480, + 0.685640373216448, 0.0004697753262034514, 0.6914669638252581, - 0.0004714822013627870, + 0.000471482201362787, 0.6970761878028088, 0.0004731233749983658, 0.7024797706018147, @@ -4291,7 +4498,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.7771194793153748, 0.0004963462277370809, 0.7799859395107068, - 0.0004971716871193750, + 0.000497171687119375, 0.7827757022247849, 0.0004979746887058557, 0.7854917877352522, @@ -4316,13 +4523,13 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0005049470195719527, 0.8091662288371395, 0.0005055535486349787, - 0.8112333277068590, + 0.811233327706859, 0.0005061459176442604, 0.8132533339296184, 0.0005067246246294598, 0.8152278612058557, 0.0005072901459559465, - 0.8171584551713140, + 0.817158455171314, 0.0005078429376997978, 0.8190465976214947, 0.0005083834369598832, @@ -4368,9 +4575,9 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0005171676741845232, 0.8510390835157447, 0.0005175301000056107, - 0.8522872523277160, + 0.852287252327716, 0.0005178875221857676, - 0.8535184042670900, + 0.85351840426709, 0.0005182403034460151, 0.8547337490696901, 0.0005185888271046153, @@ -4387,14 +4594,14 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8617720632905069, 0.0005206156129478311, 0.8629182040514101, - 0.0005209476550295670, + 0.000520947655029567, 0.8640619274638366, 0.0005212797664454193, 0.8652056307266341, 0.0005216127292413131, 0.8663519454211874, 0.0005219474024967696, - 0.8675037650792340, + 0.867503765079234, 0.0005222847309624981, 0.8686642749148173, 0.0005226257542936992, @@ -4403,14 +4610,14 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8710257578565097, 0.0005233235780207398, 0.8722348572285707, - 0.0005236830229588920, + 0.000523683022958892, 0.8734689729618574, 0.0005240514736547882, 0.8747332664628638, 0.0005244306001218837, 0.8760334093141518, 0.0005248222314940908, - 0.8773756232962860, + 0.877375623296286, 0.0005252283667175941, 0.8787667195815746, 0.0005256511844461572, @@ -4422,11 +4629,11 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0005270443814944088, 0.8849787410860012, 0.0005275595659308863, - 0.8867393819581020, + 0.886739381958102, 0.0005281052399771031, 0.8886038514594998, 0.0005286847459332971, - 0.8905837593259870, + 0.890583759325987, 0.0005293015952926587, 0.8926913570756628, 0.0005299594435392922, @@ -4451,22 +4658,22 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0002211729609091939, 0.1057051970576302, 0.0002376757078934563, - 0.1431775337300160, + 0.143177533730016, 0.0002523309440420044, 0.1795193851821314, 0.0002654155096114621, 0.2141350485529856, - 0.0002771580968905830, + 0.000277158096890583, 0.2467819320733997, 0.0002877477478365611, - 0.2774056154477370, + 0.277405615447737, 0.0002973412539386665, 0.3060510531385813, 0.0003060692727883761, 0.3328136064982617, - 0.0003140412687616450, + 0.000314041268761645, 0.3578116754563008, - 0.0003213494654089220, + 0.000321349465408922, 0.3811713698313008, 0.0003280719982928522, 0.4030180284424702, @@ -4474,7 +4681,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.4234716859228214, 0.0003400167776073826, 0.4426448303068433, - 0.0003453451109288780, + 0.000345345110928878, 0.4606414878637722, 0.0003503028857160415, 0.4775570675004032, @@ -4493,13 +4700,13 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0003772201633670793, 0.5720937971957492, 0.0003802237982173855, - 0.5829098782647340, + 0.582909878264734, 0.0003830669924186714, 0.5931950878770883, 0.0003857621484003172, 0.6029863145180096, 0.0003883204295409269, - 0.6123172361692740, + 0.612317236169274, 0.0003907519103608007, 0.6212186432401899, 0.0003930657055071256, @@ -4510,16 +4717,16 @@ function ROCK4ConstantCache(T, T2, zprev) 0.6456162041780895, 0.0003993799569511753, 0.6530591594781886, - 0.0004012985495172340, + 0.000401298549517234, 0.6601923004327613, - 0.0004031340422649590, + 0.000403134042264959, 0.6670341619826434, 0.0004048916721408514, - 0.6736018601298540, - 0.0004065762471981460, + 0.673601860129854, + 0.000406576247198146, 0.6799112219451941, 0.0004081921895038212, - 0.6859769020007800, + 0.68597690200078, 0.0004097435730108617, 0.6918124867754874, 0.0004112341570695012, @@ -4563,16 +4770,16 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0004314486380701255, 0.7746706656513523, 0.0004322115954393903, - 0.7776230760895890, + 0.777623076089589, 0.0004329532211809737, 0.7804954502645794, - 0.0004336743932555310, + 0.000433674393255531, 0.7832909719139642, 0.0004343759425404994, 0.7860126604497781, 0.0004350586559430094, 0.7886633813730524, - 0.0004357232792703970, + 0.000435723279270397, 0.7912458559151491, 0.0004363705198802944, 0.7937626699724827, @@ -4599,14 +4806,14 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0004425132586383796, 0.8177403530382282, 0.0004429959510943727, - 0.8196314404545940, + 0.819631440454594, 0.0004434678641933102, 0.8214812625597571, - 0.0004439293591347870, + 0.000443929359134787, 0.8232911684526717, 0.0004443807818820194, 0.8250624519185151, - 0.0004448224640492010, + 0.000444822464049201, 0.8267963545745015, 0.0004452547237444166, 0.8284940688674631, @@ -4619,8 +4826,8 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0004468954713092401, 0.8349453278065194, 0.0004472849719748584, - 0.8364784606800110, - 0.0004476667180050050, + 0.836478460680011, + 0.000447666718005005, 0.8379816806613994, 0.0004480409538345297, 0.8394559109472592, @@ -4633,7 +4840,7 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0004494674246486925, 0.8450804498574688, 0.0004498075259867541, - 0.8464226642871850, + 0.846422664287185, 0.0004501414429791688, 0.8477409132253626, 0.0004504693794119635, @@ -4658,25 +4865,25 @@ function ROCK4ConstantCache(T, T2, zprev) 0.8597729329695807, 0.0004534635773826384, 0.8608779455798124, - 0.0004537389397327130, + 0.000453738939732713, 0.8619683346221994, 0.0004540107952033793, 0.8630449930628203, 0.0004542793873242631, 0.8641088571494663, 0.0004545449726219747, - 0.8651609138678200, + 0.86516091386782, 0.0004548078227201481, 0.8662022090955665, 0.0004550682266323894, 0.8672338565183648, 0.0004553264932646083, 0.8682570473740338, - 0.0004555829541435220, + 0.000455582954143522, 0.8692730610930815, 0.0004558379663881761, 0.8702832769045586, - 0.0004560919159410250, + 0.000456091915941025, 0.8712891864758329, 0.0004563452210743556, 0.8722924076528336, @@ -4703,25 +4910,25 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0004592539686711794, 0.8837904281482389, 0.0004595500300013319, - 0.8849575975954920, + 0.884957597595492, 0.0004598559602799827, 0.8861630529202465, 0.0004601731562602071, - 0.8874122776038270, + 0.887412277603827, 0.0004605031276134677, 0.8887112090056589, 0.0004608475010329713, 0.8900662573321374, 0.0004612080230785231, - 0.8914843202051330, + 0.891484320205133, 0.0004615865613575363, 0.8929727913000981, 0.0004619851035704269, 0.8945395612571059, 0.0004624057538807515, 0.8961930087896581, - 0.0004628507260045860, - 0.8979419796374420, + 0.000462850726004586, + 0.897941979637442, 0.0004633223323547168, 0.8997957507473553, 0.0004638229685297288, @@ -4735,13 +4942,14 @@ function ROCK4ConstantCache(T, T2, zprev) 0.0004661652880954744, 0.9109829176962647, 0.0004668480955879464, - 0.9136748776971255 + 0.9136748776971255, ] _fpa = map(x -> SVector{6, T}(x), fpa) _fpb = map(x -> SVector{4, T}(x), fpb) _fpbe = map(x -> SVector{5, T}(x), fpbe) - ROCK4ConstantCache{eltype(_fpa), eltype(_fpb), eltype(_fpbe), T2, typeof(zprev)}(ms, + return ROCK4ConstantCache{eltype(_fpa), eltype(_fpb), eltype(_fpbe), T2, typeof(zprev)}( + ms, _fpa, _fpb, _fpbe, @@ -4749,5 +4957,6 @@ function ROCK4ConstantCache(T, T2, zprev) zprev, 1, 1, 1, 0, - 152) + 152 + ) end diff --git a/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_serk2.jl b/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_serk2.jl index 0a5c22c8b1..01dd6e423b 100644 --- a/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_serk2.jl +++ b/lib/OrdinaryDiffEqStabilizedRK/src/rkc_tableaus_serk2.jl @@ -28,7 +28,7 @@ function SERK2ConstantCache(zprev) 76.95241936604297450231, 265.69350414417590400262, -286.18278976196086205164, - -871.05995882277682085260, + -871.0599588227768208526, -45.11225312859123448561, -121.28287419671590896542, 137.67098469196315591034, @@ -37,7 +37,7 @@ function SERK2ConstantCache(zprev) -0.66637137556846204323, 0.32841341615080460459, 1.13286106389630703006, - -5.78406832376563251330, + -5.7840683237656325133, 5.39220351112540630112, 27.19910702656031276092, 26.81822323262986529357, @@ -46,9 +46,9 @@ function SERK2ConstantCache(zprev) 83.11884806933920799565, -82.60257882008195906565, -216.70911268002635097218, - -159.84229677365436828040, + -159.8422967736543682804, 80.68055068116780148557, - 26.82613763535254847170, + 26.8261376353525484717, -321.91265424845295228806, 337.59508526194247224339, 608.80276919553148218256, @@ -71,11 +71,11 @@ function SERK2ConstantCache(zprev) 0.87060525762980689457, -2.70169713195842708942, -2.06966650654738471005, - 5.35675430280412978590, + 5.3567543028041297859, 20.33247106765178457977, - 36.13250646805210664070, - -18.72136240923262917590, - 7.05834552818738369950, + 36.1325064680521066407, + -18.7213624092326291759, + 7.0583455281873836995, -11.41711283297713031004, 35.21949128031247511217, 39.07800060513270778983, @@ -115,7 +115,7 @@ function SERK2ConstantCache(zprev) -4.11653976287417489033, -0.72612663327699966676, 6.06736711554703500582, - 23.77854592119173560150, + 23.7785459211917356015, 23.19875248127983979884, -1.17247608520798385356, -6.96343073995197947568, @@ -123,7 +123,7 @@ function SERK2ConstantCache(zprev) 34.02475921928724744703, -44.64064080736773121316, 52.83203805767665528492, - 19.53569468626604432870, + 19.5356946862660443287, -101.14886356390445598663, -177.52579447039758520077, -145.01001529188047811658, @@ -159,12 +159,12 @@ function SERK2ConstantCache(zprev) -0.47915337514860878443, -0.46942193202031889943, -0.27641291121172062439, - 0.49679229986838996380, + 0.4967922998683899638, -0.41740583828251531795, 0.23467075562112899023, -0.74942506179570167468, -0.33407066855369210723, - -0.11131355930744686600, + -0.111313559307446866, -1.53073730812523667311, -1.65151679038455911908, 7.48452803719470427524, @@ -173,7 +173,7 @@ function SERK2ConstantCache(zprev) 8.14589560726002659408, -17.89564518402425008503, 15.32006286484124402136, - -8.75939608117697154910, + -8.7593960811769715491, 7.44986626032478138626, 17.38974661750732764176, -12.20041243226810401268, @@ -191,11 +191,11 @@ function SERK2ConstantCache(zprev) 87.96466151458372451089, -185.71502811994952253372, -45.45624062829280376263, - 469.38472943866122477630, + 469.3847294386612247763, 386.56087238807327821632, 273.35882737774568340683, 68.70662449193447685047, - -188.15452060977756332250, + -188.1545206097775633225, 161.59156583741673784971, -94.49524782495392116743, 20.98827698077106163055, @@ -203,11 +203,11 @@ function SERK2ConstantCache(zprev) -170.53738731544871143342, 313.37342321366094211044, 43.34322325705441159016, - -702.55797925772344569850, + -702.5579792577234456985, -424.25507479689161982606, -158.03992887619330076632, -36.58427458037816393244, - 106.80806942525390468290, + 106.8080694252539046829, -91.23328908032419803931, 53.84905625910185023031, -7.57811288168275432042, @@ -221,7 +221,7 @@ function SERK2ConstantCache(zprev) -0.73625906157905640637, -0.22522285300640032535, 0.29506092498527269896, - -0.08763148848873193730, + -0.0876314884887319373, -0.07434942566555027832, 0.14158090936471934285, -0.09698870257903949299, @@ -243,38 +243,38 @@ function SERK2ConstantCache(zprev) 4.26141459231835728616, 14.19196633844950916625, -15.03620702799788233506, - 22.85583410477462251720, + 22.8558341047746225172, 12.15937040333234975265, -29.36518755073138819967, 76.68311750034494878037, -49.23921432591014024638, - -96.75280701522144966020, + -96.7528070152214496602, -87.87290439570645617096, -179.09020590131115113763, -45.25863121627668306246, 61.32375894850506625744, -9.31441630149719657084, -27.36956289687151766543, - 41.87974027318112035800, + 41.879740273181120358, -27.16194008638997559046, -61.91674730341299692782, - 81.56836673815705296420, + 81.5683667381570529642, -121.02191486823691946029, -18.12606228380447603854, 91.28634154872743522446, - -292.15778541454091055130, + -292.1577854145409105513, 185.40352072306532704715, 418.18882168743886040829, 246.36829114742891988499, 335.91776561639665032999, 79.05379681735334429504, - -110.03327642051530688150, + -110.0332764205153068815, 11.24837455105589256732, 55.42083476029976196742, -82.14211452346562225557, 52.45918009793477665426, - 90.93254198819583677960, - -135.58842022023921458640, + 90.9325419881958367796, + -135.5884202202392145864, 202.96796552610160802033, -2.45253564348795283223, -109.53904215392363141746, @@ -316,15 +316,15 @@ function SERK2ConstantCache(zprev) 2.78340824853673307615, -2.15127211255913586285, -2.04829583063548481547, - 3.52828908965631082850, + 3.5282890896563108285, 6.04196026585645107332, 8.08824807206029738893, 23.80091303350159037677, 18.65257721930665013588, -11.21275916354142232478, - -2.98010440282564204040, + -2.9801044028256420404, 9.42428089370491051113, - -10.06058047559873891430, + -10.0605804755987389143, 6.86141285031143333129, -3.80536372319000548714, 1.39099127905236019664, @@ -368,7 +368,7 @@ function SERK2ConstantCache(zprev) 51.81032346482079731231, -25.86836506729071061272, 6.49057626440389068279, - -62.90279719405006630950, + -62.9027971940500663095, 160.87022643491616236133, -0.80975059473243837793, -58.71971761804874034851, @@ -388,11 +388,11 @@ function SERK2ConstantCache(zprev) -26.14562341637445896936, 12.58401923150315049327, -2.42868229029039239819, - 28.42358753229295231790, + 28.4235875322929523179, -74.28960169100335519943, 0.09943625629084641704, 27.11117121539740182357, - -118.75285671178046698060, + -118.7528567117804669806, 95.41943291951113792493, -53.31134390698743175108, -155.08372746405038355988, @@ -414,37 +414,37 @@ function SERK2ConstantCache(zprev) 0.83715194195655739939, -0.56168669333972853774, 0.28174503055587835076, - -1.34401382361210952610, + -1.3440138236121095261, 1.60319860339591269138, -1.10063246999957597971, -0.59351974098291682136, 0.96786704836877379687, -1.70880814550302484456, - 0.57099704423611219450, + 0.5709970442361121945, 0.06222209692051305918, -1.44874912684446477407, 0.42980988275748055472, 1.31957988190222086367, - -4.22478102542349898130, + -4.2247810254234989813, 1.89266654883271590037, 5.53736249924134682487, 3.57735265285767134458, 0.76854021150794249451, - 19.45873676716082201210, + 19.4587367671608220121, 20.33929057730105682822, 8.77630431345455619407, -13.88322049708971306359, 1.46597338883456451697, 9.36782847497834580963, -12.89851438395901972456, - 9.21857943147477598700, + 9.218579431474775987, -3.46922367132117948074, -1.91434732875155089182, 4.62750113995828638025, -5.29260894562594064183, 4.12382604397188057277, -2.25334112977422629243, - 13.78097005688474574470, + 13.7809700568847457447, -13.25070308309062738772, 8.39313773505435278821, 14.36644480662678091676, @@ -460,29 +460,29 @@ function SERK2ConstantCache(zprev) -91.48474247220707411543, -55.82713054479270908814, -15.14043391349819955849, - -107.63550197761858839840, + -107.6355019776185883984, -129.63927996530060227087, -45.78566011750933029134, 78.66599362343349355342, -5.45170680891075765118, - -57.31248677626727072720, - 77.34141705967337543370, + -57.3124867762672707272, + 77.3414170596733754337, -53.62367548418851015413, 18.57147865899569794124, 14.45786008369322850342, -30.54775700177061281693, - 34.36563825787920478660, + 34.3656382578792047866, -26.56921544535988033431, 14.54017583430681170853, -49.89482389907371384652, 38.85980846582449999005, -19.12855797086255549289, - -69.27146093466005538630, + -69.2714609346600553863, 72.76251202202475099057, -98.04939339326551817067, 6.47285681387482902949, 49.01606483668490454875, - -145.14467062674887642970, + -145.1446706267488764297, 77.31794993399755355767, 46.39912716093589040156, -248.06336975773365338682, @@ -492,8 +492,8 @@ function SERK2ConstantCache(zprev) 55.05055649837591857931, 193.04524156919106303576, 247.12567147936729838875, - 81.10153176729728841110, - -145.92374757471381485630, + 81.1015317672972884111, + -145.9237475747138148563, 10.62002871738718035033, 103.37573500504383616772, -139.73111449043844345397, @@ -503,12 +503,12 @@ function SERK2ConstantCache(zprev) 63.49481926702648593164, -69.85250687105082079142, 53.47488167461045094342, - -29.26414827072310487210, + -29.2641482707231048721, 66.50470797387342258844, -38.81381144797794746637, - 7.48836698835098157900, + 7.488366988350981579, 119.32906565273184185116, - -119.38847069287258761960, + -119.3884706928725876196, 148.23141382111333541616, -4.23073862308830417334, -86.19922685992074207206, @@ -528,7 +528,7 @@ function SERK2ConstantCache(zprev) -56.49294287111950296776, 76.99262631799680889344, -49.52819945476980478816, - 12.22413213343171278780, + 12.2241321334317127878, 23.63347953499739162453, -39.61458545091856109366, 42.84367571789899642454, @@ -540,17 +540,17 @@ function SERK2ConstantCache(zprev) -65.94630921159898662154, 64.53189884763320094407, -75.09644746164133266575, - 1.76824410276191379410, + 1.7682441027619137941, 45.91551663991392473463, -119.37065682045019343605, 69.07009222262571768169, 27.43302650211154514182, - -181.91991385504221057090, + -181.9199138550422105709, 72.37694242272357314505, 300.31714143004347761234, 175.27796048410871776468, 31.86128988648172466469, - -0.01646950595548564780, + -0.0164695059554856478, -0.23417458644218536179, -0.45940329309245891976, -0.52637184552590587927, @@ -562,8 +562,8 @@ function SERK2ConstantCache(zprev) -0.21883663732132788149, 0.08037059113106720387, 0.04665740890955685782, - -0.07781408265423216120, - 0.02171026462815809840, + -0.0778140826542321612, + 0.0217102646281580984, 0.09391182331695682728, -0.20619666717160767266, 0.28114300666778652138, @@ -573,12 +573,12 @@ function SERK2ConstantCache(zprev) 0.16855590862481373282, -0.42370226875454580773, -0.50624478714513576616, - 0.66060571956145375250, + 0.6606057195614537525, -1.33645026887191376019, 0.79594269674411688431, -0.63045267631538615127, -0.45064972919940560203, - 0.44294196914961636580, + 0.4429419691496163658, -0.53607079616840869196, -0.82930755243549625355, 1.47004594488597528645, @@ -588,7 +588,7 @@ function SERK2ConstantCache(zprev) -3.89100636724489712392, -0.22636313831098325844, 3.67694990279328948191, - 5.52882336053922074370, + 5.5288233605392207437, 1.47341303024965064594, 2.00696989544243242776, 7.41578503888090345697, @@ -603,9 +603,9 @@ function SERK2ConstantCache(zprev) 0.06217476766309016495, -5.40175384007282044507, 6.71878971979610373211, - -4.48439905141189054660, - -0.33228378384036133530, - 5.10596578231295694650, + -4.4843990514118905466, + -0.3322837838403613353, + 5.1059657823129569465, -8.56396626934948201892, 9.45398753923881507433, -7.98497948938993484802, @@ -620,7 +620,7 @@ function SERK2ConstantCache(zprev) 11.80027895944733273836, -11.90466513717240282233, 12.38000034688521644455, - 10.90911152445783294240, + 10.9091115244578329424, -23.36349137855725288659, 31.88718913190107429045, 0.62139325051621263629, @@ -639,7 +639,7 @@ function SERK2ConstantCache(zprev) -38.66306598999774024605, -16.00164403369468857363, 47.37531075403592950579, - -31.18078971269806842770, + -31.1807897126980684277, -4.94870270577876780749, 38.67328114444782727332, -47.39998687690110301673, @@ -654,7 +654,7 @@ function SERK2ConstantCache(zprev) -16.67914004396700988764, -47.21892368791257865723, 54.67092702414046812009, - -86.71093139342740130360, + -86.7109313934274013036, 38.82264990922794822836, -14.00685576297175138905, -64.04753972668584083294, @@ -684,12 +684,12 @@ function SERK2ConstantCache(zprev) -78.39468963622984176709, 95.72097805214396259998, -73.62186458677398093187, - 19.57325541093677401250, + 19.5732554109367740125, 34.26358574188812866623, -75.93216428971790321611, 89.30002822639202975097, -77.96179784248570854288, - 44.31531691875997580610, + 44.3153169187599758061, -17.75716710653787799856, 14.00791196084666623278, 81.62792567123551634722, @@ -700,7 +700,7 @@ function SERK2ConstantCache(zprev) 114.70409353648659589453, -119.52785528314154817053, 113.96836528009471578571, - 45.40714716131624584250, + 45.4071471613162458425, -143.78931613300864000848, 214.50325126290670141316, -24.54775509598891147789, @@ -728,7 +728,7 @@ function SERK2ConstantCache(zprev) -16.09166769013786790765, 40.38831621378495384533, -48.46608154123989464779, - 42.80321616965722597570, + 42.8032161696572259757, -24.38441265682574865536, 7.74618213060392157843, -1.96916980100553451472, @@ -758,7 +758,7 @@ function SERK2ConstantCache(zprev) -520.50199859297822513327, 493.06432213649759432883, -461.03594576348791633791, - 426.10815939053838974360, + 426.1081593905383897436, -389.34610364590594144829, 351.51917174401091870095, -313.39102773655645250983, @@ -766,17 +766,17 @@ function SERK2ConstantCache(zprev) -239.77363779366936569204, 205.85849800570079537465, -174.58599027007176118786, - 146.23272366540851407990, + 146.2327236654085140799, -120.87931547984838687171, 98.50377370470964422111, -78.98104439216923822187, 62.13652187341686783384, -47.72289750730514867882, - 35.44795792499807873810, + 35.4479579249980787381, -24.95515490466360830624, - 15.84766894545143500750, + 15.8476689454514350075, -7.68400168702261421316, - 11.99637516714722806910, + 11.9963751671472280691, -17.69945868342960437758, 12.45595555886025884718, -9.04776059922533093527, @@ -784,21 +784,21 @@ function SERK2ConstantCache(zprev) -3.85529834113929759098, 1.76336025524555006783, -0.89068359876585911916, - 0.09169349164027747190, + 0.0916934916402774719, -0.60865761007772944957, 0.93616150986284851765, -1.81842553430586106877, 1.42058857849817288255, -0.69844987201769359597, -1.24566836539379477422, - 2.10850845292644262230, + 2.1085084529264426223, -1.99683037918531325339, -0.39318660951380746127, 1.88868505945889397779, -0.98022889302016513735, -3.12128651447930449692, 2.40258048620016406716, - 5.21406275200390734170, + 5.2140627520039073417, 3.30027770081220195308, 0.92025270257716984545, 2.03435954609290714501, @@ -811,7 +811,7 @@ function SERK2ConstantCache(zprev) 13.61187021615556602683, -7.36947201684253094811, -1.14105970027935188504, - 3.50383922845643480670, + 3.5038392284564348067, -0.69202064529276607896, -3.61042638521966674503, 4.79868788601131601723, @@ -830,8 +830,8 @@ function SERK2ConstantCache(zprev) 8.05454649467160521681, -6.19411623546401646223, 11.13441819282567735172, - -2.47049075354166536300, - -0.17391593565235385910, + -2.470490753541665363, + -0.1739159356523538591, 13.54213887408658401057, -14.27715734500464428436, 17.78812425321446966109, @@ -871,9 +871,9 @@ function SERK2ConstantCache(zprev) 49.13449914997554657248, -42.34437612379303317311, 22.40957296408085497319, - 4.48076678131902195190, + 4.4807667813190219519, -26.66688283304824125253, - 38.66544859775578402150, + 38.6654485977557840215, -36.19623363746183031253, 21.77016329146908191206, -3.26771533306053507673, @@ -888,14 +888,14 @@ function SERK2ConstantCache(zprev) 21.63014561341875818812, 22.64058090383863941497, -99.08235560401402608477, - 89.72078284821866134280, + 89.7207828482186613428, -54.04141712802027086582, -64.86615708002936742105, 116.53510731152302071223, -104.87129201022561630907, -54.94348046325833223591, 153.20747249721074467743, - -87.02439345352925670340, + -87.0243934535292567034, -193.44717110810591975678, 150.59818763065706548332, 357.29933551266549329739, @@ -904,9 +904,9 @@ function SERK2ConstantCache(zprev) 26.88708442107847318425, 18.68476453389004277028, 175.00644989620477076642, - 224.76844926999746121510, + 224.7684492699974612151, 112.81319983002219942136, - -119.60398466214262214180, + -119.6039846621426221418, -70.36585794781242952922, 135.06359832471372328655, -66.67956589567910441474, @@ -918,7 +918,7 @@ function SERK2ConstantCache(zprev) -34.41204569337484997504, -16.95108610620295053195, 61.63396459425273832267, - -84.77717136075435178100, + -84.777171360754351781, 71.12512459980708001694, -33.95207083658407754001, -16.10320678192800514239, @@ -950,7 +950,7 @@ function SERK2ConstantCache(zprev) -230.98399266157576903424, -542.57428147956920838624, -334.41147293722036692998, - -95.57944404229685630980, + -95.5794440422968563098, -20.80314428518122582545, -11.48007557487890650805, -99.45913530520893175435, @@ -961,24 +961,24 @@ function SERK2ConstantCache(zprev) -73.97028738574550743579, 35.18193967713015268828, 19.14350966385481811471, - -31.24337219345173011220, + -31.2433721934517301122, 11.26167684401785784587, 20.50027594670260810972, -31.03533399658952873779, 20.38267912327755126967, - 8.38055290684768117160, + 8.3805529068476811716, -33.01373855522565747833, 45.88276800444496217324, - -37.58204107623698320140, + -37.5820410762369832014, 16.35542952840734187703, 12.26655723814102572078, -34.95785722075888912741, - 46.67547811637160037890, + 46.6754781163716003789, -42.35634730729276498096, 25.20070471583354176914, -3.05557751834216073661, -32.68200404871337383383, - 39.17203469108222435580, + 39.1720346910822243558, -56.67152186777419586861, 29.33664264266302268425, -12.40728425687574265623, @@ -987,11 +987,11 @@ function SERK2ConstantCache(zprev) -64.99048699911270432494, 23.18834908788356941045, 11.39764521259193408298, - -69.88133776318845491460, + -69.8813377631884549146, 66.01441542283289720672, -40.47425030698735781698, -47.08386844823964878515, - 85.83103776576542998100, + 85.831037765765429981, -75.86892865654905904194, -44.70208057149678637643, 118.85946623263288302041, @@ -1001,8 +1001,8 @@ function SERK2ConstantCache(zprev) 269.80962036825997074629, 168.49451658549256194419, 47.10829220619891799515, - 5.11169642004104218813 + 5.11169642004104218813, ] - SERK2ConstantCache{eltype(Bᵢ), typeof(zprev)}(ms, zprev, Bᵢ, 1, 0, 0) + return SERK2ConstantCache{eltype(Bᵢ), typeof(zprev)}(ms, zprev, Bᵢ, 1, 0, 0) end diff --git a/lib/OrdinaryDiffEqStabilizedRK/src/rkc_utils.jl b/lib/OrdinaryDiffEqStabilizedRK/src/rkc_utils.jl index fb6d27f52b..494882151e 100644 --- a/lib/OrdinaryDiffEqStabilizedRK/src/rkc_utils.jl +++ b/lib/OrdinaryDiffEqStabilizedRK/src/rkc_utils.jl @@ -55,8 +55,8 @@ function maxeig!(integrator, cache::OrdinaryDiffEqConstantCache) # Convergence if integrator.alg isa RKCAlgs # To match the constants given in the paper if iter >= 2 && - abs(eig_prev - integrator.eigen_est) < - max(integrator.eigen_est, 1.0 / integrator.opts.dtmax) * 0.01 + abs(eig_prev - integrator.eigen_est) < + max(integrator.eigen_est, 1.0 / integrator.opts.dtmax) * 0.01 integrator.eigen_est *= 1.2 # Store the eigenvector cache.zprev = z - uprev @@ -64,7 +64,7 @@ function maxeig!(integrator, cache::OrdinaryDiffEqConstantCache) end else if iter >= 2 && - abs(eig_prev - integrator.eigen_est) < integrator.eigen_est * 0.05 + abs(eig_prev - integrator.eigen_est) < integrator.eigen_est * 0.05 # Store the eigenvector cache.zprev = z - uprev return true @@ -100,14 +100,14 @@ function maxeig!(integrator, cache::OrdinaryDiffEqMutableCache) # Initial guess for eigenvector `z` if isfirst if integrator.alg isa RKCAlgs - @.. broadcast=false z=fsalfirst + @.. broadcast = false z = fsalfirst else - @.. broadcast=false fz=fsalfirst + @.. broadcast = false fz = fsalfirst f(z, fz, p, t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end else - @.. broadcast=false z=ccache.zprev + @.. broadcast = false z = ccache.zprev end # Perturbation u_norm = integrator.opts.internalnorm(uprev, t) @@ -120,49 +120,49 @@ function maxeig!(integrator, cache::OrdinaryDiffEqMutableCache) if (!is_u_zero && !is_z_zero) dz_u = u_norm * sqrt_pert quot = dz_u / z_norm - @.. broadcast=false z=uprev + quot * z + @.. broadcast = false z = uprev + quot * z elseif !is_u_zero dz_u = u_norm * sqrt_pert - @.. broadcast=false z=uprev + uprev * dz_u + @.. broadcast = false z = uprev + uprev * dz_u elseif !is_z_zero dz_u = pert quot = dz_u / z_norm - @.. broadcast=false z*=quot + @.. broadcast = false z *= quot else dz_u = pert - @.. broadcast=false z=dz_u * one(eltype(z)) + @.. broadcast = false z = dz_u * one(eltype(z)) end # endif # Start power iteration integrator.eigen_est = 0 for iter in 1:maxiter f(fz, z, p, t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - @.. broadcast=false atmp=fz - fsalfirst + @.. broadcast = false atmp = fz - fsalfirst Δ = integrator.opts.internalnorm(atmp, t) eig_prev = integrator.eigen_est integrator.eigen_est = Δ / dz_u * safe # Convergence if integrator.alg isa RKCAlgs # To match the constants given in the paper if iter >= 2 && - abs(eig_prev - integrator.eigen_est) < - max(integrator.eigen_est, 1.0 / integrator.opts.dtmax) * 0.01 + abs(eig_prev - integrator.eigen_est) < + max(integrator.eigen_est, 1.0 / integrator.opts.dtmax) * 0.01 integrator.eigen_est *= 1.2 # Store the eigenvector - @.. broadcast=false ccache.zprev=z - uprev + @.. broadcast = false ccache.zprev = z - uprev return true end else if iter >= 2 && - abs(eig_prev - integrator.eigen_est) < integrator.eigen_est * 0.05 + abs(eig_prev - integrator.eigen_est) < integrator.eigen_est * 0.05 # Store the eigenvector - @.. broadcast=false ccache.zprev=z - uprev + @.. broadcast = false ccache.zprev = z - uprev return true end end # Next `z` if Δ != zero(Δ) quot = dz_u / Δ - @.. broadcast=false z=uprev + quot * atmp + @.. broadcast = false z = uprev + quot * atmp else # An arbitrary change on `z` nind = length(uprev) diff --git a/lib/OrdinaryDiffEqStabilizedRK/test/jet.jl b/lib/OrdinaryDiffEqStabilizedRK/test/jet.jl index d51bd793ab..4a098dd1aa 100644 --- a/lib/OrdinaryDiffEqStabilizedRK/test/jet.jl +++ b/lib/OrdinaryDiffEqStabilizedRK/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqStabilizedRK, target_defined_modules = true, mode = :typo) + OrdinaryDiffEqStabilizedRK, target_defined_modules = true, mode = :typo + ) end diff --git a/lib/OrdinaryDiffEqStabilizedRK/test/qa.jl b/lib/OrdinaryDiffEqStabilizedRK/test/qa.jl index 83b8538e6f..2dd5f2ac23 100644 --- a/lib/OrdinaryDiffEqStabilizedRK/test/qa.jl +++ b/lib/OrdinaryDiffEqStabilizedRK/test/qa.jl @@ -5,4 +5,4 @@ using Aqua Aqua.test_all( OrdinaryDiffEqStabilizedRK ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqStabilizedRK/test/rkc_tests.jl b/lib/OrdinaryDiffEqStabilizedRK/test/rkc_tests.jl index 0174cd540f..8d30503246 100644 --- a/lib/OrdinaryDiffEqStabilizedRK/test/rkc_tests.jl +++ b/lib/OrdinaryDiffEqStabilizedRK/test/rkc_tests.jl @@ -18,9 +18,9 @@ probArr[2] = prob_ode_2Dlinear eigm = maximum(abs.(eigvals(A))) maxeig!(integrator, integrator.cache) eigest = integrator.eigen_est - @test eigest≈eigm rtol=0.1eigm + @test eigest ≈ eigm rtol = 0.1eigm - A = A - 1e2I + A = A - 1.0e2I test_stiff(u, p, t) = A * u test_stiff(du, u, p, t) = mul!(du, A, u) prob = ODEProblem{iip}(test_stiff, ones(20), (0, 1.0)) @@ -35,41 +35,41 @@ end println("ROCK2") #default ROCK2 sim = test_convergence(dts, prob, ROCK2()) - @test sim.𝒪est[:l∞]≈2 atol=testTol + @test sim.𝒪est[:l∞] ≈ 2 atol = testTol #testing ROCK2 for different minimum stages to insure that the constants are right sim = test_convergence(dts, prob, ROCK2(min_stages = 5)) - @test sim.𝒪est[:l∞]≈2 atol=testTol + @test sim.𝒪est[:l∞] ≈ 2 atol = testTol sim = test_convergence(dts, prob, ROCK2(min_stages = 10)) - @test sim.𝒪est[:l∞]≈2 atol=testTol + @test sim.𝒪est[:l∞] ≈ 2 atol = testTol sim = test_convergence(dts, prob, ROCK2(min_stages = 21)) - @test sim.𝒪est[:l∞]≈2 atol=testTol + @test sim.𝒪est[:l∞] ≈ 2 atol = testTol #default ROCK4 println("ROCK4") sim = test_convergence(dts, prob, ROCK4()) - @test sim.𝒪est[:l∞]≈4 atol=testTol + @test sim.𝒪est[:l∞] ≈ 4 atol = testTol #testing ROCK4 for different minimum stages to insure that the constants are right sim = test_convergence(dts, prob, ROCK4(min_stages = 6)) - @test sim.𝒪est[:l∞]≈4 atol=testTol + @test sim.𝒪est[:l∞] ≈ 4 atol = testTol sim = test_convergence(dts, prob, ROCK4(min_stages = 10)) - @test sim.𝒪est[:l∞]≈4 atol=testTol + @test sim.𝒪est[:l∞] ≈ 4 atol = testTol sim = test_convergence(dts, prob, ROCK4(min_stages = 21)) - @test sim.𝒪est[:l∞]≈4 atol=testTol + @test sim.𝒪est[:l∞] ≈ 4 atol = testTol println("ROCKC") sim = test_convergence(dts, prob, RKC()) - @test sim.𝒪est[:l∞]≈2 atol=testTol + @test sim.𝒪est[:l∞] ≈ 2 atol = testTol println("SERK2") sim = test_convergence(dts, prob, SERK2()) - @test sim.𝒪est[:l∞]≈2 atol=testTol + @test sim.𝒪est[:l∞] ≈ 2 atol = testTol println("ESERK4") sim = test_convergence(dts, prob, ESERK4()) - @test sim.𝒪est[:l∞]≈4 atol=testTol + @test sim.𝒪est[:l∞] ≈ 4 atol = testTol end dts = 1 .// 2 .^ (6:-1:2) for prob in probArr println("ESERK5") sim = test_convergence(dts, prob, ESERK5()) - @test sim.𝒪est[:l∞]≈5 atol=testTol + @test sim.𝒪est[:l∞] ≈ 5 atol = testTol end end @@ -89,12 +89,14 @@ end @testset "$prob" for prob in [probop, probip] eigen_est = (integrator) -> integrator.eigen_est = 500 - algs = [ROCK2(), ROCK2(eigen_est = eigen_est), - ROCK4(), ROCK4(eigen_est = eigen_est), - RKC(), RKC(eigen_est = eigen_est), - SERK2(), SERK2(eigen_est = eigen_est), - ESERK4(), ESERK4(eigen_est = eigen_est), - ESERK5(), ESERK5(eigen_est = eigen_est)] + algs = [ + ROCK2(), ROCK2(eigen_est = eigen_est), + ROCK4(), ROCK4(eigen_est = eigen_est), + RKC(), RKC(eigen_est = eigen_est), + SERK2(), SERK2(eigen_est = eigen_est), + ESERK4(), ESERK4(eigen_est = eigen_est), + ESERK5(), ESERK5(eigen_est = eigen_est), + ] @testset "$alg" for alg in algs x[] = 0 sol = solve(prob, alg) @@ -112,12 +114,14 @@ end end eigen_est = (integrator) -> integrator.eigen_est = 500 - algs = [ROCK2(), ROCK2(eigen_est = eigen_est), - ROCK4(), ROCK4(eigen_est = eigen_est), - RKC(), RKC(eigen_est = eigen_est), - SERK2(), SERK2(eigen_est = eigen_est), - ESERK4(), ESERK4(eigen_est = eigen_est), - ESERK5(), ESERK5(eigen_est = eigen_est)] + algs = [ + ROCK2(), ROCK2(eigen_est = eigen_est), + ROCK4(), ROCK4(eigen_est = eigen_est), + RKC(), RKC(eigen_est = eigen_est), + SERK2(), SERK2(eigen_est = eigen_est), + ESERK4(), ESERK4(eigen_est = eigen_est), + ESERK5(), ESERK5(eigen_est = eigen_est), + ] @testset "$alg" for alg in algs # compile once integrator = init(prob, alg; save_everystep = false) diff --git a/lib/OrdinaryDiffEqStabilizedRK/test/runtests.jl b/lib/OrdinaryDiffEqStabilizedRK/test/runtests.jl index 1b15629103..a946f85f8e 100644 --- a/lib/OrdinaryDiffEqStabilizedRK/test/runtests.jl +++ b/lib/OrdinaryDiffEqStabilizedRK/test/runtests.jl @@ -2,4 +2,4 @@ using SafeTestsets @time @safetestset "RKC Tests" include("rkc_tests.jl") @time @safetestset "JET Tests" include("jet.jl") -@time @safetestset "Aqua" include("qa.jl") \ No newline at end of file +@time @safetestset "Aqua" include("qa.jl") diff --git a/lib/OrdinaryDiffEqSymplecticRK/src/OrdinaryDiffEqSymplecticRK.jl b/lib/OrdinaryDiffEqSymplecticRK/src/OrdinaryDiffEqSymplecticRK.jl index c19da296da..90d1a4fd67 100644 --- a/lib/OrdinaryDiffEqSymplecticRK/src/OrdinaryDiffEqSymplecticRK.jl +++ b/lib/OrdinaryDiffEqSymplecticRK/src/OrdinaryDiffEqSymplecticRK.jl @@ -1,18 +1,18 @@ module OrdinaryDiffEqSymplecticRK import OrdinaryDiffEqCore: alg_order, calculate_residuals!, - initialize!, perform_step!, unwrap_alg, - calculate_residuals, - OrdinaryDiffEqAlgorithm, - OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, - OrdinaryDiffEqAdaptiveAlgorithm, - OrdinaryDiffEqPartitionedAlgorithm, - CompiledFloats, uses_uprev, - alg_cache, _vec, _reshape, @cache, isfsal, full_cache, - constvalue, _unwrap_val, - explicit_rk_docstring, trivial_limiter!, - _ode_interpolant!, _ode_addsteps!, get_fsalfirstlast, - generic_solver_docstring, default_linear_interpolation + initialize!, perform_step!, unwrap_alg, + calculate_residuals, + OrdinaryDiffEqAlgorithm, + OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, + OrdinaryDiffEqAdaptiveAlgorithm, + OrdinaryDiffEqPartitionedAlgorithm, + CompiledFloats, uses_uprev, + alg_cache, _vec, _reshape, @cache, isfsal, full_cache, + constvalue, _unwrap_val, + explicit_rk_docstring, trivial_limiter!, + _ode_interpolant!, _ode_addsteps!, get_fsalfirstlast, + generic_solver_docstring, default_linear_interpolation using FastBroadcast, Polyester, MuladdMacro, RecursiveArrayTools import OrdinaryDiffEqCore @@ -26,7 +26,7 @@ include("symplectic_tableaus.jl") include("symplectic_perform_step.jl") export SymplecticEuler, VelocityVerlet, VerletLeapfrog, LeapfrogDriftKickDrift, - PseudoVerletLeapfrog, McAte2, Ruth3, McAte3, CandyRoz4, McAte4, McAte42, McAte5, - CalvoSanz4, Yoshida6, KahanLi6, McAte8, KahanLi8, SofSpa10 + PseudoVerletLeapfrog, McAte2, Ruth3, McAte3, CandyRoz4, McAte4, McAte42, McAte5, + CalvoSanz4, Yoshida6, KahanLi6, McAte8, KahanLi8, SofSpa10 end diff --git a/lib/OrdinaryDiffEqSymplecticRK/src/algorithms.jl b/lib/OrdinaryDiffEqSymplecticRK/src/algorithms.jl index 178ffc2635..828b33731c 100644 --- a/lib/OrdinaryDiffEqSymplecticRK/src/algorithms.jl +++ b/lib/OrdinaryDiffEqSymplecticRK/src/algorithms.jl @@ -1,7 +1,9 @@ -@doc generic_solver_docstring("First order explicit symplectic integrator.", +@doc generic_solver_docstring( + "First order explicit symplectic integrator.", "SymplecticEuler", "Symplectic Runge-Kutta Methods", - "https://en.wikipedia.org/wiki/Semi-implicit_Euler_method", "", "") + "https://en.wikipedia.org/wiki/Semi-implicit_Euler_method", "", "" +) struct SymplecticEuler <: OrdinaryDiffEqPartitionedAlgorithm end verlet1967 = """ @@ -21,7 +23,8 @@ publisher={APS} "2nd order explicit symplectic integrator. Requires f_2(t,u) = v, i.e. a second order ODE.", "VelocityVerlet", "Symplectic Runge-Kutta Methods", - verlet1967, "", "") + verlet1967, "", "" +) struct VelocityVerlet <: OrdinaryDiffEqPartitionedAlgorithm end monaghan2005 = """ @@ -41,7 +44,8 @@ monaghan2005 = """ "2nd order explicit symplectic integrator. Kick-drift-kick form. Requires only one evaluation of `f1` per step.", "VerletLeapfrog", "Symplectic Runge-Kutta Methods", - monaghan2005, "", "") + monaghan2005, "", "" +) struct VerletLeapfrog <: OrdinaryDiffEqPartitionedAlgorithm end default_linear_interpolation(alg::VerletLeapfrog, prob) = true @@ -51,15 +55,18 @@ default_linear_interpolation(alg::VerletLeapfrog, prob) = true designed to work when `f1` depends on `v`. Requires two evaluation of `f1` per step.", "LeapfrogDriftKickDrift", "Symplectic Runge-Kutta Methods", - monaghan2005, "", "") + monaghan2005, "", "" +) struct LeapfrogDriftKickDrift <: OrdinaryDiffEqPartitionedAlgorithm end default_linear_interpolation(alg::LeapfrogDriftKickDrift, prob) = true -@doc generic_solver_docstring("2nd order explicit symplectic integrator.", +@doc generic_solver_docstring( + "2nd order explicit symplectic integrator.", "PseudoVerletLeapfrog", "Symplectic Runge-Kutta Methods", - verlet1967, "", "") + verlet1967, "", "" +) struct PseudoVerletLeapfrog <: OrdinaryDiffEqPartitionedAlgorithm end mclachlan1992 = """ @@ -79,10 +86,12 @@ publisher={IOP Publishing} "Optimized efficiency 2nd order explicit symplectic integrator.", "McAte2", "Symplectic Runge-Kutta Methods", - mclachlan1992, "", "") + mclachlan1992, "", "" +) struct McAte2 <: OrdinaryDiffEqPartitionedAlgorithm end -@doc generic_solver_docstring("3rd order explicit symplectic integrator.", +@doc generic_solver_docstring( + "3rd order explicit symplectic integrator.", "Ruth3", "Symplectic Runge-Kutta Methods", """@article{ruth1983canonical, @@ -92,17 +101,20 @@ struct McAte2 <: OrdinaryDiffEqPartitionedAlgorithm end volume={30}, number={CERN-LEP-TH-83-14}, pages={2669--2671}, - year={1983}}""", "", "") + year={1983}}""", "", "" +) struct Ruth3 <: OrdinaryDiffEqPartitionedAlgorithm end @doc generic_solver_docstring( "Optimized efficiency 3rd order explicit symplectic integrator.", "McAte3", "Symplectic Runge-Kutta Methods", - mclachlan1992, "", "") + mclachlan1992, "", "" +) struct McAte3 <: OrdinaryDiffEqPartitionedAlgorithm end -@doc generic_solver_docstring("4th order explicit symplectic integrator.", +@doc generic_solver_docstring( + "4th order explicit symplectic integrator.", "CandyRoz4", "Symplectic Runge-Kutta Methods", """@article{candy1991symplectic, @@ -113,14 +125,16 @@ struct McAte3 <: OrdinaryDiffEqPartitionedAlgorithm end umber={1}, ages={230--256}, ear={1991}, - publisher={Elsevier}}""", "", "") + publisher={Elsevier}}""", "", "" +) struct CandyRoz4 <: OrdinaryDiffEqPartitionedAlgorithm end @doc generic_solver_docstring( "4th order explicit symplectic integrator. Requires quadratic kinetic energy.", "McAte4", "Symplectic Runge-Kutta Methods", - mclachlan1992, "", "") + mclachlan1992, "", "" +) struct McAte4 <: OrdinaryDiffEqPartitionedAlgorithm end @doc generic_solver_docstring( @@ -136,23 +150,28 @@ struct McAte4 <: OrdinaryDiffEqPartitionedAlgorithm end pages={385--392}, year={1993}, publisher={World Scientific} - }""", "", "") + }""", "", "" +) struct CalvoSanz4 <: OrdinaryDiffEqPartitionedAlgorithm end -@doc generic_solver_docstring("4th order explicit symplectic integrator. BROKEN", +@doc generic_solver_docstring( + "4th order explicit symplectic integrator. BROKEN", "McAte42", "Symplectic Runge-Kutta Methods", - mclachlan1992, "", "") + mclachlan1992, "", "" +) struct McAte42 <: OrdinaryDiffEqPartitionedAlgorithm end @doc generic_solver_docstring( "Optimized efficiency 5th order explicit symplectic integrator. Requires quadratic kinetic energy.", "McAte5", "Symplectic Runge-Kutta Methods", - mclachlan1992, "", "") + mclachlan1992, "", "" +) struct McAte5 <: OrdinaryDiffEqPartitionedAlgorithm end -@doc generic_solver_docstring("6th order explicit symplectic integrator.", +@doc generic_solver_docstring( + "6th order explicit symplectic integrator.", "Yoshida6", "Symplectic Runge-Kutta Methods", """@article{yoshida1990construction, @@ -163,7 +182,8 @@ struct McAte5 <: OrdinaryDiffEqPartitionedAlgorithm end number={5-7}, pages={262--268}, year={1990}, - publisher={Elsevier}}""", "", "") + publisher={Elsevier}}""", "", "" +) struct Yoshida6 <: OrdinaryDiffEqPartitionedAlgorithm end @doc generic_solver_docstring( @@ -178,10 +198,12 @@ struct Yoshida6 <: OrdinaryDiffEqPartitionedAlgorithm end number={5-7}, pages={262--268}, year={1990}, - publisher={Elsevier}}""", "", "") + publisher={Elsevier}}""", "", "" +) struct KahanLi6 <: OrdinaryDiffEqPartitionedAlgorithm end -@doc generic_solver_docstring("8th order explicit symplectic integrator.", +@doc generic_solver_docstring( + "8th order explicit symplectic integrator.", "McAte8", "Symplectic Runge-Kutta Methods", """@article{mclachlan1995numerical, @@ -193,7 +215,8 @@ struct KahanLi6 <: OrdinaryDiffEqPartitionedAlgorithm end pages={151--168}, year={1995}, publisher={SIAM} - }""", "", "") + }""", "", "" +) struct McAte8 <: OrdinaryDiffEqPartitionedAlgorithm end @doc generic_solver_docstring( @@ -207,10 +230,12 @@ struct McAte8 <: OrdinaryDiffEqPartitionedAlgorithm end volume={66}, number={219}, pages={1089--1099}, - year={1997}}""", "", "") + year={1997}}""", "", "" +) struct KahanLi8 <: OrdinaryDiffEqPartitionedAlgorithm end -@doc generic_solver_docstring("10th order explicit symplectic integrator.", +@doc generic_solver_docstring( + "10th order explicit symplectic integrator.", "SofSpa10", "Symplectic Runge-Kutta Methods", """@article{sofroniou2005derivation, @@ -221,5 +246,6 @@ struct KahanLi8 <: OrdinaryDiffEqPartitionedAlgorithm end number={4-5}, pages={597--613}, year={2005}, - publisher={Taylor \\& Francis}}""", "", "") + publisher={Taylor \\& Francis}}""", "", "" +) struct SofSpa10 <: OrdinaryDiffEqPartitionedAlgorithm end diff --git a/lib/OrdinaryDiffEqSymplecticRK/src/symplectic_caches.jl b/lib/OrdinaryDiffEqSymplecticRK/src/symplectic_caches.jl index e9b0ca838c..426f001df9 100644 --- a/lib/OrdinaryDiffEqSymplecticRK/src/symplectic_caches.jl +++ b/lib/OrdinaryDiffEqSymplecticRK/src/symplectic_caches.jl @@ -9,24 +9,28 @@ abstract type HamiltonConstantCache <: OrdinaryDiffEqConstantCache end fsalfirst::rateType end -function alg_cache(alg::SymplecticEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SymplecticEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SymplecticEulerCache(u, uprev, zero(u), zero(rate_prototype), zero(rate_prototype)) + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SymplecticEulerCache(u, uprev, zero(u), zero(rate_prototype), zero(rate_prototype)) end struct SymplecticEulerConstantCache <: HamiltonConstantCache end -function alg_cache(alg::SymplecticEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SymplecticEuler, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SymplecticEulerConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SymplecticEulerConstantCache() end @cache struct VelocityVerletCache{uType, rateType, uEltypeNoUnits} <: - OrdinaryDiffEqMutableCache + OrdinaryDiffEqMutableCache u::uType uprev::uType tmp::uType @@ -39,26 +43,30 @@ struct VelocityVerletConstantCache{uEltypeNoUnits} <: HamiltonConstantCache half::uEltypeNoUnits end -function alg_cache(alg::VelocityVerlet, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::VelocityVerlet, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(rate_prototype) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) half = uEltypeNoUnits(1 // 2) - VelocityVerletCache(u, uprev, k, tmp, fsalfirst, half) + return VelocityVerletCache(u, uprev, k, tmp, fsalfirst, half) end -function alg_cache(alg::VelocityVerlet, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::VelocityVerlet, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - VelocityVerletConstantCache(uEltypeNoUnits(1 // 2)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return VelocityVerletConstantCache(uEltypeNoUnits(1 // 2)) end @cache struct LeapfrogDriftKickDriftCache{uType, rateType, uEltypeNoUnits} <: - OrdinaryDiffEqMutableCache + OrdinaryDiffEqMutableCache u::uType uprev::uType tmp::uType @@ -71,26 +79,30 @@ struct LeapfrogDriftKickDriftConstantCache{uEltypeNoUnits} <: HamiltonConstantCa half::uEltypeNoUnits end -function alg_cache(alg::LeapfrogDriftKickDrift, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::LeapfrogDriftKickDrift, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(rate_prototype) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) half = uEltypeNoUnits(1 // 2) - LeapfrogDriftKickDriftCache(u, uprev, k, tmp, fsalfirst, half) + return LeapfrogDriftKickDriftCache(u, uprev, k, tmp, fsalfirst, half) end -function alg_cache(alg::LeapfrogDriftKickDrift, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::LeapfrogDriftKickDrift, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - LeapfrogDriftKickDriftConstantCache(uEltypeNoUnits(1 // 2)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return LeapfrogDriftKickDriftConstantCache(uEltypeNoUnits(1 // 2)) end @cache struct VerletLeapfrogCache{uType, rateType, uEltypeNoUnits} <: - OrdinaryDiffEqMutableCache + OrdinaryDiffEqMutableCache u::uType uprev::uType tmp::uType @@ -103,22 +115,26 @@ struct VerletLeapfrogConstantCache{uEltypeNoUnits} <: HamiltonConstantCache half::uEltypeNoUnits end -function alg_cache(alg::VerletLeapfrog, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::VerletLeapfrog, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) half = uEltypeNoUnits(1 // 2) - VerletLeapfrogCache(u, uprev, k, tmp, fsalfirst, half) + return VerletLeapfrogCache(u, uprev, k, tmp, fsalfirst, half) end -function alg_cache(alg::VerletLeapfrog, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::VerletLeapfrog, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - VerletLeapfrogConstantCache(uEltypeNoUnits(1 // 2)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return VerletLeapfrogConstantCache(uEltypeNoUnits(1 // 2)) end @cache struct Symplectic2Cache{uType, rateType, tableauType} <: HamiltonMutableCache @@ -130,42 +146,54 @@ end tab::tableauType end -function alg_cache(alg::PseudoVerletLeapfrog, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::PseudoVerletLeapfrog, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) - tab = PseudoVerletLeapfrogConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - Symplectic2Cache(u, uprev, k, tmp, fsalfirst, tab) + tab = PseudoVerletLeapfrogConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return Symplectic2Cache(u, uprev, k, tmp, fsalfirst, tab) end -function alg_cache(alg::PseudoVerletLeapfrog, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::PseudoVerletLeapfrog, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - PseudoVerletLeapfrogConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return PseudoVerletLeapfrogConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) end -function alg_cache(alg::McAte2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::McAte2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) tab = McAte2ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - Symplectic2Cache(u, uprev, k, tmp, fsalfirst, tab) + return Symplectic2Cache(u, uprev, k, tmp, fsalfirst, tab) end -function alg_cache(alg::McAte2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::McAte2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - McAte2ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return McAte2ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct Symplectic3Cache{uType, rateType, tableauType} <: HamiltonMutableCache @@ -177,40 +205,48 @@ end tab::tableauType end -function alg_cache(alg::Ruth3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Ruth3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) tab = Ruth3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - Symplectic3Cache(u, uprev, k, tmp, fsalfirst, tab) + return Symplectic3Cache(u, uprev, k, tmp, fsalfirst, tab) end -function alg_cache(alg::Ruth3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Ruth3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - Ruth3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return Ruth3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -function alg_cache(alg::McAte3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::McAte3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) tab = McAte3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - Symplectic3Cache(u, uprev, k, tmp, fsalfirst, tab) + return Symplectic3Cache(u, uprev, k, tmp, fsalfirst, tab) end -function alg_cache(alg::McAte3, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::McAte3, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - McAte3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return McAte3ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct Symplectic4Cache{uType, rateType, tableauType} <: HamiltonMutableCache @@ -222,40 +258,48 @@ end tab::tableauType end -function alg_cache(alg::McAte4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::McAte4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) tab = McAte4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - Symplectic4Cache(u, uprev, k, tmp, fsalfirst, tab) + return Symplectic4Cache(u, uprev, k, tmp, fsalfirst, tab) end -function alg_cache(alg::McAte4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::McAte4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - McAte4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return McAte4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -function alg_cache(alg::CandyRoz4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CandyRoz4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) tab = CandyRoz4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - Symplectic4Cache(u, uprev, k, tmp, fsalfirst, tab) + return Symplectic4Cache(u, uprev, k, tmp, fsalfirst, tab) end -function alg_cache(alg::CandyRoz4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CandyRoz4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - McAte4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return McAte4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct Symplectic45Cache{uType, rateType, tableauType} <: HamiltonMutableCache @@ -267,41 +311,51 @@ end tab::tableauType end -function alg_cache(alg::CalvoSanz4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CalvoSanz4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) - tab = CalvoSanz4ConstantCache(constvalue(uBottomEltypeNoUnits), - constvalue(tTypeNoUnits)) - Symplectic45Cache(u, uprev, k, tmp, fsalfirst, tab) + tab = CalvoSanz4ConstantCache( + constvalue(uBottomEltypeNoUnits), + constvalue(tTypeNoUnits) + ) + return Symplectic45Cache(u, uprev, k, tmp, fsalfirst, tab) end -function alg_cache(alg::CalvoSanz4, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::CalvoSanz4, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - CalvoSanz4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return CalvoSanz4ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end -function alg_cache(alg::McAte42, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::McAte42, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) tab = McAte42ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - Symplectic45Cache(u, uprev, k, tmp, fsalfirst, tab) + return Symplectic45Cache(u, uprev, k, tmp, fsalfirst, tab) end -function alg_cache(alg::McAte42, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::McAte42, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - McAte42ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return McAte42ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct Symplectic5Cache{uType, rateType, tableauType} <: HamiltonMutableCache @@ -313,22 +367,26 @@ end tab::tableauType end -function alg_cache(alg::McAte5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::McAte5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) tab = McAte5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - Symplectic5Cache(u, uprev, k, tmp, fsalfirst, tab) + return Symplectic5Cache(u, uprev, k, tmp, fsalfirst, tab) end -function alg_cache(alg::McAte5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::McAte5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - McAte5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return McAte5ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct Symplectic6Cache{uType, rateType, tableauType} <: HamiltonMutableCache @@ -340,22 +398,26 @@ end tab::tableauType end -function alg_cache(alg::Yoshida6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Yoshida6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) tab = Yoshida6ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - Symplectic6Cache(u, uprev, k, tmp, fsalfirst, tab) + return Symplectic6Cache(u, uprev, k, tmp, fsalfirst, tab) end -function alg_cache(alg::Yoshida6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Yoshida6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - Yoshida6ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return Yoshida6ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct Symplectic62Cache{uType, rateType, tableauType} <: HamiltonMutableCache @@ -367,22 +429,26 @@ end tab::tableauType end -function alg_cache(alg::KahanLi6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::KahanLi6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) tab = KahanLi6ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - Symplectic62Cache(u, uprev, k, tmp, fsalfirst, tab) + return Symplectic62Cache(u, uprev, k, tmp, fsalfirst, tab) end -function alg_cache(alg::KahanLi6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::KahanLi6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - KahanLi6ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return KahanLi6ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct McAte8Cache{uType, rateType, tableauType} <: HamiltonMutableCache @@ -394,22 +460,26 @@ end tab::tableauType end -function alg_cache(alg::McAte8, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::McAte8, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) tab = McAte8ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - McAte8Cache(u, uprev, k, tmp, fsalfirst, tab) + return McAte8Cache(u, uprev, k, tmp, fsalfirst, tab) end -function alg_cache(alg::McAte8, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::McAte8, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - McAte8ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return McAte8ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct KahanLi8Cache{uType, rateType, tableauType} <: HamiltonMutableCache @@ -421,22 +491,26 @@ end tab::tableauType end -function alg_cache(alg::KahanLi8, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::KahanLi8, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) tab = KahanLi8ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - KahanLi8Cache(u, uprev, k, tmp, fsalfirst, tab) + return KahanLi8Cache(u, uprev, k, tmp, fsalfirst, tab) end -function alg_cache(alg::KahanLi8, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::KahanLi8, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - KahanLi8ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return KahanLi8ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end @cache struct SofSpa10Cache{uType, rateType, tableauType} <: HamiltonMutableCache @@ -448,26 +522,33 @@ end tab::tableauType end -function alg_cache(alg::SofSpa10, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SofSpa10, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tmp = zero(u) k = zero(rate_prototype) fsalfirst = zero(rate_prototype) tab = SofSpa10ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - SofSpa10Cache(u, uprev, k, tmp, fsalfirst, tab) + return SofSpa10Cache(u, uprev, k, tmp, fsalfirst, tab) end -function alg_cache(alg::SofSpa10, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::SofSpa10, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - SofSpa10ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return SofSpa10ConstantCache(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) end function get_fsalfirstlast( - cache::Union{HamiltonMutableCache, VelocityVerletCache, VerletLeapfrogCache, - SymplecticEulerCache, LeapfrogDriftKickDriftCache}, u) - (cache.fsalfirst, cache.k) + cache::Union{ + HamiltonMutableCache, VelocityVerletCache, VerletLeapfrogCache, + SymplecticEulerCache, LeapfrogDriftKickDriftCache, + }, u + ) + return (cache.fsalfirst, cache.k) end diff --git a/lib/OrdinaryDiffEqSymplecticRK/src/symplectic_perform_step.jl b/lib/OrdinaryDiffEqSymplecticRK/src/symplectic_perform_step.jl index 4e1decadd6..1fe2574c20 100644 --- a/lib/OrdinaryDiffEqSymplecticRK/src/symplectic_perform_step.jl +++ b/lib/OrdinaryDiffEqSymplecticRK/src/symplectic_perform_step.jl @@ -14,11 +14,13 @@ function initialize!(integrator, cache::SymplecticEulerConstantCache) integrator.stats.nf2 += 1 OrdinaryDiffEqCore.increment_nf!(integrator.stats, 2) integrator.fsalfirst = ArrayPartition((kdu, kuprev)) - integrator.fsallast = ArrayPartition((zero(kdu), ku)) + return integrator.fsallast = ArrayPartition((zero(kdu), ku)) end -@muladd function perform_step!(integrator, cache::SymplecticEulerConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::SymplecticEulerConstantCache, + repeat_step = false + ) (; t, dt, f, p) = integrator duprev, uprev = integrator.uprev.x kuprev = integrator.fsalfirst.x[2] @@ -51,10 +53,10 @@ function initialize!(integrator, cache::SymplecticEulerCache) kdu, ku = integrator.fsallast.x integrator.f.f1(kdu, duprev, uprev, integrator.p, integrator.t) integrator.f.f2(kuprev, duprev, uprev, integrator.p, integrator.t) - @muladd @.. broadcast=false du=duprev + integrator.dt * kdu + @muladd @.. broadcast = false du = duprev + integrator.dt * kdu integrator.f.f2(ku, du, uprev, integrator.p, integrator.t) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - integrator.stats.nf2 += 2 + return integrator.stats.nf2 += 2 end @muladd function perform_step!(integrator, cache::SymplecticEulerCache, repeat_step = false) @@ -63,13 +65,13 @@ end du, u = integrator.u.x kuprev = integrator.fsalfirst.x[2] kdu, ku = integrator.fsallast.x - @.. broadcast=false u=uprev + dt * kuprev + @.. broadcast = false u = uprev + dt * kuprev # Now actually compute the step # Do it at the end for interpolations! integrator.stats.nf2 += 1 OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) f.f1(kdu, duprev, u, p, t) - @.. broadcast=false du=duprev + dt * kdu + @.. broadcast = false du = duprev + dt * kdu f.f2(ku, du, u, p, t) end @@ -77,24 +79,36 @@ end # f.f2(p, q, pa, t) = p which is the Newton/Lagrange equations # If called with different functions (which are possible in the Hamiltonian case) # an exception is thrown to avoid silently calculate wrong results. -function verify_f2(f::F, p, q, pa, t, ::Any, - ::C) where {F, C <: Union{HamiltonConstantCache, VerletLeapfrogConstantCache, - LeapfrogDriftKickDriftConstantCache}} - f(p, q, pa, t) +function verify_f2( + f::F, p, q, pa, t, ::Any, + ::C + ) where { + F, C <: Union{ + HamiltonConstantCache, VerletLeapfrogConstantCache, + LeapfrogDriftKickDriftConstantCache, + }, + } + return f(p, q, pa, t) end -function verify_f2(f::F, res, p, q, pa, t, ::Any, - ::C) where {F, C <: Union{HamiltonMutableCache, VerletLeapfrogCache, - LeapfrogDriftKickDriftCache}} - f(res, p, q, pa, t) +function verify_f2( + f::F, res, p, q, pa, t, ::Any, + ::C + ) where { + F, C <: Union{ + HamiltonMutableCache, VerletLeapfrogCache, + LeapfrogDriftKickDriftCache, + }, + } + return f(res, p, q, pa, t) end function verify_f2(f::F, p, q, pa, t, integrator, ::C) where {F, C <: VelocityVerletConstantCache} res = f(p, q, pa, t) - res == p ? p : throwex(integrator) + return res == p ? p : throwex(integrator) end function verify_f2(f::F, res, p, q, pa, t, integrator, ::C) where {F, C <: VelocityVerletCache} f(res, p, q, pa, t) - res == p ? res : throwex(integrator) + return res == p ? res : throwex(integrator) end function throwex(integrator) algn = typeof(integrator.alg) @@ -104,12 +118,12 @@ end # provide the mutable uninitialized objects to keep state and derivative in case of mutable caches # no such objects are required for constant caches function alloc_symp_state(integrator) - (integrator.u.x..., integrator.cache.tmp.x...) + return (integrator.u.x..., integrator.cache.tmp.x...) end # load state and derivatives at begin of symplectic iteration steps function load_symp_state(integrator) - (integrator.uprev.x..., integrator.fsallast.x...) + return (integrator.uprev.x..., integrator.fsallast.x...) end # store state and derivatives at the end of symplectic iteration steps @@ -118,7 +132,7 @@ function store_symp_state!(integrator, ::OrdinaryDiffEqConstantCache, du, u, kdu integrator.fsallast = ArrayPartition((kdu, ku)) integrator.k[1] = integrator.fsalfirst integrator.k[2] = integrator.fsallast - nothing + return nothing end function store_symp_state!(integrator, ::OrdinaryDiffEqMutableCache, kdu, ku) @@ -126,12 +140,18 @@ function store_symp_state!(integrator, ::OrdinaryDiffEqMutableCache, kdu, ku) copyto!(integrator.k[1].x[2], integrator.k[2].x[2]) copyto!(integrator.k[2].x[2], ku) copyto!(integrator.k[2].x[1], kdu) - nothing + return nothing end -function initialize!(integrator, - cache::C) where {C <: Union{HamiltonMutableCache, VelocityVerletCache, - VerletLeapfrogCache, LeapfrogDriftKickDriftCache}} +function initialize!( + integrator, + cache::C + ) where { + C <: Union{ + HamiltonMutableCache, VelocityVerletCache, + VerletLeapfrogCache, LeapfrogDriftKickDriftCache, + }, + } integrator.kshortsize = 2 resize!(integrator.k, integrator.kshortsize) integrator.k[1] = integrator.fsalfirst @@ -139,31 +159,43 @@ function initialize!(integrator, duprev, uprev = integrator.uprev.x integrator.f.f1(integrator.k[2].x[1], duprev, uprev, integrator.p, integrator.t) - verify_f2(integrator.f.f2, integrator.k[2].x[2], duprev, uprev, integrator.p, - integrator.t, integrator, cache) + verify_f2( + integrator.f.f2, integrator.k[2].x[2], duprev, uprev, integrator.p, + integrator.t, integrator, cache + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) - integrator.stats.nf2 += 1 + return integrator.stats.nf2 += 1 end -function initialize!(integrator, - cache::C) where {C <: Union{HamiltonConstantCache, VelocityVerletConstantCache, - VerletLeapfrogConstantCache, LeapfrogDriftKickDriftConstantCache}} +function initialize!( + integrator, + cache::C + ) where { + C <: Union{ + HamiltonConstantCache, VelocityVerletConstantCache, + VerletLeapfrogConstantCache, LeapfrogDriftKickDriftConstantCache, + }, + } integrator.kshortsize = 2 integrator.k = typeof(integrator.k)(undef, integrator.kshortsize) duprev, uprev = integrator.uprev.x kdu = integrator.f.f1(duprev, uprev, integrator.p, integrator.t) - ku = verify_f2(integrator.f.f2, duprev, uprev, integrator.p, integrator.t, integrator, - cache) + ku = verify_f2( + integrator.f.f2, duprev, uprev, integrator.p, integrator.t, integrator, + cache + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.stats.nf2 += 1 integrator.fsallast = ArrayPartition((kdu, ku)) integrator.k[2] = integrator.fsallast - integrator.fsalfirst = integrator.fsallast + return integrator.fsalfirst = integrator.fsallast end -@muladd function perform_step!(integrator, cache::VelocityVerletConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::VelocityVerletConstantCache, + repeat_step = false + ) (; t, dt, f, p) = integrator duprev, uprev = load_symp_state(integrator) @@ -189,17 +221,19 @@ end ku = integrator.fsallast.x[1] dtsq = dt^2 half = cache.half - @.. broadcast=false u=uprev + dt * duprev + dtsq * (half * ku) + @.. broadcast = false u = uprev + dt * duprev + dtsq * (half * ku) f.f1(kdu, duprev, u, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) # v(t+Δt) = v(t) + 1/2*(a(t)+a(t+Δt))*Δt - @.. broadcast=false du=duprev + dt * (half * ku + half * kdu) + @.. broadcast = false du = duprev + dt * (half * ku + half * kdu) store_symp_state!(integrator, cache, kdu, du) end -@muladd function perform_step!(integrator, cache::VerletLeapfrogConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::VerletLeapfrogConstantCache, + repeat_step = false + ) (; t, dt, f, p) = integrator duprev, uprev, kduprev, _ = load_symp_state(integrator) @@ -229,23 +263,25 @@ end # kick-drift-kick scheme of the Leapfrog method: # update velocity half = cache.half - @.. broadcast=false du=duprev + dt * half * kduprev + @.. broadcast = false du = duprev + dt * half * kduprev # update position f.f2(ku, du, uprev, p, t + half * dt) - @.. broadcast=false u=uprev + dt * ku + @.. broadcast = false u = uprev + dt * ku # update velocity f.f1(kdu, du, u, p, t + dt) - @.. broadcast=false du=du + dt * half * kdu + @.. broadcast = false du = du + dt * half * kdu OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) integrator.stats.nf2 += 1 store_symp_state!(integrator, cache, kdu, ku) end -@muladd function perform_step!(integrator, cache::LeapfrogDriftKickDriftConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::LeapfrogDriftKickDriftConstantCache, + repeat_step = false + ) (; t, dt, f, p) = integrator duprev, uprev, _, _ = load_symp_state(integrator) @@ -273,8 +309,10 @@ end store_symp_state!(integrator, cache, du, u, kdu, ku) end -@muladd function perform_step!(integrator, cache::LeapfrogDriftKickDriftCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::LeapfrogDriftKickDriftCache, + repeat_step = false + ) (; t, dt, f, p) = integrator duprev, uprev, _, _ = load_symp_state(integrator) du, u, kdu, ku = alloc_symp_state(integrator) @@ -283,28 +321,30 @@ end # update position half step half = cache.half f.f2(ku, duprev, uprev, p, t) - @.. broadcast=false u=uprev + dt * half * ku + @.. broadcast = false u = uprev + dt * half * ku # update velocity half step f.f1(kdu, duprev, uprev, p, t) - @.. broadcast=false du=duprev + dt * half * kdu + @.. broadcast = false du = duprev + dt * half * kdu # update velocity (add to previous full step velocity) # note that this extra step is only necessary if f1 depends on v/du (or t) f.f1(kdu, du, u, p, t + half * dt) - @.. broadcast=false du=duprev + dt * kdu + @.. broadcast = false du = duprev + dt * kdu # update position (add to half step position) f.f2(ku, du, u, p, t + dt) - @.. broadcast=false u=u + dt * half * ku + @.. broadcast = false u = u + dt * half * ku OrdinaryDiffEqCore.increment_nf!(integrator.stats, 2) integrator.stats.nf2 += 2 store_symp_state!(integrator, cache, kdu, ku) end -@muladd function perform_step!(integrator, cache::Symplectic2ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Symplectic2ConstantCache, + repeat_step = false + ) (; t, dt, f, p) = integrator (; a1, a2, b1, b2) = cache duprev, uprev, _, kuprev = load_symp_state(integrator) @@ -336,17 +376,17 @@ end du, u, kdu, ku = alloc_symp_state(integrator) # update position - @.. broadcast=false u=uprev + dt * b1 * kuprev + @.. broadcast = false u = uprev + dt * b1 * kuprev # update velocity f.f1(kdu, duprev, u, p, t) - @.. broadcast=false du=duprev + dt * a1 * kdu + @.. broadcast = false du = duprev + dt * a1 * kdu # update position & velocity tnew = t + a1 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b2 * ku + @.. broadcast = false u = u + dt * b2 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a2 * kdu + @.. broadcast = false du = du + dt * a2 * kdu f.f1(kdu, du, u, p, tnew) f.f2(ku, du, u, p, tnew) @@ -355,8 +395,10 @@ end store_symp_state!(integrator, cache, kdu, ku) end -@muladd function perform_step!(integrator, cache::Symplectic3ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Symplectic3ConstantCache, + repeat_step = false + ) (; t, dt, f, p) = integrator (; a1, a2, a3, b1, b2, b3) = cache duprev, uprev, _, kuprev = load_symp_state(integrator) @@ -396,25 +438,25 @@ end du, u, kdu, ku = alloc_symp_state(integrator) # update position - @.. broadcast=false u=uprev + dt * b1 * kuprev + @.. broadcast = false u = uprev + dt * b1 * kuprev # update velocity f.f1(kdu, duprev, u, p, integrator.t) - @.. broadcast=false du=duprev + dt * a1 * kdu + @.. broadcast = false du = duprev + dt * a1 * kdu # update position & velocity tnew = t + a1 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b2 * ku + @.. broadcast = false u = u + dt * b2 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a2 * kdu + @.. broadcast = false du = du + dt * a2 * kdu # update position & velocity tnew = tnew + a2 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b3 * ku + @.. broadcast = false u = u + dt * b3 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a3 * kdu + @.. broadcast = false du = du + dt * a3 * kdu f.f1(kdu, du, u, p, tnew) f.f2(ku, du, u, p, tnew) @@ -423,8 +465,10 @@ end store_symp_state!(integrator, cache, kdu, ku) end -@muladd function perform_step!(integrator, cache::Symplectic4ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Symplectic4ConstantCache, + repeat_step = false + ) (; t, dt, f, p) = integrator (; a1, a2, a3, a4, b1, b2, b3, b4) = cache duprev, uprev, _, kuprev = load_symp_state(integrator) @@ -472,33 +516,33 @@ end du, u, kdu, ku = alloc_symp_state(integrator) # update position - @.. broadcast=false u=uprev + dt * b1 * kuprev + @.. broadcast = false u = uprev + dt * b1 * kuprev # update velocity f.f1(kdu, duprev, u, p, t) - @.. broadcast=false du=duprev + dt * a1 * kdu + @.. broadcast = false du = duprev + dt * a1 * kdu # update position & velocity tnew = t + a1 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b2 * ku + @.. broadcast = false u = u + dt * b2 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a2 * kdu + @.. broadcast = false du = du + dt * a2 * kdu # update position & velocity tnew = tnew + a2 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b3 * ku + @.. broadcast = false u = u + dt * b3 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a3 * kdu + @.. broadcast = false du = du + dt * a3 * kdu # update position & velocity tnew = tnew + a3 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b4 * ku + @.. broadcast = false u = u + dt * b4 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a4 * kdu + @.. broadcast = false du = du + dt * a4 * kdu f.f1(kdu, du, u, p, tnew) f.f2(ku, du, u, p, tnew) @@ -507,8 +551,10 @@ end store_symp_state!(integrator, cache, kdu, ku) end -@muladd function perform_step!(integrator, cache::Symplectic45ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Symplectic45ConstantCache, + repeat_step = false + ) (; t, dt, f, p) = integrator alg = unwrap_alg(integrator, false) (; a1, a2, a3, a4, a5, b1, b2, b3, b4, b5) = cache @@ -569,42 +615,42 @@ end du, u, kdu, ku = alloc_symp_state(integrator) # update position - @.. broadcast=false u=uprev + dt * b1 * kuprev + @.. broadcast = false u = uprev + dt * b1 * kuprev # update velocity f.f1(kdu, duprev, u, p, t) - @.. broadcast=false du=duprev + dt * a1 * kdu + @.. broadcast = false du = duprev + dt * a1 * kdu # update position & velocity tnew = t + a1 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b2 * ku + @.. broadcast = false u = u + dt * b2 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a2 * kdu + @.. broadcast = false du = du + dt * a2 * kdu # update position & velocity tnew = tnew + a2 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b3 * ku + @.. broadcast = false u = u + dt * b3 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a3 * kdu + @.. broadcast = false du = du + dt * a3 * kdu # update position & velocity tnew = tnew + a3 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b4 * ku + @.. broadcast = false u = u + dt * b4 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a4 * kdu + @.. broadcast = false du = du + dt * a4 * kdu # update position & velocity tnew = tnew + a4 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b5 * ku + @.. broadcast = false u = u + dt * b5 * ku f.f1(kdu, du, u, p, tnew) if alg isa McAte42 - @.. broadcast=false du=du + dt * a5 * kdu + @.. broadcast = false du = du + dt * a5 * kdu f.f1(kdu, du, u, p, tnew) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @@ -615,8 +661,10 @@ end store_symp_state!(integrator, cache, kdu, ku) end -@muladd function perform_step!(integrator, cache::Symplectic5ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Symplectic5ConstantCache, + repeat_step = false + ) (; t, dt, f, p) = integrator (; a1, a2, a3, a4, a5, a6, b1, b2, b3, b4, b5, b6) = cache duprev, uprev, _, kuprev = load_symp_state(integrator) @@ -679,48 +727,48 @@ end du, u, kdu, ku = alloc_symp_state(integrator) # update position - @.. broadcast=false u=uprev + dt * b1 * kuprev + @.. broadcast = false u = uprev + dt * b1 * kuprev # update velocity f.f1(kdu, duprev, u, p, integrator.t) - @.. broadcast=false du=duprev + dt * a1 * kdu + @.. broadcast = false du = duprev + dt * a1 * kdu # update position & velocity tnew = t + a1 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b2 * ku + @.. broadcast = false u = u + dt * b2 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a2 * kdu + @.. broadcast = false du = du + dt * a2 * kdu # update position & velocity tnew = tnew + a2 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b3 * ku + @.. broadcast = false u = u + dt * b3 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a3 * kdu + @.. broadcast = false du = du + dt * a3 * kdu # update position & velocity tnew = tnew + a3 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b4 * ku + @.. broadcast = false u = u + dt * b4 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a4 * kdu + @.. broadcast = false du = du + dt * a4 * kdu # update position & velocity tnew = tnew + a4 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b5 * ku + @.. broadcast = false u = u + dt * b5 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a5 * kdu + @.. broadcast = false du = du + dt * a5 * kdu tnew = tnew + a5 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b6 * ku + @.. broadcast = false u = u + dt * b6 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a6 * kdu + @.. broadcast = false du = du + dt * a6 * kdu f.f1(kdu, du, u, p, tnew) f.f2(ku, du, u, p, tnew) @@ -729,8 +777,10 @@ end store_symp_state!(integrator, cache, kdu, ku) end -@muladd function perform_step!(integrator, cache::Symplectic6ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Symplectic6ConstantCache, + repeat_step = false + ) (; t, dt, f, p) = integrator (; a1, a2, a3, a4, a5, a6, a7, a8, b1, b2, b3, b4, b5, b6, b7, b8) = cache duprev, uprev, _, kuprev = load_symp_state(integrator) @@ -806,59 +856,59 @@ end du, u, kdu, ku = alloc_symp_state(integrator) # update position - @.. broadcast=false u=uprev + dt * b1 * kuprev + @.. broadcast = false u = uprev + dt * b1 * kuprev # update velocity f.f1(kdu, duprev, u, p, integrator.t) - @.. broadcast=false du=duprev + dt * a1 * kdu + @.. broadcast = false du = duprev + dt * a1 * kdu # update position & velocity tnew = t + a1 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b2 * ku + @.. broadcast = false u = u + dt * b2 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a2 * kdu + @.. broadcast = false du = du + dt * a2 * kdu # update position & velocity tnew = tnew + a2 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b3 * ku + @.. broadcast = false u = u + dt * b3 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a3 * kdu + @.. broadcast = false du = du + dt * a3 * kdu # update position & velocity tnew = tnew + a3 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b4 * ku + @.. broadcast = false u = u + dt * b4 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a4 * kdu + @.. broadcast = false du = du + dt * a4 * kdu # update position & velocity tnew = tnew + a4 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b5 * ku + @.. broadcast = false u = u + dt * b5 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a5 * kdu + @.. broadcast = false du = du + dt * a5 * kdu tnew = tnew + a5 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b6 * ku + @.. broadcast = false u = u + dt * b6 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a6 * kdu + @.. broadcast = false du = du + dt * a6 * kdu tnew = tnew + a6 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b7 * ku + @.. broadcast = false u = u + dt * b7 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a7 * kdu + @.. broadcast = false du = du + dt * a7 * kdu tnew = tnew + a7 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b8 * ku + @.. broadcast = false u = u + dt * b8 * ku f.f1(kdu, du, u, p, tnew) # @.. broadcast=false du = du + dt*a8*kdu @@ -869,8 +919,10 @@ end store_symp_state!(integrator, cache, kdu, ku) end -@muladd function perform_step!(integrator, cache::Symplectic62ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::Symplectic62ConstantCache, + repeat_step = false + ) (; t, dt, f, p) = integrator (; a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10) = cache duprev, uprev, _, kuprev = load_symp_state(integrator) @@ -960,73 +1012,73 @@ end du, u, kdu, ku = alloc_symp_state(integrator) # update position - @.. broadcast=false u=uprev + dt * b1 * kuprev + @.. broadcast = false u = uprev + dt * b1 * kuprev # update velocity f.f1(kdu, duprev, u, p, integrator.t) - @.. broadcast=false du=duprev + dt * a1 * kdu + @.. broadcast = false du = duprev + dt * a1 * kdu # update position & velocity tnew = t + a1 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b2 * ku + @.. broadcast = false u = u + dt * b2 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a2 * kdu + @.. broadcast = false du = du + dt * a2 * kdu # update position & velocity tnew = tnew + a2 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b3 * ku + @.. broadcast = false u = u + dt * b3 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a3 * kdu + @.. broadcast = false du = du + dt * a3 * kdu # update position & velocity tnew = tnew + a3 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b4 * ku + @.. broadcast = false u = u + dt * b4 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a4 * kdu + @.. broadcast = false du = du + dt * a4 * kdu # update position & velocity tnew = tnew + a4 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b5 * ku + @.. broadcast = false u = u + dt * b5 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a5 * kdu + @.. broadcast = false du = du + dt * a5 * kdu tnew = tnew + a5 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b6 * ku + @.. broadcast = false u = u + dt * b6 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a6 * kdu + @.. broadcast = false du = du + dt * a6 * kdu tnew = tnew + a6 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b7 * ku + @.. broadcast = false u = u + dt * b7 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a7 * kdu + @.. broadcast = false du = du + dt * a7 * kdu tnew = tnew + a7 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b8 * ku + @.. broadcast = false u = u + dt * b8 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a8 * kdu + @.. broadcast = false du = du + dt * a8 * kdu tnew = tnew + a8 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b9 * ku + @.. broadcast = false u = u + dt * b9 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a9 * kdu + @.. broadcast = false du = du + dt * a9 * kdu tnew = tnew + a9 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b10 * ku + @.. broadcast = false u = u + dt * b10 * ku f.f1(kdu, du, u, p, tnew) # @.. broadcast=false du = du + dt*a10*kdu @@ -1039,8 +1091,10 @@ end @muladd function perform_step!(integrator, cache::McAte8ConstantCache, repeat_step = false) (; t, dt, f, p) = integrator - (; a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, - b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16) = cache + (; + a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, + b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, + ) = cache duprev, uprev, _, kuprev = load_symp_state(integrator) # update position @@ -1165,121 +1219,123 @@ end @muladd function perform_step!(integrator, cache::McAte8Cache, repeat_step = false) (; t, dt, f, p) = integrator - (; a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, - b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16) = cache.tab + (; + a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, + b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, + ) = cache.tab duprev, uprev, _, kuprev = load_symp_state(integrator) du, u, kdu, ku = alloc_symp_state(integrator) # update position - @.. broadcast=false u=uprev + dt * b1 * kuprev + @.. broadcast = false u = uprev + dt * b1 * kuprev # update velocity f.f1(kdu, duprev, u, p, integrator.t) - @.. broadcast=false du=duprev + dt * a1 * kdu + @.. broadcast = false du = duprev + dt * a1 * kdu # update position & velocity tnew = t + a1 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b2 * ku + @.. broadcast = false u = u + dt * b2 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a2 * kdu + @.. broadcast = false du = du + dt * a2 * kdu # update position & velocity tnew = tnew + a2 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b3 * ku + @.. broadcast = false u = u + dt * b3 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a3 * kdu + @.. broadcast = false du = du + dt * a3 * kdu # update position & velocity tnew = tnew + a3 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b4 * ku + @.. broadcast = false u = u + dt * b4 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a4 * kdu + @.. broadcast = false du = du + dt * a4 * kdu # update position & velocity tnew = tnew + a4 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b5 * ku + @.. broadcast = false u = u + dt * b5 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a5 * kdu + @.. broadcast = false du = du + dt * a5 * kdu tnew = tnew + a5 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b6 * ku + @.. broadcast = false u = u + dt * b6 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a6 * kdu + @.. broadcast = false du = du + dt * a6 * kdu tnew = tnew + a6 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b7 * ku + @.. broadcast = false u = u + dt * b7 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a7 * kdu + @.. broadcast = false du = du + dt * a7 * kdu tnew = tnew + a7 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b8 * ku + @.. broadcast = false u = u + dt * b8 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a8 * kdu + @.. broadcast = false du = du + dt * a8 * kdu tnew = tnew + a8 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b9 * ku + @.. broadcast = false u = u + dt * b9 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a9 * kdu + @.. broadcast = false du = du + dt * a9 * kdu tnew = tnew + a9 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b10 * ku + @.. broadcast = false u = u + dt * b10 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a10 * kdu + @.. broadcast = false du = du + dt * a10 * kdu tnew = tnew + a10 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b11 * ku + @.. broadcast = false u = u + dt * b11 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a11 * kdu + @.. broadcast = false du = du + dt * a11 * kdu tnew = tnew + a11 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b12 * ku + @.. broadcast = false u = u + dt * b12 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a12 * kdu + @.. broadcast = false du = du + dt * a12 * kdu tnew = tnew + a12 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b13 * ku + @.. broadcast = false u = u + dt * b13 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a13 * kdu + @.. broadcast = false du = du + dt * a13 * kdu tnew = tnew + a13 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b14 * ku + @.. broadcast = false u = u + dt * b14 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a14 * kdu + @.. broadcast = false du = du + dt * a14 * kdu tnew = tnew + a14 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b15 * ku + @.. broadcast = false u = u + dt * b15 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a15 * kdu + @.. broadcast = false du = du + dt * a15 * kdu tnew = tnew + a15 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b16 * ku + @.. broadcast = false u = u + dt * b16 * ku f.f1(kdu, du, u, p, tnew) # @.. broadcast=false du = du + dt*a16*kdu @@ -1290,11 +1346,15 @@ end store_symp_state!(integrator, cache, kdu, ku) end -@muladd function perform_step!(integrator, cache::KahanLi8ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::KahanLi8ConstantCache, + repeat_step = false + ) (; t, dt, f, p) = integrator - (; a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, - b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18) = cache + (; + a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, + b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, + ) = cache duprev, uprev, _, kuprev = load_symp_state(integrator) # update position @@ -1433,135 +1493,137 @@ end @muladd function perform_step!(integrator, cache::KahanLi8Cache, repeat_step = false) (; t, dt, f, p) = integrator - (; a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, - b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18) = cache.tab + (; + a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, + b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, + ) = cache.tab duprev, uprev, _, kuprev = load_symp_state(integrator) du, u, kdu, ku = alloc_symp_state(integrator) # update position - @.. broadcast=false u=uprev + dt * b1 * kuprev + @.. broadcast = false u = uprev + dt * b1 * kuprev # update velocity f.f1(kdu, duprev, u, p, integrator.t) - @.. broadcast=false du=duprev + dt * a1 * kdu + @.. broadcast = false du = duprev + dt * a1 * kdu # update position & velocity tnew = t + a1 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b2 * ku + @.. broadcast = false u = u + dt * b2 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a2 * kdu + @.. broadcast = false du = du + dt * a2 * kdu # update position & velocity tnew = tnew + a2 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b3 * ku + @.. broadcast = false u = u + dt * b3 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a3 * kdu + @.. broadcast = false du = du + dt * a3 * kdu # update position & velocity tnew = tnew + a3 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b4 * ku + @.. broadcast = false u = u + dt * b4 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a4 * kdu + @.. broadcast = false du = du + dt * a4 * kdu # update position & velocity tnew = tnew + a4 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b5 * ku + @.. broadcast = false u = u + dt * b5 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a5 * kdu + @.. broadcast = false du = du + dt * a5 * kdu tnew = tnew + a5 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b6 * ku + @.. broadcast = false u = u + dt * b6 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a6 * kdu + @.. broadcast = false du = du + dt * a6 * kdu tnew = tnew + a6 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b7 * ku + @.. broadcast = false u = u + dt * b7 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a7 * kdu + @.. broadcast = false du = du + dt * a7 * kdu tnew = tnew + a7 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b8 * ku + @.. broadcast = false u = u + dt * b8 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a8 * kdu + @.. broadcast = false du = du + dt * a8 * kdu tnew = tnew + a8 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b9 * ku + @.. broadcast = false u = u + dt * b9 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a9 * kdu + @.. broadcast = false du = du + dt * a9 * kdu tnew = tnew + a9 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b10 * ku + @.. broadcast = false u = u + dt * b10 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a10 * kdu + @.. broadcast = false du = du + dt * a10 * kdu tnew = tnew + a10 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b11 * ku + @.. broadcast = false u = u + dt * b11 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a11 * kdu + @.. broadcast = false du = du + dt * a11 * kdu tnew = tnew + a11 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b12 * ku + @.. broadcast = false u = u + dt * b12 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a12 * kdu + @.. broadcast = false du = du + dt * a12 * kdu tnew = tnew + a12 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b13 * ku + @.. broadcast = false u = u + dt * b13 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a13 * kdu + @.. broadcast = false du = du + dt * a13 * kdu tnew = tnew + a13 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b14 * ku + @.. broadcast = false u = u + dt * b14 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a14 * kdu + @.. broadcast = false du = du + dt * a14 * kdu tnew = tnew + a14 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b15 * ku + @.. broadcast = false u = u + dt * b15 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a15 * kdu + @.. broadcast = false du = du + dt * a15 * kdu tnew = tnew + a15 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b16 * ku + @.. broadcast = false u = u + dt * b16 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a16 * kdu + @.. broadcast = false du = du + dt * a16 * kdu tnew = tnew + a16 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b17 * ku + @.. broadcast = false u = u + dt * b17 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a17 * kdu + @.. broadcast = false du = du + dt * a17 * kdu tnew = tnew + a17 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b18 * ku + @.. broadcast = false u = u + dt * b18 * ku f.f1(kdu, du, u, p, tnew) # @.. broadcast=false du = du + dt*a18*kdu @@ -1572,15 +1634,19 @@ end store_symp_state!(integrator, cache, kdu, ku) end -@muladd function perform_step!(integrator, cache::SofSpa10ConstantCache, - repeat_step = false) +@muladd function perform_step!( + integrator, cache::SofSpa10ConstantCache, + repeat_step = false + ) (; t, dt, f, p) = integrator - (; a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, - a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, - a35, a36, - b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, - b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, - b35, b36) = cache + (; + a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, + a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, + a35, a36, + b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, + b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, + b35, b36, + ) = cache duprev, uprev, _, kuprev = load_symp_state(integrator) # update position @@ -1845,265 +1911,267 @@ end @muladd function perform_step!(integrator, cache::SofSpa10Cache, repeat_step = false) (; t, dt, f, p) = integrator - (; a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, - a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, - a35, a36, - b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, - b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, - b35, b36) = cache.tab + (; + a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, + a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, + a35, a36, + b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, + b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, + b35, b36, + ) = cache.tab duprev, uprev, _, kuprev = load_symp_state(integrator) du, u, kdu, ku = alloc_symp_state(integrator) # update position - @.. broadcast=false u=uprev + dt * b1 * kuprev + @.. broadcast = false u = uprev + dt * b1 * kuprev # update velocity f.f1(kdu, duprev, u, p, integrator.t) - @.. broadcast=false du=duprev + dt * a1 * kdu + @.. broadcast = false du = duprev + dt * a1 * kdu # update position & velocity tnew = t + a1 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b2 * ku + @.. broadcast = false u = u + dt * b2 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a2 * kdu + @.. broadcast = false du = du + dt * a2 * kdu # update position & velocity tnew = tnew + a2 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b3 * ku + @.. broadcast = false u = u + dt * b3 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a3 * kdu + @.. broadcast = false du = du + dt * a3 * kdu # update position & velocity tnew = tnew + a3 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b4 * ku + @.. broadcast = false u = u + dt * b4 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a4 * kdu + @.. broadcast = false du = du + dt * a4 * kdu # update position & velocity tnew = tnew + a4 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b5 * ku + @.. broadcast = false u = u + dt * b5 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a5 * kdu + @.. broadcast = false du = du + dt * a5 * kdu tnew = tnew + a5 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b6 * ku + @.. broadcast = false u = u + dt * b6 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a6 * kdu + @.. broadcast = false du = du + dt * a6 * kdu tnew = tnew + a6 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b7 * ku + @.. broadcast = false u = u + dt * b7 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a7 * kdu + @.. broadcast = false du = du + dt * a7 * kdu tnew = tnew + a7 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b8 * ku + @.. broadcast = false u = u + dt * b8 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a8 * kdu + @.. broadcast = false du = du + dt * a8 * kdu tnew = tnew + a8 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b9 * ku + @.. broadcast = false u = u + dt * b9 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a9 * kdu + @.. broadcast = false du = du + dt * a9 * kdu tnew = tnew + a9 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b10 * ku + @.. broadcast = false u = u + dt * b10 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a10 * kdu + @.. broadcast = false du = du + dt * a10 * kdu tnew = tnew + a10 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b11 * ku + @.. broadcast = false u = u + dt * b11 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a11 * kdu + @.. broadcast = false du = du + dt * a11 * kdu tnew = tnew + a11 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b12 * ku + @.. broadcast = false u = u + dt * b12 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a12 * kdu + @.. broadcast = false du = du + dt * a12 * kdu tnew = tnew + a12 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b13 * ku + @.. broadcast = false u = u + dt * b13 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a13 * kdu + @.. broadcast = false du = du + dt * a13 * kdu tnew = tnew + a13 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b14 * ku + @.. broadcast = false u = u + dt * b14 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a14 * kdu + @.. broadcast = false du = du + dt * a14 * kdu tnew = tnew + a14 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b15 * ku + @.. broadcast = false u = u + dt * b15 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a15 * kdu + @.. broadcast = false du = du + dt * a15 * kdu tnew = tnew + a15 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b16 * ku + @.. broadcast = false u = u + dt * b16 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a16 * kdu + @.. broadcast = false du = du + dt * a16 * kdu tnew = tnew + a16 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b17 * ku + @.. broadcast = false u = u + dt * b17 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a17 * kdu + @.. broadcast = false du = du + dt * a17 * kdu tnew = tnew + a17 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b18 * ku + @.. broadcast = false u = u + dt * b18 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a18 * kdu + @.. broadcast = false du = du + dt * a18 * kdu tnew = tnew + a18 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b19 * ku + @.. broadcast = false u = u + dt * b19 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a19 * kdu + @.. broadcast = false du = du + dt * a19 * kdu tnew = tnew + a19 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b20 * ku + @.. broadcast = false u = u + dt * b20 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a20 * kdu + @.. broadcast = false du = du + dt * a20 * kdu tnew = tnew + a20 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b21 * ku + @.. broadcast = false u = u + dt * b21 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a21 * kdu + @.. broadcast = false du = du + dt * a21 * kdu tnew = tnew + a21 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b22 * ku + @.. broadcast = false u = u + dt * b22 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a22 * kdu + @.. broadcast = false du = du + dt * a22 * kdu tnew = tnew + a22 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b23 * ku + @.. broadcast = false u = u + dt * b23 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a23 * kdu + @.. broadcast = false du = du + dt * a23 * kdu tnew = tnew + a23 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b24 * ku + @.. broadcast = false u = u + dt * b24 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a24 * kdu + @.. broadcast = false du = du + dt * a24 * kdu tnew = tnew + a24 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b25 * ku + @.. broadcast = false u = u + dt * b25 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a25 * kdu + @.. broadcast = false du = du + dt * a25 * kdu tnew = tnew + a25 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b26 * ku + @.. broadcast = false u = u + dt * b26 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a26 * kdu + @.. broadcast = false du = du + dt * a26 * kdu tnew = tnew + a26 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b27 * ku + @.. broadcast = false u = u + dt * b27 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a27 * kdu + @.. broadcast = false du = du + dt * a27 * kdu tnew = tnew + a27 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b28 * ku + @.. broadcast = false u = u + dt * b28 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a28 * kdu + @.. broadcast = false du = du + dt * a28 * kdu tnew = tnew + a28 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b29 * ku + @.. broadcast = false u = u + dt * b29 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a29 * kdu + @.. broadcast = false du = du + dt * a29 * kdu tnew = tnew + a29 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b30 * ku + @.. broadcast = false u = u + dt * b30 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a30 * kdu + @.. broadcast = false du = du + dt * a30 * kdu tnew = tnew + a30 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b31 * ku + @.. broadcast = false u = u + dt * b31 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a31 * kdu + @.. broadcast = false du = du + dt * a31 * kdu tnew = tnew + a31 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b32 * ku + @.. broadcast = false u = u + dt * b32 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a32 * kdu + @.. broadcast = false du = du + dt * a32 * kdu tnew = tnew + a32 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b33 * ku + @.. broadcast = false u = u + dt * b33 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a33 * kdu + @.. broadcast = false du = du + dt * a33 * kdu tnew = tnew + a33 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b34 * ku + @.. broadcast = false u = u + dt * b34 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a34 * kdu + @.. broadcast = false du = du + dt * a34 * kdu tnew = tnew + a34 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b35 * ku + @.. broadcast = false u = u + dt * b35 * ku f.f1(kdu, du, u, p, tnew) - @.. broadcast=false du=du + dt * a35 * kdu + @.. broadcast = false du = du + dt * a35 * kdu tnew = tnew + a35 * dt f.f2(ku, du, u, p, tnew) - @.. broadcast=false u=u + dt * b36 * ku + @.. broadcast = false u = u + dt * b36 * ku f.f1(kdu, du, u, p, tnew) # @.. broadcast=false du = du + dt*a30*kdu diff --git a/lib/OrdinaryDiffEqSymplecticRK/src/symplectic_tableaus.jl b/lib/OrdinaryDiffEqSymplecticRK/src/symplectic_tableaus.jl index 61e791c57f..a469d1a693 100644 --- a/lib/OrdinaryDiffEqSymplecticRK/src/symplectic_tableaus.jl +++ b/lib/OrdinaryDiffEqSymplecticRK/src/symplectic_tableaus.jl @@ -10,7 +10,7 @@ function PseudoVerletLeapfrogConstantCache(T, T2) a2 = convert(T, 0) b1 = convert(T, 1 // 2) b2 = convert(T, 1 // 2) - Symplectic2ConstantCache{T, T2}(a1, a2, b1, b2) + return Symplectic2ConstantCache{T, T2}(a1, a2, b1, b2) end function McAte2ConstantCache(T, T2) @@ -18,7 +18,7 @@ function McAte2ConstantCache(T, T2) a1 = convert(T, 1 - a2) b2 = convert(T, 1 / (2 * (1 - a2))) b1 = convert(T, 1 - b2) - Symplectic2ConstantCache{T, T2}(a1, a2, b1, b2) + return Symplectic2ConstantCache{T, T2}(a1, a2, b1, b2) end struct Symplectic3ConstantCache{T, T2} <: HamiltonConstantCache @@ -37,7 +37,7 @@ function Ruth3ConstantCache(T, T2) b1 = convert(T, 7 // 24) b2 = convert(T, 3 // 4) b3 = convert(T, -1 // 24) - Symplectic3ConstantCache{T, T2}(a1, a2, a3, b1, b2, b3) + return Symplectic3ConstantCache{T, T2}(a1, a2, a3, b1, b2, b3) end function McAte3ConstantCache(T, T2) @@ -47,7 +47,7 @@ function McAte3ConstantCache(T, T2) b1 = convert(T, a3) b2 = convert(T, a2) b3 = convert(T, a1) - Symplectic3ConstantCache{T, T2}(a1, a2, a3, b1, b2, b3) + return Symplectic3ConstantCache{T, T2}(a1, a2, a3, b1, b2, b3) end struct Symplectic4ConstantCache{T, T2} <: HamiltonConstantCache @@ -70,7 +70,7 @@ function CandyRoz4ConstantCache(T, T2) b2 = convert(T, (2 - T(2)^(1 // 3))^-1) b3 = convert(T, (1 - T(2)^(2 // 3))^-1) b4 = convert(T, b2) - Symplectic4ConstantCache{T, T2}(a1, a2, a3, a4, b1, b2, b3, b4) + return Symplectic4ConstantCache{T, T2}(a1, a2, a3, a4, b1, b2, b3, b4) end function McAte4ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) @@ -82,7 +82,7 @@ function McAte4ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloat b2 = convert(T, -0.224819803079420806) b3 = convert(T, 0.756320000515668291) b4 = convert(T, 0.334003603286321425) - Symplectic4ConstantCache{T, T2}(a1, a2, a3, a4, b1, b2, b3, b4) + return Symplectic4ConstantCache{T, T2}(a1, a2, a3, a4, b1, b2, b3, b4) end function McAte4ConstantCache(T::Type, T2::Type) @@ -94,7 +94,7 @@ function McAte4ConstantCache(T::Type, T2::Type) b2 = convert(T, big"-0.224819803079420806") b3 = convert(T, big" 0.756320000515668291") b4 = convert(T, big" 0.334003603286321425") - Symplectic4ConstantCache{T, T2}(a1, a2, a3, a4, b1, b2, b3, b4) + return Symplectic4ConstantCache{T, T2}(a1, a2, a3, a4, b1, b2, b3, b4) end struct Symplectic45ConstantCache{T, T2} <: HamiltonConstantCache @@ -111,17 +111,17 @@ struct Symplectic45ConstantCache{T, T2} <: HamiltonConstantCache end function CalvoSanz4ConstantCache(T, T2) - a1 = convert(T, 0.205177661542290) - a2 = convert(T, 0.403021281604210) + a1 = convert(T, 0.20517766154229) + a2 = convert(T, 0.40302128160421) a3 = -convert(T, 0.12092087633891) - a4 = convert(T, 0.512721933192410) + a4 = convert(T, 0.51272193319241) a5 = convert(T, 0.0) b1 = convert(T, 0.061758858135626) b2 = convert(T, 0.33897802655364) b3 = convert(T, 0.61479130717558) b4 = -convert(T, 0.14054801465937) b5 = convert(T, 0.12501982279453) - Symplectic45ConstantCache{T, T2}(a1, a2, a3, a4, a5, b1, b2, b3, b4, b5) + return Symplectic45ConstantCache{T, T2}(a1, a2, a3, a4, a5, b1, b2, b3, b4, b5) end # Broken @@ -129,7 +129,7 @@ end # On the numerical integration of ordinary differential equations by symmetric composition methods function McAte42ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) a1 = convert(T, 0.40518861839525227722) - a2 = convert(T, -0.28714404081652408900) + a2 = convert(T, -0.287144040816524089) a3 = 1 - 2a1 - 2a2 a4 = a2 a5 = a1 @@ -138,7 +138,7 @@ function McAte42ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloa b3 = 1 - 2b1 - 2b2 b4 = b2 b5 = b1 - Symplectic45ConstantCache{T, T2}(a1, a2, a3, a4, a5, b1, b2, b3, b4, b5) + return Symplectic45ConstantCache{T, T2}(a1, a2, a3, a4, a5, b1, b2, b3, b4, b5) end function McAte42ConstantCache(T::Type, T2::Type) @@ -152,7 +152,7 @@ function McAte42ConstantCache(T::Type, T2::Type) b3 = 1 - 2b1 - 2b2 b4 = b2 b5 = b1 - Symplectic45ConstantCache{T, T2}(a1, a2, a3, a4, a5, b1, b2, b3, b4, b5) + return Symplectic45ConstantCache{T, T2}(a1, a2, a3, a4, a5, b1, b2, b3, b4, b5) end struct Symplectic5ConstantCache{T, T2} <: HamiltonConstantCache @@ -171,7 +171,7 @@ struct Symplectic5ConstantCache{T, T2} <: HamiltonConstantCache end function McAte5ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) - a1 = convert(T, 0.339839625839110000) + a1 = convert(T, 0.33983962583911) a2 = convert(T, -0.088601336903027329) a3 = convert(T, 0.5858564768259621188) a4 = convert(T, -0.603039356536491888) @@ -180,10 +180,10 @@ function McAte5ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloat b1 = convert(T, 0.1193900292875672758) b2 = convert(T, 0.6989273703824752308) b3 = convert(T, -0.1713123582716007754) - b4 = convert(T, 0.4012695022513534480) - b5 = convert(T, 0.0107050818482359840) + b4 = convert(T, 0.401269502251353448) + b5 = convert(T, 0.010705081848235984) b6 = convert(T, -0.0589796254980311632) - Symplectic5ConstantCache{T, T2}(a1, a2, a3, a4, a5, a6, b1, b2, b3, b4, b5, b6) + return Symplectic5ConstantCache{T, T2}(a1, a2, a3, a4, a5, a6, b1, b2, b3, b4, b5, b6) end function McAte5ConstantCache(T::Type, T2::Type) @@ -199,7 +199,7 @@ function McAte5ConstantCache(T::Type, T2::Type) b4 = convert(T, big"0.4012695022513534480") b5 = convert(T, big"0.0107050818482359840") b6 = convert(T, big"-0.0589796254980311632") - Symplectic5ConstantCache{T, T2}(a1, a2, a3, a4, a5, a6, b1, b2, b3, b4, b5, b6) + return Symplectic5ConstantCache{T, T2}(a1, a2, a3, a4, a5, a6, b1, b2, b3, b4, b5, b6) end struct Symplectic6ConstantCache{T, T2} <: HamiltonConstantCache @@ -238,8 +238,10 @@ function Yoshida6ConstantCache(T, T2) b6 = convert(T, b3) b7 = convert(T, b2) b8 = convert(T, b1) - Symplectic6ConstantCache{T, T2}(a1, a2, a3, a4, a5, a6, a7, a8, b1, b2, b3, b4, b5, b6, - b7, b8) + return Symplectic6ConstantCache{T, T2}( + a1, a2, a3, a4, a5, a6, a7, a8, b1, b2, b3, b4, b5, b6, + b7, b8 + ) end struct Symplectic62ConstantCache{T, T2} <: HamiltonConstantCache @@ -286,8 +288,10 @@ function KahanLi6ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo b8 = b3 b9 = b2 b10 = b1 - Symplectic62ConstantCache{T, T2}(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, b1, b2, b3, - b4, b5, b6, b7, b8, b9, b10) + return Symplectic62ConstantCache{T, T2}( + a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, b1, b2, b3, + b4, b5, b6, b7, b8, b9, b10 + ) end function KahanLi6ConstantCache(T::Type, T2::Type) @@ -311,8 +315,10 @@ function KahanLi6ConstantCache(T::Type, T2::Type) b8 = b3 b9 = b2 b10 = b1 - Symplectic62ConstantCache{T, T2}(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, b1, b2, b3, - b4, b5, b6, b7, b8, b9, b10) + return Symplectic62ConstantCache{T, T2}( + a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, b1, b2, b3, + b4, b5, b6, b7, b8, b9, b10 + ) end struct McAte8ConstantCache{T, T2} <: HamiltonConstantCache @@ -351,8 +357,8 @@ struct McAte8ConstantCache{T, T2} <: HamiltonConstantCache end function McAte8ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) - a1 = convert(T, 0.74167036435061295344822780) - a2 = convert(T, -0.40910082580003159399730010) + a1 = convert(T, 0.7416703643506129534482278) + a2 = convert(T, -0.4091008258000315939973001) a3 = convert(T, 0.19075471029623837995387626) a4 = convert(T, -0.57386247111608226665638773) a5 = convert(T, 0.29906418130365592384446354) @@ -383,10 +389,12 @@ function McAte8ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloat b14 = b3 b15 = b2 b16 = b1 - McAte8ConstantCache{T, T2}(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, + return McAte8ConstantCache{T, T2}( + a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, - b15, b16) + b15, b16 + ) end function McAte8ConstantCache(T::Type, T2::Type) @@ -422,10 +430,12 @@ function McAte8ConstantCache(T::Type, T2::Type) b14 = b3 b15 = b2 b16 = b1 - McAte8ConstantCache{T, T2}(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, + return McAte8ConstantCache{T, T2}( + a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, - b15, b16) + b15, b16 + ) end struct KahanLi8ConstantCache{T, T2} <: HamiltonConstantCache @@ -470,7 +480,7 @@ end function KahanLi8ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) a1 = convert(T, 0.13020248308889008087881763) a2 = convert(T, 0.56116298177510838456196441) - a3 = convert(T, -0.38947496264484728640807860) + a3 = convert(T, -0.3894749626448472864080786) a4 = convert(T, 0.15884190655515560089621075) a5 = convert(T, -0.39590389413323757733623154) a6 = convert(T, 0.18453964097831570709183254) @@ -504,10 +514,12 @@ function KahanLi8ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo b16 = b3 b17 = b2 b18 = b1 - KahanLi8ConstantCache{T, T2}(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, + return KahanLi8ConstantCache{T, T2}( + a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, - b14, b15, b16, b17, b18) + b14, b15, b16, b17, b18 + ) end function KahanLi8ConstantCache(T::Type, T2::Type) @@ -547,10 +559,12 @@ function KahanLi8ConstantCache(T::Type, T2::Type) b16 = b3 b17 = b2 b18 = b1 - KahanLi8ConstantCache{T, T2}(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, + return KahanLi8ConstantCache{T, T2}( + a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, - b14, b15, b16, b17, b18) + b14, b15, b16, b17, b18 + ) end struct SofSpa10ConstantCache{T, T2} <: HamiltonConstantCache @@ -632,7 +646,7 @@ function SofSpa10ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a1 = convert(T, 0.07879572252168641926390768) a2 = convert(T, 0.31309610341510852776481247) a3 = convert(T, 0.02791838323507806610952027) - a4 = convert(T, -0.22959284159390709415121340) + a4 = convert(T, -0.2295928415939070941512134) a5 = convert(T, 0.13096206107716486317465686) a6 = convert(T, -0.26973340565451071434460973) a7 = convert(T, 0.07497334315589143566613711) @@ -643,9 +657,9 @@ function SofSpa10ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo a12 = convert(T, 0.41143087395589023782070412) a13 = convert(T, -0.00486636058313526176219566) a14 = convert(T, -0.39203335370863990644808194) - a15 = convert(T, 0.05194250296244964703718290) + a15 = convert(T, 0.0519425029624496470371829) a16 = convert(T, 0.05066509075992449633587434) - a17 = convert(T, 0.04967437063972987905456880) + a17 = convert(T, 0.0496743706397298790545688) a18 = convert(T, 0.04931773575959453791768001) a19 = a17 a20 = a16 @@ -701,7 +715,8 @@ function SofSpa10ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo b34 = b3 b35 = b2 b36 = b1 - SofSpa10ConstantCache{T, T2}(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, + return SofSpa10ConstantCache{T, T2}( + a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, @@ -710,7 +725,8 @@ function SofSpa10ConstantCache(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFlo b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, - b35, b36) + b35, b36 + ) end function SofSpa10ConstantCache(T::Type, T2::Type) @@ -786,7 +802,8 @@ function SofSpa10ConstantCache(T::Type, T2::Type) b34 = b3 b35 = b2 b36 = b1 - SofSpa10ConstantCache{T, T2}(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, + return SofSpa10ConstantCache{T, T2}( + a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, @@ -795,5 +812,6 @@ function SofSpa10ConstantCache(T::Type, T2::Type) b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, - b35, b36) + b35, b36 + ) end diff --git a/lib/OrdinaryDiffEqSymplecticRK/test/jet.jl b/lib/OrdinaryDiffEqSymplecticRK/test/jet.jl index 467f98eef6..c4142909fb 100644 --- a/lib/OrdinaryDiffEqSymplecticRK/test/jet.jl +++ b/lib/OrdinaryDiffEqSymplecticRK/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqSymplecticRK, target_defined_modules = true, mode = :typo) + OrdinaryDiffEqSymplecticRK, target_defined_modules = true, mode = :typo + ) end diff --git a/lib/OrdinaryDiffEqSymplecticRK/test/qa.jl b/lib/OrdinaryDiffEqSymplecticRK/test/qa.jl index 6b7817e03c..eba4d7280d 100644 --- a/lib/OrdinaryDiffEqSymplecticRK/test/qa.jl +++ b/lib/OrdinaryDiffEqSymplecticRK/test/qa.jl @@ -5,4 +5,4 @@ using Aqua Aqua.test_all( OrdinaryDiffEqSymplecticRK ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqSymplecticRK/test/runtests.jl b/lib/OrdinaryDiffEqSymplecticRK/test/runtests.jl index c16863e320..758cfda7b3 100644 --- a/lib/OrdinaryDiffEqSymplecticRK/test/runtests.jl +++ b/lib/OrdinaryDiffEqSymplecticRK/test/runtests.jl @@ -3,4 +3,4 @@ using SafeTestsets @time @safetestset "Synplectic Convergence Tests" include("symplectic_convergence.jl") @time @safetestset "Synplectic Tests" include("symplectic_tests.jl") @time @safetestset "JET Tests" include("jet.jl") -@time @safetestset "Aqua" include("qa.jl") \ No newline at end of file +@time @safetestset "Aqua" include("qa.jl") diff --git a/lib/OrdinaryDiffEqSymplecticRK/test/symplectic_convergence.jl b/lib/OrdinaryDiffEqSymplecticRK/test/symplectic_convergence.jl index c303ee0799..16be4b8423 100644 --- a/lib/OrdinaryDiffEqSymplecticRK/test/symplectic_convergence.jl +++ b/lib/OrdinaryDiffEqSymplecticRK/test/symplectic_convergence.jl @@ -4,14 +4,14 @@ using OrdinaryDiffEqTsit5 u0 = fill(0.0, 2) v0 = ones(2) function f1_harmonic(dv, v, u, p, t) - dv .= -u + return dv .= -u end function f2_harmonic(du, v, u, p, t) - du .= v + return du .= v end function harmonic_analytic(y0, p, x) v0, u0 = y0.x - ArrayPartition(-u0 * sin(x) + v0 * cos(x), u0 * cos(x) + v0 * sin(x)) + return ArrayPartition(-u0 * sin(x) + v0 * cos(x), u0 * cos(x) + v0 * sin(x)) end ff_harmonic = DynamicalODEFunction(f1_harmonic, f2_harmonic; analytic = harmonic_analytic) prob = DynamicalODEProblem(ff_harmonic, v0, u0, (0.0, 5.0)) @@ -47,75 +47,77 @@ println("Convergence tests") dts = 1 .// 2 .^ (6:-1:3) # Symplectic Euler sim = test_convergence(dts, prob, SymplecticEuler(), dense_errors = true) -@test sim.𝒪est[:l2]≈1 rtol=1e-1 -@test sim.𝒪est[:L2]≈1 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 1 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 1 rtol = 1.0e-1 # Verlet sim = test_convergence(dts, prob, VelocityVerlet(), dense_errors = true) -@test sim.𝒪est[:l2]≈2 rtol=1e-1 -@test sim.𝒪est[:L2]≈2 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 2 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 2 rtol = 1.0e-1 # Test that position converges faster for Verlet -position_error = :final => [mean(sim[i].u[2].x[1] - sim[i].u_analytic[2].x[1]) - for i in 1:length(sim)] -@test first(DiffEqDevTools.calc𝒪estimates(position_error).second)≈4.0 rtol=1e-1 +position_error = :final => [ + mean(sim[i].u[2].x[1] - sim[i].u_analytic[2].x[1]) + for i in 1:length(sim) +] +@test first(DiffEqDevTools.calc𝒪estimates(position_error).second) ≈ 4.0 rtol = 1.0e-1 # 2nd Order Tableaus sim = test_convergence(dts, prob, VerletLeapfrog(), dense_errors = true) -@test sim.𝒪est[:l2]≈2 rtol=1e-1 -@test sim.𝒪est[:L2]≈2 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 2 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 2 rtol = 1.0e-1 sim = test_convergence(dts, prob, LeapfrogDriftKickDrift(), dense_errors = true) -@test sim.𝒪est[:l2]≈2 rtol=1e-1 -@test sim.𝒪est[:L2]≈2 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 2 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 2 rtol = 1.0e-1 sim = test_convergence(dts, prob, PseudoVerletLeapfrog(), dense_errors = true) -@test sim.𝒪est[:l2]≈2 rtol=1e-1 -@test sim.𝒪est[:L2]≈2 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 2 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 2 rtol = 1.0e-1 sim = test_convergence(dts, prob, McAte2(), dense_errors = true) -@test sim.𝒪est[:l2]≈2 rtol=1e-1 -@test sim.𝒪est[:L2]≈2 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 2 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 2 rtol = 1.0e-1 # Ruth sim = test_convergence(dts, prob, Ruth3(), dense_errors = true) -@test sim.𝒪est[:l2]≈3 rtol=1e-1 -@test sim.𝒪est[:L2]≈3 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 3 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 3 rtol = 1.0e-1 sim = test_convergence(dts, prob, McAte3(), dense_errors = true) -@test sim.𝒪est[:l2]≈3 rtol=1e-1 -@test sim.𝒪est[:L2]≈3 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 3 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 3 rtol = 1.0e-1 sim = test_convergence(dts, prob, CandyRoz4(), dense_errors = true) -@test sim.𝒪est[:l2]≈4 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, McAte4(), dense_errors = true) -@test sim.𝒪est[:l2]≈4 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, McAte42(), dense_errors = true) -@test_broken sim.𝒪est[:l2]≈4 rtol=1e-1 -@test_broken sim.𝒪est[:L2]≈4 rtol=1e-1 +@test_broken sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test_broken sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, CalvoSanz4(), dense_errors = true) -@test sim.𝒪est[:l2]≈4 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 dts = 1 .// 2 .^ (4:-1:0) sim = test_convergence(dts, prob, McAte5(), dense_errors = true) -@test sim.𝒪est[:l2]≈5 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 5 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, Yoshida6(), dense_errors = true) -@test sim.𝒪est[:l2]≈6 rtol=1e-1 -@test sim.𝒪est[:L2]≈4.69 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 6 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4.69 rtol = 1.0e-1 sim = test_convergence(dts, prob, KahanLi6(), dense_errors = true) -@test sim.𝒪est[:l2]≈6 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 6 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, McAte8(), dense_errors = true) -@test sim.𝒪est[:l2]≈8 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 8 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, KahanLi8(), dense_errors = true) -@test sim.𝒪est[:l2]≈8 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 8 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 dts = 1.0 ./ 2.0 .^ (2:-1:-2) sim = test_convergence(dts, prob, SofSpa10(), dense_errors = true) -@test sim.𝒪est[:l2]≈10 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 10 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 ################# Out of place symplectic @@ -124,14 +126,16 @@ println("Out of Place") u0 = 0.0 v0 = 1.0 function f1_harmonic_nip(v, u, p, t) - -u + return -u end function f2_harmonic_nip(v, u, p, t) - v + return v end -ff_harmonic_nip = DynamicalODEFunction(f1_harmonic_nip, f2_harmonic_nip; - analytic = harmonic_analytic) +ff_harmonic_nip = DynamicalODEFunction( + f1_harmonic_nip, f2_harmonic_nip; + analytic = harmonic_analytic +) prob = DynamicalODEProblem(ff_harmonic_nip, v0, u0, (0.0, 5.0)) sol = solve(prob, SymplecticEuler(), dt = 1 / 10) @@ -139,75 +143,77 @@ sol = solve(prob, SymplecticEuler(), dt = 1 / 10) dts = 1 .// 2 .^ (6:-1:3) # Symplectic Euler sim = test_convergence(dts, prob, SymplecticEuler(), dense_errors = true) -@test sim.𝒪est[:l2]≈1 rtol=1e-1 -@test sim.𝒪est[:L2]≈1 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 1 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 1 rtol = 1.0e-1 # Verlet sim = test_convergence(dts, prob, VelocityVerlet(), dense_errors = true) -@test sim.𝒪est[:l2]≈2 rtol=1e-1 -@test sim.𝒪est[:L2]≈2 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 2 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 2 rtol = 1.0e-1 # Test that position converges faster for Verlet -position_error = :final => [mean(sim[i].u[2].x[1] - sim[i].u_analytic[2].x[1]) - for i in 1:length(sim)] -@test first(DiffEqDevTools.calc𝒪estimates(position_error).second)≈4.0 rtol=1e-1 +position_error = :final => [ + mean(sim[i].u[2].x[1] - sim[i].u_analytic[2].x[1]) + for i in 1:length(sim) +] +@test first(DiffEqDevTools.calc𝒪estimates(position_error).second) ≈ 4.0 rtol = 1.0e-1 # 2nd Order Tableaus sim = test_convergence(dts, prob, VerletLeapfrog(), dense_errors = true) -@test sim.𝒪est[:l2]≈2 rtol=1e-1 -@test sim.𝒪est[:L2]≈2 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 2 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 2 rtol = 1.0e-1 sim = test_convergence(dts, prob, LeapfrogDriftKickDrift(), dense_errors = true) -@test sim.𝒪est[:l2]≈2 rtol=1e-1 -@test sim.𝒪est[:L2]≈2 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 2 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 2 rtol = 1.0e-1 sim = test_convergence(dts, prob, PseudoVerletLeapfrog(), dense_errors = true) -@test sim.𝒪est[:l2]≈2 rtol=1e-1 -@test sim.𝒪est[:L2]≈2 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 2 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 2 rtol = 1.0e-1 sim = test_convergence(dts, prob, McAte2(), dense_errors = true) -@test sim.𝒪est[:l2]≈2 rtol=1e-1 -@test sim.𝒪est[:L2]≈2 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 2 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 2 rtol = 1.0e-1 # Ruth sim = test_convergence(dts, prob, Ruth3(), dense_errors = true) -@test sim.𝒪est[:l2]≈3 rtol=1e-1 -@test sim.𝒪est[:L2]≈3 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 3 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 3 rtol = 1.0e-1 sim = test_convergence(dts, prob, McAte3(), dense_errors = true) -@test sim.𝒪est[:l2]≈3 rtol=1e-1 -@test sim.𝒪est[:L2]≈3 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 3 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 3 rtol = 1.0e-1 sim = test_convergence(dts, prob, CandyRoz4(), dense_errors = true) -@test sim.𝒪est[:l2]≈4 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, McAte4(), dense_errors = true) -@test sim.𝒪est[:l2]≈4 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, McAte42(), dense_errors = true) -@test_broken sim.𝒪est[:l2]≈4 rtol=1e-1 -@test_broken sim.𝒪est[:L2]≈4 rtol=1e-1 +@test_broken sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test_broken sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, CalvoSanz4(), dense_errors = true) -@test sim.𝒪est[:l2]≈4 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 4 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 dts = 1 .// 2 .^ (4:-1:0) sim = test_convergence(dts, prob, McAte5(), dense_errors = true) -@test sim.𝒪est[:l2]≈5 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 5 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, Yoshida6(), dense_errors = true) -@test sim.𝒪est[:l2]≈6 rtol=1e-1 -@test sim.𝒪est[:L2]≈4.69 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 6 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4.69 rtol = 1.0e-1 sim = test_convergence(dts, prob, KahanLi6(), dense_errors = true) -@test sim.𝒪est[:l2]≈6 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 6 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, McAte8(), dense_errors = true) -@test sim.𝒪est[:l2]≈8 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 8 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 sim = test_convergence(dts, prob, KahanLi8(), dense_errors = true) -@test sim.𝒪est[:l2]≈8 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 8 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 dts = 1.0 ./ 2.0 .^ (2:-1:-2) sim = test_convergence(dts, prob, SofSpa10(), dense_errors = true) -@test sim.𝒪est[:l2]≈10 rtol=1e-1 -@test sim.𝒪est[:L2]≈4 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 10 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 4 rtol = 1.0e-1 ################# f1 dependent on v @@ -216,14 +222,14 @@ println("f1 dependent on v") u0 = fill(0.0, 2) v0 = ones(2) function f1_v(dv, v, u, p, t) - dv .= v + return dv .= v end function f2_v(du, v, u, p, t) - du .= v + return du .= v end function f_v_analytic(y0, p, x) v0, u0 = y0.x - ArrayPartition(v0 * exp(x), v0 * exp(x) - v0 + u0) + return ArrayPartition(v0 * exp(x), v0 * exp(x) - v0 + u0) end ff_v = DynamicalODEFunction(f1_v, f2_v; analytic = f_v_analytic) prob = DynamicalODEProblem(ff_v, v0, u0, (0.0, 5.0)) @@ -231,5 +237,5 @@ prob = DynamicalODEProblem(ff_v, v0, u0, (0.0, 5.0)) dts = 1 .// 2 .^ (6:-1:3) # LeapfrogDriftKickDrift sim = test_convergence(dts, prob, LeapfrogDriftKickDrift(), dense_errors = true) -@test sim.𝒪est[:l2]≈2 rtol=1e-1 -@test sim.𝒪est[:L2]≈2 rtol=1e-1 +@test sim.𝒪est[:l2] ≈ 2 rtol = 1.0e-1 +@test sim.𝒪est[:L2] ≈ 2 rtol = 1.0e-1 diff --git a/lib/OrdinaryDiffEqSymplecticRK/test/symplectic_tests.jl b/lib/OrdinaryDiffEqSymplecticRK/test/symplectic_tests.jl index 32b2a8f52a..8a349687fd 100644 --- a/lib/OrdinaryDiffEqSymplecticRK/test/symplectic_tests.jl +++ b/lib/OrdinaryDiffEqSymplecticRK/test/symplectic_tests.jl @@ -1,10 +1,10 @@ - using Test, LinearAlgebra using OrdinaryDiffEqSymplecticRK, DiffEqBase using OrdinaryDiffEqRKN # algorithm, dq(p) != p, convergence order -const ALGOS = ((SymplecticEuler, true, 1), +const ALGOS = ( + (SymplecticEuler, true, 1), (VelocityVerlet, false, 2), (VerletLeapfrog, true, 2), (LeapfrogDriftKickDrift, true, 2), @@ -21,14 +21,15 @@ const ALGOS = ((SymplecticEuler, true, 1), (KahanLi6, true, 6), (McAte8, true, 8), (KahanLi8, true, 8), - (SofSpa10, true, 10)) + (SofSpa10, true, 10), +) function dp(p, q, pa, t) - 0q .+ pa[2] + return 0q .+ pa[2] end function dq(p, q, pa, t) - p .* pa[1] + return p .* pa[1] end dp(res, p, q, pa, t) = (res .= dp(p, q, pa, t)) @@ -48,7 +49,7 @@ function printerrors(text, calc, solution, pa, t1) print(text, ": ") print(norm(calc[1] - solution(t1, pa)[1]), " ") print(norm(calc[2] - solution(t1, pa)[2])) - println() + return println() end @testset "symplectic $alg-$iip-$pa" for (alg, x, d) in ALGOS, iip in IIPS, pa in PARAMS @@ -63,8 +64,8 @@ end sol = solve(prob, alg(); dt = dt) calc = sol(t1) # printerrors("$alg-$iip-$pa", calc, solution, pa, t1) - @test calc[1]≈solution(t1, pa)[1] rtol=errorbound(dt, d, calc[1]) - @test calc[2]≈solution(t1, pa)[2] rtol=errorbound(dt, d, calc[2]) + @test calc[1] ≈ solution(t1, pa)[1] rtol = errorbound(dt, d, calc[1]) + @test calc[2] ≈ solution(t1, pa)[2] rtol = errorbound(dt, d, calc[2]) else @test_throws ArgumentError solve(prob, alg(); dt = dt) end @@ -74,31 +75,36 @@ function motionfuncDirect1(dv, v, u, p, t) # 1:Electron, 2: Be ω_1, ω_2, γ, m_1, m_2, η, ω_d = p dv[1] = -ω_1^2 * u[1] * (1 + η * cos(ω_d * t)) - γ * u[2] / m_1 - dv[2] = -ω_2^2 * u[2] - γ * u[1] / m_2 + return dv[2] = -ω_2^2 * u[2] - γ * u[1] / m_2 end function motionfuncDirect1(v, u, p, t) # 1:Electron, 2: Be ω_1, ω_2, γ, m_1, m_2, η, ω_d = p - [-ω_1^2 * u[1] * (1 + η * cos(ω_d * t)) - γ * u[2] / m_1, - -ω_2^2 * u[2] - γ * u[1] / m_2] + return [ + -ω_1^2 * u[1] * (1 + η * cos(ω_d * t)) - γ * u[2] / m_1, + -ω_2^2 * u[2] - γ * u[1] / m_2, + ] end -param = [90386.15717208837, 3938.9288690708827, 8560.718748264337, 0.000544617021484666, - 8.947079933513658, 0.7596480420227258, 78778.57738141765] +param = [ + 90386.15717208837, 3938.9288690708827, 8560.718748264337, 0.000544617021484666, + 8.947079933513658, 0.7596480420227258, 78778.57738141765, +] u0_direct = zeros(2) # mm, mm v0_direct = [0.0, 135.83668926684385] tspan = (0.0, 1.321179076090661) prob_direct = SecondOrderODEProblem(motionfuncDirect1, v0_direct, u0_direct, tspan, param) -dt = 2e-8 +dt = 2.0e-8 ref = solve( - prob_direct, DPRKN12(), abstol = 1e-12, reltol = 1e-12, maxiters = 1e7, saveat = 0.01) + prob_direct, DPRKN12(), abstol = 1.0e-12, reltol = 1.0e-12, maxiters = 1.0e7, saveat = 0.01 +) @testset "symplectic time-dependent $alg" for (alg, x, d) in ALGOS sol = solve(prob_direct, alg(), dt = dt, saveat = 0.01) if alg <: Yoshida6 - @test maximum(ref[4, :] - sol[4, :]) < 9e-3 + @test maximum(ref[4, :] - sol[4, :]) < 9.0e-3 else - @test maximum(ref[4, :] - sol[4, :]) < 3e-3 + @test maximum(ref[4, :] - sol[4, :]) < 3.0e-3 end end diff --git a/lib/OrdinaryDiffEqTaylorSeries/src/OrdinaryDiffEqTaylorSeries.jl b/lib/OrdinaryDiffEqTaylorSeries/src/OrdinaryDiffEqTaylorSeries.jl index ab1fc10176..61625c8989 100644 --- a/lib/OrdinaryDiffEqTaylorSeries/src/OrdinaryDiffEqTaylorSeries.jl +++ b/lib/OrdinaryDiffEqTaylorSeries/src/OrdinaryDiffEqTaylorSeries.jl @@ -1,16 +1,16 @@ module OrdinaryDiffEqTaylorSeries import OrdinaryDiffEqCore: alg_order, alg_stability_size, explicit_rk_docstring, - OrdinaryDiffEqAdaptiveAlgorithm, OrdinaryDiffEqMutableCache, - alg_cache, - OrdinaryDiffEqConstantCache, @fold, trivial_limiter!, - constvalue, perform_step!, calculate_residuals, @cache, - calculate_residuals!, _ode_interpolant, _ode_interpolant!, - CompiledFloats, @OnDemandTableauExtract, initialize!, - perform_step!, OrdinaryDiffEqAlgorithm, - CompositeAlgorithm, _ode_addsteps!, copyat_or_push!, - AutoAlgSwitch, get_fsalfirstlast, - full_cache, DerivativeOrderNotPossibleError + OrdinaryDiffEqAdaptiveAlgorithm, OrdinaryDiffEqMutableCache, + alg_cache, + OrdinaryDiffEqConstantCache, @fold, trivial_limiter!, + constvalue, perform_step!, calculate_residuals, @cache, + calculate_residuals!, _ode_interpolant, _ode_interpolant!, + CompiledFloats, @OnDemandTableauExtract, initialize!, + perform_step!, OrdinaryDiffEqAlgorithm, + CompositeAlgorithm, _ode_addsteps!, copyat_or_push!, + AutoAlgSwitch, get_fsalfirstlast, + full_cache, DerivativeOrderNotPossibleError import Static: False import MuladdMacro: @muladd import FastBroadcast: @.. @@ -40,11 +40,17 @@ PrecompileTools.@compile_workload begin prob_list = [] if Preferences.@load_preference("PrecompileNoSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), - Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0)) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.NoSpecialize}( + lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), + Float64[] + ) + ) end for prob in prob_list, solver in solver_list diff --git a/lib/OrdinaryDiffEqTaylorSeries/src/TaylorSeries_caches.jl b/lib/OrdinaryDiffEqTaylorSeries/src/TaylorSeries_caches.jl index b07e9e912d..989ad96899 100644 --- a/lib/OrdinaryDiffEqTaylorSeries/src/TaylorSeries_caches.jl +++ b/lib/OrdinaryDiffEqTaylorSeries/src/TaylorSeries_caches.jl @@ -1,6 +1,7 @@ @cache struct ExplicitTaylor2Cache{ - uType, rateType, uNoUnitsType, StageLimiter, StepLimiter, - Thread} <: OrdinaryDiffEqMutableCache + uType, rateType, uNoUnitsType, StageLimiter, StepLimiter, + Thread, + } <: OrdinaryDiffEqMutableCache u::uType uprev::uType k1::rateType @@ -14,10 +15,12 @@ thread::Thread end -function alg_cache(alg::ExplicitTaylor2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ExplicitTaylor2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k1 = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) @@ -25,22 +28,27 @@ function alg_cache(alg::ExplicitTaylor2, u, rate_prototype, ::Type{uEltypeNoUnit atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - ExplicitTaylor2Cache(u, uprev, k1, k2, k3, utilde, tmp, atmp, - alg.stage_limiter!, alg.step_limiter!, alg.thread) + return ExplicitTaylor2Cache( + u, uprev, k1, k2, k3, utilde, tmp, atmp, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) end struct ExplicitTaylor2ConstantCache <: OrdinaryDiffEqConstantCache end -function alg_cache(alg::ExplicitTaylor2, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ExplicitTaylor2, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - ExplicitTaylor2ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return ExplicitTaylor2ConstantCache() end # FSAL currently not used, providing dummy implementation to satisfy the interface get_fsalfirstlast(cache::ExplicitTaylor2Cache, u) = (cache.k1, cache.k1) @cache struct ExplicitTaylorCache{ - P, jetType, uType, taylorType, uNoUnitsType, StageLimiter, StepLimiter, - Thread} <: OrdinaryDiffEqMutableCache + P, jetType, uType, taylorType, uNoUnitsType, StageLimiter, StepLimiter, + Thread, + } <: OrdinaryDiffEqMutableCache order::Val{P} jet::jetType u::uType @@ -54,34 +62,40 @@ get_fsalfirstlast(cache::ExplicitTaylor2Cache, u) = (cache.k1, cache.k1) thread::Thread end -function alg_cache(alg::ExplicitTaylor{P}, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::ExplicitTaylor{P}, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {P, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {P, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} _, jet_iip = build_jet(f, p, Val(P), length(u)) utaylor = TaylorDiff.make_seed(u, zero(u), Val(P)) utilde = zero(u) atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - ExplicitTaylorCache(Val(P), jet_iip, u, uprev, utaylor, utilde, tmp, atmp, - alg.stage_limiter!, alg.step_limiter!, alg.thread) + return ExplicitTaylorCache( + Val(P), jet_iip, u, uprev, utaylor, utilde, tmp, atmp, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) end struct ExplicitTaylorConstantCache{P, jetType} <: OrdinaryDiffEqConstantCache order::Val{P} jet::jetType end -function alg_cache(::ExplicitTaylor{P}, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + ::ExplicitTaylor{P}, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {P, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {P, uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} if u isa AbstractArray jet, _ = build_jet(f, p, Val(P), length(u)) else jet = build_jet(f, p, Val(P)) end - ExplicitTaylorConstantCache(Val(P), jet) + return ExplicitTaylorConstantCache(Val(P), jet) end # FSAL currently not used, providing dummy implementation to satisfy the interface diff --git a/lib/OrdinaryDiffEqTaylorSeries/src/TaylorSeries_perform_step.jl b/lib/OrdinaryDiffEqTaylorSeries/src/TaylorSeries_perform_step.jl index 67aff2c690..2254ed50f3 100644 --- a/lib/OrdinaryDiffEqTaylorSeries/src/TaylorSeries_perform_step.jl +++ b/lib/OrdinaryDiffEqTaylorSeries/src/TaylorSeries_perform_step.jl @@ -1,16 +1,18 @@ using TaylorDiff: TaylorDiff, extract_derivative, extract_derivative! @inline make_taylor(all::Vararg{X, P}) where {P, X <: AbstractArray} = TaylorArray( - Base.first(all), Base.tail(all)) + Base.first(all), Base.tail(all) +) @inline make_taylor(all::Vararg{X, P}) where {P, X} = TaylorScalar(all) function initialize!(integrator, cache::ExplicitTaylor2ConstantCache) integrator.kshortsize = 3 - integrator.k = typeof(integrator.k)(undef, integrator.kshortsize) + return integrator.k = typeof(integrator.k)(undef, integrator.kshortsize) end @muladd function perform_step!( - integrator, cache::ExplicitTaylor2ConstantCache, repeat_step = false) + integrator, cache::ExplicitTaylor2ConstantCache, repeat_step = false + ) (; t, dt, uprev, u, f, p) = integrator k1 = f(uprev, p, t) u1 = make_taylor(uprev, k1) @@ -50,19 +52,22 @@ end function initialize!(integrator, cache::ExplicitTaylorConstantCache{P}) where {P} integrator.kshortsize = P - integrator.k = typeof(integrator.k)(undef, P) + return integrator.k = typeof(integrator.k)(undef, P) end @muladd function perform_step!( - integrator, cache::ExplicitTaylorConstantCache{P}, repeat_step = false) where {P} + integrator, cache::ExplicitTaylorConstantCache{P}, repeat_step = false + ) where {P} (; t, dt, uprev, u, f, p) = integrator (; jet) = cache utaylor = jet(uprev, t) u = map(x -> evaluate_polynomial(x, dt), utaylor) if integrator.opts.adaptive utilde = TaylorDiff.get_coefficient(utaylor, P) * dt^(P + 1) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end OrdinaryDiffEqCore.increment_nf!(integrator.stats, P + 1) @@ -80,7 +85,8 @@ function initialize!(integrator, cache::ExplicitTaylorCache{P}) where {P} end @muladd function perform_step!( - integrator, cache::ExplicitTaylorCache{P}, repeat_step = false) where {P} + integrator, cache::ExplicitTaylorCache{P}, repeat_step = false + ) where {P} (; t, dt, uprev, u, f, p) = integrator (; jet, utaylor, utilde, tmp, atmp, thread) = cache @@ -89,10 +95,12 @@ end u[i] = @inline evaluate_polynomial(utaylor[i], dt) end if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=TaylorDiff.get_coefficient(utaylor, P) * - dt^(P + 1) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + @.. broadcast = false thread = thread utilde = TaylorDiff.get_coefficient(utaylor, P) * + dt^(P + 1) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end OrdinaryDiffEqCore.increment_nf!(integrator.stats, P + 1) diff --git a/lib/OrdinaryDiffEqTaylorSeries/src/alg_utils.jl b/lib/OrdinaryDiffEqTaylorSeries/src/alg_utils.jl index 06907a8888..a5a2dc30dc 100644 --- a/lib/OrdinaryDiffEqTaylorSeries/src/alg_utils.jl +++ b/lib/OrdinaryDiffEqTaylorSeries/src/alg_utils.jl @@ -7,7 +7,7 @@ alg_stability_size(alg::ExplicitTaylor) = 1 JET_CACHE = IdDict() function build_jet(f::ODEFunction{iip}, p, order, length = nothing) where {iip} - build_jet(f, Val{iip}(), p, order, length) + return build_jet(f, Val{iip}(), p, order, length) end function build_jet(f, ::Val{iip}, p, order::Val{P}, length = nothing) where {P, iip} diff --git a/lib/OrdinaryDiffEqTaylorSeries/src/algorithms.jl b/lib/OrdinaryDiffEqTaylorSeries/src/algorithms.jl index cba67e76a2..162a66697f 100644 --- a/lib/OrdinaryDiffEqTaylorSeries/src/algorithms.jl +++ b/lib/OrdinaryDiffEqTaylorSeries/src/algorithms.jl @@ -1,8 +1,9 @@ @doc explicit_rk_docstring( "A second-order explicit Taylor series method.", - "ExplicitTaylor2") + "ExplicitTaylor2" +) Base.@kwdef struct ExplicitTaylor2{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAlgorithm + OrdinaryDiffEqAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() @@ -10,14 +11,15 @@ end @truncate_stacktrace ExplicitTaylor2 3 # for backwards compatibility function ExplicitTaylor2(stage_limiter!, step_limiter! = trivial_limiter!) - ExplicitTaylor2(stage_limiter!, step_limiter!, False()) + return ExplicitTaylor2(stage_limiter!, step_limiter!, False()) end @doc explicit_rk_docstring( "An arbitrary-order explicit Taylor series method.", - "ExplicitTaylor2") + "ExplicitTaylor2" +) Base.@kwdef struct ExplicitTaylor{P, StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm order::Val{P} = Val{1}() stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! diff --git a/lib/OrdinaryDiffEqTaylorSeries/test/jet.jl b/lib/OrdinaryDiffEqTaylorSeries/test/jet.jl index d3add42cb9..58a50b8b7a 100644 --- a/lib/OrdinaryDiffEqTaylorSeries/test/jet.jl +++ b/lib/OrdinaryDiffEqTaylorSeries/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqTaylorSeries, target_defined_modules = true, mode = :typo) + OrdinaryDiffEqTaylorSeries, target_defined_modules = true, mode = :typo + ) end diff --git a/lib/OrdinaryDiffEqTaylorSeries/test/qa.jl b/lib/OrdinaryDiffEqTaylorSeries/test/qa.jl index d6a03a29b5..df6b9efc62 100644 --- a/lib/OrdinaryDiffEqTaylorSeries/test/qa.jl +++ b/lib/OrdinaryDiffEqTaylorSeries/test/qa.jl @@ -10,4 +10,4 @@ using Aqua deps_compat = false, ambiguities = false ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqTaylorSeries/test/runtests.jl b/lib/OrdinaryDiffEqTaylorSeries/test/runtests.jl index 30824f51f2..078be76b6f 100644 --- a/lib/OrdinaryDiffEqTaylorSeries/test/runtests.jl +++ b/lib/OrdinaryDiffEqTaylorSeries/test/runtests.jl @@ -3,29 +3,29 @@ using Test @testset "Taylor2 Convergence Tests" begin # Test convergence - dts = 2. .^ (-8:-4) + dts = 2.0 .^ (-8:-4) testTol = 0.2 sim = test_convergence(dts, prob_ode_linear, ExplicitTaylor2()) - @test sim.𝒪est[:final]≈2 atol=testTol + @test sim.𝒪est[:final] ≈ 2 atol = testTol sim = test_convergence(dts, prob_ode_2Dlinear, ExplicitTaylor2()) - @test sim.𝒪est[:final]≈2 atol=testTol + @test sim.𝒪est[:final] ≈ 2 atol = testTol end @testset "TaylorN Convergence Tests" begin # Test convergence - dts = 2. .^ (-8:-4) + dts = 2.0 .^ (-8:-4) testTol = 0.2 for N in 3:4 - alg = ExplicitTaylor(order=Val(N)) + alg = ExplicitTaylor(order = Val(N)) sim = test_convergence(dts, prob_ode_linear, alg) - @test sim.𝒪est[:final]≈N atol=testTol + @test sim.𝒪est[:final] ≈ N atol = testTol sim = test_convergence(dts, prob_ode_2Dlinear, alg) - @test sim.𝒪est[:final]≈N atol=testTol + @test sim.𝒪est[:final] ≈ N atol = testTol end end @testset "TaylorN Adaptive Tests" begin - sol = solve(prob_ode_linear, ExplicitTaylor(order=Val(2))) + sol = solve(prob_ode_linear, ExplicitTaylor(order = Val(2))) @test length(sol) < 20 @test SciMLBase.successful_retcode(sol) end diff --git a/lib/OrdinaryDiffEqTsit5/src/OrdinaryDiffEqTsit5.jl b/lib/OrdinaryDiffEqTsit5/src/OrdinaryDiffEqTsit5.jl index e6460af005..870ebf2dd0 100644 --- a/lib/OrdinaryDiffEqTsit5/src/OrdinaryDiffEqTsit5.jl +++ b/lib/OrdinaryDiffEqTsit5/src/OrdinaryDiffEqTsit5.jl @@ -1,16 +1,16 @@ module OrdinaryDiffEqTsit5 import OrdinaryDiffEqCore: alg_order, alg_stability_size, explicit_rk_docstring, - OrdinaryDiffEqAdaptiveAlgorithm, OrdinaryDiffEqMutableCache, - alg_cache, - OrdinaryDiffEqConstantCache, @fold, trivial_limiter!, - constvalue, perform_step!, calculate_residuals, @cache, - calculate_residuals!, _ode_interpolant, _ode_interpolant!, - CompiledFloats, @OnDemandTableauExtract, initialize!, - perform_step!, - CompositeAlgorithm, _ode_addsteps!, copyat_or_push!, - AutoAlgSwitch, get_fsalfirstlast, - full_cache, DerivativeOrderNotPossibleError + OrdinaryDiffEqAdaptiveAlgorithm, OrdinaryDiffEqMutableCache, + alg_cache, + OrdinaryDiffEqConstantCache, @fold, trivial_limiter!, + constvalue, perform_step!, calculate_residuals, @cache, + calculate_residuals!, _ode_interpolant, _ode_interpolant!, + CompiledFloats, @OnDemandTableauExtract, initialize!, + perform_step!, + CompositeAlgorithm, _ode_addsteps!, copyat_or_push!, + AutoAlgSwitch, get_fsalfirstlast, + full_cache, DerivativeOrderNotPossibleError import Static: False import MuladdMacro: @muladd import FastBroadcast: @.. @@ -46,29 +46,51 @@ PrecompileTools.@compile_workload begin end if Preferences.@load_preference("PrecompileAutoSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.AutoSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.AutoSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0), Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.AutoSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0) + ) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.AutoSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0), Float64[] + ) + ) end if Preferences.@load_preference("PrecompileFunctionWrapperSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0), Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0) + ) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0), Float64[] + ) + ) end if Preferences.@load_preference("PrecompileNoSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), - Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0)) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.NoSpecialize}( + lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), + Float64[] + ) + ) end for prob in prob_list, solver in solver_list diff --git a/lib/OrdinaryDiffEqTsit5/src/algorithms.jl b/lib/OrdinaryDiffEqTsit5/src/algorithms.jl index 5f936d8fba..880ffd7611 100644 --- a/lib/OrdinaryDiffEqTsit5/src/algorithms.jl +++ b/lib/OrdinaryDiffEqTsit5/src/algorithms.jl @@ -11,9 +11,10 @@ year={2011}, publisher={Elsevier}, doi={10.1016/j.camwa.2011.06.002} - }") + }" +) Base.@kwdef struct Tsit5{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() @@ -21,7 +22,7 @@ end @truncate_stacktrace Tsit5 3 # for backwards compatibility function Tsit5(stage_limiter!, step_limiter! = trivial_limiter!) - Tsit5(stage_limiter!, step_limiter!, False()) + return Tsit5(stage_limiter!, step_limiter!, False()) end """ diff --git a/lib/OrdinaryDiffEqTsit5/src/interp_func.jl b/lib/OrdinaryDiffEqTsit5/src/interp_func.jl index 9c37164ea4..a87cfd7015 100644 --- a/lib/OrdinaryDiffEqTsit5/src/interp_func.jl +++ b/lib/OrdinaryDiffEqTsit5/src/interp_func.jl @@ -1,7 +1,11 @@ -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where { +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where { cacheType <: - Union{Tsit5Cache, Tsit5ConstantCache -}} - dense ? "specialized 4th order \"free\" interpolation" : "1st order linear" + Union{ + Tsit5Cache, Tsit5ConstantCache, + }, + } + return dense ? "specialized 4th order \"free\" interpolation" : "1st order linear" end diff --git a/lib/OrdinaryDiffEqTsit5/src/interpolants.jl b/lib/OrdinaryDiffEqTsit5/src/interpolants.jl index c6e93e36f2..581d298e26 100644 --- a/lib/OrdinaryDiffEqTsit5/src/interpolants.jl +++ b/lib/OrdinaryDiffEqTsit5/src/interpolants.jl @@ -1,14 +1,18 @@ RK_WITH_SPECIAL_INTERPOLATIONS = Union{Tsit5ConstantCache, Tsit5Cache} -function _ode_interpolant(Θ, dt, y₀, y₁, k, +function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::RK_WITH_SPECIAL_INTERPOLATIONS, - idxs, T::Type{Val{D}}, differential_vars) where {D} + idxs, T::Type{Val{D}}, differential_vars + ) where {D} throw(DerivativeOrderNotPossibleError()) end -function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::RK_WITH_SPECIAL_INTERPOLATIONS, - idxs, T::Type{Val{D}}, differential_vars) where {D} + idxs, T::Type{Val{D}}, differential_vars + ) where {D} throw(DerivativeOrderNotPossibleError()) end @@ -35,139 +39,177 @@ end b7Θ = Θ² * @evalpoly(Θ, r72, r73, r74) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::Tsit5ConstantCache, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Tsit5ConstantCache, + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @tsit5pre0 #@.. broadcast=false y₀ + dt*(k[1]*b1Θ + k[2]*b2Θ + k[3]*b3Θ + k[4]*b4Θ + k[5]*b5Θ + k[6]*b6Θ + k[7]*b7Θ) return @inbounds y₀ + - dt * (k[1] * b1Θ + k[2] * b2Θ + k[3] * b3Θ + k[4] * b4Θ + - k[5] * b5Θ + k[6] * b6Θ + k[7] * b7Θ) + dt * ( + k[1] * b1Θ + k[2] * b2Θ + k[3] * b3Θ + k[4] * b4Θ + + k[5] * b5Θ + k[6] * b6Θ + k[7] * b7Θ + ) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::Tsit5Cache, idxs::Nothing, - T::Type{Val{0}}, differential_vars::Nothing) +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Tsit5Cache, idxs::Nothing, + T::Type{Val{0}}, differential_vars::Nothing + ) @tsit5pre0 - return @inbounds @.. broadcast=false y₀+dt * (k[1] * b1Θ + k[2] * b2Θ + k[3] * b3Θ + - k[4] * b4Θ + - k[5] * b5Θ + k[6] * b6Θ + k[7] * b7Θ) + return @inbounds @.. broadcast = false y₀ + dt * ( + k[1] * b1Θ + k[2] * b2Θ + k[3] * b3Θ + + k[4] * b4Θ + + k[5] * b5Θ + k[6] * b6Θ + k[7] * b7Θ + ) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @tsit5pre0 return y₀[idxs] + - dt * (k[1][idxs] * b1Θ + k[2][idxs] * b2Θ + k[3][idxs] * b3Θ + - k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + k[6][idxs] * b6Θ + k[7][idxs] * b7Θ) + dt * ( + k[1][idxs] * b1Θ + k[2][idxs] * b2Θ + k[3][idxs] * b3Θ + + k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + k[6][idxs] * b6Θ + k[7][idxs] * b7Θ + ) end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @tsit5pre0 - @inbounds @.. broadcast=false out=y₀ + - dt * - (k[1] * b1Θ + k[2] * b2Θ + k[3] * b3Θ + k[4] * b4Θ + - k[5] * b5Θ + k[6] * b6Θ + k[7] * b7Θ) + @inbounds @.. broadcast = false out = y₀ + + dt * + ( + k[1] * b1Θ + k[2] * b2Θ + k[3] * b3Θ + k[4] * b4Θ + + k[5] * b5Θ + k[6] * b6Θ + k[7] * b7Θ + ) out end -@muladd function _ode_interpolant!(out::Array, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out::Array, Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @tsit5pre0 @inbounds @simd ivdep for i in eachindex(out) out[i] = y₀[i] + - dt * (k[1][i] * b1Θ + k[2][i] * b2Θ + k[3][i] * b3Θ + k[4][i] * b4Θ + - k[5][i] * b5Θ + k[6][i] * b6Θ + k[7][i] * b7Θ) + dt * ( + k[1][i] * b1Θ + k[2][i] * b2Θ + k[3][i] * b3Θ + k[4][i] * b4Θ + + k[5][i] * b5Θ + k[6][i] * b6Θ + k[7][i] * b7Θ + ) end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @tsit5pre0 - @views @.. broadcast=false out=y₀[idxs] + - dt * - (k[1][idxs] * b1Θ + k[2][idxs] * b2Θ + k[3][idxs] * b3Θ + - k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + k[6][idxs] * b6Θ + - k[7][idxs] * b7Θ) + @views @.. broadcast = false out = y₀[idxs] + + dt * + ( + k[1][idxs] * b1Θ + k[2][idxs] * b2Θ + k[3][idxs] * b3Θ + + k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + k[6][idxs] * b6Θ + + k[7][idxs] * b7Θ + ) #@inbounds for (j,i) in enumerate(idxs) # out[j] = y₀[i] + dt*(k[1][i]*b1Θ + k[2][i]*b2Θ + k[3][i]*b3Θ + k[4][i]*b4Θ + k[5][i]*b5Θ + k[6][i]*b6Θ + k[7][i]*b7Θ) #end out end -@muladd function _ode_interpolant!(out::Array, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out::Array, Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @tsit5pre0 @inbounds for (j, i) in enumerate(idxs) out[j] = y₀[i] + - dt * (k[1][i] * b1Θ + k[2][i] * b2Θ + k[3][i] * b3Θ + k[4][i] * b4Θ + - k[5][i] * b5Θ + k[6][i] * b6Θ + k[7][i] * b7Θ) + dt * ( + k[1][i] * b1Θ + k[2][i] * b2Θ + k[3][i] * b3Θ + k[4][i] * b4Θ + + k[5][i] * b5Θ + k[6][i] * b6Θ + k[7][i] * b7Θ + ) end out end @def tsit5pre1 begin @tsit5unpack - b1Θdiff = @evalpoly(Θ, r11, 2*r12, 3*r13, 4*r14) - b2Θdiff = Θ * @evalpoly(Θ, 2*r22, 3*r23, 4*r24) - b3Θdiff = Θ * @evalpoly(Θ, 2*r32, 3*r33, 4*r34) - b4Θdiff = Θ * @evalpoly(Θ, 2*r42, 3*r43, 4*r44) - b5Θdiff = Θ * @evalpoly(Θ, 2*r52, 3*r53, 4*r54) - b6Θdiff = Θ * @evalpoly(Θ, 2*r62, 3*r63, 4*r64) - b7Θdiff = Θ * @evalpoly(Θ, 2*r72, 3*r73, 4*r74) -end - -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::Tsit5ConstantCache, - idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing) + b1Θdiff = @evalpoly(Θ, r11, 2 * r12, 3 * r13, 4 * r14) + b2Θdiff = Θ * @evalpoly(Θ, 2 * r22, 3 * r23, 4 * r24) + b3Θdiff = Θ * @evalpoly(Θ, 2 * r32, 3 * r33, 4 * r34) + b4Θdiff = Θ * @evalpoly(Θ, 2 * r42, 3 * r43, 4 * r44) + b5Θdiff = Θ * @evalpoly(Θ, 2 * r52, 3 * r53, 4 * r54) + b6Θdiff = Θ * @evalpoly(Θ, 2 * r62, 3 * r63, 4 * r64) + b7Θdiff = Θ * @evalpoly(Θ, 2 * r72, 3 * r73, 4 * r74) +end + +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Tsit5ConstantCache, + idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing + ) @tsit5pre1 # return @.. broadcast=false k[1]*b1Θdiff + k[2]*b2Θdiff + k[3]*b3Θdiff + k[4]*b4Θdiff + k[5]*b5Θdiff + k[6]*b6Θdiff + k[7]*b7Θdiff return @inbounds k[1] * b1Θdiff + k[2] * b2Θdiff + k[3] * b3Θdiff + k[4] * b4Θdiff + - k[5] * b5Θdiff + k[6] * b6Θdiff + k[7] * b7Θdiff + k[5] * b5Θdiff + k[6] * b6Θdiff + k[7] * b7Θdiff end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::Tsit5Cache, idxs::Nothing, - T::Type{Val{1}}, differential_vars::Nothing) +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Tsit5Cache, idxs::Nothing, + T::Type{Val{1}}, differential_vars::Nothing + ) @tsit5pre1 - return @inbounds @.. broadcast=false k[1]*b1Θdiff+k[2]*b2Θdiff+k[3]*b3Θdiff+ - k[4]*b4Θdiff+k[5]*b5Θdiff+k[6]*b6Θdiff+k[7]*b7Θdiff + return @inbounds @.. broadcast = false k[1] * b1Θdiff + k[2] * b2Θdiff + k[3] * b3Θdiff + + k[4] * b4Θdiff + k[5] * b5Θdiff + k[6] * b6Θdiff + k[7] * b7Θdiff end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, idxs, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) @tsit5pre1 # return @.. broadcast=false k[1][idxs]*b1Θdiff + k[2][idxs]*b2Θdiff + k[3][idxs]*b3Θdiff + k[4][idxs]*b4Θdiff + k[5][idxs]*b5Θdiff + k[6][idxs]*b6Θdiff + k[7][idxs]*b7Θdiff return k[1][idxs] * b1Θdiff + k[2][idxs] * b2Θdiff + k[3][idxs] * b3Θdiff + - k[4][idxs] * b4Θdiff + k[5][idxs] * b5Θdiff + k[6][idxs] * b6Θdiff + - k[7][idxs] * b7Θdiff + k[4][idxs] * b4Θdiff + k[5][idxs] * b5Θdiff + k[6][idxs] * b6Θdiff + + k[7][idxs] * b7Θdiff end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, - idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing + ) @tsit5pre1 - @inbounds @.. broadcast=false out=k[1] * b1Θdiff + k[2] * b2Θdiff + k[3] * b3Θdiff + - k[4] * b4Θdiff + k[5] * b5Θdiff + k[6] * b6Θdiff + - k[7] * b7Θdiff + @inbounds @.. broadcast = false out = k[1] * b1Θdiff + k[2] * b2Θdiff + k[3] * b3Θdiff + + k[4] * b4Θdiff + k[5] * b5Θdiff + k[6] * b6Θdiff + + k[7] * b7Θdiff #@inbounds for i in eachindex(out) # out[i] = k[1][i]*b1Θdiff + k[2][i]*b2Θdiff + k[3][i]*b3Θdiff + k[4][i]*b4Θdiff + k[5][i]*b5Θdiff + k[6][i]*b6Θdiff + k[7][i]*b7Θdiff #end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, idxs, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) @tsit5pre1 - @views @.. broadcast=false out=k[1][idxs] * b1Θdiff + k[2][idxs] * b2Θdiff + - k[3][idxs] * b3Θdiff + k[4][idxs] * b4Θdiff + - k[5][idxs] * b5Θdiff + k[6][idxs] * b6Θdiff + - k[7][idxs] * b7Θdiff + @views @.. broadcast = false out = k[1][idxs] * b1Θdiff + k[2][idxs] * b2Θdiff + + k[3][idxs] * b3Θdiff + k[4][idxs] * b4Θdiff + + k[5][idxs] * b5Θdiff + k[6][idxs] * b6Θdiff + + k[7][idxs] * b7Θdiff #@inbounds for (j,i) in enumerate(idxs) # out[j] = k[1][i]*b1Θdiff + k[2][i]*b2Θdiff + k[3][i]*b3Θdiff + k[4][i]*b4Θdiff + k[5][i]*b5Θdiff + k[6][i]*b6Θdiff + k[7][i]*b7Θdiff #end @@ -176,57 +218,73 @@ end @def tsit5pre2 begin @tsit5unpack - b1Θdiff2 = @evalpoly(Θ, 2*r12, 6*r13, 12*r14) - b2Θdiff2 = @evalpoly(Θ, 2*r22, 6*r23, 12*r24) - b3Θdiff2 = @evalpoly(Θ, 2*r32, 6*r33, 12*r34) - b4Θdiff2 = @evalpoly(Θ, 2*r42, 6*r43, 12*r44) - b5Θdiff2 = @evalpoly(Θ, 2*r52, 6*r53, 12*r54) - b6Θdiff2 = @evalpoly(Θ, 2*r62, 6*r63, 12*r64) - b7Θdiff2 = @evalpoly(Θ, 2*r72, 6*r73, 12*r74) + b1Θdiff2 = @evalpoly(Θ, 2 * r12, 6 * r13, 12 * r14) + b2Θdiff2 = @evalpoly(Θ, 2 * r22, 6 * r23, 12 * r24) + b3Θdiff2 = @evalpoly(Θ, 2 * r32, 6 * r33, 12 * r34) + b4Θdiff2 = @evalpoly(Θ, 2 * r42, 6 * r43, 12 * r44) + b5Θdiff2 = @evalpoly(Θ, 2 * r52, 6 * r53, 12 * r54) + b6Θdiff2 = @evalpoly(Θ, 2 * r62, 6 * r63, 12 * r64) + b7Θdiff2 = @evalpoly(Θ, 2 * r72, 6 * r73, 12 * r74) invdt = inv(dt) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, - idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing + ) @tsit5pre2 # return @.. broadcast=false k[1]*b1Θdiff2 + k[2]*b2Θdiff2 + k[3]*b3Θdiff2 + k[4]*b4Θdiff2 + k[5]*b5Θdiff2 + k[6]*b6Θdiff2 + k[7]*b7Θdiff2 - return @inbounds (k[1] * b1Θdiff2 + k[2] * b2Θdiff2 + k[3] * b3Θdiff2 + - k[4] * b4Θdiff2 + - k[5] * b5Θdiff2 + k[6] * b6Θdiff2 + k[7] * b7Θdiff2) * invdt + return @inbounds ( + k[1] * b1Θdiff2 + k[2] * b2Θdiff2 + k[3] * b3Θdiff2 + + k[4] * b4Θdiff2 + + k[5] * b5Θdiff2 + k[6] * b6Θdiff2 + k[7] * b7Θdiff2 + ) * invdt end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, idxs, - T::Type{Val{2}}, differential_vars::Nothing) + T::Type{Val{2}}, differential_vars::Nothing + ) @tsit5pre2 # return @.. broadcast=false k[1][idxs]*b1Θdiff2 + k[2][idxs]*b2Θdiff2 + k[3][idxs]*b3Θdiff2 + k[4][idxs]*b4Θdiff2 + k[5][idxs]*b5Θdiff2 + k[6][idxs]*b6Θdiff2 + k[7][idxs]*b7Θdiff2 - return (k[1][idxs] * b1Θdiff2 + k[2][idxs] * b2Θdiff2 + k[3][idxs] * b3Θdiff2 + + return ( + k[1][idxs] * b1Θdiff2 + k[2][idxs] * b2Θdiff2 + k[3][idxs] * b3Θdiff2 + k[4][idxs] * b4Θdiff2 + k[5][idxs] * b5Θdiff2 + k[6][idxs] * b6Θdiff2 + - k[7][idxs] * b7Θdiff2) * invdt + k[7][idxs] * b7Θdiff2 + ) * invdt end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, - idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing + ) @tsit5pre2 - @inbounds @.. broadcast=false out=(k[1] * b1Θdiff2 + k[2] * b2Θdiff2 + k[3] * b3Θdiff2 + - k[4] * b4Θdiff2 + k[5] * b5Θdiff2 + k[6] * b6Θdiff2 + - k[7] * b7Θdiff2) * invdt + @inbounds @.. broadcast = false out = ( + k[1] * b1Θdiff2 + k[2] * b2Θdiff2 + k[3] * b3Θdiff2 + + k[4] * b4Θdiff2 + k[5] * b5Θdiff2 + k[6] * b6Θdiff2 + + k[7] * b7Θdiff2 + ) * invdt #@inbounds for i in eachindex(out) # out[i] = (k[1][i]*b1Θdiff2 + k[2][i]*b2Θdiff2 + k[3][i]*b3Θdiff2 + k[4][i]*b4Θdiff2 + k[5][i]*b5Θdiff2 + k[6][i]*b6Θdiff2 + k[7][i]*b7Θdiff2)*invdt #end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, idxs, - T::Type{Val{2}}, differential_vars::Nothing) + T::Type{Val{2}}, differential_vars::Nothing + ) @tsit5pre2 - @views @.. broadcast=false out=(k[1][idxs] * b1Θdiff2 + k[2][idxs] * b2Θdiff2 + - k[3][idxs] * b3Θdiff2 + k[4][idxs] * b4Θdiff2 + - k[5][idxs] * b5Θdiff2 + k[6][idxs] * b6Θdiff2 + - k[7][idxs] * b7Θdiff2) * invdt + @views @.. broadcast = false out = ( + k[1][idxs] * b1Θdiff2 + k[2][idxs] * b2Θdiff2 + + k[3][idxs] * b3Θdiff2 + k[4][idxs] * b4Θdiff2 + + k[5][idxs] * b5Θdiff2 + k[6][idxs] * b6Θdiff2 + + k[7][idxs] * b7Θdiff2 + ) * invdt #@inbounds for (j,i) in enumerate(idxs) # out[j] = (k[1][i]*b1Θdiff2 + k[2][i]*b2Θdiff2 + k[3][i]*b3Θdiff2 + k[4][i]*b4Θdiff2 + k[5][i]*b5Θdiff2 + k[6][i]*b6Θdiff2 + k[7][i]*b7Θdiff2)*invdt #end @@ -235,57 +293,73 @@ end @def tsit5pre3 begin @tsit5unpack - b1Θdiff3 = @evalpoly(Θ, 6*r13, 24*r14) - b2Θdiff3 = @evalpoly(Θ, 6*r23, 24*r24) - b3Θdiff3 = @evalpoly(Θ, 6*r33, 24*r34) - b4Θdiff3 = @evalpoly(Θ, 6*r43, 24*r44) - b5Θdiff3 = @evalpoly(Θ, 6*r53, 24*r54) - b6Θdiff3 = @evalpoly(Θ, 6*r63, 24*r64) - b7Θdiff3 = @evalpoly(Θ, 6*r73, 24*r74) + b1Θdiff3 = @evalpoly(Θ, 6 * r13, 24 * r14) + b2Θdiff3 = @evalpoly(Θ, 6 * r23, 24 * r24) + b3Θdiff3 = @evalpoly(Θ, 6 * r33, 24 * r34) + b4Θdiff3 = @evalpoly(Θ, 6 * r43, 24 * r44) + b5Θdiff3 = @evalpoly(Θ, 6 * r53, 24 * r54) + b6Θdiff3 = @evalpoly(Θ, 6 * r63, 24 * r64) + b7Θdiff3 = @evalpoly(Θ, 6 * r73, 24 * r74) invdt2 = inv(dt)^2 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, - idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing + ) @tsit5pre3 # return @.. broadcast=false k[1]*b1Θdiff3 + k[2]*b2Θdiff3 + k[3]*b3Θdiff3 + k[4]*b4Θdiff3 + k[5]*b5Θdiff3 + k[6]*b6Θdiff3 + k[7]*b7Θdiff3 - return @inbounds (k[1] * b1Θdiff3 + k[2] * b2Θdiff3 + k[3] * b3Θdiff3 + - k[4] * b4Θdiff3 + - k[5] * b5Θdiff3 + k[6] * b6Θdiff3 + k[7] * b7Θdiff3) * invdt2 + return @inbounds ( + k[1] * b1Θdiff3 + k[2] * b2Θdiff3 + k[3] * b3Θdiff3 + + k[4] * b4Θdiff3 + + k[5] * b5Θdiff3 + k[6] * b6Θdiff3 + k[7] * b7Θdiff3 + ) * invdt2 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, idxs, - T::Type{Val{3}}, differential_vars::Nothing) + T::Type{Val{3}}, differential_vars::Nothing + ) @tsit5pre3 # return @.. broadcast=false k[1][idxs]*b1Θdiff3 + k[2][idxs]*b2Θdiff3 + k[3][idxs]*b3Θdiff3 + k[4][idxs]*b4Θdiff3 + k[5][idxs]*b5Θdiff3 + k[6][idxs]*b6Θdiff3 + k[7][idxs]*b7Θdiff3 - return (k[1][idxs] * b1Θdiff3 + k[2][idxs] * b2Θdiff3 + k[3][idxs] * b3Θdiff3 + + return ( + k[1][idxs] * b1Θdiff3 + k[2][idxs] * b2Θdiff3 + k[3][idxs] * b3Θdiff3 + k[4][idxs] * b4Θdiff3 + k[5][idxs] * b5Θdiff3 + k[6][idxs] * b6Θdiff3 + - k[7][idxs] * b7Θdiff3) * invdt2 + k[7][idxs] * b7Θdiff3 + ) * invdt2 end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, - idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing + ) @tsit5pre3 - @inbounds @.. broadcast=false out=(k[1] * b1Θdiff3 + k[2] * b2Θdiff3 + k[3] * b3Θdiff3 + - k[4] * b4Θdiff3 + k[5] * b5Θdiff3 + k[6] * b6Θdiff3 + - k[7] * b7Θdiff3) * invdt2 + @inbounds @.. broadcast = false out = ( + k[1] * b1Θdiff3 + k[2] * b2Θdiff3 + k[3] * b3Θdiff3 + + k[4] * b4Θdiff3 + k[5] * b5Θdiff3 + k[6] * b6Θdiff3 + + k[7] * b7Θdiff3 + ) * invdt2 #@inbounds for i in eachindex(out) # out[i] = (k[1][i]*b1Θdiff3 + k[2][i]*b2Θdiff3 + k[3][i]*b3Θdiff3 + k[4][i]*b4Θdiff3 + k[5][i]*b5Θdiff3 + k[6][i]*b6Θdiff3 + k[7][i]*b7Θdiff3)*invdt2 #end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, idxs, - T::Type{Val{3}}, differential_vars::Nothing) + T::Type{Val{3}}, differential_vars::Nothing + ) @tsit5pre3 - @views @.. broadcast=false out=(k[1][idxs] * b1Θdiff3 + k[2][idxs] * b2Θdiff3 + - k[3][idxs] * b3Θdiff3 + k[4][idxs] * b4Θdiff3 + - k[5][idxs] * b5Θdiff3 + k[6][idxs] * b6Θdiff3 + - k[7][idxs] * b7Θdiff3) * invdt2 + @views @.. broadcast = false out = ( + k[1][idxs] * b1Θdiff3 + k[2][idxs] * b2Θdiff3 + + k[3][idxs] * b3Θdiff3 + k[4][idxs] * b4Θdiff3 + + k[5][idxs] * b5Θdiff3 + k[6][idxs] * b6Θdiff3 + + k[7][idxs] * b7Θdiff3 + ) * invdt2 #@inbounds for (j,i) in enumerate(idxs) # out[j] = (k[1][i]*b1Θdiff3 + k[2][i]*b2Θdiff3 + k[3][i]*b3Θdiff3 + k[4][i]*b4Θdiff3 + k[5][i]*b5Θdiff3 + k[6][i]*b6Θdiff3 + k[7][i]*b7Θdiff3)*invdt2 #end @@ -304,47 +378,63 @@ end invdt3 = inv(dt)^3 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, - idxs::Nothing, T::Type{Val{4}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{4}}, differential_vars::Nothing + ) @tsit5pre4 # return @.. broadcast=false k[1]*b1Θdiff4 + k[2]*b2Θdiff4 + k[3]*b3Θdiff4 + k[4]*b4Θdiff4 + k[5]*b5Θdiff4 + k[6]*b6Θdiff4 + k[7]*b7Θdiff4 - return @inbounds (k[1] * b1Θdiff4 + k[2] * b2Θdiff4 + k[3] * b3Θdiff4 + - k[4] * b4Θdiff4 + - k[5] * b5Θdiff4 + k[6] * b6Θdiff4 + k[7] * b7Θdiff4) * invdt3 + return @inbounds ( + k[1] * b1Θdiff4 + k[2] * b2Θdiff4 + k[3] * b3Θdiff4 + + k[4] * b4Θdiff4 + + k[5] * b5Θdiff4 + k[6] * b6Θdiff4 + k[7] * b7Θdiff4 + ) * invdt3 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, idxs, - T::Type{Val{4}}, differential_vars::Nothing) + T::Type{Val{4}}, differential_vars::Nothing + ) @tsit5pre4 # return @.. broadcast=false k[1][idxs]*b1Θdiff4 + k[2][idxs]*b2Θdiff4 + k[3][idxs]*b3Θdiff4 + k[4][idxs]*b4Θdiff4 + k[5][idxs]*b5Θdiff4 + k[6][idxs]*b6Θdiff4 + k[7][idxs]*b7Θdiff4 - return (k[1][idxs] * b1Θdiff4 + k[2][idxs] * b2Θdiff4 + k[3][idxs] * b3Θdiff4 + + return ( + k[1][idxs] * b1Θdiff4 + k[2][idxs] * b2Θdiff4 + k[3][idxs] * b3Θdiff4 + k[4][idxs] * b4Θdiff4 + k[5][idxs] * b5Θdiff4 + k[6][idxs] * b6Θdiff4 + - k[7][idxs] * b7Θdiff4) * invdt3 + k[7][idxs] * b7Θdiff4 + ) * invdt3 end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, - idxs::Nothing, T::Type{Val{4}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{4}}, differential_vars::Nothing + ) @tsit5pre4 - @inbounds @.. broadcast=false out=(k[1] * b1Θdiff4 + k[2] * b2Θdiff4 + k[3] * b3Θdiff4 + - k[4] * b4Θdiff4 + k[5] * b5Θdiff4 + k[6] * b6Θdiff4 + - k[7] * b7Θdiff4) * invdt3 + @inbounds @.. broadcast = false out = ( + k[1] * b1Θdiff4 + k[2] * b2Θdiff4 + k[3] * b3Θdiff4 + + k[4] * b4Θdiff4 + k[5] * b5Θdiff4 + k[6] * b6Θdiff4 + + k[7] * b7Θdiff4 + ) * invdt3 #@inbounds for i in eachindex(out) # out[i] = (k[1][i]*b1Θdiff4 + k[2][i]*b2Θdiff4 + k[3][i]*b3Θdiff4 + k[4][i]*b4Θdiff4 + k[5][i]*b5Θdiff4 + k[6][i]*b6Θdiff4 + k[7][i]*b7Θdiff4)*invdt3 #end out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Tsit5ConstantCache, Tsit5Cache}, idxs, - T::Type{Val{4}}, differential_vars::Nothing) + T::Type{Val{4}}, differential_vars::Nothing + ) @tsit5pre4 - @views @.. broadcast=false out=(k[1][idxs] * b1Θdiff4 + k[2][idxs] * b2Θdiff4 + - k[3][idxs] * b3Θdiff4 + k[4][idxs] * b4Θdiff4 + - k[5][idxs] * b5Θdiff4 + k[6][idxs] * b6Θdiff4 + - k[7][idxs] * b7Θdiff4) * invdt3 + @views @.. broadcast = false out = ( + k[1][idxs] * b1Θdiff4 + k[2][idxs] * b2Θdiff4 + + k[3][idxs] * b3Θdiff4 + k[4][idxs] * b4Θdiff4 + + k[5][idxs] * b5Θdiff4 + k[6][idxs] * b6Θdiff4 + + k[7][idxs] * b7Θdiff4 + ) * invdt3 #@inbounds for (j,i) in enumerate(idxs) # out[j] = (k[1][i]*b1Θdiff4 + k[2][i]*b2Θdiff4 + k[3][i]*b3Θdiff4 + k[4][i]*b4Θdiff4 + k[5][i]*b5Θdiff4 + k[6][i]*b6Θdiff4 + k[7][i]*b7Θdiff4)*invdt3 #end diff --git a/lib/OrdinaryDiffEqTsit5/src/tsit_caches.jl b/lib/OrdinaryDiffEqTsit5/src/tsit_caches.jl index 040f9a9869..a76313fb2e 100644 --- a/lib/OrdinaryDiffEqTsit5/src/tsit_caches.jl +++ b/lib/OrdinaryDiffEqTsit5/src/tsit_caches.jl @@ -1,5 +1,7 @@ -@cache struct Tsit5Cache{uType, rateType, uNoUnitsType, StageLimiter, StepLimiter, - Thread} <: OrdinaryDiffEqMutableCache +@cache struct Tsit5Cache{ + uType, rateType, uNoUnitsType, StageLimiter, StepLimiter, + Thread, + } <: OrdinaryDiffEqMutableCache u::uType uprev::uType k1::rateType @@ -17,10 +19,12 @@ thread::Thread end -function alg_cache(alg::Tsit5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Tsit5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k1 = zero(rate_prototype) k2 = zero(rate_prototype) k3 = zero(rate_prototype) @@ -32,15 +36,19 @@ function alg_cache(alg::Tsit5, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) tmp = zero(u) - Tsit5Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, utilde, tmp, atmp, - alg.stage_limiter!, alg.step_limiter!, alg.thread) + return Tsit5Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, utilde, tmp, atmp, + alg.stage_limiter!, alg.step_limiter!, alg.thread + ) end get_fsalfirstlast(cache::Tsit5Cache, u) = (cache.k1, cache.k7) -function alg_cache(alg::Tsit5, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Tsit5, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - Tsit5ConstantCache() + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return Tsit5ConstantCache() end diff --git a/lib/OrdinaryDiffEqTsit5/src/tsit_perform_step.jl b/lib/OrdinaryDiffEqTsit5/src/tsit_perform_step.jl index 8c0745ed03..13f84e3dac 100644 --- a/lib/OrdinaryDiffEqTsit5/src/tsit_perform_step.jl +++ b/lib/OrdinaryDiffEqTsit5/src/tsit_perform_step.jl @@ -1,26 +1,30 @@ -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::Tsit5Cache, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::Tsit5Cache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 7 || always_calc_begin T = constvalue(recursive_unitless_bottom_eltype(u)) T2 = constvalue(typeof(one(t))) @OnDemandTableauExtract Tsit5ConstantCacheActual T T2 (; k1, k2, k3, k4, k5, k6, k7, tmp) = cache - @.. broadcast=false tmp=uprev + dt * (a21 * k1) + @.. broadcast = false tmp = uprev + dt * (a21 * k1) f(k2, tmp, p, t + c1 * dt) - @.. broadcast=false tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false tmp = uprev + dt * (a31 * k1 + a32 * k2) f(k3, tmp, p, t + c2 * dt) - @.. broadcast=false tmp=uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) + @.. broadcast = false tmp = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) f(k4, tmp, p, t + c3 * dt) - @.. broadcast=false tmp=uprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) + @.. broadcast = false tmp = uprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) f(k5, tmp, p, t + c4 * dt) - @.. broadcast=false tmp=uprev + - dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5) + @.. broadcast = false tmp = uprev + + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5) f(k6, tmp, p, t + dt) - @.. broadcast=false tmp=uprev + - dt * - (a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + a75 * k5 + - a76 * k6) + @.. broadcast = false tmp = uprev + + dt * + ( + a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + a75 * k5 + + a76 * k6 + ) f(k7, tmp, p, t + dt) copyat_or_push!(k, 1, k1) copyat_or_push!(k, 2, k2) @@ -33,9 +37,11 @@ nothing end -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::Tsit5ConstantCache, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::Tsit5ConstantCache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 7 || always_calc_begin T = constvalue(recursive_unitless_bottom_eltype(u)) T2 = constvalue(typeof(one(t))) @@ -43,21 +49,32 @@ end copyat_or_push!(k, 1, f(uprev, p, t)) copyat_or_push!(k, 2, f(uprev + dt * (a21 * k[1]), p, t + c1 * dt)) copyat_or_push!(k, 3, f(uprev + dt * (a31 * k[1] + a32 * k[2]), p, t + c2 * dt)) - copyat_or_push!(k, 4, - f(uprev + dt * (a41 * k[1] + a42 * k[2] + a43 * k[3]), p, - t + c3 * dt)) - copyat_or_push!(k, 5, - f(uprev + dt * (a51 * k[1] + a52 * k[2] + a53 * k[3] + a54 * k[4]), - p, t + c4 * dt)) - copyat_or_push!(k, 6, + copyat_or_push!( + k, 4, + f( + uprev + dt * (a41 * k[1] + a42 * k[2] + a43 * k[3]), p, + t + c3 * dt + ) + ) + copyat_or_push!( + k, 5, + f( + uprev + dt * (a51 * k[1] + a52 * k[2] + a53 * k[3] + a54 * k[4]), + p, t + c4 * dt + ) + ) + copyat_or_push!( + k, 6, f( uprev + - dt * - (a61 * k[1] + a62 * k[2] + a63 * k[3] + a64 * k[4] + a65 * k[5]), - p, t + dt)) + dt * + (a61 * k[1] + a62 * k[2] + a63 * k[3] + a64 * k[4] + a65 * k[5]), + p, t + dt + ) + ) utmp = uprev + - dt * - (a71 * k[1] + a72 * k[2] + a73 * k[3] + a74 * k[4] + a75 * k[5] + a76 * k[6]) + dt * + (a71 * k[1] + a72 * k[2] + a73 * k[3] + a74 * k[4] + a75 * k[5] + a76 * k[6]) copyat_or_push!(k, 7, f(utmp, p, t + dt)) end nothing @@ -117,7 +134,7 @@ function initialize!(integrator, cache::Tsit5ConstantCache) @inbounds for i in 2:(integrator.kshortsize - 1) integrator.k[i] = zero(integrator.fsalfirst) end - integrator.k[integrator.kshortsize] = integrator.fsallast + return integrator.k[integrator.kshortsize] = integrator.fsallast end @muladd function perform_step!(integrator, cache::Tsit5ConstantCache, repeat_step = false) @@ -141,14 +158,19 @@ end g7 = u # Hairer II, page 22 modified to use the Inf norm integrator.eigen_est = integrator.opts.internalnorm( - maximum(abs.((k7 .- k6) ./ (g7 .- g6))), t) + maximum(abs.((k7 .- k6) ./ (g7 .- g6))), t + ) end if integrator.opts.adaptive utilde = dt * - (btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + - btilde6 * k6 + btilde7 * k7) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + ( + btilde1 * k1 + btilde2 * k2 + btilde3 * k3 + btilde4 * k4 + btilde5 * k5 + + btilde6 * k6 + btilde7 * k7 + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = k1 @@ -184,27 +206,31 @@ end @OnDemandTableauExtract Tsit5ConstantCacheActual T T2 (; k1, k2, k3, k4, k5, k6, k7, utilde, tmp, atmp, stage_limiter!, step_limiter!, thread) = cache a = dt * a21 - @.. broadcast=false thread=thread tmp=uprev + a * k1 + @.. broadcast = false thread = thread tmp = uprev + a * k1 stage_limiter!(tmp, f, p, t + c1 * dt) f(k2, tmp, p, t + c1 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a31 * k1 + a32 * k2) stage_limiter!(tmp, f, p, t + c2 * dt) f(k3, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) stage_limiter!(tmp, f, p, t + c3 * dt) f(k4, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) stage_limiter!(tmp, f, p, t + c4 * dt) f(k5, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + - a65 * k5) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + + a65 * k5 + ) stage_limiter!(tmp, f, p, t + dt) f(k6, tmp, p, t + dt) - @.. broadcast=false thread=thread u=uprev + - dt * (a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + - a75 * k5 + a76 * k6) + @.. broadcast = false thread = thread u = uprev + + dt * ( + a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + + a75 * k5 + a76 * k6 + ) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) f(k7, u, p, t + dt) @@ -213,17 +239,21 @@ end g7 = u g6 = tmp # Hairer II, page 22 modified to use Inf norm - @.. broadcast=false thread=thread utilde=abs((k7 - k6) / (g7 - g6)) + @.. broadcast = false thread = thread utilde = abs((k7 - k6) / (g7 - g6)) integrator.eigen_est = integrator.opts.internalnorm(norm(utilde, Inf), t) end if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde2 * k2 + - btilde3 * k3 + btilde4 * k4 + - btilde5 * k5 + btilde6 * k6 + - btilde7 * k7) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * ( + btilde1 * k1 + btilde2 * k2 + + btilde3 * k3 + btilde4 * k4 + + btilde5 * k5 + btilde6 * k6 + + btilde7 * k7 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end return nothing diff --git a/lib/OrdinaryDiffEqTsit5/src/tsit_tableaus.jl b/lib/OrdinaryDiffEqTsit5/src/tsit_tableaus.jl index 6fea90c0fa..cbd677a60e 100644 --- a/lib/OrdinaryDiffEqTsit5/src/tsit_tableaus.jl +++ b/lib/OrdinaryDiffEqTsit5/src/tsit_tableaus.jl @@ -36,9 +36,13 @@ struct Tsit5ConstantCacheActual{T, T2} btilde7::T end -@fold function Tsit5ConstantCacheActual(::Type{T}, - ::Type{T2}) where {T <: CompiledFloats, - T2 <: CompiledFloats} +@fold function Tsit5ConstantCacheActual( + ::Type{T}, + ::Type{T2} + ) where { + T <: CompiledFloats, + T2 <: CompiledFloats, + } c1 = convert(T2, 0.161) c2 = convert(T2, 0.327) c3 = convert(T2, 0.9) @@ -86,57 +90,98 @@ end a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, btilde1, - btilde2, btilde3, btilde4, btilde5, btilde6, btilde7) + btilde2, btilde3, btilde4, btilde5, btilde6, btilde7 + ) end @fold function Tsit5ConstantCacheActual(::Type{T}, ::Type{T2}) where {T, T2} c1 = convert(T2, 161 // 1000) c2 = convert(T2, 327 // 1000) c3 = convert(T2, 9 // 10) - c4 = convert(T2, - big".9800255409045096857298102862870245954942137979563024768854764293221195950761080302604") + c4 = convert( + T2, + big".9800255409045096857298102862870245954942137979563024768854764293221195950761080302604" + ) c5 = convert(T2, 1) c6 = convert(T2, 1) a21 = convert(T, 161 // 1000) - a31 = convert(T, - big"-.8480655492356988544426874250230774675121177393430391537369234245294192976164141156943e-2") - a32 = convert(T, - big".3354806554923569885444268742502307746751211773934303915373692342452941929761641411569") - a41 = convert(T, - big"2.897153057105493432130432594192938764924887287701866490314866693455023795137503079289") - a42 = convert(T, - big"-6.359448489975074843148159912383825625952700647415626703305928850207288721235210244366") - a43 = convert(T, - big"4.362295432869581411017727318190886861027813359713760212991062156752264926097707165077") - a51 = convert(T, - big"5.325864828439256604428877920840511317836476253097040101202360397727981648835607691791") - a52 = convert(T, - big"-11.74888356406282787774717033978577296188744178259862899288666928009020615663593781589") - a53 = convert(T, - big"7.495539342889836208304604784564358155658679161518186721010132816213648793440552049753") - a54 = convert(T, - big"-.9249506636175524925650207933207191611349983406029535244034750452930469056411389539635e-1") - a61 = convert(T, - big"5.861455442946420028659251486982647890394337666164814434818157239052507339770711679748") - a62 = convert(T, - big"-12.92096931784710929170611868178335939541780751955743459166312250439928519268343184452") - a63 = convert(T, - big"8.159367898576158643180400794539253485181918321135053305748355423955009222648673734986") - a64 = convert(T, - big"-.7158497328140099722453054252582973869127213147363544882721139659546372402303777878835e-1") - a65 = convert(T, - big"-.2826905039406838290900305721271224146717633626879770007617876201276764571291579142206e-1") - a71 = convert(T, - big".9646076681806522951816731316512876333711995238157997181903319145764851595234062815396e-1") + a31 = convert( + T, + big"-.8480655492356988544426874250230774675121177393430391537369234245294192976164141156943e-2" + ) + a32 = convert( + T, + big".3354806554923569885444268742502307746751211773934303915373692342452941929761641411569" + ) + a41 = convert( + T, + big"2.897153057105493432130432594192938764924887287701866490314866693455023795137503079289" + ) + a42 = convert( + T, + big"-6.359448489975074843148159912383825625952700647415626703305928850207288721235210244366" + ) + a43 = convert( + T, + big"4.362295432869581411017727318190886861027813359713760212991062156752264926097707165077" + ) + a51 = convert( + T, + big"5.325864828439256604428877920840511317836476253097040101202360397727981648835607691791" + ) + a52 = convert( + T, + big"-11.74888356406282787774717033978577296188744178259862899288666928009020615663593781589" + ) + a53 = convert( + T, + big"7.495539342889836208304604784564358155658679161518186721010132816213648793440552049753" + ) + a54 = convert( + T, + big"-.9249506636175524925650207933207191611349983406029535244034750452930469056411389539635e-1" + ) + a61 = convert( + T, + big"5.861455442946420028659251486982647890394337666164814434818157239052507339770711679748" + ) + a62 = convert( + T, + big"-12.92096931784710929170611868178335939541780751955743459166312250439928519268343184452" + ) + a63 = convert( + T, + big"8.159367898576158643180400794539253485181918321135053305748355423955009222648673734986" + ) + a64 = convert( + T, + big"-.7158497328140099722453054252582973869127213147363544882721139659546372402303777878835e-1" + ) + a65 = convert( + T, + big"-.2826905039406838290900305721271224146717633626879770007617876201276764571291579142206e-1" + ) + a71 = convert( + T, + big".9646076681806522951816731316512876333711995238157997181903319145764851595234062815396e-1" + ) a72 = convert(T, 1 // 100) - a73 = convert(T, - big".4798896504144995747752495322905965199130404621990332488332634944254542060153074523509") - a74 = convert(T, - big"1.379008574103741893192274821856872770756462643091360525934940067397245698027561293331") - a75 = convert(T, - big"-3.290069515436080679901047585711363850115683290894936158531296799594813811049925401677") - a76 = convert(T, - big"2.324710524099773982415355918398765796109060233222962411944060046314465391054716027841") + a73 = convert( + T, + big".4798896504144995747752495322905965199130404621990332488332634944254542060153074523509" + ) + a74 = convert( + T, + big"1.379008574103741893192274821856872770756462643091360525934940067397245698027561293331" + ) + a75 = convert( + T, + big"-3.290069515436080679901047585711363850115683290894936158531296799594813811049925401677" + ) + a76 = convert( + T, + big"2.324710524099773982415355918398765796109060233222962411944060046314465391054716027841" + ) # b1 = convert(T,big".9468075576583945807478876255758922856117527357724631226139574065785592789071067303271e-1") # b2 = convert(T,big".9183565540343253096776363936645313759813746240984095238905939532922955247253608687270e-2") # b3 = convert(T,big".4877705284247615707855642599631228241516691959761363774365216240304071651579571959813") @@ -144,18 +189,30 @@ end # b5 = convert(T,big"-2.707712349983525454881109975059321670689605166938197378763992255714444407154902012702") # b6 = convert(T,big"1.866628418170587035753719399566211498666255505244122593996591602841258328965767580089") # b7 = convert(T,1//66) - btilde1 = convert(T, - big"-1.780011052225771443378550607539534775944678804333659557637450799792588061629796e-03") - btilde2 = convert(T, - big"-8.164344596567469032236360633546862401862537590159047610940604670770447527463931e-04") - btilde3 = convert(T, - big"7.880878010261996010314727672526304238628733777103128603258129604952959142646516e-03") - btilde4 = convert(T, - big"-1.44711007173262907537165147972635116720922712343167677619514233896760819649515e-01") - btilde5 = convert(T, - big"5.823571654525552250199376106520421794260781239567387797673045438803694038950012e-01") - btilde6 = convert(T, - big"-4.580821059291869466616365188325542974428047279788398179474684434732070620889539e-01") + btilde1 = convert( + T, + big"-1.780011052225771443378550607539534775944678804333659557637450799792588061629796e-03" + ) + btilde2 = convert( + T, + big"-8.164344596567469032236360633546862401862537590159047610940604670770447527463931e-04" + ) + btilde3 = convert( + T, + big"7.880878010261996010314727672526304238628733777103128603258129604952959142646516e-03" + ) + btilde4 = convert( + T, + big"-1.44711007173262907537165147972635116720922712343167677619514233896760819649515e-01" + ) + btilde5 = convert( + T, + big"5.823571654525552250199376106520421794260781239567387797673045438803694038950012e-01" + ) + btilde6 = convert( + T, + big"-4.580821059291869466616365188325542974428047279788398179474684434732070620889539e-01" + ) btilde7 = convert(T, 1 // 66) Tsit5ConstantCacheActual( @@ -163,7 +220,8 @@ end a53, a54, a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, btilde1, - btilde2, btilde3, btilde4, btilde5, btilde6, btilde7) + btilde2, btilde3, btilde4, btilde5, btilde6, btilde7 + ) end """ @@ -208,7 +266,7 @@ Ch. Tsitouras r74 = convert(T, 2.5) return r11, r12, r13, r14, r22, r23, r24, r32, r33, r34, r42, r43, r44, r52, r53, r54, - r62, r63, r64, r72, r73, r74 + r62, r63, r64, r72, r73, r74 end """ @@ -253,5 +311,5 @@ Ch. Tsitouras r74 = convert(T, 2.5) return r11, r12, r13, r14, r22, r23, r24, r32, r33, r34, r42, r43, r44, r52, r53, r54, - r62, r63, r64, r72, r73, r74 + r62, r63, r64, r72, r73, r74 end diff --git a/lib/OrdinaryDiffEqTsit5/test/allocation_tests.jl b/lib/OrdinaryDiffEqTsit5/test/allocation_tests.jl index b621dd4bf9..dcc7e6cb12 100644 --- a/lib/OrdinaryDiffEqTsit5/test/allocation_tests.jl +++ b/lib/OrdinaryDiffEqTsit5/test/allocation_tests.jl @@ -15,23 +15,23 @@ These tests verify that the step! operation does not allocate during stepping. du[2] = -1.5 * u[2] end prob = ODEProblem(simple_system!, [1.0, 1.0], (0.0, 1.0)) - + # Test all exported Tsit5 solvers for allocation-free behavior tsit5_solvers = [Tsit5()] - + @testset "Tsit5 Solver Allocation Analysis" begin for solver in tsit5_solvers @testset "$(typeof(solver)) allocation check" begin - integrator = init(prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) + integrator = init(prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) step!(integrator) # Setup step may allocate - + # Use AllocCheck to verify step! is allocation-free allocs = check_allocs(step!, (typeof(integrator),)) - + # These solvers should be allocation-free, but mark as broken for now # to verify with AllocCheck (more accurate than @allocated) @test_broken length(allocs) == 0 - + if length(allocs) > 0 println("AllocCheck found $(length(allocs)) allocation sites in $(typeof(solver)) step!:") for (i, alloc) in enumerate(allocs[1:min(3, end)]) # Show first 3 @@ -43,4 +43,4 @@ These tests verify that the step! operation does not allocate during stepping. end end end -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqTsit5/test/jet.jl b/lib/OrdinaryDiffEqTsit5/test/jet.jl index 4da23d6446..084237e663 100644 --- a/lib/OrdinaryDiffEqTsit5/test/jet.jl +++ b/lib/OrdinaryDiffEqTsit5/test/jet.jl @@ -7,8 +7,9 @@ using Test @testset "JET Tests" begin # Test package for typos - now passing test_package( - OrdinaryDiffEqTsit5, target_defined_modules = true, mode = :typo) - + OrdinaryDiffEqTsit5, target_defined_modules = true, mode = :typo + ) + # Test individual solver type stability @testset "Solver Type Stability Tests" begin # Test problem @@ -17,16 +18,16 @@ using Test du[2] = -1.5 * u[2] end prob = ODEProblem(simple_system!, [1.0, 1.0], (0.0, 1.0)) - + # Test all exported Tsit5 solvers tsit5_solvers = [Tsit5()] - + for solver in tsit5_solvers @testset "$(typeof(solver)) type stability" begin try - @test_opt broken=true init(prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) - integrator = init(prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) - @test_opt broken=true step!(integrator) + @test_opt broken = true init(prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) + integrator = init(prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) + @test_opt broken = true step!(integrator) catch e @test_broken false # Mark as broken if solver fails to initialize println("$(typeof(solver)) failed with: $e") diff --git a/lib/OrdinaryDiffEqTsit5/test/qa.jl b/lib/OrdinaryDiffEqTsit5/test/qa.jl index 85d2469c43..eaf4ebf9fd 100644 --- a/lib/OrdinaryDiffEqTsit5/test/qa.jl +++ b/lib/OrdinaryDiffEqTsit5/test/qa.jl @@ -5,4 +5,4 @@ using Aqua Aqua.test_all( OrdinaryDiffEqTsit5 ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqTsit5/test/runtests.jl b/lib/OrdinaryDiffEqTsit5/test/runtests.jl index 126d95d1a8..6c88857811 100644 --- a/lib/OrdinaryDiffEqTsit5/test/runtests.jl +++ b/lib/OrdinaryDiffEqTsit5/test/runtests.jl @@ -5,4 +5,4 @@ if isempty(VERSION.prerelease) @time @safetestset "JET Tests" include("jet.jl") @time @safetestset "Aqua" include("qa.jl") @time @safetestset "Allocation Tests" include("allocation_tests.jl") -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqVerner/src/OrdinaryDiffEqVerner.jl b/lib/OrdinaryDiffEqVerner/src/OrdinaryDiffEqVerner.jl index 614a8c0d5a..81444b8d31 100644 --- a/lib/OrdinaryDiffEqVerner/src/OrdinaryDiffEqVerner.jl +++ b/lib/OrdinaryDiffEqVerner/src/OrdinaryDiffEqVerner.jl @@ -1,19 +1,19 @@ module OrdinaryDiffEqVerner import OrdinaryDiffEqCore: alg_order, calculate_residuals!, - initialize!, perform_step!, unwrap_alg, - calculate_residuals, alg_stability_size, - OrdinaryDiffEqAlgorithm, - CompositeAlgorithm, AbstractController, PIDController, - OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, - OrdinaryDiffEqAdaptiveAlgorithm, CompiledFloats, uses_uprev, - alg_cache, _vec, _reshape, @cache, isfsal, full_cache, - constvalue, _unwrap_val, - explicit_rk_docstring, trivial_limiter!, _ode_interpolant, - _ode_interpolant!, _ode_addsteps!, @fold, - @OnDemandTableauExtract, AutoAlgSwitch, - DerivativeOrderNotPossibleError, - get_fsalfirstlast, copyat_or_push! + initialize!, perform_step!, unwrap_alg, + calculate_residuals, alg_stability_size, + OrdinaryDiffEqAlgorithm, + CompositeAlgorithm, AbstractController, PIDController, + OrdinaryDiffEqMutableCache, OrdinaryDiffEqConstantCache, + OrdinaryDiffEqAdaptiveAlgorithm, CompiledFloats, uses_uprev, + alg_cache, _vec, _reshape, @cache, isfsal, full_cache, + constvalue, _unwrap_val, + explicit_rk_docstring, trivial_limiter!, _ode_interpolant, + _ode_interpolant!, _ode_addsteps!, @fold, + @OnDemandTableauExtract, AutoAlgSwitch, + DerivativeOrderNotPossibleError, + get_fsalfirstlast, copyat_or_push! using FastBroadcast, Polyester, MuladdMacro, RecursiveArrayTools using DiffEqBase: @def, @tight_loop_macros using Static: False @@ -47,29 +47,51 @@ PrecompileTools.@compile_workload begin end if Preferences.@load_preference("PrecompileAutoSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.AutoSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.AutoSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0), Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.AutoSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0) + ) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.AutoSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0), Float64[] + ) + ) end if Preferences.@load_preference("PrecompileFunctionWrapperSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0), Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0) + ) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.FunctionWrapperSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0), Float64[] + ) + ) end if Preferences.@load_preference("PrecompileNoSpecialize", false) - push!(prob_list, - ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0))) - push!(prob_list, - ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), - Float64[])) + push!( + prob_list, + ODEProblem{true, SciMLBase.NoSpecialize}(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0)) + ) + push!( + prob_list, + ODEProblem{true, SciMLBase.NoSpecialize}( + lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), + Float64[] + ) + ) end for prob in prob_list, solver in solver_list diff --git a/lib/OrdinaryDiffEqVerner/src/alg_utils.jl b/lib/OrdinaryDiffEqVerner/src/alg_utils.jl index 02e315d370..b21061e8c8 100644 --- a/lib/OrdinaryDiffEqVerner/src/alg_utils.jl +++ b/lib/OrdinaryDiffEqVerner/src/alg_utils.jl @@ -10,7 +10,7 @@ alg_order(alg::Vern9) = 9 alg_order(alg::RKV76IIa) = 7 alg_stability_size(alg::Vern6) = 4.8553 -alg_stability_size(alg::Vern7) = 4.6400 +alg_stability_size(alg::Vern7) = 4.64 alg_stability_size(alg::Vern8) = 5.8641 alg_stability_size(alg::Vern9) = 4.4762 alg_stability_size(alg::RKV76IIa) = 4.910807773 # From the file: Real Stability Interval is nearly [ -4.910807773, 0] diff --git a/lib/OrdinaryDiffEqVerner/src/algorithms.jl b/lib/OrdinaryDiffEqVerner/src/algorithms.jl index ec892e635a..971eeeff02 100644 --- a/lib/OrdinaryDiffEqVerner/src/algorithms.jl +++ b/lib/OrdinaryDiffEqVerner/src/algorithms.jl @@ -12,10 +12,11 @@ publisher={Springer} }", extra_keyword_description = """- `lazy`: determines if the lazy interpolant is used. - """, - extra_keyword_default = "lazy = true") + """, + extra_keyword_default = "lazy = true" +) Base.@kwdef struct Vern6{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() @@ -24,7 +25,7 @@ end @truncate_stacktrace Vern6 3 # for backwards compatibility function Vern6(stage_limiter!, step_limiter! = trivial_limiter!; lazy = true) - Vern6(stage_limiter!, step_limiter!, False(), lazy) + return Vern6(stage_limiter!, step_limiter!, False(), lazy) end @doc explicit_rk_docstring( @@ -41,10 +42,11 @@ end publisher={Springer} }", extra_keyword_description = """- `lazy`: determines if the lazy interpolant is used. - """, - extra_keyword_default = "lazy = true") + """, + extra_keyword_default = "lazy = true" +) Base.@kwdef struct Vern7{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() @@ -53,7 +55,7 @@ end @truncate_stacktrace Vern7 3 # for backwards compatibility function Vern7(stage_limiter!, step_limiter! = trivial_limiter!; lazy = true) - Vern7(stage_limiter!, step_limiter!, False(), lazy) + return Vern7(stage_limiter!, step_limiter!, False(), lazy) end @doc explicit_rk_docstring( @@ -70,10 +72,11 @@ end publisher={Springer} }", extra_keyword_description = """- `lazy`: determines if the lazy interpolant is used. - """, - extra_keyword_default = "lazy = true") + """, + extra_keyword_default = "lazy = true" +) Base.@kwdef struct Vern8{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() @@ -82,7 +85,7 @@ end @truncate_stacktrace Vern8 3 # for backwards compatibility function Vern8(stage_limiter!, step_limiter! = trivial_limiter!; lazy = true) - Vern8(stage_limiter!, step_limiter!, False(), lazy) + return Vern8(stage_limiter!, step_limiter!, False(), lazy) end @doc explicit_rk_docstring( @@ -99,9 +102,10 @@ end publisher={Springer} }", extra_keyword_description = """- `lazy`: determines if the lazy interpolant is used. - """, extra_keyword_default = "lazy = true") + """, extra_keyword_default = "lazy = true" +) Base.@kwdef struct Vern9{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() @@ -110,7 +114,7 @@ end @truncate_stacktrace Vern9 3 # for backwards compatibility function Vern9(stage_limiter!, step_limiter! = trivial_limiter!; lazy = true) - Vern9(stage_limiter!, step_limiter!, False(), lazy) + return Vern9(stage_limiter!, step_limiter!, False(), lazy) end """ @@ -165,10 +169,11 @@ AutoVern9(alg; lazy = true, kwargs...) = AutoAlgSwitch(Vern9(lazy = lazy), alg; url={https://www.sfu.ca/~jverner/RKV76.IIa.Efficient.000003389335684.240711.FLOAT6040OnWeb} }", extra_keyword_description = """- `lazy`: determines if the lazy interpolant is used. - """, - extra_keyword_default = "lazy = true") + """, + extra_keyword_default = "lazy = true" +) Base.@kwdef struct RKV76IIa{StageLimiter, StepLimiter, Thread} <: - OrdinaryDiffEqAdaptiveAlgorithm + OrdinaryDiffEqAdaptiveAlgorithm stage_limiter!::StageLimiter = trivial_limiter! step_limiter!::StepLimiter = trivial_limiter! thread::Thread = False() @@ -177,5 +182,5 @@ end @truncate_stacktrace RKV76IIa 3 # for backwards compatibility function RKV76IIa(stage_limiter!, step_limiter! = trivial_limiter!; lazy = true) - RKV76IIa(stage_limiter!, step_limiter!, False(), lazy) + return RKV76IIa(stage_limiter!, step_limiter!, False(), lazy) end diff --git a/lib/OrdinaryDiffEqVerner/src/interp_func.jl b/lib/OrdinaryDiffEqVerner/src/interp_func.jl index bc292b1eac..61e2ce1346 100644 --- a/lib/OrdinaryDiffEqVerner/src/interp_func.jl +++ b/lib/OrdinaryDiffEqVerner/src/interp_func.jl @@ -1,39 +1,59 @@ -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where { +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where { cacheType <: - Union{Vern6Cache, Vern6ConstantCache -}} - dense ? "specialized 6th order lazy interpolation" : "1st order linear" + Union{ + Vern6Cache, Vern6ConstantCache, + }, + } + return dense ? "specialized 6th order lazy interpolation" : "1st order linear" end -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where { +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where { cacheType <: - Union{Vern7Cache, Vern7ConstantCache -}} - dense ? "specialized 7th order lazy interpolation" : "1st order linear" + Union{ + Vern7Cache, Vern7ConstantCache, + }, + } + return dense ? "specialized 7th order lazy interpolation" : "1st order linear" end -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where { +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where { cacheType <: - Union{Vern8Cache, Vern8ConstantCache -}} - dense ? "specialized 8th order lazy interpolation" : "1st order linear" + Union{ + Vern8Cache, Vern8ConstantCache, + }, + } + return dense ? "specialized 8th order lazy interpolation" : "1st order linear" end -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where { +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where { cacheType <: - Union{Vern9Cache, Vern9ConstantCache -}} - dense ? "specialized 9th order lazy interpolation" : "1st order linear" + Union{ + Vern9Cache, Vern9ConstantCache, + }, + } + return dense ? "specialized 9th order lazy interpolation" : "1st order linear" end -function SciMLBase.interp_summary(::Type{cacheType}, - dense::Bool) where { +function SciMLBase.interp_summary( + ::Type{cacheType}, + dense::Bool + ) where { cacheType <: - Union{RKV76IIaCache, RKV76IIaConstantCache -}} - dense ? "specialized 7th order lazy interpolation" : "1st order linear" + Union{ + RKV76IIaCache, RKV76IIaConstantCache, + }, + } + return dense ? "specialized 7th order lazy interpolation" : "1st order linear" end diff --git a/lib/OrdinaryDiffEqVerner/src/interpolants.jl b/lib/OrdinaryDiffEqVerner/src/interpolants.jl index ca69c3d0b7..e439129644 100644 --- a/lib/OrdinaryDiffEqVerner/src/interpolants.jl +++ b/lib/OrdinaryDiffEqVerner/src/interpolants.jl @@ -2,18 +2,22 @@ RK_WITH_SPECIAL_INTERPOLATIONS = Union{ Vern6ConstantCache, Vern6Cache, Vern7ConstantCache, Vern7Cache, Vern8ConstantCache, Vern8Cache, - Vern9ConstantCache, Vern9Cache + Vern9ConstantCache, Vern9Cache, } -function _ode_interpolant(Θ, dt, y₀, y₁, k, +function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::RK_WITH_SPECIAL_INTERPOLATIONS, - idxs, T::Type{Val{D}}, differential_vars) where {D} + idxs, T::Type{Val{D}}, differential_vars + ) where {D} throw(DerivativeOrderNotPossibleError()) end -function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::RK_WITH_SPECIAL_INTERPOLATIONS, - idxs, T::Type{Val{D}}, differential_vars) where {D} + idxs, T::Type{Val{D}}, differential_vars + ) where {D} throw(DerivativeOrderNotPossibleError()) end @@ -37,114 +41,142 @@ end b12Θ = Θ² * @evalpoly(Θ, r122, r123, r124, r125, r126) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::Vern6ConstantCache, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Vern6ConstantCache, + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @vern6pre0 #@.. broadcast=false y₀ + dt*(k[1]*b1Θ + k[4]*b4Θ + k[5]*b5Θ + k[6]*b6Θ + k[7]*b7Θ + k[8]*b8Θ + k[9]*b9Θ + k[10]*b10Θ + k[11]*b11Θ + k[12]*b12Θ) return @inbounds y₀ + - dt * (k[1] * b1Θ + k[4] * b4Θ + k[5] * b5Θ + k[6] * b6Θ + k[7] * b7Θ + - k[8] * b8Θ + k[9] * b9Θ + k[10] * b10Θ + k[11] * b11Θ + k[12] * b12Θ) + dt * ( + k[1] * b1Θ + k[4] * b4Θ + k[5] * b5Θ + k[6] * b6Θ + k[7] * b7Θ + + k[8] * b8Θ + k[9] * b9Θ + k[10] * b10Θ + k[11] * b11Θ + k[12] * b12Θ + ) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::Vern6Cache, idxs::Nothing, - T::Type{Val{0}}, differential_vars::Nothing) +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Vern6Cache, idxs::Nothing, + T::Type{Val{0}}, differential_vars::Nothing + ) @vern6pre0 #@.. broadcast=false y₀ + dt*(k[1]*b1Θ + k[4]*b4Θ + k[5]*b5Θ + k[6]*b6Θ + k[7]*b7Θ + k[8]*b8Θ + k[9]*b9Θ + k[10]*b10Θ + k[11]*b11Θ + k[12]*b12Θ) - return @inbounds @.. broadcast=false y₀+dt * (k[1] * b1Θ + k[4] * b4Θ + k[5] * b5Θ + - k[6] * b6Θ + k[7] * b7Θ + - k[8] * b8Θ + k[9] * b9Θ + k[10] * b10Θ + - k[11] * b11Θ + k[12] * b12Θ) + return @inbounds @.. broadcast = false y₀ + dt * ( + k[1] * b1Θ + k[4] * b4Θ + k[5] * b5Θ + + k[6] * b6Θ + k[7] * b7Θ + + k[8] * b8Θ + k[9] * b9Θ + k[10] * b10Θ + + k[11] * b11Θ + k[12] * b12Θ + ) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Vern6ConstantCache, Vern6Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @vern6pre0 return y₀[idxs] + - dt * (k[1][idxs] * b1Θ + k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + + dt * ( + k[1][idxs] * b1Θ + k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + k[6][idxs] * b6Θ + k[7][idxs] * b7Θ + k[8][idxs] * b8Θ + k[9][idxs] * b9Θ + - k[10][idxs] * b10Θ + k[11][idxs] * b11Θ + k[12][idxs] * b12Θ) + k[10][idxs] * b10Θ + k[11][idxs] * b11Θ + k[12][idxs] * b12Θ + ) end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern6ConstantCache, Vern6Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @vern6pre0 - @inbounds @.. broadcast=false out=y₀ + - dt * - (k[1] * b1Θ + k[4] * b4Θ + k[5] * b5Θ + k[6] * b6Θ + - k[7] * b7Θ + k[8] * b8Θ + k[9] * b9Θ + k[10] * b10Θ + - k[11] * b11Θ + k[12] * b12Θ) + @inbounds @.. broadcast = false out = y₀ + + dt * + ( + k[1] * b1Θ + k[4] * b4Θ + k[5] * b5Θ + k[6] * b6Θ + + k[7] * b7Θ + k[8] * b8Θ + k[9] * b9Θ + k[10] * b10Θ + + k[11] * b11Θ + k[12] * b12Θ + ) out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern6ConstantCache, Vern6Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @vern6pre0 - @views @.. broadcast=false out=y₀[idxs] + - dt * - (k[1][idxs] * b1Θ + k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + - k[6][idxs] * b6Θ + k[7][idxs] * b7Θ + k[8][idxs] * b8Θ + - k[9][idxs] * b9Θ + k[10][idxs] * b10Θ + - k[11][idxs] * b11Θ + k[12][idxs] * b12Θ) + @views @.. broadcast = false out = y₀[idxs] + + dt * + ( + k[1][idxs] * b1Θ + k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + + k[6][idxs] * b6Θ + k[7][idxs] * b7Θ + k[8][idxs] * b8Θ + + k[9][idxs] * b9Θ + k[10][idxs] * b10Θ + + k[11][idxs] * b11Θ + k[12][idxs] * b12Θ + ) out end @def vern6pre1 begin @vern6unpack - b1Θdiff = @evalpoly(Θ, r011, 2*r012, 3*r013, 4*r014, 5*r015, 6*r016) - b4Θdiff = Θ * @evalpoly(Θ, 2*r042, 3*r043, 4*r044, 5*r045, 6*r046) - b5Θdiff = Θ * @evalpoly(Θ, 2*r052, 3*r053, 4*r054, 5*r055, 6*r056) - b6Θdiff = Θ * @evalpoly(Θ, 2*r062, 3*r063, 4*r064, 5*r065, 6*r066) - b7Θdiff = Θ * @evalpoly(Θ, 2*r072, 3*r073, 4*r074, 5*r075, 6*r076) - b8Θdiff = Θ * @evalpoly(Θ, 2*r082, 3*r083, 4*r084, 5*r085, 6*r086) - b9Θdiff = Θ * @evalpoly(Θ, 2*r092, 3*r093, 4*r094, 5*r095, 6*r096) - b10Θdiff = Θ * @evalpoly(Θ, 2*r102, 3*r103, 4*r104, 5*r105, 6*r106) - b11Θdiff = Θ * @evalpoly(Θ, 2*r112, 3*r113, 4*r114, 5*r115, 6*r116) - b12Θdiff = Θ * @evalpoly(Θ, 2*r122, 3*r123, 4*r124, 5*r125, 6*r126) -end - -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, + b1Θdiff = @evalpoly(Θ, r011, 2 * r012, 3 * r013, 4 * r014, 5 * r015, 6 * r016) + b4Θdiff = Θ * @evalpoly(Θ, 2 * r042, 3 * r043, 4 * r044, 5 * r045, 6 * r046) + b5Θdiff = Θ * @evalpoly(Θ, 2 * r052, 3 * r053, 4 * r054, 5 * r055, 6 * r056) + b6Θdiff = Θ * @evalpoly(Θ, 2 * r062, 3 * r063, 4 * r064, 5 * r065, 6 * r066) + b7Θdiff = Θ * @evalpoly(Θ, 2 * r072, 3 * r073, 4 * r074, 5 * r075, 6 * r076) + b8Θdiff = Θ * @evalpoly(Θ, 2 * r082, 3 * r083, 4 * r084, 5 * r085, 6 * r086) + b9Θdiff = Θ * @evalpoly(Θ, 2 * r092, 3 * r093, 4 * r094, 5 * r095, 6 * r096) + b10Θdiff = Θ * @evalpoly(Θ, 2 * r102, 3 * r103, 4 * r104, 5 * r105, 6 * r106) + b11Θdiff = Θ * @evalpoly(Θ, 2 * r112, 3 * r113, 4 * r114, 5 * r115, 6 * r116) + b12Θdiff = Θ * @evalpoly(Θ, 2 * r122, 3 * r123, 4 * r124, 5 * r125, 6 * r126) +end + +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Vern6ConstantCache, Vern6Cache}, - idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing + ) @vern6pre1 #@.. broadcast=false k[1]*b1Θdiff + k[4]*b4Θdiff + k[5]*b5Θdiff + k[6]*b6Θdiff + k[7]*b7Θdiff + k[8]*b8Θdiff + k[9]*b9Θdiff + k[10]*b10Θdiff + k[11]*b11Θdiff + k[12]*b12Θdiff return @inbounds k[1] * b1Θdiff + k[4] * b4Θdiff + k[5] * b5Θdiff + k[6] * b6Θdiff + - k[7] * b7Θdiff + k[8] * b8Θdiff + k[9] * b9Θdiff + k[10] * b10Θdiff + - k[11] * b11Θdiff + k[12] * b12Θdiff + k[7] * b7Θdiff + k[8] * b8Θdiff + k[9] * b9Θdiff + k[10] * b10Θdiff + + k[11] * b11Θdiff + k[12] * b12Θdiff end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Vern6ConstantCache, Vern6Cache}, idxs, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) @vern6pre1 return k[1][idxs] * b1Θdiff + k[4][idxs] * b4Θdiff + k[5][idxs] * b5Θdiff + - k[6][idxs] * b6Θdiff + k[7][idxs] * b7Θdiff + k[8][idxs] * b8Θdiff + - k[9][idxs] * b9Θdiff + k[10][idxs] * b10Θdiff + k[11][idxs] * b11Θdiff + - k[12][idxs] * b12Θdiff + k[6][idxs] * b6Θdiff + k[7][idxs] * b7Θdiff + k[8][idxs] * b8Θdiff + + k[9][idxs] * b9Θdiff + k[10][idxs] * b10Θdiff + k[11][idxs] * b11Θdiff + + k[12][idxs] * b12Θdiff end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern6ConstantCache, Vern6Cache}, - idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing + ) @vern6pre1 - @inbounds @.. broadcast=false out=k[1] * b1Θdiff + k[4] * b4Θdiff + k[5] * b5Θdiff + - k[6] * b6Θdiff + k[7] * b7Θdiff + k[8] * b8Θdiff + - k[9] * b9Θdiff + k[10] * b10Θdiff + k[11] * b11Θdiff + - k[12] * b12Θdiff + @inbounds @.. broadcast = false out = k[1] * b1Θdiff + k[4] * b4Θdiff + k[5] * b5Θdiff + + k[6] * b6Θdiff + k[7] * b7Θdiff + k[8] * b8Θdiff + + k[9] * b9Θdiff + k[10] * b10Θdiff + k[11] * b11Θdiff + + k[12] * b12Θdiff out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern6ConstantCache, Vern6Cache}, idxs, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) @vern6pre1 - @views @.. broadcast=false out=k[1][idxs] * b1Θdiff + k[4][idxs] * b4Θdiff + - k[5][idxs] * b5Θdiff + k[6][idxs] * b6Θdiff + - k[7][idxs] * b7Θdiff + k[8][idxs] * b8Θdiff + - k[9][idxs] * b9Θdiff + k[10][idxs] * b10Θdiff + - k[11][idxs] * b11Θdiff + k[12][idxs] * b12Θdiff + @views @.. broadcast = false out = k[1][idxs] * b1Θdiff + k[4][idxs] * b4Θdiff + + k[5][idxs] * b5Θdiff + k[6][idxs] * b6Θdiff + + k[7][idxs] * b7Θdiff + k[8][idxs] * b8Θdiff + + k[9][idxs] * b9Θdiff + k[10][idxs] * b10Θdiff + + k[11][idxs] * b11Θdiff + k[12][idxs] * b12Θdiff out end @@ -164,143 +196,183 @@ end b7Θ = Θ² * @evalpoly(Θ, r072, r073, r074, r075, r076, r077) b8Θ = Θ² * @evalpoly(Θ, r082, r083, r084, r085, r086, r087) b9Θ = Θ² * @evalpoly(Θ, r092, r093, r094, r095, r096, r097) - b11Θ = Θ² * @evalpoly(Θ, r112, r113, r114, r115, r116, - r117) - b12Θ = Θ² * @evalpoly(Θ, r122, r123, r124, r125, r126, - r127) - b13Θ = Θ² * @evalpoly(Θ, r132, r133, r134, r135, r136, - r137) - b14Θ = Θ² * @evalpoly(Θ, r142, r143, r144, r145, r146, - r147) - b15Θ = Θ² * @evalpoly(Θ, r152, r153, r154, r155, r156, - r157) - b16Θ = Θ² * @evalpoly(Θ, r162, r163, r164, r165, r166, - r167) -end - -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::Vern7ConstantCache, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + b11Θ = Θ² * @evalpoly( + Θ, r112, r113, r114, r115, r116, + r117 + ) + b12Θ = Θ² * @evalpoly( + Θ, r122, r123, r124, r125, r126, + r127 + ) + b13Θ = Θ² * @evalpoly( + Θ, r132, r133, r134, r135, r136, + r137 + ) + b14Θ = Θ² * @evalpoly( + Θ, r142, r143, r144, r145, r146, + r147 + ) + b15Θ = Θ² * @evalpoly( + Θ, r152, r153, r154, r155, r156, + r157 + ) + b16Θ = Θ² * @evalpoly( + Θ, r162, r163, r164, r165, r166, + r167 + ) +end + +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Vern7ConstantCache, + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @vern7pre0 #@.. broadcast=false y₀ + dt*(k[1]*b1Θ + k[4]*b4Θ + k[5]*b5Θ + k[6]*b6Θ + k[7]*b7Θ + k[8]*b8Θ + k[9]*b9Θ + k[11]*b11Θ + k[12]*b12Θ + k[13]*b13Θ + k[14]*b14Θ + k[15]*b15Θ + k[16]*b16Θ) return @inbounds y₀ + - dt * (k[1] * b1Θ + k[4] * b4Θ + k[5] * b5Θ + k[6] * b6Θ + k[7] * b7Θ + - k[8] * b8Θ + k[9] * b9Θ + k[11] * b11Θ + k[12] * b12Θ + k[13] * b13Θ + - k[14] * b14Θ + k[15] * b15Θ + k[16] * b16Θ) + dt * ( + k[1] * b1Θ + k[4] * b4Θ + k[5] * b5Θ + k[6] * b6Θ + k[7] * b7Θ + + k[8] * b8Θ + k[9] * b9Θ + k[11] * b11Θ + k[12] * b12Θ + k[13] * b13Θ + + k[14] * b14Θ + k[15] * b15Θ + k[16] * b16Θ + ) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::Vern7Cache, idxs::Nothing, - T::Type{Val{0}}, differential_vars::Nothing) +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Vern7Cache, idxs::Nothing, + T::Type{Val{0}}, differential_vars::Nothing + ) @vern7pre0 #@.. broadcast=false y₀ + dt*(k[1]*b1Θ + k[4]*b4Θ + k[5]*b5Θ + k[6]*b6Θ + k[7]*b7Θ + k[8]*b8Θ + k[9]*b9Θ + k[11]*b11Θ + k[12]*b12Θ + k[13]*b13Θ + k[14]*b14Θ + k[15]*b15Θ + k[16]*b16Θ) - return @inbounds @.. broadcast=false y₀+dt * (k[1] * b1Θ + k[4] * b4Θ + k[5] * b5Θ + - k[6] * b6Θ + k[7] * b7Θ + - k[8] * b8Θ + k[9] * b9Θ + k[11] * b11Θ + - k[12] * b12Θ + k[13] * b13Θ + - k[14] * b14Θ + k[15] * b15Θ + k[16] * b16Θ) + return @inbounds @.. broadcast = false y₀ + dt * ( + k[1] * b1Θ + k[4] * b4Θ + k[5] * b5Θ + + k[6] * b6Θ + k[7] * b7Θ + + k[8] * b8Θ + k[9] * b9Θ + k[11] * b11Θ + + k[12] * b12Θ + k[13] * b13Θ + + k[14] * b14Θ + k[15] * b15Θ + k[16] * b16Θ + ) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Vern7ConstantCache, Vern7Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @vern7pre0 return y₀[idxs] + - dt * (k[1][idxs] * b1Θ + k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + + dt * ( + k[1][idxs] * b1Θ + k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + k[6][idxs] * b6Θ + k[7][idxs] * b7Θ + k[8][idxs] * b8Θ + k[9][idxs] * b9Θ + k[11][idxs] * b11Θ + k[12][idxs] * b12Θ + k[13][idxs] * b13Θ + - k[14][idxs] * b14Θ + k[15][idxs] * b15Θ + k[16][idxs] * b16Θ) + k[14][idxs] * b14Θ + k[15][idxs] * b15Θ + k[16][idxs] * b16Θ + ) end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern7ConstantCache, Vern7Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @vern7pre0 - @inbounds @.. broadcast=false out=y₀ + - dt * - (k[1] * b1Θ + k[4] * b4Θ + k[5] * b5Θ + k[6] * b6Θ + - k[7] * b7Θ + k[8] * b8Θ + k[9] * b9Θ + k[11] * b11Θ + - k[12] * b12Θ + k[13] * b13Θ + k[14] * b14Θ + - k[15] * b15Θ + k[16] * b16Θ) + @inbounds @.. broadcast = false out = y₀ + + dt * + ( + k[1] * b1Θ + k[4] * b4Θ + k[5] * b5Θ + k[6] * b6Θ + + k[7] * b7Θ + k[8] * b8Θ + k[9] * b9Θ + k[11] * b11Θ + + k[12] * b12Θ + k[13] * b13Θ + k[14] * b14Θ + + k[15] * b15Θ + k[16] * b16Θ + ) out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern7ConstantCache, Vern7Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @vern7pre0 - @views @.. broadcast=false out=y₀[idxs] + - dt * - (k[1][idxs] * b1Θ + k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + - k[6][idxs] * b6Θ + k[7][idxs] * b7Θ + k[8][idxs] * b8Θ + - k[9][idxs] * b9Θ + k[11][idxs] * b11Θ + - k[12][idxs] * b12Θ + k[13][idxs] * b13Θ + - k[14][idxs] * b14Θ + k[15][idxs] * b15Θ + - k[16][idxs] * b16Θ) + @views @.. broadcast = false out = y₀[idxs] + + dt * + ( + k[1][idxs] * b1Θ + k[4][idxs] * b4Θ + k[5][idxs] * b5Θ + + k[6][idxs] * b6Θ + k[7][idxs] * b7Θ + k[8][idxs] * b8Θ + + k[9][idxs] * b9Θ + k[11][idxs] * b11Θ + + k[12][idxs] * b12Θ + k[13][idxs] * b13Θ + + k[14][idxs] * b14Θ + k[15][idxs] * b15Θ + + k[16][idxs] * b16Θ + ) out end @def vern7pre1 begin @vern7unpack - b1Θdiff = @evalpoly(Θ, r011, 2*r012, 3*r013, 4*r014, 5*r015, 6*r016, 7*r017) - b4Θdiff = Θ * @evalpoly(Θ, 2*r042, 3*r043, 4*r044, 5*r045, 6*r046, 7*r047) - b5Θdiff = Θ * @evalpoly(Θ, 2*r052, 3*r053, 4*r054, 5*r055, 6*r056, 7*r057) - b6Θdiff = Θ * @evalpoly(Θ, 2*r062, 3*r063, 4*r064, 5*r065, 6*r066, 7*r067) - b7Θdiff = Θ * @evalpoly(Θ, 2*r072, 3*r073, 4*r074, 5*r075, 6*r076, 7*r077) - b8Θdiff = Θ * @evalpoly(Θ, 2*r082, 3*r083, 4*r084, 5*r085, 6*r086, 7*r087) - b9Θdiff = Θ * @evalpoly(Θ, 2*r092, 3*r093, 4*r094, 5*r095, 6*r096, 7*r097) - b11Θdiff = Θ * @evalpoly(Θ, 2*r112, 3*r113, 4*r114, 5*r115, 6*r116, 7*r117) - b12Θdiff = Θ * @evalpoly(Θ, 2*r122, 3*r123, 4*r124, 5*r125, 6*r126, 7*r127) - b13Θdiff = Θ * @evalpoly(Θ, 2*r132, 3*r133, 4*r134, 5*r135, 6*r136, 7*r137) - b14Θdiff = Θ * @evalpoly(Θ, 2*r142, 3*r143, 4*r144, 5*r145, 6*r146, 7*r147) - b15Θdiff = Θ * @evalpoly(Θ, 2*r152, 3*r153, 4*r154, 5*r155, 6*r156, 7*r157) - b16Θdiff = Θ * @evalpoly(Θ, 2*r162, 3*r163, 4*r164, 5*r165, 6*r166, 7*r167) -end - -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, + b1Θdiff = @evalpoly(Θ, r011, 2 * r012, 3 * r013, 4 * r014, 5 * r015, 6 * r016, 7 * r017) + b4Θdiff = Θ * @evalpoly(Θ, 2 * r042, 3 * r043, 4 * r044, 5 * r045, 6 * r046, 7 * r047) + b5Θdiff = Θ * @evalpoly(Θ, 2 * r052, 3 * r053, 4 * r054, 5 * r055, 6 * r056, 7 * r057) + b6Θdiff = Θ * @evalpoly(Θ, 2 * r062, 3 * r063, 4 * r064, 5 * r065, 6 * r066, 7 * r067) + b7Θdiff = Θ * @evalpoly(Θ, 2 * r072, 3 * r073, 4 * r074, 5 * r075, 6 * r076, 7 * r077) + b8Θdiff = Θ * @evalpoly(Θ, 2 * r082, 3 * r083, 4 * r084, 5 * r085, 6 * r086, 7 * r087) + b9Θdiff = Θ * @evalpoly(Θ, 2 * r092, 3 * r093, 4 * r094, 5 * r095, 6 * r096, 7 * r097) + b11Θdiff = Θ * @evalpoly(Θ, 2 * r112, 3 * r113, 4 * r114, 5 * r115, 6 * r116, 7 * r117) + b12Θdiff = Θ * @evalpoly(Θ, 2 * r122, 3 * r123, 4 * r124, 5 * r125, 6 * r126, 7 * r127) + b13Θdiff = Θ * @evalpoly(Θ, 2 * r132, 3 * r133, 4 * r134, 5 * r135, 6 * r136, 7 * r137) + b14Θdiff = Θ * @evalpoly(Θ, 2 * r142, 3 * r143, 4 * r144, 5 * r145, 6 * r146, 7 * r147) + b15Θdiff = Θ * @evalpoly(Θ, 2 * r152, 3 * r153, 4 * r154, 5 * r155, 6 * r156, 7 * r157) + b16Θdiff = Θ * @evalpoly(Θ, 2 * r162, 3 * r163, 4 * r164, 5 * r165, 6 * r166, 7 * r167) +end + +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Vern7ConstantCache, Vern7Cache}, - idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing + ) @vern7pre1 #@.. broadcast=false k[1]*b1Θdiff + k[4]*b4Θdiff + k[5]*b5Θdiff + k[6]*b6Θdiff + k[7]*b7Θdiff + k[8]*b8Θdiff + k[9]*b9Θdiff + k[11]*b11Θdiff + k[12]*b12Θdiff + k[13]*b13Θdiff + k[14]*b14Θdiff + k[15]*b15Θdiff + k[16]*b16Θdiff return @inbounds k[1] * b1Θdiff + k[4] * b4Θdiff + k[5] * b5Θdiff + k[6] * b6Θdiff + - k[7] * b7Θdiff + k[8] * b8Θdiff + k[9] * b9Θdiff + k[11] * b11Θdiff + - k[12] * b12Θdiff + k[13] * b13Θdiff + k[14] * b14Θdiff + - k[15] * b15Θdiff + - k[16] * b16Θdiff + k[7] * b7Θdiff + k[8] * b8Θdiff + k[9] * b9Θdiff + k[11] * b11Θdiff + + k[12] * b12Θdiff + k[13] * b13Θdiff + k[14] * b14Θdiff + + k[15] * b15Θdiff + + k[16] * b16Θdiff end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Vern7ConstantCache, Vern7Cache}, idxs, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) @vern7pre1 return k[1][idxs] * b1Θdiff + k[4][idxs] * b4Θdiff + k[5][idxs] * b5Θdiff + - k[6][idxs] * b6Θdiff + k[7][idxs] * b7Θdiff + k[8][idxs] * b8Θdiff + - k[9][idxs] * b9Θdiff + k[11][idxs] * b11Θdiff + k[12][idxs] * b12Θdiff + - k[13][idxs] * b13Θdiff + k[14][idxs] * b14Θdiff + k[15][idxs] * b15Θdiff + - k[16][idxs] * b16Θdiff + k[6][idxs] * b6Θdiff + k[7][idxs] * b7Θdiff + k[8][idxs] * b8Θdiff + + k[9][idxs] * b9Θdiff + k[11][idxs] * b11Θdiff + k[12][idxs] * b12Θdiff + + k[13][idxs] * b13Θdiff + k[14][idxs] * b14Θdiff + k[15][idxs] * b15Θdiff + + k[16][idxs] * b16Θdiff end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern7ConstantCache, Vern7Cache}, - idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing + ) @vern7pre1 - @inbounds @.. broadcast=false out=k[1] * b1Θdiff + k[4] * b4Θdiff + k[5] * b5Θdiff + - k[6] * b6Θdiff + k[7] * b7Θdiff + k[8] * b8Θdiff + - k[9] * b9Θdiff + k[11] * b11Θdiff + k[12] * b12Θdiff + - k[13] * b13Θdiff + k[14] * b14Θdiff + - k[15] * b15Θdiff + k[16] * b16Θdiff + @inbounds @.. broadcast = false out = k[1] * b1Θdiff + k[4] * b4Θdiff + k[5] * b5Θdiff + + k[6] * b6Θdiff + k[7] * b7Θdiff + k[8] * b8Θdiff + + k[9] * b9Θdiff + k[11] * b11Θdiff + k[12] * b12Θdiff + + k[13] * b13Θdiff + k[14] * b14Θdiff + + k[15] * b15Θdiff + k[16] * b16Θdiff out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern7ConstantCache, Vern7Cache}, idxs, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) @vern7pre1 - @views @.. broadcast=false out=k[1][idxs] * b1Θdiff + k[4][idxs] * b4Θdiff + - k[5][idxs] * b5Θdiff + k[6][idxs] * b6Θdiff + - k[7][idxs] * b7Θdiff + k[8][idxs] * b8Θdiff + - k[9][idxs] * b9Θdiff + k[11][idxs] * b11Θdiff + - k[12][idxs] * b12Θdiff + k[13][idxs] * b13Θdiff + - k[14][idxs] * b14Θdiff + k[15][idxs] * b15Θdiff + - k[16][idxs] * b16Θdiff + @views @.. broadcast = false out = k[1][idxs] * b1Θdiff + k[4][idxs] * b4Θdiff + + k[5][idxs] * b5Θdiff + k[6][idxs] * b6Θdiff + + k[7][idxs] * b7Θdiff + k[8][idxs] * b8Θdiff + + k[9][idxs] * b9Θdiff + k[11][idxs] * b11Θdiff + + k[12][idxs] * b12Θdiff + k[13][idxs] * b13Θdiff + + k[14][idxs] * b14Θdiff + k[15][idxs] * b15Θdiff + + k[16][idxs] * b16Θdiff out end @@ -313,195 +385,283 @@ end @vern8unpack Θ² = Θ * Θ b1Θ = Θ * @evalpoly(Θ, r011, r012, r013, r014, r015, r016, r017, r018) - b6Θ = Θ² * @evalpoly(Θ, r062, r063, r064, r065, r066, r067, - r068) - b7Θ = Θ² * @evalpoly(Θ, r072, r073, r074, r075, r076, r077, - r078) - b8Θ = Θ² * @evalpoly(Θ, r082, r083, r084, r085, r086, r087, - r088) - b9Θ = Θ² * @evalpoly(Θ, r092, r093, r094, r095, r096, r097, - r098) - b10Θ = Θ² * @evalpoly(Θ, r102, r103, r104, r105, r106, - r107, r108) - b11Θ = Θ² * @evalpoly(Θ, r112, r113, r114, r115, r116, - r117, r118) - b12Θ = Θ² * @evalpoly(Θ, r122, r123, r124, r125, r126, - r127, r128) - b14Θ = Θ² * @evalpoly(Θ, r142, r143, r144, r145, r146, - r147, r148) - b15Θ = Θ² * @evalpoly(Θ, r152, r153, r154, r155, r156, - r157, r158) - b16Θ = Θ² * @evalpoly(Θ, r162, r163, r164, r165, r166, - r167, r168) - b17Θ = Θ² * @evalpoly(Θ, r172, r173, r174, r175, r176, - r177, r178) - b18Θ = Θ² * @evalpoly(Θ, r182, r183, r184, r185, r186, - r187, r188) - b19Θ = Θ² * @evalpoly(Θ, r192, r193, r194, r195, r196, - r197, r198) - b20Θ = Θ² * @evalpoly(Θ, r202, r203, r204, r205, r206, - r207, r208) - b21Θ = Θ² * @evalpoly(Θ, r212, r213, r214, r215, r216, - r217, r218) -end - -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::Vern8ConstantCache, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + b6Θ = Θ² * @evalpoly( + Θ, r062, r063, r064, r065, r066, r067, + r068 + ) + b7Θ = Θ² * @evalpoly( + Θ, r072, r073, r074, r075, r076, r077, + r078 + ) + b8Θ = Θ² * @evalpoly( + Θ, r082, r083, r084, r085, r086, r087, + r088 + ) + b9Θ = Θ² * @evalpoly( + Θ, r092, r093, r094, r095, r096, r097, + r098 + ) + b10Θ = Θ² * @evalpoly( + Θ, r102, r103, r104, r105, r106, + r107, r108 + ) + b11Θ = Θ² * @evalpoly( + Θ, r112, r113, r114, r115, r116, + r117, r118 + ) + b12Θ = Θ² * @evalpoly( + Θ, r122, r123, r124, r125, r126, + r127, r128 + ) + b14Θ = Θ² * @evalpoly( + Θ, r142, r143, r144, r145, r146, + r147, r148 + ) + b15Θ = Θ² * @evalpoly( + Θ, r152, r153, r154, r155, r156, + r157, r158 + ) + b16Θ = Θ² * @evalpoly( + Θ, r162, r163, r164, r165, r166, + r167, r168 + ) + b17Θ = Θ² * @evalpoly( + Θ, r172, r173, r174, r175, r176, + r177, r178 + ) + b18Θ = Θ² * @evalpoly( + Θ, r182, r183, r184, r185, r186, + r187, r188 + ) + b19Θ = Θ² * @evalpoly( + Θ, r192, r193, r194, r195, r196, + r197, r198 + ) + b20Θ = Θ² * @evalpoly( + Θ, r202, r203, r204, r205, r206, + r207, r208 + ) + b21Θ = Θ² * @evalpoly( + Θ, r212, r213, r214, r215, r216, + r217, r218 + ) +end + +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Vern8ConstantCache, + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @vern8pre0 #@.. broadcast=false y₀ + dt*(k[1]*b1Θ + k[6]*b6Θ + k[7]*b7Θ + k[8]*b8Θ + k[9]*b9Θ + k[10]*b10Θ + k[11]*b11Θ + k[12]*b12Θ + k[14]*b14Θ + k[15]*b15Θ + k[16]*b16Θ + k[17]*b17Θ + k[18]*b18Θ + k[19]*b19Θ + k[20]*b20Θ + k[21]*b21Θ) return @inbounds y₀ + - dt * (k[1] * b1Θ + k[6] * b6Θ + k[7] * b7Θ + k[8] * b8Θ + k[9] * b9Θ + - k[10] * b10Θ + k[11] * b11Θ + k[12] * b12Θ + k[14] * b14Θ + - k[15] * b15Θ + - k[16] * b16Θ + k[17] * b17Θ + k[18] * b18Θ + k[19] * b19Θ + - k[20] * b20Θ + - k[21] * b21Θ) -end - -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::Vern8Cache, idxs::Nothing, - T::Type{Val{0}}, differential_vars::Nothing) + dt * ( + k[1] * b1Θ + k[6] * b6Θ + k[7] * b7Θ + k[8] * b8Θ + k[9] * b9Θ + + k[10] * b10Θ + k[11] * b11Θ + k[12] * b12Θ + k[14] * b14Θ + + k[15] * b15Θ + + k[16] * b16Θ + k[17] * b17Θ + k[18] * b18Θ + k[19] * b19Θ + + k[20] * b20Θ + + k[21] * b21Θ + ) +end + +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Vern8Cache, idxs::Nothing, + T::Type{Val{0}}, differential_vars::Nothing + ) @vern8pre0 #@.. broadcast=false y₀ + dt*(k[1]*b1Θ + k[6]*b6Θ + k[7]*b7Θ + k[8]*b8Θ + k[9]*b9Θ + k[10]*b10Θ + k[11]*b11Θ + k[12]*b12Θ + k[14]*b14Θ + k[15]*b15Θ + k[16]*b16Θ + k[17]*b17Θ + k[18]*b18Θ + k[19]*b19Θ + k[20]*b20Θ + k[21]*b21Θ) - return @inbounds @.. broadcast=false y₀+dt * (k[1] * b1Θ + k[6] * b6Θ + k[7] * b7Θ + - k[8] * b8Θ + k[9] * b9Θ + - k[10] * b10Θ + k[11] * b11Θ + k[12] * b12Θ + - k[14] * b14Θ + k[15] * b15Θ + - k[16] * b16Θ + k[17] * b17Θ + k[18] * b18Θ + - k[19] * b19Θ + k[20] * b20Θ + - k[21] * b21Θ) -end - -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, + return @inbounds @.. broadcast = false y₀ + dt * ( + k[1] * b1Θ + k[6] * b6Θ + k[7] * b7Θ + + k[8] * b8Θ + k[9] * b9Θ + + k[10] * b10Θ + k[11] * b11Θ + k[12] * b12Θ + + k[14] * b14Θ + k[15] * b15Θ + + k[16] * b16Θ + k[17] * b17Θ + k[18] * b18Θ + + k[19] * b19Θ + k[20] * b20Θ + + k[21] * b21Θ + ) +end + +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Vern8ConstantCache, Vern8Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @vern8pre0 return y₀[idxs] + - dt * (k[1][idxs] * b1Θ + k[6][idxs] * b6Θ + k[7][idxs] * b7Θ + + dt * ( + k[1][idxs] * b1Θ + k[6][idxs] * b6Θ + k[7][idxs] * b7Θ + k[8][idxs] * b8Θ + k[9][idxs] * b9Θ + k[10][idxs] * b10Θ + k[11][idxs] * b11Θ + k[12][idxs] * b12Θ + k[14][idxs] * b14Θ + k[15][idxs] * b15Θ + k[16][idxs] * b16Θ + k[17][idxs] * b17Θ + k[18][idxs] * b18Θ + k[19][idxs] * b19Θ + k[20][idxs] * b20Θ + - k[21][idxs] * b21Θ) + k[21][idxs] * b21Θ + ) end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern8ConstantCache, Vern8Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @vern8pre0 - @inbounds @.. broadcast=false out=y₀ + - dt * - (k[1] * b1Θ + k[6] * b6Θ + k[7] * b7Θ + k[8] * b8Θ + - k[9] * b9Θ + k[10] * b10Θ + k[11] * b11Θ + - k[12] * b12Θ + k[14] * b14Θ + k[15] * b15Θ + - k[16] * b16Θ + k[17] * b17Θ + k[18] * b18Θ + - k[19] * b19Θ + k[20] * b20Θ + k[21] * b21Θ) + @inbounds @.. broadcast = false out = y₀ + + dt * + ( + k[1] * b1Θ + k[6] * b6Θ + k[7] * b7Θ + k[8] * b8Θ + + k[9] * b9Θ + k[10] * b10Θ + k[11] * b11Θ + + k[12] * b12Θ + k[14] * b14Θ + k[15] * b15Θ + + k[16] * b16Θ + k[17] * b17Θ + k[18] * b18Θ + + k[19] * b19Θ + k[20] * b20Θ + k[21] * b21Θ + ) out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern8ConstantCache, Vern8Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @vern8pre0 - @views @.. broadcast=false out=y₀[idxs] + - dt * - (k[1][idxs] * b1Θ + k[6][idxs] * b6Θ + k[7][idxs] * b7Θ + - k[8][idxs] * b8Θ + k[9][idxs] * b9Θ + - k[10][idxs] * b10Θ + k[11][idxs] * b11Θ + - k[12][idxs] * b12Θ + k[14][idxs] * b14Θ + - k[15][idxs] * b15Θ + k[16][idxs] * b16Θ + - k[17][idxs] * b17Θ + k[18][idxs] * b18Θ + - k[19][idxs] * b19Θ + k[20][idxs] * b20Θ + - k[21][idxs] * b21Θ) + @views @.. broadcast = false out = y₀[idxs] + + dt * + ( + k[1][idxs] * b1Θ + k[6][idxs] * b6Θ + k[7][idxs] * b7Θ + + k[8][idxs] * b8Θ + k[9][idxs] * b9Θ + + k[10][idxs] * b10Θ + k[11][idxs] * b11Θ + + k[12][idxs] * b12Θ + k[14][idxs] * b14Θ + + k[15][idxs] * b15Θ + k[16][idxs] * b16Θ + + k[17][idxs] * b17Θ + k[18][idxs] * b18Θ + + k[19][idxs] * b19Θ + k[20][idxs] * b20Θ + + k[21][idxs] * b21Θ + ) out end @def vern8pre1 begin @vern8unpack - b1Θdiff = @evalpoly(Θ, r011, 2*r012, 3*r013, 4*r014, 5*r015, 6*r016, 7*r017, 8*r018) - b6Θdiff = Θ * @evalpoly(Θ, 2*r062, 3*r063, 4*r064, 5*r065, 6*r066, 7*r067, - 8*r068) - b7Θdiff = Θ * @evalpoly(Θ, 2*r072, 3*r073, 4*r074, 5*r075, 6*r076, 7*r077, - 8*r078) - b8Θdiff = Θ * @evalpoly(Θ, 2*r082, 3*r083, 4*r084, 5*r085, 6*r086, 7*r087, - 8*r088) - b9Θdiff = Θ * @evalpoly(Θ, 2*r092, 3*r093, 4*r094, 5*r095, 6*r096, 7*r097, - 8*r098) - b10Θdiff = Θ * @evalpoly(Θ, 2*r102, 3*r103, 4*r104, 5*r105, 6*r106, 7*r107, - 8*r108) - b11Θdiff = Θ * @evalpoly(Θ, 2*r112, 3*r113, 4*r114, 5*r115, 6*r116, 7*r117, - 8*r118) - b12Θdiff = Θ * @evalpoly(Θ, 2*r122, 3*r123, 4*r124, 5*r125, 6*r126, 7*r127, - 8*r128) - b14Θdiff = Θ * @evalpoly(Θ, 2*r142, 3*r143, 4*r144, 5*r145, 6*r146, 7*r147, - 8*r148) - b15Θdiff = Θ * @evalpoly(Θ, 2*r152, 3*r153, 4*r154, 5*r155, 6*r156, 7*r157, - 8*r158) - b16Θdiff = Θ * @evalpoly(Θ, 2*r162, 3*r163, 4*r164, 5*r165, 6*r166, 7*r167, - 8*r168) - b17Θdiff = Θ * @evalpoly(Θ, 2*r172, 3*r173, 4*r174, 5*r175, 6*r176, 7*r177, - 8*r178) - b18Θdiff = Θ * @evalpoly(Θ, 2*r182, 3*r183, 4*r184, 5*r185, 6*r186, 7*r187, - 8*r188) - b19Θdiff = Θ * @evalpoly(Θ, 2*r192, 3*r193, 4*r194, 5*r195, 6*r196, 7*r197, - 8*r198) - b20Θdiff = Θ * @evalpoly(Θ, 2*r202, 3*r203, 4*r204, 5*r205, 6*r206, 7*r207, - 8*r208) - b21Θdiff = Θ * @evalpoly(Θ, 2*r212, 3*r213, 4*r214, 5*r215, 6*r216, 7*r217, - 8*r218) -end - -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, + b1Θdiff = @evalpoly(Θ, r011, 2 * r012, 3 * r013, 4 * r014, 5 * r015, 6 * r016, 7 * r017, 8 * r018) + b6Θdiff = Θ * @evalpoly( + Θ, 2 * r062, 3 * r063, 4 * r064, 5 * r065, 6 * r066, 7 * r067, + 8 * r068 + ) + b7Θdiff = Θ * @evalpoly( + Θ, 2 * r072, 3 * r073, 4 * r074, 5 * r075, 6 * r076, 7 * r077, + 8 * r078 + ) + b8Θdiff = Θ * @evalpoly( + Θ, 2 * r082, 3 * r083, 4 * r084, 5 * r085, 6 * r086, 7 * r087, + 8 * r088 + ) + b9Θdiff = Θ * @evalpoly( + Θ, 2 * r092, 3 * r093, 4 * r094, 5 * r095, 6 * r096, 7 * r097, + 8 * r098 + ) + b10Θdiff = Θ * @evalpoly( + Θ, 2 * r102, 3 * r103, 4 * r104, 5 * r105, 6 * r106, 7 * r107, + 8 * r108 + ) + b11Θdiff = Θ * @evalpoly( + Θ, 2 * r112, 3 * r113, 4 * r114, 5 * r115, 6 * r116, 7 * r117, + 8 * r118 + ) + b12Θdiff = Θ * @evalpoly( + Θ, 2 * r122, 3 * r123, 4 * r124, 5 * r125, 6 * r126, 7 * r127, + 8 * r128 + ) + b14Θdiff = Θ * @evalpoly( + Θ, 2 * r142, 3 * r143, 4 * r144, 5 * r145, 6 * r146, 7 * r147, + 8 * r148 + ) + b15Θdiff = Θ * @evalpoly( + Θ, 2 * r152, 3 * r153, 4 * r154, 5 * r155, 6 * r156, 7 * r157, + 8 * r158 + ) + b16Θdiff = Θ * @evalpoly( + Θ, 2 * r162, 3 * r163, 4 * r164, 5 * r165, 6 * r166, 7 * r167, + 8 * r168 + ) + b17Θdiff = Θ * @evalpoly( + Θ, 2 * r172, 3 * r173, 4 * r174, 5 * r175, 6 * r176, 7 * r177, + 8 * r178 + ) + b18Θdiff = Θ * @evalpoly( + Θ, 2 * r182, 3 * r183, 4 * r184, 5 * r185, 6 * r186, 7 * r187, + 8 * r188 + ) + b19Θdiff = Θ * @evalpoly( + Θ, 2 * r192, 3 * r193, 4 * r194, 5 * r195, 6 * r196, 7 * r197, + 8 * r198 + ) + b20Θdiff = Θ * @evalpoly( + Θ, 2 * r202, 3 * r203, 4 * r204, 5 * r205, 6 * r206, 7 * r207, + 8 * r208 + ) + b21Θdiff = Θ * @evalpoly( + Θ, 2 * r212, 3 * r213, 4 * r214, 5 * r215, 6 * r216, 7 * r217, + 8 * r218 + ) +end + +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Vern8ConstantCache, Vern8Cache}, - idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing + ) @vern8pre1 #@.. broadcast=false k[1]*b1Θdiff + k[6]*b6Θdiff + k[7]*b7Θdiff + k[8]*b8Θdiff + k[9]*b9Θdiff + k[10]*b10Θdiff + k[11]*b11Θdiff + k[12]*b12Θdiff + k[14]*b14Θdiff + k[15]*b15Θdiff + k[16]*b16Θdiff + k[17]*b17Θdiff + k[18]*b18Θdiff + k[19]*b19Θdiff + k[20]*b20Θdiff + k[21]*b21Θdiff return @inbounds k[1] * b1Θdiff + k[6] * b6Θdiff + k[7] * b7Θdiff + k[8] * b8Θdiff + - k[9] * b9Θdiff + k[10] * b10Θdiff + k[11] * b11Θdiff + - k[12] * b12Θdiff + - k[14] * b14Θdiff + k[15] * b15Θdiff + k[16] * b16Θdiff + - k[17] * b17Θdiff + - k[18] * b18Θdiff + k[19] * b19Θdiff + k[20] * b20Θdiff + - k[21] * b21Θdiff + k[9] * b9Θdiff + k[10] * b10Θdiff + k[11] * b11Θdiff + + k[12] * b12Θdiff + + k[14] * b14Θdiff + k[15] * b15Θdiff + k[16] * b16Θdiff + + k[17] * b17Θdiff + + k[18] * b18Θdiff + k[19] * b19Θdiff + k[20] * b20Θdiff + + k[21] * b21Θdiff end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Vern8ConstantCache, Vern8Cache}, idxs, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) @vern8pre1 return k[1][idxs] * b1Θdiff + k[6][idxs] * b6Θdiff + k[7][idxs] * b7Θdiff + - k[8][idxs] * b8Θdiff + k[9][idxs] * b9Θdiff + k[10][idxs] * b10Θdiff + - k[11][idxs] * b11Θdiff + k[12][idxs] * b12Θdiff + k[14][idxs] * b14Θdiff + - k[15][idxs] * b15Θdiff + k[16][idxs] * b16Θdiff + k[17][idxs] * b17Θdiff + - k[18][idxs] * b18Θdiff + k[19][idxs] * b19Θdiff + k[20][idxs] * b20Θdiff + - k[21][idxs] * b21Θdiff + k[8][idxs] * b8Θdiff + k[9][idxs] * b9Θdiff + k[10][idxs] * b10Θdiff + + k[11][idxs] * b11Θdiff + k[12][idxs] * b12Θdiff + k[14][idxs] * b14Θdiff + + k[15][idxs] * b15Θdiff + k[16][idxs] * b16Θdiff + k[17][idxs] * b17Θdiff + + k[18][idxs] * b18Θdiff + k[19][idxs] * b19Θdiff + k[20][idxs] * b20Θdiff + + k[21][idxs] * b21Θdiff end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern8ConstantCache, Vern8Cache}, - idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing + ) @vern8pre1 - @inbounds @.. broadcast=false out=k[1] * b1Θdiff + k[6] * b6Θdiff + k[7] * b7Θdiff + - k[8] * b8Θdiff + k[9] * b9Θdiff + k[10] * b10Θdiff + - k[11] * b11Θdiff + k[12] * b12Θdiff + - k[14] * b14Θdiff + k[15] * b15Θdiff + - k[16] * b16Θdiff + k[17] * b17Θdiff + - k[18] * b18Θdiff + k[19] * b19Θdiff + - k[20] * b20Θdiff + k[21] * b21Θdiff + @inbounds @.. broadcast = false out = k[1] * b1Θdiff + k[6] * b6Θdiff + k[7] * b7Θdiff + + k[8] * b8Θdiff + k[9] * b9Θdiff + k[10] * b10Θdiff + + k[11] * b11Θdiff + k[12] * b12Θdiff + + k[14] * b14Θdiff + k[15] * b15Θdiff + + k[16] * b16Θdiff + k[17] * b17Θdiff + + k[18] * b18Θdiff + k[19] * b19Θdiff + + k[20] * b20Θdiff + k[21] * b21Θdiff out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern8ConstantCache, Vern8Cache}, idxs, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) @vern8pre1 - @views @.. broadcast=false out=k[1][idxs] * b1Θdiff + k[6][idxs] * b6Θdiff + - k[7][idxs] * b7Θdiff + k[8][idxs] * b8Θdiff + - k[9][idxs] * b9Θdiff + k[10][idxs] * b10Θdiff + - k[11][idxs] * b11Θdiff + k[12][idxs] * b12Θdiff + - k[14][idxs] * b14Θdiff + k[15][idxs] * b15Θdiff + - k[16][idxs] * b16Θdiff + k[17][idxs] * b17Θdiff + - k[18][idxs] * b18Θdiff + k[19][idxs] * b19Θdiff + - k[20][idxs] * b20Θdiff + k[21][idxs] * b21Θdiff + @views @.. broadcast = false out = k[1][idxs] * b1Θdiff + k[6][idxs] * b6Θdiff + + k[7][idxs] * b7Θdiff + k[8][idxs] * b8Θdiff + + k[9][idxs] * b9Θdiff + k[10][idxs] * b10Θdiff + + k[11][idxs] * b11Θdiff + k[12][idxs] * b12Θdiff + + k[14][idxs] * b14Θdiff + k[15][idxs] * b15Θdiff + + k[16][idxs] * b16Θdiff + k[17][idxs] * b17Θdiff + + k[18][idxs] * b18Θdiff + k[19][idxs] * b19Θdiff + + k[20][idxs] * b20Θdiff + k[21][idxs] * b21Θdiff out end @@ -514,304 +674,453 @@ end @def vern9pre0 begin @vern9unpack Θ² = Θ * Θ - b1Θ = Θ * @evalpoly(Θ, r011, r012, r013, r014, r015, r016, r017, r018, - r019) - b8Θ = Θ² * @evalpoly(Θ, r082, r083, r084, r085, r086, r087, - r088, r089) - b9Θ = Θ² * @evalpoly(Θ, r092, r093, r094, r095, r096, r097, - r098, r099) - b10Θ = Θ² * @evalpoly(Θ, r102, r103, r104, r105, r106, - r107, r108, r109) - b11Θ = Θ² * @evalpoly(Θ, r112, r113, r114, r115, r116, - r117, r118, r119) - b12Θ = Θ² * @evalpoly(Θ, r122, r123, r124, r125, r126, - r127, r128, r129) - b13Θ = Θ² * @evalpoly(Θ, r132, r133, r134, r135, r136, - r137, r138, r139) - b14Θ = Θ² * @evalpoly(Θ, r142, r143, r144, r145, r146, - r147, r148, r149) - b15Θ = Θ² * @evalpoly(Θ, r152, r153, r154, r155, r156, - r157, r158, r159) - b17Θ = Θ² * @evalpoly(Θ, r172, r173, r174, r175, r176, - r177, r178, r179) - b18Θ = Θ² * @evalpoly(Θ, r182, r183, r184, r185, r186, - r187, r188, r189) - b19Θ = Θ² * @evalpoly(Θ, r192, r193, r194, r195, r196, - r197, r198, r199) - b20Θ = Θ² * @evalpoly(Θ, r202, r203, r204, r205, r206, - r207, r208, r209) - b21Θ = Θ² * @evalpoly(Θ, r212, r213, r214, r215, r216, - r217, r218, r219) - b22Θ = Θ² * @evalpoly(Θ, r222, r223, r224, r225, r226, - r227, r228, r229) - b23Θ = Θ² * @evalpoly(Θ, r232, r233, r234, r235, r236, - r237, r238, r239) - b24Θ = Θ² * @evalpoly(Θ, r242, r243, r244, r245, r246, - r247, r248, r249) - b25Θ = Θ² * @evalpoly(Θ, r252, r253, r254, r255, r256, - r257, r258, r259) - b26Θ = Θ² * @evalpoly(Θ, r262, r263, r264, r265, r266, - r267, r268, r269) -end - -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::Vern9ConstantCache, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + b1Θ = Θ * @evalpoly( + Θ, r011, r012, r013, r014, r015, r016, r017, r018, + r019 + ) + b8Θ = Θ² * @evalpoly( + Θ, r082, r083, r084, r085, r086, r087, + r088, r089 + ) + b9Θ = Θ² * @evalpoly( + Θ, r092, r093, r094, r095, r096, r097, + r098, r099 + ) + b10Θ = Θ² * @evalpoly( + Θ, r102, r103, r104, r105, r106, + r107, r108, r109 + ) + b11Θ = Θ² * @evalpoly( + Θ, r112, r113, r114, r115, r116, + r117, r118, r119 + ) + b12Θ = Θ² * @evalpoly( + Θ, r122, r123, r124, r125, r126, + r127, r128, r129 + ) + b13Θ = Θ² * @evalpoly( + Θ, r132, r133, r134, r135, r136, + r137, r138, r139 + ) + b14Θ = Θ² * @evalpoly( + Θ, r142, r143, r144, r145, r146, + r147, r148, r149 + ) + b15Θ = Θ² * @evalpoly( + Θ, r152, r153, r154, r155, r156, + r157, r158, r159 + ) + b17Θ = Θ² * @evalpoly( + Θ, r172, r173, r174, r175, r176, + r177, r178, r179 + ) + b18Θ = Θ² * @evalpoly( + Θ, r182, r183, r184, r185, r186, + r187, r188, r189 + ) + b19Θ = Θ² * @evalpoly( + Θ, r192, r193, r194, r195, r196, + r197, r198, r199 + ) + b20Θ = Θ² * @evalpoly( + Θ, r202, r203, r204, r205, r206, + r207, r208, r209 + ) + b21Θ = Θ² * @evalpoly( + Θ, r212, r213, r214, r215, r216, + r217, r218, r219 + ) + b22Θ = Θ² * @evalpoly( + Θ, r222, r223, r224, r225, r226, + r227, r228, r229 + ) + b23Θ = Θ² * @evalpoly( + Θ, r232, r233, r234, r235, r236, + r237, r238, r239 + ) + b24Θ = Θ² * @evalpoly( + Θ, r242, r243, r244, r245, r246, + r247, r248, r249 + ) + b25Θ = Θ² * @evalpoly( + Θ, r252, r253, r254, r255, r256, + r257, r258, r259 + ) + b26Θ = Θ² * @evalpoly( + Θ, r262, r263, r264, r265, r266, + r267, r268, r269 + ) +end + +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Vern9ConstantCache, + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @vern9pre0 #@.. broadcast=false y₀ + dt*(k[1]*b1Θ + k[2]*b8Θ + k[3]*b9Θ + k[4]*b10Θ + k[5]*b11Θ + k[6]*b12Θ + k[7]*b13Θ + k[8]*b14Θ + k[9]*b15Θ + k[11]*b17Θ + k[12]*b18Θ + k[13]*b19Θ + k[14]*b20Θ + k[15]*b21Θ + k[16]*b22Θ + k[17]*b23Θ + k[18]*b24Θ + k[19]*b25Θ + k[20]*b26Θ) return @inbounds y₀ + - dt * - (k[1] * b1Θ + k[2] * b8Θ + k[3] * b9Θ + k[4] * b10Θ + k[5] * b11Θ + - k[6] * b12Θ + k[7] * b13Θ + k[8] * b14Θ + k[9] * b15Θ + k[11] * b17Θ + - k[12] * b18Θ + k[13] * b19Θ + k[14] * b20Θ + k[15] * b21Θ + - k[16] * b22Θ + - k[17] * b23Θ + k[18] * b24Θ + k[19] * b25Θ + k[20] * b26Θ) -end - -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, cache::Vern9Cache, idxs::Nothing, - T::Type{Val{0}}, differential_vars::Nothing) + dt * + ( + k[1] * b1Θ + k[2] * b8Θ + k[3] * b9Θ + k[4] * b10Θ + k[5] * b11Θ + + k[6] * b12Θ + k[7] * b13Θ + k[8] * b14Θ + k[9] * b15Θ + k[11] * b17Θ + + k[12] * b18Θ + k[13] * b19Θ + k[14] * b20Θ + k[15] * b21Θ + + k[16] * b22Θ + + k[17] * b23Θ + k[18] * b24Θ + k[19] * b25Θ + k[20] * b26Θ + ) +end + +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Vern9Cache, idxs::Nothing, + T::Type{Val{0}}, differential_vars::Nothing + ) @vern9pre0 #@.. broadcast=false y₀ + dt*(k[1]*b1Θ + k[2]*b8Θ + k[3]*b9Θ + k[4]*b10Θ + k[5]*b11Θ + k[6]*b12Θ + k[7]*b13Θ + k[8]*b14Θ + k[9]*b15Θ + k[11]*b17Θ + k[12]*b18Θ + k[13]*b19Θ + k[14]*b20Θ + k[15]*b21Θ + k[16]*b22Θ + k[17]*b23Θ + k[18]*b24Θ + k[19]*b25Θ + k[20]*b26Θ) - return @inbounds @.. broadcast=false y₀+dt * (k[1] * b1Θ + k[2] * b8Θ + k[3] * b9Θ + - k[4] * b10Θ + k[5] * b11Θ + - k[6] * b12Θ + k[7] * b13Θ + k[8] * b14Θ + - k[9] * b15Θ + k[11] * b17Θ + - k[12] * b18Θ + k[13] * b19Θ + k[14] * b20Θ + - k[15] * b21Θ + k[16] * b22Θ + - k[17] * b23Θ + k[18] * b24Θ + k[19] * b25Θ + - k[20] * b26Θ) -end - -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, + return @inbounds @.. broadcast = false y₀ + dt * ( + k[1] * b1Θ + k[2] * b8Θ + k[3] * b9Θ + + k[4] * b10Θ + k[5] * b11Θ + + k[6] * b12Θ + k[7] * b13Θ + k[8] * b14Θ + + k[9] * b15Θ + k[11] * b17Θ + + k[12] * b18Θ + k[13] * b19Θ + k[14] * b20Θ + + k[15] * b21Θ + k[16] * b22Θ + + k[17] * b23Θ + k[18] * b24Θ + k[19] * b25Θ + + k[20] * b26Θ + ) +end + +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Vern9ConstantCache, Vern9Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @vern9pre0 return y₀[idxs] + - dt * (k[1][idxs] * b1Θ + k[2][idxs] * b8Θ + k[3][idxs] * b9Θ + + dt * ( + k[1][idxs] * b1Θ + k[2][idxs] * b8Θ + k[3][idxs] * b9Θ + k[4][idxs] * b10Θ + k[5][idxs] * b11Θ + k[6][idxs] * b12Θ + k[7][idxs] * b13Θ + k[8][idxs] * b14Θ + k[9][idxs] * b15Θ + k[11][idxs] * b17Θ + k[12][idxs] * b18Θ + k[13][idxs] * b19Θ + k[14][idxs] * b20Θ + k[15][idxs] * b21Θ + k[16][idxs] * b22Θ + k[17][idxs] * b23Θ + k[18][idxs] * b24Θ + - k[19][idxs] * b25Θ + k[20][idxs] * b26Θ) + k[19][idxs] * b25Θ + k[20][idxs] * b26Θ + ) end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern9ConstantCache, Vern9Cache}, - idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{0}}, differential_vars::Nothing + ) @vern9pre0 - @inbounds @.. broadcast=false out=y₀ + - dt * - (k[1] * b1Θ + k[2] * b8Θ + k[3] * b9Θ + k[4] * b10Θ + - k[5] * b11Θ + k[6] * b12Θ + k[7] * b13Θ + - k[8] * b14Θ + k[9] * b15Θ + k[11] * b17Θ + - k[12] * b18Θ + k[13] * b19Θ + k[14] * b20Θ + - k[15] * b21Θ + k[16] * b22Θ + k[17] * b23Θ + - k[18] * b24Θ + k[19] * b25Θ + k[20] * b26Θ) + @inbounds @.. broadcast = false out = y₀ + + dt * + ( + k[1] * b1Θ + k[2] * b8Θ + k[3] * b9Θ + k[4] * b10Θ + + k[5] * b11Θ + k[6] * b12Θ + k[7] * b13Θ + + k[8] * b14Θ + k[9] * b15Θ + k[11] * b17Θ + + k[12] * b18Θ + k[13] * b19Θ + k[14] * b20Θ + + k[15] * b21Θ + k[16] * b22Θ + k[17] * b23Θ + + k[18] * b24Θ + k[19] * b25Θ + k[20] * b26Θ + ) out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern9ConstantCache, Vern9Cache}, idxs, - T::Type{Val{0}}, differential_vars::Nothing) + T::Type{Val{0}}, differential_vars::Nothing + ) @vern9pre0 - @views @.. broadcast=false out=y₀[idxs] + - dt * - (k[1][idxs] * b1Θ + k[2][idxs] * b8Θ + k[3][idxs] * b9Θ + - k[4][idxs] * b10Θ + k[5][idxs] * b11Θ + - k[6][idxs] * b12Θ + k[7][idxs] * b13Θ + - k[8][idxs] * b14Θ + k[9][idxs] * b15Θ + - k[11][idxs] * b17Θ + k[12][idxs] * b18Θ + - k[13][idxs] * b19Θ + k[14][idxs] * b20Θ + - k[15][idxs] * b21Θ + k[16][idxs] * b22Θ + - k[17][idxs] * b23Θ + k[18][idxs] * b24Θ + - k[19][idxs] * b25Θ + k[20][idxs] * b26Θ) + @views @.. broadcast = false out = y₀[idxs] + + dt * + ( + k[1][idxs] * b1Θ + k[2][idxs] * b8Θ + k[3][idxs] * b9Θ + + k[4][idxs] * b10Θ + k[5][idxs] * b11Θ + + k[6][idxs] * b12Θ + k[7][idxs] * b13Θ + + k[8][idxs] * b14Θ + k[9][idxs] * b15Θ + + k[11][idxs] * b17Θ + k[12][idxs] * b18Θ + + k[13][idxs] * b19Θ + k[14][idxs] * b20Θ + + k[15][idxs] * b21Θ + k[16][idxs] * b22Θ + + k[17][idxs] * b23Θ + k[18][idxs] * b24Θ + + k[19][idxs] * b25Θ + k[20][idxs] * b26Θ + ) out end @def vern9pre1 begin @vern9unpack - b1Θdiff = @evalpoly(Θ, r011, 2*r012, 3*r013, 4*r014, 5*r015, 6*r016, 7*r017, 8*r018, - 9*r019) - b8Θdiff = Θ * @evalpoly(Θ, 2*r082, 3*r083, 4*r084, 5*r085, 6*r086, 7*r087, - 8*r088, - 9*r089) - b9Θdiff = Θ * @evalpoly(Θ, 2*r092, 3*r093, 4*r094, 5*r095, 6*r096, 7*r097, - 8*r098, - 9*r099) - b10Θdiff = Θ * @evalpoly(Θ, 2*r102, 3*r103, 4*r104, 5*r105, 6*r106, 7*r107, - 8*r108, - 9*r109) - b11Θdiff = Θ * @evalpoly(Θ, 2*r112, 3*r113, 4*r114, 5*r115, 6*r116, 7*r117, - 8*r118, - 9*r119) - b12Θdiff = Θ * @evalpoly(Θ, 2*r122, 3*r123, 4*r124, 5*r125, 6*r126, 7*r127, - 8*r128, - 9*r129) - b13Θdiff = Θ * @evalpoly(Θ, 2*r132, 3*r133, 4*r134, 5*r135, 6*r136, 7*r137, - 8*r138, - 9*r139) - b14Θdiff = Θ * @evalpoly(Θ, 2*r142, 3*r143, 4*r144, 5*r145, 6*r146, 7*r147, - 8*r148, - 9*r149) - b15Θdiff = Θ * @evalpoly(Θ, 2*r152, 3*r153, 4*r154, 5*r155, 6*r156, 7*r157, - 8*r158, - 9*r159) - b17Θdiff = Θ * @evalpoly(Θ, 2*r172, 3*r173, 4*r174, 5*r175, 6*r176, 7*r177, - 8*r178, - 9*r179) - b18Θdiff = Θ * @evalpoly(Θ, 2*r182, 3*r183, 4*r184, 5*r185, 6*r186, 7*r187, - 8*r188, - 9*r189) - b19Θdiff = Θ * @evalpoly(Θ, 2*r192, 3*r193, 4*r194, 5*r195, 6*r196, 7*r197, - 8*r198, - 9*r199) - b20Θdiff = Θ * @evalpoly(Θ, 2*r202, 3*r203, 4*r204, 5*r205, 6*r206, 7*r207, - 8*r208, - 9*r209) - b21Θdiff = Θ * @evalpoly(Θ, 2*r212, 3*r213, 4*r214, 5*r215, 6*r216, 7*r217, - 8*r218, - 9*r219) - b22Θdiff = Θ * @evalpoly(Θ, 2*r222, 3*r223, 4*r224, 5*r225, 6*r226, 7*r227, - 8*r228, - 9*r229) - b23Θdiff = Θ * @evalpoly(Θ, 2*r232, 3*r233, 4*r234, 5*r235, 6*r236, 7*r237, - 8*r238, - 9*r239) - b24Θdiff = Θ * @evalpoly(Θ, 2*r242, 3*r243, 4*r244, 5*r245, 6*r246, 7*r247, - 8*r248, - 9*r249) - b25Θdiff = Θ * @evalpoly(Θ, 2*r252, 3*r253, 4*r254, 5*r255, 6*r256, 7*r257, - 8*r258, - 9*r259) - b26Θdiff = Θ * @evalpoly(Θ, 2*r262, 3*r263, 4*r264, 5*r265, 6*r266, 7*r267, - 8*r268, - 9*r269) -end - -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, + b1Θdiff = @evalpoly( + Θ, r011, 2 * r012, 3 * r013, 4 * r014, 5 * r015, 6 * r016, 7 * r017, 8 * r018, + 9 * r019 + ) + b8Θdiff = Θ * @evalpoly( + Θ, 2 * r082, 3 * r083, 4 * r084, 5 * r085, 6 * r086, 7 * r087, + 8 * r088, + 9 * r089 + ) + b9Θdiff = Θ * @evalpoly( + Θ, 2 * r092, 3 * r093, 4 * r094, 5 * r095, 6 * r096, 7 * r097, + 8 * r098, + 9 * r099 + ) + b10Θdiff = Θ * @evalpoly( + Θ, 2 * r102, 3 * r103, 4 * r104, 5 * r105, 6 * r106, 7 * r107, + 8 * r108, + 9 * r109 + ) + b11Θdiff = Θ * @evalpoly( + Θ, 2 * r112, 3 * r113, 4 * r114, 5 * r115, 6 * r116, 7 * r117, + 8 * r118, + 9 * r119 + ) + b12Θdiff = Θ * @evalpoly( + Θ, 2 * r122, 3 * r123, 4 * r124, 5 * r125, 6 * r126, 7 * r127, + 8 * r128, + 9 * r129 + ) + b13Θdiff = Θ * @evalpoly( + Θ, 2 * r132, 3 * r133, 4 * r134, 5 * r135, 6 * r136, 7 * r137, + 8 * r138, + 9 * r139 + ) + b14Θdiff = Θ * @evalpoly( + Θ, 2 * r142, 3 * r143, 4 * r144, 5 * r145, 6 * r146, 7 * r147, + 8 * r148, + 9 * r149 + ) + b15Θdiff = Θ * @evalpoly( + Θ, 2 * r152, 3 * r153, 4 * r154, 5 * r155, 6 * r156, 7 * r157, + 8 * r158, + 9 * r159 + ) + b17Θdiff = Θ * @evalpoly( + Θ, 2 * r172, 3 * r173, 4 * r174, 5 * r175, 6 * r176, 7 * r177, + 8 * r178, + 9 * r179 + ) + b18Θdiff = Θ * @evalpoly( + Θ, 2 * r182, 3 * r183, 4 * r184, 5 * r185, 6 * r186, 7 * r187, + 8 * r188, + 9 * r189 + ) + b19Θdiff = Θ * @evalpoly( + Θ, 2 * r192, 3 * r193, 4 * r194, 5 * r195, 6 * r196, 7 * r197, + 8 * r198, + 9 * r199 + ) + b20Θdiff = Θ * @evalpoly( + Θ, 2 * r202, 3 * r203, 4 * r204, 5 * r205, 6 * r206, 7 * r207, + 8 * r208, + 9 * r209 + ) + b21Θdiff = Θ * @evalpoly( + Θ, 2 * r212, 3 * r213, 4 * r214, 5 * r215, 6 * r216, 7 * r217, + 8 * r218, + 9 * r219 + ) + b22Θdiff = Θ * @evalpoly( + Θ, 2 * r222, 3 * r223, 4 * r224, 5 * r225, 6 * r226, 7 * r227, + 8 * r228, + 9 * r229 + ) + b23Θdiff = Θ * @evalpoly( + Θ, 2 * r232, 3 * r233, 4 * r234, 5 * r235, 6 * r236, 7 * r237, + 8 * r238, + 9 * r239 + ) + b24Θdiff = Θ * @evalpoly( + Θ, 2 * r242, 3 * r243, 4 * r244, 5 * r245, 6 * r246, 7 * r247, + 8 * r248, + 9 * r249 + ) + b25Θdiff = Θ * @evalpoly( + Θ, 2 * r252, 3 * r253, 4 * r254, 5 * r255, 6 * r256, 7 * r257, + 8 * r258, + 9 * r259 + ) + b26Θdiff = Θ * @evalpoly( + Θ, 2 * r262, 3 * r263, 4 * r264, 5 * r265, 6 * r266, 7 * r267, + 8 * r268, + 9 * r269 + ) +end + +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Vern9ConstantCache, Vern9Cache}, - idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing + ) @vern9pre1 #@.. broadcast=false k[1]*b1Θdiff + k[2]*b8Θdiff + k[3]*b9Θdiff + k[4]*b10Θdiff + k[5]*b11Θdiff + k[6]*b12Θdiff + k[7]*b13Θdiff + k[8]*b14Θdiff + k[9]*b15Θdiff + k[11]*b17Θdiff + k[12]*b18Θdiff + k[13]*b19Θdiff + k[14]*b20Θdiff + k[15]*b21Θdiff + k[16]*b22Θdiff + k[17]*b23Θdiff + k[18]*b24Θdiff + k[19]*b25Θdiff + k[20]*b26Θdiff return @inbounds k[1] * b1Θdiff + k[2] * b8Θdiff + k[3] * b9Θdiff + k[4] * b10Θdiff + - k[5] * b11Θdiff + k[6] * b12Θdiff + k[7] * b13Θdiff + k[8] * b14Θdiff + - k[9] * b15Θdiff + k[11] * b17Θdiff + k[12] * b18Θdiff + - k[13] * b19Θdiff + - k[14] * b20Θdiff + k[15] * b21Θdiff + k[16] * b22Θdiff + - k[17] * b23Θdiff + - k[18] * b24Θdiff + k[19] * b25Θdiff + k[20] * b26Θdiff + k[5] * b11Θdiff + k[6] * b12Θdiff + k[7] * b13Θdiff + k[8] * b14Θdiff + + k[9] * b15Θdiff + k[11] * b17Θdiff + k[12] * b18Θdiff + + k[13] * b19Θdiff + + k[14] * b20Θdiff + k[15] * b21Θdiff + k[16] * b22Θdiff + + k[17] * b23Θdiff + + k[18] * b24Θdiff + k[19] * b25Θdiff + k[20] * b26Θdiff end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Vern9ConstantCache, Vern9Cache}, idxs, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) @vern9pre1 return k[1][idxs] * b1Θdiff + k[2][idxs] * b8Θdiff + k[3][idxs] * b9Θdiff + - k[4][idxs] * b10Θdiff + k[5][idxs] * b11Θdiff + - k[6][idxs] * b12Θdiff + k[7][idxs] * b13Θdiff + - k[8][idxs] * b14Θdiff + k[9][idxs] * b15Θdiff + - k[11][idxs] * b17Θdiff + k[12][idxs] * b18Θdiff + - k[13][idxs] * b19Θdiff + k[14][idxs] * b20Θdiff + - k[15][idxs] * b21Θdiff + k[16][idxs] * b22Θdiff + - k[17][idxs] * b23Θdiff + k[18][idxs] * b24Θdiff + - k[19][idxs] * b25Θdiff + k[20][idxs] * b26Θdiff -end - -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, + k[4][idxs] * b10Θdiff + k[5][idxs] * b11Θdiff + + k[6][idxs] * b12Θdiff + k[7][idxs] * b13Θdiff + + k[8][idxs] * b14Θdiff + k[9][idxs] * b15Θdiff + + k[11][idxs] * b17Θdiff + k[12][idxs] * b18Θdiff + + k[13][idxs] * b19Θdiff + k[14][idxs] * b20Θdiff + + k[15][idxs] * b21Θdiff + k[16][idxs] * b22Θdiff + + k[17][idxs] * b23Θdiff + k[18][idxs] * b24Θdiff + + k[19][idxs] * b25Θdiff + k[20][idxs] * b26Θdiff +end + +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern9ConstantCache, Vern9Cache}, - idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{1}}, differential_vars::Nothing + ) @vern9pre1 - @inbounds @.. broadcast=false out=k[1] * b1Θdiff + k[2] * b8Θdiff + k[3] * b9Θdiff + - k[4] * b10Θdiff + k[5] * b11Θdiff + k[6] * b12Θdiff + - k[7] * b13Θdiff + k[8] * b14Θdiff + k[9] * b15Θdiff + - k[11] * b17Θdiff + k[12] * b18Θdiff + - k[13] * b19Θdiff + k[14] * b20Θdiff + - k[15] * b21Θdiff + k[16] * b22Θdiff + - k[17] * b23Θdiff + k[18] * b24Θdiff + - k[19] * b25Θdiff + k[20] * b26Θdiff + @inbounds @.. broadcast = false out = k[1] * b1Θdiff + k[2] * b8Θdiff + k[3] * b9Θdiff + + k[4] * b10Θdiff + k[5] * b11Θdiff + k[6] * b12Θdiff + + k[7] * b13Θdiff + k[8] * b14Θdiff + k[9] * b15Θdiff + + k[11] * b17Θdiff + k[12] * b18Θdiff + + k[13] * b19Θdiff + k[14] * b20Θdiff + + k[15] * b21Θdiff + k[16] * b22Θdiff + + k[17] * b23Θdiff + k[18] * b24Θdiff + + k[19] * b25Θdiff + k[20] * b26Θdiff out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern9ConstantCache, Vern9Cache}, idxs, - T::Type{Val{1}}, differential_vars::Nothing) + T::Type{Val{1}}, differential_vars::Nothing + ) @vern9pre1 - @views @.. broadcast=false out=k[1][idxs] * b1Θdiff + k[2][idxs] * b8Θdiff + - k[3][idxs] * b9Θdiff + k[4][idxs] * b10Θdiff + - k[5][idxs] * b11Θdiff + k[6][idxs] * b12Θdiff + - k[7][idxs] * b13Θdiff + k[8][idxs] * b14Θdiff + - k[9][idxs] * b15Θdiff + k[11][idxs] * b17Θdiff + - k[12][idxs] * b18Θdiff + k[13][idxs] * b19Θdiff + - k[14][idxs] * b20Θdiff + k[15][idxs] * b21Θdiff + - k[16][idxs] * b22Θdiff + k[17][idxs] * b23Θdiff + - k[18][idxs] * b24Θdiff + k[19][idxs] * b25Θdiff + - k[20][idxs] * b26Θdiff + @views @.. broadcast = false out = k[1][idxs] * b1Θdiff + k[2][idxs] * b8Θdiff + + k[3][idxs] * b9Θdiff + k[4][idxs] * b10Θdiff + + k[5][idxs] * b11Θdiff + k[6][idxs] * b12Θdiff + + k[7][idxs] * b13Θdiff + k[8][idxs] * b14Θdiff + + k[9][idxs] * b15Θdiff + k[11][idxs] * b17Θdiff + + k[12][idxs] * b18Θdiff + k[13][idxs] * b19Θdiff + + k[14][idxs] * b20Θdiff + k[15][idxs] * b21Θdiff + + k[16][idxs] * b22Θdiff + k[17][idxs] * b23Θdiff + + k[18][idxs] * b24Θdiff + k[19][idxs] * b25Θdiff + + k[20][idxs] * b26Θdiff out end @def vern9pre2 begin @vern9unpack - b1Θdiff = @evalpoly(Θ, 2*r012, 6*r013, 12*r014, 20*r015, 30*r016, 42*r017, 56*r018, - 72*r019) - b8Θdiff = @evalpoly(Θ, 2*r082, 6*r083, 12*r084, 20*r085, 30*r086, 42*r087, 56*r088, - 72*r089) - b9Θdiff = @evalpoly(Θ, 2*r092, 6*r093, 12*r094, 20*r095, 30*r096, 42*r097, 56*r098, - 72*r099) - b10Θdiff = @evalpoly(Θ, 2*r102, 6*r103, 12*r104, 20*r105, 30*r106, 42*r107, 56*r108, - 72*r109) - b11Θdiff = @evalpoly(Θ, 2*r112, 6*r113, 12*r114, 20*r115, 30*r116, 42*r117, 56*r118, - 72*r119) - b12Θdiff = @evalpoly(Θ, 2*r122, 6*r123, 12*r124, 20*r125, 30*r126, 42*r127, 56*r128, - 72*r129) - b13Θdiff = @evalpoly(Θ, 2*r132, 6*r133, 12*r134, 20*r135, 30*r136, 42*r137, 56*r138, - 72*r139) - b14Θdiff = @evalpoly(Θ, 2*r142, 6*r143, 12*r144, 20*r145, 30*r146, 42*r147, 56*r148, - 72*r149) - b15Θdiff = @evalpoly(Θ, 2*r152, 6*r153, 12*r154, 20*r155, 30*r156, 42*r157, 56*r158, - 72*r159) - b17Θdiff = @evalpoly(Θ, 2*r172, 6*r173, 12*r174, 20*r175, 30*r176, 42*r177, 56*r178, - 72*r179) - b18Θdiff = @evalpoly(Θ, 2*r182, 6*r183, 12*r184, 20*r185, 30*r186, 42*r187, 56*r188, - 72*r189) - b19Θdiff = @evalpoly(Θ, 2*r192, 6*r193, 12*r194, 20*r195, 30*r196, 42*r197, 56*r198, - 72*r199) - b20Θdiff = @evalpoly(Θ, 2*r202, 6*r203, 12*r204, 20*r205, 30*r206, 42*r207, 56*r208, - 72*r209) - b21Θdiff = @evalpoly(Θ, 2*r212, 6*r213, 12*r214, 20*r215, 30*r216, 42*r217, 56*r218, - 72*r219) - b22Θdiff = @evalpoly(Θ, 2*r222, 6*r223, 12*r224, 20*r225, 30*r226, 42*r227, 56*r228, - 72*r229) - b23Θdiff = @evalpoly(Θ, 2*r232, 6*r233, 12*r234, 20*r235, 30*r236, 42*r237, 56*r238, - 72*r239) - b24Θdiff = @evalpoly(Θ, 2*r242, 6*r243, 12*r244, 20*r245, 30*r246, 42*r247, 56*r248, - 72*r249) - b25Θdiff = @evalpoly(Θ, 2*r252, 6*r253, 12*r254, 20*r255, 30*r256, 42*r257, 56*r258, - 72*r259) - b26Θdiff = @evalpoly(Θ, 2*r262, 6*r263, 12*r264, 20*r265, 30*r266, 42*r267, 56*r268, - 72*r269) + b1Θdiff = @evalpoly( + Θ, 2 * r012, 6 * r013, 12 * r014, 20 * r015, 30 * r016, 42 * r017, 56 * r018, + 72 * r019 + ) + b8Θdiff = @evalpoly( + Θ, 2 * r082, 6 * r083, 12 * r084, 20 * r085, 30 * r086, 42 * r087, 56 * r088, + 72 * r089 + ) + b9Θdiff = @evalpoly( + Θ, 2 * r092, 6 * r093, 12 * r094, 20 * r095, 30 * r096, 42 * r097, 56 * r098, + 72 * r099 + ) + b10Θdiff = @evalpoly( + Θ, 2 * r102, 6 * r103, 12 * r104, 20 * r105, 30 * r106, 42 * r107, 56 * r108, + 72 * r109 + ) + b11Θdiff = @evalpoly( + Θ, 2 * r112, 6 * r113, 12 * r114, 20 * r115, 30 * r116, 42 * r117, 56 * r118, + 72 * r119 + ) + b12Θdiff = @evalpoly( + Θ, 2 * r122, 6 * r123, 12 * r124, 20 * r125, 30 * r126, 42 * r127, 56 * r128, + 72 * r129 + ) + b13Θdiff = @evalpoly( + Θ, 2 * r132, 6 * r133, 12 * r134, 20 * r135, 30 * r136, 42 * r137, 56 * r138, + 72 * r139 + ) + b14Θdiff = @evalpoly( + Θ, 2 * r142, 6 * r143, 12 * r144, 20 * r145, 30 * r146, 42 * r147, 56 * r148, + 72 * r149 + ) + b15Θdiff = @evalpoly( + Θ, 2 * r152, 6 * r153, 12 * r154, 20 * r155, 30 * r156, 42 * r157, 56 * r158, + 72 * r159 + ) + b17Θdiff = @evalpoly( + Θ, 2 * r172, 6 * r173, 12 * r174, 20 * r175, 30 * r176, 42 * r177, 56 * r178, + 72 * r179 + ) + b18Θdiff = @evalpoly( + Θ, 2 * r182, 6 * r183, 12 * r184, 20 * r185, 30 * r186, 42 * r187, 56 * r188, + 72 * r189 + ) + b19Θdiff = @evalpoly( + Θ, 2 * r192, 6 * r193, 12 * r194, 20 * r195, 30 * r196, 42 * r197, 56 * r198, + 72 * r199 + ) + b20Θdiff = @evalpoly( + Θ, 2 * r202, 6 * r203, 12 * r204, 20 * r205, 30 * r206, 42 * r207, 56 * r208, + 72 * r209 + ) + b21Θdiff = @evalpoly( + Θ, 2 * r212, 6 * r213, 12 * r214, 20 * r215, 30 * r216, 42 * r217, 56 * r218, + 72 * r219 + ) + b22Θdiff = @evalpoly( + Θ, 2 * r222, 6 * r223, 12 * r224, 20 * r225, 30 * r226, 42 * r227, 56 * r228, + 72 * r229 + ) + b23Θdiff = @evalpoly( + Θ, 2 * r232, 6 * r233, 12 * r234, 20 * r235, 30 * r236, 42 * r237, 56 * r238, + 72 * r239 + ) + b24Θdiff = @evalpoly( + Θ, 2 * r242, 6 * r243, 12 * r244, 20 * r245, 30 * r246, 42 * r247, 56 * r248, + 72 * r249 + ) + b25Θdiff = @evalpoly( + Θ, 2 * r252, 6 * r253, 12 * r254, 20 * r255, 30 * r256, 42 * r257, 56 * r258, + 72 * r259 + ) + b26Θdiff = @evalpoly( + Θ, 2 * r262, 6 * r263, 12 * r264, 20 * r265, 30 * r266, 42 * r267, 56 * r268, + 72 * r269 + ) invdt = inv(dt) end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Vern9ConstantCache, Vern9Cache}, - idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing + ) @vern9pre2 #@.. broadcast=false k[1]*b1Θdiff + k[2]*b8Θdiff + k[3]*b9Θdiff + k[4]*b10Θdiff + k[5]*b11Θdiff + k[6]*b12Θdiff + k[7]*b13Θdiff + k[8]*b14Θdiff + k[9]*b15Θdiff + k[11]*b17Θdiff + k[12]*b18Θdiff + k[13]*b19Θdiff + k[14]*b20Θdiff + k[15]*b21Θdiff + k[16]*b22Θdiff + k[17]*b23Θdiff + k[18]*b24Θdiff + k[19]*b25Θdiff + k[20]*b26Θdiff - return @inbounds (k[1] * b1Θdiff + k[2] * b8Θdiff + k[3] * b9Θdiff + k[4] * b10Θdiff + - k[5] * b11Θdiff + k[6] * b12Θdiff + k[7] * b13Θdiff + - k[8] * b14Θdiff + - k[9] * b15Θdiff + k[11] * b17Θdiff + k[12] * b18Θdiff + - k[13] * b19Θdiff + - k[14] * b20Θdiff + k[15] * b21Θdiff + k[16] * b22Θdiff + - k[17] * b23Θdiff + - k[18] * b24Θdiff + k[19] * b25Θdiff + k[20] * b26Θdiff) * invdt -end - -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, + return @inbounds ( + k[1] * b1Θdiff + k[2] * b8Θdiff + k[3] * b9Θdiff + k[4] * b10Θdiff + + k[5] * b11Θdiff + k[6] * b12Θdiff + k[7] * b13Θdiff + + k[8] * b14Θdiff + + k[9] * b15Θdiff + k[11] * b17Θdiff + k[12] * b18Θdiff + + k[13] * b19Θdiff + + k[14] * b20Θdiff + k[15] * b21Θdiff + k[16] * b22Θdiff + + k[17] * b23Θdiff + + k[18] * b24Θdiff + k[19] * b25Θdiff + k[20] * b26Θdiff + ) * invdt +end + +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Vern9ConstantCache, Vern9Cache}, idxs, - T::Type{Val{2}}, differential_vars::Nothing) + T::Type{Val{2}}, differential_vars::Nothing + ) @vern9pre2 - return (k[1][idxs] * b1Θdiff + k[2][idxs] * b8Θdiff + k[3][idxs] * b9Θdiff + + return ( + k[1][idxs] * b1Θdiff + k[2][idxs] * b8Θdiff + k[3][idxs] * b9Θdiff + k[4][idxs] * b10Θdiff + k[5][idxs] * b11Θdiff + k[6][idxs] * b12Θdiff + k[7][idxs] * b13Θdiff + k[8][idxs] * b14Θdiff + k[9][idxs] * b15Θdiff + @@ -819,101 +1128,149 @@ end k[13][idxs] * b19Θdiff + k[14][idxs] * b20Θdiff + k[15][idxs] * b21Θdiff + k[16][idxs] * b22Θdiff + k[17][idxs] * b23Θdiff + k[18][idxs] * b24Θdiff + - k[19][idxs] * b25Θdiff + k[20][idxs] * b26Θdiff) * invdt + k[19][idxs] * b25Θdiff + k[20][idxs] * b26Θdiff + ) * invdt end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern9ConstantCache, Vern9Cache}, - idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{2}}, differential_vars::Nothing + ) @vern9pre2 - @inbounds @.. broadcast=false out=(k[1] * b1Θdiff + k[2] * b8Θdiff + k[3] * b9Θdiff + - k[4] * b10Θdiff + k[5] * b11Θdiff + k[6] * b12Θdiff + - k[7] * b13Θdiff + k[8] * b14Θdiff + k[9] * b15Θdiff + - k[11] * b17Θdiff + k[12] * b18Θdiff + - k[13] * b19Θdiff + k[14] * b20Θdiff + - k[15] * b21Θdiff + k[16] * b22Θdiff + - k[17] * b23Θdiff + k[18] * b24Θdiff + - k[19] * b25Θdiff + k[20] * b26Θdiff) * invdt + @inbounds @.. broadcast = false out = ( + k[1] * b1Θdiff + k[2] * b8Θdiff + k[3] * b9Θdiff + + k[4] * b10Θdiff + k[5] * b11Θdiff + k[6] * b12Θdiff + + k[7] * b13Θdiff + k[8] * b14Θdiff + k[9] * b15Θdiff + + k[11] * b17Θdiff + k[12] * b18Θdiff + + k[13] * b19Θdiff + k[14] * b20Θdiff + + k[15] * b21Θdiff + k[16] * b22Θdiff + + k[17] * b23Θdiff + k[18] * b24Θdiff + + k[19] * b25Θdiff + k[20] * b26Θdiff + ) * invdt out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern9ConstantCache, Vern9Cache}, idxs, - T::Type{Val{2}}, differential_vars::Nothing) + T::Type{Val{2}}, differential_vars::Nothing + ) @vern9pre2 - @views @.. broadcast=false out=(k[1][idxs] * b1Θdiff + k[2][idxs] * b8Θdiff + - k[3][idxs] * b9Θdiff + k[4][idxs] * b10Θdiff + - k[5][idxs] * b11Θdiff + k[6][idxs] * b12Θdiff + - k[7][idxs] * b13Θdiff + k[8][idxs] * b14Θdiff + - k[9][idxs] * b15Θdiff + k[11][idxs] * b17Θdiff + - k[12][idxs] * b18Θdiff + k[13][idxs] * b19Θdiff + - k[14][idxs] * b20Θdiff + k[15][idxs] * b21Θdiff + - k[16][idxs] * b22Θdiff + k[17][idxs] * b23Θdiff + - k[18][idxs] * b24Θdiff + k[19][idxs] * b25Θdiff + - k[20][idxs] * b26Θdiff) * invdt + @views @.. broadcast = false out = ( + k[1][idxs] * b1Θdiff + k[2][idxs] * b8Θdiff + + k[3][idxs] * b9Θdiff + k[4][idxs] * b10Θdiff + + k[5][idxs] * b11Θdiff + k[6][idxs] * b12Θdiff + + k[7][idxs] * b13Θdiff + k[8][idxs] * b14Θdiff + + k[9][idxs] * b15Θdiff + k[11][idxs] * b17Θdiff + + k[12][idxs] * b18Θdiff + k[13][idxs] * b19Θdiff + + k[14][idxs] * b20Θdiff + k[15][idxs] * b21Θdiff + + k[16][idxs] * b22Θdiff + k[17][idxs] * b23Θdiff + + k[18][idxs] * b24Θdiff + k[19][idxs] * b25Θdiff + + k[20][idxs] * b26Θdiff + ) * invdt out end @def vern9pre3 begin @vern9unpack - b1Θdiff = @evalpoly(Θ, 6*r013, 24*r014, 60*r015, 120*r016, 210*r017, 336*r018, 504*r019) - b8Θdiff = @evalpoly(Θ, 6*r083, 24*r084, 60*r085, 120*r086, 210*r087, 336*r088, 504*r089) - b9Θdiff = @evalpoly(Θ, 6*r093, 24*r094, 60*r095, 120*r096, 210*r097, 336*r098, 504*r099) - b10Θdiff = @evalpoly(Θ, 6*r103, 24*r104, 60*r105, 120*r106, 210*r107, 336*r108, - 504*r109) - b11Θdiff = @evalpoly(Θ, 6*r113, 24*r114, 60*r115, 120*r116, 210*r117, 336*r118, - 504*r119) - b12Θdiff = @evalpoly(Θ, 6*r123, 24*r124, 60*r125, 120*r126, 210*r127, 336*r128, - 504*r129) - b13Θdiff = @evalpoly(Θ, 6*r133, 24*r134, 60*r135, 120*r136, 210*r137, 336*r138, - 504*r139) - b14Θdiff = @evalpoly(Θ, 6*r143, 24*r144, 60*r145, 120*r146, 210*r147, 336*r148, - 504*r149) - b15Θdiff = @evalpoly(Θ, 6*r153, 24*r154, 60*r155, 120*r156, 210*r157, 336*r158, - 504*r159) - b17Θdiff = @evalpoly(Θ, 6*r173, 24*r174, 60*r175, 120*r176, 210*r177, 336*r178, - 504*r179) - b18Θdiff = @evalpoly(Θ, 6*r183, 24*r184, 60*r185, 120*r186, 210*r187, 336*r188, - 504*r189) - b19Θdiff = @evalpoly(Θ, 6*r193, 24*r194, 60*r195, 120*r196, 210*r197, 336*r198, - 504*r199) - b20Θdiff = @evalpoly(Θ, 6*r203, 24*r204, 60*r205, 120*r206, 210*r207, 336*r208, - 504*r209) - b21Θdiff = @evalpoly(Θ, 6*r213, 24*r214, 60*r215, 120*r216, 210*r217, 336*r218, - 504*r219) - b22Θdiff = @evalpoly(Θ, 6*r223, 24*r224, 60*r225, 120*r226, 210*r227, 336*r228, - 504*r229) - b23Θdiff = @evalpoly(Θ, 6*r233, 24*r234, 60*r235, 120*r236, 210*r237, 336*r238, - 504*r239) - b24Θdiff = @evalpoly(Θ, 6*r243, 24*r244, 60*r245, 120*r246, 210*r247, 336*r248, - 504*r249) - b25Θdiff = @evalpoly(Θ, 6*r253, 24*r254, 60*r255, 120*r256, 210*r257, 336*r258, - 504*r259) - b26Θdiff = @evalpoly(Θ, 6*r263, 24*r264, 60*r265, 120*r266, 210*r267, 336*r268, - 504*r269) + b1Θdiff = @evalpoly(Θ, 6 * r013, 24 * r014, 60 * r015, 120 * r016, 210 * r017, 336 * r018, 504 * r019) + b8Θdiff = @evalpoly(Θ, 6 * r083, 24 * r084, 60 * r085, 120 * r086, 210 * r087, 336 * r088, 504 * r089) + b9Θdiff = @evalpoly(Θ, 6 * r093, 24 * r094, 60 * r095, 120 * r096, 210 * r097, 336 * r098, 504 * r099) + b10Θdiff = @evalpoly( + Θ, 6 * r103, 24 * r104, 60 * r105, 120 * r106, 210 * r107, 336 * r108, + 504 * r109 + ) + b11Θdiff = @evalpoly( + Θ, 6 * r113, 24 * r114, 60 * r115, 120 * r116, 210 * r117, 336 * r118, + 504 * r119 + ) + b12Θdiff = @evalpoly( + Θ, 6 * r123, 24 * r124, 60 * r125, 120 * r126, 210 * r127, 336 * r128, + 504 * r129 + ) + b13Θdiff = @evalpoly( + Θ, 6 * r133, 24 * r134, 60 * r135, 120 * r136, 210 * r137, 336 * r138, + 504 * r139 + ) + b14Θdiff = @evalpoly( + Θ, 6 * r143, 24 * r144, 60 * r145, 120 * r146, 210 * r147, 336 * r148, + 504 * r149 + ) + b15Θdiff = @evalpoly( + Θ, 6 * r153, 24 * r154, 60 * r155, 120 * r156, 210 * r157, 336 * r158, + 504 * r159 + ) + b17Θdiff = @evalpoly( + Θ, 6 * r173, 24 * r174, 60 * r175, 120 * r176, 210 * r177, 336 * r178, + 504 * r179 + ) + b18Θdiff = @evalpoly( + Θ, 6 * r183, 24 * r184, 60 * r185, 120 * r186, 210 * r187, 336 * r188, + 504 * r189 + ) + b19Θdiff = @evalpoly( + Θ, 6 * r193, 24 * r194, 60 * r195, 120 * r196, 210 * r197, 336 * r198, + 504 * r199 + ) + b20Θdiff = @evalpoly( + Θ, 6 * r203, 24 * r204, 60 * r205, 120 * r206, 210 * r207, 336 * r208, + 504 * r209 + ) + b21Θdiff = @evalpoly( + Θ, 6 * r213, 24 * r214, 60 * r215, 120 * r216, 210 * r217, 336 * r218, + 504 * r219 + ) + b22Θdiff = @evalpoly( + Θ, 6 * r223, 24 * r224, 60 * r225, 120 * r226, 210 * r227, 336 * r228, + 504 * r229 + ) + b23Θdiff = @evalpoly( + Θ, 6 * r233, 24 * r234, 60 * r235, 120 * r236, 210 * r237, 336 * r238, + 504 * r239 + ) + b24Θdiff = @evalpoly( + Θ, 6 * r243, 24 * r244, 60 * r245, 120 * r246, 210 * r247, 336 * r248, + 504 * r249 + ) + b25Θdiff = @evalpoly( + Θ, 6 * r253, 24 * r254, 60 * r255, 120 * r256, 210 * r257, 336 * r258, + 504 * r259 + ) + b26Θdiff = @evalpoly( + Θ, 6 * r263, 24 * r264, 60 * r265, 120 * r266, 210 * r267, 336 * r268, + 504 * r269 + ) invdt2 = inv(dt)^2 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Vern9ConstantCache, Vern9Cache}, - idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing + ) @vern9pre3 #@.. broadcast=false k[1]*b1Θdiff + k[2]*b8Θdiff + k[3]*b9Θdiff + k[4]*b10Θdiff + k[5]*b11Θdiff + k[6]*b12Θdiff + k[7]*b13Θdiff + k[8]*b14Θdiff + k[9]*b15Θdiff + k[11]*b17Θdiff + k[12]*b18Θdiff + k[13]*b19Θdiff + k[14]*b20Θdiff + k[15]*b21Θdiff + k[16]*b22Θdiff + k[17]*b23Θdiff + k[18]*b24Θdiff + k[19]*b25Θdiff + k[20]*b26Θdiff - return @inbounds (k[1] * b1Θdiff + k[2] * b8Θdiff + k[3] * b9Θdiff + k[4] * b10Θdiff + - k[5] * b11Θdiff + k[6] * b12Θdiff + k[7] * b13Θdiff + - k[8] * b14Θdiff + - k[9] * b15Θdiff + k[11] * b17Θdiff + k[12] * b18Θdiff + - k[13] * b19Θdiff + - k[14] * b20Θdiff + k[15] * b21Θdiff + k[16] * b22Θdiff + - k[17] * b23Θdiff + - k[18] * b24Θdiff + k[19] * b25Θdiff + k[20] * b26Θdiff) * invdt2 -end - -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, + return @inbounds ( + k[1] * b1Θdiff + k[2] * b8Θdiff + k[3] * b9Θdiff + k[4] * b10Θdiff + + k[5] * b11Θdiff + k[6] * b12Θdiff + k[7] * b13Θdiff + + k[8] * b14Θdiff + + k[9] * b15Θdiff + k[11] * b17Θdiff + k[12] * b18Θdiff + + k[13] * b19Θdiff + + k[14] * b20Θdiff + k[15] * b21Θdiff + k[16] * b22Θdiff + + k[17] * b23Θdiff + + k[18] * b24Θdiff + k[19] * b25Θdiff + k[20] * b26Θdiff + ) * invdt2 +end + +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Vern9ConstantCache, Vern9Cache}, idxs, - T::Type{Val{3}}, differential_vars::Nothing) + T::Type{Val{3}}, differential_vars::Nothing + ) @vern9pre3 - return (k[1][idxs] * b1Θdiff + k[2][idxs] * b8Θdiff + k[3][idxs] * b9Θdiff + + return ( + k[1][idxs] * b1Θdiff + k[2][idxs] * b8Θdiff + k[3][idxs] * b9Θdiff + k[4][idxs] * b10Θdiff + k[5][idxs] * b11Θdiff + k[6][idxs] * b12Θdiff + k[7][idxs] * b13Θdiff + k[8][idxs] * b14Θdiff + k[9][idxs] * b15Θdiff + @@ -921,85 +1278,101 @@ end k[13][idxs] * b19Θdiff + k[14][idxs] * b20Θdiff + k[15][idxs] * b21Θdiff + k[16][idxs] * b22Θdiff + k[17][idxs] * b23Θdiff + k[18][idxs] * b24Θdiff + - k[19][idxs] * b25Θdiff + k[20][idxs] * b26Θdiff) * invdt2 + k[19][idxs] * b25Θdiff + k[20][idxs] * b26Θdiff + ) * invdt2 end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern9ConstantCache, Vern9Cache}, - idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{3}}, differential_vars::Nothing + ) @vern9pre3 - @inbounds @.. broadcast=false out=(k[1] * b1Θdiff + k[2] * b8Θdiff + k[3] * b9Θdiff + - k[4] * b10Θdiff + k[5] * b11Θdiff + k[6] * b12Θdiff + - k[7] * b13Θdiff + k[8] * b14Θdiff + k[9] * b15Θdiff + - k[11] * b17Θdiff + k[12] * b18Θdiff + - k[13] * b19Θdiff + k[14] * b20Θdiff + - k[15] * b21Θdiff + k[16] * b22Θdiff + - k[17] * b23Θdiff + k[18] * b24Θdiff + - k[19] * b25Θdiff + k[20] * b26Θdiff) * invdt2 + @inbounds @.. broadcast = false out = ( + k[1] * b1Θdiff + k[2] * b8Θdiff + k[3] * b9Θdiff + + k[4] * b10Θdiff + k[5] * b11Θdiff + k[6] * b12Θdiff + + k[7] * b13Θdiff + k[8] * b14Θdiff + k[9] * b15Θdiff + + k[11] * b17Θdiff + k[12] * b18Θdiff + + k[13] * b19Θdiff + k[14] * b20Θdiff + + k[15] * b21Θdiff + k[16] * b22Θdiff + + k[17] * b23Θdiff + k[18] * b24Θdiff + + k[19] * b25Θdiff + k[20] * b26Θdiff + ) * invdt2 out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern9ConstantCache, Vern9Cache}, idxs, - T::Type{Val{3}}, differential_vars::Nothing) + T::Type{Val{3}}, differential_vars::Nothing + ) @vern9pre3 - @views @.. broadcast=false out=(k[1][idxs] * b1Θdiff + k[2][idxs] * b8Θdiff + - k[3][idxs] * b9Θdiff + k[4][idxs] * b10Θdiff + - k[5][idxs] * b11Θdiff + k[6][idxs] * b12Θdiff + - k[7][idxs] * b13Θdiff + k[8][idxs] * b14Θdiff + - k[9][idxs] * b15Θdiff + k[11][idxs] * b17Θdiff + - k[12][idxs] * b18Θdiff + k[13][idxs] * b19Θdiff + - k[14][idxs] * b20Θdiff + k[15][idxs] * b21Θdiff + - k[16][idxs] * b22Θdiff + k[17][idxs] * b23Θdiff + - k[18][idxs] * b24Θdiff + k[19][idxs] * b25Θdiff + - k[20][idxs] * b26Θdiff) * invdt2 + @views @.. broadcast = false out = ( + k[1][idxs] * b1Θdiff + k[2][idxs] * b8Θdiff + + k[3][idxs] * b9Θdiff + k[4][idxs] * b10Θdiff + + k[5][idxs] * b11Θdiff + k[6][idxs] * b12Θdiff + + k[7][idxs] * b13Θdiff + k[8][idxs] * b14Θdiff + + k[9][idxs] * b15Θdiff + k[11][idxs] * b17Θdiff + + k[12][idxs] * b18Θdiff + k[13][idxs] * b19Θdiff + + k[14][idxs] * b20Θdiff + k[15][idxs] * b21Θdiff + + k[16][idxs] * b22Θdiff + k[17][idxs] * b23Θdiff + + k[18][idxs] * b24Θdiff + k[19][idxs] * b25Θdiff + + k[20][idxs] * b26Θdiff + ) * invdt2 out end @def vern9pre4 begin @vern9unpack - b1Θdiff = @evalpoly(Θ, 24*r014, 120*r015, 360*r016, 840*r017, 1680*r018, 3024*r019) - b8Θdiff = @evalpoly(Θ, 24*r084, 120*r085, 360*r086, 840*r087, 1680*r088, 3024*r089) - b9Θdiff = @evalpoly(Θ, 24*r094, 120*r095, 360*r096, 840*r097, 1680*r098, 3024*r099) - b10Θdiff = @evalpoly(Θ, 24*r104, 120*r105, 360*r106, 840*r107, 1680*r108, 3024*r109) - b11Θdiff = @evalpoly(Θ, 24*r114, 120*r115, 360*r116, 840*r117, 1680*r118, 3024*r119) - b12Θdiff = @evalpoly(Θ, 24*r124, 120*r125, 360*r126, 840*r127, 1680*r128, 3024*r129) - b13Θdiff = @evalpoly(Θ, 24*r134, 120*r135, 360*r136, 840*r137, 1680*r138, 3024*r139) - b14Θdiff = @evalpoly(Θ, 24*r144, 120*r145, 360*r146, 840*r147, 1680*r148, 3024*r149) - b15Θdiff = @evalpoly(Θ, 24*r154, 120*r155, 360*r156, 840*r157, 1680*r158, 3024*r159) - b17Θdiff = @evalpoly(Θ, 24*r174, 120*r175, 360*r176, 840*r177, 1680*r178, 3024*r179) - b18Θdiff = @evalpoly(Θ, 24*r184, 120*r185, 360*r186, 840*r187, 1680*r188, 3024*r189) - b19Θdiff = @evalpoly(Θ, 24*r194, 120*r195, 360*r196, 840*r197, 1680*r198, 3024*r199) - b20Θdiff = @evalpoly(Θ, 24*r204, 120*r205, 360*r206, 840*r207, 1680*r208, 3024*r209) - b21Θdiff = @evalpoly(Θ, 24*r214, 120*r215, 360*r216, 840*r217, 1680*r218, 3024*r219) - b22Θdiff = @evalpoly(Θ, 24*r224, 120*r225, 360*r226, 840*r227, 1680*r228, 3024*r229) - b23Θdiff = @evalpoly(Θ, 24*r234, 120*r235, 360*r236, 840*r237, 1680*r238, 3024*r239) - b24Θdiff = @evalpoly(Θ, 24*r244, 120*r245, 360*r246, 840*r247, 1680*r248, 3024*r249) - b25Θdiff = @evalpoly(Θ, 24*r254, 120*r255, 360*r256, 840*r257, 1680*r258, 3024*r259) - b26Θdiff = @evalpoly(Θ, 24*r264, 120*r265, 360*r266, 840*r267, 1680*r268, 3024*r269) + b1Θdiff = @evalpoly(Θ, 24 * r014, 120 * r015, 360 * r016, 840 * r017, 1680 * r018, 3024 * r019) + b8Θdiff = @evalpoly(Θ, 24 * r084, 120 * r085, 360 * r086, 840 * r087, 1680 * r088, 3024 * r089) + b9Θdiff = @evalpoly(Θ, 24 * r094, 120 * r095, 360 * r096, 840 * r097, 1680 * r098, 3024 * r099) + b10Θdiff = @evalpoly(Θ, 24 * r104, 120 * r105, 360 * r106, 840 * r107, 1680 * r108, 3024 * r109) + b11Θdiff = @evalpoly(Θ, 24 * r114, 120 * r115, 360 * r116, 840 * r117, 1680 * r118, 3024 * r119) + b12Θdiff = @evalpoly(Θ, 24 * r124, 120 * r125, 360 * r126, 840 * r127, 1680 * r128, 3024 * r129) + b13Θdiff = @evalpoly(Θ, 24 * r134, 120 * r135, 360 * r136, 840 * r137, 1680 * r138, 3024 * r139) + b14Θdiff = @evalpoly(Θ, 24 * r144, 120 * r145, 360 * r146, 840 * r147, 1680 * r148, 3024 * r149) + b15Θdiff = @evalpoly(Θ, 24 * r154, 120 * r155, 360 * r156, 840 * r157, 1680 * r158, 3024 * r159) + b17Θdiff = @evalpoly(Θ, 24 * r174, 120 * r175, 360 * r176, 840 * r177, 1680 * r178, 3024 * r179) + b18Θdiff = @evalpoly(Θ, 24 * r184, 120 * r185, 360 * r186, 840 * r187, 1680 * r188, 3024 * r189) + b19Θdiff = @evalpoly(Θ, 24 * r194, 120 * r195, 360 * r196, 840 * r197, 1680 * r198, 3024 * r199) + b20Θdiff = @evalpoly(Θ, 24 * r204, 120 * r205, 360 * r206, 840 * r207, 1680 * r208, 3024 * r209) + b21Θdiff = @evalpoly(Θ, 24 * r214, 120 * r215, 360 * r216, 840 * r217, 1680 * r218, 3024 * r219) + b22Θdiff = @evalpoly(Θ, 24 * r224, 120 * r225, 360 * r226, 840 * r227, 1680 * r228, 3024 * r229) + b23Θdiff = @evalpoly(Θ, 24 * r234, 120 * r235, 360 * r236, 840 * r237, 1680 * r238, 3024 * r239) + b24Θdiff = @evalpoly(Θ, 24 * r244, 120 * r245, 360 * r246, 840 * r247, 1680 * r248, 3024 * r249) + b25Θdiff = @evalpoly(Θ, 24 * r254, 120 * r255, 360 * r256, 840 * r257, 1680 * r258, 3024 * r259) + b26Θdiff = @evalpoly(Θ, 24 * r264, 120 * r265, 360 * r266, 840 * r267, 1680 * r268, 3024 * r269) invdt3 = inv(dt)^3 end -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Vern9ConstantCache, Vern9Cache}, - idxs::Nothing, T::Type{Val{4}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{4}}, differential_vars::Nothing + ) @vern9pre4 #@.. broadcast=false k[1]*b1Θdiff + k[2]*b8Θdiff + k[3]*b9Θdiff + k[4]*b10Θdiff + k[5]*b11Θdiff + k[6]*b12Θdiff + k[7]*b13Θdiff + k[8]*b14Θdiff + k[9]*b15Θdiff + k[11]*b17Θdiff + k[12]*b18Θdiff + k[13]*b19Θdiff + k[14]*b20Θdiff + k[15]*b21Θdiff + k[16]*b22Θdiff + k[17]*b23Θdiff + k[18]*b24Θdiff + k[19]*b25Θdiff + k[20]*b26Θdiff - return @inbounds (k[1] * b1Θdiff + k[2] * b8Θdiff + k[3] * b9Θdiff + k[4] * b10Θdiff + - k[5] * b11Θdiff + k[6] * b12Θdiff + k[7] * b13Θdiff + - k[8] * b14Θdiff + - k[9] * b15Θdiff + k[11] * b17Θdiff + k[12] * b18Θdiff + - k[13] * b19Θdiff + - k[14] * b20Θdiff + k[15] * b21Θdiff + k[16] * b22Θdiff + - k[17] * b23Θdiff + - k[18] * b24Θdiff + k[19] * b25Θdiff + k[20] * b26Θdiff) * invdt3 -end - -@muladd function _ode_interpolant(Θ, dt, y₀, y₁, k, + return @inbounds ( + k[1] * b1Θdiff + k[2] * b8Θdiff + k[3] * b9Θdiff + k[4] * b10Θdiff + + k[5] * b11Θdiff + k[6] * b12Θdiff + k[7] * b13Θdiff + + k[8] * b14Θdiff + + k[9] * b15Θdiff + k[11] * b17Θdiff + k[12] * b18Θdiff + + k[13] * b19Θdiff + + k[14] * b20Θdiff + k[15] * b21Θdiff + k[16] * b22Θdiff + + k[17] * b23Θdiff + + k[18] * b24Θdiff + k[19] * b25Θdiff + k[20] * b26Θdiff + ) * invdt3 +end + +@muladd function _ode_interpolant( + Θ, dt, y₀, y₁, k, cache::Union{Vern9ConstantCache, Vern9Cache}, idxs, - T::Type{Val{4}}, differential_vars::Nothing) + T::Type{Val{4}}, differential_vars::Nothing + ) @vern9pre4 - return (k[1][idxs] * b1Θdiff + k[2][idxs] * b8Θdiff + k[3][idxs] * b9Θdiff + + return ( + k[1][idxs] * b1Θdiff + k[2][idxs] * b8Θdiff + k[3][idxs] * b9Θdiff + k[4][idxs] * b10Θdiff + k[5][idxs] * b11Θdiff + k[6][idxs] * b12Θdiff + k[7][idxs] * b13Θdiff + k[8][idxs] * b14Θdiff + k[9][idxs] * b15Θdiff + @@ -1007,37 +1380,46 @@ end k[13][idxs] * b19Θdiff + k[14][idxs] * b20Θdiff + k[15][idxs] * b21Θdiff + k[16][idxs] * b22Θdiff + k[17][idxs] * b23Θdiff + k[18][idxs] * b24Θdiff + - k[19][idxs] * b25Θdiff + k[20][idxs] * b26Θdiff) * invdt3 + k[19][idxs] * b25Θdiff + k[20][idxs] * b26Θdiff + ) * invdt3 end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern9ConstantCache, Vern9Cache}, - idxs::Nothing, T::Type{Val{4}}, differential_vars::Nothing) + idxs::Nothing, T::Type{Val{4}}, differential_vars::Nothing + ) @vern9pre4 - @inbounds @.. broadcast=false out=(k[1] * b1Θdiff + k[2] * b8Θdiff + k[3] * b9Θdiff + - k[4] * b10Θdiff + k[5] * b11Θdiff + k[6] * b12Θdiff + - k[7] * b13Θdiff + k[8] * b14Θdiff + k[9] * b15Θdiff + - k[11] * b17Θdiff + k[12] * b18Θdiff + - k[13] * b19Θdiff + k[14] * b20Θdiff + - k[15] * b21Θdiff + k[16] * b22Θdiff + - k[17] * b23Θdiff + k[18] * b24Θdiff + - k[19] * b25Θdiff + k[20] * b26Θdiff) * invdt3 + @inbounds @.. broadcast = false out = ( + k[1] * b1Θdiff + k[2] * b8Θdiff + k[3] * b9Θdiff + + k[4] * b10Θdiff + k[5] * b11Θdiff + k[6] * b12Θdiff + + k[7] * b13Θdiff + k[8] * b14Θdiff + k[9] * b15Θdiff + + k[11] * b17Θdiff + k[12] * b18Θdiff + + k[13] * b19Θdiff + k[14] * b20Θdiff + + k[15] * b21Θdiff + k[16] * b22Θdiff + + k[17] * b23Θdiff + k[18] * b24Θdiff + + k[19] * b25Θdiff + k[20] * b26Θdiff + ) * invdt3 out end -@muladd function _ode_interpolant!(out, Θ, dt, y₀, y₁, k, +@muladd function _ode_interpolant!( + out, Θ, dt, y₀, y₁, k, cache::Union{Vern9ConstantCache, Vern9Cache}, idxs, - T::Type{Val{4}}, differential_vars::Nothing) + T::Type{Val{4}}, differential_vars::Nothing + ) @vern9pre4 - @views @.. broadcast=false out=(k[1][idxs] * b1Θdiff + k[2][idxs] * b8Θdiff + - k[3][idxs] * b9Θdiff + k[4][idxs] * b10Θdiff + - k[5][idxs] * b11Θdiff + k[6][idxs] * b12Θdiff + - k[7][idxs] * b13Θdiff + k[8][idxs] * b14Θdiff + - k[9][idxs] * b15Θdiff + k[11][idxs] * b17Θdiff + - k[12][idxs] * b18Θdiff + k[13][idxs] * b19Θdiff + - k[14][idxs] * b20Θdiff + k[15][idxs] * b21Θdiff + - k[16][idxs] * b22Θdiff + k[17][idxs] * b23Θdiff + - k[18][idxs] * b24Θdiff + k[19][idxs] * b25Θdiff + - k[20][idxs] * b26Θdiff) * invdt3 + @views @.. broadcast = false out = ( + k[1][idxs] * b1Θdiff + k[2][idxs] * b8Θdiff + + k[3][idxs] * b9Θdiff + k[4][idxs] * b10Θdiff + + k[5][idxs] * b11Θdiff + k[6][idxs] * b12Θdiff + + k[7][idxs] * b13Θdiff + k[8][idxs] * b14Θdiff + + k[9][idxs] * b15Θdiff + k[11][idxs] * b17Θdiff + + k[12][idxs] * b18Θdiff + k[13][idxs] * b19Θdiff + + k[14][idxs] * b20Θdiff + k[15][idxs] * b21Θdiff + + k[16][idxs] * b22Θdiff + k[17][idxs] * b23Θdiff + + k[18][idxs] * b24Θdiff + k[19][idxs] * b25Θdiff + + k[20][idxs] * b26Θdiff + ) * invdt3 out end diff --git a/lib/OrdinaryDiffEqVerner/src/verner_addsteps.jl b/lib/OrdinaryDiffEqVerner/src/verner_addsteps.jl index 113e679559..52ef06617e 100644 --- a/lib/OrdinaryDiffEqVerner/src/verner_addsteps.jl +++ b/lib/OrdinaryDiffEqVerner/src/verner_addsteps.jl @@ -1,31 +1,37 @@ -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::Vern6Cache, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::Vern6Cache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 9 || always_calc_begin (; c1, c2, c3, c4, c5, c6, a21, a31, a32, a41, a43, a51, a53, a54, a61, a63, a64, a65, a71, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, a91, a94, a95, a96, a97, a98) = cache.tab (; k1, k2, k3, k4, k5, k6, k7, k8, k9, tmp) = cache - @.. broadcast=false tmp=uprev + dt * (a21 * k1) + @.. broadcast = false tmp = uprev + dt * (a21 * k1) f(k2, tmp, p, t + c1 * dt) - @.. broadcast=false tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false tmp = uprev + dt * (a31 * k1 + a32 * k2) f(k3, tmp, p, t + c2 * dt) - @.. broadcast=false tmp=uprev + dt * (a41 * k1 + a43 * k3) + @.. broadcast = false tmp = uprev + dt * (a41 * k1 + a43 * k3) f(k4, tmp, p, t + c3 * dt) - @.. broadcast=false tmp=uprev + dt * (a51 * k1 + a53 * k3 + a54 * k4) + @.. broadcast = false tmp = uprev + dt * (a51 * k1 + a53 * k3 + a54 * k4) f(k5, tmp, p, t + c4 * dt) - @.. broadcast=false tmp=uprev + dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5) + @.. broadcast = false tmp = uprev + dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5) f(k6, tmp, p, t + c5 * dt) - @.. broadcast=false tmp=uprev + - dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6) + @.. broadcast = false tmp = uprev + + dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6) f(k7, tmp, p, t + c6 * dt) - @.. broadcast=false tmp=uprev + - dt * - (a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + a86 * k6 + - a87 * k7) + @.. broadcast = false tmp = uprev + + dt * + ( + a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + a86 * k6 + + a87 * k7 + ) f(k8, tmp, p, t + dt) - @.. broadcast=false tmp=uprev + - dt * - (a91 * k1 + a94 * k4 + a95 * k5 + a96 * k6 + a97 * k7 + - a98 * k8) + @.. broadcast = false tmp = uprev + + dt * + ( + a91 * k1 + a94 * k4 + a95 * k5 + a96 * k6 + a97 * k7 + + a98 * k8 + ) f(k9, tmp, p, t + dt) copyat_or_push!(k, 1, k1) copyat_or_push!(k, 2, k2) @@ -42,66 +48,80 @@ (; tmp) = cache rtmp = similar(cache.k1) uidx = eachindex(uprev) - @.. broadcast=false tmp=uprev + - dt * - (a1001 * k[1] + a1004 * k[4] + a1005 * k[5] + a1006 * k[6] + - a1007 * k[7] + a1008 * k[8] + a1009 * k[9]) + @.. broadcast = false tmp = uprev + + dt * + ( + a1001 * k[1] + a1004 * k[4] + a1005 * k[5] + a1006 * k[6] + + a1007 * k[7] + a1008 * k[8] + a1009 * k[9] + ) f(rtmp, tmp, p, t + c10 * dt) copyat_or_push!(k, 10, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a1101 * k[1] + a1104 * k[4] + a1105 * k[5] + a1106 * k[6] + - a1107 * k[7] + a1108 * k[8] + a1109 * k[9] + a1110 * k[10]) + @.. broadcast = false tmp = uprev + + dt * + ( + a1101 * k[1] + a1104 * k[4] + a1105 * k[5] + a1106 * k[6] + + a1107 * k[7] + a1108 * k[8] + a1109 * k[9] + a1110 * k[10] + ) f(rtmp, tmp, p, t + c11 * dt) copyat_or_push!(k, 11, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a1201 * k[1] + a1204 * k[4] + a1205 * k[5] + a1206 * k[6] + - a1207 * k[7] + a1208 * k[8] + a1209 * k[9] + - a1210 * k[10] + a1211 * k[11]) + @.. broadcast = false tmp = uprev + + dt * + ( + a1201 * k[1] + a1204 * k[4] + a1205 * k[5] + a1206 * k[6] + + a1207 * k[7] + a1208 * k[8] + a1209 * k[9] + + a1210 * k[10] + a1211 * k[11] + ) f(rtmp, tmp, p, t + c12 * dt) copyat_or_push!(k, 12, rtmp) end nothing end -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::Vern7Cache, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::Vern7Cache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) T = constvalue(recursive_unitless_bottom_eltype(u)) T2 = constvalue(typeof(one(t))) if length(k) < 10 || always_calc_begin @OnDemandTableauExtract Vern7Tableau T T2 (; k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, tmp) = cache f(k1, uprev, p, t) - @.. broadcast=false tmp=uprev + dt * (a021 * k1) + @.. broadcast = false tmp = uprev + dt * (a021 * k1) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false tmp=uprev + dt * (a031 * k1 + a032 * k2) + @.. broadcast = false tmp = uprev + dt * (a031 * k1 + a032 * k2) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false tmp=uprev + dt * (a041 * k1 + a043 * k3) + @.. broadcast = false tmp = uprev + dt * (a041 * k1 + a043 * k3) f(k4, tmp, p, t + c4 * dt) - @.. broadcast=false tmp=uprev + dt * (a051 * k1 + a053 * k3 + a054 * k4) + @.. broadcast = false tmp = uprev + dt * (a051 * k1 + a053 * k3 + a054 * k4) f(k5, tmp, p, t + c5 * dt) - @.. broadcast=false tmp=uprev + dt * (a061 * k1 + a063 * k3 + a064 * k4 + a065 * k5) + @.. broadcast = false tmp = uprev + dt * (a061 * k1 + a063 * k3 + a064 * k4 + a065 * k5) f(k6, tmp, p, t + c6 * dt) - @.. broadcast=false tmp=uprev + - dt * - (a071 * k1 + a073 * k3 + a074 * k4 + a075 * k5 + a076 * k6) + @.. broadcast = false tmp = uprev + + dt * + (a071 * k1 + a073 * k3 + a074 * k4 + a075 * k5 + a076 * k6) f(k7, tmp, p, t + c7 * dt) - @.. broadcast=false tmp=uprev + - dt * - (a081 * k1 + a083 * k3 + a084 * k4 + a085 * k5 + a086 * k6 + - a087 * k7) + @.. broadcast = false tmp = uprev + + dt * + ( + a081 * k1 + a083 * k3 + a084 * k4 + a085 * k5 + a086 * k6 + + a087 * k7 + ) f(k8, tmp, p, t + c8 * dt) - @.. broadcast=false tmp=uprev + - dt * - (a091 * k1 + a093 * k3 + a094 * k4 + a095 * k5 + a096 * k6 + - a097 * k7 + a098 * k8) + @.. broadcast = false tmp = uprev + + dt * + ( + a091 * k1 + a093 * k3 + a094 * k4 + a095 * k5 + a096 * k6 + + a097 * k7 + a098 * k8 + ) f(k9, tmp, p, t + dt) - @.. broadcast=false tmp=uprev + - dt * - (a101 * k1 + a103 * k3 + a104 * k4 + a105 * k5 + a106 * k6 + - a107 * k7) + @.. broadcast = false tmp = uprev + + dt * + ( + a101 * k1 + a103 * k3 + a104 * k4 + a105 * k5 + a106 * k6 + + a107 * k7 + ) f(k10, tmp, p, t + dt) copyat_or_push!(k, 1, k1) copyat_or_push!(k, 2, k2) @@ -118,94 +138,120 @@ end (; tmp) = cache rtmp = similar(cache.k1) @OnDemandTableauExtract Vern7ExtraStages T T2 - @.. broadcast=false tmp=uprev + - dt * - (a1101 * k[1] + a1104 * k[4] + a1105 * k[5] + a1106 * k[6] + - a1107 * k[7] + a1108 * k[8] + a1109 * k[9]) + @.. broadcast = false tmp = uprev + + dt * + ( + a1101 * k[1] + a1104 * k[4] + a1105 * k[5] + a1106 * k[6] + + a1107 * k[7] + a1108 * k[8] + a1109 * k[9] + ) f(rtmp, tmp, p, t + c11 * dt) copyat_or_push!(k, 11, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a1201 * k[1] + a1204 * k[4] + a1205 * k[5] + a1206 * k[6] + - a1207 * k[7] + a1208 * k[8] + a1209 * k[9] + a1211 * k[11]) + @.. broadcast = false tmp = uprev + + dt * + ( + a1201 * k[1] + a1204 * k[4] + a1205 * k[5] + a1206 * k[6] + + a1207 * k[7] + a1208 * k[8] + a1209 * k[9] + a1211 * k[11] + ) f(rtmp, tmp, p, t + c12 * dt) copyat_or_push!(k, 12, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a1301 * k[1] + a1304 * k[4] + a1305 * k[5] + a1306 * k[6] + - a1307 * k[7] + a1308 * k[8] + a1309 * k[9] + - a1311 * k[11] + a1312 * k[12]) + @.. broadcast = false tmp = uprev + + dt * + ( + a1301 * k[1] + a1304 * k[4] + a1305 * k[5] + a1306 * k[6] + + a1307 * k[7] + a1308 * k[8] + a1309 * k[9] + + a1311 * k[11] + a1312 * k[12] + ) f(rtmp, tmp, p, t + c13 * dt) copyat_or_push!(k, 13, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a1401 * k[1] + a1404 * k[4] + a1405 * k[5] + a1406 * k[6] + - a1407 * k[7] + a1408 * k[8] + a1409 * k[9] + - a1411 * k[11] + a1412 * k[12] + a1413 * k[13]) + @.. broadcast = false tmp = uprev + + dt * + ( + a1401 * k[1] + a1404 * k[4] + a1405 * k[5] + a1406 * k[6] + + a1407 * k[7] + a1408 * k[8] + a1409 * k[9] + + a1411 * k[11] + a1412 * k[12] + a1413 * k[13] + ) f(rtmp, tmp, p, t + c14 * dt) copyat_or_push!(k, 14, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a1501 * k[1] + a1504 * k[4] + a1505 * k[5] + a1506 * k[6] + - a1507 * k[7] + a1508 * k[8] + a1509 * k[9] + - a1511 * k[11] + a1512 * k[12] + a1513 * k[13]) + @.. broadcast = false tmp = uprev + + dt * + ( + a1501 * k[1] + a1504 * k[4] + a1505 * k[5] + a1506 * k[6] + + a1507 * k[7] + a1508 * k[8] + a1509 * k[9] + + a1511 * k[11] + a1512 * k[12] + a1513 * k[13] + ) f(rtmp, tmp, p, t + c15 * dt) copyat_or_push!(k, 15, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a1601 * k[1] + a1604 * k[4] + a1605 * k[5] + a1606 * k[6] + - a1607 * k[7] + a1608 * k[8] + a1609 * k[9] + - a1611 * k[11] + a1612 * k[12] + a1613 * k[13]) + @.. broadcast = false tmp = uprev + + dt * + ( + a1601 * k[1] + a1604 * k[4] + a1605 * k[5] + a1606 * k[6] + + a1607 * k[7] + a1608 * k[8] + a1609 * k[9] + + a1611 * k[11] + a1612 * k[12] + a1613 * k[13] + ) f(rtmp, tmp, p, t + c16 * dt) copyat_or_push!(k, 16, rtmp) end nothing end -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::Vern8Cache, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::Vern8Cache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 13 || always_calc_begin (; c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, a0201, a0301, a0302, a0401, a0403, a0501, a0503, a0504, a0601, a0604, a0605, a0701, a0704, a0705, a0706, a0801, a0804, a0805, a0806, a0807, a0901, a0904, a0905, a0906, a0907, a0908, a1001, a1004, a1005, a1006, a1007, a1008, a1009, a1101, a1104, a1105, a1106, a1107, a1108, a1109, a1110, a1201, a1204, a1205, a1206, a1207, a1208, a1209, a1210, a1211, a1301, a1304, a1305, a1306, a1307, a1308, a1309, a1310) = cache.tab (; k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, tmp) = cache f(k1, uprev, p, t) - @.. broadcast=false tmp=uprev + dt * (a0201 * k1) + @.. broadcast = false tmp = uprev + dt * (a0201 * k1) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false tmp=uprev + dt * (a0301 * k1 + a0302 * k2) + @.. broadcast = false tmp = uprev + dt * (a0301 * k1 + a0302 * k2) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false tmp=uprev + dt * (a0401 * k1 + a0403 * k3) + @.. broadcast = false tmp = uprev + dt * (a0401 * k1 + a0403 * k3) f(k4, tmp, p, t + c4 * dt) - @.. broadcast=false tmp=uprev + dt * (a0501 * k1 + a0503 * k3 + a0504 * k4) + @.. broadcast = false tmp = uprev + dt * (a0501 * k1 + a0503 * k3 + a0504 * k4) f(k5, tmp, p, t + c5 * dt) - @.. broadcast=false tmp=uprev + dt * (a0601 * k1 + a0604 * k4 + a0605 * k5) + @.. broadcast = false tmp = uprev + dt * (a0601 * k1 + a0604 * k4 + a0605 * k5) f(k6, tmp, p, t + c6 * dt) - @.. broadcast=false tmp=uprev + - dt * (a0701 * k1 + a0704 * k4 + a0705 * k5 + a0706 * k6) + @.. broadcast = false tmp = uprev + + dt * (a0701 * k1 + a0704 * k4 + a0705 * k5 + a0706 * k6) f(k7, tmp, p, t + c7 * dt) - @.. broadcast=false tmp=uprev + - dt * (a0801 * k1 + a0804 * k4 + a0805 * k5 + a0806 * k6 + - a0807 * k7) + @.. broadcast = false tmp = uprev + + dt * ( + a0801 * k1 + a0804 * k4 + a0805 * k5 + a0806 * k6 + + a0807 * k7 + ) f(k8, tmp, p, t + c8 * dt) - @.. broadcast=false tmp=uprev + - dt * (a0901 * k1 + a0904 * k4 + a0905 * k5 + a0906 * k6 + - a0907 * k7 + a0908 * k8) + @.. broadcast = false tmp = uprev + + dt * ( + a0901 * k1 + a0904 * k4 + a0905 * k5 + a0906 * k6 + + a0907 * k7 + a0908 * k8 + ) f(k9, tmp, p, t + c9 * dt) - @.. broadcast=false tmp=uprev + - dt * (a1001 * k1 + a1004 * k4 + a1005 * k5 + a1006 * k6 + - a1007 * k7 + a1008 * k8 + a1009 * k9) + @.. broadcast = false tmp = uprev + + dt * ( + a1001 * k1 + a1004 * k4 + a1005 * k5 + a1006 * k6 + + a1007 * k7 + a1008 * k8 + a1009 * k9 + ) f(k10, tmp, p, t + c10 * dt) - @.. broadcast=false tmp=uprev + - dt * (a1101 * k1 + a1104 * k4 + a1105 * k5 + a1106 * k6 + - a1107 * k7 + a1108 * k8 + a1109 * k9 + a1110 * k10) + @.. broadcast = false tmp = uprev + + dt * ( + a1101 * k1 + a1104 * k4 + a1105 * k5 + a1106 * k6 + + a1107 * k7 + a1108 * k8 + a1109 * k9 + a1110 * k10 + ) f(k11, tmp, p, t + c11 * dt) - @.. broadcast=false tmp=uprev + - dt * (a1201 * k1 + a1204 * k4 + a1205 * k5 + a1206 * k6 + - a1207 * k7 + a1208 * k8 + a1209 * k9 + a1210 * k10 + - a1211 * k11) + @.. broadcast = false tmp = uprev + + dt * ( + a1201 * k1 + a1204 * k4 + a1205 * k5 + a1206 * k6 + + a1207 * k7 + a1208 * k8 + a1209 * k9 + a1210 * k10 + + a1211 * k11 + ) f(k12, tmp, p, t + dt) - @.. broadcast=false tmp=uprev + - dt * (a1301 * k1 + a1304 * k4 + a1305 * k5 + a1306 * k6 + - a1307 * k7 + a1308 * k8 + a1309 * k9 + a1310 * k10) + @.. broadcast = false tmp = uprev + + dt * ( + a1301 * k1 + a1304 * k4 + a1305 * k5 + a1306 * k6 + + a1307 * k7 + a1308 * k8 + a1309 * k9 + a1310 * k10 + ) f(k13, tmp, p, t + dt) copyat_or_push!(k, 1, k1) copyat_or_push!(k, 2, k2) @@ -225,74 +271,92 @@ end rtmp = similar(cache.k1) (; c14, a1401, a1406, a1407, a1408, a1409, a1410, a1411, a1412, c15, a1501, a1506, a1507, a1508, a1509, a1510, a1511, a1512, a1514, c16, a1601, a1606, a1607, a1608, a1609, a1610, a1611, a1612, a1614, a1615, c17, a1701, a1706, a1707, a1708, a1709, a1710, a1711, a1712, a1714, a1715, a1716, c18, a1801, a1806, a1807, a1808, a1809, a1810, a1811, a1812, a1814, a1815, a1816, a1817, c19, a1901, a1906, a1907, a1908, a1909, a1910, a1911, a1912, a1914, a1915, a1916, a1917, c20, a2001, a2006, a2007, a2008, a2009, a2010, a2011, a2012, a2014, a2015, a2016, a2017, c21, a2101, a2106, a2107, a2108, a2109, a2110, a2111, a2112, a2114, a2115, a2116, a2117) = cache.tab.extra (; tmp) = cache - @.. broadcast=false tmp=uprev + - dt * - (a1401 * k[1] + a1406 * k[6] + a1407 * k[7] + a1408 * k[8] + - a1409 * k[9] + a1410 * k[10] + a1411 * k[11] + - a1412 * k[12]) + @.. broadcast = false tmp = uprev + + dt * + ( + a1401 * k[1] + a1406 * k[6] + a1407 * k[7] + a1408 * k[8] + + a1409 * k[9] + a1410 * k[10] + a1411 * k[11] + + a1412 * k[12] + ) f(rtmp, tmp, p, t + c14 * dt) copyat_or_push!(k, 14, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a1501 * k[1] + a1506 * k[6] + a1507 * k[7] + a1508 * k[8] + - a1509 * k[9] + a1510 * k[10] + a1511 * k[11] + - a1512 * k[12] + a1514 * k[14]) + @.. broadcast = false tmp = uprev + + dt * + ( + a1501 * k[1] + a1506 * k[6] + a1507 * k[7] + a1508 * k[8] + + a1509 * k[9] + a1510 * k[10] + a1511 * k[11] + + a1512 * k[12] + a1514 * k[14] + ) f(rtmp, tmp, p, t + c15 * dt) copyat_or_push!(k, 15, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a1601 * k[1] + a1606 * k[6] + a1607 * k[7] + a1608 * k[8] + - a1609 * k[9] + a1610 * k[10] + a1611 * k[11] + - a1612 * k[12] + a1614 * k[14] + a1615 * k[15]) + @.. broadcast = false tmp = uprev + + dt * + ( + a1601 * k[1] + a1606 * k[6] + a1607 * k[7] + a1608 * k[8] + + a1609 * k[9] + a1610 * k[10] + a1611 * k[11] + + a1612 * k[12] + a1614 * k[14] + a1615 * k[15] + ) f(rtmp, tmp, p, t + c16 * dt) copyat_or_push!(k, 16, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a1701 * k[1] + a1706 * k[6] + a1707 * k[7] + a1708 * k[8] + - a1709 * k[9] + a1710 * k[10] + a1711 * k[11] + - a1712 * k[12] + a1714 * k[14] + a1715 * k[15] + - a1716 * k[16]) + @.. broadcast = false tmp = uprev + + dt * + ( + a1701 * k[1] + a1706 * k[6] + a1707 * k[7] + a1708 * k[8] + + a1709 * k[9] + a1710 * k[10] + a1711 * k[11] + + a1712 * k[12] + a1714 * k[14] + a1715 * k[15] + + a1716 * k[16] + ) f(rtmp, tmp, p, t + c17 * dt) copyat_or_push!(k, 17, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a1801 * k[1] + a1806 * k[6] + a1807 * k[7] + a1808 * k[8] + - a1809 * k[9] + a1810 * k[10] + a1811 * k[11] + - a1812 * k[12] + a1814 * k[14] + a1815 * k[15] + - a1816 * k[16] + a1817 * k[17]) + @.. broadcast = false tmp = uprev + + dt * + ( + a1801 * k[1] + a1806 * k[6] + a1807 * k[7] + a1808 * k[8] + + a1809 * k[9] + a1810 * k[10] + a1811 * k[11] + + a1812 * k[12] + a1814 * k[14] + a1815 * k[15] + + a1816 * k[16] + a1817 * k[17] + ) f(rtmp, tmp, p, t + c18 * dt) copyat_or_push!(k, 18, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a1901 * k[1] + a1906 * k[6] + a1907 * k[7] + a1908 * k[8] + - a1909 * k[9] + a1910 * k[10] + a1911 * k[11] + - a1912 * k[12] + a1914 * k[14] + a1915 * k[15] + - a1916 * k[16] + a1917 * k[17]) + @.. broadcast = false tmp = uprev + + dt * + ( + a1901 * k[1] + a1906 * k[6] + a1907 * k[7] + a1908 * k[8] + + a1909 * k[9] + a1910 * k[10] + a1911 * k[11] + + a1912 * k[12] + a1914 * k[14] + a1915 * k[15] + + a1916 * k[16] + a1917 * k[17] + ) f(rtmp, tmp, p, t + c19 * dt) copyat_or_push!(k, 19, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a2001 * k[1] + a2006 * k[6] + a2007 * k[7] + a2008 * k[8] + - a2009 * k[9] + a2010 * k[10] + a2011 * k[11] + - a2012 * k[12] + a2014 * k[14] + a2015 * k[15] + - a2016 * k[16] + a2017 * k[17]) + @.. broadcast = false tmp = uprev + + dt * + ( + a2001 * k[1] + a2006 * k[6] + a2007 * k[7] + a2008 * k[8] + + a2009 * k[9] + a2010 * k[10] + a2011 * k[11] + + a2012 * k[12] + a2014 * k[14] + a2015 * k[15] + + a2016 * k[16] + a2017 * k[17] + ) f(rtmp, tmp, p, t + c20 * dt) copyat_or_push!(k, 20, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a2101 * k[1] + a2106 * k[6] + a2107 * k[7] + a2108 * k[8] + - a2109 * k[9] + a2110 * k[10] + a2111 * k[11] + - a2112 * k[12] + a2114 * k[14] + a2115 * k[15] + - a2116 * k[16] + a2117 * k[17]) + @.. broadcast = false tmp = uprev + + dt * + ( + a2101 * k[1] + a2106 * k[6] + a2107 * k[7] + a2108 * k[8] + + a2109 * k[9] + a2110 * k[10] + a2111 * k[11] + + a2112 * k[12] + a2114 * k[14] + a2115 * k[15] + + a2116 * k[16] + a2117 * k[17] + ) f(rtmp, tmp, p, t + c21 * dt) copyat_or_push!(k, 21, rtmp) end nothing end -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::Vern9Cache, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::Vern9Cache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) T = constvalue(recursive_unitless_bottom_eltype(u)) T2 = constvalue(typeof(one(t))) if length(k) < 10 || always_calc_begin @@ -300,54 +364,68 @@ end (; k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, tmp) = cache uidx = eachindex(uprev) f(k1, uprev, p, t) - @.. broadcast=false tmp=uprev + dt * (a0201 * k1) + @.. broadcast = false tmp = uprev + dt * (a0201 * k1) f(k2, tmp, p, t + c1 * dt) - @.. broadcast=false tmp=uprev + dt * (a0301 * k1 + a0302 * k2) + @.. broadcast = false tmp = uprev + dt * (a0301 * k1 + a0302 * k2) f(k3, tmp, p, t + c2 * dt) - @.. broadcast=false tmp=uprev + dt * (a0401 * k1 + a0403 * k3) + @.. broadcast = false tmp = uprev + dt * (a0401 * k1 + a0403 * k3) f(k4, tmp, p, t + c3 * dt) - @.. broadcast=false tmp=uprev + dt * (a0501 * k1 + a0503 * k3 + a0504 * k4) + @.. broadcast = false tmp = uprev + dt * (a0501 * k1 + a0503 * k3 + a0504 * k4) f(k5, tmp, p, t + c4 * dt) - @.. broadcast=false tmp=uprev + dt * (a0601 * k1 + a0604 * k4 + a0605 * k5) + @.. broadcast = false tmp = uprev + dt * (a0601 * k1 + a0604 * k4 + a0605 * k5) f(k6, tmp, p, t + c5 * dt) - @.. broadcast=false tmp=uprev + - dt * (a0701 * k1 + a0704 * k4 + a0705 * k5 + a0706 * k6) + @.. broadcast = false tmp = uprev + + dt * (a0701 * k1 + a0704 * k4 + a0705 * k5 + a0706 * k6) f(k7, tmp, p, t + c6 * dt) - @.. broadcast=false tmp=uprev + dt * (a0801 * k1 + a0806 * k6 + a0807 * k7) + @.. broadcast = false tmp = uprev + dt * (a0801 * k1 + a0806 * k6 + a0807 * k7) f(k8, tmp, p, t + c7 * dt) - @.. broadcast=false tmp=uprev + - dt * (a0901 * k1 + a0906 * k6 + a0907 * k7 + a0908 * k8) + @.. broadcast = false tmp = uprev + + dt * (a0901 * k1 + a0906 * k6 + a0907 * k7 + a0908 * k8) f(k9, tmp, p, t + c8 * dt) - @.. broadcast=false tmp=uprev + - dt * (a1001 * k1 + a1006 * k6 + a1007 * k7 + a1008 * k8 + - a1009 * k9) + @.. broadcast = false tmp = uprev + + dt * ( + a1001 * k1 + a1006 * k6 + a1007 * k7 + a1008 * k8 + + a1009 * k9 + ) f(k10, tmp, p, t + c9 * dt) - @.. broadcast=false tmp=uprev + - dt * (a1101 * k1 + a1106 * k6 + a1107 * k7 + a1108 * k8 + - a1109 * k9 + a1110 * k10) + @.. broadcast = false tmp = uprev + + dt * ( + a1101 * k1 + a1106 * k6 + a1107 * k7 + a1108 * k8 + + a1109 * k9 + a1110 * k10 + ) f(k11, tmp, p, t + c10 * dt) - @.. broadcast=false tmp=uprev + - dt * (a1201 * k1 + a1206 * k6 + a1207 * k7 + a1208 * k8 + - a1209 * k9 + a1210 * k10 + a1211 * k11) + @.. broadcast = false tmp = uprev + + dt * ( + a1201 * k1 + a1206 * k6 + a1207 * k7 + a1208 * k8 + + a1209 * k9 + a1210 * k10 + a1211 * k11 + ) f(k12, tmp, p, t + c11 * dt) - @.. broadcast=false tmp=uprev + - dt * (a1301 * k1 + a1306 * k6 + a1307 * k7 + a1308 * k8 + - a1309 * k9 + a1310 * k10 + a1311 * k11 + a1312 * k12) + @.. broadcast = false tmp = uprev + + dt * ( + a1301 * k1 + a1306 * k6 + a1307 * k7 + a1308 * k8 + + a1309 * k9 + a1310 * k10 + a1311 * k11 + a1312 * k12 + ) f(k13, tmp, p, t + c12 * dt) - @.. broadcast=false tmp=uprev + - dt * (a1401 * k1 + a1406 * k6 + a1407 * k7 + a1408 * k8 + - a1409 * k9 + a1410 * k10 + a1411 * k11 + a1412 * k12 + - a1413 * k13) + @.. broadcast = false tmp = uprev + + dt * ( + a1401 * k1 + a1406 * k6 + a1407 * k7 + a1408 * k8 + + a1409 * k9 + a1410 * k10 + a1411 * k11 + a1412 * k12 + + a1413 * k13 + ) f(k14, tmp, p, t + c13 * dt) - @.. broadcast=false tmp=uprev + - dt * (a1501 * k1 + a1506 * k6 + a1507 * k7 + a1508 * k8 + - a1509 * k9 + a1510 * k10 + a1511 * k11 + a1512 * k12 + - a1513 * k13 + a1514 * k14) + @.. broadcast = false tmp = uprev + + dt * ( + a1501 * k1 + a1506 * k6 + a1507 * k7 + a1508 * k8 + + a1509 * k9 + a1510 * k10 + a1511 * k11 + a1512 * k12 + + a1513 * k13 + a1514 * k14 + ) f(k15, tmp, p, t + dt) - @.. broadcast=false tmp=uprev + - dt * (a1601 * k1 + a1606 * k6 + a1607 * k7 + a1608 * k8 + - a1609 * k9 + a1610 * k10 + a1611 * k11 + a1612 * k12 + - a1613 * k13) + @.. broadcast = false tmp = uprev + + dt * ( + a1601 * k1 + a1606 * k6 + a1607 * k7 + a1608 * k8 + + a1609 * k9 + a1610 * k10 + a1611 * k11 + a1612 * k12 + + a1613 * k13 + ) f(k16, tmp, p, t + dt) copyat_or_push!(k, 1, k1) copyat_or_push!(k, 2, k8) @@ -365,159 +443,219 @@ end uidx = eachindex(uprev) (; tmp) = cache @OnDemandTableauExtract Vern9ExtraStages T T2 - @.. broadcast=false tmp=uprev + - dt * - (a1701 * k[1] + a1708 * k[2] + a1709 * k[3] + a1710 * k[4] + - a1711 * k[5] + a1712 * k[6] + a1713 * k[7] + a1714 * k[8] + - a1715 * k[9]) + @.. broadcast = false tmp = uprev + + dt * + ( + a1701 * k[1] + a1708 * k[2] + a1709 * k[3] + a1710 * k[4] + + a1711 * k[5] + a1712 * k[6] + a1713 * k[7] + a1714 * k[8] + + a1715 * k[9] + ) f(rtmp, tmp, p, t + c17 * dt) copyat_or_push!(k, 11, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a1801 * k[1] + a1808 * k[2] + a1809 * k[3] + a1810 * k[4] + - a1811 * k[5] + a1812 * k[6] + a1813 * k[7] + a1814 * k[8] + - a1815 * k[9] + a1817 * k[11]) + @.. broadcast = false tmp = uprev + + dt * + ( + a1801 * k[1] + a1808 * k[2] + a1809 * k[3] + a1810 * k[4] + + a1811 * k[5] + a1812 * k[6] + a1813 * k[7] + a1814 * k[8] + + a1815 * k[9] + a1817 * k[11] + ) f(rtmp, tmp, p, t + c18 * dt) copyat_or_push!(k, 12, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a1901 * k[1] + a1908 * k[2] + a1909 * k[3] + a1910 * k[4] + - a1911 * k[5] + a1912 * k[6] + a1913 * k[7] + a1914 * k[8] + - a1915 * k[9] + a1917 * k[11] + a1918 * k[12]) + @.. broadcast = false tmp = uprev + + dt * + ( + a1901 * k[1] + a1908 * k[2] + a1909 * k[3] + a1910 * k[4] + + a1911 * k[5] + a1912 * k[6] + a1913 * k[7] + a1914 * k[8] + + a1915 * k[9] + a1917 * k[11] + a1918 * k[12] + ) f(rtmp, tmp, p, t + c19 * dt) copyat_or_push!(k, 13, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a2001 * k[1] + a2008 * k[2] + a2009 * k[3] + a2010 * k[4] + - a2011 * k[5] + a2012 * k[6] + a2013 * k[7] + a2014 * k[8] + - a2015 * k[9] + a2017 * k[11] + a2018 * k[12] + - a2019 * k[13]) + @.. broadcast = false tmp = uprev + + dt * + ( + a2001 * k[1] + a2008 * k[2] + a2009 * k[3] + a2010 * k[4] + + a2011 * k[5] + a2012 * k[6] + a2013 * k[7] + a2014 * k[8] + + a2015 * k[9] + a2017 * k[11] + a2018 * k[12] + + a2019 * k[13] + ) f(rtmp, tmp, p, t + c20 * dt) copyat_or_push!(k, 14, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a2101 * k[1] + a2108 * k[2] + a2109 * k[3] + a2110 * k[4] + - a2111 * k[5] + a2112 * k[6] + a2113 * k[7] + a2114 * k[8] + - a2115 * k[9] + a2117 * k[11] + a2118 * k[12] + - a2119 * k[13] + a2120 * k[14]) + @.. broadcast = false tmp = uprev + + dt * + ( + a2101 * k[1] + a2108 * k[2] + a2109 * k[3] + a2110 * k[4] + + a2111 * k[5] + a2112 * k[6] + a2113 * k[7] + a2114 * k[8] + + a2115 * k[9] + a2117 * k[11] + a2118 * k[12] + + a2119 * k[13] + a2120 * k[14] + ) f(rtmp, tmp, p, t + c21 * dt) copyat_or_push!(k, 15, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a2201 * k[1] + a2208 * k[2] + a2209 * k[3] + a2210 * k[4] + - a2211 * k[5] + a2212 * k[6] + a2213 * k[7] + a2214 * k[8] + - a2215 * k[9] + a2217 * k[11] + a2218 * k[12] + - a2219 * k[13] + a2220 * k[14] + a2221 * k[15]) + @.. broadcast = false tmp = uprev + + dt * + ( + a2201 * k[1] + a2208 * k[2] + a2209 * k[3] + a2210 * k[4] + + a2211 * k[5] + a2212 * k[6] + a2213 * k[7] + a2214 * k[8] + + a2215 * k[9] + a2217 * k[11] + a2218 * k[12] + + a2219 * k[13] + a2220 * k[14] + a2221 * k[15] + ) f(rtmp, tmp, p, t + c22 * dt) copyat_or_push!(k, 16, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a2301 * k[1] + a2308 * k[2] + a2309 * k[3] + a2310 * k[4] + - a2311 * k[5] + a2312 * k[6] + a2313 * k[7] + a2314 * k[8] + - a2315 * k[9] + a2317 * k[11] + a2318 * k[12] + - a2319 * k[13] + a2320 * k[14] + a2321 * k[15]) + @.. broadcast = false tmp = uprev + + dt * + ( + a2301 * k[1] + a2308 * k[2] + a2309 * k[3] + a2310 * k[4] + + a2311 * k[5] + a2312 * k[6] + a2313 * k[7] + a2314 * k[8] + + a2315 * k[9] + a2317 * k[11] + a2318 * k[12] + + a2319 * k[13] + a2320 * k[14] + a2321 * k[15] + ) f(rtmp, tmp, p, t + c23 * dt) copyat_or_push!(k, 17, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a2401 * k[1] + a2408 * k[2] + a2409 * k[3] + a2410 * k[4] + - a2411 * k[5] + a2412 * k[6] + a2413 * k[7] + a2414 * k[8] + - a2415 * k[9] + a2417 * k[11] + a2418 * k[12] + - a2419 * k[13] + a2420 * k[14] + a2421 * k[15]) + @.. broadcast = false tmp = uprev + + dt * + ( + a2401 * k[1] + a2408 * k[2] + a2409 * k[3] + a2410 * k[4] + + a2411 * k[5] + a2412 * k[6] + a2413 * k[7] + a2414 * k[8] + + a2415 * k[9] + a2417 * k[11] + a2418 * k[12] + + a2419 * k[13] + a2420 * k[14] + a2421 * k[15] + ) f(rtmp, tmp, p, t + c24 * dt) copyat_or_push!(k, 18, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a2501 * k[1] + a2508 * k[2] + a2509 * k[3] + a2510 * k[4] + - a2511 * k[5] + a2512 * k[6] + a2513 * k[7] + a2514 * k[8] + - a2515 * k[9] + a2517 * k[11] + a2518 * k[12] + - a2519 * k[13] + a2520 * k[14] + a2521 * k[15]) + @.. broadcast = false tmp = uprev + + dt * + ( + a2501 * k[1] + a2508 * k[2] + a2509 * k[3] + a2510 * k[4] + + a2511 * k[5] + a2512 * k[6] + a2513 * k[7] + a2514 * k[8] + + a2515 * k[9] + a2517 * k[11] + a2518 * k[12] + + a2519 * k[13] + a2520 * k[14] + a2521 * k[15] + ) f(rtmp, tmp, p, t + c25 * dt) copyat_or_push!(k, 19, rtmp) - @.. broadcast=false tmp=uprev + - dt * - (a2601 * k[1] + a2608 * k[2] + a2609 * k[3] + a2610 * k[4] + - a2611 * k[5] + a2612 * k[6] + a2613 * k[7] + a2614 * k[8] + - a2615 * k[9] + a2617 * k[11] + a2618 * k[12] + - a2619 * k[13] + a2620 * k[14] + a2621 * k[15]) + @.. broadcast = false tmp = uprev + + dt * + ( + a2601 * k[1] + a2608 * k[2] + a2609 * k[3] + a2610 * k[4] + + a2611 * k[5] + a2612 * k[6] + a2613 * k[7] + a2614 * k[8] + + a2615 * k[9] + a2617 * k[11] + a2618 * k[12] + + a2619 * k[13] + a2620 * k[14] + a2621 * k[15] + ) f(rtmp, tmp, p, t + c26 * dt) copyat_or_push!(k, 20, rtmp) end nothing end -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::Vern6ConstantCache, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::Vern6ConstantCache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 9 || always_calc_begin (; c1, c2, c3, c4, c5, c6, a21, a31, a32, a41, a43, a51, a53, a54, a61, a63, a64, a65, a71, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, a91, a94, a95, a96, a97, a98) = cache.tab copyat_or_push!(k, 1, f(uprev, p, t)) copyat_or_push!(k, 2, f(uprev + dt * (a21 * k[1]), p, t + c1 * dt)) copyat_or_push!(k, 3, f(uprev + dt * (a31 * k[1] + a32 * k[2]), p, t + c2 * dt)) copyat_or_push!(k, 4, f(uprev + dt * (a41 * k[1] + a43 * k[3]), p, t + c3 * dt)) - copyat_or_push!(k, 5, - f(uprev + dt * (a51 * k[1] + a53 * k[3] + a54 * k[4]), p, - t + c4 * dt)) - copyat_or_push!(k, 6, - f(uprev + dt * (a61 * k[1] + a63 * k[3] + a64 * k[4] + a65 * k[5]), - p, t + c5 * dt)) - copyat_or_push!(k, 7, + copyat_or_push!( + k, 5, + f( + uprev + dt * (a51 * k[1] + a53 * k[3] + a54 * k[4]), p, + t + c4 * dt + ) + ) + copyat_or_push!( + k, 6, + f( + uprev + dt * (a61 * k[1] + a63 * k[3] + a64 * k[4] + a65 * k[5]), + p, t + c5 * dt + ) + ) + copyat_or_push!( + k, 7, f( uprev + - dt * - (a71 * k[1] + a73 * k[3] + a74 * k[4] + a75 * k[5] + a76 * k[6]), - p, t + c6 * dt)) - copyat_or_push!(k, 8, + dt * + (a71 * k[1] + a73 * k[3] + a74 * k[4] + a75 * k[5] + a76 * k[6]), + p, t + c6 * dt + ) + ) + copyat_or_push!( + k, 8, f( uprev + - dt * - (a81 * k[1] + a83 * k[3] + a84 * k[4] + a85 * k[5] + a86 * k[6] + - a87 * k[7]), + dt * + ( + a81 * k[1] + a83 * k[3] + a84 * k[4] + a85 * k[5] + a86 * k[6] + + a87 * k[7] + ), p, - t + dt)) - copyat_or_push!(k, 9, + t + dt + ) + ) + copyat_or_push!( + k, 9, f( uprev + - dt * - (a91 * k[1] + a94 * k[4] + a95 * k[5] + a96 * k[6] + a97 * k[7] + - a98 * k[8]), + dt * + ( + a91 * k[1] + a94 * k[4] + a95 * k[5] + a96 * k[6] + a97 * k[7] + + a98 * k[8] + ), p, - t + dt)) + t + dt + ) + ) end if (allow_calc_end && length(k) < 12) || force_calc_end # Have not added the extra stages yet (; c10, a1001, a1004, a1005, a1006, a1007, a1008, a1009, c11, a1101, a1104, a1105, a1106, a1107, a1108, a1109, a1110, c12, a1201, a1204, a1205, a1206, a1207, a1208, a1209, a1210, a1211) = cache.tab.extra - copyat_or_push!(k, 10, + copyat_or_push!( + k, 10, f( uprev + - dt * - (a1001 * k[1] + a1004 * k[4] + a1005 * k[5] + a1006 * k[6] + - a1007 * k[7] + a1008 * k[8] + a1009 * k[9]), + dt * + ( + a1001 * k[1] + a1004 * k[4] + a1005 * k[5] + a1006 * k[6] + + a1007 * k[7] + a1008 * k[8] + a1009 * k[9] + ), p, - t + c10 * dt)) - copyat_or_push!(k, 11, + t + c10 * dt + ) + ) + copyat_or_push!( + k, 11, f( uprev + - dt * - (a1101 * k[1] + a1104 * k[4] + a1105 * k[5] + a1106 * k[6] + - a1107 * k[7] + a1108 * k[8] + a1109 * k[9] + a1110 * k[10]), + dt * + ( + a1101 * k[1] + a1104 * k[4] + a1105 * k[5] + a1106 * k[6] + + a1107 * k[7] + a1108 * k[8] + a1109 * k[9] + a1110 * k[10] + ), p, - t + c11 * dt)) - copyat_or_push!(k, 12, + t + c11 * dt + ) + ) + copyat_or_push!( + k, 12, f( uprev + - dt * - (a1201 * k[1] + a1204 * k[4] + a1205 * k[5] + a1206 * k[6] + - a1207 * k[7] + a1208 * k[8] + a1209 * k[9] + a1210 * k[10] + - a1211 * k[11]), + dt * + ( + a1201 * k[1] + a1204 * k[4] + a1205 * k[5] + a1206 * k[6] + + a1207 * k[7] + a1208 * k[8] + a1209 * k[9] + a1210 * k[10] + + a1211 * k[11] + ), p, - t + c12 * dt)) + t + c12 * dt + ) + ) end nothing end -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::Vern7ConstantCache, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::Vern7ConstantCache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) T = constvalue(recursive_unitless_bottom_eltype(u)) T2 = constvalue(typeof(one(t))) if length(k) < 10 || always_calc_begin @@ -526,245 +664,389 @@ end copyat_or_push!(k, 2, f(uprev + dt * (a021 * k[1]), p, t + c2 * dt)) copyat_or_push!(k, 3, f(uprev + dt * (a031 * k[1] + a032 * k[2]), p, t + c3 * dt)) copyat_or_push!(k, 4, f(uprev + dt * (a041 * k[1] + a043 * k[3]), p, t + c4 * dt)) - copyat_or_push!(k, 5, - f(uprev + dt * (a051 * k[1] + a053 * k[3] + a054 * k[4]), p, - t + c5 * dt)) - copyat_or_push!(k, 6, - f(uprev + - dt * (a061 * k[1] + a063 * k[3] + a064 * k[4] + a065 * k[5]), p, - t + c6 * dt)) - copyat_or_push!(k, 7, + copyat_or_push!( + k, 5, + f( + uprev + dt * (a051 * k[1] + a053 * k[3] + a054 * k[4]), p, + t + c5 * dt + ) + ) + copyat_or_push!( + k, 6, f( uprev + - dt * (a071 * k[1] + a073 * k[3] + a074 * k[4] + a075 * k[5] + - a076 * k[6]), + dt * (a061 * k[1] + a063 * k[3] + a064 * k[4] + a065 * k[5]), p, + t + c6 * dt + ) + ) + copyat_or_push!( + k, 7, + f( + uprev + + dt * ( + a071 * k[1] + a073 * k[3] + a074 * k[4] + a075 * k[5] + + a076 * k[6] + ), p, - t + c7 * dt)) - copyat_or_push!(k, 8, + t + c7 * dt + ) + ) + copyat_or_push!( + k, 8, f( uprev + - dt * (a081 * k[1] + a083 * k[3] + a084 * k[4] + a085 * k[5] + - a086 * k[6] + a087 * k[7]), + dt * ( + a081 * k[1] + a083 * k[3] + a084 * k[4] + a085 * k[5] + + a086 * k[6] + a087 * k[7] + ), p, - t + c8 * dt)) - copyat_or_push!(k, 9, + t + c8 * dt + ) + ) + copyat_or_push!( + k, 9, f( uprev + - dt * (a091 * k[1] + a093 * k[3] + a094 * k[4] + a095 * k[5] + - a096 * k[6] + a097 * k[7] + a098 * k[8]), + dt * ( + a091 * k[1] + a093 * k[3] + a094 * k[4] + a095 * k[5] + + a096 * k[6] + a097 * k[7] + a098 * k[8] + ), p, - t + dt)) - copyat_or_push!(k, 10, + t + dt + ) + ) + copyat_or_push!( + k, 10, f( uprev + - dt * (a101 * k[1] + a103 * k[3] + a104 * k[4] + a105 * k[5] + - a106 * k[6] + a107 * k[7]), + dt * ( + a101 * k[1] + a103 * k[3] + a104 * k[4] + a105 * k[5] + + a106 * k[6] + a107 * k[7] + ), p, - t + dt)) + t + dt + ) + ) end if (allow_calc_end && length(k) < 16) || force_calc_end # Have not added the extra stages yet @OnDemandTableauExtract Vern7ExtraStages T T2 - copyat_or_push!(k, 11, + copyat_or_push!( + k, 11, f( uprev + - dt * - (a1101 * k[1] + a1104 * k[4] + a1105 * k[5] + a1106 * k[6] + - a1107 * k[7] + a1108 * k[8] + a1109 * k[9]), + dt * + ( + a1101 * k[1] + a1104 * k[4] + a1105 * k[5] + a1106 * k[6] + + a1107 * k[7] + a1108 * k[8] + a1109 * k[9] + ), p, - t + c11 * dt)) - copyat_or_push!(k, 12, + t + c11 * dt + ) + ) + copyat_or_push!( + k, 12, f( uprev + - dt * - (a1201 * k[1] + a1204 * k[4] + a1205 * k[5] + a1206 * k[6] + - a1207 * k[7] + a1208 * k[8] + a1209 * k[9] + a1211 * k[11]), + dt * + ( + a1201 * k[1] + a1204 * k[4] + a1205 * k[5] + a1206 * k[6] + + a1207 * k[7] + a1208 * k[8] + a1209 * k[9] + a1211 * k[11] + ), p, - t + c12 * dt)) - copyat_or_push!(k, 13, + t + c12 * dt + ) + ) + copyat_or_push!( + k, 13, f( uprev + - dt * - (a1301 * k[1] + a1304 * k[4] + a1305 * k[5] + a1306 * k[6] + - a1307 * k[7] + a1308 * k[8] + a1309 * k[9] + a1311 * k[11] + - a1312 * k[12]), + dt * + ( + a1301 * k[1] + a1304 * k[4] + a1305 * k[5] + a1306 * k[6] + + a1307 * k[7] + a1308 * k[8] + a1309 * k[9] + a1311 * k[11] + + a1312 * k[12] + ), p, - t + c13 * dt)) - copyat_or_push!(k, 14, + t + c13 * dt + ) + ) + copyat_or_push!( + k, 14, f( uprev + - dt * - (a1401 * k[1] + a1404 * k[4] + a1405 * k[5] + a1406 * k[6] + - a1407 * k[7] + a1408 * k[8] + a1409 * k[9] + a1411 * k[11] + - a1412 * k[12] + a1413 * k[13]), + dt * + ( + a1401 * k[1] + a1404 * k[4] + a1405 * k[5] + a1406 * k[6] + + a1407 * k[7] + a1408 * k[8] + a1409 * k[9] + a1411 * k[11] + + a1412 * k[12] + a1413 * k[13] + ), p, - t + c14 * dt)) - copyat_or_push!(k, 15, + t + c14 * dt + ) + ) + copyat_or_push!( + k, 15, f( uprev + - dt * - (a1501 * k[1] + a1504 * k[4] + a1505 * k[5] + a1506 * k[6] + - a1507 * k[7] + a1508 * k[8] + a1509 * k[9] + a1511 * k[11] + - a1512 * k[12] + a1513 * k[13]), + dt * + ( + a1501 * k[1] + a1504 * k[4] + a1505 * k[5] + a1506 * k[6] + + a1507 * k[7] + a1508 * k[8] + a1509 * k[9] + a1511 * k[11] + + a1512 * k[12] + a1513 * k[13] + ), p, - t + c15 * dt)) - copyat_or_push!(k, 16, + t + c15 * dt + ) + ) + copyat_or_push!( + k, 16, f( uprev + - dt * - (a1601 * k[1] + a1604 * k[4] + a1605 * k[5] + a1606 * k[6] + - a1607 * k[7] + a1608 * k[8] + a1609 * k[9] + a1611 * k[11] + - a1612 * k[12] + a1613 * k[13]), + dt * + ( + a1601 * k[1] + a1604 * k[4] + a1605 * k[5] + a1606 * k[6] + + a1607 * k[7] + a1608 * k[8] + a1609 * k[9] + a1611 * k[11] + + a1612 * k[12] + a1613 * k[13] + ), p, - t + c16 * dt)) + t + c16 * dt + ) + ) end nothing end -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::Vern8ConstantCache, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::Vern8ConstantCache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) if length(k) < 13 || always_calc_begin (; c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, a0201, a0301, a0302, a0401, a0403, a0501, a0503, a0504, a0601, a0604, a0605, a0701, a0704, a0705, a0706, a0801, a0804, a0805, a0806, a0807, a0901, a0904, a0905, a0906, a0907, a0908, a1001, a1004, a1005, a1006, a1007, a1008, a1009, a1101, a1104, a1105, a1106, a1107, a1108, a1109, a1110, a1201, a1204, a1205, a1206, a1207, a1208, a1209, a1210, a1211, a1301, a1304, a1305, a1306, a1307, a1308, a1309, a1310) = cache.tab copyat_or_push!(k, 1, f(uprev, p, t)) copyat_or_push!(k, 2, f(uprev + dt * (a0201 * k[1]), p, t + c2 * dt)) copyat_or_push!(k, 3, f(uprev + dt * (a0301 * k[1] + a0302 * k[2]), p, t + c3 * dt)) copyat_or_push!(k, 4, f(uprev + dt * (a0401 * k[1] + a0403 * k[3]), p, t + c4 * dt)) - copyat_or_push!(k, 5, - f(uprev + dt * (a0501 * k[1] + a0503 * k[3] + a0504 * k[4]), p, - t + c5 * dt)) - copyat_or_push!(k, 6, - f(uprev + dt * (a0601 * k[1] + a0604 * k[4] + a0605 * k[5]), p, - t + c6 * dt)) - copyat_or_push!(k, 7, - f(uprev + - dt * (a0701 * k[1] + a0704 * k[4] + a0705 * k[5] + a0706 * k[6]), - p, t + c7 * dt)) - copyat_or_push!(k, 8, + copyat_or_push!( + k, 5, + f( + uprev + dt * (a0501 * k[1] + a0503 * k[3] + a0504 * k[4]), p, + t + c5 * dt + ) + ) + copyat_or_push!( + k, 6, + f( + uprev + dt * (a0601 * k[1] + a0604 * k[4] + a0605 * k[5]), p, + t + c6 * dt + ) + ) + copyat_or_push!( + k, 7, + f( + uprev + + dt * (a0701 * k[1] + a0704 * k[4] + a0705 * k[5] + a0706 * k[6]), + p, t + c7 * dt + ) + ) + copyat_or_push!( + k, 8, f( uprev + - dt * - (a0801 * k[1] + a0804 * k[4] + a0805 * k[5] + a0806 * k[6] + - a0807 * k[7]), + dt * + ( + a0801 * k[1] + a0804 * k[4] + a0805 * k[5] + a0806 * k[6] + + a0807 * k[7] + ), p, - t + c8 * dt)) - copyat_or_push!(k, 9, + t + c8 * dt + ) + ) + copyat_or_push!( + k, 9, f( uprev + - dt * - (a0901 * k[1] + a0904 * k[4] + a0905 * k[5] + a0906 * k[6] + - a0907 * k[7] + a0908 * k[8]), + dt * + ( + a0901 * k[1] + a0904 * k[4] + a0905 * k[5] + a0906 * k[6] + + a0907 * k[7] + a0908 * k[8] + ), p, - t + c9 * dt)) - copyat_or_push!(k, 10, + t + c9 * dt + ) + ) + copyat_or_push!( + k, 10, f( uprev + - dt * - (a1001 * k[1] + a1004 * k[4] + a1005 * k[5] + a1006 * k[6] + - a1007 * k[7] + a1008 * k[8] + a1009 * k[9]), + dt * + ( + a1001 * k[1] + a1004 * k[4] + a1005 * k[5] + a1006 * k[6] + + a1007 * k[7] + a1008 * k[8] + a1009 * k[9] + ), p, - t + c10 * dt)) - copyat_or_push!(k, 11, + t + c10 * dt + ) + ) + copyat_or_push!( + k, 11, f( uprev + - dt * - (a1101 * k[1] + a1104 * k[4] + a1105 * k[5] + a1106 * k[6] + - a1107 * k[7] + a1108 * k[8] + a1109 * k[9] + a1110 * k[10]), + dt * + ( + a1101 * k[1] + a1104 * k[4] + a1105 * k[5] + a1106 * k[6] + + a1107 * k[7] + a1108 * k[8] + a1109 * k[9] + a1110 * k[10] + ), p, - t + c11 * dt)) - copyat_or_push!(k, 12, + t + c11 * dt + ) + ) + copyat_or_push!( + k, 12, f( uprev + - dt * - (a1201 * k[1] + a1204 * k[4] + a1205 * k[5] + a1206 * k[6] + - a1207 * k[7] + a1208 * k[8] + a1209 * k[9] + a1210 * k[10] + - a1211 * k[11]), + dt * + ( + a1201 * k[1] + a1204 * k[4] + a1205 * k[5] + a1206 * k[6] + + a1207 * k[7] + a1208 * k[8] + a1209 * k[9] + a1210 * k[10] + + a1211 * k[11] + ), p, - t + dt)) - copyat_or_push!(k, 13, + t + dt + ) + ) + copyat_or_push!( + k, 13, f( uprev + - dt * - (a1301 * k[1] + a1304 * k[4] + a1305 * k[5] + a1306 * k[6] + - a1307 * k[7] + a1308 * k[8] + a1309 * k[9] + a1310 * k[10]), + dt * + ( + a1301 * k[1] + a1304 * k[4] + a1305 * k[5] + a1306 * k[6] + + a1307 * k[7] + a1308 * k[8] + a1309 * k[9] + a1310 * k[10] + ), p, - t + dt)) + t + dt + ) + ) end if (allow_calc_end && length(k) < 21) || force_calc_end # Have not added the extra stages yet (; c14, a1401, a1406, a1407, a1408, a1409, a1410, a1411, a1412, c15, a1501, a1506, a1507, a1508, a1509, a1510, a1511, a1512, a1514, c16, a1601, a1606, a1607, a1608, a1609, a1610, a1611, a1612, a1614, a1615, c17, a1701, a1706, a1707, a1708, a1709, a1710, a1711, a1712, a1714, a1715, a1716, c18, a1801, a1806, a1807, a1808, a1809, a1810, a1811, a1812, a1814, a1815, a1816, a1817, c19, a1901, a1906, a1907, a1908, a1909, a1910, a1911, a1912, a1914, a1915, a1916, a1917, c20, a2001, a2006, a2007, a2008, a2009, a2010, a2011, a2012, a2014, a2015, a2016, a2017, c21, a2101, a2106, a2107, a2108, a2109, a2110, a2111, a2112, a2114, a2115, a2116, a2117) = cache.tab.extra - copyat_or_push!(k, 14, + copyat_or_push!( + k, 14, f( uprev + - dt * - (a1401 * k[1] + a1406 * k[6] + a1407 * k[7] + a1408 * k[8] + - a1409 * k[9] + a1410 * k[10] + a1411 * k[11] + a1412 * k[12]), + dt * + ( + a1401 * k[1] + a1406 * k[6] + a1407 * k[7] + a1408 * k[8] + + a1409 * k[9] + a1410 * k[10] + a1411 * k[11] + a1412 * k[12] + ), p, - t + c14 * dt)) - copyat_or_push!(k, 15, + t + c14 * dt + ) + ) + copyat_or_push!( + k, 15, f( uprev + - dt * - (a1501 * k[1] + a1506 * k[6] + a1507 * k[7] + a1508 * k[8] + - a1509 * k[9] + a1510 * k[10] + a1511 * k[11] + a1512 * k[12] + - a1514 * k[14]), + dt * + ( + a1501 * k[1] + a1506 * k[6] + a1507 * k[7] + a1508 * k[8] + + a1509 * k[9] + a1510 * k[10] + a1511 * k[11] + a1512 * k[12] + + a1514 * k[14] + ), p, - t + c15 * dt)) - copyat_or_push!(k, 16, + t + c15 * dt + ) + ) + copyat_or_push!( + k, 16, f( uprev + - dt * - (a1601 * k[1] + a1606 * k[6] + a1607 * k[7] + a1608 * k[8] + - a1609 * k[9] + a1610 * k[10] + a1611 * k[11] + a1612 * k[12] + - a1614 * k[14] + a1615 * k[15]), + dt * + ( + a1601 * k[1] + a1606 * k[6] + a1607 * k[7] + a1608 * k[8] + + a1609 * k[9] + a1610 * k[10] + a1611 * k[11] + a1612 * k[12] + + a1614 * k[14] + a1615 * k[15] + ), p, - t + c16 * dt)) - copyat_or_push!(k, 17, + t + c16 * dt + ) + ) + copyat_or_push!( + k, 17, f( uprev + - dt * - (a1701 * k[1] + a1706 * k[6] + a1707 * k[7] + a1708 * k[8] + - a1709 * k[9] + a1710 * k[10] + a1711 * k[11] + a1712 * k[12] + - a1714 * k[14] + a1715 * k[15] + a1716 * k[16]), + dt * + ( + a1701 * k[1] + a1706 * k[6] + a1707 * k[7] + a1708 * k[8] + + a1709 * k[9] + a1710 * k[10] + a1711 * k[11] + a1712 * k[12] + + a1714 * k[14] + a1715 * k[15] + a1716 * k[16] + ), p, - t + c17 * dt)) - copyat_or_push!(k, 18, + t + c17 * dt + ) + ) + copyat_or_push!( + k, 18, f( uprev + - dt * - (a1801 * k[1] + a1806 * k[6] + a1807 * k[7] + a1808 * k[8] + - a1809 * k[9] + a1810 * k[10] + a1811 * k[11] + a1812 * k[12] + - a1814 * k[14] + a1815 * k[15] + a1816 * k[16] + a1817 * k[17]), - p, t + c18 * dt)) - copyat_or_push!(k, 19, + dt * + ( + a1801 * k[1] + a1806 * k[6] + a1807 * k[7] + a1808 * k[8] + + a1809 * k[9] + a1810 * k[10] + a1811 * k[11] + a1812 * k[12] + + a1814 * k[14] + a1815 * k[15] + a1816 * k[16] + a1817 * k[17] + ), + p, t + c18 * dt + ) + ) + copyat_or_push!( + k, 19, f( uprev + - dt * - (a1901 * k[1] + a1906 * k[6] + a1907 * k[7] + a1908 * k[8] + - a1909 * k[9] + a1910 * k[10] + a1911 * k[11] + a1912 * k[12] + - a1914 * k[14] + a1915 * k[15] + a1916 * k[16] + a1917 * k[17]), - p, t + c19 * dt)) - copyat_or_push!(k, 20, + dt * + ( + a1901 * k[1] + a1906 * k[6] + a1907 * k[7] + a1908 * k[8] + + a1909 * k[9] + a1910 * k[10] + a1911 * k[11] + a1912 * k[12] + + a1914 * k[14] + a1915 * k[15] + a1916 * k[16] + a1917 * k[17] + ), + p, t + c19 * dt + ) + ) + copyat_or_push!( + k, 20, f( uprev + - dt * - (a2001 * k[1] + a2006 * k[6] + a2007 * k[7] + a2008 * k[8] + - a2009 * k[9] + a2010 * k[10] + a2011 * k[11] + a2012 * k[12] + - a2014 * k[14] + a2015 * k[15] + a2016 * k[16] + a2017 * k[17]), - p, t + c20 * dt)) - copyat_or_push!(k, 21, + dt * + ( + a2001 * k[1] + a2006 * k[6] + a2007 * k[7] + a2008 * k[8] + + a2009 * k[9] + a2010 * k[10] + a2011 * k[11] + a2012 * k[12] + + a2014 * k[14] + a2015 * k[15] + a2016 * k[16] + a2017 * k[17] + ), + p, t + c20 * dt + ) + ) + copyat_or_push!( + k, 21, f( uprev + - dt * - (a2101 * k[1] + a2106 * k[6] + a2107 * k[7] + a2108 * k[8] + - a2109 * k[9] + a2110 * k[10] + a2111 * k[11] + a2112 * k[12] + - a2114 * k[14] + a2115 * k[15] + a2116 * k[16] + a2117 * k[17]), - p, t + c21 * dt)) + dt * + ( + a2101 * k[1] + a2106 * k[6] + a2107 * k[7] + a2108 * k[8] + + a2109 * k[9] + a2110 * k[10] + a2111 * k[11] + a2112 * k[12] + + a2114 * k[14] + a2115 * k[15] + a2116 * k[16] + a2117 * k[17] + ), + p, t + c21 * dt + ) + ) end nothing end -@muladd function _ode_addsteps!(k, t, uprev, u, dt, f, p, cache::Vern9ConstantCache, +@muladd function _ode_addsteps!( + k, t, uprev, u, dt, f, p, cache::Vern9ConstantCache, always_calc_begin = false, allow_calc_end = true, - force_calc_end = false) + force_calc_end = false + ) T = constvalue(recursive_unitless_bottom_eltype(u)) T2 = constvalue(typeof(one(t))) if length(k) < 10 || always_calc_begin @@ -773,183 +1055,288 @@ end copyat_or_push!(k, 2, f(uprev + dt * (a0201 * k[1]), p, t + c1 * dt)) copyat_or_push!(k, 3, f(uprev + dt * (a0301 * k[1] + a0302 * k[2]), p, t + c2 * dt)) copyat_or_push!(k, 4, f(uprev + dt * (a0401 * k[1] + a0403 * k[3]), p, t + c3 * dt)) - copyat_or_push!(k, 5, - f(uprev + dt * (a0501 * k[1] + a0503 * k[3] + a0504 * k[4]), p, - t + c4 * dt)) - copyat_or_push!(k, 6, - f(uprev + dt * (a0601 * k[1] + a0604 * k[4] + a0605 * k[5]), p, - t + c5 * dt)) - copyat_or_push!(k, 7, - f(uprev + - dt * (a0701 * k[1] + a0704 * k[4] + a0705 * k[5] + a0706 * k[6]), - p, t + c6 * dt)) - copyat_or_push!(k, 2, - f(uprev + dt * (a0801 * k[1] + a0806 * k[6] + a0807 * k[7]), p, - t + c7 * dt)) - copyat_or_push!(k, 3, - f(uprev + - dt * (a0901 * k[1] + a0906 * k[6] + a0907 * k[7] + a0908 * k[2]), - p, t + c8 * dt)) - copyat_or_push!(k, 4, - f( - uprev + - dt * - (a1001 * k[1] + a1006 * k[6] + a1007 * k[7] + a1008 * k[2] + - a1009 * k[3]), - p, - t + c9 * dt)) - copyat_or_push!(k, 5, - f( - uprev + - dt * - (a1101 * k[1] + a1106 * k[6] + a1107 * k[7] + a1108 * k[2] + - a1109 * k[3] + a1110 * k[4]), - p, - t + c10 * dt)) + copyat_or_push!( + k, 5, + f( + uprev + dt * (a0501 * k[1] + a0503 * k[3] + a0504 * k[4]), p, + t + c4 * dt + ) + ) + copyat_or_push!( + k, 6, + f( + uprev + dt * (a0601 * k[1] + a0604 * k[4] + a0605 * k[5]), p, + t + c5 * dt + ) + ) + copyat_or_push!( + k, 7, + f( + uprev + + dt * (a0701 * k[1] + a0704 * k[4] + a0705 * k[5] + a0706 * k[6]), + p, t + c6 * dt + ) + ) + copyat_or_push!( + k, 2, + f( + uprev + dt * (a0801 * k[1] + a0806 * k[6] + a0807 * k[7]), p, + t + c7 * dt + ) + ) + copyat_or_push!( + k, 3, + f( + uprev + + dt * (a0901 * k[1] + a0906 * k[6] + a0907 * k[7] + a0908 * k[2]), + p, t + c8 * dt + ) + ) + copyat_or_push!( + k, 4, + f( + uprev + + dt * + ( + a1001 * k[1] + a1006 * k[6] + a1007 * k[7] + a1008 * k[2] + + a1009 * k[3] + ), + p, + t + c9 * dt + ) + ) + copyat_or_push!( + k, 5, + f( + uprev + + dt * + ( + a1101 * k[1] + a1106 * k[6] + a1107 * k[7] + a1108 * k[2] + + a1109 * k[3] + a1110 * k[4] + ), + p, + t + c10 * dt + ) + ) temp6 = recursivecopy(k[6]) temp7 = recursivecopy(k[7]) - copyat_or_push!(k, 6, + copyat_or_push!( + k, 6, f( uprev + - dt * - (a1201 * k[1] + a1206 * temp6 + a1207 * temp7 + a1208 * k[2] + - a1209 * k[3] + a1210 * k[4] + a1211 * k[5]), + dt * + ( + a1201 * k[1] + a1206 * temp6 + a1207 * temp7 + a1208 * k[2] + + a1209 * k[3] + a1210 * k[4] + a1211 * k[5] + ), p, - t + c11 * dt)) - copyat_or_push!(k, 7, + t + c11 * dt + ) + ) + copyat_or_push!( + k, 7, f( uprev + - dt * - (a1301 * k[1] + a1306 * temp6 + a1307 * temp7 + a1308 * k[2] + - a1309 * k[3] + a1310 * k[4] + a1311 * k[5] + a1312 * k[6]), + dt * + ( + a1301 * k[1] + a1306 * temp6 + a1307 * temp7 + a1308 * k[2] + + a1309 * k[3] + a1310 * k[4] + a1311 * k[5] + a1312 * k[6] + ), p, - t + c12 * dt)) - copyat_or_push!(k, 8, + t + c12 * dt + ) + ) + copyat_or_push!( + k, 8, f( uprev + - dt * - (a1401 * k[1] + a1406 * temp6 + a1407 * temp7 + a1408 * k[2] + - a1409 * k[3] + a1410 * k[4] + a1411 * k[5] + a1412 * k[6] + - a1413 * k[7]), + dt * + ( + a1401 * k[1] + a1406 * temp6 + a1407 * temp7 + a1408 * k[2] + + a1409 * k[3] + a1410 * k[4] + a1411 * k[5] + a1412 * k[6] + + a1413 * k[7] + ), p, - t + c13 * dt)) - copyat_or_push!(k, 9, + t + c13 * dt + ) + ) + copyat_or_push!( + k, 9, f( uprev + - dt * - (a1501 * k[1] + a1506 * temp6 + a1507 * temp7 + a1508 * k[2] + - a1509 * k[3] + a1510 * k[4] + a1511 * k[5] + a1512 * k[6] + - a1513 * k[7] + a1514 * k[8]), + dt * + ( + a1501 * k[1] + a1506 * temp6 + a1507 * temp7 + a1508 * k[2] + + a1509 * k[3] + a1510 * k[4] + a1511 * k[5] + a1512 * k[6] + + a1513 * k[7] + a1514 * k[8] + ), p, - t + dt)) - copyat_or_push!(k, 10, + t + dt + ) + ) + copyat_or_push!( + k, 10, f( uprev + - dt * - (a1601 * k[1] + a1606 * temp6 + a1607 * temp7 + a1608 * k[2] + - a1609 * k[3] + a1610 * k[4] + a1611 * k[5] + a1612 * k[6] + - a1613 * k[7]), + dt * + ( + a1601 * k[1] + a1606 * temp6 + a1607 * temp7 + a1608 * k[2] + + a1609 * k[3] + a1610 * k[4] + a1611 * k[5] + a1612 * k[6] + + a1613 * k[7] + ), p, - t + dt)) + t + dt + ) + ) end if (allow_calc_end && length(k) < 20) || force_calc_end # Have not added the extra stages yet @OnDemandTableauExtract Vern9ExtraStages T T2 - copyat_or_push!(k, 11, + copyat_or_push!( + k, 11, f( uprev + - dt * - (a1701 * k[1] + a1708 * k[2] + a1709 * k[3] + a1710 * k[4] + - a1711 * k[5] + a1712 * k[6] + a1713 * k[7] + a1714 * k[8] + - a1715 * k[9]), + dt * + ( + a1701 * k[1] + a1708 * k[2] + a1709 * k[3] + a1710 * k[4] + + a1711 * k[5] + a1712 * k[6] + a1713 * k[7] + a1714 * k[8] + + a1715 * k[9] + ), p, - t + c17 * dt)) - copyat_or_push!(k, 12, + t + c17 * dt + ) + ) + copyat_or_push!( + k, 12, f( uprev + - dt * - (a1801 * k[1] + a1808 * k[2] + a1809 * k[3] + a1810 * k[4] + - a1811 * k[5] + a1812 * k[6] + a1813 * k[7] + a1814 * k[8] + - a1815 * k[9] + a1817 * k[11]), + dt * + ( + a1801 * k[1] + a1808 * k[2] + a1809 * k[3] + a1810 * k[4] + + a1811 * k[5] + a1812 * k[6] + a1813 * k[7] + a1814 * k[8] + + a1815 * k[9] + a1817 * k[11] + ), p, - t + c18 * dt)) - copyat_or_push!(k, 13, + t + c18 * dt + ) + ) + copyat_or_push!( + k, 13, f( uprev + - dt * - (a1901 * k[1] + a1908 * k[2] + a1909 * k[3] + a1910 * k[4] + - a1911 * k[5] + a1912 * k[6] + a1913 * k[7] + a1914 * k[8] + - a1915 * k[9] + a1917 * k[11] + a1918 * k[12]), + dt * + ( + a1901 * k[1] + a1908 * k[2] + a1909 * k[3] + a1910 * k[4] + + a1911 * k[5] + a1912 * k[6] + a1913 * k[7] + a1914 * k[8] + + a1915 * k[9] + a1917 * k[11] + a1918 * k[12] + ), p, - t + c19 * dt)) - copyat_or_push!(k, 14, + t + c19 * dt + ) + ) + copyat_or_push!( + k, 14, f( uprev + - dt * - (a2001 * k[1] + a2008 * k[2] + a2009 * k[3] + a2010 * k[4] + - a2011 * k[5] + a2012 * k[6] + a2013 * k[7] + a2014 * k[8] + - a2015 * k[9] + a2017 * k[11] + a2018 * k[12] + a2019 * k[13]), + dt * + ( + a2001 * k[1] + a2008 * k[2] + a2009 * k[3] + a2010 * k[4] + + a2011 * k[5] + a2012 * k[6] + a2013 * k[7] + a2014 * k[8] + + a2015 * k[9] + a2017 * k[11] + a2018 * k[12] + a2019 * k[13] + ), p, - t + c20 * dt)) - copyat_or_push!(k, 15, + t + c20 * dt + ) + ) + copyat_or_push!( + k, 15, f( uprev + - dt * - (a2101 * k[1] + a2108 * k[2] + a2109 * k[3] + a2110 * k[4] + - a2111 * k[5] + a2112 * k[6] + a2113 * k[7] + a2114 * k[8] + - a2115 * k[9] + a2117 * k[11] + a2118 * k[12] + a2119 * k[13] + - a2120 * k[14]), + dt * + ( + a2101 * k[1] + a2108 * k[2] + a2109 * k[3] + a2110 * k[4] + + a2111 * k[5] + a2112 * k[6] + a2113 * k[7] + a2114 * k[8] + + a2115 * k[9] + a2117 * k[11] + a2118 * k[12] + a2119 * k[13] + + a2120 * k[14] + ), p, - t + c21 * dt)) - copyat_or_push!(k, 16, + t + c21 * dt + ) + ) + copyat_or_push!( + k, 16, f( uprev + - dt * - (a2201 * k[1] + a2208 * k[2] + a2209 * k[3] + a2210 * k[4] + - a2211 * k[5] + a2212 * k[6] + a2213 * k[7] + a2214 * k[8] + - a2215 * k[9] + a2217 * k[11] + a2218 * k[12] + a2219 * k[13] + - a2220 * k[14] + a2221 * k[15]), + dt * + ( + a2201 * k[1] + a2208 * k[2] + a2209 * k[3] + a2210 * k[4] + + a2211 * k[5] + a2212 * k[6] + a2213 * k[7] + a2214 * k[8] + + a2215 * k[9] + a2217 * k[11] + a2218 * k[12] + a2219 * k[13] + + a2220 * k[14] + a2221 * k[15] + ), p, - t + c22 * dt)) - copyat_or_push!(k, 17, + t + c22 * dt + ) + ) + copyat_or_push!( + k, 17, f( uprev + - dt * - (a2301 * k[1] + a2308 * k[2] + a2309 * k[3] + a2310 * k[4] + - a2311 * k[5] + a2312 * k[6] + a2313 * k[7] + a2314 * k[8] + - a2315 * k[9] + a2317 * k[11] + a2318 * k[12] + a2319 * k[13] + - a2320 * k[14] + a2321 * k[15]), + dt * + ( + a2301 * k[1] + a2308 * k[2] + a2309 * k[3] + a2310 * k[4] + + a2311 * k[5] + a2312 * k[6] + a2313 * k[7] + a2314 * k[8] + + a2315 * k[9] + a2317 * k[11] + a2318 * k[12] + a2319 * k[13] + + a2320 * k[14] + a2321 * k[15] + ), p, - t + c23 * dt)) - copyat_or_push!(k, 18, + t + c23 * dt + ) + ) + copyat_or_push!( + k, 18, f( uprev + - dt * - (a2401 * k[1] + a2408 * k[2] + a2409 * k[3] + a2410 * k[4] + - a2411 * k[5] + a2412 * k[6] + a2413 * k[7] + a2414 * k[8] + - a2415 * k[9] + a2417 * k[11] + a2418 * k[12] + a2419 * k[13] + - a2420 * k[14] + a2421 * k[15]), + dt * + ( + a2401 * k[1] + a2408 * k[2] + a2409 * k[3] + a2410 * k[4] + + a2411 * k[5] + a2412 * k[6] + a2413 * k[7] + a2414 * k[8] + + a2415 * k[9] + a2417 * k[11] + a2418 * k[12] + a2419 * k[13] + + a2420 * k[14] + a2421 * k[15] + ), p, - t + c24 * dt)) - copyat_or_push!(k, 19, + t + c24 * dt + ) + ) + copyat_or_push!( + k, 19, f( uprev + - dt * - (a2501 * k[1] + a2508 * k[2] + a2509 * k[3] + a2510 * k[4] + - a2511 * k[5] + a2512 * k[6] + a2513 * k[7] + a2514 * k[8] + - a2515 * k[9] + a2517 * k[11] + a2518 * k[12] + a2519 * k[13] + - a2520 * k[14] + a2521 * k[15]), + dt * + ( + a2501 * k[1] + a2508 * k[2] + a2509 * k[3] + a2510 * k[4] + + a2511 * k[5] + a2512 * k[6] + a2513 * k[7] + a2514 * k[8] + + a2515 * k[9] + a2517 * k[11] + a2518 * k[12] + a2519 * k[13] + + a2520 * k[14] + a2521 * k[15] + ), p, - t + c25 * dt)) - copyat_or_push!(k, 20, + t + c25 * dt + ) + ) + copyat_or_push!( + k, 20, f( uprev + - dt * - (a2601 * k[1] + a2608 * k[2] + a2609 * k[3] + a2610 * k[4] + - a2611 * k[5] + a2612 * k[6] + a2613 * k[7] + a2614 * k[8] + - a2615 * k[9] + a2617 * k[11] + a2618 * k[12] + a2619 * k[13] + - a2620 * k[14] + a2621 * k[15]), + dt * + ( + a2601 * k[1] + a2608 * k[2] + a2609 * k[3] + a2610 * k[4] + + a2611 * k[5] + a2612 * k[6] + a2613 * k[7] + a2614 * k[8] + + a2615 * k[9] + a2617 * k[11] + a2618 * k[12] + a2619 * k[13] + + a2620 * k[14] + a2621 * k[15] + ), p, - t + c26 * dt)) + t + c26 * dt + ) + ) end nothing end diff --git a/lib/OrdinaryDiffEqVerner/src/verner_caches.jl b/lib/OrdinaryDiffEqVerner/src/verner_caches.jl index 5734464a31..41dc516d27 100644 --- a/lib/OrdinaryDiffEqVerner/src/verner_caches.jl +++ b/lib/OrdinaryDiffEqVerner/src/verner_caches.jl @@ -1,6 +1,8 @@ -@cache struct Vern6Cache{uType, rateType, uNoUnitsType, TabType, StageLimiter, StepLimiter, - Thread} <: - OrdinaryDiffEqMutableCache +@cache struct Vern6Cache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, StepLimiter, + Thread, + } <: + OrdinaryDiffEqMutableCache u::uType uprev::uType k1::rateType @@ -25,10 +27,12 @@ end get_fsalfirstlast(cache::Vern6Cache, u) = (cache.k1, cache.k9) -function alg_cache(alg::Vern6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Vern6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = Vern6Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) k2 = zero(rate_prototype) @@ -44,8 +48,10 @@ function alg_cache(alg::Vern6, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) rtmp = uEltypeNoUnits === eltype(u) ? utilde : zero(rate_prototype) - Vern6Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, utilde, tmp, rtmp, atmp, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread, alg.lazy) + return Vern6Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, utilde, tmp, rtmp, atmp, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread, alg.lazy + ) end struct Vern6ConstantCache{TabType} <: OrdinaryDiffEqConstantCache @@ -53,17 +59,21 @@ struct Vern6ConstantCache{TabType} <: OrdinaryDiffEqConstantCache lazy::Bool end -function alg_cache(alg::Vern6, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Vern6, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = Vern6Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - Vern6ConstantCache(tab, alg.lazy) + return Vern6ConstantCache(tab, alg.lazy) end -@cache struct Vern7Cache{uType, rateType, uNoUnitsType, StageLimiter, StepLimiter, - Thread} <: - OrdinaryDiffEqMutableCache +@cache struct Vern7Cache{ + uType, rateType, uNoUnitsType, StageLimiter, StepLimiter, + Thread, + } <: + OrdinaryDiffEqMutableCache u::uType uprev::uType k1::rateType @@ -89,10 +99,12 @@ end # fake values since non-FSAL method get_fsalfirstlast(cache::Vern7Cache, u) = (nothing, nothing) -function alg_cache(alg::Vern7, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Vern7, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k1 = zero(rate_prototype) k2 = zero(rate_prototype) k3 = k2 @@ -108,24 +120,30 @@ function alg_cache(alg::Vern7, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) rtmp = uEltypeNoUnits === eltype(u) ? utilde : zero(rate_prototype) - Vern7Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, utilde, tmp, rtmp, atmp, - alg.stage_limiter!, alg.step_limiter!, alg.thread, alg.lazy) + return Vern7Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, utilde, tmp, rtmp, atmp, + alg.stage_limiter!, alg.step_limiter!, alg.thread, alg.lazy + ) end struct Vern7ConstantCache <: OrdinaryDiffEqConstantCache lazy::Bool end -function alg_cache(alg::Vern7, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Vern7, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - Vern7ConstantCache(alg.lazy) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return Vern7ConstantCache(alg.lazy) end -@cache struct Vern8Cache{uType, rateType, uNoUnitsType, TabType, StageLimiter, StepLimiter, - Thread} <: - OrdinaryDiffEqMutableCache +@cache struct Vern8Cache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, StepLimiter, + Thread, + } <: + OrdinaryDiffEqMutableCache u::uType uprev::uType k1::rateType @@ -155,10 +173,12 @@ end # fake values since non-FSAL method get_fsalfirstlast(cache::Vern8Cache, u) = (nothing, nothing) -function alg_cache(alg::Vern8, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Vern8, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = Vern8Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) k2 = zero(rate_prototype) @@ -178,8 +198,10 @@ function alg_cache(alg::Vern8, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) rtmp = uEltypeNoUnits === eltype(u) ? utilde : zero(rate_prototype) - Vern8Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, utilde, - tmp, rtmp, atmp, tab, alg.stage_limiter!, alg.step_limiter!, alg.thread, alg.lazy) + return Vern8Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, utilde, + tmp, rtmp, atmp, tab, alg.stage_limiter!, alg.step_limiter!, alg.thread, alg.lazy + ) end struct Vern8ConstantCache{TabType} <: OrdinaryDiffEqConstantCache @@ -187,17 +209,21 @@ struct Vern8ConstantCache{TabType} <: OrdinaryDiffEqConstantCache lazy::Bool end -function alg_cache(alg::Vern8, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Vern8, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = Vern8Tableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - Vern8ConstantCache(tab, alg.lazy) + return Vern8ConstantCache(tab, alg.lazy) end -@cache struct Vern9Cache{uType, rateType, uNoUnitsType, StageLimiter, StepLimiter, - Thread} <: - OrdinaryDiffEqMutableCache +@cache struct Vern9Cache{ + uType, rateType, uNoUnitsType, StageLimiter, StepLimiter, + Thread, + } <: + OrdinaryDiffEqMutableCache u::uType uprev::uType k1::rateType @@ -229,10 +255,12 @@ end # fake values since non-FSAL method get_fsalfirstlast(cache::Vern9Cache, u) = (nothing, nothing) -function alg_cache(alg::Vern9, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Vern9, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} k1 = zero(rate_prototype) k2 = zero(rate_prototype) k3 = k2 @@ -254,25 +282,31 @@ function alg_cache(alg::Vern9, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) rtmp = uEltypeNoUnits === eltype(u) ? utilde : zero(rate_prototype) - Vern9Cache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, + return Vern9Cache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, utilde, tmp, rtmp, atmp, alg.stage_limiter!, alg.step_limiter!, - alg.thread, alg.lazy) + alg.thread, alg.lazy + ) end struct Vern9ConstantCache <: OrdinaryDiffEqConstantCache lazy::Bool end -function alg_cache(alg::Vern9, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::Vern9, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} - Vern9ConstantCache(alg.lazy) + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + return Vern9ConstantCache(alg.lazy) end -@cache struct RKV76IIaCache{uType, rateType, uNoUnitsType, TabType, StageLimiter, StepLimiter, - Thread} <: - OrdinaryDiffEqMutableCache +@cache struct RKV76IIaCache{ + uType, rateType, uNoUnitsType, TabType, StageLimiter, StepLimiter, + Thread, + } <: + OrdinaryDiffEqMutableCache u::uType uprev::uType k1::rateType @@ -299,10 +333,12 @@ end # fake values since non-FSAL method get_fsalfirstlast(cache::RKV76IIaCache, u) = (nothing, nothing) -function alg_cache(alg::RKV76IIa, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RKV76IIa, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{true}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{true} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = RKV76IIaTableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) k1 = zero(rate_prototype) k2 = zero(rate_prototype) @@ -319,8 +355,10 @@ function alg_cache(alg::RKV76IIa, u, rate_prototype, ::Type{uEltypeNoUnits}, atmp = similar(u, uEltypeNoUnits) recursivefill!(atmp, false) rtmp = uEltypeNoUnits === eltype(u) ? utilde : zero(rate_prototype) - RKV76IIaCache(u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, utilde, tmp, rtmp, atmp, tab, - alg.stage_limiter!, alg.step_limiter!, alg.thread, alg.lazy) + return RKV76IIaCache( + u, uprev, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, utilde, tmp, rtmp, atmp, tab, + alg.stage_limiter!, alg.step_limiter!, alg.thread, alg.lazy + ) end struct RKV76IIaConstantCache{TabType} <: OrdinaryDiffEqConstantCache @@ -328,10 +366,12 @@ struct RKV76IIaConstantCache{TabType} <: OrdinaryDiffEqConstantCache lazy::Bool end -function alg_cache(alg::RKV76IIa, u, rate_prototype, ::Type{uEltypeNoUnits}, +function alg_cache( + alg::RKV76IIa, u, rate_prototype, ::Type{uEltypeNoUnits}, ::Type{uBottomEltypeNoUnits}, ::Type{tTypeNoUnits}, uprev, uprev2, f, t, dt, reltol, p, calck, - ::Val{false}) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} + ::Val{false} + ) where {uEltypeNoUnits, uBottomEltypeNoUnits, tTypeNoUnits} tab = RKV76IIaTableau(constvalue(uBottomEltypeNoUnits), constvalue(tTypeNoUnits)) - RKV76IIaConstantCache(tab, alg.lazy) + return RKV76IIaConstantCache(tab, alg.lazy) end diff --git a/lib/OrdinaryDiffEqVerner/src/verner_rk_perform_step.jl b/lib/OrdinaryDiffEqVerner/src/verner_rk_perform_step.jl index b7358c8b08..d599ea53d0 100644 --- a/lib/OrdinaryDiffEqVerner/src/verner_rk_perform_step.jl +++ b/lib/OrdinaryDiffEqVerner/src/verner_rk_perform_step.jl @@ -13,7 +13,7 @@ function initialize!(integrator, cache::Vern6ConstantCache) end integrator.k[integrator.kshortsize] = integrator.fsallast - if !cache.lazy + return if !cache.lazy @inbounds for i in 10:12 integrator.k[i] = zero(integrator.fsalfirst) end @@ -30,8 +30,10 @@ end k4 = f(uprev + dt * (a41 * k1 + a43 * k3), p, t + c3 * dt) k5 = f(uprev + dt * (a51 * k1 + a53 * k3 + a54 * k4), p, t + c4 * dt) k6 = f(uprev + dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5), p, t + c5 * dt) - k7 = f(uprev + dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6), p, - t + c6 * dt) + k7 = f( + uprev + dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6), p, + t + c6 * dt + ) g8 = uprev + dt * (a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + a86 * k6 + a87 * k7) k8 = f(g8, p, t + dt) u = uprev + dt * (a91 * k1 + a94 * k4 + a95 * k5 + a96 * k6 + a97 * k7 + a98 * k8) @@ -41,14 +43,19 @@ end if integrator.alg isa CompositeAlgorithm g9 = u integrator.eigen_est = integrator.opts.internalnorm( - maximum(abs.((k9 .- k8) ./ (g9 .- g8))), t) + maximum(abs.((k9 .- k8) ./ (g9 .- g8))), t + ) end if integrator.opts.adaptive utilde = dt * - (btilde1 * k1 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + btilde7 * k7 + - btilde8 * k8 + btilde9 * k9) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + ( + btilde1 * k1 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + btilde7 * k7 + + btilde8 * k8 + btilde9 * k9 + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = k1 @@ -62,29 +69,40 @@ end integrator.k[9] = k9 alg = unwrap_alg(integrator, false) - if !cache.lazy && (integrator.opts.adaptive == false || - accept_step_controller(integrator, integrator.opts.controller)) + if !cache.lazy && ( + integrator.opts.adaptive == false || + accept_step_controller(integrator, integrator.opts.controller) + ) k = integrator.k (; c10, a1001, a1004, a1005, a1006, a1007, a1008, a1009, c11, a1101, a1104, a1105, a1106, a1107, a1108, a1109, a1110, c12, a1201, a1204, a1205, a1206, a1207, a1208, a1209, a1210, a1211) = cache.tab.extra k[10] = f( uprev + - dt * (a1001 * k[1] + a1004 * k[4] + a1005 * k[5] + a1006 * k[6] + - a1007 * k[7] + a1008 * k[8] + a1009 * k[9]), + dt * ( + a1001 * k[1] + a1004 * k[4] + a1005 * k[5] + a1006 * k[6] + + a1007 * k[7] + a1008 * k[8] + a1009 * k[9] + ), p, - t + c10 * dt) + t + c10 * dt + ) k[11] = f( uprev + - dt * (a1101 * k[1] + a1104 * k[4] + a1105 * k[5] + a1106 * k[6] + - a1107 * k[7] + a1108 * k[8] + a1109 * k[9] + a1110 * k[10]), + dt * ( + a1101 * k[1] + a1104 * k[4] + a1105 * k[5] + a1106 * k[6] + + a1107 * k[7] + a1108 * k[8] + a1109 * k[9] + a1110 * k[10] + ), p, - t + c11 * dt) + t + c11 * dt + ) k[12] = f( uprev + - dt * (a1201 * k[1] + a1204 * k[4] + a1205 * k[5] + a1206 * k[6] + - a1207 * k[7] + a1208 * k[8] + a1209 * k[9] + a1210 * k[10] + - a1211 * k[11]), + dt * ( + a1201 * k[1] + a1204 * k[4] + a1205 * k[5] + a1206 * k[6] + + a1207 * k[7] + a1208 * k[8] + a1209 * k[9] + a1210 * k[10] + + a1211 * k[11] + ), p, - t + c12 * dt) + t + c12 * dt + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) end @@ -113,7 +131,7 @@ function initialize!(integrator, cache::Vern6Cache) end integrator.f(integrator.fsalfirst, integrator.uprev, integrator.p, integrator.t) # Pre-start fsal - OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) + return OrdinaryDiffEqCore.increment_nf!(integrator.stats, 1) end @muladd function perform_step!(integrator, cache::Vern6Cache, repeat_step = false) @@ -122,37 +140,43 @@ end (; c1, c2, c3, c4, c5, c6, a21, a31, a32, a41, a43, a51, a53, a54, a61, a63, a64, a65, a71, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, a91, a94, a95, a96, a97, a98, btilde1, btilde4, btilde5, btilde6, btilde7, btilde8, btilde9) = cache.tab (; k1, k2, k3, k4, k5, k6, k7, k8, k9, utilde, tmp, rtmp, atmp, stage_limiter!, step_limiter!, thread) = cache a = dt * a21 - @.. broadcast=false thread=thread tmp=uprev + a * k1 + @.. broadcast = false thread = thread tmp = uprev + a * k1 stage_limiter!(tmp, integrator, p, t + c1 * dt) f(k2, tmp, p, t + c1 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a31 * k1 + a32 * k2) stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k3, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a41 * k1 + a43 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a41 * k1 + a43 * k3) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k4, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a51 * k1 + a53 * k3 + a54 * k4) + @.. broadcast = false thread = thread tmp = uprev + dt * (a51 * k1 + a53 * k3 + a54 * k4) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k5, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a61 * k1 + a63 * k3 + a64 * k4 + a65 * k5) stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k6, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + - a76 * k6) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a71 * k1 + a73 * k3 + a74 * k4 + a75 * k5 + + a76 * k6 + ) stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k7, tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + - a86 * k6 + - a87 * k7) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a81 * k1 + a83 * k3 + a84 * k4 + a85 * k5 + + a86 * k6 + + a87 * k7 + ) stage_limiter!(tmp, integrator, p, t + dt) f(k8, tmp, p, t + dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (a91 * k1 + a94 * k4 + a95 * k5 + a96 * k6 + - a97 * k7 + a98 * k8) + @.. broadcast = false thread = thread u = uprev + + dt * + ( + a91 * k1 + a94 * k4 + a95 * k5 + a96 * k6 + + a97 * k7 + a98 * k8 + ) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) f(k9, u, p, t + dt) @@ -160,46 +184,58 @@ end if integrator.alg isa CompositeAlgorithm g9 = u g8 = tmp - @.. broadcast=false thread=thread rtmp=abs((k9 - k8) / (g9 - g8)) + @.. broadcast = false thread = thread rtmp = abs((k9 - k8) / (g9 - g8)) integrator.eigen_est = integrator.opts.internalnorm(norm(rtmp, Inf), t) end if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde4 * k4 + - btilde5 * k5 + - btilde6 * k6 + btilde7 * k7 + - btilde8 * k8 + - btilde9 * k9) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * ( + btilde1 * k1 + btilde4 * k4 + + btilde5 * k5 + + btilde6 * k6 + btilde7 * k7 + + btilde8 * k8 + + btilde9 * k9 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end alg = unwrap_alg(integrator, false) - if !cache.lazy && (integrator.opts.adaptive == false || - accept_step_controller(integrator, integrator.opts.controller)) + if !cache.lazy && ( + integrator.opts.adaptive == false || + accept_step_controller(integrator, integrator.opts.controller) + ) k = integrator.k (; c10, a1001, a1004, a1005, a1006, a1007, a1008, a1009, c11, a1101, a1104, a1105, a1106, a1107, a1108, a1109, a1110, c12, a1201, a1204, a1205, a1206, a1207, a1208, a1209, a1210, a1211) = cache.tab.extra (; tmp) = cache - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a1001 * k[1] + a1004 * k[4] + a1005 * k[5] + - a1006 * k[6] + - a1007 * k[7] + a1008 * k[8] + a1009 * k[9]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a1001 * k[1] + a1004 * k[4] + a1005 * k[5] + + a1006 * k[6] + + a1007 * k[7] + a1008 * k[8] + a1009 * k[9] + ) f(k[10], tmp, p, t + c10 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a1101 * k[1] + a1104 * k[4] + a1105 * k[5] + - a1106 * k[6] + - a1107 * k[7] + a1108 * k[8] + a1109 * k[9] + - a1110 * k[10]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a1101 * k[1] + a1104 * k[4] + a1105 * k[5] + + a1106 * k[6] + + a1107 * k[7] + a1108 * k[8] + a1109 * k[9] + + a1110 * k[10] + ) f(k[11], tmp, p, t + c11 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a1201 * k[1] + a1204 * k[4] + a1205 * k[5] + - a1206 * k[6] + - a1207 * k[7] + a1208 * k[8] + a1209 * k[9] + - a1210 * k[10] + a1211 * k[11]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a1201 * k[1] + a1204 * k[4] + a1205 * k[5] + + a1206 * k[6] + + a1207 * k[7] + a1208 * k[8] + a1209 * k[9] + + a1210 * k[10] + a1211 * k[11] + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 3) f(k[12], tmp, p, t + c12 * dt) end @@ -212,7 +248,7 @@ function initialize!(integrator, cache::Vern7ConstantCache) integrator.k = typeof(integrator.k)(undef, integrator.kshortsize) # Avoid undefined entries if k is an array of arrays - @inbounds for i in eachindex(integrator.k) + return @inbounds for i in eachindex(integrator.k) integrator.k[i] = zero(integrator.uprev) ./ oneunit(integrator.t) end end @@ -229,32 +265,40 @@ end k4 = f(uprev + dt * (a041 * k1 + a043 * k3), p, t + c4 * dt) k5 = f(uprev + dt * (a051 * k1 + a053 * k3 + a054 * k4), p, t + c5 * dt) k6 = f(uprev + dt * (a061 * k1 + a063 * k3 + a064 * k4 + a065 * k5), p, t + c6 * dt) - k7 = f(uprev + dt * (a071 * k1 + a073 * k3 + a074 * k4 + a075 * k5 + a076 * k6), p, - t + c7 * dt) + k7 = f( + uprev + dt * (a071 * k1 + a073 * k3 + a074 * k4 + a075 * k5 + a076 * k6), p, + t + c7 * dt + ) k8 = f( uprev + - dt * (a081 * k1 + a083 * k3 + a084 * k4 + a085 * k5 + a086 * k6 + a087 * k7), + dt * (a081 * k1 + a083 * k3 + a084 * k4 + a085 * k5 + a086 * k6 + a087 * k7), p, - t + c8 * dt) + t + c8 * dt + ) g9 = uprev + - dt * - (a091 * k1 + a093 * k3 + a094 * k4 + a095 * k5 + a096 * k6 + a097 * k7 + a098 * k8) + dt * + (a091 * k1 + a093 * k3 + a094 * k4 + a095 * k5 + a096 * k6 + a097 * k7 + a098 * k8) g10 = uprev + - dt * (a101 * k1 + a103 * k3 + a104 * k4 + a105 * k5 + a106 * k6 + a107 * k7) + dt * (a101 * k1 + a103 * k3 + a104 * k4 + a105 * k5 + a106 * k6 + a107 * k7) k9 = f(g9, p, t + dt) k10 = f(g10, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 10) u = uprev + dt * (b1 * k1 + b4 * k4 + b5 * k5 + b6 * k6 + b7 * k7 + b8 * k8 + b9 * k9) if integrator.alg isa CompositeAlgorithm integrator.eigen_est = integrator.opts.internalnorm( - maximum(abs.((k10 .- k9) ./ (g10 .- g9))), t) + maximum(abs.((k10 .- k9) ./ (g10 .- g9))), t + ) end if integrator.opts.adaptive utilde = dt * - (btilde1 * k1 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + btilde7 * k7 + - btilde8 * k8 + btilde9 * k9 + btilde10 * k10) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + ( + btilde1 * k1 + btilde4 * k4 + btilde5 * k5 + btilde6 * k6 + btilde7 * k7 + + btilde8 * k8 + btilde9 * k9 + btilde10 * k10 + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = k1 @@ -270,50 +314,70 @@ end integrator.u = u alg = unwrap_alg(integrator, false) - if !cache.lazy && (integrator.opts.adaptive == false || - accept_step_controller(integrator, integrator.opts.controller)) + if !cache.lazy && ( + integrator.opts.adaptive == false || + accept_step_controller(integrator, integrator.opts.controller) + ) k = integrator.k @OnDemandTableauExtract Vern7ExtraStages T T2 k[11] = f( uprev + - dt * (a1101 * k[1] + a1104 * k[4] + a1105 * k[5] + a1106 * k[6] + - a1107 * k[7] + a1108 * k[8] + a1109 * k[9]), + dt * ( + a1101 * k[1] + a1104 * k[4] + a1105 * k[5] + a1106 * k[6] + + a1107 * k[7] + a1108 * k[8] + a1109 * k[9] + ), p, - t + c11 * dt) + t + c11 * dt + ) k[12] = f( uprev + - dt * (a1201 * k[1] + a1204 * k[4] + a1205 * k[5] + a1206 * k[6] + - a1207 * k[7] + a1208 * k[8] + a1209 * k[9] + a1211 * k[11]), + dt * ( + a1201 * k[1] + a1204 * k[4] + a1205 * k[5] + a1206 * k[6] + + a1207 * k[7] + a1208 * k[8] + a1209 * k[9] + a1211 * k[11] + ), p, - t + c12 * dt) + t + c12 * dt + ) k[13] = f( uprev + - dt * (a1301 * k[1] + a1304 * k[4] + a1305 * k[5] + a1306 * k[6] + - a1307 * k[7] + a1308 * k[8] + a1309 * k[9] + a1311 * k[11] + - a1312 * k[12]), + dt * ( + a1301 * k[1] + a1304 * k[4] + a1305 * k[5] + a1306 * k[6] + + a1307 * k[7] + a1308 * k[8] + a1309 * k[9] + a1311 * k[11] + + a1312 * k[12] + ), p, - t + c13 * dt) + t + c13 * dt + ) k[14] = f( uprev + - dt * (a1401 * k[1] + a1404 * k[4] + a1405 * k[5] + a1406 * k[6] + - a1407 * k[7] + a1408 * k[8] + a1409 * k[9] + a1411 * k[11] + - a1412 * k[12] + a1413 * k[13]), + dt * ( + a1401 * k[1] + a1404 * k[4] + a1405 * k[5] + a1406 * k[6] + + a1407 * k[7] + a1408 * k[8] + a1409 * k[9] + a1411 * k[11] + + a1412 * k[12] + a1413 * k[13] + ), p, - t + c14 * dt) + t + c14 * dt + ) k[15] = f( uprev + - dt * (a1501 * k[1] + a1504 * k[4] + a1505 * k[5] + a1506 * k[6] + - a1507 * k[7] + a1508 * k[8] + a1509 * k[9] + a1511 * k[11] + - a1512 * k[12] + a1513 * k[13]), + dt * ( + a1501 * k[1] + a1504 * k[4] + a1505 * k[5] + a1506 * k[6] + + a1507 * k[7] + a1508 * k[8] + a1509 * k[9] + a1511 * k[11] + + a1512 * k[12] + a1513 * k[13] + ), p, - t + c15 * dt) + t + c15 * dt + ) k[16] = f( uprev + - dt * (a1601 * k[1] + a1604 * k[4] + a1605 * k[5] + a1606 * k[6] + - a1607 * k[7] + a1608 * k[8] + a1609 * k[9] + a1611 * k[11] + - a1612 * k[12] + a1613 * k[13]), + dt * ( + a1601 * k[1] + a1604 * k[4] + a1605 * k[5] + a1606 * k[6] + + a1607 * k[7] + a1608 * k[8] + a1609 * k[9] + a1611 * k[11] + + a1612 * k[12] + a1613 * k[13] + ), p, - t + c16 * dt) + t + c16 * dt + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 6) end end @@ -335,7 +399,7 @@ function initialize!(integrator, cache::Vern7Cache) k[9] = k9 k[10] = k10 # Setup pointers - if !cache.lazy + return if !cache.lazy k[11] = similar(cache.k1) k[12] = similar(cache.k1) k[13] = similar(cache.k1) @@ -353,124 +417,152 @@ end (; k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, utilde, tmp, rtmp, atmp, stage_limiter!, step_limiter!, thread) = cache f(k1, uprev, p, t) a = dt * a021 - @.. broadcast=false thread=thread tmp=uprev + a * k1 + @.. broadcast = false thread = thread tmp = uprev + a * k1 stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a031 * k1 + a032 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a031 * k1 + a032 * k2) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a041 * k1 + a043 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a041 * k1 + a043 * k3) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k4, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a051 * k1 + a053 * k3 + a054 * k4) + @.. broadcast = false thread = thread tmp = uprev + dt * (a051 * k1 + a053 * k3 + a054 * k4) stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k5, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a061 * k1 + a063 * k3 + a064 * k4 + a065 * k5) + @.. broadcast = false thread = thread tmp = uprev + + dt * + (a061 * k1 + a063 * k3 + a064 * k4 + a065 * k5) stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k6, tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a071 * k1 + a073 * k3 + a074 * k4 + a075 * k5 + - a076 * k6) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a071 * k1 + a073 * k3 + a074 * k4 + a075 * k5 + + a076 * k6 + ) stage_limiter!(tmp, integrator, p, t + c7 * dt) f(k7, tmp, p, t + c7 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a081 * k1 + a083 * k3 + a084 * k4 + a085 * k5 + - a086 * k6 + - a087 * k7) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a081 * k1 + a083 * k3 + a084 * k4 + a085 * k5 + + a086 * k6 + + a087 * k7 + ) stage_limiter!(tmp, integrator, p, t + c8 * dt) f(k8, tmp, p, t + c8 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a091 * k1 + a093 * k3 + a094 * k4 + a095 * k5 + - a096 * k6 + - a097 * k7 + a098 * k8) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a091 * k1 + a093 * k3 + a094 * k4 + a095 * k5 + + a096 * k6 + + a097 * k7 + a098 * k8 + ) stage_limiter!(tmp, integrator, p, t + dt) f(k9, tmp, p, t + dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a101 * k1 + a103 * k3 + a104 * k4 + a105 * k5 + - a106 * k6 + - a107 * k7) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a101 * k1 + a103 * k3 + a104 * k4 + a105 * k5 + + a106 * k6 + + a107 * k7 + ) stage_limiter!(tmp, integrator, p, t + dt) f(k10, tmp, p, t + dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (b1 * k1 + b4 * k4 + b5 * k5 + b6 * k6 + b7 * k7 + - b8 * k8 + - b9 * k9) + @.. broadcast = false thread = thread u = uprev + + dt * + ( + b1 * k1 + b4 * k4 + b5 * k5 + b6 * k6 + b7 * k7 + + b8 * k8 + + b9 * k9 + ) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 10) if integrator.alg isa CompositeAlgorithm g10 = u g9 = tmp - @.. broadcast=false thread=thread rtmp=abs((k10 - k9) / (g10 - g9)) + @.. broadcast = false thread = thread rtmp = abs((k10 - k9) / (g10 - g9)) integrator.eigen_est = integrator.opts.internalnorm(norm(rtmp, Inf), t) end if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde4 * k4 + - btilde5 * k5 + - btilde6 * k6 + btilde7 * k7 + - btilde8 * k8 + - btilde9 * k9 + btilde10 * k10) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * ( + btilde1 * k1 + btilde4 * k4 + + btilde5 * k5 + + btilde6 * k6 + btilde7 * k7 + + btilde8 * k8 + + btilde9 * k9 + btilde10 * k10 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end alg = unwrap_alg(integrator, false) - if !cache.lazy && (integrator.opts.adaptive == false || - accept_step_controller(integrator, integrator.opts.controller)) + if !cache.lazy && ( + integrator.opts.adaptive == false || + accept_step_controller(integrator, integrator.opts.controller) + ) k = integrator.k (; tmp) = cache @OnDemandTableauExtract Vern7ExtraStages T T2 - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a1101 * k[1] + a1104 * k[4] + a1105 * k[5] + - a1106 * k[6] + - a1107 * k[7] + a1108 * k[8] + a1109 * k[9]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a1101 * k[1] + a1104 * k[4] + a1105 * k[5] + + a1106 * k[6] + + a1107 * k[7] + a1108 * k[8] + a1109 * k[9] + ) f(k[11], tmp, p, t + c11 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a1201 * k[1] + a1204 * k[4] + a1205 * k[5] + - a1206 * k[6] + - a1207 * k[7] + a1208 * k[8] + a1209 * k[9] + - a1211 * k[11]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a1201 * k[1] + a1204 * k[4] + a1205 * k[5] + + a1206 * k[6] + + a1207 * k[7] + a1208 * k[8] + a1209 * k[9] + + a1211 * k[11] + ) f(k[12], tmp, p, t + c12 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a1301 * k[1] + a1304 * k[4] + a1305 * k[5] + - a1306 * k[6] + - a1307 * k[7] + a1308 * k[8] + a1309 * k[9] + - a1311 * k[11] + a1312 * k[12]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a1301 * k[1] + a1304 * k[4] + a1305 * k[5] + + a1306 * k[6] + + a1307 * k[7] + a1308 * k[8] + a1309 * k[9] + + a1311 * k[11] + a1312 * k[12] + ) f(k[13], tmp, p, t + c13 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a1401 * k[1] + a1404 * k[4] + a1405 * k[5] + - a1406 * k[6] + - a1407 * k[7] + a1408 * k[8] + a1409 * k[9] + - a1411 * k[11] + a1412 * k[12] + - a1413 * k[13]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a1401 * k[1] + a1404 * k[4] + a1405 * k[5] + + a1406 * k[6] + + a1407 * k[7] + a1408 * k[8] + a1409 * k[9] + + a1411 * k[11] + a1412 * k[12] + + a1413 * k[13] + ) f(k[14], tmp, p, t + c14 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a1501 * k[1] + a1504 * k[4] + a1505 * k[5] + - a1506 * k[6] + - a1507 * k[7] + a1508 * k[8] + a1509 * k[9] + - a1511 * k[11] + a1512 * k[12] + - a1513 * k[13]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a1501 * k[1] + a1504 * k[4] + a1505 * k[5] + + a1506 * k[6] + + a1507 * k[7] + a1508 * k[8] + a1509 * k[9] + + a1511 * k[11] + a1512 * k[12] + + a1513 * k[13] + ) f(k[15], tmp, p, t + c15 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a1601 * k[1] + a1604 * k[4] + a1605 * k[5] + - a1606 * k[6] + - a1607 * k[7] + a1608 * k[8] + a1609 * k[9] + - a1611 * k[11] + a1612 * k[12] + - a1613 * k[13]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a1601 * k[1] + a1604 * k[4] + a1605 * k[5] + + a1606 * k[6] + + a1607 * k[7] + a1608 * k[8] + a1609 * k[9] + + a1611 * k[11] + a1612 * k[12] + + a1613 * k[13] + ) f(k[16], tmp, p, t + c16 * dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 6) end @@ -483,7 +575,7 @@ function initialize!(integrator, cache::Vern8ConstantCache) integrator.k = typeof(integrator.k)(undef, integrator.kshortsize) # Avoid undefined entries if k is an array of arrays - @inbounds for i in eachindex(integrator.k) + return @inbounds for i in eachindex(integrator.k) integrator.k[i] = zero(integrator.uprev) ./ oneunit(integrator.t) end end @@ -501,51 +593,70 @@ end k7 = f(uprev + dt * (a0701 * k1 + a0704 * k4 + a0705 * k5 + a0706 * k6), p, t + c7 * dt) k8 = f( uprev + dt * (a0801 * k1 + a0804 * k4 + a0805 * k5 + a0806 * k6 + a0807 * k7), p, - t + c8 * dt) + t + c8 * dt + ) k9 = f( uprev + - dt * - (a0901 * k1 + a0904 * k4 + a0905 * k5 + a0906 * k6 + a0907 * k7 + a0908 * k8), + dt * + (a0901 * k1 + a0904 * k4 + a0905 * k5 + a0906 * k6 + a0907 * k7 + a0908 * k8), p, - t + c9 * dt) + t + c9 * dt + ) k10 = f( uprev + - dt * - (a1001 * k1 + a1004 * k4 + a1005 * k5 + a1006 * k6 + a1007 * k7 + a1008 * k8 + - a1009 * k9), + dt * + ( + a1001 * k1 + a1004 * k4 + a1005 * k5 + a1006 * k6 + a1007 * k7 + a1008 * k8 + + a1009 * k9 + ), p, - t + c10 * dt) + t + c10 * dt + ) k11 = f( uprev + - dt * - (a1101 * k1 + a1104 * k4 + a1105 * k5 + a1106 * k6 + a1107 * k7 + a1108 * k8 + - a1109 * k9 + a1110 * k10), + dt * + ( + a1101 * k1 + a1104 * k4 + a1105 * k5 + a1106 * k6 + a1107 * k7 + a1108 * k8 + + a1109 * k9 + a1110 * k10 + ), p, - t + c11 * dt) + t + c11 * dt + ) g12 = uprev + - dt * - (a1201 * k1 + a1204 * k4 + a1205 * k5 + a1206 * k6 + a1207 * k7 + a1208 * k8 + - a1209 * k9 + a1210 * k10 + a1211 * k11) + dt * + ( + a1201 * k1 + a1204 * k4 + a1205 * k5 + a1206 * k6 + a1207 * k7 + a1208 * k8 + + a1209 * k9 + a1210 * k10 + a1211 * k11 + ) g13 = uprev + - dt * - (a1301 * k1 + a1304 * k4 + a1305 * k5 + a1306 * k6 + a1307 * k7 + a1308 * k8 + - a1309 * k9 + a1310 * k10) + dt * + ( + a1301 * k1 + a1304 * k4 + a1305 * k5 + a1306 * k6 + a1307 * k7 + a1308 * k8 + + a1309 * k9 + a1310 * k10 + ) k12 = f(g12, p, t + dt) k13 = f(g13, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 13) u = uprev + - dt * (b1 * k1 + b6 * k6 + b7 * k7 + b8 * k8 + b9 * k9 + b10 * k10 + b11 * k11 + - b12 * k12) + dt * ( + b1 * k1 + b6 * k6 + b7 * k7 + b8 * k8 + b9 * k9 + b10 * k10 + b11 * k11 + + b12 * k12 + ) if integrator.alg isa CompositeAlgorithm integrator.eigen_est = integrator.opts.internalnorm( - maximum(abs.((k13 .- k12) ./ (g13 .- g12))), t) + maximum(abs.((k13 .- k12) ./ (g13 .- g12))), t + ) end if integrator.opts.adaptive utilde = dt * - (btilde1 * k1 + btilde6 * k6 + btilde7 * k7 + btilde8 * k8 + btilde9 * k9 + - btilde10 * k10 + btilde11 * k11 + btilde12 * k12 + btilde13 * k13) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + ( + btilde1 * k1 + btilde6 * k6 + btilde7 * k7 + btilde8 * k8 + btilde9 * k9 + + btilde10 * k10 + btilde11 * k11 + btilde12 * k12 + btilde13 * k13 + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end integrator.k[1] = k1 @@ -564,65 +675,91 @@ end integrator.u = u alg = unwrap_alg(integrator, false) - if !cache.lazy && (integrator.opts.adaptive == false || - accept_step_controller(integrator, integrator.opts.controller)) + if !cache.lazy && ( + integrator.opts.adaptive == false || + accept_step_controller(integrator, integrator.opts.controller) + ) k = integrator.k (; c14, a1401, a1406, a1407, a1408, a1409, a1410, a1411, a1412, c15, a1501, a1506, a1507, a1508, a1509, a1510, a1511, a1512, a1514, c16, a1601, a1606, a1607, a1608, a1609, a1610, a1611, a1612, a1614, a1615, c17, a1701, a1706, a1707, a1708, a1709, a1710, a1711, a1712, a1714, a1715, a1716, c18, a1801, a1806, a1807, a1808, a1809, a1810, a1811, a1812, a1814, a1815, a1816, a1817, c19, a1901, a1906, a1907, a1908, a1909, a1910, a1911, a1912, a1914, a1915, a1916, a1917, c20, a2001, a2006, a2007, a2008, a2009, a2010, a2011, a2012, a2014, a2015, a2016, a2017, c21, a2101, a2106, a2107, a2108, a2109, a2110, a2111, a2112, a2114, a2115, a2116, a2117) = cache.tab.extra k[14] = f( uprev + - dt * (a1401 * k[1] + a1406 * k[6] + a1407 * k[7] + a1408 * k[8] + - a1409 * k[9] + a1410 * k[10] + a1411 * k[11] + a1412 * k[12]), + dt * ( + a1401 * k[1] + a1406 * k[6] + a1407 * k[7] + a1408 * k[8] + + a1409 * k[9] + a1410 * k[10] + a1411 * k[11] + a1412 * k[12] + ), p, - t + c14 * dt) + t + c14 * dt + ) k[15] = f( uprev + - dt * (a1501 * k[1] + a1506 * k[6] + a1507 * k[7] + a1508 * k[8] + - a1509 * k[9] + a1510 * k[10] + a1511 * k[11] + a1512 * k[12] + - a1514 * k[14]), + dt * ( + a1501 * k[1] + a1506 * k[6] + a1507 * k[7] + a1508 * k[8] + + a1509 * k[9] + a1510 * k[10] + a1511 * k[11] + a1512 * k[12] + + a1514 * k[14] + ), p, - t + c15 * dt) + t + c15 * dt + ) k[16] = f( uprev + - dt * (a1601 * k[1] + a1606 * k[6] + a1607 * k[7] + a1608 * k[8] + - a1609 * k[9] + a1610 * k[10] + a1611 * k[11] + a1612 * k[12] + - a1614 * k[14] + a1615 * k[15]), + dt * ( + a1601 * k[1] + a1606 * k[6] + a1607 * k[7] + a1608 * k[8] + + a1609 * k[9] + a1610 * k[10] + a1611 * k[11] + a1612 * k[12] + + a1614 * k[14] + a1615 * k[15] + ), p, - t + c16 * dt) + t + c16 * dt + ) k[17] = f( uprev + - dt * (a1701 * k[1] + a1706 * k[6] + a1707 * k[7] + a1708 * k[8] + - a1709 * k[9] + a1710 * k[10] + a1711 * k[11] + a1712 * k[12] + - a1714 * k[14] + a1715 * k[15] + a1716 * k[16]), + dt * ( + a1701 * k[1] + a1706 * k[6] + a1707 * k[7] + a1708 * k[8] + + a1709 * k[9] + a1710 * k[10] + a1711 * k[11] + a1712 * k[12] + + a1714 * k[14] + a1715 * k[15] + a1716 * k[16] + ), p, - t + c17 * dt) + t + c17 * dt + ) k[18] = f( uprev + - dt * (a1801 * k[1] + a1806 * k[6] + a1807 * k[7] + a1808 * k[8] + - a1809 * k[9] + a1810 * k[10] + a1811 * k[11] + a1812 * k[12] + - a1814 * k[14] + a1815 * k[15] + a1816 * k[16] + a1817 * k[17]), + dt * ( + a1801 * k[1] + a1806 * k[6] + a1807 * k[7] + a1808 * k[8] + + a1809 * k[9] + a1810 * k[10] + a1811 * k[11] + a1812 * k[12] + + a1814 * k[14] + a1815 * k[15] + a1816 * k[16] + a1817 * k[17] + ), p, - t + c18 * dt) + t + c18 * dt + ) k[19] = f( uprev + - dt * (a1901 * k[1] + a1906 * k[6] + a1907 * k[7] + a1908 * k[8] + - a1909 * k[9] + a1910 * k[10] + a1911 * k[11] + a1912 * k[12] + - a1914 * k[14] + a1915 * k[15] + a1916 * k[16] + a1917 * k[17]), + dt * ( + a1901 * k[1] + a1906 * k[6] + a1907 * k[7] + a1908 * k[8] + + a1909 * k[9] + a1910 * k[10] + a1911 * k[11] + a1912 * k[12] + + a1914 * k[14] + a1915 * k[15] + a1916 * k[16] + a1917 * k[17] + ), p, - t + c19 * dt) + t + c19 * dt + ) k[20] = f( uprev + - dt * (a2001 * k[1] + a2006 * k[6] + a2007 * k[7] + a2008 * k[8] + - a2009 * k[9] + a2010 * k[10] + a2011 * k[11] + a2012 * k[12] + - a2014 * k[14] + a2015 * k[15] + a2016 * k[16] + a2017 * k[17]), + dt * ( + a2001 * k[1] + a2006 * k[6] + a2007 * k[7] + a2008 * k[8] + + a2009 * k[9] + a2010 * k[10] + a2011 * k[11] + a2012 * k[12] + + a2014 * k[14] + a2015 * k[15] + a2016 * k[16] + a2017 * k[17] + ), p, - t + c20 * dt) + t + c20 * dt + ) k[21] = f( uprev + - dt * (a2101 * k[1] + a2106 * k[6] + a2107 * k[7] + a2108 * k[8] + - a2109 * k[9] + a2110 * k[10] + a2111 * k[11] + a2112 * k[12] + - a2114 * k[14] + a2115 * k[15] + a2116 * k[16] + a2117 * k[17]), + dt * ( + a2101 * k[1] + a2106 * k[6] + a2107 * k[7] + a2108 * k[8] + + a2109 * k[9] + a2110 * k[10] + a2111 * k[11] + a2112 * k[12] + + a2114 * k[14] + a2115 * k[15] + a2116 * k[16] + a2117 * k[17] + ), p, - t + c21 * dt) + t + c21 * dt + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 8) end end @@ -647,7 +784,7 @@ function initialize!(integrator, cache::Vern8Cache) k[12] = k12 k[13] = k13 # Setup pointers - if !cache.lazy + return if !cache.lazy for i in 14:21 k[i] = similar(cache.k1) end @@ -661,66 +798,80 @@ end (; k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, utilde, tmp, rtmp, atmp, stage_limiter!, step_limiter!, thread) = cache f(k1, uprev, p, t) a = dt * a0201 - @.. broadcast=false thread=thread tmp=uprev + a * k1 + @.. broadcast = false thread = thread tmp = uprev + a * k1 stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a0301 * k1 + a0302 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a0301 * k1 + a0302 * k2) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a0401 * k1 + a0403 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a0401 * k1 + a0403 * k3) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k4, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a0501 * k1 + a0503 * k3 + a0504 * k4) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a0501 * k1 + a0503 * k3 + a0504 * k4) stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k5, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a0601 * k1 + a0604 * k4 + a0605 * k5) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a0601 * k1 + a0604 * k4 + a0605 * k5) stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k6, tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a0701 * k1 + a0704 * k4 + a0705 * k5 + - a0706 * k6) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a0701 * k1 + a0704 * k4 + a0705 * k5 + + a0706 * k6 + ) stage_limiter!(tmp, integrator, p, t + c7 * dt) f(k7, tmp, p, t + c7 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a0801 * k1 + a0804 * k4 + a0805 * k5 + - a0806 * k6 + a0807 * k7) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a0801 * k1 + a0804 * k4 + a0805 * k5 + + a0806 * k6 + a0807 * k7 + ) stage_limiter!(tmp, integrator, p, t + c8 * dt) f(k8, tmp, p, t + c8 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a0901 * k1 + a0904 * k4 + a0905 * k5 + - a0906 * k6 + - a0907 * k7 + a0908 * k8) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a0901 * k1 + a0904 * k4 + a0905 * k5 + + a0906 * k6 + + a0907 * k7 + a0908 * k8 + ) stage_limiter!(tmp, integrator, p, t + c9 * dt) f(k9, tmp, p, t + c9 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a1001 * k1 + a1004 * k4 + a1005 * k5 + - a1006 * k6 + - a1007 * k7 + a1008 * k8 + a1009 * k9) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a1001 * k1 + a1004 * k4 + a1005 * k5 + + a1006 * k6 + + a1007 * k7 + a1008 * k8 + a1009 * k9 + ) stage_limiter!(tmp, integrator, p, t + c10 * dt) f(k10, tmp, p, t + c10 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a1101 * k1 + a1104 * k4 + a1105 * k5 + - a1106 * k6 + - a1107 * k7 + a1108 * k8 + a1109 * k9 + - a1110 * k10) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a1101 * k1 + a1104 * k4 + a1105 * k5 + + a1106 * k6 + + a1107 * k7 + a1108 * k8 + a1109 * k9 + + a1110 * k10 + ) stage_limiter!(tmp, integrator, p, t + c11 * dt) f(k11, tmp, p, t + c11 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a1201 * k1 + a1204 * k4 + a1205 * k5 + - a1206 * k6 + - a1207 * k7 + a1208 * k8 + a1209 * k9 + - a1210 * k10 + - a1211 * k11) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a1201 * k1 + a1204 * k4 + a1205 * k5 + + a1206 * k6 + + a1207 * k7 + a1208 * k8 + a1209 * k9 + + a1210 * k10 + + a1211 * k11 + ) stage_limiter!(tmp, integrator, p, t + dt) f(k12, tmp, p, t + dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (a1301 * k1 + a1304 * k4 + a1305 * k5 + a1306 * k6 + - a1307 * k7 + - a1308 * k8 + a1309 * k9 + a1310 * k10) + @.. broadcast = false thread = thread u = uprev + + dt * + ( + a1301 * k1 + a1304 * k4 + a1305 * k5 + a1306 * k6 + + a1307 * k7 + + a1308 * k8 + a1309 * k9 + a1310 * k10 + ) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) f(k13, u, p, t + dt) @@ -728,107 +879,131 @@ end if integrator.alg isa CompositeAlgorithm g13 = u g12 = tmp - @.. broadcast=false thread=thread rtmp=abs((k13 - k12) / (g13 - g12)) + @.. broadcast = false thread = thread rtmp = abs((k13 - k12) / (g13 - g12)) integrator.eigen_est = integrator.opts.internalnorm(norm(rtmp, Inf), t) end - @.. broadcast=false thread=thread u=uprev + - dt * - (b1 * k1 + b6 * k6 + b7 * k7 + b8 * k8 + b9 * k9 + - b10 * k10 + - b11 * k11 + b12 * k12) + @.. broadcast = false thread = thread u = uprev + + dt * + ( + b1 * k1 + b6 * k6 + b7 * k7 + b8 * k8 + b9 * k9 + + b10 * k10 + + b11 * k11 + b12 * k12 + ) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde6 * k6 + - btilde7 * k7 + - btilde8 * k8 + btilde9 * k9 + - btilde10 * k10 + - btilde11 * k11 + btilde12 * k12 + - btilde13 * k13) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * ( + btilde1 * k1 + btilde6 * k6 + + btilde7 * k7 + + btilde8 * k8 + btilde9 * k9 + + btilde10 * k10 + + btilde11 * k11 + btilde12 * k12 + + btilde13 * k13 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end alg = unwrap_alg(integrator, false) - if !cache.lazy && (integrator.opts.adaptive == false || - accept_step_controller(integrator, integrator.opts.controller)) + if !cache.lazy && ( + integrator.opts.adaptive == false || + accept_step_controller(integrator, integrator.opts.controller) + ) k = integrator.k (; c14, a1401, a1406, a1407, a1408, a1409, a1410, a1411, a1412, c15, a1501, a1506, a1507, a1508, a1509, a1510, a1511, a1512, a1514, c16, a1601, a1606, a1607, a1608, a1609, a1610, a1611, a1612, a1614, a1615, c17, a1701, a1706, a1707, a1708, a1709, a1710, a1711, a1712, a1714, a1715, a1716, c18, a1801, a1806, a1807, a1808, a1809, a1810, a1811, a1812, a1814, a1815, a1816, a1817, c19, a1901, a1906, a1907, a1908, a1909, a1910, a1911, a1912, a1914, a1915, a1916, a1917, c20, a2001, a2006, a2007, a2008, a2009, a2010, a2011, a2012, a2014, a2015, a2016, a2017, c21, a2101, a2106, a2107, a2108, a2109, a2110, a2111, a2112, a2114, a2115, a2116, a2117) = cache.tab.extra (; tmp) = cache - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a1401 * k[1] + a1406 * k[6] + a1407 * k[7] + - a1408 * k[8] + - a1409 * k[9] + a1410 * k[10] + - a1411 * k[11] + - a1412 * k[12]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a1401 * k[1] + a1406 * k[6] + a1407 * k[7] + + a1408 * k[8] + + a1409 * k[9] + a1410 * k[10] + + a1411 * k[11] + + a1412 * k[12] + ) f(k[14], tmp, p, t + c14 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a1501 * k[1] + a1506 * k[6] + a1507 * k[7] + - a1508 * k[8] + - a1509 * k[9] + a1510 * k[10] + - a1511 * k[11] + - a1512 * k[12] + a1514 * k[14]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a1501 * k[1] + a1506 * k[6] + a1507 * k[7] + + a1508 * k[8] + + a1509 * k[9] + a1510 * k[10] + + a1511 * k[11] + + a1512 * k[12] + a1514 * k[14] + ) f(k[15], tmp, p, t + c15 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a1601 * k[1] + a1606 * k[6] + a1607 * k[7] + - a1608 * k[8] + - a1609 * k[9] + a1610 * k[10] + - a1611 * k[11] + - a1612 * k[12] + a1614 * k[14] + - a1615 * k[15]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a1601 * k[1] + a1606 * k[6] + a1607 * k[7] + + a1608 * k[8] + + a1609 * k[9] + a1610 * k[10] + + a1611 * k[11] + + a1612 * k[12] + a1614 * k[14] + + a1615 * k[15] + ) f(k[16], tmp, p, t + c16 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a1701 * k[1] + a1706 * k[6] + a1707 * k[7] + - a1708 * k[8] + - a1709 * k[9] + a1710 * k[10] + - a1711 * k[11] + - a1712 * k[12] + a1714 * k[14] + - a1715 * k[15] + - a1716 * k[16]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a1701 * k[1] + a1706 * k[6] + a1707 * k[7] + + a1708 * k[8] + + a1709 * k[9] + a1710 * k[10] + + a1711 * k[11] + + a1712 * k[12] + a1714 * k[14] + + a1715 * k[15] + + a1716 * k[16] + ) f(k[17], tmp, p, t + c17 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a1801 * k[1] + a1806 * k[6] + a1807 * k[7] + - a1808 * k[8] + - a1809 * k[9] + a1810 * k[10] + - a1811 * k[11] + - a1812 * k[12] + a1814 * k[14] + - a1815 * k[15] + - a1816 * k[16] + a1817 * k[17]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a1801 * k[1] + a1806 * k[6] + a1807 * k[7] + + a1808 * k[8] + + a1809 * k[9] + a1810 * k[10] + + a1811 * k[11] + + a1812 * k[12] + a1814 * k[14] + + a1815 * k[15] + + a1816 * k[16] + a1817 * k[17] + ) f(k[18], tmp, p, t + c18 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a1901 * k[1] + a1906 * k[6] + a1907 * k[7] + - a1908 * k[8] + - a1909 * k[9] + a1910 * k[10] + - a1911 * k[11] + - a1912 * k[12] + a1914 * k[14] + - a1915 * k[15] + - a1916 * k[16] + a1917 * k[17]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a1901 * k[1] + a1906 * k[6] + a1907 * k[7] + + a1908 * k[8] + + a1909 * k[9] + a1910 * k[10] + + a1911 * k[11] + + a1912 * k[12] + a1914 * k[14] + + a1915 * k[15] + + a1916 * k[16] + a1917 * k[17] + ) f(k[19], tmp, p, t + c19 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a2001 * k[1] + a2006 * k[6] + a2007 * k[7] + - a2008 * k[8] + - a2009 * k[9] + a2010 * k[10] + - a2011 * k[11] + - a2012 * k[12] + a2014 * k[14] + - a2015 * k[15] + - a2016 * k[16] + a2017 * k[17]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a2001 * k[1] + a2006 * k[6] + a2007 * k[7] + + a2008 * k[8] + + a2009 * k[9] + a2010 * k[10] + + a2011 * k[11] + + a2012 * k[12] + a2014 * k[14] + + a2015 * k[15] + + a2016 * k[16] + a2017 * k[17] + ) f(k[20], tmp, p, t + c20 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a2101 * k[1] + a2106 * k[6] + a2107 * k[7] + - a2108 * k[8] + - a2109 * k[9] + a2110 * k[10] + - a2111 * k[11] + - a2112 * k[12] + a2114 * k[14] + - a2115 * k[15] + - a2116 * k[16] + a2117 * k[17]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a2101 * k[1] + a2106 * k[6] + a2107 * k[7] + + a2108 * k[8] + + a2109 * k[9] + a2110 * k[10] + + a2111 * k[11] + + a2112 * k[12] + a2114 * k[14] + + a2115 * k[15] + + a2116 * k[16] + a2117 * k[17] + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 8) f(k[21], tmp, p, t + c21 * dt) end @@ -841,7 +1016,7 @@ function initialize!(integrator, cache::Vern9ConstantCache) integrator.k = typeof(integrator.k)(undef, integrator.kshortsize) # Avoid undefined entries if k is an array of arrays - @inbounds for i in eachindex(integrator.k) + return @inbounds for i in eachindex(integrator.k) integrator.k[i] = zero(integrator.uprev) ./ oneunit(integrator.t) end end @@ -861,58 +1036,81 @@ end k7 = f(uprev + dt * (a0701 * k1 + a0704 * k4 + a0705 * k5 + a0706 * k6), p, t + c6 * dt) k8 = f(uprev + dt * (a0801 * k1 + a0806 * k6 + a0807 * k7), p, t + c7 * dt) k9 = f(uprev + dt * (a0901 * k1 + a0906 * k6 + a0907 * k7 + a0908 * k8), p, t + c8 * dt) - k10 = f(uprev + dt * (a1001 * k1 + a1006 * k6 + a1007 * k7 + a1008 * k8 + a1009 * k9), - p, t + c9 * dt) + k10 = f( + uprev + dt * (a1001 * k1 + a1006 * k6 + a1007 * k7 + a1008 * k8 + a1009 * k9), + p, t + c9 * dt + ) k11 = f( uprev + - dt * - (a1101 * k1 + a1106 * k6 + a1107 * k7 + a1108 * k8 + a1109 * k9 + a1110 * k10), - p, t + c10 * dt) + dt * + (a1101 * k1 + a1106 * k6 + a1107 * k7 + a1108 * k8 + a1109 * k9 + a1110 * k10), + p, t + c10 * dt + ) k12 = f( uprev + - dt * - (a1201 * k1 + a1206 * k6 + a1207 * k7 + a1208 * k8 + a1209 * k9 + a1210 * k10 + - a1211 * k11), + dt * + ( + a1201 * k1 + a1206 * k6 + a1207 * k7 + a1208 * k8 + a1209 * k9 + a1210 * k10 + + a1211 * k11 + ), p, - t + c11 * dt) + t + c11 * dt + ) k13 = f( uprev + - dt * - (a1301 * k1 + a1306 * k6 + a1307 * k7 + a1308 * k8 + a1309 * k9 + a1310 * k10 + - a1311 * k11 + a1312 * k12), + dt * + ( + a1301 * k1 + a1306 * k6 + a1307 * k7 + a1308 * k8 + a1309 * k9 + a1310 * k10 + + a1311 * k11 + a1312 * k12 + ), p, - t + c12 * dt) + t + c12 * dt + ) k14 = f( uprev + - dt * - (a1401 * k1 + a1406 * k6 + a1407 * k7 + a1408 * k8 + a1409 * k9 + a1410 * k10 + - a1411 * k11 + a1412 * k12 + a1413 * k13), + dt * + ( + a1401 * k1 + a1406 * k6 + a1407 * k7 + a1408 * k8 + a1409 * k9 + a1410 * k10 + + a1411 * k11 + a1412 * k12 + a1413 * k13 + ), p, - t + c13 * dt) + t + c13 * dt + ) g15 = uprev + - dt * - (a1501 * k1 + a1506 * k6 + a1507 * k7 + a1508 * k8 + a1509 * k9 + a1510 * k10 + - a1511 * k11 + a1512 * k12 + a1513 * k13 + a1514 * k14) + dt * + ( + a1501 * k1 + a1506 * k6 + a1507 * k7 + a1508 * k8 + a1509 * k9 + a1510 * k10 + + a1511 * k11 + a1512 * k12 + a1513 * k13 + a1514 * k14 + ) g16 = uprev + - dt * - (a1601 * k1 + a1606 * k6 + a1607 * k7 + a1608 * k8 + a1609 * k9 + a1610 * k10 + - a1611 * k11 + a1612 * k12 + a1613 * k13) + dt * + ( + a1601 * k1 + a1606 * k6 + a1607 * k7 + a1608 * k8 + a1609 * k9 + a1610 * k10 + + a1611 * k11 + a1612 * k12 + a1613 * k13 + ) k15 = f(g15, p, t + dt) k16 = f(g16, p, t + dt) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 16) u = uprev + - dt * (b1 * k1 + b8 * k8 + b9 * k9 + b10 * k10 + b11 * k11 + b12 * k12 + b13 * k13 + - b14 * k14 + b15 * k15) + dt * ( + b1 * k1 + b8 * k8 + b9 * k9 + b10 * k10 + b11 * k11 + b12 * k12 + b13 * k13 + + b14 * k14 + b15 * k15 + ) if integrator.alg isa CompositeAlgorithm integrator.eigen_est = integrator.opts.internalnorm( - maximum(abs.((k16 .- k15) ./ (g16 .- g15))), t) + maximum(abs.((k16 .- k15) ./ (g16 .- g15))), t + ) end if integrator.opts.adaptive - utilde = dt * (btilde1 * k1 + btilde8 * k8 + btilde9 * k9 + btilde10 * k10 + - btilde11 * k11 + btilde12 * k12 + btilde13 * k13 + btilde14 * k14 + - btilde15 * k15 + btilde16 * k16) - atmp = calculate_residuals(utilde, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + utilde = dt * ( + btilde1 * k1 + btilde8 * k8 + btilde9 * k9 + btilde10 * k10 + + btilde11 * k11 + btilde12 * k12 + btilde13 * k13 + btilde14 * k14 + + btilde15 * k15 + btilde16 * k16 + ) + atmp = calculate_residuals( + utilde, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end # k2, k3,k4,k5,k6,k7 are not used in the code (not even in interpolations), we don't need their pointers. @@ -930,85 +1128,117 @@ end integrator.u = u alg = unwrap_alg(integrator, false) - if !cache.lazy && (integrator.opts.adaptive == false || - accept_step_controller(integrator, integrator.opts.controller)) + if !cache.lazy && ( + integrator.opts.adaptive == false || + accept_step_controller(integrator, integrator.opts.controller) + ) k = integrator.k @OnDemandTableauExtract Vern9ExtraStages T T2 k[11] = f( uprev + - dt * (a1701 * k[1] + a1708 * k[2] + a1709 * k[3] + a1710 * k[4] + - a1711 * k[5] + a1712 * k[6] + a1713 * k[7] + a1714 * k[8] + - a1715 * k[9]), - p, t + c17 * dt) + dt * ( + a1701 * k[1] + a1708 * k[2] + a1709 * k[3] + a1710 * k[4] + + a1711 * k[5] + a1712 * k[6] + a1713 * k[7] + a1714 * k[8] + + a1715 * k[9] + ), + p, t + c17 * dt + ) k[12] = f( uprev + - dt * (a1801 * k[1] + a1808 * k[2] + a1809 * k[3] + a1810 * k[4] + - a1811 * k[5] + a1812 * k[6] + a1813 * k[7] + a1814 * k[8] + - a1815 * k[9] + a1817 * k[11]), + dt * ( + a1801 * k[1] + a1808 * k[2] + a1809 * k[3] + a1810 * k[4] + + a1811 * k[5] + a1812 * k[6] + a1813 * k[7] + a1814 * k[8] + + a1815 * k[9] + a1817 * k[11] + ), p, - t + c18 * dt) + t + c18 * dt + ) k[13] = f( uprev + - dt * (a1901 * k[1] + a1908 * k[2] + a1909 * k[3] + a1910 * k[4] + - a1911 * k[5] + a1912 * k[6] + a1913 * k[7] + a1914 * k[8] + - a1915 * k[9] + a1917 * k[11] + a1918 * k[12]), + dt * ( + a1901 * k[1] + a1908 * k[2] + a1909 * k[3] + a1910 * k[4] + + a1911 * k[5] + a1912 * k[6] + a1913 * k[7] + a1914 * k[8] + + a1915 * k[9] + a1917 * k[11] + a1918 * k[12] + ), p, - t + c19 * dt) + t + c19 * dt + ) k[14] = f( uprev + - dt * (a2001 * k[1] + a2008 * k[2] + a2009 * k[3] + a2010 * k[4] + - a2011 * k[5] + a2012 * k[6] + a2013 * k[7] + a2014 * k[8] + - a2015 * k[9] + a2017 * k[11] + a2018 * k[12] + a2019 * k[13]), + dt * ( + a2001 * k[1] + a2008 * k[2] + a2009 * k[3] + a2010 * k[4] + + a2011 * k[5] + a2012 * k[6] + a2013 * k[7] + a2014 * k[8] + + a2015 * k[9] + a2017 * k[11] + a2018 * k[12] + a2019 * k[13] + ), p, - t + c20 * dt) + t + c20 * dt + ) k[15] = f( uprev + - dt * (a2101 * k[1] + a2108 * k[2] + a2109 * k[3] + a2110 * k[4] + - a2111 * k[5] + a2112 * k[6] + a2113 * k[7] + a2114 * k[8] + - a2115 * k[9] + a2117 * k[11] + a2118 * k[12] + a2119 * k[13] + - a2120 * k[14]), + dt * ( + a2101 * k[1] + a2108 * k[2] + a2109 * k[3] + a2110 * k[4] + + a2111 * k[5] + a2112 * k[6] + a2113 * k[7] + a2114 * k[8] + + a2115 * k[9] + a2117 * k[11] + a2118 * k[12] + a2119 * k[13] + + a2120 * k[14] + ), p, - t + c21 * dt) + t + c21 * dt + ) k[16] = f( uprev + - dt * (a2201 * k[1] + a2208 * k[2] + a2209 * k[3] + a2210 * k[4] + - a2211 * k[5] + a2212 * k[6] + a2213 * k[7] + a2214 * k[8] + - a2215 * k[9] + a2217 * k[11] + a2218 * k[12] + a2219 * k[13] + - a2220 * k[14] + a2221 * k[15]), + dt * ( + a2201 * k[1] + a2208 * k[2] + a2209 * k[3] + a2210 * k[4] + + a2211 * k[5] + a2212 * k[6] + a2213 * k[7] + a2214 * k[8] + + a2215 * k[9] + a2217 * k[11] + a2218 * k[12] + a2219 * k[13] + + a2220 * k[14] + a2221 * k[15] + ), p, - t + c22 * dt) + t + c22 * dt + ) k[17] = f( uprev + - dt * (a2301 * k[1] + a2308 * k[2] + a2309 * k[3] + a2310 * k[4] + - a2311 * k[5] + a2312 * k[6] + a2313 * k[7] + a2314 * k[8] + - a2315 * k[9] + a2317 * k[11] + a2318 * k[12] + a2319 * k[13] + - a2320 * k[14] + a2321 * k[15]), + dt * ( + a2301 * k[1] + a2308 * k[2] + a2309 * k[3] + a2310 * k[4] + + a2311 * k[5] + a2312 * k[6] + a2313 * k[7] + a2314 * k[8] + + a2315 * k[9] + a2317 * k[11] + a2318 * k[12] + a2319 * k[13] + + a2320 * k[14] + a2321 * k[15] + ), p, - t + c23 * dt) + t + c23 * dt + ) k[18] = f( uprev + - dt * (a2401 * k[1] + a2408 * k[2] + a2409 * k[3] + a2410 * k[4] + - a2411 * k[5] + a2412 * k[6] + a2413 * k[7] + a2414 * k[8] + - a2415 * k[9] + a2417 * k[11] + a2418 * k[12] + a2419 * k[13] + - a2420 * k[14] + a2421 * k[15]), + dt * ( + a2401 * k[1] + a2408 * k[2] + a2409 * k[3] + a2410 * k[4] + + a2411 * k[5] + a2412 * k[6] + a2413 * k[7] + a2414 * k[8] + + a2415 * k[9] + a2417 * k[11] + a2418 * k[12] + a2419 * k[13] + + a2420 * k[14] + a2421 * k[15] + ), p, - t + c24 * dt) + t + c24 * dt + ) k[19] = f( uprev + - dt * (a2501 * k[1] + a2508 * k[2] + a2509 * k[3] + a2510 * k[4] + - a2511 * k[5] + a2512 * k[6] + a2513 * k[7] + a2514 * k[8] + - a2515 * k[9] + a2517 * k[11] + a2518 * k[12] + a2519 * k[13] + - a2520 * k[14] + a2521 * k[15]), + dt * ( + a2501 * k[1] + a2508 * k[2] + a2509 * k[3] + a2510 * k[4] + + a2511 * k[5] + a2512 * k[6] + a2513 * k[7] + a2514 * k[8] + + a2515 * k[9] + a2517 * k[11] + a2518 * k[12] + a2519 * k[13] + + a2520 * k[14] + a2521 * k[15] + ), p, - t + c25 * dt) + t + c25 * dt + ) k[20] = f( uprev + - dt * (a2601 * k[1] + a2608 * k[2] + a2609 * k[3] + a2610 * k[4] + - a2611 * k[5] + a2612 * k[6] + a2613 * k[7] + a2614 * k[8] + - a2615 * k[9] + a2617 * k[11] + a2618 * k[12] + a2619 * k[13] + - a2620 * k[14] + a2621 * k[15]), + dt * ( + a2601 * k[1] + a2608 * k[2] + a2609 * k[3] + a2610 * k[4] + + a2611 * k[5] + a2612 * k[6] + a2613 * k[7] + a2614 * k[8] + + a2615 * k[9] + a2617 * k[11] + a2618 * k[12] + a2619 * k[13] + + a2620 * k[14] + a2621 * k[15] + ), p, - t + c26 * dt) + t + c26 * dt + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 10) end end @@ -1032,7 +1262,7 @@ function initialize!(integrator, cache::Vern9Cache) k[9] = k15 k[10] = k16 # Setup pointers - if !cache.lazy + return if !cache.lazy for i in 11:20 k[i] = similar(cache.k1) end @@ -1048,84 +1278,102 @@ end (; k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, utilde, tmp, rtmp, atmp, stage_limiter!, step_limiter!, thread) = cache f(k1, uprev, p, t) a = dt * a0201 - @.. broadcast=false thread=thread tmp=uprev + a * k1 + @.. broadcast = false thread = thread tmp = uprev + a * k1 stage_limiter!(tmp, integrator, p, t + c1 * dt) f(k2, tmp, p, t + c1 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a0301 * k1 + a0302 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a0301 * k1 + a0302 * k2) stage_limiter!(tmp, integrator, p, t + c2 * dt) f(k3, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp=uprev + dt * (a0401 * k1 + a0403 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a0401 * k1 + a0403 * k3) stage_limiter!(tmp, integrator, p, t + c3 * dt) f(k4, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a0501 * k1 + a0503 * k3 + a0504 * k4) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a0501 * k1 + a0503 * k3 + a0504 * k4) stage_limiter!(tmp, integrator, p, t + c4 * dt) f(k5, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a0601 * k1 + a0604 * k4 + a0605 * k5) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a0601 * k1 + a0604 * k4 + a0605 * k5) stage_limiter!(tmp, integrator, p, t + c5 * dt) f(k6, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a0701 * k1 + a0704 * k4 + a0705 * k5 + - a0706 * k6) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a0701 * k1 + a0704 * k4 + a0705 * k5 + + a0706 * k6 + ) stage_limiter!(tmp, integrator, p, t + c6 * dt) f(k7, tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a0801 * k1 + a0806 * k6 + a0807 * k7) + @.. broadcast = false thread = thread tmp = uprev + + dt * (a0801 * k1 + a0806 * k6 + a0807 * k7) stage_limiter!(tmp, integrator, p, t + c7 * dt) f(k8, tmp, p, t + c7 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a0901 * k1 + a0906 * k6 + a0907 * k7 + - a0908 * k8) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a0901 * k1 + a0906 * k6 + a0907 * k7 + + a0908 * k8 + ) stage_limiter!(tmp, integrator, p, t + c8 * dt) f(k9, tmp, p, t + c8 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a1001 * k1 + a1006 * k6 + a1007 * k7 + - a1008 * k8 + a1009 * k9) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a1001 * k1 + a1006 * k6 + a1007 * k7 + + a1008 * k8 + a1009 * k9 + ) stage_limiter!(tmp, integrator, p, t + c9 * dt) f(k10, tmp, p, t + c9 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a1101 * k1 + a1106 * k6 + a1107 * k7 + - a1108 * k8 + - a1109 * k9 + a1110 * k10) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a1101 * k1 + a1106 * k6 + a1107 * k7 + + a1108 * k8 + + a1109 * k9 + a1110 * k10 + ) stage_limiter!(tmp, integrator, p, t + c10 * dt) f(k11, tmp, p, t + c10 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a1201 * k1 + a1206 * k6 + a1207 * k7 + - a1208 * k8 + - a1209 * k9 + a1210 * k10 + a1211 * k11) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a1201 * k1 + a1206 * k6 + a1207 * k7 + + a1208 * k8 + + a1209 * k9 + a1210 * k10 + a1211 * k11 + ) stage_limiter!(tmp, integrator, p, t + c11 * dt) f(k12, tmp, p, t + c11 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a1301 * k1 + a1306 * k6 + a1307 * k7 + - a1308 * k8 + - a1309 * k9 + a1310 * k10 + a1311 * k11 + - a1312 * k12) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a1301 * k1 + a1306 * k6 + a1307 * k7 + + a1308 * k8 + + a1309 * k9 + a1310 * k10 + a1311 * k11 + + a1312 * k12 + ) stage_limiter!(tmp, integrator, p, t + c12 * dt) f(k13, tmp, p, t + c12 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a1401 * k1 + a1406 * k6 + a1407 * k7 + - a1408 * k8 + - a1409 * k9 + a1410 * k10 + a1411 * k11 + - a1412 * k12 + - a1413 * k13) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a1401 * k1 + a1406 * k6 + a1407 * k7 + + a1408 * k8 + + a1409 * k9 + a1410 * k10 + a1411 * k11 + + a1412 * k12 + + a1413 * k13 + ) stage_limiter!(tmp, integrator, p, t + c13 * dt) f(k14, tmp, p, t + c13 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * (a1501 * k1 + a1506 * k6 + a1507 * k7 + - a1508 * k8 + - a1509 * k9 + a1510 * k10 + a1511 * k11 + - a1512 * k12 + - a1513 * k13 + a1514 * k14) + @.. broadcast = false thread = thread tmp = uprev + + dt * ( + a1501 * k1 + a1506 * k6 + a1507 * k7 + + a1508 * k8 + + a1509 * k9 + a1510 * k10 + a1511 * k11 + + a1512 * k12 + + a1513 * k13 + a1514 * k14 + ) stage_limiter!(tmp, integrator, p, t + dt) f(k15, tmp, p, t + dt) - @.. broadcast=false thread=thread u=uprev + - dt * - (a1601 * k1 + a1606 * k6 + a1607 * k7 + a1608 * k8 + - a1609 * k9 + - a1610 * k10 + a1611 * k11 + a1612 * k12 + - a1613 * k13) + @.. broadcast = false thread = thread u = uprev + + dt * + ( + a1601 * k1 + a1606 * k6 + a1607 * k7 + a1608 * k8 + + a1609 * k9 + + a1610 * k10 + a1611 * k11 + a1612 * k12 + + a1613 * k13 + ) stage_limiter!(u, integrator, p, t + dt) step_limiter!(u, integrator, p, t + dt) f(k16, u, p, t + dt) @@ -1133,132 +1381,160 @@ end if integrator.alg isa CompositeAlgorithm g16 = u g15 = tmp - @.. broadcast=false thread=thread rtmp=abs((k16 - k15) / (g16 - g15)) + @.. broadcast = false thread = thread rtmp = abs((k16 - k15) / (g16 - g15)) integrator.eigen_est = integrator.opts.internalnorm(norm(rtmp, Inf), t) end - @.. broadcast=false thread=thread u=uprev + - dt * - (b1 * k1 + b8 * k8 + b9 * k9 + b10 * k10 + - b11 * k11 + b12 * k12 + - b13 * k13 + b14 * k14 + b15 * k15) + @.. broadcast = false thread = thread u = uprev + + dt * + ( + b1 * k1 + b8 * k8 + b9 * k9 + b10 * k10 + + b11 * k11 + b12 * k12 + + b13 * k13 + b14 * k14 + b15 * k15 + ) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde=dt * (btilde1 * k1 + btilde8 * k8 + - btilde9 * k9 + - btilde10 * k10 + btilde11 * k11 + - btilde12 * k12 + - btilde13 * k13 + btilde14 * k14 + - btilde15 * k15 + - btilde16 * k16) - calculate_residuals!(atmp, utilde, uprev, u, integrator.opts.abstol, + @.. broadcast = false thread = thread utilde = dt * ( + btilde1 * k1 + btilde8 * k8 + + btilde9 * k9 + + btilde10 * k10 + btilde11 * k11 + + btilde12 * k12 + + btilde13 * k13 + btilde14 * k14 + + btilde15 * k15 + + btilde16 * k16 + ) + calculate_residuals!( + atmp, utilde, uprev, u, integrator.opts.abstol, integrator.opts.reltol, integrator.opts.internalnorm, t, - thread) + thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end alg = unwrap_alg(integrator, false) - if !cache.lazy && (integrator.opts.adaptive == false || - accept_step_controller(integrator, integrator.opts.controller)) + if !cache.lazy && ( + integrator.opts.adaptive == false || + accept_step_controller(integrator, integrator.opts.controller) + ) k = integrator.k (; tmp) = cache @OnDemandTableauExtract Vern9ExtraStages T T2 - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a1701 * k[1] + a1708 * k[2] + a1709 * k[3] + - a1710 * k[4] + - a1711 * k[5] + a1712 * k[6] + a1713 * k[7] + - a1714 * k[8] + - a1715 * k[9]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a1701 * k[1] + a1708 * k[2] + a1709 * k[3] + + a1710 * k[4] + + a1711 * k[5] + a1712 * k[6] + a1713 * k[7] + + a1714 * k[8] + + a1715 * k[9] + ) f(k[11], tmp, p, t + c17 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a1801 * k[1] + a1808 * k[2] + a1809 * k[3] + - a1810 * k[4] + - a1811 * k[5] + a1812 * k[6] + a1813 * k[7] + - a1814 * k[8] + - a1815 * k[9] + a1817 * k[11]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a1801 * k[1] + a1808 * k[2] + a1809 * k[3] + + a1810 * k[4] + + a1811 * k[5] + a1812 * k[6] + a1813 * k[7] + + a1814 * k[8] + + a1815 * k[9] + a1817 * k[11] + ) f(k[12], tmp, p, t + c18 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a1901 * k[1] + a1908 * k[2] + a1909 * k[3] + - a1910 * k[4] + - a1911 * k[5] + a1912 * k[6] + a1913 * k[7] + - a1914 * k[8] + - a1915 * k[9] + a1917 * k[11] + a1918 * k[12]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a1901 * k[1] + a1908 * k[2] + a1909 * k[3] + + a1910 * k[4] + + a1911 * k[5] + a1912 * k[6] + a1913 * k[7] + + a1914 * k[8] + + a1915 * k[9] + a1917 * k[11] + a1918 * k[12] + ) f(k[13], tmp, p, t + c19 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a2001 * k[1] + a2008 * k[2] + a2009 * k[3] + - a2010 * k[4] + - a2011 * k[5] + a2012 * k[6] + a2013 * k[7] + - a2014 * k[8] + - a2015 * k[9] + a2017 * k[11] + - a2018 * k[12] + - a2019 * k[13]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a2001 * k[1] + a2008 * k[2] + a2009 * k[3] + + a2010 * k[4] + + a2011 * k[5] + a2012 * k[6] + a2013 * k[7] + + a2014 * k[8] + + a2015 * k[9] + a2017 * k[11] + + a2018 * k[12] + + a2019 * k[13] + ) f(k[14], tmp, p, t + c20 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a2101 * k[1] + a2108 * k[2] + a2109 * k[3] + - a2110 * k[4] + - a2111 * k[5] + a2112 * k[6] + a2113 * k[7] + - a2114 * k[8] + - a2115 * k[9] + a2117 * k[11] + - a2118 * k[12] + - a2119 * k[13] + a2120 * k[14]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a2101 * k[1] + a2108 * k[2] + a2109 * k[3] + + a2110 * k[4] + + a2111 * k[5] + a2112 * k[6] + a2113 * k[7] + + a2114 * k[8] + + a2115 * k[9] + a2117 * k[11] + + a2118 * k[12] + + a2119 * k[13] + a2120 * k[14] + ) f(k[15], tmp, p, t + c21 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a2201 * k[1] + a2208 * k[2] + a2209 * k[3] + - a2210 * k[4] + - a2211 * k[5] + a2212 * k[6] + a2213 * k[7] + - a2214 * k[8] + - a2215 * k[9] + a2217 * k[11] + - a2218 * k[12] + - a2219 * k[13] + a2220 * k[14] + - a2221 * k[15]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a2201 * k[1] + a2208 * k[2] + a2209 * k[3] + + a2210 * k[4] + + a2211 * k[5] + a2212 * k[6] + a2213 * k[7] + + a2214 * k[8] + + a2215 * k[9] + a2217 * k[11] + + a2218 * k[12] + + a2219 * k[13] + a2220 * k[14] + + a2221 * k[15] + ) f(k[16], tmp, p, t + c22 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a2301 * k[1] + a2308 * k[2] + a2309 * k[3] + - a2310 * k[4] + - a2311 * k[5] + a2312 * k[6] + a2313 * k[7] + - a2314 * k[8] + - a2315 * k[9] + a2317 * k[11] + - a2318 * k[12] + - a2319 * k[13] + a2320 * k[14] + - a2321 * k[15]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a2301 * k[1] + a2308 * k[2] + a2309 * k[3] + + a2310 * k[4] + + a2311 * k[5] + a2312 * k[6] + a2313 * k[7] + + a2314 * k[8] + + a2315 * k[9] + a2317 * k[11] + + a2318 * k[12] + + a2319 * k[13] + a2320 * k[14] + + a2321 * k[15] + ) f(k[17], tmp, p, t + c23 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a2401 * k[1] + a2408 * k[2] + a2409 * k[3] + - a2410 * k[4] + - a2411 * k[5] + a2412 * k[6] + a2413 * k[7] + - a2414 * k[8] + - a2415 * k[9] + a2417 * k[11] + - a2418 * k[12] + - a2419 * k[13] + a2420 * k[14] + - a2421 * k[15]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a2401 * k[1] + a2408 * k[2] + a2409 * k[3] + + a2410 * k[4] + + a2411 * k[5] + a2412 * k[6] + a2413 * k[7] + + a2414 * k[8] + + a2415 * k[9] + a2417 * k[11] + + a2418 * k[12] + + a2419 * k[13] + a2420 * k[14] + + a2421 * k[15] + ) f(k[18], tmp, p, t + c24 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a2501 * k[1] + a2508 * k[2] + a2509 * k[3] + - a2510 * k[4] + - a2511 * k[5] + a2512 * k[6] + a2513 * k[7] + - a2514 * k[8] + - a2515 * k[9] + a2517 * k[11] + - a2518 * k[12] + - a2519 * k[13] + a2520 * k[14] + - a2521 * k[15]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a2501 * k[1] + a2508 * k[2] + a2509 * k[3] + + a2510 * k[4] + + a2511 * k[5] + a2512 * k[6] + a2513 * k[7] + + a2514 * k[8] + + a2515 * k[9] + a2517 * k[11] + + a2518 * k[12] + + a2519 * k[13] + a2520 * k[14] + + a2521 * k[15] + ) f(k[19], tmp, p, t + c25 * dt) - @.. broadcast=false thread=thread tmp=uprev + - dt * - (a2601 * k[1] + a2608 * k[2] + a2609 * k[3] + - a2610 * k[4] + - a2611 * k[5] + a2612 * k[6] + a2613 * k[7] + - a2614 * k[8] + - a2615 * k[9] + a2617 * k[11] + - a2618 * k[12] + - a2619 * k[13] + a2620 * k[14] + - a2621 * k[15]) + @.. broadcast = false thread = thread tmp = uprev + + dt * + ( + a2601 * k[1] + a2608 * k[2] + a2609 * k[3] + + a2610 * k[4] + + a2611 * k[5] + a2612 * k[6] + a2613 * k[7] + + a2614 * k[8] + + a2615 * k[9] + a2617 * k[11] + + a2618 * k[12] + + a2619 * k[13] + a2620 * k[14] + + a2621 * k[15] + ) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 10) f(k[20], tmp, p, t + c26 * dt) end @@ -1275,22 +1551,24 @@ function initialize!(integrator, cache::RKV76IIaConstantCache) # Avoid undefined entries if k is an array of arrays integrator.fsallast = zero(integrator.fsalfirst) integrator.k[1] = zero(integrator.fsalfirst) - @inbounds for i in 2:integrator.kshortsize-1 + @inbounds for i in 2:(integrator.kshortsize - 1) integrator.k[i] = zero(integrator.fsalfirst) end - integrator.k[integrator.kshortsize] = zero(integrator.fsallast) + return integrator.k[integrator.kshortsize] = zero(integrator.fsallast) end @muladd function perform_step!(integrator, cache::RKV76IIaConstantCache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator - (; c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, - a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, - a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, - a81, a82, a83, a84, a85, a86, a87, - a91, a92, a93, a94, a95, a96, a97, a98, - a101, a102, a103, a104, a105, a106, a107, a108, a109, - b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, - bh1, bh2, bh3, bh4, bh5, bh6, bh7, bh8, bh9, bh10) = cache.tab + (; + c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, + a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, + a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, + a81, a82, a83, a84, a85, a86, a87, + a91, a92, a93, a94, a95, a96, a97, a98, + a101, a102, a103, a104, a105, a106, a107, a108, a109, + b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, + bh1, bh2, bh3, bh4, bh5, bh6, bh7, bh8, bh9, bh10, + ) = cache.tab k1 = f(uprev, p, t) k2 = f(uprev + dt * a21 * k1, p, t + c2 * dt) @@ -1309,8 +1587,10 @@ end if integrator.opts.adaptive uhat = uprev + dt * (bh1 * k1 + bh2 * k2 + bh3 * k3 + bh4 * k4 + bh5 * k5 + bh6 * k6 + bh7 * k7 + bh8 * k8 + bh9 * k9 + bh10 * k10) - atmp = calculate_residuals(u .- uhat, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t) + atmp = calculate_residuals( + u .- uhat, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end @@ -1342,51 +1622,55 @@ function initialize!(integrator, cache::RKV76IIaCache) k[7] = cache.k7 k[8] = cache.k8 k[9] = cache.k9 - k[10] = cache.k10 + return k[10] = cache.k10 end @muladd function perform_step!(integrator, cache::RKV76IIaCache, repeat_step = false) (; t, dt, uprev, u, f, p) = integrator - (; c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, - a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, - a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, - a81, a82, a83, a84, a85, a86, a87, - a91, a92, a93, a94, a95, a96, a97, a98, - a101, a102, a103, a104, a105, a106, a107, a108, a109, - b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, - bh1, bh2, bh3, bh4, bh5, bh6, bh7, bh8, bh9, bh10) = cache.tab + (; + c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, + a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, + a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, + a81, a82, a83, a84, a85, a86, a87, + a91, a92, a93, a94, a95, a96, a97, a98, + a101, a102, a103, a104, a105, a106, a107, a108, a109, + b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, + bh1, bh2, bh3, bh4, bh5, bh6, bh7, bh8, bh9, bh10, + ) = cache.tab (; k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, utilde, tmp, atmp) = cache (; thread) = cache f(k1, uprev, p, t) - @.. broadcast=false thread=thread tmp = uprev + dt * a21 * k1 + @.. broadcast = false thread = thread tmp = uprev + dt * a21 * k1 f(k2, tmp, p, t + c2 * dt) - @.. broadcast=false thread=thread tmp = uprev + dt * (a31 * k1 + a32 * k2) + @.. broadcast = false thread = thread tmp = uprev + dt * (a31 * k1 + a32 * k2) f(k3, tmp, p, t + c3 * dt) - @.. broadcast=false thread=thread tmp = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) + @.. broadcast = false thread = thread tmp = uprev + dt * (a41 * k1 + a42 * k2 + a43 * k3) f(k4, tmp, p, t + c4 * dt) - @.. broadcast=false thread=thread tmp = uprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) + @.. broadcast = false thread = thread tmp = uprev + dt * (a51 * k1 + a52 * k2 + a53 * k3 + a54 * k4) f(k5, tmp, p, t + c5 * dt) - @.. broadcast=false thread=thread tmp = uprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5) + @.. broadcast = false thread = thread tmp = uprev + dt * (a61 * k1 + a62 * k2 + a63 * k3 + a64 * k4 + a65 * k5) f(k6, tmp, p, t + c6 * dt) - @.. broadcast=false thread=thread tmp = uprev + dt * (a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6) + @.. broadcast = false thread = thread tmp = uprev + dt * (a71 * k1 + a72 * k2 + a73 * k3 + a74 * k4 + a75 * k5 + a76 * k6) f(k7, tmp, p, t + c7 * dt) - @.. broadcast=false thread=thread tmp = uprev + dt * (a81 * k1 + a82 * k2 + a83 * k3 + a84 * k4 + a85 * k5 + a86 * k6 + a87 * k7) + @.. broadcast = false thread = thread tmp = uprev + dt * (a81 * k1 + a82 * k2 + a83 * k3 + a84 * k4 + a85 * k5 + a86 * k6 + a87 * k7) f(k8, tmp, p, t + c8 * dt) - @.. broadcast=false thread=thread tmp = uprev + dt * (a91 * k1 + a92 * k2 + a93 * k3 + a94 * k4 + a95 * k5 + a96 * k6 + a97 * k7 + a98 * k8) + @.. broadcast = false thread = thread tmp = uprev + dt * (a91 * k1 + a92 * k2 + a93 * k3 + a94 * k4 + a95 * k5 + a96 * k6 + a97 * k7 + a98 * k8) f(k9, tmp, p, t + c9 * dt) - @.. broadcast=false thread=thread tmp = uprev + dt * (a101 * k1 + a102 * k2 + a103 * k3 + a104 * k4 + a105 * k5 + a106 * k6 + a107 * k7 + a108 * k8 + a109 * k9) + @.. broadcast = false thread = thread tmp = uprev + dt * (a101 * k1 + a102 * k2 + a103 * k3 + a104 * k4 + a105 * k5 + a106 * k6 + a107 * k7 + a108 * k8 + a109 * k9) f(k10, tmp, p, t + c10 * dt) - @.. broadcast=false thread=thread u = uprev + dt * (b1 * k1 + b2 * k2 + b3 * k3 + b4 * k4 + b5 * k5 + b6 * k6 + b7 * k7 + b8 * k8 + b9 * k9 + b10 * k10) + @.. broadcast = false thread = thread u = uprev + dt * (b1 * k1 + b2 * k2 + b3 * k3 + b4 * k4 + b5 * k5 + b6 * k6 + b7 * k7 + b8 * k8 + b9 * k9 + b10 * k10) OrdinaryDiffEqCore.increment_nf!(integrator.stats, 10) if integrator.opts.adaptive - @.. broadcast=false thread=thread utilde = uprev + dt * (bh1 * k1 + bh2 * k2 + bh3 * k3 + bh4 * k4 + bh5 * k5 + bh6 * k6 + bh7 * k7 + bh8 * k8 + bh9 * k9 + bh10 * k10) - @.. broadcast=false thread=thread atmp = u - utilde - calculate_residuals!(atmp, atmp, uprev, u, integrator.opts.abstol, - integrator.opts.reltol, integrator.opts.internalnorm, t, thread) + @.. broadcast = false thread = thread utilde = uprev + dt * (bh1 * k1 + bh2 * k2 + bh3 * k3 + bh4 * k4 + bh5 * k5 + bh6 * k6 + bh7 * k7 + bh8 * k8 + bh9 * k9 + bh10 * k10) + @.. broadcast = false thread = thread atmp = u - utilde + calculate_residuals!( + atmp, atmp, uprev, u, integrator.opts.abstol, + integrator.opts.reltol, integrator.opts.internalnorm, t, thread + ) integrator.EEst = integrator.opts.internalnorm(atmp, t) end end diff --git a/lib/OrdinaryDiffEqVerner/src/verner_tableaus.jl b/lib/OrdinaryDiffEqVerner/src/verner_tableaus.jl index 84f7212787..921a6872c7 100644 --- a/lib/OrdinaryDiffEqVerner/src/verner_tableaus.jl +++ b/lib/OrdinaryDiffEqVerner/src/verner_tableaus.jl @@ -60,89 +60,137 @@ function Vern6ExtraStages(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) a1210 = convert(T, -3.231539970732086) a1211 = convert(T, -4.707539085458635) - Vern6ExtraStages(c10, a1001, a1004, a1005, a1006, a1007, a1008, a1009, c11, a1101, + return Vern6ExtraStages( + c10, a1001, a1004, a1005, a1006, a1007, a1008, a1009, c11, a1101, a1104, a1105, a1106, a1107, a1108, a1109, a1110, c12, a1201, a1204, - a1205, a1206, a1207, a1208, a1209, a1210, a1211) + a1205, a1206, a1207, a1208, a1209, a1210, a1211 + ) end function Vern6ExtraStages(T, T2) # Extra stages for Order 5 c10 = convert(T2, 1 // 2) - a1001 = convert(T, + a1001 = convert( + T, BigInt(35289331988986254405692535758830683) // - BigInt(2135620454874580332949729350544993288)) - a1004 = convert(T, + BigInt(2135620454874580332949729350544993288) + ) + a1004 = convert( + T, BigInt(313937014583068512255490687992212890625) // - BigInt(1028247080705354654473994781524199691557)) - a1005 = convert(T, + BigInt(1028247080705354654473994781524199691557) + ) + a1005 = convert( + T, BigInt(1309307687253621245836726130885318359375) // - BigInt(6321490412177191231557635904400612215708)) - a1006 = convert(T, + BigInt(6321490412177191231557635904400612215708) + ) + a1006 = convert( + T, -BigInt(35295844079877524186147726060781875) // - BigInt(27279088881521314684841470427640876)) - a1007 = convert(T, + BigInt(27279088881521314684841470427640876) + ) + a1007 = convert( + T, BigInt(794353492803973228770716697389421875) // - BigInt(13906777037439977359946774228636361)) - a1008 = convert(T, + BigInt(13906777037439977359946774228636361) + ) + a1008 = convert( + T, -BigInt(15228408956329265381787438679500067) // - BigInt(272520859345009876882656783678732)) + BigInt(272520859345009876882656783678732) + ) a1009 = convert(T, 28587810357600962662801 // 1151340224617184234295192) # Extra stages for Order 6 c11 = convert(T2, 207 // 250) - a1101 = convert(T, + a1101 = convert( + T, BigInt(2486392061981208591025761263164027224438868971) // - BigInt(65173964076983042387381877152862343994140625000)) - a1104 = convert(T, + BigInt(65173964076983042387381877152862343994140625000) + ) + a1104 = convert( + T, BigInt(2330654500023704838558579323179918419669) // - BigInt(9313832252765893609365894760182968220625)) - a1105 = convert(T, + BigInt(9313832252765893609365894760182968220625) + ) + a1105 = convert( + T, BigInt(5283259505481013273874688940942473187741) // - BigInt(16258977397575080328080339260289640472500)) - a1106 = convert(T, + BigInt(16258977397575080328080339260289640472500) + ) + a1106 = convert( + T, BigInt(9989685106081485386057729811605187743723) // - BigInt(5481427003263510055949691042076757812500)) - a1107 = convert(T, + BigInt(5481427003263510055949691042076757812500) + ) + a1107 = convert( + T, -BigInt(65815640423883764662985178413751186161) // - BigInt(971969007022721623945108012714453125)) - a1108 = convert(T, + BigInt(971969007022721623945108012714453125) + ) + a1108 = convert( + T, BigInt(183066350554023250298437927498791289370414247) // - BigInt(2772225538584491748887703284492309570312500)) - a1109 = convert(T, + BigInt(2772225538584491748887703284492309570312500) + ) + a1109 = convert( + T, -426178927623072052719640507155669 // - 11712038417736656029207275390625000) + 11712038417736656029207275390625000 + ) a1110 = convert(T, 3248339841 // 30517578125) c12 = convert(T2, 7 // 25) - a1201 = convert(T, + a1201 = convert( + T, BigInt(4676747786898097735038451956075910033997933945857) // - BigInt(41838231186922043164464169766109251031526972656250)) - a1204 = convert(T, + BigInt(41838231186922043164464169766109251031526972656250) + ) + a1204 = convert( + T, BigInt(1320032412954312695441306548681592444623240) // - BigInt(51248457773784347881352490499724836575577977)) - a1205 = convert(T, + BigInt(51248457773784347881352490499724836575577977) + ) + a1205 = convert( + T, BigInt(2087002134582726310861746540254017903014374710) // - BigInt(551367099344274428347227263044005314054687829)) - a1206 = convert(T, + BigInt(551367099344274428347227263044005314054687829) + ) + a1206 = convert( + T, BigInt(3432932836484348829479408524345545011748570706) // - BigInt(37176735450871998946806722732624135633015625)) - a1207 = convert(T, + BigInt(37176735450871998946806722732624135633015625) + ) + a1207 = convert( + T, -BigInt(2316434358511265475362584844804601519943610264) // - BigInt(606481922490173339581866127622363581143375)) - a1208 = convert(T, + BigInt(606481922490173339581866127622363581143375) + ) + a1208 = convert( + T, BigInt(82514605285282414051716141603447021470923168793) // - BigInt(22107104196177512751528507591142367597656250)) - a1209 = convert(T, + BigInt(22107104196177512751528507591142367597656250) + ) + a1209 = convert( + T, -BigInt(7560161019374651900153317984708038834) // - BigInt(7028170531590816328729091157353515625)) - a1210 = convert(T, + BigInt(7028170531590816328729091157353515625) + ) + a1210 = convert( + T, -BigInt(21655450552377696842870155771710589332) // - BigInt(6701278878958685336695179940732421875)) - a1211 = convert(T, + BigInt(6701278878958685336695179940732421875) + ) + a1211 = convert( + T, -3194830887993202085244614477336220 // - 678662636676110315314332975245759) + 678662636676110315314332975245759 + ) - Vern6ExtraStages(c10, a1001, a1004, a1005, a1006, a1007, a1008, a1009, c11, a1101, + return Vern6ExtraStages( + c10, a1001, a1004, a1005, a1006, a1007, a1008, a1009, c11, a1101, a1104, a1105, a1106, a1107, a1108, a1109, a1110, c12, a1201, a1204, - a1205, a1206, a1207, a1208, a1209, a1210, a1211) + a1205, a1206, a1207, a1208, a1209, a1210, a1211 + ) end """ @@ -256,12 +304,14 @@ function Vern6InterpolationCoefficients(T::Type{<:CompiledFloats}) r125 = convert(T, 190.48135937835858) r126 = convert(T, -63.493786459452856) - Vern6InterpolationCoefficients(r011, r012, r013, r014, r015, r016, r042, r043, r044, + return Vern6InterpolationCoefficients( + r011, r012, r013, r014, r015, r016, r042, r043, r044, r045, r046, r052, r053, r054, r055, r056, r062, r063, r064, r065, r066, r072, r073, r074, r075, r076, r082, r083, r084, r085, r086, r092, r093, r094, r095, r096, r102, r103, r104, r105, r106, r112, r113, r114, r115, - r116, r122, r123, r124, r125, r126) + r116, r122, r123, r124, r125, r126 + ) end function Vern6InterpolationCoefficients(T) @@ -317,12 +367,14 @@ function Vern6InterpolationCoefficients(T) r125 = convert(T, 488281250 // 2563407) r126 = convert(T, -488281250 // 7690221) - Vern6InterpolationCoefficients(r011, r012, r013, r014, r015, r016, r042, r043, r044, + return Vern6InterpolationCoefficients( + r011, r012, r013, r014, r015, r016, r042, r043, r044, r045, r046, r052, r053, r054, r055, r056, r062, r063, r064, r065, r066, r072, r073, r074, r075, r076, r082, r083, r084, r085, r086, r092, r093, r094, r095, r096, r102, r103, r104, r105, r106, r112, r113, r114, r115, - r116, r122, r123, r124, r125, r126) + r116, r122, r123, r124, r125, r126 + ) end """ @@ -429,10 +481,12 @@ function Vern6Tableau(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) extra = Vern6ExtraStages(T, T2) interp = Vern6InterpolationCoefficients(T) - Vern6Tableau(c1, c2, c3, c4, c5, c6, a21, a31, a32, a41, a43, a51, a53, a54, a61, a63, + return Vern6Tableau( + c1, c2, c3, c4, c5, c6, a21, a31, a32, a41, a43, a51, a53, a54, a61, a63, a64, a65, a71, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, a91, a94, a95, a96, a97, a98, btilde1, btilde4, btilde5, btilde6, btilde7, btilde8, - btilde9, extra, interp) + btilde9, extra, interp + ) end function Vern6Tableau(T, T2) @@ -454,29 +508,45 @@ function Vern6Tableau(T, T2) a63 = convert(T, 246134619571490020064824665 // 1543816496655405117602368) a64 = convert(T, -13880495956885686234074067279 // 113663489566254201783474344) a65 = convert(T, 755005057777788994734129 // 136485922925633667082436) - a71 = convert(T, + a71 = convert( + T, -BigInt(1663299841566102097180506666498880934230261) // - BigInt(30558424506156170307020957791311384232000)) - a73 = convert(T, - 130838124195285491799043628811093033 // 631862949514135618861563657970240) - a74 = convert(T, + BigInt(30558424506156170307020957791311384232000) + ) + a73 = convert( + T, + 130838124195285491799043628811093033 // 631862949514135618861563657970240 + ) + a74 = convert( + T, -BigInt(3287100453856023634160618787153901962873) // - BigInt(20724314915376755629135711026851409200)) - a75 = convert(T, - 2771826790140332140865242520369241 // 396438716042723436917079980147600) + BigInt(20724314915376755629135711026851409200) + ) + a75 = convert( + T, + 2771826790140332140865242520369241 // 396438716042723436917079980147600 + ) a76 = convert(T, -1799166916139193 // 96743806114007800) - a81 = convert(T, + a81 = convert( + T, -BigInt(832144750039369683895428386437986853923637763) // - BigInt(15222974550069600748763651844667619945204887)) - a83 = convert(T, + BigInt(15222974550069600748763651844667619945204887) + ) + a83 = convert( + T, 818622075710363565982285196611368750 // - 3936576237903728151856072395343129) - a84 = convert(T, + 3936576237903728151856072395343129 + ) + a84 = convert( + T, -BigInt(9818985165491658464841194581385463434793741875) // - BigInt(61642597962658994069869370923196463581866011)) - a85 = convert(T, + BigInt(61642597962658994069869370923196463581866011) + ) + a85 = convert( + T, BigInt(31796692141848558720425711042548134769375) // - BigInt(4530254033500045975557858016006308628092)) + BigInt(4530254033500045975557858016006308628092) + ) a86 = convert(T, -14064542118843830075 // 766928748264306853644) a87 = convert(T, -1424670304836288125 // 2782839104764768088217) a91 = convert(T, 382735282417 // 11129397249634) @@ -503,10 +573,12 @@ function Vern6Tableau(T, T2) extra = Vern6ExtraStages(T, T2) interp = Vern6InterpolationCoefficients(T) - Vern6Tableau(c1, c2, c3, c4, c5, c6, a21, a31, a32, a41, a43, a51, a53, a54, a61, a63, + return Vern6Tableau( + c1, c2, c3, c4, c5, c6, a21, a31, a32, a41, a43, a51, a53, a54, a61, a63, a64, a65, a71, a73, a74, a75, a76, a81, a83, a84, a85, a86, a87, a91, a94, a95, a96, a97, a98, btilde1, btilde4, btilde5, btilde6, btilde7, btilde8, - btilde9, extra, interp) + btilde9, extra, interp + ) end ## Vern7 @@ -573,9 +645,13 @@ struct Vern7ExtraStages{T, T2} a1613::T end -@fold function Vern7ExtraStages(::Type{T}, - ::Type{T2}) where {T <: CompiledFloats, - T2 <: CompiledFloats} +@fold function Vern7ExtraStages( + ::Type{T}, + ::Type{T2} + ) where { + T <: CompiledFloats, + T2 <: CompiledFloats, + } c11 = convert(T2, 1) a1101 = convert(T, 0.04715561848627222) a1104 = convert(T, 0.25750564298434153) @@ -637,12 +713,14 @@ end a1612 = convert(T, -0.17325495908361865) a1613 = convert(T, -0.18228156777622026) - Vern7ExtraStages(c11, a1101, a1104, a1105, a1106, a1107, a1108, a1109, c12, a1201, + Vern7ExtraStages( + c11, a1101, a1104, a1105, a1106, a1107, a1108, a1109, c12, a1201, a1204, a1205, a1206, a1207, a1208, a1209, a1211, c13, a1301, a1304, a1305, a1306, a1307, a1308, a1309, a1311, a1312, c14, a1401, a1404, a1405, a1406, a1407, a1408, a1409, a1411, a1412, a1413, c15, a1501, a1504, a1505, a1506, a1507, a1508, a1509, a1511, a1512, a1513, c16, - a1601, a1604, a1605, a1606, a1607, a1608, a1609, a1611, a1612, a1613) + a1601, a1604, a1605, a1606, a1607, a1608, a1609, a1611, a1612, a1613 + ) end @fold function Vern7ExtraStages(::Type{T}, ::Type{T2}) where {T, T2} @@ -707,12 +785,14 @@ end a1612 = convert(T, big"-.1732549590836186403386348310205265959935") a1613 = convert(T, big"-.1822815677762202619429607513861847306420") - Vern7ExtraStages(c11, a1101, a1104, a1105, a1106, a1107, a1108, a1109, c12, a1201, + Vern7ExtraStages( + c11, a1101, a1104, a1105, a1106, a1107, a1108, a1109, c12, a1201, a1204, a1205, a1206, a1207, a1208, a1209, a1211, c13, a1301, a1304, a1305, a1306, a1307, a1308, a1309, a1311, a1312, c14, a1401, a1404, a1405, a1406, a1407, a1408, a1409, a1411, a1412, a1413, c15, a1501, a1504, a1505, a1506, a1507, a1508, a1509, a1511, a1512, a1513, c16, - a1601, a1604, a1605, a1606, a1607, a1608, a1609, a1611, a1612, a1613) + a1601, a1604, a1605, a1606, a1607, a1608, a1609, a1611, a1612, a1613 + ) end struct Vern7InterpolationCoefficients{T} @@ -878,7 +958,8 @@ end r166 = convert(T, -606.3044574733512) r167 = convert(T, 188.0495196316683) - Vern7InterpolationCoefficients(r011, r012, r013, r014, r015, r016, r017, r042, r043, + Vern7InterpolationCoefficients( + r011, r012, r013, r014, r015, r016, r017, r042, r043, r044, r045, r046, r047, r052, r053, r054, r055, r056, r057, r062, r063, r064, r065, r066, r067, r072, r073, r074, r075, r076, r077, r082, r083, r084, r085, r086, @@ -886,7 +967,8 @@ end r114, r115, r116, r117, r122, r123, r124, r125, r126, r127, r132, r133, r134, r135, r136, r137, r142, r143, r144, r145, r146, r147, r152, r153, r154, r155, r156, - r157, r162, r163, r164, r165, r166, r167) + r157, r162, r163, r164, r165, r166, r167 + ) end @fold function Vern7InterpolationCoefficients(::Type{T}) where {T} @@ -970,7 +1052,8 @@ end r166 = convert(T, big"-606.3044574733512377981129469949015057785") r167 = convert(T, big" 188.0495196316683024640077644607192667895") - Vern7InterpolationCoefficients(r011, r012, r013, r014, r015, r016, r017, r042, r043, + Vern7InterpolationCoefficients( + r011, r012, r013, r014, r015, r016, r017, r042, r043, r044, r045, r046, r047, r052, r053, r054, r055, r056, r057, r062, r063, r064, r065, r066, r067, r072, r073, r074, r075, r076, r077, r082, r083, r084, r085, r086, @@ -978,7 +1061,8 @@ end r114, r115, r116, r117, r122, r123, r124, r125, r126, r127, r132, r133, r134, r135, r136, r137, r142, r143, r144, r145, r146, r147, r152, r153, r154, r155, r156, - r157, r162, r163, r164, r165, r166, r167) + r157, r162, r163, r164, r165, r166, r167 + ) end struct Vern7Tableau{T, T2} @@ -1042,8 +1126,10 @@ struct Vern7Tableau{T, T2} btilde10::T end -@fold function Vern7Tableau(::Type{T}, - ::Type{T2}) where {T <: CompiledFloats, T2 <: CompiledFloats} +@fold function Vern7Tableau( + ::Type{T}, + ::Type{T2} + ) where {T <: CompiledFloats, T2 <: CompiledFloats} c2 = convert(T2, 0.005) c3 = convert(T2, 0.10888888888888888) c4 = convert(T2, 0.16333333333333333) @@ -1114,7 +1200,8 @@ end a061, a063, a064, a065, a071, a073, a074, a075, a076, a081, a083, a084, a085, a086, a087, a091, a093, a094, a095, a096, a097, a098, a101, a103, a104, a105, a106, a107, b1, b4, b5, b6, b7, b8, b9, btilde1, btilde4, - btilde5, btilde6, btilde7, btilde8, btilde9, btilde10) + btilde5, btilde6, btilde7, btilde8, btilde9, btilde10 + ) end @fold function Vern7Tableau(::Type{T}, ::Type{T2}) where {T, T2} @@ -1133,79 +1220,121 @@ end a051 = convert(T, 2454451729 // 3841600000) a053 = convert(T, -9433712007 // 3841600000) a054 = convert(T, 4364554539 // 1920800000) - a061 = convert(T, + a061 = convert( + T, -BigInt(6187101755456742839167388910402379177523537620) // - BigInt(2324599620333464857202963610201679332423082271)) - a063 = convert(T, + BigInt(2324599620333464857202963610201679332423082271) + ) + a063 = convert( + T, BigInt(27569888999279458303270493567994248533230000) // - BigInt(2551701010245296220859455115479340650299761)) - a064 = convert(T, + BigInt(2551701010245296220859455115479340650299761) + ) + a064 = convert( + T, -BigInt(37368161901278864592027018689858091583238040000) // - BigInt(4473131870960004275166624817435284159975481033)) - a065 = convert(T, + BigInt(4473131870960004275166624817435284159975481033) + ) + a065 = convert( + T, BigInt(1392547243220807196190880383038194667840000000) // - BigInt(1697219131380493083996999253929006193143549863)) + BigInt(1697219131380493083996999253929006193143549863) + ) a071 = convert(T, 11272026205260557297236918526339 // 1857697188743815510261537500000) a073 = convert(T, -48265918242888069 // 1953194276993750) a074 = convert(T, 26726983360888651136155661781228 // 1308381343805114800955157615625) a075 = convert(T, -2090453318815827627666994432 // 1096684189897834170412307919) - a076 = convert(T, + a076 = convert( + T, BigInt(1148577938985388929671582486744843844943428041509) // - BigInt(1141532118233823914568777901158338927629837500000)) - a081 = convert(T, + BigInt(1141532118233823914568777901158338927629837500000) + ) + a081 = convert( + T, BigInt(1304457204588839386329181466225966641) // - BigInt(108211771565488329642169667802016000)) + BigInt(108211771565488329642169667802016000) + ) a083 = convert(T, -1990261989751005 // 40001418792832) - a084 = convert(T, + a084 = convert( + T, BigInt(2392691599894847687194643439066780106875) // - BigInt(58155654089143548047476915856270826016)) - a085 = convert(T, + BigInt(58155654089143548047476915856270826016) + ) + a085 = convert( + T, -BigInt(1870932273351008733802814881998561250) // - BigInt(419326053051486744762255151208232123)) - a086 = convert(T, + BigInt(419326053051486744762255151208232123) + ) + a086 = convert( + T, BigInt(1043329047173803328972823866240311074041739158858792987034783181) // - BigInt(510851127745017966999893975119259285040213723744255237522144000)) + BigInt(510851127745017966999893975119259285040213723744255237522144000) + ) a087 = convert(T, -311918858557595100410788125 // 3171569057622789618800376448) - a091 = convert(T, + a091 = convert( + T, BigInt(17579784273699839132265404100877911157) // - BigInt(1734023495717116205617154737841023480)) + BigInt(1734023495717116205617154737841023480) + ) a093 = convert(T, -18539365951217471064750 // 434776548575709731377) - a094 = convert(T, + a094 = convert( + T, BigInt(447448655912568142291911830292656995992000) // - BigInt(12511202807447096607487664209063950964109)) - a095 = convert(T, + BigInt(12511202807447096607487664209063950964109) + ) + a095 = convert( + T, -BigInt(65907597316483030274308429593905808000000) // - BigInt(15158061430635748897861852383197382130691)) - a096 = convert(T, + BigInt(15158061430635748897861852383197382130691) + ) + a096 = convert( + T, BigInt(273847823027445129865693702689010278588244606493753883568739168819449761) // - BigInt(136252034448398939768371761610231099586032870552034688235302796640584360)) - a097 = convert(T, + BigInt(136252034448398939768371761610231099586032870552034688235302796640584360) + ) + a097 = convert( + T, BigInt(694664732797172504668206847646718750) // - BigInt(1991875650119463976442052358853258111)) - a098 = convert(T, + BigInt(1991875650119463976442052358853258111) + ) + a098 = convert( + T, -19705319055289176355560129234220800 // - 72595753317320295604316217197876507) - a101 = convert(T, - -511858190895337044664743508805671 // 11367030248263048398341724647960) + 72595753317320295604316217197876507 + ) + a101 = convert( + T, + -511858190895337044664743508805671 // 11367030248263048398341724647960 + ) a103 = convert(T, 2822037469238841750 // 15064746656776439) - a104 = convert(T, + a104 = convert( + T, -BigInt(23523744880286194122061074624512868000) // - BigInt(152723005449262599342117017051789699)) - a105 = convert(T, + BigInt(152723005449262599342117017051789699) + ) + a105 = convert( + T, BigInt(10685036369693854448650967542704000000) // - BigInt(575558095977344459903303055137999707)) - a106 = convert(T, + BigInt(575558095977344459903303055137999707) + ) + a106 = convert( + T, -BigInt(6259648732772142303029374363607629515525848829303541906422993) // - BigInt(876479353814142962817551241844706205620792843316435566420120)) - a107 = convert(T, + BigInt(876479353814142962817551241844706205620792843316435566420120) + ) + a107 = convert( + T, 17380896627486168667542032602031250 // - 13279937889697320236613879977356033) + 13279937889697320236613879977356033 + ) b1 = convert(T, 96762636172307789 // 2051985304794103980) b4 = convert(T, 312188947591288252500000 // 1212357694274963646019729) b5 = convert(T, 13550580884964304000000000000 // 51686919683339547115937980629) - b6 = convert(T, + b6 = convert( + T, BigInt(72367769693133178898676076432831566019684378142853445230956642801) // - BigInt(475600216991873963561768100160364792981629064220601844848928537580)) + BigInt(475600216991873963561768100160364792981629064220601844848928537580) + ) b7 = convert(T, 1619421054120605468750 // 3278200730370057108183) b8 = convert(T, -66898316144057728000 // 227310933007074849597) b9 = convert(T, 181081444637946577 // 2226845467039736466) @@ -1218,9 +1347,11 @@ end btilde1 = convert(T, 522643094875451 // 205198530479410398) btilde4 = convert(T, -550343178903849903000000 // 56980811630923291362927263) btilde5 = convert(T, 197654115880170560000000000 // 4698810880303595192357998239) - btilde6 = convert(T, + btilde6 = convert( + T, BigInt(-3171408959554499061315206389277085667739969057641653677018211151) // - BigInt(47560021699187396356176810016036479298162906422060184484892853758)) + BigInt(47560021699187396356176810016036479298162906422060184484892853758) + ) btilde7 = convert(T, 40831491787144609375000 // 154075434327392684084601) btilde8 = convert(T, -66898316144057728000 // 227310933007074849597) btilde9 = convert(T, 181081444637946577 // 2226845467039736466) @@ -1231,7 +1362,8 @@ end a061, a063, a064, a065, a071, a073, a074, a075, a076, a081, a083, a084, a085, a086, a087, a091, a093, a094, a095, a096, a097, a098, a101, a103, a104, a105, a106, a107, b1, b4, b5, b6, b7, b8, b9, btilde1, btilde4, - btilde5, btilde6, btilde7, btilde8, btilde9, btilde10) + btilde5, btilde6, btilde7, btilde8, btilde9, btilde10 + ) end ## Vern8 @@ -1428,7 +1560,8 @@ function Vern8ExtraStages(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) a2116 = convert(T, -0.18594111329221055) a2117 = convert(T, 0.17736142719246029) - Vern8ExtraStages(c14, a1401, a1406, a1407, a1408, a1409, a1410, a1411, a1412, c15, + return Vern8ExtraStages( + c14, a1401, a1406, a1407, a1408, a1409, a1410, a1411, a1412, c15, a1501, a1506, a1507, a1508, a1509, a1510, a1511, a1512, a1514, c16, a1601, a1606, a1607, a1608, a1609, a1610, a1611, a1612, a1614, a1615, c17, a1701, a1706, a1707, a1708, a1709, a1710, a1711, a1712, a1714, @@ -1437,7 +1570,8 @@ function Vern8ExtraStages(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) a1909, a1910, a1911, a1912, a1914, a1915, a1916, a1917, c20, a2001, a2006, a2007, a2008, a2009, a2010, a2011, a2012, a2014, a2015, a2016, a2017, c21, a2101, a2106, a2107, a2108, a2109, a2110, a2111, a2112, - a2114, a2115, a2116, a2117) + a2114, a2115, a2116, a2117 + ) end function Vern8ExtraStages(T, T2) @@ -1536,7 +1670,8 @@ function Vern8ExtraStages(T, T2) a2116 = convert(T, big"-.1859411132922105570515379368592596513699") a2117 = convert(T, big" .1773614271924602745226064729836361000042") - Vern8ExtraStages(c14, a1401, a1406, a1407, a1408, a1409, a1410, a1411, a1412, c15, + return Vern8ExtraStages( + c14, a1401, a1406, a1407, a1408, a1409, a1410, a1411, a1412, c15, a1501, a1506, a1507, a1508, a1509, a1510, a1511, a1512, a1514, c16, a1601, a1606, a1607, a1608, a1609, a1610, a1611, a1612, a1614, a1615, c17, a1701, a1706, a1707, a1708, a1709, a1710, a1711, a1712, a1714, @@ -1545,7 +1680,8 @@ function Vern8ExtraStages(T, T2) a1909, a1910, a1911, a1912, a1914, a1915, a1916, a1917, c20, a2001, a2006, a2007, a2008, a2009, a2010, a2011, a2012, a2014, a2015, a2016, a2017, c21, a2101, a2106, a2107, a2108, a2109, a2110, a2111, a2112, - a2114, a2115, a2116, a2117) + a2114, a2115, a2116, a2117 + ) end struct Vern8InterpolationCoefficients{T} @@ -1779,7 +1915,8 @@ function Vern8InterpolationCoefficients(T::Type{<:CompiledFloats}) r217 = convert(T, 3408.7066890374217) r218 = convert(T, -833.4379054819676) - Vern8InterpolationCoefficients(r011, r012, r013, r014, r015, r016, r017, r018, r062, + return Vern8InterpolationCoefficients( + r011, r012, r013, r014, r015, r016, r017, r018, r062, r063, r064, r065, r066, r067, r068, r072, r073, r074, r075, r076, r077, r078, r082, r083, r084, r085, r086, r087, r088, r092, r093, r094, r095, r096, r097, r098, @@ -1791,7 +1928,8 @@ function Vern8InterpolationCoefficients(T::Type{<:CompiledFloats}) r175, r176, r177, r178, r182, r183, r184, r185, r186, r187, r188, r192, r193, r194, r195, r196, r197, r198, r202, r203, r204, r205, r206, r207, r208, r212, r213, - r214, r215, r216, r217, r218) + r214, r215, r216, r217, r218 + ) end function Vern8InterpolationCoefficients(T) @@ -1909,7 +2047,8 @@ function Vern8InterpolationCoefficients(T) r217 = convert(T, big" 3408.706689037421803199133730396931709513") r218 = convert(T, big"-833.4379054819676018284720384103746063216") - Vern8InterpolationCoefficients(r011, r012, r013, r014, r015, r016, r017, r018, r062, + return Vern8InterpolationCoefficients( + r011, r012, r013, r014, r015, r016, r017, r018, r062, r063, r064, r065, r066, r067, r068, r072, r073, r074, r075, r076, r077, r078, r082, r083, r084, r085, r086, r087, r088, r092, r093, r094, r095, r096, r097, r098, @@ -1921,7 +2060,8 @@ function Vern8InterpolationCoefficients(T) r175, r176, r177, r178, r182, r183, r184, r185, r186, r187, r188, r192, r193, r194, r195, r196, r197, r198, r202, r203, r204, r205, r206, r207, r208, r212, r213, - r214, r215, r216, r217, r218) + r214, r215, r216, r217, r218 + ) end struct Vern8Tableau{T, T2} @@ -2113,7 +2253,8 @@ function Vern8Tableau(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) extra = Vern8ExtraStages(T, T2) interp = Vern8InterpolationCoefficients(T) - Vern8Tableau(c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, a0201, a0301, a0302, a0401, + return Vern8Tableau( + c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, a0201, a0301, a0302, a0401, a0403, a0501, a0503, a0504, a0601, a0604, a0605, a0701, a0704, a0705, a0706, a0801, a0804, a0805, a0806, a0807, a0901, a0904, a0905, a0906, a0907, a0908, a1001, a1004, a1005, a1006, a1007, a1008, a1009, a1101, @@ -2121,7 +2262,8 @@ function Vern8Tableau(T::Type{<:CompiledFloats}, T2::Type{<:CompiledFloats}) a1206, a1207, a1208, a1209, a1210, a1211, a1301, a1304, a1305, a1306, a1307, a1308, a1309, a1310, b1, b6, b7, b8, b9, b10, b11, b12, btilde1, btilde6, btilde7, btilde8, btilde9, btilde10, btilde11, btilde12, btilde13, - extra, interp) + extra, interp + ) end function Vern8Tableau(T, T2) @@ -2157,119 +2299,189 @@ function Vern8Tableau(T, T2) a0805 = convert(T, -1024030607959889 // 168929280000000) a0806 = convert(T, 1501408353528689 // 265697280000000) a0807 = convert(T, 6070139212132283 // 92502016000000) - a0901 = convert(T, + a0901 = convert( + T, -BigInt(1472514264486215803881384708877264246346044433307094207829051978044531801133057155) // - BigInt(1246894801620032001157059621643986024803301558393487900440453636168046069686436608)) - a0904 = convert(T, + BigInt(1246894801620032001157059621643986024803301558393487900440453636168046069686436608) + ) + a0904 = convert( + T, -BigInt(5172294311085668458375175655246981230039025336933699114138315270772319372469280000) // - BigInt(124619381004809145897278630571215298365257079410236252921850936749076487132995191)) - a0905 = convert(T, + BigInt(124619381004809145897278630571215298365257079410236252921850936749076487132995191) + ) + a0905 = convert( + T, -BigInt(12070679258469254807978936441733187949484571516120469966534514296406891652614970375) // - BigInt(2722031154761657221710478184531100699497284085048389015085076961673446140398628096)) - a0906 = convert(T, + BigInt(2722031154761657221710478184531100699497284085048389015085076961673446140398628096) + ) + a0906 = convert( + T, BigInt(780125155843893641323090552530431036567795592568497182701460674803126770111481625) // - BigInt(183110425412731972197889874507158786859226102980861859505241443073629143100805376)) - a0907 = convert(T, + BigInt(183110425412731972197889874507158786859226102980861859505241443073629143100805376) + ) + a0907 = convert( + T, BigInt(664113122959911642134782135839106469928140328160577035357155340392950009492511875) // - BigInt(15178465598586248136333023107295349175279765150089078301139943253016877823170816)) - a0908 = convert(T, + BigInt(15178465598586248136333023107295349175279765150089078301139943253016877823170816) + ) + a0908 = convert( + T, BigInt(10332848184452015604056836767286656859124007796970668046446015775000000) // - BigInt(1312703550036033648073834248740727914537972028638950165249582733679393783)) - a1001 = convert(T, + BigInt(1312703550036033648073834248740727914537972028638950165249582733679393783) + ) + a1001 = convert( + T, -BigInt(29055573360337415088538618442231036441314060511) // - BigInt(22674759891089577691327962602370597632000000000)) + BigInt(22674759891089577691327962602370597632000000000) + ) a1004 = convert(T, -20462749524591049105403365239069 // 454251913499893469596231268750) - a1005 = convert(T, + a1005 = convert( + T, -180269259803172281163724663224981097 // - 38100922558256871086579832832000000) - a1006 = convert(T, + 38100922558256871086579832832000000 + ) + a1006 = convert( + T, BigInt(21127670214172802870128286992003940810655221489) // - BigInt(4679473877997892906145822697976708633673728000)) - a1007 = convert(T, + BigInt(4679473877997892906145822697976708633673728000) + ) + a1007 = convert( + T, BigInt(318607235173649312405151265849660869927653414425413) // - BigInt(6714716715558965303132938072935465423910912000000)) - a1008 = convert(T, + BigInt(6714716715558965303132938072935465423910912000000) + ) + a1008 = convert( + T, 212083202434519082281842245535894 // - 20022426044775672563822865371173879) - a1009 = convert(T, + 20022426044775672563822865371173879 + ) + a1009 = convert( + T, -BigInt(2698404929400842518721166485087129798562269848229517793703413951226714583) // - BigInt(469545674913934315077000442080871141884676035902717550325616728175875000000)) - a1101 = convert(T, + BigInt(469545674913934315077000442080871141884676035902717550325616728175875000000) + ) + a1101 = convert( + T, -BigInt(2342659845814086836951207140065609179073838476242943917) // - BigInt(1358480961351056777022231400139158760857532162795520000)) + BigInt(1358480961351056777022231400139158760857532162795520000) + ) a1104 = convert(T, -996286030132538159613930889652 // 16353068885996164905464325675) a1105 = convert(T, -26053085959256534152588089363841 // 4377552804565683061011299942400) - a1106 = convert(T, + a1106 = convert( + T, BigInt(20980822345096760292224086794978105312644533925634933539) // - BigInt(3775889992007550803878727839115494641972212962174156800)) - a1107 = convert(T, + BigInt(3775889992007550803878727839115494641972212962174156800) + ) + a1107 = convert( + T, BigInt(890722993756379186418929622095833835264322635782294899) // - BigInt(13921242001395112657501941955594013822830119803764736)) - a1108 = convert(T, + BigInt(13921242001395112657501941955594013822830119803764736) + ) + a1108 = convert( + T, BigInt(161021426143124178389075121929246710833125) // - BigInt(10997207722131034650667041364346422894371443)) - a1109 = convert(T, + BigInt(10997207722131034650667041364346422894371443) + ) + a1109 = convert( + T, BigInt(300760669768102517834232497565452434946672266195876496371874262392684852243925359864884962513) // - BigInt(4655443337501346455585065336604505603760824779615521285751892810315680492364106674524398280000)) + BigInt(4655443337501346455585065336604505603760824779615521285751892810315680492364106674524398280000) + ) a1110 = convert(T, -31155237437111730665923206875 // 392862141594230515010338956291) - a1201 = convert(T, + a1201 = convert( + T, -BigInt(2866556991825663971778295329101033887534912787724034363) // - BigInt(868226711619262703011213925016143612030669233795338240)) - a1204 = convert(T, + BigInt(868226711619262703011213925016143612030669233795338240) + ) + a1204 = convert( + T, -BigInt(16957088714171468676387054358954754000) // - BigInt(143690415119654683326368228101570221)) - a1205 = convert(T, + BigInt(143690415119654683326368228101570221) + ) + a1205 = convert( + T, -BigInt(4583493974484572912949314673356033540575) // - BigInt(451957703655250747157313034270335135744)) - a1206 = convert(T, + BigInt(451957703655250747157313034270335135744) + ) + a1206 = convert( + T, BigInt(2346305388553404258656258473446184419154740172519949575) // - BigInt(256726716407895402892744978301151486254183185289662464)) - a1207 = convert(T, + BigInt(256726716407895402892744978301151486254183185289662464) + ) + a1207 = convert( + T, BigInt(1657121559319846802171283690913610698586256573484808662625) // - BigInt(13431480411255146477259155104956093505361644432088109056)) - a1208 = convert(T, + BigInt(13431480411255146477259155104956093505361644432088109056) + ) + a1208 = convert( + T, BigInt(345685379554677052215495825476969226377187500) // - BigInt(74771167436930077221667203179551347546362089)) - a1209 = convert(T, + BigInt(74771167436930077221667203179551347546362089) + ) + a1209 = convert( + T, -BigInt(3205890962717072542791434312152727534008102774023210240571361570757249056167015230160352087048674542196011) // - BigInt(947569549683965814783015124451273604984657747127257615372449205973192657306017239103491074738324033259120)) - a1210 = convert(T, + BigInt(947569549683965814783015124451273604984657747127257615372449205973192657306017239103491074738324033259120) + ) + a1210 = convert( + T, BigInt(40279545832706233433100438588458933210937500) // - BigInt(8896460842799482846916972126377338947215101)) - a1211 = convert(T, + BigInt(8896460842799482846916972126377338947215101) + ) + a1211 = convert( + T, -BigInt(6122933601070769591613093993993358877250) // - BigInt(1050517001510235513198246721302027675953)) - a1301 = convert(T, + BigInt(1050517001510235513198246721302027675953) + ) + a1301 = convert( + T, -BigInt(618675905535482500672800859344538410358660153899637) // - BigInt(203544282118214047100119475340667684874292102389760)) - a1304 = convert(T, + BigInt(203544282118214047100119475340667684874292102389760) + ) + a1304 = convert( + T, -BigInt(4411194916804718600478400319122931000) // - BigInt(40373053902469967450761491269633019)) - a1305 = convert(T, + BigInt(40373053902469967450761491269633019) + ) + a1305 = convert( + T, -BigInt(16734711409449292534539422531728520225) // - BigInt(1801243715290088669307203927210237952)) - a1306 = convert(T, + BigInt(1801243715290088669307203927210237952) + ) + a1306 = convert( + T, BigInt(135137519757054679098042184152749677761254751865630525) // - BigInt(16029587794486289597771326361911895112703716593983488)) - a1307 = convert(T, + BigInt(16029587794486289597771326361911895112703716593983488) + ) + a1307 = convert( + T, BigInt(38937568367409876012548551903492196137929710431584875) // - BigInt(340956454090191606099548798001469306974758443147264)) - a1308 = convert(T, + BigInt(340956454090191606099548798001469306974758443147264) + ) + a1308 = convert( + T, -BigInt(6748865855011993037732355335815350667265625) // - BigInt(7002880395717424621213565406715087764770357)) - a1309 = convert(T, + BigInt(7002880395717424621213565406715087764770357) + ) + a1309 = convert( + T, -BigInt(1756005520307450928195422767042525091954178296002788308926563193523662404739779789732685671) // - BigInt(348767814578469983605688098046186480904607278021030540735333862087061574934154942830062320)) - a1310 = convert(T, + BigInt(348767814578469983605688098046186480904607278021030540735333862087061574934154942830062320) + ) + a1310 = convert( + T, BigInt(53381024589235611084013897674181629296875) // - BigInt(8959357584795694524874969598508592944141)) + BigInt(8959357584795694524874969598508592944141) + ) b1 = convert(T, 44901867737754616851973 // 1014046409980231013380680) b6 = convert(T, 791638675191615279648100000 // 2235604725089973126411512319) b7 = convert(T, 3847749490868980348119500000 // 15517045062138271618141237517) b8 = convert(T, -13734512432397741476562500000 // 875132892924995907746928783) - b9 = convert(T, + b9 = convert( + T, BigInt(12274765470313196878428812037740635050319234276006986398294443554969616342274215316330684448207141) // - BigInt(489345147493715517650385834143510934888829280686609654482896526796523353052166757299452852166040)) + BigInt(489345147493715517650385834143510934888829280686609654482896526796523353052166757299452852166040) + ) b10 = convert(T, -9798363684577739445312500000 // 308722986341456031822630699) b11 = convert(T, 282035543183190840068750 // 12295407629873040425991) b12 = convert(T, -306814272936976936753 // 1299331183183744997286) @@ -2284,9 +2496,11 @@ function Vern8Tableau(T, T2) btilde6 = convert(T, -1128142172732763360275000 // 2235604725089973126411512319) btilde7 = convert(T, 5640710863663816801375000 // 46551135186414814854423712551) btilde8 = convert(T, -17627221448949427504296875000 // 875132892924995907746928783) - btilde9 = convert(T, + btilde9 = convert( + T, BigInt(17426957952517932078050241885889670195876481434157580946550703126433816616672116622859678756257765) // - BigInt(3327547002957265520022623672175874357244039108668945650483696382216358800754733949636279394729072)) + BigInt(3327547002957265520022623672175874357244039108668945650483696382216358800754733949636279394729072) + ) btilde10 = convert(T, -17627221448949427504296875000 // 2161060904390192222758414893) btilde11 = convert(T, 282035543183190840068750 // 12295407629873040425991) btilde12 = convert(T, -306814272936976936753 // 1299331183183744997286) @@ -2295,7 +2509,8 @@ function Vern8Tableau(T, T2) extra = Vern8ExtraStages(T, T2) interp = Vern8InterpolationCoefficients(T) - Vern8Tableau(c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, a0201, a0301, a0302, a0401, + return Vern8Tableau( + c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, a0201, a0301, a0302, a0401, a0403, a0501, a0503, a0504, a0601, a0604, a0605, a0701, a0704, a0705, a0706, a0801, a0804, a0805, a0806, a0807, a0901, a0904, a0905, a0906, a0907, a0908, a1001, a1004, a1005, a1006, a1007, a1008, a1009, a1101, @@ -2303,7 +2518,8 @@ function Vern8Tableau(T, T2) a1206, a1207, a1208, a1209, a1210, a1211, a1301, a1304, a1305, a1306, a1307, a1308, a1309, a1310, b1, b6, b7, b8, b9, b10, b11, b12, btilde1, btilde6, btilde7, btilde8, btilde9, btilde10, btilde11, btilde12, btilde13, - extra, interp) + extra, interp + ) end ## Vern9 @@ -2445,9 +2661,13 @@ struct Vern9ExtraStages{T, T2} a2621::T end -@fold function Vern9ExtraStages(::Type{T}, - ::Type{T2}) where {T <: CompiledFloats, - T2 <: CompiledFloats} +@fold function Vern9ExtraStages( + ::Type{T}, + ::Type{T2} + ) where { + T <: CompiledFloats, + T2 <: CompiledFloats, + } # FIVE ADDITIONAL STAGES FOR INTERPOLANT OF ORDER 8 c17 = convert(T2, 1) a1701 = convert(T, 0.014611976858423152) @@ -2587,7 +2807,8 @@ end a2620 = convert(T, -0.03815462365996979) a2621 = convert(T, 0.011118785048989178) - Vern9ExtraStages(c17, a1701, a1708, a1709, a1710, a1711, a1712, a1713, a1714, a1715, + Vern9ExtraStages( + c17, a1701, a1708, a1709, a1710, a1711, a1712, a1713, a1714, a1715, c18, a1801, a1808, a1809, a1810, a1811, a1812, a1813, a1814, a1815, a1817, c19, a1901, a1908, a1909, a1910, a1911, a1912, a1913, a1914, a1915, a1917, a1918, c20, a2001, a2008, a2009, a2010, a2011, a2012, @@ -2600,7 +2821,8 @@ end a2417, a2418, a2419, a2420, a2421, c25, a2501, a2508, a2509, a2510, a2511, a2512, a2513, a2514, a2515, a2517, a2518, a2519, a2520, a2521, c26, a2601, a2608, a2609, a2610, a2611, a2612, a2613, a2614, a2615, - a2617, a2618, a2619, a2620, a2621) + a2617, a2618, a2619, a2620, a2621 + ) end @fold function Vern9ExtraStages(::Type{T}, ::Type{T2}) where {T, T2} @@ -2743,7 +2965,8 @@ end a2620 = convert(T, big"-.3815462365996979065575121886854199471011e-1") a2621 = convert(T, big" .1111878504898917877407531966545730451506e-1") - Vern9ExtraStages(c17, a1701, a1708, a1709, a1710, a1711, a1712, a1713, a1714, a1715, + Vern9ExtraStages( + c17, a1701, a1708, a1709, a1710, a1711, a1712, a1713, a1714, a1715, c18, a1801, a1808, a1809, a1810, a1811, a1812, a1813, a1814, a1815, a1817, c19, a1901, a1908, a1909, a1910, a1911, a1912, a1913, a1914, a1915, a1917, a1918, c20, a2001, a2008, a2009, a2010, a2011, a2012, @@ -2756,7 +2979,8 @@ end a2417, a2418, a2419, a2420, a2421, c25, a2501, a2508, a2509, a2510, a2511, a2512, a2513, a2514, a2515, a2517, a2518, a2519, a2520, a2521, c26, a2601, a2608, a2609, a2610, a2611, a2612, a2613, a2614, a2615, - a2617, a2618, a2619, a2620, a2621) + a2617, a2618, a2619, a2620, a2621 + ) end struct Vern9InterpolationCoefficients{T} @@ -3070,7 +3294,8 @@ end r268 = convert(T, 3288.5977751496216) r269 = convert(T, -782.8483098245397) - Vern9InterpolationCoefficients(r011, r012, r013, r014, r015, r016, r017, r018, r019, + Vern9InterpolationCoefficients( + r011, r012, r013, r014, r015, r016, r017, r018, r019, r082, r083, r084, r085, r086, r087, r088, r089, r092, r093, r094, r095, r096, r097, r098, r099, r102, r103, r104, r105, r106, r107, r108, r109, r112, r113, r114, @@ -3086,7 +3311,8 @@ end r226, r227, r228, r229, r232, r233, r234, r235, r236, r237, r238, r239, r242, r243, r244, r245, r246, r247, r248, r249, r252, r253, r254, r255, r256, r257, r258, - r259, r262, r263, r264, r265, r266, r267, r268, r269) + r259, r262, r263, r264, r265, r266, r267, r268, r269 + ) end function Vern9InterpolationCoefficients(T) @@ -3244,7 +3470,8 @@ function Vern9InterpolationCoefficients(T) r268 = convert(T, big" 3288.597775149621789973016480733216881572") r269 = convert(T, big"-782.8483098245396412116558219612402319811") - Vern9InterpolationCoefficients(r011, r012, r013, r014, r015, r016, r017, r018, r019, + return Vern9InterpolationCoefficients( + r011, r012, r013, r014, r015, r016, r017, r018, r019, r082, r083, r084, r085, r086, r087, r088, r089, r092, r093, r094, r095, r096, r097, r098, r099, r102, r103, r104, r105, r106, r107, r108, r109, r112, r113, r114, @@ -3260,7 +3487,8 @@ function Vern9InterpolationCoefficients(T) r226, r227, r228, r229, r232, r233, r234, r235, r236, r237, r238, r239, r242, r243, r244, r245, r246, r247, r248, r249, r252, r253, r254, r255, r256, r257, r258, - r259, r262, r263, r264, r265, r266, r267, r268, r269) + r259, r262, r263, r264, r265, r266, r267, r268, r269 + ) end """ @@ -3377,8 +3605,10 @@ struct Vern9Tableau{T, T2} btilde16::T end -@fold function Vern9Tableau(::Type{T}, - ::Type{T2}) where {T <: CompiledFloats, T2 <: CompiledFloats} +@fold function Vern9Tableau( + ::Type{T}, + ::Type{T2} + ) where {T <: CompiledFloats, T2 <: CompiledFloats} c1 = convert(T2, 0.03462) c2 = convert(T2, 0.09702435063878045) c3 = convert(T2, 0.14553652595817068) @@ -3496,7 +3726,8 @@ end btilde15 = convert(T, 0.030570139830827976) btilde16 = convert(T, -0.04834231373823958) - Vern9Tableau(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, a0201, a0301, + Vern9Tableau( + c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, a0201, a0301, a0302, a0401, a0403, a0501, a0503, a0504, a0601, a0604, a0605, a0701, a0704, a0705, a0706, a0801, a0806, a0807, a0901, a0906, a0907, a0908, a1001, a1006, a1007, a1008, a1009, a1101, a1106, a1107, a1108, a1109, @@ -3506,17 +3737,22 @@ end a1510, a1511, a1512, a1513, a1514, a1601, a1606, a1607, a1608, a1609, a1610, a1611, a1612, a1613, b1, b8, b9, b10, b11, b12, b13, b14, b15, btilde1, btilde8, btilde9, btilde10, btilde11, btilde12, btilde13, - btilde14, btilde15, btilde16) + btilde14, btilde15, btilde16 + ) end @fold function Vern9Tableau(::Type{T}, ::Type{T2}) where {T, T2} c1 = convert(T2, 1731 // 50000) - c2 = convert(T2, + c2 = convert( + T2, BigInt(7630049) // BigInt(53810000) - - BigInt(983539) // BigInt(53810000) * 6^(1 // 2)) - c3 = convert(T2, + BigInt(983539) // BigInt(53810000) * 6^(1 // 2) + ) + c3 = convert( + T2, BigInt(22890147) // BigInt(107620000) - - BigInt(2950617) // BigInt(107620000) * 6^(1 // 2)) + BigInt(2950617) // BigInt(107620000) * 6^(1 // 2) + ) c4 = convert(T2, 561 // 1000) c5 = convert(T2, BigInt(387) // BigInt(1000) - BigInt(129) // BigInt(2000) * 6^(1 // 2)) c6 = convert(T2, BigInt(387) // BigInt(1000) + BigInt(129) // BigInt(2000) * 6^(1 // 2)) @@ -3528,320 +3764,470 @@ end c12 = convert(T2, 4103 // 5000) c13 = convert(T2, 2253 // 2500) a0201 = convert(T, 1731 // 50000) - a0301 = convert(T, + a0301 = convert( + T, -BigInt(177968356965557) // BigInt(1002427673820000) + - BigInt(14180534491313) // BigInt(250606918455000) * 6^(1 // 2)) - a0302 = convert(T, + BigInt(14180534491313) // BigInt(250606918455000) * 6^(1 // 2) + ) + a0302 = convert( + T, BigInt(64021741529527) // BigInt(200485534764000) - - BigInt(7504450763411) // BigInt(100242767382000) * 6^(1 // 2)) - a0401 = convert(T, + BigInt(7504450763411) // BigInt(100242767382000) * 6^(1 // 2) + ) + a0401 = convert( + T, BigInt(22890147) // BigInt(430480000) - - BigInt(2950617) // BigInt(430480000) * 6^(1 // 2)) - a0403 = convert(T, + BigInt(2950617) // BigInt(430480000) * 6^(1 // 2) + ) + a0403 = convert( + T, BigInt(68670441) // BigInt(430480000) - - BigInt(8851851) // BigInt(430480000) * 6^(1 // 2)) - a0501 = convert(T, + BigInt(8851851) // BigInt(430480000) * 6^(1 // 2) + ) + a0501 = convert( + T, BigInt(592203994261020339) // BigInt(513126355505556250) + - BigInt(730386990293623641) // BigInt(2052505422022225000) * 6^(1 // 2)) - a0503 = convert(T, + BigInt(730386990293623641) // BigInt(2052505422022225000) * 6^(1 // 2) + ) + a0503 = convert( + T, -BigInt(8712153884182794903) // BigInt(2052505422022225000) - - BigInt(2843421359195851533) // BigInt(2052505422022225000) * 6^(1 // 2)) - a0504 = convert(T, + BigInt(2843421359195851533) // BigInt(2052505422022225000) * 6^(1 // 2) + ) + a0504 = convert( + T, BigInt(1873698362223295443) // BigInt(513126355505556250) + - BigInt(528258592225556973) // BigInt(513126355505556250) * 6^(1 // 2)) - a0601 = convert(T, + BigInt(528258592225556973) // BigInt(513126355505556250) * 6^(1 // 2) + ) + a0601 = convert( + T, BigInt(11380823631) // BigInt(157617812000) - - BigInt(339148869) // BigInt(39404453000) * 6^(1 // 2)) - a0604 = convert(T, + BigInt(339148869) // BigInt(39404453000) * 6^(1 // 2) + ) + a0604 = convert( + T, BigInt(16193232887091831) // BigInt(58864341808507450) - - BigInt(2355345717024309) // BigInt(58864341808507450) * 6^(1 // 2)) - a0605 = convert(T, + BigInt(2355345717024309) // BigInt(58864341808507450) * 6^(1 // 2) + ) + a0605 = convert( + T, BigInt(165912282616977) // BigInt(4179075230308000) - - BigInt(33181894472511) // BigInt(2089537615154000) * 6^(1 // 2)) - a0701 = convert(T, + BigInt(33181894472511) // BigInt(2089537615154000) * 6^(1 // 2) + ) + a0701 = convert( + T, BigInt(26523528363) // BigInt(231790900000) + - BigInt(863255358) // BigInt(123138915625) * 6^(1 // 2)) - a0704 = convert(T, + BigInt(863255358) // BigInt(123138915625) * 6^(1 // 2) + ) + a0704 = convert( + T, -BigInt(38208748178016484817787) // BigInt(842517966262441068418750) - - BigInt(86118788556282369822807) // BigInt(842517966262441068418750) * - 6^(1 // 2)) - a0705 = convert(T, + BigInt(86118788556282369822807) // BigInt(842517966262441068418750) * + 6^(1 // 2) + ) + a0705 = convert( + T, BigInt(92362336407446913) // BigInt(290322814529044000) - - BigInt(232039320950012997) // BigInt(2467743923496874000) * 6^(1 // 2)) - a0706 = convert(T, + BigInt(232039320950012997) // BigInt(2467743923496874000) * 6^(1 // 2) + ) + a0706 = convert( + T, -BigInt(362925891) // BigInt(1690350537500) + - BigInt(857800423623) // BigInt(3380701075000) * 6^(1 // 2)) + BigInt(857800423623) // BigInt(3380701075000) * 6^(1 // 2) + ) a0801 = convert(T, 43 // 600) a0806 = convert(T, BigInt(43) // BigInt(150) + BigInt(43) // BigInt(2400) * 6^(1 // 2)) a0807 = convert(T, BigInt(43) // BigInt(150) - BigInt(43) // BigInt(2400) * 6^(1 // 2)) a0901 = convert(T, 7353 // 102400) - a0906 = convert(T, + a0906 = convert( + T, BigInt(22833) // BigInt(102400) + - BigInt(8901) // BigInt(204800) * 6^(1 // 2)) - a0907 = convert(T, + BigInt(8901) // BigInt(204800) * 6^(1 // 2) + ) + a0907 = convert( + T, BigInt(22833) // BigInt(102400) - - BigInt(8901) // BigInt(204800) * 6^(1 // 2)) + BigInt(8901) // BigInt(204800) * 6^(1 // 2) + ) a0908 = convert(T, -3483 // 102400) a1001 = convert(T, 376708742472214988700853 // 7788456028125000000000000) - a1006 = convert(T, + a1006 = convert( + T, BigInt(187914666753956840195279) // BigInt(2596152009375000000000000) - - BigInt(210440846556290693268911) // BigInt(15576912056250000000000000) * - 6^(1 // 2)) - a1007 = convert(T, + BigInt(210440846556290693268911) // BigInt(15576912056250000000000000) * + 6^(1 // 2) + ) + a1007 = convert( + T, BigInt(187914666753956840195279) // BigInt(2596152009375000000000000) + - BigInt(210440846556290693268911) // BigInt(15576912056250000000000000) * - 6^(1 // 2)) + BigInt(210440846556290693268911) // BigInt(15576912056250000000000000) * + 6^(1 // 2) + ) a1008 = convert(T, -18552667221896744226647 // 865384003125000000000000) a1009 = convert(T, -3167799860072183913409 // 30423656359863281250000) - a1101 = convert(T, + a1101 = convert( + T, -BigInt(426968570497) // BigInt(54394415898750) - - BigInt(92754382349) // BigInt(12087647977500) * 6^(1 // 2)) + BigInt(92754382349) // BigInt(12087647977500) * 6^(1 // 2) + ) a1106 = convert(T, 1 // 30) - a1107 = convert(T, + a1107 = convert( + T, -BigInt(2865012129681958) // BigInt(114898584332330625) - - BigInt(12962517687655099) // BigInt(229797168664661250) * 6^(1 // 2)) - a1108 = convert(T, + BigInt(12962517687655099) // BigInt(229797168664661250) * 6^(1 // 2) + ) + a1108 = convert( + T, BigInt(4389715333607) // BigInt(309890657317500) + - BigInt(92754382349) // BigInt(11477431752500) * 6^(1 // 2)) - a1109 = convert(T, + BigInt(92754382349) // BigInt(11477431752500) * 6^(1 // 2) + ) + a1109 = convert( + T, BigInt(4990058173976) // BigInt(83757096376875) + - BigInt(371017529396) // BigInt(9306344041875) * 6^(1 // 2)) - a1110 = convert(T, + BigInt(371017529396) // BigInt(9306344041875) * 6^(1 // 2) + ) + a1110 = convert( + T, BigInt(1099523524595993125000) // BigInt(6257667909869756018891) + - BigInt(100957348037989687500) // BigInt(6257667909869756018891) * - 6^(1 // 2)) - a1201 = convert(T, + BigInt(100957348037989687500) // BigInt(6257667909869756018891) * + 6^(1 // 2) + ) + a1201 = convert( + T, BigInt(18382031104798403869938539009154656587521498573595595063164077882800315372787284683238439478955141517997198007108623761931447163756) // - BigInt(13974256944499724344918960993890933614161025322970450047932688998095008528620821239604734608111291769444706187497807869179550841329375) + - BigInt(407885778185158609210793892517582595305896470756467612636796259611491408260896413446883450891351622914818800693274034252252905536) // - BigInt(28084926388601226073624096169175002956970191576455110633226765141161372294098693275117181239385312198137508846535933127837167926875) * - 6^(1 // 2)) - a1206 = convert(T, + BigInt(13974256944499724344918960993890933614161025322970450047932688998095008528620821239604734608111291769444706187497807869179550841329375) + + BigInt(407885778185158609210793892517582595305896470756467612636796259611491408260896413446883450891351622914818800693274034252252905536) // + BigInt(28084926388601226073624096169175002956970191576455110633226765141161372294098693275117181239385312198137508846535933127837167926875) * + 6^(1 // 2) + ) + a1206 = convert( + T, -BigInt(333881311789849411971573472868128281438202210721723123251742145367734582887577395547778228760174068758086134389952015563403904) // - BigInt(2270872004608103037127689848604039623086639035441372934050180593816493796129405349914148981460714202232988727738778494557727635) + - BigInt(4819272892477768171373308666720689121421091953625792970278044071549950640195056472955523769829034800621890424847009130000000) // - BigInt(23162894447002650978702436455761204155483718161502003927311842056928236720519934569124319610899284862776485022935540644488821877) * - 6^(1 // 2)) - a1207 = convert(T, + BigInt(2270872004608103037127689848604039623086639035441372934050180593816493796129405349914148981460714202232988727738778494557727635) + + BigInt(4819272892477768171373308666720689121421091953625792970278044071549950640195056472955523769829034800621890424847009130000000) // + BigInt(23162894447002650978702436455761204155483718161502003927311842056928236720519934569124319610899284862776485022935540644488821877) * + 6^(1 // 2) + ) + a1207 = convert( + T, -BigInt(136666607496463622270135608863772076443625468798139480390426740993024803946981763209348364716108721312822619845726151693667598437699964416) // - BigInt(3719286465342404274788585327254180828195282427342057650194855634917821113563432870681372043512520401887141437067106105683944802332422369375) + - BigInt(169845085565361336805556009296394374527636952379388961026066628725155521832762086875632366996477567928657535912191396155566765457826139904) // - BigInt(1593979913718173260623679425966077497797978183146596135797795272107637620098614087434873732933937315094489187314474045293119200999609586875) * - 6^(1 // 2)) - a1208 = convert(T, + BigInt(3719286465342404274788585327254180828195282427342057650194855634917821113563432870681372043512520401887141437067106105683944802332422369375) + + BigInt(169845085565361336805556009296394374527636952379388961026066628725155521832762086875632366996477567928657535912191396155566765457826139904) // + BigInt(1593979913718173260623679425966077497797978183146596135797795272107637620098614087434873732933937315094489187314474045293119200999609586875) * + 6^(1 // 2) + ) + a1208 = convert( + T, BigInt(5610987899273278525411960528081442902198567594809764379756195673673265700551076812883925583370253765702553235594764427173637673766208) // - BigInt(92881598198144033018278804740626334135423356791639598109358867770361609232846012626732332450844264293840456574956036349633197336361875) - - BigInt(5587476413495323413846491678323049250765705078855720721052003556321800113162964567765526724539063327600257543743479921263738432) // - BigInt(365303089362201664516413596925286161494473575337115296250511752859728108868696929614024803255122785403232359817965288739565550625) * - 6^(1 // 2)) - a1209 = convert(T, + BigInt(92881598198144033018278804740626334135423356791639598109358867770361609232846012626732332450844264293840456574956036349633197336361875) - + BigInt(5587476413495323413846491678323049250765705078855720721052003556321800113162964567765526724539063327600257543743479921263738432) // + BigInt(365303089362201664516413596925286161494473575337115296250511752859728108868696929614024803255122785403232359817965288739565550625) * + 6^(1 // 2) + ) + a1209 = convert( + T, BigInt(54598539818083615233566148602203244896696958910734339754065270985433507945162707737759469214674480807272210648148477499238783276259328) // - BigInt(301247919092298852634886875129959310794662932014184499827145075851637298698312074030567479239502011693447423026416040794479934024058125) - - BigInt(6526172450962537747372702280281321524894343532103481802188740153783862532174342615150135214261625966637100811092384548036046488576) // - BigInt(86490932843037281836028387921320502668579653176624892284566487468170341285762869374265713247057712228954184044334206372230816544375) * - 6^(1 // 2)) - a1210 = convert(T, + BigInt(301247919092298852634886875129959310794662932014184499827145075851637298698312074030567479239502011693447423026416040794479934024058125) - + BigInt(6526172450962537747372702280281321524894343532103481802188740153783862532174342615150135214261625966637100811092384548036046488576) // + BigInt(86490932843037281836028387921320502668579653176624892284566487468170341285762869374265713247057712228954184044334206372230816544375) * + 6^(1 // 2) + ) + a1210 = convert( + T, BigInt(9391667348404584010955422210328707125006120661611061908889750805619418785820948002455890360939221912190524731087070645107486913457760000000) // - BigInt(58157266968773020612419028503738708303515285854970725662326801531295387265784849843172223645193277229358434488742203091272981931739152584783) - - BigInt(8108825145085088104344721048166325225173729495689364696426720161112012414227752328969720658987315654179873760357725235734000399440000000) // - BigInt(265558296661064021061274102756797754810572081529546692522040189640618206693081506133206500662983001047298787619827411375675716583283801757) * - 6^(1 // 2)) - a1211 = convert(T, + BigInt(58157266968773020612419028503738708303515285854970725662326801531295387265784849843172223645193277229358434488742203091272981931739152584783) - + BigInt(8108825145085088104344721048166325225173729495689364696426720161112012414227752328969720658987315654179873760357725235734000399440000000) // + BigInt(265558296661064021061274102756797754810572081529546692522040189640618206693081506133206500662983001047298787619827411375675716583283801757) * + 6^(1 // 2) + ) + a1211 = convert( + T, BigInt(123461712659887915177271339396606860810479028777869348014870450606260914019560285661288212498128400476015695960341952) // - BigInt(281629106670320674754245209358840703704235147307838896741075511220826056829047205614324978253226176275078922716132461)) - a1301 = convert(T, + BigInt(281629106670320674754245209358840703704235147307838896741075511220826056829047205614324978253226176275078922716132461) + ) + a1301 = convert( + T, -BigInt(56042772675322042139227629978042586330633622706053363946766144416933631) // - BigInt(58808540772323190525590122613223430507352118534557342666015625000000000) + - BigInt(281404579734699232141455524604487724159024972527) // - BigInt(1478009944832743180452316204077188415527343750000) * 6^(1 // 2)) - a1306 = convert(T, + BigInt(58808540772323190525590122613223430507352118534557342666015625000000000) + + BigInt(281404579734699232141455524604487724159024972527) // + BigInt(1478009944832743180452316204077188415527343750000) * 6^(1 // 2) + ) + a1306 = convert( + T, -BigInt(1027163900229750356561238237947225332675621517) // - BigInt(179261894431132664078747698292867431640625000) - - BigInt(2745292391641202525373103979336813513372321) // - BigInt(11702216468464340311060649744558385937500000) * 6^(1 // 2)) - a1307 = convert(T, + BigInt(179261894431132664078747698292867431640625000) - + BigInt(2745292391641202525373103979336813513372321) // + BigInt(11702216468464340311060649744558385937500000) * 6^(1 // 2) + ) + a1307 = convert( + T, -BigInt(157229999853748227305165773364426925282378072238332930121) // - BigInt(36699907367985458573273204094330716033963413238525390625) + - BigInt(5757606442802795095318986067317837904184278650664590252101) // - BigInt(3523191107326604023034227593055748739260487670898437500000) * - 6^(1 // 2)) - a1308 = convert(T, + BigInt(36699907367985458573273204094330716033963413238525390625) + + BigInt(5757606442802795095318986067317837904184278650664590252101) // + BigInt(3523191107326604023034227593055748739260487670898437500000) * + 6^(1 // 2) + ) + a1308 = convert( + T, -BigInt(9311448168593934146015965019904013602133802943325818346622781285907057) // - BigInt(4255970849010124217193135449668739985401313363005576159362792968750000) - - BigInt(844213739204097696424366573813463172477074917581) // - BigInt(4210188359946578336976868164966163024902343750000) * 6^(1 // 2)) - a1309 = convert(T, + BigInt(4255970849010124217193135449668739985401313363005576159362792968750000) - + BigInt(844213739204097696424366573813463172477074917581) // + BigInt(4210188359946578336976868164966163024902343750000) * 6^(1 // 2) + ) + a1309 = convert( + T, BigInt(885774233856672590222951867695327816457340130391639153070521335485617578) // - BigInt(301098541380295011015469248465465290112505656143757799934635162353515625) - - BigInt(281404579734699232141455524604487724159024972527) // - BigInt(284481916364737983221402322504830303192138671875) * 6^(1 // 2)) - a1310 = convert(T, + BigInt(301098541380295011015469248465465290112505656143757799934635162353515625) - + BigInt(281404579734699232141455524604487724159024972527) // + BigInt(284481916364737983221402322504830303192138671875) * 6^(1 // 2) + ) + a1310 = convert( + T, BigInt(315479116729780153956412124052199685097744239386639023787359107959254802182) // - BigInt(134481850506505848012587842215515574380212543200894932329128471154748828125) - - BigInt(2940396453647872276646068776592292229737651937934623) // - BigInt(7345465058781983710795837429530784777245286520703125) * - 6^(1 // 2)) - a1311 = convert(T, + BigInt(134481850506505848012587842215515574380212543200894932329128471154748828125) - + BigInt(2940396453647872276646068776592292229737651937934623) // + BigInt(7345465058781983710795837429530784777245286520703125) * + 6^(1 // 2) + ) + a1311 = convert( + T, BigInt(2250996163406545378616532039018846586217631599453822541) // - BigInt(382491303797095993563304148204275636433504028320312500)) - a1312 = convert(T, + BigInt(382491303797095993563304148204275636433504028320312500) + ) + a1312 = convert( + T, BigInt(2689340957307691853294902388334454003959378146957529866233529251986359392336044151708949720958809747970514366293458424272174024493) // - BigInt(959516386019578808500569114780871708466894752280482835105408027815194895319055443842782227102120493960805649575561796875000000000)) - a1401 = convert(T, + BigInt(959516386019578808500569114780871708466894752280482835105408027815194895319055443842782227102120493960805649575561796875000000000) + ) + a1401 = convert( + T, BigInt(47342003848024391498707976847688893013083074441159779465719863625051668939887702630319) // - BigInt(44802546873926050730401222636656855760802419993852060264615320801485392456054687500000) - - BigInt(866369530987077991125562402829092187100493209601) // - BigInt(3325522375873672156017711459173673934936523437500) * 6^(1 // 2)) - a1406 = convert(T, + BigInt(44802546873926050730401222636656855760802419993852060264615320801485392456054687500000) - + BigInt(866369530987077991125562402829092187100493209601) // + BigInt(3325522375873672156017711459173673934936523437500) * 6^(1 // 2) + ) + a1406 = convert( + T, BigInt(871779321807802447463310035318238762878527157) // - BigInt(134446420823349498059060773719650573730468750) + - BigInt(107641268480999396081848975271849857994818) // - BigInt(1097082793918531904161935913552348681640625) * 6^(1 // 2)) - a1407 = convert(T, + BigInt(134446420823349498059060773719650573730468750) + + BigInt(107641268480999396081848975271849857994818) // + BigInt(1097082793918531904161935913552348681640625) * 6^(1 // 2) + ) + a1407 = convert( + T, BigInt(496103786351862292800034805114190705484800743513354117014) // - BigInt(110099722103956375719819612282992148101890239715576171875) - - BigInt(1329938412606197485769312599390307351191540891599374831099) // - BigInt(660598332623738254318917673697952888611341438293457031250) * - 6^(1 // 2)) - a1408 = convert(T, + BigInt(110099722103956375719819612282992148101890239715576171875) - + BigInt(1329938412606197485769312599390307351191540891599374831099) // + BigInt(660598332623738254318917673697952888611341438293457031250) * + 6^(1 // 2) + ) + a1408 = convert( + T, BigInt(40774077277747636354598451708891165494123131383777235229538611989392175193285994266471) // - BigInt(15264290546248162101058985941588079518256741255377031736357946125713524703979492187500) + - BigInt(123767075855296855875080343261298883871499029943) // - BigInt(451091609994276250390378731960660324096679687500) * 6^(1 // 2)) - a1409 = convert(T, + BigInt(15264290546248162101058985941588079518256741255377031736357946125713524703979492187500) + + BigInt(123767075855296855875080343261298883871499029943) // + BigInt(451091609994276250390378731960660324096679687500) * 6^(1 // 2) + ) + a1409 = convert( + T, -BigInt(10522038608500556459828649038302068473735749030796372764961618751973793724796364606986664) // - BigInt(3899417425005422254034574000397382862235892829653375835197340918271556055507659912109375) + - BigInt(3465478123948311964502249611316368748401972838404) // - BigInt(2560337247282641848992620902543472728729248046875) * 6^(1 // 2)) - a1410 = convert(T, + BigInt(3899417425005422254034574000397382862235892829653375835197340918271556055507659912109375) + + BigInt(3465478123948311964502249611316368748401972838404) // + BigInt(2560337247282641848992620902543472728729248046875) * 6^(1 // 2) + ) + a1410 = convert( + T, -BigInt(27843764471262693189365201135620670490328475323282820219474851621693895769527094334687108984) // - BigInt(12257041066285164222002594300605593929434139193022166317802121412999357024704596261133984375) + - BigInt(574774300271998598683873114105472016699241495055292) // - BigInt(1049352151254569101542262489932969253892183788671875) * - 6^(1 // 2)) - a1411 = convert(T, + BigInt(12257041066285164222002594300605593929434139193022166317802121412999357024704596261133984375) + + BigInt(574774300271998598683873114105472016699241495055292) // + BigInt(1049352151254569101542262489932969253892183788671875) * + 6^(1 // 2) + ) + a1411 = convert( + T, -BigInt(34241134351848245624232809437676889009431930503529853032576417589898516) // - BigInt(5613347824358651981100985009024281007603230062439942682713165283203125)) - a1412 = convert(T, + BigInt(5613347824358651981100985009024281007603230062439942682713165283203125) + ) + a1412 = convert( + T, -BigInt(3432044375893932378102368568052286501033850910516999202088532705211633432793920547702800961532438008401883737341854688972639605334600163938610268855705742764072609) // - BigInt(1143174106341682260971647690410567292143926198650927778920823267461111371275907599801714870165813394147519068210931766844494994616580258435518181434575195312500000)) - a1413 = convert(T, + BigInt(1143174106341682260971647690410567292143926198650927778920823267461111371275907599801714870165813394147519068210931766844494994616580258435518181434575195312500000) + ) + a1413 = convert( + T, BigInt(4746930876023919335079451612726717649218264199984) // - BigInt(18592065538407049755200144388134089346432755594877)) - a1501 = convert(T, + BigInt(18592065538407049755200144388134089346432755594877) + ) + a1501 = convert( + T, -BigInt(25188329249258825443748527038142409879923012133738985313265430932280250855708601) // - BigInt(11370641325574469312056961874077298550827642308774647316995717036347558064286250) + - BigInt(1234273058981860170179592598535508631343082535549881956) // - BigInt(2105633771469628744518390642968552144069898845895808125) * - 6^(1 // 2)) - a1506 = convert(T, + BigInt(11370641325574469312056961874077298550827642308774647316995717036347558064286250) + + BigInt(1234273058981860170179592598535508631343082535549881956) // + BigInt(2105633771469628744518390642968552144069898845895808125) * + 6^(1 // 2) + ) + a1506 = convert( + T, -BigInt(54821142119685055562477216205428613949905430396088) // - BigInt(3959439837009461289085587746748097947393101278095) - - BigInt(1511276753825982856072891469504471256664975925000) // - BigInt(40386286337496505148672995016830599063409633036569) * 6^(1 // 2)) - a1507 = convert(T, + BigInt(3959439837009461289085587746748097947393101278095) - + BigInt(1511276753825982856072891469504471256664975925000) // + BigInt(40386286337496505148672995016830599063409633036569) * 6^(1 // 2) + ) + a1507 = convert( + T, -BigInt(60922424274061599918603524049390657305431262635197540405697952) // - BigInt(6484861747489032169774584624759953148531564032417461909516875) + - BigInt(84558575751635978733109961893984238786929550462615375699341616) // - BigInt(19454585242467096509323753874279859445594692097252385728550625) * - 6^(1 // 2)) - a1508 = convert(T, + BigInt(6484861747489032169774584624759953148531564032417461909516875) + + BigInt(84558575751635978733109961893984238786929550462615375699341616) // + BigInt(19454585242467096509323753874279859445594692097252385728550625) * + 6^(1 // 2) + ) + a1508 = convert( + T, -BigInt(116118147575045169733222875835719955334334798191459879782123534889390467935109772) // - BigInt(8810626901954835245672275131295870892503713957512170681453300814988417642493125) - - BigInt(176324722711694310025656085505072661620440362221411708) // - BigInt(285619406719829107485771207042040133465420149964555625) * - 6^(1 // 2)) - a1509 = convert(T, + BigInt(8810626901954835245672275131295870892503713957512170681453300814988417642493125) - + BigInt(176324722711694310025656085505072661620440362221411708) // + BigInt(285619406719829107485771207042040133465420149964555625) * + 6^(1 // 2) + ) + a1509 = convert( + T, BigInt(17769448722513898342276837490665097286927607247073335618566987143467294900183033216) // - BigInt(2551217008137889615056342146084561867122485163596619283719957742418751029506356875) - - BigInt(19748368943709762722873481576568138101489320568798111296) // - BigInt(6484554262322259071286545935997129135111813687175650625) * - 6^(1 // 2)) - a1510 = convert(T, + BigInt(2551217008137889615056342146084561867122485163596619283719957742418751029506356875) - + BigInt(19748368943709762722873481576568138101489320568798111296) // + BigInt(6484554262322259071286545935997129135111813687175650625) * + 6^(1 // 2) + ) + a1510 = convert( + T, BigInt(97659266139124074818193264801929547781659926543786381510190954184218570746215033823993530000000) // - BigInt(18560076654469706205963482908787056850812308205603127326855360961727608242796551101182080033599) - - BigInt(85297084611782122474911131363078900058888025224607913745000000) // - BigInt(69210659450201393843166746722954036326338355649915383851733911) * - 6^(1 // 2)) - a1511 = convert(T, + BigInt(18560076654469706205963482908787056850812308205603127326855360961727608242796551101182080033599) - + BigInt(85297084611782122474911131363078900058888025224607913745000000) // + BigInt(69210659450201393843166746722954036326338355649915383851733911) * + 6^(1 // 2) + ) + a1511 = convert( + T, BigInt(473389749049752963256114649231353822492912259509649519870869750525) // - BigInt(35412440882360341799798842428365422941216508121322622479260846291)) - a1512 = convert(T, + BigInt(35412440882360341799798842428365422941216508121322622479260846291) + ) + a1512 = convert( + T, BigInt(33351439245158438248073494056784144097872912773415904536400728387690334563968394114702414108807505158106385116468732853458202899966748488718531545706559142895903144848764637) // - BigInt(2316611025327287427714802011322252886090793904989900621592365627649097578102163572190502232425490606773312310665593424982745744299371285598588298606088543376742054644818966)) - a1513 = convert(T, + BigInt(2316611025327287427714802011322252886090793904989900621592365627649097578102163572190502232425490606773312310665593424982745744299371285598588298606088543376742054644818966) + ) + a1513 = convert( + T, -BigInt(38714992656958413389743252726016897599283911682945255636643554687500000) // - BigInt(48540494926971587499294589382572212036169135429877901702347521300421767)) - a1514 = convert(T, + BigInt(48540494926971587499294589382572212036169135429877901702347521300421767) + ) + a1514 = convert( + T, BigInt(14800250200940323717124616175641261235119295795768814717803955078125) // - BigInt(33565577125141877760287380588632421223433194078156948298488471160489)) - a1601 = convert(T, + BigInt(33565577125141877760287380588632421223433194078156948298488471160489) + ) + a1601 = convert( + T, BigInt(2305785696086397561080858186939897173645641331085041313944389849986584101287) // - BigInt(617508244345282265819087370078275122671246164669900462139876057008239440000) - - BigInt(85404623305589712632165905233974183137607899140719) // - BigInt(124822287169084833758410283469525117460541643292500) * - 6^(1 // 2)) - a1606 = convert(T, + BigInt(617508244345282265819087370078275122671246164669900462139876057008239440000) - + BigInt(85404623305589712632165905233974183137607899140719) // + BigInt(124822287169084833758410283469525117460541643292500) * + 6^(1 // 2) + ) + a1606 = convert( + T, BigInt(102903996961580448264190625267026062654799259083) // - BigInt(5046398084890004857481629999673320438819484730) + - BigInt(41320925487304219313300272052128374567081128125) // - BigInt(51473260465878049546312625996667868475958744246) * 6^(1 // 2)) - a1607 = convert(T, + BigInt(5046398084890004857481629999673320438819484730) + + BigInt(41320925487304219313300272052128374567081128125) // + BigInt(51473260465878049546312625996667868475958744246) * 6^(1 // 2) + ) + a1607 = convert( + T, BigInt(62798443349876457506718920843975661399949564598018488144466) // - BigInt(4132553498782573324058263582553715220777051359780141380625) - - BigInt(72308807081932961554425711089716771013571419950657300729103) // - BigInt(12397660496347719972174790747661145662331154079340424141875) * - 6^(1 // 2)) - a1608 = convert(T, + BigInt(4132553498782573324058263582553715220777051359780141380625) - + BigInt(72308807081932961554425711089716771013571419950657300729103) // + BigInt(12397660496347719972174790747661145662331154079340424141875) * + 6^(1 // 2) + ) + a1608 = convert( + T, BigInt(1794909142126482564390848522924225553221469019751470544959297614654661293377) // - BigInt(52596481193994264435601626109752988674679691644275456716633975785978672500) + - BigInt(12200660472227101804595129319139169019658271305817) // - BigInt(16931561456559959115207709344056578263397760602500) * 6^(1 // 2)) - a1609 = convert(T, + BigInt(52596481193994264435601626109752988674679691644275456716633975785978672500) + + BigInt(12200660472227101804595129319139169019658271305817) // + BigInt(16931561456559959115207709344056578263397760602500) * 6^(1 // 2) + ) + a1609 = convert( + T, -BigInt(2775244732780109667342845612394739319115662636371477300455747022423270475907256) // - BigInt(228417153675584029725018045422706955827996328208181619436454383447149337555625) + - BigInt(341618493222358850528663620935896732550431596562876) // - BigInt(96101338378773357469245211954911505447551097205625) * 6^(1 // 2)) - a1610 = convert(T, + BigInt(228417153675584029725018045422706955827996328208181619436454383447149337555625) + + BigInt(341618493222358850528663620935896732550431596562876) // + BigInt(96101338378773357469245211954911505447551097205625) * 6^(1 // 2) + ) + a1610 = convert( + T, -BigInt(27680554659769016623530979176727448251292244310769996015342190819068970556083063125000) // - BigInt(3299557777429648960576561382256606844677258438797072955341581354051375036522231471437) + - BigInt(4426552127579895373479670356100179759944766558141730312500) // - BigInt(3077113738667320707748877199804636746494977000658967987677) * - 6^(1 // 2)) - a1611 = convert(T, + BigInt(3299557777429648960576561382256606844677258438797072955341581354051375036522231471437) + + BigInt(4426552127579895373479670356100179759944766558141730312500) // + BigInt(3077113738667320707748877199804636746494977000658967987677) * + 6^(1 // 2) + ) + a1611 = convert( + T, -BigInt(292603171929706291053929402159930330736639136252680853622275) // - BigInt(15473622826279161150227076887290262443510550964275858143964)) - a1612 = convert(T, + BigInt(15473622826279161150227076887290262443510550964275858143964) + ) + a1612 = convert( + T, -BigInt(9815717129569106988569302193220999343824932084582093647596086931754666098662594153095258988516305165794739744873539829069617203523509136682216933020431) // - BigInt(286476991170934153076146641094402171801937250068596542931028678669501762253287693294397689327797388113854588113430063939405071979092547998950955940992)) - a1613 = convert(T, + BigInt(286476991170934153076146641094402171801937250068596542931028678669501762253287693294397689327797388113854588113430063939405071979092547998950955940992) + ) + a1613 = convert( + T, BigInt(2729491144709837905799148766650782532906050298971406518524169921875) // - BigInt(2158115888622139473142775812109447802920656149243127309253686951469)) - b1 = convert(T, - 8198160366203173411119943711500331 // 561057579384085860167277847128765528) - b8 = convert(T, + BigInt(2158115888622139473142775812109447802920656149243127309253686951469) + ) + b1 = convert( + T, + 8198160366203173411119943711500331 // 561057579384085860167277847128765528 + ) + b8 = convert( + T, -BigInt(455655493073428838813281446213740000000) // - BigInt(1163808011150910561240464225837312497869)) - b9 = convert(T, + BigInt(1163808011150910561240464225837312497869) + ) + b9 = convert( + T, BigInt(19965163648706008081135075746915614720000000) // - BigInt(86394404190537086868394686205782432516544599)) - b10 = convert(T, + BigInt(86394404190537086868394686205782432516544599) + ) + b10 = convert( + T, BigInt(89231107919981418705566970804343750000000000000000000000) // - BigInt(699979870988335674445594679856445060562597693583175985391)) - b11 = convert(T, + BigInt(699979870988335674445594679856445060562597693583175985391) + ) + b11 = convert( + T, 47104273954945906713184913871143492 // - 209684639122339601934631113492763467) - b12 = convert(T, + 209684639122339601934631113492763467 + ) + b12 = convert( + T, BigInt(20845004421404500464010584740796750650832176798370383084226351294730731196673647311062330972740734737279503119387627146381678677156136042524139311907482802844083) // - BigInt(36670849891136373020238225328265100250605144718501926305140966586758054847604681466336103169284755987753542321202462371554120593858149755539878561976786592389608)) - b13 = convert(T, + BigInt(36670849891136373020238225328265100250605144718501926305140966586758054847604681466336103169284755987753542321202462371554120593858149755539878561976786592389608) + ) + b13 = convert( + T, BigInt(6053037282142306509795911286909179687500000000) // - BigInt(103899257350518063455290077573775162739725126989)) - b14 = convert(T, + BigInt(103899257350518063455290077573775162739725126989) + ) + b14 = convert( + T, BigInt(917401104920993498360358406096725463867187500) // - BigInt(6724249815911346653315790737453607382989551463)) - b15 = convert(T, - 2585449557665268951371699596493957 // 84574345160764140163208606048427531) + BigInt(6724249815911346653315790737453607382989551463) + ) + b15 = convert( + T, + 2585449557665268951371699596493957 // 84574345160764140163208606048427531 + ) # bhat1 =convert(T,552562031208180939317806684253//27669654257734667858523344041464) # bhat8 =convert(T,221223388631423597589898601690000000//100946136798587090054685074667127461) # bhat9 =convert(T,BigInt(101835408791305297984657812561920000000)//BigInt(1149763833200743759976506650241312100139)) @@ -3850,37 +4236,58 @@ end # bhat12 =convert(T,-BigInt(2129662374582324648106919795703373645353118273066742230724172731025813964712473647144010599206669825382719359113196238857709025512340589957)//BigInt(1035543739272367080885190546201097218891268728118207332592595987554851882972292670881794178380097716583123063485287435793657425889233080568)) # bhat13 =convert(T,BigInt(1084761591753640855844358063964843750000000)//BigInt(3182895486031249071938549691320502488733423)) # bhat16 =convert(T,1839190071060649887127895100784//38045139523510634351420875415397) - btilde1 = convert(T, + btilde1 = convert( + T, -1503069970302555747713611212548875 // - 280528789692042930083638923564382764) - btilde8 = convert(T, + 280528789692042930083638923564382764 + ) + btilde8 = convert( + T, BigInt(-3006139940605111495427222425097750000000) // - BigInt(1163808011150910561240464225837312497869)) - btilde9 = convert(T, + BigInt(1163808011150910561240464225837312497869) + ) + btilde9 = convert( + T, BigInt(12313149196718536685269903053200384000000000) // - BigInt(86394404190537086868394686205782432516544599)) - btilde10 = convert(T, + BigInt(86394404190537086868394686205782432516544599) + ) + btilde10 = convert( + T, BigInt(9394187314390973423210070078430468750000000000000000000) // - BigInt(699979870988335674445594679856445060562597693583175985391)) - btilde11 = convert(T, + BigInt(699979870988335674445594679856445060562597693583175985391) + ) + btilde11 = convert( + T, -6012279881210222990854444850195500 // - 209684639122339601934631113492763467) - btilde12 = convert(T, + 209684639122339601934631113492763467 + ) + btilde12 = convert( + T, BigInt(48130484160351526969737032053650002390763871764386160830857331738750104951318921056416737791402447075630390197043182920376678624912056972204118525928289962576625) // - BigInt(18335424945568186510119112664132550125302572359250963152570483293379027423802340733168051584642377993876771160601231185777060296929074877769939280988393296194804)) - btilde13 = convert(T, + BigInt(18335424945568186510119112664132550125302572359250963152570483293379027423802340733168051584642377993876771160601231185777060296929074877769939280988393296194804) + ) + btilde13 = convert( + T, BigInt(-29356835357471791947531468995095214843750000000) // - BigInt(103899257350518063455290077573775162739725126989)) - btilde14 = convert(T, + BigInt(103899257350518063455290077573775162739725126989) + ) + btilde14 = convert( + T, BigInt(917401104920993498360358406096725463867187500) // - BigInt(6724249815911346653315790737453607382989551463)) - btilde15 = convert(T, + BigInt(6724249815911346653315790737453607382989551463) + ) + btilde15 = convert( + T, 2585449557665268951371699596493957 // - 84574345160764140163208606048427531) - btilde16 = convert(T, - -1839190071060649887127895100784 // 38045139523510634351420875415397) + 84574345160764140163208606048427531 + ) + btilde16 = convert( + T, + -1839190071060649887127895100784 // 38045139523510634351420875415397 + ) - Vern9Tableau(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, a0201, a0301, + Vern9Tableau( + c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, a0201, a0301, a0302, a0401, a0403, a0501, a0503, a0504, a0601, a0604, a0605, a0701, a0704, a0705, a0706, a0801, a0806, a0807, a0901, a0906, a0907, a0908, a1001, a1006, a1007, a1008, a1009, a1101, a1106, a1107, a1108, a1109, @@ -3890,7 +4297,8 @@ end a1510, a1511, a1512, a1513, a1514, a1601, a1606, a1607, a1608, a1609, a1610, a1611, a1612, a1613, b1, b8, b9, b10, b11, b12, b13, b14, b15, btilde1, btilde8, btilde9, btilde10, btilde11, btilde12, btilde13, - btilde14, btilde15, btilde16) + btilde14, btilde15, btilde16 + ) end """ @@ -3976,54 +4384,54 @@ struct RKV76IIaTableau{T, T2} end function RKV76IIaTableau(T, T2) - c1 = convert(T2, BigFloat("0")) - c2 = convert(T2, BigFloat("0.069")) - c3 = convert(T2, BigFloat("0.118")) - c4 = convert(T2, BigFloat("0.177")) - c5 = convert(T2, BigFloat("0.501")) - c6 = convert(T2, BigFloat("0.7737799115305331003715765296862487670813")) - c7 = convert(T2, BigFloat("0.994")) - c8 = convert(T2, BigFloat("0.998")) - c9 = convert(T2, BigFloat("1")) + c1 = convert(T2, BigFloat("0")) + c2 = convert(T2, BigFloat("0.069")) + c3 = convert(T2, BigFloat("0.118")) + c4 = convert(T2, BigFloat("0.177")) + c5 = convert(T2, BigFloat("0.501")) + c6 = convert(T2, BigFloat("0.7737799115305331003715765296862487670813")) + c7 = convert(T2, BigFloat("0.994")) + c8 = convert(T2, BigFloat("0.998")) + c9 = convert(T2, BigFloat("1")) c10 = convert(T2, BigFloat("1")) # Butcher tableau A matrix - a21 = convert(T, BigFloat("0.069")) - a31 = convert(T, BigFloat("0.01710144927536231884057971014492753623188")) - a32 = convert(T, BigFloat("0.1008985507246376811594202898550724637681")) - a41 = convert(T, BigFloat("0.04425")) - a42 = convert(T, BigFloat("0")) - a43 = convert(T, BigFloat("0.13275")) - a51 = convert(T, BigFloat("0.7353445130709566216604424016087331226659")) - a52 = convert(T, BigFloat("0")) - a53 = convert(T, BigFloat("-2.830160657856937661591496696351623096811")) - a54 = convert(T, BigFloat("2.595816144785981039931054294742889974145")) - a61 = convert(T, BigFloat("-12.21580485360407974005910916471598682362")) - a62 = convert(T, BigFloat("0")) - a63 = convert(T, BigFloat("48.82665485823736062335980699373053427134")) - a64 = convert(T, BigFloat("-38.55615592319928364666616600329792491404")) - a65 = convert(T, BigFloat("2.719085830096535863737044703969626233400")) - a71 = convert(T, BigFloat("108.8614188704176574066699618897203578466")) - a72 = convert(T, BigFloat("0")) - a73 = convert(T, BigFloat("-432.4521181775777896358931629332707752654")) - a74 = convert(T, BigFloat("343.9115281800118289547200158889409233641")) - a75 = convert(T, BigFloat("-20.55041135925273709189369488701721016265")) - a76 = convert(T, BigFloat("1.223582486401040366396880041626704217305")) - a81 = convert(T, BigFloat("113.4755131883738522204615568160304033854")) - a82 = convert(T, BigFloat("0")) - a83 = convert(T, BigFloat("-450.8122021555997002820400438087344405365")) - a84 = convert(T, BigFloat("358.5132765190089889943579090008312808216")) - a85 = convert(T, BigFloat("-21.45046667648445540174055882443151176550")) - a86 = convert(T, BigFloat("1.274053318605952891766776667539031508649")) - a87 = convert(T, BigFloat("-0.002174193904638422805639851234763413667602")) - a91 = convert(T, BigFloat("115.6996223324232534824963925993127275021")) - a92 = convert(T, BigFloat("0")) - a93 = convert(T, BigFloat("-459.6635446100248030478961869239726305957")) - a94 = convert(T, BigFloat("365.5534717131745930309149378867953890507")) - a95 = convert(T, BigFloat("-21.88511586349784824146225495848432937529")) - a96 = convert(T, BigFloat("1.298718109698721459187976480852777474315")) - a97 = convert(T, BigFloat("-0.00005318700918481883515898878747322241917739")) - a98 = convert(T, BigFloat("-0.003098494764731864405706095716460833640254")) + a21 = convert(T, BigFloat("0.069")) + a31 = convert(T, BigFloat("0.01710144927536231884057971014492753623188")) + a32 = convert(T, BigFloat("0.1008985507246376811594202898550724637681")) + a41 = convert(T, BigFloat("0.04425")) + a42 = convert(T, BigFloat("0")) + a43 = convert(T, BigFloat("0.13275")) + a51 = convert(T, BigFloat("0.7353445130709566216604424016087331226659")) + a52 = convert(T, BigFloat("0")) + a53 = convert(T, BigFloat("-2.830160657856937661591496696351623096811")) + a54 = convert(T, BigFloat("2.595816144785981039931054294742889974145")) + a61 = convert(T, BigFloat("-12.21580485360407974005910916471598682362")) + a62 = convert(T, BigFloat("0")) + a63 = convert(T, BigFloat("48.82665485823736062335980699373053427134")) + a64 = convert(T, BigFloat("-38.55615592319928364666616600329792491404")) + a65 = convert(T, BigFloat("2.719085830096535863737044703969626233400")) + a71 = convert(T, BigFloat("108.8614188704176574066699618897203578466")) + a72 = convert(T, BigFloat("0")) + a73 = convert(T, BigFloat("-432.4521181775777896358931629332707752654")) + a74 = convert(T, BigFloat("343.9115281800118289547200158889409233641")) + a75 = convert(T, BigFloat("-20.55041135925273709189369488701721016265")) + a76 = convert(T, BigFloat("1.223582486401040366396880041626704217305")) + a81 = convert(T, BigFloat("113.4755131883738522204615568160304033854")) + a82 = convert(T, BigFloat("0")) + a83 = convert(T, BigFloat("-450.8122021555997002820400438087344405365")) + a84 = convert(T, BigFloat("358.5132765190089889943579090008312808216")) + a85 = convert(T, BigFloat("-21.45046667648445540174055882443151176550")) + a86 = convert(T, BigFloat("1.274053318605952891766776667539031508649")) + a87 = convert(T, BigFloat("-0.002174193904638422805639851234763413667602")) + a91 = convert(T, BigFloat("115.6996223324232534824963925993127275021")) + a92 = convert(T, BigFloat("0")) + a93 = convert(T, BigFloat("-459.6635446100248030478961869239726305957")) + a94 = convert(T, BigFloat("365.5534717131745930309149378867953890507")) + a95 = convert(T, BigFloat("-21.88511586349784824146225495848432937529")) + a96 = convert(T, BigFloat("1.298718109698721459187976480852777474315")) + a97 = convert(T, BigFloat("-0.00005318700918481883515898878747322241917739")) + a98 = convert(T, BigFloat("-0.003098494764731864405706095716460833640254")) a101 = convert(T, BigFloat("124.1543935612464600014576130437603883332")) a102 = convert(T, BigFloat("0")) a103 = convert(T, BigFloat("-493.2318713314597046194663569971348299332")) @@ -4035,35 +4443,37 @@ function RKV76IIaTableau(T, T2) a109 = convert(T, BigFloat("0")) # High order weights - b1 = convert(T, BigFloat("0.05163520172057869163393251056217968836723")) - b2 = convert(T, BigFloat("0")) - b3 = convert(T, BigFloat("0")) - b4 = convert(T, BigFloat("0.2767172535461648728769641534539952501983")) - b5 = convert(T, BigFloat("0.3374175285287150670818592701488271741753")) - b6 = convert(T, BigFloat("0.1884488267810967803491085059046161195540")) - b7 = convert(T, BigFloat("24.54134121634868026791753618430192161716")) - b8 = convert(T, BigFloat("-68.81190284469011946382716084194838780382")) - b9 = convert(T, BigFloat("44.41634281776488378396776021757684795437")) + b1 = convert(T, BigFloat("0.05163520172057869163393251056217968836723")) + b2 = convert(T, BigFloat("0")) + b3 = convert(T, BigFloat("0")) + b4 = convert(T, BigFloat("0.2767172535461648728769641534539952501983")) + b5 = convert(T, BigFloat("0.3374175285287150670818592701488271741753")) + b6 = convert(T, BigFloat("0.1884488267810967803491085059046161195540")) + b7 = convert(T, BigFloat("24.54134121634868026791753618430192161716")) + b8 = convert(T, BigFloat("-68.81190284469011946382716084194838780382")) + b9 = convert(T, BigFloat("44.41634281776488378396776021757684795437")) b10 = convert(T, BigFloat("0")) # Low order weights - bh1 = convert(T, BigFloat("0.05089676583692947576073561095512200263213")) - bh2 = convert(T, BigFloat("0")) - bh3 = convert(T, BigFloat("0")) - bh4 = convert(T, BigFloat("0.2793777374763233901369432426263934138476")) - bh5 = convert(T, BigFloat("0.3281330142746535239936396881369403928344")) - bh6 = convert(T, BigFloat("0.224172121818615103358179483735013")) + bh1 = convert(T, BigFloat("0.05089676583692947576073561095512200263213")) + bh2 = convert(T, BigFloat("0")) + bh3 = convert(T, BigFloat("0")) + bh4 = convert(T, BigFloat("0.2793777374763233901369432426263934138476")) + bh5 = convert(T, BigFloat("0.3281330142746535239936396881369403928344")) + bh6 = convert(T, BigFloat("0.224172121818615103358179483735013")) bh7 = convert(T, BigFloat("0.7874574778015076584344903106189416715189")) bh8 = convert(T, BigFloat("0")) bh9 = convert(T, BigFloat("0")) bh10 = convert(T, BigFloat("-0.6700371172080291516839883360724104817561")) - RKV76IIaTableau(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, - a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, - a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, - a81, a82, a83, a84, a85, a86, a87, - a91, a92, a93, a94, a95, a96, a97, a98, - a101, a102, a103, a104, a105, a106, a107, a108, a109, - b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, - bh1, bh2, bh3, bh4, bh5, bh6, bh7, bh8, bh9, bh10) + return RKV76IIaTableau( + c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, + a21, a31, a32, a41, a42, a43, a51, a52, a53, a54, + a61, a62, a63, a64, a65, a71, a72, a73, a74, a75, a76, + a81, a82, a83, a84, a85, a86, a87, + a91, a92, a93, a94, a95, a96, a97, a98, + a101, a102, a103, a104, a105, a106, a107, a108, a109, + b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, + bh1, bh2, bh3, bh4, bh5, bh6, bh7, bh8, bh9, bh10 + ) end diff --git a/lib/OrdinaryDiffEqVerner/test/allocation_tests.jl b/lib/OrdinaryDiffEqVerner/test/allocation_tests.jl index a26afd1d4d..fa4483a3a9 100644 --- a/lib/OrdinaryDiffEqVerner/test/allocation_tests.jl +++ b/lib/OrdinaryDiffEqVerner/test/allocation_tests.jl @@ -15,24 +15,26 @@ These tests verify that the step! operation does not allocate during stepping. du[2] = -1.5 * u[2] end prob = ODEProblem(simple_system!, [1.0, 1.0], (0.0, 1.0)) - + # Test all exported Verner solvers for allocation-free behavior - verner_solvers = [Vern6(), Vern7(), Vern8(), Vern9(), - AutoVern6(Vern6()), AutoVern7(Vern7()), AutoVern8(Vern8()), AutoVern9(Vern9())] - + verner_solvers = [ + Vern6(), Vern7(), Vern8(), Vern9(), + AutoVern6(Vern6()), AutoVern7(Vern7()), AutoVern8(Vern8()), AutoVern9(Vern9()), + ] + @testset "Verner Solver Allocation Analysis" begin for solver in verner_solvers @testset "$(typeof(solver)) allocation check" begin - integrator = init(prob, solver, dt=0.1, save_everystep=false, abstol=1e-6, reltol=1e-6) + integrator = init(prob, solver, dt = 0.1, save_everystep = false, abstol = 1.0e-6, reltol = 1.0e-6) step!(integrator) # Setup step may allocate - + # Use AllocCheck to verify step! is allocation-free allocs = check_allocs(step!, (typeof(integrator),)) - + # These solvers should be allocation-free, but mark as broken for now # to verify with AllocCheck (more accurate than @allocated) @test_broken length(allocs) == 0 - + if length(allocs) > 0 println("AllocCheck found $(length(allocs)) allocation sites in $(typeof(solver)) step!:") for (i, alloc) in enumerate(allocs[1:min(3, end)]) # Show first 3 @@ -44,4 +46,4 @@ These tests verify that the step! operation does not allocate during stepping. end end end -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqVerner/test/jet.jl b/lib/OrdinaryDiffEqVerner/test/jet.jl index 53c789473c..b20fa21b5e 100644 --- a/lib/OrdinaryDiffEqVerner/test/jet.jl +++ b/lib/OrdinaryDiffEqVerner/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - OrdinaryDiffEqVerner, target_defined_modules = true, mode = :typo) + OrdinaryDiffEqVerner, target_defined_modules = true, mode = :typo + ) end diff --git a/lib/OrdinaryDiffEqVerner/test/ode_verner_tests.jl b/lib/OrdinaryDiffEqVerner/test/ode_verner_tests.jl index 03fbbeb2f2..c9be0829b9 100644 --- a/lib/OrdinaryDiffEqVerner/test/ode_verner_tests.jl +++ b/lib/OrdinaryDiffEqVerner/test/ode_verner_tests.jl @@ -3,20 +3,20 @@ using DiffEqDevTools, Test import ODEProblemLibrary: prob_ode_linear, prob_ode_2Dlinear, prob_ode_bigfloatlinear, prob_ode_bigfloat2Dlinear # Problem mappings -const probbig = prob_ode_bigfloat2Dlinear +const probbig = prob_ode_bigfloat2Dlinear const probnumbig = prob_ode_bigfloatlinear -const probnum = prob_ode_linear -const prob = prob_ode_2Dlinear +const probnum = prob_ode_linear +const prob = prob_ode_2Dlinear testTol = 2.0 # Custom ODE functions for testing function f!(du, u, p, t) - du[1] = -u[1] + return du[1] = -u[1] end function f(u, p, t) - -u + return -u end t_end = 64.0 @@ -29,7 +29,7 @@ prob_iip = ODEProblem(ODEFunction(f!; analytic = (u0, p, t) -> [exp(-t)]), [1.0] function check_convergence(dts, prob, alg, order_expected) # Use DiffEqDevTools for overall convergence estimate sim = test_convergence(dts, prob, alg) - @test (sim.𝒪est[:final] > order_expected) || (abs(sim.𝒪est[:final] - order_expected) < testTol) + return @test (sim.𝒪est[:final] > order_expected) || (abs(sim.𝒪est[:final] - order_expected) < testTol) end # ------------------------------------------------------------- @@ -43,11 +43,11 @@ check_convergence(dts, probbig, Vern6(), 6) tabalg = ExplicitRK(tableau = constructVernerEfficient6(BigFloat)) sol1 = solve(probnumbig, Vern6(); dt = 1 / 2^6, adaptive = false, save_everystep = false) sol2 = solve(probnumbig, tabalg; dt = 1 / 2^6, adaptive = false, save_everystep = false) -@test sol1.u[end] - sol2.u[end] < 1e-10 +@test sol1.u[end] - sol2.u[end] < 1.0e-10 sol1 = solve(probbig, Vern6(); dt = 1 / 2^3, adaptive = false, save_everystep = false) sol2 = solve(probbig, tabalg; dt = 1 / 2^3, adaptive = false, save_everystep = false) -@test minimum(sol1.u[end] - sol2.u[end] .< 1e-10) +@test minimum(sol1.u[end] - sol2.u[end] .< 1.0e-10) sol1 = solve(probbig, tabalg; dt = 1 / 2^6) sol2 = solve(probbig, Vern6(); dt = 1 / 2^6) @@ -65,11 +65,11 @@ check_convergence(dts, probbig, Vern7(), 7) tabalg = ExplicitRK(tableau = constructVerner7(BigFloat)) sol1 = solve(probnumbig, Vern7(); dt = 1 / 2^6, adaptive = false, save_everystep = false) sol2 = solve(probnumbig, tabalg; dt = 1 / 2^6, adaptive = false, save_everystep = false) -@test sol1.u[end] - sol2.u[end] < 1e-10 +@test sol1.u[end] - sol2.u[end] < 1.0e-10 sol1 = solve(probbig, Vern7(); dt = 1 / 2^3, adaptive = false, save_everystep = false) sol2 = solve(probbig, tabalg; dt = 1 / 2^3, adaptive = false, save_everystep = false) -@test minimum(sol1.u[end] - sol2.u[end] .< 1e-10) +@test minimum(sol1.u[end] - sol2.u[end] .< 1.0e-10) sol1 = solve(probbig, tabalg; dt = 1 / 2^6) sol2 = solve(probbig, Vern7(); dt = 1 / 2^6) @@ -87,11 +87,11 @@ check_convergence(dts, probbig, Vern8(), 8) tabalg = ExplicitRK(tableau = constructVerner8(BigFloat)) sol1 = solve(probnumbig, Vern8(); dt = 1 / 2^6, adaptive = false, save_everystep = false) sol2 = solve(probnumbig, tabalg; dt = 1 / 2^6, adaptive = false, save_everystep = false) -@test sol1.u[end] - sol2.u[end] < 1e-10 +@test sol1.u[end] - sol2.u[end] < 1.0e-10 sol1 = solve(probbig, Vern8(); dt = 1 / 2^3, adaptive = false, save_everystep = false) sol2 = solve(probbig, tabalg; dt = 1 / 2^3, adaptive = false, save_everystep = false) -@test minimum(sol1.u[end] - sol2.u[end] .< 1e-10) +@test minimum(sol1.u[end] - sol2.u[end] .< 1.0e-10) sol1 = solve(prob, tabalg; dt = 1 / 2^6) sol2 = solve(prob, Vern8(); dt = 1 / 2^6) @@ -109,11 +109,11 @@ check_convergence(dts, probbig, Vern9(), 9) tabalg = ExplicitRK(tableau = constructVernerEfficient9(BigFloat)) sol1 = solve(probnumbig, Vern9(); dt = 1 / 2^6, adaptive = false, save_everystep = false) sol2 = solve(probnumbig, tabalg; dt = 1 / 2^6, adaptive = false, save_everystep = false) -@test abs(sol1.u[end] - sol2.u[end]) < 1e-15 +@test abs(sol1.u[end] - sol2.u[end]) < 1.0e-15 sol1 = solve(probbig, Vern9(); dt = 1 / 2^3, adaptive = false, save_everystep = false) sol2 = solve(probbig, tabalg; dt = 1 / 2^3, adaptive = false, save_everystep = false) -@test minimum(abs.(sol1.u[end] - sol2.u[end]) .< 1e-15) +@test minimum(abs.(sol1.u[end] - sol2.u[end]) .< 1.0e-15) sol1 = solve(probbig, tabalg; dt = 1 / 2^6) sol2 = solve(probbig, Vern9(); dt = 1 / 2^6) diff --git a/lib/OrdinaryDiffEqVerner/test/qa.jl b/lib/OrdinaryDiffEqVerner/test/qa.jl index 1c75b70af1..6a2b8d6f6e 100644 --- a/lib/OrdinaryDiffEqVerner/test/qa.jl +++ b/lib/OrdinaryDiffEqVerner/test/qa.jl @@ -5,4 +5,4 @@ using Aqua Aqua.test_all( OrdinaryDiffEqVerner ) -end \ No newline at end of file +end diff --git a/lib/OrdinaryDiffEqVerner/test/runtests.jl b/lib/OrdinaryDiffEqVerner/test/runtests.jl index ebcc57f5e0..bf837671f0 100644 --- a/lib/OrdinaryDiffEqVerner/test/runtests.jl +++ b/lib/OrdinaryDiffEqVerner/test/runtests.jl @@ -6,4 +6,4 @@ if isempty(VERSION.prerelease) @time @safetestset "Aqua" include("qa.jl") @time @safetestset "RKV76IIa Tests" include("ode_verner_tests.jl") @time @safetestset "Allocation Tests" include("allocation_tests.jl") -end \ No newline at end of file +end diff --git a/lib/SimpleImplicitDiscreteSolve/src/SimpleImplicitDiscreteSolve.jl b/lib/SimpleImplicitDiscreteSolve/src/SimpleImplicitDiscreteSolve.jl index 542deea864..b3a718ac42 100644 --- a/lib/SimpleImplicitDiscreteSolve/src/SimpleImplicitDiscreteSolve.jl +++ b/lib/SimpleImplicitDiscreteSolve/src/SimpleImplicitDiscreteSolve.jl @@ -21,23 +21,27 @@ function SciMLBase.__init(prob::ImplicitDiscreteProblem, alg::SimpleIDSolve; dt nlf = isinplace(f) ? (out, u, p) -> f(out, u, u0, p, t) : (u, p) -> f(u, u0, p, t) prob = NonlinearProblem{isinplace(f)}(nlf, u0, p) sol = solve(prob, SimpleNewtonRaphson()) - sol, (sol.retcode != ReturnCode.Success) + return sol, (sol.retcode != ReturnCode.Success) end -function SciMLBase.solve(prob::ImplicitDiscreteProblem, alg::SimpleIDSolve; +function SciMLBase.solve( + prob::ImplicitDiscreteProblem, alg::SimpleIDSolve; dt = 1, save_everystep = true, save_start = true, adaptive = false, dense = false, save_end = true, - kwargs...) + kwargs... + ) @assert !adaptive @assert !dense (initsol, initfail) = SciMLBase.__init(prob, alg; dt) if initfail - sol = SciMLBase.build_solution(prob, alg, prob.tspan[1], prob.u0, k = nothing, - stats = nothing, calculate_error = false) + sol = SciMLBase.build_solution( + prob, alg, prob.tspan[1], prob.u0, k = nothing, + stats = nothing, calculate_error = false + ) return SciMLBase.solution_new_retcode(sol, ReturnCode.InitialFailure) end @@ -63,7 +67,7 @@ function SciMLBase.solve(prob::ImplicitDiscreteProblem, alg::SimpleIDSolve; uprev = u t = ts[i] nlf = isinplace(f) ? (out, u, p) -> f(out, u, uprev, p, t) : - (u, p) -> f(u, uprev, p, t) + (u, p) -> f(u, uprev, p, t) nlprob = NonlinearProblem{isinplace(f)}(nlf, uprev, p) nlsol = solve(nlprob, SimpleNewtonRaphson()) u = nlsol.u @@ -71,22 +75,27 @@ function SciMLBase.solve(prob::ImplicitDiscreteProblem, alg::SimpleIDSolve; convfail = (nlsol.retcode != ReturnCode.Success) if convfail - sol = SciMLBase.build_solution(prob, alg, ts[1:i], us[1:i], k = nothing, - stats = nothing, calculate_error = false) + sol = SciMLBase.build_solution( + prob, alg, ts[1:i], us[1:i], k = nothing, + stats = nothing, calculate_error = false + ) sol = SciMLBase.solution_new_retcode(sol, ReturnCode.ConvergenceFailure) return sol end end !save_everystep && save_end && (us[end] = u) - sol = SciMLBase.build_solution(prob, alg, ts, us, + sol = SciMLBase.build_solution( + prob, alg, ts, us, k = nothing, stats = nothing, - calculate_error = false) + calculate_error = false + ) SciMLBase.has_analytic(prob.f) && SciMLBase.calculate_solution_errors!( - sol; timeseries_errors = true, dense_errors = false) - sol + sol; timeseries_errors = true, dense_errors = false + ) + return sol end export SimpleIDSolve diff --git a/lib/SimpleImplicitDiscreteSolve/test/jet.jl b/lib/SimpleImplicitDiscreteSolve/test/jet.jl index 39a2254265..cc53f99da7 100644 --- a/lib/SimpleImplicitDiscreteSolve/test/jet.jl +++ b/lib/SimpleImplicitDiscreteSolve/test/jet.jl @@ -3,5 +3,6 @@ using JET @testset "JET Tests" begin test_package( - SimpleImplicitDiscreteSolve, target_defined_modules = true, mode = :typo) -end \ No newline at end of file + SimpleImplicitDiscreteSolve, target_defined_modules = true, mode = :typo + ) +end diff --git a/src/OrdinaryDiffEq.jl b/src/OrdinaryDiffEq.jl index 6ca0f46d01..fdb71d3c4c 100644 --- a/src/OrdinaryDiffEq.jl +++ b/src/OrdinaryDiffEq.jl @@ -11,15 +11,15 @@ import CommonSolve: init, solve, solve!, step! import SciMLBase: SciMLBase, addsteps!, savevalues!, terminate! import OrdinaryDiffEqCore: OrdinaryDiffEqCore, - CompositeAlgorithm, - ShampineCollocationInit, BrownFullBasicInit, NoInit, - du_cache, full_cache, isfsal, ode_interpolant, u_cache, - AutoSwitch, - - @cache + CompositeAlgorithm, + ShampineCollocationInit, BrownFullBasicInit, NoInit, + du_cache, full_cache, isfsal, ode_interpolant, u_cache, + AutoSwitch, + + @cache export CompositeAlgorithm, ShampineCollocationInit, BrownFullBasicInit, NoInit, - AutoSwitch + AutoSwitch import OrdinaryDiffEqDifferentiation: OrdinaryDiffEqDifferentiation using OrdinaryDiffEqDifferentiation: OrdinaryDiffEqDifferentiation @@ -27,21 +27,21 @@ export OrdinaryDiffEqDifferentiation import OrdinaryDiffEqNonlinearSolve: OrdinaryDiffEqNonlinearSolve using OrdinaryDiffEqNonlinearSolve: NLNewton, NLAnderson, NLFunctional, - NonlinearSolveAlg + NonlinearSolveAlg export OrdinaryDiffEqNonlinearSolve, NLNewton, NLAnderson, NLFunctional, NonlinearSolveAlg import OrdinaryDiffEqExtrapolation: OrdinaryDiffEqExtrapolation using OrdinaryDiffEqExtrapolation: AitkenNeville, ExtrapolationMidpointDeuflhard, - ExtrapolationMidpointHairerWanner, - ImplicitEulerExtrapolation, - ImplicitDeuflhardExtrapolation, - ImplicitHairerWannerExtrapolation, - ImplicitEulerBarycentricExtrapolation + ExtrapolationMidpointHairerWanner, + ImplicitEulerExtrapolation, + ImplicitDeuflhardExtrapolation, + ImplicitHairerWannerExtrapolation, + ImplicitEulerBarycentricExtrapolation export OrdinaryDiffEqExtrapolation, AitkenNeville, ExtrapolationMidpointDeuflhard, - ExtrapolationMidpointHairerWanner, - ImplicitEulerExtrapolation, - ImplicitDeuflhardExtrapolation, ImplicitHairerWannerExtrapolation, - ImplicitEulerBarycentricExtrapolation + ExtrapolationMidpointHairerWanner, + ImplicitEulerExtrapolation, + ImplicitDeuflhardExtrapolation, ImplicitHairerWannerExtrapolation, + ImplicitEulerBarycentricExtrapolation import OrdinaryDiffEqStabilizedRK: OrdinaryDiffEqStabilizedRK using OrdinaryDiffEqStabilizedRK: ROCK2, ROCK4, RKC, ESERK4, ESERK5, SERK2 @@ -53,52 +53,52 @@ export OrdinaryDiffEqStabilizedIRK, IRKC import OrdinaryDiffEqLowStorageRK: OrdinaryDiffEqLowStorageRK using OrdinaryDiffEqLowStorageRK: ORK256, CarpenterKennedy2N54, SHLDDRK64, HSLDDRK64, - DGLDDRK73_C, DGLDDRK84_C, - DGLDDRK84_F, NDBLSRK124, NDBLSRK134, NDBLSRK144, - CFRLDDRK64, TSLDDRK74, CKLLSRK43_2, CKLLSRK54_3C, - CKLLSRK95_4S, CKLLSRK95_4C, - CKLLSRK95_4M, - CKLLSRK54_3C_3R, CKLLSRK54_3M_3R, CKLLSRK54_3N_3R, - CKLLSRK85_4C_3R, CKLLSRK85_4M_3R, - CKLLSRK85_4P_3R, - CKLLSRK54_3N_4R, CKLLSRK54_3M_4R, CKLLSRK65_4M_4R, - CKLLSRK85_4FM_4R, CKLLSRK75_4M_5R, - ParsaniKetchesonDeconinck3S32, - ParsaniKetchesonDeconinck3S82, - ParsaniKetchesonDeconinck3S53, - ParsaniKetchesonDeconinck3S173, - ParsaniKetchesonDeconinck3S94, - ParsaniKetchesonDeconinck3S184, - ParsaniKetchesonDeconinck3S105, - ParsaniKetchesonDeconinck3S205, - RDPK3Sp35, RDPK3SpFSAL35, RDPK3Sp49, RDPK3SpFSAL49, - RDPK3Sp510, RDPK3SpFSAL510, - RK46NL, SHLDDRK_2N, SHLDDRK52 + DGLDDRK73_C, DGLDDRK84_C, + DGLDDRK84_F, NDBLSRK124, NDBLSRK134, NDBLSRK144, + CFRLDDRK64, TSLDDRK74, CKLLSRK43_2, CKLLSRK54_3C, + CKLLSRK95_4S, CKLLSRK95_4C, + CKLLSRK95_4M, + CKLLSRK54_3C_3R, CKLLSRK54_3M_3R, CKLLSRK54_3N_3R, + CKLLSRK85_4C_3R, CKLLSRK85_4M_3R, + CKLLSRK85_4P_3R, + CKLLSRK54_3N_4R, CKLLSRK54_3M_4R, CKLLSRK65_4M_4R, + CKLLSRK85_4FM_4R, CKLLSRK75_4M_5R, + ParsaniKetchesonDeconinck3S32, + ParsaniKetchesonDeconinck3S82, + ParsaniKetchesonDeconinck3S53, + ParsaniKetchesonDeconinck3S173, + ParsaniKetchesonDeconinck3S94, + ParsaniKetchesonDeconinck3S184, + ParsaniKetchesonDeconinck3S105, + ParsaniKetchesonDeconinck3S205, + RDPK3Sp35, RDPK3SpFSAL35, RDPK3Sp49, RDPK3SpFSAL49, + RDPK3Sp510, RDPK3SpFSAL510, + RK46NL, SHLDDRK_2N, SHLDDRK52 export OrdinaryDiffEqLowStorageRK, ORK256, CarpenterKennedy2N54, SHLDDRK64, HSLDDRK64, - DGLDDRK73_C, DGLDDRK84_C, - DGLDDRK84_F, NDBLSRK124, NDBLSRK134, NDBLSRK144, - CFRLDDRK64, TSLDDRK74, CKLLSRK43_2, CKLLSRK54_3C, CKLLSRK95_4S, CKLLSRK95_4C, - CKLLSRK95_4M, - CKLLSRK54_3C_3R, CKLLSRK54_3M_3R, CKLLSRK54_3N_3R, CKLLSRK85_4C_3R, CKLLSRK85_4M_3R, - CKLLSRK85_4P_3R, - CKLLSRK54_3N_4R, CKLLSRK54_3M_4R, CKLLSRK65_4M_4R, CKLLSRK85_4FM_4R, CKLLSRK75_4M_5R, - ParsaniKetchesonDeconinck3S32, ParsaniKetchesonDeconinck3S82, - ParsaniKetchesonDeconinck3S53, ParsaniKetchesonDeconinck3S173, - ParsaniKetchesonDeconinck3S94, ParsaniKetchesonDeconinck3S184, - ParsaniKetchesonDeconinck3S105, ParsaniKetchesonDeconinck3S205, - RDPK3Sp35, RDPK3SpFSAL35, RDPK3Sp49, RDPK3SpFSAL49, RDPK3Sp510, RDPK3SpFSAL510, - RK46NL, SHLDDRK_2N, SHLDDRK52 + DGLDDRK73_C, DGLDDRK84_C, + DGLDDRK84_F, NDBLSRK124, NDBLSRK134, NDBLSRK144, + CFRLDDRK64, TSLDDRK74, CKLLSRK43_2, CKLLSRK54_3C, CKLLSRK95_4S, CKLLSRK95_4C, + CKLLSRK95_4M, + CKLLSRK54_3C_3R, CKLLSRK54_3M_3R, CKLLSRK54_3N_3R, CKLLSRK85_4C_3R, CKLLSRK85_4M_3R, + CKLLSRK85_4P_3R, + CKLLSRK54_3N_4R, CKLLSRK54_3M_4R, CKLLSRK65_4M_4R, CKLLSRK85_4FM_4R, CKLLSRK75_4M_5R, + ParsaniKetchesonDeconinck3S32, ParsaniKetchesonDeconinck3S82, + ParsaniKetchesonDeconinck3S53, ParsaniKetchesonDeconinck3S173, + ParsaniKetchesonDeconinck3S94, ParsaniKetchesonDeconinck3S184, + ParsaniKetchesonDeconinck3S105, ParsaniKetchesonDeconinck3S205, + RDPK3Sp35, RDPK3SpFSAL35, RDPK3Sp49, RDPK3SpFSAL49, RDPK3Sp510, RDPK3SpFSAL510, + RK46NL, SHLDDRK_2N, SHLDDRK52 import OrdinaryDiffEqSSPRK: OrdinaryDiffEqSSPRK using OrdinaryDiffEqSSPRK: SSPRK53_2N2, SSPRK22, SSPRK53, SSPRK63, SSPRK83, SSPRK43, - SSPRK432, SSPRKMSVS32, - SSPRK54, SSPRK53_2N1, SSPRK104, SSPRK932, SSPRKMSVS43, SSPRK73, - SSPRK53_H, - SSPRK33, KYKSSPRK42, KYK2014DGSSPRK_3S2 + SSPRK432, SSPRKMSVS32, + SSPRK54, SSPRK53_2N1, SSPRK104, SSPRK932, SSPRKMSVS43, SSPRK73, + SSPRK53_H, + SSPRK33, KYKSSPRK42, KYK2014DGSSPRK_3S2 export OrdinaryDiffEqSSPRK, SSPRK53_2N2, SSPRK22, SSPRK53, SSPRK63, SSPRK83, SSPRK43, - SSPRK432, SSPRKMSVS32, - SSPRK54, SSPRK53_2N1, SSPRK104, SSPRK932, SSPRKMSVS43, SSPRK73, SSPRK53_H, - SSPRK33, KYKSSPRK42, KYK2014DGSSPRK_3S2 + SSPRK432, SSPRKMSVS32, + SSPRK54, SSPRK53_2N1, SSPRK104, SSPRK932, SSPRKMSVS43, SSPRK73, SSPRK53_H, + SSPRK33, KYKSSPRK42, KYK2014DGSSPRK_3S2 import OrdinaryDiffEqFeagin: OrdinaryDiffEqFeagin using OrdinaryDiffEqFeagin: Feagin10, Feagin12, Feagin14 @@ -106,29 +106,29 @@ export OrdinaryDiffEqFeagin, Feagin10, Feagin12, Feagin14 import OrdinaryDiffEqSymplecticRK: OrdinaryDiffEqSymplecticRK using OrdinaryDiffEqSymplecticRK: SymplecticEuler, VelocityVerlet, VerletLeapfrog, - LeapfrogDriftKickDrift, - PseudoVerletLeapfrog, McAte2, Ruth3, McAte3, CandyRoz4, - McAte4, McAte42, McAte5, - CalvoSanz4, Yoshida6, KahanLi6, McAte8, KahanLi8, SofSpa10 + LeapfrogDriftKickDrift, + PseudoVerletLeapfrog, McAte2, Ruth3, McAte3, CandyRoz4, + McAte4, McAte42, McAte5, + CalvoSanz4, Yoshida6, KahanLi6, McAte8, KahanLi8, SofSpa10 export OrdinaryDiffEqSymplecticRK, SymplecticEuler, VelocityVerlet, VerletLeapfrog, - LeapfrogDriftKickDrift, - PseudoVerletLeapfrog, McAte2, Ruth3, McAte3, CandyRoz4, McAte4, McAte42, McAte5, - CalvoSanz4, Yoshida6, KahanLi6, McAte8, KahanLi8, SofSpa10 + LeapfrogDriftKickDrift, + PseudoVerletLeapfrog, McAte2, Ruth3, McAte3, CandyRoz4, McAte4, McAte42, McAte5, + CalvoSanz4, Yoshida6, KahanLi6, McAte8, KahanLi8, SofSpa10 import OrdinaryDiffEqRKN: OrdinaryDiffEqRKN using OrdinaryDiffEqRKN: Nystrom4, FineRKN4, FineRKN5, Nystrom4VelocityIndependent, - Nystrom5VelocityIndependent, - IRKN3, IRKN4, DPRKN4, DPRKN5, DPRKN6, DPRKN6FM, DPRKN8, DPRKN12, - ERKN4, ERKN5, ERKN7, - RKN4 + Nystrom5VelocityIndependent, + IRKN3, IRKN4, DPRKN4, DPRKN5, DPRKN6, DPRKN6FM, DPRKN8, DPRKN12, + ERKN4, ERKN5, ERKN7, + RKN4 export OrdinaryDiffEqRKN, Nystrom4, FineRKN4, FineRKN5, Nystrom4VelocityIndependent, - Nystrom5VelocityIndependent, - IRKN3, IRKN4, DPRKN4, DPRKN5, DPRKN6, DPRKN6FM, DPRKN8, DPRKN12, ERKN4, ERKN5, ERKN7, - RKN4 + Nystrom5VelocityIndependent, + IRKN3, IRKN4, DPRKN4, DPRKN5, DPRKN6, DPRKN6FM, DPRKN8, DPRKN12, ERKN4, ERKN5, ERKN7, + RKN4 import OrdinaryDiffEqVerner: OrdinaryDiffEqVerner using OrdinaryDiffEqVerner: Vern6, Vern7, Vern8, Vern9, AutoVern6, AutoVern7, AutoVern8, - AutoVern9 + AutoVern9 export OrdinaryDiffEqVerner, Vern6, Vern7, Vern8, Vern9 import OrdinaryDiffEqHighOrderRK: OrdinaryDiffEqHighOrderRK @@ -137,27 +137,27 @@ export OrdinaryDiffEqHighOrderRK, TanYam7, DP8, PFRK87, TsitPap8 import OrdinaryDiffEqSDIRK: OrdinaryDiffEqSDIRK using OrdinaryDiffEqSDIRK: ImplicitEuler, ImplicitMidpoint, Trapezoid, TRBDF2, SDIRK2, - SDIRK22, - Kvaerno3, KenCarp3, Cash4, Hairer4, Hairer42, SSPSDIRK2, - Kvaerno4, - Kvaerno5, KenCarp4, KenCarp47, KenCarp5, KenCarp58, - ESDIRK54I8L2SA, SFSDIRK4, - SFSDIRK5, CFNLIRK3, SFSDIRK6, SFSDIRK7, SFSDIRK8, - ESDIRK436L2SA2, ESDIRK437L2SA, ESDIRK547L2SA2, ESDIRK659L2SA + SDIRK22, + Kvaerno3, KenCarp3, Cash4, Hairer4, Hairer42, SSPSDIRK2, + Kvaerno4, + Kvaerno5, KenCarp4, KenCarp47, KenCarp5, KenCarp58, + ESDIRK54I8L2SA, SFSDIRK4, + SFSDIRK5, CFNLIRK3, SFSDIRK6, SFSDIRK7, SFSDIRK8, + ESDIRK436L2SA2, ESDIRK437L2SA, ESDIRK547L2SA2, ESDIRK659L2SA export OrdinaryDiffEqSDIRK, ImplicitEuler, ImplicitMidpoint, Trapezoid, TRBDF2, SDIRK2, - SDIRK22, - Kvaerno3, KenCarp3, Cash4, Hairer4, Hairer42, SSPSDIRK2, Kvaerno4, - Kvaerno5, KenCarp4, KenCarp47, KenCarp5, KenCarp58, ESDIRK54I8L2SA, SFSDIRK4, - SFSDIRK5, CFNLIRK3, SFSDIRK6, SFSDIRK7, SFSDIRK8, - ESDIRK436L2SA2, ESDIRK437L2SA, ESDIRK547L2SA2, ESDIRK659L2SA + SDIRK22, + Kvaerno3, KenCarp3, Cash4, Hairer4, Hairer42, SSPSDIRK2, Kvaerno4, + Kvaerno5, KenCarp4, KenCarp47, KenCarp5, KenCarp58, ESDIRK54I8L2SA, SFSDIRK4, + SFSDIRK5, CFNLIRK3, SFSDIRK6, SFSDIRK7, SFSDIRK8, + ESDIRK436L2SA2, ESDIRK437L2SA, ESDIRK547L2SA2, ESDIRK659L2SA import OrdinaryDiffEqBDF: OrdinaryDiffEqBDF using OrdinaryDiffEqBDF: ABDF2, QNDF1, QBDF1, QNDF2, QBDF2, QNDF, QBDF, FBDF, - SBDF2, SBDF3, SBDF4, MEBDF2, IMEXEuler, IMEXEulerARK, - DImplicitEuler, DABDF2, DFBDF + SBDF2, SBDF3, SBDF4, MEBDF2, IMEXEuler, IMEXEulerARK, + DImplicitEuler, DABDF2, DFBDF export OrdinaryDiffEqBDF, ABDF2, QNDF1, QBDF1, QNDF2, QBDF2, QNDF, QBDF, FBDF, - SBDF2, SBDF3, SBDF4, MEBDF2, IMEXEuler, IMEXEulerARK, - DImplicitEuler, DABDF2, DFBDF + SBDF2, SBDF3, SBDF4, MEBDF2, IMEXEuler, IMEXEulerARK, + DImplicitEuler, DABDF2, DFBDF import OrdinaryDiffEqTsit5: OrdinaryDiffEqTsit5 using OrdinaryDiffEqTsit5: Tsit5, AutoTsit5 @@ -165,21 +165,21 @@ export OrdinaryDiffEqTsit5, Tsit5, AutoTsit5 import OrdinaryDiffEqRosenbrock: OrdinaryDiffEqRosenbrock using OrdinaryDiffEqRosenbrock: Rosenbrock23, Rosenbrock32, RosShamp4, Veldd4, Velds4, - GRK4T, GRK4A, - Ros4LStab, ROS3P, Rodas3, Rodas23W, Rodas3P, Rodas4, - Rodas42, Rodas4P, Rodas4P2, - Rodas5, Rodas5P, Rodas5Pe, Rodas5Pr, - RosenbrockW6S4OS, ROS34PW1a, ROS34PW1b, ROS34PW2, ROS34PW3, - ROS34PRw, ROS3PRL, - ROS3PRL2, ROK4a, - ROS2, ROS2PR, ROS2S, ROS3, ROS3PR, Scholz4_7 + GRK4T, GRK4A, + Ros4LStab, ROS3P, Rodas3, Rodas23W, Rodas3P, Rodas4, + Rodas42, Rodas4P, Rodas4P2, + Rodas5, Rodas5P, Rodas5Pe, Rodas5Pr, + RosenbrockW6S4OS, ROS34PW1a, ROS34PW1b, ROS34PW2, ROS34PW3, + ROS34PRw, ROS3PRL, + ROS3PRL2, ROK4a, + ROS2, ROS2PR, ROS2S, ROS3, ROS3PR, Scholz4_7 export OrdinaryDiffEqRosenbrock, Rosenbrock23, Rosenbrock32, RosShamp4, Veldd4, Velds4, - GRK4T, GRK4A, - Ros4LStab, ROS3P, Rodas3, Rodas23W, Rodas3P, Rodas4, Rodas42, Rodas4P, Rodas4P2, - Rodas5, Rodas5P, Rodas5Pe, Rodas5Pr, - RosenbrockW6S4OS, ROS34PW1a, ROS34PW1b, ROS34PW2, ROS34PW3, ROS34PRw, ROS3PRL, - ROS3PRL2, ROK4a, - ROS2, ROS2PR, ROS2S, ROS3, ROS3PR, Scholz4_7 + GRK4T, GRK4A, + Ros4LStab, ROS3P, Rodas3, Rodas23W, Rodas3P, Rodas4, Rodas42, Rodas4P, Rodas4P2, + Rodas5, Rodas5P, Rodas5Pe, Rodas5Pr, + RosenbrockW6S4OS, ROS34PW1a, ROS34PW1b, ROS34PW2, ROS34PW3, ROS34PRw, ROS3PRL, + ROS3PRL2, ROK4a, + ROS2, ROS2PR, ROS2S, ROS3, ROS3PR, Scholz4_7 import OrdinaryDiffEqDefault: OrdinaryDiffEqDefault using OrdinaryDiffEqDefault: DefaultODEAlgorithm @@ -203,15 +203,15 @@ export OrdinaryDiffEqPRK, KuttaPRK2p5 import OrdinaryDiffEqLowOrderRK: OrdinaryDiffEqLowOrderRK using OrdinaryDiffEqLowOrderRK: Euler, SplitEuler, Heun, Ralston, Midpoint, RK4, - BS3, OwrenZen3, OwrenZen4, OwrenZen5, BS5, - DP5, Anas5, RKO65, FRK65, RKM, MSRK5, MSRK6, - PSRK4p7q6, PSRK3p5q4, PSRK3p6q5, Stepanov5, SIR54, - Alshina2, Alshina3, Alshina6, AutoDP5 + BS3, OwrenZen3, OwrenZen4, OwrenZen5, BS5, + DP5, Anas5, RKO65, FRK65, RKM, MSRK5, MSRK6, + PSRK4p7q6, PSRK3p5q4, PSRK3p6q5, Stepanov5, SIR54, + Alshina2, Alshina3, Alshina6, AutoDP5 export OrdinaryDiffEqLowOrderRK, Euler, SplitEuler, Heun, Ralston, Midpoint, RK4, - BS3, OwrenZen3, OwrenZen4, OwrenZen5, BS5, - DP5, Anas5, RKO65, FRK65, RKM, MSRK5, MSRK6, - PSRK4p7q6, PSRK3p5q4, PSRK3p6q5, Stepanov5, SIR54, - Alshina2, Alshina3, Alshina6, AutoDP5 + BS3, OwrenZen3, OwrenZen4, OwrenZen5, BS5, + DP5, Anas5, RKO65, FRK65, RKM, MSRK5, MSRK6, + PSRK4p7q6, PSRK3p5q4, PSRK3p6q5, Stepanov5, SIR54, + Alshina2, Alshina3, Alshina6, AutoDP5 import OrdinaryDiffEqFunctionMap: OrdinaryDiffEqFunctionMap using OrdinaryDiffEqFunctionMap: FunctionMap @@ -219,9 +219,9 @@ export OrdinaryDiffEqFunctionMap, FunctionMap import OrdinaryDiffEqAdamsBashforthMoulton: OrdinaryDiffEqAdamsBashforthMoulton using OrdinaryDiffEqAdamsBashforthMoulton: AB3, AB4, AB5, ABM32, ABM43, ABM54, VCAB3, - VCAB4, VCAB5, VCABM3, VCABM4, VCABM5, VCABM + VCAB4, VCAB5, VCABM3, VCABM4, VCABM5, VCABM export OrdinaryDiffEqAdamsBashforthMoulton, AB3, AB4, AB5, ABM32, ABM43, ABM54, VCAB3, - VCAB4, VCAB5, VCABM3, VCABM4, VCABM5, VCABM + VCAB4, VCAB5, VCABM3, VCABM4, VCABM5, VCABM import OrdinaryDiffEqNordsieck: OrdinaryDiffEqNordsieck using OrdinaryDiffEqNordsieck: AN5, JVODE, JVODE_Adams, JVODE_BDF @@ -233,14 +233,14 @@ export OrdinaryDiffEqExplicitRK, ExplicitRK import OrdinaryDiffEqLinear: OrdinaryDiffEqLinear using OrdinaryDiffEqLinear: MagnusMidpoint, LinearExponential, MagnusLeapfrog, LieEuler, - CayleyEuler, - MagnusGauss4, MagnusNC6, MagnusGL6, MagnusGL8, MagnusNC8, - MagnusGL4, - MagnusAdapt4, RKMK2, RKMK4, LieRK4, CG2, CG3, CG4a + CayleyEuler, + MagnusGauss4, MagnusNC6, MagnusGL6, MagnusGL8, MagnusNC8, + MagnusGL4, + MagnusAdapt4, RKMK2, RKMK4, LieRK4, CG2, CG3, CG4a export OrdinaryDiffEqLinear, MagnusMidpoint, LinearExponential, MagnusLeapfrog, LieEuler, - CayleyEuler, - MagnusGauss4, MagnusNC6, MagnusGL6, MagnusGL8, MagnusNC8, MagnusGL4, - MagnusAdapt4, RKMK2, RKMK4, LieRK4, CG2, CG3, CG4a + CayleyEuler, + MagnusGauss4, MagnusNC6, MagnusGL6, MagnusGL8, MagnusNC8, MagnusGL4, + MagnusAdapt4, RKMK2, RKMK4, LieRK4, CG2, CG3, CG4a import OrdinaryDiffEqIMEXMultistep: OrdinaryDiffEqIMEXMultistep using OrdinaryDiffEqIMEXMultistep: CNAB2, CNLF2 @@ -248,14 +248,14 @@ export OrdinaryDiffEqIMEXMultistep, CNAB2, CNLF2 import OrdinaryDiffEqExponentialRK: OrdinaryDiffEqExponentialRK using OrdinaryDiffEqExponentialRK: LawsonEuler, NorsettEuler, ETD1, ETDRK2, ETDRK3, ETDRK4, - HochOst4, Exp4, EPIRK4s3A, - EPIRK4s3B, - EPIRK5s3, EXPRB53s3, EPIRK5P1, EPIRK5P2, ETD2, Exprb32, - Exprb43 + HochOst4, Exp4, EPIRK4s3A, + EPIRK4s3B, + EPIRK5s3, EXPRB53s3, EPIRK5P1, EPIRK5P2, ETD2, Exprb32, + Exprb43 export OrdinaryDiffEqExponentialRK, LawsonEuler, NorsettEuler, ETD1, ETDRK2, ETDRK3, ETDRK4, - HochOst4, Exp4, EPIRK4s3A, - EPIRK4s3B, - EPIRK5s3, EXPRB53s3, EPIRK5P1, EPIRK5P2, ETD2, Exprb32, Exprb43 + HochOst4, Exp4, EPIRK4s3A, + EPIRK4s3B, + EPIRK5s3, EXPRB53s3, EPIRK5P1, EPIRK5P2, ETD2, Exprb32, Exprb43 import PrecompileTools import Preferences diff --git a/test/algconvergence/non-autonomous_convergence_tests.jl b/test/algconvergence/non-autonomous_convergence_tests.jl index cb1d4bc0e7..8db3defdb6 100644 --- a/test/algconvergence/non-autonomous_convergence_tests.jl +++ b/test/algconvergence/non-autonomous_convergence_tests.jl @@ -2,78 +2,93 @@ using OrdinaryDiffEq, DiffEqDevTools, Test function nonauto1(u, p, t) x, _ = u - [t * x - 0] + return [ + t * x + 0 + ] end function nonauto2(u, p, t) _, y = u - [ + return [ y, - t * y + t * y, ] end function analytic(u0, p, t) x0, y0 = u0 et = exp(t^2 / 2) - [ + return [ et * (x0 + t * y0), - et * y0 + et * y0, ] end u0 = [1.1, 2.2] tspan = (0.0, 1.0) prob1 = ODEProblem( - ODEFunction{true}((du, u, p, t) -> du .= nonauto1(u, p, t) .+ - nonauto2(u, p, t), - analytic = analytic), - u0, tspan) + ODEFunction{true}( + (du, u, p, t) -> du .= nonauto1(u, p, t) .+ + nonauto2(u, p, t), + analytic = analytic + ), + u0, tspan +) prob2 = ODEProblem( - ODEFunction{false}((u, p, t) -> nonauto1(u, p, t) .+ nonauto2(u, p, t), - analytic = analytic), - u0, tspan) + ODEFunction{false}( + (u, p, t) -> nonauto1(u, p, t) .+ nonauto2(u, p, t), + analytic = analytic + ), + u0, tspan +) prob3 = SplitODEProblem( - SplitFunction{true}((du, u, p, t) -> du .= nonauto1(u, p, t), + SplitFunction{true}( + (du, u, p, t) -> du .= nonauto1(u, p, t), (du, u, p, t) -> du .= nonauto2(u, p, t), - analytic = analytic), - u0, tspan) -prob4 = SplitODEProblem(SplitFunction{false}(nonauto1, + analytic = analytic + ), + u0, tspan +) +prob4 = SplitODEProblem( + SplitFunction{false}( + nonauto1, nonauto2, - analytic = analytic), - u0, tspan) + analytic = analytic + ), + u0, tspan +) testTol = 0.2 -kwargs = (reltol = 1e-16, abstol = 1e-16) +kwargs = (reltol = 1.0e-16, abstol = 1.0e-16) for prob in [prob1, prob2, prob3, prob4] dts = 1 .// 2 .^ (12:-1:8) sim = test_convergence(dts, prob, KenCarp3(); kwargs...) - @test sim.𝒪est[:l∞]≈3 atol=testTol + @test sim.𝒪est[:l∞] ≈ 3 atol = testTol dts = 1 .// 2 .^ (9:-1:6) sim = test_convergence(dts, prob, CFNLIRK3(); kwargs...) - @test sim.𝒪est[:l∞]≈3 atol=testTol + @test sim.𝒪est[:l∞] ≈ 3 atol = testTol sim = test_convergence(dts, prob, KenCarp4(); kwargs...) - @test sim.𝒪est[:l∞]≈4 atol=testTol + @test sim.𝒪est[:l∞] ≈ 4 atol = testTol sim = test_convergence(dts, prob, KenCarp47(); kwargs...) - @test sim.𝒪est[:l∞]≈4 atol=testTol + @test sim.𝒪est[:l∞] ≈ 4 atol = testTol dts = 1 .// 2 .^ (7:-1:4) sim = test_convergence(dts, prob, KenCarp5(); kwargs...) - @test sim.𝒪est[:l∞]≈5 atol=testTol + @test sim.𝒪est[:l∞] ≈ 5 atol = testTol sim = test_convergence(dts, prob, KenCarp58(); kwargs...) - @test sim.𝒪est[:l∞]≈5 atol=testTol + @test sim.𝒪est[:l∞] ≈ 5 atol = testTol end for prob in [prob1, prob2] dts = 1 .// 2 .^ (7:-1:4) sim = test_convergence(dts, prob, ESDIRK54I8L2SA(); kwargs...) - @test sim.𝒪est[:l∞]≈5 atol=testTol + @test sim.𝒪est[:l∞] ≈ 5 atol = testTol dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, Rodas4(); kwargs...) - @test sim.𝒪est[:l∞]≈4 atol=testTol + 0.1 + @test sim.𝒪est[:l∞] ≈ 4 atol = testTol + 0.1 dts = 1 .// 2 .^ (7:-1:3) sim = test_convergence(dts, prob, Rodas5(); kwargs...) - @test sim.𝒪est[:l∞]≈5 atol=testTol + 0.1 + @test sim.𝒪est[:l∞] ≈ 5 atol = testTol + 0.1 end #= diff --git a/test/algconvergence/split_methods_tests.jl b/test/algconvergence/split_methods_tests.jl index b106fbf715..f8a71a6d83 100644 --- a/test/algconvergence/split_methods_tests.jl +++ b/test/algconvergence/split_methods_tests.jl @@ -50,77 +50,78 @@ prob = SplitODEProblem(ff_split, 1.0, (0.0, 1.0)) sol = solve(prob, KenCarp3()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp3()) -@test sim.𝒪est[:l∞]≈3 atol=testTol +@test sim.𝒪est[:l∞] ≈ 3 atol = testTol dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, CFNLIRK3()) -@test sim.𝒪est[:l∞]≈3 atol=testTol +@test sim.𝒪est[:l∞] ≈ 3 atol = testTol sol = solve( - prob, KenCarp3(nlsolve = OrdinaryDiffEq.OrdinaryDiffEqNonlinearSolve.NLFunctional())) + prob, KenCarp3(nlsolve = OrdinaryDiffEq.OrdinaryDiffEqNonlinearSolve.NLFunctional()) +) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp3()) -@test sim.𝒪est[:l∞]≈3 atol=testTol +@test sim.𝒪est[:l∞] ≈ 3 atol = testTol sol = solve(prob, KenCarp4()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp4()) -@test sim.𝒪est[:l∞]≈4 atol=testTol +@test sim.𝒪est[:l∞] ≈ 4 atol = testTol sol = solve(prob, KenCarp5()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp5()) -@test sim.𝒪est[:l∞]≈5 atol=testTol +@test sim.𝒪est[:l∞] ≈ 5 atol = testTol sol = solve(prob, KenCarp47()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp47()) -@test sim.𝒪est[:l∞]≈4 atol=testTol +@test sim.𝒪est[:l∞] ≈ 4 atol = testTol sol = solve(prob, KenCarp58()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp58()) -@test sim.𝒪est[:l∞]≈5 atol=testTol +@test sim.𝒪est[:l∞] ≈ 5 atol = testTol # IMEXEuler dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, IMEXEuler()) -@test sim.𝒪est[:l∞]≈1 atol=testTol +@test sim.𝒪est[:l∞] ≈ 1 atol = testTol # IMEXEulerARK dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, IMEXEulerARK()) -@test sim.𝒪est[:l∞]≈1 atol=testTol +@test sim.𝒪est[:l∞] ≈ 1 atol = testTol # CNAB2 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, CNAB2()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # CNLF2 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, CNLF2()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # SBDF2 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, SBDF2()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # SBDF3 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, SBDF3()) -@test_broken sim.𝒪est[:l∞]≈3 atol=testTol +@test_broken sim.𝒪est[:l∞] ≈ 3 atol = testTol # SBDF4 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, SBDF4()) -@test_broken sim.𝒪est[:l∞]≈4 atol=testTol +@test_broken sim.𝒪est[:l∞] ≈ 4 atol = testTol # IRKC dts = 1 .// 2 .^ (12:-1:8) sim = test_convergence(dts, prob, IRKC()) -@test sim.𝒪est[:l∞]≈1 atol=testTol +@test sim.𝒪est[:l∞] ≈ 1 atol = testTol # Now test only the second part println("Testing only second part of Split ODE") @@ -134,71 +135,71 @@ prob = SplitODEProblem(ff_split2, 1.0, (0.0, 1.0)) sol = solve(prob, KenCarp3()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp3()) -@test sim.𝒪est[:l∞]≈3 atol=testTol +@test sim.𝒪est[:l∞] ≈ 3 atol = testTol dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, CFNLIRK3()) -@test sim.𝒪est[:l∞]≈3 atol=testTol +@test sim.𝒪est[:l∞] ≈ 3 atol = testTol sol = solve(prob, KenCarp4()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp4()) -@test sim.𝒪est[:l∞]≈4 atol=testTol +@test sim.𝒪est[:l∞] ≈ 4 atol = testTol sol = solve(prob, KenCarp5()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp5()) -@test sim.𝒪est[:l∞]≈5 atol=testTol +@test sim.𝒪est[:l∞] ≈ 5 atol = testTol sol = solve(prob, KenCarp47()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp47()) -@test sim.𝒪est[:l∞]≈4 atol=testTol +@test sim.𝒪est[:l∞] ≈ 4 atol = testTol sol = solve(prob, KenCarp58()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp58()) -@test sim.𝒪est[:l∞]≈5 atol=testTol +@test sim.𝒪est[:l∞] ≈ 5 atol = testTol # IMEXEuler dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, IMEXEuler()) -@test sim.𝒪est[:l∞]≈1 atol=testTol +@test sim.𝒪est[:l∞] ≈ 1 atol = testTol # IMEXEulerARK dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, IMEXEulerARK()) -@test sim.𝒪est[:l∞]≈1 atol=testTol +@test sim.𝒪est[:l∞] ≈ 1 atol = testTol # CNAB2 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, CNAB2()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # CNLF2 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, CNLF2()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # SBDF2 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, SBDF2()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # SBDF3 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, SBDF3()) -@test_broken sim.𝒪est[:l∞]≈3 atol=testTol +@test_broken sim.𝒪est[:l∞] ≈ 3 atol = testTol # SBDF4 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, SBDF4()) -@test_broken sim.𝒪est[:l∞]≈4 atol=testTol +@test_broken sim.𝒪est[:l∞] ≈ 4 atol = testTol # IRKC dts = 1 .// 2 .^ (12:-1:8) sim = test_convergence(dts, prob, IRKC()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # Test together println("Testing both parts of Split ODE together") @@ -212,71 +213,71 @@ prob = SplitODEProblem(ff_split3, 1.0, (0.0, 1.0)) sol = solve(prob, KenCarp3()) dts = 1 .// 2 .^ (12:-1:8) sim = test_convergence(dts, prob, KenCarp3()) -@test sim.𝒪est[:l∞]≈3 atol=testTol +@test sim.𝒪est[:l∞] ≈ 3 atol = testTol dts = 1 .// 2 .^ (12:-1:8) sim = test_convergence(dts, prob, CFNLIRK3()) -@test sim.𝒪est[:l∞]≈3 atol=testTol +@test sim.𝒪est[:l∞] ≈ 3 atol = testTol sol = solve(prob, KenCarp4()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp4()) -@test sim.𝒪est[:l∞]≈4 atol=testTol +@test sim.𝒪est[:l∞] ≈ 4 atol = testTol sol = solve(prob, KenCarp5()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp5()) -@test sim.𝒪est[:l∞]≈5 atol=testTol +@test sim.𝒪est[:l∞] ≈ 5 atol = testTol sol = solve(prob, KenCarp47()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp47()) -@test sim.𝒪est[:l∞]≈4 atol=testTol +@test sim.𝒪est[:l∞] ≈ 4 atol = testTol sol = solve(prob, KenCarp58()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp58()) -@test sim.𝒪est[:l∞]≈5 atol=testTol +@test sim.𝒪est[:l∞] ≈ 5 atol = testTol # IMEXEuler dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, IMEXEuler()) -@test sim.𝒪est[:l∞]≈1 atol=testTol +@test sim.𝒪est[:l∞] ≈ 1 atol = testTol # IMEXEulerARK dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, IMEXEulerARK()) -@test sim.𝒪est[:l∞]≈1 atol=testTol +@test sim.𝒪est[:l∞] ≈ 1 atol = testTol # CNAB2 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, CNAB2()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # CNLF2 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, CNLF2()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # SBDF2 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, SBDF2()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # SBDF3 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, SBDF3()) -@test_broken sim.𝒪est[:l∞]≈3 atol=testTol +@test_broken sim.𝒪est[:l∞] ≈ 3 atol = testTol # SBDF4 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, SBDF4()) -@test_broken sim.𝒪est[:l∞]≈4 atol=testTol +@test_broken sim.𝒪est[:l∞] ≈ 4 atol = testTol # IRKC dts = 1 .// 2 .^ (12:-1:8) sim = test_convergence(dts, prob, IRKC()) -@test sim.𝒪est[:l∞]≈1 atol=testTol +@test sim.𝒪est[:l∞] ≈ 1 atol = testTol println("IIP Tests") # Now test only the first part @@ -291,56 +292,56 @@ prob = SplitODEProblem(ff_split4, rand(4, 2), (0.0, 1.0)) sol = solve(prob, KenCarp3()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp3()) -@test sim.𝒪est[:l∞]≈3 atol=testTol +@test sim.𝒪est[:l∞] ≈ 3 atol = testTol dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, CFNLIRK3()) -@test sim.𝒪est[:l∞]≈3 atol=testTol +@test sim.𝒪est[:l∞] ≈ 3 atol = testTol sol = solve(prob, KenCarp4()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp4()) -@test sim.𝒪est[:l∞]≈4 atol=testTol +@test sim.𝒪est[:l∞] ≈ 4 atol = testTol sol = solve(prob, KenCarp5()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp5()) -@test sim.𝒪est[:l∞]≈5 atol=testTol +@test sim.𝒪est[:l∞] ≈ 5 atol = testTol sol = solve(prob, KenCarp47()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp47()) -@test sim.𝒪est[:l∞]≈4 atol=testTol +@test sim.𝒪est[:l∞] ≈ 4 atol = testTol sol = solve(prob, KenCarp58()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp58()) -@test sim.𝒪est[:l∞]≈5 atol=testTol +@test sim.𝒪est[:l∞] ≈ 5 atol = testTol # IMEXEuler dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, IMEXEuler()) -@test sim.𝒪est[:l∞]≈1 atol=testTol +@test sim.𝒪est[:l∞] ≈ 1 atol = testTol # IMEXEulerARK dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, IMEXEulerARK()) -@test sim.𝒪est[:l∞]≈1 atol=testTol +@test sim.𝒪est[:l∞] ≈ 1 atol = testTol # CNAB2 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, CNAB2()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # CNLF2 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, CNLF2()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # SBDF2 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, SBDF2()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # SBDF3 dts = 1 .// 2 .^ (8:-1:4) @@ -350,12 +351,12 @@ sim = test_convergence(dts, prob, SBDF3()) # SBDF4 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, SBDF4()) -@test_broken sim.𝒪est[:l∞]≈4 atol=testTol +@test_broken sim.𝒪est[:l∞] ≈ 4 atol = testTol # IRKC dts = 1 .// 2 .^ (12:-1:8) sim = test_convergence(dts, prob, IRKC()) -@test sim.𝒪est[:l∞]≈1 atol=testTol +@test sim.𝒪est[:l∞] ≈ 1 atol = testTol # Now test only the second part println("Testing only second part of Split ODE") @@ -369,71 +370,71 @@ prob = SplitODEProblem(ff_split5, rand(4, 2), (0.0, 1.0)) sol = solve(prob, KenCarp3()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp3()) -@test sim.𝒪est[:l∞]≈3 atol=testTol +@test sim.𝒪est[:l∞] ≈ 3 atol = testTol dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, CFNLIRK3()) -@test sim.𝒪est[:l∞]≈3 atol=testTol +@test sim.𝒪est[:l∞] ≈ 3 atol = testTol sol = solve(prob, KenCarp4()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp4()) -@test sim.𝒪est[:l∞]≈4 atol=testTol +@test sim.𝒪est[:l∞] ≈ 4 atol = testTol sol = solve(prob, KenCarp5()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp5()) -@test sim.𝒪est[:l∞]≈5 atol=testTol +@test sim.𝒪est[:l∞] ≈ 5 atol = testTol sol = solve(prob, KenCarp47()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp47()) -@test sim.𝒪est[:l∞]≈4 atol=testTol +@test sim.𝒪est[:l∞] ≈ 4 atol = testTol sol = solve(prob, KenCarp58()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp58()) -@test sim.𝒪est[:l∞]≈5 atol=testTol +@test sim.𝒪est[:l∞] ≈ 5 atol = testTol # IMEXEuler dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, IMEXEuler()) -@test sim.𝒪est[:l∞]≈1 atol=testTol +@test sim.𝒪est[:l∞] ≈ 1 atol = testTol # IMEXEulerARK dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, IMEXEulerARK()) -@test sim.𝒪est[:l∞]≈1 atol=testTol +@test sim.𝒪est[:l∞] ≈ 1 atol = testTol # CNAB2 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, CNAB2()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # CNLF2 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, CNLF2()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # SBDF2 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, SBDF2()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # SBDF3 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, SBDF3()) -@test_broken sim.𝒪est[:l∞]≈3 atol=testTol +@test_broken sim.𝒪est[:l∞] ≈ 3 atol = testTol # SBDF4 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, SBDF4()) -@test_broken sim.𝒪est[:l∞]≈4 atol=testTol +@test_broken sim.𝒪est[:l∞] ≈ 4 atol = testTol # IRKC dts = 1 .// 2 .^ (12:-1:8) sim = test_convergence(dts, prob, IRKC()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # Test together println("Testing both parts of Split ODE together") @@ -447,68 +448,68 @@ prob = SplitODEProblem(ff_split6, rand(4, 2), (0.0, 1.0)) sol = solve(prob, KenCarp3()) dts = 1 .// 2 .^ (12:-1:8) sim = test_convergence(dts, prob, KenCarp3()) -@test sim.𝒪est[:l∞]≈3 atol=testTol +@test sim.𝒪est[:l∞] ≈ 3 atol = testTol dts = 1 .// 2 .^ (12:-1:8) sim = test_convergence(dts, prob, CFNLIRK3()) -@test sim.𝒪est[:l∞]≈3 atol=testTol +@test sim.𝒪est[:l∞] ≈ 3 atol = testTol sol = solve(prob, KenCarp4()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp4()) -@test sim.𝒪est[:l∞]≈4 atol=testTol +@test sim.𝒪est[:l∞] ≈ 4 atol = testTol sol = solve(prob, KenCarp5()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp5()) -@test sim.𝒪est[:l∞]≈5 atol=testTol +@test sim.𝒪est[:l∞] ≈ 5 atol = testTol sol = solve(prob, KenCarp47()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp47()) -@test sim.𝒪est[:l∞]≈4 atol=testTol +@test sim.𝒪est[:l∞] ≈ 4 atol = testTol sol = solve(prob, KenCarp58()) dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, KenCarp58()) -@test sim.𝒪est[:l∞]≈5 atol=testTol +@test sim.𝒪est[:l∞] ≈ 5 atol = testTol # IMEXEuler dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, IMEXEuler()) -@test sim.𝒪est[:l∞]≈1 atol=testTol +@test sim.𝒪est[:l∞] ≈ 1 atol = testTol # IMEXEulerARK dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, IMEXEulerARK()) -@test sim.𝒪est[:l∞]≈1 atol=testTol +@test sim.𝒪est[:l∞] ≈ 1 atol = testTol # CNAB2 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, CNAB2()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # CNLF2 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, CNLF2()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # SBDF2 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, SBDF2()) -@test sim.𝒪est[:l∞]≈2 atol=testTol +@test sim.𝒪est[:l∞] ≈ 2 atol = testTol # SBDF3 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, SBDF3()) -@test_broken sim.𝒪est[:l∞]≈3 atol=testTol +@test_broken sim.𝒪est[:l∞] ≈ 3 atol = testTol # SBDF4 dts = 1 .// 2 .^ (8:-1:4) sim = test_convergence(dts, prob, SBDF4()) -@test_broken sim.𝒪est[:l∞]≈4 atol=testTol +@test_broken sim.𝒪est[:l∞] ≈ 4 atol = testTol # IRKC dts = 1 .// 2 .^ (12:-1:8) sim = test_convergence(dts, prob, IRKC()) -@test sim.𝒪est[:l∞]≈1 atol=testTol +@test sim.𝒪est[:l∞] ≈ 1 atol = testTol diff --git a/test/downstream/delaydiffeq.jl b/test/downstream/delaydiffeq.jl index 58228780d2..ee1ae19735 100644 --- a/test/downstream/delaydiffeq.jl +++ b/test/downstream/delaydiffeq.jl @@ -7,7 +7,8 @@ using Test # disable reuse nlsolve = nlsolve = NLNewton(fast_convergence_cutoff = 0) - algdict = Dict(BS3() => 2.4e-6, + algdict = Dict( + BS3() => 2.4e-6, Tsit5() => 4.5e-3, RK4() => 1.1e-4, Vern6() => 1.0e-3, @@ -15,7 +16,8 @@ using Test TRBDF2(nlsolve = nlsolve) => 6.2e-2, KenCarp4(nlsolve = nlsolve) => 5.6e-2, Rosenbrock23() => 6.5e-4, - Rodas4() => 5.4e-4) + Rodas4() => 5.4e-4 + ) for (alg, error) in algdict ddealg = MethodOfSteps(alg) @@ -24,8 +26,8 @@ using Test @test sol.errors[:l∞] < error sol_scalar = solve(prob_scalar, ddealg) - @test sol.t≈sol_scalar.t atol=1e-3 - @test sol[1, :]≈sol_scalar.u atol=1e-3 + @test sol.t ≈ sol_scalar.t atol = 1.0e-3 + @test sol[1, :] ≈ sol_scalar.u atol = 1.0e-3 end end @@ -35,7 +37,7 @@ function lotka_volterra!(du, u, h, p, t) 🕥🐰 = h(p, t - τ; idxs = 1) du[1] = d🐰 = α * 🕥🐰 - β * 🐺 * 🐰 du[2] = d🐺 = γ * 🐺 * 🐰 - δ * 🐺 - nothing + return nothing end uₒ = [1.0, 1.0] tspan = (0.0, 10.0) diff --git a/test/downstream/mooncake.jl b/test/downstream/mooncake.jl index 8bffc9f8fd..48059d5f31 100644 --- a/test/downstream/mooncake.jl +++ b/test/downstream/mooncake.jl @@ -3,16 +3,16 @@ using Mooncake, OrdinaryDiffEq, StaticArrays function lorenz!(du, u, p, t) du[1] = 10.0(u[2] - u[1]) du[2] = u[1] * (28.0 - u[3]) - u[2] - du[3] = u[1] * u[2] - (8 / 3) * u[3] + return du[3] = u[1] * u[2] - (8 / 3) * u[3] end -const _saveat = SA[0.0,0.25,0.5,0.75,1.0,1.25,1.5,1.75,2.0,2.25,2.5,2.75,3.0] +const _saveat = SA[0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0] function f(u0::Array{Float64}) tspan = (0.0, 3.0) prob = ODEProblem{true, SciMLBase.FullSpecialize}(lorenz!, u0, tspan) sol = SciMLBase.solve(prob, Tsit5(), saveat = _saveat, sensealg = SciMLBase.SensitivityADPassThrough()) - sum(sol) + return sum(sol) end; u0 = [1.0; 0.0; 0.0] mooncake_gradient(f, x) = Mooncake.value_and_gradient!!(Mooncake.build_rrule(f, x), f, x)[2][2] diff --git a/test/downstream/sparsediff_tests.jl b/test/downstream/sparsediff_tests.jl index 12f652c839..7057f71769 100644 --- a/test/downstream/sparsediff_tests.jl +++ b/test/downstream/sparsediff_tests.jl @@ -20,7 +20,7 @@ function f_ip(dx, x, p, t) end dx[1] = -2x[1] + x[2] dx[end] = x[end - 1] - 2x[end] - nothing + return nothing end ## out-of-place @@ -40,7 +40,7 @@ function second_derivative_stencil(N) (j - i == -1 || j - i == 1) && (A[i, j] = 1) j - i == 0 && (A[i, j] = -2) end - A + return A end function generate_sparsity_pattern(N::Integer) @@ -57,8 +57,10 @@ u0 = [1.0, 2.0, 3, 4, 5, 5, 4, 3, 2, 1] tspan = (0.0, 10.0) adchoices = if isempty(VERSION.prerelease) - [AutoForwardDiff(), AutoFiniteDiff(), - AutoEnzyme(mode = Enzyme.Forward, function_annotation = Enzyme.Const)] + [ + AutoForwardDiff(), AutoFiniteDiff(), + AutoEnzyme(mode = Enzyme.Forward, function_annotation = Enzyme.Const), + ] else [AutoForwardDiff(), AutoFiniteDiff()] end @@ -69,23 +71,33 @@ for f in [f_oop, f_ip] for ad in adchoices, linsolve in [nothing, LinearSolve.KrylovJL_GMRES()] for Solver in [Rodas5, Rosenbrock23, Trapezoid, KenCarp4, FBDF] - for tol in [nothing, 1e-10] + for tol in [nothing, 1.0e-10] sol_std = solve(prob_std, Solver(autodiff = ad, linsolve = linsolve), reltol = tol, abstol = tol) @test sol_std.retcode == ReturnCode.Success - for (i, prob) in enumerate(map(f -> ODEProblem(f, u0, tspan), - [ - ODEFunction(f, colorvec = colors, - jac_prototype = jac_sp), - ODEFunction(f, colorvec = colors, - jac_prototype = jac_sp, mass_matrix = I(length(u0))), - ODEFunction(f, jac_prototype = jac_sp), - ODEFunction(f, colorvec = colors, - sparsity = jac_sp) - ])) + for (i, prob) in enumerate( + map( + f -> ODEProblem(f, u0, tspan), + [ + ODEFunction( + f, colorvec = colors, + jac_prototype = jac_sp + ), + ODEFunction( + f, colorvec = colors, + jac_prototype = jac_sp, mass_matrix = I(length(u0)) + ), + ODEFunction(f, jac_prototype = jac_sp), + ODEFunction( + f, colorvec = colors, + sparsity = jac_sp + ), + ] + ) + ) sol = solve(prob, Solver(autodiff = ad, linsolve = linsolve), reltol = tol, abstol = tol) @test sol.retcode == ReturnCode.Success if tol != nothing - @test sol_std.u[end]≈sol.u[end] atol=tol + @test sol_std.u[end] ≈ sol.u[end] atol = tol else @test sol_std.u[end] ≈ sol.u[end] end @@ -117,5 +129,4 @@ jac_prototype = sparse(Diagonal(vcat(1, zeros(9)))) fun = ODEFunction(f; jac, jac_prototype) prob = ODEProblem(fun, u0, (0.0, 1.0)) -@test_nowarn sol = solve(prob, Rodas4(); reltol = 1e-8, abstol = 1e-8) - +@test_nowarn sol = solve(prob, Rodas4(); reltol = 1.0e-8, abstol = 1.0e-8) diff --git a/test/downstream/time_derivative_test.jl b/test/downstream/time_derivative_test.jl index 41662c394b..3557370ae7 100644 --- a/test/downstream/time_derivative_test.jl +++ b/test/downstream/time_derivative_test.jl @@ -5,37 +5,50 @@ adchoices = if isempty(VERSION.prerelease) end function time_derivative(du, u, p, t) - du[1] = -t + return du[1] = -t end function time_derivative_static(u, p, t) - SVector(-t) + return SVector(-t) end function time_derivative_analytic(u0, p, t) - u0 .- t .^ 2 ./ 2 + return u0 .- t .^ 2 ./ 2 end adchoices = if isempty(VERSION.prerelease) - (AutoForwardDiff(), AutoFiniteDiff(), - AutoEnzyme(mode = Enzyme.Forward, function_annotation = Enzyme.Const)) + ( + AutoForwardDiff(), AutoFiniteDiff(), + AutoEnzyme(mode = Enzyme.Forward, function_annotation = Enzyme.Const), + ) else (AutoForwardDiff(), AutoFiniteDiff()) end -const CACHE_TEST_ALGS = [Euler(), Midpoint(), RK4(), SSPRK22(), SSPRK33(), SSPRK53(), +const CACHE_TEST_ALGS = [ + Euler(), Midpoint(), RK4(), SSPRK22(), SSPRK33(), SSPRK53(), SSPRK63(), SSPRK73(), SSPRK83(), SSPRK43(), SSPRK432(), SSPRK932(), SSPRK54(), SSPRK104(), CarpenterKennedy2N54(), BS3(), BS5(), DP5(), DP8(), Feagin10(), Feagin12(), Feagin14(), TanYam7(), Tsit5(), TsitPap8(), Vern6(), Vern7(), Vern8(), Vern9(), OwrenZen3(), OwrenZen4(), - OwrenZen5()] + OwrenZen5(), +] tspan = (0.0, 1.0) for (ff_time_derivative, u0) in ( - (ODEFunction(time_derivative, - analytic = time_derivative_analytic), [1.0]), - (ODEFunction(time_derivative_static, - analytic = time_derivative_analytic), - SVector(1.0))) + ( + ODEFunction( + time_derivative, + analytic = time_derivative_analytic + ), [1.0], + ), + ( + ODEFunction( + time_derivative_static, + analytic = time_derivative_analytic + ), + SVector(1.0), + ), + ) @info "StaticArrays?: $(u0 isa StaticArray)" prob = ODEProblem(ff_time_derivative, u0, tspan) @@ -46,75 +59,75 @@ for (ff_time_derivative, u0) in ( prec = !(_autodiff == AutoFiniteDiff()) @show Rosenbrock23 - sol = solve(prob, Rosenbrock32(autodiff = _autodiff), reltol = 1e-9, abstol = 1e-9) - @test sol.errors[:final] < 1e-5 * 10^(!prec) - sol = solve(prob, Rosenbrock23(autodiff = _autodiff), reltol = 1e-9, abstol = 1e-9) - @test sol.errors[:final] < 1e-10 * 10_000^(!prec) + sol = solve(prob, Rosenbrock32(autodiff = _autodiff), reltol = 1.0e-9, abstol = 1.0e-9) + @test sol.errors[:final] < 1.0e-5 * 10^(!prec) + sol = solve(prob, Rosenbrock23(autodiff = _autodiff), reltol = 1.0e-9, abstol = 1.0e-9) + @test sol.errors[:final] < 1.0e-10 * 10_000^(!prec) @show Rodas4 - sol = solve(prob, Rodas4(autodiff = _autodiff), reltol = 1e-9, abstol = 1e-9) - @test sol.errors[:final] < 1e-10 * 100_000^(!prec) + sol = solve(prob, Rodas4(autodiff = _autodiff), reltol = 1.0e-9, abstol = 1.0e-9) + @test sol.errors[:final] < 1.0e-10 * 100_000^(!prec) @show Rodas5 - sol = solve(prob, Rodas5(autodiff = _autodiff), reltol = 1e-9, abstol = 1e-9) - @test sol.errors[:final] < 1e-10 * 1_000_000_000^(!prec) + sol = solve(prob, Rodas5(autodiff = _autodiff), reltol = 1.0e-9, abstol = 1.0e-9) + @test sol.errors[:final] < 1.0e-10 * 1_000_000_000^(!prec) @show Veldd4 - sol = solve(prob, Veldd4(autodiff = _autodiff), reltol = 1e-9, abstol = 1e-9) - @test sol.errors[:final] < 1e-10 * 100_000^(!prec) + sol = solve(prob, Veldd4(autodiff = _autodiff), reltol = 1.0e-9, abstol = 1.0e-9) + @test sol.errors[:final] < 1.0e-10 * 100_000^(!prec) @show KenCarp3 - sol = solve(prob, KenCarp3(autodiff = _autodiff), reltol = 1e-12, abstol = 1e-12) + sol = solve(prob, KenCarp3(autodiff = _autodiff), reltol = 1.0e-12, abstol = 1.0e-12) @test length(sol) > 2 @test SciMLBase.successful_retcode(sol) - @test sol.errors[:final] < 1e-10 + @test sol.errors[:final] < 1.0e-10 @show KenCarp4 - sol = solve(prob, KenCarp4(autodiff = _autodiff), reltol = 1e-12, abstol = 1e-12) + sol = solve(prob, KenCarp4(autodiff = _autodiff), reltol = 1.0e-12, abstol = 1.0e-12) @test length(sol) > 2 @test SciMLBase.successful_retcode(sol) - @test sol.errors[:final] < 1e-10 + @test sol.errors[:final] < 1.0e-10 @show KenCarp47 - sol = solve(prob, KenCarp47(autodiff = _autodiff), reltol = 1e-12, abstol = 1e-12) + sol = solve(prob, KenCarp47(autodiff = _autodiff), reltol = 1.0e-12, abstol = 1.0e-12) @test length(sol) > 2 @test SciMLBase.successful_retcode(sol) - @test sol.errors[:final] < 1e-10 + @test sol.errors[:final] < 1.0e-10 @show KenCarp5 - sol = solve(prob, KenCarp5(autodiff = _autodiff), reltol = 1e-12, abstol = 1e-12) + sol = solve(prob, KenCarp5(autodiff = _autodiff), reltol = 1.0e-12, abstol = 1.0e-12) @test length(sol) > 2 @test SciMLBase.successful_retcode(sol) - @test sol.errors[:final] < 1e-10 + @test sol.errors[:final] < 1.0e-10 @show KenCarp58 - sol = solve(prob, KenCarp58(autodiff = _autodiff), reltol = 1e-12, abstol = 1e-12) + sol = solve(prob, KenCarp58(autodiff = _autodiff), reltol = 1.0e-12, abstol = 1.0e-12) @test length(sol) > 2 @test SciMLBase.successful_retcode(sol) - @test sol.errors[:final] < 1e-10 + @test sol.errors[:final] < 1.0e-10 @show TRBDF2 - sol = solve(prob, TRBDF2(autodiff = _autodiff), reltol = 1e-9, abstol = 1e-9) - @test sol.errors[:final] < 1e-10 + sol = solve(prob, TRBDF2(autodiff = _autodiff), reltol = 1.0e-9, abstol = 1.0e-9) + @test sol.errors[:final] < 1.0e-10 @show ImplicitEuler sol = solve(prob, ImplicitEuler(autodiff = _autodiff), dt = 1 / 10) - @test sol.errors[:final] < 1e-1 + @test sol.errors[:final] < 1.0e-1 @show Trapezoid sol = solve(prob, Trapezoid(autodiff = _autodiff), dt = 1 / 10) - @test sol.errors[:final] < 1e-12 + @test sol.errors[:final] < 1.0e-12 end @show Euler sol = solve(prob, Euler(), dt = 1 / 100) - @test sol.errors[:final] < 6e-3 + @test sol.errors[:final] < 6.0e-3 for alg in CACHE_TEST_ALGS @show alg sol = solve(prob, alg, dt = 1 / 10) if !(alg isa Euler) - @test sol.errors[:final] < 4e-14 + @test sol.errors[:final] < 4.0e-14 end end end diff --git a/test/enzyme/autodiff_events.jl b/test/enzyme/autodiff_events.jl index 540bf8d213..3ce6d1e731 100644 --- a/test/enzyme/autodiff_events.jl +++ b/test/enzyme/autodiff_events.jl @@ -10,17 +10,17 @@ using Zygote function f(du, u, p, t) du[1] = u[2] - du[2] = -p[1] + return du[2] = -p[1] end function condition(u, t, integrator) # Event when event_f(u,t) == 0 - u[1] + return u[1] end function affect!(integrator) @show integrator.t println("bounced.") - integrator.u[2] = -integrator.p[2] * integrator.u[2] + return integrator.u[2] = -integrator.p[2] * integrator.u[2] end cb = ContinuousCallback(condition, affect!) @@ -29,8 +29,10 @@ prob = ODEProblem(f, eltype(p).([1.0, 0.0]), eltype(p).((0.0, 1.0)), copy(p)) function test_f(p) _prob = remake(prob, p = p) - solve(_prob, Tsit5(), abstol = 1e-14, reltol = 1e-14, callback = cb, - save_everystep = false).u[end] + return solve( + _prob, Tsit5(), abstol = 1.0e-14, reltol = 1.0e-14, callback = cb, + save_everystep = false + ).u[end] end findiff = FiniteDiff.finite_difference_jacobian(test_f, p) findiff @@ -41,12 +43,16 @@ ad @test ad ≈ findiff -function test_f2(p, sensealg = ForwardDiffSensitivity(), controller = nothing, - alg = Tsit5()) +function test_f2( + p, sensealg = ForwardDiffSensitivity(), controller = nothing, + alg = Tsit5() + ) _prob = remake(prob, p = p) - u = solve(_prob, alg, sensealg = sensealg, controller = controller, - abstol = 1e-14, reltol = 1e-14, callback = cb, save_everystep = false) - u[end][end] + u = solve( + _prob, alg, sensealg = sensealg, controller = controller, + abstol = 1.0e-14, reltol = 1.0e-14, callback = cb, save_everystep = false + ) + return u[end][end] end @test test_f2(p) == test_f(p)[end] @@ -54,21 +60,32 @@ end g1 = Zygote.gradient(θ -> test_f2(θ, ForwardDiffSensitivity()), p) g2 = Zygote.gradient(θ -> test_f2(θ, ReverseDiffAdjoint()), p) g3 = Zygote.gradient(θ -> test_f2(θ, ReverseDiffAdjoint(), IController()), p) -g4 = Zygote.gradient(θ -> test_f2(θ, ReverseDiffAdjoint(), PIController(7 // 50, 2 // 25)), - p) +g4 = Zygote.gradient( + θ -> test_f2(θ, ReverseDiffAdjoint(), PIController(7 // 50, 2 // 25)), + p +) @test_broken g5 = Zygote.gradient( - θ -> test_f2(θ, ReverseDiffAdjoint(), - PIDController(1 / 18.0, 1 / 9.0, 1 / 18.0)), - p) + θ -> test_f2( + θ, ReverseDiffAdjoint(), + PIDController(1 / 18.0, 1 / 9.0, 1 / 18.0) + ), + p +) g6 = Zygote.gradient( - θ -> test_f2(θ, ForwardDiffSensitivity(), - OrdinaryDiffEqCore.PredictiveController(), TRBDF2()), - p) + θ -> test_f2( + θ, ForwardDiffSensitivity(), + OrdinaryDiffEqCore.PredictiveController(), TRBDF2() + ), + p +) @test_broken g7 = Zygote.gradient( - θ -> test_f2(θ, ReverseDiffAdjoint(), + θ -> test_f2( + θ, ReverseDiffAdjoint(), OrdinaryDiffEqCore.PredictiveController(), - TRBDF2()), - p) + TRBDF2() + ), + p +) @test g1[1] ≈ findiff[2, 1:2] @test g2[1] ≈ findiff[2, 1:2] diff --git a/test/enzyme/discrete_adjoints.jl b/test/enzyme/discrete_adjoints.jl index a8a96d3c11..b632b20473 100644 --- a/test/enzyme/discrete_adjoints.jl +++ b/test/enzyme/discrete_adjoints.jl @@ -9,49 +9,51 @@ using Enzyme, OrdinaryDiffEqTsit5, StaticArrays, DiffEqBase, ForwardDiff, Test function lorenz!(du, u, p, t) du[1] = 10.0(u[2] - u[1]) du[2] = u[1] * (28.0 - u[3]) - u[2] - du[3] = u[1] * u[2] - (8 / 3) * u[3] + return du[3] = u[1] * u[2] - (8 / 3) * u[3] end -const _saveat = SA[0.0,0.25,0.5,0.75,1.0,1.25,1.5,1.75,2.0,2.25,2.5,2.75,3.0] +const _saveat = SA[0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0] function f_dt(y::Array{Float64}, u0::Array{Float64}) tspan = (0.0, 3.0) prob = ODEProblem{true, SciMLBase.FullSpecialize}(lorenz!, u0, tspan) - sol = DiffEqBase.solve(prob, Tsit5(), saveat = _saveat, sensealg = DiffEqBase.SensitivityADPassThrough(), abstol=1e-12, reltol=1e-12) - y .= sol[1,:] + sol = DiffEqBase.solve(prob, Tsit5(), saveat = _saveat, sensealg = DiffEqBase.SensitivityADPassThrough(), abstol = 1.0e-12, reltol = 1.0e-12) + y .= sol[1, :] return nothing end; function f_dt(u0) tspan = (0.0, 3.0) prob = ODEProblem{true, SciMLBase.FullSpecialize}(lorenz!, u0, tspan) - sol = DiffEqBase.solve(prob, Tsit5(), saveat = _saveat, sensealg = DiffEqBase.SensitivityADPassThrough(), abstol=1e-12, reltol=1e-12) - sol[1,:] + sol = DiffEqBase.solve(prob, Tsit5(), saveat = _saveat, sensealg = DiffEqBase.SensitivityADPassThrough(), abstol = 1.0e-12, reltol = 1.0e-12) + return sol[1, :] end; u0 = [1.0; 0.0; 0.0] fdj = ForwardDiff.jacobian(f_dt, u0) -ezj = stack(map(1:3) do i - d_u0 = zeros(3) - dy = zeros(13) - y = zeros(13) - d_u0[i] = 1.0 - Enzyme.autodiff(Forward, f_dt, Duplicated(y, dy), Duplicated(u0, d_u0)); - dy -end) +ezj = stack( + map(1:3) do i + d_u0 = zeros(3) + dy = zeros(13) + y = zeros(13) + d_u0[i] = 1.0 + Enzyme.autodiff(Forward, f_dt, Duplicated(y, dy), Duplicated(u0, d_u0)) + dy + end +) @test ezj ≈ fdj function f_dt2(u0) tspan = (0.0, 3.0) prob = ODEProblem{true, SciMLBase.FullSpecialize}(lorenz!, u0, tspan) - sol = DiffEqBase.solve(prob, Tsit5(), dt=0.1, saveat = _saveat, sensealg = DiffEqBase.SensitivityADPassThrough(), abstol=1e-12, reltol=1e-12) - sum(sol[1,:]) + sol = DiffEqBase.solve(prob, Tsit5(), dt = 0.1, saveat = _saveat, sensealg = DiffEqBase.SensitivityADPassThrough(), abstol = 1.0e-12, reltol = 1.0e-12) + return sum(sol[1, :]) end fdg = ForwardDiff.gradient(f_dt2, u0) d_u0 = zeros(3) -Enzyme.autodiff(Reverse, f_dt2, Active, Duplicated(u0, d_u0)); +Enzyme.autodiff(Reverse, f_dt2, Active, Duplicated(u0, d_u0)); @test d_u0 ≈ fdg diff --git a/test/gpu/autoswitch.jl b/test/gpu/autoswitch.jl index 35f7aef15e..a7670d199c 100644 --- a/test/gpu/autoswitch.jl +++ b/test/gpu/autoswitch.jl @@ -3,7 +3,7 @@ CUDA.allowscalar(false) # https://github.com/SciML/OrdinaryDiffEq.jl/issues/1614 function f(du, u, p, t) - @. du = u + return @. du = u end problem = ODEProblem(f, CUDA.ones(1), (0.0, 1.0)) diff --git a/test/gpu/hermite_test.jl b/test/gpu/hermite_test.jl index aed82157f8..0f0ef1fa58 100644 --- a/test/gpu/hermite_test.jl +++ b/test/gpu/hermite_test.jl @@ -1,5 +1,5 @@ using ComponentArrays, CUDA, Adapt, RecursiveArrayTools, FastBroadcast, FillArrays, - OrdinaryDiffEq, Test + OrdinaryDiffEq, Test using OrdinaryDiffEqCore a = ComponentArray((a = rand(Float32, 5, 5), b = rand(Float32, 5, 5))) diff --git a/test/gpu/linear_exp.jl b/test/gpu/linear_exp.jl index 41cb74e5d2..cd22a8f41e 100644 --- a/test/gpu/linear_exp.jl +++ b/test/gpu/linear_exp.jl @@ -18,9 +18,9 @@ sol_analytic = exp(1.0 * Matrix(A)) * u0 sol2_gpu = solve(prob_gpu, LinearExponential(krylov = :simple))(1.0) |> Vector sol3_gpu = solve(prob_gpu, LinearExponential(krylov = :adaptive))(1.0) |> Vector -@test_broken isapprox(sol1_gpu, sol_analytic, rtol = 1e-6) -@test isapprox(sol2_gpu, sol_analytic, rtol = 1e-6) -@test isapprox(sol3_gpu, sol_analytic, rtol = 1e-6) +@test_broken isapprox(sol1_gpu, sol_analytic, rtol = 1.0e-6) +@test isapprox(sol2_gpu, sol_analytic, rtol = 1.0e-6) +@test isapprox(sol3_gpu, sol_analytic, rtol = 1.0e-6) A2_gpu = MatrixOperator(cu(sparse([2.0 -1.0; -1.0 2.0]))) prob2_gpu = ODEProblem(A2_gpu, u0_gpu, (0.0, 1.0)) @@ -29,6 +29,6 @@ prob2_gpu = ODEProblem(A2_gpu, u0_gpu, (0.0, 1.0)) sol2_2_gpu = solve(prob2_gpu, LinearExponential(krylov = :simple))(1.0) |> Vector sol2_3_gpu = solve(prob2_gpu, LinearExponential(krylov = :adaptive))(1.0) |> Vector -@test_broken isapprox(sol2_1_gpu, sol_analytic, rtol = 1e-6) -@test isapprox(sol2_2_gpu, sol_analytic, rtol = 1e-6) -@test isapprox(sol2_3_gpu, sol_analytic, rtol = 1e-6) +@test_broken isapprox(sol2_1_gpu, sol_analytic, rtol = 1.0e-6) +@test isapprox(sol2_2_gpu, sol_analytic, rtol = 1.0e-6) +@test isapprox(sol2_3_gpu, sol_analytic, rtol = 1.0e-6) diff --git a/test/gpu/linear_lsrk.jl b/test/gpu/linear_lsrk.jl index 3a513af46d..d818046d76 100644 --- a/test/gpu/linear_lsrk.jl +++ b/test/gpu/linear_lsrk.jl @@ -8,7 +8,7 @@ gu0 = CuArray(Float32.(u0)) # Define the discretized PDE as an ODE function function f(du, u, p, t) - @. du = u + return @. du = u end prob = ODEProblem{true, SciMLBase.FullSpecialize}(f, u0, (0.0f0, 10.0f0)) prob2 = ODEProblem{true, SciMLBase.FullSpecialize}(f, gu0, (0.0f0, 10.0f0)) diff --git a/test/gpu/reaction_diffusion_stiff.jl b/test/gpu/reaction_diffusion_stiff.jl index 3228c3b20b..175508e8bc 100644 --- a/test/gpu/reaction_diffusion_stiff.jl +++ b/test/gpu/reaction_diffusion_stiff.jl @@ -17,8 +17,10 @@ const X = reshape([i for i in 1:N for j in 1:N], N, N) const Y = reshape([j for i in 1:N for j in 1:N], N, N) const α₁ = 1.0 .* (X .>= 4 * N / 5) -const Mx = Tridiagonal([1.0 for i in 1:(N - 1)], [-2.0 for i in 1:N], - [1.0 for i in 1:(N - 1)]) +const Mx = Tridiagonal( + [1.0 for i in 1:(N - 1)], [-2.0 for i in 1:N], + [1.0 for i in 1:(N - 1)] +) const My = copy(Mx) Mx[2, 1] = 2.0 Mx[end - 1, end] = 2.0 @@ -44,7 +46,7 @@ function f(du, u, p, t) @. DA = D * (MyA + AMx) @. dA = DA + α₁ - β₁ * A - r₁ * A * B + r₂ * C @. dB = α₂ - β₂ * B - r₁ * A * B + r₂ * C - @. dC = α₃ - β₃ * C + r₁ * A * B - r₂ * C + return @. dC = α₃ - β₃ * C + r₁ * A * B - r₂ * C end # Solve the ODE @@ -56,8 +58,10 @@ println("CPU Times") println("BS3") @time sol = solve(prob, BS3(), progress = true, save_everystep = false, save_start = false) println("ROCK2") -@time sol = solve(prob, ROCK2(), progress = true, save_everystep = false, - save_start = false) +@time sol = solve( + prob, ROCK2(), progress = true, save_everystep = false, + save_start = false +) using CUDA gu0 = CuArray(Float32.(u0)) @@ -81,7 +85,7 @@ function gf(du, u, p, t) @. gDA = D * (gMyA + gAMx) @. dA = gDA + gα₁ - β₁ * A - r₁ * A * B + r₂ * C @. dB = α₂ - β₂ * B - r₁ * A * B + r₂ * C - @. dC = α₃ - β₃ * C + r₁ * A * B - r₂ * C + return @. dC = α₃ - β₃ * C + r₁ * A * B - r₂ * C end prob2 = ODEProblem(gf, gu0, (0.0f0, 100.0f0)) @@ -94,5 +98,7 @@ println("GPU Times") println("BS3") @time sol = solve(prob2, BS3(), progress = true, save_everystep = false, save_start = false) println("ROCK2") -@time sol = solve(prob2, ROCK2(), progress = true, save_everystep = false, - save_start = false) +@time sol = solve( + prob2, ROCK2(), progress = true, save_everystep = false, + save_start = false +) diff --git a/test/gpu/rkip_semilinear_pde.jl b/test/gpu/rkip_semilinear_pde.jl index 10c299a179..ae2230c3a2 100644 --- a/test/gpu/rkip_semilinear_pde.jl +++ b/test/gpu/rkip_semilinear_pde.jl @@ -9,7 +9,7 @@ using SciMLBase: SplitODEProblem, SplitFunction, solve using SciMLOperators: AbstractSciMLOperator struct DiagonalFourierOperator{T, uType <: AbstractVector{T}, fftType, ifftType} <: - AbstractSciMLOperator{T} + AbstractSciMLOperator{T} diag::uType plan_fft!::fftType plan_ifft!::ifftType @@ -19,14 +19,15 @@ end function DiagonalFourierOperator(diag, plan_fft!_prototype, plan_ifft!_prototype) tmp = similar(diag) return DiagonalFourierOperator( - diag, plan_fft!_prototype(tmp), plan_ifft!_prototype(tmp), tmp) + diag, plan_fft!_prototype(tmp), plan_ifft!_prototype(tmp), tmp + ) end function DiagonalFourierOperator(diag::Vector{T}) where {T <: Complex} - DiagonalFourierOperator(diag, FFTW.plan_fft!, FFTW.plan_ifft!) + return DiagonalFourierOperator(diag, FFTW.plan_fft!, FFTW.plan_ifft!) end function DiagonalFourierOperator(diag::CuArray{T, 1}) where {T <: Complex} - DiagonalFourierOperator(diag, CUDA.CUFFT.plan_fft!, CUDA.CUFFT.plan_ifft!) + return DiagonalFourierOperator(diag, CUDA.CUFFT.plan_fft!, CUDA.CUFFT.plan_ifft!) end function LinearAlgebra.exp(D::DiagonalFourierOperator, t) @@ -34,7 +35,7 @@ function LinearAlgebra.exp(D::DiagonalFourierOperator, t) D.tmp .= D.diag D.tmp .*= t exp_kernel .= exp.(D.tmp) - DiagonalFourierOperator(exp_kernel, D.plan_fft!, D.plan_ifft!, D.tmp) + return DiagonalFourierOperator(exp_kernel, D.plan_fft!, D.plan_ifft!, D.tmp) end @inline @fastmath function apply_kernel!(du, u, tmp, kernel, op_fft!, op_ifft!) @@ -46,7 +47,7 @@ end end function (D::DiagonalFourierOperator)(du, u, _, _, _) - apply_kernel!(du, u, D.tmp, D.diag, D.plan_fft!, D.plan_ifft!) + return apply_kernel!(du, u, D.tmp, D.diag, D.plan_fft!, D.plan_ifft!) end gpu_init(u0::CuArray, ::Vector{T}) where {T <: Real} = u0 @@ -60,7 +61,7 @@ function create_semilinear_problem( u0, semilinear_fourier_part::Function, nonlinear_part!::Function -) where {T <: Real} + ) where {T <: Real} domain_size = dτ * nb_pts τ = Vector{T}(range(-domain_size / 2.0, domain_size / 2.0, nb_pts)) @@ -90,20 +91,28 @@ end end function create_nlse( - nb_pts::Int, dτ::T, integration_limit::T, u0) where {T <: Real} - create_semilinear_problem(nb_pts, dτ, integration_limit, u0, ω -> -0.5im * ω^2, - (du, u, t) -> nlse_non_linpart(du, u)) + nb_pts::Int, dτ::T, integration_limit::T, u0 + ) where {T <: Real} + return create_semilinear_problem( + nb_pts, dτ, integration_limit, u0, ω -> -0.5im * ω^2, + (du, u, t) -> nlse_non_linpart(du, u) + ) end -function create_lle_scan(nb_pts::Int, dτ::T, scan_time::T, u0, - Δ_min::T, Δ_max::T, S::T) where {T <: Real} - create_semilinear_problem(nb_pts, dτ, scan_time, u0, ω -> -1 - 1im * ω^2, - (du, u, t) -> lle_non_linpart!(du, u, Δ_min + (Δ_max - Δ_min) * t / scan_time, S)) +function create_lle_scan( + nb_pts::Int, dτ::T, scan_time::T, u0, + Δ_min::T, Δ_max::T, S::T + ) where {T <: Real} + return create_semilinear_problem( + nb_pts, dτ, scan_time, u0, ω -> -1 - 1im * ω^2, + (du, u, t) -> lle_non_linpart!(du, u, Δ_min + (Δ_max - Δ_min) * t / scan_time, S) + ) end function nlse_test( - ::Type{T}; B = 5.0, nb_pts = 512, dτ = 5e-3, propag_dist = 10.0, - save_everystep = false, reltol = 1e-6) where {T <: Real} + ::Type{T}; B = 5.0, nb_pts = 512, dτ = 5.0e-3, propag_dist = 10.0, + save_everystep = false, reltol = 1.0e-6 + ) where {T <: Real} B = T(B) problem = create_nlse( @@ -112,22 +121,23 @@ function nlse_test( T(propag_dist), τ -> B * sech(B * τ) ) - return solve(problem, RKIP(T(1e-4), T(1.0)); save_everystep, reltol = T(reltol)) + return solve(problem, RKIP(T(1.0e-4), T(1.0)); save_everystep, reltol = T(reltol)) end function lle_scan_test( - ::Type{T}; nb_pts = 1024, dτ = 5e-2, save_everystep = false, - reltol = 1e-6, S = 3, Δ_min = -2.0, Δ_max = 12.0, t_max = 10) where {T <: Real} + ::Type{T}; nb_pts = 1024, dτ = 5.0e-2, save_everystep = false, + reltol = 1.0e-6, S = 3, Δ_min = -2.0, Δ_max = 12.0, t_max = 10 + ) where {T <: Real} problem = create_lle_scan( nb_pts, T(dτ), T(t_max), - 1e-1 * exp.(2im * π * rand(T, nb_pts)), + 1.0e-1 * exp.(2im * π * rand(T, nb_pts)), T(Δ_min), T(Δ_max), T(S) ) - return solve(problem, RKIP(T(1e-4), T(1.0)); save_everystep, reltol = T(reltol)) + return solve(problem, RKIP(T(1.0e-4), T(1.0)); save_everystep, reltol = T(reltol)) end CUDA.allowscalar(false) # ensure no scalar indexing is used (for performance) diff --git a/test/gpu/simple_dae.jl b/test/gpu/simple_dae.jl index b8a73f0fb3..c42fc7ce46 100644 --- a/test/gpu/simple_dae.jl +++ b/test/gpu/simple_dae.jl @@ -14,13 +14,15 @@ du[2] = -0.5*u[2] =# function dae!(du, u, p, t) - mul!(du, p, u) + return mul!(du, p, u) end -p = [-1 0 0 0 - 1 -0.5 0 0 - 1 1 -1 0 - -1 1 0 -1] +p = [ + -1 0 0 0 + 1 -0.5 0 0 + 1 1 -1 0 + -1 1 0 -1 +] # mass_matrix = [1 0 0 0 # 0 1 0 0 @@ -53,8 +55,8 @@ sol_d = solve(prob_d, Rodas5P()) @testset "Test constraints in GPU sol" begin for t in sol_d.t u = Vector(sol_d(t)) - @test isapprox(u[1] + u[2], u[3]; atol = 1e-6) - @test isapprox(-u[1] + u[2], u[4]; atol = 1e-6) + @test isapprox(u[1] + u[2], u[3]; atol = 1.0e-6) + @test isapprox(-u[1] + u[2], u[4]; atol = 1.0e-6) end end diff --git a/test/integrators/alg_events_tests.jl b/test/integrators/alg_events_tests.jl index 0c732db627..8b52fc6f01 100644 --- a/test/integrators/alg_events_tests.jl +++ b/test/integrators/alg_events_tests.jl @@ -6,7 +6,7 @@ function test_callback_inplace(alg; kwargs...) cb = ContinuousCallback((u, t, int) -> u[1] - exp(1), terminate!) prob = ODEProblem(f, [1.0], (0.0, 2.0), callback = cb) sol = solve(prob, alg; kwargs...) - sol.u[end][1] ≈ exp(1) + return sol.u[end][1] ≈ exp(1) end function test_callback_outofplace(alg; kwargs...) @@ -14,7 +14,7 @@ function test_callback_outofplace(alg; kwargs...) cb = ContinuousCallback((u, t, int) -> u[1] - exp(1), terminate!) prob = ODEProblem(f, [1.0], (0.0, 2.0), callback = cb) sol = solve(prob, alg; kwargs...) - sol.u[end][1] ≈ exp(1) + return sol.u[end][1] ≈ exp(1) end function test_callback_scalar(alg; kwargs...) @@ -22,7 +22,7 @@ function test_callback_scalar(alg; kwargs...) cb = ContinuousCallback((u, t, int) -> u - exp(1), terminate!) prob = ODEProblem(f, 1.0, (0.0, 2.0), callback = cb) sol = solve(prob, alg; kwargs...) - sol.u[end] ≈ exp(1) + return sol.u[end] ≈ exp(1) end function test_callback_svector(alg; kwargs...) @@ -30,7 +30,7 @@ function test_callback_svector(alg; kwargs...) cb = ContinuousCallback((u, t, int) -> u[1] - exp(1), terminate!) prob = ODEProblem(f, SVector(1.0), (0.0, 2.0), callback = cb) sol = solve(prob, alg; kwargs...) - sol.u[end][1] ≈ exp(1) + return sol.u[end][1] ≈ exp(1) end function test_callback_mvector(alg; kwargs...) @@ -38,19 +38,19 @@ function test_callback_mvector(alg; kwargs...) cb = ContinuousCallback((u, t, int) -> u[1] - exp(1), terminate!) prob = ODEProblem(f, MVector(1.0), (0.0, 2.0), callback = cb) sol = solve(prob, alg; kwargs...) - sol.u[end][1] ≈ exp(1) + return sol.u[end][1] ≈ exp(1) end function test_callback_adaptive_multistep(alg; kwargs...) function f(du, u, p, t) du[1] = u[2] - du[2] = -p + return du[2] = -p end function condition(u, t, integrator) # Event when event_f(u,t) == 0 - u[1] + return u[1] end function affect!(integrator) - integrator.u[2] = -integrator.u[2] + return integrator.u[2] = -integrator.u[2] end cb = ContinuousCallback(condition, affect!) u0 = [50.0, 0.0] @@ -59,7 +59,7 @@ function test_callback_adaptive_multistep(alg; kwargs...) prob = ODEProblem(f, u0, tspan, p, callback = cb) sol1 = solve(prob, Tsit5(); kwargs...) sol2 = solve(prob, alg; kwargs...) - sol1.u[end][1] ≈ sol2.u[end][1] && sol1.u[end][2] ≈ sol2.u[end][2] + return sol1.u[end][1] ≈ sol2.u[end][1] && sol1.u[end][2] ≈ sol2.u[end][2] end println("inplace") @@ -265,5 +265,5 @@ println(".") @test test_callback_inplace(QNDF()) println("adaptive multistep methods") -@test test_callback_adaptive_multistep(QNDF(), reltol = 1e-10, abstol = 1e-10) -@test test_callback_adaptive_multistep(FBDF(), reltol = 1e-10, abstol = 1e-10) +@test test_callback_adaptive_multistep(QNDF(), reltol = 1.0e-10, abstol = 1.0e-10) +@test test_callback_adaptive_multistep(FBDF(), reltol = 1.0e-10, abstol = 1.0e-10) diff --git a/test/integrators/callback_allocation_tests.jl b/test/integrators/callback_allocation_tests.jl index a6d3f47b26..687bad6a99 100644 --- a/test/integrators/callback_allocation_tests.jl +++ b/test/integrators/callback_allocation_tests.jl @@ -4,7 +4,7 @@ using OrdinaryDiffEqCore # Setup a simple ODE problem with several callbacks (to test LLVM code gen) # We will manually trigger the first callback and check its allocations. function f!(du, u, p, t) - du .= .-u + return du .= .-u end cond_1(u, t, integrator) = u[1] - 0.5 @@ -18,10 +18,11 @@ cond_8(u, t, integrator) = u[2] + 0.11 cond_9(u, t, integrator) = u[2] + 0.12 function cb_affect!(integrator) - integrator.p[1] += 1 + return integrator.p[1] += 1 end -cbs = CallbackSet(ContinuousCallback(cond_1, cb_affect!), +cbs = CallbackSet( + ContinuousCallback(cond_1, cb_affect!), ContinuousCallback(cond_2, cb_affect!), ContinuousCallback(cond_3, cb_affect!), ContinuousCallback(cond_4, cb_affect!), @@ -29,12 +30,16 @@ cbs = CallbackSet(ContinuousCallback(cond_1, cb_affect!), ContinuousCallback(cond_6, cb_affect!), ContinuousCallback(cond_7, cb_affect!), ContinuousCallback(cond_8, cb_affect!), - ContinuousCallback(cond_9, cb_affect!)) + ContinuousCallback(cond_9, cb_affect!) +) integrator = init( - ODEProblem{true, SciMLBase.FullSpecialize}(f!, [0.8, 1.0], - (0.0, 100.0), [0, 0]), Tsit5(), callback = cbs, - save_on = false); + ODEProblem{true, SciMLBase.FullSpecialize}( + f!, [0.8, 1.0], + (0.0, 100.0), [0, 0] + ), Tsit5(), callback = cbs, + save_on = false +); # Force a callback event to occur so we can call handle_callbacks! directly. # Step to a point where u[1] is still > 0.5, so we can force it below 0.5 and # call handle callbacks @@ -42,7 +47,7 @@ step!(integrator, 0.1, true) function handle_allocs(integrator) integrator.u[1] = 0.4 - @allocations OrdinaryDiffEqCore.handle_callbacks!(integrator) + return @allocations OrdinaryDiffEqCore.handle_callbacks!(integrator) end handle_allocs(integrator) @test_skip handle_allocs(integrator) == 0 diff --git a/test/integrators/check_error.jl b/test/integrators/check_error.jl index 61ab159544..14a2f36f18 100644 --- a/test/integrators/check_error.jl +++ b/test/integrators/check_error.jl @@ -4,7 +4,7 @@ f_ec(u, p, t) = exp(u) u0 = 0.0 # explosion time is 1.0 tspan = (0.0, 10.0) prob = ODEProblem(f_ec, u0, tspan) -options = [:reltol => 1e-8, :abstol => 1e-8, :verbose => false] +options = [:reltol => 1.0e-8, :abstol => 1.0e-8, :verbose => false] desired_codes = (ReturnCode.MaxIters, ReturnCode.Unstable) # Test that sol.retcode is set to the correct value by various ways to @@ -43,7 +43,7 @@ end let function f!(out, u, _, t) - out[1] = u[1] + 1 - sin(t) + return out[1] = u[1] + 1 - sin(t) end mprob = ODEProblem(ODEFunction(f!, mass_matrix = [0.0;;]), [0.0], (0, 2.0)) @test solve(mprob, Rosenbrock23()).retcode == ReturnCode.Success diff --git a/test/integrators/diffdir_tests.jl b/test/integrators/diffdir_tests.jl index 3cabac4fab..238039e86b 100644 --- a/test/integrators/diffdir_tests.jl +++ b/test/integrators/diffdir_tests.jl @@ -5,18 +5,25 @@ for Alg in (Rosenbrock23, TRBDF2) u0 = ones(2) tstops = range(0, 10, length = 1000) sol = solve(ODEProblem((du, u, p, t) -> du .= sin.(u), u0, tspan), Tsit5()) - @test_nowarn solve(ODEProblem((du, u, p, t) -> sol(du, t), u0, tspan), Alg(), - tstops = tstops) - @test_nowarn solve(ODEProblem((du, u, p, t) -> sol(du, t), u0, (tspan[2], tspan[1])), - Alg(), tstops = tstops) + @test_nowarn solve( + ODEProblem((du, u, p, t) -> sol(du, t), u0, tspan), Alg(), + tstops = tstops + ) + @test_nowarn solve( + ODEProblem((du, u, p, t) -> sol(du, t), u0, (tspan[2], tspan[1])), + Alg(), tstops = tstops + ) for u0 in (1.0, ones(2)) u0 = 1.0 sol = solve(ODEProblem((u, p, t) -> sin.(u), u0, tspan), Tsit5()) - @test_nowarn solve(ODEProblem((u, p, t) -> sol(t), u0, tspan), Alg(), - tstops = tstops) + @test_nowarn solve( + ODEProblem((u, p, t) -> sol(t), u0, tspan), Alg(), + tstops = tstops + ) @test_nowarn solve( ODEProblem((u, p, t) -> sol(t), u0, (tspan[2], tspan[1])), Alg(), - tstops = tstops) + tstops = tstops + ) end end diff --git a/test/integrators/discrete_callback_dual_test.jl b/test/integrators/discrete_callback_dual_test.jl index 7414070f28..3207d98645 100644 --- a/test/integrators/discrete_callback_dual_test.jl +++ b/test/integrators/discrete_callback_dual_test.jl @@ -11,15 +11,16 @@ times_finalize_called = 0 function stopping_cb(tstop) condition = (u, t, integrator) -> t == tstop affect! = integrator -> (println("Stopped!"); integrator.p = zero(integrator.p)) - DiscreteCallback( - condition, affect!, finalize = (args...) -> global times_finalize_called += 1) + return DiscreteCallback( + condition, affect!, finalize = (args...) -> global times_finalize_called += 1 + ) end function test_fun(tstop) DualT = typeof(tstop) prob = ODEProblem((u, p, t) -> p * u, DualT(u0), DualT.(tspan), DualT(p)) sol = solve(prob, Tsit5(), callback = stopping_cb(tstop), tstops = [tstop]) - sol(1.0) + return sol(1.0) end @test ForwardDiff.derivative(test_fun, 0.5) ≈ exp(0.5) * u0 # Analytical solution: exp(tstop)*u0 @@ -30,9 +31,11 @@ test_fun(0.5) function test_fun(tstop) DualT = typeof(tstop) prob = ODEProblem((u, p, t) -> p * u, DualT(u0), DualT.(tspan), DualT(p)) - sol = solve(prob, Tsit5(), callback = stopping_cb(tstop), tstops = [tstop], - adaptive = false, dt = 0.01) - sol(1.0) + sol = solve( + prob, Tsit5(), callback = stopping_cb(tstop), tstops = [tstop], + adaptive = false, dt = 0.01 + ) + return sol(1.0) end @test ForwardDiff.derivative(test_fun, 0.5) ≈ exp(0.5) * u0 # Analytical solution: exp(tstop)*u0 diff --git a/test/integrators/event_detection_tests.jl b/test/integrators/event_detection_tests.jl index 2b0c09c82b..2aee144f6e 100644 --- a/test/integrators/event_detection_tests.jl +++ b/test/integrators/event_detection_tests.jl @@ -8,38 +8,48 @@ using Test p₀, p₂ = z[1:2] q₀, q₂ = z[3:4] - return SVector{4}(-A * q₀ - 3 * B / √2 * (q₂^2 - q₀^2) - D * q₀ * (q₀^2 + q₂^2), + return SVector{4}( + -A * q₀ - 3 * B / √2 * (q₂^2 - q₀^2) - D * q₀ * (q₀^2 + q₂^2), -q₂ * (A + 3 * √2 * B * q₀ + D * (q₀^2 + q₂^2)), A * p₀, - A * p₂) + A * p₂ + ) end condition(u, t, integrator) = u affect!(integrator) = nothing function cbf(idx) - ContinuousCallback(condition, - affect!, nothing, save_positions = (false, true), idxs = idx) + return ContinuousCallback( + condition, + affect!, nothing, save_positions = (false, true), idxs = idx + ) end z0 = SVector{4}(7.1989885061904335, -0.165912283356219, 0.0, -3.63534900748947) tspan = (0.0, 300.0) prob = ODEProblem(ż, z0, tspan, (A = 1, B = 0.55, D = 0.4), callback = cbf(3)) -sol = solve(prob, Vern9(), abstol = 1e-14, reltol = 1e-14, - save_everystep = false, save_start = false, save_end = false, maxiters = 1e6) +sol = solve( + prob, Vern9(), abstol = 1.0e-14, reltol = 1.0e-14, + save_everystep = false, save_start = false, save_end = false, maxiters = 1.0e6 +) @test length(sol) > 100 @test SciMLBase.successful_retcode(sol) prob = ODEProblem(ż, z0, (0, 400.0), (A = 1, B = 0.55, D = 0.4), callback = cbf(3)) -sol = solve(prob, Vern9(), abstol = 1e-14, reltol = 1e-14, save_everystep = false, - save_start = false, save_end = false, maxiters = 2e4) +sol = solve( + prob, Vern9(), abstol = 1.0e-14, reltol = 1.0e-14, save_everystep = false, + save_start = false, save_end = false, maxiters = 2.0e4 +) @test length(sol) > 100 @test SciMLBase.successful_retcode(sol) prob = ODEProblem(ż, z0, (0, 5000.0), (A = 1, B = 0.55, D = 0.4), callback = cbf(3)) -sol = solve(prob, Vern9(), abstol = 1e-14, reltol = 1e-14, save_everystep = false, - save_start = false, save_end = false, maxiters = 1e6) +sol = solve( + prob, Vern9(), abstol = 1.0e-14, reltol = 1.0e-14, save_everystep = false, + save_start = false, save_end = false, maxiters = 1.0e6 +) @test length(sol) > 1500 @test SciMLBase.successful_retcode(sol) @@ -48,13 +58,13 @@ sol = solve(prob, Vern9(), abstol = 1e-14, reltol = 1e-14, save_everystep = fals f = function (du, u, p, t) du[1] = u[2] - du[2] = -p[1] + return du[2] = -p[1] end function condition(u, t, integrator) # Event when event_f(u,t) == 0 - u[1] + return u[1] end function affect!(integrator) - integrator.u[2] = -integrator.u[2] + return integrator.u[2] = -integrator.u[2] end cb2 = ContinuousCallback(condition, affect!) tspan = (0.0, 10000.0) @@ -68,16 +78,16 @@ sol = solve(prob, Tsit5(), callback = cb2) for alg in (Rodas4(), Rodas4P(), Rodas5(), Rodas5P()) sol2 = solve(prob, alg; callback = cb2) sol3 = appxtrue(sol, sol2) - @test sol3.errors[:L2] < 1e-5 - @test sol3.errors[:L∞] < 5e-5 - @test sol3.errors[:final] < 1e-5 + @test sol3.errors[:L2] < 1.0e-5 + @test sol3.errors[:L∞] < 5.0e-5 + @test sol3.errors[:final] < 1.0e-5 end function fball(du, u, p, t) du[1] = u[2] du[2] = -p du[3] = u[4] - du[4] = 0.0 + return du[4] = 0.0 end u0 = [50.0, 0.0, 0.0, 2.0] tspan = (0.0, 15.0) @@ -90,11 +100,11 @@ z = Ref(0) function condition(out, u, t, integrator) out[1] = u[1] - out[2] = (10.0 - u[3])u[3] + return out[2] = (10.0 - u[3])u[3] end function affect!(integrator, idx) - if idx == 1 + return if idx == 1 x[] += 1 integrator.u[2] = -0.9integrator.u[2] elseif idx == 2 @@ -106,28 +116,30 @@ end function affect_neg!(integrator, idx) z[] += 1 @show integrator.u[1] - @show integrator.u[3] + return @show integrator.u[3] end cb = VectorContinuousCallback(condition, affect!, 2) cb2 = VectorContinuousCallback(condition, affect_neg!, affect!, 2) -sol = solve(prob, Tsit5(), callback = cb, dt = 1e-3, adaptive = false) +sol = solve(prob, Tsit5(), callback = cb, dt = 1.0e-3, adaptive = false) @test x[] == 3 @test y[] == 2 -sol2 = solve(prob, Tsit5(), callback = cb2, dt = 1e-3, adaptive = false) +sol2 = solve(prob, Tsit5(), callback = cb2, dt = 1.0e-3, adaptive = false) @test sol.u == sol2.u @test z[] == 0 # https://github.com/SciML/OrdinaryDiffEq.jl/issues/1273 function du!(du, u, p, t) - du[1] = 1 + return du[1] = 1 end -callback = ContinuousCallback((u, t, integrator) -> 1.0, - (integrator) -> nothing) +callback = ContinuousCallback( + (u, t, integrator) -> 1.0, + (integrator) -> nothing +) prob = ODEProblem(du!, [0], (0.0, 1.0), callback = callback) diff --git a/test/integrators/event_repeat_tests.jl b/test/integrators/event_repeat_tests.jl index e473f828a0..bd85092cf2 100644 --- a/test/integrators/event_repeat_tests.jl +++ b/test/integrators/event_repeat_tests.jl @@ -7,7 +7,7 @@ cond(u, p, t) = u - exp(70eps(1.0)) c = Ref(0) function affect!(integrator) - c[] += 1 + return c[] += 1 end cb = ContinuousCallback(cond, affect!) @info "Event Repeat Test 1" @@ -19,7 +19,7 @@ function condition_v(out, u, t, integrator) out[2] = u - exp(60eps(1.0)) out[3] = u - exp(70eps(1.0)) out[4] = u - exp(80eps(1.0)) - out[5] = u - exp(90eps(1.0)) + return out[5] = u - exp(90eps(1.0)) end c1 = Ref(0) @@ -29,7 +29,7 @@ c4 = Ref(0) c5 = Ref(0) function affect_v!(integrator, idx) - if idx == 1 + return if idx == 1 c1[] += 1 elseif idx == 2 c2[] += 1 diff --git a/test/integrators/integrator_interface_tests.jl b/test/integrators/integrator_interface_tests.jl index 689bb84c7c..bbd8920109 100644 --- a/test/integrators/integrator_interface_tests.jl +++ b/test/integrators/integrator_interface_tests.jl @@ -4,8 +4,8 @@ using OrdinaryDiffEq println("First") # set_X!(integrator, integrator.X) should not change the result. @testset "Trivial $setter ($alg, inplace=$iip)" for alg in [RK4, Trapezoid], - setter in [set_t!, set_u!, set_ut!], - iip in [false, true] + setter in [set_t!, set_u!, set_ut!], + iip in [false, true] if iip f = (du, u, p, t) -> (du .= 2u) @@ -35,7 +35,7 @@ println("First") if alg === Trapezoid rtol = integrator1.opts.reltol * 100 atol = integrator1.opts.abstol - @test integrator1.u≈integrator2.u rtol=rtol atol=atol + @test integrator1.u ≈ integrator2.u rtol = rtol atol = atol else @test integrator1.u == integrator2.u end @@ -44,8 +44,8 @@ end println("Second") @testset "Resolve with $setter ($alg, inplace=$iip)" for alg in [RK4, Trapezoid], - setter in [set_t!, set_ut!], - iip in [false, true] + setter in [set_t!, set_ut!], + iip in [false, true] if iip f = (du, u, p, t) -> (du .= 2u * cos(2π * t)) @@ -73,7 +73,7 @@ println("Second") if alg === Trapezoid rtol *= 100 end - @test integrator1.u≈integrator2.u rtol=rtol atol=atol + @test integrator1.u ≈ integrator2.u rtol = rtol atol = atol end @testset "set_proposed_dt!" begin diff --git a/test/integrators/iterator_tests.jl b/test/integrators/iterator_tests.jl index 4870226c86..db9257d57c 100644 --- a/test/integrators/iterator_tests.jl +++ b/test/integrators/iterator_tests.jl @@ -3,12 +3,16 @@ import ODEProblemLibrary: prob_ode_linear, prob_ode_2Dlinear prob = prob_ode_linear -sol = solve(prob, BS3(); dt = 1 // 2^(4), tstops = [0.5], saveat = 0.01, - save_everystep = true) +sol = solve( + prob, BS3(); dt = 1 // 2^(4), tstops = [0.5], saveat = 0.01, + save_everystep = true +) sol(0.9) -integrator = init(prob, BS3(); dt = 1 // 2^(4), tstops = [0.5], saveat = 0.01, - save_everystep = true) +integrator = init( + prob, BS3(); dt = 1 // 2^(4), tstops = [0.5], saveat = 0.01, + save_everystep = true +) step!(integrator) @test integrator.iter == 1 solve!(integrator) @@ -33,8 +37,10 @@ for (u, t) in tuples(integrator) @test t ∈ [0.5, 1.0] end -integrator = init(prob, Tsit5(); dt = 1 // 2^(4), tstops = [0.5], advance_to_tstop = true, - stop_at_next_tstop = true) +integrator = init( + prob, Tsit5(); dt = 1 // 2^(4), tstops = [0.5], advance_to_tstop = true, + stop_at_next_tstop = true +) for (u, t) in tuples(integrator) @test t == 0.5 end @@ -54,8 +60,10 @@ for i in Base.Iterators.take(integrator, 12) end @test integrator.iter == 24 -integrator = init(prob_ode_2Dlinear, Tsit5(); dt = 1 // 2^(4), tstops = [0.5], - advance_to_tstop = true, stop_at_next_tstop = true) +integrator = init( + prob_ode_2Dlinear, Tsit5(); dt = 1 // 2^(4), tstops = [0.5], + advance_to_tstop = true, stop_at_next_tstop = true +) for (u, t) in tuples(integrator) @test t == 0.5 end diff --git a/test/integrators/ode_add_steps_tests.jl b/test/integrators/ode_add_steps_tests.jl index 596ea769e1..adef2d712b 100644 --- a/test/integrators/ode_add_steps_tests.jl +++ b/test/integrators/ode_add_steps_tests.jl @@ -1,7 +1,7 @@ using OrdinaryDiffEq, Test function test_ode(u, p, t) - [p[1] - (1 - p[1]) * u[1]] + return [p[1] - (1 - p[1]) * u[1]] end function test_ode(du, u, p, t) @@ -18,8 +18,10 @@ pullback_affect!(i) = i.p[1] = abs(1 - i.p[1]) cb = ContinuousCallback(pullback_condition, pullback_affect!) # DPRKN6 is left out because second order ODE -algs = [Tsit5, Rosenbrock23, DP5, DP8, SSPRK43, SSPRK432, OwrenZen3, SSPRK22, SSPRK33, - OwrenZen4, OwrenZen5, Rosenbrock32, Rodas5, Rodas4, Rodas42, Rodas5P] ## Works for these +algs = [ + Tsit5, Rosenbrock23, DP5, DP8, SSPRK43, SSPRK432, OwrenZen3, SSPRK22, SSPRK33, + OwrenZen4, OwrenZen5, Rosenbrock32, Rodas5, Rodas4, Rodas42, Rodas5P, +] ## Works for these lazy_alg = [BS5, Vern6, Vern7, Vern8, Vern9] bad_algs = [] @@ -53,5 +55,5 @@ for inplace in [false, true], alg in lazy_alg end any(.!(passed)) && - @warn("The following algorithms failed the continuous callback test: $(vcat(algs,algs,lazy_alg,lazy_alg)[.!(passed)])") + @warn("The following algorithms failed the continuous callback test: $(vcat(algs, algs, lazy_alg, lazy_alg)[.!(passed)])") @test all(passed) diff --git a/test/integrators/ode_cache_tests.jl b/test/integrators/ode_cache_tests.jl index 1194c54256..2fcc0fc079 100644 --- a/test/integrators/ode_cache_tests.jl +++ b/test/integrators/ode_cache_tests.jl @@ -3,35 +3,42 @@ using Random using OrdinaryDiffEqDefault using ElasticArrays, LinearSolve Random.seed!(213) -CACHE_TEST_ALGS = [Euler(), Midpoint(), RK4(), SSPRK22(), SSPRK33(), SSPRK43(), SSPRK104(), +CACHE_TEST_ALGS = [ + Euler(), Midpoint(), RK4(), SSPRK22(), SSPRK33(), SSPRK43(), SSPRK104(), CarpenterKennedy2N54(), SHLDDRK64(), ORK256(), DGLDDRK73_C(), CFRLDDRK64(), TSLDDRK74(), CKLLSRK43_2(), ParsaniKetchesonDeconinck3S32(), BS3(), BS5(), DP5(), DP8(), Feagin10(), Feagin12(), Feagin14(), TanYam7(), Tsit5(), TsitPap8(), Vern6(), Vern7(), Vern8(), Vern9(), OwrenZen3(), OwrenZen4(), OwrenZen5(), AutoTsit5(Rosenbrock23()), TRBDF2(), KenCarp4(), ABDF2(), - OrdinaryDiffEqDefault.DefaultODEAlgorithm()] + OrdinaryDiffEqDefault.DefaultODEAlgorithm(), +] broken_CACHE_TEST_ALGS = [ QNDF(), ExtrapolationMidpointHairerWanner(), ImplicitEulerExtrapolation(), - ImplicitDeuflhardExtrapolation() + ImplicitDeuflhardExtrapolation(), ] # AitkenNeville(threading=false) fails Elastic but not normal case using InteractiveUtils -NON_IMPLICIT_ALGS = filter((x) -> isconcretetype(x) && !OrdinaryDiffEqCore.isimplicit(x()), - union(subtypes(OrdinaryDiffEqCore.OrdinaryDiffEqAlgorithm), - subtypes(OrdinaryDiffEqCore.OrdinaryDiffEqAdaptiveAlgorithm))) +NON_IMPLICIT_ALGS = filter( + (x) -> isconcretetype(x) && !OrdinaryDiffEqCore.isimplicit(x()), + union( + subtypes(OrdinaryDiffEqCore.OrdinaryDiffEqAlgorithm), + subtypes(OrdinaryDiffEqCore.OrdinaryDiffEqAdaptiveAlgorithm) + ) +) f = function (du, u, p, t) for i in 1:length(u) du[i] = (0.3 / length(u)) * u[i] end + return end condition = function (u, t, integrator) - 1 - maximum(u) + return 1 - maximum(u) end affect! = function (integrator) @@ -41,7 +48,7 @@ affect! = function (integrator) Θ = rand() / 5 + 0.25 u[maxidx] = Θ u[end] = 1 - Θ - nothing + return nothing end callback = ContinuousCallback(condition, affect!) @@ -64,8 +71,10 @@ sol = solve(prob, KenCarp4(), callback = callback, dt = 1 / 2) @test length(sol[end]) > 1 sol = solve(prob, TRBDF2(), callback = callback, dt = 1 / 2) @test length(sol[end]) > 1 -sol = solve(prob, TRBDF2(linsolve = LinearSolve.KrylovJL_GMRES()), - callback = callback) +sol = solve( + prob, TRBDF2(linsolve = LinearSolve.KrylovJL_GMRES()), + callback = callback +) @test length(sol[end]) > 1 for alg in CACHE_TEST_ALGS @@ -79,11 +88,15 @@ for alg in broken_CACHE_TEST_ALGS @test_broken length(solve(prob, alg, callback = callback, dt = 1 / 2)[end]) > 1 end -sol = solve(prob, Rodas4(autodiff = AutoForwardDiff(chunksize = 1)), - callback = callback, dt = 1 / 2) +sol = solve( + prob, Rodas4(autodiff = AutoForwardDiff(chunksize = 1)), + callback = callback, dt = 1 / 2 +) @test length(sol[end]) > 1 -sol = solve(prob, Rodas5(autodiff = AutoForwardDiff(chunksize = 1)), - callback = callback, dt = 1 / 2) +sol = solve( + prob, Rodas5(autodiff = AutoForwardDiff(chunksize = 1)), + callback = callback, dt = 1 / 2 +) @test length(sol[end]) > 1 # cache tests resizing multidimensional arrays @@ -95,7 +108,7 @@ condition_matrix = (u, t, integrator) -> t - 1 affect_matrix! = function (integrator) resize!(integrator, (2, 3)) integrator.u .= 1 - nothing + return nothing end callback_matrix = ContinuousCallback(condition_matrix, affect_matrix!) @@ -115,7 +128,7 @@ condition_resize3 = (u, t, integrator) -> t - 1 affect!_resize3 = function (integrator) resize!(integrator, 3) integrator.u .= 1 - nothing + return nothing end callback_resize3 = ContinuousCallback(condition_resize3, affect!_resize3) @@ -126,7 +139,7 @@ for alg in CACHE_TEST_ALGS local sol = solve(prob_resize3, alg, callback = callback_resize3, dt = 0.125) @test size(sol[end]) == (3,) @test all(sol[end] .== sol[end][1]) - @test sol[end][1]≈exp(1) atol=1.0e-2 + @test sol[end][1] ≈ exp(1) atol = 1.0e-2 end # additional cache tests to find more bugs @@ -141,24 +154,28 @@ affect!_adapt = function (integrator) integrator.opts.dtmax = dt integrator.dtcache = dt u_modified!(integrator, false) - nothing + return nothing end -callback_adapt = DiscreteCallback(condition_adapt, affect!_adapt, - save_positions = (false, false)) +callback_adapt = DiscreteCallback( + condition_adapt, affect!_adapt, + save_positions = (false, false) +) for alg in CACHE_TEST_ALGS (OrdinaryDiffEqCore.isimplicit(alg) || OrdinaryDiffEqCore.alg_order(alg) < 2) && continue @show alg local sol = solve(prob_adapt, alg, callback = callback_adapt, dt = 0.125) - @test all(idx -> all(isapprox.(sol.u[idx], 0.5 * sol.t[idx]^2, atol = 1.0e-6)), - eachindex(sol.t)) + @test all( + idx -> all(isapprox.(sol.u[idx], 0.5 * sol.t[idx]^2, atol = 1.0e-6)), + eachindex(sol.t) + ) end # Force switching function f2(du, u, p, t) - @assert length(u)==length(du) "length(u) = $(length(u)), length(du) = $(length(du)) at time $(t)" + @assert length(u) == length(du) "length(u) = $(length(u)), length(du) = $(length(du)) at time $(t)" for i in 1:length(u) if t > 10 du[i] = -10000 * u[i] @@ -170,7 +187,7 @@ function f2(du, u, p, t) end function condition2(u, t, integrator) - 1 - maximum(u) + return 1 - maximum(u) end function affect2!(integrator) @@ -180,7 +197,7 @@ function affect2!(integrator) Θ = rand() u[maxidx] = Θ u[end] = 1 - Θ - nothing + return nothing end callback = ContinuousCallback(condition2, affect2!) diff --git a/test/integrators/ode_event_tests.jl b/test/integrators/ode_event_tests.jl index 78c6496da7..1d14cfacff 100644 --- a/test/integrators/ode_event_tests.jl +++ b/test/integrators/ode_event_tests.jl @@ -1,20 +1,20 @@ using OrdinaryDiffEq, - RecursiveArrayTools, Test, StaticArrays, DiffEqCallbacks, - SparseArrays, - LinearAlgebra + RecursiveArrayTools, Test, StaticArrays, DiffEqCallbacks, + SparseArrays, + LinearAlgebra f = function (u, p, t) - -u + sin(-t) + return -u + sin(-t) end prob = ODEProblem(f, 1.0, (0.0, -10.0)) condition = function (u, t, integrator) # Event when event_f(u,t,k) == 0 - -t - 2.95 + return -t - 2.95 end affect! = function (integrator) - integrator.u = integrator.u + 2 + return integrator.u = integrator.u + 2 end callback = ContinuousCallback(condition, affect!) @@ -27,11 +27,11 @@ sol = solve(prob, Tsit5(), callback = callback, tstops = [-2.95]) @test sol(-2.95, continuity = :right) ≈ sol(-2.95, continuity = :left) + 2 condition = function (out, u, t, integrator) # Event when event_f(u,t,k) == 0 - out[1] = -t - 2.95 + return out[1] = -t - 2.95 end affect! = function (integrator, idx) - if idx == 1 + return if idx == 1 integrator.u = integrator.u + 2 end end @@ -45,57 +45,57 @@ sol = solve(prob, Tsit5(), callback = callback, tstops = [-2.95]) @test sol(-2.95, continuity = :right) ≈ sol(-2.95, continuity = :left) + 2 f = function (du, u, p, t) - du[1] = -u[1] + sin(t) + return du[1] = -u[1] + sin(t) end prob = ODEProblem(f, [1.0], (0.0, 10.0)) condition = function (u, t, integrator) # Event when event_f(u,t,k) == 0 - t - 2.95 + return t - 2.95 end affect! = function (integrator) - integrator.u = integrator.u .+ 2 + return integrator.u = integrator.u .+ 2 end callback = ContinuousCallback(condition, affect!) -sol = solve(prob, Tsit5(), callback = callback, abstol = 1e-8, reltol = 1e-6) +sol = solve(prob, Tsit5(), callback = callback, abstol = 1.0e-8, reltol = 1.0e-6) # Force integrator to step on event -sol = solve(prob, Tsit5(), callback = callback, abstol = 1e-8, reltol = 1e-6, tstops = [2.95]) +sol = solve(prob, Tsit5(), callback = callback, abstol = 1.0e-8, reltol = 1.0e-6, tstops = [2.95]) @test sol(2.95, continuity = :right)[1] ≈ sol(2.95, continuity = :left)[1] + 2 condition = function (out, u, t, integrator) # Event when event_f(u,t,k) == 0 - out[1] = t - 2.95 + return out[1] = t - 2.95 end affect! = function (integrator, idx) - if idx == 1 + return if idx == 1 integrator.u = integrator.u .+ 2 end end callback = VectorContinuousCallback(condition, affect!, 1) -sol = solve(prob, Tsit5(), callback = callback, abstol = 1e-8, reltol = 1e-6) +sol = solve(prob, Tsit5(), callback = callback, abstol = 1.0e-8, reltol = 1.0e-6) # Force integrator to step on event -sol = solve(prob, Tsit5(), callback = callback, abstol = 1e-8, reltol = 1e-6, tstops = [2.95]) +sol = solve(prob, Tsit5(), callback = callback, abstol = 1.0e-8, reltol = 1.0e-6, tstops = [2.95]) @test sol(2.95, continuity = :right)[1] ≈ sol(2.95, continuity = :left)[1] + 2 f = function (du, u, p, t) du[1] = u[2] - du[2] = -9.81 + return du[2] = -9.81 end condition = function (u, t, integrator) # Event when event_f(u,t,k) == 0 - u[1] + return u[1] end affect! = nothing affect_neg! = function (integrator) - integrator.u[2] = -integrator.u[2] + return integrator.u[2] = -integrator.u[2] end callback = ContinuousCallback(condition, affect!, affect_neg!, interp_points = 100) @@ -107,12 +107,12 @@ prob = ODEProblem(f, u0, tspan) sol = solve(prob, Tsit5(), callback = callback, adaptive = false, dt = 1 / 4) condition = function (out, u, t, integrator) # Event when event_f(u,t,k) == 0 - out[1] = u[1] + return out[1] = u[1] end affect! = nothing affect_neg! = function (integrator, idx) - if idx == 1 + return if idx == 1 integrator.u[2] = -integrator.u[2] end end @@ -122,16 +122,18 @@ vcb = VectorContinuousCallback(condition, affect!, 1, interp_points = 100) sol = solve(prob, Tsit5(), callback = vcb, adaptive = false, dt = 1 / 4) condition_single = function (u, t, integrator) # Event when event_f(u,t,k) == 0 - u + return u end affect! = nothing affect_neg! = function (integrator) - integrator.u[2] = -integrator.u[2] + return integrator.u[2] = -integrator.u[2] end -callback_single = ContinuousCallback(condition_single, affect!, affect_neg!, - interp_points = 100, idxs = 1) +callback_single = ContinuousCallback( + condition_single, affect!, affect_neg!, + interp_points = 100, idxs = 1 +) u0 = [50.0, 0.0] tspan = (0.0, 15.0) @@ -151,18 +153,20 @@ sol = solve(prob, Tsit5(), callback = callback_single, saveat = t - eps(t)) #plot(sol,denseplot=true) condition_single = function (out, u, t, integrator) # Event when event_f(u,t,k) == 0 - out[1] = u[1] + return out[1] = u[1] end affect! = nothing affect_neg! = function (integrator, idx) - if idx == 1 + return if idx == 1 integrator.u[2] = -integrator.u[2] end end -callback_single = VectorContinuousCallback(condition_single, affect!, affect_neg!, 1, - interp_points = 100) +callback_single = VectorContinuousCallback( + condition_single, affect!, affect_neg!, 1, + interp_points = 100 +) sol = solve(prob, Tsit5(), callback = callback_single, adaptive = false, dt = 1 / 4) sol = solve(prob, Tsit5(), callback = callback_single, save_everystep = false) @@ -188,9 +192,15 @@ bounced = ODEProblem(f, sol[8], (0.0, 1.0)) sol_bounced = solve(bounced, Vern6(), callback = callback, dt = sol.t[9] - sol.t[8]) #plot(sol_bounced,denseplot=true) sol_bounced(0.04) # Complete density -@test maximum(maximum.(map((i) -> sol.k[9][i] - sol_bounced.k[2][i], - 1:length(sol.k[9])))) == - 0 +@test maximum( + maximum.( + map( + (i) -> sol.k[9][i] - sol_bounced.k[2][i], + 1:length(sol.k[9]) + ) + ) +) == + 0 sol2 = solve(prob, Vern6(), callback = callback, adaptive = false, dt = 1 / 2^4) #plot(sol2) @@ -202,7 +212,7 @@ sol3 = solve(prob, Vern6(), saveat = [0.5]) ## Saving callback condition = function (u, t, integrator) - true + return true end affect! = function (integrator) end @@ -214,7 +224,7 @@ sol4 = solve(prob, Tsit5(), callback = saving_callback) @test sol2(3) ≈ sol(3) affect! = function (integrator) - u_modified!(integrator, false) + return u_modified!(integrator, false) end saving_callback2 = DiscreteCallback(condition, affect!, save_positions = save_positions) sol4 = solve(prob, Tsit5(), callback = saving_callback2) @@ -225,15 +235,15 @@ sol4_extra = solve(prob, Tsit5(), callback = cbs) @test length(sol4_extra) == 2length(sol4) - 1 condition = function (u, t, integrator) - u[1] + return u[1] end vcondition = function (out, u, t, integrator) - out[1] = u[1] + return out[1] = u[1] end affect! = function (integrator, retcode = nothing) - if retcode === nothing + return if retcode === nothing terminate!(integrator) else terminate!(integrator, retcode) @@ -241,7 +251,7 @@ affect! = function (integrator, retcode = nothing) end vaffect! = function (integrator, idx, retcode = nothing) - if idx == 1 + return if idx == 1 if retcode === nothing terminate!(integrator) else @@ -251,13 +261,19 @@ vaffect! = function (integrator, idx, retcode = nothing) end terminate_callback = ContinuousCallback(condition, affect!) -custom_retcode_callback = ContinuousCallback(condition, - x -> affect!(x, ReturnCode.MaxIters)) +custom_retcode_callback = ContinuousCallback( + condition, + x -> affect!(x, ReturnCode.MaxIters) +) vterminate_callback = VectorContinuousCallback(vcondition, vaffect!, 1) -vcustom_retcode_callback = VectorContinuousCallback(vcondition, - (x, idx) -> vaffect!(x, idx, - ReturnCode.MaxIters), - 1) +vcustom_retcode_callback = VectorContinuousCallback( + vcondition, + (x, idx) -> vaffect!( + x, idx, + ReturnCode.MaxIters + ), + 1 +) tspan2 = (0.0, Inf) prob2 = ODEProblem(f, u0, tspan2) @@ -267,7 +283,7 @@ sol5_1 = solve(prob2, Tsit5(), callback = custom_retcode_callback) @test sol5.retcode == ReturnCode.Terminated @test sol5_1.retcode == ReturnCode.MaxIters -@test sol5[end][1] < 3e-12 +@test sol5[end][1] < 3.0e-12 @test sol5.t[end] ≈ sqrt(50 * 2 / 9.81) sol5 = solve(prob2, Tsit5(), callback = vterminate_callback) @@ -275,11 +291,11 @@ sol5_1 = solve(prob2, Tsit5(), callback = vcustom_retcode_callback) @test sol5.retcode == ReturnCode.Terminated @test sol5_1.retcode == ReturnCode.MaxIters -@test sol5[end][1] < 3e-12 +@test sol5[end][1] < 3.0e-12 @test sol5.t[end] ≈ sqrt(50 * 2 / 9.81) affect2! = function (integrator) - if integrator.t >= 3.5 + return if integrator.t >= 3.5 terminate!(integrator) else integrator.u[2] = -integrator.u[2] @@ -287,7 +303,7 @@ affect2! = function (integrator) end vaffect2! = function (integrator, idx) - if idx == 1 + return if idx == 1 if integrator.t >= 3.5 terminate!(integrator) else @@ -297,8 +313,10 @@ vaffect2! = function (integrator, idx) end terminate_callback2 = ContinuousCallback(condition, nothing, affect2!, interp_points = 100) -vterminate_callback2 = VectorContinuousCallback(vcondition, nothing, vaffect2!, 1, - interp_points = 100) +vterminate_callback2 = VectorContinuousCallback( + vcondition, nothing, vaffect2!, 1, + interp_points = 100 +) sol5 = solve(prob2, Vern7(), callback = terminate_callback2) @@ -311,11 +329,11 @@ sol5 = solve(prob2, Vern7(), callback = vterminate_callback2) @test sol5.t[end] ≈ 3 * sqrt(50 * 2 / 9.81) condition = function (u, t, integrator) # Event when event_f(u,t,k) == 0 - t - 4 + return t - 4 end affect! = function (integrator) - terminate!(integrator) + return terminate!(integrator) end terminate_callback3 = ContinuousCallback(condition, affect!, interp_points = 1000) @@ -335,7 +353,7 @@ event_triggered = false condition_simple(u, t, integrator) = t_event - t function affect_simple!(integrator) global event_triggered - event_triggered = true + return event_triggered = true end cb = ContinuousCallback(condition_simple, nothing, affect_simple!) prob = ODEProblem(f_simple, [1.0], (0.0, 2.0 * t_event)) @@ -351,7 +369,7 @@ sol1 = solve(ode, Tsit5(), callback = TerminateSteadyState()) # DiscreteCallback f = function (du, u, p, t) du[1] = -0.5 * u[1] + 10 - du[2] = -0.5 * u[2] + return du[2] = -0.5 * u[2] end u0 = [10, 10.0] @@ -373,12 +391,12 @@ sol2 = solve(prob, Tsit5(), callback = cb, tstops = tstop, saveat = prevfloat.(t f = (u, p, t) -> -1.0im * u prob = ODEProblem(f, complex([1.0]), (0.0, 1.0)) condition = function (out, u, t, integrator) - out[1] = t - 0.5 + return out[1] = t - 0.5 end n = 0 affect! = function (integrator, event_index) global n - n += 1 + return n += 1 end callback = VectorContinuousCallback(condition, affect!, 1) sol = solve(prob, Tsit5(), callback = callback) @@ -386,15 +404,15 @@ sol = solve(prob, Tsit5(), callback = callback) # case of immutable partitioned state f = function (u, p, t) - ArrayPartition(SVector{1}(u[2]), SVector{1}(-9.81)) + return ArrayPartition(SVector{1}(u[2]), SVector{1}(-9.81)) end condition = function (u, t, integrator) # Event when event_f(u,t,k) == 0 - u[1] + return u[1] end affect! = nothingf = affect_neg! = function (integrator) - integrator.u = ArrayPartition(SVector{1}(integrator.u[1]), SVector{1}(-integrator.u[2])) + return integrator.u = ArrayPartition(SVector{1}(integrator.u[1]), SVector{1}(-integrator.u[2])) end callback = ContinuousCallback(condition, affect!, affect_neg!, interp_points = 100) @@ -423,7 +441,7 @@ sol = solve(prob, Tsit5(), callback = cb, tstops = [2.5]) prob = ODEProblem((x, p, t) -> -1.01 * x, ones(2), (0.0, 1.0)) integrator = init(prob, Tsit5(), save_everystep = false) set_u!(integrator, 2 * ones(2)) -step!(integrator, 1e-5, true) +step!(integrator, 1.0e-5, true) @test all(u -> u > 1.5, integrator.u) # https://github.com/SciML/OrdinaryDiffEq.jl/pull/1777 diff --git a/test/integrators/resize_tests.jl b/test/integrators/resize_tests.jl index 94fe53170a..68483eec8e 100644 --- a/test/integrators/resize_tests.jl +++ b/test/integrators/resize_tests.jl @@ -34,10 +34,15 @@ resize!(i, 5) @test size(i.cache.nlsolver.cache.W) == (5, 5) @test length(i.cache.nlsolver.cache.du1) == 5 @test length(i.cache.nlsolver.cache.weight) == 5 -@test all(size(DI.jacobian( - (du, u) -> (i.f(du, u, nothing, nothing)), rand(5), i.cache.nlsolver.cache.jac_config[1], - AutoForwardDiff(tag = ForwardDiff.Tag(DiffEqBase.OrdinaryDiffEqTag(), Float64)), rand(5))) .== - 5) +@test all( + size( + DI.jacobian( + (du, u) -> (i.f(du, u, nothing, nothing)), rand(5), i.cache.nlsolver.cache.jac_config[1], + AutoForwardDiff(tag = ForwardDiff.Tag(DiffEqBase.OrdinaryDiffEqTag(), Float64)), rand(5) + ) + ) .== + 5 +) solve!(i) i = init(prob, ImplicitEuler(; autodiff = AutoFiniteDiff())) @@ -57,9 +62,14 @@ resize!(i, 5) @test size(i.cache.nlsolver.cache.W) == (5, 5) @test length(i.cache.nlsolver.cache.du1) == 5 @test length(i.cache.nlsolver.cache.weight) == 5 -@test all(size(DI.jacobian( - (du, u) -> (i.f(du, u, nothing, nothing)), rand(5), i.cache.nlsolver.cache.jac_config[1], - AutoFiniteDiff(), rand(5))) .== 5) +@test all( + size( + DI.jacobian( + (du, u) -> (i.f(du, u, nothing, nothing)), rand(5), i.cache.nlsolver.cache.jac_config[1], + AutoFiniteDiff(), rand(5) + ) + ) .== 5 +) solve!(i) i = init(prob, Rosenbrock23()) @@ -79,10 +89,15 @@ resize!(i, 5) @test size(i.cache.J) == (5, 5) @test size(i.cache.W) == (5, 5) @test length(i.cache.linsolve_tmp) == 5 -@test all(size(DI.jacobian( - (du, u) -> (i.f(du, u, nothing, nothing)), rand(5), i.cache.jac_config[1], - AutoForwardDiff(tag = ForwardDiff.Tag(DiffEqBase.OrdinaryDiffEqTag(), Float64)), rand(5))) .== - 5) +@test all( + size( + DI.jacobian( + (du, u) -> (i.f(du, u, nothing, nothing)), rand(5), i.cache.jac_config[1], + AutoForwardDiff(tag = ForwardDiff.Tag(DiffEqBase.OrdinaryDiffEqTag(), Float64)), rand(5) + ) + ) .== + 5 +) solve!(i) i = init(prob, Rosenbrock23(autodiff = AutoForwardDiff(), linsolve = KrylovJL_GMRES())) @@ -121,9 +136,14 @@ resize!(i, 5) @test size(i.cache.J) == (5, 5) @test size(i.cache.W) == (5, 5) @test length(i.cache.linsolve_tmp) == 5 -@test all(size(DI.jacobian( - (du, u) -> (i.f(du, u, nothing, nothing)), rand(5), i.cache.jac_config[1], - AutoFiniteDiff(), rand(5))) .== 5) +@test all( + size( + DI.jacobian( + (du, u) -> (i.f(du, u, nothing, nothing)), rand(5), i.cache.jac_config[1], + AutoFiniteDiff(), rand(5) + ) + ) .== 5 +) solve!(i) function f(du, u, p, t) @@ -132,6 +152,7 @@ function f(du, u, p, t) for i in 3:length(u) du[i] = 0.0 end + return end function f_jac(J, u, p, t) J[1, 1] = 2.0 - 1.2 * u[2] @@ -147,7 +168,7 @@ function f_jac(J, u, p, t) end end end - nothing + return nothing end ff = ODEFunction(f; jac = f_jac, jac_prototype = [1.0 1.0; 1.0 1.0]) @@ -160,7 +181,7 @@ solve!(i) function dsdt(ds, s, _, t) # state looks like x1,v1, x2,v2, x3,v3,... ds[1:2:end] .= s[2:2:end] # velocity changes position - ds[2:2:end] .= -1.0 # (constant downward acceleration) + return ds[2:2:end] .= -1.0 # (constant downward acceleration) end function splitCheck(s, t, intgr) @@ -187,7 +208,7 @@ function splitMod!(intgr) # comment out these lines and it will work with Rosenbrock32. resize!(intgr, length(s) + 2) # (resizes s -> intgr.u) s[end - 1] = rand() # new position - s[end] = rand() # new velocity + return s[end] = rand() # new velocity end function runSim(method) @@ -198,7 +219,7 @@ function runSim(method) # callback to bounce / split system. cb = DiscreteCallback(splitCheck, splitMod!) - solve(prob, method, callback = cb, dtmax = 0.01) + return solve(prob, method, callback = cb, dtmax = 0.01) # setting dtmax here so the discrete callback doesn't miss the zero-crossing too badly. # ...no real reason not to use a continuous callback here, I just chose not to. end diff --git a/test/integrators/rev_events_tests.jl b/test/integrators/rev_events_tests.jl index 55c55a8aca..23da054222 100644 --- a/test/integrators/rev_events_tests.jl +++ b/test/integrators/rev_events_tests.jl @@ -6,7 +6,7 @@ function test_callback_inplace(alg; kwargs...) cb = ContinuousCallback((u, t, int) -> u[1] - exp(1), terminate!) prob = ODEProblem(f, [5.0], (2.0, 0.0), callback = cb) sol = solve(prob, alg; kwargs...) - sol.u[end][1] ≈ exp(1) + return sol.u[end][1] ≈ exp(1) end function test_callback_outofplace(alg; kwargs...) @@ -14,7 +14,7 @@ function test_callback_outofplace(alg; kwargs...) cb = ContinuousCallback((u, t, int) -> u[1] - exp(1), terminate!) prob = ODEProblem(f, [5.0], (2.0, 0.0), callback = cb) sol = solve(prob, alg; kwargs...) - sol.u[end][1] ≈ exp(1) + return sol.u[end][1] ≈ exp(1) end function test_callback_scalar(alg; kwargs...) @@ -22,7 +22,7 @@ function test_callback_scalar(alg; kwargs...) cb = ContinuousCallback((u, t, int) -> u - exp(1), terminate!) prob = ODEProblem(f, 5.0, (2.0, 0.0), callback = cb) sol = solve(prob, alg; kwargs...) - sol.u[end] ≈ exp(1) + return sol.u[end] ≈ exp(1) end function test_callback_svector(alg; kwargs...) @@ -30,7 +30,7 @@ function test_callback_svector(alg; kwargs...) cb = ContinuousCallback((u, t, int) -> u[1] - exp(1), terminate!) prob = ODEProblem(f, SVector(5.0), (2.0, 0.0), callback = cb) sol = solve(prob, alg; kwargs...) - sol.u[end][1] ≈ exp(1) + return sol.u[end][1] ≈ exp(1) end function test_callback_mvector(alg; kwargs...) @@ -38,7 +38,7 @@ function test_callback_mvector(alg; kwargs...) cb = ContinuousCallback((u, t, int) -> u[1] - exp(1), terminate!) prob = ODEProblem(f, MVector(5.0), (2.0, 0.0), callback = cb) sol = solve(prob, alg; kwargs...) - sol.u[end][1] ≈ exp(1) + return sol.u[end][1] ≈ exp(1) end println("inplace") diff --git a/test/integrators/split_ode_tests.jl b/test/integrators/split_ode_tests.jl index b4a468d791..009c0ac764 100644 --- a/test/integrators/split_ode_tests.jl +++ b/test/integrators/split_ode_tests.jl @@ -2,7 +2,7 @@ using OrdinaryDiffEq, SparseArrays, LinearAlgebra, Test function explicit_fun(du, _, _, _) du .= 0 - nothing + return nothing end #Capillary leveling in an axisymmetric polar domain @@ -19,12 +19,12 @@ end #Capillary pressure p=-1/r*d/dr(r*dh/dr) @. tmp[2:(end - 1)] = -(tmp[2:(end - 1)] - tmp[1:(end - 2)]) / dr / nodes[2:(end - 1)] #Disjoining pressure A/h^3 - @. tmp[2:(end - 1)] -= 1E-3 / h[2:(end - 1)]^3 + @. tmp[2:(end - 1)] -= 1.0e-3 / h[2:(end - 1)]^3 #r*h^3*dp/dr @. tmp[2:(end - 2)] = (tmp[3:(end - 1)] - tmp[2:(end - 2)]) / dr * - boundaries[2:(end - 1)] * (h[2:(end - 2)]^3 + h[3:(end - 1)]^3) / - 2 + boundaries[2:(end - 1)] * (h[2:(end - 2)]^3 + h[3:(end - 1)]^3) / + 2 #1/3*1/r*d/dr(r*h^3*dp/dr) @. du = (tmp[3:(end - 2)] - tmp[2:(end - 3)]) / dr / nodes[3:(end - 2)] / 3 nothing @@ -32,26 +32,30 @@ end #Initial droplet shape function droplet(r, h_p) - if r <= 1 + return if r <= 1 h_p + (2 - h_p) * (1 - r^2) else h_p end end -tspan = [0, 1E-2] +tspan = [0, 1.0e-2] N = 1000 dr = 4 / N r = @. dr / 2 + dr * (0:(N - 1)) -h0 = map(x -> droplet(x, 1E-4), r) +h0 = map(x -> droplet(x, 1.0e-4), r) r = [r[2]; r[1]; r; r[end]; r[end]] boundaries = @. (r[1:(end - 1)] + r[2:end]) / 2 -jac_proto = spdiagm(0 => ones(N), -1 => ones(N - 1), 1 => ones(N - 1), -2 => ones(N - 2), - 2 => ones(N - 2)) +jac_proto = spdiagm( + 0 => ones(N), -1 => ones(N - 1), 1 => ones(N - 1), -2 => ones(N - 2), + 2 => ones(N - 2) +) -fun = ODEFunction((dh, h, p, t) -> capillary_leveling(dh, h, dr, r, boundaries), - jac_prototype = jac_proto) +fun = ODEFunction( + (dh, h, p, t) -> capillary_leveling(dh, h, dr, r, boundaries), + jac_prototype = jac_proto +) prob = ODEProblem(fun, h0, tspan) #Should be functionally equivalent to above, explicit_fun does nothing @@ -60,18 +64,18 @@ sprob = SplitODEProblem(sfun, h0, tspan) #CFNLIRK3 has same erroneous FSAL logic as KenCarp solvers #Can't efficiently test with stiff problem (to cause dtmin issue) because it requires constant dt -@test_broken solve(sprob, CFNLIRK3(), reltol = 1E-8, dt = 1E-5).retcode == - ReturnCode.Success +@test_broken solve(sprob, CFNLIRK3(), reltol = 1.0e-8, dt = 1.0e-5).retcode == + ReturnCode.Success for Alg in (KenCarp3, KenCarp4, KenCarp5, KenCarp47, KenCarp58) print(Alg) - sol = solve(prob, Alg(), reltol = 1E-8) + sol = solve(prob, Alg(), reltol = 1.0e-8) @test sol.retcode == ReturnCode.Success - split_sol = solve(sprob, Alg(), reltol = 1E-8) + split_sol = solve(sprob, Alg(), reltol = 1.0e-8) @test split_sol.retcode == ReturnCode.Success L2 = norm(sol[end] .- split_sol[end]) / sqrt(N) println(" ", L2) - @test L2 < 1E-6 + @test L2 < 1.0e-6 end diff --git a/test/integrators/step_limiter_test.jl b/test/integrators/step_limiter_test.jl index 690d36e557..dd129341a8 100644 --- a/test/integrators/step_limiter_test.jl +++ b/test/integrators/step_limiter_test.jl @@ -14,14 +14,14 @@ function test_step_limiter(alg_type) sol = solve(prob, alg_type(; step_limiter!), dt = 0.1) n = sol.stats.naccept + sol.stats.nreject - @test n == STEP_LIMITER_VAR[] + return @test n == STEP_LIMITER_VAR[] end @testset "Step_limiter Test" begin # it only catches the most basic errors, i.e. if the step_limiter! function is not called # or called more then one time - # test the step_limiter! function + # test the step_limiter! function alg_types = [ QNDF1, QNDF2, QNDF, FBDF, ImplicitEuler, ImplicitMidpoint, Trapezoid, TRBDF2, SDIRK2, SDIRK22, ABDF2, Feagin10, Feagin12, Feagin14, @@ -44,7 +44,8 @@ end ParsaniKetchesonDeconinck3S184, ParsaniKetchesonDeconinck3S105, ParsaniKetchesonDeconinck3S205, CKLLSRK43_2, CKLLSRK54_3C, CKLLSRK95_4S, CKLLSRK95_4C, CKLLSRK95_4M, CKLLSRK54_3C_3R, CKLLSRK54_3M_3R, CKLLSRK54_3N_3R, CKLLSRK85_4C_3R, CKLLSRK85_4M_3R, CKLLSRK85_4P_3R, - CKLLSRK54_3N_4R, CKLLSRK54_3M_4R, CKLLSRK65_4M_4R, CKLLSRK85_4FM_4R, CKLLSRK75_4M_5R] #Stepanov5 + CKLLSRK54_3N_4R, CKLLSRK54_3M_4R, CKLLSRK65_4M_4R, CKLLSRK85_4FM_4R, CKLLSRK75_4M_5R, + ] #Stepanov5 for alg_type in alg_types test_step_limiter(alg_type) diff --git a/test/interface/ad_tests.jl b/test/interface/ad_tests.jl index 40c4e4fe43..b0b5434f77 100644 --- a/test/interface/ad_tests.jl +++ b/test/interface/ad_tests.jl @@ -3,7 +3,7 @@ using OrdinaryDiffEq, OrdinaryDiffEqCore, ForwardDiff, FiniteDiff, LinearAlgebra function f(du, u, p, t) du[1] = -p[1] - du[2] = p[2] + return du[2] = p[2] end for x in 0:0.001:5 @@ -12,12 +12,14 @@ for x in 0:0.001:5 print("AD Ping $x") end function test_f(p) - cb = ContinuousCallback((u, t, i) -> u[1], - (integrator) -> (called = true; integrator.p[2] = zero(integrator.p[2]))) + cb = ContinuousCallback( + (u, t, i) -> u[1], + (integrator) -> (called = true; integrator.p[2] = zero(integrator.p[2])) + ) prob = ODEProblem(f, eltype(p).([1.0, 0.0]), eltype(p).((0.0, 1.0)), copy(p)) - integrator = init(prob, Tsit5(), abstol = 1e-14, reltol = 1e-14, callback = cb) + integrator = init(prob, Tsit5(), abstol = 1.0e-14, reltol = 1.0e-14, callback = cb) step!(integrator) - solve!(integrator).u[end] + return solve!(integrator).u[end] end p = [2.0, x] called = false @@ -26,12 +28,12 @@ for x in 0:0.001:5 called = false fordiff = ForwardDiff.jacobian(test_f, p) @test called - @test findiff ≈ fordiff rtol=1e-5 + @test findiff ≈ fordiff rtol = 1.0e-5 end function f2(du, u, p, t) du[1] = -u[2] - du[2] = p[2] + return du[2] = p[2] end for x in 2.1:0.001:5 @@ -40,12 +42,14 @@ for x in 2.1:0.001:5 print("AD Ping $x") end function test_f2(p) - cb = ContinuousCallback((u, t, i) -> u[1], - (integrator) -> (called = true; integrator.p[2] = zero(integrator.p[2]))) + cb = ContinuousCallback( + (u, t, i) -> u[1], + (integrator) -> (called = true; integrator.p[2] = zero(integrator.p[2])) + ) prob = ODEProblem(f2, eltype(p).([1.0, 0.0]), eltype(p).((0.0, 1.0)), copy(p)) - integrator = init(prob, Tsit5(), abstol = 1e-12, reltol = 1e-12, callback = cb) + integrator = init(prob, Tsit5(), abstol = 1.0e-12, reltol = 1.0e-12, callback = cb) step!(integrator) - solve!(integrator).u[end] + return solve!(integrator).u[end] end p = [2.0, x] findiff = FiniteDiff.finite_difference_jacobian(test_f2, p) @@ -53,7 +57,7 @@ for x in 2.1:0.001:5 called = false fordiff = ForwardDiff.jacobian(test_f2, p) @test called - @test findiff ≈ fordiff rtol=1e-5 + @test findiff ≈ fordiff rtol = 1.0e-5 end #= @@ -87,7 +91,7 @@ for x in 1.0:0.001:2.5 x, y = u α, β, δ, γ = p du[1] = dx = α * x - β * x * y - du[2] = dy = -δ * y + γ * x * y + return du[2] = dy = -δ * y + γ * x * y end u0 = [1.0, 1.0] tspan = (0.0, 10.0) @@ -97,13 +101,17 @@ for x in 1.0:0.001:2.5 called = false function test_lotka(p) - cb = ContinuousCallback((u, t, i) -> u[1] - 2.5, - (integrator) -> (called = true; integrator.p[4] = 1.5)) - prob = ODEProblem(lotka_volterra, eltype(p).([1.0, 1.0]), eltype(p).((0.0, 10.0)), - copy(p)) - integrator = init(prob, Tsit5(), abstol = 1e-12, reltol = 1e-12, callback = cb) + cb = ContinuousCallback( + (u, t, i) -> u[1] - 2.5, + (integrator) -> (called = true; integrator.p[4] = 1.5) + ) + prob = ODEProblem( + lotka_volterra, eltype(p).([1.0, 1.0]), eltype(p).((0.0, 10.0)), + copy(p) + ) + integrator = init(prob, Tsit5(), abstol = 1.0e-12, reltol = 1.0e-12, callback = cb) step!(integrator) - solve!(integrator).u[end] + return solve!(integrator).u[end] end findiff = FiniteDiff.finite_difference_jacobian(test_lotka, p) @@ -111,7 +119,7 @@ for x in 1.0:0.001:2.5 called = false fordiff = ForwardDiff.jacobian(test_lotka, p) @test called - @test findiff ≈ fordiff rtol=1e-5 + @test findiff ≈ fordiff rtol = 1.0e-5 end # Gradients and Hessians @@ -171,14 +179,14 @@ f1s = function (du, u, p, t) du[2] = p[3] * u[2] du[3] = p[4] * u[3] du[4] = p[5] * u[4] - nothing + return nothing end f2s = function (du, u, p, t) du[1] = p[1] * u[2] du[2] = p[1] * u[3] du[3] = p[1] * u[4] du[4] = p[1] * u[1] - nothing + return nothing end u0 = [3.4, 3.3, 3.2, 3.1] params = [0.002, -0.005, -0.004, -0.003, -0.002] @@ -189,14 +197,14 @@ sol2 = solve(prob, KenCarp4(); dt = 0.5, saveat = times) function difffunc(p) tmp_prob = remake(prob, p = p) - vec(solve(tmp_prob, KenCarp4(), saveat = times)) + return vec(solve(tmp_prob, KenCarp4(), saveat = times)) end ForwardDiff.jacobian(difffunc, ones(5)) # https://github.com/SciML/OrdinaryDiffEq.jl/issues/1221 f_a = function (du, u, p, t) - du[1] = -p[1] * u[1] + exp(-t) + return du[1] = -p[1] * u[1] + exp(-t) end of_a = p -> begin @@ -205,33 +213,39 @@ of_a = p -> begin prob = ODEProblem(f_a, u0, tspan, p) # sol = solve(prob, Tsit5()) # works # sol = solve(prob, Rodas5(autodiff=false)) # works - sol = solve(prob, Rodas5(autodiff = AutoForwardDiff()), abstol = 1e-14, reltol = 1e-14) # fails + sol = solve(prob, Rodas5(autodiff = AutoForwardDiff()), abstol = 1.0e-14, reltol = 1.0e-14) # fails return sum(t -> abs2(t[1]), sol([1.0, 2.0, 3.0])) end @test !iszero(ForwardDiff.gradient(t -> of_a(t), [1.0])) -@test ForwardDiff.gradient(t -> of_a(t), - [1.0])≈FiniteDiff.finite_difference_gradient(t -> of_a(t), [1.0]) rtol=1e-5 - -SOLVERS_FOR_AD = ((BS3, 1e-12), - (Tsit5, 1e-12), - (KenCarp4, 1e-11), - (KenCarp47, 1e-11), - (KenCarp5, 1e-11), - (KenCarp58, 1e-12), - (TRBDF2, 1e-07), - (Rodas4, 1e-12), - (Rodas5, 1e-12), - (Rosenbrock23, 1e-10), - (Rosenbrock32, 1e-11), - (Vern6, 1e-11), - (Vern7, 1e-11), - (RadauIIA3, 1e-04), - (RadauIIA5, 1e-12)) +@test ForwardDiff.gradient( + t -> of_a(t), + [1.0] +) ≈ FiniteDiff.finite_difference_gradient(t -> of_a(t), [1.0]) rtol = 1.0e-5 + +SOLVERS_FOR_AD = ( + (BS3, 1.0e-12), + (Tsit5, 1.0e-12), + (KenCarp4, 1.0e-11), + (KenCarp47, 1.0e-11), + (KenCarp5, 1.0e-11), + (KenCarp58, 1.0e-12), + (TRBDF2, 1.0e-7), + (Rodas4, 1.0e-12), + (Rodas5, 1.0e-12), + (Rosenbrock23, 1.0e-10), + (Rosenbrock32, 1.0e-11), + (Vern6, 1.0e-11), + (Vern7, 1.0e-11), + (RadauIIA3, 1.0e-4), + (RadauIIA5, 1.0e-12), +) @testset "$alg can handle ForwardDiff.Dual in u0 with rtol=$rtol when iip=$iip" for (alg, rtol) in SOLVERS_FOR_AD, - iip in (true, - false) + iip in ( + true, + false, + ) if iip f = (du, u, p, t) -> du .= -0.5 * u @@ -241,17 +255,21 @@ SOLVERS_FOR_AD = ((BS3, 1e-12), g = u0 -> begin tspan = (0.0, 1.0) - prob = ODEProblem(f, + prob = ODEProblem( + f, u0, - tspan) - solve(prob, alg(), abstol = 1e-14, reltol = 1e-14)(last(tspan))[1] + tspan + ) + solve(prob, alg(), abstol = 1.0e-14, reltol = 1.0e-14)(last(tspan))[1] end - @test ForwardDiff.gradient(g, [10.0])[1]≈exp(-0.5) rtol=rtol + @test ForwardDiff.gradient(g, [10.0])[1] ≈ exp(-0.5) rtol = rtol end @testset "$alg can handle ForwardDiff.Dual in t0 with rtol=$rtol when iip=$iip" for (alg, rtol) in SOLVERS_FOR_AD, - iip in (true, - false) + iip in ( + true, + false, + ) if iip f = (du, u, p, t) -> du .= -0.5 * u @@ -263,12 +281,14 @@ end g = t0 -> begin tspan = (t0, 1.0) u0 = typeof(t0)[_u0] - prob = ODEProblem(f, + prob = ODEProblem( + f, u0, - tspan) - solve(prob, alg(), abstol = 1e-14, reltol = 1e-14)(last(tspan))[1] + tspan + ) + solve(prob, alg(), abstol = 1.0e-14, reltol = 1.0e-14)(last(tspan))[1] end - @test ForwardDiff.derivative(g, 0.0)≈_u0 / 2 * exp(-0.5) rtol=rtol + @test ForwardDiff.derivative(g, 0.0) ≈ _u0 / 2 * exp(-0.5) rtol = rtol end # https://github.com/SciML/DifferentialEquations.jl/issues/903 @@ -276,7 +296,7 @@ end #ode function function foo!(du, u, p, t) du .= p .* u - nothing + return nothing end #least squares objective function @@ -285,7 +305,7 @@ function objfun(x, prob, data, solver, reltol, abstol) sol = solve(prob, solver, reltol = reltol, abstol = abstol) ofv = 0.0 if any((s.retcode != ReturnCode.Success for s in sol)) - ofv = 1e12 + ofv = 1.0e12 else ofv = sum((sol .- data) .^ 2) end @@ -296,32 +316,34 @@ p0 = [1.1, 1.2, 1.3, 1.4] tspan = (0.0, 1.0) u0 = 2 * ones(4) saveat = 0.0:0.01:1.0 -reltol = 1e-14 -abstol = 1e-14 +reltol = 1.0e-14 +abstol = 1.0e-14 prob = ODEProblem{true}(foo!, u0, tspan, p0, saveat = saveat) data = solve(prob, Tsit5(), reltol = reltol, abstol = abstol) fn(x, solver) = objfun(x, prob, data, solver, reltol, abstol) -@test norm(ForwardDiff.gradient(x -> fn(x, Tsit5()), p0)) < 1e-9 -@test norm(ForwardDiff.gradient(x -> fn(x, Vern7()), p0)) < 1e-9 -@test norm(ForwardDiff.gradient(x -> fn(x, Rodas4()), p0)) < 1e-9 -@test norm(ForwardDiff.gradient(x -> fn(x, Rosenbrock23()), p0)) < 1e-6 -@test norm(ForwardDiff.gradient(x -> fn(x, AutoTsit5(Rosenbrock23())), p0)) < 1e-9 -@test norm(ForwardDiff.gradient(x -> fn(x, AutoVern9(Rodas4())), p0)) < 1e-9 +@test norm(ForwardDiff.gradient(x -> fn(x, Tsit5()), p0)) < 1.0e-9 +@test norm(ForwardDiff.gradient(x -> fn(x, Vern7()), p0)) < 1.0e-9 +@test norm(ForwardDiff.gradient(x -> fn(x, Rodas4()), p0)) < 1.0e-9 +@test norm(ForwardDiff.gradient(x -> fn(x, Rosenbrock23()), p0)) < 1.0e-6 +@test norm(ForwardDiff.gradient(x -> fn(x, AutoTsit5(Rosenbrock23())), p0)) < 1.0e-9 +@test norm(ForwardDiff.gradient(x -> fn(x, AutoVern9(Rodas4())), p0)) < 1.0e-9 # test AD with LinearExponential() function f(x) K = MatrixOperator(x) u0 = eltype(x).([1.0, 0.0]) prob = ODEProblem(K, u0, (0.0, 10.0)) - sol = solve(prob, LinearExponential(), tstops = [0.0, 10.0])[2, :] + return sol = solve(prob, LinearExponential(), tstops = [0.0, 10.0])[2, :] end K_ = [-1.0 0.0; 1.0 -1.0] -@test isapprox(ForwardDiff.jacobian(f, K_)[2], 0.00226999, atol = 1e-6) +@test isapprox(ForwardDiff.jacobian(f, K_)[2], 0.00226999, atol = 1.0e-6) -implicit_algs = [FBDF, +implicit_algs = [ + FBDF, Rosenbrock23, - TRBDF2] + TRBDF2, +] @testset "deprecated AD keyword arguments still work with $alg" for alg in implicit_algs f = (du, u, p, t) -> du .= -0.5 * u @@ -350,7 +372,7 @@ end # https://github.com/SciML/OrdinaryDiffEq.jl/issues/2675 x0 = [0.1] DifferentiationInterface.gradient(AutoForwardDiff(), x0) do x - prob = ODEProblem{true}((du, u, p, t) -> (du[1] = -u[1]), x, (0.0, 1.0),) - sol = solve(prob, DefaultODEAlgorithm(), reltol = 1e-6) + prob = ODEProblem{true}((du, u, p, t) -> (du[1] = -u[1]), x, (0.0, 1.0)) + sol = solve(prob, DefaultODEAlgorithm(), reltol = 1.0e-6) sum(sol) end ≈ [6.765310476296564] diff --git a/test/interface/algebraic_interpolation.jl b/test/interface/algebraic_interpolation.jl index fdffe02761..3e5f3c5c49 100644 --- a/test/interface/algebraic_interpolation.jl +++ b/test/interface/algebraic_interpolation.jl @@ -7,7 +7,7 @@ function rober_ip(du, u, p, t) du[1] = -k₁ * y₁ + k₃ * y₂ * y₃ du[2] = k₁ * y₁ - k₃ * y₂ * y₃ - k₂ * y₂^2 du[3] = y₁ + y₂ + y₃ - 1 - nothing + return nothing end function rober_op(u, p, t) du = similar(u) @@ -16,22 +16,24 @@ function rober_op(u, p, t) du[1] = -k₁ * y₁ + k₃ * y₂ * y₃ du[2] = k₁ * y₁ - k₃ * y₂ * y₃ - k₂ * y₂^2 du[3] = y₁ + y₂ + y₃ - 1 - du + return du end -M = [1.0 0 0 - 0 1.0 0 - 0 0 0] +M = [ + 1.0 0 0 + 0 1.0 0 + 0 0 0 +] fip = ODEFunction(rober_ip, mass_matrix = M) -prob_ip = ODEProblem(fip, [1.0, 0.0, 0.0], (0.0, 1e5), (0.04, 3e7, 1e4)) +prob_ip = ODEProblem(fip, [1.0, 0.0, 0.0], (0.0, 1.0e5), (0.04, 3.0e7, 1.0e4)) fop = ODEFunction(rober_op, mass_matrix = M) -prob_op = ODEProblem(fop, [1.0, 0.0, 0.0], (0.0, 1e5), (0.04, 3e7, 1e4)) +prob_op = ODEProblem(fop, [1.0, 0.0, 0.0], (0.0, 1.0e5), (0.04, 3.0e7, 1.0e4)) -ref_ip = solve(prob_ip, Rodas5P(), reltol = 1e-8, abstol = 1e-8) -ref_op = solve(prob_op, Rodas5P(), reltol = 1e-8, abstol = 1e-8) +ref_ip = solve(prob_ip, Rodas5P(), reltol = 1.0e-8, abstol = 1.0e-8) +ref_op = solve(prob_op, Rodas5P(), reltol = 1.0e-8, abstol = 1.0e-8) -sol_ip = solve(prob_ip, FBDF(), reltol = 1e-8, abstol = 1e-8) -sol_op = solve(prob_op, FBDF(), reltol = 1e-8, abstol = 1e-8) +sol_ip = solve(prob_ip, FBDF(), reltol = 1.0e-8, abstol = 1.0e-8) +sol_op = solve(prob_op, FBDF(), reltol = 1.0e-8, abstol = 1.0e-8) # make sure interpolation changes don't accidentally break this test suite # the intention is that ref uses a stiffness-aware interpolation, while sol uses hermite @@ -40,8 +42,8 @@ sol_op = solve(prob_op, FBDF(), reltol = 1e-8, abstol = 1e-8) @test occursin("stiffness-aware", SciMLBase.interp_summary(ref_ip)) @test occursin("stiffness-aware", SciMLBase.interp_summary(ref_op)) -reltol = 1e-4 -abstol = 1e-4 +reltol = 1.0e-4 +abstol = 1.0e-4 t = 1 tv = [1, 10, 100] idxs = 3 @@ -56,22 +58,28 @@ idxsv = [2, 3] # primal, scalar index @test isapprox(ref_ip(t, idxs = idxs), sol_ip(t, idxs = idxs), rtol = reltol, atol = abstol) # ip, t @test isapprox( - ref_ip(tv, idxs = idxs), sol_ip(tv, idxs = idxs), rtol = reltol, atol = abstol) # ip, tv + ref_ip(tv, idxs = idxs), sol_ip(tv, idxs = idxs), rtol = reltol, atol = abstol +) # ip, tv @test isapprox(ref_op(t, idxs = idxs), sol_op(t, idxs = idxs), rtol = reltol, atol = abstol) # op, t @test isapprox( - ref_op(tv, idxs = idxs), sol_op(tv, idxs = idxs), rtol = reltol, atol = abstol) # op, tv + ref_op(tv, idxs = idxs), sol_op(tv, idxs = idxs), rtol = reltol, atol = abstol +) # op, tv # primal, vector index @test isapprox( - ref_ip(t, idxs = idxsv), sol_ip(t, idxs = idxsv), rtol = reltol, atol = abstol) + ref_ip(t, idxs = idxsv), sol_ip(t, idxs = idxsv), rtol = reltol, atol = abstol +) @test isapprox( - ref_ip(tv, idxs = idxsv), sol_ip(tv, idxs = idxsv), rtol = reltol, atol = abstol) + ref_ip(tv, idxs = idxsv), sol_ip(tv, idxs = idxsv), rtol = reltol, atol = abstol +) @test isapprox( - ref_op(t, idxs = idxsv), sol_op(t, idxs = idxsv), rtol = reltol, atol = abstol) + ref_op(t, idxs = idxsv), sol_op(t, idxs = idxsv), rtol = reltol, atol = abstol +) @test isapprox( - ref_op(tv, idxs = idxsv), sol_op(tv, idxs = idxsv), rtol = reltol, atol = abstol) + ref_op(tv, idxs = idxsv), sol_op(tv, idxs = idxsv), rtol = reltol, atol = abstol +) -abstol = 1e-3 +abstol = 1.0e-3 # derivative, no index @test isapprox(ref_ip(t, Val{1}), sol_ip(t, Val{1}), rtol = reltol, atol = abstol) @test isapprox(ref_ip(tv, Val{1}), sol_ip(tv, Val{1}), rtol = reltol, atol = abstol) @@ -79,24 +87,40 @@ abstol = 1e-3 @test isapprox(ref_op(tv, Val{1}), sol_op(tv, Val{1}), rtol = reltol, atol = abstol) # derivative, scalar index -@test isapprox(ref_ip(t, Val{1}, idxs = idxs), - sol_ip(t, Val{1}, idxs = idxs), rtol = reltol, atol = abstol) -@test isapprox(ref_ip(tv, Val{1}, idxs = idxs), - sol_ip(tv, Val{1}, idxs = idxs), rtol = reltol, atol = abstol) -@test isapprox(ref_op(t, Val{1}, idxs = idxs), - sol_op(t, Val{1}, idxs = idxs), rtol = reltol, atol = abstol) -@test isapprox(ref_op(tv, Val{1}, idxs = idxs), - sol_op(tv, Val{1}, idxs = idxs), rtol = reltol, atol = abstol) +@test isapprox( + ref_ip(t, Val{1}, idxs = idxs), + sol_ip(t, Val{1}, idxs = idxs), rtol = reltol, atol = abstol +) +@test isapprox( + ref_ip(tv, Val{1}, idxs = idxs), + sol_ip(tv, Val{1}, idxs = idxs), rtol = reltol, atol = abstol +) +@test isapprox( + ref_op(t, Val{1}, idxs = idxs), + sol_op(t, Val{1}, idxs = idxs), rtol = reltol, atol = abstol +) +@test isapprox( + ref_op(tv, Val{1}, idxs = idxs), + sol_op(tv, Val{1}, idxs = idxs), rtol = reltol, atol = abstol +) # derivative, vector index -@test isapprox(ref_ip(tv, Val{1}, idxs = idxsv), - sol_ip(tv, Val{1}, idxs = idxsv), rtol = reltol, atol = abstol) -@test isapprox(ref_ip(t, Val{1}, idxs = idxsv), - sol_ip(t, Val{1}, idxs = idxsv), rtol = reltol, atol = abstol) -@test isapprox(ref_op(t, Val{1}, idxs = idxsv), - sol_op(t, Val{1}, idxs = idxsv), rtol = reltol, atol = abstol) -@test isapprox(ref_op(tv, Val{1}, idxs = idxsv), - sol_op(tv, Val{1}, idxs = idxsv), rtol = reltol, atol = abstol) +@test isapprox( + ref_ip(tv, Val{1}, idxs = idxsv), + sol_ip(tv, Val{1}, idxs = idxsv), rtol = reltol, atol = abstol +) +@test isapprox( + ref_ip(t, Val{1}, idxs = idxsv), + sol_ip(t, Val{1}, idxs = idxsv), rtol = reltol, atol = abstol +) +@test isapprox( + ref_op(t, Val{1}, idxs = idxsv), + sol_op(t, Val{1}, idxs = idxsv), rtol = reltol, atol = abstol +) +@test isapprox( + ref_op(tv, Val{1}, idxs = idxsv), + sol_op(tv, Val{1}, idxs = idxsv), rtol = reltol, atol = abstol +) # higher derivatives should be zero # second derivative, no index diff --git a/test/interface/aliasing_tests.jl b/test/interface/aliasing_tests.jl index 83b26a26d8..41fdb4b745 100644 --- a/test/interface/aliasing_tests.jl +++ b/test/interface/aliasing_tests.jl @@ -5,6 +5,7 @@ import ODEProblemLibrary: prob_ode_linear # Test that the old keyword works, and that the new AliasSpecier works. u0_old_alias_kwarg_sol = solve(prob_ode_linear, Tsit5(), alias_u0 = true) u0_new_alias_kwarg_sol = solve( - prob_ode_linear, Tsit5(), alias = ODEAliasSpecifier(alias_u0 = true)) + prob_ode_linear, Tsit5(), alias = ODEAliasSpecifier(alias_u0 = true) +) @test u0_old_alias_kwarg_sol == u0_new_alias_kwarg_sol diff --git a/test/interface/autodiff_error_tests.jl b/test/interface/autodiff_error_tests.jl index e3ffe24862..4a03a7cd12 100644 --- a/test/interface/autodiff_error_tests.jl +++ b/test/interface/autodiff_error_tests.jl @@ -8,7 +8,7 @@ function lorenz(u, p, t) a[1] = u[2] du2 = u[1] * (28.0 - u[3]) - u[2] du3 = u[1] * u[2] - (8 / 3) * u[3] - [du1, du2, du3] + return [du1, du2, du3] end u0 = [1.0; 0.0; 0.0] tspan = (0.0, 1.0) @@ -20,16 +20,17 @@ function lorenz(u, p, t) a[1] = t du2 = u[1] * (28.0 - u[3]) - u[2] du3 = u[1] * u[2] - (8 / 3) * u[3] - [du1, du2, du3] + return [du1, du2, du3] end @test_throws OrdinaryDiffEqDifferentiation.FirstAutodiffTgradError solve( - prob, Rosenbrock23()) + prob, Rosenbrock23() +) function lorenz!(du, u, p, t) du[1] = 10.0(u[2] - u[1]) a[1] = u[2] du[2] = u[1] * (28.0 - u[3]) - u[2] - du[3] = u[1] * u[2] - (8 / 3) * u[3] + return du[3] = u[1] * u[2] - (8 / 3) * u[3] end u0 = [1.0; 0.0; 0.0] tspan = (0.0, 1.0) @@ -40,23 +41,24 @@ function lorenz2!(du, u, p, t) du[1] = 10.0(u[2] - u[1]) a[1] = t du[2] = u[1] * (28.0 - u[3]) - u[2] - du[3] = u[1] * u[2] - (8 / 3) * u[3] + return du[3] = u[1] * u[2] - (8 / 3) * u[3] end prob = ODEProblem(lorenz2!, u0, tspan) @test_throws OrdinaryDiffEqDifferentiation.FirstAutodiffTgradError solve( - prob, Rosenbrock23()) + prob, Rosenbrock23() +) ## Test that nothing is using duals when autodiff=AutoFiniteDiff() ## https://discourse.julialang.org/t/rodas4-using-dual-number-for-time-with-autodiff-false/98256 for alg in [ - Rosenbrock23(autodiff = AutoFiniteDiff()), - Rodas4(autodiff = AutoFiniteDiff()), - Rodas5(autodiff = AutoFiniteDiff()), - QNDF(autodiff = AutoFiniteDiff()), - TRBDF2(autodiff = AutoFiniteDiff()), - KenCarp4(autodiff = AutoFiniteDiff()) -] + Rosenbrock23(autodiff = AutoFiniteDiff()), + Rodas4(autodiff = AutoFiniteDiff()), + Rodas5(autodiff = AutoFiniteDiff()), + QNDF(autodiff = AutoFiniteDiff()), + TRBDF2(autodiff = AutoFiniteDiff()), + KenCarp4(autodiff = AutoFiniteDiff()), + ] u = [0.0, 0.0] function f1(u, p, t) #display(typeof(t)) @@ -73,7 +75,7 @@ for alg in [ du2 = zeros(2) du2[1] = 0.1 * u[1] + 0.2 * u[2] du2[2] = 0.1 * t - du .= du2 + return du .= du2 end prob = ODEProblem(f2, u, (0.0, 1.0)) sol = solve(prob, alg) diff --git a/test/interface/autosparse_detection_tests.jl b/test/interface/autosparse_detection_tests.jl index 1cadd52b3d..d148a397bf 100644 --- a/test/interface/autosparse_detection_tests.jl +++ b/test/interface/autosparse_detection_tests.jl @@ -1,9 +1,11 @@ using Test, OrdinaryDiffEq, LinearSolve, ADTypes, ForwardDiff, SparseConnectivityTracer, - SparseMatrixColorings + SparseMatrixColorings import ODEProblemLibrary: prob_ode_2Dlinear -ad = AutoSparse(AutoForwardDiff(), sparsity_detector = TracerSparsityDetector(), - coloring_algorithm = GreedyColoringAlgorithm()) +ad = AutoSparse( + AutoForwardDiff(), sparsity_detector = TracerSparsityDetector(), + coloring_algorithm = GreedyColoringAlgorithm() +) prob = prob_ode_2Dlinear @@ -14,7 +16,6 @@ prob = prob_ode_2Dlinear @test_nowarn solve(prob, FBDF(autodiff = ad)) # Test that no dense matrices are made sparse -diag_prob = ODEProblem((du, u, p, t) -> du .= -1.0 .* u, rand(Int(1e7)), (0, 1.0)) +diag_prob = ODEProblem((du, u, p, t) -> du .= -1.0 .* u, rand(Int(1.0e7)), (0, 1.0)) @test_nowarn solve(diag_prob, Rodas5P(autodiff = ad, linsolve = LinearSolve.KrylovJL_GMRES())) - diff --git a/test/interface/checkinit_tests.jl b/test/interface/checkinit_tests.jl index e71b412e2c..383e4944c8 100644 --- a/test/interface/checkinit_tests.jl +++ b/test/interface/checkinit_tests.jl @@ -7,40 +7,46 @@ function rober(du, u, p, t) du[1] = -k₁ * y₁ + k₃ * y₂ * y₃ du[2] = k₁ * y₁ - k₃ * y₂ * y₃ - k₂ * y₂^2 du[3] = y₁ + y₂ + y₃ - 1 - nothing + return nothing end function rober(u, p, t) y₁, y₂, y₃ = u k₁, k₂, k₃ = p - [-k₁ * y₁ + k₃ * y₂ * y₃, + return [ + -k₁ * y₁ + k₃ * y₂ * y₃, k₁ * y₁ - k₃ * y₂ * y₃ - k₂ * y₂^2, - y₁ + y₂ + y₃ - 1] + y₁ + y₂ + y₃ - 1, + ] end -M = [1.0 0 0 - 0 1.0 0 - 0 0 0] +M = [ + 1.0 0 0 + 0 1.0 0 + 0 0 0 +] roberf = ODEFunction(rober, mass_matrix = M) roberf_oop = ODEFunction{false}(rober, mass_matrix = M) -prob_mm = ODEProblem(roberf, [1.0, 0.0, 0.2], (0.0, 1e5), (0.04, 3e7, 1e4)) -prob_mm_oop = ODEProblem(roberf_oop, [1.0, 0.0, 0.2], (0.0, 1e5), (0.04, 3e7, 1e4)) +prob_mm = ODEProblem(roberf, [1.0, 0.0, 0.2], (0.0, 1.0e5), (0.04, 3.0e7, 1.0e4)) +prob_mm_oop = ODEProblem(roberf_oop, [1.0, 0.0, 0.2], (0.0, 1.0e5), (0.04, 3.0e7, 1.0e4)) @test_throws SciMLBase.CheckInitFailureError solve( - prob_mm, Rodas5P(), reltol = 1e-8, abstol = 1e-8, initializealg = SciMLBase.CheckInit()) + prob_mm, Rodas5P(), reltol = 1.0e-8, abstol = 1.0e-8, initializealg = SciMLBase.CheckInit() +) @test_throws SciMLBase.CheckInitFailureError solve( - prob_mm_oop, Rodas5P(), reltol = 1e-8, abstol = 1e-8, - initializealg = SciMLBase.CheckInit()) + prob_mm_oop, Rodas5P(), reltol = 1.0e-8, abstol = 1.0e-8, + initializealg = SciMLBase.CheckInit() +) f_oop = function (du, u, p, t) - out1 = -0.04u[1] + 1e4 * u[2] * u[3] - du[1] - out2 = +0.04u[1] - 3e7 * u[2]^2 - 1e4 * u[2] * u[3] - du[2] + out1 = -0.04u[1] + 1.0e4 * u[2] * u[3] - du[1] + out2 = +0.04u[1] - 3.0e7 * u[2]^2 - 1.0e4 * u[2] * u[3] - du[2] out3 = u[1] + u[2] + u[3] - 1.0 - [out1, out2, out3] + return [out1, out2, out3] end f = function (resid, du, u, p, t) - resid[1] = -0.04u[1] + 1e4 * u[2] * u[3] - du[1] - resid[2] = +0.04u[1] - 3e7 * u[2]^2 - 1e4 * u[2] * u[3] - du[2] - resid[3] = u[1] + u[2] + u[3] - 1.0 + resid[1] = -0.04u[1] + 1.0e4 * u[2] * u[3] - du[1] + resid[2] = +0.04u[1] - 3.0e7 * u[2]^2 - 1.0e4 * u[2] * u[3] - du[2] + return resid[3] = u[1] + u[2] + u[3] - 1.0 end u₀ = [1.0, 0, 0.2] @@ -50,6 +56,8 @@ differential_vars = [true, true, false] prob = DAEProblem(f, du₀, u₀, tspan, differential_vars = differential_vars) prob_oop = DAEProblem(f_oop, du₀, u₀, tspan, differential_vars = differential_vars) @test_throws SciMLBase.CheckInitFailureError solve( - prob, DFBDF(), reltol = 1e-8, abstol = 1e-8, initializealg = SciMLBase.CheckInit()) + prob, DFBDF(), reltol = 1.0e-8, abstol = 1.0e-8, initializealg = SciMLBase.CheckInit() +) @test_throws SciMLBase.CheckInitFailureError solve( - prob_oop, DFBDF(), reltol = 1e-8, abstol = 1e-8, initializealg = SciMLBase.CheckInit()) + prob_oop, DFBDF(), reltol = 1.0e-8, abstol = 1.0e-8, initializealg = SciMLBase.CheckInit() +) diff --git a/test/interface/complex_tests.jl b/test/interface/complex_tests.jl index 9d9092d71d..1fa90d8fa3 100644 --- a/test/interface/complex_tests.jl +++ b/test/interface/complex_tests.jl @@ -19,12 +19,12 @@ implicit = [ImplicitEuler, Trapezoid, Kvaerno3, Rosenbrock23] ψ0 = [1.0 + 0.0im; 0.0] prob = ODEProblem(f, ψ0, (-T, T)) sol = solve(prob, alg()) - @test norm(sol(T))≈1 atol=1e-2 + @test norm(sol(T)) ≈ 1 atol = 1.0e-2 end ψ0 = @SArray [1.0 + 0.0im; 0.0] prob = ODEProblem(fun, ψ0, (-T, T)) sol = solve(prob, alg()) - @test norm(sol(T))≈1 atol=1e-2 + @test norm(sol(T)) ≈ 1 atol = 1.0e-2 end @testset "Complex Tests on Implicit Autodiff Methods. alg=$alg" for alg in implicit @@ -33,12 +33,12 @@ end ψ0 = [1.0 + 0.0im; 0.0] prob = ODEProblem(f, ψ0, (-T, T)) sol = solve(prob, alg()) - @test norm(sol(T))≈1 atol=1e-2 + @test norm(sol(T)) ≈ 1 atol = 1.0e-2 end ψ0 = @SArray [1.0 + 0.0im; 0.0] prob = ODEProblem(fun, ψ0, (-T, T)) sol = solve(prob, alg()) - @test norm(sol(T))≈1 atol=1e-2 + @test norm(sol(T)) ≈ 1 atol = 1.0e-2 end end @@ -46,19 +46,19 @@ end ψ0 = [1.0 + 0.0im; 0.0] prob = ODEProblem(fun_inplace, ψ0, (-T, T)) sol = solve(prob, alg(autodiff = AutoFiniteDiff())) - @test norm(sol(T))≈1 atol=1e-2 + @test norm(sol(T)) ≈ 1 atol = 1.0e-2 end @testset "Complex Tests on Implicit Finite Diff Out-of-place Methods. alg=$alg" for alg in implicit ψ0 = [1.0 + 0.0im; 0.0] prob = ODEProblem(fun, ψ0, (-T, T)) sol = solve(prob, alg(autodiff = AutoFiniteDiff())) - @test norm(sol(T))≈1 atol=1e-2 + @test norm(sol(T)) ≈ 1 atol = 1.0e-2 end @testset "Complex Tests on Implicit Finite Diff Out-of-place Methods SArray. alg=$alg" for alg in implicit ψ0 = @SArray [1.0 + 0.0im; 0.0] prob = ODEProblem(fun, ψ0, (-T, T)) sol = solve(prob, alg(autodiff = AutoFiniteDiff())) - @test norm(sol(T))≈1 atol=1e-2 + @test norm(sol(T)) ≈ 1 atol = 1.0e-2 end diff --git a/test/interface/composite_algorithm_test.jl b/test/interface/composite_algorithm_test.jl index 7123cb42cf..97e0754401 100644 --- a/test/interface/composite_algorithm_test.jl +++ b/test/interface/composite_algorithm_test.jl @@ -30,16 +30,20 @@ sol = solve(prob, alg_switch) @inferred SciMLBase.__init(prob, alg_switch) v = @inferred OrdinaryDiffEqCore.ode_interpolant( 1.0, integrator1, integrator1.opts.save_idxs, - Val{0}) + Val{0} +) @inferred OrdinaryDiffEqCore.ode_interpolant!( v, 1.0, integrator1, integrator1.opts.save_idxs, - Val{0}) + Val{0} +) v = @inferred OrdinaryDiffEqCore.ode_extrapolant( 1.0, integrator1, integrator1.opts.save_idxs, - Val{0}) + Val{0} +) @inferred OrdinaryDiffEqCore.ode_extrapolant!( v, 1.0, integrator1, integrator1.opts.save_idxs, - Val{0}) + Val{0} +) @testset "Mixed adaptivity" begin reverse_choice(integrator) = (Int(integrator.t > 0.5) + 1) @@ -53,28 +57,34 @@ v = @inferred OrdinaryDiffEqCore.ode_extrapolant( sol4 = solve(prob_ode_linear, alg_mixed_r; dt = 0.05, adaptive = false) sol5 = solve(prob_ode_linear, alg_mixed2; dt = 0.05, adaptive = false) @test sol3.t == sol4.t && sol3.u == sol4.u - @test sol3(0.8)≈sol2(0.8) atol=1e-4 - @test sol5(0.8)≈sol2(0.8) atol=1e-4 + @test sol3(0.8) ≈ sol2(0.8) atol = 1.0e-4 + @test sol5(0.8) ≈ sol2(0.8) atol = 1.0e-4 end condition(u, t, integrator) = t == 192.0 function affect!(integrator) integrator.u[1] += 14000 - integrator.u[2] += 14000 + return integrator.u[2] += 14000 end -A = [-0.027671669470584172 -0.0 -0.0 -0.0 -0.0 -0.0; - -0.0 -0.05540281553537378 -0.0 -0.0 -0.0 -0.0; - 0.011534597161021629 0.011933539591245327 -0.24891886153387743 0.023054812171672122 0.0 0.0; - 0.0 0.0 0.17011732278405356 -0.023054812171672122 0.0 0.0; - 0.01613707230956254 0.04346927594412846 0.03148193084515083 0.0 -1.5621055510998967e9 7.293040577236404; - 0.0 0.0 0.0 0.0 1.559509231932001e9 -7.293040577236404] -prob = ODEProblem((du, u, p, t) -> mul!(du, A, u), zeros(6), (0.0, 1000), tstops = [192], - callback = DiscreteCallback(condition, affect!)); +A = [ + -0.027671669470584172 -0.0 -0.0 -0.0 -0.0 -0.0; + -0.0 -0.05540281553537378 -0.0 -0.0 -0.0 -0.0; + 0.011534597161021629 0.011933539591245327 -0.24891886153387743 0.023054812171672122 0.0 0.0; + 0.0 0.0 0.17011732278405356 -0.023054812171672122 0.0 0.0; + 0.01613707230956254 0.04346927594412846 0.03148193084515083 0.0 -1.5621055510998967e9 7.293040577236404; + 0.0 0.0 0.0 0.0 1.559509231932001e9 -7.293040577236404 +] +prob = ODEProblem( + (du, u, p, t) -> mul!(du, A, u), zeros(6), (0.0, 1000), tstops = [192], + callback = DiscreteCallback(condition, affect!) +); sol = solve(prob, alg = AutoVern7(Rodas5())) @test sol.t[end] == 1000.0 -sol = solve(prob, - alg = OrdinaryDiffEqCore.AutoAlgSwitch(ExplicitRK(constructVerner7()), Rodas5())) +sol = solve( + prob, + alg = OrdinaryDiffEqCore.AutoAlgSwitch(ExplicitRK(constructVerner7()), Rodas5()) +) @test sol.t[end] == 1000.0 prob = remake(prob_ode_2Dlinear, u0 = rand(ComplexF64, 2, 2)) @@ -88,13 +98,16 @@ function rober(du, u, p, t) du[1] = -k₁ * y₁ + k₃ * y₂ * y₃ du[2] = k₁ * y₁ - k₃ * y₂ * y₃ - k₂ * y₂^2 du[3] = y₁ + y₂ + y₃ - 1 - nothing + return nothing end -M = [1.0 0 0 - 0 1.0 0 - 0 0 0] +M = [ + 1.0 0 0 + 0 1.0 0 + 0 0 0 +] f = ODEFunction(rober, mass_matrix = M) -prob_mm = ODEProblem(f, [1.0, 0.0, 0.0], (0.0, 1e5), (0.04, 3e7, 1e4)) +prob_mm = ODEProblem(f, [1.0, 0.0, 0.0], (0.0, 1.0e5), (0.04, 3.0e7, 1.0e4)) cb = DiscreteCallback( - (u, t, integrator) -> true, (integrator) -> u_modified!(integrator, true)) + (u, t, integrator) -> true, (integrator) -> u_modified!(integrator, true) +) sol = solve(prob_mm, DefaultODEAlgorithm(), callback = cb) diff --git a/test/interface/composite_interpolation.jl b/test/interface/composite_interpolation.jl index 19c320acdd..9748c92921 100644 --- a/test/interface/composite_interpolation.jl +++ b/test/interface/composite_interpolation.jl @@ -10,20 +10,24 @@ function f(du, u, p, t) du[1] = dGut du[2] = dCent du[3] = dPeriph - du[4] = dResp + return du[4] = dResp end -p = (Ka = 2.769674683505292, CL = 0.8315548845614537, Vc = 45.87339297906569, +p = ( + Ka = 2.769674683505292, CL = 0.8315548845614537, Vc = 45.87339297906569, Q = 1.4544520084387496, Vp = 9.460961128900388, Kin = 6.360418843010778, - Kout = 3.524234094210465, IC50 = 0.4483840673123028, IMAX = 1.0, γ = 2.0) + Kout = 3.524234094210465, IC50 = 0.4483840673123028, IMAX = 1.0, γ = 2.0, +) -u0 = [0.35793622925128044, +u0 = [ + 0.35793622925128044, 0.7123008259214687, 0.10685666303615937, - 0.00] + 0.0, +] prob = ODEProblem(f, u0, (0, 26.0), p) sol = solve(prob, AutoTsit5(Rodas5(), dtfac = 2)) -@test sol([21.2])[4, 1]≈1.803 atol=1e-2 +@test sol([21.2])[4, 1] ≈ 1.803 atol = 1.0e-2 #= using Plots diff --git a/test/interface/dae_initialization_tests.jl b/test/interface/dae_initialization_tests.jl index 8e63d8caf6..82f7a065b6 100644 --- a/test/interface/dae_initialization_tests.jl +++ b/test/interface/dae_initialization_tests.jl @@ -8,28 +8,35 @@ function rober_oop(u, p, t) du1 = -k₁ * y₁ + k₃ * y₂ * y₃ du2 = k₁ * y₁ - k₃ * y₂ * y₃ - k₂ * y₂^2 du3 = y₁ + y₂ + y₃ - 1 - [du1, du2, du3] + return [du1, du2, du3] end -M = [1.0 0 0 - 0 1.0 0 - 0 0 0] +M = [ + 1.0 0 0 + 0 1.0 0 + 0 0 0 +] f_oop = ODEFunction(rober_oop, mass_matrix = M) -prob_mm = ODEProblem(f_oop, [1.0, 0.0, 0.0], (0.0, 1e5), (0.04, 3e7, 1e4)) +prob_mm = ODEProblem(f_oop, [1.0, 0.0, 0.0], (0.0, 1.0e5), (0.04, 3.0e7, 1.0e4)) sol = solve( - prob_mm, Rosenbrock23(autodiff = AutoFiniteDiff()), reltol = 1e-8, abstol = 1e-8) + prob_mm, Rosenbrock23(autodiff = AutoFiniteDiff()), reltol = 1.0e-8, abstol = 1.0e-8 +) @test sol[1] == [1.0, 0.0, 0.0] # Ensure initialization is unchanged if it works at the start! -sol = solve(prob_mm, Rosenbrock23(), reltol = 1e-8, abstol = 1e-8, - initializealg = ShampineCollocationInit()) +sol = solve( + prob_mm, Rosenbrock23(), reltol = 1.0e-8, abstol = 1.0e-8, + initializealg = ShampineCollocationInit() +) @test sol[1] == [1.0, 0.0, 0.0] # Ensure initialization is unchanged if it works at the start! -prob_mm = ODEProblem(f_oop, [1.0, 0.0, 0.2], (0.0, 1e5), (0.04, 3e7, 1e4)) -sol = solve(prob_mm, Rosenbrock23(), reltol = 1e-8, abstol = 1e-8) +prob_mm = ODEProblem(f_oop, [1.0, 0.0, 0.2], (0.0, 1.0e5), (0.04, 3.0e7, 1.0e4)) +sol = solve(prob_mm, Rosenbrock23(), reltol = 1.0e-8, abstol = 1.0e-8) @test sum(sol[1]) ≈ 1 @test sol[1] ≈ [1.0, 0.0, 0.0] for alg in [Rosenbrock23(autodiff = AutoFiniteDiff()), Trapezoid()] local sol - sol = solve(prob_mm, alg, reltol = 1e-8, abstol = 1e-8, - initializealg = ShampineCollocationInit()) + sol = solve( + prob_mm, alg, reltol = 1.0e-8, abstol = 1.0e-8, + initializealg = ShampineCollocationInit() + ) @test sum(sol[1]) ≈ 1 end @@ -39,60 +46,69 @@ function rober(du, u, p, t) du[1] = -k₁ * y₁ + k₃ * y₂ * y₃ du[2] = k₁ * y₁ - k₃ * y₂ * y₃ - k₂ * y₂^2 du[3] = y₁ + y₂ + y₃ - 1 - nothing + return nothing end -M = [1.0 0 0 - 0 1.0 0 - 0 0 0] +M = [ + 1.0 0 0 + 0 1.0 0 + 0 0 0 +] f = ODEFunction(rober, mass_matrix = M) -prob_mm = ODEProblem(f, [1.0, 0.0, 0.0], (0.0, 1e5), (0.04, 3e7, 1e4)) -sol = solve(prob_mm, Rodas5(autodiff = AutoFiniteDiff()), reltol = 1e-8, abstol = 1e-8) +prob_mm = ODEProblem(f, [1.0, 0.0, 0.0], (0.0, 1.0e5), (0.04, 3.0e7, 1.0e4)) +sol = solve(prob_mm, Rodas5(autodiff = AutoFiniteDiff()), reltol = 1.0e-8, abstol = 1.0e-8) @test sol[1] == [1.0, 0.0, 0.0] # Ensure initialization is unchanged if it works at the start! -sol = solve(prob_mm, Rodas5(), reltol = 1e-8, abstol = 1e-8, - initializealg = ShampineCollocationInit()) +sol = solve( + prob_mm, Rodas5(), reltol = 1.0e-8, abstol = 1.0e-8, + initializealg = ShampineCollocationInit() +) @test sol[1] == [1.0, 0.0, 0.0] # Ensure initialization is unchanged if it works at the start! -prob_mm = ODEProblem(f, [1.0, 0.0, 1.0], (0.0, 1e5), (0.04, 3e7, 1e4)) -sol = solve(prob_mm, Rodas5(), reltol = 1e-8, abstol = 1e-8) +prob_mm = ODEProblem(f, [1.0, 0.0, 1.0], (0.0, 1.0e5), (0.04, 3.0e7, 1.0e4)) +sol = solve(prob_mm, Rodas5(), reltol = 1.0e-8, abstol = 1.0e-8) @test sum(sol[1]) ≈ 1 @test sol[1] ≈ [1.0, 0.0, 0.0] for alg in [Rodas5(autodiff = AutoFiniteDiff()), Trapezoid()] local sol - sol = solve(prob_mm, alg, reltol = 1e-8, abstol = 1e-8, - initializealg = ShampineCollocationInit()) + sol = solve( + prob_mm, alg, reltol = 1.0e-8, abstol = 1.0e-8, + initializealg = ShampineCollocationInit() + ) @test sum(sol[1]) ≈ 1 end function rober_no_p(du, u, p, t) y₁, y₂, y₃ = u - (k₁, k₂, k₃) = (0.04, 3e7, 1e4) + (k₁, k₂, k₃) = (0.04, 3.0e7, 1.0e4) du[1] = -k₁ * y₁ + k₃ * y₂ * y₃ du[2] = k₁ * y₁ - k₃ * y₂ * y₃ - k₂ * y₂^2 du[3] = y₁ + y₂ + y₃ - 1 - nothing + return nothing end function rober_oop_no_p(du, u, p, t) y₁, y₂, y₃ = u - (k₁, k₂, k₃) = (0.04, 3e7, 1e4) + (k₁, k₂, k₃) = (0.04, 3.0e7, 1.0e4) du1 = -k₁ * y₁ + k₃ * y₂ * y₃ du2 = k₁ * y₁ - k₃ * y₂ * y₃ - k₂ * y₂^2 du3 = y₁ + y₂ + y₃ - 1 - [du1, du2, du3] + return [du1, du2, du3] end # test oop and iip ODE initialization with parameters without eltype/length struct UnusedParam end for f in ( - ODEFunction(rober_no_p, mass_matrix = M), ODEFunction(rober_oop_no_p, mass_matrix = M)) + ODEFunction(rober_no_p, mass_matrix = M), ODEFunction(rober_oop_no_p, mass_matrix = M), + ) local prob, probp - prob = ODEProblem(f, [1.0, 0.0, 1.0], (0.0, 1e5)) - probp = ODEProblem(f, [1.0, 0.0, 1.0], (0.0, 1e5), UnusedParam) + prob = ODEProblem(f, [1.0, 0.0, 1.0], (0.0, 1.0e5)) + probp = ODEProblem(f, [1.0, 0.0, 1.0], (0.0, 1.0e5), UnusedParam) for initializealg in (ShampineCollocationInit(), BrownFullBasicInit()) - isapprox(init(prob, Rodas5(), abstol = 1e-10; initializealg).u, - init(prob, Rodas5(), abstol = 1e-10; initializealg).u) + isapprox( + init(prob, Rodas5(), abstol = 1.0e-10; initializealg).u, + init(prob, Rodas5(), abstol = 1.0e-10; initializealg).u + ) end end @@ -100,20 +116,26 @@ end struct BrokenNLSolve <: SciMLBase.AbstractNonlinearAlgorithm BrokenNLSolve(; kwargs...) = new() end -function SciMLBase.__solve(prob::NonlinearProblem, +function SciMLBase.__solve( + prob::NonlinearProblem, alg::BrokenNLSolve, args...; - kwargs...) + kwargs... + ) u = fill(reinterpret(Float64, 0xDEADBEEFDEADBEEF), 3) - SciMLBase.build_solution(prob, alg, u, copy(u); - retcode = ReturnCode.Success) + return SciMLBase.build_solution( + prob, alg, u, copy(u); + retcode = ReturnCode.Success + ) end function f2(u, p, t) - u + return u end f = ODEFunction(f2, mass_matrix = Diagonal([1.0, 1.0, 0.0])) prob = ODEProblem(f, ones(3), (0.0, 1.0)) -integrator = init(prob, Rodas5P(), - initializealg = ShampineCollocationInit(1.0, BrokenNLSolve())) +integrator = init( + prob, Rodas5P(), + initializealg = ShampineCollocationInit(1.0, BrokenNLSolve()) +) @test all(isequal(reinterpret(Float64, 0xDEADBEEFDEADBEEF)), integrator.u) @testset "`reinit!` reruns initialization" begin @@ -127,16 +149,17 @@ integrator = init(prob, Rodas5P(), iprob.p[1] = integ.u[1] end initialization_data = SciMLBase.OverrideInitData( - initializeprob, update_initializeprob!, initializeprobmap, nothing) + initializeprob, update_initializeprob!, initializeprobmap, nothing + ) fn = ODEFunction(; mass_matrix = [1 0; 0 0], initialization_data) do du, u, p, t du[1] = u[1] du[2] = u[1]^2 - u[2]^2 end prob = ODEProblem(fn, [2.0, 0.0], (0.0, 1.0)) integ = init(prob, Rodas5P()) - @test integ.u≈[2.0, 2.0] atol=1e-8 + @test integ.u ≈ [2.0, 2.0] atol = 1.0e-8 reinit!(integ) - @test integ.u≈[2.0, 2.0] atol=1e-8 + @test integ.u ≈ [2.0, 2.0] atol = 1.0e-8 @test_nowarn step!(integ, 0.01, true) reinit!(integ, reinit_dae = false) @test integ.u ≈ [2.0, 0.0] diff --git a/test/interface/differentiation_traits_tests.jl b/test/interface/differentiation_traits_tests.jl index 75742eb88e..e0931616b3 100644 --- a/test/interface/differentiation_traits_tests.jl +++ b/test/interface/differentiation_traits_tests.jl @@ -6,7 +6,7 @@ tgrad_called = Ref(false) function Lotka(du, u, p, t) du[1] = u[1] - u[1] * u[2] # REPL[7], line 3: du[2] = -3 * u[2] + 1 * u[1] * u[2] - nothing + return nothing end function Lotka_jac(J, u, p, t) @@ -15,14 +15,14 @@ function Lotka_jac(J, u, p, t) J[1, 2] = -u[1] J[2, 1] = 1 * u[2] J[2, 2] = -3 + u[1] - nothing + return nothing end function Lotka_tgrad(grad, u, p, t) tgrad_called.x = true grad[1] = 1 * 0 grad[2] = 1 * 0 - nothing + return nothing end Lotka_f = ODEFunction(Lotka, jac = Lotka_jac, tgrad = Lotka_tgrad) @@ -36,10 +36,10 @@ good_sol = solve(prob, Rosenbrock23()) prob2 = ODEProblem(Lotka, ones(2), (0.0, 10.0)) sol = solve(prob2, Rosenbrock23(autodiff = AutoForwardDiff())) -@test ≈(good_sol[:, end], sol[:, end], rtol = 1e-2) +@test ≈(good_sol[:, end], sol[:, end], rtol = 1.0e-2) sol = solve(prob2, Rosenbrock23(autodiff = AutoForwardDiff(chunksize = 1))) -@test ≈(good_sol[:, end], sol[:, end], rtol = 1e-2) +@test ≈(good_sol[:, end], sol[:, end], rtol = 1.0e-2) sol = solve(prob2, Rosenbrock23(autodiff = AutoFiniteDiff())) -@test ≈(good_sol[:, end], sol[:, end], rtol = 1e-2) +@test ≈(good_sol[:, end], sol[:, end], rtol = 1.0e-2) diff --git a/test/interface/enums.jl b/test/interface/enums.jl index f5996ec28a..7ba5bb32a3 100644 --- a/test/interface/enums.jl +++ b/test/interface/enums.jl @@ -13,7 +13,7 @@ function pois_rand(λ::Float64) end function rate_to_proportion(r::Float64, t::Float64) - 1 - exp(-r * t) + return 1 - exp(-r * t) end; function sir_abm!(du, u, p, t) @@ -50,7 +50,7 @@ function sir_abm!(du, u, p, t) end end end - nothing + return nothing end δt = 0.1 diff --git a/test/interface/event_dae_addsteps.jl b/test/interface/event_dae_addsteps.jl index 2b28a4f52f..1abb4b5057 100644 --- a/test/interface/event_dae_addsteps.jl +++ b/test/interface/event_dae_addsteps.jl @@ -8,7 +8,7 @@ function dynamics!(dx, x, θ, t) dx[2] = -M * g - z + p dx[3] = p - w(t) # the last state (algebraic) p has to be equal to w - if z <= zmin + return if z <= zmin dx[2] = max(dx[2], 0.0) elseif z >= zmax dx[2] = min(dx[2], 0.0) @@ -21,16 +21,18 @@ zmax_cond(x, t, integrator) = zmax - x[1] function zmin_affect_neg!(integrator) integrator.u[1] = zmin - integrator.u[2] = 0.0 + return integrator.u[2] = 0.0 end function zmax_affect_neg!(integrator) integrator.u[1] = zmax - integrator.u[2] = 0.0 + return integrator.u[2] = 0.0 end -cbs = CallbackSet(ContinuousCallback(zmin_cond, zmin_affect_neg!), - ContinuousCallback(zmax_cond, zmax_affect_neg!)) +cbs = CallbackSet( + ContinuousCallback(zmin_cond, zmin_affect_neg!), + ContinuousCallback(zmax_cond, zmax_affect_neg!) +) tf = 20.0 tspan = (0.0, tf) @@ -48,12 +50,12 @@ E = diagm([1.0, M, 0.0]) f = ODEFunction(dynamics!, mass_matrix = E) prob = ODEProblem(f, x0, tspan, θ) -sol1 = solve(prob, Rodas4(), callback = cbs, reltol = 1e-6) -@test sol1(0.06692341688237893)[3]≈0.72 atol=1e-2 -sol1 = solve(prob, Rodas5(), callback = cbs, reltol = 1e-6) -@test sol1(0.06692341688237893)[3]≈0.72 atol=1e-2 -sol1 = solve(prob, Rodas5P(), callback = cbs, reltol = 1e-6) -@test sol1(0.06692341688237893)[3]≈0.72 atol=1e-2 +sol1 = solve(prob, Rodas4(), callback = cbs, reltol = 1.0e-6) +@test sol1(0.06692341688237893)[3] ≈ 0.72 atol = 1.0e-2 +sol1 = solve(prob, Rodas5(), callback = cbs, reltol = 1.0e-6) +@test sol1(0.06692341688237893)[3] ≈ 0.72 atol = 1.0e-2 +sol1 = solve(prob, Rodas5P(), callback = cbs, reltol = 1.0e-6) +@test sol1(0.06692341688237893)[3] ≈ 0.72 atol = 1.0e-2 #= sol1 = solve(prob,Rosenbrock23(),callback=cbs, reltol=1e-6) diff --git a/test/interface/float32.jl b/test/interface/float32.jl index 3d236703b0..91e4076980 100644 --- a/test/interface/float32.jl +++ b/test/interface/float32.jl @@ -1,18 +1,19 @@ using OrdinaryDiffEq, Test function some_arbitrary_function!(du, u, p, τ) du = u / 100 - nothing #function returns nothing + return nothing #function returns nothing end -NF = Float32 # Number format +NF = Float32 # Number format u = NF[0.0, 100.0, π / 2.0, 0.0] #Initial conditions e.g. t, r θ, ϕ params = NF[0.1, 3.5f-7] #Some arbitrary parameters, unused in this example, just a placeholder -tspan = (zero(NF), NF(1e3)) #integrate from t=0 to t = 1000 +tspan = (zero(NF), NF(1.0e3)) #integrate from t=0 to t = 1000 ode_prob = ODEProblem(some_arbitrary_function!, u, tspan, params) for alg in [ - Euler(), Midpoint(), Heun(), Ralston(), RK4(), SSPRK104(), SSPRK22(), SSPRK33(), - SSPRK43(), SSPRK432(), BS3(), BS5(), DP5(), DP8(), Feagin10(), Feagin12(), - Feagin14(), TanYam7(), Tsit5(), TsitPap8(), Vern6(), Vern7(), Vern8(), Vern9()] + Euler(), Midpoint(), Heun(), Ralston(), RK4(), SSPRK104(), SSPRK22(), SSPRK33(), + SSPRK43(), SSPRK432(), BS3(), BS5(), DP5(), DP8(), Feagin10(), Feagin12(), + Feagin14(), TanYam7(), Tsit5(), TsitPap8(), Vern6(), Vern7(), Vern8(), Vern9(), + ] @test ode_solution = solve(ode_prob, alg, dt = 1.0f-1).retcode === ReturnCode.Success end diff --git a/test/interface/get_du.jl b/test/interface/get_du.jl index d745a63132..128b0ebcd0 100644 --- a/test/interface/get_du.jl +++ b/test/interface/get_du.jl @@ -2,7 +2,7 @@ using OrdinaryDiffEq, OrdinaryDiffEqCore, Test function lorenz!(du, u, p, t) du[1] = 10.0(u[2] - u[1]) du[2] = u[1] * (28.0 - u[3]) - u[2] - du[3] = u[1] * u[2] - (8 / 3) * u[3] + return du[3] = u[1] * u[2] - (8 / 3) * u[3] end u0 = [1.0; 0.0; 0.0] tspan = (0.0, 3.0) @@ -15,16 +15,22 @@ dusave_inplace = DiscreteCallback(condition, affect2!) prob = ODEProblem(lorenz!, u0, tspan) sol = solve( - prob, Tsit5(), tstops = [0.2], callback = dusave, abstol = 1e-12, reltol = 1e-12) + prob, Tsit5(), tstops = [0.2], callback = dusave, abstol = 1.0e-12, reltol = 1.0e-12 +) res = copy(cache) -for alg in [Vern6(), Vern7(), Vern8(), Vern9(), Rodas4(), Rodas4P(), - Rodas5(), Rodas5P(), TRBDF2(), KenCarp4(), FBDF(), QNDF()] +for alg in [ + Vern6(), Vern7(), Vern8(), Vern9(), Rodas4(), Rodas4P(), + Rodas5(), Rodas5P(), TRBDF2(), KenCarp4(), FBDF(), QNDF(), + ] sol = solve( - prob, alg, tstops = [0.2], callback = dusave, abstol = 1e-12, reltol = 1e-12) - @test res≈cache rtol=1e-5 + prob, alg, tstops = [0.2], callback = dusave, abstol = 1.0e-12, reltol = 1.0e-12 + ) + @test res ≈ cache rtol = 1.0e-5 - sol = solve(prob, alg, tstops = [0.2], callback = dusave_inplace, - abstol = 1e-12, reltol = 1e-12) - @test res≈cache rtol=1e-5 + sol = solve( + prob, alg, tstops = [0.2], callback = dusave_inplace, + abstol = 1.0e-12, reltol = 1.0e-12 + ) + @test res ≈ cache rtol = 1.0e-5 end diff --git a/test/interface/gpu_autodiff_interface_tests.jl b/test/interface/gpu_autodiff_interface_tests.jl index aebface96f..88152fc6e0 100644 --- a/test/interface/gpu_autodiff_interface_tests.jl +++ b/test/interface/gpu_autodiff_interface_tests.jl @@ -3,7 +3,7 @@ using OrdinaryDiffEq, JLArrays, LinearAlgebra, Test, ADTypes @testset "GPU AutoDiff with JLArrays" begin function f(u, p, t) A = jl(-ones(3, 3)) - return A*u + return A * u end function f!(du, u, p, t) A = jl(-ones(3, 3)) @@ -19,4 +19,4 @@ using OrdinaryDiffEq, JLArrays, LinearAlgebra, Test, ADTypes prob2 = ODEProblem(f!, u0, tspan) solve(prob, TRBDF2()) solve(prob, Rodas5P()) -end \ No newline at end of file +end diff --git a/test/interface/inf_handling.jl b/test/interface/inf_handling.jl index 1ed7b127fc..ec24ebe0ce 100644 --- a/test/interface/inf_handling.jl +++ b/test/interface/inf_handling.jl @@ -5,5 +5,5 @@ tspan = (0.0, Inf) prob = ODEProblem(f, u0, tspan) # Shouldn't error, but should go unstable and abort -sol = solve(prob, Tsit5(), reltol = 1e-8, abstol = 1e-8, adaptive = false, dt = 0.1) +sol = solve(prob, Tsit5(), reltol = 1.0e-8, abstol = 1.0e-8, adaptive = false, dt = 0.1) @test sol.retcode == ReturnCode.Unstable diff --git a/test/interface/inplace_interpolation.jl b/test/interface/inplace_interpolation.jl index 8003bac1b7..da1dc97232 100644 --- a/test/interface/inplace_interpolation.jl +++ b/test/interface/inplace_interpolation.jl @@ -3,9 +3,11 @@ import ODEProblemLibrary: prob_ode_linear, prob_ode_2Dlinear vecarrzero(m::Integer, n) = map(t -> zeros(n), 1:m) -algs_ODE = zip([Tsit5(), Tsit5(), ABM54(), AutoTsit5(Rosenbrock23())], +algs_ODE = zip( + [Tsit5(), Tsit5(), ABM54(), AutoTsit5(Rosenbrock23())], [Dict(), Dict(:dense => false), Dict(:dt => 0.1), Dict()], - ["(normal)", "(not dense)", "(fixed-step)", "(CompositeAlgorithm)"]) + ["(normal)", "(not dense)", "(fixed-step)", "(CompositeAlgorithm)"] +) tt = 0:0.05:1 ntt = length(tt) @@ -14,7 +16,7 @@ out_VVF_1 = vecarrzero(ntt, 1) # Vector{Vector{Float64 out_VVF_2 = vecarrzero(ntt, 2) # Vector{Vector{Float64}} out_VMF = vecarrzero(ntt, size(prob_ode_2Dlinear.u0)) # Vector{Matrix{Float64}} -@testset verbose=true "ODESolution interpolation $str" for (alg, kwargs, str) in algs_ODE +@testset verbose = true "ODESolution interpolation $str" for (alg, kwargs, str) in algs_ODE sol_ODE = solve(prob_ode_linear, alg; kwargs...) sol_ODE_2D = solve(prob_ode_2Dlinear, alg; kwargs...) diff --git a/test/interface/interpolation_derivative_error_tests.jl b/test/interface/interpolation_derivative_error_tests.jl index 8576808b43..fd5d157b00 100644 --- a/test/interface/interpolation_derivative_error_tests.jl +++ b/test/interface/interpolation_derivative_error_tests.jl @@ -2,7 +2,7 @@ using OrdinaryDiffEq, OrdinaryDiffEqCore function lorenz!(du, u, p, t) du[1] = 10.0(u[2] - u[1]) du[2] = u[1] * (28.0 - u[3]) - u[2] - du[3] = u[1] * u[2] - (8 / 3) * u[3] + return du[3] = u[1] * u[2] - (8 / 3) * u[3] end u0 = [1.0; 0.0; 0.0] tspan = (0.0, 100.0) @@ -10,9 +10,11 @@ prob = ODEProblem(lorenz!, u0, tspan) out = rand(3) -for alg in [Rosenbrock23(), Rodas4(), Rodas5P(), Tsit5(), DP5(), - BS5(), OwrenZen3(), OwrenZen4(), OwrenZen5(), - Vern6(), Vern7(), Vern8(), Vern9(), BS3()] +for alg in [ + Rosenbrock23(), Rodas4(), Rodas5P(), Tsit5(), DP5(), + BS5(), OwrenZen3(), OwrenZen4(), OwrenZen5(), + Vern6(), Vern7(), Vern8(), Vern9(), BS3(), + ] @show alg sol = solve(prob, alg) @test_throws OrdinaryDiffEqCore.DerivativeOrderNotPossibleError sol(0.5, Val{10}) diff --git a/test/interface/interpolation_output_types.jl b/test/interface/interpolation_output_types.jl index 5a6767768f..f0f96f0a13 100644 --- a/test/interface/interpolation_output_types.jl +++ b/test/interface/interpolation_output_types.jl @@ -5,7 +5,7 @@ rlc1!(v′, v, (R, L, C), t) = -(v′ / R + v / L) / C identity_f(v, u, p, t) = v # needed to form second order dynamical ODE function setup_rlc(R, L, C; v_init = 0.0, v′_init = 0.0, tspan = (0.0, 50.0)) - DynamicalODEProblem{false}(rlc1!, identity_f, v′_init, v_init, tspan, (R, L, C)) + return DynamicalODEProblem{false}(rlc1!, identity_f, v′_init, v_init, tspan, (R, L, C)) end # simulate voltage impulse @@ -24,7 +24,7 @@ sol = solve(prob, CalvoSanz4(), dt = 1 / 10) function f(du, u, p, t) du .= u - nothing + return nothing end dprob = DiscreteProblem(f, [1, 2, 3], (0, 100)) sol = solve(dprob, FunctionMap()) @@ -55,7 +55,7 @@ tspan = (0.0, 2π) A = √(x₀[1]^2 + dx₀[1]^2) function harmonicoscillator(ddu, du, u, ω, t) - ddu .= -ω^2 * u + return ddu .= -ω^2 * u end prob = SecondOrderODEProblem(harmonicoscillator, dx₀, x₀, tspan, ω) diff --git a/test/interface/linear_nonlinear_tests.jl b/test/interface/linear_nonlinear_tests.jl index 6930d59b4c..36e3d9c981 100644 --- a/test/interface/linear_nonlinear_tests.jl +++ b/test/interface/linear_nonlinear_tests.jl @@ -14,7 +14,7 @@ function precsl(W, du, u, p, t, newW, Plprev, Prprev, solverdata) else Pl = Plprev end - Pl, nothing + return Pl, nothing end function precsr(W, du, u, p, t, newW, Plprev, Prprev, solverdata) @@ -23,7 +23,7 @@ function precsr(W, du, u, p, t, newW, Plprev, Prprev, solverdata) else Pr = Prprev end - nothing, Pr + return nothing, Pr end function precslr(W, du, u, p, t, newW, Plprev, Prprev, solverdata) @@ -32,74 +32,133 @@ function precslr(W, du, u, p, t, newW, Plprev, Prprev, solverdata) else Pr = Prprev end - Pr, Pr + return Pr, Pr end sol = @test_nowarn solve(prob, TRBDF2(autodiff = AutoFiniteDiff())); @test length(sol.t) < 20 -sol = @test_nowarn solve(prob, - TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES())); -@test length(sol.t) < 20 -solref = @test_nowarn solve(prob, - TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), - smooth_est = false)); +sol = @test_nowarn solve( + prob, + TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES()) +); +@test length(sol.t) < 20 +solref = @test_nowarn solve( + prob, + TRBDF2( + autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), + smooth_est = false + ) +); @test length(sol.t) < 20 -sol = @test_nowarn solve(prob, - TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), - precs = precsl, smooth_est = false, concrete_jac = true)); +sol = @test_nowarn solve( + prob, + TRBDF2( + autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), + precs = precsl, smooth_est = false, concrete_jac = true + ) +); @test length(sol.t) < 20 -sol = @test_nowarn solve(prob, - TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), - precs = precsr, smooth_est = false, concrete_jac = true)); +sol = @test_nowarn solve( + prob, + TRBDF2( + autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), + precs = precsr, smooth_est = false, concrete_jac = true + ) +); @test length(sol.t) < 20 -sol = @test_nowarn solve(prob, - TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), - precs = precslr, smooth_est = false, concrete_jac = true)); +sol = @test_nowarn solve( + prob, + TRBDF2( + autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), + precs = precslr, smooth_est = false, concrete_jac = true + ) +); @test length(sol.t) < 20 -sol = @test_nowarn solve(prob, - QNDF(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), - concrete_jac = true)); +sol = @test_nowarn solve( + prob, + QNDF( + autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), + concrete_jac = true + ) +); @test length(sol.t) < 25 -sol = @test_nowarn solve(prob, - Rosenbrock23(autodiff = AutoFiniteDiff(), +sol = @test_nowarn solve( + prob, + Rosenbrock23( + autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), - precs = precslr, concrete_jac = true)); + precs = precslr, concrete_jac = true + ) +); @test length(sol.t) < 20 -sol = @test_nowarn solve(prob, - Rodas4(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), - precs = precslr, concrete_jac = true)); +sol = @test_nowarn solve( + prob, + Rodas4( + autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), + precs = precslr, concrete_jac = true + ) +); @test length(sol.t) < 20 sol = @test_nowarn solve(prob, TRBDF2(autodiff = AutoFiniteDiff())); @test length(sol.t) < 20 sol = @test_nowarn solve( - prob, TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES())); + prob, TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES()) +); @test length(sol.t) < 20 -sol = @test_nowarn solve(prob, - TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), - smooth_est = false)); +sol = @test_nowarn solve( + prob, + TRBDF2( + autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), + smooth_est = false + ) +); @test length(sol.t) < 20 -sol = @test_nowarn solve(prob, - TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), - precs = precsl, smooth_est = false, concrete_jac = true)); +sol = @test_nowarn solve( + prob, + TRBDF2( + autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), + precs = precsl, smooth_est = false, concrete_jac = true + ) +); @test length(sol.t) < 20 -sol = @test_nowarn solve(prob, - TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), - precs = precsr, smooth_est = false, concrete_jac = true)); +sol = @test_nowarn solve( + prob, + TRBDF2( + autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), + precs = precsr, smooth_est = false, concrete_jac = true + ) +); @test length(sol.t) < 20 -sol = @test_nowarn solve(prob, - TRBDF2(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), - precs = precslr, smooth_est = false, concrete_jac = true)); +sol = @test_nowarn solve( + prob, + TRBDF2( + autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), + precs = precslr, smooth_est = false, concrete_jac = true + ) +); @test length(sol.t) < 20 -sol = @test_nowarn solve(prob, - QNDF(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), - concrete_jac = true)); +sol = @test_nowarn solve( + prob, + QNDF( + autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), + concrete_jac = true + ) +); @test length(sol.t) < 25 -sol = @test_nowarn solve(prob, - Rosenbrock23(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), - precs = precslr, concrete_jac = true)); +sol = @test_nowarn solve( + prob, + Rosenbrock23( + autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), + precs = precslr, concrete_jac = true + ) +); @test length(sol.t) < 20 -sol = @test_nowarn solve(prob, - Rodas4(autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), - precs = precslr, concrete_jac = true)); +sol = @test_nowarn solve( + prob, + Rodas4( + autodiff = AutoFiniteDiff(), linsolve = KrylovJL_GMRES(), + precs = precslr, concrete_jac = true + ) +); @test length(sol.t) < 20 diff --git a/test/interface/linear_solver_split_ode_test.jl b/test/interface/linear_solver_split_ode_test.jl index ebc30f5b62..20c306c5b8 100644 --- a/test/interface/linear_solver_split_ode_test.jl +++ b/test/interface/linear_solver_split_ode_test.jl @@ -16,9 +16,11 @@ f1 = (du, u, p, t) -> du .= M1 * u f2 = (du, u, p, t) -> du .= M2 * u prob = SplitODEProblem(f1, f2, u0, tspan) -for algname in (:SBDF2, - :SBDF3, - :KenCarp47) +for algname in ( + :SBDF2, + :SBDF3, + :KenCarp47, + ) @testset "$algname" begin alg0 = @eval $algname() alg1 = @eval $algname(linsolve = LUFactorization()) @@ -35,9 +37,11 @@ f1 = M1 |> MatrixOperator f2 = M2 |> MatrixOperator prob = SplitODEProblem(f1, f2, u0, tspan) -for algname in (:SBDF2, - :SBDF3, - :KenCarp47) +for algname in ( + :SBDF2, + :SBDF3, + :KenCarp47, + ) @testset "$algname" begin alg0 = @eval $algname() diff --git a/test/interface/linear_solver_test.jl b/test/interface/linear_solver_test.jl index 8ab92d1550..32386d8b2d 100644 --- a/test/interface/linear_solver_test.jl +++ b/test/interface/linear_solver_test.jl @@ -30,8 +30,9 @@ odef = ODEFunction(foop; jac = jac, jac_prototype = jac(u0, p, 0.0), paramjac = function g_helper(p; alg = Rosenbrock23(linsolve = LUFactorization())) prob = ODEProblem(odef, u0, tspan, p) - soln = Array(solve(prob, alg; u0 = prob.u0, p = prob.p, abstol = 1e-4, reltol = 1e-4))[ - :, end] + soln = Array(solve(prob, alg; u0 = prob.u0, p = prob.p, abstol = 1.0e-4, reltol = 1.0e-4))[ + :, end, + ] return soln end function g(p; kwargs...) @@ -39,54 +40,88 @@ function g(p; kwargs...) return sum(soln) end -@test isapprox(exp.(p), g_helper(p; alg = Rosenbrock23(linsolve = KLUFactorization())); - atol = 1e-3, rtol = 1e-3) -@test isapprox(exp.(p), g_helper(p; alg = Rosenbrock23(linsolve = UMFPACKFactorization())); - atol = 1e-1, rtol = 1e-1) -@test isapprox(exp.(p), g_helper(p; alg = Rosenbrock23(linsolve = KrylovJL_GMRES())); - atol = 1e-1, rtol = 1e-1) +@test isapprox( + exp.(p), g_helper(p; alg = Rosenbrock23(linsolve = KLUFactorization())); + atol = 1.0e-3, rtol = 1.0e-3 +) +@test isapprox( + exp.(p), g_helper(p; alg = Rosenbrock23(linsolve = UMFPACKFactorization())); + atol = 1.0e-1, rtol = 1.0e-1 +) +@test isapprox( + exp.(p), g_helper(p; alg = Rosenbrock23(linsolve = KrylovJL_GMRES())); + atol = 1.0e-1, rtol = 1.0e-1 +) -@test isapprox(exp.(p), g_helper(p; alg = Rodas4(linsolve = KLUFactorization())); - atol = 1e-3, rtol = 1e-3) -@test isapprox(exp.(p), g_helper(p; alg = Rodas4(linsolve = UMFPACKFactorization())); - atol = 1e-1, rtol = 1e-1) @test isapprox( - exp.(p), g_helper(p; alg = Rodas4(linsolve = KrylovJL_GMRES())); atol = 1e-1, - rtol = 1e-1) + exp.(p), g_helper(p; alg = Rodas4(linsolve = KLUFactorization())); + atol = 1.0e-3, rtol = 1.0e-3 +) +@test isapprox( + exp.(p), g_helper(p; alg = Rodas4(linsolve = UMFPACKFactorization())); + atol = 1.0e-1, rtol = 1.0e-1 +) +@test isapprox( + exp.(p), g_helper(p; alg = Rodas4(linsolve = KrylovJL_GMRES())); atol = 1.0e-1, + rtol = 1.0e-1 +) -@test isapprox(exp.(p), g_helper(p; alg = Rodas5(linsolve = KLUFactorization())); - atol = 1e-3, rtol = 1e-3) -@test isapprox(exp.(p), g_helper(p; alg = Rodas5(linsolve = UMFPACKFactorization())); - atol = 1e-1, rtol = 1e-1) @test isapprox( - exp.(p), g_helper(p; alg = Rodas5(linsolve = KrylovJL_GMRES())); atol = 1e-1, - rtol = 1e-1) + exp.(p), g_helper(p; alg = Rodas5(linsolve = KLUFactorization())); + atol = 1.0e-3, rtol = 1.0e-3 +) +@test isapprox( + exp.(p), g_helper(p; alg = Rodas5(linsolve = UMFPACKFactorization())); + atol = 1.0e-1, rtol = 1.0e-1 +) +@test isapprox( + exp.(p), g_helper(p; alg = Rodas5(linsolve = KrylovJL_GMRES())); atol = 1.0e-1, + rtol = 1.0e-1 +) -@test isapprox(exp.(p), g_helper(p; alg = ImplicitEuler(linsolve = KLUFactorization())); - atol = 1e-1, rtol = 1e-1) +@test isapprox( + exp.(p), g_helper(p; alg = ImplicitEuler(linsolve = KLUFactorization())); + atol = 1.0e-1, rtol = 1.0e-1 +) @test isapprox( exp.(p), g_helper(p; alg = ImplicitEuler(linsolve = UMFPACKFactorization())); - atol = 1e-1, rtol = 1e-1) -@test isapprox(exp.(p), g_helper(p; alg = ImplicitEuler(linsolve = KrylovJL_GMRES())); - atol = 1e-1, rtol = 1e-1) + atol = 1.0e-1, rtol = 1.0e-1 +) +@test isapprox( + exp.(p), g_helper(p; alg = ImplicitEuler(linsolve = KrylovJL_GMRES())); + atol = 1.0e-1, rtol = 1.0e-1 +) -@test isapprox(exp.(p), g_helper(p; alg = TRBDF2(linsolve = KLUFactorization())); - atol = 1e-1, rtol = 1e-1) -@test isapprox(exp.(p), g_helper(p; alg = TRBDF2(linsolve = UMFPACKFactorization())); - atol = 1e-1, rtol = 1e-1) @test isapprox( - exp.(p), g_helper(p; alg = TRBDF2(linsolve = KrylovJL_GMRES())); atol = 1e-1, - rtol = 1e-1) + exp.(p), g_helper(p; alg = TRBDF2(linsolve = KLUFactorization())); + atol = 1.0e-1, rtol = 1.0e-1 +) +@test isapprox( + exp.(p), g_helper(p; alg = TRBDF2(linsolve = UMFPACKFactorization())); + atol = 1.0e-1, rtol = 1.0e-1 +) +@test isapprox( + exp.(p), g_helper(p; alg = TRBDF2(linsolve = KrylovJL_GMRES())); atol = 1.0e-1, + rtol = 1.0e-1 +) -@test isapprox(exp.(p), g_helper(p; alg = KenCarp47(linsolve = KLUFactorization())); - atol = 1e-1, rtol = 1e-1) -@test isapprox(exp.(p), g_helper(p; alg = KenCarp47(linsolve = UMFPACKFactorization())); - atol = 1e-1, rtol = 1e-1) -@test isapprox(exp.(p), g_helper(p; alg = KenCarp47(linsolve = KrylovJL_GMRES())); - atol = 1e-1, rtol = 1e-1) +@test isapprox( + exp.(p), g_helper(p; alg = KenCarp47(linsolve = KLUFactorization())); + atol = 1.0e-1, rtol = 1.0e-1 +) +@test isapprox( + exp.(p), g_helper(p; alg = KenCarp47(linsolve = UMFPACKFactorization())); + atol = 1.0e-1, rtol = 1.0e-1 +) +@test isapprox( + exp.(p), g_helper(p; alg = KenCarp47(linsolve = KrylovJL_GMRES())); + atol = 1.0e-1, rtol = 1.0e-1 +) -@test isapprox(exp.(p), g_helper(p; alg = FBDF(linsolve = KrylovJL_GMRES())); - atol = 1e-1, rtol = 1e-1) +@test isapprox( + exp.(p), g_helper(p; alg = FBDF(linsolve = KrylovJL_GMRES())); + atol = 1.0e-1, rtol = 1.0e-1 +) ## IIP @@ -98,13 +133,16 @@ n = 2 p = collect(1.0:n) u0 = ones(n) tspan = [0.0, 1] -odef = ODEFunction{true}(fiip; jac = jac, jac_prototype = jac(u0, p, 0.0), - paramjac = paramjac) +odef = ODEFunction{true}( + fiip; jac = jac, jac_prototype = jac(u0, p, 0.0), + paramjac = paramjac +) function g_helper(p; alg = Rosenbrock23(linsolve = LUFactorization())) prob = ODEProblem(odef, u0, tspan, p) - soln = Array(solve(prob, alg; u0 = prob.u0, p = prob.p, abstol = 1e-4, reltol = 1e-4))[ - :, end] + soln = Array(solve(prob, alg; u0 = prob.u0, p = prob.p, abstol = 1.0e-4, reltol = 1.0e-4))[ + :, end, + ] return soln end function g(p; kwargs...) @@ -112,51 +150,83 @@ function g(p; kwargs...) return sum(soln) end -@test isapprox(exp.(p), g_helper(p; alg = Rosenbrock23(linsolve = KLUFactorization())); - atol = 1e-3, rtol = 1e-3) -@test isapprox(exp.(p), g_helper(p; alg = Rosenbrock23(linsolve = UMFPACKFactorization())); - atol = 1e-1, rtol = 1e-1) -@test isapprox(exp.(p), g_helper(p; alg = Rosenbrock23(linsolve = KrylovJL_GMRES())); - atol = 1e-1, rtol = 1e-1) +@test isapprox( + exp.(p), g_helper(p; alg = Rosenbrock23(linsolve = KLUFactorization())); + atol = 1.0e-3, rtol = 1.0e-3 +) +@test isapprox( + exp.(p), g_helper(p; alg = Rosenbrock23(linsolve = UMFPACKFactorization())); + atol = 1.0e-1, rtol = 1.0e-1 +) +@test isapprox( + exp.(p), g_helper(p; alg = Rosenbrock23(linsolve = KrylovJL_GMRES())); + atol = 1.0e-1, rtol = 1.0e-1 +) -@test isapprox(exp.(p), g_helper(p; alg = Rodas4(linsolve = KLUFactorization())); - atol = 1e-3, rtol = 1e-3) -@test isapprox(exp.(p), g_helper(p; alg = Rodas4(linsolve = UMFPACKFactorization())); - atol = 1e-1, rtol = 1e-1) @test isapprox( - exp.(p), g_helper(p; alg = Rodas4(linsolve = KrylovJL_GMRES())); atol = 1e-1, - rtol = 1e-1) + exp.(p), g_helper(p; alg = Rodas4(linsolve = KLUFactorization())); + atol = 1.0e-3, rtol = 1.0e-3 +) +@test isapprox( + exp.(p), g_helper(p; alg = Rodas4(linsolve = UMFPACKFactorization())); + atol = 1.0e-1, rtol = 1.0e-1 +) +@test isapprox( + exp.(p), g_helper(p; alg = Rodas4(linsolve = KrylovJL_GMRES())); atol = 1.0e-1, + rtol = 1.0e-1 +) -@test isapprox(exp.(p), g_helper(p; alg = Rodas5(linsolve = KLUFactorization())); - atol = 1e-3, rtol = 1e-3) -@test isapprox(exp.(p), g_helper(p; alg = Rodas5(linsolve = UMFPACKFactorization())); - atol = 1e-1, rtol = 1e-1) @test isapprox( - exp.(p), g_helper(p; alg = Rodas5(linsolve = KrylovJL_GMRES())); atol = 1e-1, - rtol = 1e-1) + exp.(p), g_helper(p; alg = Rodas5(linsolve = KLUFactorization())); + atol = 1.0e-3, rtol = 1.0e-3 +) +@test isapprox( + exp.(p), g_helper(p; alg = Rodas5(linsolve = UMFPACKFactorization())); + atol = 1.0e-1, rtol = 1.0e-1 +) +@test isapprox( + exp.(p), g_helper(p; alg = Rodas5(linsolve = KrylovJL_GMRES())); atol = 1.0e-1, + rtol = 1.0e-1 +) -@test isapprox(exp.(p), g_helper(p; alg = ImplicitEuler(linsolve = KLUFactorization())); - atol = 1e-1, rtol = 1e-1) +@test isapprox( + exp.(p), g_helper(p; alg = ImplicitEuler(linsolve = KLUFactorization())); + atol = 1.0e-1, rtol = 1.0e-1 +) @test isapprox( exp.(p), g_helper(p; alg = ImplicitEuler(linsolve = UMFPACKFactorization())); - atol = 1e-1, rtol = 1e-1) -@test isapprox(exp.(p), g_helper(p; alg = ImplicitEuler(linsolve = KrylovJL_GMRES())); - atol = 1e-1, rtol = 1e-1) + atol = 1.0e-1, rtol = 1.0e-1 +) +@test isapprox( + exp.(p), g_helper(p; alg = ImplicitEuler(linsolve = KrylovJL_GMRES())); + atol = 1.0e-1, rtol = 1.0e-1 +) -@test isapprox(exp.(p), g_helper(p; alg = TRBDF2(linsolve = KLUFactorization())); - atol = 1e-1, rtol = 1e-1) -@test isapprox(exp.(p), g_helper(p; alg = TRBDF2(linsolve = UMFPACKFactorization())); - atol = 1e-1, rtol = 1e-1) @test isapprox( - exp.(p), g_helper(p; alg = TRBDF2(linsolve = KrylovJL_GMRES())); atol = 1e-1, - rtol = 1e-1) + exp.(p), g_helper(p; alg = TRBDF2(linsolve = KLUFactorization())); + atol = 1.0e-1, rtol = 1.0e-1 +) +@test isapprox( + exp.(p), g_helper(p; alg = TRBDF2(linsolve = UMFPACKFactorization())); + atol = 1.0e-1, rtol = 1.0e-1 +) +@test isapprox( + exp.(p), g_helper(p; alg = TRBDF2(linsolve = KrylovJL_GMRES())); atol = 1.0e-1, + rtol = 1.0e-1 +) -@test isapprox(exp.(p), g_helper(p; alg = KenCarp47(linsolve = KLUFactorization())); - atol = 1e-1, rtol = 1e-1) -@test isapprox(exp.(p), g_helper(p; alg = KenCarp47(linsolve = UMFPACKFactorization())); - atol = 1e-1, rtol = 1e-1) -@test isapprox(exp.(p), g_helper(p; alg = KenCarp47(linsolve = KrylovJL_GMRES())); - atol = 1e-1, rtol = 1e-1) +@test isapprox( + exp.(p), g_helper(p; alg = KenCarp47(linsolve = KLUFactorization())); + atol = 1.0e-1, rtol = 1.0e-1 +) +@test isapprox( + exp.(p), g_helper(p; alg = KenCarp47(linsolve = UMFPACKFactorization())); + atol = 1.0e-1, rtol = 1.0e-1 +) +@test isapprox( + exp.(p), g_helper(p; alg = KenCarp47(linsolve = KrylovJL_GMRES())); + atol = 1.0e-1, rtol = 1.0e-1 +) using OrdinaryDiffEq, StaticArrays, LinearSolve @@ -169,9 +239,9 @@ function hires!(du, u, p, t) du[4] = T(8.32) * u[2] + T(1.71) * u[3] - T(1.12) * u[4] du[5] = T(-1.745) * u[5] + T(0.43) * u[6] + T(0.43) * u[7] du[6] = T(-280.0) * u[6] * u[8] + T(0.69) * u[4] + T(1.71) * u[5] - T(0.43) * u[6] + - T(0.69) * u[7] + T(0.69) * u[7] du[7] = T(280.0) * u[6] * u[8] - T(1.81) * u[7] - du[8] = T(-280.0) * u[6] * u[8] + T(1.81) * u[7] + return du[8] = T(-280.0) * u[6] * u[8] + T(1.81) * u[7] end # Out-of-place version @@ -183,7 +253,7 @@ function hires(u, p, t) du4 = T(8.32) * u[2] + T(1.71) * u[3] - T(1.12) * u[4] du5 = T(-1.745) * u[5] + T(0.43) * u[6] + T(0.43) * u[7] du6 = T(-280.0) * u[6] * u[8] + T(0.69) * u[4] + T(1.71) * u[5] - T(0.43) * u[6] + - T(0.69) * u[7] + T(0.69) * u[7] du7 = T(280.0) * u[6] * u[8] - T(1.81) * u[7] du8 = T(-280.0) * u[6] * u[8] + T(1.81) * u[7] @@ -214,13 +284,13 @@ rodas = Rodas5P() krylov_rodas = Rodas5P(linsolve = KrylovJL_GMRES()) solvers = (; qndf, krylov_qndf, rodas, krylov_rodas, fbdf, krylov_fbdf) -refsol = solve(probiip, FBDF(), abstol = 1e-12, reltol = 1e-12) +refsol = solve(probiip, FBDF(), abstol = 1.0e-12, reltol = 1.0e-12) @testset "Hires calc_W tests" begin @testset "$probname" for (probname, prob) in pairs(probs) @testset "$solname" for (solname, solver) in pairs(solvers) - sol = solve(prob, solver, abstol = 1e-12, reltol = 1e-12, maxiters = 2e4) + sol = solve(prob, solver, abstol = 1.0e-12, reltol = 1.0e-12, maxiters = 2.0e4) @test sol.retcode == ReturnCode.Success - @test isapprox(sol.u[end], refsol.u[end], rtol = 1e-8, atol = 1e-10) + @test isapprox(sol.u[end], refsol.u[end], rtol = 1.0e-8, atol = 1.0e-10) end end end @@ -228,9 +298,9 @@ end @testset "Hires Float32 calc_W tests" begin @testset "$probname" for (probname, prob) in pairs(probsf32) @testset "$solname" for (solname, solver) in pairs(solvers) - sol = solve(prob, solver, maxiters = 2e4) + sol = solve(prob, solver, maxiters = 2.0e4) @test sol.retcode == ReturnCode.Success - @test isapprox(sol.u[end], refsol.u[end], rtol = 2e-3, atol = 1e-6) + @test isapprox(sol.u[end], refsol.u[end], rtol = 2.0e-3, atol = 1.0e-6) end end end diff --git a/test/interface/mass_matrix_tests.jl b/test/interface/mass_matrix_tests.jl index 82816682e9..734f09bed8 100644 --- a/test/interface/mass_matrix_tests.jl +++ b/test/interface/mass_matrix_tests.jl @@ -12,13 +12,15 @@ function make_mm_probs(mm_A, ::Val{iip}) where {iip} mm_b = vec(sum(mm_A; dims = 2)) mul!(du, mm_A, u) du .+= t * mm_b - nothing + return nothing end mm_g(du, u, p, t) = (@. du = u + t; nothing) # oop - mm_f(u, p, t) = (update_coefficients!(mm_A, OrdinaryDiffEqCore.constvalue.(u), p, t); - mm_A * (u .+ t)) + mm_f(u, p, t) = ( + update_coefficients!(mm_A, OrdinaryDiffEqCore.constvalue.(u), p, t); + mm_A * (u .+ t) + ) mm_g(u, p, t) = u .+ t mm_analytic(u0, p, t) = @. 2 * u0 * exp(t) - t - 1 @@ -27,17 +29,20 @@ function make_mm_probs(mm_A, ::Val{iip}) where {iip} tspan = (0.0, 1.0) prob = ODEProblem( - ODEFunction{iip, true}(mm_f, analytic = mm_analytic, - mass_matrix = mm_A), u0, tspan) + ODEFunction{iip, true}( + mm_f, analytic = mm_analytic, + mass_matrix = mm_A + ), u0, tspan + ) prob2 = ODEProblem(ODEFunction{iip, true}(mm_g, analytic = mm_analytic), u0, tspan) - prob, prob2 + return prob, prob2 end function _norm_dsol(alg, prob, prob2, dt = 1 / 10) sol = solve(prob, alg, dt = dt, adaptive = false) sol2 = solve(prob2, alg, dt = dt, adaptive = false) - norm(sol .- sol2) + return norm(sol .- sol2) end function update_func1!(A, u, p, t) @@ -49,13 +54,13 @@ function update_func1!(A, u, p, t) A[3, 2] = sin(t) * u[2] A[1, 3] = sin(t) A[2, 3] = t^2 - A[3, 3] = t * cos(t) + 1 + return A[3, 3] = t * cos(t) + 1 end function update_func1(A, u, p, t) A = copy(A) update_func1!(A, u, p, t) - A + return A end function update_func2!(A, u, p, t) @@ -67,21 +72,25 @@ function update_func2!(A, u, p, t) A[3, 2] = sin(t) A[1, 3] = sin(t) A[2, 3] = t^2 - A[3, 3] = t * cos(t) + 1 + return A[3, 3] = t * cos(t) + 1 end function update_func2(A, u, p, t) A = copy(A) update_func2!(A, u, p, t) - A + return A end almost_I = Matrix{Float64}(1.01I, 3, 3) mm_A = Float64[-2 1 4; 4 -2 1; 2 1 3] -dependent_M1 = MatrixOperator(ones(3, 3), update_func = update_func1, - update_func! = update_func1!) -dependent_M2 = MatrixOperator(ones(3, 3), update_func = update_func2, - update_func! = update_func2!) +dependent_M1 = MatrixOperator( + ones(3, 3), update_func = update_func1, + update_func! = update_func1! +) +dependent_M2 = MatrixOperator( + ones(3, 3), update_func = update_func2, + update_func! = update_func2! +) @testset "Mass Matrix Accuracy Tests" for mm in (almost_I, mm_A) # test each method for exactness @@ -89,60 +98,60 @@ dependent_M2 = MatrixOperator(ones(3, 3), update_func = update_func2, prob, prob2 = make_mm_probs(mm, Val(iip)) println("SDIRKs") - @test _norm_dsol(ImplicitEuler(), prob, prob2)≈0 atol=1e-12 - @test _norm_dsol(Trapezoid(), prob, prob2)≈0 atol=1e-12 - @test _norm_dsol(RadauIIA5(), prob, prob2)≈0 atol=1e-12 - @test _norm_dsol(ImplicitMidpoint(extrapolant = :constant), prob, prob2)≈0 atol=1e-10 + @test _norm_dsol(ImplicitEuler(), prob, prob2) ≈ 0 atol = 1.0e-12 + @test _norm_dsol(Trapezoid(), prob, prob2) ≈ 0 atol = 1.0e-12 + @test _norm_dsol(RadauIIA5(), prob, prob2) ≈ 0 atol = 1.0e-12 + @test _norm_dsol(ImplicitMidpoint(extrapolant = :constant), prob, prob2) ≈ 0 atol = 1.0e-10 println("BDFs") - @test _norm_dsol(ABDF2(), prob, prob2)≈0 atol=1e-12 + @test _norm_dsol(ABDF2(), prob, prob2) ≈ 0 atol = 1.0e-12 - @test _norm_dsol(QBDF1(), prob, prob2)≈0 atol=1e-12 - @test _norm_dsol(QBDF2(), prob, prob2)≈0 atol=1e-12 - @test _norm_dsol(QBDF(), prob, prob2)≈0 atol=1e-12 - @test _norm_dsol(FBDF(), prob, prob2)≈0 atol=1e-12 + @test _norm_dsol(QBDF1(), prob, prob2) ≈ 0 atol = 1.0e-12 + @test _norm_dsol(QBDF2(), prob, prob2) ≈ 0 atol = 1.0e-12 + @test _norm_dsol(QBDF(), prob, prob2) ≈ 0 atol = 1.0e-12 + @test _norm_dsol(FBDF(), prob, prob2) ≈ 0 atol = 1.0e-12 - @test _norm_dsol(QNDF1(), prob, prob2)≈0 atol=1e-12 - @test _norm_dsol(QNDF2(), prob, prob2)≈0 atol=1e-12 - @test _norm_dsol(QNDF(), prob, prob2)≈0 atol=1e-12 + @test _norm_dsol(QNDF1(), prob, prob2) ≈ 0 atol = 1.0e-12 + @test _norm_dsol(QNDF2(), prob, prob2) ≈ 0 atol = 1.0e-12 + @test _norm_dsol(QNDF(), prob, prob2) ≈ 0 atol = 1.0e-12 println("Rosenbrocks") if mm == almost_I - @test _norm_dsol(Rosenbrock23(), prob, prob2)≈0 atol=1e-11 - @test _norm_dsol(Rosenbrock32(), prob, prob2)≈0 atol=1e-11 + @test _norm_dsol(Rosenbrock23(), prob, prob2) ≈ 0 atol = 1.0e-11 + @test _norm_dsol(Rosenbrock32(), prob, prob2) ≈ 0 atol = 1.0e-11 end - @test _norm_dsol(ROS3P(), prob, prob2)≈0 atol=1e-11 - @test _norm_dsol(Rodas3(), prob, prob2)≈0 atol=1e-11 - @test _norm_dsol(ROS2(), prob, prob2)≈0 atol=1e-11 - @test _norm_dsol(ROS2PR(), prob, prob2)≈0 atol=1e-11 - @test _norm_dsol(ROS2S(), prob, prob2)≈0 atol=1e-11 - @test _norm_dsol(ROS3(), prob, prob2)≈0 atol=1e-11 - @test _norm_dsol(ROS3PR(), prob, prob2)≈0 atol=1e-11 - @test _norm_dsol(Scholz4_7(), prob, prob2)≈0 atol=1e-11 - @test _norm_dsol(RosShamp4(), prob, prob2)≈0 atol=1e-10 - @test _norm_dsol(Veldd4(), prob, prob2)≈0 atol=1e-10 - @test _norm_dsol(Velds4(), prob, prob2)≈0 atol=1e-10 - @test _norm_dsol(GRK4T(), prob, prob2)≈0 atol=1e-10 - @test _norm_dsol(GRK4A(), prob, prob2)≈0 atol=1e-10 - @test _norm_dsol(Ros4LStab(), prob, prob2)≈0 atol=1e-10 - @test _norm_dsol(RosenbrockW6S4OS(), prob, prob2)≈0 atol=1e-10 - @test _norm_dsol(ROS34PW1a(), prob, prob2)≈0 atol=1e-10 - @test _norm_dsol(ROS34PW1b(), prob, prob2)≈0 atol=1e-10 - @test _norm_dsol(ROS34PW2(), prob, prob2)≈0 atol=1e-10 - @test _norm_dsol(ROS34PW3(), prob, prob2)≈0 atol=1e-10 - @test _norm_dsol(ROS34PRw(), prob, prob2)≈0 atol=1e-11 - @test _norm_dsol(ROS3PRL(), prob, prob2)≈0 atol=1e-11 - @test _norm_dsol(ROS3PRL2(), prob, prob2)≈0 atol=1e-11 - @test _norm_dsol(ROK4a(), prob, prob2)≈0 atol=1e-11 - @test _norm_dsol(Rodas4(), prob, prob2)≈0 atol=1e-9 - @test _norm_dsol(Rodas42(), prob, prob2)≈0 atol=1e-9 - @test _norm_dsol(Rodas4P(), prob, prob2)≈0 atol=1e-9 - @test _norm_dsol(Rodas5(), prob, prob2)≈0 atol=1e-7 - @test _norm_dsol(Rodas23W(), prob, prob2)≈0 atol=1e-11 - @test _norm_dsol(Rodas3P(), prob, prob2)≈0 atol=1e-11 - @test _norm_dsol(Rodas5P(), prob, prob2)≈0 atol=1e-7 - @test _norm_dsol(Rodas5Pe(), prob, prob2)≈0 atol=1e-7 - @test _norm_dsol(Rodas5Pr(), prob, prob2)≈0 atol=1e-7 + @test _norm_dsol(ROS3P(), prob, prob2) ≈ 0 atol = 1.0e-11 + @test _norm_dsol(Rodas3(), prob, prob2) ≈ 0 atol = 1.0e-11 + @test _norm_dsol(ROS2(), prob, prob2) ≈ 0 atol = 1.0e-11 + @test _norm_dsol(ROS2PR(), prob, prob2) ≈ 0 atol = 1.0e-11 + @test _norm_dsol(ROS2S(), prob, prob2) ≈ 0 atol = 1.0e-11 + @test _norm_dsol(ROS3(), prob, prob2) ≈ 0 atol = 1.0e-11 + @test _norm_dsol(ROS3PR(), prob, prob2) ≈ 0 atol = 1.0e-11 + @test _norm_dsol(Scholz4_7(), prob, prob2) ≈ 0 atol = 1.0e-11 + @test _norm_dsol(RosShamp4(), prob, prob2) ≈ 0 atol = 1.0e-10 + @test _norm_dsol(Veldd4(), prob, prob2) ≈ 0 atol = 1.0e-10 + @test _norm_dsol(Velds4(), prob, prob2) ≈ 0 atol = 1.0e-10 + @test _norm_dsol(GRK4T(), prob, prob2) ≈ 0 atol = 1.0e-10 + @test _norm_dsol(GRK4A(), prob, prob2) ≈ 0 atol = 1.0e-10 + @test _norm_dsol(Ros4LStab(), prob, prob2) ≈ 0 atol = 1.0e-10 + @test _norm_dsol(RosenbrockW6S4OS(), prob, prob2) ≈ 0 atol = 1.0e-10 + @test _norm_dsol(ROS34PW1a(), prob, prob2) ≈ 0 atol = 1.0e-10 + @test _norm_dsol(ROS34PW1b(), prob, prob2) ≈ 0 atol = 1.0e-10 + @test _norm_dsol(ROS34PW2(), prob, prob2) ≈ 0 atol = 1.0e-10 + @test _norm_dsol(ROS34PW3(), prob, prob2) ≈ 0 atol = 1.0e-10 + @test _norm_dsol(ROS34PRw(), prob, prob2) ≈ 0 atol = 1.0e-11 + @test _norm_dsol(ROS3PRL(), prob, prob2) ≈ 0 atol = 1.0e-11 + @test _norm_dsol(ROS3PRL2(), prob, prob2) ≈ 0 atol = 1.0e-11 + @test _norm_dsol(ROK4a(), prob, prob2) ≈ 0 atol = 1.0e-11 + @test _norm_dsol(Rodas4(), prob, prob2) ≈ 0 atol = 1.0e-9 + @test _norm_dsol(Rodas42(), prob, prob2) ≈ 0 atol = 1.0e-9 + @test _norm_dsol(Rodas4P(), prob, prob2) ≈ 0 atol = 1.0e-9 + @test _norm_dsol(Rodas5(), prob, prob2) ≈ 0 atol = 1.0e-7 + @test _norm_dsol(Rodas23W(), prob, prob2) ≈ 0 atol = 1.0e-11 + @test _norm_dsol(Rodas3P(), prob, prob2) ≈ 0 atol = 1.0e-11 + @test _norm_dsol(Rodas5P(), prob, prob2) ≈ 0 atol = 1.0e-7 + @test _norm_dsol(Rodas5Pe(), prob, prob2) ≈ 0 atol = 1.0e-7 + @test _norm_dsol(Rodas5Pr(), prob, prob2) ≈ 0 atol = 1.0e-7 end end @@ -151,36 +160,53 @@ end @show iip prob, prob2 = make_mm_probs(mm, Val(iip)) - sol = solve(prob, ImplicitEuler(nlsolve = NLFunctional()), dt = 1 / 10, - adaptive = false, reltol = 1e-7, abstol = 1e-10) - sol2 = solve(prob2, ImplicitEuler(nlsolve = NLFunctional()), dt = 1 / 10, - adaptive = false, reltol = 1e-7, abstol = 1e-10) - @test norm(sol .- sol2)≈0 atol=1e-7 - - sol = solve(prob, - ImplicitMidpoint(extrapolant = :constant, - nlsolve = NLFunctional()), dt = 1 / 10, reltol = 1e-7, - abstol = 1e-10) - sol2 = solve(prob2, + sol = solve( + prob, ImplicitEuler(nlsolve = NLFunctional()), dt = 1 / 10, + adaptive = false, reltol = 1.0e-7, abstol = 1.0e-10 + ) + sol2 = solve( + prob2, ImplicitEuler(nlsolve = NLFunctional()), dt = 1 / 10, + adaptive = false, reltol = 1.0e-7, abstol = 1.0e-10 + ) + @test norm(sol .- sol2) ≈ 0 atol = 1.0e-7 + + sol = solve( + prob, + ImplicitMidpoint( + extrapolant = :constant, + nlsolve = NLFunctional() + ), dt = 1 / 10, reltol = 1.0e-7, + abstol = 1.0e-10 + ) + sol2 = solve( + prob2, ImplicitMidpoint(extrapolant = :constant, nlsolve = NLFunctional()), - dt = 1 / 10, reltol = 1e-7, abstol = 1e-10) - @test norm(sol .- sol2)≈0 atol=1e-7 + dt = 1 / 10, reltol = 1.0e-7, abstol = 1.0e-10 + ) + @test norm(sol .- sol2) ≈ 0 atol = 1.0e-7 - sol = solve(prob, ImplicitEuler(nlsolve = NLAnderson()), dt = 1 / 10, - adaptive = false) - sol2 = solve(prob2, ImplicitEuler(nlsolve = NLAnderson()), dt = 1 / 10, - adaptive = false) - @test norm(sol .- sol2)≈0 atol=1e-7 - @test norm(sol[end] .- sol2[end])≈0 atol=1e-7 + sol = solve( + prob, ImplicitEuler(nlsolve = NLAnderson()), dt = 1 / 10, + adaptive = false + ) + sol2 = solve( + prob2, ImplicitEuler(nlsolve = NLAnderson()), dt = 1 / 10, + adaptive = false + ) + @test norm(sol .- sol2) ≈ 0 atol = 1.0e-7 + @test norm(sol[end] .- sol2[end]) ≈ 0 atol = 1.0e-7 sol = solve( prob, ImplicitMidpoint(extrapolant = :constant, nlsolve = NLAnderson()), - dt = 1 / 10, reltol = 1e-7, abstol = 1e-10) - sol2 = solve(prob2, + dt = 1 / 10, reltol = 1.0e-7, abstol = 1.0e-10 + ) + sol2 = solve( + prob2, ImplicitMidpoint(extrapolant = :constant, nlsolve = NLAnderson()), - dt = 1 / 10, reltol = 1e-7, abstol = 1e-10) - @test norm(sol .- sol2)≈0 atol=1e-7 - @test norm(sol[end] .- sol2[end])≈0 atol=1e-7 + dt = 1 / 10, reltol = 1.0e-7, abstol = 1.0e-10 + ) + @test norm(sol .- sol2) ≈ 0 atol = 1.0e-7 + @test norm(sol[end] .- sol2[end]) ≈ 0 atol = 1.0e-7 end end @@ -199,10 +225,12 @@ end M = Diagonal([1.0, 0.0]) m_ode_prob = ODEProblem(ODEFunction(f!; mass_matrix = M), u0, tspan) - @test_nowarn sol = @inferred solve(m_ode_prob, Rosenbrock23(autodiff=AutoForwardDiff(chunksize=2))) + @test_nowarn sol = @inferred solve(m_ode_prob, Rosenbrock23(autodiff = AutoForwardDiff(chunksize = 2))) - M = [0.637947 0.637947 - 0.637947 0.637947] + M = [ + 0.637947 0.637947 + 0.637947 0.637947 + ] function f2!(du, u, p, t) du[1] = u[2] @@ -213,63 +241,67 @@ end m_ode_prob = ODEProblem(ODEFunction(f2!; mass_matrix = M), u0, tspan) println("Rosenbrocks") - sol1 = @test_nowarn solve(m_ode_prob, Rodas5P(), reltol = 1e-10, abstol = 1e-10) - sol2 = @test_nowarn solve(m_ode_prob, RadauIIA5(), reltol = 1e-10, abstol = 1e-10) - sol3 = @test_nowarn solve(m_ode_prob, Cash4(), reltol = 1e-10, abstol = 1e-10) + sol1 = @test_nowarn solve(m_ode_prob, Rodas5P(), reltol = 1.0e-10, abstol = 1.0e-10) + sol2 = @test_nowarn solve(m_ode_prob, RadauIIA5(), reltol = 1.0e-10, abstol = 1.0e-10) + sol3 = @test_nowarn solve(m_ode_prob, Cash4(), reltol = 1.0e-10, abstol = 1.0e-10) println("SDIRKs") - sol4 = @test_nowarn solve(m_ode_prob, ImplicitEuler(), reltol = 1e-10, abstol = 1e-10) + sol4 = @test_nowarn solve(m_ode_prob, ImplicitEuler(), reltol = 1.0e-10, abstol = 1.0e-10) sol5 = @test_nowarn solve( - m_ode_prob, ImplicitMidpoint(), dt = 1 / 1000, reltol = 1e-10, - abstol = 1e-10) - sol6 = @test_nowarn solve(m_ode_prob, Trapezoid(), reltol = 1e-10, abstol = 1e-10) + m_ode_prob, ImplicitMidpoint(), dt = 1 / 1000, reltol = 1.0e-10, + abstol = 1.0e-10 + ) + sol6 = @test_nowarn solve(m_ode_prob, Trapezoid(), reltol = 1.0e-10, abstol = 1.0e-10) println("BDFs") - sol7 = @test_nowarn solve(m_ode_prob, QNDF1(), reltol = 1e-10, abstol = 1e-10) - sol8 = @test_nowarn solve(m_ode_prob, QBDF1(), reltol = 1e-10, abstol = 1e-10) - sol9 = @test_nowarn solve(m_ode_prob, QNDF2(), reltol = 1e-10, abstol = 1e-10) - sol10 = @test_nowarn solve(m_ode_prob, QBDF2(), reltol = 1e-10, abstol = 1e-10) - sol11 = @test_nowarn solve(m_ode_prob, ABDF2(), reltol = 1e-10, abstol = 1e-10) - sol12 = @test_nowarn solve(m_ode_prob, QBDF(), reltol = 1e-10, abstol = 1e-10) - sol13 = @test_nowarn solve(m_ode_prob, QNDF(), reltol = 1e-10, abstol = 1e-10) - - @test sol1[end]≈sol2[end] atol=1e-9 - @test sol1[end]≈sol3[end] atol=1e-9 - @test sol1[end]≈sol4[end] atol=1e-9 - @test sol1[end]≈sol5[end] atol=1e-9 - @test sol1[end]≈sol6[end] atol=1e-9 - @test sol1[end]≈sol7[end] atol=1e-9 - @test sol1[end]≈sol8[end] atol=1e-9 - @test sol1[end]≈sol9[end] atol=1e-9 - @test sol1[end]≈sol10[end] atol=1e-9 - @test sol1[end]≈sol11[end] atol=1e-9 - @test sol1[end]≈sol12[end] atol=1e-9 - @test sol1[end]≈sol13[end] atol=1e-9 + sol7 = @test_nowarn solve(m_ode_prob, QNDF1(), reltol = 1.0e-10, abstol = 1.0e-10) + sol8 = @test_nowarn solve(m_ode_prob, QBDF1(), reltol = 1.0e-10, abstol = 1.0e-10) + sol9 = @test_nowarn solve(m_ode_prob, QNDF2(), reltol = 1.0e-10, abstol = 1.0e-10) + sol10 = @test_nowarn solve(m_ode_prob, QBDF2(), reltol = 1.0e-10, abstol = 1.0e-10) + sol11 = @test_nowarn solve(m_ode_prob, ABDF2(), reltol = 1.0e-10, abstol = 1.0e-10) + sol12 = @test_nowarn solve(m_ode_prob, QBDF(), reltol = 1.0e-10, abstol = 1.0e-10) + sol13 = @test_nowarn solve(m_ode_prob, QNDF(), reltol = 1.0e-10, abstol = 1.0e-10) + + @test sol1[end] ≈ sol2[end] atol = 1.0e-9 + @test sol1[end] ≈ sol3[end] atol = 1.0e-9 + @test sol1[end] ≈ sol4[end] atol = 1.0e-9 + @test sol1[end] ≈ sol5[end] atol = 1.0e-9 + @test sol1[end] ≈ sol6[end] atol = 1.0e-9 + @test sol1[end] ≈ sol7[end] atol = 1.0e-9 + @test sol1[end] ≈ sol8[end] atol = 1.0e-9 + @test sol1[end] ≈ sol9[end] atol = 1.0e-9 + @test sol1[end] ≈ sol10[end] atol = 1.0e-9 + @test sol1[end] ≈ sol11[end] atol = 1.0e-9 + @test sol1[end] ≈ sol12[end] atol = 1.0e-9 + @test sol1[end] ≈ sol13[end] atol = 1.0e-9 end function _norm_dsol2(alg, prob, prob2; kwargs...) sol = solve(prob, alg; kwargs...) sol2 = solve(prob2, alg; kwargs...) - norm(sol.u[end] .- sol2.u[end]) + return norm(sol.u[end] .- sol2.u[end]) end @testset "Dependent Mass Matrix Tests" for mm in (dependent_M1, dependent_M2) # test each method for exactness for iip in (false, true) @show iip prob, prob2 = make_mm_probs(mm, Val(iip)) - eulersol = solve(prob, ImplicitEuler(nlsolve = NLNewton(κ = 1e-10)), reltol = 1e-10) - @test _norm_dsol2(ImplicitEuler(nlsolve = NLNewton(κ = 1e-10)), prob, prob2, - reltol = 1e-10)≈0 atol=5e-4 + eulersol = solve(prob, ImplicitEuler(nlsolve = NLNewton(κ = 1.0e-10)), reltol = 1.0e-10) + @test _norm_dsol2( + ImplicitEuler(nlsolve = NLNewton(κ = 1.0e-10)), prob, prob2, + reltol = 1.0e-10 + ) ≈ 0 atol = 5.0e-4 @test_skip _norm_dsol2( - ImplicitMidpoint(nlsolve = NLNewton(κ = 1e-10)), prob, prob2, - tstops = eulersol.t)≈0 atol=1e-6 - @test_skip _norm_dsol(RadauIIA5(), prob, prob2)≈0 atol=1e-12 - - @test_skip _norm_dsol(QNDF1(), prob, prob2)≈0 atol=1e-7 - @test_skip _norm_dsol(QBDF1(), prob, prob2)≈0 atol=1e-7 - @test_skip _norm_dsol(QNDF2(), prob, prob2)≈0 atol=1e-7 - @test_skip _norm_dsol(QBDF2(), prob, prob2)≈0 atol=1e-7 - @test_skip _norm_dsol(ABDF2(), prob, prob2)≈0 atol=1e-7 - @test_skip _norm_dsol(QBDF(), prob, prob2)≈0 atol=1e-7 - @test_skip _norm_dsol(QNDF(), prob, prob2)≈0 atol=1e-7 + ImplicitMidpoint(nlsolve = NLNewton(κ = 1.0e-10)), prob, prob2, + tstops = eulersol.t + ) ≈ 0 atol = 1.0e-6 + @test_skip _norm_dsol(RadauIIA5(), prob, prob2) ≈ 0 atol = 1.0e-12 + + @test_skip _norm_dsol(QNDF1(), prob, prob2) ≈ 0 atol = 1.0e-7 + @test_skip _norm_dsol(QBDF1(), prob, prob2) ≈ 0 atol = 1.0e-7 + @test_skip _norm_dsol(QNDF2(), prob, prob2) ≈ 0 atol = 1.0e-7 + @test_skip _norm_dsol(QBDF2(), prob, prob2) ≈ 0 atol = 1.0e-7 + @test_skip _norm_dsol(ABDF2(), prob, prob2) ≈ 0 atol = 1.0e-7 + @test_skip _norm_dsol(QBDF(), prob, prob2) ≈ 0 atol = 1.0e-7 + @test_skip _norm_dsol(QNDF(), prob, prob2) ≈ 0 atol = 1.0e-7 end # test functional iteration @@ -277,36 +309,53 @@ end @show iip prob, prob2 = make_mm_probs(mm, Val(iip)) - sol = solve(prob, ImplicitEuler(nlsolve = NLFunctional()), dt = 1 / 10, - adaptive = false, reltol = 1e-7, abstol = 1e-10) - sol2 = solve(prob2, ImplicitEuler(nlsolve = NLFunctional()), dt = 1 / 10, - adaptive = false, reltol = 1e-7, abstol = 1e-10) - @test_broken norm(sol .- sol2)≈0 atol=1e-7 - - sol = solve(prob, - ImplicitMidpoint(extrapolant = :constant, - nlsolve = NLFunctional()), dt = 1 / 10, reltol = 1e-7, - abstol = 1e-10) - sol2 = solve(prob2, + sol = solve( + prob, ImplicitEuler(nlsolve = NLFunctional()), dt = 1 / 10, + adaptive = false, reltol = 1.0e-7, abstol = 1.0e-10 + ) + sol2 = solve( + prob2, ImplicitEuler(nlsolve = NLFunctional()), dt = 1 / 10, + adaptive = false, reltol = 1.0e-7, abstol = 1.0e-10 + ) + @test_broken norm(sol .- sol2) ≈ 0 atol = 1.0e-7 + + sol = solve( + prob, + ImplicitMidpoint( + extrapolant = :constant, + nlsolve = NLFunctional() + ), dt = 1 / 10, reltol = 1.0e-7, + abstol = 1.0e-10 + ) + sol2 = solve( + prob2, ImplicitMidpoint(extrapolant = :constant, nlsolve = NLFunctional()), - dt = 1 / 10, reltol = 1e-7, abstol = 1e-10) - @test_broken norm(sol .- sol2)≈0 atol=1e-7 + dt = 1 / 10, reltol = 1.0e-7, abstol = 1.0e-10 + ) + @test_broken norm(sol .- sol2) ≈ 0 atol = 1.0e-7 - sol = solve(prob, ImplicitEuler(nlsolve = NLAnderson()), dt = 1 / 10, - adaptive = false) - sol2 = solve(prob2, ImplicitEuler(nlsolve = NLAnderson()), dt = 1 / 10, - adaptive = false) - @test norm(sol .- sol2)≈0 atol=1e-7 - @test norm(sol[end] .- sol2[end])≈0 atol=1e-7 + sol = solve( + prob, ImplicitEuler(nlsolve = NLAnderson()), dt = 1 / 10, + adaptive = false + ) + sol2 = solve( + prob2, ImplicitEuler(nlsolve = NLAnderson()), dt = 1 / 10, + adaptive = false + ) + @test norm(sol .- sol2) ≈ 0 atol = 1.0e-7 + @test norm(sol[end] .- sol2[end]) ≈ 0 atol = 1.0e-7 sol = solve( prob, ImplicitMidpoint(extrapolant = :constant, nlsolve = NLAnderson()), - dt = 1 / 10, reltol = 1e-7, abstol = 1e-10) - sol2 = solve(prob2, + dt = 1 / 10, reltol = 1.0e-7, abstol = 1.0e-10 + ) + sol2 = solve( + prob2, ImplicitMidpoint(extrapolant = :constant, nlsolve = NLAnderson()), - dt = 1 / 10, reltol = 1e-7, abstol = 1e-10) - @test norm(sol .- sol2)≈0 atol=1e-7 - @test norm(sol[end] .- sol2[end])≈0 atol=1e-7 + dt = 1 / 10, reltol = 1.0e-7, abstol = 1.0e-10 + ) + @test norm(sol .- sol2) ≈ 0 atol = 1.0e-7 + @test norm(sol[end] .- sol2[end]) ≈ 0 atol = 1.0e-7 end end @@ -317,10 +366,10 @@ n = 3 τ = 0.2 function dynamics!(du, u, p, t) du .= u - Λ_func(t - τ) - nothing + return nothing end function dynamics(u, p, t) - u - Λ_func(t - τ) + return u - Λ_func(t - τ) end x0 = zeros(n, n) @@ -328,11 +377,11 @@ M = zeros(n * n) |> Diagonal M[1, 1] = true # zero mass matrix breaks rosenbrock f = ODEFunction{true, SciMLBase.AutoSpecialize}(dynamics!, mass_matrix = M) tspan = (0, 10.0) -adalg = AutoForwardDiff(chunksize=n) +adalg = AutoForwardDiff(chunksize = n) prob = ODEProblem(f, x0, tspan) foop = ODEFunction{false, SciMLBase.AutoSpecialize}(dynamics, mass_matrix = M) proboop = ODEProblem(f, x0, tspan) -@test_broken sol = @inferred solve(prob, Rosenbrock23(autodiff=adalg)) -@test_broken sol = @inferred solve(prob, Rodas4(autodiff=adalg), initializealg = ShampineCollocationInit()) +@test_broken sol = @inferred solve(prob, Rosenbrock23(autodiff = adalg)) +@test_broken sol = @inferred solve(prob, Rodas4(autodiff = adalg), initializealg = ShampineCollocationInit()) @test_broken sol = @inferred solve(proboop, Rodas5()) @test_broken sol = @inferred solve(proboop, Rodas4(), initializealg = ShampineCollocationInit()) diff --git a/test/interface/noindex_tests.jl b/test/interface/noindex_tests.jl index 3aca1a635d..8d1806f34b 100644 --- a/test/interface/noindex_tests.jl +++ b/test/interface/noindex_tests.jl @@ -6,7 +6,7 @@ end Base.size(x::NoIndexArray) = size(x.x) Base.axes(x::NoIndexArray) = axes(x.x) function Base.similar(x::NoIndexArray, dims::Union{Integer, AbstractUnitRange}...) - NoIndexArray(similar(x.x, dims...)) + return NoIndexArray(similar(x.x, dims...)) end Base.copyto!(x::NoIndexArray, y::NoIndexArray) = NoIndexArray(copyto!(x.x, y.x)) Base.copy(x::NoIndexArray) = NoIndexArray(copy(x.x)) @@ -21,17 +21,21 @@ struct NoIndexStyle{N} <: Broadcast.AbstractArrayStyle{N} end NoIndexStyle(::Val{N}) where {N} = NoIndexStyle{N}() NoIndexStyle{M}(::Val{N}) where {N, M} = NoIndexStyle{N}() Base.BroadcastStyle(::Type{<:NoIndexArray{T, N}}) where {T, N} = NoIndexStyle{N}() -function Base.similar(bc::Base.Broadcast.Broadcasted{NoIndexStyle{N}}, - ::Type{ElType}) where {N, ElType} - NoIndexArray(similar(Array{ElType, N}, axes(bc))) +function Base.similar( + bc::Base.Broadcast.Broadcasted{NoIndexStyle{N}}, + ::Type{ElType} + ) where {N, ElType} + return NoIndexArray(similar(Array{ElType, N}, axes(bc))) end Base.Broadcast._broadcast_getindex(x::NoIndexArray, i) = x.x[i] Base.Broadcast.extrude(x::NoIndexArray) = x using ArrayInterface ArrayInterface.fast_scalar_indexing(::Type{<:NoIndexArray}) = false -@inline function Base.copyto!(dest::NoIndexArray, - bc::Base.Broadcast.Broadcasted{<:NoIndexStyle}) +@inline function Base.copyto!( + dest::NoIndexArray, + bc::Base.Broadcast.Broadcasted{<:NoIndexStyle} + ) axes(dest) == axes(bc) || throwdm(axes(dest), axes(bc)) bc′ = Base.Broadcast.preprocess(dest, bc) dest′ = dest.x @@ -45,7 +49,7 @@ Base.show_vector(io::IO, x::NoIndexArray) = Base.show_vector(io, x.x) Base.show(io::IO, x::NoIndexArray) = (print(io, "NoIndexArray"); show(io, x.x)) function Base.show(io::IO, ::MIME"text/plain", x::NoIndexArray) println(io, Base.summary(x), ":") - Base.print_array(io, x.x) + return Base.print_array(io, x.x) end prob = ODEProblem((du, u, p, t) -> copyto!(du, u), NoIndexArray(ones(10, 10)), (0.0, 10.0)) @@ -66,7 +70,7 @@ Base.ndims(::Type{<:CustomArray{T, N}}) where {T, N} = N Base.zero(x::CustomArray) = CustomArray(zero(x.x)) Base.zero(::Type{<:CustomArray{T, N}}) where {T, N} = CustomArray(zero(Array{T, N})) function Base.similar(x::CustomArray, dims::Union{Integer, AbstractUnitRange}...) - CustomArray(similar(x.x, dims...)) + return CustomArray(similar(x.x, dims...)) end Base.copyto!(x::CustomArray, y::CustomArray) = CustomArray(copyto!(x.x, y.x)) Base.copy(x::CustomArray) = CustomArray(copy(x.x)) @@ -92,19 +96,22 @@ CustomStyle(::Val{N}) where {N} = CustomStyle{N}() CustomStyle{M}(::Val{N}) where {N, M} = NoIndexStyle{N}() Base.BroadcastStyle(::Type{<:CustomArray{T, N}}) where {T, N} = CustomStyle{N}() function Broadcast.BroadcastStyle( - ::CustomStyle{N}, ::Broadcast.DefaultArrayStyle{0}) where {N} - CustomStyle{N}() + ::CustomStyle{N}, ::Broadcast.DefaultArrayStyle{0} + ) where {N} + return CustomStyle{N}() end function Base.similar( - bc::Base.Broadcast.Broadcasted{CustomStyle{N}}, ::Type{ElType}) where {N, ElType} - CustomArray(similar(Array{ElType, N}, axes(bc))) + bc::Base.Broadcast.Broadcasted{CustomStyle{N}}, ::Type{ElType} + ) where {N, ElType} + return CustomArray(similar(Array{ElType, N}, axes(bc))) end Base.Broadcast._broadcast_getindex(x::CustomArray, i) = x.x[i] Base.Broadcast.extrude(x::CustomArray) = x Base.Broadcast.broadcastable(x::CustomArray) = x @inline function Base.copyto!( - dest::CustomArray, bc::Base.Broadcast.Broadcasted{<:CustomStyle}) + dest::CustomArray, bc::Base.Broadcast.Broadcasted{<:CustomStyle} + ) axes(dest) == axes(bc) || throwdm(axes(dest), axes(bc)) bc′ = Base.Broadcast.preprocess(dest, bc) dest′ = dest.x @@ -138,7 +145,7 @@ Base.show_vector(io::IO, x::CustomArray) = Base.show_vector(io, x.x) Base.show(io::IO, x::CustomArray) = (print(io, "CustomArray"); show(io, x.x)) function Base.show(io::IO, ::MIME"text/plain", x::CustomArray) println(io, Base.summary(x), ":") - Base.print_array(io, x.x) + return Base.print_array(io, x.x) end prob = ODEProblem((du, u, p, t) -> copyto!(du, u), CustomArray(ones(10)), (0.0, 10.0)) diff --git a/test/interface/nojac.jl b/test/interface/nojac.jl index 50644be664..8e29d112c5 100644 --- a/test/interface/nojac.jl +++ b/test/interface/nojac.jl @@ -11,16 +11,20 @@ function brusselator_2d_loop(du, u, p, t) i, j = Tuple(I) x, y = xyd_brusselator[I[1]], xyd_brusselator[I[2]] ip1, im1, jp1, jm1 = limit(i + 1, N), limit(i - 1, N), limit(j + 1, N), - limit(j - 1, N) - du[i, j, 1] = alpha * (u[im1, j, 1] + u[ip1, j, 1] + u[i, jp1, 1] + u[i, jm1, 1] - - 4u[i, j, 1]) + - B + u[i, j, 1]^2 * u[i, j, 2] - (A + 1) * u[i, j, 1] + - brusselator_f(x, y, t) - du[i, j, 2] = alpha * (u[im1, j, 2] + u[ip1, j, 2] + u[i, jp1, 2] + u[i, jm1, 2] - - 4u[i, j, 2]) + - A * u[i, j, 1] - u[i, j, 1]^2 * u[i, j, 2] + limit(j - 1, N) + du[i, j, 1] = alpha * ( + u[im1, j, 1] + u[ip1, j, 1] + u[i, jp1, 1] + u[i, jm1, 1] - + 4u[i, j, 1] + ) + + B + u[i, j, 1]^2 * u[i, j, 2] - (A + 1) * u[i, j, 1] + + brusselator_f(x, y, t) + du[i, j, 2] = alpha * ( + u[im1, j, 2] + u[ip1, j, 2] + u[i, jp1, 2] + u[i, jm1, 2] - + 4u[i, j, 2] + ) + + A * u[i, j, 1] - u[i, j, 1]^2 * u[i, j, 2] end - nothing + return nothing end p = (3.4, 1.0, 10.0, step(xyd_brusselator)) @@ -33,19 +37,25 @@ function init_brusselator_2d(xyd) u[I, 1] = 22 * (y * (1 - y))^(3 / 2) u[I, 2] = 27 * (x * (1 - x))^(3 / 2) end - u + return u end u0 = init_brusselator_2d(xyd_brusselator) -prob_ode_brusselator_2d = ODEProblem(brusselator_2d_loop, - u0, (0.0, 5.0), p) +prob_ode_brusselator_2d = ODEProblem( + brusselator_2d_loop, + u0, (0.0, 5.0), p +) integ1 = init(prob_ode_brusselator_2d, TRBDF2(), save_everystep = false) -integ2 = init(prob_ode_brusselator_2d, TRBDF2(linsolve = KrylovJL_GMRES()), - save_everystep = false) +integ2 = init( + prob_ode_brusselator_2d, TRBDF2(linsolve = KrylovJL_GMRES()), + save_everystep = false +) -nojac = @allocated init(prob_ode_brusselator_2d, +nojac = @allocated init( + prob_ode_brusselator_2d, TRBDF2(linsolve = KrylovJL_GMRES()), - save_everystep = false) + save_everystep = false +) jac = @allocated init(prob_ode_brusselator_2d, TRBDF2(), save_everystep = false) @test jac / nojac > 50 @test integ1.cache.nlsolver.cache.jac_config !== (nothing, nothing) @@ -107,7 +117,7 @@ function pollu(dy, y, p, t) r25 = k25 * y[20] dy[1] = -r1 - r10 - r14 - r23 - r24 + - r2 + r3 + r9 + r11 + r12 + r22 + r25 + r2 + r3 + r9 + r11 + r12 + r22 + r25 dy[2] = -r2 - r3 - r9 - r12 + r1 + r21 dy[3] = -r15 + r1 + r17 + r19 + r22 dy[4] = -r2 - r16 - r17 - r23 + r15 @@ -126,7 +136,7 @@ function pollu(dy, y, p, t) dy[17] = -r20 dy[18] = r20 dy[19] = -r21 - r22 - r24 + r23 + r25 - dy[20] = -r25 + r24 + return dy[20] = -r25 + r24 end function fjac(J, y, p, t) @@ -245,15 +255,21 @@ u0[9] = 0.01 u0[17] = 0.007 prob = ODEProblem(ODEFunction(pollu, jac = fjac), u0, (0.0, 60.0)) -integ = init(prob, Rosenbrock23(), abstol = 1e-6, reltol = 1e-6) +integ = init(prob, Rosenbrock23(), abstol = 1.0e-6, reltol = 1.0e-6) @test integ.cache.jac_config === (nothing, nothing) -integ = init(prob, Rosenbrock23(linsolve = SimpleLUFactorization()), abstol = 1e-6, - reltol = 1e-6) +integ = init( + prob, Rosenbrock23(linsolve = SimpleLUFactorization()), abstol = 1.0e-6, + reltol = 1.0e-6 +) @test integ.cache.jac_config === (nothing, nothing) -integ = init(prob, Rosenbrock23(linsolve = GenericLUFactorization()), abstol = 1e-6, - reltol = 1e-6) +integ = init( + prob, Rosenbrock23(linsolve = GenericLUFactorization()), abstol = 1.0e-6, + reltol = 1.0e-6 +) @test integ.cache.jac_config === (nothing, nothing) -integ = init(prob, +integ = init( + prob, Rosenbrock23(linsolve = RFLUFactorization(), autodiff = AutoForwardDiff(chunksize = 3)), - abstol = 1e-6, reltol = 1e-6) + abstol = 1.0e-6, reltol = 1.0e-6 +) @test integ.cache.jac_config === (nothing, nothing) diff --git a/test/interface/nonfulldiagonal_sparse.jl b/test/interface/nonfulldiagonal_sparse.jl index 337ee3b99c..e19b270ca9 100644 --- a/test/interface/nonfulldiagonal_sparse.jl +++ b/test/interface/nonfulldiagonal_sparse.jl @@ -17,7 +17,7 @@ function enclosethetimedifferential(parameters::NamedTuple)::Function lower[1] = -1.0 upper[end] = 1.0 M = hcat(lower, sparse(diagm(-1 => du, 0 => diag, 1 => du2)), upper) - MatrixOperator(1 / dx * M) + return MatrixOperator(1 / dx * M) end function second_deriv(N) @@ -30,7 +30,7 @@ function enclosethetimedifferential(parameters::NamedTuple)::Function lower[1] = 1.0 upper[end] = 1.0 M = hcat(lower, sparse(diagm(-1 => du, 0 => diag, 1 => du2)), upper) - MatrixOperator(1 / dx^2 * M) + return MatrixOperator(1 / dx^2 * M) end function extender(N) @@ -40,10 +40,12 @@ function enclosethetimedifferential(parameters::NamedTuple)::Function upper = spzeros(Float64, N) lower[1] = 1.0 upper[end] = 1.0 - M = vcat(transpose(lower), + M = vcat( + transpose(lower), sparse(diagm(diag)), - transpose(upper)) - MatrixOperator(1 / dx^2 * M) + transpose(upper) + ) + return MatrixOperator(1 / dx^2 * M) end bc_handler = extender(N) @@ -55,8 +57,10 @@ function enclosethetimedifferential(parameters::NamedTuple)::Function bc_xx = zeros(Real, N) function timedifferentialclosure!(du, u, p, t) - (; α, D, v, k_p, V_c, Q_l, Q_r, V_b, - S, Lm, Dm, V_v) = p + (; + α, D, v, k_p, V_c, Q_l, Q_r, V_b, + S, Lm, Dm, V_v, + ) = p c = u[1:(end - 3)] c_v = u[end - 2] @@ -88,7 +92,7 @@ function enclosethetimedifferential(parameters::NamedTuple)::Function du[end - 1] = dcc_dt dcb_dt = (Q_l / V_b) * c_c + C / V_b - du[end] = dcb_dt + return du[end] = dcb_dt end return timedifferentialclosure! @@ -106,21 +110,28 @@ prior = ComponentArray(; S = 52, Lm = 0.05, Dm = 0.046, - V_v = 18.0) + V_v = 18.0 +) r_space = collect(range(0.0, 2.0, length = 15)) -computeparams = (Δr = r_space[2], +computeparams = ( + Δr = r_space[2], r_space = r_space, - countorderapprox = 2) -parameters = (prior = prior, - compute = computeparams) + countorderapprox = 2, +) +parameters = ( + prior = prior, + compute = computeparams, +) dudt = enclosethetimedifferential(parameters) IC = ones(length(r_space) + 3) -odeprob = ODEProblem(dudt, +odeprob = ODEProblem( + dudt, IC, (0, 2.1), - parameters.prior); + parameters.prior +); du0 = copy(odeprob.u0); # Hardcoded sparsity pattern for 15 spatial points + 3 state variables (18x18 matrix) # Previously computed using: Symbolics.jacobian_sparsity((du, u) -> dudt(du, u, parameters.prior, 0.0), du0, odeprob.u0) @@ -128,12 +139,16 @@ du0 = copy(odeprob.u0); I = [1, 2, 16, 18, 1, 2, 3, 18, 2, 3, 4, 18, 3, 4, 5, 18, 4, 5, 6, 18, 5, 6, 7, 18, 6, 7, 8, 18, 7, 8, 9, 18, 8, 9, 10, 18, 9, 10, 11, 18, 10, 11, 12, 18, 11, 12, 13, 18, 12, 13, 14, 18, 13, 14, 15, 18, 14, 15, 17, 18, 1, 16, 17, 15, 17, 18, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18] J = [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18] jac_sparsity = sparse(I, J, ones(Bool, length(I)), 18, 18); -f = ODEFunction(dudt; - jac_prototype = float.(jac_sparsity)); -sparseodeprob = ODEProblem(f, +f = ODEFunction( + dudt; + jac_prototype = float.(jac_sparsity) +); +sparseodeprob = ODEProblem( + f, odeprob.u0, (0, 2.1), - parameters.prior); + parameters.prior +); solve(odeprob, TRBDF2()); solve(sparseodeprob, TRBDF2()); diff --git a/test/interface/norecompile.jl b/test/interface/norecompile.jl index 30337d5316..32132b7d64 100644 --- a/test/interface/norecompile.jl +++ b/test/interface/norecompile.jl @@ -1,7 +1,7 @@ using OrdinaryDiffEq, Test, ADTypes function f(du, u, p, t) du[1] = 0.2u[1] - du[2] = 0.4u[2] + return du[2] = 0.4u[2] end u0 = ones(2) tspan = (0.0, 1.0) @@ -10,15 +10,17 @@ prob = ODEProblem{true, SciMLBase.AutoSpecialize}(f, u0, tspan, Float64[]) function lorenz(du, u, p, t) du[1] = 10.0(u[2] - u[1]) du[2] = u[1] * (28.0 - u[3]) - u[2] - du[3] = u[1] * u[2] - (8 / 3) * u[3] + return du[3] = u[1] * u[2] - (8 / 3) * u[3] end lorenzprob = ODEProblem(lorenz, [1.0; 0.0; 0.0], (0.0, 1.0), Float64[]) t1 = @elapsed sol1 = solve(lorenzprob, Rosenbrock23()) t2 = @elapsed sol2 = solve(lorenzprob, Rosenbrock23(autodiff = AutoFiniteDiff())) -lorenzprob2 = ODEProblem{true, SciMLBase.FullSpecialize}(lorenz, [1.0; 0.0; 0.0], - (0.0, 1.0), Float64[]) +lorenzprob2 = ODEProblem{true, SciMLBase.FullSpecialize}( + lorenz, [1.0; 0.0; 0.0], + (0.0, 1.0), Float64[] +) t3 = @elapsed sol3 = solve(lorenzprob2, Rosenbrock23()) t4 = @elapsed sol4 = solve(lorenzprob2, Rosenbrock23(autodiff = AutoFiniteDiff())) @@ -33,7 +35,7 @@ t4 = @elapsed sol4 = solve(lorenzprob2, Rosenbrock23(autodiff = AutoFiniteDiff() integ = init(lorenzprob, Rosenbrock23()) @test integ.f.f isa FunctionWrappersWrappers.FunctionWrappersWrapper -solve(prob, EPIRK4s3A(), dt = 1e-1) +solve(prob, EPIRK4s3A(), dt = 1.0e-1) #= diff --git a/test/interface/null_u0_callbacks_test.jl b/test/interface/null_u0_callbacks_test.jl index 5ed451daf3..fb39ca5cd5 100644 --- a/test/interface/null_u0_callbacks_test.jl +++ b/test/interface/null_u0_callbacks_test.jl @@ -6,11 +6,11 @@ using OrdinaryDiffEq, DiffEqCallbacks, Test @testset "Null u0 with callbacks" begin @testset "Explicit solvers" begin for (name, alg, kwargs) in [ - ("FunctionMap", FunctionMap(), (dt = 0.1,)), - ("Euler", Euler(), (dt = 0.1,)), - ("RK4", RK4(), (dt = 0.1,)), - ("Tsit5", Tsit5(), ()) - ] + ("FunctionMap", FunctionMap(), (dt = 0.1,)), + ("Euler", Euler(), (dt = 0.1,)), + ("RK4", RK4(), (dt = 0.1,)), + ("Tsit5", Tsit5(), ()), + ] @testset "$name" begin counter = Ref(0) cb = PresetTimeCallback([0.5], integrator -> (counter[] += 1)) @@ -27,12 +27,12 @@ using OrdinaryDiffEq, DiffEqCallbacks, Test @testset "Implicit solvers" begin for (name, alg) in [ - ("Rosenbrock23", Rosenbrock23()), - ("Rodas5P", Rodas5P()), - ("TRBDF2", TRBDF2()), - ("ImplicitEuler", ImplicitEuler()), - ("QNDF", QNDF()) - ] + ("Rosenbrock23", Rosenbrock23()), + ("Rodas5P", Rodas5P()), + ("TRBDF2", TRBDF2()), + ("ImplicitEuler", ImplicitEuler()), + ("QNDF", QNDF()), + ] @testset "$name" begin counter = Ref(0) cb = PresetTimeCallback([0.5], integrator -> (counter[] += 1)) diff --git a/test/interface/ode_backwards_test.jl b/test/interface/ode_backwards_test.jl index 265038a792..640c5a7626 100644 --- a/test/interface/ode_backwards_test.jl +++ b/test/interface/ode_backwards_test.jl @@ -7,7 +7,7 @@ sol = solve(prob2, DP5(), dt = -1 / 4, tstops = [0.5]) @test sol.t == [1.0, 0.75, 0.5, 0] sol = solve(prob2, RK4(), dt = -1 / 4, adaptive = false) -@test sol.t == [1.00, 0.75, 0.5, 0.25, 0] +@test sol.t == [1.0, 0.75, 0.5, 0.25, 0] sol = solve(prob2, RK4(), dt = -1 / 4, tstops = [0.5, 0.33], adaptive = false) -@test sol.t ≈ [1.00, 0.75, 0.5, 0.33, 0.08, 0] +@test sol.t ≈ [1.0, 0.75, 0.5, 0.33, 0.08, 0] diff --git a/test/interface/ode_initdt_tests.jl b/test/interface/ode_initdt_tests.jl index 2bee803e1e..b3d590edb3 100644 --- a/test/interface/ode_initdt_tests.jl +++ b/test/interface/ode_initdt_tests.jl @@ -9,14 +9,14 @@ prob = prob_ode_2Dlinear sol = solve(prob, ExplicitRK(tableau = constructBogakiShampine3())) dt₀ = sol.t[2] -@test 1e-7 < dt₀ < 0.1 +@test 1.0e-7 < dt₀ < 0.1 @test_throws ArgumentError local sol = solve(prob, Euler()) #dt₀ = sol.t[2] sol3 = solve(prob, ExplicitRK(tableau = constructDormandPrince8_64bit())) dt₀ = sol3.t[2] -@test 1e-7 < dt₀ < 0.3 +@test 1.0e-7 < dt₀ < 0.3 T = Float32 u0 = T.([1.0; 0.0; 0.0]) @@ -29,7 +29,7 @@ tspan = T.((2000, 2100)) prob = remake(prob, tspan = tspan) # set maxiters to prevent infinite loop on test failure @test solve(prob, Euler(); dt = T(0.0001), maxiters = 10).retcode == - SciMLBase.ReturnCode.MaxIters + SciMLBase.ReturnCode.MaxIters function rober(du, u, p, t) y₁, y₂, y₃ = u @@ -37,7 +37,7 @@ function rober(du, u, p, t) du[1] = -k₁ * y₁ + k₃ * y₂ * y₃ du[2] = k₁ * y₁ - k₂ * y₂^2 - k₃ * y₂ * y₃ du[3] = k₂ * y₂^2 - nothing + return nothing end u0 = Float32[1.0, 0.0, 0.0] tspan = (0.0f0, 1.0f5) @@ -51,18 +51,18 @@ using LinearAlgebra function f(du, u, p, t) du[1] = -p[1] * u[1] + p[2] * u[2] * u[3] du[2] = p[1] * u[1] - p[2] * u[2] * u[3] - p[3] * u[2] * u[2] - du[3] = u[1] + u[2] + u[3] - 1.0 + return du[3] = u[1] + u[2] + u[3] - 1.0 end M = Diagonal([1, 1, 0]) -p = [0.04, 10^4, 3e7] +p = [0.04, 10^4, 3.0e7] u0 = [1.0, 0.0, 0.0] -tspan = (0.0, 1e6) +tspan = (0.0, 1.0e6) prob = ODEProblem(ODEFunction(f, mass_matrix = M), u0, tspan, p) sol = solve(prob, Rodas5()) -@test sol.t[end] == 1e6 +@test sol.t[end] == 1.0e6 # test that dtmin is set based on timespan -prob = ODEProblem((u, p, t) -> 1e20 * sin(1e20 * t), 0.1, (0, 1e-19)) +prob = ODEProblem((u, p, t) -> 1.0e20 * sin(1.0e20 * t), 0.1, (0, 1.0e-19)) @test solve(prob, Tsit5()).retcode == ReturnCode.Success #test that we are robust to u0=0, t0!=0 diff --git a/test/interface/ode_numbertype_tests.jl b/test/interface/ode_numbertype_tests.jl index 54a0fa71de..40cba3db48 100644 --- a/test/interface/ode_numbertype_tests.jl +++ b/test/interface/ode_numbertype_tests.jl @@ -10,8 +10,10 @@ prob = ODEProblem(f, 1 / 2, (0.0, 1.0)) sol3 = solve(prob, RK4(), dt = 1 / 2^(6), abstol = 1, reltol = 0) -prob = ODEProblem(f, BigInt(1) // BigInt(2), - (BigInt(0) // BigInt(1), BigInt(1) // BigInt(1))) +prob = ODEProblem( + f, BigInt(1) // BigInt(2), + (BigInt(0) // BigInt(1), BigInt(1) // BigInt(1)) +) integrator = init(prob, RK4(), dt = BigInt(1) // BigInt(2)^(6), abstol = 1, reltol = 0) @@ -31,10 +33,14 @@ sol4 = solve(prob, DP5(), dt = BigInt(1) // BigInt(2)^(3), adaptive = false) tabalg = ExplicitRK(tableau = OrdinaryDiffEqExplicitRK.constructDormandPrince(Rational{BigInt})) -integrator = init(prob, tabalg, dt = BigInt(1) // BigInt(2)^(3), abstol = 1, reltol = 0, - adaptive = false) -sol5 = solve(prob, tabalg, dt = BigInt(1) // BigInt(2)^(3), abstol = 1, reltol = 0, - adaptive = false) +integrator = init( + prob, tabalg, dt = BigInt(1) // BigInt(2)^(3), abstol = 1, reltol = 0, + adaptive = false +) +sol5 = solve( + prob, tabalg, dt = BigInt(1) // BigInt(2)^(3), abstol = 1, reltol = 0, + adaptive = false +) @test typeof(sol5.u[end]) == Rational{BigInt} diff --git a/test/interface/ode_saveat_tests.jl b/test/interface/ode_saveat_tests.jl index b945941149..a46d791699 100644 --- a/test/interface/ode_saveat_tests.jl +++ b/test/interface/ode_saveat_tests.jl @@ -12,8 +12,10 @@ for prob in [prob_forward, prob_reverse] @test sort!(symdiff(sol.t, sol2.t)) == [0.0, 1 / 2, 1.0] - sol2 = solve(prob, DP5(), dt = 1 // 2^(2), save_everystep = false, - saveat = [0.0, 1 / 2, 1.0]) + sol2 = solve( + prob, DP5(), dt = 1 // 2^(2), save_everystep = false, + saveat = [0.0, 1 / 2, 1.0] + ) @test symdiff(sol.t, sol2.t) == [1 / 2] @@ -21,8 +23,10 @@ for prob in [prob_forward, prob_reverse] @test sort!(symdiff(sol.t, sol2.t)) == [1 / 2] - sol3 = solve(prob, DP5(), dt = 1 // 2^(2), save_everystep = false, saveat = [1 / 2], - tstops = [1 / 2]) + sol3 = solve( + prob, DP5(), dt = 1 // 2^(2), save_everystep = false, saveat = [1 / 2], + tstops = [1 / 2] + ) @test sol3.t == [1 / 2] @@ -33,46 +37,58 @@ for prob in [prob_forward, prob_reverse] sol3 = solve(prob, DP5(), dt = 1 // 2^(2), saveat = 1 / 10, tstops = [1 / 2]) @show tdir > 0 - @test tdir > 0 ? sol3.t == collect(0.0:0.1:1.00) : sol3.t == collect(1.0:-0.1:0.00) + @test tdir > 0 ? sol3.t == collect(0.0:0.1:1.0) : sol3.t == collect(1.0:-0.1:0.0) end sol = solve(prob_forward, RK4(), dt = 1 / 2^(2), save_everystep = true, adaptive = false) -sol2 = solve(prob_forward, RK4(), dt = 1 / 2^(2), save_everystep = true, adaptive = false, - saveat = [0.125, 0.6, 0.61, 0.8]) +sol2 = solve( + prob_forward, RK4(), dt = 1 / 2^(2), save_everystep = true, adaptive = false, + saveat = [0.125, 0.6, 0.61, 0.8] +) @test sol.retcode == sol2.retcode == ReturnCode.Success @test symdiff(sol.t, sol2.t) == [0.125, 0.6, 0.61, 0.8] sol = solve(prob_forward, Rosenbrock32(), dt = 1 / 2^(2), save_everystep = true) -sol2 = solve(prob_forward, Rosenbrock32(), dt = 1 / 2^(2), save_everystep = true, - saveat = [0.125, 0.6, 0.61, 0.8]) +sol2 = solve( + prob_forward, Rosenbrock32(), dt = 1 / 2^(2), save_everystep = true, + saveat = [0.125, 0.6, 0.61, 0.8] +) @test sol.retcode == sol2.retcode == ReturnCode.Success @test symdiff(sol.t, sol2.t) == [0.125, 0.6, 0.61, 0.8] sol = solve(prob_forward, Trapezoid(), dt = 1 / 2^(2), save_everystep = true) -sol2 = solve(prob_forward, Trapezoid(), dt = 1 / 2^(2), save_everystep = true, - saveat = [0.125, 0.6, 0.61, 0.8]) +sol2 = solve( + prob_forward, Trapezoid(), dt = 1 / 2^(2), save_everystep = true, + saveat = [0.125, 0.6, 0.61, 0.8] +) @test sol.retcode == sol2.retcode == ReturnCode.Success @test symdiff(sol.t, sol2.t) == [0.125, 0.6, 0.61, 0.8] sol = solve(prob_reverse, RK4(), dt = 1 / 2^(2), save_everystep = true, adaptive = false) -sol2 = solve(prob_reverse, RK4(), dt = 1 / 2^(2), save_everystep = true, adaptive = false, - saveat = [0.8, 0.61, 0.6, 0.125]) +sol2 = solve( + prob_reverse, RK4(), dt = 1 / 2^(2), save_everystep = true, adaptive = false, + saveat = [0.8, 0.61, 0.6, 0.125] +) @test sol.retcode == sol2.retcode == ReturnCode.Success @test symdiff(sol.t, sol2.t) == [0.8, 0.61, 0.6, 0.125] sol = solve(prob_reverse, Rosenbrock32(), dt = 1 / 2^(2), save_everystep = true) -sol2 = solve(prob_reverse, Rosenbrock32(), dt = 1 / 2^(2), save_everystep = true, - saveat = [0.8, 0.61, 0.6, 0.125]) +sol2 = solve( + prob_reverse, Rosenbrock32(), dt = 1 / 2^(2), save_everystep = true, + saveat = [0.8, 0.61, 0.6, 0.125] +) @test sol.retcode == sol2.retcode == ReturnCode.Success @test symdiff(sol.t, sol2.t) == [0.8, 0.61, 0.6, 0.125] sol = solve(prob_reverse, Trapezoid(), dt = 1 / 2^(2), save_everystep = true) -sol2 = solve(prob_reverse, Trapezoid(), dt = 1 / 2^(2), save_everystep = true, - saveat = [0.8, 0.61, 0.6, 0.125]) +sol2 = solve( + prob_reverse, Trapezoid(), dt = 1 / 2^(2), save_everystep = true, + saveat = [0.8, 0.61, 0.6, 0.125] +) @test sol.retcode == sol2.retcode == ReturnCode.Success @test symdiff(sol.t, sol2.t) == [0.8, 0.61, 0.6, 0.125] @@ -80,22 +96,28 @@ sol2 = solve(prob_reverse, Trapezoid(), dt = 1 / 2^(2), save_everystep = true, prob = prob_ode_2Dlinear sol = solve(prob, DP5(), dt = 1 // 2^(2), save_everystep = true) -sol2 = solve(prob, DP5(), dt = 1 // 2^(2), save_everystep = true, - saveat = [0.0, 1 / 2, 1.0]) +sol2 = solve( + prob, DP5(), dt = 1 // 2^(2), save_everystep = true, + saveat = [0.0, 1 / 2, 1.0] +) @test sol.retcode == sol2.retcode == ReturnCode.Success @test symdiff(sol.t, sol2.t) == [1 / 2] sol = solve(prob, RK4(), dt = 1 / 2^(2), save_everystep = true, adaptive = false) -sol2 = solve(prob, RK4(), dt = 1 / 2^(2), save_everystep = true, adaptive = false, - saveat = [0.0, 0.125, 0.6, 0.61, 0.8, 1.0]) +sol2 = solve( + prob, RK4(), dt = 1 / 2^(2), save_everystep = true, adaptive = false, + saveat = [0.0, 0.125, 0.6, 0.61, 0.8, 1.0] +) @test sol.retcode == sol2.retcode == ReturnCode.Success @test symdiff(sol.t, sol2.t) == [0.125, 0.6, 0.61, 0.8] sol = solve(prob, Rosenbrock32(), dt = 1 / 2^(2), save_everystep = true) -sol2 = solve(prob, Rosenbrock32(), dt = 1 / 2^(2), save_everystep = true, - saveat = [0.125, 0.6, 0.61, 0.8]) +sol2 = solve( + prob, Rosenbrock32(), dt = 1 / 2^(2), save_everystep = true, + saveat = [0.125, 0.6, 0.61, 0.8] +) @test sol.retcode == sol2.retcode == ReturnCode.Success @test symdiff(sol.t, sol2.t) == [0.125, 0.6, 0.61, 0.8] @@ -106,22 +128,28 @@ sol2 = solve(prob, Trapezoid(), dt = 1 / 2^(2), saveat = [0.125, 0.6, 0.61, 0.8] @test sol.retcode == sol2.retcode == ReturnCode.Success @test sort!(symdiff(sol.t, sol2.t)) == [0.0, 0.125, 0.6, 0.61, 0.8, 1.0] -sol = solve(prob, Trapezoid(), dt = 1 / 2^(2), save_everystep = true, dense = false, - saveat = [0, 0.125, 0.6, 0.61, 0.8]) +sol = solve( + prob, Trapezoid(), dt = 1 / 2^(2), save_everystep = true, dense = false, + saveat = [0, 0.125, 0.6, 0.61, 0.8] +) @test sol.retcode == ReturnCode.Success @test !(sol.t[2] ≈ 0) # Test Iterators -sol2 = solve(prob, DP5(), dt = 1 // 2^(2), save_everystep = false, dense = false, - saveat = 0:(1 // 100):1) +sol2 = solve( + prob, DP5(), dt = 1 // 2^(2), save_everystep = false, dense = false, + saveat = 0:(1 // 100):1 +) @test sol2.retcode == ReturnCode.Success @test sol2.t ≈ collect(0:(1 // 100):1) -sol2 = solve(prob, DP5(), dt = 1 // 2^(2), save_everystep = false, dense = false, - saveat = range(0, stop = 1, length = 100)) +sol2 = solve( + prob, DP5(), dt = 1 // 2^(2), save_everystep = false, dense = false, + saveat = range(0, stop = 1, length = 100) +) @test sol2.retcode == ReturnCode.Success @test sol2.t ≈ range(0, stop = 1, length = 100) @@ -135,8 +163,10 @@ for u in sol2.u @test length(u) == 3 end -sol2 = solve(prob2, DP5(), dt = 1 // 2^(2), saveat = 0.1, save_idxs = 1:2:5, - save_everystep = true) +sol2 = solve( + prob2, DP5(), dt = 1 // 2^(2), saveat = 0.1, save_idxs = 1:2:5, + save_everystep = true +) sol = solve(prob2, DP5(), dt = 1 // 2^(2), save_start = false) @@ -145,8 +175,10 @@ sol = solve(prob2, DP5(), dt = 1 // 2^(2), save_start = false) # Test save_on switch sol = solve(prob, DP5(), save_on = false, save_start = false, save_end = false) @test isempty(sol.t) && isempty(sol.u) -sol = solve(prob, DP5(), saveat = 0.2, save_on = false, save_start = false, - save_end = false) +sol = solve( + prob, DP5(), saveat = 0.2, save_on = false, save_start = false, + save_end = false +) @test isempty(sol.t) && isempty(sol.u) small_f(u, p, t) = u @@ -162,14 +194,18 @@ add_tstop!(integ, 2.0) solve!(integ) @test integ.sol.t == _saveat -integ = init(ODEProblem((u, p, t) -> u, 0.0, (0.0, 1.0)), Tsit5(), saveat = _saveat, - save_end = true) +integ = init( + ODEProblem((u, p, t) -> u, 0.0, (0.0, 1.0)), Tsit5(), saveat = _saveat, + save_end = true +) add_tstop!(integ, 2.0) solve!(integ) @test integ.sol.t == [0.0, 0.25, 0.5, 1.0, 2.0] -integ = init(ODEProblem((u, p, t) -> u, 0.0, (0.0, 1.0)), Tsit5(), saveat = _saveat, - save_end = false) +integ = init( + ODEProblem((u, p, t) -> u, 0.0, (0.0, 1.0)), Tsit5(), saveat = _saveat, + save_end = false +) add_tstop!(integ, 2.0) solve!(integ) @test integ.sol.t == _saveat[1:(end - 1)] @@ -191,12 +227,12 @@ function SIR!(du, u, pars, t) dS = -β * S * I dI = β * S * I - γ * I dR = γ * I - du .= [dS, dI, dR] + return du .= [dS, dI, dR] end t_obs = collect(0:1.0:218) -prob = ODEProblem(SIR!, [0.99, 0.01, 0.0], (t_obs[1], t_obs[end]), [0.20, 0.15]) -sol = solve(prob, DP5(), reltol = 1e-6, abstol = 1e-6, saveat = t_obs) +prob = ODEProblem(SIR!, [0.99, 0.01, 0.0], (t_obs[1], t_obs[end]), [0.2, 0.15]) +sol = solve(prob, DP5(), reltol = 1.0e-6, abstol = 1.0e-6, saveat = t_obs) @test maximum(sol) <= 1 @test minimum(sol) >= 0 @@ -208,10 +244,11 @@ sol = solve(prob, DP5(), reltol = 1e-6, abstol = 1e-6, saveat = t_obs) @test solve(prob, Tsit5(); saveat = 0:0.1:0.4).t == [0.0; 0.1; 0.2; 0.3; 0.4] @test solve(prob, Tsit5(); saveat = 0:0.1:0.4, save_start = true, save_end = true).t == - [0.0; 0.1; 0.2; 0.3; 0.4] + [0.0; 0.1; 0.2; 0.3; 0.4] @test solve( - prob, Tsit5(); saveat = 0:0.1:0.4, save_start = false, save_end = false).t == - [0.1; 0.2; 0.3] + prob, Tsit5(); saveat = 0:0.1:0.4, save_start = false, save_end = false + ).t == + [0.1; 0.2; 0.3] ts = solve(prob, Tsit5()).t @test 0.0 in ts @@ -225,7 +262,7 @@ sol = solve(prob, DP5(), reltol = 1e-6, abstol = 1e-6, saveat = t_obs) @test solve(prob, Tsit5(); saveat = [0.2]).t == [0.2] @test solve(prob, Tsit5(); saveat = [0.2], save_start = true, save_end = true).t == - [0.0; 0.2; 0.4] + [0.0; 0.2; 0.4] @test solve(prob, Tsit5(); saveat = [0.2], save_start = false, save_end = false).t == - [0.2] + [0.2] end diff --git a/test/interface/ode_saveidxs_tests.jl b/test/interface/ode_saveidxs_tests.jl index 9bd0f0cdf1..f3c2f60ef6 100644 --- a/test/interface/ode_saveidxs_tests.jl +++ b/test/interface/ode_saveidxs_tests.jl @@ -1,6 +1,6 @@ using OrdinaryDiffEq, Test import ODEProblemLibrary: prob_ode_linear, - linear, f_2dlinear + linear, f_2dlinear # scalar, not in-place prob = prob_ode_linear diff --git a/test/interface/ode_strip_test.jl b/test/interface/ode_strip_test.jl index 697332da2d..ab4b8a2856 100644 --- a/test/interface/ode_strip_test.jl +++ b/test/interface/ode_strip_test.jl @@ -4,7 +4,7 @@ import SciMLBase function lorenz!(du, u, p, t) du[1] = 10.0 * (u[2] - u[1]) du[2] = u[1] * (28.0 - u[3]) - u[2] - du[3] = u[1] * u[2] - (8 / 3) * u[3] + return du[3] = u[1] * u[2] - (8 / 3) * u[3] end u0 = [1.0; 0.0; 0.0] diff --git a/test/interface/ode_tstops_tests.jl b/test/interface/ode_tstops_tests.jl index a911ecfe8a..3ba5ea6268 100644 --- a/test/interface/ode_tstops_tests.jl +++ b/test/interface/ode_tstops_tests.jl @@ -11,19 +11,25 @@ Random.seed!(100) sol = solve(prob, RK4(), dt = 1 // 3, tstops = [1 / 2], adaptive = false) @test sol.t == [0, 1 / 3, 1 / 2, 1 / 3 + 1 / 2, 1] - sol = solve(prob, RK4(), dt = 1 // 3, tstops = [1 / 2], - d_discontinuities = [-1 / 2, 1 / 2, 3 / 2], adaptive = false) + sol = solve( + prob, RK4(), dt = 1 // 3, tstops = [1 / 2], + d_discontinuities = [-1 / 2, 1 / 2, 3 / 2], adaptive = false + ) @test sol.t == [0, 1 / 3, 1 / 2, 1 / 3 + 1 / 2, 1] # TODO - integrator = init(prob, RK4(), tstops = [1 / 5, 1 / 4, 1 / 3, 1 / 2, 3 / 4], - adaptive = false) + integrator = init( + prob, RK4(), tstops = [1 / 5, 1 / 4, 1 / 3, 1 / 2, 3 / 4], + adaptive = false + ) sol = solve(prob, RK4(), tstops = [1 / 5, 1 / 4, 1 / 3, 1 / 2, 3 / 4], adaptive = false) @test sol.t == [0, 1 / 5, 1 / 4, 1 / 3, 1 / 2, 3 / 4, 1] - sol = solve(prob, RK4(), tstops = [0, 1 / 5, 1 / 4, 1 / 3, 1 / 2, 3 / 4, 1], - adaptive = false) + sol = solve( + prob, RK4(), tstops = [0, 1 / 5, 1 / 4, 1 / 3, 1 / 2, 3 / 4, 1], + adaptive = false + ) @test sol.t == [0, 1 / 5, 1 / 4, 1 / 3, 1 / 2, 3 / 4, 1] sol = solve(prob, RK4(), tstops = 0:(1 // 16):1, adaptive = false) @@ -33,8 +39,12 @@ Random.seed!(100) @test sol.t == collect(range(0, stop = 1, length = 100)) end -@testset "Integrator Tstops Tests on the Interval $(["[-1, 0]", "[0, 1]"][i])" for (i, tdir) in enumerate([-1.0; - 1.0]) +@testset "Integrator Tstops Tests on the Interval $(["[-1, 0]", "[0, 1]"][i])" for (i, tdir) in enumerate( + [ + -1.0; + 1.0 + ] + ) prob2 = remake(prob_ode_linear, tspan = (0.0, tdir * 1.0)) integrator = init(prob2, Tsit5()) tstops = tdir .* [0, 1 / 5, 1 / 4, 1 / 3, 1 / 2, 3 / 4, 1] @@ -71,8 +81,10 @@ end called = Ref(false) tval = rand() ff(du, u, p, t) = du .= 0 - cb = DiscreteCallback((u, t, integrator) -> t == Float32(tval), - integrator -> (called[] = true)) + cb = DiscreteCallback( + (u, t, integrator) -> t == Float32(tval), + integrator -> (called[] = true) + ) prob = ODEProblem(ff, [0.0], (0.0f0, 1.0f0)) sol = solve(prob, Tsit5(), tstops = [tval], callback = cb) end diff --git a/test/interface/ode_twodimlinear_tests.jl b/test/interface/ode_twodimlinear_tests.jl index a5090c9317..e89c76ef30 100644 --- a/test/interface/ode_twodimlinear_tests.jl +++ b/test/interface/ode_twodimlinear_tests.jl @@ -8,8 +8,10 @@ integrator = init(prob, Tsit5(); dt = 1 // 2^(4)) solve!(integrator) sol = solve(prob, Euler(); dt = 1 // 2^(4), maxiters = Inf) -sol = solve(prob, Tsit5(); dt = 1 // 2^(20), progress = true, adaptive = false, - maxiters = Inf) +sol = solve( + prob, Tsit5(); dt = 1 // 2^(20), progress = true, adaptive = false, + maxiters = Inf +) # plot(sol,plot_analytic=true) diff --git a/test/interface/precision_mixing.jl b/test/interface/precision_mixing.jl index 727025c3e0..163a229812 100644 --- a/test/interface/precision_mixing.jl +++ b/test/interface/precision_mixing.jl @@ -1,6 +1,6 @@ using OrdinaryDiffEq function ODE(du, u, t, R, K) - du .= u + return du .= u end params = BigFloat[1.0 0.91758707304098; 1.48439909482661 1.0] u0 = BigFloat[0.1, 0.1] @@ -9,13 +9,15 @@ R = BigFloat[0.443280390004304303, 1.172917082211452] K = BigFloat[13.470600276901400604, 12.52980757005] ODE_ = (du, u, params, t) -> ODE(du, u, t, R, K) odeProblem = ODEProblem(ODE_, u0, tspan, params) -for alg in [AutoVern8(Rodas5(), nonstifftol = 11 / 10) - FBDF() - QNDF() - Tsit5() - Rodas5P() - TRBDF2() - KenCarp4() - RadauIIA5()] - Solution = solve(odeProblem, alg, saveat = 1, abstol = 1.e-12, reltol = 1.e-6) +for alg in [ + AutoVern8(Rodas5(), nonstifftol = 11 / 10) + FBDF() + QNDF() + Tsit5() + Rodas5P() + TRBDF2() + KenCarp4() + RadauIIA5() + ] + Solution = solve(odeProblem, alg, saveat = 1, abstol = 1.0e-12, reltol = 1.0e-6) end diff --git a/test/interface/scalar_handling_tests.jl b/test/interface/scalar_handling_tests.jl index c9d20773a0..a2791ac2f2 100644 --- a/test/interface/scalar_handling_tests.jl +++ b/test/interface/scalar_handling_tests.jl @@ -1,5 +1,7 @@ using OrdinaryDiffEq, ADTypes # https://github.com/JuliaDiffEq/DifferentialEquations.jl/issues/390 -solve(ODEProblem((x, p, t) -> -x, 1.0, (0.0, 50.0)), - Rosenbrock23(autodiff = AutoFiniteDiff())) +solve( + ODEProblem((x, p, t) -> -x, 1.0, (0.0, 50.0)), + Rosenbrock23(autodiff = AutoFiniteDiff()) +) diff --git a/test/interface/second_order_with_first_order_solvers.jl b/test/interface/second_order_with_first_order_solvers.jl index 6d557badc4..bad0fdefc1 100644 --- a/test/interface/second_order_with_first_order_solvers.jl +++ b/test/interface/second_order_with_first_order_solvers.jl @@ -1,7 +1,7 @@ using OrdinaryDiffEq function SinCosDiffEqToSolve!(ddu, du, u, p, t) - ddu[1] = -u[1] + return ddu[1] = -u[1] end prob = SecondOrderODEProblem(SinCosDiffEqToSolve!, [2.0], [3.0], (0.0, 1.0)) diff --git a/test/interface/sized_matrix_tests.jl b/test/interface/sized_matrix_tests.jl index 11d289bc76..cdf27d7bd4 100644 --- a/test/interface/sized_matrix_tests.jl +++ b/test/interface/sized_matrix_tests.jl @@ -1,7 +1,7 @@ using OrdinaryDiffEq, StaticArrays, Test function dudt!(du, σ, p, t) - du .= -σ + return du .= -σ end η0 = 1 @@ -14,21 +14,23 @@ p_giesekus = [η0, τ, α] prob_giesekus = ODEProblem(dudt!, σ0, (0.0, 2.0), p_giesekus) -solve_giesekus = solve(prob_giesekus, Rodas4(), saveat = 0.2, abstol = 1e-14, - reltol = 1e-14) +solve_giesekus = solve( + prob_giesekus, Rodas4(), saveat = 0.2, abstol = 1.0e-14, + reltol = 1.0e-14 +) for alg in [ - Rosenbrock23(), - Rodas4(), - Rodas4P(), - Rodas5(), - Rodas5P(), - Tsit5(), - Vern6(), - Vern7(), - Vern8(), - Vern9(), - DP5() -] - sol = solve(prob_giesekus, alg, saveat = 0.2, abstol = 1e-14, reltol = 1e-14) + Rosenbrock23(), + Rodas4(), + Rodas4P(), + Rodas5(), + Rodas5P(), + Tsit5(), + Vern6(), + Vern7(), + Vern8(), + Vern9(), + DP5(), + ] + sol = solve(prob_giesekus, alg, saveat = 0.2, abstol = 1.0e-14, reltol = 1.0e-14) @test Array(sol) ≈ Array(solve_giesekus) end diff --git a/test/interface/static_array_tests.jl b/test/interface/static_array_tests.jl index c4ba0d8fdf..0723154fb2 100644 --- a/test/interface/static_array_tests.jl +++ b/test/interface/static_array_tests.jl @@ -10,7 +10,7 @@ f = (du, u, p, t) -> begin end end ode = ODEProblem(f, u0, (0.0, 1.0)) -sol = solve(ode, Euler(), dt = 1e-2) +sol = solve(ode, Euler(), dt = 1.0e-2) @test !any(iszero.(sol(1.0))) && !any(sol(1.0) .== u0) sol = solve(ode, Tsit5()) @test !any(iszero.(sol(1.0))) && !any(sol(1.0) .== u0) @@ -19,32 +19,32 @@ sol = solve(ode, Vern9()) u0 = VectorOfArray([fill(2, SVector{2, Float64}), ones(SVector{2, Float64})]) ode = ODEProblem(f, u0, (0.0, 1.0)) -sol = solve(ode, Euler(), dt = 1e-2) +sol = solve(ode, Euler(), dt = 1.0e-2) @test !any(iszero.(sol(1.0))) && !any(sol(1.0) .== u0) sol = solve(ode, Tsit5()) @test !any(iszero.(sol(1.0))) && !any(sol(1.0) .== u0) -sol = solve(ode, SSPRK22(), dt = 1e-2) +sol = solve(ode, SSPRK22(), dt = 1.0e-2) @test !any(iszero.(sol(1.0))) && !any(sol(1.0) .== u0) sol = solve(ode, ROCK4()) @test !any(iszero.(sol(1.0))) && !any(sol(1.0) .== u0) u0 = ones(MVector{2, Float64}) ode = ODEProblem(g0, u0, (0.0, 1.0)) -sol = solve(ode, Euler(), dt = 1e-2) +sol = solve(ode, Euler(), dt = 1.0e-2) @test !any(iszero.(sol(1.0))) && !any(sol(1.0) .== u0) -sol = solve(ode, Tsit5(), dt = 1e-2) +sol = solve(ode, Tsit5(), dt = 1.0e-2) @test !any(iszero.(sol(1.0))) && !any(sol(1.0) .== u0) u0 = ones(SVector{2, Float64}) f = (u, p, t) -> u ode = ODEProblem(f, u0, (0.0, 1.0)) -sol = solve(ode, Euler(), dt = 1e-2) +sol = solve(ode, Euler(), dt = 1.0e-2) @test !any(iszero.(sol(1.0))) && !any(sol(1.0) .== u0) sol = solve(ode, ImplicitEuler()) @test !any(iszero.(sol(1.0))) && !any(sol(1.0) .== u0) sol = solve(ode, ImplicitEuler(nlsolve = OrdinaryDiffEqNonlinearSolve.NLAnderson())) @test !any(iszero.(sol(1.0))) && !any(sol(1.0) .== u0) -sol = solve(ode, Tsit5(), dt = 1e-2) +sol = solve(ode, Tsit5(), dt = 1.0e-2) @test !any(iszero.(sol(1.0))) && !any(sol(1.0) .== u0) #https://github.com/JuliaDiffEq/DifferentialEquations.jl/issues/373 @@ -52,7 +52,7 @@ function lorenz_static(u, p, t) dx = 10.0 * (u[2] - u[1]) dy = u[1] * (28.0 - u[3]) - u[2] dz = u[1] * u[2] - (8 / 3) * u[3] - @SVector [dx, dy, dz] + return @SVector [dx, dy, dz] end u0 = @SVector [1.0, 0.0, 0.0] @@ -68,7 +68,7 @@ function lorenz_static(u::ArrayPartition, p, t) dz = u[1] * u[2] - (8 / 3) * u[3] du1 = @SVector [dx, dy] du2 = @SVector [dz] - ArrayPartition(du1, du2) + return ArrayPartition(du1, du2) end u01 = @SVector [1.0, 0.0] @@ -76,13 +76,13 @@ u02 = @SVector [0.0] u0ap = ArrayPartition(u01, u02) probap = ODEProblem(lorenz_static, u0ap, tspan) -sol = solve(prob, dt = 1e-2, Heun()) -solap = solve(probap, dt = 1e-2, Heun()) -@test sol(30)≈solap(30) atol=1e-12 +sol = solve(prob, dt = 1.0e-2, Heun()) +solap = solve(probap, dt = 1.0e-2, Heun()) +@test sol(30) ≈ solap(30) atol = 1.0e-12 -sol = solve(prob, dt = 1e-2, Tsit5()) -solap = solve(probap, dt = 1e-2, Tsit5()) -@test sol(30)≈solap(30) atol=1e-5 +sol = solve(prob, dt = 1.0e-2, Tsit5()) +solap = solve(probap, dt = 1.0e-2, Tsit5()) +@test sol(30) ≈ solap(30) atol = 1.0e-5 function rober(u, p, t) y₁, y₂, y₃ = u @@ -90,14 +90,16 @@ function rober(u, p, t) dy₁ = -k₁ * y₁ + k₃ * y₂ * y₃ dy₂ = k₁ * y₁ - k₂ * y₂^2 - k₃ * y₂ * y₃ dy₃ = k₂ * y₂^2 - SA[dy₁, dy₂, dy₃] + return SA[dy₁, dy₂, dy₃] end -prob = ODEProblem{false}(rober, SA[1.0, 0.0, 0.0], (0.0, 1e5), SA[0.04, 3e7, 1e4]) +prob = ODEProblem{false}(rober, SA[1.0, 0.0, 0.0], (0.0, 1.0e5), SA[0.04, 3.0e7, 1.0e4]) # Defaults to reltol=1e-3, abstol=1e-6 @test_nowarn sol = solve( - prob, Rosenbrock23(autodiff = AutoForwardDiff(chunksize = 3)), save_everystep = false) + prob, Rosenbrock23(autodiff = AutoForwardDiff(chunksize = 3)), save_everystep = false +) @test_nowarn sol = solve( - prob, Rodas4(autodiff = AutoForwardDiff(chunksize = 3)), save_everystep = false) + prob, Rodas4(autodiff = AutoForwardDiff(chunksize = 3)), save_everystep = false +) function hires_4(u, p, t) y1, y2, y3, y4 = u @@ -105,16 +107,18 @@ function hires_4(u, p, t) dy2 = 1.71 * y1 - 8.75 * y2 dy3 = -10.03 * y3 + 0.43 * y4 + 0.035 * y2 dy4 = 8.32 * y2 + 1.71 * y3 - 1.12 * y4 - SA[dy1, dy2, dy3, dy4] + return SA[dy1, dy2, dy3, dy4] end u0 = SA[1, 0, 0, 0.0057] prob = ODEProblem(hires_4, u0, (0.0, 321.8122)) # Defaults to reltol=1e-3, abstol=1e-6 @test_nowarn sol = solve( - prob, Rosenbrock23(autodiff = AutoForwardDiff(chunksize = 4)), save_everystep = false) + prob, Rosenbrock23(autodiff = AutoForwardDiff(chunksize = 4)), save_everystep = false +) @test_nowarn sol = solve( - prob, Rodas5(autodiff = AutoForwardDiff(chunksize = 4)), save_everystep = false) + prob, Rodas5(autodiff = AutoForwardDiff(chunksize = 4)), save_everystep = false +) function hires_5(u, p, t) y1, y2, y3, y4, y5 = u @@ -123,16 +127,18 @@ function hires_5(u, p, t) dy3 = -10.03 * y3 + 0.43 * y4 + 0.035 * y5 dy4 = 8.32 * y2 + 1.71 * y3 - 1.12 * y4 dy5 = -1.745 * y5 + 0.43 * y2 + 0.43 * y4 - SA[dy1, dy2, dy3, dy4, dy5] + return SA[dy1, dy2, dy3, dy4, dy5] end u0 = SA[1, 0, 0, 0, 0.0057] prob = ODEProblem(hires_5, u0, (0.0, 321.8122)) # Defaults to reltol=1e-3, abstol=1e-6 @test_nowarn sol = solve( - prob, Rosenbrock23(autodiff = AutoForwardDiff(chunksize = 5)), save_everystep = false) + prob, Rosenbrock23(autodiff = AutoForwardDiff(chunksize = 5)), save_everystep = false +) @test_nowarn sol = solve( - prob, Rodas4(autodiff = AutoForwardDiff(chunksize = 5)), save_everystep = false) + prob, Rodas4(autodiff = AutoForwardDiff(chunksize = 5)), save_everystep = false +) function hires(u, p, t) y1, y2, y3, y4, y5, y6, y7, y8 = u @@ -142,19 +148,21 @@ function hires(u, p, t) dy4 = 8.32 * y2 + 1.71 * y3 - 1.12 * y4 dy5 = -1.745 * y5 + 0.43 * y6 + 0.43 * y7 dy6 = -280.0 * y6 * y8 + 0.69 * y4 + 1.71 * y5 - - 0.43 * y6 + 0.69 * y7 + 0.43 * y6 + 0.69 * y7 dy7 = 280.0 * y6 * y8 - 1.81 * y7 dy8 = -280.0 * y6 * y8 + 1.81 * y7 - SA[dy1, dy2, dy3, dy4, dy5, dy6, dy7, dy8] + return SA[dy1, dy2, dy3, dy4, dy5, dy6, dy7, dy8] end u0 = SA[1, 0, 0, 0, 0, 0, 0, 0.0057] prob = ODEProblem(hires, u0, (0.0, 321.8122)) # Defaults to reltol=1e-3, abstol=1e-6 @test_nowarn sol = solve( - prob, Rosenbrock23(autodiff = AutoForwardDiff(chunksize = 8)), save_everystep = false) + prob, Rosenbrock23(autodiff = AutoForwardDiff(chunksize = 8)), save_everystep = false +) @test_nowarn sol = solve( - prob, Rodas5(autodiff = AutoForwardDiff(chunksize = 8)), save_everystep = false) + prob, Rodas5(autodiff = AutoForwardDiff(chunksize = 8)), save_everystep = false +) const k1 = 0.35e0 const k2 = 0.266e2 @@ -210,7 +218,7 @@ function pollu(y, p, t) r25 = k25 * y[20] dy1 = -r1 - r10 - r14 - r23 - r24 + - r2 + r3 + r9 + r11 + r12 + r22 + r25 + r2 + r3 + r9 + r11 + r12 + r22 + r25 dy2 = -r2 - r3 - r9 - r12 + r1 + r21 dy3 = -r15 + r1 + r17 + r19 + r22 dy4 = -r2 - r16 - r17 - r23 + r15 @@ -230,8 +238,10 @@ function pollu(y, p, t) dy18 = r20 dy19 = -r21 - r22 - r24 + r23 + r25 dy20 = -r25 + r24 - SA[dy1, dy2, dy3, dy4, dy5, dy6, dy7, dy8, dy9, dy10, dy11, dy12, dy13, dy14, dy15, - dy16, dy17, dy18, dy19, dy20] + return SA[ + dy1, dy2, dy3, dy4, dy5, dy6, dy7, dy8, dy9, dy10, dy11, dy12, dy13, dy14, dy15, + dy16, dy17, dy18, dy19, dy20, + ] end u0 = zeros(20) @@ -244,13 +254,16 @@ u0[17] = 0.007 u0 = SA[u0...] prob = ODEProblem(pollu, u0, (0.0, 60.0)) @test_nowarn sol = solve( - prob, Rosenbrock23(autodiff = AutoForwardDiff(chunksize = 8)), save_everystep = false) + prob, Rosenbrock23(autodiff = AutoForwardDiff(chunksize = 8)), save_everystep = false +) @test_nowarn sol = solve( - prob, Rodas5(autodiff = AutoForwardDiff(chunksize = 8)), save_everystep = false) + prob, Rodas5(autodiff = AutoForwardDiff(chunksize = 8)), save_everystep = false +) # DFBDF g1(du, u, p, t) = du .^ 2 - conj.(u) -u0 = SA[-0.5048235596641171 - 0.8807809019469485im, +u0 = SA[ + -0.5048235596641171 - 0.8807809019469485im, -0.5086319184891589 - 0.8791877406854778im, -0.5015635095728721 + 0.8770989403497113im, -0.5031603140023296 - 0.8808350427797037im, @@ -259,8 +272,10 @@ u0 = SA[-0.5048235596641171 - 0.8807809019469485im, -0.4934794086951181 - 0.8648817236591336im, -0.5076312332711304 + 0.8736927915035966im, -0.4972563077522698 + 0.867122302026744im, - -0.507021559962068 + 0.8853510586397142im] -du0 = SA[-0.5051593302918506 - 0.87178524227302im, + -0.507021559962068 + 0.8853510586397142im, +] +du0 = SA[ + -0.5051593302918506 - 0.87178524227302im, -0.5035292188986685 - 0.8730255395885403im, -0.5043891667056177 + 0.8694664691998534im, -0.505596728341443 - 0.871084591593664im, @@ -269,13 +284,14 @@ du0 = SA[-0.5051593302918506 - 0.87178524227302im, -0.5011400789526957 - 0.8629141251757512im, -0.5014121747348508 + 0.8712321173163112im, -0.5011616766671037 + 0.8651123244481334im, - -0.5065728050401669 + 0.8738635859036186im] + -0.5065728050401669 + 0.8738635859036186im, +] prob = DAEProblem(g1, du0, u0, (0.0, 10.0)) -sol1 = solve(prob, DFBDF(autodiff = AutoFiniteDiff()), reltol = 1e-8, abstol = 1e-8) +sol1 = solve(prob, DFBDF(autodiff = AutoFiniteDiff()), reltol = 1.0e-8, abstol = 1.0e-8) g2(resid, du, u, p, t) = resid .= du .^ 2 - conj.(u) prob = DAEProblem(g2, Array(du0), Array(u0), (0.0, 10.0)) -sol2 = solve(prob, DFBDF(autodiff = AutoFiniteDiff()), reltol = 1e-8, abstol = 1e-8) +sol2 = solve(prob, DFBDF(autodiff = AutoFiniteDiff()), reltol = 1.0e-8, abstol = 1.0e-8) @test all(iszero, sol1[:, 1] - sol2[:, 1]) @test all(abs.(sol1[:, end] .- sol2[:, end]) .< 1.5e-6) diff --git a/test/interface/stats_tests.jl b/test/interface/stats_tests.jl index 90b672d8bc..ae78422e35 100644 --- a/test/interface/stats_tests.jl +++ b/test/interface/stats_tests.jl @@ -7,7 +7,7 @@ function f(u, p, t) end function g(du, u, p, t) x[] += 1 - @. du = 5 * u + return @. du = 5 * u end u0 = [1.0, 1.0] @@ -24,9 +24,9 @@ probip = ODEProblem(g, u0, tspan) end @testset "$alg" for alg in [Rodas5P, KenCarp4] @testset "$kwargs" for kwargs in [(autodiff = AutoForwardDiff(),)] - #(autodiff = AutoFiniteDiff(fdtype = Val{:forward}()),), - #(autodiff = AutoFiniteDiff(fdtype = Val{:central}()),), - #(autodiff = AutoFiniteDiff(fdtype = Val{:complex}()),)] + #(autodiff = AutoFiniteDiff(fdtype = Val{:forward}()),), + #(autodiff = AutoFiniteDiff(fdtype = Val{:central}()),), + #(autodiff = AutoFiniteDiff(fdtype = Val{:complex}()),)] x[] = 0 sol = solve(prob, alg(; kwargs...)) @test x[] == sol.stats.nf diff --git a/test/interface/stiffness_detection_test.jl b/test/interface/stiffness_detection_test.jl index d3bbd4e96c..33567679d8 100644 --- a/test/interface/stiffness_detection_test.jl +++ b/test/interface/stiffness_detection_test.jl @@ -10,7 +10,7 @@ function __van(du, u, p, t) x, y = u[1], u[2] μ = p[1] du[1] = y # dx/dt = y - du[2] = μ * ((1 - x^2) * y - x) # dy/dt = μ * ((1 - x^2) * y - x) + return du[2] = μ * ((1 - x^2) * y - x) # dy/dt = μ * ((1 - x^2) * y - x) end prob1 = ODEProblem(__van, [2.0, 0.0], (0.0, 6), [inv(0.003)]) prob2 = ODEProblem(__van, [2.0, 0.0], (0.0, 6), [inv(0.003)]) @@ -18,8 +18,10 @@ prob2 = ODEProblem(__van, [2.0, 0.0], (0.0, 6), [inv(0.003)]) function _van(u, p, t) x, y = u[1], u[2] μ = p[1] - [y, # dx/dt = y - μ * ((1 - x^2) * y - x)] # dy/dt = μ * ((1 - x^2) * y - x) + return [ + y, # dx/dt = y + μ * ((1 - x^2) * y - x), + ] # dy/dt = μ * ((1 - x^2) * y - x) end prob3 = ODEProblem(_van, [2.0, 0.0], (0.0, 6), [inv(0.003)]) probArr = [prob1, prob2, prob3] @@ -33,8 +35,10 @@ end is_switching_fb(sol) = all(i -> count(isequal(i), sol.alg_choice[2:end]) > 5, (1, 2)) for (i, prob) in enumerate(probArr) println(i) - sol = solve(prob, AutoTsit5(Rosenbrock23(autodiff = AutoFiniteDiff())), - maxiters = 1000) + sol = solve( + prob, AutoTsit5(Rosenbrock23(autodiff = AutoFiniteDiff())), + maxiters = 1000 + ) @test is_switching_fb(sol) alg = AutoTsit5(Rodas5(); maxstiffstep = 5, maxnonstiffstep = 5, stiffalgfirst = true) sol = solve(prob, alg, maxiters = 1000) @@ -44,37 +48,53 @@ for (i, prob) in enumerate(probArr) @test SciMLBase.successful_retcode(sol) @test alg.algs[sol.alg_choice[1]] isa Rodas5 i == 1 || @test is_switching_fb(sol) # fails due to eigenvalue estimate of J - sol = solve(prob, - AutoDP5(Rodas5(); maxstiffstep = 2, maxnonstiffstep = 2, - stifftol = 11 // 10, nonstifftol = 9 / 10), - reltol = 1e-5, abstol = 1e-5, maxiters = 1000) + sol = solve( + prob, + AutoDP5( + Rodas5(); maxstiffstep = 2, maxnonstiffstep = 2, + stifftol = 11 // 10, nonstifftol = 9 / 10 + ), + reltol = 1.0e-5, abstol = 1.0e-5, maxiters = 1000 + ) @test length(sol.t) < 625 @test SciMLBase.successful_retcode(sol) @test is_switching_fb(sol) - sol = solve(prob, AutoVern6(Kvaerno3(); maxstiffstep = 4, maxnonstiffstep = 2), - maxiters = 1000) + sol = solve( + prob, AutoVern6(Kvaerno3(); maxstiffstep = 4, maxnonstiffstep = 2), + maxiters = 1000 + ) @test length(sol.t) < 700 @test SciMLBase.successful_retcode(sol) @test is_switching_fb(sol) - sol = solve(prob, AutoVern7(Hairer42(); maxstiffstep = 4, maxnonstiffstep = 2), - maxiters = 1000) + sol = solve( + prob, AutoVern7(Hairer42(); maxstiffstep = 4, maxnonstiffstep = 2), + maxiters = 1000 + ) @test length(sol.t) < 610 @test_skip SciMLBase.successful_retcode(sol) @test is_switching_fb(sol) - sol = solve(prob, AutoVern8(Rosenbrock23(); maxstiffstep = 4, maxnonstiffstep = 4), - maxiters = 1000) + sol = solve( + prob, AutoVern8(Rosenbrock23(); maxstiffstep = 4, maxnonstiffstep = 4), + maxiters = 1000 + ) @test length(sol.t) < 910 @test SciMLBase.successful_retcode(sol) @test is_switching_fb(sol) - sol = solve(prob, AutoVern9(KenCarp3(); maxstiffstep = 4, maxnonstiffstep = 1), - maxiters = 1000) + sol = solve( + prob, AutoVern9(KenCarp3(); maxstiffstep = 4, maxnonstiffstep = 1), + maxiters = 1000 + ) @test length(sol.t) < 570 @test SciMLBase.successful_retcode(sol) @test is_switching_fb(sol) - sol = solve(prob, - AutoVern9(KenCarp3(autodiff = AutoFiniteDiff()); maxstiffstep = 4, - maxnonstiffstep = 1), maxiters = 1000) + sol = solve( + prob, + AutoVern9( + KenCarp3(autodiff = AutoFiniteDiff()); maxstiffstep = 4, + maxnonstiffstep = 1 + ), maxiters = 1000 + ) @test length(sol.t) < 570 @test SciMLBase.successful_retcode(sol) @test is_switching_fb(sol) diff --git a/test/interface/type_handling.jl b/test/interface/type_handling.jl index 672761f8b8..4954aa1e38 100644 --- a/test/interface/type_handling.jl +++ b/test/interface/type_handling.jl @@ -16,7 +16,7 @@ v02 = ones(2) function f_ap(du, u, p, t) du.x[1] .= -2u.x[2] - du.x[2] .= u.x[1] + return du.x[2] .= u.x[1] end u = ArrayPartition((u02, v02)) diff --git a/test/interface/umodified_test.jl b/test/interface/umodified_test.jl index 6e3e7c1f90..f6d6b05680 100644 --- a/test/interface/umodified_test.jl +++ b/test/interface/umodified_test.jl @@ -2,7 +2,7 @@ using OrdinaryDiffEq, Test, LinearAlgebra T = 1000.0; Ttr = 0.0; -d0 = 1e-9; +d0 = 1.0e-9; threshold = 10^4 * d0; dt = 0.1; diff_eq_kwargs = Dict(); diff --git a/test/interface/units_tests.jl b/test/interface/units_tests.jl index cad23ebc91..ca2f2b3400 100644 --- a/test/interface/units_tests.jl +++ b/test/interface/units_tests.jl @@ -5,7 +5,8 @@ using LinearAlgebra, Test, ADTypes algs = [ Euler(), Midpoint(), Heun(), Ralston(), RK4(), SSPRK104(), SSPRK22(), SSPRK33(), SSPRK43(), SSPRK432(), BS3(), BS5(), DP5(), DP8(), Feagin10(), Feagin12(), - Feagin14(), TanYam7(), Tsit5(), TsitPap8(), Vern6(), Vern7(), Vern8(), Vern9()] + Feagin14(), TanYam7(), Tsit5(), TsitPap8(), Vern6(), Vern7(), Vern8(), Vern9(), + ] @testset "Scalar units" begin f(y, p, t) = 0.5 * y / 3.0u"s" @@ -22,8 +23,10 @@ using LinearAlgebra, Test, ADTypes @testset "2D units" begin f(dy, y, p, t) = (dy .= 0.5 .* y ./ 3.0u"s") - u0 = [1.0u"N" 2.0u"N" - 3.0u"N" 1.0u"N"] + u0 = [ + 1.0u"N" 2.0u"N" + 3.0u"N" 1.0u"N" + ] prob = ODEProblem(f, u0, (0.0u"s", 1.0u"s")) for alg in algs @@ -37,7 +40,7 @@ end @testset "Mixed units" begin @testset "With ArrayPartition" begin - r0 = [1131.340, -2282.343, 6672.423]u"km" + r0 = [1131.34, -2282.343, 6672.423]u"km" v0 = [-5.64305, 4.30333, 2.42879]u"km/s" Δt = 86400.0 * 365u"s" μ = 398600.4418u"km^3/s^2" @@ -55,10 +58,12 @@ end sol = solve(prob, alg) end - for alg in [AutoVern6(Rodas5(autodiff = AutoFiniteDiff())), - AutoVern7(Rodas5(autodiff = AutoFiniteDiff())), - AutoVern8(Rodas5(autodiff = AutoFiniteDiff())), - AutoVern9(Rodas5(autodiff = AutoFiniteDiff()))] + for alg in [ + AutoVern6(Rodas5(autodiff = AutoFiniteDiff())), + AutoVern7(Rodas5(autodiff = AutoFiniteDiff())), + AutoVern8(Rodas5(autodiff = AutoFiniteDiff())), + AutoVern9(Rodas5(autodiff = AutoFiniteDiff())), + ] @show alg @test_broken sol = solve(prob, alg) end diff --git a/test/interface/utility_tests.jl b/test/interface/utility_tests.jl index 68acef6162..49ca2f1166 100644 --- a/test/interface/utility_tests.jl +++ b/test/interface/utility_tests.jl @@ -13,23 +13,33 @@ using OrdinaryDiffEq.OrdinaryDiffEqDifferentiation: WOperator, calc_W, calc_W!, concrete_W = A - inv(dtgamma) * mm # Out-of-place - fun = ODEFunction((u, p, t) -> A * u; + fun = ODEFunction( + (u, p, t) -> A * u; mass_matrix = mm, - jac = (u, p, t) -> A) - integrator = init(ODEProblem(fun, u0, tspan), ImplicitEuler(); adaptive = false, - dt = dt) + jac = (u, p, t) -> A + ) + integrator = init( + ODEProblem(fun, u0, tspan), ImplicitEuler(); adaptive = false, + dt = dt + ) W = calc_W(integrator, integrator.cache.nlsolver, dtgamma, false) @test convert(AbstractMatrix, W) == concrete_W @test W \ u0 ≈ concrete_W \ u0 # In-place - fun = ODEFunction((du, u, p, t) -> mul!(du, A, u); + fun = ODEFunction( + (du, u, p, t) -> mul!(du, A, u); mass_matrix = mm, - jac_prototype = MatrixOperator(A)) - integrator = init(ODEProblem(fun, u0, tspan), ImplicitEuler(); adaptive = false, - dt = dt) - calc_W!(integrator.cache.nlsolver.cache.W, integrator, integrator.cache.nlsolver, - integrator.cache, dtgamma, false) + jac_prototype = MatrixOperator(A) + ) + integrator = init( + ODEProblem(fun, u0, tspan), ImplicitEuler(); adaptive = false, + dt = dt + ) + calc_W!( + integrator.cache.nlsolver.cache.W, integrator, integrator.cache.nlsolver, + integrator.cache, dtgamma, false + ) # Did not update because it's an array operator # We don't want to build Jacobians when we have operators! @@ -38,8 +48,10 @@ using OrdinaryDiffEq.OrdinaryDiffEqDifferentiation: WOperator, calc_W, calc_W!, @test tmp != concrete_W \ u0 # But jacobian2W! will update the cache - jacobian2W!(integrator.cache.nlsolver.cache.W._concrete_form, mm, - dtgamma, integrator.cache.nlsolver.cache.W.J.A) + jacobian2W!( + integrator.cache.nlsolver.cache.W._concrete_form, mm, + dtgamma, integrator.cache.nlsolver.cache.W.J.A + ) @test convert(AbstractMatrix, integrator.cache.nlsolver.cache.W) == concrete_W ldiv!(tmp, lu!(integrator.cache.nlsolver.cache.W), u0) @test tmp == concrete_W \ u0 @@ -56,18 +68,22 @@ end fun1 = ODEFunction(_f; mass_matrix = mm) fun2 = ODEFunction(_f; mass_matrix = mm, jac = (u, p, t) -> t * A) fun1_ip = ODEFunction(_f_ip; mass_matrix = mm) - fun2_ip = ODEFunction(_f_ip; mass_matrix = mm, - jac_prototype = MatrixOperator(similar(A); - update_func! = (J, u, p, t) -> J .= t .* A)) + fun2_ip = ODEFunction( + _f_ip; mass_matrix = mm, + jac_prototype = MatrixOperator( + similar(A); + update_func! = (J, u, p, t) -> J .= t .* A + ) + ) for Alg in [ImplicitEuler, Rosenbrock23, Rodas5] println(Alg) sol1 = solve(ODEProblem(fun1, u0, tspan), Alg(); adaptive = false, dt = 0.01) sol2 = solve(ODEProblem(fun2, u0, tspan), Alg(); adaptive = false, dt = 0.01) - @test sol1(1.0)≈sol2(1.0) atol=1e-3 + @test sol1(1.0) ≈ sol2(1.0) atol = 1.0e-3 sol1_ip = solve(ODEProblem(fun1_ip, u0, tspan), Alg(); adaptive = false, dt = 0.01) sol2_ip = solve(ODEProblem(fun2_ip, u0, tspan), Alg(); adaptive = false, dt = 0.01) - @test sol1_ip(1.0)≈sol2_ip(1.0) atol=2e-5 + @test sol1_ip(1.0) ≈ sol2_ip(1.0) atol = 2.0e-5 end end diff --git a/test/interface/wprototype_tests.jl b/test/interface/wprototype_tests.jl index f082dd652f..10b9bdcaf8 100644 --- a/test/interface/wprototype_tests.jl +++ b/test/interface/wprototype_tests.jl @@ -8,17 +8,23 @@ using Test for prob in (prob_ode_vanderpol_stiff,) # Ensure all solutions use the same linear solve for fair comparison. # TODO: in future, ensure and test that polyalg chooses the best linear solve when unspecified. - for alg in (Rosenbrock23(linsolve = KrylovJL_GMRES()), - FBDF(linsolve = KrylovJL_GMRES())) - # Manually construct a custom W operator using the Jacobian + for alg in ( + Rosenbrock23(linsolve = KrylovJL_GMRES()), + FBDF(linsolve = KrylovJL_GMRES()), + ) + # Manually construct a custom W operator using the Jacobian N = length(prob.u0) J_op = MatrixOperator(zeros(N, N); update_func! = prob.f.jac) - gamma_op = ScalarOperator(0.0; + gamma_op = ScalarOperator( + 0.0; update_func = (old_val, u, p, t; dtgamma) -> dtgamma, - accepted_kwargs = Val((:dtgamma,))) - transform_op = ScalarOperator(0.0; + accepted_kwargs = Val((:dtgamma,)) + ) + transform_op = ScalarOperator( + 0.0; update_func = (old_op, u, p, t; dtgamma) -> inv(dtgamma), - accepted_kwargs = Val((:dtgamma,))) + accepted_kwargs = Val((:dtgamma,)) + ) W_op = -(I - gamma_op * J_op) * transform_op # Make problem with custom MatrixOperator jac_prototype @@ -29,7 +35,7 @@ for prob in (prob_ode_vanderpol_stiff,) integrator = init(prob_J, Rosenbrock23()) @test integrator.cache.J isa typeof(J_op) - # Make problem with custom SciMLOperator W_prototype + # Make problem with custom SciMLOperator W_prototype f_W = ODEFunction(prob.f.f; jac_prototype = J_op, W_prototype = W_op) prob_W = remake(prob; f = f_W) @@ -48,8 +54,8 @@ for prob in (prob_ode_vanderpol_stiff,) sol_J = solve(prob_J, alg) # note: direct linsolve in this case is broken, see #1998 sol_W = solve(prob_W, alg) - rtol = 1e-2 - + rtol = 1.0e-2 + @test prob_J.f.sparsity.A == prob_W.f.sparsity.A @test all(isapprox.(sol_J.t, sol_W.t; rtol)) diff --git a/test/modelingtoolkit/dae_initialize_integration.jl b/test/modelingtoolkit/dae_initialize_integration.jl index f9500be362..9dee21f609 100644 --- a/test/modelingtoolkit/dae_initialize_integration.jl +++ b/test/modelingtoolkit/dae_initialize_integration.jl @@ -5,13 +5,15 @@ using ModelingToolkit: D_nounits as D, t_nounits as t @variables v(t) w(t) F(t) single_neuron_eqs = [ D(v) ~ min(max(-2 - v, v), 2 - v) - w + F, # add the flux term - D(w) ~ e * (v - g * w + b) + D(w) ~ e * (v - g * w + b), ] n1 = System(single_neuron_eqs, t, [v, w, F], [g, e, b], name = :n1) n2 = System(single_neuron_eqs, t, [v, w, F], [g, e, b], name = :n2) @parameters Di Dk -connections = [0 ~ n1.F - Di * Dk * max(n1.v - n2.v, 0) - 0 ~ n2.F - Di * max(n2.v - n1.v, 0)] +connections = [ + 0 ~ n1.F - Di * Dk * max(n1.v - n2.v, 0) + 0 ~ n2.F - Di * max(n2.v - n1.v, 0) +] connected = System(connections, t, [], [Di, Dk], systems = [n1, n2], name = :connected) connected = complete(connected) @@ -21,7 +23,7 @@ u0 = [ n1.F => 0, n2.v => -2, n2.w => -0.7, - n2.F => 0 + n2.F => 0, ] tspan = (0.0, 1750.0) p0 = [ @@ -32,7 +34,7 @@ p0 = [ n2.e => 0.04, n2.b => 0.2, Di => 0.047, - Dk => 1 + Dk => 1, ] prob = ODEProblem(connected, [u0; p0], tspan) @@ -42,17 +44,17 @@ sol = solve(prob, Rodas5(), initializealg = ShampineCollocationInit()) @test prob.u0 == sol[1] #test initialization when given a specific nonlinear solver using NonlinearSolve -sol = solve(prob, Rodas5(), initializealg = BrownFullBasicInit(1e-10, RobustMultiNewton())) +sol = solve(prob, Rodas5(), initializealg = BrownFullBasicInit(1.0e-10, RobustMultiNewton())) @test prob.u0 == sol[1] # Initialize on ODEs # https://github.com/SciML/ModelingToolkit.jl/issues/2508 function testsys(du, u, p, t) - du[1] = -2 + return du[1] = -2 end function initsys(du, u, p) - du[1] = -1 + u[1] + return du[1] = -1 + u[1] end nlprob = NonlinearProblem(initsys, [0.0]) initprobmap(nlprob) = nlprob.u @@ -65,13 +67,13 @@ sol = solve(prob, Tsit5()) @test sol.u[1] == [1.0] prob = ODEProblem(_f, [0.0], (0.0, 1.0)) -sol = solve(prob, Tsit5(), dt = 1e-10) +sol = solve(prob, Tsit5(), dt = 1.0e-10) @test SciMLBase.successful_retcode(sol) @test sol.u[1] == [1.0] @test sol.u[2] ≈ [0.9999999998] @test sol.u[end] ≈ [-1.0] -sol = solve(prob, Rodas5P(), dt = 1e-10) +sol = solve(prob, Rodas5P(), dt = 1.0e-10) @test SciMLBase.successful_retcode(sol) @test sol.u[1] == [1.0] @test sol.u[2] ≈ [0.9999999998] diff --git a/test/modelingtoolkit/jacobian_tests.jl b/test/modelingtoolkit/jacobian_tests.jl index eb73c8a5f4..c9827fc665 100644 --- a/test/modelingtoolkit/jacobian_tests.jl +++ b/test/modelingtoolkit/jacobian_tests.jl @@ -1,57 +1,60 @@ using OrdinaryDiffEq, ForwardDiff, Test, ADTypes function d_alembert(du, u, p, t) - du[1] = p[1] - p[2] * u[1] + p[3] * t + return du[1] = p[1] - p[2] * u[1] + p[3] * t end function d_alembert_jac(J, u, p, t) - J[1] = -p[2] + return J[1] = -p[2] end function d_alembert_analytic(u0, p, t::Number) a, b, c = p ebt = exp(b * t) - @. exp(-b * t) * (-a * b + c + ebt * (a * b + c * (b * t - 1)) + b^2 * u0) / (b^2) + return @. exp(-b * t) * (-a * b + c + ebt * (a * b + c * (b * t - 1)) + b^2 * u0) / (b^2) end p = (1.0, 2.0, 3.0) u0 = [1.0] tspan = (0.0, 10.0) prob = ODEProblem( - ODEFunction(d_alembert, + ODEFunction( + d_alembert, jac = d_alembert_jac, - analytic = d_alembert_analytic), - u0, tspan, p) + analytic = d_alembert_analytic + ), + u0, tspan, p +) -sol = solve(prob, Tsit5(), abstol = 1e-10, reltol = 1e-10) -@test sol.errors[:l2] < 1e-7 -sol = solve(prob, Rosenbrock23(), abstol = 1e-8, reltol = 1e-8) -@test sol.errors[:l2] < 1e-7 -sol = solve(prob, Rodas4(), abstol = 1e-10, reltol = 1e-10) -@test sol.errors[:l2] < 1e-7 -sol = solve(prob, Veldd4(), abstol = 1e-10, reltol = 1e-10) -@test sol.errors[:l2] < 1e-7 -sol = solve(prob, Rodas5(), abstol = 1e-10, reltol = 1e-10) -@test sol.errors[:l2] < 1e-7 -sol = solve(prob, TRBDF2(), abstol = 1e-10, reltol = 1e-10) -@test sol.errors[:l2] < 2e-6 -sol = solve(prob, Trapezoid(), abstol = 1e-10, reltol = 1e-10) -@test sol.errors[:l2] < 2e-6 -sol = solve(prob, KenCarp3(), abstol = 1e-10, reltol = 1e-10) -@test sol.errors[:l2] < 8e-4 -sol = solve(prob, KenCarp4(), abstol = 1e-10, reltol = 1e-10) -@test sol.errors[:l2] < 1e-7 -sol = solve(prob, KenCarp47(), abstol = 1e-10, reltol = 1e-10) -@test sol.errors[:l2] < 1e-7 -sol = solve(prob, KenCarp58(), abstol = 1e-10, reltol = 1e-10) -@test sol.errors[:l2] < 1e-7 +sol = solve(prob, Tsit5(), abstol = 1.0e-10, reltol = 1.0e-10) +@test sol.errors[:l2] < 1.0e-7 +sol = solve(prob, Rosenbrock23(), abstol = 1.0e-8, reltol = 1.0e-8) +@test sol.errors[:l2] < 1.0e-7 +sol = solve(prob, Rodas4(), abstol = 1.0e-10, reltol = 1.0e-10) +@test sol.errors[:l2] < 1.0e-7 +sol = solve(prob, Veldd4(), abstol = 1.0e-10, reltol = 1.0e-10) +@test sol.errors[:l2] < 1.0e-7 +sol = solve(prob, Rodas5(), abstol = 1.0e-10, reltol = 1.0e-10) +@test sol.errors[:l2] < 1.0e-7 +sol = solve(prob, TRBDF2(), abstol = 1.0e-10, reltol = 1.0e-10) +@test sol.errors[:l2] < 2.0e-6 +sol = solve(prob, Trapezoid(), abstol = 1.0e-10, reltol = 1.0e-10) +@test sol.errors[:l2] < 2.0e-6 +sol = solve(prob, KenCarp3(), abstol = 1.0e-10, reltol = 1.0e-10) +@test sol.errors[:l2] < 8.0e-4 +sol = solve(prob, KenCarp4(), abstol = 1.0e-10, reltol = 1.0e-10) +@test sol.errors[:l2] < 1.0e-7 +sol = solve(prob, KenCarp47(), abstol = 1.0e-10, reltol = 1.0e-10) +@test sol.errors[:l2] < 1.0e-7 +sol = solve(prob, KenCarp58(), abstol = 1.0e-10, reltol = 1.0e-10) +@test sol.errors[:l2] < 1.0e-7 using ModelingToolkit function lotka(du, u, p, t) x = u[1] y = u[2] du[1] = p[1] * x - p[2] * x * y - du[2] = -p[3] * y + p[4] * x * y + return du[2] = -p[3] * y + p[4] * x * y end prob = ODEProblem(lotka, [1.0, 1.0], (0.0, 1.0), [1.5, 1.0, 3.0, 1.0]) @@ -61,13 +64,21 @@ prob2 = ODEProblem(de, [], prob.tspan; jac = true) sol = solve(prob, TRBDF2()) for Alg in [Rodas5, Rosenbrock23, TRBDF2, KenCarp4] - @test Array(solve(prob2, - Alg(), - tstops = sol.t, - adaptive = false))≈Array(solve(prob, - Alg(), - tstops = sol.t, - adaptive = false)) atol=1e-4 + @test Array( + solve( + prob2, + Alg(), + tstops = sol.t, + adaptive = false + ) + ) ≈ Array( + solve( + prob, + Alg(), + tstops = sol.t, + adaptive = false + ) + ) atol = 1.0e-4 end ## check chunk_size handling in ForwardDiff Jacobians @@ -83,11 +94,11 @@ function rober(du, u, p, t) du[1] = -k₁ * y₁ + k₃ * y₂ * y₃ du[2] = k₁ * y₁ - k₂ * y₂^2 - k₃ * y₂ * y₃ du[3] = k₂ * y₂^2 - nothing + return nothing end -prob1 = ODEProblem(rober, [1.0, 0.0, 0.0], (0.0, 1e5), (0.04, 3e7, 1e4, true)) +prob1 = ODEProblem(rober, [1.0, 0.0, 0.0], (0.0, 1.0e5), (0.04, 3.0e7, 1.0e4, true)) sol1 = solve(prob1, TRBDF2(autodiff = AutoForwardDiff(chunksize = chunksize))) -prob = ODEProblem(rober, [1.0, 0.0, 0.0], (0.0, 1e5), (0.04, 3e7, 1e4, false)) +prob = ODEProblem(rober, [1.0, 0.0, 0.0], (0.0, 1.0e5), (0.04, 3.0e7, 1.0e4, false)) sol = solve(prob, TRBDF2()) @test sol.u[end] == sol1.u[end] @test length(sol.t) == length(sol1.t) diff --git a/test/modelingtoolkit/nlstep_tests.jl b/test/modelingtoolkit/nlstep_tests.jl index 1c39e14ab0..4f1296f217 100644 --- a/test/modelingtoolkit/nlstep_tests.jl +++ b/test/modelingtoolkit/nlstep_tests.jl @@ -7,98 +7,102 @@ using Test @parameters k₁ k₂ k₃ @variables y₁(t) y₂(t) y₃(t) -eqs = [D(y₁) ~ -k₁ * y₁ + k₃ * y₂ * y₃, +eqs = [ + D(y₁) ~ -k₁ * y₁ + k₃ * y₂ * y₃, D(y₂) ~ k₁ * y₁ - k₂ * y₂^2 - k₃ * y₂ * y₃, - D(y₃) ~ k₂ * y₂^2] + D(y₃) ~ k₂ * y₂^2, +] @mtkcompile rober = ODESystem(eqs, t) -prob = ODEProblem(rober, [[y₁, y₂, y₃] .=> [1.0; 0.0; 0.0]; [k₁, k₂, k₃] .=> (0.04, 3e7, 1e4)], (0.0, 1e5), jac = true) -prob2 = ODEProblem(rober, [[y₁, y₂, y₃] .=> [1.0; 0.0; 0.0]; [k₁, k₂, k₃] .=> (0.04, 3e7, 1e4)], (0.0, 1e5), jac = true, nlstep = true) +prob = ODEProblem(rober, [[y₁, y₂, y₃] .=> [1.0; 0.0; 0.0]; [k₁, k₂, k₃] .=> (0.04, 3.0e7, 1.0e4)], (0.0, 1.0e5), jac = true) +prob2 = ODEProblem(rober, [[y₁, y₂, y₃] .=> [1.0; 0.0; 0.0]; [k₁, k₂, k₃] .=> (0.04, 3.0e7, 1.0e4)], (0.0, 1.0e5), jac = true, nlstep = true) @test prob2.f.nlstep_data !== nothing nlalg = NonlinearSolveAlg(NewtonRaphson(autodiff = AutoFiniteDiff())); nlalgrobust = NonlinearSolveAlg(TrustRegion(autodiff = AutoFiniteDiff())); -sol1 = solve(prob, FBDF(autodiff=AutoFiniteDiff(), nlsolve = nlalg)); -sol2 = solve(prob2, FBDF(autodiff=AutoFiniteDiff(), nlsolve = nlalg)); +sol1 = solve(prob, FBDF(autodiff = AutoFiniteDiff(), nlsolve = nlalg)); +sol2 = solve(prob2, FBDF(autodiff = AutoFiniteDiff(), nlsolve = nlalg)); @test sol1.t != sol2.t @test sol1 != sol2 -@test sol1(sol1.t) ≈ sol2(sol1.t) atol=1e-3 +@test sol1(sol1.t) ≈ sol2(sol1.t) atol = 1.0e-3 -sol1 = solve(prob, TRBDF2(autodiff=AutoFiniteDiff(), nlsolve = nlalg)); -sol2 = solve(prob2, TRBDF2(autodiff=AutoFiniteDiff(), nlsolve = nlalg)); +sol1 = solve(prob, TRBDF2(autodiff = AutoFiniteDiff(), nlsolve = nlalg)); +sol2 = solve(prob2, TRBDF2(autodiff = AutoFiniteDiff(), nlsolve = nlalg)); @test sol1.t != sol2.t @test sol1.u != sol2.u -@test sol1(sol1.t) ≈ sol2(sol1.t) atol=1e-3 +@test sol1(sol1.t) ≈ sol2(sol1.t) atol = 1.0e-3 -testprob = ODEProblem(rober, [[y₁, y₂, y₃] .=> [1.0; 0.0; 0.0]; [k₁, k₂, k₃] .=> (0.04, 3e7, 1e4)], (0.0, 1.0), nlstep = true) +testprob = ODEProblem(rober, [[y₁, y₂, y₃] .=> [1.0; 0.0; 0.0]; [k₁, k₂, k₃] .=> (0.04, 3.0e7, 1.0e4)], (0.0, 1.0), nlstep = true) @test testprob.f.nlstep_data !== nothing -sol2 = solve(testprob, TRBDF2(autodiff=AutoFiniteDiff(), nlsolve = nlalg), adaptive=false, dt= 2.0^-15); +sol2 = solve(testprob, TRBDF2(autodiff = AutoFiniteDiff(), nlsolve = nlalg), adaptive = false, dt = 2.0^-15); -test_setup = Dict(:alg => FBDF(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => FBDF(), :reltol => 1.0e-14, :abstol => 1.0e-14) dts = 2.0 .^ (-10:-1:-15) -sim = analyticless_test_convergence(dts, testprob, TRBDF2(autodiff=AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); +sim = analyticless_test_convergence(dts, testprob, TRBDF2(autodiff = AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); @test_broken abs(sim.𝒪est[:l∞] - 2) < 0.2 dts = 2.0 .^ (-10:-1:-12) -sim = analyticless_test_convergence(dts, testprob, KenCarp4(autodiff=AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); +sim = analyticless_test_convergence(dts, testprob, KenCarp4(autodiff = AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); @test_broken abs(sim.𝒪est[:l∞] - 4) < 0.2 dts = 2.0 .^ (-12:-1:-15) -sim = analyticless_test_convergence(dts, testprob, ABDF2(autodiff=AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); +sim = analyticless_test_convergence(dts, testprob, ABDF2(autodiff = AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); @test abs(sim.𝒪est[:l∞] - 2) < 0.2 dts = 2.0 .^ (-13:-1:-16) -sim = analyticless_test_convergence(dts, testprob, QNDF2(autodiff=AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); +sim = analyticless_test_convergence(dts, testprob, QNDF2(autodiff = AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); @test_broken abs(sim.𝒪est[:l∞] - 2.5) < 0.2 # Superconvergence dts = 2.0 .^ (-15:-1:-18) -sim = analyticless_test_convergence(dts, testprob, FBDF(autodiff=AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); +sim = analyticless_test_convergence(dts, testprob, FBDF(autodiff = AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); @test abs(sim.𝒪est[:l∞] - 1) < 0.3 # Only first order because adaptive order starts with Euler! -eqs_nonaut = [D(y₁) ~ -k₁ * y₁ + (t+1) * k₃ * y₂ * y₃, - D(y₂) ~ k₁ * y₁ - (t+1) * k₂ * y₂^2 - (t+1) * k₃ * y₂ * y₃, - D(y₃) ~ (t+1) * k₂ * y₂^2] +eqs_nonaut = [ + D(y₁) ~ -k₁ * y₁ + (t + 1) * k₃ * y₂ * y₃, + D(y₂) ~ k₁ * y₁ - (t + 1) * k₂ * y₂^2 - (t + 1) * k₃ * y₂ * y₃, + D(y₃) ~ (t + 1) * k₂ * y₂^2, +] @mtkcompile rober_nonaut = ODESystem(eqs_nonaut, t) -prob = ODEProblem(rober_nonaut, [[y₁, y₂, y₃] .=> [1.0; 0.0; 0.0]; [k₁, k₂, k₃] .=> (0.04, 3e7, 1e4)], (0.0, 1e5), jac = true) -prob2 = ODEProblem(rober_nonaut, [[y₁, y₂, y₃] .=> [1.0; 0.0; 0.0]; [k₁, k₂, k₃] .=> (0.04, 3e7, 1e4)], (0.0, 1e5), jac = true, nlstep = true) +prob = ODEProblem(rober_nonaut, [[y₁, y₂, y₃] .=> [1.0; 0.0; 0.0]; [k₁, k₂, k₃] .=> (0.04, 3.0e7, 1.0e4)], (0.0, 1.0e5), jac = true) +prob2 = ODEProblem(rober_nonaut, [[y₁, y₂, y₃] .=> [1.0; 0.0; 0.0]; [k₁, k₂, k₃] .=> (0.04, 3.0e7, 1.0e4)], (0.0, 1.0e5), jac = true, nlstep = true) -sol1 = solve(prob, FBDF(autodiff=AutoFiniteDiff(), nlsolve = nlalg)); -sol2 = solve(prob2, FBDF(autodiff=AutoFiniteDiff(), nlsolve = nlalg)); +sol1 = solve(prob, FBDF(autodiff = AutoFiniteDiff(), nlsolve = nlalg)); +sol2 = solve(prob2, FBDF(autodiff = AutoFiniteDiff(), nlsolve = nlalg)); @test sol1.t != sol2.t @test sol1.u != sol2.u -@test sol1(sol1.t) ≈ sol2(sol1.t) atol=1e-3 +@test sol1(sol1.t) ≈ sol2(sol1.t) atol = 1.0e-3 -sol1 = solve(prob, TRBDF2(autodiff=AutoFiniteDiff(), nlsolve = nlalg)); -sol2 = solve(prob2, TRBDF2(autodiff=AutoFiniteDiff(), nlsolve = nlalg)); +sol1 = solve(prob, TRBDF2(autodiff = AutoFiniteDiff(), nlsolve = nlalg)); +sol2 = solve(prob2, TRBDF2(autodiff = AutoFiniteDiff(), nlsolve = nlalg)); @test sol1.t != sol2.t @test sol1 != sol2 -@test sol1(sol1.t) ≈ sol2(sol1.t) atol=1e-4 +@test sol1(sol1.t) ≈ sol2(sol1.t) atol = 1.0e-4 -testprob = ODEProblem(rober_nonaut, [[y₁, y₂, y₃] .=> [1.0; 0.0; 0.0]; [k₁, k₂, k₃] .=> (0.04, 3e7, 1e4)], (0.0, 1.0), nlstep = true) +testprob = ODEProblem(rober_nonaut, [[y₁, y₂, y₃] .=> [1.0; 0.0; 0.0]; [k₁, k₂, k₃] .=> (0.04, 3.0e7, 1.0e4)], (0.0, 1.0), nlstep = true) @test testprob.f.nlstep_data !== nothing -sol2 = solve(testprob, TRBDF2(autodiff=AutoFiniteDiff(), nlsolve = nlalg), adaptive=false, dt= 2.0^-15) +sol2 = solve(testprob, TRBDF2(autodiff = AutoFiniteDiff(), nlsolve = nlalg), adaptive = false, dt = 2.0^-15) -test_setup = Dict(:alg => FBDF(), :reltol => 1e-14, :abstol => 1e-14) +test_setup = Dict(:alg => FBDF(), :reltol => 1.0e-14, :abstol => 1.0e-14) dts = 2.0 .^ (-10:-1:-15) -sim = analyticless_test_convergence(dts, testprob, TRBDF2(autodiff=AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); +sim = analyticless_test_convergence(dts, testprob, TRBDF2(autodiff = AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); @test_broken abs(sim.𝒪est[:l∞] - 2) < 0.2 dts = 2.0 .^ (-10:-1:-12) -sim = analyticless_test_convergence(dts, testprob, KenCarp4(autodiff=AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); +sim = analyticless_test_convergence(dts, testprob, KenCarp4(autodiff = AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); @test_broken abs(sim.𝒪est[:l∞] - 4) < 0.2 dts = 2.0 .^ (-12:-1:-15) -sim = analyticless_test_convergence(dts, testprob, ABDF2(autodiff=AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); +sim = analyticless_test_convergence(dts, testprob, ABDF2(autodiff = AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); @test abs(sim.𝒪est[:l∞] - 2) < 0.2 dts = 2.0 .^ (-13:-1:-16) -sim = analyticless_test_convergence(dts, testprob, QNDF2(autodiff=AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); +sim = analyticless_test_convergence(dts, testprob, QNDF2(autodiff = AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); @test_broken abs(sim.𝒪est[:l∞] - 2.5) < 0.2 # Superconvergence dts = 2.0 .^ (-15:-1:-18) -sim = analyticless_test_convergence(dts, testprob, FBDF(autodiff=AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); +sim = analyticless_test_convergence(dts, testprob, FBDF(autodiff = AutoFiniteDiff(), nlsolve = nlalgrobust), test_setup); @test abs(sim.𝒪est[:l∞] - 1) < 0.35 # Only first order because adaptive order starts with Euler! diff --git a/test/modelingtoolkit/preconditioners.jl b/test/modelingtoolkit/preconditioners.jl index 85a54a30db..c807196575 100644 --- a/test/modelingtoolkit/preconditioners.jl +++ b/test/modelingtoolkit/preconditioners.jl @@ -19,11 +19,11 @@ function brusselator_2d_loop(du, u, p, t) i, j = Tuple(I) x, y = xyd_brusselator[I[1]], xyd_brusselator[I[2]] ip1, im1, jp1, jm1 = limit(i + 1, N), limit(i - 1, N), limit(j + 1, N), - limit(j - 1, N) + limit(j - 1, N) du[i, j, 1] = alpha * (u[im1, j, 1] + u[ip1, j, 1] + u[i, jp1, 1] + u[i, jm1, 1] - 4u[i, j, 1]) + B + u[i, j, 1]^2 * u[i, j, 2] - (A + 1) * u[i, j, 1] + brusselator_f(x, y, t) du[i, j, 2] = alpha * (u[im1, j, 2] + u[ip1, j, 2] + u[i, jp1, 2] + u[i, jm1, 2] - 4u[i, j, 2]) + A * u[i, j, 1] - u[i, j, 1]^2 * u[i, j, 2] end - nothing + return nothing end p = (3.4, 1.0, 10.0, step(xyd_brusselator)) @@ -36,21 +36,27 @@ function init_brusselator_2d(xyd) u[I, 1] = 22 * (y * (1 - y))^(3 / 2) u[I, 2] = 27 * (x * (1 - x))^(3 / 2) end - u + return u end u0 = init_brusselator_2d(xyd_brusselator) prob_ode_brusselator_2d = ODEProblem(brusselator_2d_loop, u0, (0.0, 11.5), p) du0 = copy(u0) jac = ModelingToolkit.Symbolics.jacobian_sparsity( - (du, u) -> brusselator_2d_loop(du, u, p, - 0.0), du0, - u0) + (du, u) -> brusselator_2d_loop( + du, u, p, + 0.0 + ), du0, + u0 +) prob_ode_brusselator_2d_sparse = ODEProblem( - ODEFunction(brusselator_2d_loop, - jac_prototype = float.(jac)), - u0, (0.0, 11.5), p) + ODEFunction( + brusselator_2d_loop, + jac_prototype = float.(jac) + ), + u0, (0.0, 11.5), p +) function incompletelu(W, du, u, p, t, newW, Plprev, Prprev, solverdata) if newW === nothing || newW @@ -58,52 +64,87 @@ function incompletelu(W, du, u, p, t, newW, Plprev, Prprev, solverdata) else Pl = Plprev end - Pl, nothing + return Pl, nothing end function algebraicmultigrid(W, du, u, p, t, newW, Plprev, Prprev, solverdata) if newW === nothing || newW - Pl = AlgebraicMultigrid.aspreconditioner(AlgebraicMultigrid.ruge_stuben(convert( - AbstractMatrix, - W))) + Pl = AlgebraicMultigrid.aspreconditioner( + AlgebraicMultigrid.ruge_stuben( + convert( + AbstractMatrix, + W + ) + ) + ) else Pl = Plprev end - Pl, nothing + return Pl, nothing end function algebraicmultigrid2(W, du, u, p, t, newW, Plprev, Prprev, solverdata) if newW === nothing || newW A = convert(AbstractMatrix, W) - Pl = AlgebraicMultigrid.aspreconditioner(AlgebraicMultigrid.ruge_stuben(A, - presmoother = AlgebraicMultigrid.Jacobi(rand(size(A, - 1))), - postsmoother = AlgebraicMultigrid.Jacobi(rand(size(A, - 1))))) + Pl = AlgebraicMultigrid.aspreconditioner( + AlgebraicMultigrid.ruge_stuben( + A, + presmoother = AlgebraicMultigrid.Jacobi( + rand( + size( + A, + 1 + ) + ) + ), + postsmoother = AlgebraicMultigrid.Jacobi( + rand( + size( + A, + 1 + ) + ) + ) + ) + ) else Pl = Plprev end - Pl, nothing + return Pl, nothing end iter[] = 0 -sol1 = solve(prob_ode_brusselator_2d, KenCarp47(linsolve = KrylovJL_GMRES()), - save_everystep = false); +sol1 = solve( + prob_ode_brusselator_2d, KenCarp47(linsolve = KrylovJL_GMRES()), + save_everystep = false +); iter1 = iter[]; iter[] = 0; -sol2 = solve(prob_ode_brusselator_2d_sparse, - KenCarp47(linsolve = KrylovJL_GMRES(), precs = incompletelu, - concrete_jac = true), save_everystep = false); +sol2 = solve( + prob_ode_brusselator_2d_sparse, + KenCarp47( + linsolve = KrylovJL_GMRES(), precs = incompletelu, + concrete_jac = true + ), save_everystep = false +); iter2 = iter[]; iter[] = 0; -sol3 = solve(prob_ode_brusselator_2d_sparse, - KenCarp47(linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid, - concrete_jac = true), save_everystep = false); +sol3 = solve( + prob_ode_brusselator_2d_sparse, + KenCarp47( + linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid, + concrete_jac = true + ), save_everystep = false +); iter3 = iter[]; iter[] = 0; -sol4 = solve(prob_ode_brusselator_2d_sparse, - KenCarp47(linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid2, - concrete_jac = true), save_everystep = false); +sol4 = solve( + prob_ode_brusselator_2d_sparse, + KenCarp47( + linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid2, + concrete_jac = true + ), save_everystep = false +); iter4 = iter[]; iter[] = 0; @@ -116,23 +157,37 @@ iter[] = 0; @test iter3 < iter1 @test iter4 < iter1 -sol1 = solve(prob_ode_brusselator_2d, Rosenbrock23(linsolve = KrylovJL_GMRES()), - save_everystep = false); +sol1 = solve( + prob_ode_brusselator_2d, Rosenbrock23(linsolve = KrylovJL_GMRES()), + save_everystep = false +); iter1 = iter[]; iter[] = 0; -sol2 = solve(prob_ode_brusselator_2d_sparse, - Rosenbrock23(linsolve = KrylovJL_GMRES(), precs = incompletelu, - concrete_jac = true), save_everystep = false); +sol2 = solve( + prob_ode_brusselator_2d_sparse, + Rosenbrock23( + linsolve = KrylovJL_GMRES(), precs = incompletelu, + concrete_jac = true + ), save_everystep = false +); iter2 = iter[]; iter[] = 0; -sol3 = solve(prob_ode_brusselator_2d_sparse, - Rosenbrock23(linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid, - concrete_jac = true), save_everystep = false); +sol3 = solve( + prob_ode_brusselator_2d_sparse, + Rosenbrock23( + linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid, + concrete_jac = true + ), save_everystep = false +); iter3 = iter[]; iter[] = 0; -sol4 = solve(prob_ode_brusselator_2d_sparse, - Rosenbrock23(linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid2, - concrete_jac = true), save_everystep = false); +sol4 = solve( + prob_ode_brusselator_2d_sparse, + Rosenbrock23( + linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid2, + concrete_jac = true + ), save_everystep = false +); iter4 = iter[]; iter[] = 0; @@ -145,23 +200,35 @@ iter[] = 0; @test iter3 < iter1 @test iter4 < iter1 -sol1 = solve(prob_ode_brusselator_2d, Rodas4(linsolve = KrylovJL_GMRES()), - save_everystep = false); +sol1 = solve( + prob_ode_brusselator_2d, Rodas4(linsolve = KrylovJL_GMRES()), + save_everystep = false +); iter1 = iter[]; iter[] = 0; -sol2 = solve(prob_ode_brusselator_2d_sparse, +sol2 = solve( + prob_ode_brusselator_2d_sparse, Rodas4(linsolve = KrylovJL_GMRES(), precs = incompletelu, concrete_jac = true), - save_everystep = false); + save_everystep = false +); iter2 = iter[]; iter[] = 0; -sol3 = solve(prob_ode_brusselator_2d_sparse, - Rodas4(linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid, - concrete_jac = true), save_everystep = false); +sol3 = solve( + prob_ode_brusselator_2d_sparse, + Rodas4( + linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid, + concrete_jac = true + ), save_everystep = false +); iter3 = iter[]; iter[] = 0; -sol4 = solve(prob_ode_brusselator_2d_sparse, - Rodas4(linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid2, - concrete_jac = true), save_everystep = false); +sol4 = solve( + prob_ode_brusselator_2d_sparse, + Rodas4( + linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid2, + concrete_jac = true + ), save_everystep = false +); iter4 = iter[]; iter[] = 0; @@ -174,23 +241,35 @@ iter[] = 0; @test iter3 < iter1 @test iter4 < iter1 -sol1 = solve(prob_ode_brusselator_2d, Rodas5(linsolve = KrylovJL_GMRES()), - save_everystep = false); +sol1 = solve( + prob_ode_brusselator_2d, Rodas5(linsolve = KrylovJL_GMRES()), + save_everystep = false +); iter1 = iter[]; iter[] = 0; -sol2 = solve(prob_ode_brusselator_2d_sparse, +sol2 = solve( + prob_ode_brusselator_2d_sparse, Rodas5(linsolve = KrylovJL_GMRES(), precs = incompletelu, concrete_jac = true), - save_everystep = false); + save_everystep = false +); iter2 = iter[]; iter[] = 0; -sol3 = solve(prob_ode_brusselator_2d_sparse, - Rodas5(linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid, - concrete_jac = true), save_everystep = false); +sol3 = solve( + prob_ode_brusselator_2d_sparse, + Rodas5( + linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid, + concrete_jac = true + ), save_everystep = false +); iter3 = iter[]; iter[] = 0; -sol4 = solve(prob_ode_brusselator_2d_sparse, - Rodas5(linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid2, - concrete_jac = true), save_everystep = false); +sol4 = solve( + prob_ode_brusselator_2d_sparse, + Rodas5( + linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid2, + concrete_jac = true + ), save_everystep = false +); iter4 = iter[]; iter[] = 0; @@ -203,23 +282,35 @@ iter[] = 0; @test iter3 < iter1 @test iter4 < iter1 -sol1 = solve(prob_ode_brusselator_2d, TRBDF2(linsolve = KrylovJL_GMRES()), - save_everystep = false); +sol1 = solve( + prob_ode_brusselator_2d, TRBDF2(linsolve = KrylovJL_GMRES()), + save_everystep = false +); iter1 = iter[]; iter[] = 0; -sol2 = solve(prob_ode_brusselator_2d_sparse, +sol2 = solve( + prob_ode_brusselator_2d_sparse, TRBDF2(linsolve = KrylovJL_GMRES(), precs = incompletelu, concrete_jac = true), - save_everystep = false); + save_everystep = false +); iter2 = iter[]; iter[] = 0; -sol3 = solve(prob_ode_brusselator_2d_sparse, - TRBDF2(linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid, - concrete_jac = true), save_everystep = false); +sol3 = solve( + prob_ode_brusselator_2d_sparse, + TRBDF2( + linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid, + concrete_jac = true + ), save_everystep = false +); iter3 = iter[]; iter[] = 0; -sol4 = solve(prob_ode_brusselator_2d_sparse, - TRBDF2(linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid2, - concrete_jac = true), save_everystep = false); +sol4 = solve( + prob_ode_brusselator_2d_sparse, + TRBDF2( + linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid2, + concrete_jac = true + ), save_everystep = false +); iter4 = iter[]; iter[] = 0; @@ -232,23 +323,37 @@ iter[] = 0; @test iter3 < iter1 @test iter4 < iter1 -sol1 = solve(prob_ode_brusselator_2d, TRBDF2(linsolve = KrylovJL_GMRES()), - save_everystep = false); +sol1 = solve( + prob_ode_brusselator_2d, TRBDF2(linsolve = KrylovJL_GMRES()), + save_everystep = false +); iter1 = iter[]; iter[] = 0; -sol2 = solve(prob_ode_brusselator_2d_sparse, - TRBDF2(linsolve = KrylovJL_GMRES(), precs = incompletelu, - concrete_jac = true), save_everystep = false); +sol2 = solve( + prob_ode_brusselator_2d_sparse, + TRBDF2( + linsolve = KrylovJL_GMRES(), precs = incompletelu, + concrete_jac = true + ), save_everystep = false +); iter2 = iter[]; iter[] = 0; -sol3 = solve(prob_ode_brusselator_2d_sparse, - TRBDF2(linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid, - concrete_jac = true), save_everystep = false); +sol3 = solve( + prob_ode_brusselator_2d_sparse, + TRBDF2( + linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid, + concrete_jac = true + ), save_everystep = false +); iter3 = iter[]; iter[] = 0; -sol4 = solve(prob_ode_brusselator_2d_sparse, - TRBDF2(linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid2, - concrete_jac = true), save_everystep = false); +sol4 = solve( + prob_ode_brusselator_2d_sparse, + TRBDF2( + linsolve = KrylovJL_GMRES(), precs = algebraicmultigrid2, + concrete_jac = true + ), save_everystep = false +); iter4 = iter[]; iter[] = 0; diff --git a/test/multithreading/ode_extrapolation_tests.jl b/test/multithreading/ode_extrapolation_tests.jl index 9a875a5beb..eded5eb348 100644 --- a/test/multithreading/ode_extrapolation_tests.jl +++ b/test/multithreading/ode_extrapolation_tests.jl @@ -9,16 +9,21 @@ println("Running on $(Threads.nthreads()) thread(s).") linear = (u, p, t) -> (p * u) linear_analytic = (u0, p, t) -> u0 * exp(p * t) -prob_ode_bigfloatlinear = ODEProblem(ODEFunction(linear, analytic = linear_analytic), - big"0.5", (big"0.0", big"1.0"), big"1.01") +prob_ode_bigfloatlinear = ODEProblem( + ODEFunction(linear, analytic = linear_analytic), + big"0.5", (big"0.0", big"1.0"), big"1.01" +) f_2dlinear = (du, u, p, t) -> (@. du = p * u) f_2dlinear_analytic = (u0, p, t) -> @. u0 * exp(p * t) prob_ode_bigfloat2Dlinear = ODEProblem( - ODEFunction(f_2dlinear, - analytic = f_2dlinear_analytic), + ODEFunction( + f_2dlinear, + analytic = f_2dlinear_analytic + ), rand(BigFloat, (4, 2)), (big"0.0", big"1.0"), - big"1.01") + big"1.01" +) # Prepare tests Random.seed!(100) @@ -37,23 +42,35 @@ testTol = 0.2 # Convergence test for j in 1:4 - sim = test_convergence(dts, prob, - AitkenNeville(max_order = j, + sim = test_convergence( + dts, prob, + AitkenNeville( + max_order = j, min_order = j, init_order = j, - threading = false)) - @test sim.𝒪est[:final]≈j atol=testTol + threading = false + ) + ) + @test sim.𝒪est[:final] ≈ j atol = testTol end # Regression test - sol = solve(prob, - AitkenNeville(max_order = 9, min_order = 1, - init_order = 9, threading = false), reltol = 1e-3) + sol = solve( + prob, + AitkenNeville( + max_order = 9, min_order = 1, + init_order = 9, threading = false + ), reltol = 1.0e-3 + ) @test length(sol.u) < 15 - @test SciMLBase.successful_retcode(sol) @test SciMLBase.successful_retcode(sol) - sol = solve(prob, - AitkenNeville(max_order = 9, min_order = 1, - init_order = 9, threading = false), reltol = 1e-6) + @test SciMLBase.successful_retcode(sol) + sol = solve( + prob, + AitkenNeville( + max_order = 9, min_order = 1, + init_order = 9, threading = false + ), reltol = 1.0e-6 + ) @test length(sol.u) < 18 @test SciMLBase.successful_retcode(sol) end @@ -64,23 +81,35 @@ testTol = 0.2 # Convergence test for j in 1:4 - sim = test_convergence(dts, prob, - AitkenNeville(max_order = j, + sim = test_convergence( + dts, prob, + AitkenNeville( + max_order = j, min_order = j, init_order = j, - threading = true)) - @test sim.𝒪est[:final]≈j atol=testTol + threading = true + ) + ) + @test sim.𝒪est[:final] ≈ j atol = testTol end # Regression test - sol = solve(prob, - AitkenNeville(max_order = 9, min_order = 1, - init_order = 9, threading = true), reltol = 1e-3) + sol = solve( + prob, + AitkenNeville( + max_order = 9, min_order = 1, + init_order = 9, threading = true + ), reltol = 1.0e-3 + ) @test length(sol.u) < 15 - @test SciMLBase.successful_retcode(sol) @test SciMLBase.successful_retcode(sol) - sol = solve(prob, - AitkenNeville(max_order = 9, min_order = 1, - init_order = 9, threading = true), reltol = 1e-6) + @test SciMLBase.successful_retcode(sol) + sol = solve( + prob, + AitkenNeville( + max_order = 9, min_order = 1, + init_order = 9, threading = true + ), reltol = 1.0e-6 + ) @test length(sol.u) < 18 @test SciMLBase.successful_retcode(sol) end @@ -92,24 +121,30 @@ testTol = 0.2 @testset "Testing ImplicitEulerExtrapolation" begin for prob in problem_array, - seq in sequence_array + seq in sequence_array global dts newTol = 0.35 # Convergence test for j in 1:4 - alg = ImplicitEulerExtrapolation(min_order = j, + alg = ImplicitEulerExtrapolation( + min_order = j, init_order = j, max_order = j, - sequence = seq, threading = false) + sequence = seq, threading = false + ) sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈alg.init_order + 1.1 atol=newTol #Superconvergence + @test sim.𝒪est[:final] ≈ alg.init_order + 1.1 atol = newTol #Superconvergence end # Regression test - sol = solve(prob, - ImplicitEulerExtrapolation(max_order = 9, min_order = 1, + sol = solve( + prob, + ImplicitEulerExtrapolation( + max_order = 9, min_order = 1, init_order = 9, sequence = seq, - threading = false), reltol = 1e-3) + threading = false + ), reltol = 1.0e-3 + ) @test length(sol.u) < 15 @test SciMLBase.successful_retcode(sol) end @@ -117,24 +152,30 @@ testTol = 0.2 @testset "Testing ImplicitEulerExtrapolation" begin for prob in problem_array, - seq in sequence_array + seq in sequence_array global dts newTol = 0.35 # Convergence test for j in 1:4 - alg = ImplicitEulerExtrapolation(min_order = j, + alg = ImplicitEulerExtrapolation( + min_order = j, init_order = j, max_order = j, - sequence = seq, threading = true) + sequence = seq, threading = true + ) sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈alg.init_order + 1.1 atol=newTol #Superconvergence + @test sim.𝒪est[:final] ≈ alg.init_order + 1.1 atol = newTol #Superconvergence end # Regression test - sol = solve(prob, - ImplicitEulerExtrapolation(max_order = 9, min_order = 1, + sol = solve( + prob, + ImplicitEulerExtrapolation( + max_order = 9, min_order = 1, init_order = 9, sequence = seq, - threading = true), reltol = 1e-3) + threading = true + ), reltol = 1.0e-3 + ) @test length(sol.u) < 15 @test SciMLBase.successful_retcode(sol) end @@ -142,27 +183,33 @@ testTol = 0.2 @testset "Testing ImplicitEulerBarycentricExtrapolation" begin for prob in problem_array, - seq in sequence_array + seq in sequence_array global dts newTol = 0.35 # Convergence test for j in 1:4 - alg = ImplicitEulerBarycentricExtrapolation(min_order = j, + alg = ImplicitEulerBarycentricExtrapolation( + min_order = j, init_order = j, max_order = j, sequence = seq, - threading = false) + threading = false + ) sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈alg.init_order + 0.5 atol=newTol #Superconvergence + @test sim.𝒪est[:final] ≈ alg.init_order + 0.5 atol = newTol #Superconvergence end # Regression test - sol = solve(prob, - ImplicitEulerBarycentricExtrapolation(max_order = 9, min_order = 1, + sol = solve( + prob, + ImplicitEulerBarycentricExtrapolation( + max_order = 9, min_order = 1, init_order = 9, sequence = seq, - threading = false), - reltol = 1e-3) + threading = false + ), + reltol = 1.0e-3 + ) @test length(sol.u) < 15 @test SciMLBase.successful_retcode(sol) end @@ -170,33 +217,41 @@ testTol = 0.2 @testset "Testing ImplicitEulerBarycentricExtrapolation" begin for prob in problem_array, - seq in sequence_array + seq in sequence_array global dts newTol = 0.35 # Convergence test for j in 1:4 - alg = ImplicitEulerBarycentricExtrapolation(min_order = j, + alg = ImplicitEulerBarycentricExtrapolation( + min_order = j, init_order = j, max_order = j, sequence = seq, - threading = true) + threading = true + ) sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈alg.init_order + 0.5 atol=newTol #Superconvergence - algp = ImplicitEulerBarycentricExtrapolation(min_order = j, + @test sim.𝒪est[:final] ≈ alg.init_order + 0.5 atol = newTol #Superconvergence + algp = ImplicitEulerBarycentricExtrapolation( + min_order = j, init_order = j, max_order = j, sequence = seq, - threading = OrdinaryDiffEqExtrapolation.PolyesterThreads()) + threading = OrdinaryDiffEqExtrapolation.PolyesterThreads() + ) simp = test_convergence(dts, prob, algp) - @test simp.𝒪est[:final]≈algp.init_order + 0.5 atol=newTol #Superconvergence + @test simp.𝒪est[:final] ≈ algp.init_order + 0.5 atol = newTol #Superconvergence end # Regression test - sol = solve(prob, - ImplicitEulerBarycentricExtrapolation(max_order = 9, min_order = 1, + sol = solve( + prob, + ImplicitEulerBarycentricExtrapolation( + max_order = 9, min_order = 1, init_order = 9, sequence = seq, - threading = true), - reltol = 1e-3) + threading = true + ), + reltol = 1.0e-3 + ) @test length(sol.u) < 15 @test SciMLBase.successful_retcode(sol) end @@ -204,25 +259,29 @@ testTol = 0.2 @testset "Testing ImplicitDeuflhardExtrapolation" begin for prob in problem_array, - seq in sequence_array + seq in sequence_array global dts # Convergence test for j in 1:6 - alg = ImplicitDeuflhardExtrapolation(min_order = j, + alg = ImplicitDeuflhardExtrapolation( + min_order = j, init_order = j, max_order = j, sequence = seq, - threading = OrdinaryDiffEqExtrapolation.Sequential()) + threading = OrdinaryDiffEqExtrapolation.Sequential() + ) sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈2 * (alg.init_order + 1) atol=testTol + @test sim.𝒪est[:final] ≈ 2 * (alg.init_order + 1) atol = testTol end # Regression test - alg = ImplicitDeuflhardExtrapolation(max_order = 9, min_order = 1, + alg = ImplicitDeuflhardExtrapolation( + max_order = 9, min_order = 1, init_order = 9, sequence = seq, - threading = false) - sol = solve(prob, alg, reltol = 1e-3) + threading = false + ) + sol = solve(prob, alg, reltol = 1.0e-3) @test length(sol.u) < 10 @test SciMLBase.successful_retcode(sol) end @@ -230,24 +289,28 @@ testTol = 0.2 @testset "Testing ImplicitDeuflhardExtrapolation" begin for prob in problem_array, - seq in sequence_array + seq in sequence_array global dts # Convergence test for j in 1:6 - alg = ImplicitDeuflhardExtrapolation(min_order = j, + alg = ImplicitDeuflhardExtrapolation( + min_order = j, init_order = j, max_order = j, - sequence = seq, threading = true) + sequence = seq, threading = true + ) sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈2 * (alg.init_order + 1) atol=testTol + @test sim.𝒪est[:final] ≈ 2 * (alg.init_order + 1) atol = testTol end # Regression test - alg = ImplicitDeuflhardExtrapolation(max_order = 9, min_order = 1, + alg = ImplicitDeuflhardExtrapolation( + max_order = 9, min_order = 1, init_order = 9, sequence = seq, - threading = OrdinaryDiffEqExtrapolation.BaseThreads()) - sol = solve(prob, alg, reltol = 1e-3) + threading = OrdinaryDiffEqExtrapolation.BaseThreads() + ) + sol = solve(prob, alg, reltol = 1.0e-3) @test length(sol.u) < 10 @test SciMLBase.successful_retcode(sol) end @@ -255,23 +318,27 @@ testTol = 0.2 @testset "Testing ImplicitHairerWannerExtrapolation" begin for prob in problem_array, - seq in sequence_array + seq in sequence_array global dts # Convergence test for j in 1:6 - alg = ImplicitHairerWannerExtrapolation(min_order = j, + alg = ImplicitHairerWannerExtrapolation( + min_order = j, init_order = j, max_order = j, - sequence = seq, threading = false) + sequence = seq, threading = false + ) sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈2 * (alg.init_order + 1) - 1 atol=testTol + @test sim.𝒪est[:final] ≈ 2 * (alg.init_order + 1) - 1 atol = testTol end - alg = ImplicitHairerWannerExtrapolation(max_order = 9, min_order = 1, + alg = ImplicitHairerWannerExtrapolation( + max_order = 9, min_order = 1, init_order = 9, sequence = seq, - threading = false) - sol = solve(prob, alg, reltol = 1e-3) + threading = false + ) + sol = solve(prob, alg, reltol = 1.0e-3) @test length(sol.u) < 10 @test SciMLBase.successful_retcode(sol) end @@ -279,24 +346,28 @@ testTol = 0.2 @testset "Testing ImplicitHairerWannerExtrapolation" begin for prob in problem_array, - seq in sequence_array + seq in sequence_array global dts # Convergence test for j in 1:6 - alg = ImplicitHairerWannerExtrapolation(min_order = j, + alg = ImplicitHairerWannerExtrapolation( + min_order = j, init_order = j, max_order = j, sequence = seq, - threading = OrdinaryDiffEqExtrapolation.PolyesterThreads()) + threading = OrdinaryDiffEqExtrapolation.PolyesterThreads() + ) sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈2 * (alg.init_order + 1) - 1 atol=testTol + @test sim.𝒪est[:final] ≈ 2 * (alg.init_order + 1) - 1 atol = testTol end - alg = ImplicitHairerWannerExtrapolation(max_order = 9, min_order = 1, + alg = ImplicitHairerWannerExtrapolation( + max_order = 9, min_order = 1, init_order = 9, sequence = seq, - threading = true) - sol = solve(prob, alg, reltol = 1e-3) + threading = true + ) + sol = solve(prob, alg, reltol = 1.0e-3) @test length(sol.u) < 10 @test SciMLBase.successful_retcode(sol) end @@ -306,53 +377,61 @@ testTol = 0.2 @testset "Testing ExtrapolationMidpointDeuflhard" begin @testset "Testing sequential ExtrapolationMidpointDeuflhard" begin for prob in problem_array, - seq in sequence_array + seq in sequence_array global dts # Convergence test for j in 1:6 - alg = ExtrapolationMidpointDeuflhard(min_order = j, + alg = ExtrapolationMidpointDeuflhard( + min_order = j, init_order = j, max_order = j, sequence = seq, - threading = OrdinaryDiffEqExtrapolation.Sequential()) + threading = OrdinaryDiffEqExtrapolation.Sequential() + ) sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈2 * (alg.init_order + 1) atol=testTol + @test sim.𝒪est[:final] ≈ 2 * (alg.init_order + 1) atol = testTol end # Regression test - alg = ExtrapolationMidpointDeuflhard(max_order = 9, min_order = 1, + alg = ExtrapolationMidpointDeuflhard( + max_order = 9, min_order = 1, init_order = 9, sequence = seq, - threading = false) - sol = solve(prob, alg, reltol = 1e-3) + threading = false + ) + sol = solve(prob, alg, reltol = 1.0e-3) @test length(sol.u) < 10 @test SciMLBase.successful_retcode(sol) - @test SciMLBase.successful_retcode(sol) + @test SciMLBase.successful_retcode(sol) end end @testset "Testing threaded ExtrapolationMidpointDeuflhard" begin for prob in problem_array, - seq in sequence_array + seq in sequence_array global dts # Convergence test for j in 1:6 - alg = ExtrapolationMidpointDeuflhard(min_order = j, + alg = ExtrapolationMidpointDeuflhard( + min_order = j, init_order = j, max_order = j, - sequence = seq, threading = true) + sequence = seq, threading = true + ) sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈2 * (alg.init_order + 1) atol=testTol + @test sim.𝒪est[:final] ≈ 2 * (alg.init_order + 1) atol = testTol end # Regression test - alg = ExtrapolationMidpointDeuflhard(max_order = 9, min_order = 1, + alg = ExtrapolationMidpointDeuflhard( + max_order = 9, min_order = 1, init_order = 9, sequence = seq, - threading = true) - sol = solve(prob, alg, reltol = 1e-3) + threading = true + ) + sol = solve(prob, alg, reltol = 1.0e-3) @test length(sol.u) < 10 @test SciMLBase.successful_retcode(sol) - @test SciMLBase.successful_retcode(sol) + @test SciMLBase.successful_retcode(sol) end end end # ExtrapolationMidpointDeuflhard @@ -361,104 +440,124 @@ testTol = 0.2 @testset "Testing ExtrapolationMidpointHairerWanner" begin @testset "Testing sequential ExtrapolationMidpointHairerWanner" begin for prob in problem_array, - seq in sequence_array + seq in sequence_array global dts # Convergence test for j in 1:6 - alg = ExtrapolationMidpointHairerWanner(min_order = j, + alg = ExtrapolationMidpointHairerWanner( + min_order = j, init_order = j, max_order = j, sequence = seq, - threading = false) + threading = false + ) sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈2 * (alg.init_order + 1) atol=testTol + @test sim.𝒪est[:final] ≈ 2 * (alg.init_order + 1) atol = testTol end # Regression test - alg = ExtrapolationMidpointHairerWanner(max_order = 9, min_order = 2, + alg = ExtrapolationMidpointHairerWanner( + max_order = 9, min_order = 2, init_order = 9, sequence = seq, - threading = false) - sol = solve(prob, alg, reltol = 1e-3) + threading = false + ) + sol = solve(prob, alg, reltol = 1.0e-3) @test length(sol.u) < 10 @test SciMLBase.successful_retcode(sol) - @test SciMLBase.successful_retcode(sol) + @test SciMLBase.successful_retcode(sol) end end @testset "Testing threaded ExtrapolationMidpointHairerWanner" begin for prob in problem_array, - seq in sequence_array + seq in sequence_array global dts # Convergence test for j in 1:6 - alg = ExtrapolationMidpointHairerWanner(min_order = j, + alg = ExtrapolationMidpointHairerWanner( + min_order = j, init_order = j, max_order = j, sequence = seq, - threading = true) + threading = true + ) sim = test_convergence(dts, prob, alg) - @test sim.𝒪est[:final]≈2 * (alg.init_order + 1) atol=testTol + @test sim.𝒪est[:final] ≈ 2 * (alg.init_order + 1) atol = testTol end # Regression test - alg = ExtrapolationMidpointHairerWanner(max_order = 9, min_order = 2, + alg = ExtrapolationMidpointHairerWanner( + max_order = 9, min_order = 2, init_order = 9, sequence = seq, - threading = true) - sol = solve(prob, alg, reltol = 1e-3) + threading = true + ) + sol = solve(prob, alg, reltol = 1.0e-3) @test length(sol.u) < 10 @test SciMLBase.successful_retcode(sol) - @test SciMLBase.successful_retcode(sol) + @test SciMLBase.successful_retcode(sol) end end end # ExtrapolationMidpointHairerWanner @testset "Regression Test Float32 and Float64 Fallbacks" begin prob_ode_2Dlinear = ODEProblem( - ODEFunction(f_2dlinear, - analytic = f_2dlinear_analytic), + ODEFunction( + f_2dlinear, + analytic = f_2dlinear_analytic + ), Float64.(prob_ode_bigfloat2Dlinear.u0), (0.0, 1.0), - 1.01) + 1.01 + ) s1 = solve(prob_ode_bigfloat2Dlinear, ExtrapolationMidpointDeuflhard()) s2 = solve(prob_ode_2Dlinear, ExtrapolationMidpointDeuflhard()) - @test all(all(s1[i] - s2[i] .< 5e-14) for i in 1:length(s1)) + @test all(all(s1[i] - s2[i] .< 5.0e-14) for i in 1:length(s1)) prob_ode_2Dlinear = ODEProblem( - ODEFunction(f_2dlinear, - analytic = f_2dlinear_analytic), + ODEFunction( + f_2dlinear, + analytic = f_2dlinear_analytic + ), Float32.(prob_ode_bigfloat2Dlinear.u0), - (0.0f0, 1.0f0), 1.01f0) + (0.0f0, 1.0f0), 1.01f0 + ) s1 = solve(prob_ode_bigfloat2Dlinear, ExtrapolationMidpointDeuflhard()) s2 = solve(prob_ode_2Dlinear, ExtrapolationMidpointDeuflhard()) - @test all(all(s1[i] - s2[i] .< 5e-6) for i in 1:length(s1)) + @test all(all(s1[i] - s2[i] .< 5.0e-6) for i in 1:length(s1)) end # Test for Julia 1.12 threading compatibility (Issue #2612) @testset "Threading compatibility test" begin # Simple problem for threading test simple_prob = ODEProblem((u, p, t) -> u, 0.1, (0.0, 1.0)) - + # Test extrapolation methods with threading enabled @testset "ExtrapolationMidpointDeuflhard with threading" begin - sol = solve(simple_prob, + sol = solve( + simple_prob, ExtrapolationMidpointDeuflhard(threading = true), - reltol = 1e-3) + reltol = 1.0e-3 + ) @test SciMLBase.successful_retcode(sol) @test length(sol) > 0 end - - @testset "ImplicitEulerExtrapolation with threading" begin - sol = solve(simple_prob, + + @testset "ImplicitEulerExtrapolation with threading" begin + sol = solve( + simple_prob, ImplicitEulerExtrapolation(threading = true), - reltol = 1e-3) + reltol = 1.0e-3 + ) @test SciMLBase.successful_retcode(sol) @test length(sol) > 0 end - + @testset "ImplicitDeuflhardExtrapolation with threading" begin - sol = solve(simple_prob, + sol = solve( + simple_prob, ImplicitDeuflhardExtrapolation(threading = true), - reltol = 1e-3) + reltol = 1.0e-3 + ) @test SciMLBase.successful_retcode(sol) @test length(sol) > 0 end diff --git a/test/odeinterface/init_dt_vs_dopri_tests.jl b/test/odeinterface/init_dt_vs_dopri_tests.jl index 0d35dc331e..4547fc6d1c 100644 --- a/test/odeinterface/init_dt_vs_dopri_tests.jl +++ b/test/odeinterface/init_dt_vs_dopri_tests.jl @@ -1,5 +1,5 @@ using OrdinaryDiffEq, DiffEqDevTools, Test, - ODEInterface, ODEInterfaceDiffEq + ODEInterface, ODEInterfaceDiffEq import ODEProblemLibrary: prob_ode_2Dlinear, prob_ode_linear diff --git a/test/odeinterface/odeinterface_regression.jl b/test/odeinterface/odeinterface_regression.jl index 426fb34bef..8e68622138 100644 --- a/test/odeinterface/odeinterface_regression.jl +++ b/test/odeinterface/odeinterface_regression.jl @@ -1,10 +1,10 @@ using OrdinaryDiffEq, DiffEqDevTools, DiffEqBase, Test, - ODEInterface, ODEInterfaceDiffEq + ODEInterface, ODEInterfaceDiffEq import ODEProblemLibrary: prob_ode_bigfloatlinear, - prob_ode_linear, - prob_ode_2Dlinear, - prob_ode_bigfloat2Dlinear + prob_ode_linear, + prob_ode_2Dlinear, + prob_ode_bigfloat2Dlinear probbig = prob_ode_bigfloat2Dlinear probnum = prob_ode_linear @@ -25,12 +25,12 @@ tabalg = ExplicitRK() sol1 = solve(probnum, DP5(), dt = 1 / 2^6, adaptive = false, save_everystep = false) sol2 = solve(probnum, tabalg, dt = 1 / 2^6, adaptive = false, save_everystep = false) -@test sol1.u[end] - sol2.u[end] < 1e-10 +@test sol1.u[end] - sol2.u[end] < 1.0e-10 sol1 = solve(prob, DP5(), dt = 1 / 2^6, adaptive = false, save_everystep = false) sol2 = solve(prob, tabalg, dt = 1 / 2^6, adaptive = false, save_everystep = false) -@test minimum(sol1.u[end] - sol2.u[end] .< 3e-10) +@test minimum(sol1.u[end] - sol2.u[end] .< 3.0e-10) sol1 = solve(probnum, DP5(), dt = 1 / 2^6, beta2 = 0.04) sol2 = solve(probnum, tabalg, dt = 1 / 2^6, beta2 = 0.04) @@ -41,14 +41,14 @@ sol2 = solve(probnum, tabalg, beta2 = 0.04, beta1 = 0.17) sol3 = solve(probnum, dopri5()) @test sol1.t ≈ sol2.t -@test sol1.t≈sol3.t atol=1e-6 +@test sol1.t ≈ sol3.t atol = 1.0e-6 sol1 = solve(prob, DP5(), dt = 1 / 8) sol2 = solve(prob, tabalg, beta2 = 0.04, beta1 = 0.17, dt = 1 / 8) sol3 = solve(prob, dopri5(), dt = 1 / 8) @test sol1.t ≈ sol2.t -@test sol1.t≈sol3.t atol=1e-5 +@test sol1.t ≈ sol3.t atol = 1.0e-5 sol4 = solve(prob, DP5(), dt = 1 / 8, calck = false) diff --git a/test/qa/qa_tests.jl b/test/qa/qa_tests.jl index 7e5d1221c8..3888a3e9ee 100644 --- a/test/qa/qa_tests.jl +++ b/test/qa/qa_tests.jl @@ -9,4 +9,4 @@ using Test @test check_no_stale_explicit_imports(OrdinaryDiffEq) === nothing @test check_all_qualified_accesses_via_owners(OrdinaryDiffEq) === nothing -end \ No newline at end of file +end diff --git a/test/regression/hard_dae.jl b/test/regression/hard_dae.jl index 727b5ca989..76e6f4dc7c 100644 --- a/test/regression/hard_dae.jl +++ b/test/regression/hard_dae.jl @@ -3,37 +3,39 @@ using LinearAlgebra using NLsolve using Test -p_inv = [500.0 - 0.084 - 4.69 - 2.0 - 400.0 - 20.0 - 0.2 - 1000.0 - 0.59 - 736.0 - 0.0 - 0.0 - 0.2 - 1.27 - 14.3 - 0.0 - 50.0 - 0.2 - 0.08 - 0.003 - 0.074 - 0.2 - 0.01 # Matt - 1.0 # V_ref - 1.0 # ω ref - 0.7 # Pref - 0 # Q_ref - 0.5 #Xtrans - 0.0 # Rtrans - 1.01 #Vm - 0.0] # Vθ +p_inv = [ + 500.0 + 0.084 + 4.69 + 2.0 + 400.0 + 20.0 + 0.2 + 1000.0 + 0.59 + 736.0 + 0.0 + 0.0 + 0.2 + 1.27 + 14.3 + 0.0 + 50.0 + 0.2 + 0.08 + 0.003 + 0.074 + 0.2 + 0.01 # Matt + 1.0 # V_ref + 1.0 # ω ref + 0.7 # Pref + 0 # Q_ref + 0.5 #Xtrans + 0.0 # Rtrans + 1.01 #Vm + 0.0 +] # Vθ function vsm(dx, x, p, t) #PARAMETERS @@ -131,22 +133,30 @@ function vsm(dx, x, p, t) dx[i__ξq_ic] = Vq_filter_ref - vq_filt_olc #docs:(3b) #current control equations - Id_cnv_ref = (kpv * (Vd_filter_ref - vd_filt_olc) + kiv * ξd_ic - #docs:(3i) - cf * ω_oc * vq_filt_olc + kffi * id_filt_olc) - Iq_cnv_ref = (kpv * (Vq_filter_ref - vq_filt_olc) + - kiv * ξq_ic + #docs:(3j) - cf * ω_oc * vd_filt_olc + - kffi * iq_filt_olc) + Id_cnv_ref = ( + kpv * (Vd_filter_ref - vd_filt_olc) + kiv * ξd_ic - #docs:(3i) + cf * ω_oc * vq_filt_olc + kffi * id_filt_olc + ) + Iq_cnv_ref = ( + kpv * (Vq_filter_ref - vq_filt_olc) + + kiv * ξq_ic + #docs:(3j) + cf * ω_oc * vd_filt_olc + + kffi * iq_filt_olc + ) dx[i__γd_ic] = Id_cnv_ref - id_cnv_olc #docs:(3c) dx[i__γq_ic] = Iq_cnv_ref - iq_cnv_olc #docs:(3d) #active damping equations - Vd_cnv_ref = (kpc * (Id_cnv_ref - id_cnv_olc) + kic * γd_ic - lf * ω_oc * iq_cnv_olc + #docs:(3k) - kffv * vd_filt_olc - kad * (vd_filt_olc - ϕd_ic)) - Vq_cnv_ref = (kpc * (Iq_cnv_ref - iq_cnv_olc) + - kic * γq_ic + - lf * ω_oc * id_cnv_olc + #docs:(3l) - kffv * vq_filt_olc - kad * (vq_filt_olc - ϕq_ic)) + Vd_cnv_ref = ( + kpc * (Id_cnv_ref - id_cnv_olc) + kic * γd_ic - lf * ω_oc * iq_cnv_olc + #docs:(3k) + kffv * vd_filt_olc - kad * (vd_filt_olc - ϕd_ic) + ) + Vq_cnv_ref = ( + kpc * (Iq_cnv_ref - iq_cnv_olc) + + kic * γq_ic + + lf * ω_oc * id_cnv_olc + #docs:(3l) + kffv * vq_filt_olc - kad * (vq_filt_olc - ϕq_ic) + ) dx[i__ϕd_ic] = ωad * (vd_filt_olc - ϕd_ic) #docs:(3e) dx[i__ϕq_ic] = ωad * (vq_filt_olc - ϕq_ic) #docs:(3f) @@ -159,27 +169,28 @@ function vsm(dx, x, p, t) Vi_pcc = Vm * sin(Vθ) dx[i__ir_cnv] = (ω_base / lf) * #docs:(5a) - (Vr_cnv - vr_filter - rf * ir_cnv + ω_sys * lf * ii_cnv) + (Vr_cnv - vr_filter - rf * ir_cnv + ω_sys * lf * ii_cnv) dx[i__ii_cnv] = (ω_base / lf) * #docs:(5b) - (Vi_cnv - vi_filter - rf * ii_cnv - ω_sys * lf * ir_cnv) + (Vi_cnv - vi_filter - rf * ii_cnv - ω_sys * lf * ir_cnv) dx[i__vr_filter] = (ω_base / cf) * #docs:(5c) - (ir_cnv - ir_filter + ω_sys * cf * vi_filter) + (ir_cnv - ir_filter + ω_sys * cf * vi_filter) dx[i__vi_filter] = (ω_base / cf) * #docs:(5d) - (ii_cnv - ii_filter - ω_sys * cf * vr_filter) + (ii_cnv - ii_filter - ω_sys * cf * vr_filter) dx[i__ir_filter] = (ω_base / lg) * #docs:(5e) - (vr_filter - Vr_pcc - rg * ir_filter + ω_sys * lg * ii_filter) + (vr_filter - Vr_pcc - rg * ir_filter + ω_sys * lg * ii_filter) dx[i__ii_filter] = +(ω_base / lg) * #docs:(5f) - (vi_filter - Vi_pcc - rg * ii_filter - ω_sys * lg * ir_filter) + (vi_filter - Vi_pcc - rg * ii_filter - ω_sys * lg * ir_filter) # Network interface algebraic equations 0 = I - YV line_currents = ((Vr_cnv + Vi_cnv * 1im) - (Vr_pcc + Vi_pcc * 1im)) / - (Rtrans + Xtrans * 1im) + (Rtrans + Xtrans * 1im) dx[i__ii_source] = ii_source - imag(line_currents) dx[i__ir_source] = ir_source - real(line_currents) return end -u0 = [0.0, +u0 = [ + 0.0, 0.01, 0.01, 0.01, @@ -199,7 +210,7 @@ u0 = [0.0, 0.01, 0.0, 1.0, - 0.0 + 0.0, ] init_f! = (dx, x) -> vsm(dx, x, p_inv, 0) res = nlsolve(init_f!, u0) @@ -215,18 +226,21 @@ affect!(integrator) = integrator.p[28] += 0.2 cb = DiscreteCallback(condition, affect!) prob = ODEProblem(f, deepcopy(res.zero), (0, 20.0), deepcopy(p_inv)) -refsol = solve(prob, Rodas4(), saveat = 0.1, callback = cb, tstops = [1.0], reltol = 1e-12, - abstol = 1e-17) +refsol = solve( + prob, Rodas4(), saveat = 0.1, callback = cb, tstops = [1.0], reltol = 1.0e-12, + abstol = 1.0e-17 +) for solver in (Rodas4, Rodas4P, Rodas5, Rodas5P, FBDF, QNDF) @show solver prob = ODEProblem(f, deepcopy(res.zero), (0, 20.0), deepcopy(p_inv)) sol = solve( - prob, solver(), saveat = 0.1, callback = cb, tstops = [1.0], reltol = 1e-14, - abstol = 1e-14) + prob, solver(), saveat = 0.1, callback = cb, tstops = [1.0], reltol = 1.0e-14, + abstol = 1.0e-14 + ) @test sol.retcode == ReturnCode.Success @test sol.t[end] == 20.0 - @test maximum(sol - refsol) < 1e-11 + @test maximum(sol - refsol) < 1.0e-11 end function hardstop!(du, u, p, t) @@ -234,7 +248,7 @@ function hardstop!(du, u, p, t) y, f_wall, dy = u du[1] = dy du[2] = ifelse(y <= 0, y, f_wall) - du[3] = (-ifelse(t < 2, -pg * pm, pg * pm) - f_wall) / (-pm) + return du[3] = (-ifelse(t < 2, -pg * pm, pg * pm) - f_wall) / (-pm) end hardstop!(u, p, t) = (du = similar(u); hardstop!(du, u, p, t); du) @@ -244,11 +258,11 @@ prob1 = ODEProblem(fun, [5, 0, 0.0], (0, 4.0), [100, 10.0]) prob2 = ODEProblem(fun, [5, 0, 0.0], (0, 4.0), [100, 10.0]) for prob in [prob1, prob2] @test solve(prob, ImplicitEuler(), dt = 1 / 2^10, adaptive = false).retcode == - ReturnCode.ConvergenceFailure + ReturnCode.ConvergenceFailure end condition2 = (u, t, integrator) -> t == 2 -affect2! = integrator -> integrator.u[1] = 1e-6 +affect2! = integrator -> integrator.u[1] = 1.0e-6 cb = DiscreteCallback(condition2, affect2!) @isdefined(N_FAILS) || const N_FAILS = Ref(0) @@ -260,16 +274,20 @@ function choice_function(integrator) N_FAILS[] = 0 end - (N_FAILS[] > 3) + 1 + return (N_FAILS[] > 3) + 1 end -simple_implicit_euler = ImplicitEuler(nlsolve = NLNewton(check_div = false, - always_new = true)) +simple_implicit_euler = ImplicitEuler( + nlsolve = NLNewton( + check_div = false, + always_new = true + ) +) alg_switch = CompositeAlgorithm((ImplicitEuler(), simple_implicit_euler), choice_function) for prob in [prob1, prob2], alg in [simple_implicit_euler, alg_switch] sol = solve(prob, alg, callback = cb, dt = 1 / 2^10, adaptive = false) @test sol.retcode == ReturnCode.Success @test sol(0, idxs = 1) == 5 - @test abs(sol(2-2^-10, idxs = 1)) <= 1e-4 + @test abs(sol(2 - 2^-10, idxs = 1)) <= 1.0e-4 @test sol(4, idxs = 1) > 10 end diff --git a/test/regression/iipvsoop_tests.jl b/test/regression/iipvsoop_tests.jl index b316f5bb31..51bd5fdcc1 100644 --- a/test/regression/iipvsoop_tests.jl +++ b/test/regression/iipvsoop_tests.jl @@ -9,37 +9,48 @@ sol = solve(prob, Tsit5()) # Make sure various differentiation forms work on scalars -sol1 = solve(prob, Rosenbrock23(), abstol = 1e-12, reltol = 1e-12) +sol1 = solve(prob, Rosenbrock23(), abstol = 1.0e-12, reltol = 1.0e-12) sol2 = solve( - prob, Rosenbrock23(autodiff = AutoFiniteDiff()), abstol = 1e-12, reltol = 1e-12) -sol3 = solve(prob, Rosenbrock23(autodiff = AutoFiniteDiff(fdtype = Val(:central))), - abstol = 1e-12, reltol = 1e-12) -sol4 = solve(prob, Rosenbrock23(autodiff = AutoFiniteDiff(fdtype = Val(:complex))), - abstol = 1e-12, reltol = 1e-12) -sol5 = solve(prob, KenCarp4(), abstol = 1e-12, reltol = 1e-12) -sol6 = solve(prob, KenCarp4(autodiff = AutoFiniteDiff()), abstol = 1e-12, reltol = 1e-12) + prob, Rosenbrock23(autodiff = AutoFiniteDiff()), abstol = 1.0e-12, reltol = 1.0e-12 +) +sol3 = solve( + prob, Rosenbrock23(autodiff = AutoFiniteDiff(fdtype = Val(:central))), + abstol = 1.0e-12, reltol = 1.0e-12 +) +sol4 = solve( + prob, Rosenbrock23(autodiff = AutoFiniteDiff(fdtype = Val(:complex))), + abstol = 1.0e-12, reltol = 1.0e-12 +) +sol5 = solve(prob, KenCarp4(), abstol = 1.0e-12, reltol = 1.0e-12) +sol6 = solve(prob, KenCarp4(autodiff = AutoFiniteDiff()), abstol = 1.0e-12, reltol = 1.0e-12) sol7 = solve( - prob, KenCarp4(autodiff = AutoFiniteDiff(fdtype = Val(:central))), abstol = 1e-12, - reltol = 1e-12) + prob, KenCarp4(autodiff = AutoFiniteDiff(fdtype = Val(:central))), abstol = 1.0e-12, + reltol = 1.0e-12 +) sol8 = solve( - prob, KenCarp4(autodiff = AutoFiniteDiff(fdtype = Val(:complex))), abstol = 1e-12, - reltol = 1e-12) -sol9 = solve(prob, KenCarp47(), abstol = 1e-12, reltol = 1e-12) -sol10 = solve(prob, KenCarp47(autodiff = AutoFiniteDiff()), abstol = 1e-12, reltol = 1e-12) + prob, KenCarp4(autodiff = AutoFiniteDiff(fdtype = Val(:complex))), abstol = 1.0e-12, + reltol = 1.0e-12 +) +sol9 = solve(prob, KenCarp47(), abstol = 1.0e-12, reltol = 1.0e-12) +sol10 = solve(prob, KenCarp47(autodiff = AutoFiniteDiff()), abstol = 1.0e-12, reltol = 1.0e-12) sol11 = solve( - prob, KenCarp47(autodiff = AutoFiniteDiff(fdtype = Val(:central))), abstol = 1e-12, - reltol = 1e-12) + prob, KenCarp47(autodiff = AutoFiniteDiff(fdtype = Val(:central))), abstol = 1.0e-12, + reltol = 1.0e-12 +) sol12 = solve( - prob, KenCarp47(autodiff = AutoFiniteDiff(fdtype = Val(:complex))), abstol = 1e-12, - reltol = 1e-12) -sol13 = solve(prob, KenCarp58(), abstol = 1e-12, reltol = 1e-12) -sol14 = solve(prob, KenCarp58(autodiff = AutoFiniteDiff()), abstol = 1e-12, reltol = 1e-12) + prob, KenCarp47(autodiff = AutoFiniteDiff(fdtype = Val(:complex))), abstol = 1.0e-12, + reltol = 1.0e-12 +) +sol13 = solve(prob, KenCarp58(), abstol = 1.0e-12, reltol = 1.0e-12) +sol14 = solve(prob, KenCarp58(autodiff = AutoFiniteDiff()), abstol = 1.0e-12, reltol = 1.0e-12) sol15 = solve( - prob, KenCarp58(autodiff = AutoFiniteDiff(fdtype = Val(:central))), abstol = 1e-12, - reltol = 1e-12) + prob, KenCarp58(autodiff = AutoFiniteDiff(fdtype = Val(:central))), abstol = 1.0e-12, + reltol = 1.0e-12 +) sol16 = solve( - prob, KenCarp58(autodiff = AutoFiniteDiff(fdtype = Val(:complex))), abstol = 1e-12, - reltol = 1e-12) + prob, KenCarp58(autodiff = AutoFiniteDiff(fdtype = Val(:complex))), abstol = 1.0e-12, + reltol = 1.0e-12 +) ts = 0.0:0.1:1.0 @test sol1(ts) ≈ sol2(ts) @@ -62,7 +73,7 @@ ts = 0.0:0.1:1.0 function f_ip(du, u, p, t) du[1] = -u[1] - nothing + return nothing end f_scalar(u, p, t) = -u @@ -71,9 +82,11 @@ prob_ip = ODEProblem(f_ip, [1.0], tspan) prob_scalar = ODEProblem(f_scalar, 1.0, tspan) ts = 0:0.1:10.0 -rk_algs = [Euler(), Midpoint(), Heun(), Ralston(), RK4(), SSPRK104(), SSPRK22(), SSPRK33(), +rk_algs = [ + Euler(), Midpoint(), Heun(), Ralston(), RK4(), SSPRK104(), SSPRK22(), SSPRK33(), SSPRK43(), SSPRK432(), BS3(), BS5(), DP5(), DP8(), Feagin10(), Feagin12(), - Feagin14(), TanYam7(), Tsit5(), TsitPap8(), Vern6(), Vern7(), Vern8(), Vern9()] + Feagin14(), TanYam7(), Tsit5(), TsitPap8(), Vern6(), Vern7(), Vern8(), Vern9(), +] @testset "Algorithm $(nameof(typeof(alg)))" for alg in rk_algs println(nameof(typeof(alg))) @@ -92,16 +105,20 @@ rk_algs = [Euler(), Midpoint(), Heun(), Ralston(), RK4(), SSPRK104(), SSPRK22(), @test sol_ip.t ≈ sol_scalar.t && sol_ip[1, :] ≈ sol_scalar.u end -working_sdirk_algs = [ImplicitMidpoint(), +working_sdirk_algs = [ + ImplicitMidpoint(), ImplicitEuler(), ImplicitMidpoint(autodiff = AutoFiniteDiff()), - SSPSDIRK2()] + SSPSDIRK2(), +] -sdirk_algs = [Trapezoid(), +sdirk_algs = [ + Trapezoid(), TRBDF2(), SDIRK2(), Kvaerno3(), KenCarp3(), Cash4(), Hairer4(), Hairer42(), Kvaerno4(), KenCarp4(), - Kvaerno5(), KenCarp5(), KenCarp47(), KenCarp58()] + Kvaerno5(), KenCarp5(), KenCarp47(), KenCarp58(), +] @testset "Algorithm $(nameof(typeof(alg)))" for alg in working_sdirk_algs println(nameof(typeof(alg))) @@ -121,15 +138,18 @@ end @test_broken sol_ip.t ≈ sol_scalar.t && sol_ip[1, :] ≈ sol_scalar.u end -working_rosenbrock_algs = [Rosenbrock23(), ROS3P(), Rodas3(), +working_rosenbrock_algs = [ + Rosenbrock23(), ROS3P(), Rodas3(), RosShamp4(), Veldd4(), Velds4(), GRK4T(), GRK4A(), Ros4LStab(), Rodas4(), Rodas42(), Rodas4P(), Rodas5(), Rodas23W(), Rodas3P(), Rodas5Pe(), Rodas5P(), ROS2(), ROS2PR(), ROS2S(), ROS3(), ROS3PR(), Scholz4_7(), ROS34PW1a(), ROS34PW1b(), ROS34PW2(), ROS34PW3(), - ROS34PRw(), ROS3PRL(), ROS3PRL2(), ROK4a()] + ROS34PRw(), ROS3PRL(), ROS3PRL2(), ROK4a(), +] -rosenbrock_algs = [Rosenbrock32() +rosenbrock_algs = [ + Rosenbrock32(), ] @testset "Algorithm $(nameof(typeof(alg)))" for alg in working_rosenbrock_algs diff --git a/test/regression/ode_adaptive_tests.jl b/test/regression/ode_adaptive_tests.jl index 2a8545d001..216f75c6f8 100644 --- a/test/regression/ode_adaptive_tests.jl +++ b/test/regression/ode_adaptive_tests.jl @@ -21,12 +21,14 @@ val4 = maximum(abs.(sol3.u[end] - sol3.u_analytic[end])) @test SciMLBase.successful_retcode(sol) @test SciMLBase.successful_retcode(sol2) @test SciMLBase.successful_retcode(sol3) -@test max(val1, val2, val3, val4) < 2e-3 +@test max(val1, val2, val3, val4) < 2.0e-3 function lorenz(u, p, t) - [10.0(u[2] - u[1]) - u[1] * (28.0 - u[3]) - u[2] - u[1] * u[2] - (8 / 3) * u[3]] + return [ + 10.0(u[2] - u[1]) + u[1] * (28.0 - u[3]) - u[2] + u[1] * u[2] - (8 / 3) * u[3] + ] end u0 = [1.0; 0.0; 0.0] tspan = (0.0, 100.0) @@ -41,7 +43,7 @@ sol = solve(prob, FBDF()) function lorenz(du, u, p, t) du[1] = 10.0(u[2] - u[1]) du[2] = u[1] * (28.0 - u[3]) - u[2] - du[3] = u[1] * u[2] - (8 / 3) * u[3] + return du[3] = u[1] * u[2] - (8 / 3) * u[3] end u0 = [1.0; 0.0; 0.0] tspan = (0.0, 100.0) @@ -56,7 +58,7 @@ sol = solve(prob, FBDF()) function lorenz(out, du, u, p, t) out[1] = 10.0(u[2] - u[1]) - du[1] out[2] = u[1] * (28.0 - u[3]) - u[2] - du[2] - out[3] = u[1] * u[2] - (8 / 3) * u[3] - du[3] + return out[3] = u[1] * u[2] - (8 / 3) * u[3] - du[3] end u0 = [1.0; 0.0; 0.0] du0 = [0.0; 0.0; 0.0] @@ -68,9 +70,11 @@ sol = solve(prob, DFBDF()) @test SciMLBase.successful_retcode(sol) function lorenz(du, u, p, t) - [10.0(u[2] - u[1]) - du[1] - u[1] * (28.0 - u[3]) - u[2] - du[2] - u[1] * u[2] - (8 / 3) * u[3] - du[3]] + return [ + 10.0(u[2] - u[1]) - du[1] + u[1] * (28.0 - u[3]) - u[2] - du[2] + u[1] * u[2] - (8 / 3) * u[3] - du[3] + ] end u0 = [1.0; 0.0; 0.0] du0 = [0.0; 0.0; 0.0] @@ -87,14 +91,14 @@ tspan = (1.6078221f0, 2.0f0) initial_condition = [2.1349438f6, -2.1349438f6] prob = ODEProblem(possibly_singular, initial_condition, tspan) for alg in [ - Rosenbrock23(), - Rosenbrock32(), - Rodas3(), - Rodas4(), - Rodas4P(), - Rodas5(), - Rodas5P() -] + Rosenbrock23(), + Rosenbrock32(), + Rodas3(), + Rodas4(), + Rodas4P(), + Rodas5(), + Rodas5P(), + ] sol = solve(prob, alg) @test sol.retcode == ReturnCode.Success end @@ -159,9 +163,9 @@ sol_lorenz = solve(prob_lorenz, ESDIRK659L2SA()) for prob in [prob_ode_2Dlinear, prob_ode_linear] sol = solve(prob, Alshina2()) val = maximum(abs.(sol.u[end] - sol.u_analytic[end])) - @test val < 1e-6 + @test val < 1.0e-6 sol = solve(prob, Alshina3()) val = maximum(abs.(sol.u[end] - sol.u_analytic[end])) - @test val < 1e-6 + @test val < 1.0e-6 end diff --git a/test/regression/ode_dense_tests.jl b/test/regression/ode_dense_tests.jl index c8eaf84357..c70e433e0f 100644 --- a/test/regression/ode_dense_tests.jl +++ b/test/regression/ode_dense_tests.jl @@ -2,21 +2,25 @@ using OrdinaryDiffEq, Test, DiffEqBase using OrdinaryDiffEqCore using ForwardDiff import ODEProblemLibrary: prob_ode_linear, - prob_ode_2Dlinear, - prob_ode_bigfloatlinear, prob_ode_bigfloat2Dlinear + prob_ode_2Dlinear, + prob_ode_bigfloatlinear, prob_ode_bigfloat2Dlinear # use `PRINT_TESTS = true` to print the tests, including results const PRINT_TESTS = false print_results(x) = - if PRINT_TESTS - println(x) - end +if PRINT_TESTS + println(x) +end # points and storage arrays used in the interpolation tests const interpolation_points = 0:(1 // 2^(4)):1 -const interpolation_results_1d = fill(zero(prob_ode_linear.u0), - length(interpolation_points)) -const interpolation_results_2d = Vector{typeof(prob_ode_2Dlinear.u0)}(undef, - length(interpolation_points)) +const interpolation_results_1d = fill( + zero(prob_ode_linear.u0), + length(interpolation_points) +) +const interpolation_results_2d = Vector{typeof(prob_ode_2Dlinear.u0)}( + undef, + length(interpolation_points) +) for idx in eachindex(interpolation_results_2d) interpolation_results_2d[idx] = zero(prob_ode_2Dlinear.u0) end @@ -25,11 +29,16 @@ f_linear_inplace = (du, u, p, t) -> begin @. du = 1.01 * u end prob_ode_linear_inplace = ODEProblem( - ODEFunction(f_linear_inplace; - analytic = (u0, p, t) -> exp(1.01 * t) * u0), - [0.5], (0.0, 1.0)) -const interpolation_results_1d_inplace = Vector{typeof(prob_ode_linear_inplace.u0)}(undef, - length(interpolation_points)) + ODEFunction( + f_linear_inplace; + analytic = (u0, p, t) -> exp(1.01 * t) * u0 + ), + [0.5], (0.0, 1.0) +) +const interpolation_results_1d_inplace = Vector{typeof(prob_ode_linear_inplace.u0)}( + undef, + length(interpolation_points) +) for idx in eachindex(interpolation_results_1d_inplace) interpolation_results_1d_inplace[idx] = zero(prob_ode_linear_inplace.u0) end @@ -38,14 +47,16 @@ const deriv_test_points = range(0, stop = 1, length = 5) # left continuous derivative \lim{ϵ->0⁺}\frac{f(x)-f(x-ϵ)}{ϵ} function LeftDeriv(f, x) - ForwardDiff.derivative(t -> -f(-t), -x) + return ForwardDiff.derivative(t -> -f(-t), -x) end # perform the regression tests # NOTE: If you want to add new tests (for new algorithms), you have to run the # commands below to get numerical values for `tol_ode_linear` and # `tol_ode_2Dlinear`. -function regression_test(alg, tol_ode_linear, tol_ode_2Dlinear; test_diff1 = false, - nth_der = 1, dertol = 1e-6) +function regression_test( + alg, tol_ode_linear, tol_ode_2Dlinear; test_diff1 = false, + nth_der = 1, dertol = 1.0e-6 + ) println("\n") show(stdout, alg) println() @@ -55,8 +66,10 @@ function regression_test(alg, tol_ode_linear, tol_ode_2Dlinear; test_diff1 = fal @inferred sol(interpolation_points[1]) sol2 = solve(prob_ode_linear, alg, dt = 1 // 2^(4), dense = true, adaptive = false) for i in eachindex(sol2) - print_results(@test maximum(abs.(sol2[i] - interpolation_results_1d[i])) < - tol_ode_linear) + print_results( + @test maximum(abs.(sol2[i] - interpolation_results_1d[i])) < + tol_ode_linear + ) end for N in 1:nth_der # prevent CI error @@ -67,7 +80,7 @@ function regression_test(alg, tol_ode_linear, tol_ode_2Dlinear; test_diff1 = fal @test interpolation_results_1d[1] ≈ der for t in deriv_test_points deriv = sol(t, Val{N}) - @test deriv≈LeftDeriv(t -> sol(t, Val{N - 1}), t) rtol=dertol + @test deriv ≈ LeftDeriv(t -> sol(t, Val{N - 1}), t) rtol = dertol end end end @@ -88,7 +101,7 @@ function regression_test(alg, tol_ode_linear, tol_ode_2Dlinear; test_diff1 = fal @test interpolation_results_1d_inplace[1] ≈ der for t in deriv_test_points deriv = sol(t, Val{N}, idxs = 1) - @test deriv≈LeftDeriv(t -> sol(t, Val{N - 1}; idxs = 1), t) rtol=dertol + @test deriv ≈ LeftDeriv(t -> sol(t, Val{N - 1}; idxs = 1), t) rtol = dertol end end end @@ -98,9 +111,12 @@ function regression_test(alg, tol_ode_linear, tol_ode_2Dlinear; test_diff1 = fal sol(interpolation_points[1]) sol2 = solve(prob_ode_2Dlinear, alg, dt = 1 // 2^(4), dense = true, adaptive = false) for i in eachindex(sol2) - print_results(@test maximum(maximum.(abs.(sol2[i] - interpolation_results_2d[i]))) < - tol_ode_2Dlinear) + print_results( + @test maximum(maximum.(abs.(sol2[i] - interpolation_results_2d[i]))) < + tol_ode_2Dlinear + ) end + return end # Some extra tests using Euler() @@ -126,7 +142,7 @@ end interpd_idxs = sol(0:(1 // 2^(4)):1, idxs = 1:2:5) -@test minimum([isapprox(interpd_idxs[i], interpd[i][1:2:5], rtol=1e-14) for i in 1:length(interpd)]) +@test minimum([isapprox(interpd_idxs[i], interpd[i][1:2:5], rtol = 1.0e-14) for i in 1:length(interpd)]) interpd_single = sol(0:(1 // 2^(4)):1, idxs = 1) @@ -181,11 +197,11 @@ println("SSPRKs") # SSPRK22 @test SSPRK22() == SSPRK22(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(SSPRK22(), 1.5e-2, 2.5e-2; test_diff1 = true, nth_der = 2, dertol = 1e-15) +regression_test(SSPRK22(), 1.5e-2, 2.5e-2; test_diff1 = true, nth_der = 2, dertol = 1.0e-15) # SSPRK33 @test SSPRK33() == SSPRK33(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(SSPRK33(), 7.5e-4, 7.5e-3; test_diff1 = true, nth_der = 2, dertol = 1e-15) +regression_test(SSPRK33(), 7.5e-4, 7.5e-3; test_diff1 = true, nth_der = 2, dertol = 1.0e-15) # SSPRK53 @test SSPRK53() == SSPRK53(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor @@ -213,11 +229,11 @@ regression_test(SSPRK83(), 6.5e-5, 1.5e-4; test_diff1 = true) # SSPRK43 @test SSPRK43() == SSPRK43(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(SSPRK43(), 4.0e-4, 8.0e-4; test_diff1 = true, nth_der = 2, dertol = 1e-13) +regression_test(SSPRK43(), 4.0e-4, 8.0e-4; test_diff1 = true, nth_der = 2, dertol = 1.0e-13) # SSPRK432 @test SSPRK432() == SSPRK432(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(SSPRK432(), 4.0e-4, 8.0e-4; test_diff1 = true, nth_der = 2, dertol = 1e-13) +regression_test(SSPRK432(), 4.0e-4, 8.0e-4; test_diff1 = true, nth_der = 2, dertol = 1.0e-13) # SSPRK932 @test SSPRK932() == SSPRK932(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor @@ -229,7 +245,7 @@ regression_test(SSPRK54(), 3.5e-5, 5.5e-5) # SSPRK104 @test SSPRK22() == SSPRK22(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(SSPRK104(), 1.5e-5, 3e-5) +regression_test(SSPRK104(), 1.5e-5, 3.0e-5) # KYKSSPRK42 @test KYKSSPRK42() == KYKSSPRK42(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor @@ -325,7 +341,7 @@ regression_test(CKLLSRK54_3N_3R(), 4.0e-5, 7.0e-5) # CKLLSRK85_4C_3R @test CKLLSRK85_4C_3R() == CKLLSRK85_4C_3R(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(CKLLSRK85_4C_3R(), 8.0e-5, 1.60e-4) +regression_test(CKLLSRK85_4C_3R(), 8.0e-5, 1.6e-4) # CKLLSRK85_4M_3R @test CKLLSRK85_4M_3R() == CKLLSRK85_4M_3R(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor @@ -357,42 +373,42 @@ regression_test(CKLLSRK75_4M_5R(), 8.0e-5, 1.6e-4) # ParsaniKetchesonDeconinck3S32 @test ParsaniKetchesonDeconinck3S32() == - ParsaniKetchesonDeconinck3S32(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor + ParsaniKetchesonDeconinck3S32(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor regression_test(ParsaniKetchesonDeconinck3S32(), 1.5e-2, 2.0e-2) # ParsaniKetchesonDeconinck3S82 @test ParsaniKetchesonDeconinck3S82() == - ParsaniKetchesonDeconinck3S82(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor + ParsaniKetchesonDeconinck3S82(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor regression_test(ParsaniKetchesonDeconinck3S82(), 1.5e-3, 3.0e-3) # ParsaniKetchesonDeconinck3S53 @test ParsaniKetchesonDeconinck3S53() == - ParsaniKetchesonDeconinck3S53(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor + ParsaniKetchesonDeconinck3S53(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor regression_test(ParsaniKetchesonDeconinck3S53(), 2.5e-4, 4.5e-4) # ParsaniKetchesonDeconinck3S173 @test ParsaniKetchesonDeconinck3S173() == - ParsaniKetchesonDeconinck3S173(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor + ParsaniKetchesonDeconinck3S173(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor regression_test(ParsaniKetchesonDeconinck3S173(), 3.5e-5, 5.5e-5) # ParsaniKetchesonDeconinck3S94 @test ParsaniKetchesonDeconinck3S94() == - ParsaniKetchesonDeconinck3S94(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor + ParsaniKetchesonDeconinck3S94(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor regression_test(ParsaniKetchesonDeconinck3S94(), 1.5e-5, 3.0e-5) # ParsaniKetchesonDeconinck3S184 @test ParsaniKetchesonDeconinck3S184() == - ParsaniKetchesonDeconinck3S184(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor + ParsaniKetchesonDeconinck3S184(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor regression_test(ParsaniKetchesonDeconinck3S184(), 1.5e-5, 3.0e-5) # ParsaniKetchesonDeconinck3S105 @test ParsaniKetchesonDeconinck3S105() == - ParsaniKetchesonDeconinck3S105(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor + ParsaniKetchesonDeconinck3S105(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor regression_test(ParsaniKetchesonDeconinck3S105(), 1.5e-5, 3.0e-5) # ParsaniKetchesonDeconinck3S205 @test ParsaniKetchesonDeconinck3S205() == - ParsaniKetchesonDeconinck3S205(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor + ParsaniKetchesonDeconinck3S205(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor regression_test(ParsaniKetchesonDeconinck3S205(), 1.5e-5, 3.0e-5) # RDPK3Sp35 @@ -423,155 +439,167 @@ println("RKs") # RK4 @test RK4() == RK4(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(RK4(), 4.5e-5, 1e-4) +regression_test(RK4(), 4.5e-5, 1.0e-4) # DP5 @test DP5() == DP5(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(DP5(), 5e-6, 1e-5; test_diff1 = true, nth_der = 4, dertol = 1e-14) +regression_test(DP5(), 5.0e-6, 1.0e-5; test_diff1 = true, nth_der = 4, dertol = 1.0e-14) # BS3 @test BS3() == BS3(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(BS3(), 5e-4, 8e-4) +regression_test(BS3(), 5.0e-4, 8.0e-4) # OwrenZen3 @test OwrenZen3() == OwrenZen3(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(OwrenZen3(), 1.5e-4, 2.5e-4; test_diff1 = true, nth_der = 3, dertol = 1e-9) +regression_test(OwrenZen3(), 1.5e-4, 2.5e-4; test_diff1 = true, nth_der = 3, dertol = 1.0e-9) # OwrenZen4 @test OwrenZen4() == OwrenZen4(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(OwrenZen4(), 6.5e-6, 1.5e-5; test_diff1 = true, nth_der = 4, dertol = 1e-10) +regression_test(OwrenZen4(), 6.5e-6, 1.5e-5; test_diff1 = true, nth_der = 4, dertol = 1.0e-10) # OwrenZen5 @test OwrenZen5() == OwrenZen5(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(OwrenZen5(), 1.5e-6, 2.5e-6; test_diff1 = true, nth_der = 5, dertol = 1e-8) +regression_test(OwrenZen5(), 1.5e-6, 2.5e-6; test_diff1 = true, nth_der = 5, dertol = 1.0e-8) # Tsit5 @test Tsit5() == Tsit5(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(Tsit5(), 2e-6, 4e-6; test_diff1 = true, nth_der = 4, dertol = 1e-6) +regression_test(Tsit5(), 2.0e-6, 4.0e-6; test_diff1 = true, nth_der = 4, dertol = 1.0e-6) # TanYam7 @test TanYam7() == TanYam7(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(TanYam7(), 4e-4, 6e-4) +regression_test(TanYam7(), 4.0e-4, 6.0e-4) # TsitPap8 @test TsitPap8() == TsitPap8(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(TsitPap8(), 1e-3, 3e-3) +regression_test(TsitPap8(), 1.0e-3, 3.0e-3) # Feagin10 -regression_test(Feagin10(), 6e-4, 9e-4) +regression_test(Feagin10(), 6.0e-4, 9.0e-4) # BS5 @test BS5() == BS5(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(BS5(), 4e-8, 6e-8; test_diff1 = true, nth_der = 1, dertol = 1e-12) -regression_test(BS5(lazy = false), 4e-8, 6e-8; test_diff1 = true, nth_der = 1, - dertol = 1e-12) +regression_test(BS5(), 4.0e-8, 6.0e-8; test_diff1 = true, nth_der = 1, dertol = 1.0e-12) +regression_test( + BS5(lazy = false), 4.0e-8, 6.0e-8; test_diff1 = true, nth_der = 1, + dertol = 1.0e-12 +) prob = prob_ode_linear sol = solve(prob, BS5(), dt = 1 // 2^(1), dense = true, adaptive = false) interpd_1d_long = sol(0:(1 // 2^(7)):1) sol2 = solve(prob, BS5(), dt = 1 // 2^(7), dense = true, adaptive = false) -print_results(@test maximum(map((x) -> maximum(abs.(x)), sol2 - interpd_1d_long)) < 2e-7) +print_results(@test maximum(map((x) -> maximum(abs.(x)), sol2 - interpd_1d_long)) < 2.0e-7) # DP8 @test DP8() == DP8(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(DP8(), 2e-7, 3e-7; test_diff1 = true, nth_der = 1, dertol = 1e-15) +regression_test(DP8(), 2.0e-7, 3.0e-7; test_diff1 = true, nth_der = 1, dertol = 1.0e-15) prob = prob_ode_linear sol = solve(prob, DP8(), dt = 1 // 2^(2), dense = true) sol(interpd_1d_long, 0:(1 // 2^(7)):1) # inplace update sol2 = solve(prob, DP8(), dt = 1 // 2^(7), dense = true, adaptive = false) -print_results(@test maximum(map((x) -> maximum(abs.(x)), sol2 - interpd_1d_long)) < 2e-7) +print_results(@test maximum(map((x) -> maximum(abs.(x)), sol2 - interpd_1d_long)) < 2.0e-7) println("Verns") # Vern6 @test Vern6() == Vern6(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(Vern6(), 7e-8, 7e-8; test_diff1 = true, nth_der = 1, dertol = 1e-9) -regression_test(Vern6(lazy = false), 7e-8, 7e-8; test_diff1 = true, nth_der = 1, - dertol = 1e-9) +regression_test(Vern6(), 7.0e-8, 7.0e-8; test_diff1 = true, nth_der = 1, dertol = 1.0e-9) +regression_test( + Vern6(lazy = false), 7.0e-8, 7.0e-8; test_diff1 = true, nth_der = 1, + dertol = 1.0e-9 +) prob = remake(prob_ode_bigfloatlinear; u0 = big(0.5)) sol = solve(prob, Vern6(), dt = 1 // 2^(2), dense = true) interpd_1d_big = sol(0:(1 // 2^(7)):1) sol2 = solve(prob, Vern6(), dt = 1 // 2^(7), dense = true, adaptive = false) -print_results(@test maximum(map((x) -> maximum(abs.(x)), sol2[:] - interpd_1d_big)) < 5e-8) +print_results(@test maximum(map((x) -> maximum(abs.(x)), sol2[:] - interpd_1d_big)) < 5.0e-8) -prob_ode_bigfloatveclinear = ODEProblem((u, p, t) -> p * u, [big(0.5)], (0.0, 1.0), - big(1.01)) +prob_ode_bigfloatveclinear = ODEProblem( + (u, p, t) -> p * u, [big(0.5)], (0.0, 1.0), + big(1.01) +) prob = prob_ode_bigfloatveclinear sol = solve(prob, Vern6(), dt = 1 // 2^(2), dense = true) interpd_big = sol(0:(1 // 2^(4)):1) sol2 = solve(prob, Vern6(), dt = 1 // 2^(4), dense = true, adaptive = false) -print_results(@test maximum(map((x) -> maximum(abs.(x)), sol2 - interpd_big)) < 5e-8) +print_results(@test maximum(map((x) -> maximum(abs.(x)), sol2 - interpd_big)) < 5.0e-8) # Vern7 -regression_test(Vern7(), 3e-9, 5e-9; test_diff1 = true, nth_der = 1, dertol = 1e-10) -regression_test(Vern7(lazy = false), 3e-9, 5e-9; test_diff1 = true, nth_der = 1, - dertol = 1e-10) +regression_test(Vern7(), 3.0e-9, 5.0e-9; test_diff1 = true, nth_der = 1, dertol = 1.0e-10) +regression_test( + Vern7(lazy = false), 3.0e-9, 5.0e-9; test_diff1 = true, nth_der = 1, + dertol = 1.0e-10 +) # Vern8 @test Vern8() == Vern8(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(Vern8(), 3e-8, 5e-8; test_diff1 = true, nth_der = 1, dertol = 1e-7) -regression_test(Vern8(lazy = false), 3e-8, 5e-8; test_diff1 = true, nth_der = 1, - dertol = 1e-7) +regression_test(Vern8(), 3.0e-8, 5.0e-8; test_diff1 = true, nth_der = 1, dertol = 1.0e-7) +regression_test( + Vern8(lazy = false), 3.0e-8, 5.0e-8; test_diff1 = true, nth_der = 1, + dertol = 1.0e-7 +) # Vern9 @test Vern9() == Vern9(OrdinaryDiffEqCore.trivial_limiter!) # old non-kwarg constructor -regression_test(Vern9(), 1e-9, 2e-9; test_diff1 = true, nth_der = 4, dertol = 5e-2) -regression_test(Vern9(lazy = false), 1e-9, 2e-9; test_diff1 = true, nth_der = 4, - dertol = 5e-2) +regression_test(Vern9(), 1.0e-9, 2.0e-9; test_diff1 = true, nth_der = 4, dertol = 5.0e-2) +regression_test( + Vern9(lazy = false), 1.0e-9, 2.0e-9; test_diff1 = true, nth_der = 4, + dertol = 5.0e-2 +) println("Rosenbrocks") # Rosenbrock23 -regression_test(Rosenbrock23(), 3e-3, 6e-3; test_diff1 = true, nth_der = 1, dertol = 1e-14) +regression_test(Rosenbrock23(), 3.0e-3, 6.0e-3; test_diff1 = true, nth_der = 1, dertol = 1.0e-14) # Rosenbrock32 -regression_test(Rosenbrock32(), 6e-4, 9e-4; test_diff1 = true, nth_der = 1, dertol = 1e-14) +regression_test(Rosenbrock32(), 6.0e-4, 9.0e-4; test_diff1 = true, nth_der = 1, dertol = 1.0e-14) # Rodas23W -regression_test(Rodas23W(), 2e-3, 4e-3, test_diff1 = true, nth_der = 1, dertol = 1e-14) +regression_test(Rodas23W(), 2.0e-3, 4.0e-3, test_diff1 = true, nth_der = 1, dertol = 1.0e-14) # Rodas3P -regression_test(Rodas3P(), 2e-4, 4e-4, test_diff1 = true, nth_der = 1, dertol = 1e-14) +regression_test(Rodas3P(), 2.0e-4, 4.0e-4, test_diff1 = true, nth_der = 1, dertol = 1.0e-14) # Rodas4 -regression_test(Rodas4(), 8.5e-6, 2e-5, test_diff1 = true, nth_der = 1, dertol = 1e-14) +regression_test(Rodas4(), 8.5e-6, 2.0e-5, test_diff1 = true, nth_der = 1, dertol = 1.0e-14) # Rodas42 -regression_test(Rodas42(), 3e-5, 6e-5, test_diff1 = true, nth_der = 1, dertol = 1e-14) +regression_test(Rodas42(), 3.0e-5, 6.0e-5, test_diff1 = true, nth_der = 1, dertol = 1.0e-14) # Rodas4P -regression_test(Rodas4P(), 4e-5, 6e-5, test_diff1 = true, nth_der = 1, dertol = 1e-13) +regression_test(Rodas4P(), 4.0e-5, 6.0e-5, test_diff1 = true, nth_der = 1, dertol = 1.0e-13) # Rodas4P2 -regression_test(Rodas4P2(), 2e-5, 3e-5, test_diff1 = true, nth_der = 1, dertol = 1e-13) +regression_test(Rodas4P2(), 2.0e-5, 3.0e-5, test_diff1 = true, nth_der = 1, dertol = 1.0e-13) # Rodas5 -regression_test(Rodas5(), 2e-6, 3e-6, test_diff1 = true, nth_der = 3, dertol = 5e-1) +regression_test(Rodas5(), 2.0e-6, 3.0e-6, test_diff1 = true, nth_der = 3, dertol = 5.0e-1) # Rodas5P -regression_test(Rodas5P(), 2e-5, 3e-5, test_diff1 = true, nth_der = 3, dertol = 5e-1) +regression_test(Rodas5P(), 2.0e-5, 3.0e-5, test_diff1 = true, nth_der = 3, dertol = 5.0e-1) # Rodas5Pe -regression_test(Rodas5Pe(), 2e-5, 3e-5, test_diff1 = true, nth_der = 3, dertol = 5e-1) +regression_test(Rodas5Pe(), 2.0e-5, 3.0e-5, test_diff1 = true, nth_der = 3, dertol = 5.0e-1) # Rodas5Pr -regression_test(Rodas5Pr(), 2e-5, 3e-5, test_diff1 = true, nth_der = 3, dertol = 5e-1) +regression_test(Rodas5Pr(), 2.0e-5, 3.0e-5, test_diff1 = true, nth_der = 3, dertol = 5.0e-1) # ExplicitRK -regression_test(ExplicitRK(), 7e-5, 2e-4) +regression_test(ExplicitRK(), 7.0e-5, 2.0e-4) prob = prob_ode_linear sol = solve(prob, ExplicitRK(), dt = 1 // 2^(2), dense = true) # inplace interp of solution sol(interpd_1d_long, 0:(1 // 2^(7)):1) sol2 = solve(prob, ExplicitRK(), dt = 1 // 2^(7), dense = true, adaptive = false) -print_results(@test maximum(map((x) -> maximum(abs.(x)), sol2 - interpd_1d_long)) < 6e-5) +print_results(@test maximum(map((x) -> maximum(abs.(x)), sol2 - interpd_1d_long)) < 6.0e-5) prob = prob_ode_2Dlinear sol = solve(prob, ExplicitRK(), dt = 1 // 2^(2), dense = true) sol(interpd, 0:(1 // 2^(4)):1) sol2 = solve(prob, ExplicitRK(), dt = 1 // 2^(4), dense = true, adaptive = false) -print_results(@test maximum(map((x) -> maximum(abs.(x)), sol2 - interpd)) < 2e-4) +print_results(@test maximum(map((x) -> maximum(abs.(x)), sol2 - interpd)) < 2.0e-4) diff --git a/test/regression/ode_inplace_tests.jl b/test/regression/ode_inplace_tests.jl index 59303b5df1..7aeb258743 100644 --- a/test/regression/ode_inplace_tests.jl +++ b/test/regression/ode_inplace_tests.jl @@ -1,9 +1,9 @@ using OrdinaryDiffEq, Test import ODEProblemLibrary: prob_ode_2Dlinear, - prob_ode_large2Dlinear, - prob_ode_linear, - prob_ode_2Dlinear_notinplace + prob_ode_large2Dlinear, + prob_ode_linear, + prob_ode_2Dlinear_notinplace u0 = rand(300, 20) .* ones(300, 20) / 2 prob = prob_ode_2Dlinear_notinplace @@ -21,18 +21,26 @@ alloc2 = @allocated sol2 = solve(prob2, Euler(), dt = 1 // 2^(6), save_everystep @test alloc2 <= alloc1 sol = solve(prob_ode_linear, Euler(), dt = 1 // 2^(6), save_everystep = true) -sol2 = solve(prob_ode_linear, Euler(), sol[:], sol.t, sol.k; dt = 1 // 2^(8), - save_everystep = true) +sol2 = solve( + prob_ode_linear, Euler(), sol[:], sol.t, sol.k; dt = 1 // 2^(8), + save_everystep = true +) sol = solve(prob_ode_large2Dlinear, Euler(), dt = 1 // 2^(6), save_everystep = true) -sol2 = solve(prob_ode_large2Dlinear, Euler(), sol[:], sol.t, sol.k; dt = 1 // 2^(8), - save_everystep = true) +sol2 = solve( + prob_ode_large2Dlinear, Euler(), sol[:], sol.t, sol.k; dt = 1 // 2^(8), + save_everystep = true +) sol = solve(prob_ode_large2Dlinear, Euler(), dt = 1 // 2^(6), save_everystep = true) -alloc1 = @allocated sol = solve(prob_ode_large2Dlinear, Euler(), dt = 1 // 2^(8), - save_everystep = true) -alloc2 = @allocated sol2 = solve(prob_ode_large2Dlinear, Euler(), sol[:], sol.t, sol.k; - dt = 1 // 2^(8), save_everystep = true) +alloc1 = @allocated sol = solve( + prob_ode_large2Dlinear, Euler(), dt = 1 // 2^(8), + save_everystep = true +) +alloc2 = @allocated sol2 = solve( + prob_ode_large2Dlinear, Euler(), sol[:], sol.t, sol.k; + dt = 1 // 2^(8), save_everystep = true +) @test alloc2 <= alloc1 diff --git a/test/regression/ode_unrolled_comparison_tests.jl b/test/regression/ode_unrolled_comparison_tests.jl index 28592ff89f..982012040c 100644 --- a/test/regression/ode_unrolled_comparison_tests.jl +++ b/test/regression/ode_unrolled_comparison_tests.jl @@ -1,9 +1,9 @@ using OrdinaryDiffEq, DiffEqDevTools, DiffEqBase, Test import ODEProblemLibrary: prob_ode_bigfloatlinear, - prob_ode_linear, - prob_ode_2Dlinear, - prob_ode_bigfloat2Dlinear + prob_ode_linear, + prob_ode_2Dlinear, + prob_ode_bigfloat2Dlinear probbig = prob_ode_bigfloat2Dlinear probnum = prob_ode_linear @@ -25,12 +25,12 @@ tabalg = ExplicitRK(tableau = constructBogakiShampine3()) sol1 = solve(probnum, BS3(), dt = 1 / 2^1, adaptive = false, save_everystep = false) sol2 = solve(probnum, tabalg, dt = 1 / 2^1, adaptive = false, save_everystep = false) -@test sol1.u[end] - sol2.u[end] < 1e-10 +@test sol1.u[end] - sol2.u[end] < 1.0e-10 sol1 = solve(prob, BS3(), dt = 1 / 2^1, adaptive = false, save_everystep = false) sol2 = solve(prob, tabalg, dt = 1 / 2^1, adaptive = false, save_everystep = false) -@test minimum(sol1.u[end] - sol2.u[end] .< 1e-10) +@test minimum(sol1.u[end] - sol2.u[end] .< 1.0e-10) sol1 = solve(prob, tabalg, dt = 1 / 2^6) sol2 = solve(prob, BS3(), dt = 1 / 2^6) @@ -51,12 +51,12 @@ tabalg = ExplicitRK(tableau = constructBogakiShampine5()) sol1 = solve(probnum, BS5(), dt = 1 / 2^6, adaptive = false, save_everystep = false) sol2 = solve(probnum, tabalg, dt = 1 / 2^6, adaptive = false, save_everystep = false) -@test sol1.u[end] - sol2.u[end] < 1e-10 +@test sol1.u[end] - sol2.u[end] < 1.0e-10 sol1 = solve(prob, BS5(), dt = 1 / 2^3, adaptive = false, save_everystep = false) sol2 = solve(prob, tabalg, dt = 1 / 2^3, adaptive = false, save_everystep = false) -@test minimum(sol1.u[end] - sol2.u[end] .< 1e-10) +@test minimum(sol1.u[end] - sol2.u[end] .< 1.0e-10) sol1 = solve(prob, tabalg, dt = 1 / 2^6) sol2 = solve(prob, BS5(), dt = 1 / 2^6) @@ -78,12 +78,12 @@ tabalg = ExplicitRK(tableau = constructTsitouras5()) sol1 = solve(probnum, Tsit5(), dt = 1 / 2^6, adaptive = false, save_everystep = false) sol2 = solve(probnum, tabalg, dt = 1 / 2^6, adaptive = false, save_everystep = false) -@test sol1.u[end] - sol2.u[end] < 1e-10 +@test sol1.u[end] - sol2.u[end] < 1.0e-10 sol1 = solve(prob, Tsit5(), dt = 1 / 2^3, adaptive = false, save_everystep = false) sol2 = solve(prob, tabalg, dt = 1 / 2^3, adaptive = false, save_everystep = false) -@test minimum(sol1.u[end] - sol2.u[end] .< 1e-10) +@test minimum(sol1.u[end] - sol2.u[end] .< 1.0e-10) sol1 = solve(prob, tabalg, dt = 1 / 2^6) sol2 = solve(prob, Tsit5(), dt = 1 / 2^6) @@ -105,12 +105,12 @@ tabalg = ExplicitRK(tableau = constructVernerEfficient6(BigFloat)) sol1 = solve(probnumbig, Vern6(), dt = 1 / 2^6, adaptive = false, save_everystep = false) sol2 = solve(probnumbig, tabalg, dt = 1 / 2^6, adaptive = false, save_everystep = false) -@test sol1.u[end] - sol2.u[end] < 1e-10 +@test sol1.u[end] - sol2.u[end] < 1.0e-10 sol1 = solve(probbig, Vern6(), dt = 1 / 2^3, adaptive = false, save_everystep = false) sol2 = solve(probbig, tabalg, dt = 1 / 2^3, adaptive = false, save_everystep = false) -@test minimum(sol1.u[end] - sol2.u[end] .< 1e-10) +@test minimum(sol1.u[end] - sol2.u[end] .< 1.0e-10) sol1 = solve(probbig, tabalg, dt = 1 / 2^6) sol2 = solve(probbig, Vern6(), dt = 1 / 2^6) @@ -132,12 +132,12 @@ tabalg = ExplicitRK(tableau = constructVerner7(BigFloat)) sol1 = solve(probnumbig, Vern7(), dt = 1 / 2^6, adaptive = false, save_everystep = false) sol2 = solve(probnumbig, tabalg, dt = 1 / 2^6, adaptive = false, save_everystep = false) -@test sol1.u[end] - sol2.u[end] < 1e-10 +@test sol1.u[end] - sol2.u[end] < 1.0e-10 sol1 = solve(probbig, Vern7(), dt = 1 / 2^3, adaptive = false, save_everystep = false) sol2 = solve(probbig, tabalg, dt = 1 / 2^3, adaptive = false, save_everystep = false) -@test minimum(sol1.u[end] - sol2.u[end] .< 1e-10) +@test minimum(sol1.u[end] - sol2.u[end] .< 1.0e-10) sol1 = solve(probbig, tabalg, dt = 1 / 2^6) sol2 = solve(probbig, Vern7(), dt = 1 / 2^6) @@ -159,13 +159,13 @@ tabalg = ExplicitRK(tableau = constructTanakaYamashitaEfficient7(Float64)) sol1 = solve(probnum, TanYam7(), dt = 1 / 2^6, adaptive = false, save_everystep = false) sol2 = solve(probnum, tabalg, dt = 1 / 2^6, adaptive = false, save_everystep = false) -@test sol1.u[end] - sol2.u[end] < 2e-9 +@test sol1.u[end] - sol2.u[end] < 2.0e-9 tabalg = ExplicitRK(tableau = constructTanakaYamashitaEfficient7(BigFloat)) sol1 = solve(probbig, TanYam7(), dt = 1 / 2^3, adaptive = false, save_everystep = false) sol2 = solve(probbig, tabalg, dt = 1 / 2^3, adaptive = false, save_everystep = false) -@test minimum(sol1.u[end] - sol2.u[end] .< 1e-10) +@test minimum(sol1.u[end] - sol2.u[end] .< 1.0e-10) sol1 = solve(prob, tabalg, dt = 1 / 2^6) sol2 = solve(prob, TanYam7(), dt = 1 / 2^6) @@ -187,12 +187,12 @@ tabalg = ExplicitRK(tableau = constructVerner8(BigFloat)) sol1 = solve(probnumbig, Vern8(), dt = 1 / 2^6, adaptive = false, save_everystep = false) sol2 = solve(probnumbig, tabalg, dt = 1 / 2^6, adaptive = false, save_everystep = false) -@test sol1.u[end] - sol2.u[end] < 1e-10 +@test sol1.u[end] - sol2.u[end] < 1.0e-10 sol1 = solve(probbig, Vern8(), dt = 1 / 2^3, adaptive = false, save_everystep = false) sol2 = solve(probbig, tabalg, dt = 1 / 2^3, adaptive = false, save_everystep = false) -@test minimum(sol1.u[end] - sol2.u[end] .< 1e-10) +@test minimum(sol1.u[end] - sol2.u[end] .< 1.0e-10) sol1 = solve(prob, tabalg, dt = 1 / 2^6) sol2 = solve(prob, Vern8(), dt = 1 / 2^6) @@ -214,12 +214,12 @@ tabalg = ExplicitRK(tableau = constructTsitourasPapakostas8(BigFloat)) sol1 = solve(probnumbig, TsitPap8(), dt = 1 / 2^6, adaptive = false, save_everystep = false) sol2 = solve(probnumbig, tabalg, dt = 1 / 2^6, adaptive = false, save_everystep = false) -@test sol1.u[end] - sol2.u[end] < 1e-10 +@test sol1.u[end] - sol2.u[end] < 1.0e-10 sol1 = solve(probbig, TsitPap8(), dt = 1 / 2^3, adaptive = false, save_everystep = false) sol2 = solve(probbig, tabalg, dt = 1 / 2^3, adaptive = false, save_everystep = false) -@test minimum(sol1.u[end] - sol2.u[end] .< 1e-10) +@test minimum(sol1.u[end] - sol2.u[end] .< 1.0e-10) sol1 = solve(prob, tabalg, dt = 1 / 2^6) sol2 = solve(prob, TsitPap8(), dt = 1 / 2^6) @@ -241,12 +241,12 @@ tabalg = ExplicitRK(tableau = constructVernerEfficient9(BigFloat)) sol1 = solve(probnumbig, Vern9(), dt = 1 / 2^6, adaptive = false, save_everystep = false) sol2 = solve(probnumbig, tabalg, dt = 1 / 2^6, adaptive = false, save_everystep = false) -@test abs.(sol1.u[end] - sol2.u[end]) < 1e-15 +@test abs.(sol1.u[end] - sol2.u[end]) < 1.0e-15 sol1 = solve(probbig, Vern9(), dt = 1 / 2^3, adaptive = false, save_everystep = false) sol2 = solve(probbig, tabalg, dt = 1 / 2^3, adaptive = false, save_everystep = false) -@test minimum(abs.(sol1.u[end] - sol2.u[end]) .< 1e-15) +@test minimum(abs.(sol1.u[end] - sol2.u[end]) .< 1.0e-15) sol1 = solve(probbig, tabalg, dt = 1 / 2^6) sol2 = solve(probbig, Vern9(), dt = 1 / 2^6) diff --git a/test/regression/psos_and_energy_conservation.jl b/test/regression/psos_and_energy_conservation.jl index 537c08bf7f..d89abce6c2 100644 --- a/test/regression/psos_and_energy_conservation.jl +++ b/test/regression/psos_and_energy_conservation.jl @@ -13,7 +13,7 @@ H = η * (A + A') - 1.0im * κ * A' * A u0 = zeros(ComplexF64, Nc + 1) u0[1] = 1.0 function f_psos(du, u, t, p) - du .= -1.0im * H * u + return du .= -1.0im * H * u end # Callback @@ -25,7 +25,7 @@ function dojump(integrator) t = integrator.t x .= normalize(A * x) - jumpnorm[] = rand(rng) + return jumpnorm[] = rand(rng) end cb = ContinuousCallback(djumpnorm, dojump) @@ -37,8 +37,10 @@ Ntraj = 100 for i in 1:Ntraj rng = MersenneTwister(rand(UInt)) # Tweaking tolerances and dtmax also is not reliable - sol = solve(prob, DP5(), save_everystep = true, callback = cb, - abstol = 1e-8, reltol = 1e-6, dtmax = 10) + sol = solve( + prob, DP5(), save_everystep = true, callback = cb, + abstol = 1.0e-8, reltol = 1.0e-6, dtmax = 10 + ) push!(sol_tot, sol) end @@ -84,24 +86,28 @@ end const E = Hhh(u0) function ghh(resid, u, p) - resid[1] = -Hhh(u[1], u[2], u[3], u[4]) + E + return resid[1] = -Hhh(u[1], u[2], u[3], u[4]) + E end # energy conserving callback: # important to use save = false, I don't want rescaling points -cb = ManifoldProjection(ghh, resid_prototype = ones(1), nlsolve = TrustRegion(), abstol = 1e-9, save = false, autodiff = AutoForwardDiff()) +cb = ManifoldProjection(ghh, resid_prototype = ones(1), nlsolve = TrustRegion(), abstol = 1.0e-9, save = false, autodiff = AutoForwardDiff()) # Callback for Poincare surface of section -function psos_callback(j, direction = +1, offset::Real = 0, - callback_kwargs = Dict{Symbol, Any}(:abstol => 1e-9)) +function psos_callback( + j, direction = +1, offset::Real = 0, + callback_kwargs = Dict{Symbol, Any}(:abstol => 1.0e-9) + ) # Prepare callback: s = sign(direction) cond = (u, t, integrator) -> s * (u - offset) affect! = (integrator) -> nothing - cb = SciMLBase.ContinuousCallback(cond, nothing, affect!; callback_kwargs..., - save_positions = (true, false), idxs = j) + return cb = SciMLBase.ContinuousCallback( + cond, nothing, affect!; callback_kwargs..., + save_positions = (true, false), idxs = j + ) end # with this callback, the saved values of variable 1 should be zero @@ -112,7 +118,7 @@ totalcb = CallbackSet(poincarecb, cb) prob = ODEProblem(hheom!, u0, (0.0, 100.0), callback = totalcb) extra_kw = Dict(:save_start => false, :save_end => false) -DEFAULT_DIFFEQ_KWARGS = Dict{Symbol, Any}(:abstol => 1e-10, :reltol => 1e-10) +DEFAULT_DIFFEQ_KWARGS = Dict{Symbol, Any}(:abstol => 1.0e-10, :reltol => 1.0e-10) sol = solve(prob, Vern9(); extra_kw..., DEFAULT_DIFFEQ_KWARGS..., save_everystep = false) @@ -121,7 +127,7 @@ Eerror = maximum(@. abs(E - Es)) a = sol[1, :] -@test Eerror < 1e-10 +@test Eerror < 1.0e-10 for el in a - @test abs(el) < 1e-10 + @test abs(el) < 1.0e-10 end diff --git a/test/regression/special_interps.jl b/test/regression/special_interps.jl index 535e4615a8..06478216ab 100644 --- a/test/regression/special_interps.jl +++ b/test/regression/special_interps.jl @@ -2,29 +2,33 @@ using OrdinaryDiffEq, Test, LinearAlgebra function f(du, u, p, t) du[1] = dx = p[1] * u[1] - p[2] * u[1] * u[2] - du[2] = dy = -p[3] * u[2] + p[4] * u[1] * u[2] + return du[2] = dy = -p[3] * u[2] + p[4] * u[1] * u[2] end function foop(u, p, t) dx = p[1] * u[1] - p[2] * u[1] * u[2] dy = -p[3] * u[2] + p[4] * u[1] * u[2] - [dx, dy] + return [dx, dy] end p = [1.5, 1.0, 3.0, 1.0] prob = ODEProblem(f, [1.0; 1.0], (0.0, 10.0), p) proboop = ODEProblem(foop, [1.0; 1.0], (0.0, 10.0), p) -SPECIAL_INTERPS = [Tsit5(), DP5(), SSPRK22(), OwrenZen3(), OwrenZen4(), OwrenZen5(), +SPECIAL_INTERPS = [ + Tsit5(), DP5(), SSPRK22(), OwrenZen3(), OwrenZen4(), OwrenZen5(), BS5(), Vern6(), Vern7(), Vern8(), Vern9(), DP8(), Rosenbrock23(), - Rodas4(), Rodas5()] + Rodas4(), Rodas5(), +] y1 = zeros(2); y2 = zeros(2); for alg in SPECIAL_INTERPS @show alg - sol = solve(prob, alg, dt = 0.0033, abstol = 1e-14, reltol = 1e-14) - soloop = solve(proboop, alg, adaptive = false, tstops = sol.t, abstol = 1e-14, - reltol = 1e-14) - @test maximum(norm(soloop(t) - sol(t)) for t in 0:0.001:10) < 1e-10 - @test maximum(norm(soloop(y1, t) - sol(y2, t)) for t in 0:0.001:10) < 1e-10 + sol = solve(prob, alg, dt = 0.0033, abstol = 1.0e-14, reltol = 1.0e-14) + soloop = solve( + proboop, alg, adaptive = false, tstops = sol.t, abstol = 1.0e-14, + reltol = 1.0e-14 + ) + @test maximum(norm(soloop(t) - sol(t)) for t in 0:0.001:10) < 1.0e-10 + @test maximum(norm(soloop(y1, t) - sol(y2, t)) for t in 0:0.001:10) < 1.0e-10 end diff --git a/test/runtests.jl b/test/runtests.jl index 49aebaf189..9101dcbeec 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -8,31 +8,31 @@ const is_APPVEYOR = Sys.iswindows() && haskey(ENV, "APPVEYOR") function activate_downstream_env() Pkg.activate("downstream") Pkg.develop(PackageSpec(path = dirname(@__DIR__))) - Pkg.instantiate() + return Pkg.instantiate() end function activate_gpu_env() Pkg.activate("gpu") Pkg.develop(PackageSpec(path = dirname(@__DIR__))) - Pkg.instantiate() + return Pkg.instantiate() end function activate_odeinterface_env() Pkg.activate("odeinterface") Pkg.develop(PackageSpec(path = dirname(@__DIR__))) - Pkg.instantiate() + return Pkg.instantiate() end function activate_enzyme_env() Pkg.activate("enzyme") Pkg.develop(PackageSpec(path = dirname(@__DIR__))) - Pkg.instantiate() + return Pkg.instantiate() end function activate_modelingtoolkit_env() Pkg.activate("modelingtoolkit") Pkg.develop(PackageSpec(path = dirname(@__DIR__))) - Pkg.instantiate() + return Pkg.instantiate() end #Start Test Script @@ -40,7 +40,7 @@ end @time begin if contains(GROUP, "OrdinaryDiffEq") || GROUP == "ImplicitDiscreteSolve" || GROUP == "SimpleImplicitDiscreteSolve" Pkg.activate(joinpath(dirname(@__DIR__), "lib", GROUP)) - Pkg.test(GROUP, julia_args=["--check-bounds=auto", "--compiled-modules=yes", "--depwarn=yes"], force_latest_compatible_version=false, allow_reresolve=true) + Pkg.test(GROUP, julia_args = ["--check-bounds=auto", "--compiled-modules=yes", "--depwarn=yes"], force_latest_compatible_version = false, allow_reresolve = true) elseif GROUP == "All" || GROUP == "InterfaceI" || GROUP == "Interface" @time @safetestset "Discrete Algorithm Tests" include("interface/discrete_algorithm_test.jl") @time @safetestset "Null u0 Callbacks Tests" include("interface/null_u0_callbacks_test.jl") @@ -110,7 +110,7 @@ end end if !is_APPVEYOR && - (GROUP == "All" || GROUP == "Integrators_I" || GROUP == "Integrators") + (GROUP == "All" || GROUP == "Integrators_I" || GROUP == "Integrators") @time @safetestset "Reinit Tests" include("integrators/reinit_test.jl") @time @safetestset "Events Tests" include("integrators/ode_event_tests.jl") @time @safetestset "Alg Events Tests" include("integrators/alg_events_tests.jl") @@ -125,7 +125,7 @@ end end if !is_APPVEYOR && - (GROUP == "All" || GROUP == "Integrators_II" || GROUP == "Integrators") + (GROUP == "All" || GROUP == "Integrators_II" || GROUP == "Integrators") @time @safetestset "Reverse Directioned Event Tests" include("integrators/rev_events_tests.jl") @time @safetestset "Differentiation Direction Tests" include("integrators/diffdir_tests.jl") @time @safetestset "Resize Tests" include("integrators/resize_tests.jl") @@ -198,8 +198,12 @@ end activate_gpu_env() @time @safetestset "Simple GPU" begin import OrdinaryDiffEqCore - include(joinpath(dirname(pathof(OrdinaryDiffEqCore.DiffEqBase)), "..", - "test/gpu/simple_gpu.jl")) + include( + joinpath( + dirname(pathof(OrdinaryDiffEqCore.DiffEqBase)), "..", + "test/gpu/simple_gpu.jl" + ) + ) end @time @safetestset "Autoswitch GPU" include("gpu/autoswitch.jl") @time @safetestset "Linear LSRK GPU" include("gpu/linear_lsrk.jl")