Hallo,
I am confused about selecting solvers in chorin's projection method. As the matrix obtained in first step(velocity) is not positive definite so i am thinking about using gmres but i have no idea for implementing preconditioner in this case. 
chorin's method is in attachment.
This is how i am implementing in code:-
void Navierstokes<dim>::solve ()
{
    std::cout<< "    Solving...."<<std::endl;
    std::cout<<"     Assembling Velocity matrix...."<<std::endl;
    assemble_velocity ();
        int    vel_max_its     = 1000;
        double vel_eps         = 1e-8;
        int    vel_Krylov_size = 30;
    {
        SolverControl solver_control (vel_max_its, vel_eps*velocity_rhs.l2_norm());
        SolverGMRES<Vector<double>> gmres (solver_control,
                           SolverGMRES<>::AdditionalData (vel_Krylov_size));
        gmres.solve (velocity_matrix, velocity_solution, velocity_rhs, preconditioner_velocity);
    }
    std::cout<<"     Assembling pressure matrix and rhs...."<<std::endl;
    assemble_pressure ();
    assemble_pressure_rhs ();
    {
        SolverControl solver_control (pressure_matrix.m(),
                                      1e-6*pressure_rhs.l2_norm());
        SolverControl           solver_control (1000, 1e-12);
        SolverCG<>              solver (solver_control);
        solver.solve (pressure_matrix, pressure_solution, pressure_rhs,
                    PreconditionIdentity());
        std::cout << "   " << solver_control.last_step()
                << " CG iterations needed to obtain convergence."
                << std::endl;
    }
    std::cout<<"     Assembling update velocity matrix...."<<std::endl;
    assemble_update ();
    assemble_update_rhs ();
    {
        SolverControl solver_control (vel_max_its, vel_eps*velocity_rhs.l2_norm());
        SolverGMRES<Vector<double>> solver (solver_control);
        solver.solve (update_matrix, update_velocity_solution, update_velocity_rhs,  PreconditionIdentity());
    }
}
Thanks,
Pankaj