169
170
171
172
173
174
175#include "implicit_f.inc"
176
177
178
179#include "com01_c.inc"
180#include "com04_c.inc"
181#include "scr15_c.inc"
182#include "param_c.inc"
183#include "units_c.inc"
184#include "units_fxbody_c.inc"
185#include "fxbcom.inc"
186
187
188
189 INTEGER FXBIPM(NBIPM,*), FXBNOD(*), NODLOCAL(*), IPARG(NPARG,*),
190 . FXBELM(*), FXBNOD_L(*), FXBELM_L(*), PROC,
191 . FXBIPM_L(NBIPM,*), FXBGRVI(*),
192 . FXBGRVI_L(*), LENNOD_L
194 . fxbmod_l(*), fxbsig_l(*), fxbmod(*), fxbsig(*)
195
196
197
198 INTEGER NLOCAL
200
201
202
203 INTEGER RCLEN, LB_L, NG, P, IAD_L(NGROUP), LBUFELI, ANOD_L,
204 . AMOD_L, IRCM_L, AELM_L, ASIG_L, IRCS_L, NFX, I, ,
205 . NSNI, IFILE, NMOD, NME, IRCM, ANOD, AMOD, NSN_L, NSNI_L,
206 . II, ASIG, IRCS, NELS, NELC, NELT, NELP, NELTG, AELM,
207 . , NELC_L, NELT_L, NELP_L, NELTG_L, J, K, ELM(13),
208 . LVSIG, IAD, JJ, ASIG2, ASIG_L2, LVSIG2, NMAX, PMAIN, PP,
209 . AGRVI_L, NLG, AGRVI, IADG, IADG_L, IG, NNO, NNO_L,
210 . NG_L(NGROUP), IADFXB(LENNOD_L),ITASK
212 . flrec6(6), var(6)
214 . , DIMENSION(:), ALLOCATABLE :: vsig, vsig2
215 CHARACTER(LEN=4) :: CIT
216 CHARACTER(LEN=256) :: SCR_FILE_NAME,SCR_FILE_NAME2
217
218 INQUIRE(iolength=rclen) flrec6
219
220
221 ifxm_l = 27000
222 ifxs_l = 28000
223 nels_l = 0
224 nelc_l = 0
225 nelt_l = 0
226 nelp_l = 0
227 neltg_l = 0
228
229
230 WRITE(cit,'(I4.4)')itask
231 scr_file_name ='SCR_FXM_'//rootnam(1:rootlen)//'_'//cit(1:4)//'.scr'
232 scr_file_name2='SCR_FXS_'//rootnam(1:rootlen)//'_'//cit'.scr'
233
234 OPEN(unit=ifxm_l+itask,file=trim(scr_file_name),access='DIRECT',recl=rclen)
235 OPEN(unit=ifxs_l+itask,file=trim(scr_file_name2),access='DIRECT',recl=rclen)
236
237 lb_l=1
238 ii=0
239 DO ng=1,ngroup
240 p=iparg(32,ng)
241 IF (p==proc) THEN
242 ii=ii+1
243 ng_l(ng)=ii
244 iad_l(ng)=lb_l
245 IF (ng<ngroup) THEN
246 lbufeli=iparg(4,ng+1)-iparg(4,ng)
247 ELSE
248 lbufeli=lbufel+1-iparg(4,ng)
249 ENDIF
250 lb_l=lb_l+lbufeli
251 ENDIF
252 ENDDO
253
254 anod_l=0
255 amod_l=0
256 ircm_l=0
257 aelm_l=0
258 asig_l=0
259 ircs_l=0
260 agrvi_l=1
261 DO nfx=1,nfxbody
262 DO i=1,nbipm
263 fxbipm_l(i,nfx)=fxbipm(i,nfx)
264 ENDDO
265
266 fxbipm_l(2,nfx)=nodlocal(fxbipm(2,nfx))
267
268 nsn=fxbipm(3,nfx)
269 nsni=fxbipm(18,nfx)
270 ifile=fxbipm(29,nfx)
271 nmod=fxbipm(4,nfx)
272 nme=fxbipm(17,nfx)
273 ircm=fxbipm(30,nfx)
274
275 anod=fxbipm(6,nfx)
276 amod=fxbipm(7,nfx)
277 fxbipm_l(6,nfx)=anod_l+1
278 fxbipm_l(7,nfx)=amod_l+1
279 nsn_l=0
280 nsni_l=0
281 DO i=1,nsni
282 ii=fxbnod(anod+i-1)
283 IF (nodlocal(ii)/=0) THEN
284 nsn_l=nsn_l+1
285 nsni_l=nsni_l+1
286 anod_l=anod_l+1
287 fxbnod_l(anod_l)=nodlocal(ii)
288 iadfxb(nsn_l)=i
289 ENDIF
290 ENDDO
291 DO i=nsni+1,nsn
292 ii=fxbnod(anod+i-1)
293 IF (nodlocal(ii)/=0) THEN
294 nsn_l=nsn_l+1
295 anod_l=anod_l+1
296 fxbnod_l(anod_l)=nodlocal(ii)
297 iadfxb(nsn_l)=i
298 ENDIF
299 ENDDO
300 fxbipm_l(3,nfx)=nsn_l
301 fxbipm_l(18,nfx)=nsni_l
302 DO i=1,nsn_l
303 anod_l=anod_l+1
304 fxbnod_l(anod_l)=iadfxb(i)
305 ENDDO
306 fxbipm_l(30,nfx)=ircm_l
307 IF (ifile==0) THEN
308 DO i=1,nme+nmod
309 DO j=1,nsn
310 jj=fxbnod(anod+j-1)
311 IF (nodlocal(jj)/=0) THEN
312 DO k=1,6
313 fxbmod_l(amod_l+k)=fxbmod(amod-1+6*(j-1)+k)
314 ENDDO
315 amod_l=amod_l+6
316 ENDIF
317 ENDDO
318 amod=amod+6*nsn
319 ENDDO
320 ELSEIF (ifile==1) THEN
321 DO i=1,nme+nmod
322 DO j=1,nsni
323 jj=fxbnod(anod+j-1)
324 IF (nodlocal(jj)/=0) THEN
325 DO k=1,6
326 fxbmod_l(amod_l+k)=fxbmod(amod-1+6*(j-1)+k)
327 ENDDO
328 amod_l=amod_l+6
329 ENDIF
330 ENDDO
331 amod=amod+6*nsni
332 DO j=nsni+1,nsn
333 ircm=ircm+1
334 jj=fxbnod(anod+j-1)
335 IF (nodlocal(jj)/=0) THEN
336
337 READ(ifxm,rec=ircm) (var(k),k=1,6)
338
339 ircm_l=ircm_l+1
340 WRITE(ifxm_l+itask,rec=ircm_l) (var(k),k=1,6)
341 ENDIF
342 ENDDO
343 ENDDO
344 ENDIF
345 fxbipm_l(32,nfx)=ircm_l
346
347
348 asig=fxbipm(20,nfx)
349 ircs=fxbipm(31,nfx)
350 nels=fxbipm(21,nfx)
351 nelc=fxbipm(22,nfx)
352 nelt=fxbipm(34,nfx)
353 nelp=fxbipm(35,nfx)
354 neltg=fxbipm(23,nfx)
355
356 fxbipm_l(19,nfx)=aelm_l+1
357 fxbipm_l(20,nfx)=asig_l+1
358
359 DO i=1,nmod
360 aelm=fxbipm(19,nfx)
361 nels_l=0
362 nelc_l=0
363 nelt_l=0
364 nelp_l=0
365 neltg_l=0
366 IF (ifile==0) THEN
367 DO j=1,nels
368 ng=fxbelm(aelm)
369 p=iparg(32,ng)
370 iad=iparg(4,ng)
371 IF (p==proc) THEN
372 nels_l=nels_l+1
373 IF (i==1) THEN
374 DO k=1,13
375 elm(k)=fxbelm(aelm+k-1)
376 ENDDO
377 elm(1)=ng_l(ng)
378 elm(11)=elm(11)-iad+iad_l(ng)
379 elm(12)=elm(12)-iad+iad_l(ng)
380 DO k=1,13
381 fxbelm_l(aelm_l+k)=elm(k)
382 ENDDO
383 aelm_l=aelm_l+13
384 ENDIF
385 DO k=1,7
386 fxbsig_l(asig_l+k)=fxbsig(asig+k-1)
387 ENDDO
388 asig_l=asig_l+7
389 ENDIF
390 aelm=aelm+13
391 asig=asig+7
392 ENDDO
393 DO j=1,nelc
394 ng=fxbelm(aelm)
395 p=iparg(32,ng)
396 iad=iparg(4,ng)
397 IF (p==proc) THEN
398 nelc_l=nelc_l+1
399 IF (i==1) THEN
400 DO k=1,10
401 elm(k)=fxbelm(aelm+k-1)
402 ENDDO
403 elm(1)=ng_l(ng)
404 elm(7)=elm(7)-iad+iad_l(ng)
405 elm(8)=elm(8)-iad+iad_l(ng)
406 elm(9)=elm(9)-iad+iad_l(ng)
407 DO k=1,10
408 fxbelm_l(aelm_l+k)=elm(k)
409 ENDDO
410 aelm_l=aelm_l+10
411 ENDIF
412 DO k=1,10
413 fxbsig_l(asig_l+k)=fxbsig(asig+k-1)
414 ENDDO
415 asig_l=asig_l+10
416 ENDIF
417 aelm=aelm+10
418 asig=asig+10
419 ENDDO
420 DO j=1,nelt
421 ng=fxbelm(aelm)
422 p=iparg(32,ng)
423 iad=iparg(4,ng)
424 IF (p==proc) THEN
425 nelt_l=nelt_l+1
426 IF (i==1) THEN
427 DO k=1,7
428 elm(k)=fxbelm(aelm+k-1)
429 ENDDO
430 elm(1)=ng_l(ng)
431 elm(5)=elm(5)-iad+iad_l(ng)
432 elm(6)=elm(6)-iad+iad_l(ng)
433 DO k=1,7
434 fxbelm_l(aelm_l+k)=elm(k)
435 ENDDO
436 aelm_l=aelm_l+7
437 ENDIF
438 DO k=1,2
439 fxbsig_l(asig_l+k)=fxbsig(asig+k-1)
440 ENDDO
441 asig_l=asig_l+2
442 ENDIF
443 aelm=aelm+7
444 asig=asig+2
445 ENDDO
446 DO j=1,nelp
447 ng=fxbelm(aelm)
448 p=iparg(32,ng)
449 iad=iparg(4,ng)
450 IF (p==proc) THEN
451 nelp_l=nelp_l+1
452 IF (i==1) THEN
453 DO k=1,9
454 elm(k)=fxbelm(aelm+k-1)
455 ENDDO
456 elm(1)=ng_l(ng)
457 elm(6)=elm(6)-iad+iad_l(ng)
458 elm(7)=elm(7)-iad+iad_l(ng)
459 elm(8)=elm(8)-iad+iad_l(ng)
460 DO k=1,9
461 fxbelm_l(aelm_l+k)=elm(k)
462 ENDDO
463 aelm_l=aelm_l+9
464 ENDIF
465 DO k=1,8
466 fxbsig_l(asig_l+k)=fxbsig(asig+k-1)
467 ENDDO
468 asig_l=asig_l+8
469 ENDIF
470 aelm=aelm+9
471 asig=asig+8
472 ENDDO
473 DO j=1,neltg
474 ng=fxbelm(aelm)
475 p=iparg(32,ng)
476 iad=iparg(4,ng)
477 IF (p==proc) THEN
478 neltg_l=neltg_l+1
479 IF (i==1) THEN
480 DO k=1,9
481 elm(k)=fxbelm(aelm+k-1)
482 ENDDO
483 elm(1)=ng_l(ng)
484 elm(6)=elm(6)-iad+iad_l(ng)
485 elm(7)=elm(7)-iad+iad_l(ng)
486 elm(8)=elm(8)-iad+iad_l(ng)
487 DO k=1,9
488 fxbelm_l(aelm_l+k)=elm(k)
489 ENDDO
490 aelm_l=aelm_l+9
491 ENDIF
492 DO k=1,10
493 fxbsig_l(asig_l+k)=fxbsig(asig+k-1)
494 ENDDO
495 asig_l=asig_l+10
496 ENDIF
497 aelm=aelm+9
498 asig=asig+10
499 ENDDO
500 ELSEIF (ifile==1) THEN
501 lvsig=nels*7+nelc*10+nelt*2+nelp*8+neltg*10
502 ALLOCATE(vsig(lvsig), vsig2(lvsig))
503 iad=0
504 DO j=1,lvsig/6
505 ircs=ircs+1
506
507 READ(ifxs,rec=ircs) (vsig(iad+k),k=1,6)
508
509 iad=iad+6
510 ENDDO
511 jj=lvsig-(lvsig/6)*6
512 IF (jj>0) THEN
513 ircs=ircs+1
514
515 READ(ifxs,rec=ircs) (vsig(iad+k),k=1,jj)
516
517 ENDIF
518
519 asig2=0
520 asig_l2=0
521 DO j=1,nels
522 ng=fxbelm(aelm)
523 p=iparg(32,ng)
524 iad=iparg(4,ng)
525 IF (p==proc) THEN
526 nels_l=nels_l+1
527 IF (i==1) THEN
528 DO k=1,13
529 elm(k)=fxbelm(aelm+k-1)
530 ENDDO
531 elm(1)=ng_l(ng)
532 elm(11)=elm(11)-iad+iad_l(ng)
533 elm(12)=elm(12)-iad+iad_l(ng)
534 DO k=1,13
535 fxbelm_l(aelm_l+k)=elm(k)
536 ENDDO
537 aelm_l=aelm_l+13
538 ENDIF
539 DO k=1,7
540 vsig2(asig_l2+k)=vsig(asig2+k)
541 ENDDO
542 asig_l2=asig_l2+7
543 ENDIF
544 aelm=aelm+13
545 asig2=asig2+7
546 ENDDO
547 DO j=1,nelc
548 ng=fxbelm(aelm)
549 p=iparg(32,ng)
550 iad=iparg(4,ng)
551 IF (p==proc) THEN
552 nelc_l=nelc_l+1
553 IF (i==1) THEN
554 DO k=1,10
555 elm(k)=fxbelm(aelm+k-1)
556 ENDDO
557 elm(1)=ng_l(ng)
558 elm(7)=elm(7)-iad+iad_l(ng)
559 elm(8)=elm(8)-iad+iad_l(ng)
560 elm(9)=elm(9)-iad+iad_l(ng)
561 DO k=1,10
562 fxbelm_l(aelm_l+k)=elm(k)
563 ENDDO
564 aelm_l=aelm_l+10
565 ENDIF
566 DO k=1,10
567 vsig2(asig_l2+k)=vsig(asig2+k)
568 ENDDO
569 asig_l2=asig_l2+10
570 ENDIF
571 aelm=aelm+10
572 asig2=asig2+10
573 ENDDO
574 DO j=1,nelt
575 ng=fxbelm(aelm)
576 p=iparg(32,ng)
577 iad=iparg(4,ng)
578 IF (p==proc) THEN
579 nelt_l=nelt_l+1
580 IF (i==1) THEN
581 DO k=1,7
582 elm(k)=fxbelm(aelm+k-1)
583 ENDDO
584 elm(1)=ng_l(ng)
585 elm(5)=elm(5)-iad+iad_l(ng)
586 elm(6)=elm(6)-iad+iad_l(ng)
587 DO k=1,7
588 fxbelm_l(aelm_l+k)=elm(k)
589 ENDDO
590 aelm_l=aelm_l+7
591 ENDIF
592 DO k=1,2
593 vsig2(asig_l2+k)=vsig(asig2+k)
594 ENDDO
595 asig_l2=asig_l2+2
596 ENDIF
597 aelm=aelm+7
598 asig2=asig2+2
599 ENDDO
600 DO j=1,nelp
601 ng=fxbelm(aelm)
602 p=iparg(32,ng)
603 iad=iparg(4,ng)
604 IF (p==proc) THEN
605 nelp_l=nelp_l+1
606 IF (i==1) THEN
607 DO k=1,9
608 elm(k)=fxbelm(aelm+k-1)
609 ENDDO
610 elm(1)=ng_l(ng)
611 elm(6)=elm(6)-iad+iad_l(ng)
612 elm(7)=elm(7)-iad+iad_l(ng)
613 elm(8)=elm(8)-iad+iad_l(ng)
614 DO k=1,9
615 fxbelm_l(aelm_l+k)=elm(k)
616 ENDDO
617 aelm_l=aelm_l+9
618 ENDIF
619 DO k=1,8
620 vsig2(asig_l2+k)=vsig(asig2+k)
621 ENDDO
622 asig_l2=asig_l2+8
623 ENDIF
624 aelm=aelm+9
625 asig2=asig2+8
626 ENDDO
627 DO j=1,neltg
628 ng=fxbelm(aelm)
629 p=iparg(32,ng)
630 iad=iparg(4,ng)
631 IF (p==proc) THEN
632 neltg_l=neltg_l+1
633 IF (i==1) THEN
634 DO k=1,9
635 elm(k)=fxbelm(aelm+k-1)
636 ENDDO
637 elm(1)=ng_l(ng)
638 elm(6)=elm(6)-iad+iad_l(ng)
639 elm(7)=elm(7)-iad+iad_l(ng)
640 elm(8)=elm(8)-iad+iad_l(ng)
641 DO k=1,9
642 fxbelm_l(aelm_l+k)=elm(k)
643 ENDDO
644 aelm_l=aelm_l+9
645 ENDIF
646 DO k=1,10
647 vsig2(asig_l2+k)=vsig(asig2+k)
648 ENDDO
649 asig_l2=asig_l2+10
650 ENDIF
651 aelm=aelm+9
652 asig2=asig2+10
653 ENDDO
654
655 lvsig2=nels_l*7+nelc_l*10+nelt_l*2+nelp_l*8+neltg_l*10
656 iad=0
657 DO j=1,lvsig2/6
658 ircs_l=ircs_l+1
659 WRITE(ifxs_l+itask,rec=ircs_l) (vsig2(iad+k),k=1,6)
660 iad=iad+6
661 ENDDO
662 jj=lvsig2-(lvsig2/6)*6
663 IF (jj/=0) THEN
664 ircs_l=ircs_l+1
665 WRITE(ifxs_l+itask,rec=ircs_l) (vsig2(iad+k),k=1,jj)
666 ENDIF
667 DEALLOCATE(vsig, vsig2)
668 ENDIF
669 ENDDO
670 fxbipm_l(21,nfx)=nels_l
671 fxbipm_l(22,nfx)=nelc_l
672 fxbipm_l(34,nfx)=nelt_l
673 fxbipm_l(35,nfx)=nelp_l
674 fxbipm_l(23,nfx)=neltg_l
675 fxbipm_l(33,nfx)=ircs_l
676
677 nlg=fxbipm(25,nfx)
678 agrvi=fxbipm(26,nfx)
679 fxbipm_l(26,nfx)=agrvi_l
680 iadg=0
681 iadg_l=0
682 DO ig=1,nlg
683 fxbgrvi_l(agrvi_l+iadg_l)=fxbgrvi(agrvi+iadg)
684 nno=fxbgrvi(agrvi+iadg+1)
685 nno_l=0
686 DO i=1,nno
687 ii=fxbgrvi(agrvi+iadg+i+1)
688 IF (nodlocal(ii)/=0) THEN
689 nno_l=nno_l+1
690 fxbgrvi_l(agrvi_l+iadg_l+nno_l+1)=nodlocal(ii)
691 ENDIF
692 ENDDO
693 iadg=iadg+2+nno
694 fxbgrvi_l(agrvi_l+iadg_l+1)=nno_l
695 iadg_l=iadg_l+2+nno_l
696 ENDDO
697 agrvi_l=agrvi_l+iadg_l
698
699 nmax=0
700 pmain=1
701 DO p=1,nspmd
702 nsn_l=0
703 DO i=1,nsn
704 ii=fxbnod(anod+i-1)
706 DO pp = 1, p-1
708 GOTO 100
709 ENDIF
710 ENDDO
711 nsn_l=nsn_l+1
712 100 CONTINUE
713 ENDIF
714 ENDDO
715 IF(nsn_l>nmax)THEN
716 pmain=p
717 nmax=nsn_l
718 ENDIF
719 ENDDO
720 fxbipm_l(39,nfx)=pmain-1
721 fxbipm_l(40,nfx)=fxbipm(18,nfx)
722 ENDDO
723 lennod_l=lennod_l*2
724
725 RETURN