PYTHON: Add direction derivatives of velocity and magnetic field.

Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
This commit is contained in:
Grzegorz Kowal 2021-03-30 10:10:49 -03:00
parent 3b14ea26d0
commit b350ecdedd

View File

@ -142,6 +142,15 @@ class AmunXML:
variables.append('vory')
variables.append('vorz')
variables.append('vort')
variables.append('dvxdx')
variables.append('dvxdy')
variables.append('dvxdz')
variables.append('dvydx')
variables.append('dvydy')
variables.append('dvydz')
variables.append('dvzdx')
variables.append('dvzdy')
variables.append('dvzdz')
if all(v in variables for v in ['magx','magy','magz']):
variables.append('magnetic_vector')
variables.append('magn')
@ -150,6 +159,15 @@ class AmunXML:
variables.append('cury')
variables.append('curz')
variables.append('curr')
variables.append('dbxdx')
variables.append('dbxdy')
variables.append('dbxdz')
variables.append('dbydx')
variables.append('dbydy')
variables.append('dbydz')
variables.append('dbzdx')
variables.append('dbzdy')
variables.append('dbzdz')
if 'pres' in variables and 'adiabatic_index' in self.attributes:
variables.append('eint')
if all(v in variables for v in ['dens','pres']):
@ -624,6 +642,78 @@ class AmunXML:
dset = 0.5 * np.sqrt(wx**2 + wy**2 + wz**2)
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
elif var == 'dvxdx':
p = self.attributes['ndims'] - 1
tmp = np.reshape(self.__read_binary_data(n, 'velx'), cm)
dset = np.roll(tmp, -1, axis=p) - np.roll(tmp, 1, axis=p)
dset *= 0.5
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
elif var == 'dvxdy':
p = self.attributes['ndims'] - 2
tmp = np.reshape(self.__read_binary_data(n, 'velx'), cm)
dset = np.roll(tmp, -1, axis=p) - np.roll(tmp, 1, axis=p)
dset *= 0.5
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
elif var == 'dvxdz':
p = self.attributes['ndims'] - 3
tmp = np.reshape(self.__read_binary_data(n, 'velx'), cm)
if p >= 0:
dset = np.roll(tmp, -1, axis=p) - np.roll(tmp, 1, axis=p)
dset *= 0.5
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
else:
dset = np.zeros_like(tmp)
elif var == 'dvydx':
p = self.attributes['ndims'] - 1
tmp = np.reshape(self.__read_binary_data(n, 'vely'), cm)
dset = np.roll(tmp, -1, axis=p) - np.roll(tmp, 1, axis=p)
dset *= 0.5
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
elif var == 'dvydy':
p = self.attributes['ndims'] - 2
tmp = np.reshape(self.__read_binary_data(n, 'vely'), cm)
dset = np.roll(tmp, -1, axis=p) - np.roll(tmp, 1, axis=p)
dset *= 0.5
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
elif var == 'dvydz':
p = self.attributes['ndims'] - 3
tmp = np.reshape(self.__read_binary_data(n, 'vely'), cm)
if p >= 0:
dset = np.roll(tmp, -1, axis=p) - np.roll(tmp, 1, axis=p)
dset *= 0.5
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
else:
dset = np.zeros_like(tmp)
elif var == 'dvzdx':
p = self.attributes['ndims'] - 1
tmp = np.reshape(self.__read_binary_data(n, 'velz'), cm)
dset = np.roll(tmp, -1, axis=p) - np.roll(tmp, 1, axis=p)
dset *= 0.5
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
elif var == 'dvzdy':
p = self.attributes['ndims'] - 2
tmp = np.reshape(self.__read_binary_data(n, 'velz'), cm)
dset = np.roll(tmp, -1, axis=p) - np.roll(tmp, 1, axis=p)
dset *= 0.5
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
elif var == 'dvzdz':
p = self.attributes['ndims'] - 3
tmp = np.reshape(self.__read_binary_data(n, 'velz'), cm)
if p >= 0:
dset = np.roll(tmp, -1, axis=p) - np.roll(tmp, 1, axis=p)
dset *= 0.5
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
else:
dset = np.zeros_like(tmp)
elif var == 'divb':
p = self.attributes['ndims'] - 1
tmp = np.reshape(self.__read_binary_data(n, 'magx'), cm)
@ -726,6 +816,78 @@ class AmunXML:
dset = 0.5 * np.sqrt(wx**2 + wy**2 + wz**2)
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
elif var == 'dbxdx':
p = self.attributes['ndims'] - 1
tmp = np.reshape(self.__read_binary_data(n, 'magx'), cm)
dset = np.roll(tmp, -1, axis=p) - np.roll(tmp, 1, axis=p)
dset *= 0.5
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
elif var == 'dbxdy':
p = self.attributes['ndims'] - 2
tmp = np.reshape(self.__read_binary_data(n, 'magx'), cm)
dset = np.roll(tmp, -1, axis=p) - np.roll(tmp, 1, axis=p)
dset *= 0.5
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
elif var == 'dbxdz':
p = self.attributes['ndims'] - 3
tmp = np.reshape(self.__read_binary_data(n, 'magx'), cm)
if p >= 0:
dset = np.roll(tmp, -1, axis=p) - np.roll(tmp, 1, axis=p)
dset *= 0.5
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
else:
dset = np.zeros_like(tmp)
elif var == 'dbydx':
p = self.attributes['ndims'] - 1
tmp = np.reshape(self.__read_binary_data(n, 'magy'), cm)
dset = np.roll(tmp, -1, axis=p) - np.roll(tmp, 1, axis=p)
dset *= 0.5
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
elif var == 'dbydy':
p = self.attributes['ndims'] - 2
tmp = np.reshape(self.__read_binary_data(n, 'magy'), cm)
dset = np.roll(tmp, -1, axis=p) - np.roll(tmp, 1, axis=p)
dset *= 0.5
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
elif var == 'dbydz':
p = self.attributes['ndims'] - 3
tmp = np.reshape(self.__read_binary_data(n, 'magy'), cm)
if p >= 0:
dset = np.roll(tmp, -1, axis=p) - np.roll(tmp, 1, axis=p)
dset *= 0.5
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
else:
dset = np.zeros_like(tmp)
elif var == 'dbzdx':
p = self.attributes['ndims'] - 1
tmp = np.reshape(self.__read_binary_data(n, 'magz'), cm)
dset = np.roll(tmp, -1, axis=p) - np.roll(tmp, 1, axis=p)
dset *= 0.5
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
elif var == 'dbzdy':
p = self.attributes['ndims'] - 2
tmp = np.reshape(self.__read_binary_data(n, 'magz'), cm)
dset = np.roll(tmp, -1, axis=p) - np.roll(tmp, 1, axis=p)
dset *= 0.5
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
elif var == 'dbzdz':
p = self.attributes['ndims'] - 3
tmp = np.reshape(self.__read_binary_data(n, 'magz'), cm)
if p >= 0:
dset = np.roll(tmp, -1, axis=p) - np.roll(tmp, 1, axis=p)
dset *= 0.5
for p in range(self.chunks[n]['dblocks']):
dset[...,p] /= self.cell_size[self.level[ids[p]]]
else:
dset = np.zeros_like(tmp)
else:
dset = self.__read_binary_data(n, var)
dset = np.reshape(dset, cm)