Float navier_stokes_dg::dual_space_norm (const value_type& mrh) const {
  value_type rh(2);
  rh[0] = field (Xh);
  rh[1] = field (Qh);
  rh[0].set_u() = smu.solve(mrh[0].u());
  rh[1].set_u() = smp.solve(mrh[1].u());
  return std::max(rh[0].max_abs(), rh[1].max_abs());
}
Float navier_stokes_dg::space_norm (const value_type& xh) const {
  return sqrt (mu(xh[0],xh[0]) + mp(xh[1],xh[1]));
}
Float navier_stokes_dg::duality_product (
  const value_type& mrh, const value_type& msh) const
{
  value_type rh(2);
  rh[0] = field (Xh);
  rh[1] = field (Qh);
  rh[0].set_u() = smu.solve(mrh[0].u());
  rh[1].set_u() = smp.solve(mrh[1].u());
  return dual (rh[0], msh[0]) + dual (rh[1], msh[1]);
}
