43
44
45
46 USE elbufdef_mod
49
50
51
52#include "implicit_f.inc"
53
54
55
56#include "mvsiz_p.inc"
57
58#include "com01_c.inc"
59#include "com04_c.inc"
60#include "param_c.inc"
61
62
63
64 INTEGER IPARG(NPARG,*),ITENS,INVERT(*),
65 . EL2FA(*),IXQ(NIXQ,*), IGEO(NPROPGI,*),
66 . NELCUT,IADP(*),NBPART,IADG(NSPMD,*),
67 . IXTG(NIXTG,*),IPM(NPROPMI,*),ID_ELEM(*),
68 . INFO1,INFO2,IS_WRITTEN_QUAD(*),IPARTQ(*),IPARTTG(*),H3D_PART(*),
69 . LAYER_INPUT ,IPT_INPUT,GAUSS_INPUT,PLY_INPUT,IUVAR_INPUT,II,
70 . IR_INPUT,IS_INPUT,IT_INPUT
71
73 . tens(3,*),epsdot(6,*),x(3,*),quad_tensor(6,*)
74 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
75 TYPE (STACK_PLY) :: STACK
76 CHARACTER(LEN=NCHARLINE100) :: KEYWORD
77
78
79
80
82 . a1,a2,a3,thk,y1,y2,y3,y4,z1,z2,z3,z4,
83 . sy,sz,ty,tz,suma,r11,r12,r13,r21,r22,
84 . r23,r31,r32,r33,s1,s2,s4,t1,t2,t3,t4,ct,cs,
85 . g22,g23,g32,g33,t22,t23,t32,t33
87 . sige(mvsiz,5)
89 . evar(6,mvsiz), gama(6,mvsiz)
90 REAL R4(18)
91 INTEGER I,NG,NEL,NFT,ITY,LFT,NPT,MPT,IPT,
92 . N,J,LLT,MLW,ISTRAIN,IL,IR,IS,IT,NPTR,NPTS,NLAY,
93 . IPID,I1,I2,NS1,NS2,ISTRE,
94 . NN1,NN2,NN3,NN4,NN5,NN6,NN7,NN8,NN9,NN10,NNI,N0,
95 . IHBE,IREP,BUF,NPG,K,ISROT,NUVARV,IVISC,
96 . IPMAT,IGTYP,MATLY,ISUBSTACK,IIGEO,IADI,IPMAT_IPLY,
97 . NPT_ALL,NPTT,ILAY,IUS,ID_PLY,IPANG,IPPOS,IPTHK,OFFSET,ISELECT,
98 . IPLY,IUVAR,IAD,JALE,JTURB,JCVT,NC1,NC2,NC3,NC4,ISORTH
99 INTEGER PID(MVSIZ),MAT(MVSIZ),IOK_PART(MVSIZ),JJ(6),IS_WRITTEN_TENSOR(MVSIZ)
100
101 TYPE(BUF_LAY_) ,POINTER :: BUFLY
102 TYPE(G_BUFEL_) ,POINTER :: GBUF
103 TYPE(L_BUFEL_) ,POINTER :: LBUF
104
106 . DIMENSION(:), POINTER :: dir_a
108 . DIMENSION(:), POINTER :: uvar
109
110 ilay = layer_input
111 iuvar = iuvar_input
112 ir = ir_input
113 is = is_input
114 it = it_input
115
116 DO i=1,numelq
117 is_written_quad(i) = 0
118 ENDDO
119
120 nn3 = 0
121
122 DO ng=1,ngroup
123
124 mlw = iparg(1,ng)
125 nel = iparg(2,ng)
126 nft = iparg(3,ng)
127 npt = iparg(6,ng)
128 ity = iparg(5,ng)
129 igtyp = iparg(38,ng)
130 isrot = iparg(41,ng)
131 istrain = iparg(44,ng)
132 isubstack = iparg(71,ng)
133 isorth = iparg(42,ng)
134 jcvt = iparg(37,ng)
135 lft=1
136 llt=nel
137 iok_part(1:nel) = 0
138
139 nptr = elbuf_tab(ng)%NPTR
140 npts = elbuf_tab(ng)%NPTS
141 nptt = elbuf_tab(ng)%NPTT
142
143 IF (mlw /= 13) THEN
144 nft =iparg(3,ng)
145 iad =iparg(4,ng)
146 isubstack = iparg(71,ng)
147 ivisc = iparg(61,ng)
148 iok_part(1:nel) = 0
149
150 DO i=1,6
151 jj(i) = nel*(i-1)
152 ENDDO
153
154 evar(1:6,1:nel) = zero
155 is_written_tensor(1:nel) = 0
156
157
158
159 IF(ity == 2)THEN
160
161 gbuf => elbuf_tab(ng)%GBUF
162 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
163 uvar => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR
164 jale=(iparg(7,ng)+iparg(11,ng))
165 jturb=iparg(12,ng)*jale
166
167 DO i=1,nel
168 id_elem(nft+i) = ixq(nixq,nft+i)
169 IF( h3d_part(ipartq(nft+i)) == 1) iok_part(i) = 1
170 ENDDO
171
172 DO i=1,nel
173 IF (isorth == 0) THEN
174 gama(1,i)=one
175 gama(2,i)=zero
176 gama(3,i)=zero
177 gama(4,i)=zero
178 gama(5,i)=one
179 gama(6,i)=zero
180 ELSE
181 gama(1,i)=gbuf%GAMA(jj(1) + i)
182 gama(2,i)=gbuf%GAMA(jj(2) + i)
183 gama(3,i)=gbuf%GAMA(jj(3) + i)
184 gama(4,i)=gbuf%GAMA(jj(4) + i)
185 gama(5,i)=gbuf%GAMA(jj(5) + i)
186 gama(6,i)=gbuf%GAMA(jj(6) + i)
187 ENDIF
188 ENDDO
189
190 IF (keyword == 'TENS/STRESS') THEN
191
192
193
194
195
196
197
198 IF( ilay == -1 .AND. ir == -1 .AND. is == -1 .AND. it == -1 )THEN
199 DO i=1,nel
200 ii = 6*(i-1)
201 evar(1,i) = gbuf%SIG(jj(1) + i)
202 evar(2,i) = gbuf%SIG(jj(2) + i)
203 evar(4,i) = gbuf%SIG(jj(4) + i)
204 is_written_tensor(i) = 1
205 ENDDO
206
207 IF(ivisc > 0) THEN
208 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
209 DO i=1,nel
210 ii = 6*(i-1)
211 evar(1,i) =evar(1,i)+ lbuf%VISC(jj(1) + i)
212 evar(2,i) =evar(2,i)+ lbuf%VISC(jj(2) + i)
213 evar(4,i) =evar(4,i)+ lbuf%VISC(jj(4) + i)
214 ENDDO
215 ENDIF
216
217 IF( nfilsol /= 0 .AND. gbuf%G_FILL /= 0 ) THEN
218 DO i=1,nel
219 evar(1,i) = evar(1,i) * gbuf%FILL(i)
220 evar(2,i) = evar(2,i) * gbuf%FILL(i)
221 evar(4,i) = evar(4,i) * gbuf%FILL(i)
222 ENDDO
223 ENDIF
224
225 IF (jcvt == 0 .OR. isorth /= 0) THEN
226
228 1 x, ixq(1,nft+1),jcvt, evar,
229 2 gbuf%GAMA, nel, isorth)
230 ENDIF
231
232 ELSEIF ( ilay == -1 .AND. iabs(it) == 1 .AND. ir >= 0 .AND.
233 . ir <= nptr .AND. is >= 0 .AND. is <= npts) THEN
234
235 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(ir,is,1)
236 DO i=1,nel
237 ii = 6*(i-1)
238 evar(1,i) = lbuf%SIG(jj(1) + i)
239 evar(2,i) = lbuf%SIG(jj(2) + i)
240 evar(4,i) = lbuf%SIG(jj(4) + i)
241 is_written_tensor(i) = 1
242 ENDDO
243
244 IF(ivisc > 0) THEN
245 DO i=1,nel
246 ii = 6*(i-1)
247 evar(1,i) =evar(1,i)+ lbuf%VISC(jj(1) + i)
248 evar(2,i) =evar(2,i)+ lbuf%VISC(jj(2) + i)
249 evar(4,i) =evar(4,i)+ lbuf%VISC(jj(4) + i)
250 ENDDO
251 ENDIF
252
253 IF( nfilsol /= 0 .AND. gbuf%G_FILL /= 0 ) THEN
254 DO i=1,nel
255 evar(1,i) = evar(1,i) * gbuf%FILL(i)
256 evar(2,i) = evar(2,i) * gbuf%FILL(i)
257 evar(4,i) = evar(4,i) * gbuf%FILL(i)
258 ENDDO
259 ENDIF
260
261 IF (jcvt == 0 .OR. isorth /= 0) THEN
262
264 1 x, ixq(1,nft+1),jcvt, evar,
265 2 gbuf%GAMA, nel, isorth)
266 ENDIF
267
268 ENDIF
269
270
271 ELSEIF (keyword == 'TENS/STRAIN') THEN
272
273 IF( ilay == -1 .AND. ir == -1 .AND. is == -1 .AND. it == -1 )THEN
274
275 DO i=1,nel
276 n = i + nft
277 DO is=1,npts
278 DO it=1,nptt
279 DO ir=1,nptr
280 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(ir,is,it)
281 evar(1,i) = evar(1,i) + lbuf%STRA(jj(1) + i)/npt
282 evar(2,i) = evar(2,i) + lbuf%STRA(jj(2) + i)/npt
283 evar(4,i) = evar(4,i) + lbuf%STRA(jj(4) + i)*half/npt
284 is_written_tensor(i) = 1
285 ENDDO
286 ENDDO
287 ENDDO
288 ENDDO
289
290 IF (jcvt == 0 .OR. isorth /= 0) THEN
291
293 1 x, ixq(1,nft+1),jcvt, evar,
294 2 gbuf%GAMA, nel, isorth)
295 ENDIF
296
297 ELSEIF ( ilay == -1 .AND. iabs(it) == 1 .AND. ir >= 0 .AND.
298 . ir <= nptr .AND. is >= 0 .AND. is <= npts) THEN
299
300 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(ir,is,1)
301 DO i=1,nel
302 n = i + nft
303 evar(1,i) = evar(1,i) + lbuf%STRA(jj(1) + i)
304 evar(2,i) = evar(2,i) + lbuf%STRA(jj(2) + i)
305 evar(4,i) = evar(4,i) + lbuf%STRA(jj(4) + i)
306 is_written_tensor(i) = 1
307 ENDDO
308
309 IF (jcvt == 0 .OR. isorth /= 0) THEN
310
312 1 x, ixq(1,nft+1),jcvt, evar,
313 2 gbuf%GAMA, nel, isorth)
314 ENDIF
315
316 ENDIF
317
318
319 ELSEIF (keyword == 'TENS/DAMA') THEN
320
321 IF( ilay == -1 .AND. ir == -1 .AND. is == -1 .AND. it == -1 )THEN
322
323 DO i=1,nel
324 n = i + nft
325 DO is=1,npts
326 DO it=1,nptt
327 DO ir=1,nptr
328 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(ir,is,it)
329 IF(elbuf_tab(ng)%BUFLY(1)%L_DGLO > 0) THEN
330 evar(1,i) = evar(1,i)+lbuf%DGLO(jj(1) + i)/npt
331 evar(2,i) = evar(2,i)+lbuf%DGLO(jj(2) + i)/npt
332 evar(4,i) = evar(4,i)+lbuf%DGLO(jj(4) + i)/npt
333 is_written_tensor(i) = 1
334 ENDIF
335 ENDDO
336 ENDDO
337 ENDDO
338 ENDDO
339
340 ELSEIF ( ilay == -1 .AND. iabs(it) == 1 .AND. ir >= 0 .AND.
341 . ir <= nptr .AND. is >= 0 .AND. is <= npts) THEN
342
343 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(ir,is,1)
344 IF (elbuf_tab(ng)%BUFLY(1)%L_DGLO > 0) THEN
345 DO i=1,nel
346 n = i + nft
347 evar(1,i) = evar(1,i)+lbuf%DGLO(jj(1) + i)
348 evar(2,i) = evar(2,i)+lbuf%DGLO(jj(2) + i)
349 evar(4,i) = evar(4,i)+lbuf%DGLO(jj(4) + i)
350 is_written_tensor(i) = 1
351 ENDDO
352 ENDIF
353
354 ENDIF
355
356 ELSEIF (keyword == 'TENS/EPSP') THEN
357
358 IF( ilay == -1 .AND. ir == -1 .AND. is == -1 .AND. it == -1 )THEN
359
360 DO i=1,nel
361 n = i + nft
362 DO is=1,npts
363 DO it=1,nptt
364 DO ir=1,nptr
365 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(ir,is,it)
366 evar(1,i) = evar(1,i) + lbuf%PLA(jj(1) + i + nel)/npt
367 evar(2,i) = evar(2,i) + lbuf%PLA(jj(2) + i + nel)/npt
368 evar(4,i) = evar(4,i) + lbuf%PLA(jj(4) + i + nel)*half/npt
369 is_written_tensor(i) = 1
370 ENDDO
371 ENDDO
372 ENDDO
373 ENDDO
374
375 IF (jcvt == 0 .OR. isorth /= 0) THEN
376
378 1 x, ixq(1,nft+1),jcvt, evar,
379 2 gbuf%GAMA, nel, isorth)
380 ENDIF
381
382 ELSEIF ( ilay == -1 .AND. iabs(it) == 1 .AND. ir >= 0 .AND.
383 . ir <= nptr .AND. is >= 0 .AND. is <= npts) THEN
384
385 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(ir,is,1)
386 DO i=1,nel
387 n = i + nft
388 evar(1,i) = evar(1,i) + lbuf%PLA(jj(1) + i + nel)
389 evar(2,i) = evar(2,i) + lbuf%PLA(jj(2) + i + nel)
390 evar(4,i) = evar(4,i) + lbuf%PLA(jj(4) + i + nel)
391 is_written_tensor(i) = 1
392 ENDDO
393
394 IF (jcvt == 0 .OR. isorth /= 0) THEN
395
397 1 x, ixq(1,nft+1),jcvt, evar,
398 2 gbuf%GAMA, nel, isorth)
399 ENDIF
400
401 ENDIF
402 ENDIF
403
405 . evar,is_written_tensor)
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438 ENDIF
439 ENDIF
440 ENDDO
441
442
443 RETURN
subroutine h3d_write_tensor(iok_part, is_written, tensor, nel, offset, nft, value, is_written_tensor)
integer, parameter ncharline100
subroutine qrota_group(x, ixq, kcvt, tens, gama, nel, isorth)