3. Boundary Integral Methods#

3.1. Solvers#

The functions in this section solve a Boundary Integral Equation and return the main unknown (e.g. the density or velocity fields). Once the equation is solved, any additional variables can be obtained by simply evaluating the other layer potentials in Flow Variables.

st_repr_velocity(x, y, lambda, bc, method, uguess)#

Solve a two-phase Stokes equation for a given domain.

This function uses the velocity representation from Problem 5.2.2 in [Pozrikidis1992]. The iterative solver to be used can be prescribed with the method argument

  • 'gmres': uses gmres.

  • 'direct': uses mldivide, i.e. A \ b.

Parameters:
  • x – target geometry information.

  • y – source geometry information.

  • lambda – viscosity ratio.

  • bc – see st_boundary_condition_options().

  • method (default 'direct') – method used to solve the system.

  • uguess – initial guess if using gmres.

Returns:

velocity field on the surface.

See also:

st_layer_slp(), st_layer_dlp().

st_repr_density(x, y, lambda, bc, method)#

Solve a two-phase Stokes equation for a given domain.

This function uses the density representation from Problem 5.3.2 in [Pozrikidis1992]. The iterative solver to be used can be prescribed with the method argument

  • 'gmres': uses gmres.

  • 'direct': uses mldivide, i.e. A \ b.

Parameters:
  • x – target geometry information.

  • y – source geometry information.

  • lambda – viscosity ratio.

  • bc – see st_boundary_condition_options().

  • method (default 'direct') – method used to solve the system:

Returns:

density field on the surface.

See also:

st_layer_slp(), st_layer_dlp().

st_repr_density_exterior(x, y, bc)#

Solve a single-phase Stokes equation for a given domain.

This function uses the density representation from Section 4.1 in [Pozrikidis1992]. The solver only supports mldivide with the QR method, since the resulting matrix is generally badly conditioned.

Parameters:
Returns:

density field on the surface.

See also:

st_layer_slp(), st_layer_slp_complete().

st_repr_electric(x, y, S, bc)#

Solve a two-phase electric problem.

Parameters:
Returns:

density on the surface.

See also:

st_layer_electric_dlp().

3.2. Flow Variables#

st_repr_density_velocity(x, y, q, bc)#

Compute surface velocity field.

The surface velocity is computed using the single-layer potential from st_layer_slp(). It has no jump at the interface, since the velocity has no jump at the interface, so the solution is given by Equation 5.3.1 in [Pozrikidis1992].

Parameters:
Returns:

velocity field on the interface.

st_repr_density_pressure(x, y, q, bc)#

Compute the surface pressure.

The surface pressure is computed using the pressure layer potential from st_layer_pressure(). Using these results and Equation 5.3.2 from [Pozrikidis1992], we compute the pressure on both sides of the interface.

Parameters:
Returns:

a tuple (p_ext, p_int) with the exterior and interior pressure distributions on the surface. Note that the pressure is non-dimensional.

st_repr_density_traction(x, y, q, bc, repr)#

Compute the surface traction.

The surface traction is computed using the double-layer potential from st_layer_dlp(). When taking the limit to the boundary, the layer potential has a jump with the limits given by Equations 5.3.6 and 5.3.7 from [Pozrikidis1992].

This function has two modes of operation, where it computes the normal and tangential tractions, i.e.

\[\mathbf{f}_n \triangleq \mathbf{n} \cdot \sigma \quad \text{or} \quad \mathbf{f}_t \triangleq \mathbf{t} \cdot \sigma\]

for the axisymmetric tangent in the \(x-y\) plane.

Parameters:
  • x – target geometry information.

  • y – source geometry information.

  • q – density.

  • bc – see st_boundary_condition_options().

  • repr (default 'normal'.) – compute 'tangential' or 'normal' traction.

Returns:

a tuple (fn_ext, fn_int) with the exterior and interior traction distributions on the surface. Note that the traction is non-dimensional.

Seealso:

st_layer_dlp(), st_layer_tangent_stress().

