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