-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbp2_kuramoto.py
executable file
·54 lines (44 loc) · 1.66 KB
/
bp2_kuramoto.py
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
#!/usr/bin/python
#
# Two Brownian particles interacting via a Kuromoto-like potential.
#
import math
import numpy
import sde
import sympy
def init_vector(sdei, i):
if i == 0:
return numpy.random.uniform(0.0, 2.0 * numpy.pi, sdei.num_threads)
else:
return numpy.random.uniform(0.0, 2.0 * numpy.pi, sdei.num_threads)
sim_params = {'f1': 'constant force on the 1st particle',
'f2': 'constant force on the 2nd particle',
'gam1': 'damping for the 1st particle',
'gam2': 'damping for the 2nd particle',
'is': 'interaction strength',
'd0': 'noise strength',
'amp': 'AC drive amplitude'}
local_vars = {
'ns0': lambda sdei: sympy.sqrt(sdei.S.d0 * sdei.S.dt * 2.0 / sdei.S.gam1),
'ns1': lambda sdei: sympy.sqrt(sdei.S.d0 * sdei.S.dt * 2.0 / sdei.S.gam2),
}
const_pars = {
'phi0': lambda sdei: numpy.random.uniform(0.0, 2.0 * numpy.pi, sdei.num_threads)
}
code = """
dx0 = (is * sinf(x0 - x1) + f1 + amp * cosf(t + phi0)) / gam1;
dx1 = (-is * sinf(x0 - x1) + f2) / gam2;
"""
ns_map = {0: ['ns0', 0], 1: [0, 'ns1']}
period_map = {0: sde.PeriodInfo(period=2.0 * math.pi, freq=1.0)}
sdei = sde.SDE(code, sim_params, num_vars=2, num_noises=2, noise_map=ns_map, period_map=period_map,
local_vars=local_vars, const_pars=const_pars)
output = {'path': {
'main': [sde.OutputDecl(func=sde.avg_moments, vars=[0, 1])],
},
'summary': {
'main': [sde.OutputDecl(func=sde.drift_velocity, vars=[0, 1])],
}
}
sdei.prepare(sde.SRK2, init_vector)
sdei.simulate(output, block_size=128)