Stroh

class atomman.defect.Stroh(C: ElasticConstants, burgers: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes], ξ_uvw: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, slip_hkl: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, transform: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, axes: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, box: Box | None = None, m: str | _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | bytes | _NestedSequence[bool | int | float | complex | str | bytes] = 'x', n: str | _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | bytes | _NestedSequence[bool | int | float | complex | str | bytes] = 'y', cart_axes: bool = False, tol: float = 1e-08)

Bases: VolterraDislocation

Class for solving the Eshelby anisotropic solution for a straight dislocation or crack using the Stroh method.

property A: ndarray

A eigenvectors

Type:

numpy.ndarray

property K_tensor: ndarray

The energy coefficient tensor

Type:

numpy.ndarray

property L: ndarray

L eigenvectors

Type:

numpy.ndarray

displacement(pos: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes]) ndarray

Compute the position-dependent anisotropic displacement.

u_i = 1 / (2 π i) (Σ_a +- k_a A_ai (L_aj*burgers_j) ln(η_a))

Parameters:

pos (array-like object) – 3D vector position(s).

Returns:

The computed 3D vector displacements at all given points.

Return type:

numpy.ndarray

eta(pos: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes]) ndarray

Compute the eta coordinates based on positions, p, m and n. Used by displacement() and stress().

η_a = x_i m_i + p_a x_j n_j

Parameters:

pos (array-like object) – 3D vector position(s).

Returns:

The computed eta factor at all given points.

Return type:

numpy.ndarray

property k: ndarray

k normalization factors

Type:

numpy.ndarray

property p: ndarray

p eigenvalues

Type:

numpy.ndarray

solve(C: ElasticConstants, burgers: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes], ξ_uvw: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, slip_hkl: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, transform: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, axes: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, box: Box | None = None, m: str | _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | bytes | _NestedSequence[bool | int | float | complex | str | bytes] = 'x', n: str | _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | bytes | _NestedSequence[bool | int | float | complex | str | bytes] = 'y', cart_axes: bool = False, tol: float = 1e-08)

Computes the elastic solution for an anisotropic volterra dislocation.

Parameters:
  • C (atomman.ElasticConstants) – The medium’s elastic constants.

  • burgers (array-like object) – The dislocation’s Burgers vector.

  • ξ_uvw (array-like object) – The Miller crystal vector associated with the dislocation’s line direction. Must be given with slip_hkl to identify the transformation matrix to use on C and burgers.

  • slip_hkl (array-like object) – The Miller plane indices associated with the dislocation’s slip plane. Must be given with slip_hkl to identify the transformation matrix to use on C and burgers.

  • transform (array-like object, optional) – A 3x3 set of orthogonal Cartesian vectors that define the transformation matrix to use on C and burgers to convert from the standard (unit cell) and dislocation orientations. The 3 vectors will automatically be converted into unit vectors. Using this is an alternative to using ξ_uvw and slip_hkl.

  • axes (array-like object, optional) – Same as transform. Retained for backwards compatibility.

  • box (atomman.Box, optional) – The unit cell’s box that crystal vectors are taken with respect to. If not given, will use a cubic box with a=1 meaning that burgers, ξ_uvw and slip_hkl will be interpreted as Cartesian vectors.

  • m (str or array-like object, optional) – The 3D Cartesian unit vector to align with the dislocation solution’s m-axis, i.e. the in-plane direction perpendicular to the dislocation line. Also accepts str values of ‘x’, ‘y’, or ‘z’, in which case the dislocation axis will be aligned with the corresponding Cartesian axis. Default value is ‘x’.

  • n (str or array-like object, optional) – The 3D Cartesian unit vector to align with the dislocation solution’s n-axis, i.e. the slip plane normal. Also accepts str values of ‘x’, ‘y’, or ‘z’, in which case the dislocation axis will be aligned with the corresponding Cartesian axis. Default value is ‘y’.

  • cart_axes (bool, optional) – Setting this to True will also perform an assertion check that the m- and n-axes are both aligned with Cartesian axes. This is a requirement for some of the atomic configuration generators. Default value is False as the elastic solution by itself does not require the limitation.

  • tol (float) – Tolerance parameter used to round off near-zero values. Default value is 1e-8.

strain(pos: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes]) ndarray

Compute the position-dependent anisotropic stresses.

ϵ_ij = 1 / (4 π i) (Σ_a +- k_a (mpn_ai A_aj + mpn_aj A_ai) (L_am * burgers_m) / η_a)

Parameters:

pos (array-like object) – 3D vector position(s).

Returns:

The computed 3x3 stress states at all given points.

Return type:

numpy.ndarray

stress(pos: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes]) ndarray

Compute the position-dependent anisotropic stresses.

σ_ij = 1 / (2 π i) (Σ_a +- k_a C_ijkl mpn_al A_ak (L_am*burgers_m) / η_a)

Parameters:

pos (array-like object) – 3D vector position(s).

Returns:

The computed 3x3 stress states at all given points.

Return type:

numpy.ndarray