GFem language documentation -- 5.4 2-system example

Previous: 5.3 Complex number example
Up: 5 Examples

## 5.4 2-system example

    /* This is a 2-system example for which the solution is know
    analytically, thus the precision of Gfem can be checked */
    nowait;
    ns:=40;
    border(1,0,2*pi,2*ns) begin x:= 3*cos(t); y:= 2*sin(t); end;
    border(2,0,2*pi,ns)   begin x:= cos(-t); y:= sin(-t); end;
    buildmesh(ns*ns);

    ue= sin(x+y);
    ve = ue;
    p = ue;
    nx = -x;
    ny =- y;
    dxue = cos(x+y);

    c = 0.2;
    a1 = y;
    a2 =x;
    nu = 1;
    nu11 = 1;
    nu22 = 2;
    nu21 =0.3;
    nu12 =0.4;
    b=1;

    dnuue=dxue*(nu*(nx+ny) +
    (nu11 + nu12)*nx + (nu21+ nu22)*ny);
    g = ue*c+dnuue;
    f = b*ue+dxue*(a1+a2) +ue*(2*nu+nu11+nu12+nu21+nu22);

    solve(u,v) begin
    onbdy(1) u = p;
    onbdy(1) v = p;
    onbdy(2)
              id(u)*c/2 + id(v)*c/2 + dnu(u) = g;
    onbdy(2)   id(v)*c + dnu(v) = g;
    pde(u) id(u)*b + dx(u)*a1 + dy(u)*a2
              -laplace(u)*nu - dxx(u)*nu11 -
                 dxy(u)*nu12 - dyx(u)*nu21 - dyy(u)*nu22 =f;

    pde(v) id(v)*b/2+id(u)*b/2
           + dx(v)*a1 + dy(v)*a2 -laplace(v)*nu
            - dxx(v)*nu11 - dxy(v)*nu12 -
            dyx(v)*nu21 - dyy(v)*nu22 =f;
    end;

    plot(abs(u-ue) + abs(v-ve));