PiezoelectricTensor

class PiezoelectricTensor(configuration, kpoints_a=None, kpoints_b=None, kpoints_c=None, optimize_geometry=None, optimize_geometry_parameters=None, strain=None)

Class for calculating the piezoelectric tensor of a configuration.

Parameters:
  • configuration (BulkConfiguration) – The configuration with attached calculator that supports berry-phase polarization calculations.
  • kpoints_a (MonkhorstPackGrid) – The k-point sampling to use for integrating along the first direction.
    Default: MonkhorstPackGrid(nx, ny, nz), where nx, ny, nz are the sampling used for the self consistent calculation.
  • kpoints_b (MonkhorstPackGrid) – The k-point sampling to use for integrating along the second direction.
    Default: MonkhorstPackGrid(nx, ny, nz), where nx, ny, nz are the sampling used for the self consistent calculation.
  • kpoints_c (MonkhorstPackGrid) – The k-point sampling to use for integrating along the third direction.
    Default: MonkhorstPackGrid(nx, ny, nz), where nx, ny, nz are the sampling used for the self consistent calculation.
  • optimize_geometry (bool) – Boolean to control if the internal coordinates should be optimized during strain.
    Default: False.
  • optimize_geometry_parameters (OptimizeGeometryParameters) – The parameters for the geometry optimization.
    Default: A default OptimizeGeometryParameters object.
  • strain (float) – The magnitude of the strain to be applied.
    Default: 0.01
evaluate()

The piezoelectric tensor \(d_{kij}\) is returned as PhysicalQuantity array of shape (6, 3). Column k contains the values (\(d_{kxx}\), \(d_{kyy}\), \(d_{kzz}\), \(d_{kyz}\), \(d_{kxz}\), \(d_{kxy}\)) where k is 0 for x, 1 for y, and 2 for z.

Returns:The piezoelectric tensor.
Return type:PhysicalQuantity of type charge per area
metatext()
Returns:The metatext of the object or None if no metatext is present.
Return type:str | unicode | None
nlprint(stream=None)

Print a string containing an ASCII table useful for plotting the AnalysisSpin object.

Parameters:stream (python stream) – The stream the table should be written to.
Default: NLPrintLogger()
setMetatext(metatext)

Set a given metatext string on the object.

Parameters:metatext (str | unicode | None) – The metatext string that should be set. A value of “None” can be given to remove the current metatext.

Usage Examples

Calculate the PiezoelectricTensor of GaAs in a simple cubic unit cell:

# -------------------------------------------------------------
# Bulk configuration
# -------------------------------------------------------------

# Set up lattice
lattice = SimpleCubic(5.6537*Angstrom)

# Define elements
elements = [Arsenic, Arsenic, Gallium, Gallium, Arsenic, Arsenic, Gallium,
            Gallium]

# Define coordinates
fractional_coordinates = [[ 0.75,  0.25,  0.75],
                          [ 0.25,  0.75,  0.75],
                          [ 0.5 ,  0.  ,  0.5 ],
                          [ 0.  ,  0.5 ,  0.5 ],
                          [ 0.25,  0.25,  0.25],
                          [ 0.75,  0.75,  0.25],
                          [ 0.  ,  0.  ,  0.  ],
                          [ 0.5 ,  0.5 ,  0.  ]]

# Set up configuration
bulk_configuration = BulkConfiguration(
    bravais_lattice=lattice,
    elements=elements,
    fractional_coordinates=fractional_coordinates
    )

# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------
numerical_accuracy_parameters = NumericalAccuracyParameters(
    k_point_sampling=(5, 5, 5),
    )

calculator = LCAOCalculator(
    numerical_accuracy_parameters=numerical_accuracy_parameters,
    )

bulk_configuration.setCalculator(calculator)
nlprint(bulk_configuration)
bulk_configuration.update()

# -------------------------------------------------------------
# Piezoelectric tensor
# -------------------------------------------------------------
piezoelectric_tensor = PiezoelectricTensor(
    configuration=bulk_configuration,
    kpoints_a=MonkhorstPackGrid(20,5,5),
    kpoints_b=MonkhorstPackGrid(5,20,5),
    kpoints_c=MonkhorstPackGrid(5,5,20),
    )

nlprint(piezoelectric_tensor)

piezo_GaAs.py

The output from the calculation is:

+------------------------------------------------------------------------------+
| Piezoelectric Tensor Report                                                  |
+------------------------------------------------------------------------------+
|                                                                              |
| Tensor in units of [C/m**2]:                                                 |
|                                                                              |
|           x              y              z                                    |
| xx    2.01774e-12    1.27223e-12    1.18732e-12                              |
| yy    2.86045e-13    7.92764e-13    5.13819e-13                              |
| zz    9.78384e-13    4.45648e-13   -2.59427e-13                              |
| yz   -8.28198e-01    1.48791e-13   -9.55916e-14                              |
| xz    1.17508e-13   -8.28198e-01    7.05227e-14                              |
| xy    1.28983e-13    3.64354e-14   -8.28198e-01                              |
|                                                                              |
+------------------------------------------------------------------------------+

Notes

Due to the symmetry of the zinc-blende structure, only the shear components are non-zero. As an example, an xy-shear strain (bottom line) leads to a polarization in the z-direction (rightmost column), and likewise the yz- and xz-shear strains are non-zero.

  • The piezoelectric tensor is calculated assuming homogeneous strains. It is sometimes called the clamped-ion piezoelectric tensor. The experimental tensor will also have a contribution from internal strains, i.e. a relative displacement of the Ga sublattice to the As sublattice. This contribution is not included in the present calculations.
  • The calculated value of \(-0.82 C/m^2\) compares well with previous calculations Ref. [KSV93].

[KSV93]R. D. King-Smith and D. Vanderbilt. Theory of polarization of crystalline solids. Phys. Rev. B, 47:1651–1654, Jan 1993. doi:10.1103/PhysRevB.47.1651.