Statistiques
| Révision :

root / src / Mixed2cart.f90 @ 4

Historique | Voir | Annoter | Télécharger (2,38 ko)

1
SUBROUTINE Mixed2Cart(Nat,IndZmat,IntCoord,XyzCoord)
2

    
3
  Use Path_module, ONLY : Pi,NCart,NCoord
4

    
5
  IMPLICIT NONE
6

    
7
  INTEGER, PARAMETER :: Kint=Kind(1)
8
  INTEGER, PARAMETER :: KREAL=Kind(1.0D0)
9

    
10
  INTEGER(KINT), INTENT(IN) :: Nat
11
  INTEGER(KINT), INTENT(IN) :: IndZmat(Nat,5)
12
  REAL(KREAL), INTENT(IN) :: IntCoord(*)
13
  REAL(KREAL), INTENT(OUT) :: XyzCoord(Nat,3)
14

    
15
  INTEGER(KINT) :: I,J,K,L,Idx,IBeg,Iat
16
  REAl(KREAL), ALLOCATABLE :: ValZmat(:,:),XyzTmp(:,:)
17
  REAL(KREAL) :: d, a_val
18

    
19
  LOGICAL :: Debug
20

    
21
  INTERFACE
22
     function valid(string) result (isValid)
23
       CHARACTER(*), intent(in) :: string
24
       logical                  :: isValid
25
     END function VALID
26
  END INTERFACE
27

    
28
  debug=valid('mixed2cart')
29

    
30
  if (debug) WRITE(*,*) "================ Entering Mixed2Cart =================="
31

    
32

    
33
  ALLOCATE(ValZmat(Nat,3),XyzTmp(Nat,3))
34

    
35
  if (debug) WRITE(*,*) "DBG Mixed2Cart, IntCoord:",IntCoord(1:NCoord)
36
  Idx=1
37
  valzmat=0.
38
  XyzTmp=0.
39
  DO I=1,NCart
40
     XYZTmp(I,1:3)=IntCoord(Idx:Idx+2)
41
     valzmat(I,1:3)=IntCoord(Idx:Idx+2)
42
     Idx=Idx+3
43
  END DO
44

    
45
  IBeg=NCart+1
46
  SELECT CASE (NCart)
47
  CaSE (1)
48
     Idx=4
49
     XyzTmp(2,1)=IntCoord(Idx)
50
     XyzTmp(2,1:3)= XyzTmp(2,1:3)+ XyzTmp(1,1:3) 
51
     if (Nat.GE.3) THEN
52
        Idx=Idx+1
53
        d=IntCoord(Idx)
54
        Idx=Idx+1
55
        a_val=IntCoord(Idx)
56
        Idx=Idx+1
57
        call ConvertZmat_cart_3(3,IndZmat,d,a_val,       &
58
             XyzTmp(1,1), XyzTmp(1,2),XyzTmp(1,3))
59
     ENDIF
60
     IBeg=4
61
  CASE (2)
62
     Idx=7
63
     if (Nat.GE.3) THEN
64
        d=IntCoord(Idx)
65
        idx=idx+1
66
        a_val=IntCoord(Idx)
67
        Idx=Idx+1
68
        call ConvertZmat_cart_3(3,IndZmat,d,a_val,       &
69
             XyzTmp(1,1), XyzTmp(1,2),XyzTmp(1,3))
70
     ENDIF
71
     IBeg=4
72
  CASE DEFAULT
73
     Ibeg=NCart+1
74
  END SELECT
75

    
76
  DO iat=IBeg,Nat
77
     ValZmat(iat,1)=IntCoord(idx)
78
     Idx=Idx+1
79
     do j=2,3
80
        ValZmat(iat,J)=IntCoord(idx)*180./Pi
81
        Idx=Idx+1
82
     END DO
83
  END DO
84

    
85
  DO iat=iBeg,Nat
86
     call ConvertZmat_cart(iat,IndZmat,ValZmat,       &
87
          XyzTmp(1,1), XyzTmp(1,2),XyzTmp(1,3))
88
  END DO
89

    
90
  if (debug) THEN 
91
     WRITE(*,*) 'DBG Mixed2Cart XyzTmp'
92
     DO I=1,Nat
93
        WRITe(*,'(1X,I3,3(1X,F10.4))') I, XyzTmp(I,1:3)
94
     END DO
95
  END IF
96

    
97
!  XyzCoord=Reshape(XyzTmp,(/3,Nat/),ORDER=(/2,1/))
98
  XyzCoord=XyzTmp
99

    
100
  DEALLOCATE(valzmat,xyztmp)
101
  if (debug) WRITE(*,*) "================ Mixed2Cart Over =================="
102

    
103
END SUBROUTINE Mixed2Cart