code: def ccmodmd_xstep(k):
      
  
      YU0 = mp_D_Y0 - mp_D_U0[k]
      YU1 = mp_D_Y1[k] + mp_S[k] - mp_D_U1[k]
      b = sl.rfftn(YU0, None, mp_cri.axisN) + \
        np.conj(mp_Zf[k]) * sl.rfftn(YU1, None, mp_cri.axisN)
      Xf = sl.solvedbi_sm(mp_Zf[k], 1.0, b, axis=mp_cri.axisM)
      mp_D_X[k] = sl.irfftn(Xf, mp_cri.Nv, mp_cri.axisN)
      mp_DX[k] = sl.irfftn(sl.inner(Xf, mp_Zf[k]), mp_cri.Nv, mp_cri.axisN)
docs: Do the X step of the ccmod stage. The only parameter is the slice
      index `k` and there are no return values; all inputs and outputs are
      from and to global variables.