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
ofSymbol
) – 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
orMutableDenseNDimArray
) – 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:
See also
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)