pygplates.StrainRate
- class pygplates.StrainRate
Bases:
instance
The strain rate at a particular location (parcel of crust) represents the rate at which deformation occurs at that parcel of crust.
The strain rate is represented internally by the spatial gradients of velocity \(\boldsymbol L\) (in units of \(second^{-1}\)) calculated in spherical polar coordinates (ignoring radial dimension):
\[\begin{split}\boldsymbol L &= \boldsymbol v \boldsymbol \nabla\\ \begin{bmatrix} L_{\theta\theta} & L_{\theta\phi} \\ L_{\phi\theta} & L_{\phi\phi} \end{bmatrix} &= \begin{bmatrix} \frac{1}{R} \frac{\partial v_\theta}{\partial \theta} & \frac{1}{R \, \sin{\theta}} \frac{\partial v_\theta}{\partial \phi} - \cot{\theta} \frac{v_\phi}{R}\\ \frac{1}{R} \frac{\partial v_\phi}{\partial \theta} & \frac{1}{R \, \sin{\theta}} \frac{\partial v_\phi}{\partial \phi} + \cot{\theta} \frac{v_\theta}{R}\end{bmatrix}\end{split}\]…where \(\boldsymbol v = (v_\theta, v_\phi)\) is the velocity (in \(m / s\)) in the local South-East coordinate system at a location (\(\theta, \phi\)), and \(R\) is the
Earth mean radius
(in \(m\)).Note
The velocity spatial gradient \(\boldsymbol L\) is calculated at an arbitrary location in a deforming network using the following procedure:For each triangle in a deforming network’s triangulation, an \(\boldsymbol L\) is calculated using velocities at the triangle’s three vertices (and, in the above gradient calculation, \(\cot{\theta}\), \(v_\theta\) and \(v_\phi\) are calculated at the triangle’s centroid location). Then each vertex in the entire triangulation is assigned an \(\boldsymbol L\) that is an area-weighted average of \(\boldsymbol L\)’s from faces incident to the vertex. Finally, \(\boldsymbol L\) at the arbitrary location is either assigned the \(\boldsymbol L\) of the triangle containing the location, or calculated using barycentric or natural neighbour interpolation of the \(\boldsymbol L\)’s from nearby vertices (depending on thestrain rate smoothing parameter
used to resolve thedeforming network
).The spatial gradients of velocity tensor (\(\boldsymbol L\)) can be decomposed into the rate-of-deformation tensor (\(\boldsymbol D\)) and the vorticity (or spin) tensor (\(\boldsymbol W\)):
\[\begin{split}\boldsymbol L &= \boldsymbol D + \boldsymbol W\\ \boldsymbol D &= \frac{\boldsymbol L + \boldsymbol{L}^T}{2}\\ \boldsymbol W &= \frac{\boldsymbol L - \boldsymbol{L}^T}{2}\end{split}\]…where \(D_{\theta\phi} = D_{\phi\theta}\) (since the rate-of-deformation tensor \(\boldsymbol D\) is symmetric).
If \(\Lambda\) is the stretch factor along current direction \(\hat{\boldsymbol n}\) then the rate of stretching per unit stretch is given by:
\[\frac{\dot{\Lambda}}{\Lambda} = \hat{\boldsymbol n} \cdot \boldsymbol D \cdot \hat{\boldsymbol n}\]…where \(\hat{\boldsymbol n}\) is a 2D unit vector in the local South-East coordinate system at a location (\(\theta, \phi\)).
So that means, in the local South direction (ie, \(\hat{\boldsymbol n} = (1,0)\)) the rate of stretching per unit stretch is \(D_{\theta\theta}\), and in the local East direction (ie, \(\hat{\boldsymbol n} = (0,1)\)) it is \(D_{\phi\phi}\). These are the diagonal elements of \(\boldsymbol D\).
The rate of change of angle \(\alpha\) between two current directions \(\hat{\boldsymbol n}_1\) and \(\hat{\boldsymbol n}_2\) is given by:
\[-\dot{\alpha} = \hat{\boldsymbol n}_1 \cdot 2 \boldsymbol D \cdot \hat{\boldsymbol n}_2\]The shear rate is commonly defined as half the rate of change of angle between two directions that are currently perpendicular. And if those directions are aligned with the local coordinate system (ie, \(\hat{\boldsymbol n}_1 = (1,0)\) and \(\hat{\boldsymbol n}_2 = (0,1)\)) then the shear rate is \(D_{\phi\theta}\) (which is the same as \(D_{\theta\phi}\) since \(\boldsymbol D\) is symmetric). So the symmetric off-diagonal elements represent the shear rate between the local coordinate axes (between South and East).
Note
The derivative of the Lagrangian finite strain tensor \(\boldsymbol E\) (see
Strain
) is related to the rate-of-deformation tensor \(\boldsymbol D\) (and the deformation gradient tensor \(\boldsymbol F\) - seeStrain
):\[\dot{\boldsymbol E} = \boldsymbol{F}^T \cdot \boldsymbol D \cdot \boldsymbol F\]And so the rate of stretching per unit stretch \(\frac{\dot{\Lambda}_{(\hat{\boldsymbol N})}}{\Lambda_{(\hat{\boldsymbol N})}}\) can be specified using a direction \(\hat{\boldsymbol N}\) in the initial configuration (eg, at a time before deformation began):.
\[\frac{\dot{\Lambda}_{(\hat{\boldsymbol N})}}{\Lambda_{(\hat{\boldsymbol N})}} = \frac{\hat{\boldsymbol N} \cdot \dot{\boldsymbol E} \cdot \hat{\boldsymbol N}}{\hat{\boldsymbol N} \cdot \boldsymbol C \cdot \hat{\boldsymbol N}}\]…rather than using a direction \(\hat{\boldsymbol n}\) in the current configuration with \(\frac{\dot{\Lambda}_{(\hat{\boldsymbol n})}}{\Lambda_{(\hat{\boldsymbol n})}} = \hat{\boldsymbol n} \cdot \boldsymbol D \cdot \hat{\boldsymbol n}\). Note that \(\boldsymbol C\) is the Lagrangian deformation tensor (see
Strain
).References:
Malvern, L. E. (1969). Introduction to the mechanics of a continuous medium. Prentice-Hall.
Mase, G.T., Smelser, R.E., & Mase, G.E. (2010). Continuum Mechanics for Engineers (3rd ed.). CRC Press.
Strain rates are equality (
==
,!=
) comparable (but not hashable - cannot be used as a key in adict
).Convenience class static data is available for the zero strain rate:
pygplates.StrainRate.zero
A StrainRate can also be pickled.
Added in version 0.46.
- __init__(...)
A StrainRate object can be constructed in more than one way…
- __init__()
Construct a zero strain rate (non-deforming).
zero_strain_rate = pygplates.StrainRate()
Note
Alternatively you can use
zero_strain_rate = pygplates.StrainRate.zero
.- __init__(velocity_gradient_theta_theta,, velocity_gradient_theta_phi, velocity_gradient_phi_theta, velocity_gradient_phi_phi)
Create from the spatial gradients of velocity \(\boldsymbol L\) (in units of \(second^{-1}\)) in spherical polar coordinates (ignoring radial dimension).
\[\begin{split}\boldsymbol L = \begin{bmatrix} L_{\theta\theta} & L_{\theta\phi} \\ L_{\phi\theta} & L_{\phi\phi} \end{bmatrix}\end{split}\]- param velocity_gradient_theta_theta:
\(L_{\theta\theta}\)
- type velocity_gradient_theta_theta:
float
- param velocity_gradient_theta_phi:
\(L_{\theta\phi}\)
- type velocity_gradient_theta_phi:
float
- param velocity_gradient_phi_theta:
\(L_{\phi\theta}\)
- type velocity_gradient_phi_theta:
float
- param velocity_gradient_phi_phi:
\(L_{\phi\phi}\)
- type velocity_gradient_phi_phi:
float
See also
get_velocity_spatial_gradient()
for the spatial gradients of velocity in spherical polar coordinates
Methods
__init__
(...)A StrainRate object can be constructed in more than one way...
Return the rate of change of crustal area per unit area (in units of \(second^{-1}\)).
Return the rate-of-deformation symmetric tensor \(\boldsymbol D\) (in units of \(second^{-1}\)) in spherical polar coordinates (ignoring radial dimension).
Return a measure categorising the type of deformation.
Return the total strain rate (in units of \(second^{-1}\)).
Return the spatial gradients of velocity tensor \(\boldsymbol L\) (in units of \(second^{-1}\)) in spherical polar coordinates (ignoring radial dimension).
Attributes
zero
- get_dilatation_rate()
Return the rate of change of crustal area per unit area (in units of \(second^{-1}\)).
- Return type:
float
The dilatation rate is the rate of increase (if positive) or decrease (if negative) of crustal area per unit area at the current location (at which this strain rate was calculated).
The dilatation rate is defined as the trace of the
rate-of-deformation tensor
\(\boldsymbol D\) (sum of its diagonal elements). So if we define \(A\) as the area of a parcel of crust at the current location, then the dilatation rate is the rate of change of area per unit area, and is given by:\[\frac{\dot{A}}{A} = trace(\boldsymbol D)\]See also
Chapter 4.11 in Continuum Mechanics for Engineers for a derivation of the material derivative of volume. We ignore the radial dimension, hence volume becomes area.
Note
The dilatation rate is invariant with respect to the local coordinate axes (South and East) since \(trace(\boldsymbol D)\) is the first invariant of \(\boldsymbol D\) (see Chapter 3.6 in Continuum Mechanics for Engineers).
Note
As
shown for the rate-of-deformation tensor
\(\boldsymbol D\), the rate of stretching per unit stretch along the local coordinate South and East axes are the diagonal elements \(D_{\theta\theta}\) and \(D_{\phi\phi}\) (which are included in \(trace(\boldsymbol D)\)). And the off-diagonal elements determine the instantaneous shear rate which does not affect expansion/contraction (and is excluded from \(trace(\boldsymbol D))\).
- get_rate_of_deformation()
Return the rate-of-deformation symmetric tensor \(\boldsymbol D\) (in units of \(second^{-1}\)) in spherical polar coordinates (ignoring radial dimension).
\[\begin{split}\boldsymbol D = \begin{bmatrix} D_{\theta\theta} & D_{\theta\phi} \\ D_{\phi\theta} & D_{\phi\phi} \end{bmatrix}\end{split}\]- Returns:
the tuple of \((D_{\theta\theta}, D_{\theta\phi}, D_{\phi\theta}, D_{\phi\phi})\)
- Return type:
tuple (float, float, float, float)
Note
\(\theta\) is co-latitude and hence increases from North to South (and \(\phi\) increases from West to East, as expected).
- get_strain_rate_style()
Return a measure categorising the type of deformation.
- Return type:
float
The strain rate style is a way to represent the type of deformation. The approach used here is from Kreemer, C., G. Blewitt, and E. C. Klein (2014), A geodetic plate motion and Global Strain Rate Model, which defines strain rate style as:
\[\frac{\dot{\varepsilon}_{(1)} + \dot{\varepsilon}_{(2)}}{max(\lvert \dot{\varepsilon}_{(1)} \rvert, \lvert \dot{\varepsilon}_{(2)} \rvert)}\]…and is equivalent to:
\[\frac{D_{(1)} + D_{(2)}}{max(\lvert D_{(1)} \rvert, \lvert D_{(2)} \rvert)}\]..where \(D_{(1)}\) and \(D_{(2)}\) are the principal values of the
rate-of-deformation tensor
\(\boldsymbol D\).A value of -1 represents contraction (eg, pure reverse faulting), 0 represents pure strike-slip faulting and 1 represents extension (eg, pure normal faulting).
Warning
If therate-of-deformation tensor
is zero (ie, no deformation) then NaN (zero divided by zero) will be returned.Also, the returned value is not clamped to the range [-1, 1] when both principal values are non-zero and have the same sign.Note
The strain rate style is invariant with respect to the local coordinate axes (South and East) since it uses the principal values of \(\boldsymbol D\).
Note
A similar measure for style is to divide
dilatation rate
bytotal strain rate
. This is equivalent to \(\frac{trace(\boldsymbol D)}{\sqrt{trace(\boldsymbol{D}^2)}}\) which is also invariant with respect to the local coordinate axes (South and East).
- get_total_strain_rate()
Return the total strain rate (in units of \(second^{-1}\)).
- Return type:
float
The total strain rate represents the magnitude, including both the normal (extension/compression) and shear components, of strain rate.
The total strain rate is defined in terms of the
rate-of-deformation symmetric tensor
\(\boldsymbol D\) as:\[\sqrt{trace(\boldsymbol{D}^2)} = \sqrt{D_{\theta\theta}^2 + D_{\phi\phi}^2 + 2 D_{\phi\theta}^2}\]…where \(D_{\phi\theta} = D_{\theta\phi}\) since \(\boldsymbol D\) is symmetric
Note
The total strain rate is invariant with respect to the local coordinate axes (South and East) since \(\sqrt{trace(\boldsymbol{D}^2)}\) is invariant. This is because it is a function of the second invariant: \(\frac{1}{2} \left[trace(\boldsymbol{D})^2 - trace(\boldsymbol{D}^2)\right]\) and the first invariant: \(trace(\boldsymbol D)\) (see Chapter 3.6 in Continuum Mechanics for Engineers).
- get_velocity_spatial_gradient()
Return the spatial gradients of velocity tensor \(\boldsymbol L\) (in units of \(second^{-1}\)) in spherical polar coordinates (ignoring radial dimension).
\[\begin{split}\boldsymbol L = \begin{bmatrix} L_{\theta\theta} & L_{\theta\phi} \\ L_{\phi\theta} & L_{\phi\phi} \end{bmatrix}\end{split}\]- Returns:
the tuple of \((L_{\theta\theta}, L_{\theta\phi}, L_{\phi\theta}, L_{\phi\phi})\)
- Return type:
tuple (float, float, float, float)
Note
\(\theta\) is co-latitude and hence increases from North to South (and \(\phi\) increases from West to East, as expected).