sisl.io.siesta.fcSileSiesta

class sisl.io.siesta.fcSileSiesta(filename, *args, **kwargs)

Bases: SileSiesta

Force constant file

Methods

base_directory([relative_to])

Retrieve the base directory of the file, relative to the path relative_to

close()

dir_file([filename, filename_base])

File of the current Sile

read(*args, **kwargs)

Generic read method which should be overloaded in child-classes

read_force([displacement, na])

Reads all displacement forces by multiplying with the displacement value

read_force_constant([na])

Reads the Hessian/force constant stored in the FC file

read_hessian([na])

Reads the Hessian/force constant stored in the FC file

write(*args, **kwargs)

Generic write method which should be overloaded in child-classes

Attributes

base_file

File of the current Sile

file

File of the current Sile

base_directory(relative_to='.')

Retrieve the base directory of the file, relative to the path relative_to

close()
dir_file(filename=None, filename_base='')

File of the current Sile

read(*args, **kwargs)

Generic read method which should be overloaded in child-classes

Parameters:

kwargs – keyword arguments will try and search for the attribute read_<> and call it with the remaining **kwargs as arguments.

read_force(displacement: float | None = None, na: int | None = None) ndarray[source]

Reads all displacement forces by multiplying with the displacement value

Since the force constant file does not contain the non-displaced configuration this will only return forces on the displaced configurations minus the forces from the non-displaced configuration.

This may be used in conjunction with phonopy by noticing that Siesta FC-runs does the displacements in reverse order (-x/+x vs. +x/-x). In this case one should reorder the elements like this:

>>> fc = np.roll(fc, 1, axis=2)
Parameters:
  • displacement – the used displacement in the calculation, since Siesta 4.1-b4 this value is written in the FC file and hence not required. If prior Siesta versions are used and this is not supplied the 0.04 Bohr displacement will be assumed.

  • na – number of atoms in geometry (for returning correct number of atoms), since Siesta 4.1-b4 this value is written in the FC file and hence not required. If prior Siesta versions are used then the file is expected to only contain 1-atom displacement.

Returns:

numpy.ndarray ((displaced atoms, d[xyz], [-+], total atoms, xyz)) – force constant matrix times the displacement, see read_force_constant for details regarding data layout.

read_force_constant(na: int | None = None)

Reads the Hessian/force constant stored in the FC file

Parameters:

na – number of atoms in the unit-cell, if not specified it will guess on only one atom displacement.

Returns:

numpy.ndarray ((displacement, d[xyz], [-+], atoms, xyz)) – force constant matrix containing all forces. The 2nd dimension contains contains the directions, 3rd dimension contains -/+ displacements.

read_hessian(na: int | None = None)[source]

Reads the Hessian/force constant stored in the FC file

Parameters:

na – number of atoms in the unit-cell, if not specified it will guess on only one atom displacement.

Returns:

numpy.ndarray ((displacement, d[xyz], [-+], atoms, xyz)) – force constant matrix containing all forces. The 2nd dimension contains contains the directions, 3rd dimension contains -/+ displacements.

write(*args, **kwargs)

Generic write method which should be overloaded in child-classes

Parameters:

**kwargs – keyword arguments will try and search for the attribute write_ and call it with the remaining **kwargs as arguments.

property base_file

File of the current Sile

property file

File of the current Sile