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