def __init__(self, N, alfa, quad="GL", neumann=False): # Prepare LU Helmholtz solver for velocity self.N = N self.alfa = alfa self.neumann = neumann M = (N - 4) / 2 if neumann else (N - 3) / 2 if hasattr(alfa, "__len__"): Ny, Nz = alfa.shape self.u0 = zeros((2, M + 1, Ny, Nz), float) # Diagonal entries of U self.u1 = zeros((2, M, Ny, Nz), float) # Diagonal+1 entries of U self.u2 = zeros((2, M - 1, Ny, Nz), float) # Diagonal+2 entries of U self.L = zeros((2, M, Ny, Nz), float) # The single nonzero row of L self.s = slice(1, N - 2) if neumann else slice(0, N - 2) SFTc.LU_Helmholtz_3D(N, neumann, quad == "GL", self.alfa, self.u0, self.u1, self.u2, self.L) else: self.u0 = zeros((2, M + 1), float) # Diagonal entries of U self.u1 = zeros((2, M), float) # Diagonal+1 entries of U self.u2 = zeros((2, M - 1), float) # Diagonal+2 entries of U self.L = zeros((2, M), float) # The single nonzero row of L self.s = slice(1, N - 2) if neumann else slice(0, N - 2) SFTc.LU_Helmholtz_1D(N, neumann, quad == "GL", self.alfa, self.u0, self.u1, self.u2, self.L)
ck = ones(N[0] - 3) if SN.quad == "GL": ck[-1] = 2 a0N = ones(N[0] - 5) * (-pi / 2) * (kk[1:-2] / (kk[1:-2] + 2))**2 b0N = pi / 2 * (1 + ck * (kk[1:] / (kk[1:] + 2))**4) c0N = a0N.copy() bcN = b0N.copy() # Prepare LU Helmholtz solver for velocity M = (N[0] - 3) / 2 u0 = zeros((2, M + 1, U_hat.shape[2], U_hat.shape[3])) # Diagonal entries of U u1 = zeros((2, M, U_hat.shape[2], U_hat.shape[3])) # Diagonal+1 entries of U u2 = zeros( (2, M - 1, U_hat.shape[2], U_hat.shape[3])) # Diagonal+2 entries of U L0 = zeros( (2, M, U_hat.shape[2], U_hat.shape[3])) # The single nonzero row of L SFTc.LU_Helmholtz_3D(N[0], 0, ST.quad == "GL", alfa1, u0, u1, u2, L0) # Prepare LU Helmholtz solver Neumann for pressure MN = (N[0] - 4) / 2 u0N = zeros( (2, MN + 1, U_hat.shape[2], U_hat.shape[3])) # Diagonal entries of U u1N = zeros((2, MN, U_hat.shape[2], U_hat.shape[3])) # Diagonal+1 entries of U u2N = zeros( (2, MN - 1, U_hat.shape[2], U_hat.shape[3])) # Diagonal+2 entries of U LN = zeros( (2, MN, U_hat.shape[2], U_hat.shape[3])) # The single nonzero row of L SFTc.LU_Helmholtz_3D(N[0], 1, SN.quad == "GL", alfa2, u0N, u1N, u2N, LN) def solvePressure(P_hat, U_hat): global F_tmp, F_tmp2