Statistiques
| Révision :

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