43
44
45
47 USE elbufdef_mod
49 use element_mod , only : nixs
50
51
52
53#include "implicit_f.inc"
54
55
56
57#include "vect01_c.inc"
58#include "mvsiz_p.inc"
59#include "com01_c.inc"
60#include "com04_c.inc"
61#include "param_c.inc"
62
63
64
65
67 . skin_tensor(3,*),pm(npropm,*), x(3,*)
68 INTEGER IPARG(NPARG,*),
69 . IXS(NIXS,*),IPM(NPROPMI,*),IPARTS(*),
70 . IXS10(6,*) ,IXS16(8,*) ,IXS20(12,*) ,
71 . IGEO(NPROPGI,*),IS_WRITTEN_SKIN(*),
72 . H3D_PART(*),INFO1,TAG_SKINS6(*),IAD_ELEM(2,*),FR_ELEM(*),WEIGHT(*)
73 TYPE (), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
74 CHARACTER(LEN=NCHARLINE100) :: KEYWORD
75
76
77
79 . evar(3,mvsiz),dir(mvsiz,2),dirb(mvsiz
81 . f_exp,f_str,f_gauss(9)
82 INTEGER I, NEL, NPTR, NPTS, NPTT, NLAY, ILAY,
83 . IR,IS,IT,IL,MLW, NUVAR,,LENF,PTF,PTM,PTS,NFAIL,
84 . N,NN,K,K1,K2,JTURB,MT,IMID,IALEL,IPID,ISH3N,NNI,
85 . NN1,NN2,NN3,NN4,NN5,NN6,NN9,NF,BUF,NVARF,
86 . IHBE,NPTM,NPG, MPT,IPT,IADD,IADR,IPMAT,IFAILT,
87 . IIGEO,IADI,ISUBSTACK,ITHK,
88 . ID_PLY,NB_PLYOFF,NG,NSKIN,ICSTR
89 INTEGER ISOLNOD, IVISC,
90 . ISTRAIN,KCVT,IOR_TSH,MT1,ICSIG,PTI,IOK,IPRT,IOK_PART(MVSIZ),
91 . JJ(6),IS_WRITTEN_TENSOR(MVSIZ),MLWI,MID,PID
92
93 TYPE(G_BUFEL_) ,POINTER :: GBUF
94 TYPE(L_BUFEL_) ,POINTER :: LBUF
95
96
97 DATA f_gauss /
98 9 1.000000000000000,1.732050807568877,1.290994448735806,
99 9 1.161256338324528,1.103533701926633,1.072421119155361,
100 9 1.053620970803647,1.041352247171806,1.032886870574820/
101
102 nskin = 0
103 iok_part(1:mvsiz)=0
104 DO ng=1,ngroup
105 gbuf => elbuf_tab(ng)%GBUF
106 icstr = iparg(17,ng)
107 istrain = iparg(44,ng
108 isolnod = iparg(28,ng)
109 ivisc = iparg(61,ng)
111 2 mlw ,nel ,nft ,iad ,ity ,
112 3 npt ,jale ,ismstr ,jeul ,jtur ,
113 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
114 5 nvaux ,jpor ,kcvt ,jclose ,jplasol ,
115 6 irep ,iint ,igtyp ,israt ,isrot ,
116 7 icsen ,isorth ,isorthg ,ifailure,jsms )
117
118 DO i=1,6
119 jj(i) = nel*(i-1)
120 ENDDO
121
122 IF(mlw == 13 .OR. mlw == 0) cycle
123
124
125
126
127
128
129
130
131
132
133 IF (ity == 1.AND.(igtyp==20 .OR. igtyp==21 .OR. igtyp==22)) THEN
134 ior_tsh = 0
135 IF (igtyp == 21) THEN
136 ior_tsh = 1
137 ELSEIF (igtyp == 22) THEN
138 ior_tsh = 2
139 END IF
140 IF (kcvt==1.AND.ior_tsh/=0) kcvt=2
141 iok_part(1:nel) = 0
142 DO i=1,nel
143 n = i + nft
144 IF( h3d_part(iparts(n)) == 1) iok_part(i) = 1
145 is_written_tensor(i) = 0
146 evar(1:3,i) = zero
147 ENDDO
148 nlay = elbuf_tab(ng)%NLAY
149 nptr = elbuf_tab(ng)%NPTR
150 npts = elbuf_tab(ng)%NPTS
151 nptt = elbuf_tab(ng)%NPTT
152 IF (igtyp == 22 .AND. nlay>9) THEN
153 f_exp = one
154 ELSE
155 f_exp = f_gauss(nlay)
156 END IF
157 IF (jhbe==14.OR.jhbe==16) f_exp = f_exp/(nptr*npts)
158
159 IF (keyword == 'TENS/STRESS/OUTER') THEN
160 is_written_tensor(1:nel) = 1
161
162 ilay=1
163 it = 1
164
165 IF (jhbe==15) THEN
166 ir = 1
167 is = 1
168 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(ir,is,it)
169 DO i=1,nel
170 evar(1:2,i) = lbuf%SIG(jj(1:2) + i)
171 evar(3,i) = lbuf%SIG(jj(4) + i)
172 ENDDO
173 IF(ivisc > 0) THEN
174 DO i=1,nel
175 evar(1:2,i) = evar(1:2,i) + lbuf%VISC(jj(1:2) + i)
176 evar(3,i) = evar(3,i) + lbuf%VISC(jj(4) + i)
177 ENDDO
178 ENDIF
179 ELSE
180 DO ir=1,nptr
181 DO is=1,npts
182 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(ir,is,it)
183 DO i=1,nel
184 evar(1:2,i) = evar(1:2,i) + lbuf%SIG(jj(1:2) + i)
185 evar(3,i) = evar(3,i) + lbuf%SIG(jj(4) + i)
186 ENDDO
187 IF(ivisc > 0) THEN
188 DO i=1,nel
189 evar(1:2,i) = evar(1:2,i) + lbuf%VISC(jj(1:2) + i)
190 evar(3,i) = evar(3,i) + lbuf%VISC(jj(4) + i)
191 ENDDO
192 ENDIF
193 ENDDO
194 ENDDO
195
196 END IF
197 evar(1:3,1:nel) = f_exp*evar(1:3,1:nel)
198
199 IF (kcvt==2) THEN
200 IF(ior_tsh==1)THEN
201 DO i=1,nel
202 dir(i,1:2)= gbuf%GAMA(jj(1:2) + i)
203 ENDDO
204 ELSEIF(ior_tsh==2)THEN
205 IF(jhbe==14)THEN
206 ir = 1
207 is = 1
208 END IF
209 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(ir,is,it)
210 DO i=1,nel
211 dir(i,1:2)= lbuf%GAMA(jj(1:2) + i)
212 ENDDO
213 END IF
214 CALL tsh_dir2(x,ixs,dir,dirb,icstr,nel)
216 END IF
217 DO i=1,nel
218 n = i + nft
219 skin_tensor(1:3,nskin+i) = evar(1:3,i)
220 IF(iok_part(i) == 1 ) is_written_skin(nskin+i) = is_written_tensor(i)
221 END DO
222 nskin = nskin + nel
223 evar(1:3,1:nel) = zero
224
225 ilay=nlay
226 it = 1
227 IF (jhbe==15) THEN
228 ir = 1
229 is = 1
230 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(ir,is,it)
231 DO i=1,nel
232 evar(1:2,i) = lbuf%SIG(jj(1:2) + i)
233 evar(3,i) = lbuf%SIG(jj(4) + i)
234 ENDDO
235 IF(ivisc > 0) THEN
236 DO i=1,nel
237 evar(1:2,i) = evar(1:2,i) + lbuf%VISC(jj(1:2) + i)
238 evar(3,i) = evar(3,i) + lbuf%VISC(jj(4) + i)
239 ENDDO
240 ENDIF
241 ELSE
242 DO ir=1,nptr
243 DO is=1,npts
244 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(ir,is,it)
245 DO i=1,nel
246 evar(1:2,i) = evar(1:2,i) + lbuf%SIG(jj(1:2) + i)
247 evar(3,i) = evar(3,i) + lbuf%SIG(jj(4) + i)
248 ENDDO
249 IF(ivisc > 0) THEN
250 DO i=1,nel
251 evar(1:2,i) = evar(1:2,i) + lbuf%VISC(jj(1:2) + i)
252 evar(3,i) = evar(3,i) + lbuf%VISC(jj(4) + i)
253 ENDDO
254 ENDIF
255 ENDDO
256 ENDDO
257 END IF
258 evar(1:3,1:nel) = f_exp*evar(1:3,1:nel)
259
260 IF (kcvt==2) THEN
261 IF(ior_tsh==1)THEN
262 DO i=1,nel
263 dir(i,1:2)= gbuf%GAMA(jj(1:2) + i)
264 ENDDO
265 ELSEIF(ior_tsh==2)THEN
266 IF(jhbe==14)THEN
267 ir = 1
268 is = 1
269 END IF
270 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(ir,is,it)
271 DO i=1,nel
272 dir(i,1:2)= lbuf%GAMA(jj(1:2) + i)
273 ENDDO
274 END IF
275 CALL tsh_dir2(x,ixs,dir,dirb,icstr,nel)
277 END IF
278 DO i=1,nel
279 n = i + nft
280 skin_tensor(1:3,nskin+i) = evar(1:3,i)
281 IF(iok_part(i) == 1 ) is_written_skin(nskin+i) = is_written_tensor(i)
282 END DO
283 nskin = nskin + nel
284
285 ELSEIF (keyword == 'TENS/STRAIN/OUTER') THEN
286
287 is_written_tensor(1:nel) = 1
288
289 ilay=1
290 it = 1
291 mlwi = mlw
292 IF (igtyp == 22) THEN
293 pid = ixs(nixs-1,1 + nft)
294 mid = igeo(100+ilay,pid)
295 mlwi=nint(pm(19,mid))
296 END IF
297 IF (jhbe==15) THEN
298 ir = 1
299 is = 1
300 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(ir,is,it)
301 IF (mlwi == 12 .OR. mlwi == 14) THEN
302 DO i=1,nel
303 evar(1:2,i) = lbuf%EPE(jj(1:2) + i)
304 evar(3,i) = half*lbuf%EPE(jj(4) + i)
305 ENDDO
306 ELSEIF (mlwi /= 49 ) THEN
307 DO i=1,nel
308 evar(1:2,i) = lbuf%STRA(jj(1:2) + i)
309 evar(3,i) = half*lbuf%STRA(jj(4) + i)
310 ENDDO
311 ELSE
312 is_written_tensor(1:nel) = 0
313 END IF
314
315 ELSE
316 DO ir=1,nptr
317 DO is=1,npts
318 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(ir,is,it)
319 IF (mlwi == 12 .OR. mlwi == 14) THEN
320 DO i=1,nel
321 evar(1:2,i) = evar(1:2,i)+lbuf%EPE(jj(1:2) + i)
322 evar(3,i) = evar(3,i)+half*lbuf%EPE(jj(4) + i)
323 ENDDO
324 ELSEIF (mlwi /= 49 ) THEN
325 DO i=1,nel
326 evar(1:2,i) = evar(1:2,i)+lbuf%STRA(jj(1:2) + i)
327 evar(3,i) = evar(3,i)+ half*lbuf%STRA(jj(4) + i)
328 ENDDO
329 ELSE
330 is_written_tensor(1:nel) = 0
331 END IF
332 ENDDO
333 ENDDO
334 END IF
335 evar(1:3,1:nel) = f_exp*evar(1:3,1:nel)
336
337 IF (kcvt==2) THEN
338 IF(ior_tsh==1)THEN
339 DO i=1,nel
340 dir(i,1:2)= gbuf%GAMA(jj(1:2) + i)
341 ENDDO
342 ELSEIF(ior_tsh==2)THEN
343 IF(jhbe==14)THEN
344 ir = 1
345 is = 1
346 END IF
347 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(ir,is,it)
348 DO i=1,nel
349 dir(i,1:2)= lbuf%GAMA(jj(1:2) + i)
350 ENDDO
351 END IF
352 CALL tsh_dir2(x,ixs,dir,dirb,icstr,nel)
354 END IF
355 DO i=1,nel
356 n = i + nft
357 skin_tensor(1:3,nskin+i) = evar(1:3,i)
358 IF(iok_part(i) == 1 ) is_written_skin(nskin+i) = is_written_tensor(i)
359 END DO
360 nskin = nskin + nel
361 evar(1:3,1:nel) = zero
362
363 ilay=nlay
364 it = 1
365 mlwi = mlw
366 IF (igtyp == 22) THEN
367 pid = ixs(nixs-1,1 + nft)
368 mid = igeo(100+ilay,pid)
369 mlwi=nint(pm(19,mid))
370 END IF
371 IF (jhbe==15) THEN
372 ir = 1
373 is = 1
374 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(ir,is,it)
375 IF (mlwi == 12 .OR. mlwi == 14) THEN
376 DO i=1,nel
377 evar(1:2,i) = lbuf%EPE(jj(1:2) + i)
378 evar(3,i) = half*lbuf%EPE(jj(4) + i)
379 ENDDO
380 ELSEIF (mlwi /= 49 ) THEN
381 DO i=1,nel
382 evar(1:2,i) = lbuf%STRA(jj(1:2) + i)
383 evar(3,i) = half*lbuf%STRA(jj(4) + i)
384 ENDDO
385 ELSE
386 is_written_tensor(1:nel) = 0
387 END IF
388
389 ELSE
390 DO ir=1,nptr
391 DO is=1,npts
392 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(ir,is,it)
393 IF (mlwi == 12 .OR. mlwi == 14) THEN
394 DO i=1,nel
395 evar(1:2,i) = evar(1:2,i)+lbuf%EPE(jj(1:2) + i)
396 evar(3,i) = evar(3,i)+half*lbuf%EPE(jj(4) + i)
397 ENDDO
398 ELSEIF (mlwi /= 49 ) THEN
399 DO i=1,nel
400 evar(1:2,i) = evar(1:2,i)+lbuf%STRA(jj(1:2) + i)
401 evar(3,i) = evar(3,i)+ half*lbuf%STRA(jj(4) + i)
402 ENDDO
403 ELSE
404 is_written_tensor(1:nel) = 0
405 END IF
406 ENDDO
407 ENDDO
408 END IF
409 evar(1:3,1:nel) = f_exp*evar(1:3,1:nel)
410
411 IF (kcvt==2) THEN
412 IF(ior_tsh==1)THEN
413 DO i=1,nel
414 dir(i,1:2)= gbuf%GAMA(jj(1:2) + i)
415 ENDDO
416 ELSEIF(ior_tsh==2)THEN
417 IF(jhbe==14)THEN
418 ir = 1
419 is = 1
420 END IF
421 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(ir,is,it)
422 DO i=1,nel
423 dir(i,1:2)= lbuf%GAMA(jj(1:2) + i)
424 ENDDO
425 END IF
426 CALL tsh_dir2(x,ixs,dir,dirb,icstr,nel)
428 END IF
429 DO i=1,nel
430 n = i + nft
431 skin_tensor(1:3,nskin+i) = evar(1:3,i)
432 IF(iok_part(i) == 1 ) is_written_skin(nskin+i) = is_written_tensor(i)
433 END DO
434 nskin = nskin + nel
435
436 ELSEIF (keyword == 'TENS/STRAIN/OUTER_AVERAGE') THEN
437
438 is_written_tensor(1:nel) = 1
439
440 ilay=(1+nlay)/2
441 it = 1
442 mlwi = mlw
443 IF (igtyp == 22) THEN
444 pid = ixs(nixs-1,1 + nft)
445 mid = igeo(100+ilay,pid)
446 mlwi=nint(pm(19,mid))
447 END IF
448 IF (jhbe==15) THEN
449 ir = 1
450 is = 1
451 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(ir,is,it)
452 IF (mlwi == 12 .OR. mlwi == 14) THEN
453 DO i=1,nel
454 evar(1:2,i) = lbuf%EPE(jj(1:2) + i)
455 evar(3,i) = half*lbuf%EPE(jj(4) + i)
456 ENDDO
457 ELSEIF (mlwi /= 49 ) THEN
458 DO i=1,nel
459 evar(1:2,i) = lbuf%STRA(jj(1:2) + i)
460 evar(3,i) = half*lbuf%STRA(jj(4) + i)
461 ENDDO
462 ELSE
463 is_written_tensor(1:nel) = 0
464 END IF
465
466 ELSE
467 DO ir=1,nptr
468 DO is=1,npts
469 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(ir,is,it)
470 IF (mlwi == 12 .OR. mlwi == 14) THEN
471 DO i=1,nel
472 evar(1:2,i) = evar(1:2,i)+lbuf%EPE(jj(1:2) + i)
473 evar(3,i) = evar(3,i)+half*lbuf%EPE(jj(4) + i)
474 ENDDO
475 ELSEIF (mlwi /= 49 ) THEN
476 DO i=1,nel
477 evar(1:2,i) = evar(1:2,i)+lbuf%STRA(jj(1:2) + i)
478 evar(3,i) = evar(3,i)+ half*lbuf%STRA(jj(4) + i)
479 ENDDO
480 ELSE
481 is_written_tensor(1:nel) = 0
482 END IF
483 ENDDO
484 ENDDO
485 END IF
486 evar(1:3,1:nel) = f_exp*evar(1:3,1:nel)
487
488 IF (kcvt==2) THEN
489 IF(ior_tsh==1)THEN
490 DO i=1,nel
491 dir(i,1:2)= gbuf%GAMA(jj(1:2) + i)
492 ENDDO
493 ELSEIF(ior_tsh==2)THEN
494 IF(jhbe==14)THEN
495 ir = 1
496 is = 1
497 END IF
498 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(ir,is,it)
499 DO i=1,nel
500 dir(i,1:2)= lbuf%GAMA(jj(1:2) + i)
501 ENDDO
502 END IF
503 CALL tsh_dir2(x,ixs,dir,dirb,icstr,nel)
505 END IF
506 DO i=1,nel
507 skin_tensor(1:3,nskin+i) = evar(1:3,i)
508 IF(iok_part(i) == 1 ) is_written_skin(nskin+i) = is_written_tensor(i)
509 END DO
510 nskin = nskin + nel
511 evar(1:3,1:nel) = zero
512
513 ilay=(1+nlay)/2
514 it = 1
515 mlwi = mlw
516 IF (igtyp == 22) THEN
517 pid = ixs(nixs-1,1 + nft)
518 mid = igeo(100+ilay,pid)
519 mlwi=nint(pm(19,mid))
520 END IF
521 IF (jhbe==15) THEN
522 ir = 1
523 is = 1
524 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(ir,is,it)
525 IF (mlwi == 12 .OR. mlwi == 14) THEN
526 DO i=1,nel
527 evar(1:2,i) = lbuf%EPE(jj(1:2) + i)
528 evar(3,i) = half*lbuf%EPE(jj(4) + i)
529 ENDDO
530 ELSEIF (mlwi /= 49 ) THEN
531 DO i=1,nel
532 evar(1:2,i) = lbuf%STRA(jj(1:2) + i)
533 evar(3,i) = half*lbuf%STRA(jj(4) + i)
534 ENDDO
535 ELSE
536 is_written_tensor(1:nel) = 0
537 END IF
538
539 ELSE
540 DO ir=1,nptr
541 DO is=1,npts
542 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(ir,is,it)
543 IF (mlwi == 12 .OR. mlwi == 14) THEN
544 DO i=1,nel
545 evar(1:2,i) = evar(1:2,i)+lbuf%EPE(jj(1:2) + i)
546 evar(3,i) = evar(3,i)+half*lbuf%EPE(jj(4) + i)
547 ENDDO
548 ELSEIF (mlwi /= 49 ) THEN
549 DO i=1,nel
550 evar(1:2,i) = evar(1:2,i)+lbuf%STRA(jj(1:2) + i)
551 evar(3,i) = evar(3,i)+ half*lbuf%STRA(jj(4) + i)
552 ENDDO
553 ELSE
554 is_written_tensor(1:nel) = 0
555 END IF
556 ENDDO
557 ENDDO
558 END IF
559 evar(1:3,1:nel) = f_exp*evar(1:3,1:nel)
560
561 IF (kcvt==2) THEN
562 IF(ior_tsh==1)THEN
563 DO i=1,nel
564 dir(i,1:2)= gbuf%GAMA(jj(1:2) + i)
565 ENDDO
566 ELSEIF(ior_tsh==2)THEN
567 IF(jhbe==14)THEN
568 ir = 1
569 is = 1
570 END IF
571 lbuf => elbuf_tab(ng)%BUFLY(ilay)%LBUF(ir,is,it)
572 DO i=1,nel
573 dir(i,1:2)= lbuf%GAMA(jj(1:2) + i)
574 ENDDO
575 END IF
576 CALL tsh_dir2(x,ixs,dir,dirb,icstr,nel)
578 END IF
579 DO i=1,nel
580 skin_tensor(1:3,nskin+i) = evar(1:3,i)
581 IF(iok_part(i) == 1 ) is_written_skin(nskin+i) = is_written_tensor(i
582 END DO
583 nskin = nskin + nel
584 END IF
585 ENDIF
586
587 END DO
588
589 IF (numskin> nskin)
591 . elbuf_tab,skin_tensor, iparg ,ixs ,x ,pm ,
592 4 iparts ,ipm ,igeo ,ixs10 ,ixs16 , ixs20 ,
593 5 is_written_skin ,h3d_part,info1 ,keyword ,nskin ,
594 6 iad_elem ,fr_elem , weight ,tag_skins6)
595
596 RETURN
subroutine tsh_dir2(x, ixs, dir, dirb, icstr, nel)
subroutine roto_sig2d(jft, jlt, sig, dir)
subroutine h3d_sol_skin_tensor(elbuf_tab, skin_tensor, iparg, ixs, x, pm, iparts, ipm, igeo, ixs10, ixs16, ixs20, is_written_skin, h3d_part, info1, keyword, nskin, iad_elem, fr_elem, weight, tag_skins6)
subroutine initbuf(iparg, ng, mtn, llt, nft, iad, ity, npt, jale, ismstr, jeul, jtur, jthe, jlag, jmult, jhbe, jivf, mid, jpor, jcvt, jclose, jpla, irep, iint, igtyp, israt, isrot, icsen, isorth, isorthg, ifailure, jsms)
integer, parameter ncharline100