ABINIT/m_phonons [ Modules ]

Module for the phonon density of states.
Container type is defined, and destruction, print subroutines
as well as the central mkphdos

COPYRIGHT

Copyright (C) 1999-2018 ABINIT group (XG, MG, MJV, GMR)
This file is distributed under the terms of the
GNU General Public Licence, see ~abinit/COPYING
or http://www.gnu.org/copyleft/gpl.txt .
For the initials of contributors, see ~abinit/doc/developers/contributors.txt .

m_phonons/dfpt_symph [ Functions ]

acell(3)=length scales of primitive translations (bohr)
eigvec(2*3*natom*3*natom)=eigenvectors of the dynamical matrix
indsym(4,nsym,natom)=indirect indexing array : for each
isym,iatom, fourth element is label of atom into which iatom is sent by
INVERSE of symmetry operation isym; first three elements are the primitive
translations which must be subtracted after the transformation to get back
to the original unit cell.
iout=unit number to which output is written
natom=number of atoms in unit cell
nsym=number of space group symmetries
phfrq(3*natom)=phonon frequencies (Hartree units)
rprim(3,3)=dimensionless primitive translations in real space
symrel(3,3,nsym)=matrices of the group symmetries (real space)

m_phonons/mkphbs [ Functions ]

Ifc<ifc_type>=Interatomic force constants
crystal<type(crystal_t)> = Info on the crystalline structure.
inp= (derived datatype) contains all the input variables
ddb<type(ddb_type)>=Object storing the DDB results.
asrq0<asrq0_t>=Object for the treatment of the ASR based on the q=0 block found in the DDB file.
prefix=Prefix for output files.
dielt(3,3)=dielectric tensor
comm=MPI communicator

m_phonons/mkphdos [ Functions ]

Calculate the phonon density of states as well as
the contributions associated to the different types of atoms in the unit cell.
Two methods are implemented: gaussian method and linear interpolation based on tetrahedrons.

INPUTS

ifc<ifc_type>=Interatomic force constants
crystal<crystal_t>=Info on the crystalline structure.
prtdos=1 for gaussian method, 2 for tetrahedra.
dosdeltae=Step of frequency mesh.
dossmear=Gaussian broadening, used if prtdos==1.
dos_ngqpt(3)=Divisions of the q-mesh used for computing the DOS
nqshift=Number of shifts in Q-mesh
dos_qshift(3, nqshift)=Shift of the q-mesh.
comm=MPI communicator.

OUTPUT

phdos<phonon_dos_type>=Container with phonon DOS, IDOS and atom-projected DOS.
count_wminmax(2)=Number of (interpolated) phonon frequencies that are outside
input range (see wminmax). Client code can use count_wminmax and wminmax to
enlarge the mesh and call the routine again to recompute the DOS
if all frequencies should be included.

SIDE EFFECTS

wminmax(2)=
In input: min and max value of frequency mesh. Used only if minmax(2) > minmax(1)
else values are taken from ifc%omega_minmax (computed from ab-initio mesh + pad)
In output: min and max frequency obtained after interpolating the IFCs on the dense q-mesh dos_ngqpt

597 subroutine phdos_free(PHdos)
598 599 600 !This section has been created automatically by the script Abilint (TD).
601 !Do not modify the following lines by hand.
602 #undef ABI_FUNC
603 #define ABI_FUNC 'phdos_free'
604 !End of the abilint section
605 606 implicit none
607 608 !Arguments -------------------------------
609 type(phonon_dos_type),intent(inout) ::PHdos
610 611 ! *************************************************************************
612 613 !@phonon_dos_type614 if (allocated(PHdos%atom_mass)) then
615 ABI_FREE(PHdos%atom_mass)
616 end if
617 if (allocated(PHdos%omega)) then
618 ABI_FREE(PHdos%omega)
619 end if
620 if (allocated(PHdos%phdos)) then
621 ABI_FREE(PHdos%phdos)
622 end if
623 if (allocated(PHdos%phdos_int)) then
624 ABI_FREE(PHdos%phdos_int)
625 end if
626 if (allocated(PHdos%pjdos)) then
627 ABI_FREE(PHdos%pjdos)
628 end if
629 if (allocated(PHdos%pjdos_int)) then
630 ABI_FREE(PHdos%pjdos_int)
631 end if
632 if (allocated(PHdos%pjdos_type)) then
633 ABI_FREE(PHdos%pjdos_type)
634 end if
635 if (allocated(PHdos%pjdos_type_int)) then
636 ABI_FREE(PHdos%pjdos_type_int)
637 end if
638 if (allocated(PHdos%pjdos_rc_type)) then
639 ABI_FREE(PHdos%pjdos_rc_type)
640 end if
641 if (allocated(PHdos%msqd_dos_atom)) then
642 ABI_FREE(PHdos%msqd_dos_atom)
643 end if
644 645 end subroutine phdos_free

m_phonons/phdos_print_msqd [ Functions ]

Print out mean square displacement and velocity for each atom (trace and full matrix) as a function of T
see for example https://atztogo.github.io/phonopy/thermal-displacement.html#thermal-displacement