Re: [SIESTA-L] Phonon-DOS

2009-07-23 Thread Markus Kaukonen
It might be possible for IR intensities using ase package
Unfortunately the ASE-implementation does not fully support siesta
calculation for IR intensities (the calculation of dipole moment is
not there for siesta but it should be easy to add).

Alternatively maybe siesta3.0 has it???

terveisin Markus

2009/7/5 karim rezouali
 Dear All,

 Is there any a way to calculate phonon density of states?


--office: N102 Nano building FIN-02015 TKK
--home: Viinirinne 3 F 12, 02630 Espoo, FIN
--tel: h 045-1242068, w 4518694, 050-5112785
--Rikos ei kannata, eika maatalous
--Suomessa. (Paimio 1998) ---

Re: [SIESTA-L] Phonon DOS

2006-05-31 Thread Andrei Postnikov
On Wed, 31 May 2006, Sharat Chandra wrote:

| Hi
| Can any one please tell me how to calculate the phonon DOS using Vibra
| module? Has any one developed a code for carrying out the calculation?

Hallo Sharat:
yes I have a tool to calculate (local) phonon DOS, 
however it is of limited usefulness:
it assumes a single q-point in a presumable large supercell,
and smears out the peaks at frequencies (and with weights)
as provided by the vibrator.
Please find enclosed the source code and README.
Best regards,


+-- Dr. Andrei Postnikov  Tel. +33-387315873 - mobile +33-666784053 ---+
| Paul Verlaine University - Institute de Physique Electronique et Chimie, |
| Laboratoire de Physique des Milieux Denses, 1 Bd Arago, F-57078 Metz, France |
C   phdos, a script to calculte phonon density of states
C  in a supercell,
C  using phonon eigenvectors provided by vibrator

C  Written by Andrei Postnikov, Oct 2005   Vers_0.2
CXV read format bug fixed   May 2006
  program phdos
  implicit none
  integer ii1,ii2,io1,io2,ivmin,ivmax
  parameter (ii1=11,ii2=12,io1=14,io2=15)
  integer ialloc,iat,nat,iatmin,iatmax,mode,nodif,idif,npoints
  integer, allocatable :: ityp(:),iz(:),jat(:,:),jtyp(:),nna(:)
  double precision tau(3,3),qvec(3),qq(3),delta
  double precision, allocatable :: mass(:),coor(:,:),
 .   freq(:),evr(:,:,:),evi(:,:,:),wwsum(:,:),zz(:)
  character inpfil*60,outfil*60,syslab*30,qlab*1
  character*2, allocatable :: label(:)
  external test_xv,read_xv,read_ev,full_dos,qres_dos
C string manipulation functions in Fortran used below:
C len_trim(string): returns the length of string
C   without trailing blank characters,

C --- read lattice vectors and atom positions from the .XV file:
  write (6,701)
  701 format(' Specify SystemLabel of .XV file: ',$)
  read (5,*) syslab
  inpfil = syslab(1:len_trim(syslab))//'.XV'
  open (ii1,file=inpfil,form='formatted',status='old',err=801)
  call test_xv(ii1,nat)
  allocate (ityp(nat))
  allocate (iz(nat))
  allocate (mass(nat))
  allocate (label(nat))
  allocate (jtyp(nat))
  allocate (nna(nat))
  allocate (jat(nat,nat))
  allocate (coor(1:3,1:nat),STAT=ialloc) 
  if ( then
write (6,*) ' Fails to allocate space for ',nat,' atoms.'
  call read_xv(ii1,nat,ityp,iz,tau,mass,label,coor)
  close (ii1) 
C --- count different types in the XV file. Note that they can be changed
C arbitrarily (by hand) in the XV file  as compared to the Siesta run. 
C E.g. to select some atoms of type=4 as different, assign them type=14.
C They will then get a separate column in output files.
  do 98 iat=1,nat
if ( then
  do idif=1,nodif
if (ityp(iat).eq.jtyp(idif)) then  !  add atom to existing type
   goto 98
nodif=nodif+1 !  add a new type
   98 continue
  write (6,(i5,' different types found in the XV file:')) nodif
  do idif=1,nodif
write (6,(i5,' atoms of type ',i5)) nna(idif),jtyp(idif)
C --- read and store frequencies /eigenvectors from the .vector file,
C q =(0 0 0)  only :
C allocate for all modes, 1 through nat*3 :
C (change ivmin, ivmax above if want to restrict to less modes)
  allocate (freq(ivmin:ivmax))
  allocate (evr(1:3,1:nat,ivmin:ivmax))
  allocate (evi(1:3,1:nat,ivmin:ivmax))
  allocate (zz(1:nodif))
  allocate (wwsum(1:nodif,ivmin:ivmax),STAT=ialloc)
  if ( then
write (6,*) ' Fails to allocate space for vibration modes'
  write (6,702)
  702 format(' Specify SystemLabel of .vectors file: ',$)
  read (5,*) syslab
  inpfil = syslab(1:len_trim(syslab))//'.vectors'
  open (ii2,file=inpfil,form='formatted',status='old',err=801)
  call read_ev(ii2,nat,qq,ivmin,ivmax,evr,evi,freq)
  write (6,*) 'opened and read ',inpfil
  close (ii2)
C ---
  write (6,*) 'You have two options: Total density of states ',
 .'(sum of squares of eigenvectors),'
  write (6,*) 'or Q-projected density of states ',
 .'(convolution with a given Q-vector).'
  101 write (6,703) 
  703 format(' Do you want total density of states (T) ',
 .   ' or convolution (Q) ? : ',$)
  read (5,*,err=101,end=101) qlab
  if (qlab.eq.'T'.or.qlab.eq.'t') then