st_repr_density_gradu(x, y, q, bc, repr)#

Compute normal or tangential velocity gradient.

The normal velocity gradient is computed by using the layer potential representation from st_layer_normal_gradu() with the appropriate surface limits. Similarly, the tangential velocity gradient is computed using the layer potential representation from st_layer_tangent_gradu().

The velocity gradients we are computing are given by

\[\begin{split}\begin{aligned} \mathbf{n} \cdot \nabla \mathbf{u} =~ & n_j \frac{\partial u_i}{\partial x_j}, \\ \mathbf{t} \cdot \nabla \mathbf{u} =~ & t_j \frac{\partial u_i}{\partial x_j}. \end{aligned}\end{split}\]
Parameters:
  • x – target geometry information.

  • y – source geometry information.

  • q – density.

  • bc – see st_boundary_condition_options().

  • repr (default 'normal'.) – string denoting the desired result: 'normal' or 'tangent'.

Returns:

if the density is given, it returns the desired velocity gradient, otherwise the corresponding operator is returned.

st_repr_density_strain(x, y, q, bc)#

Evaluate the on-surface Stokes strain rate tensor.

The strain rate tensor \(\varepsilon\) is given by

\[\varepsilon_{ij} = \frac{1}{2} \left( \nabla \mathbf{u} + \nabla \mathbf{u}^T \right).\]

See st_repr_density_stress() for an explanation of how the strain can also be computed.

Note that the strain tensor is in cylindrical coordinates and has an additional component in the \(\phi\) direction (see vector gradients) that is not computed by this function.

Parameters:
Returns:

a tuple (eps_ext, eps_int) with the strain tensor components.

st_repr_density_stress(x, y, q, bc)#

Evaluate the on-surface Stokes stress tensor.

The complete surface stress tensor is tricky to evaluate on the surface, since all the integral equations relate to the traction, pressure or velocity. However, using those quantities, we can reconstruct the stress itself.

We know we have 3 unknown stress components on each side, so we require 3 equations to have a unique solution:

  • from the traction, we have that the normal component is

\[(\mathbf{n} \cdot \sigma^\pm) \cdot \mathbf{n} = \mathbf{f}^\pm \cdot \mathbf{n}.\]
  • we also have that the tangential component is

\[(\mathbf{n} \cdot \sigma^\pm) \cdot \mathbf{n} = \mathbf{f}^\pm \cdot \mathbf{t}.\]
  • finally, we can use the definition of the stress tensor to obtain a third equation:

\[(\mathbf{t} \cdot \sigma^\pm) \cdot \mathbf{t} = \mathbf{f}^\pm \cdot \mathbf{n} + 2 (\mathbf{t} \cdot \nabla \mathbf{u} \mathbf{t} - \mathbf{n} \cdot \nabla \mathbf{u} \mathbf{n}).\]

We can see that for these steps we require the traction and velocity gradients on both sides of the interface. This boils down to 3 layer potential evaluations.

Parameters:
Returns:

a tuple (s_ext, s_int) containing the on-surface stress tensor. Each one is an array of size (3, ntargets), containing the \(\sigma_{xx}, \sigma_{xy}\) and \(\sigma_{yy}\) components of the stress.

st_repr_density_grads(x, y, q, bc)#

Compute the normal stress gradient.

The stress normal gradient is computed by using the layer potential representation from st_layer_normal_grads() with the appropriate surface limits. The normal stress gradient is given by

\[\nabla \sigma \cdot (\mathbf{n} \otimes \mathbf{n} \otimes \mathbf{n}) = \frac{\partial \sigma_{ij}}{\partial x_k} n_i n_j n_k.\]
Parameters:
Returns:

an array ds containing the on-surface normal jump in the normal stress gradient.

st_repr_density_solution(x, y, bc, vars)#

Compute Stokes solution.

The vars argument is a cell array defining which variables are to be computed. The required elements in the array are

