Now I am pretty sure that there are some bugs in the subroutine crblok3.f. If you look at the code:
if(polfl) then
cn = cos(z0(2)/th)
sn = sin(z0(2)/th)
endif
and
r2 = atan2(dy,dx)*th + z0(2)
it looks like you take Z0(2) as the angle coordinate in a polar frame. But it is NOT true after you project XL into the local frame e1, e2, and e3 to obtain ZL and further obtain Z0 based on ZL. After the projection, Z0(1) may become the angle, and Z0(2) may be the height instead. Here you should have used an angle which is based on XL (or Xmin, Xmax, NOT Zmin, Zmax), just like what you did in prj3dl.f.
I am using FEAP8.3.19. Maybe you already have a fix for this subroutine?
Ziyu