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. PhysicalQuantity of type charge per area
metatext()
Returns: The metatext of the object or None if no metatext is present. 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.