def int_connection_backward(modes,gamma=0.,delta=0.,G=0,D=0): """ Reverses the integer connection performed by int_connection The input modes is a vector of (g+G,d+D) modes, and we wish to demote them back to (g,d) modes. """ from numpy import append from scipy import conj from spyctral.jacobi.jfft import rmatrix_invert as jconnection_inv G = int(G) D = int(D) if (G+D)>0: N = modes.size [cmodes,smodes] = sc_collapse(modes,N) cmodes = jconnection_inv(cmodes,delta-1/2.,gamma-1/2.,D,G) smodes = jconnection_inv(smodes,delta+1/2.,gamma+1/2.,D,G) return sc_expand(cmodes,smodes,N) else: return modes.copy()
from spyctral.jacobi.jfft import rmatrix_invert as jconnection_inv from spyctral.jacobi.jfft import rmatrix_apply_seq as jconnection from spyctral.fourier.connection import sc_collapse, sc_expand from numpy import append from scipy import conj G = gamma; D = delta; delta = 0; gamma=0; NEven = (N%2)==0 ucopy = u.copy() if NEven: N += 1 ucopy[0] /= 2. ucopy = append(ucopy,conj(ucopy[0])) [cmodes,smodes] = sc_collapse(ucopy,N) cmodes = jconnection(cmodes,delta-1/2.,gamma-1/2.,D,G) smodes = jconnection(smodes,delta+1/2.,gamma+1/2.,D,G) utemp = sc_expand(cmodes,smodes,N) if NEven: utemp[0] += conj(utemp[-1]) utemp = utemp[:-1] cmodes3 = jconnection_inv(cmodes,delta-1/2.,gamma-1/2.,D,G) smodes3 = jconnection_inv(smodes,delta+1/2.,gamma+1/2.,D,G) u2 = sc_expand(cmodes3,smodes3,N) utemp2 = int_connection(u,gamma=0.,delta=0.,G=G,D=D) u3 = int_connection_backward(utemp2,gamma=0.,delta=0.,G=G,D=D)