41
42
43
45 USE elbufdef_mod
46 USE my_alloc_mod
47
48
49
50#include "implicit_f.inc"
51
52
53
54#include "com01_c.inc"
55#include "param_c.inc"
56#include "units_c.inc"
57#include "task_c.inc"
58#include "scr14_c.inc"
59#include "scr16_c.inc"
60#include "vect01_c.inc"
61#include "scr17_c.inc"
62
63
64
65 INTEGER SIZLOC,SIZP0
66 INTEGER IXS(NIXS,*),
67 . IPARG(NPARG,*),IPM(NPROPMI,*),IGEO(NPROPGI,*),
68 . IPARTS(*), IPART_STATE(*), STAT_INDXS(*),IPART(LIPART1,*)
69 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
70 double precision WA(*),WAP0(*)
71
72
73
74 INTEGER I,N,J,K,JJ,LEN,ISOLNOD,,NLAY,NPTR,NPTS,NPTT,NPTG,
75 . NG, NEL, MLW,ID, IPRT0, IPRT, NPG,IPG,IPT, NUVAR,IE,
76 . IL,IR,IS,IT,PID,IOFF
77 INTEGER,DIMENSION(:),ALLOCATABLE :: PTWA
78 INTEGER,DIMENSION(:),ALLOCATABLE :: PTWA_P0
79 CHARACTER*100 DELIMIT,LINE
80 DATA delimit(1:60)
81 ./'#---1----|----2----|----3----|----4----|----5----|----6----|'/
82 DATA delimit(61:100)
83 ./'----7----|----8----|----9----|----10---|'/
84
85 TYPE(L_BUFEL_) ,POINTER :: LBUF
86 TYPE() ,POINTER :: GBUF
87 TYPE(BUF_MAT_) ,POINTER :: MBUF
88
89
90
91 CALL my_alloc(ptwa,stat_numels)
92 ALLOCATE(ptwa_p0(0:
max(1,stat_numels_g)))
93
94 jj = 0
95 ie = 0
96 IF(stat_numels==0) GOTO 200
97 DO ng=1,ngroup
98 ity =iparg(5,ng)
99 isolnod = iparg(28,ng)
100 mlw =iparg(1,ng)
101 nel =iparg(2,ng)
102 nft =iparg(3,ng)
103 iad =iparg(4,ng)
104 lft=1
105 llt = nel
106 iprt=iparts(lft+nft)
107 pid = ipart(2,iprt)
108
109 IF (ity == 1) THEN
111 2 mlw ,nel ,nft ,iad ,ity ,
112 3 npt ,jale ,ismstr ,jeul ,jtur ,
113 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
114 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
115 6 irep ,iint ,igtyp ,israt ,isrot ,
116 7 icsen ,isorth ,isorthg ,ifailure,jsms )
117 iprt=iparts(lft
118 pid = ipart(2,iprt)
119
120 gbuf => elbuf_tab(ng)%GBUF
121 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
122 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
123 nlay = elbuf_tab(ng)%NLAY
124 nptr = elbuf_tab(ng)%NPTR
125 npts = elbuf_tab(ng)%NPTS
126 nptt = elbuf_tab(ng)%NPTT
127 npt = nptr * npts * nptt * nlay
128 IF (jhbe==17.AND.iint==2) jhbe = 18
129 IF (jhbe==1.AND.iint==3) jhbe = 5
130 IF (mlw < 28) THEN
131 nuvar = 0
132 ELSEIF (mlw == 112) THEN
133 nuvar = 3
134 ELSE
135 nuvar = ipm(8,ixs(1,nft+1))
136 ENDIF
137
138 IF (isolnod == 16) THEN
139
140 DO i=lft,llt
141 n = i + nft
142 iprt=iparts(n)
143 IF (ipart_state(iprt)==0) cycle
144 wa(jj+1) = gbuf%VOL(i)
145 wa(jj+2) = iprt
146 wa(jj+3) = ixs(nixs,n)
147 wa(jj+4) = nlay
148 wa(jj+5) = nptr
149 wa(jj+6) = npts
150 wa(jj+7) = nptt
151 wa(jj+8) = isolnod
152 wa(jj+9) = nuvar
153 wa(jj+10)= jhbe
154 wa(jj+11) = gbuf%OFF(i)
155 jj = jj + 11
156 is = 1
157 DO it=1,nptt
158 DO il=1,nlay
159 DO ir=1,nptr
160 IF (mlw == 112) THEN
161 DO ius = 1,3
162 wa(jj + 1) = elbuf_tab(ng)%BUFLY(il)%LBUF(ir,is,it)%PLA(i +
163 jj = jj +1
164 ENDDO
165 ELSE
166 mbuf => elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)
167 DO ius = 1,nuvar
168 wa(jj + 1) = mbuf%VAR(i + (ius-1)*nel)
169 jj = jj +1
170 ENDDO
171 ENDIF
172 ENDDO
173 ENDDO
174 ENDDO
175 ie=ie+1
176
177 ptwa(ie)=jj
178 ENDDO
179 ELSE
180 DO i=lft,llt
181 n = i + nft
182 iprt=iparts(n)
183 IF (ipart_state(iprt)==0) cycle
184 wa(jj+1) = gbuf%VOL(i)
185 wa(jj+2) = iprt
186 wa(jj+3) = ixs(nixs,n)
187 wa(jj+4) = nlay
188 wa(jj+5) = nptr
189 wa(jj+6) = npts
190 wa(jj+7) = nptt
191 wa(jj+8) = isolnod
192 wa(jj+9) = nuvar
193 wa(jj+10)= jhbe
194 wa(jj+11) = gbuf%OFF(i)
195 jj = jj + 11
196 DO il=1,nlay
197 DO it=1,nptt
198 DO is=1,npts
199 DO ir=1,nptr
200 IF (mlw == 112) THEN
201 DO ius = 1,3
202 wa(jj + 1) = elbuf_tab(ng)%BUFLY(il)%LBUF(ir
203 jj = jj +1
204 ENDDO
205 ELSE
206 mbuf => elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)
207 DO ius = 1,nuvar
208 wa(jj + 1) = mbuf%VAR(i + (ius-1)*nel)
209 jj = jj +1
210 ENDDO
211 ENDIF
212 ENDDO
213 ENDDO
214 ENDDO
215 ENDDO
216 ie=ie+1
217
218 ptwa(ie)=jj
219 ENDDO
220 ENDIF
221 ENDIF
222 ENDDO
223 200 CONTINUE
224
225 IF(nspmd == 1)THEN
226
227 ptwa_p0(0)=0
228 DO n=1,stat_numels
229 ptwa_p0(n)=ptwa(n)
230 END DO
231 len=jj
232 DO j=1,len
233 wap0(j)=wa(j)
234 END DO
235 ELSE
236
238 len = 0
240 END IF
241
242 IF(ispmd==0.AND.len>0) THEN
243 iprt0=0
244 DO n=1,stat_numels_g
245
246 k=stat_indxs(n)
247
248 j=ptwa_p0(k-1)
249 iprt = nint(wap0(j + 2))
250 ioff = nint(wap0(j + 11))
251 IF (ioff >= 1) THEN
252 IF(iprt /= iprt0)THEN
253 IF (izipstrs == 0) THEN
254 WRITE(iugeo,'(A)') delimit
255 WRITE(iugeo,'(A)')'/INIBRI/AUX'
256 WRITE(iugeo,'(A)')
257 .'#------------------------ REPEAT --------------------------'
258 WRITE(iugeo,'(A)')
259 . '# BRICKID NPT'
260 WRITE(iugeo,'(A/A/A)')
261 .'# IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :',
262 .'# S1, S2, S3',
263 .'# S12, S23, S31'
264 WRITE(iugeo,'(A)')
265 .'#---------------------- END REPEAT ------------------------'
266 WRITE(iugeo,'(A)') delimit
267 ELSE
268 WRITE(line,'(A)') delimit
270 WRITE(line,'(A)')'/INIBRI/AUX'
272 WRITE(line,'(A)')
273 .'#------------------------ REPEAT --------------------------'
275 WRITE(line,'(A)')
276 . '# BRICKID NPT'
278 WRITE(line,'(A)')
279 .'# IF(NPT /= 0) REPEAT K=1,NPT : REPEAT I=1,NPG :'
281 WRITE(line,'(A)')'# S1, S2, S3'
283 WRITE(line,'(A)')'# S12, S23, S31'
285 WRITE(line,'(A)')
286 .'#---------------------- END REPEAT ------------------------'
288 WRITE(line,'(A)') delimit
290 END IF
291 iprt0=iprt
292 END IF
293
294 id = nint(wap0(j + 3))
295 nlay = nint(wap0(j+4))
296 nptr = nint(wap0(j+5))
297 npts = nint(wap0(j+6))
298 nptt = nint(wap0(j+7))
299 isolnod= nint(wap0(j+8))
300 nuvar = nint(wap0(j+9))
301 jhbe = nint(wap0(j+10))
302 nptg = nlay*nptr*npts*nptt
303 j = j + 11
304
305 IF(isolnod==8.AND.jhbe==14 )THEN
306 IF (izipstrs == 0) THEN
307 WRITE(iugeo,
'(7I10)')
id,nptg,isolnod,jhbe,0,0,nuvar
308 ELSE
309 WRITE(line,
'(7I10)')
id,nptg,isolnod,jhbe,0,0,nuvar
311 ENDIF
312 IF (nuvar /= 0) THEN
313 IF (izipstrs == 0) THEN
314 DO ipt=1,nptg
315 WRITE(iugeo,'(1P3E20.13)')(wap0(j + k),k=1,nuvar)
316 j = j + nuvar
317 ENDDO
318 ELSE
319 DO ipt=1,nptg
321 j = j + nuvar
322 ENDDO
323 ENDIF
324 ENDIF
325 ELSEIF(isolnod==8 .OR. isolnod==6 .OR. isolnod==4 .OR.
326 . isolnod==10 .OR. isolnod==16 .OR. isolnod==20)THEN
327 IF (izipstrs == 0) THEN
328 WRITE(iugeo,
'(7I10)')
id,nptg,isolnod,jhbe,0,0,nuvar
329 ELSE
330 WRITE(line,
'(7I10)')
id,nptg,isolnod,jhbe,0,0,nuvar
332 ENDIF
333 IF (nuvar /= 0) THEN
334 IF (izipstrs == 0) THEN
335 DO ipt=1,nptg
336 WRITE(iugeo,'(1P3E20.13)')(wap0(j + k),k
337 j = j + nuvar
338 ENDDO
339 ELSE
340 DO ipt=1,nptg
342 j = j + nuvar
343 ENDDO
344 ENDIF
345 ENDIF
346 ENDIF
347 ENDIF
348 ENDDO
349 ENDIF
350
351 DEALLOCATE(ptwa)
352 DEALLOCATE(ptwa_p0)
353
354 RETURN
subroutine initbuf(iparg, ng, mtn, llt, nft, iad, ity, npt, jale, ismstr, jeul, jtur, jthe, jlag, jmult, jhbe, jivf, mid, jpor, jcvt, jclose, jpla, irep, iint, igtyp, israt, isrot, icsen, isorth, isorthg, ifailure, jsms)
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)