Nonlinear elliptic PDEs

Generally:

\[ \phi(x,y, u, u_x, u_y, u_{xx}, u_{yy}) = 0, \quad (x,y) \in (a,b) \times (c,d). \] with boundary condition \(u(x,y) = g(x,y)\).

  • core: formulate collocation equations at grid points based on discrete approx and solve by quasi-Newton method
  • read elliptic function
  • off-grid evaluation done by global polynomial interpolation:
    • \(\mathbf{U} = \text{mtx}(u)\)
    • interpolate across column \(\mathbf{u}_j\) to get \(v_j = p_j(\xi)\)
    • then interpolate over \(v_j\) and nodes in \(y\)

Demo: micromechanical deflector

λ = 1.5;
ϕ = (X,Y,U,Ux,Uxx,Uy,Uyy) -> @. Uxx + Uyy - λ/(U+1)^2;
g = (x,y) -> 0; 
u = FNC.elliptic(ϕ,g,15,[0,2.5],8,[0,1]);

x = range(0,2.5,length=100);
y = range(0,1,length=50);
U = [u(x,y) for x in x, y in y];
contourf(x,y,U',color=:viridis,aspect_ratio=1,
    xlabel=L"x",ylabel=L"y",zlabel=L"u(x,y)",
    title="Deflection of a MEMS membrane",
    right_margin=3Plots.mm)      

## check boundary is zero
x = range(0,2.5,length=100);
norm( [u(x,0) - g(x,0) for x in x], Inf )

## truncation error
[ u(x,y) for x in 0.5:0.5:2, y in 0.25:0.25:0.75 ]
u = FNC.elliptic(ϕ,g,25,[0,2.5],14,[0,1]);
[ u(x,y) for x in 0.5:0.5:2, y in 0.25:0.25:0.75 ]