Choral
Functions/Subroutines
eigen_Ventcel_2D.f90 File Reference

Go to the source code of this file.

Functions/Subroutines

program eigen_ventcel_2d
  Solves the Ventcel eigenvalue problem More...
 
subroutine pmv_m (y, x)
 Matrix-vector product x –> M*x. More...
 
subroutine kinv_pcg (x, ierr, y)
 
subroutine kinv_mumps (x, ierr, y)
 
subroutine residual ()
 

Function/Subroutine Documentation

◆ eigen_ventcel_2d()

program eigen_ventcel_2d ( )

Solves the Ventcel eigenvalue problem

\(~~~~~ -\Delta u = 0 ~~~\) on \(~~~ \Omega \)
\(~~~~~ \Delta_B u - \partial_n u + \lambda u = 0 ~~~\) on \(~~~ \Gamma = \partial\Omega \)
with \(\Delta_B u\) the Laplace Beltrami operator on the domain boundary

Variational formulation: On the Hilbert space \( V = \left\{ u \in {\rm H}^1(\Omega),~ \nabla_T u \in {\rm L}^2(\Gamma) \right\} \)
with \(\nabla_T u \) the tangential gradient on the domain boundary,
find \( u\in V \), \( \lambda \in\R \) such that for all \( v\in V \)

\( ~~~~~~~\displaystyle{ \int_\Omega \nabla u\cdot\nabla v \,\dx + \int_\Gamma \nabla_T u \cdot \nabla_T v \,\ds = \lambda \int_\Gamma uv \,\ds. }\)

Meshes: curved mesh (quadratic triangles) of the domain \( \Omega \) set to the unit disk.

Discretisation: finite element method on \( X_h \subset V \)
we get the symmetric and generalised eigen-problem: \(~~~~ (S_1 + S_2) U = \lambda \, M_2 U \)

  • \( V_h\) is a \( P^k \) Lagrange finite element space
  • \( S_1 \) stiffness matrix relative to the product \( (u,v) \longrightarrow \int_\Omega \nabla u\cdot\nabla v \,\dx\)
  • \( S_2 \) stiffness matrix relative to the product \( (u,v) \longrightarrow \int_\Gamma \nabla_T u \cdot \nabla_T v \,\ds\)
  • \( M_2 \) mass matrix relative to the product \( (u,v) \longrightarrow \int_\Gamma u\,v \,\ds\)

Method:

  • Arnoldi iterative solver
  • shift-invert mode, shift factor = \( \sigma \)
    \( ~~~~~~~ \frac{1}{\lambda - \sigma} U = K^{-1} M_2 U \) with \( K = S-1+S_2 - \sigma M_2\)
  • solver for the linear system inversions \(K\,x = y \);
    • either with an iterative CG
    • or with the MUMPS direct solver

Post-treatment:

  • computation of the numerical error with exact eigenfunctions, eigenvalues
  • plot of the eigenfunctions with GMSH

Charles PIERRE, 2021.

Definition at line 59 of file eigen_Ventcel_2D.f90.

Here is the call graph for this function:

◆ kinv_mumps()

subroutine eigen_ventcel_2d::kinv_mumps ( real(rp), dimension(:), intent(inout)  x,
logical, intent(out)  ierr,
real(rp), dimension(:), intent(in)  y 
)

Definition at line 351 of file eigen_Ventcel_2D.f90.

◆ kinv_pcg()

subroutine eigen_ventcel_2d::kinv_pcg ( real(rp), dimension(:), intent(inout)  x,
logical, intent(out)  ierr,
real(rp), dimension(:), intent(in)  y 
)

Definition at line 338 of file eigen_Ventcel_2D.f90.

◆ pmv_m()

subroutine eigen_ventcel_2d::pmv_m ( real(rp), dimension(:), intent(out)  y,
real(rp), dimension(:), intent(in)  x 
)

Matrix-vector product x –> M*x.

Definition at line 329 of file eigen_Ventcel_2D.f90.

◆ residual()

subroutine eigen_ventcel_2d::residual ( )

Definition at line 363 of file eigen_Ventcel_2D.f90.

Here is the call graph for this function: