你已经派生过 gprMax
镜像自地址
https://gitee.com/sunhf/gprMax.git
已同步 2025-08-07 15:10:13 +08:00
Updated #rx command to allow user to specify an ID and also which field components should be output.
这个提交包含在:
@@ -40,7 +40,7 @@ def prepare_output_file(outputfile, G):
|
|||||||
f.attrs['dt'] = G.dt
|
f.attrs['dt'] = G.dt
|
||||||
f.attrs['srcsteps'] = (G.srcstepx, G.srcstepy, G.srcstepz)
|
f.attrs['srcsteps'] = (G.srcstepx, G.srcstepy, G.srcstepz)
|
||||||
f.attrs['rxsteps'] = (G.rxstepx, G.rxstepy, G.rxstepz)
|
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)
|
f.attrs['nrx'] = len(G.rxs)
|
||||||
|
|
||||||
# Create groups for txs, rxs
|
# Create groups for txs, rxs
|
||||||
@@ -60,12 +60,18 @@ def prepare_output_file(outputfile, G):
|
|||||||
for rxindex, rx in enumerate(G.rxs):
|
for rxindex, rx in enumerate(G.rxs):
|
||||||
tmp = f.create_group('/rxs/rx' + str(rxindex + 1))
|
tmp = f.create_group('/rxs/rx' + str(rxindex + 1))
|
||||||
tmp['Position'] = (rx.positionx * G.dx, rx.positiony * G.dy, rx.positionz * G.dz)
|
tmp['Position'] = (rx.positionx * G.dx, rx.positiony * G.dy, rx.positionz * G.dz)
|
||||||
tmp['Ex'] = np.zeros(G.iterations, dtype=floattype)
|
if 'Ex' in rx.outputs:
|
||||||
tmp['Ey'] = np.zeros(G.iterations, dtype=floattype)
|
tmp['Ex'] = np.zeros(G.iterations, dtype=floattype)
|
||||||
tmp['Ez'] = np.zeros(G.iterations, dtype=floattype)
|
if 'Ey' in rx.outputs:
|
||||||
tmp['Hx'] = np.zeros(G.iterations, dtype=floattype)
|
tmp['Ey'] = np.zeros(G.iterations, dtype=floattype)
|
||||||
tmp['Hy'] = np.zeros(G.iterations, dtype=floattype)
|
if 'Ez' in rx.outputs:
|
||||||
tmp['Hz'] = np.zeros(G.iterations, dtype=floattype)
|
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
|
return f
|
||||||
|
|
||||||
@@ -84,12 +90,18 @@ def write_output(f, timestep, Ex, Ey, Ez, Hx, Hy, Hz, G):
|
|||||||
if type(timestep) is not slice:
|
if type(timestep) is not slice:
|
||||||
# For each rx, write field component values at current timestep
|
# For each rx, write field component values at current timestep
|
||||||
for rxindex, rx in enumerate(G.rxs):
|
for rxindex, rx in enumerate(G.rxs):
|
||||||
f['/rxs/rx' + str(rxindex + 1) + '/Ex'][timestep] = Ex[rx.positionx, rx.positiony, rx.positionz]
|
if 'Ex' in rx.outputs:
|
||||||
f['/rxs/rx' + str(rxindex + 1) + '/Ey'][timestep] = Ey[rx.positionx, rx.positiony, rx.positionz]
|
f['/rxs/rx' + str(rxindex + 1) + '/Ex'][timestep] = Ex[rx.positionx, rx.positiony, rx.positionz]
|
||||||
f['/rxs/rx' + str(rxindex + 1) + '/Ez'][timestep] = Ez[rx.positionx, rx.positiony, rx.positionz]
|
if 'Ey' in rx.outputs:
|
||||||
f['/rxs/rx' + str(rxindex + 1) + '/Hx'][timestep] = Hx[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) + '/Hy'][timestep] = Hy[rx.positionx, rx.positiony, rx.positionz]
|
if 'Ez' in rx.outputs:
|
||||||
f['/rxs/rx' + str(rxindex + 1) + '/Hz'][timestep] = Hz[rx.positionx, rx.positiony, rx.positionz]
|
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
|
# Field writing when converting old style output file to HDF5 format
|
||||||
else:
|
else:
|
||||||
|
@@ -244,8 +244,8 @@ def process_multicmds(multicmds, G):
|
|||||||
if multicmds[cmdname] != 'None':
|
if multicmds[cmdname] != 'None':
|
||||||
for cmdinstance in multicmds[cmdname]:
|
for cmdinstance in multicmds[cmdname]:
|
||||||
tmp = cmdinstance.split()
|
tmp = cmdinstance.split()
|
||||||
if len(tmp) != 3:
|
if len(tmp) != 3 and len(tmp) < 5:
|
||||||
raise CmdInputError("'" + cmdname + ': ' + ' '.join(tmp) + "'" + ' requires exactly three parameters')
|
raise CmdInputError("'" + cmdname + ': ' + ' '.join(tmp) + "'" + ' has an incorrect number of parameters')
|
||||||
|
|
||||||
# Check position parameters
|
# Check position parameters
|
||||||
positionx = rvalue(float(tmp[0])/G.dx)
|
positionx = rvalue(float(tmp[0])/G.dx)
|
||||||
@@ -260,8 +260,20 @@ def process_multicmds(multicmds, G):
|
|||||||
|
|
||||||
r = Rx(positionx=positionx, positiony=positiony, positionz=positionz)
|
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:
|
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)
|
G.rxs.append(r)
|
||||||
|
|
||||||
|
@@ -19,6 +19,8 @@
|
|||||||
class Rx:
|
class Rx:
|
||||||
"""Receiever output points."""
|
"""Receiever output points."""
|
||||||
|
|
||||||
|
availableoutputs = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz']
|
||||||
|
|
||||||
def __init__(self, positionx=None, positiony=None, positionz=None):
|
def __init__(self, positionx=None, positiony=None, positionz=None):
|
||||||
"""
|
"""
|
||||||
Args:
|
Args:
|
||||||
@@ -26,6 +28,8 @@ class Rx:
|
|||||||
positiony (float): y-coordinate of location in model.
|
positiony (float): y-coordinate of location in model.
|
||||||
positionz (float): z-coordinate of location in model.
|
positionz (float): z-coordinate of location in model.
|
||||||
"""
|
"""
|
||||||
|
self.ID = None
|
||||||
|
self.outputs = []
|
||||||
self.positionx = positionx
|
self.positionx = positionx
|
||||||
self.positiony = positiony
|
self.positiony = positiony
|
||||||
self.positionz = positionz
|
self.positionz = positionz
|
在新工单中引用
屏蔽一个用户