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

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

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

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

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

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

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