SDVPN
- class atomman.defect.SDVPN(volterra: VolterraDislocation | None = None, gamma: GammaSurface | None = None, model: str | IOBase | DataModelDict | None = None, tau: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] = array([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]]), alpha: float = 0.0, beta: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] = array([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]]), cutofflongrange: float | None = None, fullstress: bool = True, cdiffelastic: bool = False, cdiffsurface: bool = True, cdiffstress: bool = False, min_method: str = 'Powell', min_kwargs: dict | None = None, min_options: dict | None = None)
Bases:
object
Class representation of the semidiscrete variational Peierls-Nabarro dislocation model.
- E_gsf_surface_plot(x: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, disregistry: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, fmt: str = 'ro-', normalize: bool | None = False, smooth: bool = True, a1vect: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, a2vect: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, xvect: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, length_unit: str = 'Å', energyperarea_unit: str = 'eV/Å^2', numx: int = 100, numy: int = 100, figsize: tuple | None = None, **kwargs) figure
Extends the GammaSurface.E_gsf_surface_plot() method to plot the disregistry path on top of it.
- Parameters:
x (array-like object, optional) – x-coordinates. Default value is the stored x-coordinates. If x or disregistry are not set/given, then the disregistry path will not be added.
disregistry (array-like object, optional) – (N, 3) shaped array of disregistry vectors at each x-coordinate. Default value is the stored disregistry values. If x or disregistry are not set/given, then the disregistry path will not be added.
fmt (str, optional) – The matplotlib.pyplot.plot fmt parameter for the disregistry path line, i.e. color, marker and line style options. Default value is ‘ro-’: red with circle markers and solid line.
normalize (bool, optional) – Flag indicating if axes are Cartesian (False, default) or normalized by a1, a2 vectors (True).
smooth (bool, optional) – If True (default), then plot shows smooth interpolated values. If False, plot shows nearest raw data values.
a1vect (array-like object, optional) – Crystal vector for the a1 vector to use for plotting. Default value of None uses the saved a1vect.
a2vect (array-like object, optional) – Crystal vector for the a2 vector to use for plotting. Default value of None uses the saved a2vect.
xvect (array-like object, optional) – Crystal vector to align with the plotting x-axis for non-normalized plots. If not given, this is taken as the Cartesian of a1vect.
length_unit (str, optional) – The unit of length to display non-normalized axes values in. Default value is ‘Å’.
energyperarea_unit (str, optional) – The unit of energy per area to display the stacking fault energies in. Default value is ‘eV/Å^2’.
numx (int, optional) – The number of plotting points to use along the x-axis. Default value is 100.
numy (int, optional) – The number of plotting points to use along the y-axis. Default value is 100.
figsize (tuple or None, optional) – The figure’s x,y dimensions. If None (default), the values are scaled such that the x,y spacings are approximately equal, and the larger of the two values is set to 10.
**kwargs (dict, optional) – Additional keywords are passed into the underlying matplotlib.pyplot.pcolormesh(). This allows control of such things like the colormap (cmap).
- Returns:
The generated figure allowing users to perform additional modifications.
- Return type:
matplotlib.pyplot.figure
- E_gsf_vs_x_plot(x: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, disregistry: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, figsize: tuple | None = None, length_unit: str = 'Å', energyperarea_unit: str = 'eV/Å^2') figure
Generates a plot of the stacking fault energy, i.e. misfit energy, associated with the disregistry values for each x coordinate.
- Parameters:
x (array-like object, optional) – x-coordinates. Default value is the stored x-coordinates. If x or disregistry are not set/given, then the disregistry path will not be added.
disregistry (array-like object, optional) – (N, 3) shaped array of disregistry vectors at each x-coordinate. Default value is the stored disregistry values. If x or disregistry are not set/given, then the disregistry path will not be added.
figsize (tuple or None, optional) – The figure’s x,y dimensions. If None (default), then a figure size of (10, 6) will be generated.
length_unit (str, optional) – The unit of length to display x coordinates in. Default value is ‘Å’.
energyperarea_unit (str, optional) – The unit of energy per area to display the stacking fault energies in. Default value is ‘eV/Å^2’.
- Returns:
The generated figure allowing users to perform additional modifications.
- Return type:
matplotlib.pyplot.figure
- property cdiffelastic: bool
Flag indicating if elastic energy used central difference for computing the dislocation density.
- Type:
- property cdiffstress: bool
Flag indicating if stress energy used central difference for computing the dislocation density.
- Type:
- property cdiffsurface: bool
Flag indicating if surface energy used central difference for computing the dislocation density.
- Type:
- check_energies(x: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, disregistry: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, energyperlength_unit: str = 'eV/Å')
Prints a summary string of all computed energy components.
- Parameters:
x (array-like object, optional) – x-coordinates. Default value is the stored x-coordinates.
disregistry (array-like object, optional) – (N, 3) shaped array of disregistry vectors at each x-coordinate. Default value is the stored disregistry values.
energyperlength_unit (str, optional) – The units of energy per length to report the dislocation line energies in. Default value is ‘eV/Å’.
- disldensity(x: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, disregistry: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, cdiff: bool = False) Tuple[ndarray, ndarray]
Computes the dislocation density as the numerical derivative of disregistry with respect to x. Uses either neighboring values
ρ[i] = (δ[i] - δ[i-1]) / (x[i] - x[i-1])
or central difference
ρ[i] = (δ[i+1] - δ[i-1]) / (x[i+1] - x[i-1])
- Parameters:
x (array-like object, optional) – x-coordinates. Default value is the stored x-coordinates.
disregistry (array-like object, optional) – (N, 3) shaped array of disregistry vectors at each x-coordinate. Default value is the stored disregistry values.
cdiff (bool, optional) – Flag indicating how to compute the derivative. A value of False (default) compares nearest values while a value of True compares next-nearest (i.e., central difference).
- Returns:
newx (numpy.array) – The x positions corresponding to the dislocation density values.
rho (numpy.array) – The computed dislocation density.
- disregistry_plot(x: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, disregistry: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, figsize: tuple | None = None, length_unit: str = 'Å') figure
Creates a simple matplotlib figure showing the disregistry profiles.
- Parameters:
x (array-like object, optional) – x-coordinates. Default value is the stored x-coordinates.
disregistry (array-like object, optional) – (N, 3) shaped array of disregistry vectors at each x-coordinate. Default value is the stored disregistry values.
figsize (tuple, optional) – matplotlib figure figsize parameter. Default value is (10, 6).
length_unit (str, optional) – The unit of length to display positions and disregistry values in. Default value is ‘Å’.
- Returns:
The generated figure allowing users to perform additional modifications.
- Return type:
matplotlib.pyplot.figure
- elastic_energy(x: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, disregistry: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None) float
Computes the short-range configuration-dependent elastic energy term for the dislocation based on the dislocation density and K_tensor.
E_elastic = 1/(4π) Σ_i Σ_j χ(i,j,Δx) K_lm ρ_l[i] ρ_m[j]
χ(i,j,Δx) = (3/2) Δx² + ψ(i-1,j-1,Δx) + ψ(i,j,Δx) - ψ(i,j-1,Δx) - ψ(j,i-1,Δx)
ψ(i,j,Δx) = (1/2) (i-j)² Δx² ln(|i-j|Δx)
- Parameters:
x (array-like object, optional) – x-coordinates. Default value is the stored x-coordinates.
disregistry (array-like object, optional) – (N, 3) shaped array of disregistry vectors at each x-coordinate. Default value is the stored disregistry values.
- Returns:
The elastic energy for the dislocation.
- Return type:
- property gamma: GammaSurface
The stacking fault map.
- load(model: str | IOBase | DataModelDict, gamma: GammaSurface | None = None)
Load solution from a data model.
- Parameters:
model (str, file-like object or DataModelDict) – The semi-discrete-Peierls-Nabarro data model to load.
gamma (atomman.defect.GammaSurface, optional) – The gamma surface to use. If not given, will check to see if the content is inside model.
- Raises:
ValueError – If the gamma surface information is not given and it is not found in model.
- longrange_energy() float
Computes the long-range elastic energy term for the dislocation using the K_tensor, Burgers vector and long-range cutoff. This term is configuration-independent and thus the method takes no parameters.
E_longrange = 1/(2π) K_lm b_l b_m ln(L)
- Returns:
The long-range energy for the dislocation.
- Return type:
- misfit_energy(x: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, disregistry: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None) float
Computes the misfit energy for the disregistry using the stored gamma surface
E_misfit = Σ γ(δ)Δx
- Parameters:
x (array-like object, optional) – x-coordinates. Default value is the stored x-coordinates.
disregistry (array-like object, optional) – (N, 3) shaped array of disregistry vectors at each x-coordinate. Default value is the stored disregistry values.
- Returns:
The misfit energy for the dislocation.
- Return type:
- model(length_unit: str = 'Å', energyperarea_unit: str = 'eV/Å^2', pressure_unit: str = 'GPa', include_gamma: bool = False) DataModelDict
Generate a data model for the object.
- Parameters:
length_unit (str, optional) – The unit of length to save values as. Default is ‘Å’.
energyperarea_unit (str, optional) – The unit of energy per area to save fault energy values as. Only used if the gamma surface information is included. Default value is ‘eV/Å^2’.
pressure_unit (str, optional) – The unit of pressure to save values as. Default is ‘GPa’.
include_gamma (bool, optional) – Flag indicating if the gamma surface data is to be included. Default value is False.
- Returns:
The data model containing all input parameters and the current disregistry vectors.
- Return type:
DataModelDict
- nonlocal_energy(x: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, disregistry: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None) float
Computes the nonlocal energy correction using alpha coefficient(s).
E_nonlocal = Σ_m α_m Σ_i δ[i] (δ[i] - (δ[i+m] + δ[i-m]) / 2) Δx
- Parameters:
x (array-like object, optional) – x-coordinates. Default value is the stored x-coordinates.
disregistry (array-like object, optional) – (N, 3) shaped array of disregistry vectors at each x-coordinate. Default value is the stored disregistry values.
- Returns:
The nonlocal energy for the dislocation.
- Return type:
- solve(x: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, disregistry: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, tau: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, alpha: list | None = None, beta: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, cutofflongrange: float | None = None, fullstress: bool | None = None, cdiffelastic: bool | None = None, cdiffsurface: bool | None = None, cdiffstress: bool | None = None, min_method: str | None = None, min_kwargs: dict | None = None, min_options: dict | None = None)
Solves the semidiscrete variational Peierls-Nabarro dislocation disregistry through energy minimization using the set class properties. All parameters are optional keyword arguments that can be used to change any of the previous settings.
- Parameters:
x (numpy.ndarray, optional) – An array of shape (N) giving the x coordinates corresponding to the disregistry solution.
disregistry (numpy.ndarray, optional) – A (N,3) array giving the initial disregistry vector guess at each x coordinate.
tau (numpy.ndarray, optional) – A (3,3) array giving the stress tensor to apply to the system using the stress energy term. Only the xy, yy, and yz components are used.
alpha (list of float, optional) – The alpha coefficient(s) used by the nonlocal energy term.
beta (numpy.ndarray, optional) – The (3,3) array of beta coefficient(s) used by the surface energy term.
cutofflongrange (float, optional) – The cutoff distance to use for computing the long-range energy.
fullstress (bool, optional) – Flag indicating which stress energy algorithm to use.
cdiffelastic (bool, optional) – Flag indicating if the dislocation density for the elastic energy component is computed with central difference (True) or simply neighboring values (False).
cdiffsurface (bool, optional) – Flag indicating if the dislocation density for the surface energy component is computed with central difference (True) or simply neighboring values (False).
cdiffstress (bool, optional) – Flag indicating if the dislocation density for the stress energy component is computed with central difference (True) or simply neighboring values (False). Only matters if fullstress is True.
min_method (str, optional) – The scipy.optimize.minimize method to use.
min_kwargs (dict, optional) – Any keyword arguments to pass on to scipy.optimize.minimize besides the coordinates, method and options.
min_options (dict, optional) – Any options to pass on to scipy.optimize.minimize.
- stress_energy(x: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, disregistry: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None) float
Computes the stress energy due to the applied stress, tau. If fullstress is True, the original stress expression by Bulatov and Kaxiras will be used:
E_stress = -1/2 Σ_i (x[i]² - x[i-1]²) ρ_l τ_2l
If fullstress is False, the alternate stress expression by Shen and Cheng 10.1016/j.scriptamat.2009.04.047 will be used:
E_stress = -1/2 Σ_i τ_2l (δ_l[i] + δ_l[i+1]) Δx
Note that the Shen and Cheng expression will have a constant error associated with it giving an incorrect overall energy, but should apply a similar force on the dislocation.
- Parameters:
x (array-like object, optional) – x-coordinates. Default value is the stored x-coordinates.
disregistry (array-like object, optional) – (N, 3) shaped array of disregistry vectors at each x-coordinate. Default value is the stored disregistry values.
- Returns:
The stress energy for the dislocation.
- Return type:
- surface_energy(x: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, disregistry: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None) float
Computes the gradient surface energy correction using beta coefficients.
E_surface = Σ_j β_lj / 4 Σ_i ρ_l[i]² Δx
- Parameters:
x (array-like object, optional) – x-coordinates. Default value is the stored x-coordinates.
disregistry (array-like object, optional) – (N, 3) shaped array of disregistry vectors at each x-coordinate. Default value is the stored disregistry values.
- Returns:
The surface energy for the dislocation.
- Return type:
- total_energy(x: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None, disregistry: _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None) float
Computes the total energy for the dislocation.
E_total = E_elastic + E_misfit + E_stress + E_surface + E_nonlocal
- Parameters:
x (array-like object, optional) – x-coordinates. Default value is the stored x-coordinates.
disregistry (array-like object, optional) – (N, 3) shaped array of disregistry vectors at each x-coordinate. Default value is the stored disregistry values.
- Returns:
The total energy for the dislocation.
- Return type: