esta.phonon package
Contents
Note
PHONON package: This package calculates the vibrational frequencies of atomic surfaces, interfaces, or molecules using finite displacement methodology. All the input files are automatically generated from the QE input files.
esta.phonon package#
Submodules#
esta.phonon.atm_displacements module#
- esta.phonon.atm_displacements.gen_disp(posfile, qe_part_file)#
- generate set of displacement of atoms in +ve and - directions by delta_x = 0.04 Ang
- (this parameter may be varied according to need and physical requirements ) 
- input:
- poscar file; string 
- output:
- set of files named:
- positions_01_0 and like that fist integer is atom index; –> 0, 1, 2 … N-1 (N=no of atoms) second intege is positon index; i.e. x , y, and z –> 0,1,2 last integer is for -ve and +disp –> 0,1 [0/1] at the end means displacement along +ve and -ve directions respectively 
 
 
esta.phonon.atm_displacements_selective module#
- esta.phonon.atm_displacements_selective.gen_disp(posfile, qe_part_file, disp_value=None)#
- generate set of displacement of atoms in +ve and - directions by delta_x = 0.04 Ang
- (this parameter may be varied according to need and physical requirements ) 
- input:
- poscar file; string qe_part_file: part of qe part witout atomic postions part (ATOMIC_POSITIONS (angstrom) tag present) disp_value: scalar for atm displacement in Ang. 
- output:
- set of files named:
- positions_01_0 and like that fist integer is atom index; –> 0, 1, 2 … N-1 (N=no of atoms) second intege is positon index; i.e. x , y, and z –> 0,1,2 last integer is for -ve and +disp –> 0,1 [0/1] at the end means displacement along +ve and -ve directions respectively 
 
 - NOTE: both atomic position outputs: qe and poscar are implemented 
esta.phonon.atm_displacements_selective_general_disp module#
- esta.phonon.atm_displacements_selective_general_disp.gen_disp(posfile, qe_part_file, val_displacement)#
- generate set of displacement of atoms in +ve and - directions by val_displacement (e.g. earlier it was delta_x = 0.04 Ang; this parameter may be varied according to need and physical requirements ) - input:
- poscar file; string 
- output:
- set of files named:
- positions_01_0 and like that fist integer is atom index; –> 0, 1, 2 … N-1 (N=no of atoms) second intege is positon index; i.e. x , y, and z –> 0,1,2 last integer is for -ve and +disp –> 0,1 [0/1] at the end means displacement along +ve and -ve directions respectively 
 
 - NOTE: both atomic position outputs: qe and poscar are implemented NOTE: Generally val_displacement should be 0.04 ang for bulk materials - for surface or surface species involved during chemical reactions, it to be 0.02 angstrom. - : Sept, 2019 - email: sonukumar.physics@gmail.com 
esta.phonon.fc_and_freq_selected_atoms module#
- esta.phonon.fc_and_freq_selected_atoms.get_asr(fcMatrix, atommove)#
- apply accoustic sum rule on the force constant matrix - see Xavier gonze PRB paper: - XAVIER GONZE AND CHANGYOL LEE PHYSICAL REVIEW B VOLUME 55, NUMBER 16 15 APRIL 1997-I - specifically see equations: 44 and 45.. good luck ..read whole paper..sk!! - WARNING: asr is applied only on the part of the force constant matrix
- defined by the list of moving atoms .. is it ok? .. sk! 
 
- esta.phonon.fc_and_freq_selected_atoms.get_dynamical_matrix(atommove, sqrt_mass_array, forceconstant)#
- getting dynamical matrix from force constant matrix at q=0 point - NOTE: for q=0 - dynmat = fc matric/ sqrt(mass1)/ sqrt(mass2) 
- dynmat in q space = dynmat in R space; see equation 7 in
- paper of Ab initio calculation of phonon dispersions in semiconductors prb. Paolo Giannozzi et al. 1991 
 
 
- esta.phonon.fc_and_freq_selected_atoms.get_eigen(dynamatical_matrix)#
- dynamical matrix is hermitian matrix .. try taking it Hermitian matrix instead of general matrix - array: array of rank 2 of shape (3*natoms, 3*natoms) - array: 1d array of size 3natoms; it is eigen value array: 2d array of shape (natoms, 3natoms); it is eigen - vector for each eigval 
- esta.phonon.fc_and_freq_selected_atoms.get_eigen_(dynamatical_matrix)#
- dynamical matrix is hermitian matrix .. try taking it Hermitian matrix instead of general matrix - array: array of rank 2 of shape (3*natoms, 3*natoms) - array: 1d array of size 3natoms; it is eigen value array: 2d array of shape (natoms, 3natoms); it is eigen - vector for each eigval 
- esta.phonon.fc_and_freq_selected_atoms.get_forceconstant_matrix(atommove, forces, deltax, sign_deltax='plus')#
- esta.phonon.fc_and_freq_selected_atoms.get_forces_central(force_c0, force_c1)#
- Note: difference of force4 +ve disp and force4 -ve disp, and then divide to get the average - sum of forces cannot be taken because that way you are cancelling the forces bcz one force is almost equal but negative of other 
- esta.phonon.fc_and_freq_selected_atoms.get_forces_dict(atommove)#
- get forces fron qe output files with + and - displacements and store them in dictionary with indices indication atoms moving index, atom shift index, and displacemet(+ or -) 
- esta.phonon.fc_and_freq_selected_atoms.get_forces_dict_parta(atommove)#
- get forces fron qe output files with + and - displacements and store them in dictionary with indices indication atoms moving index, atom shift index, and displacemet(+ or -) 
- esta.phonon.fc_and_freq_selected_atoms.get_forces_minus(atommove, forces_dict, atom_direction_shift)#
- extract forces from forces_dict for minus (id=0) displacement 
- esta.phonon.fc_and_freq_selected_atoms.get_forces_plus(atommove, forces_dict, atom_direction_shift)#
- extract forces from forces_dict for plus (id=1) displacement 
- esta.phonon.fc_and_freq_selected_atoms.get_idatm_iddir_iddispl(atommove)#
- get a list of ‘idatm-iddir-iddispl’
- idatm: atom id iddir : atom move direction index iddispl: + or - shift of atoms 
 - atom_direction_shift ==> id atom, id direction, id shift 
- esta.phonon.fc_and_freq_selected_atoms.get_sqrt_mass_array(label)#
- for given atomic symbols, return correspoinding masses in amu 
- esta.phonon.fc_and_freq_selected_atoms.get_symmetrized_force_constant_matrix(fcMatrx, atommove)#
- symmetrize force constant matrix fc(iat, ia, jat, ja) - return
- (fc(iat, ia, jat, ja) + fc(jat, ja, iat, ia))/2 
 
