-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathunchunk.py
executable file
·116 lines (77 loc) · 3.38 KB
/
unchunk.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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from netCDF4 import Dataset
from matplotlib import pyplot as plt
import numpy as np
import argparse
def crea_evolucion(fout, x):
destino = Dataset(filename=fout, mode='w', clobber=True, format='NETCDF3_CLASSIC')
destino.createDimension('time', None)
destino.createDimension('x', len(x))
variable = destino.createVariable('x','f4',('x',))
variable[:] = x[:]
variable.standard_name = "x"
variable.long_name = "Coordenada holografica"
variable = destino.createVariable('time','f4',('time',))
variable.standard_name = "time"
variable.long_name = "time"
variables = ['A', 'delta', 'Pi', 'Phi', 'MomentumConstraint']
#variables = ['A', 'delta', 'Pi', 'Phi']
for nombre in variables:
variable = destino.createVariable(nombre,'f4',('time','x'))
destino.close()
def buffer_out(fout, t, Phi, Pi, A, delta, constraint, **kwargs):
#def buffer_out(fout, t, Phi, Pi, A, delta, **kwargs):
# variables = {'A' : A, 'delta' : delta, 'Pi' : Pi, 'Phi' : Phi}
variables = {'A' : A, 'delta' : delta, 'Pi' : Pi, 'Phi' : Phi, 'MomentumConstraint' : constraint}
destino = Dataset(filename=fout, mode='a')
Nt = len(destino.dimensions['time'])
destino.variables['time'][Nt] = t
for n, v in variables.iteritems():
variable = destino.variables[n]
variable[Nt,:] = v
# Atribulos del run:
if kwargs:
destino.setncatts(kwargs)
destino.close()
return
if __name__=='__main__':
# Procesado de la linea de comandos:
parser = argparse.ArgumentParser()
parser.add_argument('-n','--procs',help='Número de procesadores',type=int)
parser.add_argument('-a','--alpha',help='Parámetro alpha',type=float)
parser.add_argument('-t','--tau',help='Parámetro tau',type=float)
parser.add_argument('-p','--puntos',help='Número de puntos',type=int)
parser.add_argument('-d','--derivadas',help='Estilo derivadas',type=str)
args = parser.parse_args()
# Configuración:
nChunks = args.procs
alpha = args.alpha
tau = args.tau
points = args.puntos
derivadas = args.derivadas
# Ficheros de entrada:
ficheros = ['%s_evolucion_Source_a%4.2f_t%4.2fx%i.%i.nc' % (derivadas, alpha, tau, points, i) for i in range(nChunks)]
X = []
for fichero in ficheros:
datos = Dataset(fichero)
X.append( datos.variables['x'][:] )
Nt = len(datos.dimensions['time'])
datos.close()
x = np.concatenate(X)
# Fichero de salida:
fout = '%s_evolucion_Source_a%4.2f_t%4.2fx%i.nc' % (derivadas, alpha, tau, points)
crea_evolucion(fout, x)
for t in range(Nt):
variables = {'A' : [], 'delta' : [], 'Pi' : [], 'Phi' : [], 'MomentumConstraint' : []}
for nombre, lista in variables.iteritems():
for fichero in ficheros:
datos = Dataset(fichero)
time = datos.variables['time'][t]
lista.append( datos.variables[nombre][t,:] )
datos.close()
buffer_out(fout, time, np.concatenate(variables['Phi']),
np.concatenate(variables['Pi']),
np.concatenate(variables['A']),
np.concatenate(variables['delta']),
np.concatenate(variables['MomentumConstraint']))