vector n = (10,10,10);
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
 memory(matrix=none)
{
  test(w1,w2)
  int(grad(u)*grad(w1)) + int(0.5*grad(v)*grad(w1))
  + int(0.5*grad(u)*grad(w2)) + int(grad(v)*grad(w2))
  = int(f1*w1) + int(f2*w2)
    + int(M xmin)(v1*w2 + u1*w1)
    + int(M xmin)(0.5*v1*w1 + 0.5*u1*w2);
  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;
  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";