- esta.phonon.fc_and_freq_selected_atoms.reshape_dyn(dynmatrix, atommove)#
- reshape dynamical matrix 
- esta.phonon.fc_and_freq_selected_atoms.write_forces(force_row, ldisp)#
- may be you need to add … atoms parameter in the call .. - write forces rows to a file NOTE: only for - and + displacement - todo : for writing central diff force constant .. no need of ldisp tag 
esta.phonon.force_constant_and_frequencies_selective_subspace_ module#
- esta.phonon.force_constant_and_frequencies_selective_subspace_.get_asr(fcMatrix, atommove)#
- apply accoustic sum rule on the force constant matrix - see Xavier gonze PRB paper: - XAVIER GONZE AND CHANGYOL LEE PHYSICAL REVIEW B VOLUME 55, NUMBER 16 15 APRIL 1997-I - specifically see equations: 44 and 45.. good luck ..read whole paper..sk!! 
- esta.phonon.force_constant_and_frequencies_selective_subspace_.get_dynamical_matrix(atommove, sqrt_mass_array, forceconstant)#
- getting dynamical matrix from force constant matrix at q=0 point - NOTE: for q=0 - dynmat = fc matric/ sqrt(mass1)/ sqrt(mass2) 
- dynmat in q space = dynmat in R space; see equation 7 in
- paper of Ab initio calculation of phonon dispersions in semiconductors prb. Paolo Giannozzi et al. 1991 
 
 
- esta.phonon.force_constant_and_frequencies_selective_subspace_.get_eigen(dynamatical_matrix)#
- dynamical matrix is hermitian matrix .. try taking it Hermitian matrix instead of general matrix 
- esta.phonon.force_constant_and_frequencies_selective_subspace_.get_forceconstant_matrix(atommove, forces, deltax, sign_deltax='plus')#
- esta.phonon.force_constant_and_frequencies_selective_subspace_.get_forces_central(force_c0, force_c1)#
- esta.phonon.force_constant_and_frequencies_selective_subspace_.get_forces_dict(atommove)#
- get forces fron qe output files with + and - displacements and store them in dictionary with indices indication atoms moving index, atom shift index, and displacemet(+ or -) 
- esta.phonon.force_constant_and_frequencies_selective_subspace_.get_forces_dict_parta(atommove)#
- get forces fron qe output files with + and - displacements and store them in dictionary with indices indication atoms moving index, atom shift index, and displacemet(+ or -) 
- esta.phonon.force_constant_and_frequencies_selective_subspace_.get_forces_minus(atommove, forces_dict, atom_direction_shift)#
- extract forces from forces_dict for minus (id=0) displacement 
- esta.phonon.force_constant_and_frequencies_selective_subspace_.get_forces_plus(atommove, forces_dict, atom_direction_shift)#
- extract forces from forces_dict for plus (id=1) displacement 
- esta.phonon.force_constant_and_frequencies_selective_subspace_.get_idatm_iddir_iddispl(atommove)#
- get a list of ‘idatm-iddir-iddispl’
- idatm: atom id iddir : atom move direction index iddispl: + or - shift of atoms 
 - atom_direction_shift ==> id atom, id direction, id shift 
- esta.phonon.force_constant_and_frequencies_selective_subspace_.get_sqrt_mass_array(label)#
- for given atomic symbols, return correspoinding masses in amu 
- esta.phonon.force_constant_and_frequencies_selective_subspace_.get_symmetrized_force_constant_matrix(fcMatrx, atommove)#
- symmetrize force constant matrix fc(iat, ia, jat, ja) - return
- (fc(iat, ia, jat, ja) + fc(jat, ja, iat, ia))/2 
 
- esta.phonon.force_constant_and_frequencies_selective_subspace_.reshape_dyn(dynmatrix, atommove)#
- esta.phonon.force_constant_and_frequencies_selective_subspace_.write_forces(force_row, ldisp)#
- may be you need to add … atoms parameter in the call .. - write forces rows to a file NOTE: only for - and + displacement - todo : for writing central diff force constant .. no need of ldisp tag 
esta.phonon.force_constant_and_frequencies_selective_subspace_general module#
esta.phonon.force_constant_and_frequencies_selective_subspace_general_adv module#
esta.phonon.forces module#
- esta.phonon.forces.get_dynamical_matrix(natoms, sqrt_mass_array, forceconstant)#
- getting dynamical matrix from force constant matrix at q=0 point - NOTE: for q=0 - dynmat = fc matric/ sqrt(mass1)/ sqrt(mass2) 
- dynmat in q space = dynmat in R space; see equation 7 in
- paper of Ab initio calculation of phonon dispersions in semiconductors prb. Paolo Giannozzi et al. 1991 
 
 
- esta.phonon.forces.get_eigen(dynamatical_matrix)#
- dynamical matrix is hermitian matrix .. try taking it Hermitian matrix instead of general matrix 
- esta.phonon.forces.get_forceconstant_matrix(natoms, forces, deltax=0.04, sign_deltax='plus')#
- esta.phonon.forces.get_forces_central(force_c0, force_c1)#
- esta.phonon.forces.get_forces_dict(natoms)#
- get forces fron qe output files with + and - displacements and store them in dictionary with indices indication atoms moving index, atom shift index, and displacemet(+ or -) 
- esta.phonon.forces.get_forces_minus(natoms, forces_dict, atom_direction_shift)#
- extract forces from forces_dict for minus (id :0) displacement 
- esta.phonon.forces.get_forces_plus(natoms, forces_dict, atom_direction_shift)#
- extract forces from forces_dict for plus (id :1) displacement 
- esta.phonon.forces.get_idatm_iddir_iddispl(natoms)#
- get a list of ‘idatm-iddir-iddispl’
- idatm: atom id iddir : atom move direction index iddispl: + or - shift of atoms 
 - atom_direction_shift ==> id atom, id direction, id shift 
