48
49
50
51 USE elbufdef_mod
54 USE my_alloc_mod
55 use element_mod , only : nixc,nixtg
56
57
58
59#include "implicit_f.inc"
60
61
62
63#include "mvsiz_p.inc"
64#include "com01_c.inc"
65#include "com04_c.inc"
66#include "param_c.inc"
67#include "units_c.inc"
68#include "scr14_c.inc"
69#include "scr16_c.inc"
70#include "task_c.inc"
71
72
73
74 INTEGER SIZP0
75 INTEGER IXC(NIXC,*),IXTG(NIXTG,*),
76 . IPARG(NPARG,*),IPM(NPROPMI,*),IGEO(NPROPGI,*),
77 . IPARTC(*), IPARTTG(*), IPART_STATE(*),
78 . STAT_INDXC(*), STAT_INDXTG(*)
80 . thke(*),x(3,*),geo(*)
81 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
82 TYPE (STACK_PLY) :: STACK
83 TYPE (DRAPE_) :: DRAPE_SH4N(NUMELC_DRAPE), DRAPE_SH3N(NUMELTG_DRAPE)
84 TYPE (DRAPEG_) :: DRAPEG
85 double precision WA(*),WAP0(*)
86
87
88
89 INTEGER I, J, K, N, JJ, LEN, IOFF, NG, NEL, NFT, ITY, LFT, NPT,
90 . LLT, MLW, ISTRAIN,ID, IPRT0, IPRT,NPG,IPG,IE,,NPTS,G_STRA,
91 . ITHK,KK(8),NF1,IGTYP,IREL,,NLAY,IBID0,MAT_1,PID_1,ILAY,NF3,
92 . SEDRAPE,NUMEL_DRAPE
93 INTEGER,DIMENSION(:),ALLOCATABLE :: PTWA
94 INTEGER,DIMENSION(:),ALLOCATABLE :: PTWA_P0
95 double precision
96 . THK, EM, EB, H1, H2, H3
97 CHARACTER*100 DELIMIT,LINE
98 TYPE(G_BUFEL_) ,POINTER :: GBUF
99
100 TYPE(BUF_LAY_) ,POINTER :: BUFLY
101 INTEGER LAYNPT_MAX,NLAY_MAX,ISUBSTACK,IPT_ALL,NPTT,,IPT,NPT_ALL,MPT
103 . DIMENSION(:),POINTER :: strain
105 . qt(9,mvsiz),straing(6),zh,thkp ,thk0(mvsiz)
106 INTEGER, DIMENSION(:) , ALLOCATABLE :: MATLY
107 my_real,
DIMENSION(:) ,
ALLOCATABLE :: thkly
108 my_real,
DIMENSION(:,:) ,
ALLOCATABLE :: posly,thk_ly
109
110
111 DATA delimit(1:60)
112 ./'#---1----|----2----|----3----|----4----|----5----|----6----|'/
113 DATA delimit(61:100)
114 ./'----7----|----8----|----9----|----10---|'/
115
116
117
118 CALL my_alloc(ptwa,
max(stat_numelc ,stat_numeltg))
119 ALLOCATE(ptwa_p0(0:
max(1,stat_numelc_g,stat_numeltg_g)))
120
121 jj = 0
122 IF(stat_numelc==0) GOTO 200
123
124 ie=0
125 DO ng=1,ngroup
126 ity =iparg(5,ng)
127 IF (ity == 3) THEN
128 gbuf => elbuf_tab(ng)%GBUF
129 mlw =iparg(1,ng)
130 nel =iparg(2,ng)
131 nft =iparg(3,ng)
132 npt = iparg(6,ng)
133 ithk =iparg(28,ng)
134 nptr = elbuf_tab(ng)%NPTR
135 npts = elbuf_tab(ng)%NPTS
136 nlay = elbuf_tab(ng)%NLAY
137 ihbe =iparg(23,ng)
138 igtyp= iparg(38,ng)
139 isubstack=iparg(71,ng)
140 npg = nptr*npts
141 IF (ihbe == 23 .AND. gbuf%G_STRPG>gbuf%G_STRA) npg=4
142 IF (ihbe == 23 .AND. npg/=4) cycle
143 lft=1
144 llt=nel
145 g_stra = gbuf%G_STRA
146 nf1 = nft+1
147 IF (ihbe>10.OR.igtyp==16.OR.ishfram ==0) THEN
148 irel=0
149 ELSEIF (ishfram ==1) THEN
150 irel=2
151 ELSE
152 irel=1
153 END IF
154
155 DO j=1,8
156 kk(j) = nel*(j-1)
157 ENDDO
158
159 ibid0 = 0
160 mat_1 = ixc(1,nf1)
161 pid_1 = ixc(6,nf1)
162 IF (ithk >0 ) THEN
163 thk0(lft:llt) = gbuf%THK(lft:llt)
164 ELSE
165 thk0(lft:llt) = thke(lft+nft:llt+nft)
166 END IF
167
168 laynpt_max = 1
169 IF(igtyp == 51 .OR. igtyp == 52) THEN
170 DO ilay=1, nlay
171 laynpt_max =
max(laynpt_max , elbuf_tab(ng)%BUFLY(ilay)%NPTT)
172 ENDDO
173 ENDIF
174 nlay_max =
max(nlay,npt, elbuf_tab(ng)%NLAY)
175 ALLOCATE(matly(mvsiz*nlay_max), thkly(mvsiz*nlay_max*laynpt_max),
176 . posly(mvsiz,nlay_max*laynpt_max),thk_ly(nel,nlay_max*laynpt_max))
177 matly = 0
178 thkly = zero
179 posly = zero
180 thk_ly = zero
183 CALL layini(elbuf_tab(ng),lft ,llt ,geo ,igeo ,
184 . mat_1 ,pid_1 ,thkly ,matly ,posly ,
185 . igtyp ,ibid0 ,ibid0 ,nlay ,npt ,
186 . isubstack,stack ,drape_sh4n ,nft ,thke ,
187 . nel ,thk_ly ,drapeg%INDX_SH4N ,sedrape,numel_drape)
188 CALL get_q4l(lft ,llt ,ixc(1,nf1),x ,gbuf%OFF,irel ,qt )
189 npt_all = 0
190 DO ilay=1,nlay
191 npt_all = npt_all + elbuf_tab(ng)%BUFLY(ilay)%NPTT
192 ENDDO
194 IF (npt==0) mpt=0
195
196 DO i=lft,llt
197 n = i + nft
198
199 iprt=ipartc(n)
200 IF(ipart_state(iprt)==0)cycle
201
202 jj = jj + 1
203 IF (mlw /= 0 .AND. mlw /= 13) THEN
204 wa(jj) = gbuf%OFF(i)
205 ELSE
206 wa(jj) = zero
207 ENDIF
208 jj = jj + 1
209 wa(jj) = iprt
210 jj = jj + 1
211 wa(jj) = ixc(nixc,n)
212 jj = jj + 1
213
214 wa(jj) = mpt
215 jj = jj + 1
216 wa(jj) = npg
217 jj = jj + 1
218 IF (mlw /= 0 .AND. mlw /= 13) THEN
219 wa(jj) = thk0(i)
220 ELSE
221 wa(jj) = zero
222 ENDIF
223 thkp = wa(jj)
224
225 IF (mlw == 0 .or. mlw == 13) THEN
226 DO ipg=1,npg
227 DO j=1,14
228 jj = jj + 1
229 wa(jj)=zero
230 END DO
231 END DO
232 ELSEIF (npt==0 .AND. g_stra /= 0) THEN
233 IF (npg > 1) THEN
234 strain => gbuf%STRPG
235 ELSE
236 strain => gbuf%STRA
237 ENDIF
238
239 DO ipg=1,npg
240 k = (ipg-1)*nel*g_stra
241 straing(1:2)=strain(kk(1:2)+i+k)
242 straing(3:5)=half*strain(kk(3:5)+i+k)
244
245 DO j=1,6
246 jj = jj + 1
247 wa(jj) = straing(j)
248 END DO
249 jj = jj + 1
250 wa(jj) = zero
251 END DO
252
253 DO ipg=1,npg
254 k = (ipg-1)*nel*g_stra
255 zh = half*thkp
256 straing(1:3)=strain(kk(1:3)+i+k)+zh*strain(kk(6:8)+i+k)
257 straing(3)=half*straing(3)
258 straing(4:5)=half*strain(kk(4:5)+i+k)
260
261 DO j=1,6
262 jj = jj + 1
263 wa(jj) = straing(j)
264 END DO
265 jj = jj + 1
266 wa(jj) = one
267 END DO
268 ELSEIF (g_stra /= 0) THEN
269 IF (npg > 1) THEN
270 strain => gbuf%STRPG
271 ELSE
272 strain => gbuf%STRA
273 ENDIF
274 ipt_all = 0
275 DO ilay =1,nlay
276 bufly => elbuf_tab(ng)%BUFLY(ilay)
277 nptt = bufly%NPTT
278 DO it=1,nptt
279 ipt = ipt_all + it
280
281 DO ipg=1,npg
282 k = (ipg-1)*nel*g_stra
283 zh = posly(i,ipt)*thkp
284 straing(1:3)=strain(kk(1:3)+i+k)+zh*strain(kk(6:8)+i+k)
285 straing(3)=half*straing(3)
286 straing(4:5)=half*strain(kk(4:5)+i+k)
288
289 DO j=1,6
290 jj = jj + 1
291 wa(jj) = straing(j)
292 END DO
293 jj = jj + 1
294 wa(jj) = posly(i,ipt)*two
295 END DO
296 END DO
297 ipt_all = ipt_all + nptt
298 END DO
299 END IF
300
301 ie=ie+1
302
303 ptwa(ie)=jj
304
305 ENDDO
306 DEALLOCATE(matly, thkly, posly, thk_ly)
307 END IF
308 ENDDO
309
310 200 CONTINUE
311
312 IF(nspmd == 1)THEN
313 ptwa_p0(0)=0
314 DO n=1,stat_numelc
315 ptwa_p0(n)=ptwa(n)
316 END DO
317 len=jj
318 DO j=1,len
319 wap0(j)=wa(j)
320 END DO
321 ELSE
322
324 len = 0
326 END IF
327
328 IF(ispmd==0.AND.len>0) THEN
329
330 iprt0=0
331 DO n=1,stat_numelc_g
332
333
334 k=stat_indxc(n)
335
336 j=ptwa_p0(k-1)
337
338 ioff = nint(wap0(j + 1))
339 IF(ioff >= 1)THEN
340 iprt = nint(wap0(j + 2))
341 IF(iprt /= iprt0)THEN
342 IF (izipstrs == 0) THEN
343 WRITE(iugeo,'(A)') delimit
344 WRITE(iugeo,'(A)')'/INISHE/STRA_F/GLOB'
345 WRITE(iugeo,'(A)')
346 .'#------------------------ REPEAT --------------------------'
347 WRITE(iugeo,'(A)')
348 . '# SHELLID NPT NPG THK'
349 WRITE(iugeo,'(A/A/A)')
350 .'# REPEAT I=1,NPG :',
351 .'# E11, E22, E33,',
352 .'# E12, E23, E31, T,'
353 WRITE(iugeo,'(A)')
354 .'#---------------------- END REPEAT ------------------------'
355 WRITE(iugeo,'(A)') delimit
356 ELSE
357 WRITE(line,'(A)') delimit
359 WRITE(line,'(A)')'/INISHE/STRA_F/GLOB'
361 WRITE(line,'(A)')
362 .'#------------------------ REPEAT --------------------------'
364 WRITE(line,'(A)')
365 . '# SHELLID NPT NPG THK'
367 WRITE(line,'(A)')'# REPEAT I=1,NPG :'
369 WRITE(line,'(A)')'# E11, E22, E33,'
371 WRITE(line,'(A)')'# E12, E23, E31, T '
373 WRITE(line,'(A)')
374 .'#---------------------- END REPEAT ------------------------'
376 WRITE(line,'(A)') delimit
378 ENDIF
379 iprt0=iprt
380 END IF
381 id = nint(wap0(j + 3))
382 npt = nint(wap0(j + 4))
383 npg = nint(wap0(j + 5))
384 thk = wap0(j + 6)
385 j = j + 6
386 IF (izipstrs == 0) THEN
387 WRITE(iugeo,
'(3I10,1PE20.13)')
id,npt,npg,thk
388 ELSE
389 WRITE(line,
'(3I10,1PE20.13)')
id,npt,npg,thk
391 ENDIF
392 IF (npt == 0) THEN
393 DO ipg=1,npg
394 IF (izipstrs == 0) THEN
395 WRITE(iugeo,'(1P3E20.13)')(wap0(j + k),k=1,3)
396 WRITE(iugeo,'(1P4E20.13)')(wap0(j + k),k=4,7)
397 ELSE
400 ENDIF
401 j = j + 7
402 END DO
403
404 DO ipg=1,npg
405 IF (izipstrs == 0) THEN
406 WRITE(iugeo,'(1P3E20.13)')(wap0(j + k),k=1,3)
407 WRITE(iugeo,'(1P4E20.13)')(wap0(j + k),k=4,7)
408 ELSE
411 ENDIF
412 j = j + 7
413 END DO
414 ELSE
415 DO it=1,npt
416 DO ipg=1,npg
417 IF (izipstrs == 0) THEN
418 WRITE(iugeo,'(1P3E20.13)')(wap0(j + k),k=1,3)
419 WRITE(iugeo,'(1P4E20.13)')(wap0(j + k),k=4,7)
420 ELSE
423 ENDIF
424 j = j + 7
425 END DO
426 END DO
427 ENDIF
428 END IF
429
430 ENDDO
431 ENDIF
432
433
434
435 jj = 0
436 IF (stat_numeltg==0) GOTO 300
437 ie=0
438
439 DO ng=1,ngroup
440 ity =iparg(5,ng)
441 IF (ity == 7) THEN
442 gbuf => elbuf_tab(ng)%GBUF
443 g_stra = gbuf%G_STRA
444 mlw =iparg(1,ng)
445 nel =iparg(2,ng)
446 nft =iparg(3,ng)
447 npt = iparg(6,ng)
448 ithk = iparg(28,ng)
449 ihbe =iparg(23,ng)
450 igtyp= iparg(38,ng)
451 isubstack=iparg(71,ng)
452 nptr = elbuf_tab(ng)%NPTR
453 npts = elbuf_tab(ng)%NPTS
454 nlay = elbuf_tab(ng)%NLAY
455 npg = nptr*npts
456 lft=1
457 llt=nel
458 nf1 = nft+1
459 IF (ihbe>=30) THEN
460 irel=0
461 ELSE
462 irel=2
463 END IF
464
465 DO j=1,8
466 kk(j) = nel*(j-1)
467 ENDDO
468
469 ibid0 = 0
470 mat_1 = ixtg(1,nf1)
471 pid_1 = ixtg(nixtg-1,nf1)
472 IF (ithk >0 ) THEN
473 thk0(lft:llt) = gbuf%THK(lft:llt)
474 ELSE
475 nf3 = nft+numelc
476 thk0(lft:llt) = thke(lft+nf3:llt+nf3)
477 END IF
478
479 laynpt_max = 1
480 IF(igtyp == 51 .OR. igtyp == 52) THEN
481 DO ilay=1, nlay
482 laynpt_max =
max(laynpt_max , elbuf_tab(ng)%BUFLY(ilay)%NPTT)
483 ENDDO
484 ENDIF
485 nlay_max =
max(nlay,npt, elbuf_tab(ng)%NLAY)
486 ALLOCATE(matly(mvsiz*nlay_max), thkly(mvsiz*nlay_max*laynpt_max),
487 . posly(mvsiz,nlay_max*laynpt_max),thk_ly(nel,nlay_max*laynpt_max))
488 matly = 0
489 thkly = zero
490 posly = zero
491 thk_ly = zero
494 CALL layini(elbuf_tab(ng),lft ,llt ,geo ,igeo ,
495 . mat_1 ,pid_1 ,thkly ,matly ,posly ,
496 . igtyp ,ibid0 ,ibid0 ,nlay ,npt ,
497 . isubstack,stack ,drape_sh3n ,nft ,thke ,
498 . nel ,thk_ly ,drapeg%INDX_SH3N,sedrape,numel_drape
499 CALL get_t3l(lft ,llt ,ixtg(1,nf1),x ,gbuf%OFF,
500 . irel ,qt )
501 npt_all = 0
502 DO ilay=1,nlay
503 npt_all = npt_all + elbuf_tab(ng)%BUFLY(ilay)%NPTT
504 ENDDO
506 IF (npt==0) mpt=0
507
508 DO i=lft,llt
509 n = i + nft
510
511 iprt=iparttg(n)
512 IF(ipart_state(iprt)==0)cycle
513
514
515 jj = jj + 1
516 IF (mlw /= 0 .AND. mlw /= 13) THEN
517 wa(jj) = gbuf%OFF(i)
518 ELSE
519 wa(jj) = zero
520 ENDIF
521 jj = jj + 1
522 wa(jj) = iprt
523 jj = jj + 1
524 wa(jj) = ixtg(nixtg,n)
525 jj = jj + 1
526 wa(jj) = mpt
527 jj = jj + 1
528 wa(jj) = npg
529 jj = jj + 1
530 IF (mlw /= 0 .AND. mlw /= 13) THEN
531 wa(jj) = thk0(i)
532 ELSE
533 wa(jj) = zero
534 ENDIF
535 thkp = wa(jj)
536
537
538 IF (mlw == 0 .or. mlw == 13) THEN
539 DO ipg=1,npg
540 DO j=1,14
541 jj = jj + 1
542 wa(jj) = zero
543 END DO
544 END DO
545 ELSEIF (npt==0 .AND. g_stra /= 0) THEN
546 IF (npg > 1) THEN
547 strain => gbuf%STRPG
548 ELSE
549 strain => gbuf%STRA
550 ENDIF
551
552 DO ipg=1,npg
553 k = (ipg-1)*nel*g_stra
554 straing(1:2)=strain(kk(1:2)+i+k)
555 straing(3:5)=half*strain(kk(3:5)+i+k)
557
558 DO j=1,6
559 jj = jj + 1
560 wa(jj) = straing(j)
561 END DO
562 jj = jj + 1
563 wa(jj) = zero
564 END DO
565
566 DO ipg=1,npg
567 k = (ipg-1)*nel*g_stra
568 zh = 1.0*thkp
569 straing(1:3)=strain(kk(1:3)+i+k)+zh*strain(kk(6:8)+i+k)
570 straing(3)=half*straing(3)
571 straing(4:5)=half*strain(kk(4:5)+i+k)
573
574 DO j=1,6
575 jj = jj + 1
576 wa(jj) = straing(j)
577 END DO
578 jj = jj + 1
579 wa(jj) = one
580 END DO
581 ELSEIF (g_stra > 0) THEN
582 IF (npg > 1) THEN
583 strain => gbuf%STRPG
584 ELSE
585 strain => gbuf%STRA
586 ENDIF
587 ipt_all = 0
588 DO ilay =1,nlay
589 bufly => elbuf_tab(ng)%BUFLY(ilay)
590 nptt = bufly%NPTT
591 DO it=1,nptt
592 ipt = ipt_all + it
593
594 DO ipg=1,npg
595 k = (ipg-1)*nel*g_stra
596 zh = posly(i,ipt)*thkp
597 straing(1:3)=strain(kk(1:3)+i+k)+zh*strain(kk(6:8)+i+k)
598 straing(3)=half*straing(3)
599 straing(4:5)=half*strain(kk(4:5)+i+k)
601
602 DO j=1,6
603 jj = jj + 1
604 wa(jj) = straing(j)
605 END DO
606 jj = jj + 1
607 wa(jj) = posly(i,ipt)*two
608 END DO
609 END DO
610 ipt_all = ipt_all + nptt
611 END DO
612 END IF
613
614 ie=ie+1
615
616 ptwa(ie)=jj
617
618 ENDDO
619 DEALLOCATE(matly, thkly, posly, thk_ly)
620 END IF
621 ENDDO
622
623 300 CONTINUE
624
625 IF(nspmd == 1)THEN
626 len=jj
627 DO j=1,len
628 wap0(j)=wa(j)
629 END DO
630 ptwa_p0(0)=0
631 DO n=1,stat_numeltg
632 ptwa_p0(n)=ptwa(n)
633 END DO
634 ELSE
635
637 len = 0
639 END IF
640
641 IF(ispmd==0.AND.len>0) THEN
642
643 iprt0=0
644 DO n=1,stat_numeltg_g
645
646
647 k=stat_indxtg(n)
648
649 j=ptwa_p0(k-1)
650
651 ioff = nint(wap0(j + 1))
652 IF(ioff >= 1)THEN
653 iprt = nint(wap0(j + 2))
654 IF(iprt /= iprt0)THEN
655 IF (izipstrs == 0) THEN
656 WRITE(iugeo,'(A)') delimit
657 WRITE(iugeo,'(A)')'/INISH3/STRA_F/GLOB'
658 WRITE(iugeo,'(A)')
659 .'#------------------------ REPEAT --------------------------'
660 WRITE(iugeo,'(A)')
661 . '# SH3NID NPT NPG THK'
662 WRITE(iugeo,'(A/A/A)')
663 .'# REPEAT I=1,NPG :',
664 .'# E11, E22, E33,',
665 .'# E12, E23, E31, T '
666 WRITE(iugeo,'(A)')
667 .'#---------------------- END REPEAT ------------------------'
668 WRITE'(A)'
669 ELSE
670 WRITE(line,'(A)') delimit
672 WRITE(line,'(A)')'/INISH3/STRA_F/GLOB'
674 WRITE(line,'(A)')
675 .'#------------------------ REPEAT --------------------------'
677 WRITE(line,'(A)')
678 . '# SH3NID NPT NPG THK'
680 WRITE(line,'(A)')'# REPEAT I=1,NPG :'
682 WRITE(line,'(A)')'# E11, E22, E33,'
684 WRITE(line,'(A)')'# E12, E23, E31, T '
686 WRITE(line,'(A)')
687 .'#---------------------- END REPEAT ------------------------'
689 WRITE(line,'(A)') delimit
691 END IF
692 iprt0=iprt
693 END IF
694 id = nint(wap0(j + 3))
695 npt = nint(wap0(j + 4))
696 npg = nint(wap0(j + 5))
697 thk = wap0(j + 6)
698 j = j + 6
699 IF (izipstrs == 0) THEN
700 WRITE(iugeo,
'(3I10,1PE20.13)')
id,npt,npg,thk
701 ELSE
702 WRITE(line,
'(3I10,1PE20.13)')
id,npt,npg,thk
704 ENDIF
705 IF (npt == 0) THEN
706 DO ipg=1,npg
707 IF (izipstrs == 0) THEN
708 WRITE(iugeo,'(1P3E20.13)')(wap0(j + k),k=1,3)
709 WRITE(iugeo,'(1P4E20.13)')(wap0(j + k),k=4,7)
710 ELSE
713 ENDIF
714 j = j + 7
715 END DO
716
717 DO ipg=1,npg
718 IF (izipstrs == 0) THEN
719 WRITE(iugeo,'(1P3E20.13)')(wap0(j + k),k=1,3)
720 WRITE(iugeo,'(1P4E20.13)')(wap0(j + k),k=4,7)
721 ELSE
724 ENDIF
725 j = j + 7
726 END DO
727 ELSE
728 DO it=1,npt
729 DO ipg=1,npg
730 IF (izipstrs == 0) THEN
731 WRITE(iugeo,'(1P3E20.13)')(wap0(j + k),k=1,3)
732 WRITE(iugeo,'(1P4E20.13)')(wap0(j + k),k=4,7)
733 ELSE
736 ENDIF
737 j = j + 7
738 END DO
739 END DO
740 ENDIF
741 END IF
742
743 ENDDO
744 ENDIF
745
746
747 DEALLOCATE(ptwa)
748 DEALLOCATE(ptwa_p0)
749
750 RETURN
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)
subroutine spmd_rgather9_dp(v, len, vp0, lenp0, iad)
subroutine spmd_stat_pgather(ptv, ptlen, ptv_p0, ptlen_p0)
subroutine strs_txt50(text, length)
subroutine tab_strs_txt50(wap0, cpt, j, sizp0, nbpline)
subroutine get_t3l(jft, jlt, ixtg, x, offg, irel, vq)
subroutine get_q4l(jft, jlt, ixc, x, offg, irel, vq)
subroutine shell2g(eps, qt)