code: def BinaryRoche (r, D, q, F, Omega=0.0):
      r
      return 1.0/sqrt(r[0]*r[0]+r[1]*r[1]+r[2]*r[2]) + q*(1.0/sqrt((r[0]-D)*(r[0]-D)+r[1]*r[1]+r[2]*r[2])-r[0]/D/D) + 0.5*F*F*(1+q)*(r[0]*r[0]+r[1]*r[1]) - Omega
docs: r"""
      Computes a value of the asynchronous, eccentric Roche potential.
  
      If :envvar:`Omega` is passed, it computes the difference.
  
      The asynchronous, eccentric Roche potential is given by [Wilson1979]_
  
      .. math::
  
          \Omega = \frac{1}{\sqrt{x^2 + y^2 + z^2}} + q\left(\frac{1}{\sqrt{(x-D)^2+y^2+z^2}} - \frac{x}{D^2}\right) + \frac{1}{2}F^2(1+q)(x^2+y^2)
  
      @param r:      relative radius vector (3 components)
      @type r: 3-tuple
      @param D:      instantaneous separation
      @type D: float
      @param q:      mass ratio
      @type q: float
      @param F:      synchronicity parameter
      @type F: float
      @param Omega:  value of the potential
      @type Omega: float