Then additional optional values define the desired flow variables

  • 'u': velocity field

  • 'p': pressure field.

  • 'fn' and 'ft': normal and tangent components of the stress tensor.

  • 'dudn' and 'dudt': normal and tagent components of the velocity gradient.

  • 'eps': strain rate tensor.

  • 'sigma': stress tensor.

  • 'grads': normal component of the stress gradient.

The bc argument should contain all the boundary conditions and problem parameters. The boundary conditions depend on the requested variables in vars, while the problem parameters should be passed in bc.param. For example, when solving a two-phase problem, we expect bc.param.lambda to be present.

Parameters:
  • x – target geometry information.

  • y – source geometry information.

  • bc – see st_boundary_condition_options().

  • vars – desired variables to be computed.

Returns:

a struct containing all the desired variables. The names of the fields match those of the input vars, with a suffix of _ext or _int if the variable has a jump at the interface.

3.3. Electric Variables#

st_repr_electric_potential(x, y, q, bc)#

Compute surface electric potential.

Parameters:
Returns:

electric potential at target points.

st_repr_electric_field(x, y, q, bc)#

Compute surface electric field.

Parameters:
Returns:

electric potential at target points.

3.4. Layer Potentials#

The layer potentials that are implemented here are mainly to complement the single-layer representation of the two-phase Stokes flow obtained from st_repr_density(). However, they should not be used as is, since they are just building blocks for the complete representations in Flow Variables and Electric Variables.

st_layer_slp(x, y, q, repr)#

Evaluate the axisymmetric Stokes single-layer potential.

This function computes the Stokes single-layer potential, as given in Equation 4.1.1 of [Pozrikidis1992]:

\[\mathcal{S}[\mathbf{q}](\mathbf{x}_0) = \int_\Sigma G_{ij}(\mathbf{x}, \mathbf{x}_0) q_j(\mathbf{x}) \,\mathrm{d}\mathbf{x},\]

where the kernel \(G_{ij}\) is given in Equation 2.2.8. The kernel itself is computed using st_knl_ax_velocity(). There are two different representations that this function provides

  • 'density': implements the standard single-layer potential.

  • 'normal': assumes that the density is of the form \(q \mathbf{n}\), where \(\mathbf{n}\) is the normal vector, and integrates the normal into the kernel formulation.

The two are only meaningfully different when the matrix operator is constructed.

Parameters:
  • x – target geometry information.

  • y – source geometry information.

  • q – density.

  • repr (default 'density') – desired form of the single-layer potential.

Returns:

if the density is given, then we evaluate the single-layer, otherwise, a matrix operator is returned.

st_layer_dlp(x, y, q, repr)#

Evaluate the axisymmetric double-layer potential.

This function computes the Stokes double-layer potential, as given in Equation 4.3.1 of [Pozrikidis1992]:

\[\mathcal{D}[\mathbf{q}](\mathbf{x}_0) = \int_\Sigma T_{ijk}(\mathbf{x}, \mathbf{x}_0) q_j(\mathbf{x}) n_k(\mathbf{x}) \,\mathrm{d}\mathbf{x},\]

or in Equation 5.3.4:

\[\mathcal{D}_0[\mathbf{q}](\mathbf{x}_0) = n_k(\mathbf{x}_0) \int_\Sigma T_{ijk}(\mathbf{x}, \mathbf{x}_0) q_j(\mathbf{x}) \,\mathrm{d}\mathbf{x},\]

where the kernel \(T_{ijk}\) is given in Equation 2.2.11. Taking the limit to the surface, both kernels have jump conditions, which are given by Equations 4.1.7 and 4.1.8. These two representations are called

  • 'velocity' for \(\mathcal{D}\), since this layer potential appears in the representation with the velocity as the unknown, based on the Lorentz Reciprocal Theorem, as given in Equation 5.2.9.

  • 'density' for \(\mathcal{D}_0\), since this layer potential appears in the representation where a density is the unknown, as given by in Equation 5.3.9.

Parameters:
  • x – target geometry information.

  • y – source geometry information.

  • q – density.

  • repr (default 'density') – desired form of the double-layer potential.

Returns:

