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