From 5b5b833b0b8cab7048c0b6b70ad94a82ab956b65 Mon Sep 17 00:00:00 2001 From: Craig Warren Date: Thu, 5 May 2016 13:37:37 +0100 Subject: [PATCH] Updated dispersion check for better handling of 'sine' and 'contsine' waveforms. --- gprMax/grid.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/gprMax/grid.py b/gprMax/grid.py index 45b011d4..41ebc1c6 100644 --- a/gprMax/grid.py +++ b/gprMax/grid.py @@ -125,16 +125,20 @@ def dispersion_check(G): waveformvalues[timeiter.index] = waveform.calculate_value(timeiter[0], G.dt) timeiter.iternext() - # Calculate magnitude of frequency spectra of waveform - power = 20 * np.log10(np.abs(np.fft.fft(waveformvalues))**2) - freqs = np.fft.fftfreq(power.size, d=G.dt) - - # Shift powers so that frequency with maximum power is at zero decibels - power -= np.amax(power) + if waveform.type == 'sine' or waveform.type == 'contsine': + maxfreqs.append(4 * waveform.freq) - # Set maximum frequency to -60dB from maximum power - freq = np.where((np.amax(power[1::]) - power[1::]) > 60)[0][0] + 1 - maxfreqs.append(freqs[freq]) + else: + # Calculate magnitude of frequency spectra of waveform + power = 20 * np.log10(np.abs(np.fft.fft(waveformvalues))**2) + freqs = np.fft.fftfreq(power.size, d=G.dt) + + # Shift powers so that frequency with maximum power is at zero decibels + power -= np.amax(power) + + # Set maximum frequency to -60dB from maximum power + freq = np.where((np.amax(power[1::]) - power[1::]) > 60)[0][0] + 1 + maxfreqs.append(freqs[freq]) if maxfreqs: maxfreq = max(maxfreqs)