if the density is given, then we evaluate the double-layer, otherwise, a matrix operator is returned.

st_layer_pressure(x, y, q)#

Evaluate the axisymmetric pressure layer potential.

The pressure layer potential given by:

\[\mathcal{P}[\mathbf{q}](\mathbf{x}_0) = \int_\Sigma p_j(\mathbf{x}, \mathbf{x}_0) q_j(\mathbf{x}) \,\mathrm{d}\mathbf{x},\]

where the kernel \(p_j\) is given by Equation 2.2.10 of [Pozrikidis1992].

Parameters:
  • x – target geometry information.

  • y – source geometry information.

  • q – density.

Returns:

pressure layer potential. If the density is given, then we evaluate the layer potential, otherwise, a matrix operator is returned.

st_layer_normal_gradu(x, y, q)#

Evaluate the axisymmetric normal velocity gradient potential.

This function computes the normal velocity gradient with the kernel given by Equation 3.8 in [Gonzalez2009]:

\[\mathcal{U}_n[\mathbf{q}](\mathbf{x}_0) = n_k(\mathbf{x}_0) \int_\Sigma U_{ijk}(\mathbf{x}, \mathbf{x}_0) q_j(\mathbf{x}) \,\mathrm{d}\mathbf{x}.\]
Parameters:
  • x – target geometry information.

  • y – source geometry information.

  • q – density.

Returns:

if the density is given, then we evaluate the layer potential, otherwise, a matrix operator is returned.

st_layer_tangent_gradu(x, y, q)#

Evaluate the axisymmetric tangent velocity gradient potential.

This function computes the tangent velocity gradient with the kernel given by Equation 3.8 in [Gonzalez2009]:

\[\mathcal{U}_t[\mathbf{q}](\mathbf{x}_0) = t_k(\mathbf{x}_0) \int_\Sigma U_{ijk}(\mathbf{x}, \mathbf{x}_0) q_j(\mathbf{x}) \,\mathrm{d}\mathbf{x}.\]
Parameters:
  • x – target geometry information.

  • y – source geometry information.

  • q – density.

Returns:

if the density is given, then we evaluate the layer potential, otherwise, a matrix operator is returned.

st_layer_tangent_stress(x, y, q)#

Evaluate the axisymmetric tangent double-layer potential.

This function computes the tangent Stokes double-layer potential, as given by:

\[\mathcal{D}_t[\mathbf{q}](\mathbf{x}_0) = t_k(\mathbf{x}_0) \int_\Sigma T_{ijk}(\mathbf{x}, \mathbf{x}_0) q_j(\mathbf{x}) \,\mathrm{d}\mathbf{x},\]
Parameters:
  • x – target geometry information.

  • y – source geometry information.

  • q – density.

Returns:

if the density is given, then we evaluate the double-layer, otherwise, a matrix operator is returned.

st_layer_slp_complete(x, y, q)#

Evaluate the completion to a single-layer potential.

Evaluates the regular layer-potential

\[\mathcal{N}[\mathbf{q}](\mathbf{x}_0) = n_i(\mathbf{x}_0) \int_\Sigma n_j(\mathbf{x}) q_j(\mathbf{x}) \,\mathrm{d}\mathbf{x}\]

This can be used to complete the single-layer potential, which has normal vectors in its nullspace.

Parameters:
  • x – target geometry information.

  • y – source geometry information.

  • q – density.

Returns:

if the density is given, then we evaluate the layer potential, otherwise, a matrix operator is returned.

st_layer_normal_grads(x, y, q)#

Evaluate the axisymmetric stress normal gradient layer potential.

The layer potential is given by:

\[\mathcal{R}[\mathbf{q}](\mathbf{x}_0) = \int_\Sigma R_{ijkl}(\mathbf{x}, \mathbf{x}_0) n_i(\mathbf{x}_0) n_k(\mathbf{x}_0) n_l(\mathbf{x}_0) q_j(\mathbf{x}) \,\mathrm{d}\mathbf{x},\]

