GrueneisenCoefficient

class GrueneisenCoefficient(configuration, filename, object_id, calculator=None, cell_displacement_factor=None, route=None, points_per_segment=None, path=None, dynamical_matrix_parameters=None, optimize_geometry_parameters=None, log_filename_prefix=None, number_of_processes_per_task=None)

Calculate the Grueneisen parameter and thermal expansion coefficient.

Parameters:
  • configuration (BulkConfiguration) – The configuration for which the Grueneisen coefficient should be calculated.

  • filename (str) – The full or relative path to save the results to. See nlsave().

  • object_id (str) – The object id to use when saving. See nlsave().

  • calculator (Calculators) – The calculator to be used.
    Default: The calculator attached to the configuration.

  • cell_displacement_factor (float) – The factor for which the initial configuration cell volume expands or shrinks. E.g. a value of 0.1 means that the volume expands and shrinks by 10%.
    Default: 0.1

  • route (list) – The route to take through the Brillouin-zone. Must be given as a list of symmetry points of the unit cell, e.g. [‘G’, ‘X’, ‘G’].

  • points_per_segment (int) – The number of points per segment of the route.
    Default: 20

  • path (list) – A list of Fourier-points (in fractional coordinates) in which the bandstructure should be calculated. This options is mutually exclusive to route, and points_per_segment.

  • dynamical_matrix_parameters (DynamicalMatrixParameters) – The DynamicalMatrix parameters.
    Default: DynamicalMatrixParameters().

  • optimize_geometry_parameters (OptimizeGeometryParameters) – The parameters for the geometry optimization.

  • log_filename_prefix (str | LogToStdOut) – Filename prefix for the logging output. If LogToStdOut, all logging will instead be sent to standard output.
    Default: 'molecular_reaction_path_'.

  • number_of_processes_per_task (int | None | ProcessesPerNode) – The number of processes that will be used to execute each task. If the total number of process does not divide evenly into the tasks, some tasks may have less than this number of processes. If None, all available processes execute each task collaboratively.

cellDisplacementFactor()
Returns:

The factor for which the initial configuration cell expands or contracts.

Return type:

float

configuration()
Returns:

The initial configuration.

Return type:

BulkConfiguration

contractedConfiguration()
Returns:

The contracted configuration.

Return type:

BulkConfiguration

dependentStudies()
Returns:

The list of dependent studies.

Return type:

list of Study

dynamicalMatrixParameters()
Returns:

The parameters for the dynamical matrix.

Return type:

DynamicalMatrixParameters

expandedConfiguration()
Returns:

The expanded configuration.

Return type:

BulkConfiguration

filename()
Returns:

The filename where the study object is stored.

Return type:

str

grueneisenCoefficient(temperature)

Compute the Grueneisen coefficient at the given temperature.

Parameters:

temperature (PhysicalQuantity in units of temperature) – The temperature condition to consider.

Returns:

The Grueneisen coefficient.

Return type:

float

linearThermalExpansionCoefficient(temperature)

Compute the linear thermal expansion at the given temperature. The linear thermal expansion is per lattice vector.

Parameters:

temperature (PhysicalQuantity in units of temperature) – The temperature condition to consider.

Returns:

The linear thermal expansion coefficient.

Return type:

PhysicalQuantity in units of inverse temperature

logFilenamePrefix()
Returns:

The filename prefix for the logging output of the study.

Return type:

str | LogToStdOut

nlinfo()

Get only the printable results from the extraction results - plain text.

Returns:

The study information.

Return type:

dict

nlprint(stream=None)

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

Parameters:

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

numberOfProcessesPerTask()
Returns:

The number of processes to be used to execute each task. If None, all available processes execute each task collaboratively.

Return type:

int | None | ProcessesPerNode

numberOfProcessesPerTaskResolved()
Returns:

The number of processes to be used to execute each task. Default values are resolved based on the current execution settings.

Return type:

int

objectId()
Returns:

The name of the study object in the file.

Return type:

str

optimizeGeometryParameters()
Returns:

The parameters for the geometry optimization.

Return type:

OptimizeGeometryParameters

phononEnergies()
Returns:

The eigenvalues for the phonon band structure. The shape is (Q, B) where Q is the number of q-points and B is the number of bands.

Return type:

PhysicalQuantity of type energy

qpoints()

Get the list of Fourier points used in the band structure.

Returns:

The fractional coordinates of the Fourier points.

Return type:

numpy.ndarray

saveToFileAfterUpdate()
Returns:

