Beispiel #1
0
def assemble_blockwise_matrix_BDF1(dt, ux_n1, uy_n1):
    S11 = assemble.u_gradv_w_p1(topo_u, x_u, y_u, ux_n1, uy_n1)
    D11 = M + dt*K + dt*S11
    D22 = M + dt*K + dt*S11
    S12 = sparse.csc_matrix((ndofs_u, ndofs_u))
    S21 = sparse.csc_matrix((ndofs_u, ndofs_u))

    (D11, D22) = apply_mat_bc(D11, D22)

    #### assembly of Navier-Stokes system
    mat = sparse.vstack([
        sparse.hstack([D11, S12, -dt*BT1, sparse.csc_matrix((ndofs_u, 1))]),
        sparse.hstack([S21, D22, -dt*BT2, sparse.csc_matrix((ndofs_u, 1))]),
        sparse.hstack([-B, sparse.csc_matrix((ndofs_p,ndofs_p)), mean_p.transpose()]),
        sparse.hstack([sparse.csc_matrix((1, 2*ndofs_u)), mean_p, sparse.csc_matrix((1,1))])
    ], "csc")
    return mat
Beispiel #2
0
def assemble_blockwise_matrix_BDF2():
    S11 = assemble.u_gradv_w_p1(topo_u, x_u, y_u, ux_n1, uy_n1)
    D11 = 1.5 * ph.rho_fluid / ph.dt * M11 + ph.nu * A11 + ph.rho_fluid * S11
    D22 = 1.5 * ph.rho_fluid / ph.dt * M11 + ph.nu * A11 + ph.rho_fluid * S11
    S12 = sparse.csr_matrix((ndofs_u, ndofs_u))
    S21 = sparse.csr_matrix((ndofs_u, ndofs_u))

    (D11, D22) = apply_bc_mat(D11, D22)

    #### assembly of Navier-Stokes system
    mat = sparse.vstack(
        [
            sparse.hstack([D11, S12, -BT1
                           ]),  #, sparse.csr_matrix((ndofs_u, 1))]),
            sparse.hstack([S21, D22, -BT2
                           ]),  #, sparse.csr_matrix((ndofs_u, 1))]),
            sparse.hstack([-B, sparse.csr_matrix(
                (ndofs_p, ndofs_p))])  #, mean_p.transpose()]),
            # sparse.hstack([sparse.csr_matrix((1, 2*ndofs_u)), mean_p, sparse.csr_matrix((1,1))])
        ],
        "csr")
    return mat
Beispiel #3
0
max_iter = 10
residuals = np.zeros((len(ph.stampa), max_iter))
#### start time steppig procedure
for cn_time in range(0, len(ph.stampa)):
    step_t0 = time.time()
    t_sol = 0
    u_n1 = u_n
    ux_n1 = ux_n
    uy_n1 = uy_n
    p_n1 = p_n

    if ph.time_integration == 'BDF1':
        force = assemble_blockwise_force_BDF1()
        mat = assemble_blockwise_matrix_BDF1()
    elif ph.time_integration == 'Theta' or cn_time == 0:
        S11 = assemble.u_gradv_w_p1(topo_u, x_u, y_u, ux_n1, uy_n1)
        force = assemble_blockwise_force_Theta(S11)
        mat = assemble_blockwise_matrix_Theta(S11)
    else:
        force = assemble_blockwise_force_BDF2()
        mat = assemble_blockwise_matrix_BDF2()

    for k in range(max_iter):
        sol = sp_la.spsolve(mat, force)

        u_n1 = np.reshape(sol[0:2 * ndofs_u], u_n.shape)
        p_n1 = np.reshape(sol[2 * ndofs_u:2 * ndofs_u + ndofs_p], (ndofs_p, 1))
        ux_n1 = np.reshape(u_n1[0:ndofs_u], ux_n.shape)
        uy_n1 = np.reshape(u_n1[ndofs_u:2 * ndofs_u], uy_n.shape)

        if ph.time_integration == 'BDF1':
        sy_asmbl = 2*sy_n - sy_n_old
    elif ph.time_integration == 'CN':
        ux_asmbl = 1.5*ux_n - 0.5*ux_n_old
        uy_asmbl = 1.5*uy_n - 0.5*uy_n_old
        sx_asmbl = 1.5*sx_n - 0.5*sx_n_old
        sy_asmbl = 1.5*sy_n - 0.5*sy_n_old
    else:
        ux_asmbl = ux_n
        uy_asmbl = uy_n
        sx_asmbl = sx_n
        sy_asmbl = sy_n

    (G, GT, GT11, GT22) = assemble_kinematic_coupling(sx_asmbl, sy_asmbl)
    (H, HT, HT11, HT22) = assemble_kinematic_coupling(sx_n, sy_n)
    if(ph.fluid_behavior == "Navier-Stokes"):
        S11 = ph.rho_fluid*assemble.u_gradv_w_p1(topo_u, x_u, y_u, ux_asmbl, uy_asmbl)
        T11 = ph.rho_fluid*assemble.u_gradv_w_p1(topo_u, x_u, y_u, ux_n, uy_n)
    else:
        S11 = sparse.csc_matrix((ndofs_u, ndofs_u))
        T11 = S11

    ###Assemble linear system and solve
    if ph.time_integration == 'BDF1':
        mat = assemble_blockwise_matrix_BDF1(S11)
        force = assemble_blockwise_force_BDF1(ux_n, uy_n, dx_n, dy_n)
    elif ph.time_integration == 'CN':
        mat = assemble_blockwise_matrix_CN(S11)
        force = assemble_blockwise_force_CN(ux_n, uy_n, u_n, p_n, dx_n, dy_n, l_n)
    elif ph.time_integration == 'TR':
        mat = assemble_blockwise_matrix_TR(S11)
        force = assemble_blockwise_force_TR(ux_n, uy_n, u_n, p_n, dx_n, dy_n, l_n)