Statistiques
| Révision :

root / src / ConvXyzMixed.f90 @ 2

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

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

    
3
  IMPLICIT NONE
4

    
5
  INTEGER, PARAMETER :: KINT=KIND(1)
6
  INTEGER, PARAMETER :: KREAL=KIND(1.0D0)
7

    
8

    
9

    
10
  INTEGER(KINT), INTENT(IN) :: nb,ncart,ind_zmat(nb,5)
11
  REAL(KREAL), INTENT(IN) :: x(Nb),y(nb),z(nb)
12
  REAL(KREAL), INTENT(INOUT) :: val_zmat(nb,3)
13

    
14
  integer(KINT) :: n1,n2,n3,n4
15
  integer(KINT) :: i,i1,i2,ibeg
16

    
17
  real(KREAL) ::  vx1,vy1,vz1,norm1
18
  real(KREAL) ::  vx2,vy2,vz2,norm2
19
  real(KREAL) ::  vx3,vy3,vz3,norm3
20
  real(KREAL) ::  vx4,vy4,vz4,norm4
21
  real(KREAL) ::  vx5,vy5,vz5,norm5
22
  real(KREAL) ::  val,val_d
23

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

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

    
37
     FUNCTION SinAngle(v1x,v1y,v1z,norm1,v2x,v2y,v2z,norm2)
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) ::  SinAngle
42
     END FUNCTION SINANGLE
43

    
44

    
45
     FUNCTION angle_d(v1x,v1y,v1z,norm1,v2x,v2y,v2z,norm2,v3x,v3y,v3z,norm3)
46
        use Path_module, only :  Pi,KINT, KREAL
47
       real(KREAL) ::  v1x,v1y,v1z,norm1
48
       real(KREAL) ::  v2x,v2y,v2z,norm2
49
       real(KREAL) ::  v3x,v3y,v3z,norm3
50
       real(KREAL) ::  angle_d,ca,sa
51
     END FUNCTION ANGLE_D
52

    
53
  END INTERFACE
54

    
55
  DO I=1,NCart
56
     val_zmat(I,1)=x(ind_zmat(I,1))
57
     val_zmat(I,2)=y(ind_zmat(I,1))
58
     val_zmat(I,3)=z(ind_zmat(I,1))
59
  END DO
60

    
61
  SELECT CASE (Ncart)
62
     CASE (1)
63
        i=2
64
        n1=ind_zmat(i,1)
65
        n2=ind_zmat(i,2)
66

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

    
70
        val_zmat(i,1)=norm1
71
        val_zmat(i,2)=0.0
72
        val_zmat(i,3)=0.0
73
     i=3
74
     n1=ind_zmat(i,1)
75
     n2=ind_zmat(i,2)
76
     n3=ind_zmat(i,3)
77

    
78
     CALL vecteur(n2,n1,x,y,z,vx1,vy1,vz1,norm1)
79

    
80
     CALL vecteur(n2,n3,x,y,z,vx2,vy2,vz2,norm2)
81
     val=angle(vx1,vy1,vz1,norm1,vx2,vy2,vz2,norm2)
82

    
83
     val_zmat(i,1)=norm1
84
     val_zmat(i,2)=val
85
     val_zmat(i,3)=0.0
86

    
87
     Ibeg=4
88
     CASE (2)
89

    
90
     i=3
91
     n1=ind_zmat(i,1)
92
     n2=ind_zmat(i,2)
93
     n3=ind_zmat(i,3)
94

    
95
     CALL vecteur(n2,n1,x,y,z,vx1,vy1,vz1,norm1)
96

    
97
     CALL vecteur(n2,n3,x,y,z,vx2,vy2,vz2,norm2)
98
     val=angle(vx1,vy1,vz1,norm1,vx2,vy2,vz2,norm2)
99

    
100
     val_zmat(i,1)=norm1
101
     val_zmat(i,2)=val
102
     val_zmat(i,3)=0.0
103
     Ibeg=4
104
  CASE DEFAULT
105
     Ibeg=Ncart+1
106
  END SELECT
107
  DO i=IBeg,nb
108
     !        write(*,*) 'Debut procedure Xyz_Zmat4'
109
     n1=ind_zmat(i,1)
110
     n2=ind_zmat(i,2)
111
     n3=ind_zmat(i,3)
112
     n4=ind_zmat(i,4)
113

    
114
     CALL vecteur(n2,n1,x,y,z,vx1,vy1,vz1,norm1)
115

    
116
     !        write(*,*) 'Debut procedure Xyz_Zmat42'
117
     CALL vecteur(n2,n3,x,y,z,vx2,vy2,vz2,norm2)
118
     val=angle(vx1,vy1,vz1,norm1, vx2,vy2,vz2,norm2)
119

    
120
     !        write(*,*) 'Debut procedure Xyz_Zmat43'
121
     CALL vecteur(n3,n4,x,y,z,vx3,vy3,vz3,norm3)
122
     CALL produit_vect(vx1,vy1,vz1,norm1,vx2,vy2,vz2,norm2,vx4,vy4,vz4,norm4)
123
     CALL produit_vect(vx3,vy3,vz3,norm3,vx2,vy2,vz2,norm2,vx5,vy5,vz5,norm5)
124
     val_d=angle_d(vx4,vy4,vz4,norm4, vx5,vy5,vz5,norm5,vx2,vy2,vz2,norm2)
125

    
126
     !               write(*,11) n1,n2,norm1,n3,val,n4,val_d
127
11   format (2(1x,i3),1x,f8.4,2(1x,i3,1x,f8.3))
128

    
129
     val_zmat(i,1)=norm1
130
     val_zmat(i,2)=val
131
     val_zmat(i,3)=val_d
132

    
133
  END DO
134
  RETURN
135
END SUBROUTINE ConvXyzMixed