35
36
37
38 USE elbufdef_mod
39
40
41
42#include "implicit_f.inc"
43
44
45
46#include "com01_c.inc"
47#include "com04_c.inc"
48#include "param_c.inc"
49#include "units_c.inc"
50#include "task_c.inc"
51#include "scr16_c.inc"
52
53
54
55 CHARACTER*11 KEY
56 CHARACTER*40 TEXT
57 INTEGER NBXX,SIZLOC,SIZP0
58 INTEGER IXC(NIXC,*),IXTG(NIXTG,*),(NSPMD+1,*) ,
59 . IPARG(NPARG,*),IPM(NPROPMI,*),IGEO(NPROPGI,*),
60 . SIZ_WR
62 . eani(*),thke(*)
63 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
64
65
66
67 INTEGER I,J,K,II,JJ,IGTYP,NUVAT,NBB(100),RESP0,WRTLEN,RES
68 INTEGER NG, NEL, NFT, IAD, ITY, LFT, NPT,NLAY,NPTR,NPTS,NPTT,
69 . LLT, MLW, ISTRAIN,N, K1, K2,IL,IR,IS,IT,
70 . IHBE, JJ_OLD, NGF, NGL, NN, LEN, IMX,NUVAR,,
71 . NBX,NPG,MPT,IPT,I1,NU,,NS,NVAR,ITHK,I5,COMPTEUR,
72 . IJ(3)
73 INTEGER, DIMENSION(NSPGROUP) :: JJ_LOC
74 INTEGER, DIMENSION(NSPGROUP+1,NSPMD) :: ADRESS
76 . wa(sizloc),wap0(siz_wr),wap0_loc(sizp0)
77
79 . fac,s1, s2, s12, vonm2,aa,mean_gauss
81 . func(6),func1(100)
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 TYPE(L_BUFEL_) ,POINTER :: LBUF1,LBUF2,LBUF3,LBUF4
87
88 nbx = nbxx
89 IF (nbx < 0) THEN
90 nbx = -nbx
91 imx = 1
92 ELSE
93 imx = 0
94 ENDIF
95 IF (ispmd == 0) THEN
96 WRITE(iugeo,'(2A)')'/SHELL /SCALAR /',key
97 WRITE(iugeo,'(A)')text
98 IF(nbx == 26) THEN
99 IF (outyy_fmt == 2) THEN
100 WRITE(iugeo,'(A)')'#FORMAT: (1P6E12.5)
101 . (((VAR(NU,IPT,I),NU=1,NUVAR),IPT=1,NPT),I=1,NUMSHL)'
102 ELSE
103 WRITE(iugeo,'(A)')'#FORMAT: (1P6E20.13)
104 . (((VAR(NU,IPT,I),NU=1,NUVAR),IPT=1,NPT),I=1,NUMSHL)'
105 ENDIF
106 ELSEIF( nbx >= 27 .OR.nbx >= 86) THEN
107 IF (outyy_fmt == 2) THEN
108 WRITE(iugeo,'(A)')'#FORMAT: (1P6E12.5)
109 . (((UVAR(IPT,I)),IPT=1,NPT),I=1,NUMSHL)'
110 ELSE
111 WRITE(iugeo,'(A)')'#FORMAT: (1P6E20.13)
112 . (((UVAR(IPT,I)),IPT=1,NPT),I=1,NUMSHL)'
113 ENDIF
114 ELSE
115 IF (outyy_fmt == 2) THEN
116 WRITE(iugeo,'(A)')'#FORMAT: (1P6E12.5) (VAR(I),I=1,NUMSHL)'
117 ELSE
118 WRITE(iugeo,'(A)')'#FORMAT: (1P6E20.13) (VAR(I),I=1,NUMSHL)'
119 ENDIF
120 ENDIF
121 ENDIF
122
123 jj_old = 1
124 resp0 = 1
125 ngf = 1
126 ngl = 0
127 jj = 0
128 compteur = 0
129 DO nn=1,nspgroup
130 ngl = ngl + dd_iad(ispmd+1,nn)
131 DO ng = ngf, ngl
132 ity =iparg(5,ng)
133 IF (ity == 3 .or. ity == 7) THEN
134 mlw =iparg(1,ng)
135 nel =iparg(2,ng)
136 nft =iparg(3,ng)
137 istrain=iparg(44,ng)
138 ihbe =iparg(23,ng)
139 ithk =iparg(28,ng)
140 nft =iparg(3,ng)
141 lft=1
142 llt=nel
143
144 DO k=1,3
145 ij(k) = nel*(k-1)
146 ENDDO
147
148 IF (mlw == 25.OR.mlw == 27.OR.mlw == 32) istrain=1
149 IF( (mlw/=0).AND.(mlw/=13) ) THEN
150 gbuf => elbuf_tab(ng)%GBUF
151 nlay = elbuf_tab(ng)%NLAY
152 nptr = elbuf_tab(ng)%NPTR
153 npts = elbuf_tab(ng)%NPTS
154 npg = nptr*npts
155 npt = iparg(6,ng)
157 ENDIF
158
159 IF(((nbx>=20.AND.nbx<=24).OR.(nbx>=26.AND.nbx<=83)).AND.
160 . (mlw == 1.OR.mlw == 2.OR.mlw == 3.OR.mlw == 19.OR.
161 . mlw == 22.OR.mlw == 15.OR.mlw == 23.OR.mlw == 25.OR.
162 . mlw == 27.OR.mlw == 32)) THEN
163
164 DO i=lft,llt
165 jj=jj+1
166 wa(jj) = zero
167 ENDDO
168
169 ELSEIF (nbx == 1) THEN
170 DO i=lft,llt
171 jj = jj + 1
172 IF( (mlw/=0).AND.(mlw/=13) ) THEN
173 s1 = gbuf%FOR(ij(1)+i)
174 s2 = gbuf%FOR(ij(2)+i)
175 s12= gbuf%FOR(ij(3)+i)
176 vonm2= s1*s1 + s2*s2 - s1*s2 + three*s12*s12
177 wa(jj) = sqrt(vonm2)
178 ELSE
179 wa(jj) = zero
180 ENDIF
181 ENDDO
182
183 ELSEIF (nbx == 3) THEN
184 IF (ithk > 0) THEN
185 DO i=lft,llt
186 jj=jj+1
187 IF (mlw /= 0 .AND. mlw /= 13) THEN
188 wa(jj) = gbuf%THK(i)
189 ELSE
190 wa(jj) = zero
191 ENDIF
192 ENDDO
193 ELSE
194 DO i=lft,llt
195 jj=jj+1
196 n = i + nft
197 wa(jj) = thke(n)
198 ENDDO
199 ENDIF
200
201 ELSEIF (nbx == 5) THEN
202 DO i=lft,llt
203 jj = jj + 1
204 IF (mlw /= 0 .AND. mlw /= 13) THEN
205 wa(jj) = gbuf%EINT(i) + gbuf%EINT(i+llt)
206 ELSE
207 wa(jj) = zero
208 ENDIF
209 ENDDO
210
211 ELSEIF (nbx == 6) THEN
212 DO i=lft,llt
213 jj = jj + 1
214 IF( (mlw/=0).AND.(mlw/=13) ) THEN
215 wa(jj) = gbuf%OFF(i)
216 ELSE
217 wa(jj) = zero
218 ENDIF
219 ENDDO
220
221 ELSEIF (nbxx == 15) THEN
222 DO i=lft,llt
223 jj = jj + 1
224 wa(jj) = zero
225 IF ( (mlw/=0).AND.(mlw/=13) ) THEN
226 IF (gbuf%G_PLA > 0) wa(jj) = gbuf%PLA(i)
227 ENDIF
228 ENDDO
229
230 ELSEIF (nbxx == -15) THEN
231 DO i=lft,llt
232 jj = jj + 1
233 wa(jj) = zero
234 IF (mlw /= 0 .AND. mlw /= 13) THEN
235 IF (gbuf%G_PLA > 0) THEN
236 DO il=1,nlay
237 bufly => elbuf_tab(ng)%BUFLY(il)
238 nptt = bufly%NPTT
239 IF (bufly%L_PLA > 0) THEN
240 DO is=1,npts
241 DO ir=1,nptr
242 DO it=1,nptt
243 lbuf => bufly%LBUF(ir,is,it)
244 wa(jj) =
max(wa(jj),lbuf%PLA(i))
245 ENDDO
246 ENDDO
247 ENDDO
248 ENDIF
249 ENDDO
250 ENDIF
251 ENDIF
252 ENDDO
253
254 ELSEIF (nbx == 25) THEN
255 DO i=lft,llt
256 jj=jj+1
257 IF (ity == 7) THEN
258
259 ELSE
260 wa(jj)=eani(nft + i + numels)
261 ENDIF
262 ENDDO
263
264 ELSEIF (nbx>=20.AND.nbx<=24.AND.ihbe == 11) THEN
265 CALL s_user(nbx,imx,ihbe,nel,npt,mlw,ipm,igeo, ixc,
266 . ity ,jj,elbuf_tab(ng),wa, nft, func,
267 . nlay,nptr,npts)
268
269 ELSEIF (nbx == 26) THEN
270 IF ((mlw>=29.AND.mlw<=31).OR.mlw == 35.OR.
271 . mlw == 36.OR.mlw == 43.OR.mlw == 44.OR.
272 . mlw == 45.OR.mlw == 48.OR.mlw>=50) THEN
273 npg=0
274 IF (ihbe == 11) THEN
275 IF (ity == 3) THEN
276 npg =4
277 fac = fourth
278 ELSEIF (ity == 7) THEN
279 npg =3
280 fac = third
281 ENDIF
282
283 IF (nlay > 1) THEN
284
285 DO i=1,nel
286 wa(jj + 1) = ihbe
287 wa(jj + 2) = npt
288 wa(jj + 3) = npg
289 wa(jj + 4) = nuvar
290 jj = jj + 4
291 DO il=1,nlay
292 nptt = elbuf_tab(ng)%BUFLY(il)%NPTT
293 DO ir=1,nptr
294 DO is=1,npts
295 DO it=1,nptt
296 mbuf => elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)
297 nuvar = elbuf_tab(ng)%BUFLY(il)%NVAR_MAT
298 DO nu= 1,nuvar
299 jj= jj + 1
300 i1 = (nu -1)*nel
301 wa(jj) = mbuf%VAR(i1 + i)
302 ENDDO
303 ENDDO
304 ENDDO
305 ENDDO
306 ENDDO
307 ENDDO
308 ELSE
309 il = 1
310 nptt = elbuf_tab(ng)%BUFLY(il)%NPTT
311 DO i=1,nel
312 wa(jj + 1) = ihbe
313 wa(jj + 2) = npt
314 wa(jj + 3) = npg
315 wa(jj + 4) = nuvar
316 jj = jj + 4
317 DO is=1,npts
318 DO ir=1,nptr
319 DO it=1,nptt
320 mbuf => elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)
321 nuvar = elbuf_tab(ng)%BUFLY(il)%NVAR_MAT
322 DO nu= 1,nuvar
323 jj= jj + 1
324 i1 = (nu-1)*nel
325 wa(jj
326 ENDDO
327 ENDDO
328 ENDDO
329 ENDDO
330 ENDDO
331 ENDIF
332 ELSE
333 DO i=lft,llt
334 wa(jj + 1) = ihbe
335 wa(jj + 2) = npt
336 wa(jj + 3) = npg
337 wa(jj + 4) = nuvar
338 jj = jj + 4
339 DO il=1,nlay
340 nptt = elbuf_tab(ng)%BUFLY(il)%NPTT
341 DO it=1,nptt
342 mbuf => elbuf_tab(ng)%BUFLY(il)%MAT(1,1,it)
343 nuvar = elbuf_tab(ng)%BUFLY(il)%NVAR_MAT
344 DO nu=1,nuvar
345 jj = jj + 1
346 i1 = (nu-1)*nel
347 wa(jj)= mbuf%VAR(i1 + i)
348 ENDDO
349 ENDDO
350 ENDDO
351 ENDDO
352 ENDIF
353 ENDIF
354
355 ELSEIF(nbx >= 27 .AND. nbx <= 86 )THEN
356 IF ((mlw>=29.AND.mlw<=31).OR.
357 . mlw == 35.OR.mlw == 36.OR.mlw == 43.OR.
358 . mlw == 44.OR.mlw == 45.OR.mlw == 48.OR.mlw>=50) THEN
359 npg=0
360 nu = nbx - 26
361 i1 = (nu -1)*nel
362 IF (ihbe == 11) THEN
363 IF (ity == 3) THEN
364 npg = 4
365 fac = fourth
366 ELSEIF(ity == 7)THEN
367 npg = 3
368 fac = third
369 ENDIF
370
371 wa(jj + 1) = ihbe
372 wa(jj + 2) = npt
373 wa(jj + 3) = npg
374 wa(jj + 4) = nel
375 jj = jj + 4
376 IF (nlay > 1) THEN
377
378 DO i=1,nel
379 DO il=1,nlay
380 nptt = elbuf_tab(ng)%BUFLY(il)%NPTT
381 DO is=1,npts
382 DO ir=1,nptr
383 DO it=1,nptt
384 mbuf => elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)
385 jj= jj + 1
386 wa(jj) = mbuf%VAR(i1 + i)
387 ENDDO
388 ENDDO
389 ENDDO
390 ENDDO
391 ENDDO
392 ELSE
393 il = 1
394 nptt = elbuf_tab(ng)%BUFLY(il)%NPTT
395 DO i=1,nel
396 DO is=1,npts
397 DO ir=1,nptr
398 DO it=1,nptt
399 nuvar = elbuf_tab(ng)%BUFLY(il)%NVAR_MAT
400 mbuf => elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,it)
401 jj= jj + 1
402 wa(jj) = mbuf%VAR(i1 + i)
403 ENDDO
404 ENDDO
405 ENDDO
406 ENDDO
407 ENDIF
408 ELSE
409 wa(jj + 1) = ihbe
410 wa(jj + 2) = npt
411 wa(jj + 3) = npg
412 wa(jj + 4) = nel
413 jj = jj + 4
414 DO i=lft,llt
415 DO il=1,nlay
416 nptt = elbuf_tab(ng)%BUFLY(il)%NPTT
417 DO it=1,nptt
418 mbuf => elbuf_tab(ng)%BUFLY(il)%MAT(1,1,it)
419 jj = jj + 1
420 wa(jj)= mbuf%VAR(i1
421 ENDDO
422 ENDDO
423 ENDDO
424 ENDIF
425 ENDIF
426
427 ELSEIF (nbx == 87) THEN
428
429 IF ( (mlw/=0).AND.(mlw/=13) ) THEN
430 IF (gbuf%G_SEQ > 0) THEN
431 IF (nlay > 1) THEN
432 il = iabs(nlay)/2 + 1
433 bufly => elbuf_tab(ng)%BUFLY(il)
434 nptt = elbuf_tab(ng)%BUFLY(il)%NPTT
435 IF (npg > 1) THEN
436 DO i=lft,llt
437 jj = jj + 1
438 DO it=1,nptt
439 lbuf1 => bufly%LBUF(1,1,it)
440 lbuf2 => bufly%LBUF(2,1,it)
441 lbuf3 => bufly%LBUF(1,2,it)
442 lbuf4 => bufly%LBUF(2,2,it)
443 mean_gauss = fourth*(lbuf1%SEQ(i) + lbuf2%SEQ(i) +
444 . lbuf3%SEQ(i) + lbuf4%SEQ(i))
445 wa(jj) = wa(jj) + mean_gauss/nptt
446
447
448 ENDDO
449 ENDDO
450 ELSE
451 DO i=lft,llt
452 jj = jj + 1
453 DO it=1,nptt
454 wa(jj) = wa(jj) + bufly%LBUF(1,1,it)%SEQ(i)/nptt
455 ENDDO
456
457 ENDDO
458 ENDIF
459 ELSEIF (npg > 1) THEN
460 nptt = elbuf_tab(ng)%BUFLY(1)%NPTT
461 ipt = iabs(nptt)/2 + 1
462
463 bufly => elbuf_tab(ng)%BUFLY(1)
464 DO i=lft,llt
465 jj = jj + 1
466 lbuf1 => bufly%LBUF(1,1,ipt)
467 lbuf2 => bufly%LBUF(2,1,ipt)
468 lbuf3 => bufly%LBUF(1,2,ipt)
469 lbuf4 => bufly%LBUF(2,2,ipt)
470 wa(jj) = fourth*(lbuf1%SEQ(i) + lbuf2%SEQ(i) +
471 . lbuf3%SEQ(i) + lbuf4%SEQ(i))
472 ENDDO
473 ELSE
474 nptt = elbuf_tab(ng)%BUFLY(1)%NPTT
475 ipt = iabs(nptt)/2 + 1
476
477 bufly => elbuf_tab(ng)%BUFLY(1)
478 DO i=lft,llt
479 jj = jj + 1
480 wa(jj) = bufly%LBUF(1,1,ipt)%SEQ(i)
481 ENDDO
482 ENDIF
483 ELSE
484 DO i=lft,llt
485 jj = jj + 1
486 s1 = gbuf%FOR(ij(1)+i)
487 s2 = gbuf%FOR(ij(2)+i)
488 s12= gbuf%FOR(ij(3)+i)
489 vonm2 = s1*s1 + s2*s2 - s1*s2 + three*s12*s12
490 wa(jj) = sqrt(vonm2)
491 ENDDO
492 ENDIF
493 ELSE
494 DO i=lft,llt
495 jj = jj + 1
496 wa(jj) = zero
497 ENDDO
498 ENDIF
499
500 ELSE
501 DO i=lft,llt
502 jj = jj + 1
503 wa(jj) = zero
504 ENDDO
505 ENDIF
506 ENDIF
507 ENDDO
508
509 ngf = ngl + 1
510 jj_loc(nn) = jj - compteur
511 compteur = jj
512 ENDDO
513
514 IF( nspmd>1 ) THEN
516 ELSE
517 wap0_loc(1:jj) = wa(1:jj)
518 adress(1,1) = 1
519 DO nn = 2,nspgroup+1
520 adress(nn,1) = jj_loc(nn-1) + adress(nn-1,1)
521 ENDDO
522 ENDIF
523
524 IF(ispmd==0) THEN
525 resp0 = 0
526 DO nn=1,nspgroup
527 compteur = 0
528 DO k = 1,nspmd
529 IF((adress(nn+1,k)-1-adress(nn,k))>=0) THEN
530 DO l = adress(nn,k),adress(nn+1,k)-1
531 compteur = compteur + 1
532 wap0(compteur+resp0) = wap0_loc(l)
533 ENDDO
534 ENDIF
535 ENDDO
536
537 jj_old = compteur+resp0
538
539 IF (jj_old > 0) THEN
540
541 IF (nbx == 26) THEN
542 j = 1
543 DO WHILE (j<jj_old+1)
544 ihbe = nint(wap0(j ))
545 npt = nint(wap0(j + 1))
546 npg = nint(wap0(j + 2))
547 nuvar = nint(wap0(j + 3))
548 j = j + 4
549 IF (outyy_fmt == 2) THEN
550 WRITE(iugeo,'(4I8)')ihbe,npt,npg,nuvar
551 ELSE
552 WRITE(iugeo,'(4I10)')ihbe,npt,npg,nuvar
553 ENDIF
554
555 IF (npg == 0) THEN
556 IF (npt == 0) THEN
557 IF (outyy_fmt == 2) THEN
558 WRITE(iugeo,'(1P6E12.5)')(wap0(j + k - 1),k=1,nuvar)
559 ELSE
560 WRITE(iugeo,'(1P6E20.13)')(wap0(j + k - 1),k=1,nuvar)
561 ENDIF
562 j = j + nuvar
563 ELSE
564 DO ipt = 1,npt
565 IF (outyy_fmt == 2) THEN
566 WRITE(iugeo,'(1P6E12.5)')(wap0(j + k - 1),k=1,nuvar)
567 ELSE
568 WRITE(iugeo,'(1P6E20.13)')(wap0(j + k - 1),k=1,nuvar)
569 ENDIF
570 j = j + nuvar
571 ENDDO
572 ENDIF
573 ELSE
574 IF (npt == 0) THEN
575 DO kk = 1,npg
576 IF (outyy_fmt == 2) THEN
577 WRITE(iugeo,'(1P6E12.5)')(wap0(j + k - 1),k=1,nuvar)
578 ELSE
579 WRITE(iugeo,'(1P6E20.13)')(wap0(j + k - 1),k=1,nuvar)
580 ENDIF
581 j = j + nuvar
582 ENDDO
583 ELSE
584 DO kk = 1,npg
585 DO ipt = 1,npt
586 IF(outyy_fmt == 2) THEN
587 WRITE(iugeo,'(1P6E12.5)')(wap0(j + k - 1),k=1,nuvar)
588 ELSE
589 WRITE(iugeo,'(1P6E20.13)')(wap0(j + k - 1),k=1,nuvar)
590 ENDIF
591 j = j + nuvar
592 ENDDO
593 ENDDO
594 ENDIF
595 ENDIF
596 ENDDO
597
598 ELSEIF (nbx >= 27 .AND. nbx <= 86) THEN
599 j = 1
600 DO WHILE (j<jj_old+1)
601 ihbe = nint(wap0(j ))
602 npt = nint(wap0(j + 1))
603 npg = nint(wap0(j + 2))
604 nel = nint(wap0(j + 3))
606 j = j + 4
607 WRITE(iugeo,'(a)')'#FORMAT:IHBE,NPT,NPG'
608 IF (outyy_fmt == 2) THEN
609 WRITE(iugeo,'(3I8)')ihbe,npt,npg
610 ELSE
611 WRITE(iugeo,'(3I10)')ihbe,npt,npg
612 ENDIF
613 IF (outyy_fmt == 2) THEN
614 WRITE(iugeo,
'(1P6E12.5)')(wap0(j + k - 1),k=1,
nvar)
615 ELSE
616 WRITE(iugeo,
'(1P6E20.13)')(wap0(j + k - 1),k=1,
nvar)
617 ENDIF
619 ENDDO
620
621 ELSE
622 res=mod(jj_old,6)
623 wrtlen=jj_old-res
624 IF (wrtlen > 0) THEN
625 IF (outyy_fmt == 2) THEN
626 WRITE(iugeo,'(1P6E12.5)')(wap0(j),j=1,wrtlen)
627 ELSE
628 WRITE(iugeo,'(1P6E20.13)')(wap0(j),j=1,wrtlen)
629 ENDIF
630 ENDIF
631 DO i=1,res
632 wap0(i)=wap0(wrtlen+i)
633 ENDDO
634 resp0=res
635 ENDIF
636
637 ENDIF
638
639 ENDDO
640
641 IF (resp0>0) THEN
642 IF (outyy_fmt == 2) THEN
643 WRITE(iugeo,'(1P6E12.5)')(wap0(j),j=1,resp0)
644 ELSE
645 WRITE(iugeo,'(1P6E20.13)')(wap0(j),j=1,resp0)
646 ENDIF
647 ENDIF
648
649 ENDIF
650
651 RETURN
integer function nvar(text)
subroutine s_user(nbx, imx, ihbe, nel, npt, mlw, ipm, igeo, ixc, ity, jj, elbuf_tab, wa, nft, func, nlay, nptr, npts)
subroutine spmd_rgather9_1comm(v, sizv, len, vp0, sizv0, adress)