Again, unless I am missing something, `v_cycle_2d` and `v_cycle_3d` seem very similar, except for the calls to different functions (`2D` and `3D`, as needed), so this whole bit could potentially be shortened substantially.