Rodin/Variational/Potential.h file

Potential operator for computing potential fields from kernels.

This file defines the Potential class, which computes potential fields generated by source distributions through convolution with a kernel function. This is fundamental for integral equation methods and boundary element methods.

Mathematical Foundation

Given a kernel $ K(x,y) $ and source distribution $ f(y) $ , the potential at point $ x $ is:

\[ u(x) = \int_\Omega K(x,y) f(y) \, dy \]

Common Kernels

  • Laplace kernel (2D): $ K(x,y) = -\frac{1}{2\pi} \ln|x-y| $
  • Laplace kernel (3D): $ K(x,y) = \frac{1}{4\pi|x-y|} $
  • Helmholtz kernel: $ K(x,y) = \frac{e^{ik|x-y|}}{4\pi|x-y|} $
  • Heat kernel: $ K(x,y,t) = \frac{1}{(4\pi t)^{d/2}} e^{-|x-y|^2/(4t)} $

Applications

  • Boundary element method (BEM)
  • Electrostatics: computing electric potential from charge distribution
  • Fluid dynamics: velocity potential from vorticity
  • Acoustics: sound field from source distribution
  • Potential theory and harmonic functions

Usage Example

// Electric potential from charge distribution
auto kernel = [](const Point& x, const Point& y) {
  Real r = (x - y).norm();
  return 1.0 / (4 * M_PI * r);  // Coulomb kernel
};
auto phi = Potential(kernel, rho);  // φ(x) = ∫ K(x,y)ρ(y) dy

Namespaces

namespace Rodin
The Rodin library for Shape and Topology Optimization.
namespace Rodin::FormLanguage
Module for writing high level abstract expressions.
namespace Rodin::Variational
Module which provides the necessary tools for constructing variational problems.

Classes

template<class LHS, class RHSDerived>
struct Rodin::FormLanguage::Traits<Variational::Potential<LHS, Variational::FunctionBase<RHSDerived>>>
Traits for Potential operator.
template<class LHS, class RHSDerived, class FES, Variational::ShapeFunctionSpaceType Space>
struct Rodin::FormLanguage::Traits<Variational::Potential<LHS, Variational::ShapeFunctionBase<Variational::ShapeFunction<RHSDerived, FES, Space>>>>
Traits for Potential.
template<class LHS, class RHSDerived, class FES, ShapeFunctionSpaceType SpaceType>
class Rodin::Variational::Potential<LHS, ShapeFunctionBase<ShapeFunction<RHSDerived, FES, SpaceType>, FES, SpaceType>>