H2Lib  3.0
Data Structures | Macros | Typedefs | Functions
helmholtzbem3d

This module contains functions to setup and solve boundary integral equations for the Helmholtz problem in 3D. More...

Data Structures

struct  _helmholtz_data
 Simple struct that containts the wavevector $\vec \kappa$ and some source point. More...
 

Macros

#define KERNEL_CONST_HELMHOLTZBEM3D   0.0795774715459476679
 Constant that originates from the fundamental solution of the Helmholtz equation. The value is $ 1 / 4 \pi $.
 

Typedefs

typedef struct _helmholtz_data helmholtz_data
 Typedef of the struct _helmholtz_data.
 

Functions

pbem3d new_slp_helmholtz_bem3d (field k, pcsurface3d gr, uint q_regular, uint q_singular, basisfunctionbem3d row_basis, basisfunctionbem3d col_basis)
 Creates a new bem3d-object for computation of single layer potential matrix of the Helmholtz equation. More...
 
pbem3d new_dlp_helmholtz_bem3d (field k, pcsurface3d gr, uint q_regular, uint q_singular, basisfunctionbem3d row_basis, basisfunctionbem3d col_basis, field alpha)
 Creates a new bem3d-object for computation of double layer potential matrix plus a scalar times the mass matrix of the Helmholtz equation. More...
 
pbem3d new_adlp_helmholtz_bem3d (field k, pcsurface3d gr, uint q_regular, uint q_singular, basisfunctionbem3d row_basis, basisfunctionbem3d col_basis, field alpha)
 Creates a new bem3d-object for computation of adjoint double layer potential matrix plus a scalar times the mass matrix of the Helmholtz equation. More...
 
void del_helmholtz_bem3d (pbem3d bem)
 Delete a bem3d object for the Helmholtz equation. More...
 
field rhs_dirichlet_point_helmholtzbem3d (const real *x, const real *n, const void *data)
 A function based upon the fundamental solution, that will serve as Dirichlet values. More...
 
field rhs_neumann_point_helmholtzbem3d (const real *x, const real *n, const void *data)
 A function based upon the fundamental solution, that will serve as Neumann values. More...
 
field rhs_robin_point_helmholtzbem3d (const real *x, const real *n, const void *data)
 A function based upon the fundamental solution, that will serve for Robin boundary conditions. More...
 
field rhs_dirichlet_plane_helmholtzbem3d (const real *x, const real *n, const void *data)
 A function based upon a plane wave, that will serve as Dirichlet values. More...
 
field rhs_neumann_plane_helmholtzbem3d (const real *x, const real *n, const void *data)
 A function based upon the plane wave, that will serve as Neumann values. More...
 
field rhs_robin_plane_helmholtzbem3d (const real *x, const real *n, const void *data)
 A function based upon the fundamental solution, that will serve for Robin boundary conditions. More...
 
pbem3d new_slp_helmholtz_ocl_bem3d (field k, pcsurface3d gr, uint q_regular, uint q_singular, basisfunctionbem3d row_basis, basisfunctionbem3d col_basis)
 Creates a new bem3d-object for OpenCL computation of single layer potential matrix of the Helmholtz equation. More...
 
pbem3d new_dlp_helmholtz_ocl_bem3d (field k, pcsurface3d gr, uint q_regular, uint q_singular, basisfunctionbem3d row_basis, basisfunctionbem3d col_basis, field alpha)
 Creates a new bem3d-object for computation of double layer potential matrix plus a scalar times the mass matrix of the Helmholtz equation. More...
 
void del_helmholtz_ocl_bem3d (pbem3d bem)
 Delete a bem3d object for the Helmholtz equation. More...
 

Detailed Description

This module contains functions to setup and solve boundary integral equations for the Helmholtz problem in 3D.

Function Documentation

void del_helmholtz_bem3d ( pbem3d  bem)

Delete a bem3d object for the Helmholtz equation.

Parameters
bemObject to be deleted.
void del_helmholtz_ocl_bem3d ( pbem3d  bem)

Delete a bem3d object for the Helmholtz equation.

