49
50
51
52 USE elbufdef_mod
55 USE my_alloc_mod
56
57
58
59#include "implicit_f.inc"
60
61
62
63#include "com01_c.inc"
64#include "com04_c.inc"
65#include "mvsiz_p.inc"
66#include "param_c.inc"
67#include "units_c.inc"
68#include "task_c.inc"
69#include "scr14_c.inc"
70#include "scr16_c.inc"
71
72
73
74 INTEGER SIZLOC,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_) :: (NUMELC_DRAPE), DRAPE_SH3N(NUMELTG_DRAPE)
84 TYPE (DRAPEG_) :: DRAPEG
85 double precision WA(*),WAP0(*)
86
87
88
89 INTEGER I,J,K,N,II,JJ,LEN,IOFF,IE,NG,NEL,NFT,LFT,NPT,
90 . LLT,ITY,MLW,IH,IHBE, ID, IPRT0, IPRT,IR,IS,IT,J1,J2,
91 . NPG,IPG,MPT,IPT,NPTR,NPTS,NPTT,NLAY,,ITHK,NF3,
92 . IGTYP,NPT_ALL,IL,KK(12),NF1,IREL,IBID0,MAT_1,PID_1,ILAY,IDRAPE,
93 . SEDRAPE,NUMEL_DRAPE
94 INTEGER,DIMENSION(:),ALLOCATABLE :: PTWA
95 INTEGER,DIMENSION(:),ALLOCATABLE :: PTWA_P0
96 double precision
97 . THK, EM, EB, H1, H2, H3
99 . pg,mpg,qpg(2,4),thkq,
100 . sk(2),st(2),mk(2),mt(2),shk(2),sht(2),zz
101 CHARACTER*100 DELIMIT,LINE
102 TYPE(G_BUFEL_) ,POINTER :: GBUF
103 TYPE(L_BUFEL_) ,POINTER :: LBUF
104 TYPE(BUF_LAY_) ,POINTER :: BUFLY
105 INTEGER LAYNPT_MAX,NLAY_MAX,ISUBSTACK,IPT_ALL,JDIR,L_DIRA,L_DIRB,IREP,
106 . ILAW
108 . DIMENSION(:),POINTER :: dir_a,dir_b
110 . qt(9,mvsiz),tens(6),zh,thkp ,thk0(mvsiz)
111
112 INTEGER, DIMENSION(:) , ALLOCATABLE :: MATLY
113 my_real,
DIMENSION(:) ,
ALLOCATABLE :: thkly
114 my_real,
DIMENSION(:,:) ,
ALLOCATABLE :: posly
115 my_real,
ALLOCATABLE,
DIMENSION(:) ,
TARGET :: dira
116
117 PARAMETER (pg = .577350269189626)
118 parameter(mpg=-.577350269189626)
119 DATA qpg/mpg,mpg,pg,mpg,pg,pg,mpg,pg/
120 DATA delimit(1:60)
121 ./'#---1----|----2----|----3----|----4----|----5----|----6----|'/
122 DATA delimit(61:100)
123 ./'----7----|----8----|----9----|----10---|'/
124
125 CALL my_alloc(ptwa,
max(stat_numelc ,stat_numeltg))
126 ALLOCATE(ptwa_p0(0:
max(1,stat_numelc_g,stat_numeltg_g)))
127
128
129
130 jj = 0
131 IF (stat_numelc==0) GOTO 200
132
133 ie=0
134 DO ng=1,ngroup
135 ity = iparg(5,ng)
136 IF (ity == 3) THEN
137 gbuf => elbuf_tab(ng)%GBUF
138 mlw = iparg(1,ng)
139 nel = iparg(2,ng)
140 nft = iparg(3,ng)
141 mpt = iparg(6,ng)
142 ihbe = iparg(23,ng)
143 ithk = iparg(28,ng)
144 igtyp= iparg(38,ng)
145 irep = iparg(35,ng)
146 isubstack=iparg(71,ng)
147 idrape= iparg(92,ng)
148 nptr = elbuf_tab(ng)%NPTR
149 npts = elbuf_tab(ng)%NPTS
150 nptt = elbuf_tab(ng)%NPTT
151 nlay = elbuf_tab(ng)%NLAY
152 npg = nptr*npts
153 npt = nlay*nptt
154 IF (ihbe == 23) npg=4
155 lft=1
156 llt=nel
157 nf1 = nft+1
158 IF (ihbe>10.OR.igtyp==16.OR.ishfram ==0) THEN
159 irel=0
160 ELSEIF (ishfram ==1) THEN
161 irel=2
162 ELSE
163 irel=1
164 END IF
165
166 DO i=1,12
167 kk(i) = nel*(i-1)
168 ENDDO
169
170 ibid0 = 0
171 mat_1 = ixc(1,nf1)
172 pid_1 = ixc(6,nf1)
173 IF (ithk >0 ) THEN
174 thk0(lft:llt) = gbuf%THK(lft:llt)
175 ELSE
176 thk0(lft:llt) = thke(lft+nft:llt+nft)
177 END IF
178
179 laynpt_max = 1
180 IF(igtyp == 51 .OR. igtyp == 52) THEN
181 DO ilay=1, elbuf_tab(ng)%NLAY
182 laynpt_max =
max(laynpt_max , elbuf_tab(ng)%BUFLY(ilay)%NPTT)
183 ENDDO
184 ENDIF
185 nlay_max =
max(nlay,npt, elbuf_tab(ng)%NLAY)
186 ALLOCATE(matly(mvsiz*nlay_max), thkly(mvsiz*nlay_max*laynpt_max),
187 . posly(mvsiz,nlay_max*laynpt_max),thk_ly
188 matly = 0
189 thkly = zero
190 posly = zero
191 thk_ly = zero
194 CALL layini(elbuf_tab(ng),lft ,llt ,geo ,igeo ,
195 . mat_1 ,pid_1 ,thkly ,matly ,posly ,
196 . igtyp ,ibid0 ,ibid0 ,nlay ,mpt ,
197 . isubstack,stack ,drape_sh4n ,nft ,thke ,
198 . nel ,thk_ly ,drapeg%INDX_SH4N,sedrape,numel_drape)
199 l_dira = elbuf_tab(ng)%BUFLY(1)%LY_DIRA
200 l_dirb = elbuf_tab(ng)%BUFLY(1)%LY_DIRB
201 ALLOCATE(dira(nlay*nel*l_dira))
202 ALLOCATE(dirb(nlay*nel*l_dirb))
203 dira=zero
204 dirb=zero
205 IF (l_dira == 0) THEN
206 CONTINUE
207 ELSEIF (irep == 0) THEN
208 IF(idrape > 0 .AND. (igtyp == 51 .OR. igtyp == 52)) THEN
209 DO j=1,nlay
210 j1 = 1+(j-1)*l_dira*nel
211 j2 = j*l_dira*nel
212 dira(j1:j2) = elbuf_tab(ng)%BUFLY(j)%LBUF_DIR(1)%DIRA(1:nel*l_dira
213 ENDDO
214 ELSE
215 DO j=1,nlay
216 j1 = 1+(j-1)*l_dira*nel
217 j2 = j*l_dira*nel
218 dira(j1:j2) = elbuf_tab(ng)%BUFLY(j)%DIRA(1:nel*l_dira)
219 ENDDO
220 ENDIF
221 ENDIF
222 dir_a => dira(1:nlay*nel*l_dira)
223 dir_b => dirb(1:nlay*nel*l_dirb)
224 CALL get_q4lsys(lft ,llt ,ixc(1,nf1),x ,gbuf%OFF,
225 . irel ,qt ,nlay ,irep ,nel ,
226 . dir_a ,dir_b,elbuf_tab(ng))
227
228
229
230 npt_all = 0
231 DO il=1,nlay
232 npt_all = npt_all + elbuf_tab(ng)%BUFLY(il)%NPTT
233 ENDDO
235 IF (iparg(6,ng) == 0) mpt=0
236
237
238
239 DO i=lft,llt
240 n = i + nft
241 iprt=ipartc(n)
242 IF (ipart_state(iprt)==0) cycle
243 jj = jj + 1
244 IF (mlw /= 0 .AND. mlw /= 13) THEN
245 wa(jj) = gbuf%OFF(i)
246 ELSE
247 wa(jj) = zero
248 ENDIF
249 jj = jj + 1
250 wa(jj) = iprt
251 jj = jj + 1
252 wa(jj) = ixc(nixc,n)
253 jj = jj + 1
254 wa(jj) = mpt
255 jj = jj + 1
256 wa(jj) = npg
257 jj = jj + 1
258 IF (mlw /= 0 .AND. mlw /= 13) THEN
259 wa(jj) = thk0(i)
260 thkq = wa(jj)
261 ELSE
262 wa(jj) = zero
263 thkq = gbuf%THK(i)
264 ENDIF
265 jj = jj + 1
266 IF (mlw /= 0 .AND. mlw /= 13) THEN
267 wa(jj) = gbuf%EINT(i)
268 ELSE
269 wa(jj) = zero
270 ENDIF
271 jj = jj + 1
272 IF (mlw /= 0 .AND. mlw /= 13) THEN
273 wa(jj) = gbuf%EINT(i+llt)
274 ELSE
275 wa(jj) = zero
276 ENDIF
277
278 IF (ihbe==11 .or. ihbe==23 .or. mlw == 0 .or. mlw == 13) THEN
279 jj = jj + 1
280 wa(jj) = zero
281 jj = jj + 1
282 wa(jj) = zero
283 jj = jj + 1
284 wa(jj) = zero
285 ELSE
286 jj = jj + 1
287 wa(jj) = gbuf%HOURG(kk(1)+i)
288 jj = jj + 1
289 wa(jj) = gbuf%HOURG(kk(2)+i)
290 jj = jj + 1
291 wa(jj) = gbuf%HOURG(kk(3)+i)
292 ENDIF
293
294 IF (ihbe /= 23) THEN
295 IF (mpt == 0) THEN
296 IF (mlw == 0 .or. mlw == 13) THEN
297 DO ipg=1,npg
298 DO j=1,13
299 jj = jj + 1
300 wa(jj) = zero
301 ENDDO
302 ENDDO
303 ELSEIF (npg == 1) THEN
304 tens(1:5) = gbuf%FOR(kk(1:5)+i)
306 DO j =1,6
307 jj = jj + 1
308 wa(jj) = tens(j)
309 END DO
310
311 tens(1:3) = gbuf%MOM(kk(1:3)+i)
313 DO j =1,6
314 jj = jj + 1
315 wa(jj) = tens(j)
316 END DO
317
318 jj = jj + 1
319 IF (gbuf%G_PLA > 0) THEN
320 wa(jj) = gbuf%PLA(i)
321 ELSE
322 wa(jj) = zero
323 ENDIF
324 ELSE
325 DO ir=1,nptr
326 DO is=1,npts
327 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(ir,is,1)
328 ipg = nptr*(is-1) + ir
329 k = (ipg-1)*nel*5
330
331 tens(1:5) = gbuf%FORPG(k+kk(1:5)+i)
333 DO j =1,6
334 jj = jj + 1
335 wa(jj) = tens(j)
336 END DO
337
338 jj = jj + 1
339 IF (gbuf%G_PLA > 0) THEN
340 wa(jj) = lbuf%PLA(i)
341 ELSE
342 wa(jj) = zero
343 ENDIF
344
345 k = (ipg-1)*nel*3
346 tens(1:3) = gbuf%MOMPG(k+kk(1:3)+i)
348 DO j =1,6
349 jj = jj + 1
350 wa(jj) = tens(j)
351 END DO
352 ENDDO
353 ENDDO
354 ENDIF
355
356 ELSEIF (mlw == 0 .or. mlw == 13) THEN
357 DO k=1,mpt
358 DO ipg=1,npg
359 DO j=1,8
360 jj = jj + 1
361 wa(jj) = zero
362 ENDDO
363 ENDDO
364 ENDDO
365 ELSE
366 ipt_all = 0
367 DO il = 1,nlay
368 bufly => elbuf_tab(ng)%BUFLY(il)
369 ilaw = bufly%ILAW
370 nptt = bufly%NPTT
371 jdir = 1 + (il-1)*nel*2
372 ii = jdir + i-1
373 DO it=1,nptt
374 ipt = ipt_all + it
375 DO is=1,npts
376 DO ir
377 lbuf => bufly%LBUF(ir,is,it)
378 tens(1:5) = lbuf%SIG(kk(1:5)+i)
379 CALL orth2loc(tens,dir_a,dir_b,ii,ilaw,igtyp,nel
381 DO j =1,6
382 jj = jj + 1
383 wa(jj) = tens(j)
384 END DO
385 jj = jj + 1
386 IF (bufly%L_PLA > 0) THEN
387 wa(jj) = lbuf%PLA(i)
388 ELSE
389 wa(jj) = zero
390 ENDIF
391 jj = jj + 1
392 wa(jj) = posly(i,ipt)*two
393 ENDDO
394 ENDDO
395 ENDDO
396 ipt_all = ipt_all + nptt
397 ENDDO
398 ENDIF
399
400 ELSE
401
402 IF (mlw==0 .or. mlw==13) THEN
403 st(1) = zero
404 st(2) = zero
405 mt(1) = zero
406 mt(2) = zero
407 sk(1) = zero
408 sk(2) = zero
409 mk(1) = zero
410 mk(2) = zero
411 sht(1)= zero
412 sht(2)= zero
413 shk(1)= zero
414 shk(2)= zero
415 IF (mpt == 0) THEN
416 DO ipg=1,npg
417 DO j=1,13
418 jj = jj + 1
419 wa(jj) = zero
420 ENDDO
421 ENDDO
422 ELSE
423 DO ipg=1,npg
424 DO j=1,8
425 jj = jj + 1
426 wa(jj) = zero
427 ENDDO
428 ENDDO
429 ENDIF
430 ELSE
431 st(1) = gbuf%HOURG(kk(1)+i)
432 st(2) =-gbuf%HOURG(kk(2)+i)
433 mt(1) = gbuf%HOURG(kk(3)+i)
434 mt(2) =-gbuf%HOURG(kk(4)+i)
435 sk(1) =-gbuf%HOURG(kk(7)+i)
436 sk(2) = gbuf%HOURG(kk(8)+i)
437 mk(1) =-gbuf%HOURG(kk(9)+i)
438 mk(2) = gbuf%HOURG(kk(10)+i)
439 sht(1)= gbuf%HOURG(kk(5)+i)
440 sht(2)=-gbuf%HOURG(kk(6)+i)
441 shk(1)=-gbuf%HOURG(kk(11)+i)
442 shk(2)= gbuf%HOURG(kk(12)+i)
443 ENDIF
444
445 IF (mpt == 0 .and. mlw /= 0 .and. mlw /= 13) THEN
446 DO ipg=1,npg
447 tens(1:2) = gbuf%FOR(kk(1:2)+i)
448 . + st(1:2)*qpg(2,ipg)+sk(1:2)*qpg(1,ipg)
449 tens(3) = gbuf%FOR(kk(3)+i)
450 tens(4) = gbuf%FOR(kk(4)+i)
451 . + sht(2)*qpg(2,ipg)+shk(2)*qpg(1,ipg)
452 tens(5) = gbuf%FOR(kk(5)+i)
453 . + sht(1)*qpg(2,ipg)+shk(1)*qpg(1,ipg)
455 DO j =1,6
456 jj = jj + 1
457 wa(jj) = tens(j)
458 END DO
459 tens(1:2) = gbuf%MOM(kk(1:2)+i)
460 . + mt(1:2)*qpg(2,ipg)+mk(1:2)*qpg(1,ipg)
461 tens(3) = gbuf%MOM(kk(3)+i)
463 DO j =1,6
464 jj = jj + 1
465 wa(jj) = tens(j)
466 END DO
467
468 jj = jj + 1
469 IF (gbuf%G_PLA > 0) THEN
470 wa(jj) = gbuf%PLA(i)
471 ELSE
472 wa(jj) = zero
473 ENDIF
474 ENDDO
475 ELSEIF (mlw /= 0 .and. mlw /= 13) THEN
476 ipt_all = 0
477 DO il = 1,nlay
478 bufly => elbuf_tab(ng)%BUFLY(il)
479 ilaw = bufly%ILAW
480 nptt = bufly%NPTT
481 jdir = 1 + (il-1)*nel*2
482 ii = jdir + i-1
483 DO it=1,nptt
484
485 lbuf => bufly%LBUF(1,1,it)
486 l_pla = bufly%L_PLA
487 zz = posly(i,ipt)*thkq
488 DO ipg=1,npg
489 tens(1:2) = lbuf%SIG(kk(1:2)+i)
490 . + (st(1:2)+zz*mt(1:2))*qpg(2,ipg)
491 . + (sk(1:2)+zz*mk(1:2))*qpg(1,ipg)
492 tens(3) = lbuf%SIG(kk(3)+i)
493 tens(4) = lbuf%SIG(kk(4)+i)
494 . + sht(2)*qpg(2,ipg)+shk(2)*qpg(1,ipg)
495 tens(5) = lbuf%SIG(kk(5)+i)
496 .
497 CALL orth2loc(tens,dir_a,dir_b,ii,ilaw,igtyp,nel)
499 DO j =1,6
500 jj = jj + 1
501 wa(jj) = tens(j)
502 END DO
503 jj = jj + 1
504 IF (l_pla > 0) THEN
505 wa(jj) = lbuf%PLA(i)
506 ELSE
507 wa(jj) = zero
508 ENDIF
509 jj = jj + 1
510 wa(jj) = posly(i,ipt)*two
511 ENDDO
512 ENDDO
513 ipt_all = ipt_all + nptt
514 ENDDO
515 ENDIF
516 ENDIF
517
518 ie=ie+1
519
520 ptwa(ie)=jj
521 ENDDO
522
523 IF(ALLOCATED(dirb)) DEALLOCATE(dirb)
524 IF(ALLOCATED(dira)) DEALLOCATE(dira)
525 DEALLOCATE(matly, thkly, posly, thk_ly)
526 ENDIF
527 ENDDO
528
529 200 CONTINUE
530
531
532
533 IF (nspmd == 1) THEN
534 ptwa_p0(0)=0
535 DO n=1,stat_numelc
536 ptwa_p0(n)=ptwa(n)
537 ENDDO
538 len=jj
539 DO j=1,len
540 wap0(j)=wa(j)
541 ENDDO
542 ELSE
543
545 len = 0
547 ENDIF
548
549 IF (ispmd == 0.AND.len > 0) THEN
550 iprt0=0
551 DO n=1,stat_numelc_g
552
553 k=stat_indxc(n)
554
555 j=ptwa_p0(k-1)
556
557 ioff = nint(wap0(j + 1))
558 IF (ioff >= 1) THEN
559 iprt = nint(wap0(j + 2))
560 IF (iprt /= iprt0) THEN
561 IF (izipstrs == 0) THEN
562 WRITE(iugeo,'(A)') delimit
563 WRITE(iugeo,'(A)')'/INISHE/STRS_F/GLOB'
564 WRITE(iugeo,'(A)')
565 . '#------------------------ REPEAT --------------------------'
566 WRITE(iugeo,'(A)')
567 . '# SHELLID NPT NPG THK'
568 WRITE(iugeo,'(A)') '# EM, EB, H1, H2, H3'
569 WRITE(iugeo,'(A/A/A/A/A)')
570 . '# IF(NPT == 0), REPEAT I=1,NPG :',
571 . '# N1, N2, N3 ',
572 . '# N12, N23, N31',
573 . '# M1, M2, M3 ',
574 . '# M12,M23,M31,EPSP '
575 WRITE(iugeo,'(A/A/A)')
576 . '# IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :',
577 . '# S1, S2, S3 ',
578 . '# S12, S23, S31, EPSP, T '
579 WRITE(iugeo,'(A)')
580 . '#---------------------- END REPEAT ------------------------'
581 WRITE(iugeo,'(A)') delimit
582 ELSE
583 WRITE(line,'(A)') delimit
585 WRITE(line,'(A)')'/INISHE/STRS_F/GLOB'
587 WRITE(line,'(A)')
588 . '#------------------------ REPEAT --------------------------'
590 WRITE(line,'(A)')
591 . '# SHELLID NPT NPG THK'
593 WRITE(line,'(A)') '# EM, EB, H1, H2, H3'
595 WRITE(line,'(A)') '# IF(NPT == 0), REPEAT I=1,NPG :'
597 WRITE(line,'(A)')'# N1, N2, N3 '
599 WRITE(line,'(A)')'# N12, N23, N31'
601 WRITE(line,'(A)')'# M1, M2, M3 '
603 WRITE(line,'(A)')'# M12, M23, M31, EPSP'
605 WRITE(line,'(A)')
606 . '# IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :'
608 WRITE(line,'(A)')'# S1, S2, S3'
610 WRITE(line,'(A)')'# S12,S23,S31, EPSP, T '
612 WRITE(line,'(A)')
613 . '#---------------------- END REPEAT ------------------------'
615 WRITE(line,'(A)') delimit
617 ENDIF
618 iprt0=iprt
619 ENDIF
620
621 id = nint(wap0(j + 3))
622 npt = nint(wap0(j + 4))
623 npg = nint(wap0(j + 5))
624 thk = wap0(j + 6)
625 em = wap0(j + 7)
626 eb = wap0(j + 8)
627 h1 = wap0(j + 9)
628 h2 = wap0(j + 10)
629 h3 = wap0(j + 11)
630 j = j + 11
631 IF (izipstrs == 0) THEN
632 WRITE(iugeo,
'(3I10,1PE20.13)')
id,npt,npg,thk
633 WRITE(iugeo,'(1P5E20.13)')em,eb,h1,h2,h3
634 ELSE
635 WRITE(line,
'(3I10,1PE20.13)')
id,npt,npg,thk
637 WRITE(line,'(1P5E20.13)')em,eb,h1,h2,h3
639 ENDIF
640 IF (npt == 0) THEN
641 DO ipg=1,npg
642 IF (izipstrs == 0) THEN
643 WRITE(iugeo,'(1P3E20.13)')(wap0(j + k),k=1,9)
644 WRITE(iugeo,'(1P4E20.13)')(wap0(j + k),k=10,13)
645 ELSE
648 ENDIF
649 ENDDO
650 ELSE
651 DO it=1,npt
652 DO ipg=1,npg
653 IF (izipstrs == 0) THEN
654 WRITE(iugeo,'(1P3E20.13)')(wap0(j + k),k=1,3)
655 WRITE(iugeo,'(1P5E20.13)')(wap0(j + k),k=4,8)
656 ELSE
659 ENDIF
660 j = j + 8
661 END DO
662 END DO
663 ENDIF
664 ENDIF
665 ENDDO
666 ENDIF
667
668
669
670 jj = 0
671 IF (stat_numeltg==0) GOTO 300
672 ie=0
673
674 DO ng=1,ngroup
675 ity = iparg(5,ng)
676 IF (ity == 7) THEN
677 gbuf => elbuf_tab(ng)%GBUF
678 mlw = iparg(1,ng)
679 nel = iparg(2,ng)
680 nft = iparg(3,ng)
681 mpt = iparg(6,ng)
682 ihbe = iparg(23,ng)
683 ithk = iparg(28,ng)
684 igtyp= iparg(38,ng)
685 irep = iparg(35,ng)
686 isubstack=iparg(71,ng)
687 nptr = elbuf_tab(ng)%NPTR
688 npts = elbuf_tab(ng)%NPTS
689 nptt = elbuf_tab(ng)%NPTT
690 nlay = elbuf_tab(ng)%NLAY
691 npg = nptr*npts
692 npt = nlay*nptt
693 lft=1
694 llt=nel
695 nf1 = nft+1
696 IF (ihbe>=30) THEN
697 irel=0
698 ELSE
699 irel=2
700 END IF
701
702 DO i=1,5
703 kk(i) = nel*(i-1)
704 ENDDO
705 ibid0 = 0
706 mat_1 = ixtg(1,nf1)
707 pid_1 = ixtg(nixtg-1,nf1)
708 IF (ithk >0 ) THEN
709 thk0(lft:llt) = gbuf%THK(lft:llt)
710 ELSE
711 nf3 = nft+numelc
712 thk0(lft:llt) = thke(lft+nf3:llt+nf3)
713 END IF
714
715 laynpt_max = 1
716 IF(igtyp == 51 .OR. igtyp == 52) THEN
717 DO ilay=1, elbuf_tab(ng)%NLAY
718 laynpt_max =
max(laynpt_max , elbuf_tab(ng)%BUFLY(ilay)%NPTT)
719 ENDDO
720 ENDIF
721 nlay_max =
max(nlay,npt, elbuf_tab(ng)%NLAY)
722 ALLOCATE(matly(mvsiz*nlay_max), thkly(mvsiz*nlay_max*laynpt_max),
723 . posly(mvsiz,nlay_max*laynpt_max),thk_ly(nel,nlay_max*laynpt_max
724 matly = 0
725 thkly = zero
726 posly = zero
727 thk_ly = zero
730 CALL layini(elbuf_tab(ng),lft ,llt ,geo ,igeo ,
731 . mat_1 ,pid_1 ,thkly ,matly ,posly ,
732 . igtyp ,ibid0 ,ibid0 ,nlay ,mpt ,
733 . isubstack,stack ,drape_sh3n ,nft ,thke ,
734 . nel ,thk_ly ,drapeg%INDX_SH3N, sedrape,numel_drape)
735
736 l_dira = elbuf_tab
737 l_dirb = elbuf_tab(ng)%BUFLY(1)%LY_DIRB
738 ALLOCATE(dira(nlay*nel*l_dira))
739 ALLOCATE(dirb(nlay*nel*l_dirb))
740 dira=zero
741 dirb=zero
742 IF (l_dira == 0) THEN
743 CONTINUE
744 ELSEIF (irep == 0) THEN
745 DO j=1,nlay
746 j1 = 1+(j-1)*l_dira*nel
747 j2 = j*l_dira*nel
748 dira(j1:j2) = elbuf_tab(ng)%BUFLY(j)%DIRA(1:nel*l_dira)
749 ENDDO
750 ENDIF
751 dir_a => dira(1:nlay*nel*l_dira)
752 dir_b => dirb(1:nlay*nel*l_dirb)
753 CALL get_t3lsys(lft ,llt ,ixtg(1,nf1),x ,gbuf%OFF,
754 . irel ,qt ,nlay ,irep ,nel ,
755 . dir_a ,dir_b,elbuf_tab(ng))
756
757
758
759 npt_all = 0
760 DO il=1,nlay
761 npt_all = npt_all + elbuf_tab(ng)%BUFLY(il)%NPTT
762 ENDDO
764 IF (iparg(6,ng) == 0) mpt=0
765
766
767
768 DO i=lft,llt
769 n = i + nft
770 iprt=iparttg(n)
771 IF (ipart_state(iprt) == 0) cycle
772 jj = jj + 1
773 IF (mlw /= 0 .AND. mlw /= 13) THEN
774 wa(jj) = gbuf%OFF(i)
775 ELSE
776 wa(jj) = zero
777 ENDIF
778 jj = jj + 1
779 wa(jj) = iprt
780 jj = jj + 1
781 wa(jj) = ixtg(nixtg,n)
782 jj = jj + 1
783 wa(jj) = mpt
784 jj = jj + 1
785 wa(jj) = npg
786 jj = jj + 1
787 IF (mlw /= 0 .AND. mlw /= 13) THEN
788 wa(jj) = thk0(i)
789 thkq = wa(jj)
790 ELSE
791 wa(jj) = zero
792 thkq = gbuf%THK(i)
793 ENDIF
794 jj = jj + 1
795 IF (mlw /= 0 .AND. mlw /= 13) THEN
796 wa(jj) = gbuf%EINT(i)
797 ELSE
798 wa(jj) = zero
799 ENDIF
800 jj = jj + 1
801 IF (mlw /= 0 .AND. mlw /= 13) THEN
802 wa(jj) = gbuf%EINT(i+llt)
803 ELSE
804 wa(jj) = zero
805 ENDIF
806 jj = jj + 1
807 wa(jj) = zero
808 jj = jj + 1
809 wa(jj) = zero
810 jj = jj + 1
811 wa(jj) = zero
812
813 IF (mpt == 0) THEN
814 IF (mlw == 0 .or. mlw == 13) THEN
815 DO ipg=1,npg
816 DO j=1,13
817 jj = jj + 1
818 wa(jj) = zero
819 ENDDO
820 ENDDO
821 ELSEIF (npg == 1) THEN
822 tens(1:5) = gbuf%FOR(kk(1:5)+i)
824 DO j =1,6
825 jj = jj + 1
826 wa(jj) = tens(j)
827 END DO
828
829 tens(1:3) = gbuf%MOM(kk(1:3)+i)
831 DO j =1,6
832 jj = jj + 1
833 wa(jj) = tens(j)
834 END DO
835
836 jj = jj + 1
837 IF (gbuf%G_PLA > 0) THEN
838 wa(jj) = gbuf%PLA(i)
839 ELSE
840 wa(jj) = zero
841 ENDIF
842 ELSE
843 DO ir=1,nptr
844 DO is=1,npts
845 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(ir,is,1)
846 ipg = nptr*(is-1) + ir
847 k = (ipg-1)*nel*5
848
849 tens(1:5) = gbuf%FORPG(k+kk(1:5)+i)
851 DO j =1,6
852 jj = jj + 1
853 wa(jj) = tens(j)
854 END DO
855
856 jj = jj + 1
857 IF (gbuf%G_PLA > 0) THEN
858 wa(jj) = lbuf%PLA(i)
859 ELSE
860 wa(jj) = zero
861 ENDIF
862
863 k = (ipg-1)*nel*3
864 tens(1:3) = gbuf%MOMPG(k+kk(1:3)+i)
866 DO j =1,6
867 jj = jj + 1
868 wa(jj) = tens(j)
869 END DO
870 ENDDO
871 ENDDO
872 ENDIF
873 ELSE
874 IF (mlw == 0 .or. mlw == 13) THEN
875 DO k=1,mpt
876 DO ipg=1,npg
877 DO j=1,8
878 jj = jj + 1
879 wa(jj) = zero
880 ENDDO
881 ENDDO
882 ENDDO
883 ELSE
884 ipt_all = 0
885 DO il = 1,nlay
886 bufly => elbuf_tab(ng)%BUFLY(il)
887 ilaw = bufly%ILAW
888 nptt = bufly%NPTT
889 jdir = 1 + (il-1)*nel*2
890 ii = jdir + i-1
891 DO it=1,nptt
892 ipt = ipt_all + it
893 DO ipg=1,npg
894 lbuf => bufly%LBUF(ipg,1,it)
895 tens(1:5) = lbuf%SIG(kk(1:5)+i)
896 CALL orth2loc(tens,dir_a,dir_b,ii,ilaw,igtyp,nel)
898 DO j =1,6
899 jj = jj + 1
900 wa(jj) = tens(j)
901 END DO
902 jj = jj + 1
903 IF (bufly%L_PLA > 0) THEN
904 wa(jj) = lbuf%PLA(i)
905 ELSE
906 wa(jj) = zero
907 ENDIF
908 jj = jj + 1
909 wa(jj) = posly(i,ipt)*two
910 ENDDO
911 ENDDO
912 ipt_all = ipt_all + nptt
913 ENDDO
914 ENDIF
915 ENDIF
916
917 ie=ie+1
918
919 ptwa(ie)=jj
920 ENDDO
921
922 IF(ALLOCATED(dirb)) DEALLOCATE(dirb)
923 IF(ALLOCATED(dira)) DEALLOCATE(dira)
924 DEALLOCATE(matly, thkly, posly, thk_ly)
925 ENDIF
926 ENDDO
927
928 300 CONTINUE
929
930 IF (nspmd == 1) THEN
931 len=jj
932 DO j=1,len
933 wap0(j)=wa(j)
934 ENDDO
935 ptwa_p0(0)=0
936 DO n=1,stat_numeltg
937 ptwa_p0(n)=ptwa(n)
938 ENDDO
939 ELSE
940
942 len = 0
944 ENDIF
945
946 IF (ispmd == 0.AND.len > 0) THEN
947 iprt0=0
948 DO n=1,stat_numeltg_g
949
950 k=stat_indxtg(n)
951
952 j=ptwa_p0(k-1)
953
954 ioff = nint(wap0(j + 1))
955 IF (ioff >= 1) THEN
956 iprt = nint(wap0(j + 2))
957 IF (iprt /= iprt0) THEN
958 IF (izipstrs == 0) THEN
959 WRITE(iugeo,'(A)') delimit
960 WRITE(iugeo,'(A)')'/INISH3/STRS_F/GLOB'
961 WRITE(iugeo,'(A)')
962 .'#------------------------ REPEAT --------------------------'
963 WRITE(iugeo,'(A)')
964 . '# SH3NID NPT NPG THK'
965 WRITE(iugeo,'(A)')
966 .'# EM, EB, H1, H2, H3'
967 WRITE(iugeo,'(A/A/A/A/A)')
968 .'# IF(NPT == 0), REPEAT I=1,NPG :',
969 .'# N1, N2, N3',
970 .'# N12,N23,N31',
971 .'# M1, M2, M3 ',
972 .'# M12,M23,M31,EPSP '
973 WRITE(iugeo,'(A/A/A)')
974 .'# IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :',
975 .'# S1, S2, S3 ',
976 .'# S12,S23,S31, EPSP, T '
977 WRITE(iugeo,'(A)')
978 .'#---------------------- END REPEAT ------------------------'
979 WRITE(iugeo,'(A)') delimit
980 ELSE
981 WRITE(line,'(A)') delimit
983 WRITE(line,'(A)')'/INISH3/STRS_F/GLOB'
985 WRITE(line,'(A)')
986 .'#------------------------ REPEAT --------------------------'
988 WRITE(line,'(A)')
989 . '# SH3NID NPT NPG THK'
991 WRITE(line,'(A)')
992 .'# EM, EB, H1, H2, H3'
994 WRITE(line,'(A)')
995 .'# IF(NPT == 0), REPEAT I=1,NPG :'
997 WRITE(line,'(A)')'# N1, N2, N3'
999 WRITE(line,'(A)')'# N12, N23, N31'
1001 WRITE(line,'(A)')'# M1, M2, M3 '
1003 WRITE(line,'(A)')'# M12, M23, M31,EPSP '
1005 WRITE(line,'(A)')
1006 .'# IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :'
1008 WRITE(line,'(A)')'# S1, S2, S3 '
1010 WRITE(line,'(A)')'# S12, S23, S31, EPSP, T '
1012 WRITE(line,'(A)')
1013 .'#---------------------- END REPEAT ------------------------'
1015 WRITE(line,'(A)') delimit
1017 ENDIF
1018 iprt0=iprt
1019 ENDIF
1020 id = nint(wap0(j + 3))
1021 npt = nint(wap0(j + 4))
1022 npg = nint(wap0(j + 5))
1023 thk = wap0(j + 6)
1024 em = wap0(j + 7)
1025 eb = wap0(j + 8)
1026 h1 = wap0(j + 9)
1027 h2 = wap0(j + 10)
1028 h3 = wap0(j + 11)
1029 j = j + 11
1030 IF (izipstrs == 0) THEN
1031 WRITE(iugeo,
'(3I10,1PE20.13)')
id,npt,npg,thk
1032 WRITE(iugeo,'(1P5E20.13)')em,eb,h1,h2,h3
1033 ELSE
1034 WRITE(line,
'(3I10,1PE20.13)')
id,npt,npg,thk
1036 WRITE(line,'(1P5E20.13)')em,eb,h1,h2,h3
1038 ENDIF
1039 IF (npt == 0) THEN
1040 DO ipg=1,npg
1041 IF (izipstrs == 0) THEN
1042 WRITE(iugeo,'(1P3E20.13)')(wap0(j + k),k=1,9)
1043 WRITE(iugeo,'(1P4E20.13)')(wap0(j + k),k=10,13)
1044 ELSE
1047 ENDIF
1048 ENDDO
1049 ELSE
1050 DO it=1,npt
1051 DO ipg=1,npg
1052 IF (izipstrs == 0) THEN
1053 WRITE(iugeo,'(1P3E20.13)')(wap0(j + k),k=1,3)
1054 WRITE(iugeo,'(1P5E20.13)')(wap0(j + k),k=4,8)
1055 ELSE
1058 ENDIF
1059 j = j + 8
1060 END DO
1061 END DO
1062 ENDIF
1063 ENDIF
1064 ENDDO
1065 ENDIF
1066
1067
1068
1069 DEALLOCATE(ptwa)
1070 DEALLOCATE(ptwa_p0)
1071
1072 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 get_q4lsys(jft, jlt, ixc, x, offg, irel, vq, nlay, irep, nel, dir_a, dir_b, elbuf_str)
subroutine get_t3lsys(jft, jlt, ixtg, x, offg, irel, vq, nlay, irep, nel, dir_a, dir_b, elbuf_str)
subroutine strs_txt50(text, length)
subroutine tab_strs_txt50(wap0, cpt, j, sizp0, nbpline)
subroutine shell2g(eps, qt)
subroutine sheml2g(mom, qt)
subroutine orth2loc(tens, dir_a, dir_b, ii, ilaw, igtyp, nel)