40
41
42
43 USE elbufdef_mod
44
45
46
47#include "implicit_f.inc"
48
49
50
51#include "mvsiz_p.inc"
52
53
54
55 INTEGER, INTENT(IN) :: JFT,JLT,NLAY,IREP,IGTYP,NEL
57 . x1(*), x2(*), x3(*), x4(*), y1(*), y2(*), y3(*), y4(*),
58 . z1(*), z2(*), z3(*), z4(*), e1x(*), e1y(*), e1z(*), e2x(*),
59 . e2y(*), e2z(*), e3x(*), e3y(*), e3z(*),dir_a(*),dir_b(*)
60 TYPE (ELBUF_STRUCT_) :: ELBUF_STR
61
62
63
64#include "com01_c.inc"
65
66
67
68 INTEGER I
69
71 . suma,s1,s2,x21,x32,x34,x41,y21,y32,y34,y41,z21,z32,z34,z41
73 . e11,e12,e13,e21,e22,e23,rx,ry,rz,sx,sy,sz
74
75 DO i=jft,jlt
76 x21 = x2(i)-x1(i)
77 x32 = x3(i)-x2(i)
78 x34 = x3(i)-x4(i)
79 x41 = x4(i)-x1(i)
80
81 y21 = y2(i)-y1(i)
82 y32 = y3(i)-y2(i)
83 y34 = y3(i)-y4(i)
84 y41 = y4(i)-y1(i)
85
86 z21 = z2(i)-z1(i)
87 z32 = z3(i)-z2(i)
88 z34 = z3(i)-z4(i)
89 z41 = z4(i)-z1(i)
90
91 e1x(i) = (x21+x34 )
92 e1y(i) = (y21+y34 )
93 e1z(i) = (z21+z34 )
94
95 e2x(i) = (x32+x41 )
96 e2y(i) = (y32+y41 )
97 e2z(i) = (z32+z41 )
98
99 e3x(i) = e1y(i)*e2z(i)-e1z(i)*e2y(i)
100 e3y(i) = e1z(i)*e2x(i)-e1x(i)*e2z(i)
101 e3z(i) = e1x(i)*e2y(i)-e1y(i)*e2x(i)
102 ENDDO
103 IF (irep > 0) THEN
104 DO i=jft,jlt
105 rx(i) = e1x(i)
106 ry(i) = e1y(i)
107 rz(i) = e1z(i)
108 sx(i) = e2x(i)
109 sy(i) = e2y(i)
110 sz(i) = e2z(i)
111 ENDDO
112 ENDIF
113
114
115
116 IF (ishfram == 0 .OR. igtyp == 16 ) THEN
117
118 DO i=jft,jlt
119 suma = e3x(i)*e3x(i)+e3y(i)*e3y(i)+e3z(i)*e3z(i)
120 suma = one /
max(sqrt(suma),em20)
121 e3x(i) = e3x(i) * suma
122 e3y(i) = e3y(i) * suma
123 e3z(i) = e3z(i) * suma
124
125 s1 = e1x(i)*e1x(i)+e1y(i)*e1y(i)+e1z(i)*e1z(i)
126 s2 = e2x(i)*e2x(i)+e2y(i)*e2y(i)+e2z(i)*e2z(i)
127 suma = sqrt(s1/s2)
128 e1x(i) = e1x(i) + (e2y(i)*e3z(i)-e2z(i)*e3y(i))*suma
129 e1y(i) = e1y(i) + (e2z(i)*e3x(i)-e2x(i)*e3z(i))*suma
130 e1z(i) = e1z(i) + (e2x(i)*e3y(i)-e2y(i)*e3x(i))*suma
131
132 suma = e1x(i)*e1x(i)+e1y(i)*e1y(i)+e1z(i)*e1z(i)
133 suma = one /
max(sqrt(suma),em20)
134 e1x(i) = e1x(i) * suma
135 e1y(i) = e1y(i) * suma
136 e1z(i) = e1z(i) * suma
137
138 e2x(i) = e3y(i) * e1z(i) - e3z(i) * e1y(i)
139 e2y(i) = e3z(i) * e1x(i) - e3x(i) * e1z(i)
140 e2z(i) = e3x(i) * e1y(i) - e3y(i) * e1x(i)
141 ENDDO
142 ELSEIF (ishfram == 2) THEN
143
144 DO i=jft,jlt
145 suma = e2x(i)*e2x(i)+e2y(i)*e2y(i)+e2z(i)*e2z(i)
146 e1x(i) = e1x(i)*suma + e2y(i)*e3z(i)-e2z(i)*e3y(i)
147 e1y(i) = e1y(i)*suma + e2z(i)*e3x(i)-e2x(i
148 e1z(i) = e1z(i)*suma + e2x(i)*e3y(i)-e2y(i)*e3x(i)
149 suma = e1x(i)*e1x(i)+e1y(i)*e1y(i)+e1z(i)*e1z(i)
150 suma = one/
max(sqrt(suma),em20)
151 e1x(i) = e1x(i)*suma
152 e1y(i) = e1y(i)*suma
153 e1z(i) = e1z(i)*suma
154
155 suma = e3x(i)*e3x(i)+e3y(i)*e3y(i)+e3z(i)*e3z(i)
156 suma = one /
max(sqrt(suma),em20)
157 e3x(i) = e3x(i) * suma
158 e3y(i) = e3y(i) * suma
159 e3z(i) = e3z(i) * suma
160
161 e2x(i) = e3y(i)*e1z(i)-e3z(i)*e1y(i)
162 e2y(i) = e3z(i)*e1x(i)-e3x(i)*e1z(i)
163 e2z(i) = e3x(i)*e1y(i)-e3y(i)*e1x(i)
164 suma = e2x(i)*e2x(i)+e2y(i)*e2y(i)+e2z(i)*e2z(i)
165 suma = one/
max(sqrt(suma),em20)
166 e2x(i) = e2x(i)*suma
167 e2y(i) = e2y(i)*suma
168 e2z(i) = e2z(i)*suma
169 ENDDO
170 ENDIF
171
172
173
174 CALL cortdir3(elbuf_str,dir_a ,dir_b ,jft ,jlt ,
175 . nlay ,irep ,rx ,ry ,rz ,
176 . sx ,sy ,sz ,e1x ,e1y ,
177 . e1z ,e2x ,e2y ,e2z ,nel )
178
179 RETURN
subroutine cortdir3(elbuf_str, dir_a, dir_b, jft, jlt, nlay, irep, rx, ry, rz, sx, sy, sz, e1x, e1y, e1z, e2x, e2y, e2z, nel)