301301# basic VariableRateJump test
302302let
303303 N = 1000 # number of simulations for testing solve accuracy
304- Random. seed! (rng, 1111 )
304+ Random. seed! (rng, 1111 )
305305 @variables A (t) B (t) C (t)
306306 @parameters k
307307 vrj = VariableRateJump (k * (sin (t) + 1 ), [A ~ A + 1 , C ~ C + 2 ])
@@ -425,17 +425,19 @@ end
425425
426426# PDMP test
427427let
428- Random. seed! (rng, 1111 )
428+ Random. seed! (rng, 1111 )
429429 @variables X (t) Y (t)
430430 @parameters k1 k2
431431 vrj1 = VariableRateJump (k1 * X, [X ~ X - 1 ]; save_positions = (false , false ))
432432 vrj2 = VariableRateJump (k1, [Y ~ Y + 1 ]; save_positions = (false , false ))
433- eqs = [D (X) ~ k2, D (Y) ~ - k2/ 10 * Y]
433+ eqs = [D (X) ~ k2, D (Y) ~ - k2 / 10 * Y]
434434 @named jsys = JumpSystem ([vrj1, vrj2, eqs[1 ], eqs[2 ]], t, [X, Y], [k1, k2])
435435 jsys = complete (jsys)
436- X0 = 0.0 ; Y0 = 0.0
436+ X0 = 0.0
437+ Y0 = 0.0
437438 u0 = [X => X0, Y => Y0]
438- k1val = 1.0 ; k2val = 20.0
439+ k1val = 1.0
440+ k2val = 20.0
439441 p = [k1 => k1val, k2 => k2val]
440442 tspan = (0.0 , 10.0 )
441443 oprob = ODEProblem (jsys, u0, tspan, p)
@@ -447,27 +449,30 @@ let
447449 Yv = zeros (length (times))
448450 for n in 1 : Nsims
449451 sol = solve (jprob, Tsit5 (); saveat = times)
450- Xv .+ = sol[1 ,:]
451- Yv .+ = sol[2 ,:]
452+ Xv .+ = sol[1 , :]
453+ Yv .+ = sol[2 , :]
452454 end
453- Xv ./= Nsims; Yv ./= Nsims;
455+ Xv ./= Nsims
456+ Yv ./= Nsims
454457
455458 Xact (t) = X0 * exp (- k1val * t) + (k2val / k1val) * (1 - exp (- k1val * t))
456- Yact (t) = Y0 * exp (- k2val/ 10 * t) + (k1val / (k2val/ 10 )) * (1 - exp (- k2val/ 10 * t))
459+ function Yact (t)
460+ Y0 * exp (- k2val / 10 * t) + (k1val / (k2val / 10 )) * (1 - exp (- k2val / 10 * t))
461+ end
457462 @test all (abs .(Xv .- Xact .(times)) .<= 0.05 .* Xv)
458- @test all (abs .(Yv .- Yact .(times)) .<= 0.1 .* Yv)
463+ @test all (abs .(Yv .- Yact .(times)) .<= 0.1 .* Yv)
459464end
460465
461466# that mixes ODEs and jump types, and then contin events
462467let
463- Random. seed! (rng, 1111 )
468+ Random. seed! (rng, 1111 )
464469 @variables X (t) Y (t)
465470 @parameters α β
466471 vrj = VariableRateJump (β * X, [X ~ X - 1 ]; save_positions = (false , false ))
467- crj = ConstantRateJump (β* Y, [Y ~ Y - 1 ])
472+ crj = ConstantRateJump (β * Y, [Y ~ Y - 1 ])
468473 maj = MassActionJump (α, [0 => 1 ], [Y => 1 ])
469- eqs = [D (X) ~ α* (1 + Y)]
470- @named jsys = JumpSystem ([maj, crj, vrj, eqs[1 ]], t, [X, Y], [α, β])
474+ eqs = [D (X) ~ α * (1 + Y)]
475+ @named jsys = JumpSystem ([maj, crj, vrj, eqs[1 ]], t, [X, Y], [α, β])
471476 jsys = complete (jsys)
472477 p = (α = 6.0 , β = 2.0 , X₀ = 2.0 , Y₀ = 1.0 )
473478 u0map = [X => p. X₀, Y => p. Y₀]
@@ -481,32 +486,34 @@ let
481486 Yv = zeros (length (times))
482487 for n in 1 : Nsims
483488 sol = solve (jprob, Tsit5 (); saveat = times)
484- Xv .+ = sol[1 ,:]
485- Yv .+ = sol[2 ,:]
489+ Xv .+ = sol[1 , :]
490+ Yv .+ = sol[2 , :]
486491 end
487- Xv ./= Nsims; Yv ./= Nsims;
492+ Xv ./= Nsims
493+ Yv ./= Nsims
488494
489495 function Yf (t, p)
490496 local α, β, X₀, Y₀ = p
491497 return (α / β) + (Y₀ - α / β) * exp (- β * t)
492498 end
493499 function Xf (t, p)
494500 local α, β, X₀, Y₀ = p
495- return (α / β) + (α^ 2 / β^ 2 ) + α * (Y₀ - α / β) * t * exp (- β * t) + (X₀ - α / β - α^ 2 / β^ 2 ) * exp (- β * t)
501+ return (α / β) + (α^ 2 / β^ 2 ) + α * (Y₀ - α / β) * t * exp (- β * t) +
502+ (X₀ - α / β - α^ 2 / β^ 2 ) * exp (- β * t)
496503 end
497- Xact = [Xf (t,p) for t in times]
498- Yact = [Yf (t,p) for t in times]
504+ Xact = [Xf (t, p) for t in times]
505+ Yact = [Yf (t, p) for t in times]
499506 @test all (abs .(Xv .- Xact) .<= 0.05 .* Xv)
500- @test all (abs .(Yv .- Yact) .<= 0.05 .* Yv)
501-
507+ @test all (abs .(Yv .- Yact) .<= 0.05 .* Yv)
508+
502509 function affect! (integ, u, p, ctx)
503510 savevalues! (integ, true )
504511 terminate! (integ)
505512 nothing
506513 end
507- cevents = [t ~ .2 ] => (affect!, [], [], [], nothing )
508- @named jsys = JumpSystem ([maj, crj, vrj, eqs[1 ]], t, [X, Y], [α, β];
509- continuous_events = cevents)
514+ cevents = [t ~ 0 .2 ] => (affect!, [], [], [], nothing )
515+ @named jsys = JumpSystem ([maj, crj, vrj, eqs[1 ]], t, [X, Y], [α, β];
516+ continuous_events = cevents)
510517 jsys = complete (jsys)
511518 tspan = (0.0 , 200.0 )
512519 oprob = ODEProblem (jsys, u0map, tspan, pmap)
516523 for n in 1 : Nsims
517524 sol = solve (jprob, Tsit5 (), saveat = tspan[2 ])
518525 @test sol. retcode == ReturnCode. Terminated
519- Xsamp += sol[1 ,end ]
526+ Xsamp += sol[1 , end ]
520527 end
521528 Xsamp /= Nsims
522- @test abs (Xsamp - Xf (.2 ,p) < .05 * Xf (.2 ,p))
523- end
529+ @test abs (Xsamp - Xf (0 .2 , p) < 0 .05 * Xf (0 .2 , p))
530+ end
0 commit comments