Statistiques
| Révision :

root / src / ConvXyzZmat.f90 @ 12

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

1 1 pfleura2
SUBROUTINE ConvXyzZmat(nb,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
  Use VarTypes
35 1 pfleura2
36 1 pfleura2
  IMPLICIT NONE
37 1 pfleura2
38 2 pfleura2
  integer(KINT) :: i
39 1 pfleura2
40 1 pfleura2
  integer(KINT) :: n1,n2,n3,n4,nb
41 1 pfleura2
  real(KREAL) ::  x(Nb),y(Nb),z(Nb)
42 1 pfleura2
  real(KREAL) ::  val_zmat(Nb,3)
43 1 pfleura2
  integer(KINT) :: ind_zmat(Nb,5)
44 1 pfleura2
  real(KREAL) ::  vx1,vy1,vz1,norm1
45 1 pfleura2
  real(KREAL) ::  vx2,vy2,vz2,norm2
46 1 pfleura2
  real(KREAL) ::  vx3,vy3,vz3,norm3
47 1 pfleura2
  real(KREAL) ::  vx4,vy4,vz4,norm4
48 1 pfleura2
  real(KREAL) ::  vx5,vy5,vz5,norm5
49 1 pfleura2
  real(KREAL) ::  val,val_d
50 1 pfleura2
51 1 pfleura2
  LOGICAL :: Debug
52 1 pfleura2
53 1 pfleura2
54 1 pfleura2
  INTERFACE
55 1 pfleura2
     function valid(string) result (isValid)
56 1 pfleura2
       CHARACTER(*), intent(in) :: string
57 1 pfleura2
       logical                  :: isValid
58 1 pfleura2
     END function VALID
59 1 pfleura2
60 1 pfleura2
     FUNCTION angle(v1x,v1y,v1z,norm1,v2x,v2y,v2z,norm2)
61 1 pfleura2
       use Path_module, only :  Pi,KINT, KREAL
62 1 pfleura2
       real(KREAL) ::  v1x,v1y,v1z,norm1
63 1 pfleura2
       real(KREAL) ::  v2x,v2y,v2z,norm2
64 1 pfleura2
       real(KREAL) ::  angle
65 1 pfleura2
     END FUNCTION ANGLE
66 1 pfleura2
67 1 pfleura2
68 1 pfleura2
     FUNCTION angle_d(v1x,v1y,v1z,norm1,v2x,v2y,v2z,norm2,v3x,v3y,v3z,norm3)
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) ::  v3x,v3y,v3z,norm3
73 1 pfleura2
       real(KREAL) ::  angle_d,ca,sa
74 1 pfleura2
     END FUNCTION ANGLE_D
75 1 pfleura2
76 1 pfleura2
  END INTERFACE
77 1 pfleura2
78 1 pfleura2
  debug=valid("ConvXyzZmat")
79 1 pfleura2
80 1 pfleura2
 if (debug) THEN
81 1 pfleura2
     Call Header("ConvXyz Zmat")
82 1 pfleura2
     WRITe(*,*) Nb
83 1 pfleura2
     DO I=1,Nb
84 1 pfleura2
        WRITe(*,'(3(1X,F15.8))') x(I),y(i),z(i)
85 1 pfleura2
     END DO
86 1 pfleura2
  END IF
87 1 pfleura2
  IF (nb .GE. 1) THEN
88 1 pfleura2
89 1 pfleura2
     val_zmat(1,1)=0.0
90 1 pfleura2
     val_zmat(1,2)=0.0
91 1 pfleura2
     val_zmat(1,3)=0.0
92 1 pfleura2
     !        write(*,*) 'Debut procedure Xyz_Zmat'
93 1 pfleura2
94 1 pfleura2
     IF (nb .GE. 2) THEN
95 1 pfleura2
        !            write(*,*) 'Debut procedure Xyz_Zmat 2'
96 1 pfleura2
        i=2
97 1 pfleura2
        n1=ind_zmat(i,1)
98 1 pfleura2
        n2=ind_zmat(i,2)
