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
, andpoints_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. IfLogToStdOut
, 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:
- contractedConfiguration()¶
- Returns:
The contracted configuration.
- Return type:
- dependentStudies()¶
- Returns:
The list of dependent studies.
- Return type:
list of
Study
- dynamicalMatrixParameters()¶
- Returns:
The parameters for the dynamical matrix.
- Return type:
- expandedConfiguration()¶
- Returns:
The expanded configuration.
- Return type:
- 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:
- 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)
)
)
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,
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,
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,
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,
and normalized per cell based on the DynamicalMatrix
repetitions.
The (macroscopic) temperature-dependent Grüneisen coefficient is calculated as,