- esta.phonon.forces.get_sqrt_mass_array(label)#
- for given atomic symbols, return correspoinding masses in amu 
- esta.phonon.forces.get_symmetrized_force_constant_matrix(fcMatrx, natoms)#
- symmetrize force constant matrix fc(iat, ia, jat, ja) - return
- (fc(iat, ia, jat, ja) + fc(jat, ja, iat, ia))/2 
 
- esta.phonon.forces.reshape_dyn(dynmatrix, natoms)#
- esta.phonon.forces.write_forces(force_row, ldisp)#
- write forces rows to a file NOTE: only for - and + displacement - todo : sfor writing central diff force constant .. no need of ldisp tag 
esta.phonon.forces_selective module#
- esta.phonon.forces_selective.get_dynamical_matrix(natoms, sqrt_mass_array, forceconstant)#
- getting dynamical matrix from force constant matrix at q=0 point - NOTE: for q=0 - dynmat = fc matric/ sqrt(mass1)/ sqrt(mass2) 
- dynmat in q space = dynmat in R space; see equation 7 in
- paper of Ab initio calculation of phonon dispersions in semiconductors prb. Paolo Giannozzi et al. 1991 
 
 
- esta.phonon.forces_selective.get_eigen(dynamatical_matrix)#
- dynamical matrix is hermitian matrix .. try taking it Hermitian matrix instead of general matrix 
- esta.phonon.forces_selective.get_forceconstant_matrix(natoms, forces, deltax=0.04, sign_deltax='plus')#
- esta.phonon.forces_selective.get_forces_central(force_c0, force_c1)#
- esta.phonon.forces_selective.get_forces_dict(atommove)#
- get forces fron qe output files with + and - displacements and store them in dictionary with indices indication atoms moving index, atom shift index, and displacemet(+ or -) 
- esta.phonon.forces_selective.get_forces_minus(natoms, forces_dict, atom_direction_shift)#
- extract forces from forces_dict for minus (id :0) displacement 
- esta.phonon.forces_selective.get_forces_plus(natoms, forces_dict, atom_direction_shift)#
- extract forces from forces_dict for plus (id :1) displacement 
- esta.phonon.forces_selective.get_idatm_iddir_iddispl(atommove)#
- get a list of ‘idatm-iddir-iddispl’
- idatm: atom id iddir : atom move direction index iddispl: + or - shift of atoms 
 - atom_direction_shift ==> id atom, id direction, id shift 
- esta.phonon.forces_selective.get_sqrt_mass_array(label)#
- for given atomic symbols, return correspoinding masses in amu 
- esta.phonon.forces_selective.get_symmetrized_force_constant_matrix(fcMatrx, natoms)#
- symmetrize force constant matrix fc(iat, ia, jat, ja) - return
- (fc(iat, ia, jat, ja) + fc(jat, ja, iat, ia))/2 
 
