Statistiques
| Révision :

root / src / bib_oper.f90 @ 4

Historique | Voir | Annoter | Télécharger (4,98 ko)

1 1 equemene
2 1 equemene
!================================================================
3 1 equemene
!       vecteur
4 1 equemene
!================================================================
5 1 equemene
6 1 equemene
         SUBROUTINE vecteur(n1,n2,x,y,z,vx,vy,vz,norm)
7 1 equemene
8 1 equemene
        use Path_module, only : NAt, KINT, KREAL
9 1 equemene
10 1 equemene
11 1 equemene
        integer(KINT) :: n1,n2
12 1 equemene
        real(KREAL) ::  x(Nat),y(Nat),z(Nat)
13 1 equemene
        real(KREAL) ::  vx,vy,vz,norm
14 1 equemene
15 1 equemene
        vx=x(n2)-x(n1)
16 1 equemene
        vy=y(n2)-y(n1)
17 1 equemene
        vz=z(n2)-z(n1)
18 1 equemene
19 1 equemene
        !norm=dsqrt( vx*vx + vy*vy + vz*vz )
20 1 equemene
            norm=sqrt( vx*vx + vy*vy + vz*vz )
21 1 equemene
22 1 equemene
!       write(6,*)
23 1 equemene
!       write(6,*) vx,vy,vz,norm
24 1 equemene
!       write(6,*)
25 1 equemene
26 1 equemene
      RETURN
27 1 equemene
      END
28 1 equemene
29 1 equemene
!================================================================
30 1 equemene
!       angle
31 1 equemene
!================================================================
32 1 equemene
33 1 equemene
         FUNCTION angle(v1x,v1y,v1z,norm1,v2x,v2y,v2z,norm2)
34 1 equemene
35 1 equemene
36 1 equemene
        use Path_module, only :  Pi,KINT, KREAL
37 1 equemene
38 1 equemene
        real(KREAL) ::  v1x,v1y,v1z,norm1
39 1 equemene
        real(KREAL) ::  v2x,v2y,v2z,norm2
40 1 equemene
        real(KREAL) ::  angle,ps
41 1 equemene
42 1 equemene
!       write(6,*)
43 1 equemene
!       write(6,*) v1x,v1y,v1z,norm1
44 1 equemene
!       write(6,*) v2x,v2y,v2z,norm2
45 1 equemene
!       write(6,*)
46 1 equemene
        IF (abs(norm1) .LT. 1.D-4) THEN
47 1 equemene
            STOP 'norm1 egale 0'
48 1 equemene
        ELSE IF (abs(norm2) .LT. 1.D-4) THEN
49 1 equemene
            STOP 'norm2 egale 0'
50 1 equemene
        ELSE
51 1 equemene
          ps=v1x*v2x+v1y*v2y+v1z*v2z
52 1 equemene
          angle=dacos(ps/(norm1*norm2))*180./Pi
53 1 equemene
        ENDIF
54 1 equemene
55 1 equemene
      RETURN
56 1 equemene
      END
57 1 equemene
58 1 equemene
59 1 equemene
!================================================================
60 1 equemene
!       angle oriente (dihedre)
61 1 equemene
!================================================================
62 1 equemene
63 1 equemene
         FUNCTION angle_d(v1x,v1y,v1z,norm1, &
64 1 equemene
                          v2x,v2y,v2z,norm2, &
65 1 equemene
                          v3x,v3y,v3z,norm3)
66 1 equemene
67 1 equemene
        use Path_module, only :  Pi,KINT, KREAL
68 1 equemene
69 1 equemene
        real(KREAL) ::  v1x,v1y,v1z,norm1
70 1 equemene
        real(KREAL) ::  v2x,v2y,v2z,norm2
71 1 equemene
        real(KREAL) ::  v3x,v3y,v3z,norm3
72 1 equemene
        real(KREAL) ::  angle_d,ca,sa
73 1 equemene
74 1 equemene
!       write(6,*)
75 1 equemene
!       write(6,*) v1x,v1y,v1z,norm1
76 1 equemene
!       write(6,*) v2x,v2y,v2z,norm2
77 1 equemene
!       write(6,*) v3x,v3y,v3z,norm3
78 1 equemene
!       write(6,*)
79 1 equemene
        !Print *, 'Inside angle_d'
80 1 equemene
        IF (abs(norm1) .LT. 1.D-4) THEN
81 1 equemene
            STOP 'norm1 egale 0'
82 1 equemene
         ELSE IF (abs(norm2) .LT. 1.D-4) THEN
83 1 equemene
            STOP 'norm2 egale 0'
84 1 equemene
        ELSE IF (abs(norm3) .LT. 1.D-4) THEN
85 1 equemene
            STOP 'norm3 egale 0'
86 1 equemene
        ELSE
87 1 equemene
          ca=(v1x*v2x+v1y*v2y+v1z*v2z)/(norm1*norm2)
88 1 equemene
          sa=(v1x*(v2y*v3z-v2z*v3y) &
89 1 equemene
             -v1y*(v2x*v3z-v2z*v3x) &
90 1 equemene
             +v1z*(v2x*v3y-v2y*v3x)) &
