Example #1
0
def fft_collocation(f,s=1.,t=0.,shift=0.,scale=1.):

    from spyctral.fourier.fft import fft as fft_Psi
    from spyctral.wiener.weights import sqrt_weight_bias as wx_sqrt
    from spyctral.wiener.quad import gq
    from numpy import sqrt

    # This stuff can all be overhead
    N = f.size
    x = gq(N,s=1.,t=0.,shift=shift,scale=scale)[0]
    modes = f/wx_sqrt(x,s=s,t=t,shift=shift,scale=scale)

    temp = fft_Psi(modes,gamma=s-1.,delta=t)*float(sqrt(scale))
    temp[-s:] = 0
    temp[:s] = 0

    return temp
Example #2
0
def fft_galerkin(f,s=1.,t=0.,shift=0.,scale=1.):

    from spyctral.fourier.fft import fft as fft_Psi
    from spyctral.fourier.connection import int_connection as connect
    from numpy import sqrt,ones,abs,array
    N = len(f)

    modes = fft_Psi(f)
    #eps = 1e-16
    #modes[abs(modes)<eps] = 0
    
    # Is there a better way to do this?
    for ss in range(int(s)):
        for count in range(N-1):
            modes[N-count-2] -= modes[N-count-1]
    modes *= 2**(s/2.)/(1j)**s

    modes = connect(modes,0,0,int(s-1),int(t))
    modes[:s] = 0
    modes[-s:] = 0
    return modes*sqrt(scale)