where the axisymmetric kernel \(R_{ijkl}\) is computed by st_knl_ax_stress_gradient(). The general form of the kernel is given by Equation 3.8 in [Gonzalez2009]. It has a jump given by:

\[\mathcal{R}[\mathbf{q}](\mathbf{x}_0) = \pm 4 \pi \kappa_x \mathbf{q} \cdot \mathbf{n} \mp 4 \pi \mathbf{t} \frac{\partial \mathbf{q}}{\partial s} + \mathcal{R}[\mathbf{q}](\mathbf{x}_0).\]

Using these equations, we can compute the normal stress gradient on both sides of the interface.

Parameters:
  • x – target geometry information.

  • y – source geometry information.

  • q – density.

Returns:

stress gradient normal layer potential.

st_layer_electric_slp(x, y, q)#

Evaluate axisymmetric Laplace single-layer potential.

Parameters:
  • x – target geometry information.

  • y – source geometry information.

  • q – density.

Returns:

single-layer potential.

st_layer_electric_dlp(x, y, q, repr)#

Evaluate axisymmetric Laplace double-layer potential.

Parameters:
  • x – target geometry information.

  • y – source geometry information.

  • q – density.

Returns:

single-layer potential.

st_layer_quadrature(x, y, singularity, opts)#

Construct quadrature rules for singular layer potential integration.

The singularity is a cell array of one of 'reg', 'log', 'cpv', 'hfp' or a layer-potential identifiers accepted by st_repr_density_solution(). If an identifier is given, they get mapped to the actual type of the singularity.

The opts is a struct with keys that match the elements of the singularity cell array. Each field is then another struct that specifies the fields:

  • method: one of the quadrature methods, e.g. st_quad_carley().

  • nnodes: number of quadrature nodes.

  • other arguments accepted by the respective quadrature rule.

An example construction can be as follows:

s_log = struct('nnodes', 4, 'npoly', 4, 'method', 'carley');
s_fn = struct('nnodes', 4, 'method', 'leggauss');
o = struct('log', s_log, 'fn', s_fn);
quad = st_layer_quadrature(x, y, {'log', 'fn', 'u'}, o);

We can see that the exact options for the 'log' and 'fn' fields are specified, but the quadrature rules for 'u' are going to be constructed with default values.

Parameters:
  • x – target geometry struct.

  • y – source geometry struct.

  • singularity (default {'reg'}) – cell array of singularity types.

  • opts – options to construct quadrature rules for each type of singularity.

Returns:

a struct with one field per sigularity type containing the quadrature rules in a format that is used by st_layer_evaluate().

st_layer_evaluate(x, y, knl, q)#

Evaluate an axisymmetric layer potential.

This function evaluates a layer potential of the general form

\[\mathcal{K}_{ik\dots}[\mathbf{q}](\mathbf{x}) = \int_\Sigma K_{ijk\dots}(\mathbf{x}, \mathbf{y}) q_j(\mathbf{y}) \,\mathrm{d}S.\]

This is done either by directly applying it to a given density \(\mathbf{q}\), or by constructing discrete matrix operators that do this.

The layer potential is defined by the knl argument, that describes the kernel we are evaluating. The way this function works is that:

  • the knl is responsible for computing the kernel and caching the fields where it is stored.

  • the current function is responsible for telling the knl at which points to evaluate the kernel and with what quadrature rules.

The knl struct has the following main fields

  • quad: special quadrature rules to be used near singularities or cusps arising from singularity subtraction. The required quadrature rules can be constructed with st_layer_quadrature().

  • knl = evaluate(knl, target, source): a function handle that takes the source and target point information, evaluates the kernel and returns the updated knl struct.

  • any additional fields are private and can be manipulated in the evaluate call.

The input source and target structs have mainly the same fields as the input x and y structs. On top of that, the target struct has a i field denoting the current target point. The source and target structs also have a jstart and jend fields corresponding to the range of source points that should be computed. This range can be used to index into other arrays such as the normal source.n.

Parameters:
  • x – target geometry struct.

  • y – source geometry struct.

  • knl – struct containing kernel information.

  • q – density at the collocation points.

