Statistiques
| Révision :

root / src / ConvXyzZmat.f90 @ 2

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

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