struct eta {
  Float operator() (const Float& z) const {
   check_macro(z != 0 || p > 2, "eta: division by zero (HINT: check mesh)");
   return pow(z, (p-2)/2);
  }
  Float derivative (const Float& z) const {
   check_macro(z != 0 || p > 4, "eta': division by zero (HINT: check mesh)");
   return 0.5*(p-2)*pow(z, (p-4)/2);
  }
  eta (const Float& q) : p(q) {}
  Float p;
};