99 1 pfleura2
100 1 pfleura2
        CALL vecteur(n2,n1,x,y,z,vx1,vy1,vz1,norm1)
101 1 pfleura2
        !           write(*,11) n1,n2,norm1
102 1 pfleura2
103 1 pfleura2
        val_zmat(i,1)=norm1
104 1 pfleura2
        val_zmat(i,2)=0.0
105 1 pfleura2
        val_zmat(i,3)=0.0
106 1 pfleura2
107 1 pfleura2
        IF (nb .GE. 3) THEN
108 1 pfleura2
           !        write(*,*) 'Debut procedure Xyz_Zmat3'
109 1 pfleura2
           i=3
110 1 pfleura2
           n1=ind_zmat(i,1)
111 1 pfleura2
           n2=ind_zmat(i,2)
112 1 pfleura2
           n3=ind_zmat(i,3)
113 1 pfleura2
114 1 pfleura2
           CALL vecteur(n2,n1,x,y,z,vx1,vy1,vz1,norm1)
115 1 pfleura2
116 1 pfleura2
           CALL vecteur(n2,n3,x,y,z,vx2,vy2,vz2,norm2)
117 1 pfleura2
           val=angle(vx1,vy1,vz1,norm1, &
118 1 pfleura2
                vx2,vy2,vz2,norm2)
119 1 pfleura2
120 1 pfleura2
           val_zmat(i,1)=norm1
121 1 pfleura2
           val_zmat(i,2)=val
122 1 pfleura2
           val_zmat(i,3)=0.0
123 1 pfleura2
124 1 pfleura2
           DO i=4,nb
125 1 pfleura2
              !        write(*,*) 'Debut procedure Xyz_Zmat4'
126 1 pfleura2
              n1=ind_zmat(i,1)
127 1 pfleura2
              n2=ind_zmat(i,2)
128 1 pfleura2
              n3=ind_zmat(i,3)
129 1 pfleura2
              n4=ind_zmat(i,4)
130 1 pfleura2
131 1 pfleura2
              CALL vecteur(n2,n1,x,y,z,vx1,vy1,vz1,norm1)
132 1 pfleura2
133 1 pfleura2
              !        write(*,*) 'Debut procedure Xyz_Zmat42'
134 1 pfleura2
              CALL vecteur(n2,n3,x,y,z,vx2,vy2,vz2,norm2)
135 1 pfleura2
              val=angle(vx1,vy1,vz1,norm1, &
136 1 pfleura2
                   vx2,vy2,vz2,norm2)
137 1 pfleura2
138 1 pfleura2
              !        write(*,*) 'Debut procedure Xyz_Zmat43'
139 1 pfleura2
              CALL vecteur(n3,n4,x,y,z,vx3,vy3,vz3,norm3)
140 2 pfleura2
              CALL produit_vect(vx1,vy1,vz1,vx2,vy2,vz2,vx4,vy4,vz4,norm4)
141 2 pfleura2
              CALL produit_vect(vx3,vy3,vz3,vx2,vy2,vz2, vx5,vy5,vz5,norm5)
142 1 pfleura2
              val_d=angle_d(vx4,vy4,vz4,norm4, &
143 1 pfleura2
                   vx5,vy5,vz5,norm5, &
144 1 pfleura2
                   vx2,vy2,vz2,norm2)
145 1 pfleura2
146 1 pfleura2
              !               write(*,11) n1,n2,norm1,n3,val,n4,val_d
147 2 pfleura2
!11            format (2(1x,i3),1x,f8.4,2(1x,i3,1x,f8.3))
148 1 pfleura2
149 1 pfleura2
              val_zmat(i,1)=norm1
150 1 pfleura2
              val_zmat(i,2)=val
151 1 pfleura2
              val_zmat(i,3)=val_d
152 1 pfleura2
153 1 pfleura2
           END DO
154 1 pfleura2
        END IF
155 1 pfleura2
     END IF
156 1 pfleura2
  ELSE
157 1 pfleura2
     RETURN
158 1 pfleura2
  END IF
159 1 pfleura2
  RETURN
160 1 pfleura2
END SUBROUTINE ConvXyzZmat