Beispiel #1
0
 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)
Beispiel #2
0
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