differential_geometry.symbolic.compute_divergence#

differential_geometry.symbolic.compute_divergence(vector_field: MutableDenseNDimArray | ImmutableDenseNDimArray | ImmutableDenseMatrix | MutableDenseMatrix, coordinate_axes: Sequence[Symbol], d_term: ImmutableDenseMatrix | MutableDenseMatrix | ImmutableDenseNDimArray | MutableDenseNDimArray | None = None, basis: Literal['unit', 'covariant', 'contravariant'] = 'contravariant', inverse_metric: ImmutableDenseMatrix | MutableDenseMatrix | ImmutableDenseNDimArray | MutableDenseNDimArray | None = None, metric_density: Basic | None = None) Basic[source]#

Compute the divergence \(\nabla \cdot {\bf F}\) of a vector field symbolically.

In general curvilinear coordinates, the divergence of a vector field \({\bf F}\) is

\[\nabla \cdot {\bf F} = \frac{1}{\rho} \partial_\mu \left(\rho F^\mu\right),\]

where \(\rho = \sqrt{{\rm Det} \; g}\).

Parameters:
  • vector_field (MutableDenseNDimArray) – The vector field components, assumed to be contravariant unless otherwise specified.

  • coordinate_axes (list of Symbol) – The coordinate symbols associated with each axis.

  • d_term (MutableDenseNDimArray, optional) – The D-term components, used to account for the geometry (can be derived from metric_density).

  • basis ({'covariant', 'contravariant'}, optional) – The basis in which the input vector field is expressed. Defaults to ‘contravariant’.

  • inverse_metric (MutableDenseMatrix or MutableDenseNDimArray) – Either a full inverse metric \(g^{\mu\nu}\) (shape (n, n)) or a 1D diagonal array of shape (n,) for orthogonal coordinates.

  • metric_density (Basic, optional) – The metric density \(\rho\), used to compute the D-term if it is not provided.

Returns:

The symbolic expression for the divergence of the vector field.

Return type:

Basic

Examples

In spherical coordinates, then vector field \({\bf F} = r \hat{\bf e}_\theta\) has a divergence

\[\nabla \cdot {\bf F} = \frac{1}{r^2\sin\theta} \partial_\theta \left[r^3\sin \theta \right] = \frac{r}{\tan \theta}.\]

To perform this operation inPyMetric,

>>> import sympy as sp
>>> from pymetric.differential_geometry.symbolic import (
...     compute_divergence, compute_Dterm
... )
>>>
>>> # Define coordinate symbols and metric
>>> r, theta, phi = sp.symbols('r theta phi', positive=True)
>>> coords = [r, theta, phi]
>>> metric_density = r**2 * sp.sin(theta)
>>>
>>> # Define the vector field.
>>> V = sp.Array([0, r, 0])
>>>
>>> # Compute divergence
>>> compute_divergence(V, coords, metric_density=metric_density)
r/tan(theta)