Optimal multi-block mesh generation for CFD