1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
!
! Copyright (C) 1996-2016 The SIESTA group
! This file is distributed under the terms of the
! GNU General Public License: see COPYING in the top directory
! or http://www.gnu.org/copyleft/gpl.txt.
! See Docs/Contributors.txt for a list of contributors.
!
subroutine pixmol(iza, xa, na )
c *******************************************************************
c Writes and accumulates coordinates to be animated by Xmol
c Written by E. Artacho. February 1999. Modified to open/close 2003
c ********* INPUT ***************************************************
c integer iza(na) : Atomic numbers of different atoms
c double xa(3,na) : Atom coordinates
c integer na : Number of atoms
c character slabel*20 : Label for file naming
c *******************************************************************
use precision, only: dp
use periodic_table, only: symbol
use files, only: slabel, label_length
implicit none
character(len=label_length+4) :: paste
integer :: na
integer :: iza(na)
real(dp) :: xa(3,na)
external io_assign, io_close, paste
c Internal variables and arrays
character(len=label_length+4), save :: fname
integer :: i, ia
integer, save :: unit
logical, save :: frstme = .true.
real(dp), save :: Ang = 1.0_dp/0.529177_dp
c -------------------------------------------------------------------
character(len=2) :: sym
if ( frstme ) then
fname = paste(slabel,'.ANI')
frstme = .false.
endif
call io_assign(unit)
open( unit, file=fname, form = 'formatted', position='append',
. status='unknown')
write(unit,'(i5)') na
write(unit,*)
do ia = 1, na
sym = symbol(iza(ia))
write(unit,'(a2,2x,3f12.6)') sym , (xa(i,ia)/Ang,i=1,3)
enddo
call io_close(unit)
return
end
|