root / src / PrintGeom.f90 @ 6
Historique | Voir | Annoter | Télécharger (4,32 ko)
1 |
! This subroutine prints a geometry |
---|---|
2 |
SUBROUTINE PrintGeom(Title,Nat,NCoord,Geom,Coord,IOOUT,Atome,Order,OrderInv,IndZmat) |
3 |
|
4 |
use Path_module, only : Renum,Nom,NCart,Pi |
5 |
|
6 |
IMPLICIT NONE |
7 |
|
8 |
|
9 |
INTEGER, PARAMETER :: KINT=KIND(1) |
10 |
INTEGER, PARAMETER :: KREAL=KIND(1.D0) |
11 |
|
12 |
CHARACTER(*), INTENT(IN) :: Title |
13 |
INTEGER(KINT), INTENT(IN) :: Nat,NCoord,IoOut |
14 |
INTEGER(KINT), INTENT(IN) :: Atome(Nat),Order(Nat), OrderInv(Nat),IndZmat(Nat,5) |
15 |
CHARACTER(32), INTENT(IN) :: Coord |
16 |
REAL(KREAL), INTENT(IN) :: Geom(NCoord) |
17 |
|
18 |
INTEGER(KINT) :: Idx, Iat,I,IBeg |
19 |
LOGICAL :: Debug=.FALSE. |
20 |
|
21 |
SELECT CASE (COORD) |
22 |
CASE ("ZMAT") |
23 |
WRITE(IOOUT,'(1X,A)') TRIM(AdjustL(Title)) |
24 |
WRITE(IOOUT,'(1X,A5,3(1X,A4,1X,F11.6))') Nom(Atome(OrderInv(indzmat(1,1)))) |
25 |
WRITE(IOOUT,'(1X,A5,3(1X,A4,1X,F11.6))') Nom(Atome(OrderInv(indzmat(2,1)))), & |
26 |
Nom(Atome(OrderInv(indzmat(2,2)))),Geom(1) |
27 |
WRITE(IOOUT,'(1X,A5,3(1X,A4,1X,F11.6))') Nom(Atome(OrderInv(indzmat(3,1)))), & |
28 |
Nom(Atome(OrderInv(indzmat(3,2)))),Geom(2), & |
29 |
Nom(Atome(OrderInv(indzmat(3,3)))),Geom(3)*180./Pi |
30 |
Idx=4 |
31 |
DO Iat=4,Nat |
32 |
WRITE(IOOUT,'(1X,A5,3(1X,A4,1X,F11.6))') Nom(Atome(OrderInv(indzmat(iat,1)))), & |
33 |
Nom(Atome(OrderInv(indzmat(iat,2)))),Geom(Idx), & |
34 |
Nom(Atome(OrderInv(indzmat(iat,3)))),Geom(Idx+1)*180./Pi, & |
35 |
Nom(Atome(OrderInv(indzmat(iat,4)))),Geom(Idx+2)*180./Pi |
36 |
Idx=Idx+3 |
37 |
END DO |
38 |
|
39 |
|
40 |
if (debug) THEN |
41 |
WRITE(*,'(1X,A)') TRIM(AdjustL(Title)) |
42 |
WRITE(*,'(1X,A5,3(1X,A4,1X,F11.6))') Nom(Atome(OrderInv(indzmat(1,1)))) |
43 |
WRITE(*,'(1X,A5,3(1X,A4,1X,F11.6))') Nom(Atome(OrderInv(indzmat(2,1)))), & |
44 |
Nom(Atome(OrderInv(indzmat(2,2)))),Geom(1) |
45 |
WRITE(*,'(1X,A5,3(1X,A4,1X,F14.6))') Nom(Atome(OrderInv(indzmat(3,1)))), & |
46 |
Nom(Atome(OrderInv(indzmat(3,2)))),Geom(2), & |
47 |
Nom(Atome(OrderInv(indzmat(3,3)))),Geom(3)*180./Pi |
48 |
Idx=4 |
49 |
DO Iat=4,Nat |
50 |
WRITE(*,'(1X,A5,3(1X,A4,1X,F11.6))') Nom(Atome(OrderInv(indzmat(iat,1)))), & |
51 |
Nom(Atome(OrderInv(indzmat(iat,2)))),Geom(Idx), & |
52 |
Nom(Atome(OrderInv(indzmat(iat,3)))),Geom(Idx+1)*180./Pi, & |
53 |
Nom(Atome(OrderInv(indzmat(iat,4)))),Geom(Idx+2)*180./Pi |
54 |
Idx=Idx+3 |
55 |
END DO |
56 |
END IF |
57 |
CASE ("MIXED") |
58 |
! WRITE(*,'(1X,A,12(1X,F10.5))') "IntCoordTmp:",Geom(1:NCoord) |
59 |
WRITE(IOOUT,'(1X,A)') TRIM(AdjustL(Title)) |
60 |
DO I=1,NCart |
61 |
WRITE(IOOUT,'(1X,A5,3(1X,F11.6))') Nom(Atome(OrderInv(indzmat(1,1)))) & |
62 |
,Geom(3*I-2:3*I) |
63 |
END DO |
64 |
Idx=3*NCart+1 |
65 |
SELECT CASE (NCart) |
66 |
CASE (1) |
67 |
I=2 |
68 |
WRITE(IOOUT,'(1X,A5,3(I5,F11.6))') Nom(Atome(OrderInv(Indzmat(I,1)))), & |
69 |
IndZmat(I,2),Geom(Idx) |
70 |
Idx=Idx+1 |
71 |
I=3 |
72 |
WRITE(IOOUT,'(1X,A5,3(I5,F11.6))') Nom(Atome(OrderInv(Indzmat(I,1)))), & |
73 |
IndZmat(I,2),Geom(Idx),IndZmat(I,3), & |
74 |
Geom(Idx+1)*180./Pi |
75 |
Idx=Idx+2 |
76 |
Ibeg=4 |
77 |
CASE (2) |
78 |
I=3 |
79 |
WRITE(IOOUT,'(1X,A5,3(I5,F11.6))') Nom(Atome(OrderInv(Indzmat(I,1)))), & |
80 |
IndZmat(I,2),Geom(Idx),IndZmat(I,3), & |
81 |
Geom(Idx+1)*180./Pi |
82 |
Idx=Idx+2 |
83 |
Ibeg=4 |
84 |
CASE DEFAULT |
85 |
IBeg=NCart+1 |
86 |
END SELECT |
87 |
DO I=IBeg,Nat |
88 |
WRITE(IOOUT,'(1X,A5,3(I5,F11.6))') Nom(Atome(OrderInv(Indzmat(I,1)))), & |
89 |
IndZmat(I,2),Geom(Idx),IndZmat(I,3), & |
90 |
Geom(Idx+1)*180./Pi, & |
91 |
IndZmat(I,4),Geom(Idx+2)*180./Pi |
92 |
Idx=Idx+3 |
93 |
END DO |
94 |
CASE ('CART','HYBRID') |
95 |
WRITE(IOOUT,'(1X,I5)') Nat |
96 |
WRITE(IOOUT,'(1X,A)') TRIM(AdjustL(Title)) |
97 |
DO I=1,Nat |
98 |
Iat=I |
99 |
If (renum) Iat=Order(I) |
100 |
!!! CAUTION : PFL 29.AUG.2008 -> |
101 |
! Old line: |
102 |
! WRITE(IOOUT,'(1X,A5,3(1X,F11.6))') Nom(Atome(i)), Geom(3*Iat-2:3*Iat) |
103 |
! uses implicitly that Geom is Geom(3,Nat) whereas it is in fact Geom(Nat,3) :-( |
104 |
WRITE(IOOUT,'(1X,A5,3(1X,F11.6))') Nom(Atome(i)), Geom(Iat), Geom(Iat+Nat), Geom(Iat+2*Nat) |
105 |
|
106 |
END DO |
107 |
CASE ('BAKER') |
108 |
!WRITE(IOOUT,*) "Baker coordinates are difficult to interpret. Therefore cartesian coordinates" |
109 |
!WRITE(IOOUT,*) "Should be printed" |
110 |
WRITE(*,*) "Baker coordinates are difficult to interpret. Therefore cartesian" |
111 |
WRITE(*,*) "coordinates are printed above." |
112 |
END SELECT |
113 |
|
114 |
END SUBROUTINE PRINTGEOM |