Returns:

knl struct with updated fields containing the layer potential.

3.5. Axisymmetric Kernels#

The kernel functions allow evaluating any of the kernels at specific points. The axismymmetric kernels are particularly non-trivial to evaluate (just check out the code for st_knl_ax_stress_gradient()), so they are conveniently wrapped here. They are generally meant to be used as follows

Q = zeros(2, 2, 2);
[F, E] = st_ellipke(x, x0);
[I50, I51, I52, I53] = st_ellint_order5(x, x0, F, E);
Q = st_knl_ax_stress_target(Q, x, x0, I50, I51, I52, I53);

This format allows us to separate the computation of the elliptic integrals \(F\) and \(E\), the integrals \(I_{mn}\) (see [Pozrikidis1992]) and the actual kernel. The reason for this is performance, since now we can compute some of these only once for multiple kernels.

st_knl_ax_pressure(P, x, x0, I30, I31)#

Pressure Green function for Stokes flow in free space.

The layer potential corresponding to this kernel is computed in st_layer_pressure().

The greenlet is given by Equation 2.2.10 in [Pozrikidis1992]. This function computes \(p_j\) at the given points in an axisymmetric setting.

Parameters:
  • x – source point.

  • x0 – target point.

  • I – elliptic integrals, see st_ellint_order3().

Returns:

an array of size (1, 2) containing the kernel components.

See also:

st_ellipke().

st_knl_ax_pressure_ss(Rn, x, x0, n, n0, I30, I31)#

Axisymmetric kernel used for subtracting the singularity of the pressure kernel given by st_knl_ax_pressure().

The layer potential corresponding to this kernel is computed in st_layer_pressure().

The singularity subtraction should proceed as follows:

\[\int_\Sigma (p_j(\mathbf{x}, \mathbf{x}_0) q_j(\mathbf{x}) - r_j(\mathbf{x}, \mathbf{x}_0) q_j(\mathbf{x}_0)) \,\mathrm{d}\mathbf{x}.\]
Parameters:
  • x – source point.

  • x0 – target point.

  • n – normal vector at source point.

  • n0 – normal vector at target point.

  • I – elliptic integrals, see st_ellint_order3().

Returns:

an array of size (2,) containing the kernel components.

See also:

st_ellipke().

st_knl_ax_velocity(M, x, x0, I10, I11, I30, I31, I32)#

Axisymmetric free space Stokeslet.

The layer potential corresponding to this kernel is computed in st_layer_slp().

The Stokeslet is given by Equation 2.2.8 in [Pozrikidis1992]. In axisymmetic coordinates, it can be found in Equation 2.4.5.

Parameters:
  • x – source point.

  • x0 – target point.

  • I – elliptic integrals, see st_ellint_order3().

Returns:

an array of size (2, 2) containing the kernel components.

See also:

st_ellipke().

st_knl_ax_stress_source(Q, x, x0, I50, I51, I52, I53)#

Axisymmetric free space Stresslet.

The layer potential corresponding to this kernel is computed in st_layer_dlp().

This function evaluates the axisymmetric Stresslet corresponding to the velocity representation in st_layer_dlp(). This has the normal vector evaluated at the source point, leading to slightly different formulae.

The exact axisymmetric form can be retrieved from the \(q\) coefficients in Appendix B of [Pozrikidis1990].

Parameters:
  • x – source point.

  • x0 – target point.

  • I – elliptic integrals, see st_ellint_order5().

Returns:

an array of size (2, 2, 2) containing the kernel components.

See also:

st_ellipke().

st_knl_ax_stress_target(Q, x, x0, I50, I51, I52, I53)#

Axisymmetric free space Stresslet.

The layer potential corresponding to this kernel is computed in st_layer_dlp().

This function evaluates the axisymmetric Stresslet corresponding to the density representation in st_layer_dlp(). This has the normal vector evaluated at the target point, leading to slightly different formulae.

