void stokes_dirichlet_dg (const space& Xh, const space& Qh,
  form& a, form& b, form& c, form& mp, field& lh, field& kh,
  quadrature_option_type qopt = quadrature_option_type())
{
  size_t k = Xh.degree();
  size_t d = Xh.get_geo().dimension();
  Float beta = (k+1)*(k+d)/d;
  trial u (Xh), p (Qh);
  test  v (Xh), q (Qh);
  a  = integrate (2*ddot(Dh(u),Dh(v)), qopt)
     + integrate ("sides",    beta*penalty()*dot(jump(u),jump(v))
	 	- 2*dot(jump(u),average(Dh(v)*normal()))
	 	- 2*dot(jump(v),average(Dh(u)*normal())), qopt);
  lh = integrate (dot(f(),v), qopt) 
     + integrate ("boundary", beta*penalty()*dot(g(),v)
                - 2*dot(g(),Dh(v)*normal()), qopt);
  b  = integrate (dot(u,grad_h(q)), qopt)
     + integrate ("internal_sides", - dot(average(u),normal())*jump(q), qopt);
  kh = integrate ("boundary", dot(g(),normal())*q, qopt);
  c  = integrate ("internal_sides", h_local()*jump(p)*jump(q), qopt);
  mp = integrate (p*q, qopt);
}
