Statistiques
| Révision :

root / src / ConvXyzMixed.f90 @ 2

Historique | Voir | Annoter | Télécharger (3,5 ko)

1 1 equemene
SUBROUTINE ConvXyzMixed(nb,ncart,x,y,z,ind_zmat,val_zmat)
2 1 equemene
3 1 equemene
  IMPLICIT NONE
4 1 equemene
5 1 equemene
  INTEGER, PARAMETER :: KINT=KIND(1)
6 1 equemene
  INTEGER, PARAMETER :: KREAL=KIND(1.0D0)
7 1 equemene
8 1 equemene
9 1 equemene
10 1 equemene
  INTEGER(KINT), INTENT(IN) :: nb,ncart,ind_zmat(nb,5)
11 1 equemene
  REAL(KREAL), INTENT(IN) :: x(Nb),y(nb),z(nb)
12 1 equemene
  REAL(KREAL), INTENT(INOUT) :: val_zmat(nb,3)
13 1 equemene
14 1 equemene
  integer(KINT) :: n1,n2,n3,n4
15 1 equemene
  integer(KINT) :: i,i1,i2,ibeg
16 1 equemene
17 1 equemene
  real(KREAL) ::  vx1,vy1,vz1,norm1
18 1 equemene
  real(KREAL) ::  vx2,vy2,vz2,norm2
19 1 equemene
  real(KREAL) ::  vx3,vy3,vz3,norm3
20 1 equemene
  real(KREAL) ::  vx4,vy4,vz4,norm4
21 1 equemene
  real(KREAL) ::  vx5,vy5,vz5,norm5
22 1 equemene
  real(KREAL) ::  val,val_d
23 1 equemene
24 1 equemene
  INTERFACE
25 1 equemene
     function valid(string) result (isValid)
26 1 equemene
       CHARACTER(*), intent(in) :: string
27 1 equemene
       logical                  :: isValid
28 1 equemene
     END function VALID
29 1 equemene
30 1 equemene
     FUNCTION angle(v1x,v1y,v1z,norm1,v2x,v2y,v2z,norm2)
31 1 equemene
        use Path_module, only :  Pi,KINT, KREAL
32 1 equemene
       real(KREAL) ::  v1x,v1y,v1z,norm1
33 1 equemene
       real(KREAL) ::  v2x,v2y,v2z,norm2
34 1 equemene
       real(KREAL) ::  angle
35 1 equemene
     END FUNCTION ANGLE
36 1 equemene
37 1 equemene
     FUNCTION SinAngle(v1x,v1y,v1z,norm1,v2x,v2y,v2z,norm2)
38 1 equemene
        use Path_module, only :  Pi,KINT, KREAL
39 1 equemene
       real(KREAL) ::  v1x,v1y,v1z,norm1
40 1 equemene
       real(KREAL) ::  v2x,v2y,v2z,norm2
41 1 equemene
       real(KREAL) ::  SinAngle
42 1 equemene
     END FUNCTION SINANGLE
43 1 equemene
44 1 equemene
45 1 equemene
     FUNCTION angle_d(v1x,v1y,v1z,norm1,v2x,v2y,v2z,norm2,v3x,v3y,v3z,norm3)
46 1 equemene
        use Path_module, only :  Pi,KINT, KREAL
47 1 equemene
       real(KREAL) ::  v1x,v1y,v1z,norm1
48 1 equemene
       real(KREAL) ::  v2x,v2y,v2z,norm2
49 1 equemene
       real(KREAL) ::  v3x,v3y,v3z,norm3
50 1 equemene
       real(KREAL) ::  angle_d,ca,sa
51 1 equemene
     END FUNCTION ANGLE_D
52 1 equemene
53 1 equemene
  END INTERFACE
54 1 equemene
55 1 equemene
  DO I=1,NCart
56 1 equemene
     val_zmat(I,1)=x(ind_zmat(I,1))
57 1 equemene
     val_zmat(I,2)=y(ind_zmat(I,1))
58 1 equemene
     val_zmat(I,3)=z(ind_zmat(I,1))
59 1 equemene
  END DO
60 1 equemene
61 1 equemene
  SELECT CASE (Ncart)
62 1 equemene
     CASE (1)
63 1 equemene
        i=2
64 1 equemene
        n1=ind_zmat(i,1)
65 1 equemene
        n2=ind_zmat(i,2)
66 1 equemene
67 1 equemene
        CALL vecteur(n2,n1,x,y,z,vx1,vy1,vz1,norm1)
