principia_materia.phonon_id.chainrule_derivatives module

class principia_materia.phonon_id.chainrule_derivatives.ChainruleDerivatives(structure, supa, order, pg='C1', use_symmetric_basis=False, tol=1e-06)

Bases: AnalyticTensors

Compute chainrule derivatives of a measurement for a given crystal system at given FTG and order.

In bundled irreducible derivatives (BID) method, for a given measurement basis, at a given order, structure and supercell, we can obtain a series of derivatives from finite displacement computations, referred to as \(\textbf{V}_{b}^{\hat{S}_{BZ}}\), where \(\hat{S}_{BZ}\) is the supercell matrix.

These measurement basis derivatives are linear combinations of irreducible derivatives in this system,

\[\textbf{V}_{b}^{\hat{S}_{BZ}} = \hat{C}_b^{\hat{S}_{BZ}} \textbf{d}_{ir}^{\hat{S}_{BZ}}\]

, where \(\hat{C}_b^{\hat{S}_{BZ}}\) is the chainrule matrix, and \(\textbf{d}_{ir}^{\hat{S}_{BZ}}\) is the vector of irreducible derivatives. This chainrule matrix is what we are aiming to find in this class, such linear combinations \(\hat{C}_b^{\hat{S}_{BZ}}\) can be calculated using chain rule derivatives. With the chainrule matrix and measurement basis derivatives, we can solve for irreducible derivatives.

Additionally, in hierarchical supercell BID method, at a given supercell, the irreducible derivatives that fit in smaller supercells are already computed. Thus we can split the chainrule matrix into 2 parts: a known part and an unknown part, where the task at hand is to solve the unknown part for the irreducible derivatives.

\[\textbf{V}_{b}^{\hat{S}_{BZ}} - \hat{C}_{b,known}^{\hat{S}_{BZ}} \textbf{d}_{ir,known}^{\hat{S}_{BZ}} = \hat{C}_{b,unknown}^{\hat{S}_{BZ}} \textbf{d}_{ir,unknown}^{\hat{S}_{BZ}}\]
Parameters:
  • structure (CrystalFTG object or a structure file of CrystalFTG) – The crystal structure.

  • supa (array of int, shape(dim, dim)) – The supercell matrix.

  • order (int) – Order of the dynamic tensor.

  • pg (str or PointGroup object) – The point group.

  • use_symmetric_basis (bool, optional, default to False) – Whether to use the symmetric basis or the naive basis for the hidden orders of the chainrule matrix.

  • tol (float, optional, default to 1.0E-6) – Error tolerence.

add_known_ID(known_ID)

Mark irreducible derivatives as know ID.

Parameters:

known_ID (list of nested tuples) – Irreducible derivaties to be marked as known.

property basis_names
property basis_vectors
compute_chainrule(displacements, hidden_order=1)

Compute chainrule matrices/tensors that converts between irreducible derivatives and the measurement basis derivatives.

For a single measurement.

\[C_Q(u_1, \cdots, u_{O_{h}}) = \frac{1}{\left(O-O_{h}\right)!} \sum_{u_{O_{h} + 1}, \cdots, u_{O}} D_{Q}^{O}[u_{O_{h} + 1}, \cdots, u_{O}] \prod_{i=O_{h} + 1}^{O} \frac{\partial u_i}{\partial v_i}\]

where \(O\) is order, \(O_{h}\) is the hidden order, \(u\) is q-space displacement basis, \(v\) is the measurement bases at otrder \(O\), \(V\) is the \(u_0\) line of the chainrule matrix, and \(D_Q^{O}\) is the tensor vector of \(Q\).

Parameters:
  • displacements (array of floats, shape(N, order - hidden_order, natoms, dim) or (order - hidden_order, natoms, dim)) – Measurement basis displacements, can be 1 set of measurement or multiple measurements at the same time.

  • hidden_order (int, optional, default to 1) – The order of derivatives from first principles calculation.

Returns:

chainrule_tensor – The chainrule matrix in a tensor form. If the input displacements shape is (order - hidden_order, natoms, dim), return value will be in shape (n_QpointsN, norbitals) * hidden_order + (n_irreducible_derivatives, ).

Return type:

array of complex, shape(N, ) + (n_QpointsN, norbitals) * hidden_order + (n_irreducible_derivatives, )

decompose_displacements(displacements)

Decompose the displacements in real space into reciprocal space.

Parameters:

displacements (array of float, shape (n, ) + self.displacement_shape) – A measurement, which consists of several displacements.

property displacement_shape

Shape of a single displacement.

A measurement basis usually consists of several displacements.

get_chainrule_factors(measurement, hidden_order=1)

Compute chainrule factor of a measurement.

Parameters:
  • measurement (array of float, shape(order - hidden_order, supercell.natoms, dim)) – A set of displacement to displace the system.

  • hidden_order (int, optional, default to 1) – The order of derivatives from first principles.

Returns:

decomp_measurement – The chainrule factors.

Return type:

array of complex, shape(order - hidden_order, multiplicity, norbitals)

property known_ID

Names of known irreducible derivatives.

property nonzero_ID_index
normalize_displacements(displacements)

Normalize a measurement in reciprocal space.

The normalization makes the reciprocal space decomposition of the displacements to 1.

Parameters:

displacements (array of float, shape (n, ) + self.displacement_shape) – A measurement, which consists of several displacements.

set_basis()

Compute all the reciprocal displacement basis that fit in the supercell.

set_naive_basis()

Compute all the naive reciprocal displacement basis that fit in the supercell.

set_symmetric_basis()

Compute all the symmetric reciprocal displacement basis that fit in the supercell.

property unknown_ID

Names of unknown irreducible derivatives.

principia_materia.phonon_id.chainrule_derivatives.get_ChainruleDerivatives_from_hdf5(h5file, tol=1e-06)

Load ChainruleDerivatives from HDF5 file.

principia_materia.phonon_id.chainrule_derivatives.get_ChainruleDerivatives_hdf5_wrapper()

HDF5 data wrapper for ChainruleDerivatives class.

principia_materia.phonon_id.chainrule_derivatives.save_ChainruleDerivatives_to_hdf5(obj, h5file='analytic_tensors.hdf5', overwrite=False)

Save ChainruleDerivatives data into HDF5 file.

Parameters:
  • obj (ChainruleDerivatives) – A ChainruleDerivatives object.

  • h5file (str or h5py.File/h5py.Group obejct, optional, default to "dynamic_tensors.hdf5") – Path to a HDF5 file or a h5py.File/h5py.Group object.

  • overwrite (bool, optional, default to False) – When the file exists, whether to replace the content of the file with the content to be saved.