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