Statistiques
| Révision :

root / src / ConvXyzMixed.f90 @ 12

Historique | Voir | Annoter | Télécharger (4,78 ko)

1 1 pfleura2
SUBROUTINE ConvXyzMixed(nb,ncart,x,y,z,ind_zmat,val_zmat)
2 1 pfleura2
3 12 pfleura2
!----------------------------------------------------------------------
4 12 pfleura2
!  Copyright 2003-2014 Ecole Normale Supérieure de Lyon,
5 12 pfleura2
!  Centre National de la Recherche Scientifique,
6 12 pfleura2
!  Université Claude Bernard Lyon 1. All rights reserved.
7 12 pfleura2
!
8 12 pfleura2
!  This work is registered with the Agency for the Protection of Programs
9 12 pfleura2
!  as IDDN.FR.001.100009.000.S.P.2014.000.30625
10 12 pfleura2
!
11 12 pfleura2
!  Authors: P. Fleurat-Lessard, P. Dayal
12 12 pfleura2
!  Contact: optnpath@gmail.com
13 12 pfleura2
!
14 12 pfleura2
! This file is part of "Opt'n Path".
15 12 pfleura2
!
16 12 pfleura2
!  "Opt'n Path" is free software: you can redistribute it and/or modify
17 12 pfleura2
!  it under the terms of the GNU Affero General Public License as
18 12 pfleura2
!  published by the Free Software Foundation, either version 3 of the License,
19 12 pfleura2
!  or (at your option) any later version.
20 12 pfleura2
!
21 12 pfleura2
!  "Opt'n Path" is distributed in the hope that it will be useful,
22 12 pfleura2
!  but WITHOUT ANY WARRANTY; without even the implied warranty of
23 12 pfleura2
!
24 12 pfleura2
!  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
25 12 pfleura2
!  GNU Affero General Public License for more details.
26 12 pfleura2
!
27 12 pfleura2
!  You should have received a copy of the GNU Affero General Public License
28 12 pfleura2
!  along with "Opt'n Path". If not, see <http://www.gnu.org/licenses/>.
29 12 pfleura2
!
30 12 pfleura2
! Contact The Office of Technology Licensing, valorisation@ens-lyon.fr,
31 12 pfleura2
! for commercial licensing opportunities.
32 12 pfleura2
!----------------------------------------------------------------------
33 12 pfleura2
34 1 pfleura2
  IMPLICIT NONE
35 1 pfleura2
36 1 pfleura2
  INTEGER, PARAMETER :: KINT=KIND(1)
37 1 pfleura2
  INTEGER, PARAMETER :: KREAL=KIND(1.0D0)
38 1 pfleura2
39 1 pfleura2
40 1 pfleura2
41 1 pfleura2
  INTEGER(KINT), INTENT(IN) :: nb,ncart,ind_zmat(nb,5)
42 1 pfleura2
  REAL(KREAL), INTENT(IN) :: x(Nb),y(nb),z(nb)
43 1 pfleura2
  REAL(KREAL), INTENT(INOUT) :: val_zmat(nb,3)
44 1 pfleura2
45 1 pfleura2
  integer(KINT) :: n1,n2,n3,n4
46 2 pfleura2
  integer(KINT) :: i, ibeg
47 1 pfleura2
48 1 pfleura2
  real(KREAL) ::  vx1,vy1,vz1,norm1
49 1 pfleura2
  real(KREAL) ::  vx2,vy2,vz2,norm2
50 1 pfleura2
  real(KREAL) ::  vx3,vy3,vz3,norm3
51 1 pfleura2
  real(KREAL) ::  vx4,vy4,vz4,norm4
52 1 pfleura2
  real(KREAL) ::  vx5,vy5,vz5,norm5
53 1 pfleura2
  real(KREAL) ::  val,val_d
54 1 pfleura2
55 1 pfleura2
  INTERFACE
56 1 pfleura2
     function valid(string) result (isValid)
57 1 pfleura2
       CHARACTER(*), intent(in) :: string
58 1 pfleura2
       logical                  :: isValid
59 1 pfleura2
     END function VALID
60 1 pfleura2
61 1 pfleura2
     FUNCTION angle(v1x,v1y,v1z,norm1,v2x,v2y,v2z,norm2)
62 1 pfleura2
        use Path_module, only :  Pi,KINT, KREAL
63 1 pfleura2
       real(KREAL) ::  v1x,v1y,v1z,norm1
64 1 pfleura2
       real(KREAL) ::  v2x,v2y,v2z,norm2
65 1 pfleura2
       real(KREAL) ::  angle
66 1 pfleura2
     END FUNCTION ANGLE
67 1 pfleura2
68 1 pfleura2
     FUNCTION SinAngle(v1x,v1y,v1z,norm1,v2x,v2y,v2z,norm2)
69 1 pfleura2
        use Path_module, only :  Pi,KINT, KREAL
70 1 pfleura2
       real(KREAL) ::  v1x,v1y,v1z,norm1
71 1 pfleura2
       real(KREAL) ::  v2x,v2y,v2z,norm2
72 1 pfleura2
       real(KREAL) ::  SinAngle
73 1 pfleura2
     END FUNCTION SINANGLE
74 1 pfleura2
75 1 pfleura2
76 1 pfleura2
     FUNCTION angle_d(v1x,v1y,v1z,norm1,v2x,v2y,v2z,norm2,v3x,v3y,v3z,norm3)
77 1 pfleura2
        use Path_module, only :  Pi,KINT, KREAL
78 1 pfleura2
       real(KREAL) ::  v1x,v1y,v1z,norm1
79 1 pfleura2
       real(KREAL) ::  v2x,v2y,v2z,norm2
80 1 pfleura2
       real(KREAL) ::  v3x,v3y,v3z,norm3
