38
39
40
42 USE elbufdef_mod
43 use element_mod , only : nixs
44
45
46
47#include "implicit_f.inc"
48
49
50
51#include "vect01_c.inc"
52#include "com01_c.inc"
53#include "param_c.inc"
54#include "units_c.inc"
55#include "task_c.inc"
56#include "scr16_c.inc"
57
58
59
60 CHARACTER*10 KEY
61 CHARACTER*40 TEXT
62 INTEGER NBX
63 INTEGER IPARG(NPARG,*), DD_IAD(NSPMD+1,*),
64 . IXS(NIXS,*),IPM(NPROPMI,*),SIZLOC,SIZP0,SIZ_WR
66 . eani(*)
67 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
68
69
70
71 INTEGER I,J,II(6),JJ,RESP0,WRTLEN,RES
72 INTEGER NG, NEL,N,MLW,
73 . JJ_OLD, NGF, NGL, NN,NLAY, NUVAR, NPTT, NPTS,
74 . IUS, ISOLNOD,IL,IR,IS,IT,
75 . NPTR,K,COMPTEUR,L
76 INTEGER, DIMENSION(NSPGROUP) :: JJ_LOC
77 INTEGER, DIMENSION(NSPGROUP+1,NSPMD) :: ADRESS
79 . wa(sizloc),wap0(siz_wr),wap0_loc(sizp0)
81 . s1 ,s2 ,s3 ,p ,vonm2, user(200)
82 TYPE(BUF_LAY_) ,POINTER :: BUFLY
83 TYPE(L_BUFEL_) ,POINTER :: LBUF
84 TYPE(G_BUFEL_) ,POINTER :: GBUF
85 TYPE(BUF_MAT_) ,POINTER :: MBUF
86
87 IF (ispmd == 0) THEN
88 WRITE(iugeo,'(2A)')'/SOLID /SCALAR /',key
89 WRITE(iugeo,'(A)')text
90 IF (outyy_fmt == 2) THEN
91 WRITE(iugeo,'(A)')'#FORMAT: (1P6E12.5) (VAR(I),I=1,NUMSOL)'
92 ELSE
93 WRITE(iugeo,'(A)')'#FORMAT: (1P6E20.13) (VAR(I),I=1,NUMSOL)'
94 ENDIF
95 ENDIF
96
97 jj_old = 0
98 resp0=0
99 ngf = 1
100 ngl = 0
101 jj = 0
102 compteur = 0
103 DO nn=1,nspgroup
104 ngl = ngl + dd_iad(ispmd+1,nn)
105 DO ng = ngf, ngl
106 ity =iparg(5,ng)
107 IF (ity /= 1 .AND. ity /= 2) cycle
108 isolnod = iabs(iparg(28,ng))
109 nuvar = 0
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
118 bufly=> elbuf_tab(ng)%BUFLY(1)
119 gbuf => elbuf_tab(ng)%GBUF
120 lbuf => elbuf_tab(ng)%BUFLY(1)%LBUF(1,1,1)
121 nlay = elbuf_tab(ng)%NLAY
122 nptr = elbuf_tab(ng)%NPTR
123 npts = elbuf_tab(ng)%NPTS
124 nptt = elbuf_tab(ng)%NPTT
125 npt = nptr * npts * nptt * nlay
126 lft=1
127 llt=nel
128
129 DO i=1,6
130 ii(i) = nel*(i-1)
131 ENDDO
132
133
134 IF(nbx == 2)THEN
135 DO i=lft,llt
136 jj = jj + 1
137 n = i + nft
138 wa(jj) = - (gbuf%SIG(ii(1)+i)
139 . + gbuf%SIG(ii(2)+i)
140 . + gbuf%SIG(ii(3)+i)) / three
141 ENDDO
142
143 ELSEIF(nbx == -2)THEN
144 DO i=lft,llt
145 jj = jj + 1
146 n = i + nft
147 p = - (gbuf%SIG(ii(1)+i)
148 . + gbuf%SIG(ii(2)+i)
149 . + gbuf%SIG(ii(3)+i)) / three
150 s1 = gbuf%SIG(ii(1)+i) + p
151 s2 = gbuf%SIG(ii(2)+i) + p
152 s3 = gbuf%SIG(ii(3)+i) + p
153 vonm2 = three*(gbuf%SIG(ii(4)+i)**2 +
154 . gbuf%SIG(ii(5)+i)**2 +
155 . gbuf%SIG(ii(6)+i)**2 +
156 . half*(s1*s1+s2*s2+s3*s3))
157 wa(jj)= sqrt(vonm2)
158 ENDDO
159
160 ELSEIF(nbx>=20.AND.nbx<=24) THEN
161
162 IF(mlw>=28) THEN
163 DO i=lft,llt
164 nuvar =
max(nuvar,ipm(8,ixs(1,i+nft)))
165 ENDDO
166 ius = nbx - 20
167 DO i=lft,llt
168 jj = jj + 1
169 n = i + nft
170 user(i) = zero
171 DO il=1,nlay
172 DO ir=1,nptr
173 DO is=1,npts
174 DO it=1,nptt
175 mbuf => elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)
176 IF (nuvar>ius) user(i) = user(i) +
177 . mbuf%VAR(ius*nel+i)/npt
178 ENDDO
179 ENDDO
180 ENDDO
181 ENDDO
182 wa(jj) = user(i)
183 ENDDO
184 ELSE
185 DO i=lft,llt
186 jj = jj + 1
187 n = i + nft
188 wa(jj)= zero
189 ENDDO
190 ENDIF
191
192 ELSEIF (nbx == 26) THEN
193 IF (mlw >= 28) THEN
194 DO i=lft,llt
195 nuvar =
max(nuvar,ipm(8,ixs(1,i+nft)))
196 ENDDO
197
198 DO i=lft,llt
199 wa(jj+ 1 ) = isolnod
200 wa(jj+ 2 ) = npt
201 wa(jj+ 3 ) = nuvar
202 wa(jj+ 4 ) = iabs(jhbe)
203 jj = jj + 4
204 n = i + nft
205 DO il=1,nlay
206 DO ir=1,nptr
207 DO is=1,npts
208 DO it=1,nptt
209 mbuf => elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)
210 DO ius = 1,nuvar
211 jj = jj +1
212 wa(jj) = mbuf%VAR(ius + (i-1)*nuvar)
213 ENDDO
214 ENDDO
215 ENDDO
216 ENDDO
217 ENDDO
218 ENDDO
219
220 ELSE
221 DO i=lft,llt
222 wa(jj+ 1 ) = isolnod
223 wa(jj+ 2 ) = npt
224 wa(jj+ 3 ) = nuvar
225 wa(jj+ 4 ) = iabs(jhbe)
226 jj = jj + 4
227 ENDDO
228 ENDIF
229
230 ELSEIF(nbx == 25)THEN
231 DO i=lft,llt
232 jj = jj +1
233 wa(jj)=eani(nft + i)
234 ENDDO
235
236 ELSEIF (nbx == 1) THEN
237 DO i=lft,llt
238 jj = jj + 1
239 wa(jj)=gbuf%OFF(i)
240 ENDDO
241
242 ELSEIF (nbx == 3) THEN
243 DO i=lft,llt
244 jj = jj + 1
245 wa(jj)=gbuf%EINT(i)
246 ENDDO
247
248 ELSEIF (nbx == 4) THEN
249 DO i=lft,llt
250 jj = jj + 1
251 wa(jj)=gbuf%RHO(i)
252 ENDDO
253
254 ELSEIF (nbx == 10) THEN
255 IF (bufly%L_PLA == 0) THEN
256 DO i=lft,llt
257 jj = jj + 1
258 wa(jj)=zero
259 ENDDO
260 ELSE
261 DO i=lft,llt
262 jj = jj + 1
263 wa(jj)=lbuf%PLA(i)
264 ENDDO
265 ENDIF
266
267 ELSEIF (nbx == 11) THEN
268 IF (bufly%L_TEMP == 0) THEN
269 DO i=lft,llt
270 jj = jj + 1
271 wa(jj)=zero
272 ENDDO
273 ELSE
274 DO i=lft,llt
275 jj = jj + 1
276 wa(jj)=gbuf%TEMP(i)
277 ENDDO
278 ENDIF
279
280 ELSEIF (nbx == 27) THEN
281
282 IF (gbuf%G_SEQ > 0) THEN
283 DO i=lft,llt
284 jj = jj + 1
285 wa(jj) = gbuf%SEQ(i)
286 ENDDO
287 ELSE
288 DO i=lft,llt
289 jj = jj + 1
290 n = i + nft
291 p = - (gbuf%SIG(ii(1)+i)
292 . + gbuf%SIG(ii(2)+i)
293 . + gbuf%SIG(ii(3)+i)) / three
294 s1 = gbuf%SIG(ii(1)+i) + p
295 s2 = gbuf%SIG(ii(2)+i) + p
296 s3 = gbuf%SIG(ii(3)+i) + p
297 vonm2 = three*(gbuf%SIG(ii(4)+i)**2 +
298 . gbuf%SIG(ii(5)+i)**2 +
299 . gbuf%SIG(ii(6)+i)**2 +
300 . half*(s1*s1+s2*s2+s3*s3))
301 wa(jj)= sqrt(vonm2)
302 ENDDO
303 ENDIF
304 ENDIF
305
306 ENDDO
307
308 ngf = ngl + 1
309 jj_loc(nn) = jj - compteur
310 compteur = jj
311 ENDDO
312
313 IF( nspmd>1 ) THEN
315 ELSE
316 wap0_loc(1:jj) = wa(1:jj)
317 adress(1,1) = 1
318 DO nn = 2,nspgroup+1
319 adress(nn,1) = jj_loc(nn-1) + adress(nn-1,1)
320 ENDDO
321 ENDIF
322
323 IF(ispmd==0) THEN
324 resp0 = 0
325
326 DO nn=1,nspgroup
327 compteur = 0
328 DO k = 1,nspmd
329 IF((adress(nn+1,k)-adress(nn,k)-1)>=0) THEN
330 DO l = adress(nn,k),adress(nn+1,k)-1
331 compteur = compteur + 1
332 wap0(compteur+resp0) = wap0_loc(l)
333 ENDDO
334 ENDIF
335 ENDDO
336
337 jj_old = compteur+resp0
338 IF(jj_old>0) THEN
339 IF( nbx == 26) THEN
340 j = 0
341 DO WHILE(j<jj_old)
342 isolnod= nint(wap0(j + 1))
343 npt = nint(wap0(j + 2))
344 nuvar = nint(wap0(j + 3))
345 jhbe = nint(wap0(j + 4))
346 j = j + 4
347 IF (outyy_fmt == 2) THEN
348 WRITE(iugeo,'(4I8)') isolnod,npt,nuvar,jhbe
349 ELSE
350 WRITE(iugeo,'(4I10)')isolnod,npt,nuvar,jhbe
351 ENDIF
352 IF (nuvar/=0) THEN
353 DO i = 1,npt
354 IF(outyy_fmt == 2)THEN
355 WRITE(iugeo,'(1P6E12.5)')(wap0(j + k),k=1,nuvar)
356 ELSE
357 WRITE(iugeo,'(1P6E20.13)')(wap0(j + k),k=1,nuvar)
358 ENDIF
359 j = j + nuvar
360 ENDDO
361 ENDIF
362 ENDDO
363 ELSE
364 res=mod(jj_old,6)
365 wrtlen=jj_old-res
366 IF (wrtlen>0) THEN
367 IF (outyy_fmt == 2) THEN
368 WRITE(iugeo,'(1P6E12.5)')(wap0(j),j=1,wrtlen)
369 ELSE
370 WRITE(iugeo,'(1P6E20.13)')(wap0(j),j=1,wrtlen)
371 ENDIF
372 ENDIF
373 DO i=1,res
374 wap0(i)=wap0(wrtlen+i)
375 ENDDO
376 resp0=res
377 ENDIF
378 ENDIF
379 ENDDO
380
381 IF (resp0>0) THEN
382 IF (outyy_fmt == 2) THEN
383 WRITE(iugeo,'(1P6E12.5)')(wap0(j),j=1,resp0)
384 ELSE
385 WRITE(iugeo,'(1p6e20.13)')(WAP0(J),J=1,RESP0)
386 ENDIF
387 ENDIF
388 ENDIF ! ispmd = 0
389
390 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_1comm(v, sizv, len, vp0, sizv0, adress)