PBC used in "cubefile" format (Axel)

git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@1345 c92efa57-630b-4861-b058-cf58834340f0
This commit is contained in:
giannozz 2004-09-27 14:27:12 +00:00
parent bfd54b0db8
commit 17c3a948ad
4 changed files with 45 additions and 11 deletions

View File

@ -1,4 +1,6 @@
* cell minimization with steepest descent was not working (CP/FPMD)
* various Alpha compilation problems
Fixed in version 2.1:

View File

@ -1,4 +1,29 @@
27 Sep 2004 suport for alpha-linux with compaq compiler (Axel)
27 Sep 2004 support for alpha-linux with compaq compiler
PBC used in "cubefile" format (Axel)
Bug in Modules/cell_base.f90 (dt2 not defined) fixed
Bug in CPV/wf.f90 (iss2 not defined) temporarily fixed
shmem_include only used if __SHMEM macro is defined
More mergings between CPV and FPMD (init, grids setup)
(CC)
References to para module replaced (everywhere in PW ) by
references to mp_global, pfft, pffts.
Old parallel variables me and mypool have been replaced by
me_pool ( = ( me - 1 ) ) and my_pool_id ( = ( mypool - 1) ),
defined in mp_global.
The old combination ( me == 1 .AND. mypool == 1 ) used in the I/O
should be replaced by the logical variable ionode.
All parallel variables (communicators included) are properly defined
in the serial case too, so that "#ifdef __PARA" is not needed.
(C.S.)
Fourier String Method Dynamics improved: the number of fourier
modes used to represent the path are gradually included (starting
from one up to num_of_images-2), so that the overall number of scf
loops needed to reach convergence is considerably reduced (of a
factor of 2-3). (C.S.)
matdyn.f90, q2r.f90 modified to work in a parallel environment
(only the first cpu does the job). (C.S.)
Cleanup in phonon: variable max_time replaced by max_seconds.
Doc updated (C.S.)
24 Sep 2004 atomic_number : patch from Axel, fixes the case of
atomic symobols with one letter

View File

@ -402,7 +402,7 @@ program chdens
elseif (output_format == 6 ) then
!
! GAUSSIAN CUBE FORMAT
call write_cubefile (alat, at, nat, tau, atm, ityp, rhor, &
call write_cubefile (alat, at, bg, nat, tau, atm, ityp, rhor, &
nrx1, nrx2, nrx3, ounit)
else

View File

@ -1,7 +1,7 @@
!
! This file holds gaussian cube generation subroutines.
! Adapted by Axel Kohlmeyer from xsf.f90.
! last update by Axel Kohlmeyer on Sep 19, 2004.
! last update by Axel Kohlmeyer on Sep 27, 2004.
!
! This file is distributed under the terms of the
! GNU General Public License. See the file `License'
@ -11,21 +11,24 @@
! -------------------------------------------------------------------
! this routine writes a gaussian 98 like formatted cubefile.
! plain dumping of the density for now. no ups, no extras.
! atoms outside the supercell are wrapped back according to PBC.
! plain dumping of the data. no re-gridding or transformation to an
! orthorhombic box (needed for most .cube aware programs :-/).
! -------------------------------------------------------------------
subroutine write_cubefile (alat, at, nat, tau, atm, ityp, &
& rho, nrx1, nrx2, nrx3, ounit )
subroutine write_cubefile ( alat, at, bg, nat, tau, atm, ityp, rho, &
nrx1, nrx2, nrx3, ounit )
USE kinds, only : DP
implicit none
integer :: nat, ityp (nat), ounit, nrx1, nrx2, nrx3
integer :: nat, ityp(nat), ounit, nrx1, nrx2, nrx3
character(len=3) :: atm(*)
real(kind=DP) :: alat, tau (3, nat), at (3, 3), rho(nrx1,nrx2,nrx3)
real(kind=DP) :: alat, tau(3,nat), at(3,3), bg(3,3), rho(nrx1,nrx2,nrx3)
! --
integer :: i, nt, i1, i2, i3, at_num
integer, external:: atomic_number
real(kind=DP) :: at_chrg
real(kind=DP) :: at_chrg, tpos(3), inpos(3)
!C WRITE A FORMATTED 'DENSITY-STYLE' CUBEFILE VERY SIMILAR
!C TO THOSE CREATED BY THE GAUSSIAN PROGRAM OR THE CUBEGEN UTILITY.
@ -58,8 +61,12 @@ subroutine write_cubefile (alat, at, nat, tau, atm, ityp, &
at_chrg= float(at_num)
! at_chrg could be alternatively set to valence charge
! positions are in cartesian coordinates and a.u.
write(ounit,'(I5,5F12.6)') at_num, at_chrg, &
tau(1,i)*alat, tau(2,i)*alat, tau(3,i)*alat
!
! wrap coordinates back into cell.
tpos = MATMUL( TRANSPOSE(bg), tau(:,i) )
tpos = tpos - NINT(tpos - 0.5)
inpos = alat * MATMUL( at, tpos )
write(ounit,'(I5,5F12.6)') at_num, at_chrg, inpos
enddo
do i1=1,nrx1