68 1 equemene
     !           write(*,11) n1,n2,norm1
69 1 equemene
70 1 equemene
        val_zmat(i,1)=norm1
71 1 equemene
        val_zmat(i,2)=0.0
72 1 equemene
        val_zmat(i,3)=0.0
73 1 equemene
     i=3
74 1 equemene
     n1=ind_zmat(i,1)
75 1 equemene
     n2=ind_zmat(i,2)
76 1 equemene
     n3=ind_zmat(i,3)
77 1 equemene
78 1 equemene
     CALL vecteur(n2,n1,x,y,z,vx1,vy1,vz1,norm1)
79 1 equemene
80 1 equemene
     CALL vecteur(n2,n3,x,y,z,vx2,vy2,vz2,norm2)
81 1 equemene
     val=angle(vx1,vy1,vz1,norm1,vx2,vy2,vz2,norm2)
82 1 equemene
83 1 equemene
     val_zmat(i,1)=norm1
84 1 equemene
     val_zmat(i,2)=val
85 1 equemene
     val_zmat(i,3)=0.0
86 1 equemene
87 1 equemene
     Ibeg=4
88 1 equemene
     CASE (2)
89 1 equemene
90 1 equemene
     i=3
91 1 equemene
     n1=ind_zmat(i,1)
92 1 equemene
     n2=ind_zmat(i,2)
93 1 equemene
     n3=ind_zmat(i,3)
94 1 equemene
95 1 equemene
     CALL vecteur(n2,n1,x,y,z,vx1,vy1,vz1,norm1)
96 1 equemene
97 1 equemene
     CALL vecteur(n2,n3,x,y,z,vx2,vy2,vz2,norm2)
98 1 equemene
     val=angle(vx1,vy1,vz1,norm1,vx2,vy2,vz2,norm2)
99 1 equemene
100 1 equemene
     val_zmat(i,1)=norm1
101 1 equemene
     val_zmat(i,2)=val
102 1 equemene
     val_zmat(i,3)=0.0
103 1 equemene
     Ibeg=4
104 1 equemene
  CASE DEFAULT
105 1 equemene
     Ibeg=Ncart+1
106 1 equemene
  END SELECT
107 1 equemene
  DO i=IBeg,nb
108 1 equemene
     !        write(*,*) 'Debut procedure Xyz_Zmat4'
109 1 equemene
     n1=ind_zmat(i,1)
110 1 equemene
     n2=ind_zmat(i,2)
111 1 equemene
     n3=ind_zmat(i,3)
112 1 equemene
     n4=ind_zmat(i,4)
113 1 equemene
114 1 equemene
     CALL vecteur(n2,n1,x,y,z,vx1,vy1,vz1,norm1)
115 1 equemene
116 1 equemene
     !        write(*,*) 'Debut procedure Xyz_Zmat42'
117 1 equemene
     CALL vecteur(n2,n3,x,y,z,vx2,vy2,vz2,norm2)
118 1 equemene
     val=angle(vx1,vy1,vz1,norm1, vx2,vy2,vz2,norm2)
119 1 equemene
120 1 equemene
     !        write(*,*) 'Debut procedure Xyz_Zmat43'
121 1 equemene
     CALL vecteur(n3,n4,x,y,z,vx3,vy3,vz3,norm3)
122 1 equemene
     CALL produit_vect(vx1,vy1,vz1,norm1,vx2,vy2,vz2,norm2,vx4,vy4,vz4,norm4)
123 1 equemene
     CALL produit_vect(vx3,vy3,vz3,norm3,vx2,vy2,vz2,norm2,vx5,vy5,vz5,norm5)
124 1 equemene
     val_d=angle_d(vx4,vy4,vz4,norm4, vx5,vy5,vz5,norm5,vx2,vy2,vz2,norm2)
125 1 equemene
126 1 equemene
     !               write(*,11) n1,n2,norm1,n3,val,n4,val_d
127 1 equemene
11   format (2(1x,i3),1x,f8.4,2(1x,i3,1x,f8.3))
128 1 equemene
129 1 equemene
     val_zmat(i,1)=norm1
130 1 equemene
     val_zmat(i,2)=val
131 1 equemene
     val_zmat(i,3)=val_d
132 1 equemene
133 1 equemene
  END DO
134 1 equemene
  RETURN
135 1 equemene
END SUBROUTINE ConvXyzMixed