39
40
41
42 USE elbufdef_mod
43 USE my_alloc_mod
44
45
46
47#include "implicit_f.inc"
48
49
50
51#include "com01_c.inc"
52#include "com04_c.inc"
53#include "param_c.inc"
54#include "units_c.inc"
55#include "scr14_c.inc"
56#include "scr16_c.inc"
57#include "task_c.inc"
58
59
60
61 INTEGER SIZLOC,SIZP0
62 INTEGER IXC(NIXC,*),IXTG(NIXTG,*),
63 . IPARG(NPARG,*),IPM(NPROPMI,*),IGEO(NPROPGI,*),
64 . IPARTC(*), IPARTTG(*), IPART_STATE(*),
65 . STAT_INDXC(*), (*)
67 . thke(*)
68 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP)TARGET
69double precision WA(*),WAP0(*)
70
71
72
73 INTEGER I,J,K,N,II,JJ,LEN, IOFF, NG, NEL, NFT, ITY, LFT, NPT,
74 . LLT, MLW, ISTRAIN,ID, IPRT0, IPRT,NPG,IPG,IE,NPTR,NPTS,G_STRA,
75 . ITHK,(8)
76 INTEGER,DIMENSION(:),ALLOCATABLE :: PTWA
77 INTEGER,DIMENSION(:),ALLOCATABLE :: PTWA_P0
78 double precision
79 . THK, EM, EB, H1, , H3
80 CHARACTER*100 DELIMIT,LINE
81 TYPE(G_BUFEL_) ,POINTER :: GBUF
82 TYPE(L_BUFEL_) ,POINTER :: LBUF
83 TYPE(BUF_LAY_) ,POINTER :: BUFLY
85 . DIMENSION(:),POINTER :: strain
86
87 DATA delimit(1:60)
88 ./'#---1----|----2----|----3----|----4----|----5----|----6----|'/
89 DATA delimit(61:100)
90 ./'----7----|----8----|----9----|----10---|'/
91
92
93
94 CALL my_alloc(ptwa,
max(stat_numelc ,stat_numeltg))
95 ALLOCATE(ptwa_p0(0:
max(1,stat_numelc_g,stat_numeltg_g)))
96
97 jj = 0
98 IF(stat_numelc==0) GOTO 200
99
100 ie=0
101 DO ng=1,ngroup
102 ity =iparg(5,ng)
103 IF (ity == 3) THEN
104 gbuf => elbuf_tab(ng)%GBUF
105 mlw =iparg(1,ng)
106 nel =iparg(2,ng)
107 nft =iparg(3,ng)
108 npt = iparg(6,ng)
109 ithk =iparg(28,ng)
110 nptr = elbuf_tab(ng)%NPTR
111 npts = elbuf_tab(ng)%NPTS
112 npg = nptr*npts
113 lft=1
114 llt=nel
115 g_stra = gbuf%G_STRA
116
117 DO j=1,8 ! length
max of gbuf%G_STRA = 8
118 kk(j) = nel*(j
119 ENDDO
120
121
122 DO i=lft,llt
123 n = i + nft
124
125 iprt=ipartc(n)
126 IF(ipart_state(iprt)==0)cycle
127
128 jj = jj + 1
129 IF (mlw /= 0 .AND. mlw /= 13) THEN
130 wa(jj) = gbuf%OFF(i)
131 ELSE
132 wa(jj) = zero
133 ENDIF
134 jj = jj + 1
135 wa(jj) = iprt
136 jj = jj + 1
137 wa(jj) = ixc(nixc,n)
138 jj = jj + 1
139 wa(jj) = npt
140 jj = jj + 1
141 wa(jj) = npg
142 jj = jj + 1
143 IF (mlw /= 0 .AND. mlw /= 13) THEN
144 IF (ithk >0 ) THEN
145 wa(jj) = gbuf%THK(i)
146 ELSE
147 wa(jj) = thke(n)
148 END IF
149 ELSE
150 wa(jj) = zero
151 ENDIF
152
153 IF (mlw == 0 .or. mlw == 13) THEN
154 DO ipg=1,npg
155 DO j=1,g_stra
156 jj = jj + 1
157 wa(jj)=zero
158 END DO
159 END DO
160 ELSEIF (g_stra /= 0) THEN
161 IF (npg > 1) THEN
162 strain => gbuf%STRPG
163 ELSE
164 strain => gbuf%STRA
165 ENDIF
166 ii = g_stra*(i-1)
167 DO ipg=1,npg
168 k = (ipg-1)*nel*g_stra
169 DO j=1,g_stra
170 jj = jj + 1
171 wa(jj) = strain(kk(j)+i+k)
172 END DO
173 END DO
174 END IF
175
176 ie=ie+1
177
178 ptwa(ie)=jj
179
180 ENDDO
181 END IF
182 ENDDO
183
184 200 CONTINUE
185
186 IF(nspmd == 1)THEN
187 ptwa_p0(0)=0
188 DO n=1,stat_numelc
189 ptwa_p0(n)=ptwa(n)
190 END DO
191 len=jj
192 DO j=1,len
193 wap0(j)=wa(j)
194 END DO
195 ELSE
196
198 len = 0
200 END IF
201
202 IF(ispmd==0.AND.len>0) THEN
203
204 iprt0=0
205 DO n=1,stat_numelc_g
206
207
208 k=stat_indxc(n)
209
210 j=ptwa_p0(k-1)
211
212 ioff = nint(wap0(j + 1))
213 IF(ioff >= 1)THEN
214 iprt = nint(wap0(j + 2))
215 IF(iprt /= iprt0)THEN
216 IF (izipstrs == 0) THEN
217 WRITE(iugeo,'(A)') delimit
218 WRITE(iugeo,'(A)')'/INISHE/STRA_F'
219 WRITE(iugeo,'(A)')
220 .'#------------------------ REPEAT --------------------------'
221 WRITE(iugeo,'(A)')
222 . '# SHELLID NPT NPG THK'
223 WRITE(iugeo,'(A/A/A)')
224 .'# REPEAT I=1,NPG :',
225 .'# E1, E2, E12, E23, E31,',
226 .'# K1, K2, K12'
227 WRITE(iugeo,'(A)')
228 .'#---------------------- END REPEAT ------------------------'
229 WRITE(iugeo,'(A)') delimit
230 ELSE
231 WRITE(line,'(A)') delimit
233 WRITE(line,'(A)')'/INISHE/STRA_F'
235 WRITE(line,'(A)')
236 .'#------------------------ REPEAT --------------------------'
238 WRITE(line,'(A)')
239 . '# SHELLID NPT NPG THK'
241 WRITE(line,'(A)')'# REPEAT I=1,NPG :'
243 WRITE(line,'(A)')'# E1, E2, E12, E23, E31,'
245 WRITE(line,'(A)')'# K1, K2, K12'
247 WRITE(line,'(A)')
248 .'#---------------------- END REPEAT ------------------------'
250 WRITE(line,'(A)') delimit
252 ENDIF
253 iprt0=iprt
254 END IF
255 id = nint(wap0(j + 3))
256 npt = nint(wap0(j + 4))
257 npg = nint(wap0(j + 5))
258 thk = wap0(j + 6)
259 j = j + 6
260 IF (izipstrs == 0) THEN
261 WRITE(iugeo,
'(3I10,1PE20.13)')
id,npt,npg,thk
262 ELSE
263 WRITE(line,
'(3I10,1PE20.13)')
id,npt,npg,thk
265 ENDIF
266
267 DO ipg=1,npg
268 IF (izipstrs == 0) THEN
269 WRITE(iugeo,'(1P5E20.13)')(wap0(j
270 WRITE(iugeo,'(1P3E20.13)')(wap0(j + k),k
271 ELSE
274 ENDIF
275 END DO
276 END IF
277 ENDDO
278 ENDIF
279
280
281
282
283 jj = 0
284 IF (stat_numeltg==0) GOTO 300
285 ie=0
286
287 DO ng=1,ngroup
288 ity =iparg(5,ng)
289 IF (ity == 7) THEN
290 gbuf => elbuf_tab(ng)%GBUF
291 g_stra = gbuf%G_STRA
292 mlw =iparg(1,ng)
293 nel =iparg(2,ng)
294 nft =iparg(3,ng)
295 npt = iparg(6,ng)
296 ithk = iparg(28,ng
297 nptr = elbuf_tab(ng)%NPTR
298 npts = elbuf_tab(ng)%NPTS
299 npg = nptr*npts
300 lft=1
301 llt=nel
302
303 DO j=1,8
304 kk(j) = nel*(j-1)
305 ENDDO
306
307
308 DO i=lft,llt
309 n = i + nft
310
311 iprt=iparttg(n)
312 IF(ipart_state(iprt)==0)cycle
313
314
315 jj = jj + 1
316 IF (mlw /= 0 .AND. mlw /= 13) THEN
317 wa(jj) = gbuf%OFF(i)
318 ELSE
319 wa(jj) = zero
320 ENDIF
321 jj = jj + 1
322 wa(jj) = iprt
323 jj = jj + 1
324 wa(jj) = ixtg(nixtg,n)
325 jj = jj + 1
326 wa(jj) = npt
327 jj = jj + 1
328 wa(jj) = npg
329 jj = jj + 1
330 IF (mlw /= 0 .AND. mlw /= 13) THEN
331 IF (ithk >0 ) THEN
332 wa(jj) = gbuf%THK(i)
333 ELSE
334 wa(jj) = thke(n+numelc)
335 END IF
336 ELSE
337 wa(jj) = zero
338 ENDIF
339
340
341 IF (mlw == 0 .or. mlw == 13) THEN
342 DO ipg=1,npg
343 DO j=1,g_stra
344 jj = jj + 1
345 wa(jj) = zero
346 END DO
347 END DO
348 ELSEIF (g_stra > 0) THEN
349 IF (npg > 1) THEN
350 strain => gbuf%STRPG
351 ELSE
352 strain => gbuf%STRA
353 ENDIF
354 ii = g_stra*(i-1)
355 DO ipg=1,npg
356 k = (ipg-1)*nel*g_stra
357 DO j=1,g_stra
358 jj = jj + 1
359 wa(jj) = strain(kk(j)+i+k)
360 END DO
361 END DO
362 END IF
363
364 ie=ie+1
365
366 ptwa(ie)=jj
367
368 ENDDO
369 END IF
370 ENDDO
371
372 300 CONTINUE
373
374 IF(nspmd == 1)THEN
375 len=jj
376 DO j=1,len
377 wap0(j)=wa(j)
378 END DO
379 ptwa_p0(0)=0
380 DO n=1,stat_numeltg
381 ptwa_p0(n)=ptwa(n)
382 END DO
383 ELSE
384
386 len = 0
388 END IF
389
390 IF(ispmd==0.AND.len>0) THEN
391
392 iprt0=0
393 DO n=1,stat_numeltg_g
394
395
396 k=stat_indxtg(n)
397
398 j=ptwa_p0(k-1)
399
400 ioff = nint(wap0(j + 1))
401 IF(ioff >= 1)THEN
402 iprt = nint(wap0(j + 2))
403 IF(iprt /= iprt0)THEN
404 IF (izipstrs == 0) THEN
405 WRITE(iugeo,'(A)') delimit
406 WRITE(iugeo,'(A)')'/INISH3/STRA_F'
407 WRITE(iugeo,'(A)')
408 .'#------------------------ REPEAT --------------------------'
409 WRITE(iugeo,'(A)')
410 . '# SH3NID NPT NPG THK'
411 WRITE(iugeo,'(A/A/A)')
412 .'# REPEAT I=1,NPG :',
413 .'# E1, E2, E12, E23, E31,',
414 .'# K1, K2, K12'
415 WRITE(iugeo,'(A)')
416 .'#---------------------- END REPEAT ------------------------'
417 WRITE(iugeo,'(A)') delimit
418 ELSE
419 WRITE(line,'(A)') delimit
421 WRITE(line,'(A)')'/INISH3/STRA_F'
423 WRITE(line,'(A)')
424 .'#------------------------ REPEAT --------------------------'
426 WRITE(line,'(A)')
427 . '# SH3NID NPT NPG THK'
429 WRITE(line,'(A)')'# REPEAT I=1,NPG :'
431 WRITE(line,'(A)')'# E1, E2, E12, E23, E31,'
433 WRITE(line,'(A)')'# K1, K2, K12'
435 WRITE(line,'(A)')
436 .'#---------------------- END REPEAT ------------------------'
438 WRITE(line,'(A)') delimit
440 END IF
441 iprt0=iprt
442 END IF
443 id = nint(wap0(j + 3))
444 npt = nint(wap0(j + 4))
445 npg = nint(wap0(j + 5))
446 thk = wap0(j + 6)
447 j = j + 6
448 IF (izipstrs == 0) THEN
449 WRITE(iugeo,
'(3I10,1PE20.13)')
id,npt,npg,thk
450 ELSE
451 WRITE(line,
'(3I10,1PE20.13)')
id,npt,npg,thk
453 ENDIF
454 DO ipg=1,npg
455 IF (izipstrs == 0) THEN
456 WRITE(iugeo,'(1P5E20.13)')(wap0(j + k),k=1,5)
457 WRITE(iugeo,'(1P3E20.13)')(wap0(j + k),k=6,8)
458 ELSE
461 ENDIF
462 END DO
463 END IF
464
465 ENDDO
466 ENDIF
467
468 DEALLOCATE(ptwa)
469 DEALLOCATE(ptwa_p0)
470
471 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)