Adaptive mesh refinement on Alfeld splits, macromesh refinement

Dear NGsolve comminuity,

I tried to perform adaptive mesh refinement for methods defined on Alfeld splits. I only want to perform refinement for the macromesh.

The initial mesh is given as follows
ngmesh = unit_square.GenerateMesh(maxh=0.2)
ngmesh.SplitAlfeld()
mesh = Mesh(ngmesh)
macromesh = ngmesh.macromesh
macromeshn = Mesh(macromesh)

def SolveBVP():
fes.Update()
gfu.Update()
a.Assemble()
f.Assemble()
print(fes.ndof)
gfu.vec.data += a.mat.Inverse(fes.FreeDofs()) *f.vec
Then after defining the solver and error estimator, I tried to use the following codes to perform refinement based on the macromesh
SolveBVP()

CalcError()

#mesh refinement

macromeshn.Refine()

ngmesh = macromesh

#update sub-triangle

ngmesh.SplitAlfeld()

mesh = Mesh(ngmesh)

macromesh = ngmesh.macromesh

macromeshn = Mesh(macromesh)

However, when I check the fes.ndof, it seems not to change after refinement. I think this is due to the refinement that I used (I refine the macromesh, then fes.Update could not update)
May I ask for some possible suggestions? Many thanks

Best regards,
Lina