38
39
40
41 USE elbufdef_mod
42 use element_mod , only : nixc,nixtg
43
44
45
46#include "implicit_f.inc"
47
48
49
50#include "mvsiz_p.inc"
51
52
53
54 INTEGER JFT, JLT, NFT, NEL, IPT, NS1, IXC(NIXC,*),
55 . ITY, IXTG(NIXTG,*),IHBE ,ISTRAIN ,IVISC
57 TYPE (elbuf_struct_), TARGET :: elbuf_str
58
59
60
61 INTEGER I, J, N, NLAY, NPTR, NPTS, NPG, IR, IS, JJ(5), IDRAPE, IGTYP
63 . x1(nel), x2(nel), x3(nel), x4(nel),
64 . y1(nel), y2(nel), y3(nel), y4(nel),
65 . z1(nel), z2(nel), z3(nel), z4(nel),
66 . x21(nel), y21(nel), z21(nel),
67 . x31(nel), y31(nel), z31(nel),
68 . x32(nel), y32(nel), z32(nel),
69 .
70 . e1x(nel), e1y(nel), e1z(nel),
71 . e2x(nel), e2y(nel), e2z(nel),
72 . e3x(nel), e3y(nel), e3z(nel),
73 . e11(nel),e12(nel),e13(nel),
74 . e21(nel),e22(nel),e23(nel), dir(nel,2),
75 .
76 . v1,v2,v3,vr,vs,aa,bb,suma
78 . DIMENSION(:) , POINTER :: dir1
79
80 TYPE(L_BUFEL_) , POINTER :: LBUF
81
82
83 nptr = elbuf_str%NPTR
84 npts = elbuf_str%NPTS
85 nlay = elbuf_str%NLAY
86 npg = nptr*npts
87 idrape = elbuf_str%IDRAPE
88 igtyp = elbuf_str%IGTYP
89 IF(idrape > 0 .AND. (igtyp == 51 .OR. igtyp == 52))THEN
90 IF (nlay > 1) THEN
91 dir1 => elbuf_str%BUFLY(ipt)%LBUF_DIR(1)%DIRA
92 ELSE
93 dir1 => elbuf_str%BUFLY(1)%LBUF_DIR(1)%DIRA
94 ENDIF
95 ELSE
96 IF (nlay > 1) THEN
97 dir1 => elbuf_str%BUFLY(ipt)%DIRA
98 ELSE
99 dir1 => elbuf_str%BUFLY(1)%DIRA
100 ENDIF
101 ENDIF
102
103
104 DO i=1,5
105 jj(i) = nel*(i-1)
106 ENDDO
107
108 IF (ity == 3) THEN
109
110
111
112 DO i=jft,jlt
113 n=nft+i
114 x1(i)=x(1,ixc(2,n))
115 y1(i)=x(2,ixc(2,n))
116 z1(i)=x(3,ixc(2,n))
117 x2(i)=x(1,ixc(3,n))
118 y2(i)=x(2,ixc(3,n))
119 z2(i)=x(3,ixc(3,n))
120 x3(i)=x(1,ixc(4,n))
121 y3(i)=x(2,ixc(4,n))
122 z3(i)=x(3,ixc(4,n))
123 x4(i)=x(1,ixc(5,n))
124 y4(i)=x(2,ixc(5,n))
125 z4(i)=x(3,ixc(5,n))
126 ENDDO
127 DO i=jft,jlt
128 e1x(i)= x2(i)+x3(i)-x1(i)-x4(i)
129 e1y(i)= y2(i)+y3(i)-y1(i)-y4(i)
130 e1z(i)= z2(i)+z3(i)-z1(i)-z4(i)
131 e2x(i)= x3(i)+x4(i)-x1(i)-x2(i)
132 e2y(i)= y3(i)+y4(i)-y1(i)-y2(i)
133 e2z(i)= z3(i)+z4(i)-z1(i)-z2(i)
134 e3x(i)=e1y(i)*e2z(i)-e1z(i)*e2y(i)
135 e3y(i)=e1z(i)*e2x(i)-e1x(i)*e2z(i)
136 e3z(i)=e1x(i)*e2y(i)-e1y(i)*e2x(i)
137 ENDDO
138 DO i=jft,jlt
139 e11(i) = e1x(i)
140 e12(i) = e1y(i)
141 e13(i) = e1z(i)
142 e21(i) = e2x(i)
143 e22(i) = e2y(i)
144 e23(i) = e2z(i)
145 ENDDO
146
147 DO i=jft,jlt
148 suma=e2x(i)*e2x(i)+e2y(i)*e2y(i)+e2z(i)*e2z(i)
149 e1x(i) = e1x(i)*suma + e2y(i)*e3z(i)-e2z(i)*e3y(i)
150 e1y(i) = e1y(i)*suma + e2z(i)*e3x(i)-e2x(i)*e3z(i)
151 e1z(i) = e1z(i)*suma + e2x(i)*e3y(i)-e2y(i)*e3x(i)
152 ENDDO
153
154 DO i=jft,jlt
155 suma=e1x(i)*e1x(i)+e1y(i)*e1y(i)+e1z(i)*e1z(i)
156 suma=one/
max(sqrt(suma),em20)
157 e1x(i)=e1x(i)*suma
158 e1y(i)=e1y(i)*suma
159 e1z(i)=e1z(i)*suma
160 ENDDO
161 DO i=jft,jlt
162 suma=e3x(i)*e3x(i)+e3y(i)*e3y(i)+e3z(i)*e3z(i)
163 suma=one/
max(sqrt(suma),em20)
164 e3x(i)=e3x(i)*suma
165 e3y(i)=e3y(i)*suma
166 e3z(i)=e3z(i)*suma
167 e2x(i)=e3y(i)*e1z(i)-e3z(i)*e1y(i)
168 e2y(i)=e3z(i)*e1x(i)-e3x(i)*e1z(i)
169 e2z(i)=e3x(i)*e1y(i)-e3y(i)*e1x(i)
170 ENDDO
171 DO i=jft,jlt
172 suma=e2x(i)*e2x(i)+e2y(i)*e2y(i)+e2z(i)*e2z(i)
173 suma=one/
max(sqrt(suma),em20)
174 e2x(i)=e2x(i)*suma
175 e2y(i)=e2y(i)*suma
176 e2z(i)=e2z(i)*suma
177 ENDDO
178 ELSE
179
180
181
182 DO i=jft,jlt
183 n=nft+i
184 x1(i)=x(1,ixtg(2,n))
185 y1(i)=x(2,ixtg(2,n))
186 z1(i)=x(3,ixtg(2,n))
187 x2(i)=x(1,ixtg(3,n))
188 y2(i)=x(2,ixtg(3,n))
189 z2(i)=x(3,ixtg(3,n))
190 x3(i)=x(1,ixtg(4,n))
191 y3(i)=x(2,ixtg(4,n))
192 z3(i)=x(3,ixtg(4,n))
193 ENDDO
194
195 DO i=jft,jlt
196 x21(i)=x2(i)-x1(i)
197 y21(i)=y2(i)-y1(i)
198 z21(i)=z2(i)-z1(i)
199 x31(i)=x3(i)-x1(i)
200 y31(i)=y3(i)-y1(i)
201 z31(i)=z3(i)-z1(i)
202 x32(i)=x3(i)-x2(i)
203 y32(i)=y3(i)-y2(i)
204 z32(i)=z3(i)-z2(i)
205 ENDDO
206
207 DO i=jft,jlt
208 e11(i) = x21(i)
209 e12(i) = y21(i)
210 e13(i) = z21(i)
211 e21(i) = x31(i)
212 e22(i) = y31(i)
213 e23(i) = z31(i)
214 ENDDO
215
216 DO i=jft,jlt
217 e1x(i)= x21(i)
218 e1y(i)= y21(i)
219 e1z(i)= z21(i)
220 suma = sqrt(e1x(i)*e1x(i)+e1y(i)*e1y(i)+e1z(i)*e1z(i))
221 suma=one/
max(suma,em20)
222 e1x(i)=e1x(i)*suma
223 e1y(i)=e1y(i)*suma
224 e1z(i)=e1z(i)*suma
225 ENDDO
226
227 DO i=jft,jlt
228 e3x(i)=y31(i)*z32(i)-z31(i)*y32(i)
229 e3y(i)=z31(i)*x32(i)-x31(i)*z32(i)
230 e3z(i)=x31(i)*y32(i)-y31(i)*x32(i)
231 suma = sqrt(e3x(i)*e3x(i)+e3y(i)*e3y(i)+e3z(i)*e3z(i))
232 suma = one/
max(suma,em20)
233 e3x(i)=e3x(i)*suma
234 e3y(i)=e3y(i)*suma
235 e3z(i)=e3z(i)*suma
236 ENDDO
237
238 DO i=jft,jlt
239 e2x(i)=e3y(i)*e1z(i)-e3z(i)*e1y(i)
240 e2y(i)=e3z(i)*e1x(i)-e3x(i)*e1z(i)
241 e2z(i)=e3x(i)*e1y(i)-e3y(i)*e1x(i)
242 suma = sqrt(e2x(i)*e2x(i)+e2y(i)*e2y(i)+e2z(i)*e2z(i))
243 suma = one/
max(suma,em20)
244 e2x(i)=e2x(i)*suma
245 e2y(i)=e2y(i)*suma
246 e2z(i)=e2z(i)*suma
247 ENDDO
248 ENDIF
249
250 DO i=jft,jlt
251 aa = dir1(i)
252 bb = dir1(i + nel)
253 v1 = aa*e11(i) + bb*e21(i)
254 v2 = aa*e12(i) + bb*e22(i)
255 v3 = aa*e13(i) + bb*e23(i)
256 vr=v1*e1x(i)+v2*e1y(i)+v3*e1z(i)
257 vs=v1*e2x(i)+v2*e2y(i)+v3*e2z(i)
258 suma=sqrt(vr*vr + vs*vs)
259 dir(i,1) = vr/suma
260 dir(i,2) = vs/suma
261 ENDDO
262
263 IF (ihbe == 11) THEN
264 DO i=jft,jlt
265 DO j = 1,5
266 sig(i,j) = zero
267 ENDDO
268 ENDDO
269 DO i=jft,jlt
270 DO ir=1,nptr
271 DO is=1,npts
272 IF (nlay > 1) THEN
273 lbuf => elbuf_str%BUFLY(ipt)%LBUF(ir,is,1)
274 ELSE
275 lbuf => elbuf_str%BUFLY(1)%LBUF(ir,is,ipt)
276 ENDIF
277 DO j = 1,5
278 sig(i,j) = sig(i,j) + lbuf%SIG(jj(j) + i)/npg
279 ENDDO
280 ENDDO
281 ENDDO
282 ENDDO
283 IF (ivisc > 0 ) THEN
284 DO i=jft,jlt
285 DO ir=1,nptr
286 DO is=1,npts
287 IF (nlay > 1) THEN
288 lbuf => elbuf_str%BUFLY(ipt)%LBUF(ir,is,1)
289 ELSE
290 lbuf => elbuf_str%BUFLY(1)%LBUF(ir,is,ipt)
291 ENDIF
292 DO j = 1,5
293 sig(i,j) = sig(i,j) + lbuf%VISC(jj(j) + i)/npg
294 ENDDO
295 ENDDO
296 ENDDO
297 ENDDO
298 ENDIF
299 ELSE
300 IF (nlay > 1) THEN
301 lbuf => elbuf_str%BUFLY(ipt)%LBUF(1,1,1)
302 ELSE
303 lbuf => elbuf_str%BUFLY(1)%LBUF(1,1,ipt)
304 ENDIF
305 DO i=jft,jlt
306 DO j = 1,5
307 sig(i,j) = lbuf%SIG(jj(j) + i)
308 ENDDO
309 ENDDO
310 IF (ivisc > 0) THEN
311 DO i=jft,jlt
312 DO j = 1,5
313 sig(i,j) = sig(i,j) + lbuf%VISC(jj(j) + i)
314 ENDDO
315 ENDDO
316 ENDIF
317 ENDIF
318
319 CALL urotov(jft,jlt,sig,dir,nel)
320!
321
322
323
324
325 RETURN
subroutine urotov(jft, jlt, sig, dir, nel)