40
41
42
43 USE mat_elem_mod
44 USE my_alloc_mod
45
46
47
48#include "implicit_f.inc"
49
50
51
52#include "com01_c.inc"
53#include "param_c.inc"
54#include "units_c.inc"
55#include "task_c.inc"
56#include "scr14_c.inc"
57#include "scr16_c.inc"
58#include "mvsiz_p.inc"
59
60
61
62 INTEGER SIZLOC,SIZP0
63 INTEGER IXC(NIXC,*),IXTG(NIXTG,*),
64 . IPARG(,*),IPM(NPROPMI,*),IGEO(NPROPGI,*),
65 . IPARTC(*), IPARTTG(*), IPART_STATE(*),
66 . STAT_INDXC(*), STAT_INDXTG(*)
67 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
68 TYPE (MATPARAM_STRUCT_) ,DIMENSION(NUMMAT) ,INTENT(IN) :: MAT_PARAM
69 double precision WA(*),WAP0(*)
70
71
72
73 INTEGER ,INTENT(IN) :: NUMMAT
74 INTEGER I,N,,K,L,II,JJ,ID,IE,LEN,NG,NEL,NFT,ITY,LFT,LLT,NPT,
75 . MLW,IGTYP,IPRT0,IPRT,IVAR,IMAT,
76 . NPG,IPG,NLAY,NPTR,NPTS,,,IR,IS,IT,IPT,IC,IFAIL,NV,
77 . NFAIL,NVAR_RUPT,NPTG,IRUPT,IRUPT_TYPE,ISUBSTACK
78 INTEGER MAT(MVSIZ), PID(MVSIZ)
79 INTEGER,DIMENSION(:),ALLOCATABLE :: PTWA
80 INTEGER,DIMENSION(:),ALLOCATABLE :: PTWA_P0
81 double precision
82 . THK, EM, EB, H1, H2, H3
83 CHARACTER*100 DELIMIT,LINE
84
85 TYPE(L_BUFEL_) ,POINTER :: LBUF
86 TYPE(G_BUFEL_) ,POINTER :: GBUF
87 TYPE() ,POINTER :: MBUF
88 TYPE(BUF_FAIL_),POINTER :: FBUF
90 . DIMENSION(:), POINTER :: uvarf,dfmax
91
92 DATA delimit(1:60)
93 ./'#---1----|----2----|----3----|----4----|----5----|----6----|'/
94 DATA delimit(61:100)
95 ./'----7----|----8----|----9----|----10---|'/
96
97
98
99 CALL my_alloc(ptwa,
max(stat_numelc ,stat_numeltg))
100 ALLOCATE(ptwa_p0(0:
max(1,stat_numelc_g,stat_numeltg_g)))
101
102 jj = 0
103 isubstack = 0
104 IF (stat_numelc==0) GOTO 200
105
106 ie=0
107 DO ng=1,ngroup
108 ity = iparg(5,ng)
109 IF (ity == 3) THEN
110 mlw =iparg(1,ng)
111 nel =iparg(2,ng)
112 nft =iparg(3,ng)
113 lft=1
114 llt=nel
115
116
117
118
119
120
121 gbuf => elbuf_tab(ng)%GBUF
122 nlay = elbuf_tab(ng)%NLAY
123 nptr = elbuf_tab(ng)%NPTR
124 npts = elbuf_tab(ng)%NPTS
125
126
127 npg = nptr*npts
128 isubstack = iparg(71,ng)
129
130
131
132 DO i=lft,llt
133 n = i+nft
134 iprt=ipartc(n)
135 IF (ipart_state(iprt)==0) cycle
136
137 jj = jj + 1
138 IF (mlw /= 0 .AND. mlw /= 13) THEN
139 wa(jj) = gbuf%OFF(i)
140 ELSE
141 wa(jj) = zero
142 ENDIF
143 jj = jj + 1
144 wa(jj) = iprt
145 jj = jj + 1
146 wa(jj) = ixc(nixc,n)
147 jj = jj + 1
148 wa(jj) = nlay
149
150
151 jj = jj + 1
152 wa(jj) = npg
153
154 DO il = 1,nlay
155 nfail = elbuf_tab(ng)%BUFLY(il)%NFAIL
156 imat = elbuf_tab(ng)%BUFLY(il)%IMAT
157 fbuf => elbuf_tab(ng)%BUFLY(il)%FAIL(1,1,1)
158 nptt = elbuf_tab(ng)%BUFLY(il)%NPTT
159 jj = jj + 1
160 wa(jj) = nfail
161 jj = jj + 1
162 imat = elbuf_tab(ng)%BUFLY(il)%IMAT
163 wa(jj) = ipm(1,imat)
164 jj = jj + 1
165 wa(jj) = nptt
166
167 DO ifail = 1,nfail
168 irupt = mat_param(imat)%FAIL(ifail)%FAIL_ID
169 irupt_type = mat_param(imat)%FAIL(ifail)%IRUPT
170 nvar_rupt = fbuf%FLOC(ifail)%NVAR
171 jj = jj + 1
172 wa(jj) = nvar_rupt + 1
173 jj = jj + 1
174 wa(jj) = irupt
175 jj = jj + 1
176 wa(jj) = irupt_type
177
178 IF (irupt == 0) cycle
179
180 DO it=1,nptt
181 DO is=1,npts
182 DO ir=1,nptr
183 fbuf => elbuf_tab(ng)%BUFLY(il)%FAIL(ir,is,it)
184 uvarf => fbuf%FLOC(ifail)%VAR
185 dfmax => fbuf%FLOC(ifail)%DAMMX
186 jj = jj + 1
187 wa(jj) = dfmax(i)
188 DO nv=1,nvar_rupt
189 jj = jj + 1
190 wa(jj) = uvarf((nv-1)*llt+i)
191 ENDDO
192 ENDDO
193 ENDDO
194 ENDDO
195 ENDDO
196
197 ENDDO
198
199 ie=ie+1
200
201 ptwa(ie)=jj
202 ENDDO
203
204 ENDIF
205 ENDDO
206
207 200 CONTINUE
208
209
210
211 IF (nspmd == 1) THEN
212 ptwa_p0(0)=0
213 DO n=1,stat_numelc
214 ptwa_p0(n)=ptwa(n)
215 ENDDO
216 len=jj
217 DO j=1,len
218 wap0(j)=wa(j)
219 ENDDO
220 ELSE
221
223 len = 0
225 ENDIF
226
227
228
229 IF (ispmd == 0.AND.len > 0) THEN
230 iprt0=0
231 DO n=1,stat_numelc_g
232
233 k=stat_indxc(n)
234
235 j=ptwa_p0(k-1)
236 iprt = nint(wap0(j + 2))
237 IF (iprt /= iprt0) THEN
238 IF (izipstrs == 0) THEN
239 WRITE(iugeo,'(A)') delimit
240 WRITE(iugeo,'(A)')'/INISHE/FAIL'
241 WRITE(iugeo,'(A)')
242 .'#------------------------ REPEAT --------------------------'
243 WRITE(iugeo,'(A)')
244 .'# SHELLID NLAY NPG NPTT ILAY IRUPT IRUPT_TYP NUVAR IMAT'
245 WRITE(iugeo,'(A/A/A)')
246 .'# REPEAT K=1,NPG ',
247 .'# UVAR(1,I) ............. ',
248 .'# ............... UVAR(NUVAR,I) '
249 WRITE(iugeo,'(A)')
250 .'#---------------------- END REPEAT ------------------------'
251 WRITE(iugeo,'(A)') delimit
252 ELSE
253 WRITE(line,'(A)') delimit
255 WRITE(line,'(A)')'/INISHE/FAIL'
257 WRITE(line,'(A)')
258 .'#------------------------ REPEAT --------------------------'
260 WRITE(line,'(A)')
261 .'# SHELLID NLAY NPG NPTT ILAY IRUPT IRUPT_TYP NUVAR IMAT'
263 WRITE(line,'(A)')
264 .'# REPEAT K=1,NPG '
266 WRITE(line,'(A)')
267 .'# UVAR(1,I) ............. '
269 WRITE(line,'(A)')
270 .'# ............... UVAR(NUVAR,I) '
272 WRITE(line,'(A)')
273 .'#---------------------- END REPEAT ------------------------'
275 WRITE(line,'(A)') delimit
277 ENDIF
278 iprt0=iprt
279 ENDIF
280
282 nlay = nint(wap0(j+4))
283
284 nptg = nint(wap0(j+5))
285 j = j + 5
286
287 DO il=1,nlay
288 ic = nint(wap0(j+1))
289 j = j + 1
290 imat = nint(wap0(j+1))
291 j = j + 1
292 nptt = nint(wap0(j+1))
293 j = j + 1
294 DO ii=1,ic
295 nvar_rupt = nint(wap0(j+1))
296 j = j + 1
297 irupt = nint(wap0(j+1))
298 j = j + 1
299 irupt_type = nint(wap0(j+1))
300 j = j + 1
301
302 IF (irupt == 0) cycle
303
304 IF (izipstrs == 0) THEN
305 WRITE(iugeo,
'(9I10)')
id,nlay,nptg,nptt,il,irupt,irupt_type,nvar_rupt,
306 . imat
307 ELSE
308 WRITE(line,
'(9I10)')
id,nlay,nptg,nptt,il,irupt,irupt_type,nvar_rupt,
309 . imat
311 ENDIF
312 IF (irupt /= 0 .AND. nvar_rupt /= 0) THEN
313 IF (izipstrs == 0) THEN
314 DO it=1,nptt
315 DO ipg=1,nptg
316 WRITE(iugeo,'(1P3E20.13)')(wap0(j + l),l=1,nvar_rupt)
317 j = j + nvar_rupt
318 ENDDO
319 ENDDO
320 ELSE
321 DO it=1,nptt
322 DO ipg=1,nptg
324 j = j + nvar_rupt
325 ENDDO
326 ENDDO
327 ENDIF
328 ENDIF
329 ENDDO
330 ENDDO
331 ENDDO
332 ENDIF
333
334
335
336 jj = 0
337 isubstack = 0
338 IF (stat_numeltg==0) GOTO 300
339
340 ie=0
341 DO ng=1,ngroup
342 ity =iparg(5,ng)
343 IF (ity == 7) THEN
344 mlw =iparg(1,ng)
345 nel =iparg(2,ng)
346 nft =iparg(3,ng)
347 lft=1
348 llt=nel
349
350
351
352
353
354
355 gbuf => elbuf_tab(ng)%GBUF
356 nlay = elbuf_tab(ng)%NLAY
357 nptr = elbuf_tab(ng)%NPTR
358 npts = elbuf_tab(ng)%NPTS
359
360
361 npg = nptr*npts
362 isubstack = iparg(71,ng)
363
364
365
366 DO i=lft,llt
367 n = i+nft
368 iprt=iparttg(n)
369 IF (ipart_state(iprt)==0) cycle
370
371 jj = jj + 1
372 IF (mlw /= 0 .AND. mlw /= 13) THEN
373 wa(jj) = gbuf%OFF(i)
374 ELSE
375 wa(jj) = zero
376 ENDIF
377 jj = jj + 1
378 wa(jj) = iprt
379 jj = jj + 1
380 wa(jj) = ixtg(nixtg,n)
381 jj = jj + 1
382 wa(jj) = nlay
383
384
385 jj = jj + 1
386 wa(jj) = npg
387
388 DO il = 1,nlay
389 nfail = elbuf_tab(ng)%BUFLY(il)%NFAIL
390 imat = elbuf_tab(ng)%BUFLY(il)%IMAT
391 fbuf => elbuf_tab(ng)%BUFLY(il)%FAIL(1,1,1)
392 nptt = elbuf_tab(ng)%BUFLY(il)%NPTT
393 jj = jj + 1
394 wa(jj) = nfail
395 jj = jj + 1
396 imat = elbuf_tab(ng)%BUFLY(il)%IMAT
397 wa(jj) = ipm(1,imat)
398 jj = jj + 1
399 wa(jj) = nptt
400
401 DO ifail = 1,nfail
402 irupt = mat_param(imat)%FAIL(ifail)%FAIL_ID
403 irupt_type = mat_param(imat)%FAIL(ifail)%IRUPT
404 nvar_rupt = fbuf%FLOC(ifail)%NVAR
405 jj = jj + 1
406 wa(jj) = nvar_rupt + 1
407 jj = jj + 1
408 wa(jj) = irupt
409 jj = jj + 1
410 wa(jj) = irupt_type
411
412 IF (irupt == 0) cycle
413
414 DO it = 1,nptt
415 DO is=1,npts
416 DO ir=1,nptr
417 fbuf => elbuf_tab(ng)%BUFLY(il)%FAIL(ir,is,it)
418 uvarf => fbuf%FLOC(ifail)%VAR
419 dfmax => fbuf%FLOC(ifail)%DAMMX
420 jj = jj + 1
421 wa(jj) = dfmax(i)
422 DO nv=1,nvar_rupt
423 jj = jj + 1
424 wa(jj) = uvarf((nv-1)*llt+i)
425 ENDDO
426 ENDDO
427 ENDDO
428 ENDDO
429 ENDDO
430 ENDDO
431
432 ie=ie+1
433
434 ptwa(ie)=jj
435 ENDDO
436
437 ENDIF
438 ENDDO
439
440 300 CONTINUE
441
442
443
444 IF (nspmd == 1) THEN
445 ptwa_p0(0)=0
446 DO n=1,stat_numeltg
447 ptwa_p0(n)=ptwa(n)
448 ENDDO
449 len=jj
450 DO j=1,len
451 wap0(j)=wa(j)
452 ENDDO
453 ELSE
454
456 len = 0
458 ENDIF
459
460
461
462 IF (ispmd == 0.AND.len > 0) THEN
463 iprt0=0
464 DO n=1,stat_numeltg_g
465
466 k=stat_indxtg(n)
467
468 j=ptwa_p0(k-1)
469 iprt = nint(wap0(j + 2))
470 IF (iprt /= iprt0) THEN
471 IF (izipstrs == 0) THEN
472 WRITE(iugeo,'(A)') delimit
473 WRITE(iugeo,'(A)')'/INISH3/FAIL'
474 WRITE(iugeo,'(A)')
475 .'#------------------------ REPEAT --------------------------'
476 WRITE(iugeo,'(A)')
477 .'# SHELLID NLAY NPG NPTT ILAY IRUPT IRUPT_TYP NUVAR IMAT'
478 WRITE(iugeo,'(A/A/A)')
479 .'# REPEAT K=1,NPG ',
480 .'# UVAR(1,I) ............. ',
481 .'# ............... UVAR(NUVAR,I) '
482 WRITE(iugeo,'(A)')
483 .'#---------------------- END REPEAT ------------------------'
484 WRITE(iugeo,'(A)') delimit
485 ELSE
486 WRITE(line,'(A)') delimit
488 WRITE(line,'(A)')'/INISH3/FAIL'
490 WRITE(line,'(A)')
491 .'#------------------------ REPEAT --------------------------'
493 WRITE(line,'(A)')
494 .'# SHELLID NLAY NPG NPTT ILAY IRUPT IRUPT_TYP NUVAR IMAT'
496 WRITE(line,'(A)')
497 .'# REPEAT K=1,NPG '
499 WRITE(line,'(A)')
500 .'# UVAR(1,I) ............. '
502 WRITE(line,'(A)')
503 .'# ............... UVAR(NUVAR,I) '
505 WRITE(line,'(A)')
506 .'#---------------------- END REPEAT ------------------------'
508 WRITE(line,'(A)') delimit
510 ENDIF
511 iprt0=iprt
512 ENDIF
513
515 nlay = nint(wap0(j+4))
516
517 nptg = nint(wap0(j+5))
518 j = j + 5
519
520 DO il=1,nlay
521 ic = nint(wap0(j+1))
522 j = j + 1
523 imat = nint(wap0(j+1))
524 j = j + 1
525 nptt = nint(wap0(j+1))
526 j = j + 1
527 DO ii=1,ic
528 nvar_rupt = nint(wap0(j+1))
529 j = j + 1
530 irupt = nint(wap0(j+1))
531 j = j + 1
532 irupt_type = nint(wap0(j+1))
533 j = j + 1
534
535 IF (irupt == 0) cycle
536
537 IF (izipstrs == 0) THEN
538 WRITE(iugeo,
'(9I10)')
id,nlay,nptg,nptt,il,irupt,irupt_type,nvar_rupt,
539 . imat
540 ELSE
541 WRITE(line,
'(9I10)')
id,nlay,nptg,nptt,il,irupt,irupt_type,nvar_rupt,
542 . imat
544 ENDIF
545 IF (irupt /= 0 .AND. nvar_rupt /= 0) THEN
546 IF (izipstrs == 0) THEN
547 DO it=1,nptt
548 DO ipg=1,nptg
549 WRITE(iugeo,'(1P3E20.13)')(wap0(j + l),l=1,nvar_rupt)
550 j = j + nvar_rupt
551 ENDDO
552 ENDDO
553 ELSE
554 DO it=1,nptt
555 DO ipg=1,nptg
557 j = j + nvar_rupt
558 ENDDO
559 ENDDO
560 ENDIF
561 ENDIF
562 ENDDO
563 ENDDO
564 ENDDO
565 ENDIF
566
567
568 DEALLOCATE(ptwa)
569 DEALLOCATE(ptwa_p0)
570
571 RETURN
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)