Parameters
bemObject to be deleted.
pbem3d new_adlp_helmholtz_bem3d ( field  k,
pcsurface3d  gr,
uint  q_regular,
uint  q_singular,
basisfunctionbem3d  row_basis,
basisfunctionbem3d  col_basis,
field  alpha 
)

Creates a new bem3d-object for computation of adjoint double layer potential matrix plus a scalar times the mass matrix of the Helmholtz equation.

After calling this function the resulting bem-object will provide all functionality that is necessary to build up fully populated adjoint double layer potential matrix $ K' + \alpha M \in \mathbb R^{\mathcal I \times \mathcal J}$ and also hmatrix or h2matrix approximation of this matrix.

Parameters
kWavenumber $\kappa$.
grSurface mesh.
q_regularOrder of gaussian quadrature used within computation of matrix entries for single integrals and regular double integrals.
q_singularOrder of gaussian quadrature used within computation of matrix entries singular double integrals.
row_basisType of basis functions that are used for the test space. Can be one of the values defined in basisfunctionbem3d.
col_basisType of basis functions that are used for the trial space. Can be one of the values defined in basisfunctionbem3d.
alphaAdjoint double layer operator + $\alpha$ mass matrix.
Returns
Returns a bem-object that can compute fully populated adlp matrices $ K' + \alpha M $ for the Helmholtz equation.
pbem3d new_dlp_helmholtz_bem3d ( field  k,
pcsurface3d  gr,
uint  q_regular,
uint  q_singular,
basisfunctionbem3d  row_basis,
basisfunctionbem3d  col_basis,
field  alpha 
)

Creates a new bem3d-object for computation of double layer potential matrix plus a scalar times the mass matrix of the Helmholtz equation.

After calling this function the resulting bem-object will provide all functionality that is necessary to build up fully populated double layer potential matrix $ K + \alpha M \in \mathbb R^{\mathcal I \times \mathcal J}$ and also hmatrix or h2matrix approximation of this matrix.

Parameters
kWavenumber $\kappa$.
grSurface mesh.
q_regularOrder of gaussian quadrature used within computation of matrix entries for single integrals and regular double integrals.
q_singularOrder of gaussian quadrature used within computation of matrix entries singular double integrals.
row_basisType of basis functions that are used for the test space. Can be one of the values defined in basisfunctionbem3d.
col_basisType of basis functions that are used for the trial space. Can be one of the values defined in basisfunctionbem3d.
alphaDouble layer operator + $\alpha$ mass matrix.
Returns
Returns a bem-object that can compute fully populated dlp matrices $ K + \alpha M $ for the Helmholtz equation.
pbem3d new_dlp_helmholtz_ocl_bem3d ( field  k,
pcsurface3d  gr,
uint  q_regular,
uint  q_singular,
basisfunctionbem3d  row_basis,
basisfunctionbem3d  col_basis,
field  alpha 
)

Creates a new bem3d-object for computation of double layer potential matrix plus a scalar times the mass matrix of the Helmholtz equation.

After calling this function the resulting bem-object will provide all functionality that is necessary to build up fully populated double layer potential matrix $ K + \frac{1}{2} M \in \mathbb R^{\mathcal I \times \mathcal J}$ and also hmatrix or h2matrix approximation of this matrix.

Parameters
kWavenumber $\kappa$.
grSurface mesh.
q_regularOrder of gaussian quadrature used within computation of matrix entries for single integrals and regular double integrals.
q_singularOrder of gaussian quadrature used within computation of matrix entries singular double integrals.
row_basisType of basis functions that are used for the test space. Can be one of the values defined in basisfunctionbem3d.
col_basisType of basis functions that are used for the trial space. Can be one of the values defined in basisfunctionbem3d.
alphaDouble layer operator + $\alpha$ mass matrix.
Returns
Returns a bem-object that can compute fully populated dlp matrices $ K + \alpha M $ for the laplace equation.
pbem3d new_slp_helmholtz_bem3d ( field  k,
pcsurface3d  gr,
uint  q_regular,
uint  q_singular,
basisfunctionbem3d  row_basis,
basisfunctionbem3d  col_basis 
)

Creates a new bem3d-object for computation of single layer potential matrix of the Helmholtz equation.

