def polyXY3(x,y,coeff):
  """XY cubic with cross-terms
        | - | x | x2| x3|
     ---+---+---+---+---+
      - | a | b | d | g |
      y | c | e | h | k |
      y2| f | i | l | n |
      y3| j | m | o | p |
  """
  a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p = coeff
  xy = x*y
  z = a
  z += x*(b + x*(d + x*g))
  z += y*(c + y*(f + y*j))
  z += xy*(e + x*(h + x*k) + y*(i + y*m) + xy*(l + x*n + y*o + xy*p))
  return z