-
Notifications
You must be signed in to change notification settings - Fork 0
/
rfcp.py
85 lines (71 loc) · 2.9 KB
/
rfcp.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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
from utils import *
from odestuff import *
from netfunctions import *
import numpy as np
import os.path
args=get_args_forshift()
inifname=args.inifname
dirname=args.d
if(dirname=='\\'):
dirname=os.path.dirname(inifname)
basename=os.path.basename(inifname)
N,netname,netinfo,netparams,netinst,K,s,omegainst,tequ,tmax,dt,eit,runinst,prntavgxy,prntallxy=getparamsfrominifile(basename)
shiftfactor=args.f
shiftinst=args.shiftinst
dirname=os.path.normpath(dirname) # por si lleva el '/' al final
#este string va a contener info de la red
netstring=netinfo+'__'+str(netinst)
#vamos definiendo los nombres de archivos donde guardamos (o de donde extraemos) los datos
runname="N"+str(int(N))+"-"+netstring+"-K"+str(float(K))+"-s"+str(float(s))+"__"+str(int(omegainst))+"-tequ"+str(float(tequ))+"-tmax"+str(float(tmax))+"-dt"+str(float(dt))+"-eit"+str(int(eit))+'__'+str(int(runinst))
# especificamos si imprimimos tambien
if(prntallxy or prntavgxy):
runname+='-'
if(prntavgxy):
runname+='-avgxy'
if(prntallxy):
runname+='-allxy'
runname+='--f'+str(shiftfactor)+'__'+str(shiftinst)
runfname=runname+".run" # archivo de corrida
nghbrfname=netstring+"-"+str(N)+".nghbr" # lista de vecinos (y para el caso de una red no dirigida, lo podemos tomar como la lista de conexiones entreantes o downstream, para cada oscilador)
omegafname=str(omegainst)+"-"+str(N)+".omega" # list of angular frequencies (careful with the precision here... load the whole thing)
# ahora tenemos que verificar si existe el archivo net y el archivo omega... y hacer, de acuerdo a ello, lo que corresponda
fullnghbrfname=dirname+'/'+nghbrfname
if (os.path.isfile(fullnghbrfname)):
lnghbr=loadnghbr(fullnghbrfname)
nghbrfileissaved=True
else:
lnghbr=dnetfuncs[netname](N,netparams)
nghbrfileissaved=False
# creamos los osciladores ya...
o=[hopfoscillator(sigma=s) for i in range(N)]
# y lo mismo para el archivo de omega (vemos si esta o no)
fullomegafname=dirname+'/'+omegafname
if (os.path.isfile(fullomegafname)):
lomega=loadomega(fullomegafname)
for i in range(N):
o[i].omega=lomega[i]
omegafileissaved=True
else:
lomega=[]
for i in range(N):
lomega.append(o[i].omega)
omegafileissaved=False
#cargar condiciones iniciales...!
fullinitcfname=dirname+'/'+basename
finitc=open(fullinitcfname,"r")
ic=np.loadtxt(fullinitcfname)
#aprovecho que ya tengo N
for i in range(N):
o[i].x=ic[i]*(1+shiftfactor*(2*random.random()-1))
o[i].y=ic[N+i]*(1+shiftfactor*(2*random.random()-1))
#z=[np.zeros(2) for i in range(N)]
fullrunfname=dirname+'/'+runfname
if (os.path.isfile(fullrunfname)):
print "El archivo "+fullrunfname+" ya existe. Salgo."
exit()
if(not omegafileissaved):
saveomega(lomega,fullomegafname)
if(not nghbrfileissaved):
savenghbr(lnghbr,fullnghbrfname)
C=N*K/float(sum( [len(lnghbr[i]) for i in range(N)] ))
runfromcheckpoint(N,o,lnghbr,C,tequ,tmax,dt,eit,dirname+'/'+runfname,prntallxy,prntavgxy)