@@ -2,7 +2,7 @@ __precompile__(false)
22
33module SDEProblemLibrary
44
5- using DiffEqBase, Catalyst, Markdown
5+ using DiffEqBase, Markdown
66
77import RuntimeGeneratedFunctions
88RuntimeGeneratedFunctions. init (@__MODULE__ )
@@ -493,24 +493,83 @@ Stochastic Brusselator
493493prob_sde_bruss = SDEProblem (bruss_f, bruss_g, [3.0 , 2.0 ], (0.0 , 100.0 ), p,
494494 noise_rate_prototype = zeros (2 , 4 ))
495495
496- network = @reaction_network begin
497- @parameters p1= 0.01 p2= 3.0 p3= 3.0 p4= 4.5 p5= 2.0 p6= 15.0 p7= 20.0 p8= 0.005 p9= 0.01 p10= 0.05
498- p1, (X, Y, Z) --> 0
499- hill (X, p2, 100.0 , - 4 ), 0 --> Y
500- hill (Y, p3, 100.0 , - 4 ), 0 --> Z
501- hill (Z, p4, 100.0 , - 4 ), 0 --> X
502- hill (X, p5, 100.0 , 6 ), 0 --> R
503- hill (Y, p6, 100.0 , 4 ) * 0.002 , R --> 0
504- p7, 0 --> S
505- R * p8, S --> SP
506- p9, SP + SP --> SP2
507- p10, SP2 --> 0
496+ # Hill function helper
497+ hill (x, k, n, h) = h > 0 ? (x/ k)^ n / (1 + (x/ k)^ n) : 1 / (1 + (x/ k)^ abs (n))
498+
499+ function oscilreact_drift (du, u, p, t)
500+ X, Y, Z, R, S, SP, SP2 = u
501+ p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 = p
502+
503+ # Reaction rates based on the original network
504+ # p1, (X, Y, Z) --> 0
505+ r1 = p1
506+ # hill(X, p2, 100.0, -4), 0 --> Y
507+ r2 = hill (X, p2, 100.0 , - 4 )
508+ # hill(Y, p3, 100.0, -4), 0 --> Z
509+ r3 = hill (Y, p3, 100.0 , - 4 )
510+ # hill(Z, p4, 100.0, -4), 0 --> X
511+ r4 = hill (Z, p4, 100.0 , - 4 )
512+ # hill(X, p5, 100.0, 6), 0 --> R
513+ r5 = hill (X, p5, 100.0 , 6 )
514+ # hill(Y, p6, 100.0, 4) * 0.002, R --> 0
515+ r6 = hill (Y, p6, 100.0 , 4 ) * 0.002
516+ # p7, 0 --> S
517+ r7 = p7
518+ # R * p8, S --> SP
519+ r8 = R * p8
520+ # p9, SP + SP --> SP2
521+ r9 = p9
522+ # p10, SP2 --> 0
523+ r10 = p10
524+
525+ # Deterministic rates (drift terms)
526+ du[1 ] = - r1 * X + r4 # X: degradation + production from Z
527+ du[2 ] = - r1 * Y + r2 # Y: degradation + production from X
528+ du[3 ] = - r1 * Z + r3 # Z: degradation + production from Y
529+ du[4 ] = r5 - r6 * R # R: production from X - consumption
530+ du[5 ] = r7 - r8 * S # S: production - consumption to SP
531+ du[6 ] = r8 * S - 2 * r9 * SP^ 2 # SP: production from S - dimerization
532+ du[7 ] = r9 * SP^ 2 - r10 * SP2 # SP2: production from SP - degradation
533+ end
534+
535+ function oscilreact_diffusion (du, u, p, t)
536+ X, Y, Z, R, S, SP, SP2 = u
537+ p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 = p
538+
539+ # Same reaction rates as drift
540+ r1 = p1
541+ r2 = hill (X, p2, 100.0 , - 4 )
542+ r3 = hill (Y, p3, 100.0 , - 4 )
543+ r4 = hill (Z, p4, 100.0 , - 4 )
544+ r5 = hill (X, p5, 100.0 , 6 )
545+ r6 = hill (Y, p6, 100.0 , 4 ) * 0.002
546+ r7 = p7
547+ r8 = R * p8
548+ r9 = p9
549+ r10 = p10
550+
551+ # Stochastic terms (square root of rates for chemical Langevin)
552+ du[1 ] = sqrt (abs (r1 * X + r4))
553+ du[2 ] = sqrt (abs (r1 * Y + r2))
554+ du[3 ] = sqrt (abs (r1 * Z + r3))
555+ du[4 ] = sqrt (abs (r5 + r6 * R))
556+ du[5 ] = sqrt (abs (r7 + r8 * S))
557+ du[6 ] = sqrt (abs (r8 * S + 2 * r9 * SP^ 2 ))
558+ du[7 ] = sqrt (abs (r9 * SP^ 2 + r10 * SP2))
508559end
509560
510561"""
511562An oscillatory chemical reaction system
563+
564+ Chemical oscillator with hill function regulation. The system has 7 species:
565+ X, Y, Z (main oscillatory species), R (regulator), S (substrate), SP (single phosphorylated),
566+ SP2 (double phosphorylated).
567+
568+ Parameters: p1=0.01, p2=3.0, p3=3.0, p4=4.5, p5=2.0, p6=15.0, p7=20.0, p8=0.005, p9=0.01, p10=0.05
569+ Initial conditions: [X=200.0, Y=60.0, Z=120.0, R=100.0, S=50.0, SP=50.0, SP2=50.0]
512570"""
513- prob_sde_oscilreact = SDEProblem (network, [200.0 , 60.0 , 120.0 , 100.0 , 50.0 , 50.0 , 50.0 ],
514- (0.0 , 4000.0 ), eval_module = @__MODULE__ )
571+ prob_sde_oscilreact = SDEProblem (oscilreact_drift, oscilreact_diffusion,
572+ [200.0 , 60.0 , 120.0 , 100.0 , 50.0 , 50.0 , 50.0 ], (0.0 , 4000.0 ),
573+ [0.01 , 3.0 , 3.0 , 4.5 , 2.0 , 15.0 , 20.0 , 0.005 , 0.01 , 0.05 ])
515574
516575end # module
0 commit comments