Statistiques
| Révision :

root / src / bib_oper.f90 @ 7

Historique | Voir | Annoter | Télécharger (4,95 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, &
104
                               v2x,v2y,v2z, &
105
                               v3x,v3y,v3z,norm3)
106

    
107
        use Path_module, only :   KREAL
108

    
109
        real(KREAL) ::  v1x,v1y,v1z ! what do you do with norm1, norm2???
110
        real(KREAL) ::  v2x,v2y,v2z
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