# [Getdp] PML example

Christophe Geuzaine Christophe.Geuzaine at ulg.ac.be
Thu Dec 20 13:03:19 CET 2001

```Lin Ji wrote:
>
> Hi, Christophe,
>     I have been trying to understand the PML example you posted on the list.
> I can see the general idea of PML and your formulation. But I think I need
> more information in order to precisely interpret every detail of your
> formulation.
>
> 1. Can you first describe how the domain and the PML is assembled in your
> example? What does Vol, Vol_C, Vol_S, Sur and pml in the definition of the
> function epsilon[pml] refer to respectively?

Vol is the complete domain, Vol_C is the conducting part (sigma != 0),
Vol_S a source region, Sur is a surface on which you may apply a Newmann
BC and pml is the PML region (here part of vol, due to some
siomplifications that appear for the vectorial PML case).

>
> 2. What are the functions J_s[] and NxH[]? It seems they are related to the
> source of the equation? But, why is there a Dt operation in front of them?

If you write the weak formulation, you will see that there is a time
derivative in front of them. But you can remove the Dt if you want.

>
>    Can you post some reference on PML for acoustic or elastic wave equation?
> I have the original paper by Jean-Pierre Berenger. It is for Electromagnetic
> waves. Thanks for your help.

I don't have references at hand right now, but the principle is the same
as for electromagnetic waves. In the scalar case, if you make the
calculations of the complex tranformation, you should come up with
something like (for a PML transformation along the x-axis, and if Vol
and PML are disjoint):

c[] = 340 ;
cx[] = Complex[1,-3] ;
detJ [ pmlx ] = cx[] ;
invJ [ pmlx ] = 1/TensorDiag[cx[],1,1] ;

FunctionSpace {
{ Name Hgrad_p ; Type Form0 ;
BasisFunction {
{ Name sn ; NameOfCoef pn ; Function BF_Node ;
Support Region[{Vol, PML}] ; Entity NodesOf[ All ] ; }
}
Constraint {
{ NameOfCoef pn ;
EntityType NodesOf ; NameOfConstraint Pressure ; }
}
}
}

Formulation {
{ Name Acoustic_p ; Type FemEquation ;
Quantity {
{ Name p ; Type Local ; NameOfSpace Hgrad_p ; }
}
Equation {
Galerkin { DtDtDof [ 1/c[] * Dof{p} , {p} ] ;
In Vol; Jacobian Vol; Integration I1; }
Galerkin { [ c[] * Dof{d p} , {d p} ] ;
In Vol; Jacobian Vol; Integration I1; }
Galerkin { DtDtDof [ 1/c[] * detJ[] * Dof{p} , {p} ] ;
In PML ; Jacobian Vol ; Integration I1; }
Galerkin { [ c[] * (detJ[] * invJ[] * Dof{d p}) * invJ[] , {d p} ]
;
In PML ; Jacobian Vol ; Integration I1; }
}
}
}

Christophe

--
Christophe Geuzaine

Tel: 32 (0) 4 366 37 10    http://www.geuz.org
Fax: 32 (0) 4 366 29 10    mailto:Christophe.Geuzaine at ulg.ac.be

```