NiHu
2.0
|
This tutorial demonstrates the usage of NiHu for solving an exterior Dirichlet problem in 3D by means of an indirect collocational type boundary element method.
The indirect BEM, applied to an exterior Dirichlet problem, expresses the radiated pressure from a vibrating surface by a double layer potential:
\( \displaystyle p({\bf x}) = \left(\mathcal{M}\sigma\right)_S({\bf x}) \quad {\bf x} \in F \)
where \( \sigma({\bf y}) \) denotes an appropriate surface source density function without direct physical meaning.
If the point \( \bf x \) approaches the boundary surface \( S \), a boundary integral equation is obtained:
\( \displaystyle p({\bf x}) = \left(\left[\mathcal{M} + \frac{1}{2}\mathcal{I}\right]\sigma\right)_S({\bf x}) \quad {\bf x} \in S \)
The boundary integral equation can be used to obtain the source density function on the surface, once a prescribed surface pressure is defined. In a second step, the radiated pressure is computed by evaluating the double layer potential integrals for external field points.
We are going to implement a Matlab-C++ NiHu application, where
The C++ code is going to be called from Matlab as
[Ms, Mf] = helmholtz_ibem_3d( surf_nodes, surf_elements, field_nodes, field_elements, wave_number);
Ms
will contain the discretised identity operator too.Without going into details regarding the C++ code, we examplify the lines where the operators are discretised using collocation:
The example creates a sphere surface of radius \( R = 1\,\mathrm{m} \) centred at the origin, consisting of triangular elements only. The field point mesh is a surface obtained by revolving a line around the radiator.
The Dirichlet boundary conditions are defined by a point source located at the point \( \mathbf{x}_0 \).
The compiled mex file can be called from Matlab, as demonstrated in the example below:
The generated plot looks like
And the resulting errors read as
log10 mean error on field = -2.42
The full codes of this tutorial are available here: