Updated #rx command to allow user to specify an ID and also which field components should be output.

这个提交包含在:
Craig Warren
2015-12-11 17:18:10 +00:00
父节点 5f429e8197
当前提交 4f2ddcca69
共有 3 个文件被更改,包括 45 次插入17 次删除

查看文件

@@ -40,7 +40,7 @@ def prepare_output_file(outputfile, G):
f.attrs['dt'] = G.dt
f.attrs['srcsteps'] = (G.srcstepx, G.srcstepy, G.srcstepz)
f.attrs['rxsteps'] = (G.rxstepx, G.rxstepy, G.rxstepz)
f.attrs['ntx'] = len(G.voltagesources) + len(G.hertziandipoles) + len(G.magneticdipoles)
f.attrs['ntx'] = len(G.voltagesources + G.hertziandipoles + G.magneticdipoles)
f.attrs['nrx'] = len(G.rxs)
# Create groups for txs, rxs
@@ -60,12 +60,18 @@ def prepare_output_file(outputfile, G):
for rxindex, rx in enumerate(G.rxs):
tmp = f.create_group('/rxs/rx' + str(rxindex + 1))
tmp['Position'] = (rx.positionx * G.dx, rx.positiony * G.dy, rx.positionz * G.dz)
tmp['Ex'] = np.zeros(G.iterations, dtype=floattype)
tmp['Ey'] = np.zeros(G.iterations, dtype=floattype)
tmp['Ez'] = np.zeros(G.iterations, dtype=floattype)
tmp['Hx'] = np.zeros(G.iterations, dtype=floattype)
tmp['Hy'] = np.zeros(G.iterations, dtype=floattype)
tmp['Hz'] = np.zeros(G.iterations, dtype=floattype)
if 'Ex' in rx.outputs:
tmp['Ex'] = np.zeros(G.iterations, dtype=floattype)
if 'Ey' in rx.outputs:
tmp['Ey'] = np.zeros(G.iterations, dtype=floattype)
if 'Ez' in rx.outputs:
tmp['Ez'] = np.zeros(G.iterations, dtype=floattype)
if 'Hx' in rx.outputs:
tmp['Hx'] = np.zeros(G.iterations, dtype=floattype)
if 'Hy' in rx.outputs:
tmp['Hy'] = np.zeros(G.iterations, dtype=floattype)
if 'Hz' in rx.outputs:
tmp['Hz'] = np.zeros(G.iterations, dtype=floattype)
return f
@@ -84,12 +90,18 @@ def write_output(f, timestep, Ex, Ey, Ez, Hx, Hy, Hz, G):
if type(timestep) is not slice:
# For each rx, write field component values at current timestep
for rxindex, rx in enumerate(G.rxs):
f['/rxs/rx' + str(rxindex + 1) + '/Ex'][timestep] = Ex[rx.positionx, rx.positiony, rx.positionz]
f['/rxs/rx' + str(rxindex + 1) + '/Ey'][timestep] = Ey[rx.positionx, rx.positiony, rx.positionz]
f['/rxs/rx' + str(rxindex + 1) + '/Ez'][timestep] = Ez[rx.positionx, rx.positiony, rx.positionz]
f['/rxs/rx' + str(rxindex + 1) + '/Hx'][timestep] = Hx[rx.positionx, rx.positiony, rx.positionz]
f['/rxs/rx' + str(rxindex + 1) + '/Hy'][timestep] = Hy[rx.positionx, rx.positiony, rx.positionz]
f['/rxs/rx' + str(rxindex + 1) + '/Hz'][timestep] = Hz[rx.positionx, rx.positiony, rx.positionz]
if 'Ex' in rx.outputs:
f['/rxs/rx' + str(rxindex + 1) + '/Ex'][timestep] = Ex[rx.positionx, rx.positiony, rx.positionz]
if 'Ey' in rx.outputs:
f['/rxs/rx' + str(rxindex + 1) + '/Ey'][timestep] = Ey[rx.positionx, rx.positiony, rx.positionz]
if 'Ez' in rx.outputs:
f['/rxs/rx' + str(rxindex + 1) + '/Ez'][timestep] = Ez[rx.positionx, rx.positiony, rx.positionz]
if 'Hx' in rx.outputs:
f['/rxs/rx' + str(rxindex + 1) + '/Hx'][timestep] = Hx[rx.positionx, rx.positiony, rx.positionz]
if 'Hy' in rx.outputs:
f['/rxs/rx' + str(rxindex + 1) + '/Hy'][timestep] = Hy[rx.positionx, rx.positiony, rx.positionz]
if 'Hz' in rx.outputs:
f['/rxs/rx' + str(rxindex + 1) + '/Hz'][timestep] = Hz[rx.positionx, rx.positiony, rx.positionz]
# Field writing when converting old style output file to HDF5 format
else:

查看文件

@@ -244,9 +244,9 @@ def process_multicmds(multicmds, G):
if multicmds[cmdname] != 'None':
for cmdinstance in multicmds[cmdname]:
tmp = cmdinstance.split()
if len(tmp) != 3:
raise CmdInputError("'" + cmdname + ': ' + ' '.join(tmp) + "'" + ' requires exactly three parameters')
if len(tmp) != 3 and len(tmp) < 5:
raise CmdInputError("'" + cmdname + ': ' + ' '.join(tmp) + "'" + ' has an incorrect number of parameters')
# Check position parameters
positionx = rvalue(float(tmp[0])/G.dx)
positiony = rvalue(float(tmp[1])/G.dy)
@@ -260,8 +260,20 @@ def process_multicmds(multicmds, G):
r = Rx(positionx=positionx, positiony=positiony, positionz=positionz)
# If no ID or outputs are specified use default, i.e Ex, Ey, Ez, Hx, Hy, Hz
if len(tmp) == 3:
r.outputs = Rx.availableoutputs[0:5]
else:
r.ID = tmp[3]
# Check and add field output names
for field in tmp[4::]:
if field in Rx.availableoutputs:
r.outputs.append(field)
else:
raise CmdInputError("'" + cmdname + ': ' + ' '.join(tmp) + "'" + ' contains an output type that is not available')
if G.messages:
print('Receiver at {:.3f}m, {:.3f}m, {:.3f}m created.'.format(r.positionx * G.dx, r.positiony * G.dy, r.positionz * G.dz))
print('Receiver at {:.3f}m, {:.3f}m, {:.3f}m with field output(s) {} created.'.format(r.positionx * G.dx, r.positiony * G.dy, r.positionz * G.dz, ', '.join(r.outputs)))
G.rxs.append(r)

查看文件

@@ -19,6 +19,8 @@
class Rx:
"""Receiever output points."""
availableoutputs = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz']
def __init__(self, positionx=None, positiony=None, positionz=None):
"""
Args:
@@ -26,6 +28,8 @@ class Rx:
positiony (float): y-coordinate of location in model.
positionz (float): z-coordinate of location in model.
"""
self.ID = None
self.outputs = []
self.positionx = positionx
self.positiony = positiony
self.positionz = positionz