91 1 equemene
             /(norm1*norm2*norm3)
92 1 equemene
           angle_d=datan2(sa,ca)*180./Pi
93 1 equemene
!         write(*,*) sa,ca,angle_d,norm1,norm2,norm3
94 1 equemene
        ENDIF
95 1 equemene
        !Print *, 'End of angle_d'
96 1 equemene
      RETURN
97 1 equemene
      END
98 1 equemene
99 1 equemene
!================================================================
100 1 equemene
!       produit vectoriel
101 1 equemene
!================================================================
102 1 equemene
103 1 equemene
       SUBROUTINE produit_vect(v1x,v1y,v1z,norm1, &
104 1 equemene
                               v2x,v2y,v2z,norm2, &
105 1 equemene
                               v3x,v3y,v3z,norm3)
106 1 equemene
107 1 equemene
        use Path_module, only :  Pi,KINT, KREAL
108 1 equemene
109 1 equemene
        real(KREAL) ::  v1x,v1y,v1z,norm1 ! what do you do with norm1, norm2???
110 1 equemene
        real(KREAL) ::  v2x,v2y,v2z,norm2
111 1 equemene
        real(KREAL) ::  v3x,v3y,v3z,norm3
112 1 equemene
113 1 equemene
        v3x= v1y*v2z-v1z*v2y
114 1 equemene
        v3y=-v1x*v2z+v1z*v2x
115 1 equemene
            v3z= v1x*v2y-v1y*v2x
116 1 equemene
117 1 equemene
        norm3=dsqrt( v3x*v3x + v3y*v3y + v3z*v3z )
118 1 equemene
119 1 equemene
120 1 equemene
      RETURN
121 1 equemene
      END
122 1 equemene
123 1 equemene
!================================================================
124 1 equemene
!       rotation suivant l axe x de phi tq a11=cos(phi) a12=sin(phi)
125 1 equemene
!================================================================
126 1 equemene
127 1 equemene
       SUBROUTINE rota_x(v1x,v1y,v1z,a11,a12)
128 1 equemene
129 1 equemene
        use Path_module, only :  KINT, KREAL
130 1 equemene
131 1 equemene
        real(KREAL) ::  v1x,v1y,v1z
132 1 equemene
        real(KREAL) ::  v2x,v2y,v2z
133 1 equemene
        real(KREAL) ::  a11,a12
134 1 equemene
135 1 equemene
        v2x=  v1x
136 1 equemene
        v2y=  a11*v1y - a12*v1z
137 1 equemene
        v2z=  a12*v1y + a11*v1z
138 1 equemene
139 1 equemene
140 1 equemene
        v1x=v2x
141 1 equemene
        v1y=v2y
142 1 equemene
        v1z=v2z
143 1 equemene
144 1 equemene
145 1 equemene
      RETURN
146 1 equemene
      END
147 1 equemene
148 1 equemene
149 1 equemene
!================================================================
150 1 equemene
!       rotation suivant l axe y de phi tq a11=cos(phi) a12=sin(phi)
151 1 equemene
!================================================================
152 1 equemene
153 1 equemene
       SUBROUTINE rota_y(v1x,v1y,v1z,a11,a12)
154 1 equemene
155 1 equemene
        use Path_module, only :  KINT, KREAL
156 1 equemene
157 1 equemene
        real(KREAL) ::  v1x,v1y,v1z
158 1 equemene
        real(KREAL) ::  v2x,v2y,v2z
159 1 equemene
        real(KREAL) ::  a11,a12
160 1 equemene
161 1 equemene
        v2x=  a11*v1x - a12*v1z
162 1 equemene
        v2y=  v1y
163 1 equemene
        v2z=  a12*v1x + a11*v1z
164 1 equemene
165 1 equemene
166 1 equemene
        v1x=v2x
167 1 equemene
        v1y=v2y
168 1 equemene
        v1z=v2z
169 1 equemene
170 1 equemene
171 1 equemene
        RETURN
172 1 equemene
        END
173 1 equemene
174 1 equemene
175 1 equemene
!================================================================
176 1 equemene
!       rotation suivant l axe z de phi tq a11=cos(phi) a12=sin(phi)
177 1 equemene
!================================================================
178 1 equemene
179 1 equemene
       SUBROUTINE rota_z(v1x,v1y,v1z,a11,a12)
180 1 equemene
181 1 equemene
        use Path_module, only :  KINT, KREAL
182 1 equemene
183 1 equemene
        real(KREAL) ::  v1x,v1y,v1z
184 1 equemene
        real(KREAL) ::  v2x,v2y,v2z
185 1 equemene
        real(KREAL) ::  a11,a12
186 1 equemene
187 1 equemene
        v2x=  a11*v1x - a12*v1y
188 1 equemene
        v2y=  a12*v1x + a11*v1y
189 1 equemene
        v2z=  v1z
190 1 equemene
191 1 equemene
192 1 equemene
        v1x=v2x
193 1 equemene
        v1y=v2y
194 1 equemene
        v1z=v2z
195 1 equemene
196 1 equemene
        RETURN
197 1 equemene
        END