81 1 pfleura2
       real(KREAL) ::  angle_d,ca,sa
82 1 pfleura2
     END FUNCTION ANGLE_D
83 1 pfleura2
84 1 pfleura2
  END INTERFACE
85 1 pfleura2
86 1 pfleura2
  DO I=1,NCart
87 1 pfleura2
     val_zmat(I,1)=x(ind_zmat(I,1))
88 1 pfleura2
     val_zmat(I,2)=y(ind_zmat(I,1))
89 1 pfleura2
     val_zmat(I,3)=z(ind_zmat(I,1))
90 1 pfleura2
  END DO
91 1 pfleura2
92 1 pfleura2
  SELECT CASE (Ncart)
93 1 pfleura2
     CASE (1)
94 1 pfleura2
        i=2
95 1 pfleura2
        n1=ind_zmat(i,1)
96 1 pfleura2
        n2=ind_zmat(i,2)
97 1 pfleura2
98 1 pfleura2
        CALL vecteur(n2,n1,x,y,z,vx1,vy1,vz1,norm1)
99 1 pfleura2
     !           write(*,11) n1,n2,norm1
100 1 pfleura2
101 1 pfleura2
        val_zmat(i,1)=norm1
102 1 pfleura2
        val_zmat(i,2)=0.0
103 1 pfleura2
        val_zmat(i,3)=0.0
104 1 pfleura2
     i=3
105 1 pfleura2
     n1=ind_zmat(i,1)
106 1 pfleura2
     n2=ind_zmat(i,2)
107 1 pfleura2
     n3=ind_zmat(i,3)
108 1 pfleura2
109 1 pfleura2
     CALL vecteur(n2,n1,x,y,z,vx1,vy1,vz1,norm1)
110 1 pfleura2
111 1 pfleura2
     CALL vecteur(n2,n3,x,y,z,vx2,vy2,vz2,norm2)
112 1 pfleura2
     val=angle(vx1,vy1,vz1,norm1,vx2,vy2,vz2,norm2)
113 1 pfleura2
114 1 pfleura2
     val_zmat(i,1)=norm1
115 1 pfleura2
     val_zmat(i,2)=val
116 1 pfleura2
     val_zmat(i,3)=0.0
117 1 pfleura2
118 1 pfleura2
     Ibeg=4
119 1 pfleura2
     CASE (2)
120 1 pfleura2
121 1 pfleura2
     i=3
122 1 pfleura2
     n1=ind_zmat(i,1)
123 1 pfleura2
     n2=ind_zmat(i,2)
124 1 pfleura2
     n3=ind_zmat(i,3)
125 1 pfleura2
126 1 pfleura2
     CALL vecteur(n2,n1,x,y,z,vx1,vy1,vz1,norm1)
127 1 pfleura2
128 1 pfleura2
     CALL vecteur(n2,n3,x,y,z,vx2,vy2,vz2,norm2)
129 1 pfleura2
     val=angle(vx1,vy1,vz1,norm1,vx2,vy2,vz2,norm2)
130 1 pfleura2
131 1 pfleura2
     val_zmat(i,1)=norm1
132 1 pfleura2
     val_zmat(i,2)=val
133 1 pfleura2
     val_zmat(i,3)=0.0
134 1 pfleura2
     Ibeg=4
135 1 pfleura2
  CASE DEFAULT
136 1 pfleura2
     Ibeg=Ncart+1
137 1 pfleura2
  END SELECT
138 1 pfleura2
  DO i=IBeg,nb
139 1 pfleura2
     !        write(*,*) 'Debut procedure Xyz_Zmat4'
140 1 pfleura2
     n1=ind_zmat(i,1)
141 1 pfleura2
     n2=ind_zmat(i,2)
142 1 pfleura2
     n3=ind_zmat(i,3)
143 1 pfleura2
     n4=ind_zmat(i,4)
144 1 pfleura2
145 1 pfleura2
     CALL vecteur(n2,n1,x,y,z,vx1,vy1,vz1,norm1)
146 1 pfleura2
147 1 pfleura2
     !        write(*,*) 'Debut procedure Xyz_Zmat42'
148 1 pfleura2
     CALL vecteur(n2,n3,x,y,z,vx2,vy2,vz2,norm2)
149 1 pfleura2
     val=angle(vx1,vy1,vz1,norm1, vx2,vy2,vz2,norm2)
150 1 pfleura2
151 1 pfleura2
     !        write(*,*) 'Debut procedure Xyz_Zmat43'
152 1 pfleura2
     CALL vecteur(n3,n4,x,y,z,vx3,vy3,vz3,norm3)
153 2 pfleura2
     CALL produit_vect(vx1,vy1,vz1,vx2,vy2,vz2,vx4,vy4,vz4,norm4)
154 2 pfleura2
     CALL produit_vect(vx3,vy3,vz3,vx2,vy2,vz2,vx5,vy5,vz5,norm5)
155 1 pfleura2
     val_d=angle_d(vx4,vy4,vz4,norm4, vx5,vy5,vz5,norm5,vx2,vy2,vz2,norm2)
156 1 pfleura2
157 1 pfleura2
     !               write(*,11) n1,n2,norm1,n3,val,n4,val_d
158 2 pfleura2
!11   format (2(1x,i3),1x,f8.4,2(1x,i3,1x,f8.3))
159 1 pfleura2
160 1 pfleura2
     val_zmat(i,1)=norm1
161 1 pfleura2
     val_zmat(i,2)=val
162 1 pfleura2
     val_zmat(i,3)=val_d
163 1 pfleura2
164 1 pfleura2
  END DO
165 1 pfleura2
  RETURN
166 1 pfleura2
END SUBROUTINE ConvXyzMixed