Boundary integral operators

../_images/bi_operators.svg

IBoundaryIntegralOperator

class pcm::IBoundaryIntegralOperator

Subclassed by pcm::bi_operators::Collocation, pcm::bi_operators::Numerical, pcm::bi_operators::Purisima

Public Functions

Eigen::MatrixXd computeS(const ICavity &cav, const IGreensFunction &gf) const

Computes the matrix representation of the single layer operator

Parameters
  • [in] cav: the discretized cavity

  • [in] gf: a Green’s function

Eigen::MatrixXd computeD(const ICavity &cav, const IGreensFunction &gf) const

Computes the matrix representation of the double layer operator

Parameters
  • [in] cav: the discretized cavity

  • [in] gf: a Green’s function

Private Functions

Eigen::MatrixXd computeS_impl(const std::vector<cavity::Element> &elems, const IGreensFunction &gf) const = 0

Computes the matrix representation of the single layer operator

Parameters
  • [in] elems: list of finite elements of the discretized cavity

  • [in] gf: a Green’s function

Eigen::MatrixXd computeD_impl(const std::vector<cavity::Element> &elems, const IGreensFunction &gf) const = 0

Computes the matrix representation of the double layer operator

Parameters
  • [in] elems: list of finite elements of the discretized cavity

  • [in] gf: a Green’s function

Collocation

class pcm::bi_operators::Collocation : public pcm::IBoundaryIntegralOperator

Implementation of the single and double layer operators matrix representation using one-point collocation.

Calculates the diagonal elements of S as:

\[ S_{ii} = factor * \sqrt{\frac{4\pi}{a_i}} \]
while the diagonal elements of D are:
\[ D_{ii} = -factor * \sqrt{\frac{\pi}{a_i}} \frac{1}{R_I} \]
Author

Roberto Di Remigio

Date

2015, 2016

Private Functions

Eigen::MatrixXd computeS_impl(const std::vector<cavity::Element> &elems, const IGreensFunction &gf) const override

Computes the matrix representation of the single layer operator

Parameters
  • [in] elems: list of finite elements of the discretized cavity

  • [in] gf: a Green’s function

Eigen::MatrixXd computeD_impl(const std::vector<cavity::Element> &elems, const IGreensFunction &gf) const override

Computes the matrix representation of the double layer operator

Parameters
  • [in] elems: list of finite elements of the discretized cavity

  • [in] gf: a Green’s function

Private Members

double factor_

Scaling factor for the diagonal elements of the matrix representation of the S and D operators

Purisima

class pcm::bi_operators::Purisima : public pcm::IBoundaryIntegralOperator

Implementation of the double layer operator matrix representation using one-point collocation and Purisima’s strategy for the diagonal of D.

Calculates the diagonal elements of D as:

\[ D_{ii} = -\left(2\pi + \sum_{j\neq i}D_{ij}a_j \right)\frac{1}{a_i} \]
The original reference is [5]
Author

Roberto Di Remigio

Date

2015, 2016

Private Functions

Eigen::MatrixXd computeS_impl(const std::vector<cavity::Element> &elems, const IGreensFunction &gf) const override

Computes the matrix representation of the single layer operator

Parameters
  • [in] elems: list of finite elements of the discretized cavity

  • [in] gf: a Green’s function

Eigen::MatrixXd computeD_impl(const std::vector<cavity::Element> &elems, const IGreensFunction &gf) const override

Computes the matrix representation of the double layer operator by collocation using the Purisima sum rule to compute the diagonal elements.

The sum rule for the diagonal elements is:

\[ D_{ii} = -\left(2\pi + \sum_{j\neq i}D_{ij}a_j \right)\frac{1}{a_i} \]
Parameters
  • [in] elems: discretized cavity

  • [in] gf: a Green’s function

Private Members

double factor_

Scaling factor for the diagonal elements of the matrix representation of the S operator

Numerical

class pcm::bi_operators::Numerical : public pcm::IBoundaryIntegralOperator

Implementation of the single and double layer operators matrix representation using one-point collocation.

Calculates the diagonal elements of S and D by collocation, using numerical integration.

Author

Roberto Di Remigio

Date

2015, 2016

Private Functions

Eigen::MatrixXd computeS_impl(const std::vector<cavity::Element> &elems, const IGreensFunction &gf) const override

Computes the matrix representation of the single layer operator

Parameters
  • [in] elems: list of finite elements of the discretized cavity

  • [in] gf: a Green’s function

Eigen::MatrixXd computeD_impl(const std::vector<cavity::Element> &elems, const IGreensFunction &gf) const override

Computes the matrix representation of the double layer operator

Parameters
  • [in] elems: list of finite elements of the discretized cavity

  • [in] gf: a Green’s function