Whether the study is automatically saved after it is updated.

Return type:

bool

uniqueString()

Return a unique string representing the state of the object.

update()

Perform the update. Here, the mode and q point specific Grueneisen coefficients are calculated and used to calculate the temperature dependent part in the thermal expansion coefficient and macroscopic Grueneisen parameter.

volumetricThermalExpansionCoefficient(temperature)

Compute the volumetric thermal expansion at the given temperature. The thermal expansion is called volumetric as we assume the expansion is isotropic.

Parameters:

temperature (PhysicalQuantity in units of temperature) – The temperature condition to consider.

Returns:

The volumetric thermal expansion coefficient.

Return type:

PhysicalQuantity in units of inverse temperature

Usage Examples

Calculate the temperature-dependent Grueneisen coefficient and linear thermal expansion for silicon FCC.

# %% GrueneisenCoefficient

grueneisen_coefficient = GrueneisenCoefficient(
    configuration=bulk_configuration,
    filename='grueneisen_coefficient_example.hdf5',
    object_id='gc',
    points_per_segment=10,
)
grueneisen_coefficient.update()

print('%15s%30s%30s' % ('Temperature (K)', 'Grueneisen', 'Linear CTE (1/K)'))


temperatures = numpy.linspace(300, 1200, 10) * Kelvin
for temperature in temperatures:
    grueneisen = grueneisen_coefficient.grueneisenCoefficient(temperature)
    linear_thermal_expansion_coefficient = (
        grueneisen_coefficient.linearThermalExpansionCoefficient(temperature)
    )
    print(
        '%15.0f%30.5f%30.5E' % (
            temperature.inUnitsOf(Kelvin),
            grueneisen,
            linear_thermal_expansion_coefficient.inUnitsOf(Kelvin**-1)
        )
    )

grueneisen_coefficient_example.py

Notes

The GrueneisenCoefficient object calculates two properties of a bulk material; the Grüneisen and thermal expansion coefficients denoted \(\gamma\) and \(\alpha\), respectively. The thermal expansion coefficient can generally be given either as linear or volumetric, denoted by subscripts \(L\) and \(V\), respectively. If a material expands with equal rates in all directions (also called an isotropic material), the following simple relation is valid,

\[\alpha_V \approx 3\alpha_L\]

This assumption is made when calculating \(\alpha_V\) from \(\alpha_L\) in the current implementation.

The Grüneisen coefficient is a dimensionless parameter with different valid formulations. Here, the following expression is used,

\[\gamma = \frac{\alpha_L B}{C_V}\]

where \(B\) is the Hill bulk modulus and \(C_V\) is the heat capacity at constant volume. The Grüneisen coefficient and heat capacity can further be refined into their mode index (\(i\)) and q-point microscopic components denoted \(\gamma(\mathbf{q}, i)\) and \(C_V(\mathbf{q}, i, T)\) defined as,

\[\gamma(\mathbf{q}, i) = -\frac{V_0}{2 [h\nu_i(\mathbf{q})]^2} \left\langle \mathbf{e}_i(\mathbf{q}) \middle| \frac{dD(\mathbf{q})}{dV} \middle| \mathbf{e}_i(\mathbf{q}) \right\rangle\]
\[C_V(\mathbf{q}, i, T) = \frac{[h \nu_i(\mathbf{q})]^2}{V_0 k_B T^2} \frac{\exp{h \nu_i(\mathbf{q})}}{[\exp{h \nu_i(\mathbf{q})} - 1]^2}\]

where \(V_0\) is the initial configuration cell volume, \(\mathbf{e}\) are the phonon eigensystem eigenvectors, \(dD(\mathbf{q})\) is the change in DynamicalMatrix elements at specific q-points and \(dV\) is the volume change around \(V_0\). \(h\) and \(k_B\) are the Planck and Boltzmann constants, respectively. Once the microscopic quantities are calculated, the temperature dependent linear thermal expansion coefficient is determined according to,

\[\alpha_L(T) = \frac {\sum_{i, \mathbf{q}} \gamma(\mathbf{q}, i) C_V(\mathbf{q}, i, T)}{B}\]

and normalized per cell based on the DynamicalMatrix repetitions. The (macroscopic) temperature-dependent Grüneisen coefficient is calculated as,

\[\gamma(T) = \frac {\sum_{i, \mathbf{q}} \gamma(\mathbf{q}, i) C_V(\mathbf{q}, i, T)} {\sum_i C_V(\mathbf{q}, i, T)}\]