vector n = (20,20,20);
vector a = (0,0,0);
vector b = (1,1,1);
mesh M = structured(n,a,b);

scene S = pov("void.pov");
domain Omega = domain(S);

double pi = 4*atan(1);

function Du = pi^2*sin(pi*x);
function Dv = -6;

function f1 = Du + 0.5*Dv;
function f2 = Dv + 0.5*Du;

function u0 = sin(pi*x);
function u1 = -pi*cos(pi*x);

function v0 = x^2+y^2+z^2;
function v1 = 2*x;

solve(u,v) in Omega by M
{
  pde(u)
  -div(grad(u))-div(0.5*grad(v))=f1;
  dnu(u) = u1 on M xmin;
  dnu(v) = 0.5*v1 on M xmin;
  u=u0 on M xmax;
  u=u0 on M ymin;
  u=u0 on M ymax;
  u=u0 on M zmin;
  u=u0 on M zmax;

  pde(v)
  -div(0.5*grad(u))-div(grad(v))=f2;
  dnu(u) = 0.5*u1 on M xmin;
  dnu(v) = v1 on M xmin;
  v=v0 on M xmax;
  v=v0 on M ymin;
  v=v0 on M ymax;
  v=v0 on M zmin;
  v=v0 on M zmax;
}

double I = int(M)((u-u0)^2+(v-v0)^2);

cout << "error: " << sqrt(I) << "\n";
