def METHOD_NAME(ic):
    # Set parameter values
    dt = 0.01
    T = 0.05
    nu = 0.01
    # Define time-dependent pressure boundary condition
    p_in = Expression("sin(3.0*t)", t=0.0, degree=1)
    # Define boundary conditions
    noslip  = DirichletBC(V, (0, 0),
                          "on_boundary && \
                           (x[0] < DOLFIN_EPS | x[1] < DOLFIN_EPS | \
                           (x[0] > 0.5 - DOLFIN_EPS && x[1] > 0.5 - DOLFIN_EPS))")
    inflow  = DirichletBC(Q, p_in, "x[1] > 1.0 - DOLFIN_EPS")
    outflow = DirichletBC(Q, 0, "x[0] > 1.0 - DOLFIN_EPS")
    bcu = [noslip]
    bcp = [inflow, outflow]
    # Create functions
    u0 = ic.copy(deepcopy=True)
    u1 = Function(V, name="VelocityNext")
    p1 = Function(Q, name="Pressure")
    # Define coefficients
    k = Constant(dt)
    f = Constant((0, 0))
    # Tentative velocity step
    F1 = (1/k)*inner(u - u0, v)*dx + inner(grad(u0)*u0, v)*dx + \
         nu*inner(grad(u), grad(v))*dx - inner(f, v)*dx
    a1 = lhs(F1)
    L1 = rhs(F1)
    # Pressure update
    a2 = inner(grad(p), grad(q))*dx
    L2 = -(1/k)*div(u1)*q*dx
    # Velocity update
    a3 = inner(u, v)*dx
    L3 = inner(u1, v)*dx - k*inner(grad(p1), v)*dx
    # Assemble matrices
    A1 = assemble(a1)
    A2 = assemble(a2)
    A3 = assemble(a3)
    prec = "amg" if has_krylov_solver_preconditioner("amg") else "default"
    # Begin and end added to python layer in PR 510 in dolfin
    #begin("Projecting initial velocity")
    phi = Function(Q, name = "ScalarPotential")
    b = assemble(-div(u0) * q * dx)
    [bc.apply(A2, b) for bc in bcp]
    solve(A2, phi.vector(), b, "gmres", prec)
    b = assemble(inner(u0, v) * dx - inner(grad(phi), v) * dx)
    [bc.apply(A3, b) for bc in bcu]
    solve(A3, u0.vector(), b, "gmres", "default")
    del(phi, b)
    # end()
    # Time-stepping
    t = dt
    while t < T + DOLFIN_EPS:
        # Update pressure boundary condition
        p_in.t = t
        # Compute tentative velocity step
        # begin("Computing tentative velocity")
        b1 = assemble(L1)
        [bc.apply(A1, b1) for bc in bcu]
        solve(A1, u1.vector(), b1, "gmres", "default")
        # end()
        # Pressure correction
        # begin("Computing pressure correction")
        b2 = assemble(L2)
        [bc.apply(A2, b2) for bc in bcp]
        solve(A2, p1.vector(), b2, "gmres", prec)
        # end()
        # Velocity correction
        # begin("Computing velocity correction")
        b3 = assemble(L3)
        [bc.apply(A3, b3) for bc in bcu]
        solve(A3, u1.vector(), b3, "gmres", "default")
        # end()
        # Move to next time step
        u0.assign(u1)
        t += dt
    return u0