def omega_output(self, fname, parameters):
"""This method writes the dispersion relation to the file fname.
:param fname: Filename
:type fname: string
:param parameters: Array containing the parameters.
:type parameters: numpy.ndarray
"""
omega = self.omega(parameters)
kappa = self.kappamesh
kmesh = self.kmesh
k = self.k
#print(omega, self.dks)
vgs = np.gradient(omega, *self.dks, edge_order=2)
vg = np.sqrt(sum(vgc**2 for vgc in vgs))
if self.dim==2:
vg[:3,:3] = 1
elif self.dim==3:
vg[:3,:3,:3] = 1
vph = omega/k
vph.ravel()[0] = 1.
data = [*np.broadcast_arrays(*kappa), k, omega, vph, vg, *vgs]
data = np.broadcast_arrays(*data)
blocks = zip(*map(lambda x: np.vsplit(x, x.shape[0]), data))
with open(fname, 'wb') as f:
kappanames = ' '.join(['kx', 'ky', 'kz'][:len(kappa)])
vgsnames = ' '.join(['vgx', 'vgy', 'vgz'][:len(vgs)])
f.write(('#' + kappanames + ' k omega vph vg ' + vgsnames + '\n').encode('us-ascii'))
for block_columns in blocks:
np.savetxt(f, np.vstack(map(np.ravel, block_columns)).T)
f.write(b'\n')
评论列表
文章目录