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