The TELEMAC-MASCARET system  trunk
mult_interface_seg.f
Go to the documentation of this file.
1 ! *****************************
2  SUBROUTINE mult_interface_seg
3 ! *****************************
4 !
5  &(fseg,nh_com_seg,dim1nhcom,nb_neighb_seg,
6  & nb_neighb_pt_seg,list_send,nseg)
7 !
8 !***********************************************************************
9 ! BIEF V7P1
10 !***********************************************************************
11 !
12 !brief Shares a function defined on segments between sub-domains.
13 !
14 !history J-M HERVOUET (LNHE)
15 !+ 27/02/2009
16 !+ V5P9
17 !+ First version.
18 !
19 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
20 !+ 13/07/2010
21 !+ V6P0
22 !+ Translation of French comments within the FORTRAN sources into
23 !+ English comments
24 !
25 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
26 !+ 21/08/2010
27 !+ V6P0
28 !+ Creation of DOXYGEN tags for automated documentation and
29 !+ cross-referencing of the FORTRAN sources
30 !
31 !history J-M HERVOUET (EDF LAB, LNHE)
32 !+ 12/06/2015
33 !+ V7P1
34 !+ Now one sub-domain receives all, the others nothing.
35 !
36 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37 !| DIM1NHCOM |-->| FIRST DIMENSION OF NH_COM_SEG
38 !| FSEG |<->| THE FUNCTION DEFINED ON SEGMENTS
39 !| LIST_SEND |-->| RANKS OF NEIGHBOURING SUB-DOMAINS
40 !| NB_NEIGHB_PT_SEG|-->| NUMBER OF SEGMENTS SHARED WITH A NEIGHBOUR
41 !| | | PROCESSOR
42 !| NB_NEIGHB_SEG |-->| NUMBER OF NEIGHBOUR PROCESSORS (FOR SEGMENTS)
43 !| NH_COM_SEG |-->| ADDRESSES OF INTERFACE SEGMENTS
44 !| NSEG |-->| NUMBER OF SEGMENTS
45 !| XMUL |-->| THE CONSTANT
46 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
47 !
48  USE bief
49 !
51  IMPLICIT NONE
52 !
53 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
54 !
55  INTEGER, INTENT(IN) :: DIM1NHCOM,NB_NEIGHB_SEG,NSEG
56  INTEGER, INTENT(INOUT) :: NH_COM_SEG(dim1nhcom,nb_neighb_seg)
57  INTEGER, INTENT(IN) :: NB_NEIGHB_PT_SEG(nb_neighb_seg)
58  INTEGER, INTENT(IN) :: LIST_SEND(nb_neighb_seg)
59  DOUBLE PRECISION, INTENT(INOUT) :: FSEG(nseg)
60 !
61 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
62 !
63  INTEGER ISEG,IPROC,IADSEG
64 !
65 !-----------------------------------------------------------------------
66 !
67 ! DONE ONLY IF THERE IS AT LEAST ONE OTHER SUB-DOMAIN SHARING
68 ! A SEGMENT WITH THIS ONE
69 !
70  IF(nb_neighb_seg.GT.0) THEN
71 !
72 ! LOOP ON ALL NEIGHBOURING SUB-DOMAINS
73 !
74  DO iproc=1,nb_neighb_seg
75 !
76 ! ONLY THE PROCESSOR WITH HIGHEST RANK WILL KEEP ITS VALUES
77 ! OTHERS ARE CANCELLED
78  IF(ipid.LT.list_send(iproc)) THEN
79 ! LOOP ON ALL SEGMENTS SHARED WITH THIS SUB-DOMAIN
80 ! WHICH CANNOT BE SHARED WITH ANOTHER SUB-DOMAIN (UNLIKE POINTS)
81  DO iseg=1,nb_neighb_pt_seg(iproc)
82 ! ADDRESS IN SEGMENT NUMBERING
83  iadseg=nh_com_seg(iseg,iproc)
84  fseg(iadseg)=0.d0
85  ENDDO
86  ENDIF
87 !
88  ENDDO
89 !
90  ENDIF
91 !
92 !-----------------------------------------------------------------------
93 !
94  RETURN
95  END
96 
subroutine mult_interface_seg(FSEG, NH_COM_SEG, DIM1NHCOM, NB_NEIGHB_SEG, NB_NEIGHB_PT_SEG, LIST_SEND, NSEG)
Definition: bief.f:3