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
  • cav: the discretized cavity
  • 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
  • cav: the discretized cavity
  • gf: a Green’s function

Private Functions

virtual 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
  • elems: list of finite elements of the discretized cavity
  • gf: a Green’s function

virtual 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
  • elems: list of finite elements of the discretized cavity
  • gf: a Green’s function

Collocation

class pcm::bi_operators::Collocation

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

Inherits from pcm::IBoundaryIntegralOperator

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
  • elems: list of finite elements of the discretized cavity
  • 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
  • elems: list of finite elements of the discretized cavity
  • 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

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

Inherits from pcm::IBoundaryIntegralOperator

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
  • elems: list of finite elements of the discretized cavity
  • 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
  • elems: discretized cavity
  • 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

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

Inherits from pcm::IBoundaryIntegralOperator

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
  • elems: list of finite elements of the discretized cavity
  • 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
  • elems: list of finite elements of the discretized cavity
  • gf: a Green’s function