46
47
48
49 USE elbufdef_mod
51 USE matparam_def_mod
52 USE my_alloc_mod
54 use element_mod , only : nixc,nixtg
55
56
57
58#include "implicit_f.inc"
59
60
61
62#include "mvsiz_p.inc"
63
64#include "com01_c.inc"
65#include "com04_c.inc"
66#include "param_c.inc"
67#include "scr25_c.inc"
68#include "spmd_c.inc"
69#include "task_c.inc"
70
71
72
73 INTEGER IPARG(NPARG,*),ITENS,INVERT(*),
74 . EL2FA(*),IXC(NIXC,*), IGEO(NPROPGI,*),
75 . NELCUT,NBF,IADP(*),NBF_L,NBPART,IADG(NSPMD,*),
76 . IXTG(NIXTG,*),IPM(NPROPMI,*)
77
78 my_real tens(3,*),epsdot(6,*),x(3,*)
79 my_real,
INTENT(IN) :: geo(npropg,numgeo)
80 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
81 TYPE (STACK_PLY) :: STACK
82 TYPE (MATPARAM_STRUCT_) ,DIMENSION(NUMMAT) ,INTENT(IN) :: MAT_PARAM
83 TYPE (DRAPE_) , INTENT(IN) :: DRAPE_SH4N(NUMELC_DRAPE)
84 TYPE (DRAPE_) , INTENT(IN) :: DRAPE_SH3N()
85 TYPE (DRAPEG_), INTENT(IN) ::
86
87
88
89
91 . a1,a2,a3,thk
92 REAL R4(18)
93 INTEGER I,NG,NEL,NFT,ITY,LFT,NPT,MPT,IPT,
94 . N,J,LLT,MLW,ISTRAIN,IL,IR,IS,IT,NPTR,NPTS,NLAY,
95 . IPID,I1,I2,NS1,NS2,ISTRE,INPUT_ERROR,
96 . NN1,NN2,NN3,NN4,NN5,NN6,NN7,NN8,NN9,NN10,NNI,N0,
97 . IHBE,BUF,NPG,K,ISROT,NUVARV,IVISC,
98 . IPMAT,IGTYP,ISUBSTACK,IIGEO,IADI,IPMAT_IPLY,IXFEM,IXLAY,
99 . NPT_ALL,NPTT,ILAY,IUS,ID_PLY,IPLY,IPANG,IPPOS,IPTHK,JJ(8),
100 . IDX,IDX_MSTRESS,IDX_IDPLY_MSTRESS,IGMAT,,IDIR,IMAT,MAT_ORTH
101 INTEGER PID(MVSIZ),MAT(MVSIZ)
102 my_real ,
DIMENSION(:,:) ,
ALLOCATABLE :: sige
103
104 TYPE(BUF_LAY_) ,POINTER ::
105 TYPE(G_BUFEL_) ,POINTER :: GBUF
106 TYPE(L_BUFEL_) ,POINTER :: LBUF
107
108
109 my_real,
DIMENSION(:),
POINTER :: dir_a,dir_b
110 REAL,DIMENSION(:),ALLOCATABLE :: WA
111
112 INTEGER :: NLAY_MAX,LAYNPT_MAX,NUMEL_DRAPE,SEDRAPE
113 INTEGER, DIMENSION(:) , ALLOCATABLE :: MATLY
114 my_real,
DIMENSION(:) ,
ALLOCATABLE :: thkly
115 my_real,
DIMENSION(:,:),
ALLOCATABLE :: posly,thk_ly
116
117 CALL my_alloc(wa,3*nbf_l)
118
119 DO j=1,18
120 r4(j) = zero
121 ENDDO
122
123 npg = 1
124 nn1 = 1
125 nn2 = nn1
126 nn3 = nn2
127 nn4 = nn3 + numelq
128 nn5 = nn4 + numelc
129 nn6 = nn5 + numeltg
130 nn7 = nn6
131 nn8 = nn7
132 nn9 = nn8
133 nn10= nn9
134
135
136 DO 490 ng=1,ngroup
137
138 mlw = iparg(1,ng)
139 nel = iparg(2,ng)
140 nft = iparg(3,ng)
141 ity = iparg(5,ng)
142 igtyp = iparg(38,ng)
143 isrot = iparg(41,ng)
144 istrain = iparg(44,ng)
145 isubstack = iparg(71,ng)
146 igmat = iparg(75,ng)
147 idrape = elbuf_tab(ng)%IDRAPE
148 lft=1
149 llt=nel
150
151 DO i=1,8
152 jj(i) = nel*(i-1)
153 ENDDO
154
155 IF (ALLOCATED(sige)) DEALLOCATE(sige)
156 ALLOCATE(sige(nel,3))
157 sige(1:nel,1:3) = zero
158
159 IF (mlw /= 13) THEN
160
161
162
163 IF(ity == 2)THEN
164 DO i=lft,llt
165 n = i + nft
166 tens(1,el2fa(nn3+n)) = zero
167 tens(2,el2fa(nn3+n)) = zero
168 tens(3,el2fa(nn3+n)) = zero
169 ENDDO
170
171
172
173 ELSEIF (ity == 3 .OR. ity == 7) THEN
174 gbuf => elbuf_tab(ng)%GBUF
175 nptr = elbuf_tab(ng)%NPTR
176 npts = elbuf_tab(ng)%NPTS
177 nptt = elbuf_tab(ng)%NPTT
178 nlay = elbuf_tab(ng)%NLAY
179 npg = nptr*npts
180
181 ihbe = iparg(23,ng)
182 IF (ity == 3) THEN
183 n0 = 0
184 nni = nn4
185 IF (ihbe == 11) npg = 4
186 ipid = ixc(6,nft+1)
187 DO i=lft,llt
188 mat(i)=ixc(1,nft+i)
189 pid(i)=ixc(6,nft+i)
190 ENDDO
191 ELSE
192 n0 = numelc
193 nni = nn5
194 IF (ihbe == 11) npg = 3
195 ipid = ixtg(5,nft+1)
196 DO i=lft,llt
197 mat(i)=ixtg(1,nft+i)
198 pid(i)=ixtg(5,nft+i)
199 ENDDO
200 ENDIF
201
202 DO i=lft,llt
203 n = i + nft
204 tens(1,el2fa(nni+n)) = zero
205 tens(2,el2fa(nni+n)) = zero
206 tens(3,el2fa(nni+n)) = zero
207 ENDDO
208
209 IF (mlw == 0) GOTO 490
210
211 input_error = 0
212 a1 = zero
213 a2 = zero
214 a3 = zero
215 istre = 1
216 ipt = 1
217 npt = iabs(iparg(6,ng))
219
220 laynpt_max = 1
221 IF (igtyp == 51 .OR. igtyp == 52) THEN
222 DO ilay=1,nlay
223 laynpt_max =
max(laynpt_max ,elbuf_tab(ng)%BUFLY(ilay)%NPTT)
224 ENDDO
225 ENDIF
226 ixfem = 0
227 ixlay = 0
228 nlay_max =
max(nlay,npt)
229 ALLOCATE(matly(mvsiz*nlay_max))
230 ALLOCATE(thkly(mvsiz*nlay_max*laynpt_max))
231 ALLOCATE(posly(mvsiz,nlay_max*laynpt_max))
232 ALLOCATE(thk_ly(nel ,nlay_max*laynpt_max))
233 matly(:) = 0
234 thkly(:) = zero
235 posly(:,:) = zero
236 thk_ly(:,:) = zero
237
238 IF (ity == 7) THEN
242 . elbuf_tab(ng),1 ,nel ,geo ,igeo
243 . mat ,pid ,thkly ,matly ,posly ,
244 . igtyp ,ixfem ,ixlay ,nlay ,npt
245 . isubstack,stack ,drape_sh3n ,nft ,gbuf%THK ,
246 . nel ,thk_ly ,drapeg%INDX_SH3N,sedrape,numel_drape)
247 ELSE
251 . elbuf_tab(ng),1 ,nel ,geo ,igeo ,
252 . mat ,pid ,thkly ,matly ,posly ,
253 . igtyp ,ixfem ,ixlay ,nlay ,npt ,
254 . isubstack,stack ,drape_sh4n ,nft ,gbuf%THK ,
255 . nel ,thk_ly ,drapeg%INDX_SH4N,sedrape,numel_drape)
256 ENDIF
257
258 IF (igtyp == 51 .OR. igtyp == 52) THEN
259 npt_all = 0
260 DO ipt=1,nlay
261 npt_all = npt_all + elbuf_tab(ng)%BUFLY(ipt)%NPTT
262 ENDDO
263 IF (nlay == 1) mpt =
max(1,npt_all)
264 ENDIF
265 idx_mstress = 3120 + 3*mx_ply_anim
266 idx_idply_mstress = idx_mstress + 103
267
268
269
270 IF (itens == 1) THEN
271 ns1 = 5
272 ns2 = 3
273 a1 = one
274 a2 = zero
275 ELSEIF (itens == 2) THEN
276 ns1 = 5
277 ns2 = 3
278 a1 = zero
279 a2 = one
280 ELSEIF (itens == 3) THEN
281 ns1 = 5
282 ns2 = 3
283 ipt = mpt
284 il = nlay
285 IF (mlw == 1) THEN
286 a1 = one
287
288 a2 = six
289 ELSEIF (mlw == 2 .OR. mlw == 19 .OR.
290 . mlw == 15 .OR.
291 . mlw == 22 .OR. mlw == 25 .OR.
292 . mlw == 27 .OR. mlw == 32 .OR.
293 . mlw >= 28) THEN
294 a1 = one
295 a2 = zero
296 ELSEIF (mlw == 3 .OR. mlw == 23) THEN
297 a1 = one
298 a2 = zero
299 ENDIF
300 ELSEIF (itens == 4) THEN
301 ns1 = 5
302 ns2 = 3
303 ipt = 1
304 il = 1
305 IF (mlw == 1) THEN
306 a1 = one
307 a2 = -six
308 ELSEIF (mlw == 2 .OR. mlw == 19 .OR.
309 . mlw == 15 .OR.
310 . mlw == 22 .OR. mlw == 25.OR.
311 . mlw == 27 .OR. mlw == 32.OR.
312 . mlw >= 28) THEN
313 a1 = one
314 a2 = zero
315 ELSEIF (mlw == 3 .OR. mlw == 23) THEN
316 a1 = one
317 a2 = zero
318 ENDIF
319 ELSEIF (itens > 100 .AND. itens < 201) THEN
320 ns1 = 5
321 ns2 = 3
322 ipt =
min(mpt,itens-100)
323 IF (itens - 100 > mpt) THEN
324 a1 = zero
325 a2 = zero
326 ELSEIF (mlw == 1 .OR. mlw == 3 .OR. mlw == 23) THEN
327 a1 = one
328 a2 = zero
329 ELSEIF (mlw == 2 .OR. mlw == 19 .OR.
330 . mlw == 15 .OR.
331 . mlw == 22 .OR. mlw == 25 .OR.
332 . mlw == 27 .OR. mlw == 32 .OR.
333 . mlw >= 28) THEN
334 a1 = one
335 a2 = zero
336 ENDIF
337 ELSEIF (itens > 400 .AND. itens < 501) THEN
338
339 ns1 = 5
340 ns2 = 3
341
342
343 ilay = mod((itens - 400), 100)
344 IF (ilay == 0) ilay = 100
345
346 IF (ilay > mpt) THEN
347 a1 = zero
348 a2 = zero
349 ELSEIF (mlw == 1 .OR. mlw == 3 .OR. mlw == 23) THEN
350 a1 = one
351 a2 = zero
352 ELSEIF (mlw == 2 .OR. mlw == 19 .OR.
353 . mlw == 15 .OR.
354 . mlw == 22 .OR. mlw == 25 .OR.
355 . mlw == 27 .OR. mlw == 32 .OR.
356 . mlw >= 28) THEN
357 a1 = one
358 a2 = zero
359 ENDIF
360 ELSEIF (itens > 500 .AND. itens < 601) THEN
361
362 ns1 = 5
363 ns2 = 3
364
365
366 ilay = mod((itens - 500), 100)
367 IF (ilay == 0) ilay = 100
368
369 IF (ilay > mpt) THEN
370 a1 = zero
371 a2 = zero
372 ELSEIF (mlw == 1 .OR. mlw == 3 .OR. mlw == 23) THEN
373 a1 = one
374 a2 = zero
375 ELSEIF (mlw == 2 .OR. mlw == 19 .OR.
376 . mlw == 15 .OR.
377 . mlw == 22 .OR. mlw == 25 .OR.
378 . mlw == 27 .OR. mlw == 32 .OR.
379 . mlw >= 28) THEN
380 a1 = one
381 a2 = zero
382 ENDIF
383 ELSEIF (itens > 600 .AND. itens < 1611) THEN
384
385 ns1 = 5
386 ns2 = 3
387
388
389 ius = itens - 600
390 ilay = int((ius - 1)/10)
391 IF (ilay == 0) ilay = 100
392
393 IF (ilay > mpt) THEN
394 a1 = zero
395 a2 = zero
396 ELSEIF (mlw == 1 .OR. mlw == 3 .OR. mlw == 23) THEN
397 a1 = one
398 a2 = zero
399 ELSEIF (mlw == 2 .OR. mlw == 19 .OR.
400 . mlw == 15 .OR.
401 . mlw == 22 .OR. mlw == 25 .OR.
402 . mlw == 27 .OR. mlw == 32 .OR.
403 . mlw >= 28) THEN
404 a1 = one
405 a2 = zero
406 ENDIF
407
408
409
410 ELSEIF (itens == 5) THEN
411 istre = 0
412 ns1 = 8
413 ns2 = 8
414 IF (istrain == 1) THEN
415 a1 = one
416 a2 = zero
417 ELSE
418 a1 = zero
419 a2 = zero
420 ENDIF
421 ELSEIF (itens == 6) THEN
422 istre = 0
423 ns1 = 8
424 ns2 = 8
425 a1 = zero
426 a2 = one
427 ELSEIF (itens == 7) THEN
428 istre = 0
429 ns1 = 8
430 ns2 = 8
431 ipt = mpt
432 a1 = one
433 a2 = half
434 ELSEIF (itens == 8) THEN
435 istre = 0
436 ns1 = 8
437 ns2 = 8
438 ipt = 1
439 a1 = one
440 a2 = -half
441 ELSEIF (itens > 200 .AND. itens < 301) THEN
442 istre = 0
443 ns1 = 8
444 ns2 = 8
445 ipt =
min(mpt,itens-200)
446 IF ((itens - 200 > mpt) .OR. igtyp == 51 .OR. igtyp == 52 .OR. igtyp == 17) THEN
447 a1 = zero
448 a2 = zero
449 ELSE IF (igtyp == 11) THEN
450 ipt = itens-200
451 a1 = one
452 a2 = posly(1,ipt)
453 ELSE
454 a1 = one
455 a2 = half*(((2*ipt-one)/mpt)-one)
456 ENDIF
457 ELSEIF (itens > 1610+ mx_ply_anim .AND. itens < 1611 + 2*mx_ply_anim ) THEN
458 il = itens - (1610+ mx_ply_anim)
459 istre = 0
460 a1 = zero
461 a2 = zero
462 ns1 = 8
463 ns2 = 8
464 IF (igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52) THEN
465 IF (ply_anim_strain( 3 * (il - 1) + 2) == 3 )THEN
466 ipang = 1
467 ipthk = ipang + nlay
468 ippos = ipthk + nlay
469 ipt = ply_anim_strain( 3 * (il - 1) + 3)
470 DO j=1,nlay
471 bufly => elbuf_tab(ng)%BUFLY(j)
472 nptt = bufly%NPTT
473 IF (igtyp == 17 .OR. igtyp == 51) THEN
474 id_ply = igeo(1,stack%IGEO(2+j,isubstack))
475 ELSEIF (igtyp == 52) THEN
476 id_ply =
ply_info(1,stack%IGEO(2+j,isubstack)-numstack)
477 ENDIF
478 IF (id_ply == ply_anim_strain( 3 * (il - 1) + 1) .AND.
479 . ipt <= nptt ) THEN
480 a1 = one
481
482 a2 = stack%GEO(ippos+j,isubstack)+
483 . half*(((2*ipt-one)/nptt)-one) *
484 . stack%GEO(ipthk+j,isubstack)
485 ENDIF
486 ENDDO
487 ENDIF
488 ELSE
489 istre = 0
490 a1 = zero
491 a2 = zero
492 ENDIF
493
494 ELSEIF (itens > 1610 + 3*mx_ply_anim .AND.
495 . itens < 1711 + 3*mx_ply_anim) THEN
496
497
498
499 istre = 0
500 a1 = zero
501 a2 = zero
502 ns1 = 8
503 ns2 = 8
504 IF (igtyp == 51 .OR. igtyp == 52) THEN
505
506 idx = 1610 + 3*mx_ply_anim
507
508 ilay = mod((itens - idx),100)
509 IF (ilay == 0) ilay = 100
510 IF (nlay > 1) THEN
512 ELSE
513 il = 1
514 ENDIF
515 bufly => elbuf_tab(ng)%BUFLY(il)
516 nptt = bufly%NPTT
518
519 ipang = 1
520 ipthk = ipang + nlay
521 ippos = ipthk + nlay
522
523 IF (il <= nlay) THEN
524 a1 = one
525 a2 = stack%GEO(ippos+il,isubstack)+
526 . half*(((2*it-one)/nptt)-one) *
527 . stack%GEO(ipthk+il,isubstack)
528 ENDIF
529 ENDIF
530
531 ELSEIF (itens > 1710 + 3*mx_ply_anim .AND.
532 . itens < 1811 + 3*mx_ply_anim) THEN
533
534
535
536 istre = 0
537 a1 = zero
538 a2 = zero
539 ns1 = 8
540 ns2 = 8
541 IF (igtyp == 51 .OR. igtyp == 52) THEN
542
543 idx = 1710 + 3*mx_ply_anim
544
545 ilay = mod((itens - idx),100)
546 IF (ilay == 0) ilay = 100
547 IF (nlay > 1) THEN
549 ELSE
550 il = 1
551 ENDIF
552 bufly => elbuf_tab(ng)%BUFLY(il)
553 nptt = bufly%NPTT
554 it = 1
555
556 ipang = 1
557 ipthk = ipang + nlay
558 ippos = ipthk + nlay
559
560 IF (il <= nlay) THEN
561 a1 = one
562 a2 = stack%GEO(ippos+il,isubstack)+
563 . half*(((2*it-one)/nptt)-one) *
564 . stack%GEO(ipthk+il,isubstack)
565 ENDIF
566 ENDIF
567
568 ELSEIF (itens > 1810 + 3*mx_ply_anim .AND.
569 . itens < 2821 + 3*mx_ply_anim) THEN
570
571
572
573 istre = 0
574 a1 = zero
575 a2 = zero
576 ns1 = 8
577 ns2 = 8
578 IF (igtyp == 51 .OR. igtyp == 52) THEN
579
580 idx = 1810 + 3*mx_ply_anim
581
582 ius = itens - idx
583 ilay = int((ius - 1)/10)
584 IF (ilay == 0) ilay = 100
585 il = ilay
586 it = ius - 10*il
587
588 ipang = 1
589 ipthk = ipang + nlay
590 ippos = ipthk + nlay
591
592 IF (il <= nlay) THEN
593 bufly => elbuf_tab(ng)%BUFLY(il)
594 nptt = bufly%NPTT
595 IF (it <= nptt) THEN
596 a1 = one
597 a2 = stack%GEO(ippos+il,isubstack)+
598 . half*(((2*it-one)/nptt)-one) *
599 . stack%GEO(ipthk+il,isubstack)
600 ENDIF
601 ENDIF
602 ENDIF
603
604
605
606 ELSEIF (itens == 91) THEN
607 istre = 2
608 a1 = one
609 a2 = zero
610 ELSEIF (itens == 92) THEN
611 istre = 2
612 a1 = zero
613 a2 = one
614 ELSEIF (itens == 93) THEN
615 istre = 2
616 a1 = one
617 a2 = half
618 ELSEIF (itens == 94) THEN
619 istre = 2
620 a1 = one
621 a2 = -half
622 ELSEIF (itens > 300 .AND. itens < 401) THEN
623 istre = 2
624 ipt =
min(mpt,itens - 300)
625 IF (itens - 300 > mpt) THEN
626 a1 = zero
627 a2 = zero
628 ELSEIF (npt /= 0) THEN
629 a1 = one
630 a2 = half*(((2*ipt-one)/mpt)-one)
631 ELSE
632 a1 = one
633 a2 = zero
634 ENDIF
635 ELSEIF (itens > 1610+ 2*mx_ply_anim .AND. itens < 1611 + 3*mx_ply_anim ) THEN
636 il = itens - (1610+ 2*mx_ply_anim)
637 istre = 2
638 a1 = zero
639 a2 = zero
640 IF (igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52) THEN
641 IF (ply_anim_epsdot( 3 * (il - 1) + 2) == 6 )THEN
642 ipang = 1
643 ipthk = ipang + nlay
644 ippos = ipthk + nlay
645 ipt = ply_anim_epsdot( 3 * (il - 1) + 3)
646 DO j=1,nlay
647 bufly => elbuf_tab(ng)%BUFLY(j)
648 nptt = bufly%NPTT
649 IF (igtyp == 17 .OR. igtyp == 51) THEN
650 id_ply = igeo(1,stack%IGEO(2+j,isubstack))
651 ELSEIF (igtyp == 52) THEN
652 id_ply =
ply_info(1,stack%IGEO(2+j,isubstack)-numstack)
653 ENDIF
654 IF (id_ply == ply_anim_epsdot( 3 * (il - 1) + 1) ) THEN
655 a1 = one
656
657 a2 = stack%GEO(ippos+j,isubstack)+
658 . half*(((2*ipt-one)/nptt)-one) *
659 . stack%GEO(ipthk+j,isubstack)
660 ENDIF
661 ENDDO
662 ENDIF
663 ELSE
664 istre = 2
665 a1 = zero
666 a2 = zero
667 ENDIF
668
669 ELSEIF (itens > 2820 + 3*mx_ply_anim .AND.
670 . itens < 2921 + 3*mx_ply_anim) THEN
671
672
673
674 istre = 2
675 a1 = zero
676 a2 = zero
677 IF (igtyp == 51 .OR. igtyp == 52) THEN
678
679 idx = 2820 + 3*mx_ply_anim
680
681 ilay = mod((itens - idx),100)
682 IF (ilay == 0) ilay = 100
683 IF (nlay > 1) THEN
685 ELSE
686 il = 1
687 ENDIF
688 bufly => elbuf_tab(ng)%BUFLY(il)
689 nptt = bufly%NPTT
691
692 ipang = 1
693 ipthk = ipang + nlay
694 ippos = ipthk + nlay
695
696 IF (il <= nlay) THEN
697 a1 = one
698 a2 = stack%GEO(ippos+il,isubstack)+
699 . half*(((2*it-one)/nptt)-one) *
700 . stack%GEO(ipthk+il,isubstack)
701 ENDIF
702 ENDIF
703
704 ELSEIF (itens > 2920 + 3*mx_ply_anim .AND.
705 . itens < 3021 + 3*mx_ply_anim) THEN
706
707
708
709 istre = 2
710 a1 = zero
711 a2 = zero
712 IF (igtyp == 51 .OR. igtyp == 52) THEN
713
714 idx = 2920 + 3*mx_ply_anim
715
716 ilay = mod((itens - idx),100)
717 IF (ilay == 0) ilay = 100
718 IF (nlay > 1) THEN
720 ELSE
721 il = 1
722 ENDIF
723 bufly => elbuf_tab(ng)%BUFLY(il)
724 nptt = bufly%NPTT
725 it = 1
726
727 ipang = 1
728 ipthk = ipang + nlay
729 ippos = ipthk + nlay
730
731 IF (il <= nlay) THEN
732 a1 = one
733 a2 = stack%GEO(ippos+il,isubstack)+
734 . half*(((2*it-one)/nptt)-one) *
735 . stack%GEO(ipthk+il,isubstack)
736 ENDIF
737 ENDIF
738
739 ELSEIF (itens > 3020 + 3*mx_ply_anim .AND.
740 . itens < 4031 + 3*mx_ply_anim) THEN
741
742
743
744 istre = 2
745 a1 = zero
746 a2 = zero
747 IF (igtyp == 51 .OR. igtyp == 52) THEN
748
749 idx = 3020 + 3*mx_ply_anim
750
751 ius = itens - idx
752 ilay = int((ius - 1)/10)
753 IF (ilay == 0) ilay = 100
754 il = ilay
755 it = ius - 10*il
756
757 ipang = 1
758 ipthk = ipang + nlay
759 ippos = ipthk + nlay
760
761 IF (il <= nlay) THEN
762 bufly => elbuf_tab(ng)%BUFLY(il)
763 nptt = bufly%NPTT
764 IF (it <= nptt) THEN
765 a1 = one
766 a2 = stack%GEO(ippos+il,isubstack)+
767 . half*(((2*it-one)/nptt)-one) *
768 . stack%GEO(ipthk+il,isubstack)
769 ENDIF
770 ENDIF
771 ENDIF
772
773
774
775 ENDIF
776
777
778
779 IF (istre == 1) THEN
780
781
782
783 ivisc = 0
784
785
786 IF (itens == 1) THEN
787
788 DO i=lft,llt
789 n = i + nft
790 r4(1) = gbuf%FOR(jj(1)+i)
791 r4(2) = gbuf%FOR(jj(2)+i)
792 r4(3) = gbuf%FOR(jj(3)+i)
793 r4(3) = r4(3) *
invert(el2fa(nni+n))
794 tens(1,el2fa(nni+n)) = r4(1)
795 tens(2,el2fa(nni+n)) = r4(2)
796 tens(3,el2fa(nni+n)) = r4(3)
797 ENDDO
798
799 ELSE IF (itens == 2) THEN
800
801
802 DO i=lft,llt
803 n = i + nft
804 r4(1) = gbuf%MOM(jj(1)+i)
805 r4(2) = gbuf%MOM(jj(2)+i)
806 r4(3) = gbuf%MOM(jj(3)+i)
807 r4(3) = r4(3) *
invert(el2fa(nni+n))
808 tens(1,el2fa(nni+n)) = r4(1)
809 tens(2,el2fa(nni+n)) = r4(2)
810 tens(3,el2fa(nni+n)) = r4(3)
811 ENDDO
812
813 ELSE IF (itens == 3 .OR. itens == 4) THEN
814
815
816 IF (npt /= 0) THEN
817 IF (itens == 3) THEN
818 IF (igtyp == 1 .OR. igtyp == 9) THEN
819 il = 1
820 ipt = elbuf_tab(ng)%BUFLY(il)%NPTT
821 ELSE IF (igtyp == 10 .OR. igtyp == 11 .OR. igtyp == 16) THEN
822 il = elbuf_tab(ng)%NLAY
823 ipt = 1
824 ELSE IF (igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52) THEN
825 il = elbuf_tab(ng)%NLAY
826 ipt = elbuf_tab(ng)%BUFLY(il)%NPTT
827 END IF
828 ELSE IF (itens == 4) THEN
829 ipt = 1
830 il = 1
831 END IF
832 imat = elbuf_tab(ng)%BUFLY(il)%IMAT
833 ivisc = mat_param(imat)%IVISC
834 DO i=1,nel
835 DO ir=1,nptr
836 DO is=1,npts
837 lbuf => elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,ipt)
838 sige(i,1) = sige(i,1) + lbuf%SIG(jj(1) + i) / npg
839 sige(i,2) = sige(i,2) + lbuf%SIG(jj(2) + i) / npg
840 sige(i,3) = sige(i,3) + lbuf%SIG(jj(3) + i) / npg
841 ENDDO
842 ENDDO
843 ENDDO
844 IF (ivisc > 0) THEN
845 DO i=1,nel
846 DO ir=1,nptr
847 DO is=1,npts
848 lbuf => elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,ipt)
849 sige(i,1) = sige(i,1) + lbuf%VISC(jj(1) + i) / npg
850 sige(i,2) = sige(i,2) + lbuf%VISC(jj(2) + i) / npg
851 sige(i,3) = sige(i,3) + lbuf%VISC(jj(3) + i) / npg
852 ENDDO
853 ENDDO
854 ENDDO
855 END IF
856 mat_orth = mat_param(imat)%ORTHOTROPY
857 IF (mat_orth == 2) THEN
858 IF(idrape > 0 .AND. (igtyp == 51 .OR. igtyp ==52)) THEN
859 dir_a => elbuf_tab(ng)%BUFLY(il)%LBUF_DIR(ipt)%DIRA
860 ELSE
861 dir_a => elbuf_tab(ng)%BUFLY(il)%DIRA
862 ENDIF
864 END IF
865 ELSE
866 a2 = zero
867 IF (itens == 3) a2 = six
868 IF (itens == 4) a2 = -six
869 DO i=1,nel
870 sige(i,1) = gbuf%FOR(jj(1)+i) + gbuf%MOM(jj(1)+i) * a2
871 sige(i,2) = gbuf%FOR(jj(2)+i) + gbuf%MOM(jj(2)+i) * a2
872 sige(i,3) = gbuf%FOR(jj(3)+i) + gbuf%MOM(jj(3)+i) * a2
873 ENDDO
874 ENDIF
875
876 DO i=lft,llt
877 n = i + nft
878 r4(1) = sige(i,1)
879 r4(2) = sige(i,2)
880 r4(3) = sige(i,3)
881 r4(3) = r4(3) *
invert(el2fa(nni+n))
882 tens(1,el2fa(nni+n)) = r4(1)
883 tens(2,el2fa(nni+n)) = r4(2)
884 tens(3,el2fa(nni+n)) = r4(3)
885 ENDDO
886
887 ELSE IF (itens > 100 .AND. itens < 201) THEN
888
889
890
891
892 ipt = itens-100
893 IF (igtyp == 51 .OR. igtyp == 52 .OR. igtyp == 17) THEN
894 input_error = 1
895 ELSE
896 IF (npt /= 0) THEN
897 IF (igtyp == 1 .OR. igtyp == 9) THEN
898 il = 1
899 ipt =
min(ipt, elbuf_tab(ng)%BUFLY(1)%NPTT)
900 ELSE IF (igtyp == 10 .OR. igtyp == 11 .OR. igtyp == 16) THEN
901 il =
min(ipt, elbuf_tab(ng)%NLAY)
902 ipt = 1
903 END IF
904
905 imat = elbuf_tab(ng)%BUFLY(il)%IMAT
906 ivisc = mat_param(imat)%IVISC
907 DO i=1,nel
908 DO ir=1,nptr
909 DO is=1,npts
910 lbuf => elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,ipt)
911 sige(i,1) = sige(i,1) + lbuf%SIG(jj(1) + i) / npg
912 sige(i,2) = sige(i,2) + lbuf%SIG(jj(2) + i) / npg
913 sige(i,3) = sige(i,3) + lbuf%SIG(jj(3) + i) / npg
914 ENDDO
915 ENDDO
916 ENDDO
917 IF (ivisc > 0) THEN
918 DO i=1,nel
919 DO ir=1,nptr
920 DO is=1,npts
921 lbuf => elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,ipt)
922 sige(i,1) = sige(i,1) + lbuf%VISC(jj(1) + i) / npg
923 sige(i,2) = sige(i,2) + lbuf%VISC(jj(2) + i) / npg
924 sige(i,3) = sige(i,3) + lbuf%VISC(jj(3) + i) / npg
925 ENDDO
926 ENDDO
927 ENDDO
928 END IF
929 mat_orth = mat_param(imat)%ORTHOTROPY
930 IF (mat_orth == 2) THEN
931 dir_a => elbuf_tab(ng)%BUFLY(il)%DIRA
933 END IF
934 ELSE
935 DO i=1,nel
936 sige(i,1) = gbuf%FOR(jj(1)+i)
937 sige(i,2) = gbuf%FOR(jj(2)+i)
938 sige(i,3) = gbuf%FOR(jj(3)+i)
939 ENDDO
940 ENDIF
941
942 DO i=lft,llt
943 n = i + nft
944 r4(1) = sige(i,1)
945 r4(2) = sige(i,2)
946 r4(3) = sige(i,3)
947 r4(3) = r4(3) *
invert(el2fa(nni+n))
948 tens(1,el2fa(nni+n)) = r4(1)
949 tens(2,el2fa(nni+n)) = r4(2)
950 tens(3,el2fa(nni+n)) = r4(3)
951 ENDDO
952 END IF
953
954
955 ELSEIF (itens > 400 .AND. itens < 501) THEN
956
957
958 iply = itens - 400
959 IF (igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52) THEN
960 il = elbuf_tab(ng)%NLAY
961 ipt = elbuf_tab(ng)%BUFLY(il)%NPTT
962 DO j=1,nlay
963 id_ply = igeo(1,stack%IGEO(2+j,isubstack))
964 IF (id_ply == iply) THEN
965 il = j
966 ipt = elbuf_tab(ng)%BUFLY(il)%NPTT
967 EXIT
968 END IF
969 END DO
970 imat = elbuf_tab(ng)%BUFLY(il)%IMAT
971 ivisc = mat_param(imat)%IVISC
972
973 sige(1:nel,1:3) = zero
974 DO i=1,nel
975 DO ir=1,nptr
976 DO is=1,npts
977 lbuf => elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,ipt)
978 sige(i,1) = sige(i,1) + lbuf%SIG(jj(1) + i) / npg
979 sige(i,2) = sige(i,2) + lbuf%SIG(jj(2) + i) / npg
980 sige(i,3) = sige(i,3) + lbuf%SIG(jj(3) + i) / npg
981 ENDDO
982 ENDDO
983 ENDDO
984
985 IF (ivisc > 0) THEN
986 DO i=1,nel
987 DO ir=1,nptr
988 DO is=1,npts
989 lbuf => elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,ipt)
990 sige(i,1) = sige(i,1) + lbuf%VISC(jj(1) + i) / npg
991 sige(i,2) = sige(i,2) + lbuf%VISC(jj(2) + i) / npg
992 sige(i,3) = sige(i,3) + lbuf%VISC(jj(3) + i) / npg
993 ENDDO
994 ENDDO
995 ENDDO
996 END IF
997
998 mat_orth = mat_param(imat)%ORTHOTROPY
999 IF (mat_orth == 2) THEN
1000 dir_a => elbuf_tab(ng)%BUFLY(il)%DIRA
1002 END IF
1003
1004 DO i=lft,llt
1005 n = nft + i
1006 r4(1) = sige(i,1)
1007 r4(2) = sige(i,2)
1008 r4(3) = sige(i,3)
1009 r4(3) = r4(3) *
invert(el2fa(nni+n))
1010 tens(1,el2fa(nni+n)) = r4(1)
1011 tens(2,el2fa(nni+n)) = r4(2)
1012 tens(3,el2fa(nni+n)) = r4(3)
1013 ENDDO
1014 END IF
1015
1016 ELSEIF (itens > 500 .AND. itens < 601 .AND.
1017 . (igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52)) THEN
1018
1019 il = 1
1020 ipt = 1
1021 iply = itens - 500
1022 DO j=1,nlay
1023 id_ply = igeo(1,stack%IGEO(2+j,isubstack))
1024 IF (id_ply == iply) THEN
1025 il = j
1026 EXIT
1027 END IF
1028 END DO
1029 imat = elbuf_tab(ng)%BUFLY(il)%IMAT
1030 ivisc = mat_param(imat)%IVISC
1031
1032 sige(1:nel,1:3) = zero
1033 DO i=1,nel
1034 DO ir=1,nptr
1035 DO is=1,npts
1036 lbuf => elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,ipt)
1037 sige(i,1) = sige(i,1) + lbuf%SIG(jj(1) + i) / npg
1038 sige(i,2) = sige(i,2) + lbuf%SIG(jj(2) + i) / npg
1039 sige(i,3) = sige(i,3) + lbuf%SIG(jj(3) + i) / npg
1040 ENDDO
1041 ENDDO
1042 ENDDO
1043
1044 IF (ivisc > 0) THEN
1045 DO i=1,nel
1046 DO ir=1,nptr
1047 DO is=1,npts
1048 lbuf => elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,ipt)
1049 sige(i,1) = sige(i,1) + lbuf%VISC(jj(1) + i) / npg
1050 sige(i,2) = sige(i,2) + lbuf%VISC(jj(2) + i) / npg
1051 sige(i,3) = sige(i,3) + lbuf%VISC(jj(3) + i) / npg
1052 ENDDO
1053 ENDDO
1054 ENDDO
1055 END IF
1056
1057 mat_orth = mat_param(imat)%ORTHOTROPY
1058 IFTHEN
1059 dir_a => elbuf_tab(ng)%BUFLY(il)%DIRA
1061 END IF
1062
1063 DO i=lft,llt
1064 n = nft + i
1065 r4(1) = sige(i,1)
1066 r4(2) = sige(i,2)
1067 r4(3) = sige(i,3)
1068 r4(3) = r4(3) *
invert(el2fa(nni+n))
1069 tens(1,el2fa(nni+n)) = r4(1)
1070 tens(2,el2fa(nni+n)) = r4(2
1071 tens(3,el2fa(nni+n)) = r4(3)
1072 ENDDO
1073
1074 ELSE IF (itens > 600 .AND. itens < 1611) THEN
1075
1076 IF ((igtyp == 10 .OR. igtyp == 11 .OR. igtyp == 16)) THEN
1077 ius = itens - 600
1078 ilay = int((ius - 1)/10)
1079 IF (ilay == 0) ilay = 100
1080 il =
min(ilay, elbuf_tab(ng)%NLAY)
1081
1082 ipt = 1
1083 imat = elbuf_tab(ng)%BUFLY(il)%IMAT
1084 ivisc = mat_param(imat)%IVISC
1085
1086 sige(1:nel,1:3) = zero
1087 DO i=1,nel
1088 DO ir=1,nptr
1089 DO is=1,npts
1090 lbuf => elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,ipt)
1091 sige(i,1) = sige(i,1) + lbuf%SIG(jj(1) + i) / npg
1092 sige(i,2) = sige(i,2) + lbuf%SIG(jj(2) + i) / npg
1093 sige(i,3) = sige(i,3) + lbuf%SIG(jj(3) + i) / npg
1094 ENDDO
1095 ENDDO
1096 ENDDO
1097
1098 IF (ivisc > 0) THEN
1099 DO i=1,nel
1100 DO ir=1,nptr
1101 DO is=1,npts
1102 lbuf => elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,ipt)
1103 sige(i,1) = sige(i,1) + lbuf%VISC(jj(1) + i) / npg
1104 sige(i,2) = sige(i,2) + lbuf%VISC(jj(2) + i
1105 sige(i,3) = sige
1106 ENDDO
1107 ENDDO
1108 ENDDO
1109 END IF
1110
1111 mat_orth = mat_param(imat)%ORTHOTROPY
1112 IF (mat_orth == 2) THEN
1113 dir_a => elbuf_tab(ng)%BUFLY(il)%DIRA
1115 END IF
1116
1117 DO i=lft,llt
1118 n = nft + i
1119 r4(1) = sige(i,1)
1120 r4(2) = sige(i,2)
1121 r4(3) = sige(i,3)
1122 r4(3) = r4(3) *
invert(el2fa(nni+n))
1123 tens(1,el2fa(nni+n)) = r4(1)
1124 tens(2,el2fa(nni+n)) = r4(2)
1125 tens(3,el2fa(nni+n)) = r4(3)
1126 ENDDO
1127 END IF
1128
1129 ELSEIF (itens > 1610 .AND. itens < 1611 +THEN
1130
1131
1132 IF (igtyp == 17 .or. igtyp == 51 .or. igtyp == 52) THEN
1133 sige(1:nel,1:3) = zero
1134 iply = itens - 1610
1135 IF (ply_anim_stress(3*(iply - 1) + 2) == 2) THEN
1136 ipt = ply_anim_stress(3*(iply - 1) + 3)
1137
1138 DO il=1,nlay
1139 IF (igtyp == 17 .OR. igtyp == 51) THEN
1140 id_ply = igeo(1,stack%IGEO(2+il,isubstack))
1141 ELSE IF (igtyp == 52) THEN
1142 id_ply =
ply_info(1,stack%IGEO(2+il,isubstack) - numstack)
1143 END IF
1144 IF (id_ply == ply_anim_stress(3*(iply - 1) + 1)) THEN
1145 imat = elbuf_tab(ng)%BUFLY(il)%IMAT
1146 ivisc = mat_param(imat)%IVISC
1147 IF (ipt <= elbuf_tab(ng)%BUFLY(il)%NPTT) THEN
1148 DO i=1,nel
1149 DO ir=1,nptr
1150 DO is=1,npts
1151 lbuf => elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,ipt)
1152 sige(i,1) = sige(i,1) + lbuf%SIG(jj(1) + i) / npg
1153 sige(i,2) = sige(i,2) + lbuf%SIG(jj(2) + i) / npg
1154 sige(i,3) = sige(i,3) + lbuf%SIG(jj(3) + i) / npg
1155 ENDDO
1156 ENDDO
1157 ENDDO
1158
1159 mat_orth = mat_param(imat)%ORTHOTROPY
1160 IF (mat_orth > 0) THEN
1161 IF (idrape > 0 .AND. (igtyp == 51 .OR. igtyp ==52) ) THEN
1162 dir_a => elbuf_tab(ng)%BUFLY(il)%LBUF_DIR(ipt)%DIRA
1163 dir_b => elbuf_tab(ng)%BUFLY(il)%LBUF_DIR(ipt)%DIRB
1164 ELSE
1165 dir_a => elbuf_tab(ng)%BUFLY(il)%DIRA
1166 dir_b => elbuf_tab(ng)%BUFLY
1167 ENDIF
1168 END IF
1169 IF (mat_orth == 2) THEN
1171 ELSE IF (mat_orth == 3) THEN
1173 END IF
1174
1175 DO i=1,nel
1176 n = nft + i
1177 r4(1) = sige(i,1)
1178 r4(2) = sige(i,2)
1179 r4(3) = sige(i,3)
1180 r4(3) = r4(3) *
invert(el2fa(nni+n))
1181 tens(1,el2fa(nni+n)) = r4(1)
1182 tens(2,el2fa(nni+n)) = r4(2)
1183 tens(3,el2fa(nni+n)) = r4(3)
1184 ENDDO
1185
1186 EXIT
1187 ENDIF
1188 ENDIF
1189 ENDDO
1190 END IF
1191 END IF
1192
1193 ELSE IF (itens == idx_mstress+2 .OR. itens == idx_mstress+3) THEN
1194
1195
1196
1197 IF (itens == idx_mstress+2) THEN
1198 IF (igtyp == 1 .OR. igtyp == 9) THEN
1199 il = 1
1200 ipt = elbuf_tab(ng)%BUFLY(il)%NPTT
1201 ELSE IF (igtyp == 10 .OR. igtyp == 11 .OR. igtyp == 16) THEN
1202 il = elbuf_tab(ng)%NLAY
1203 ipt = 1
1204 ELSE IF (igtyp == 17 .OR. igtyp == 51 .OR. igtypTHEN
1205 il = elbuf_tab(ng)%NLAY
1206 ipt = elbuf_tab(ng)%BUFLY(il)%NPTT
1207 END IF
1208 ELSE IF (itens == idx_mstress+3) THEN
1209 ipt = 1
1210 il = 1
1211 END IF
1212
1213 imat = elbuf_tab(ng)%BUFLY(il)%IMAT
1214 ivisc = mat_param(imat)%IVISC
1215 DO i=1,nel
1216 DO ir=1,nptr
1217 DO is=1,npts
1218 lbuf => elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,ipt)
1219 sige(i,1) = sige(i,1) + lbuf%SIG(jj(1) + i) / npg
1220 sige(i,2) = sige(i,2) + lbuf%SIG(jj(2) + i) / npg
1221 sige(i,3) = sige(i,3) + lbuf%SIG(jj(3) + i) / npg
1222 ENDDO
1223 ENDDO
1224 ENDDO
1225 IF (ivisc > 0) THEN
1226 DO i=1,nel
1227 DO ir=1,nptr
1228 DO is=1,npts
1229 lbuf => elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,ipt)
1230 sige(i,1) = sige(i,1) + lbuf%VISC(jj(1) + i) / npg
1231 sige(i,2) = sige(i,2) + lbuf%VISC(jj(2) + i) / npg
1232 sige(i,3) = sige(i,3) + lbuf%VISC(jj(3) + i) / npg
1233 ENDDO
1234 ENDDO
1235 ENDDO
1236 END IF
1237
1238 DO i=lft,llt
1239 n = i + nft
1240 r4(1) = sige(i,1)
1241 r4(2) = sige(i,2)
1242 r4(3) = sige(i,3)
1243 r4(3) = r4(3) *
invert(el2fa(nni+n))
1244 tens(1,el2fa(nni+n)) = r4(1)
1245 tens(2,el2fa(nni+n)) = r4(2)
1246 tens(3,el2fa(nni+n)) = r4(3)
1247 ENDDO
1248
1249 ELSE IF (itens > idx_mstress+3 .AND. itens < idx_mstress+103) THEN
1250
1251
1252
1253
1254 ipt = itens-100
1255 IF (igtyp == 51 .OR. igtyp == 52) THEN
1256 input_error = 1
1257 ELSE
1258 IF (igtyp == 1 .OR. igtyp == 9) THEN
1259 il = 1
1260 ipt =
min(ipt, elbuf_tab(ng)%BUFLY(1)%NPTT)
1261 ELSE IF (igtyp == 10 .OR. igtyp == 11 .OR. igtyp == 16) THEN
1262 ipt = 1
1263 il =
min(ipt, elbuf_tab
1264 ELSE IF (igtyp == 17) THEN
1265 iply = ipt
1266 ipt = 1
1267 il = 1
1268 DO j=1,nlay
1269 id_ply = igeo(1,stack%IGEO(2+j,isubstack))
1270 IF (id_ply == iply) THEN
1271 il = j
1272 EXIT
1273 END IF
1274 END DO
1275 END IF
1276 imat = elbuf_tab(ng)%BUFLY(il)%IMAT
1277 ivisc = mat_param(imat)%IVISC
1278 DO i=1,nel
1279 DO ir=1,nptr
1280 DO is=1,npts
1281 lbuf => elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,ipt)
1282 sige(i,1) = sige(i,1) + lbuf%SIG(jj(1) + i) / npg
1283 sige(i,2) = sige(i,2) + lbuf%SIG(jj(2) + i) / npg
1284 sige(i,3) = sige(i,3) + lbuf%SIG(jj(3) + i) / npg
1285 ENDDO
1286 ENDDO
1287 ENDDO
1288 IF (ivisc > 0) THEN
1289 DO i=1,nel
1290 DO ir=1,nptr
1291 DO is=1,npts
1292 lbuf => elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,ipt)
1293 sige(i,1) = sige(i,1) + lbuf%VISC(jj(1) + i) / npg
1294 sige(i,2) = sige(i
1295 sige(i,3) = sige(i,3) + lbuf%VISC(jj(3) + i) / npg
1296 ENDDO
1297 ENDDO
1298 ENDDO
1299 END IF
1300
1301 DO i=lft,llt
1302 n = i + nft
1303 r4(1) = sige(i,1)
1304 r4(2) = sige(i,2)
1305 r4(3) = sige(i,3)
1306 r4(3) = r4(3) *
invert(el2fa(nni+n))
1307 tens(1,el2fa(nni+n)) = r4(1)
1308 tens(2,el2fa(nni+n)) = r4(2)
1309 tens(3,el2fa(nni+n)) = r4(3)
1310 ENDDO
1311 END IF
1312
1313
1314 ELSEIF (itens > idx_idply_mstress .AND.
1315 . itens < idx_idply_mstress + mx_ply_anim ) THEN
1316
1317
1318 IF (igtyp == 17 .or. igtyp == 51 .or. igtyp == 52) THEN
1319 sige(1:nel,1:3) = zero
1320 iply = itens - idx_idply_mstress
1321 IF (ply_anim_stress(3*(iply - 1) + 2) == 3) THEN
1322
1323 ipt = ply_anim_stress(3*(iply - 1) + 3)
1324 DO il=1,nlay
1325 IF (igtyp == 17 .OR. igtyp == 51) THEN
1326 id_ply = igeo(1,stack%IGEO(2+il,isubstack))
1327 ELSE IF (igtyp == 52) THEN
1328 id_ply =
ply_info(1,stack%IGEO(2+il,isubstack) - numstack)
1329 END IF
1330 IF (id_ply == iply) THEN
1331 imat = elbuf_tab(ng)%BUFLY(il)%IMAT
1332 ivisc = mat_param(imat)%IVISC
1333 IF (ipt <= elbuf_tab(ng)%BUFLY(il)%NPTT) THEN
1334 DO i=1,nel
1335 DO ir=1,nptr
1336 DO is=1,npts
1337 lbuf => elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,ipt)
1338 sige(i,1) = sige(i,1) + lbuf%SIG(jj(1) + i) / npg
1339 sige(i,2) = sige(i,2) + lbuf%SIG(jj(2) + i) / npg
1340 sige(i,3) = sige(i,3) + lbuf%SIG(jj(3) + i) / npg
1341 ENDDO
1342 ENDDO
1343 ENDDO
1344
1345 DO i=1,nel
1346 n = nft + i
1347 r4(1) = sige(i,1)
1348 r4(2) = sige(i,2)
1349 r4(3) = sige(i,3)
1350 r4(3) = r4(3) *
invert(el2fa(nni+n))
1351 tens(1,el2fa(nni+n)) = r4(1)
1352 tens(2,el2fa(nni+n)) = r4(2)
1353 tens(3,el2fa(nni+n)) = r4(3)
1354 ENDDO
1355
1356 EXIT
1357 ENDIF
1358 ENDIF
1359 ENDDO
1360 END IF
1361 END IF
1362
1363 ELSE IF (itens >= 1 .and. itens <= 4) THEN
1364
1365 DO i=lft,llt
1366 n = i + nft
1367 DO j=1,3
1368 r4(j) = a1 * gbuf%FOR(jj(j)+i) + a2 * gbuf%MOM(jj(j)+i)
1369 ENDDO
1370 r4(3) = r4(3) *
invert(el2fa(nni+n))
1371 tens(1,el2fa(nni+n)) = r4(1)
1372 tens(2,el2fa(nni+n)) = r4(2)
1373 tens(3,el2fa(nni+n)) = r4(3)
1374 ENDDO
1375 ENDIF
1376
1377 ELSEIF (istre == 0 .AND. istrain > 0) THEN
1378
1379
1380
1381 IF (itens == 5) THEN
1382 DO i=lft,llt
1383 n = i + nft
1384 thk = gbuf%THK(i)
1385 j = el2fa(nni+n)
1386 r4(1) = gbuf%STRA(jj(1)+i)
1387 r4(2) = gbuf%STRA(jj(2)+i)
1388 r4(3) = gbuf%STRA(jj(3)+i) *
invert(j)*half
1389 tens(1,j) = r4(1)
1390 tens(2,j) = r4(2)
1391 tens(3,j) = r4(3)
1392 ENDDO
1393 ELSE
1394 DO i=lft,llt
1395 n = i + nft
1396 thk = gbuf%THK(i)
1397 j = el2fa(nni+n)
1398 r4(1) = a1*gbuf%STRA(jj(1)+i) + a2*gbuf%STRA(jj(6)+i) * thk
1399 r4(2) = a1*gbuf%STRA(jj(2)+i) + a2*gbuf%STRA(jj(7)+i) * thk
1400 r4(3) = a1*gbuf%STRA(jj(3)+i) + a2*gbuf%STRA(jj(8)+i) * thk
1401 r4(3) = r4(3) *
invert(j) * half
1402 tens(1,j) = r4(1)
1403 tens(2,j) = r4(2)
1404 tens(3,j) = r4(3)
1405 ENDDO
1406 ENDIF
1407
1408 ELSEIF (istre == 2) THEN
1409
1410
1411
1412
1413 DO i=lft,llt
1414 n = i + nft
1415 thk = gbuf%THK(i)
1416 IF (itens /= 92) THEN
1417 DO j=1,3
1418 r4(j) = a1*epsdot(j,n+n0) + a2*epsdot(j+3,n+n0)*thk
1419 ENDDO
1420 ELSE
1421 DO j=1,3
1422 r4(j) = epsdot(j+3,n+n0)
1423 ENDDO
1424 ENDIF
1425 r4(3) = r4(3) *
invert(el2fa(nni+n)) * half
1426 tens(1,el2fa(nni+n)) = r4(1)
1427 tens(2,el2fa(nni+n)) = r4(2)
1428 tens(3,el2fa(nni+n)) = r4(3)
1429 ENDDO
1430 ENDIF
1431 ENDIF
1432 ENDIF
1433
1434 IF(ALLOCATED(matly)) DEALLOCATE(matly)
1435 IF(ALLOCATED(thkly)) DEALLOCATE(thkly)
1436 IF(ALLOCATED(posly)) DEALLOCATE(posly)
1437 IF(ALLOCATED(thk_ly)) DEALLOCATE(thk_ly)
1438
1439 490 CONTINUE
1440 500 CONTINUE
1441
1442 IF (nspmd == 1)THEN
1443 DO n=1,nbf
1444 r4(1) = tens(1,n)
1445 r4(2) = tens(2,n)
1446 r4(3) = tens(3,n)
1448 ENDDO
1449 ELSE
1450 DO n = 1, nbf_l
1451 wa(3*n-2) = tens(1,n)
1452 wa(3*n-1) = tens(2,n)
1453 wa(3*n ) = tens(3,n)
1454 ENDDO
1455 IF (ispmd == 0) THEN
1456 buf = (numelqg+numelcg+numeltgg)*3
1457 ELSE
1458 buf = 1
1459 ENDIF
1461 ENDIF
1462
1463 IF (nelcut > 0) THEN
1464 IF (nspmd == 1) THEN
1465 DO i=1,nelcut
1467 ENDDO
1468 ELSEIF (ispmd == 0) THEN
1469
1470 DO i=1,nelcut
1472 ENDDO
1473 ENDIF
1474 ENDIF
1475
1476 DEALLOCATE(wa)
1477 RETURN
subroutine invert(matrix, inverse, n, errorflag)
subroutine layini(elbuf_str, jft, jlt, geo, igeo, mat, pid, thkly, matly, posly, igtyp, ixfem, ixlay, nlay, npt, isubstack, stack, drape, nft, thk, nel, ratio_thkly, indx_drape, sedrape, numel_drape)
integer, dimension(:,:), allocatable ply_info
subroutine spmd_r4get_partn(size, nbf_l, nbpart, iadg, wal, buf)
subroutine uroto_tens2d(nel, sig, dir)
subroutine uroto_tens2d_aniso(nel, tens, dir_a, dir_b)
void write_r_c(float *w, int *len)