After calling this function the resulting bem-object will provide all functionality that is necessary to build up fully populated single layer potential matrix $ V \in \mathbb R^{\mathcal I \times \mathcal I}$ and also hmatrix or h2matrix approximation of this matrix.

Parameters
kWavenumber $\kappa$.
grSurface mesh
q_regularOrder of gaussian quadrature used within computation of matrix entries for single integrals and regular double integrals.
q_singularOrder of gaussian quadrature used within computation of matrix entries singular double integrals.
row_basisType of basis functions that are used for the test space. Can be one of the values defined in basisfunctionbem3d.
col_basisType of basis functions that are used for the trial space. Can be one of the values defined in basisfunctionbem3d.
Returns
Returns a bem-object that can compute fully populated slp matrices $ V $ for the helmholtz equation.
pbem3d new_slp_helmholtz_ocl_bem3d ( field  k,
pcsurface3d  gr,
uint  q_regular,
uint  q_singular,
basisfunctionbem3d  row_basis,
basisfunctionbem3d  col_basis 
)

Creates a new bem3d-object for OpenCL computation of single layer potential matrix of the Helmholtz equation.

After calling this function the resulting bem-object will provide all functionality that is necessary to build up fully populated single layer potential matrix $ V \in \mathbb R^{\mathcal I \times \mathcal I}$ and also hmatrix or h2matrix approximation of this matrix.

Parameters
kWavenumber $\kappa$.
grSurface mesh
q_regularOrder of gaussian quadrature used within computation of matrix entries for single integrals and regular double integrals.
q_singularOrder of gaussian quadrature used within computation of matrix entries singular double integrals.
row_basisType of basis functions that are used for the test space. Can be one of the values defined in basisfunctionbem3d.
col_basisType of basis functions that are used for the trial space. Can be one of the values defined in basisfunctionbem3d.
Returns
Returns a bem-object that can compute fully populated slp matrices $ V $ for the helmholtz equation.
field rhs_dirichlet_plane_helmholtzbem3d ( const real x,
const real n,
const void *  data 
)

A function based upon a plane wave, that will serve as Dirichlet values.

When computing the Neumann data out of the Dirichlet data one can use this function as test data which will generate Dirichlet values of with the following values:

\[ f(\vec x, \, \vec n) = e^{i \langle \vec c, \vec x - \vec s \rangle} \]

where $\vec s$ is some arbitrarily chosen source point and can be set via data->source. Corresponding Neumann data can be generated by using rhs_neumann_plane_helmholtzbem3d.
To build up an appropriate Dirichlet data coefficient vector one needs the $ L_2$-projection. This can be done by passing this function to projectL2_bem3d_c_avector for piecewise constant basis functions or to projectL2_bem3d_l_avector for piecewise linear basis functions.

Parameters
xEvaluation point.
nNormal vector to current evaluation point.
dataAdditional data for evaluating the functional. Here a pointer to a helmholtz_data object is expected.
Returns
returns the function value of $ f(\vec x, \, \vec n) $.
field rhs_dirichlet_point_helmholtzbem3d ( const real x,
const real n,
const void *  data 
)

A function based upon the fundamental solution, that will serve as Dirichlet values.

When computing the Neumann data out of the Dirichlet data one can use this function as test data which will generate Dirichlet values of with the following values:

\[ f(\vec x, \, \vec n) = g(\vec x, \vec z) \]

where $\vec z$ is some arbitrarily chosen source point and can be set via data->source. Corresponding Neumann data can be generated by using rhs_neumann_point_helmholtzbem3d.
To build up an appropriate Dirichlet data coefficient vector one needs the $ L_2$-projection. This can be done by passing this function to projectL2_bem3d_c_avector for piecewise constant basis functions or to projectL2_bem3d_l_avector for piecewise linear basis functions.

Parameters
xEvaluation point.
nNormal vector to current evaluation point.
dataAdditional data for evaluating the functional. Here a pointer to a helmholtz_data object is expected.
Returns
returns the function value of $ f(\vec x, \, \vec n) $.
field rhs_neumann_plane_helmholtzbem3d ( const real x,
const real n,
const void *  data 
)

A function based upon the plane wave, that will serve as Neumann values.

When computing the Neumann data out of the Dirichlet data one can use this function as test data which will generate Dirichlet values of with the following values:

