# Choosing preconditioner for unsymmetric pressure-velocity coupled system

I'm working with pressure-velocity coupled systems. It means that instead of solving 4 different linear systems in segregated approach (1 for pressure and 3 for Ux, Uy, Uz), we can solve only one coupled system. Assuming simple 3D rectangular mesh resulting matrix appears to be 7-diagonal with each element is a block 4x4 of arrow form \begin{pmatrix} a_{11} & 0 & 0 & a_{14} \\ 0 & a_{22} & 0 & a_{24} \\ 0 & 0 & a_{33} & a_{34} \\ a_{41} & a_{42} & a_{43} & a_{44} \end{pmatrix}

I would like to make efficient GPU-based BiCGStab solver for it, but it seems, that I have problem with preconditioning. On CPU BiCGStab + ILU or AMG works just fine. But on GPU, I can't use ILU family, because they are not suitable. I've tried AINV preconditioner, but it's either too slow and big or not robust enough. Diagonal preconditioner isn't effective at all. Now I'm thinking of polynomial, though I expect it to have similar problems as AINV.

Are there any other options that could possibly work with my approach, or the whole idea of GPU BiCGStab is a dead end in the first place?

• How much faster is a single BiCGStab iteration on your GPU with say a diagonal preconditioner? Do you have a decent matvec implementation that makes it worth moving the sparse matrix over and iterating at all? Aug 7, 2015 at 17:12
• Unpreconditioned GPU iteration about 20 times faster than unpreconditioned CPU. I had a thought about just using unprec version, but in this case we can easily have > 1000 iteration and even BiCGStab can be quite unstable on that long distance. Previously I worked with reformulated PCG + AINV and it was pretty good.
– soh
Aug 7, 2015 at 17:44
• "But on GPU, I can't use ILU family, because they are not suitable." Could you explain what you mean by "not suitable"? (Disclaimer: I know very little about GPUs.) Thanks! Jun 8, 2016 at 19:16