  We propose a general algorithm for non-conforming adaptive mesh refinement
(AMR) of unstructured meshes in high-order finite element codes. Our focus is
on h-refinement with a fixed polynomial order. The algorithm handles
triangular, quadrilateral, hexahedral and prismatic meshes of arbitrarily high
order curvature, for any order finite element space in the de Rham sequence. We
present a flexible data structure for meshes with hanging nodes and a general
procedure to construct the conforming interpolation operator, both in serial
and in parallel. The algorithm and data structure allow anisotropic refinement
of tensor product elements in 2D and 3D, and support unlimited refinement
ratios of adjacent elements. We report numerical experiments verifying the
correctness of the algorithms, and perform a parallel scaling study to show
that we can adapt meshes containing billions of elements and run efficiently on
393,000 parallel tasks. Finally, we illustrate the integration of dynamic AMR
into a high-order Lagrangian hydrodynamics solver.
