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]
Ejemplo n.º 2
0
        "/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,