\[ f(\vec x, \, \vec n) = \frac{\partial}{\partial \vec n} e^{i \langle \vec c, \vec x - \vec s \rangle} \]

where $\vec s$ is some arbitrarily chosen source point and can be set via data->source. Corresponding Dirichlet data can be generated by using rhs_dirichlet_plane_helmholtzbem3d.
To build up an appropriate Neumann data coefficient vector one needs the $ L_2$-projection. This can be done by passing this function to projectL2_bem3d_c_avector for piecewise constant basis functions or to projectL2_bem3d_l_avector for piecewise linear basis functions.

Parameters
xEvaluation point.
nNormal vector to current evaluation point.
dataAdditional data for evaluating the functional. Here a pointer to a helmholtz_data object is expected.
Returns
returns the function value of $ f(\vec x, \, \vec n) $.
field rhs_neumann_point_helmholtzbem3d ( const real x,
const real n,
const void *  data 
)

A function based upon the fundamental solution, that will serve as Neumann values.

When computing the Neumann data out of the Dirichlet data one can use this function as test data which will generate Dirichlet values of with the following values:

\[ f(\vec x, \, \vec n) = \frac{\partial g}{\partial \vec n}(\vec x, \vec z) \]

where $\vec z$ is some arbitrarily chosen source point and can be set via data->source. Corresponding Dirichlet data can be generated by using rhs_dirichlet_point_helmholtzbem3d.
To build up an appropriate Neumann data coefficient vector one needs the $ L_2$-projection. This can be done by passing this function to projectL2_bem3d_c_avector for piecewise constant basis functions or to projectL2_bem3d_l_avector for piecewise linear basis functions.

Parameters
xEvaluation point.
nNormal vector to current evaluation point.
dataAdditional data for evaluating the functional. Here a pointer to a helmholtz_data object is expected.
Returns
returns the function value of $ f(\vec x, \, \vec n) $.
field rhs_robin_plane_helmholtzbem3d ( const real x,
const real n,
const void *  data 
)

A function based upon the fundamental solution, that will serve for Robin boundary conditions.

This function is a linear combination of rhs_dirichlet_plane_helmholtzbem3d and rhs_neumann_plane_helmholtzbem3d and serves as Robin boundary condition. The function is evaluated as:

\[ f(\vec x, \, \vec n) = \frac{\partial}{\partial \vec n} e^{i \langle \vec c, \vec x - \vec s \rangle} - i \eta e^{i \langle \vec c, \vec x - \vec s \rangle} \]

where $\vec s$ is some arbitrarily chosen source point and can be set via data->source. The coefficient $\eta$ can be set via data->eta.

To build up an appropriate coefficient vector one needs the some integration on the boundary. This can be done by passing this function to integrate_bem3d_c_avector for piecewise constant basis functions or to integrate_bem3d_l_avector for piecewise linear basis functions.

Parameters
xEvaluation point.
nNormal vector to current evaluation point.
dataAdditional data for evaluating the functional. Here a pointer to a helmholtz_data object is expected.
Returns
returns the function value of $ f(\vec x, \, \vec n) $.
field rhs_robin_point_helmholtzbem3d ( const real x,
const real n,
const void *  data 
)

A function based upon the fundamental solution, that will serve for Robin boundary conditions.

This function is a linear combination of rhs_dirichlet_point_helmholtzbem3d and rhs_neumann_point_helmholtzbem3d and serves as Robin boundary condition. The function is evaluated as:

\[ f(\vec x, \, \vec n) = \frac{\partial g}{\partial \vec n}(\vec x, \vec z) - i \eta g(\vec x, \vec z) \]

where $\vec z$ is some arbitrarily chosen source point and can be set via data->source. The coefficient $\eta$ can be set via data->eta.

To build up an appropriate coefficient vector one needs the some integration on the boundary. This can be done by passing this function to integrate_bem3d_c_avector for piecewise constant basis functions or to integrate_bem3d_l_avector for piecewise linear basis functions.

Parameters
xEvaluation point.
nNormal vector to current evaluation point.
dataAdditional data for evaluating the functional. Here a pointer to a helmholtz_data object is expected.
Returns
returns the function value of $ f(\vec x, \, \vec n) $.