Statistiques
| Révision :

root / src / Int2cart.f90 @ 2

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

1 1 equemene
SUBROUTINE Int2Cart(Nat,IndZmat,IntCoord,XyzCoord)
2 1 equemene
3 1 equemene
  Use Path_module, ONLY : Pi
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(3*Nat-6)
13 1 equemene
  REAL(KREAL), INTENT(OUT) :: XyzCoord(Nat,3)
14 1 equemene
15 1 equemene
  INTEGER(KINT) :: I,J,K,L,Idx
16 1 equemene
  REAl(KREAL), ALLOCATABLE :: ValZmat(:,:),XyzTmp(:,:)
17 1 equemene
  REAL(KREAL) :: d, a_val
18 1 equemene
  LOGICAL :: debug
19 1 equemene
20 1 equemene
  INTERFACE
21 1 equemene
     function valid(string) result (isValid)
22 1 equemene
       CHARACTER(*), intent(in) :: string
23 1 equemene
       logical                  :: isValid
24 1 equemene
     END function VALID
25 1 equemene
26 1 equemene
  END INTERFACE
27 1 equemene
28 1 equemene
  debug=valid('int2cart')
29 1 equemene
30 1 equemene
   if (debug) WRITE(*,*) '================ Entering Int2Cart ==================='
31 1 equemene
32 1 equemene
  ALLOCATE(ValZmat(Nat,3),XyzTmp(Nat,3))
33 1 equemene
34 1 equemene
  ValZmat=0.d0
35 1 equemene
  ValZmat(2,1)=IntCoord(1)
36 1 equemene
  ValZmat(3,1)=IntCoord(2)
37 1 equemene
  ValZmat(3,2)=IntCoord(3)*180./Pi
38 1 equemene
  DO I=4,Nat
39 1 equemene
     ValZmat(I,1)=IntCoord(3*I-8)
40 1 equemene
     ValZmat(I,2)=IntCoord(3*I-7)*180./Pi
41 1 equemene
     ValZmat(I,3)=IntCoord(3*I-6)*180./Pi
42 1 equemene
  END DO
43 1 equemene
44 1 equemene
  IF (debug) THEN
45 1 equemene
     WRITE(*,*) 'DBG Int2Cart'
46 1 equemene
     DO I=1,Nat
47 1 equemene
        WRITe(*,'(1X,I3,3(1X,I3,1X,F10.4))') IndZmat(I,1), IndZmat(I,2), ValZmat(I,1), IndZmat(I,3),&
48 1 equemene
             ValZmat(I,2), IndZmat(I,4), Valzmat(I,3)
49 1 equemene
     END DO
50 1 equemene
  END IF
51 1 equemene
52 1 equemene
  Xyztmp=0.d0
53 1 equemene
  Xyztmp(2,1)=valzmat(2,1)
54 1 equemene
  d=valzmat(3,1)
55 1 equemene
  a_val=valzmat(3,2)/180.*Pi
56 1 equemene
!              write(*,*) "aval,pi",a_val,valzmat(3,2),pi
57 1 equemene
  if (Nat.GE.3) THEN
58 1 equemene
     if (IndZmat(3,2).EQ.1)  THEN
59 1 equemene
        Xyztmp(3,1)=Xyztmp(1,1)+d*cos(a_val)
60 1 equemene
     ELSE
61 1 equemene
        Xyztmp(3,1)=Xyztmp(2,1)-d*cos(a_val)
62 1 equemene
     ENDIF
63 1 equemene
     Xyztmp(3,2)=d*sin(a_val)
64 1 equemene
  ENDIF
65 1 equemene
  !              i=1
66 1 equemene
  !                WRITE(*,*) 'TOTOCart:',i, (Xyztmp(I,J),J=1,3)
67 1 equemene
  !                WRITE(*,*) 'TOTOZma:',i, (valzmat(I,J),J=1,3)
68 1 equemene
  !              i=2
69 1 equemene
  !                WRITE(*,*) 'TOTOCart:',i, (Xyztmp(I,J),J=1,3)
70 1 equemene
  !                WRITE(*,*) 'TOTOZma:',i, (valzmat(I,J),J=1,3)
71 1 equemene
  !              i=3
72 1 equemene
  !                WRITE(*,*) 'TOTOCart:',i, (Xyztmp(I,J),J=1,3)
73 1 equemene
  !                WRITE(*,*) 'TOTOZma:',i, (valzmat(I,J),J=1,3)
74 1 equemene
75 1 equemene
  DO i=4,Nat
76 1 equemene
     call ConvertZmat_cart(i,IndZmat,valzmat,                &
77 1 equemene
          Xyztmp(1,1), Xyztmp(1,2),Xyztmp(1,3))
78 1 equemene
     !                  WRITE(*,*) 'TOTOZma:',i,IndZmat(I,1),            &
79 1 equemene
     !                        (IndZmat(I,J+1),valzmat(I,J),J=1,3)
80 1 equemene
     !                   WRITE(*,*) 'TOTOCart:',i, (Xyztmp(I,J),J=1,3)
81 1 equemene
  END DO
82 1 equemene
83 1 equemene
  IF (debug) THEN
84 1 equemene
     WRITE(*,*) 'DBG Int2Cart XyzTmp'
85 1 equemene
     DO I=1,Nat
86 1 equemene
        WRITe(*,'(1X,I3,3(1X,F10.4))') I, XyzTmp(I,1:3)
87 1 equemene
     END DO
88 1 equemene
  END IF
89 1 equemene
90 1 equemene
91 1 equemene
!  XyzCoord=Reshape(XyzTmp,(/3,Nat/),ORDER=(/2,1/))
92 1 equemene
  XyzCoord=XyzTmp
93 1 equemene
94 1 equemene
  DEALLOCATE(valzmat,xyztmp)
95 1 equemene
  if (debug) WRITE(*,*) '================ Exiting Int2cart ==================='
96 1 equemene
97 1 equemene
END SUBROUTINE Int2Cart