320
321
322
323
324
325
326
327
332 USE intbufdef_mod
333#ifdef WITH_ASSERT
334 use, intrinsic :: iso_fortran_env
335 use, intrinsic :: ieee_arithmetic
336#endif
337
338
339
340 USE spmd_comm_world_mod, ONLY : spmd_comm_world
341#include "implicit_f.inc"
342
343
344
345#include "spmd.inc"
346
347
348
349#include "com01_c.inc"
350#include "com04_c.inc"
351#include "param_c.inc"
352#include "task_c.inc"
353#include "i25edge_c.inc"
354
355
356
357 INTEGER :: IPARI(NPARI,NINTER), INTLIST25(*)
358 TYPE(INTBUF_STRUCT_) :: INTBUF_TAB(*)
359 my_real,
INTENT(IN) :: x(3,numnod)
360
361
362
363#ifdef MPI
364 INTEGER :: NI25
365 INTEGER ::
366 INTEGER :: NB
367 INTEGER :: IEDGE
368 INTEGER :: P
369 INTEGER :: SEND_SIZE
370 INTEGER :: RECV_SIZE
371 INTEGER :: K,I,I1,I2,IE,JE,IED,L,L0
372 TYPE(MPI_COMM_NOR_STRUCT) , DIMENSION(NINTER25) :: BUFFERS
373 INTEGER :: IERROR
374 INTEGER :: MSGTYP,MSGOFF
375 INTEGER :: EID
376 INTEGER :: IM,M1,M2
377 INTEGER :: NEDGE_LOCAL
378 INTEGER :: IGLOB,IBEGIN
379 INTEGER :: N1,N2,N3,N4,NN1,NN2,PP,TYPEDG
380 INTEGER :: NRTM
381 REAL *4 :: SP
382#ifdef WITH_ASSERT
383 real (real32) :: nan32
384#endif
385 DATA msgoff/163/
386 INTEGER NTRIA(3,4)
387 DATA ntria/1,2,4,2,4,1,0,0,0,4,1,2/
388
389
390#ifdef MYREAL8
391 INTEGER, PARAMETER :: NB_VALUES = 3 + 12 + 4 + 12 * 2 + 3 * 2
392
393#else
394 INTEGER, PARAMETER :: NB_VALUES = 3 + 12 + 4 + 12 + 3 * 2
395
396#endif
397
398
399
400
401
402 DO ni25=1,ninter25
403 n = intlist25(ni25)
404 iedge = ipari(58,n)
405 IF( iedge > 0 ) THEN
406 buffers(ni25)%NBIRECV = 0
407
408 ALLOCATE(buffers(ni25)%SEND_RQ(nspmd))
409 ALLOCATE(buffers(ni25)%RECV_RQ(nspmd))
410 ALLOCATE(buffers(ni25)%IAD_RECV(nspmd+1))
411 ALLOCATE(buffers(ni25)%IAD_SEND(nspmd+1))
412
413 send_size = 0
414 recv_size = 0
415 buffers(ni25)%IAD_SEND(1) = 1
416 buffers(ni25)%IAD_RECV(1) = 1
417 DO p = 1, nspmd
419 send_size = send_size + nb*nb_values
420 buffers(ni25)%IAD_SEND(p+1) = buffers(ni25)%IAD_SEND(p) + nb
421
423 recv_size = recv_size + nb*nb_values
424 buffers(ni25)%IAD_RECV(p+1) = buffers(ni25)%IAD_RECV(p) + nb
425 ENDDO
426 ALLOCATE(buffers(ni25)%SEND_BUF(send_size))
427 ALLOCATE(buffers(ni25)%RECV_BUF(recv_size))
428 DO p = 1, nspmd
429 recv_size = nb_values * ( buffers(ni25)%IAD_RECV(p+1)-buffers(ni25)%IAD_RECV(p))
430 buffers(ni25)%RECV_RQ(p) = mpi_request_null
431 IF(recv_size > 0) THEN
432 buffers(ni25)%NBIRECV = buffers(ni25)%NBIRECV + 1
433 msgtyp = msgoff
434 i = buffers(ni25)%IAD_RECV(p)
435 l = (i-1) * nb_values + 1
436 assert(l > 0)
437
438
439
440
442 . buffers(ni25)%RECV_BUF(l),
443 . recv_size,
444 . mpi_real4,
445 . it_spmd(p),
446 . msgtyp,
447 . spmd_comm_world,
448 . buffers(ni25)%RECV_RQ(p),
449 . ierror)
450 ENDIF
451 ENDDO
452 ENDIF
453 ENDDO
454
455
456
457 DO ni25=1,ninter25
458 n = intlist25(ni25)
459 iedge = ipari(58,n)
460 IF( iedge > 0 ) THEN
461 nedge_local = intbuf_tab(n)%NB_INTERNAL_EDGES + intbuf_tab(n)%NB_BOUNDARY_EDGES_LOCAL
462
463 buffers(ni25)%NBISEND = 0
464 DO p = 1, nspmd
465 buffers(ni25)%SEND_RQ(p) = mpi_request_null
466 send_size = ( buffers(ni25)%IAD_SEND(p+1)-buffers(ni25)%IAD_SEND(p)) * nb_values
467 DO i = buffers(ni25)%IAD_SEND(p), buffers(ni25)%IAD_SEND(p+1)-1
469
470 ie = intbuf_tab(n)%LEDGE((ied-1)*nledge+1)
471 je = intbuf_tab(n)%LEDGE((ied-1)*nledge+2)
472
473 debug_e2e(intbuf_tab(n)%LEDGE((ied-1)*nledge+8) == d_es,p-1)
474 m1 = intbuf_tab(n)%LEDGE(5+(ied-1)*nledge)
475 m2 = intbuf_tab(n)%LEDGE(6+(ied-1)*nledge)
476 im = intbuf_tab(n)%LEDGE(10+(ied-1)*nledge)
477
478 typedg = intbuf_tab(n)%LEDGE((ied-1)*nledge+7)
479 IF(typedg == 1 .AND. ie > 0) THEN
480 nn1 = intbuf_tab(n)%ADMSR(je+(ie-1)*4)
481 nn2 = intbuf_tab(n)%ADMSR(mod(je,4)+1+(ie-1)*4)
482 ELSE
483 nn1 = 0
484 nn2 = 0
485 ENDIF
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530 nrtm = ipari(4,n)
531
532 printif(4 +(ie-1)*4 > 4 * nrtm,nrtm)
533 printif(4 +(ie-1)*4 > 4 * nrtm,ie)
534
535 IF(ie > 0) THEN
536 IF(intbuf_tab(n)%IRECTM(3 +(ie-1)*4)
537 . /= intbuf_tab(n)%IRECTM(4 +(ie-1)*4) ) THEN
538 n1 = intbuf_tab(n)%IRECTM( je +(ie-1)*4)
539 n2 = intbuf_tab(n)%IRECTM(mod(je,4) +1+(ie-1)*4)
540 n3 = intbuf_tab(n)%IRECTM(mod(je+1,4)+1+(ie-1)*4)
541 n4 = intbuf_tab(n)%IRECTM(mod(je+2,4)+1+(ie-1)*4)
542 ELSE
543 n1 = intbuf_tab(n)%IRECTM(ntria(1,je)+(ie-1)*4)
544 n2 = intbuf_tab(n)%IRECTM(ntria(2,je)+(ie-1)*4)
545 n3 = intbuf_tab(n)%IRECTM(ntria(3,je)+(ie-1)*4)
546 n4 = n3
547 END IF
548 ENDIF
549
550 i1 = intbuf_tab(n)%LEDGE(11+(ied-1)*nledge)
551 i2 = intbuf_tab(n)%LEDGE(12+(ied-1)*nledge)
552
553 l = (i-1) * nb_values
554
555 IF(ie > 0) THEN
556 buffers(ni25)%SEND_BUF(l+1) = intbuf_tab(n)%EDGE_BISECTOR(to1d(1,je,ie,3,4))
557 buffers(ni25)%SEND_BUF(l+2) = intbuf_tab(n)%EDGE_BISECTOR(to1d(2,je,ie,3,4))
558 buffers(ni25)%SEND_BUF(l+3) = intbuf_tab(n)%EDGE_BISECTOR(to1d(3,je,ie,3,4))
559
560 ELSEIF (ie < 0) THEN
561
562
563 buffers(ni25)%SEND_BUF(l+1) = intbuf_tab(n)%EDGE_BISECTOR(to1d(1,je,-ie,3,4))
564 buffers(ni25)%SEND_BUF(l+2) = intbuf_tab(n)%EDGE_BISECTOR(to1d(2,je,-ie,3,4))
565 buffers(ni25)%SEND_BUF(l+3) = intbuf_tab(n)%EDGE_BISECTOR(to1d(3,je,-ie,3,4))
566 ELSE
567 assert(.false.)
568 ENDIF
569
570
571 buffers(ni25)%SEND_BUF(l+4) = intbuf_tab(n)%VTX_BISECTOR(to1d(1,1,i1,3,2))
572 buffers(ni25)%SEND_BUF(l+5) = intbuf_tab(n)%VTX_BISECTOR(to1d(2,1,i1,3,2))
573 buffers(ni25)%SEND_BUF(l+6) = intbuf_tab(n)%VTX_BISECTOR(to1d(3,1,i1,3,2))
574 buffers(ni25)%SEND_BUF(l+7) = intbuf_tab(n)%VTX_BISECTOR(to1d(1,2,i1,3,2))
575 buffers(ni25)%SEND_BUF(l+8) = intbuf_tab(n)%VTX_BISECTOR(to1d(2,2,i1,3,2))
576 buffers(ni25)%SEND_BUF(l+9) = intbuf_tab(n)%VTX_BISECTOR(to1d(3,2,i1,3,2))
577 buffers(ni25)%SEND_BUF(l+10) = intbuf_tab(n)%VTX_BISECTOR(to1d(1,1,i2,3,2))
578 buffers(ni25)%SEND_BUF(l+11) = intbuf_tab(n)%VTX_BISECTOR(to1d(2,1,i2,3,2))
579 buffers(ni25)%SEND_BUF(l+12) = intbuf_tab(n)%VTX_BISECTOR(to1d(3,1,i2,3,2))
580 buffers(ni25)%SEND_BUF(l+13) = intbuf_tab(n)%VTX_BISECTOR(to1d(1,2,i2,3,2))
581 buffers(ni25)%SEND_BUF(l+14) = intbuf_tab(n)%VTX_BISECTOR(to1d(2,2,i2,3,2))
582 buffers(ni25)%SEND_BUF(l+15) = intbuf_tab(n)%VTX_BISECTOR(to1d(3,2,i2,3,2))
583
584
585
586 assert( .NOT. isnan( buffers(ni25)%SEND_BUF(l+5) ))
587 assert( .NOT. isnan( buffers(ni25)%SEND_BUF(l+6) ))
588 assert( .NOT. isnan( buffers(ni25)%SEND_BUF(l+7) ))
589 assert( .NOT. isnan( buffers(ni25)%SEND_BUF(l+8) ))
590 assert( .NOT. isnan( buffers(ni25)%SEND_BUF(l+9) ))
591 assert( .NOT. isnan( buffers(ni25)%SEND_BUF(l+10)))
592 assert( .NOT. isnan( buffers(ni25)%SEND_BUF(l+11)))
593 assert( .NOT. isnan( buffers(ni25)%SEND_BUF(l+12)))
594 assert( .NOT. isnan( buffers(ni25)%SEND_BUF(l+13)))
595 assert( .NOT. isnan( buffers(ni25)%SEND_BUF(l+14)))
596 assert( .NOT. isnan( buffers(ni25)%SEND_BUF(l+15)))
597
598 buffers(ni25)%SEND_BUF(l+16) =
599 . transfer(intbuf_tab(n)%LEDGE((ied-1)*nledge+1),buffers(ni25)%SEND_BUF(l+16))
600 buffers(ni25)%SEND_BUF(l+17) =
601 . transfer(intbuf_tab(n)%LEDGE((ied-1)*nledge+2),buffers(ni25)%SEND_BUF(l+17))
602 buffers(ni25)%SEND_BUF(l+18) =
603 . transfer(intbuf_tab(n)%LEDGE
604 buffers(ni25)%SEND_BUF(l+19) =
605 . transfer(intbuf_tab(n)%LEDGE((ied-1)*nledge+4),buffers(ni25)%SEND_BUF(l+19))
606
607 eid = intbuf_tab(n)%LEDGE((ied-1)*nledge+ledge_global_id)
608 debug_e2e(eid==d_es, intbuf_tab(n)%LEDGE((ied-1)*nledge+3))
609
610
611 debug_e2e(intbuf_tab(n)%LEDGE((ied-1)*nledge+8) == d_es,x(1,n1))
612 debug_e2e(intbuf_tab(n)%LEDGE((ied-1)*nledge+8) == d_es,x(2,n1))
613 debug_e2e(intbuf_tab(n)%LEDGE((ied-1)*nledge+8) == d_es,x(3,n1))
614 debug_e2e(intbuf_tab(n)%LEDGE((ied-1)*nledge+8) == d_es,x(1,n2))
615 debug_e2e(intbuf_tab(n)%LEDGE((ied-1)*nledge+8) == d_es,x(2,n2))
616 debug_e2e(intbuf_tab(n)%LEDGE((ied-1)*nledge+8) == d_es,x(3,n2))
617 debug_e2e(intbuf_tab(n)%LEDGE((ied-1)*nledge
618 debug_e2e(intbuf_tab(n)%LEDGE((ied-1)*nledge+8) == d_es,x(2,n3))
619 debug_e2e(intbuf_tab(n)%LEDGE((ied-1)*nledge+8) == d_es,x(3,n3))
620 debug_e2e(intbuf_tab(n)%LEDGE((ied-1)*nledge+8) == d_es,x(1,n4))
621 debug_e2e(intbuf_tab(n)%LEDGE((ied-1)*nledge+8) == d_es,x(2,n4))
622 debug_e2e(intbuf_tab(n)%LEDGE((ied-1)*nledge+8) == d_es,x(3,n4))
623
624 IF(ie > 0) THEN
625#ifdef MYREAL8
626 buffers(ni25)%SEND_BUF(l+20:l+20+1)=transfer(x(1,n1),sp,2)
627 buffers(ni25)%SEND_BUF(l+22:l+22+1)=transfer(x(2,n1),sp,2)
628 buffers(ni25)%SEND_BUF(l+24:l+24+1)=transfer(x(3,n1),sp,2)
629 buffers(ni25)%SEND_BUF(l+26:l+26+1)=transfer(x(1,n2),sp,2)
630 buffers(ni25)%SEND_BUF(l+28:l+28+1)=transfer(x(2,n2),sp,2)
631 buffers(ni25)%SEND_BUF(l+30:l+30+1)=transfer(x(3,n2),sp,2)
632 buffers(ni25)%SEND_BUF(l+32:l+32+1)=transfer(x(1,n3),sp,2)
633 buffers(ni25)%SEND_BUF(l+34:l+34+1)=transfer(x(2,n3),sp,2)
634 buffers(ni25)%SEND_BUF(l+36:l+36+1)=transfer(x(3,n3),sp,2)
635 buffers(ni25)%SEND_BUF(l+38:l+38+1)=transfer(x(1,n4),sp,2)
636 buffers(ni25)%SEND_BUF(l+40:l+40+1)=transfer(x(2,n4),sp,2)
637 buffers(ni25)%SEND_BUF(l+42:l+42+1)=transfer(x(3,n4),sp,2)
638 pp = 43
639#else
640 buffers(ni25)%SEND_BUF(l+20) = x(1,n1)
641 buffers(ni25)%SEND_BUF(l+21) = x(2,n1)
642 buffers(ni25)%SEND_BUF(l+22) = x(3,n1)
643 buffers(ni25)%SEND_BUF(l+23) = x(1,n2)
644 buffers(ni25)%SEND_BUF(l+24) = x(2,n2)
645 buffers(ni25)%SEND_BUF(l+25) = x(3,n2)
646 buffers(ni25)%SEND_BUF(l+26) = x(1,n3)
647 buffers(ni25)%SEND_BUF(l+27) = x(2,n3)
648 buffers(ni25)%SEND_BUF(l+28) = x(3,n3)
649 buffers(ni25)%SEND_BUF(l+29) = x(1,n4)
650 buffers(ni25)%SEND_BUF(l+30) = x(2,n4)
651 buffers(ni25)%SEND_BUF(l+31) = x(3,n4)
652 pp = 31
653#endif
654 ELSE
655#ifdef MYREAL8
656 buffers(ni25)%SEND_BUF(l+20) = 0
657 buffers(ni25)%SEND_BUF(l+21) = 0
658 buffers(ni25)%SEND_BUF(l+22) = 0
659 buffers(ni25)%SEND_BUF(l+23) = 0
660 buffers(ni25)%SEND_BUF(l+24) = 0
661 buffers(ni25)%SEND_BUF(l+25) = 0
662 buffers(ni25)%SEND_BUF(l+26) = 0
663 buffers(ni25)%SEND_BUF(l+27) = 0
664 buffers(ni25)%SEND_BUF(l+28) = 0
665 buffers(ni25)%SEND_BUF(l+29) = 0
666 buffers(ni25)%SEND_BUF(l+30) = 0
667 buffers(ni25)%SEND_BUF(l+31) = 0
668 buffers(ni25)%SEND_BUF(l+32) = 0
669 buffers(ni25)%SEND_BUF(l+33) = 0
670 buffers(ni25)%SEND_BUF(l+34) = 0
671 buffers(ni25)%SEND_BUF(l+35) = 0
672 buffers(ni25)%SEND_BUF(l+36) = 0
673 buffers(ni25)%SEND_BUF(l+37) = 0
674 buffers(ni25)%SEND_BUF(l+38) = 0
675 buffers(ni25)%SEND_BUF(l+39) = 0
676 buffers(ni25)%SEND_BUF(l+40) = 0
677 buffers(ni25)%SEND_BUF(l+41) = 0
678 buffers(ni25)%SEND_BUF(l+42) = 0
679 buffers(ni25)%SEND_BUF(l+43) = 0
680
681 pp = 43
682#else
683 buffers(ni25)%SEND_BUF(l+20) = 0
684 buffers(ni25)%SEND_BUF(l+21) = 0
685 buffers(ni25)%SEND_BUF(l+22) = 0
686 buffers(ni25)%SEND_BUF(l+23) = 0
687 buffers(ni25)%SEND_BUF(l+24) = 0
688 buffers(ni25)%SEND_BUF(l+25) = 0
689 buffers(ni25)%SEND_BUF(l+26) = 0
690 buffers(ni25)%SEND_BUF(l+27) = 0
691 buffers(ni25)%SEND_BUF(l+28) = 0
692 buffers(ni25)%SEND_BUF(l+29) = 0
693 buffers(ni25)%SEND_BUF(l+30) = 0
694 buffers(ni25)%SEND_BUF(l+31) = 0
695 pp = 31
696#endif
697 ENDIF
698
699
700
701 IF(typedg == 1 .AND. nn1 > 0) THEN
702
703 buffers(ni25)%SEND_BUF(l+pp+1) = intbuf_tab(n)%E2S_NOD_NORMAL(3*(nn1-1)+1)
704 buffers(ni25)%SEND_BUF(l+pp+2) = intbuf_tab(n)%E2S_NOD_NORMAL(3*(nn1-1)+2)
705 buffers(ni25)%SEND_BUF(l+pp+3) = intbuf_tab(n)%E2S_NOD_NORMAL(3*(nn1-1)+3)
706
707 buffers(ni25)%SEND_BUF(l+pp+4) = intbuf_tab(n)%E2S_NOD_NORMAL(3*(nn2-1)+1)
708 buffers(ni25)%SEND_BUF(l+pp+5) = intbuf_tab(n)%E2S_NOD_NORMAL(3*(nn2-1)+2)
709 buffers(ni25)%SEND_BUF(l+pp+6) = intbuf_tab(n)%E2S_NOD_NORMAL(3*(nn2-1)+3)
710 ELSE
711 buffers(ni25)%SEND_BUF(l+pp+1) = 0
712 buffers(ni25)%SEND_BUF(l+pp+2) = 0
713 buffers(ni25)%SEND_BUF(l+pp+3) = 0
714
715 buffers(ni25)%SEND_BUF(l+pp+4) = 0
716 buffers(ni25)%SEND_BUF(l+pp+5) = 0
717 buffers(ni25)%SEND_BUF(l+pp+6) = 0
718 ENDIF
719
720
721
722 ENDDO
723 IF(send_size > 0) THEN
724 buffers(ni25)%NBISEND = buffers(ni25)%NBISEND + 1
725 msgtyp = msgoff
726 i = buffers(ni25)%IAD_SEND(p)
727 l = (i-1) * nb_values+1
728
729
730
732 . buffers(ni25)%SEND_BUF(l),
733 . send_size,
734 . mpi_real4,
735 . it_spmd(p),
736 . msgtyp,
737 . spmd_comm_world,
738 . buffers(ni25)%SEND_RQ(p),
739 . ierror)
740 ENDIF
741 ENDDO
742 ENDIF
743 ENDDO
744
745#ifdef WITH_ASSERT
746 nan32 = ieee_value(nan32,ieee_quiet_nan)
747 do ni25=1,ninter25
748 n = intlist25(ni25)
749 iedge = ipari(58,n)
750 if( iedge > 0 ) then
751 do p = 1,nspmd
752 iglob = 0
754 iglob = iglob + 1
770 enddo
771 enddo
772 endif
773 enddo
774#endif
775
776
777 DO ni25=1,ninter25
778 n = intlist25(ni25)
779 iedge = ipari(58,n)
780 IF( iedge > 0 ) THEN
781 DO k = 1,buffers(ni25)%NBIRECV
782
783 CALL flush(6)
784 CALL mpi_waitany(nspmd,buffers(ni25)%RECV_RQ,p,mpi_status_ignore,ierror)
785
786 l0 = (buffers(ni25)%IAD_RECV(p) - 1)*nb_values
787 ibegin = 0
788 IF( p > 1) THEN
789 DO l = 1,p-1
790 IF( l - 1 /= ispmd) ibegin = ibegin +
nsnfie(n)%P(l)
791 ENDDO
792 ENDIF
794 l = l0 + (i-1) * nb_values
795 iglob = i + ibegin
796
812
813
814 assert(.NOT. isnan(buffers(ni25)%RECV_BUF(l+1 )))
815 assert(.NOT. isnan(buffers(ni25)%RECV_BUF(l+2 )))
816 assert(.NOT. isnan(buffers(ni25)%RECV_BUF(l+3 )))
817 assert(.NOT. isnan(buffers(ni25)%RECV_BUF(l+4 )))
818 assert(.NOT. isnan(buffers(ni25)%RECV_BUF(l+5 )))
819 assert(.NOT. isnan(buffers(ni25)%RECV_BUF(l+6 )))
820 assert(.NOT. isnan(buffers(ni25)%RECV_BUF(l+7 )))
821 assert(.NOT. isnan(buffers(ni25)%RECV_BUF(l+8 )))
822 assert(.NOT. isnan(buffers(ni25)%RECV_BUF(l+9 )))
823 assert(.NOT. isnan(buffers(ni25)%RECV_BUF(l+10)))
824 assert(.NOT. isnan(buffers(ni25)%RECV_BUF(l+11)))
825 assert(.NOT. isnan(buffers(ni25)%RECV_BUF(l+12)))
826 assert(.NOT. isnan(buffers(ni25)%RECV_BUF(l+13)))
827 assert(.NOT. isnan(buffers(ni25)%RECV_BUF(l+14)))
828 assert(.NOT. isnan(buffers(ni25)%RECV_BUF(l+15)))
829
831 . transfer(buffers(ni25)%RECV_BUF(l+16),l0)
833 . transfer(buffers(ni25)%RECV_BUF(l+17),l0)
835 . transfer(buffers(ni25)%RECV_BUF(l+18),l0)
837 . transfer(buffers(ni25)%RECV_BUF(l+19),l0)
838
839
840
842
843#ifdef MYREAL8
844 x_seg_fie(n)%P(1,1,iglob) =transfer( buffers(ni25)%RECV_BUF(l+20:l+20+1),one)
845 x_seg_fie(n)%P(2,1,iglob) =transfer( buffers(ni25)%RECV_BUF(l+22:l+22+1),one)
846 x_seg_fie(n)%P(3,1,iglob) =transfer( buffers(ni25)%RECV_BUF(l+24:l+24+1),one)
847 x_seg_fie(n)%P(1,2,iglob) =transfer( buffers(ni25)%RECV_BUF(l+26:l+26+1),one)
848 x_seg_fie(n)%P(2,2,iglob) =transfer( buffers(ni25)%RECV_BUF(l+28:l+28+1),one)
849 x_seg_fie(n)%P(3,2,iglob) =transfer( buffers(ni25)%RECV_BUF(l+30:l+30+1),one)
850 x_seg_fie(n)%P(1,3,iglob) =transfer( buffers(ni25)%RECV_BUF(l+32:l+32+1),one)
851 x_seg_fie(n)%P(2,3,iglob) =transfer( buffers(ni25)%RECV_BUF(l+34:l+34+1),one)
852 x_seg_fie(n)%P(3,3,iglob) =transfer( buffers(ni25)%RECV_BUF(l+36:l+36+1),one)
853 x_seg_fie(n)%P(1,4,iglob) =transfer( buffers(ni25)%RECV_BUF(l+38:l+38+1),one)
854 x_seg_fie(n)%P(2,4,iglob) =transfer( buffers(ni25)%RECV_BUF(l+40:l+40+1),one)
855 x_seg_fie(n)%P(3,4,iglob) =transfer( buffers(ni25)%RECV_BUF(l+42:l+42+1),one)
856 pp = 43
857#else
858 x_seg_fie(n)%P(1,1,iglob) = buffers(ni25)%RECV_BUF(l+20)
859 x_seg_fie(n)%P(2,1,iglob) = buffers(ni25)%RECV_BUF(l+21)
860 x_seg_fie(n)%P(3,1,iglob) = buffers(ni25)%RECV_BUF(l+22)
861 x_seg_fie(n)%P(1,2,iglob) = buffers(ni25)%RECV_BUF(l+23)
862 x_seg_fie(n)%P(2,2,iglob) = buffers(ni25)%RECV_BUF(l+24)
863 x_seg_fie(n)%P(3,2,iglob) = buffers(ni25)%RECV_BUF(l+25)
864 x_seg_fie(n)%P(1,3,iglob) = buffers(ni25)%RECV_BUF(l+26)
865 x_seg_fie(n)%P(2,3,iglob) = buffers(ni25)%RECV_BUF(l+27)
866 x_seg_fie(n)%P(3,3,iglob) = buffers(ni25)%RECV_BUF(l+28)
867 x_seg_fie(n)%P(1,4,iglob) = buffers(ni25)%RECV_BUF(l+29)
868 x_seg_fie(n)%P(2,4,iglob) = buffers(ni25)%RECV_BUF(l+30)
869 x_seg_fie(n)%P(3,4,iglob) = buffers(ni25)%RECV_BUF(l+31)
870 pp = 31
871#endif
875
879
880 ENDDO
881 ENDDO
882 ENDIF
883 ENDDO
884
885#ifdef WITH_ASSERT
886
887 nan32 = ieee_value(nan32,ieee_quiet_nan)
888 do ni25=1,ninter25
889 n = intlist25(ni25)
890 iedge = ipari(58,n)
891 if( iedge > 0 ) then
892 do p = 1,nspmd
893 iglob = 0
895 iglob = iglob + 1
911 enddo
912 enddo
913 endif
914 enddo
915#endif
916
917
918
919 DO ni25=1,ninter25
920 n = intlist25(ni25)
921 iedge = ipari(58,n)
922 IF( iedge > 0 ) THEN
923 CALL mpi_waitall(nspmd,buffers(ni25)%SEND_RQ,mpi_statuses_ignore,ierror)
924
925 DEALLOCATE(buffers(ni25)%SEND_BUF)
926 DEALLOCATE(buffers(ni25)%RECV_BUF)
927 DEALLOCATE(buffers(ni25)%SEND_RQ)
928 DEALLOCATE(buffers(ni25)%RECV_RQ)
929 DEALLOCATE(buffers(ni25)%IAD_RECV)
930 DEALLOCATE(buffers(ni25)%IAD_SEND)
931 ENDIF
932 ENDDO
933
934#endif
935 RETURN
subroutine mpi_waitall(cnt, array_of_requests, status, ierr)
subroutine mpi_waitany(cnt, array_of_requests, index, status, ierr)
type(real4_pointer3), dimension(:), allocatable edg_bisector_fie
type(real4_pointer3), dimension(:), allocatable vtx_bisector_fie
type(real_pointer3), dimension(:), allocatable x_seg_fie
type(int_pointer2), dimension(:), allocatable ledge_fie
type(int_pointer), dimension(:), allocatable nsnfie
type(int_pointer), dimension(:), allocatable nsnsie
type(int_pointer), dimension(:), allocatable nsvsie