你已经派生过 gprMax
镜像自地址
https://gitee.com/sunhf/gprMax.git
已同步 2025-08-06 20:46:52 +08:00
Waveform value now pre-multiplied by amplitude scaling value when returned.
这个提交包含在:
@@ -41,7 +41,7 @@ class Waveform(object):
|
|||||||
dt (float): Absolute time discretisation.
|
dt (float): Absolute time discretisation.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
waveform (float): Calculated value for waveform.
|
ampvalue (float): Calculated value for waveform.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Coefficients for certain waveforms
|
# Coefficients for certain waveforms
|
||||||
@@ -56,51 +56,53 @@ class Waveform(object):
|
|||||||
|
|
||||||
# Waveforms
|
# Waveforms
|
||||||
if self.type == 'gaussian':
|
if self.type == 'gaussian':
|
||||||
waveform = np.exp(-zeta * delay**2)
|
ampvalue = np.exp(-zeta * delay**2)
|
||||||
|
|
||||||
elif self.type == 'gaussiandot':
|
elif self.type == 'gaussiandot':
|
||||||
waveform = -2 * zeta * delay * np.exp(-zeta * delay**2)
|
ampvalue = -2 * zeta * delay * np.exp(-zeta * delay**2)
|
||||||
|
|
||||||
elif self.type == 'gaussiandotnorm':
|
elif self.type == 'gaussiandotnorm':
|
||||||
normalise = np.sqrt(np.exp(1) / (2 * zeta))
|
normalise = np.sqrt(np.exp(1) / (2 * zeta))
|
||||||
waveform = -2 * zeta * delay * np.exp(-zeta * delay**2) * normalise
|
ampvalue = -2 * zeta * delay * np.exp(-zeta * delay**2) * normalise
|
||||||
|
|
||||||
elif self.type == 'gaussiandotdot':
|
elif self.type == 'gaussiandotdot':
|
||||||
waveform = 2 * zeta * (2 * zeta * delay**2 - 1) * np.exp(-zeta * delay**2)
|
ampvalue = 2 * zeta * (2 * zeta * delay**2 - 1) * np.exp(-zeta * delay**2)
|
||||||
|
|
||||||
elif self.type == 'gaussiandotdotnorm':
|
elif self.type == 'gaussiandotdotnorm':
|
||||||
normalise = 1 / (2 * zeta)
|
normalise = 1 / (2 * zeta)
|
||||||
waveform = 2 * zeta * (2 * zeta * delay**2 - 1) * np.exp(-zeta * delay**2) * normalise
|
ampvalue = 2 * zeta * (2 * zeta * delay**2 - 1) * np.exp(-zeta * delay**2) * normalise
|
||||||
|
|
||||||
elif self.type == 'ricker':
|
elif self.type == 'ricker':
|
||||||
normalise = 1 / (2 * zeta)
|
normalise = 1 / (2 * zeta)
|
||||||
waveform = - (2 * zeta * (2 * zeta * delay**2 - 1) * np.exp(-zeta * delay**2)) * normalise
|
ampvalue = - (2 * zeta * (2 * zeta * delay**2 - 1) * np.exp(-zeta * delay**2)) * normalise
|
||||||
|
|
||||||
elif self.type == 'sine':
|
elif self.type == 'sine':
|
||||||
waveform = np.sin(2 * np.pi * self.freq * time)
|
ampvalue = np.sin(2 * np.pi * self.freq * time)
|
||||||
if time * self.freq > 1:
|
if time * self.freq > 1:
|
||||||
waveform = 0
|
ampvalue = 0
|
||||||
|
|
||||||
elif self.type == 'contsine':
|
elif self.type == 'contsine':
|
||||||
rampamp = 0.25
|
rampamp = 0.25
|
||||||
ramp = rampamp * time * self.freq
|
ramp = rampamp * time * self.freq
|
||||||
if ramp > 1:
|
if ramp > 1:
|
||||||
ramp = 1
|
ramp = 1
|
||||||
waveform = ramp * np.sin(2 * np.pi * self.freq * time)
|
ampvalue = ramp * np.sin(2 * np.pi * self.freq * time)
|
||||||
|
|
||||||
elif self.type == 'impulse':
|
elif self.type == 'impulse':
|
||||||
# time < dt condition required to do impulsive magnetic dipole
|
# time < dt condition required to do impulsive magnetic dipole
|
||||||
if time == 0 or time < dt:
|
if time == 0 or time < dt:
|
||||||
waveform = 1
|
ampvalue = 1
|
||||||
elif time >= dt:
|
elif time >= dt:
|
||||||
waveform = 0
|
ampvalue = 0
|
||||||
|
|
||||||
elif self.type == 'user':
|
elif self.type == 'user':
|
||||||
index = round_value(time / dt)
|
index = round_value(time / dt)
|
||||||
# Check to see if there are still user specified values and if not use zero
|
# Check to see if there are still user specified values and if not use zero
|
||||||
if index > len(self.uservalues) - 1:
|
if index > len(self.uservalues) - 1:
|
||||||
waveform = 0
|
ampvalue = 0
|
||||||
else:
|
else:
|
||||||
waveform = self.uservalues[index]
|
ampvalue = self.uservalues[index]
|
||||||
|
|
||||||
return waveform
|
ampvalue *= self.amp
|
||||||
|
|
||||||
|
return ampvalue
|
||||||
|
在新工单中引用
屏蔽一个用户