File: Oregonator.schelp

package info (click to toggle)
supercollider-sc3-plugins 3.7.1~repack-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 14,332 kB
  • ctags: 11,704
  • sloc: cpp: 140,180; lisp: 14,746; ansic: 2,133; xml: 86; makefile: 82; haskell: 21; sh: 8
file content (66 lines) | stat: -rw-r--r-- 1,911 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
class:: Oregonator			
summary:: Chemical reaction modelling Oscillator
categories:: UGens>Generators>Chaotic
//SLUGens released under the GNU GPL as extensions for SuperCollider 3, by Nick Collins, http://composerprogrammer.com/index.html
keyword:: SLUGens


Description::
Euler ODE solver implementation of the Oregonator equations (http://www.scholarpedia.org/article/Oregonator).  

x' = epsilon* (q*y  - x*y + x*(1-x) ) 
y' = mu* (-q*y -x*y +z)
z' = x-y

All inputs can have .kr rate UGens plugged in.

The Oregonator can blow up, treat with caution. 

classmethods::

method::ar


argument::reset
If > 0.0, restart with new initial conditions sampled from initx, inity, initz
argument::rate
update rate for a sample step
argument::epsilon
equation constant
argument::mu
equation constant
argument::q
equation constant
argument::initx
reset value for x
argument::inity
reset value for y
argument::initz
reset value for z



Examples::

code::
//hits fixed points too quickly
{Out.ar(0,Pan2.ar(0.1*Oregonator.ar(Impulse.kr(10),MouseX.kr(0.01,1,'exponential')),0.0))}.play


{Out.ar(0,Oregonator.ar(Impulse.kr(100),0.1, 0.1, 0.5, 0.2,initx:0.1, inity:-0.5, initz:0.7))}.plot(0.1)


{Out.ar(0,Pan2.ar(0.1*Oregonator.ar(Impulse.kr(100),0.1, 0.1, 0.5, 0.2,initx:0.1, inity:-0.5, initz:MouseX.kr)[0],0.0))}.play


{Out.ar(0,Pan2.ar(0.1*Oregonator.ar(Impulse.kr(MouseX.kr(100,1000)),0.1, 0.2, 0.5, 0.2,initx:MouseY.kr, inity:-0.5, initz:0.5)[0],0.0))}.play


{Out.ar(0,Pan2.ar(0.1*Oregonator.ar(Impulse.kr(MouseX.kr(10,1000,'exponential')),0.3, 0.1,0.1, 0.2,initx:MouseY.kr(0.1,1.0), inity:-0.5, initz:0.5)[0],0.0))}.play


{Out.ar(0,Pan2.ar(0.1*Oregonator.ar(Impulse.kr(MouseX.kr(100,1000)),0.1, 0.2, 0.5, 0.2,initx:MouseY.kr, inity:-0.5, initz:0.5)[1],0.0))}.play


{Out.ar(0,Pan2.ar(0.1*Mix(Oregonator.ar(Impulse.kr(MouseX.kr(10,1000)),0.1, 0.2, 0.5, 0.2,initx:MouseY.kr, inity:-0.5, initz:0.5)),0.0))}.play
::