- esta.phonon.forces_selective.reshape_dyn(dynmatrix, natoms)#
- esta.phonon.forces_selective.write_forces(force_row, ldisp)#
- write forces rows to a file NOTE: only for - and + displacement - todo : sfor writing central diff force constant .. no need of ldisp tag 
esta.phonon.sum_freq_and_zpe module#
esta.phonon.x_error_force_constant_and_frequencies_selective_subspace module#
- esta.phonon.x_error_force_constant_and_frequencies_selective_subspace.get_asr(fcMatrix, atommove)#
- apply accoustic sum rule on the force constant matrix - see Xavier gonze PRB paper: - XAVIER GONZE AND CHANGYOL LEE PHYSICAL REVIEW B VOLUME 55, NUMBER 16 15 APRIL 1997-I - specifically see equations: 44 and 45.. good luck ..read whole paper..sk!! 
- esta.phonon.x_error_force_constant_and_frequencies_selective_subspace.get_dynamical_matrix(atommove, sqrt_mass_array, forceconstant)#
- getting dynamical matrix from force constant matrix at q=0 point - NOTE: for q=0 - dynmat = fc matric/ sqrt(mass1)/ sqrt(mass2) 
- dynmat in q space = dynmat in R space; see equation 7 in
- paper of Ab initio calculation of phonon dispersions in semiconductors prb. Paolo Giannozzi et al. 1991 
 
 
- esta.phonon.x_error_force_constant_and_frequencies_selective_subspace.get_eigen(dynamatical_matrix)#
- dynamical matrix is hermitian matrix .. try taking it Hermitian matrix instead of general matrix 
- esta.phonon.x_error_force_constant_and_frequencies_selective_subspace.get_forceconstant_matrix(atommove, forces, deltax, sign_deltax='plus')#
- esta.phonon.x_error_force_constant_and_frequencies_selective_subspace.get_forces_central(force_c0, force_c1)#
- esta.phonon.x_error_force_constant_and_frequencies_selective_subspace.get_forces_dict(atommove)#
- get forces fron qe output files with + and - displacements and store them in dictionary with indices indication atoms moving index, atom shift index, and displacemet(+ or -) 
- esta.phonon.x_error_force_constant_and_frequencies_selective_subspace.get_forces_dict_parta(atommove)#
- get forces fron qe output files with + and - displacements and store them in dictionary with indices indication atoms moving index, atom shift index, and displacemet(+ or -) 
- esta.phonon.x_error_force_constant_and_frequencies_selective_subspace.get_forces_minus(atommove, forces_dict, atom_direction_shift)#
- extract forces from forces_dict for minus (id=0) displacement 
- esta.phonon.x_error_force_constant_and_frequencies_selective_subspace.get_forces_plus(atommove, forces_dict, atom_direction_shift)#
- extract forces from forces_dict for plus (id=1) displacement 
- esta.phonon.x_error_force_constant_and_frequencies_selective_subspace.get_idatm_iddir_iddispl(atommove)#
- get a list of ‘idatm-iddir-iddispl’
- idatm: atom id iddir : atom move direction index iddispl: + or - shift of atoms 
 - atom_direction_shift ==> id atom, id direction, id shift 
- esta.phonon.x_error_force_constant_and_frequencies_selective_subspace.get_sqrt_mass_array(label)#
- for given atomic symbols, return correspoinding masses in amu 
- esta.phonon.x_error_force_constant_and_frequencies_selective_subspace.get_symmetrized_force_constant_matrix(fcMatrx, atommove)#
- symmetrize force constant matrix fc(iat, ia, jat, ja) - return
- (fc(iat, ia, jat, ja) + fc(jat, ja, iat, ia))/2 
 
- esta.phonon.x_error_force_constant_and_frequencies_selective_subspace.reshape_dyn(dynmatrix, atommove)#
- esta.phonon.x_error_force_constant_and_frequencies_selective_subspace.write_forces(force_row, ldisp)#
- may be you need to add … atoms parameter in the call .. - write forces rows to a file NOTE: only for - and + displacement - todo : for writing central diff force constant .. no need of ldisp tag 
esta.phonon.yaml_read_band module#
read band.yaml file output from the phonopy code and write the specific phonon q point freqency in cm^{-1}.
- esta.phonon.yaml_read_band.read_yaml_band(filename=None, qpt_index=None, outfile=None)#
- Parameters
- filename (str) – name of the filename containing band data in yaml format, default is band.yaml 
- qpt_index (integer) – qpt index for which frequency data to be read, default is first qpoint. 
- outfie (str) – outfile is name of the output file, default is band_cmii.dat 
 
- Returns
- freq – vibration frequencies in cm-1 
- Return type
- array of reals