-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscenario_grille_contours.py
36 lines (28 loc) · 1.31 KB
/
scenario_grille_contours.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
#!/usr/bin/env python
# -*- coding: utf8 -*-
"""
Dans une grille en tore (pacman) privilégie les co-circulrités en évitant les co-linéarités
Short-range pour donner des patterns locaux
"""
import sys
if len(sys.argv)>1: mode = sys.argv[1]
else: mode = 'both'
import elasticite as el
import numpy as np
class EdgeGrid(el.EdgeGrid):
def champ(self):
force = np.zeros_like(self.lames[2, :])
noise = lambda t: .1* np.exp((np.cos(2*np.pi*(t-0.) / 6.)-1.)/ 1.5**2)
damp = lambda t: 0.001 #* np.exp(np.cos(t / 6.) / 3.**2)
cocir_t = lambda t: 4.*np.exp((np.cos(2*np.pi*(t-2.) / 6.)-1.)/ .5**2)
cocir_d = lambda d: np.exp(-d/.1)
colin_t = lambda t: 2.*np.exp((np.cos(2*np.pi*(t-4.) / 6.)-1.)/ .5**2)
colin_d = lambda d: np.exp(-d/.05)
VM_grad = lambda angle, sigma: -2*np.sin(2*angle)*np.exp(np.cos(2*angle)/sigma**2)
force += colin_t(self.t) * np.sum(VM_grad(self.angle_relatif(), np.pi/2)*colin_d(self.distance(do_torus=True)), axis=1)
force += cocir_t(self.t) * np.sum(VM_grad(self.angle_cocir(do_torus=True), np.pi/6)*cocir_d(self.distance(do_torus=True)), axis=1)
force += noise(self.t)*np.pi*np.random.randn(self.N_lame)
force -= damp(self.t) * self.lames[3, :]/self.dt
return .02* force
e = EdgeGrid(mode=mode)
el.main(e)