Statistiques
| Révision :

root / src / PrintGeom.f90 @ 5

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