Statistiques
| Révision :

root / src / ConvXyzZmat.f90 @ 2

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

1
SUBROUTINE ConvXyzZmat(nb,x,y,z,ind_zmat,val_zmat)
2

    
3
  Use VarTypes
4

    
5
  IMPLICIT NONE
6

    
7
  integer(KINT) :: i,i1,i2
8

    
9
  integer(KINT) :: n1,n2,n3,n4,nb
10
  real(KREAL) ::  x(Nb),y(Nb),z(Nb)
11
  real(KREAL) ::  val_zmat(Nb,3)
12
  integer(KINT) :: ind_zmat(Nb,5)
13
  real(KREAL) ::  vx1,vy1,vz1,norm1
14
  real(KREAL) ::  vx2,vy2,vz2,norm2
15
  real(KREAL) ::  vx3,vy3,vz3,norm3
16
  real(KREAL) ::  vx4,vy4,vz4,norm4
17
  real(KREAL) ::  vx5,vy5,vz5,norm5
18
  real(KREAL) ::  val,val_d
19

    
20
  LOGICAL :: Debug
21

    
22

    
23
  INTERFACE
24
     function valid(string) result (isValid)
25
       CHARACTER(*), intent(in) :: string
26
       logical                  :: isValid
27
     END function VALID
28

    
29
     FUNCTION angle(v1x,v1y,v1z,norm1,v2x,v2y,v2z,norm2)
30
       use Path_module, only :  Pi,KINT, KREAL
31
       real(KREAL) ::  v1x,v1y,v1z,norm1
32
       real(KREAL) ::  v2x,v2y,v2z,norm2
33
       real(KREAL) ::  angle
34
     END FUNCTION ANGLE
35

    
36

    
37
     FUNCTION angle_d(v1x,v1y,v1z,norm1,v2x,v2y,v2z,norm2,v3x,v3y,v3z,norm3)
38
       use Path_module, only :  Pi,KINT, KREAL
39
       real(KREAL) ::  v1x,v1y,v1z,norm1
40
       real(KREAL) ::  v2x,v2y,v2z,norm2
41
       real(KREAL) ::  v3x,v3y,v3z,norm3
42
       real(KREAL) ::  angle_d,ca,sa
43
     END FUNCTION ANGLE_D
44

    
45
  END INTERFACE
46

    
47
  debug=valid("ConvXyzZmat")
48

    
49
 if (debug) THEN
50
     Call Header("ConvXyz Zmat")
51
     WRITe(*,*) Nb
52
     DO I=1,Nb
53
        WRITe(*,'(3(1X,F15.8))') x(I),y(i),z(i)
54
     END DO
55
  END IF
56
  IF (nb .GE. 1) THEN
57

    
58
     val_zmat(1,1)=0.0
59
     val_zmat(1,2)=0.0
60
     val_zmat(1,3)=0.0
61
     !        write(*,*) 'Debut procedure Xyz_Zmat'
62

    
63
     IF (nb .GE. 2) THEN
64
        !            write(*,*) 'Debut procedure Xyz_Zmat 2'
65
        i=2
66
        n1=ind_zmat(i,1)
67
        n2=ind_zmat(i,2)
68

    
69
        CALL vecteur(n2,n1,x,y,z,vx1,vy1,vz1,norm1)
70
        !           write(*,11) n1,n2,norm1
71

    
72
        val_zmat(i,1)=norm1
73
        val_zmat(i,2)=0.0
74
        val_zmat(i,3)=0.0
75

    
76
        IF (nb .GE. 3) THEN
77
           !        write(*,*) 'Debut procedure Xyz_Zmat3'
78
           i=3
79
           n1=ind_zmat(i,1)
80
           n2=ind_zmat(i,2)
81
           n3=ind_zmat(i,3)
82

    
83
           CALL vecteur(n2,n1,x,y,z,vx1,vy1,vz1,norm1)
84

    
85
           CALL vecteur(n2,n3,x,y,z,vx2,vy2,vz2,norm2)
86
           val=angle(vx1,vy1,vz1,norm1, &
87
                vx2,vy2,vz2,norm2)
88

    
89
           val_zmat(i,1)=norm1
90
           val_zmat(i,2)=val
91
           val_zmat(i,3)=0.0
92

    
93
           DO i=4,nb
94
              !        write(*,*) 'Debut procedure Xyz_Zmat4'
95
              n1=ind_zmat(i,1)
96
              n2=ind_zmat(i,2)
97
              n3=ind_zmat(i,3)
98
              n4=ind_zmat(i,4)
99

    
100
              CALL vecteur(n2,n1,x,y,z,vx1,vy1,vz1,norm1)
101

    
102
              !        write(*,*) 'Debut procedure Xyz_Zmat42'
103
              CALL vecteur(n2,n3,x,y,z,vx2,vy2,vz2,norm2)
104
              val=angle(vx1,vy1,vz1,norm1, &
105
                   vx2,vy2,vz2,norm2)
106

    
107
              !        write(*,*) 'Debut procedure Xyz_Zmat43'
108
              CALL vecteur(n3,n4,x,y,z,vx3,vy3,vz3,norm3)
109
              CALL produit_vect(vx1,vy1,vz1,norm1, &
110
                   vx2,vy2,vz2,norm2, &
111
                   vx4,vy4,vz4,norm4)
112
              CALL produit_vect(vx3,vy3,vz3,norm3, &
113
                   vx2,vy2,vz2,norm2, &
114
                   vx5,vy5,vz5,norm5)
115
              val_d=angle_d(vx4,vy4,vz4,norm4, &
116
                   vx5,vy5,vz5,norm5, &
117
                   vx2,vy2,vz2,norm2)
118

    
119
              !               write(*,11) n1,n2,norm1,n3,val,n4,val_d
120
11            format (2(1x,i3),1x,f8.4,2(1x,i3,1x,f8.3))
121

    
122
              val_zmat(i,1)=norm1
123
              val_zmat(i,2)=val
124
              val_zmat(i,3)=val_d
125

    
126
           END DO
127
        END IF
128
     END IF
129
  ELSE
130
     RETURN
131
  END IF
132
  RETURN
133
END SUBROUTINE ConvXyzZmat