The exact axisymmetric form can be retrieved from the \(h\) coefficients in Appendix B of [Pozrikidis1990].

Parameters:
  • x – source point.

  • x0 – target point.

  • I – elliptic integrals, see st_ellint_order5().

Returns:

an array of size (2, 2, 2) containing the kernel components.

See also:

st_ellipke().

st_knl_ax_gradu(U, x, x0, I30, I31, I50, I51, I52, I53)#

Axisymmetric free space velocity gradient kernel.

The layer potentials corresponding to this kernel are computed in st_layer_normal_gradu() and st_layer_tangent_gradu(). Given in Equation 3.8 in [Gonzalez2009].

Parameters:
  • x – source point.

  • x0 – target point.

  • I – elliptic integrals, see st_ellint_order5().

Returns:

an array of size (2, 2, 2) containing the kernel components.

See also:

st_ellipke().

st_knl_ax_stress_gradient(Rn, x, x0, n0, I50, I51, I52, I53, I70, I71, I72, I73, I74)#

Axisymmetric kernel for the normal gradient of the Stresslet.

The layer potential corresponding to this kernel is computed in st_layer_normal_grads().

The general form of the kernel can be found in Equation 3.8 from [Gonzalez2009]. This function computes the axisymmetric form of the \(R_{ijkl}\) kernel, which has been analytically integrated in the azimuthal direction.

Parameters:
  • x – source point.

  • x0 – target point.

  • I – elliptic integrals, see st_ellint_order5().

Returns:

an array of size (2,) containing the kernel components.

See also:

st_ellipke().

st_knl_ax_electric_slp(~, x, ~, I10)#

Single-layer potential kernel for Laplace equation.

The kernel is not normalized by \(4 \pi\) to match the Stokes kernels, which are also not normalized.

Parameters:
  • x – source point.

  • x0 – target point.

  • I – elliptic integrals, see st_ellint_order3().

Returns:

an array of size (1, 1) containing the kernel.

See also:

st_ellipke().

st_knl_ax_electric_dlp_source(D, x, x0, I30, I31)#

Double-layer potential kernel for the Laplace equation.

The kernel is not normalized by \(4 \pi\) to match the Stokes kernels, which are also not normalized.

This kernel is meant to be dotted with the normal vector at the source. The corresponding layer-potential is computed in st_layer_electric_dlp().

Parameters:
  • x – source point.

  • x0 – target point.

  • I – elliptic integrals, see st_ellint_order3().

Returns:

an array of size (1, 2) containing the kernel components.

See also:

st_ellipke().

st_knl_ax_electric_dlp_target(D, x, x0, I30, I31)#

Adjoint double-layer potential kernel for the Laplace equation.

The kernel is not normalized by \(4 \pi\) to match the Stokes kernels, which are also not normalized.

This kernel is meant to be dotted with the normal vector at the target. The corresponding layer-potential is computed in st_layer_electric_dlp().

Parameters:
  • x – source point.

  • x0 – target point.

  • I – elliptic integrals, see st_ellint_order3().

Returns:

an array of size (1, 2) containing the kernel components.

See also:

st_ellipke().

3.6. Two-dimensional Kernels#

Note

Currently unused, but extensions to 2D should not be too hard.

st_knl_2d_pressure(P, x, x0, varargin)#

2D free space pressure kernel.

Given in Equation 2.6.19 in [Pozrikidis1992].

Parameters:
  • x – source point.

  • x0 – target point.

Returns:

an array of size (2, 2) containing the kernel components.

st_knl_2d_velocity(M, x, x0, varargin)#

2D free space Stokeslet kernel.

Given in Equation 2.6.17 in [Pozrikidis1992].

Parameters:
  • x – source point.

  • x0 – target point.

Returns:

an array of size (2, 2) containing the kernel components.

st_knl_2d_stress(T, x, x0, varargin)#

2D free-space stress kernel.

Given in Equation 2.6.20 in [Pozrikidis1992].

Parameters:
  • x – source point.

  • x0 – target point.

Returns:

an array of size (2, 2) containing the kernel components.