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
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)