Statistiques
| Révision :

root / src / Mixed2cart.f90 @ 2

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

1 1 equemene
SUBROUTINE Mixed2Cart(Nat,IndZmat,IntCoord,XyzCoord)
2 1 equemene
3 1 equemene
  Use Path_module, ONLY : Pi,NCart,NCoord
4 1 equemene
5 1 equemene
  IMPLICIT NONE
6 1 equemene
7 1 equemene
  INTEGER, PARAMETER :: Kint=Kind(1)
8 1 equemene
  INTEGER, PARAMETER :: KREAL=Kind(1.0D0)
9 1 equemene
10 1 equemene
  INTEGER(KINT), INTENT(IN) :: Nat
11 1 equemene
  INTEGER(KINT), INTENT(IN) :: IndZmat(Nat,5)
12 1 equemene
  REAL(KREAL), INTENT(IN) :: IntCoord(*)
13 1 equemene
  REAL(KREAL), INTENT(OUT) :: XyzCoord(Nat,3)
14 1 equemene
15 1 equemene
  INTEGER(KINT) :: I,J,K,L,Idx,IBeg,Iat
16 1 equemene
  REAl(KREAL), ALLOCATABLE :: ValZmat(:,:),XyzTmp(:,:)
17 1 equemene
  REAL(KREAL) :: d, a_val
18 1 equemene
19 1 equemene
  LOGICAL :: Debug
20 1 equemene
21 1 equemene
  INTERFACE
22 1 equemene
     function valid(string) result (isValid)
23 1 equemene
       CHARACTER(*), intent(in) :: string
24 1 equemene
       logical                  :: isValid
25 1 equemene
     END function VALID
26 1 equemene
  END INTERFACE
27 1 equemene
28 1 equemene
  debug=valid('mixed2cart')
29 1 equemene
30 1 equemene
  if (debug) WRITE(*,*) "================ Entering Mixed2Cart =================="
31 1 equemene
32 1 equemene
33 1 equemene
  ALLOCATE(ValZmat(Nat,3),XyzTmp(Nat,3))
34 1 equemene
35 1 equemene
  if (debug) WRITE(*,*) "DBG Mixed2Cart, IntCoord:",IntCoord(1:NCoord)
36 1 equemene
  Idx=1
37 1 equemene
  valzmat=0.
38 1 equemene
  XyzTmp=0.
39 1 equemene
  DO I=1,NCart
40 1 equemene
     XYZTmp(I,1:3)=IntCoord(Idx:Idx+2)
41 1 equemene
     valzmat(I,1:3)=IntCoord(Idx:Idx+2)
42 1 equemene
     Idx=Idx+3
43 1 equemene
  END DO
44 1 equemene
45 1 equemene
  IBeg=NCart+1
46 1 equemene
  SELECT CASE (NCart)
47 1 equemene
  CaSE (1)
48 1 equemene
     Idx=4
49 1 equemene
     XyzTmp(2,1)=IntCoord(Idx)
50 1 equemene
     XyzTmp(2,1:3)= XyzTmp(2,1:3)+ XyzTmp(1,1:3)
51 1 equemene
     if (Nat.GE.3) THEN
52 1 equemene
        Idx=Idx+1
53 1 equemene
        d=IntCoord(Idx)
54 1 equemene
        Idx=Idx+1
55 1 equemene
        a_val=IntCoord(Idx)
56 1 equemene
        Idx=Idx+1
57 1 equemene
        call ConvertZmat_cart_3(3,IndZmat,d,a_val,       &
58 1 equemene
             XyzTmp(1,1), XyzTmp(1,2),XyzTmp(1,3))
59 1 equemene
     ENDIF
60 1 equemene
     IBeg=4
61 1 equemene
  CASE (2)
62 1 equemene
     Idx=7
63 1 equemene
     if (Nat.GE.3) THEN
64 1 equemene
        d=IntCoord(Idx)
65 1 equemene
        idx=idx+1
66 1 equemene
        a_val=IntCoord(Idx)
67 1 equemene
        Idx=Idx+1
68 1 equemene
        call ConvertZmat_cart_3(3,IndZmat,d,a_val,       &
69 1 equemene
             XyzTmp(1,1), XyzTmp(1,2),XyzTmp(1,3))
70 1 equemene
     ENDIF
71 1 equemene
     IBeg=4
72 1 equemene
  CASE DEFAULT
73 1 equemene
     Ibeg=NCart+1
74 1 equemene
  END SELECT
75 1 equemene
76 1 equemene
  DO iat=IBeg,Nat
77 1 equemene
     ValZmat(iat,1)=IntCoord(idx)
78 1 equemene
     Idx=Idx+1
79 1 equemene
     do j=2,3
80 1 equemene
        ValZmat(iat,J)=IntCoord(idx)*180./Pi
81 1 equemene
        Idx=Idx+1
82 1 equemene
     END DO
83 1 equemene
  END DO
84 1 equemene
85 1 equemene
  DO iat=iBeg,Nat
86 1 equemene
     call ConvertZmat_cart(iat,IndZmat,ValZmat,       &
87 1 equemene
          XyzTmp(1,1), XyzTmp(1,2),XyzTmp(1,3))
88 1 equemene
  END DO
89 1 equemene
90 1 equemene
  if (debug) THEN
91 1 equemene
     WRITE(*,*) 'DBG Mixed2Cart XyzTmp'
92 1 equemene
     DO I=1,Nat
93 1 equemene
        WRITe(*,'(1X,I3,3(1X,F10.4))') I, XyzTmp(I,1:3)
94 1 equemene
     END DO
95 1 equemene
  END IF
96 1 equemene
97 1 equemene
!  XyzCoord=Reshape(XyzTmp,(/3,Nat/),ORDER=(/2,1/))
98 1 equemene
  XyzCoord=XyzTmp
99 1 equemene
100 1 equemene
  DEALLOCATE(valzmat,xyztmp)
101 1 equemene
  if (debug) WRITE(*,*) "================ Mixed2Cart Over =================="
102 1 equemene
103 1 equemene
END SUBROUTINE Mixed2Cart