end_index = 10000 shift = 0 #%matplotlib qt import matplotlib.pyplot as plt #plt.plot(recharge_time_series) #plt.show() recharge_time_series = recharge_time_series[begin_index:end_index] head_time_series = head_time_series[begin_index+shift:end_index+shift] #################################################################### """ # calculate the power spectrum: Shh, output to FIT with analy solution only! frequency_output, Shh = power_spectrum( input=recharge_time_series, output=head_time_series, time_step_size=time_step_size, method="scipyffthalf", o_i="o", ) frequency_input, Sww = power_spectrum( input=recharge_time_series, output=head_time_series, time_step_size=time_step_size, method="scipyffthalf", o_i="i", ) # cut higher frequencies than cut_freq_higher cut_array_higher = np.less(frequency_input, cut_freq_higher) Sww = Sww[cut_array_higher] Shh = Shh[cut_array_higher]
"/Users/houben/phd/modelling/20190318_spectral_analysis_homogeneous/models_test/1001_24.1127_5.00e-01_8.00e-02/rfd_curve#1.txt" ) from transect_plot import extract_timeseries, plot_head_timeseries_vs_recharge, extract_rfd path_to_project = "/Users/houben/phd/modelling/20190318_spectral_analysis_homogeneous/models_test/1001_24.1127_5.00e-01_8.00e-02" #time_time_series, recharge_time_series = extract_rfd(path=path_to_project, rfd=1) recharge_time_series = recharge_time_series * L L = 1000 x = 200 artificial_data = True ################################################# #''' frequency_Shh_Sww, Shh_Sww = power_spectrum(recharge, gw_head, time_step_size, o_i="oi") frequency_Sww, Sww = power_spectrum(recharge, gw_head, time_step_size, o_i="i") frequency_Shh, Shh = power_spectrum(recharge, gw_head, time_step_size, o_i="o") # cut the power spectrum # cut_value of frequency #cut_freq = 1e-4
def discharge_ftf_fit(input, output, time_step_size, aquifer_length, method='scipyffthalf', initial_guess=1e-2): """ This functions computes the power spectrum of input and output with power_spectrum from power_spectrum.py. The resulting spectrum is taken to derive the aquifer parameters t_c (char time.) and D (T/S) with the transfer function of the discharge from Linear Dupuit Aquifer with a Dirichlet BC (discharge_ftf). Parameters ---------- input : 1D array Y-values of time series of input (i.e. recharge) output: 1D array Y-values of time series of output (i.e. discharge) time_step_size : float Time in seconds between two time steps / two measurements aquifer_length : float The length of the aquifer from the water divide to the stream. method : string, Default: 'scipyffthalf' --> see power_spectrum.py for explanation Yields ------ power_spectrum : 1D array The power spectrum. frequency : 1D array The coresponding frequencies. # t_c : float # The characteristic time of the aquifer after Russian et al. 2013 D : float The aquifer diffusivity [m^2/s]. """ import numpy as np from power_spectrum import power_spectrum import scipy.optimize as optimization from functools import partial as prt frequency_input, power_spectrum_result = power_spectrum( input, output, time_step_size, method="scipyffthalf", o_i="oi") partial = prt(discharge_ftf, aquifer_length=aquifer_length) popt, pcov = optimization.curve_fit(partial, frequency_input, power_spectrum_result, p0=initial_guess) theta_q = discharge_ftf(frequency_input, popt[0], aquifer_length) # check results #import matplotlib.pyplot as plt #plt.loglog(frequency_input, theta_q) #plt.loglog(frequency_input, power_spectrum_result) #plt.show() return popt, pcov, frequency_input, power_spectrum_result
alpha = alpha_reg(discharge_time_series, area) baseflow_time_series = filter_Eck(BFImax, discharge_time_series, alpha) #plt.plot(discharge_time_series) #plt.plot(baseflow_time_series) popt, pcov, frequency_input, power_spectrum_result = discharge_ftf_fit( recharge_time_series, baseflow_time_series, time_step_size, 1000, method='scipyffthalf', initial_guess=1e-2) power_spectrum_input = power_spectrum(recharge_time_series, power_spectrum_result, time_step_size, method="scipyffthalf", o_i="i")[1] plt.loglog(frequency_input, power_spectrum_result) plt.loglog(frequency_input, power_spectrum_input) #data = np.hstack((spectrum_input, power_spectrum_result)) #plot_spectrum(data, frequency_input, path=path, name="test") ''' def plot_spectrum( data, frequency, name=None, labels=None, path=None,