# ElasticConstants¶

class ElasticConstants(configuration, optimizer=<NL.Dynamics.Optimization.OptimizerMethod.LBFGS object>, max_forces=None, max_steps=None, max_step_length=None, eta_max=None, n_eta=None, enable_symmetry=None, fit_order=None)

Class to calculate the elastic constants of a bulk material. Uses finite strain and calculates the elastic constants from the linear stress response.

Parameters: configuration (BulkConfiguration.) – The BulkConfiguration for which the elastic constants should be calculated. optimizer (FIRE | LBFGS | None) – The optimizer method used for optimizing the internal coordinates after each strain. Set this to None to disable optimization of the strained cell. Default: LBFGS max_forces (PhysicalQuantity of type force) – The force threshold for the geometry optimization. Default: 0.005 * eV / Ang max_steps (int) – The maximum number of steps used by the optimizer. Default: 200 max_step_length (PhysicalQuantity of type length) – The maximum step length the optimizer may take. Default: 0.5 * Ang eta_max (float) – The maximum strain that can be be applied to the cell. Must be positive. Default: 0.002 n_eta (int) – The total number of different strain magnitudes for each strain vector. Must be larger than 1. Default: 3 enable_symmetry (bool) – Flag to select if only the independent elastic constants are calculated for each crystal system, or if all 21 constants are calculated. Default: True if the configuration has standard orientation, False otherwise. fit_order (int) – The order of the polynomial fit of the stress-strain dependency. Must be in the interval 1 to (n_eta - 1). Default: 1
bulkModulusHill()
Returns: The Hill type bulk modulus. PhysicalQuantity of type pressure
bulkModulusReuss()
Returns: The Reuss type bulk modulus. PhysicalQuantity of type pressure
bulkModulusVoigt()
Returns: The Voigt type bulk modulus. PhysicalQuantity of type pressure
enableSymmetry()
Returns: True if only the independent elastic constants are calculated for each crystal system, and False if all 21 constants are calculated bool
etaMax()
Returns: The maximum strain that can be be applied to the cell. float
evaluate()
Returns: The elastic constants as a shape (6, 6) array. PhysicalQuantity of type pressure
fitOrder()
Returns: The order of the polynomial fit of the stress-strain dependency. int
maxForces()
Returns: The force threshold for the geometry optimization. PhysicalQuantity of type force
metatext()
Returns: The metatext of the object or None if no metatext is present. str | unicode | None
nEta()
Returns: The total number of different strain magnitudes for each strain vector. int
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()
poissonRatio()
Returns: The Poisson ratios in various directions as a shape (3, 3) array. numpy.array
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.
shearModulusHill()
Returns: The Hill type shear modulus. PhysicalQuantity of type pressure
shearModulusReuss()
Returns: The Reuss type shear modulus. PhysicalQuantity of type pressure
shearModulusVoigt()
Returns: The Voigt type shear modulus. PhysicalQuantity of type pressure
youngsModulus()
Returns: The Young’s moduli. PhysicalQuantity of type pressure

## Usage Examples¶

Calculate the elastic constants of bulk silicon using the Stillinger-Weber potential [SW85], print the results, and save the object to an nc file:

# Set up bulk configuration
bulk_configuration = BulkConfiguration(
bravais_lattice=FaceCenteredCubic(5.4306*Angstrom),
elements=[Silicon, Silicon],
fractional_coordinates=[[ 0.  ,  0.  ,  0.  ],
[ 0.25,  0.25,  0.25]])

# Define the calculator
calculator = TremoloXCalculator(parameters=StillingerWeber_Si_1985())
bulk_configuration.setCalculator(calculator)
bulk_configuration.update()

# Calculate the elastic constants
elastic = ElasticConstants(bulk_configuration,
optimizer=LBFGS(),
max_forces=0.001*eV/Angstrom,
eta_max=0.002,
n_eta=3,
enable_symmetry=True,
fit_order=1)
# Print the results
nlprint(elastic)
# Save the elastic constants analysis object
nlsave('elastic_constants.nc', elastic)


elastic_constants.py

## Notes¶

• Set optimizer=None if the atoms in the strained cell should not be optimized before calculating the Stress. If the cell only contians one atom, the optimization is automatically disabled.
• Other properties, such as bulk modulus, shear modulus, Young’s modulus, or Poisson ratios can be calculated from the elastic constants. To view these results use the method nlprint.
• An ElasticConstants calcualtion can be performed using any calculator that supports the calculation of Stress.
• Before calculating the elastic constants of a given BulkConfiguration, the cell vectors should be optimized using the OptimizeGeometry function.

 [SW85] F. H. Stillinger and T. A. Weber. Computer simulation of local order in condensed phases of silicon. Phys. Rev. B, 31:5262–5271, Apr 1985. doi:10.1103/PhysRevB.31.5262.