mirror of https://gitlab.com/QEF/q-e.git
95 lines
2.6 KiB
Fortran
95 lines
2.6 KiB
Fortran
!
|
|
! Copyright (C) 2003-2009 Quantum ESPRESSO group
|
|
! This file is distributed under the terms of the
|
|
! GNU General Public License. See the file `License'
|
|
! in the root directory of the present distribution,
|
|
! or http://www.gnu.org/copyleft/gpl.txt .
|
|
!
|
|
!----------------------------------------------------------------------------
|
|
SUBROUTINE output_tau( print_lattice, print_final )
|
|
!----------------------------------------------------------------------------
|
|
!
|
|
USE io_global, ONLY : stdout
|
|
USE kinds, ONLY : DP
|
|
USE constants, ONLY : bohr_radius_angs
|
|
USE cell_base, ONLY : alat, at, bg, omega
|
|
USE ions_base, ONLY : nat, tau, ityp, atm, if_pos, tau_format
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
LOGICAL, INTENT(IN) :: print_lattice, print_final
|
|
REAL (DP), ALLOCATABLE :: tau_out(:,:)
|
|
INTEGER :: na, i, k
|
|
!
|
|
!
|
|
! ... tau in output format
|
|
!
|
|
ALLOCATE( tau_out(3,nat) )
|
|
!
|
|
tau_out(:,:) = tau(:,:)
|
|
!
|
|
! ... print cell parameters if required
|
|
!
|
|
IF ( print_final ) WRITE( stdout, '("Begin final coordinates")')
|
|
IF ( print_lattice ) THEN
|
|
!
|
|
WRITE( stdout, '(5x,a,1F12.5," a.u.^3 ( ",1F11.5," Ang^3 )")') &
|
|
"new unit-cell volume = ",omega, omega*bohr_radius_angs**3
|
|
WRITE( stdout, '(/"CELL_PARAMETERS (alat=",f12.8,")")') alat
|
|
WRITE( stdout, '(3F14.9)') ( ( at(i,k), i = 1, 3), k = 1, 3 )
|
|
!
|
|
END IF
|
|
!
|
|
SELECT CASE( tau_format )
|
|
!
|
|
! ... convert output atomic positions from internally used format
|
|
! ... (a0 units) to the same format used in input
|
|
!
|
|
CASE( 'alat' )
|
|
!
|
|
WRITE( stdout, '(/"ATOMIC_POSITIONS (alat)")' )
|
|
!
|
|
CASE( 'bohr' )
|
|
!
|
|
WRITE( stdout, '(/"ATOMIC_POSITIONS (bohr)")' )
|
|
tau_out(:,:) = tau_out(:,:) * alat
|
|
!
|
|
CASE( 'crystal' )
|
|
!
|
|
WRITE( stdout, '(/"ATOMIC_POSITIONS (crystal)")' )
|
|
!
|
|
call cryst_to_cart( nat, tau_out, bg, -1 )
|
|
!
|
|
CASE( 'angstrom' )
|
|
!
|
|
WRITE( stdout, '(/"ATOMIC_POSITIONS (angstrom)")' )
|
|
!
|
|
tau_out(:,:) = tau_out(:,:) * alat * bohr_radius_angs
|
|
!
|
|
CASE DEFAULT
|
|
!
|
|
WRITE( stdout, '(/"ATOMIC_POSITIONS")' )
|
|
!
|
|
END SELECT
|
|
!
|
|
DO na = 1, nat
|
|
!
|
|
IF ( ANY( if_pos(:,na) == 0 ) ) THEN
|
|
WRITE( stdout,'(A3,3X,3F14.9,1X,3i4)') &
|
|
atm(ityp(na)), tau_out(:,na), if_pos(:,na)
|
|
ELSE
|
|
WRITE( stdout,'(A3,3X,3F14.9)') &
|
|
atm(ityp(na)), tau_out(:,na)
|
|
END IF
|
|
!
|
|
END DO
|
|
!
|
|
IF ( print_final ) WRITE( stdout, '("End final coordinates")')
|
|
WRITE( stdout, '(/)' )
|
|
!
|
|
DEALLOCATE( tau_out )
|
|
!
|
|
RETURN
|
|
!
|
|
END SUBROUTINE output_tau
|