Statistiques
| Révision :

root / src / ConvertZmat_cart_3.f90 @ 1

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

1 1 equemene
!C================================================================
2 1 equemene
!C       Converti les positions Zmat en coordonnes cartesiennes
3 1 equemene
!C This version deals with the third atoms in A B C
4 1 equemene
!C  Used in Mix to Cart.
5 1 equemene
!C================================================================
6 1 equemene
7 1 equemene
        SUBROUTINE ConvertZmat_cart_3(iat,ind_zmat,d,a_val,x,y,z)
8 1 equemene
9 1 equemene
        use Path_module, only : Nat, KINT, KREAL
10 1 equemene
11 1 equemene
        IMPLICIT NONE
12 1 equemene
13 1 equemene
        integer(KINT) :: iat,n1,n2,n3
14 1 equemene
        real(KREAL)    :: x(nat),y(nat),z(nat)
15 1 equemene
        real(KREAL) ::  d,a_val
16 1 equemene
        integer(KINT) :: ind_zmat(Nat,5)
17 1 equemene
18 1 equemene
        real(KREAL) ::  vx1,vy1,vz1,norm1
19 1 equemene
        real(KREAL) ::  vvx1,vvy1,vvz1,normv1
20 1 equemene
        real(KREAL) ::  vx2,vy2,vz2,norm2
21 1 equemene
        real(KREAL) ::  vvx2,vvy2,vvz2,normv2
22 1 equemene
        real(KREAL) ::  vx3,vy3,vz3,norm3
23 1 equemene
        real(KREAL) ::  vx4,vy4,vz4,norm4
24 1 equemene
        real(KREAL) ::  a11_z1,a12_z1
25 1 equemene
        real(KREAL) ::  a11_z2,a12_z2
26 1 equemene
        real(KREAL) ::  a11_y,a12_y
27 1 equemene
28 1 equemene
29 1 equemene
30 1 equemene
!C ind_zmat(1) contient le numero de l'atome, (2) celui par rapport auquel on definit la distance...
31 1 equemene
32 1 equemene
          n1=ind_zmat(iat,2)
33 1 equemene
          n2=ind_zmat(iat,3)
34 1 equemene
35 1 equemene
!          WRITE(*,*) iat,n1,n2
36 1 equemene
37 1 equemene
!          WRITE(*,*) "d,val,di",d,a_val,a_dih,a_val*180./3.141592654
38 1 equemene
39 1 equemene
          CALL vecteur(n1,n2,x,y,z,vx1,vy1,vz1,norm1)
40 1 equemene
41 1 equemene
          vvx1=vx1
42 1 equemene
          vvy1=vy1
43 1 equemene
          vvz1=vz1
44 1 equemene
45 1 equemene
!c rotation autour de z de v1 de phi (a11_z1=cos(phi) et a12_z1=sin(phi) ) tq
46 1 equemene
!C  v1 soit dans le plan xOz
47 1 equemene
48 1 equemene
          normv1=dsqrt(vvx1*vvx1+vvy1*vvy1)
49 1 equemene
50 1 equemene
          IF (normv1 .GE. 1.D-6) THEN
51 1 equemene
             a11_z1 = vvx1/normv1
52 1 equemene
             a12_z1 = vvy1/normv1
53 1 equemene
           ELSE
54 1 equemene
             a11_z1 = 1
55 1 equemene
             a12_z1 = 0
56 1 equemene
          END IF
57 1 equemene
58 1 equemene
             CALL rota_z(vx1,vy1,vz1,a11_z1,-a12_z1)
59 1 equemene
60 1 equemene
!c rotation autour de y de v1 de theta (a11_y=cos(theta) et a12_y=sin(theta) ) tq
61 1 equemene
!C  v1 soit sur l'axe Ox
62 1 equemene
63 1 equemene
64 1 equemene
          IF (norm1 .GE. 1.D-8) THEN
65 1 equemene
             a11_y = vz1/norm1
66 1 equemene
             a12_y = vx1/norm1
67 1 equemene
          ELSE
68 1 equemene
             a11_y = 1
69 1 equemene
             a12_y = 0
70 1 equemene
          END IF
71 1 equemene
72 1 equemene
             CALL rota_y(vx1,vy1,vz1,a11_y,a12_y)
73 1 equemene
74 1 equemene
75 1 equemene
!c calcul le vecteur de l atome dans la nouvelle orientation
76 1 equemene
77 1 equemene
          vx4=d*sin(a_val)
78 1 equemene
          vy4=0.
79 1 equemene
           vz4=d*cos(a_val)
80 1 equemene
81 1 equemene
!c calcul le vecteur de l atome
82 1 equemene
!c on tourne en sens invers
83 1 equemene
          CALL rota_y(vx4,vy4,vz4,a11_y ,-a12_y )
84 1 equemene
          CALL rota_z(vx4,vy4,vz4,a11_z1, a12_z1)
85 1 equemene
86 1 equemene
!c calcul l atome a partir de v4
87 1 equemene
          x(iat)=vx4+x(n1)
88 1 equemene
          y(iat)=vy4+y(n1)
89 1 equemene
          z(iat)=vz4+z(n1)
90 1 equemene
91 1 equemene
        END