step6
Direct Solution of p-Laplacian Equation


step6, a FENICS code which solves the nonlinear p-Laplacian problem directly.

The p-Laplacian equation has the form

       - div kappa(u) grad u = f in Omega = [0,1]x[0,1]
                           u = 0 on dOmega
where:
       kappa(u) = ( epsilon^2 + |grad u|^2) ) ^ ( (p-2)/2 )
                = ( epsilon^2 + wx^2 + wy^2 ) ^ ( (p-2)/2 )

       epsilon = 1.0E-05

       f(x,y) = 2*pi*pi*sin(pi*x) * sin(pi*y)
The parameter epsilon artificially keeps kappa(u) bounded above 0, guaranteeing that the power (p-2)/2 is meaningful, and the equation is solvable.

The program relies heavily on the ideas and implementation embodied in Jay Gopalakrishnan's dpg_laplace code.

Note that I have installed FENICS using Docker, and so to run this script I issue the commands:

  1. cd $HOME/fenicsproject/step6
  2. fenicsproject run
  3. python3 step6.py
  4. exit

Licensing:

The GNU LGPL license.

Related Data and Programs:

dpg_bvp, a FENICS script which uses the Discontinuous Petrov Galerkin (DPG) method to solve a boundary value problem over an interval, by Jay Gopalakrishnan.

dpg_laplace, a FENICS script which uses the Discontinuous Petrov Galerkin (DPG) method to solve a Poisson problem over the unit square, by Jay Gopalakrishnan.

dpg_laplace_adapt, a FENICS script which uses the Discontinuous Petrov Galerkin (DPG) method to solve a Poisson problem over the unit square, with adaptivity, by Jay Gopalakrishnan.

Reference:

  1. John Barrett, W B Liu,
    Finite Element Approximation of the p-Laplacian,
    Mathematics of Computation,
    Volume 61, Number 204, pages 423-537, October 1993.
  2. Patrick Farrell, Hans Petter Langtangen, Marie Rognes, Garth Wells,
    Implementing finite element models in Python/FEniCS: steady nonlinear PDEs,
    MMSC: Python in Scientific Computing,
    May 6, 2015
  3. Jay Gopalakrishnan,
    Five lectures on DPG Methods,
    Spring 2013, Portland State University,
    arXiv:1306.0557v2 [math.NA] 28 Aug 2014.

Source Code:


Last revised on 31 October 2018.