Hej,
> One thing I'm confused is that why we use "make_hanging_node_constraints" and "interpolate_boundary_values" for a new constraints in solve_with_gmg in step-75, instead of the boundary_constraints as done in previous MG tutorials.
Your observation is correct. It is related to the fact that p-multigrid in deal.II uses the new global-coarsening infrastructure (it was introduced in release 7.3). In the other tutorials, the local-smoothing infrastructure is used.
In a nutshell, the difference is that local smoothing is working on refinement levels, while global coarsening works on the complete active levels of multiple Triangulation/DoFHandler objects. In the case of h-multigrid, one works on multiple meshes, which are created by globally coarsening the finest mesh (this is the reason for the name "global coarsening"); in the case of p-multigrid, one would work with the same Triangulation but would distribute different FEs on different DoFHandler objects. Since you work on the active level, you can simple use the functions you would use if you don't work on refinement levels.