Mesh refinement is accomplished through edge splitting. In 2-D, an edge is incident to either one or two triangles (boundary edges and internal edges, respectively). To split the edge, we insert a node at the midpoint of the edge. The midpoint is connected to the opposite nodes of the incident triangles. In the figure below we split an internal edge.
Splitting an edge in 2-D.
Splitting an edge in 3-D.