The TELEMAC-MASCARET system  trunk
parcom2i_seg.f
Go to the documentation of this file.
1 ! ***********************
2  SUBROUTINE parcom2i_seg
3 ! ***********************
4 !
5  &( x1 , x2 , x3 , nseg , nplan , icom , ian , mesh , opt , ielm )
6 !
7 !***********************************************************************
8 ! BIEF V7P0 21/08/2010
9 !***********************************************************************
10 !
11 !brief COMPLEMENTS A VECTOR OF SEGMENT AT THE INTERFACES
12 !+ BETWEEN SUB-DOMAINS.
13 !+
14 !+ X CAN BE A BLOCK OF VECTORS. IN THIS CASE, ALL THE
15 !+ VECTORS IN THE BLOCK ARE TREATED.
16 !
17 !note IN 3D, THE FINITE VOLUME SEGMENTS IN PRISMS ARE
18 !+ CONSIDERED HERE, I.E. HORIZONTAL FIRST : NSEG*NPLAN
19 !+ THEN, VERTICAL : NPOIN2*(NPLAN-1).
20 !
21 !warning IF THE VECTORS HAVE A SECOND DIMENSION, IT IS
22 !+ IGNORED FOR THE TIME BEING
23 !
24 !history J-M HERVOUET (LNHE)
25 !+ 19/11/2013
26 !+ V7P0
27 !+ Mere copy of PARCOM2_SEG for integers.
28 !
29 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
30 !| IAN |-->| NUMBER OF VECTORS TO BE TREATED (X1, X2, X3)
31 !| ICOM |-->| COMMUNICATION MODE
32 !| | | = 1 : VALUE WITH MAXIMUM ABSOLUTE VALUE TAKEN
33 !| | | = 2 : CONTRIBUTIONS ADDED
34 !| | | = 3 : MAXIMUM CONTRIBUTION RETAINED
35 !| | | = 4 : MINIMUM CONTRIBUTION RETAINED
36 !| IELM |-->| TYPE OF ELEMENT (11: LINEAR TRIANGLE, ETC.)
37 !| MESH |-->| MESH STRUCTURE
38 !| NPLAN |-->| NUMBER OF PLANES
39 !| NSEG |-->| NUMBER OF 2D SEGMENTS
40 !| OPT |-->| 1 : HORIZONTAL AND VERTICAL SEGMENTS ONLY
41 !| | | 2 : ALL SEGMENTS
42 !| X1 |<->| INTEGER VECTOR TO BE COMPLETED, SEE IAN
43 !| X2 |<->| INTEGER VECTOR TO BE COMPLETED, SEE IAN
44 !| X3 |<->| INTEGER VECTOR TO BE COMPLETED, SEE IAN
45 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
46 !
47  USE bief, ex_parcom2i_seg => parcom2i_seg
48 !
50  IMPLICIT NONE
51 !
52 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
53 !
54  INTEGER, INTENT(IN) :: ICOM,NSEG,NPLAN,IAN,OPT,IELM
55 !
56 ! STRUCTURES: VECTORS OR BLOCKS
57 !
58  TYPE(bief_mesh) , INTENT(INOUT) :: MESH
59 !
60 ! IN 2D X1(NSEG)
61 ! IN 3D X1(NSEG*NPLAN+NPOIN2*(NPLAN-1))
62 !
63  INTEGER, INTENT(INOUT) :: X1(*),X2(*),X3(*)
64 !
65 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
66 !
67  INTEGER NPOIN2,IDEB,IFIN,IPLAN,NPL
68 !
69 !-----------------------------------------------------------------------
70 !
71  IF(nplan.GT.1) THEN
72 !
73 ! 1) HORIZONTAL FLUXES
74 !
75  DO iplan=1,nplan
76  ideb=1+nseg*(iplan-1)
77  ifin= nseg* iplan
78  CALL paracoi(x1(ideb:ifin),x2(ideb:ifin),x3(ideb:ifin),
79  & nseg,icom,ian,1,
80  & mesh%NB_NEIGHB_SEG,mesh%NB_NEIGHB_PT_SEG%I,
81  & mesh%LIST_SEND_SEG%I,mesh%NH_COM_SEG%I,
82  & mesh%NH_COM_SEG%DIM1,mesh%BUF_SEND%I,
83  & mesh%BUF_RECV%I,mesh%BUF_SEND%DIM1)
84  ENDDO
85 !
86 ! 2) VERTICAL FLUXES
87 !
88  npoin2=mesh%NPOIN
89  DO iplan=1,nplan-1
90  ideb=nseg*nplan + npoin2*(iplan-1) + 1
91  ifin=nseg*nplan + npoin2* iplan
92  CALL parcom2i(x1(ideb:ifin),x2(ideb:ifin),x3(ideb:ifin),
93  & npoin2,1,icom,ian,mesh)
94  ENDDO
95 !
96 ! 3) CROSSED FLUXES
97 !
98  IF(opt.EQ.2) THEN
99  DO iplan=1,nplan-1
100  IF(ielm.EQ.41) THEN
101 ! TWO CROSSED FLUXES (PER RECTANGLE OF PRISM)
102  npl=2
103  ideb=nseg*nplan+npoin2*(nplan-1)+2*nseg*(iplan-1) + 1
104  ifin=nseg*nplan+npoin2*(nplan-1)+2*nseg* iplan
105  ELSEIF(ielm.EQ.51) THEN
106 ! ONE CROSSED FLUX (PER ORIGINAL RECTANGLE OF PRISM)
107  npl=1
108  ideb=nseg*nplan+npoin2*(nplan-1)+nseg*(iplan-1) + 1
109  ifin=nseg*nplan+npoin2*(nplan-1)+nseg* iplan
110  ELSE
111  WRITE(lu,*) 'UNKNOWN ELEMENT IN PARCOM2_SEG: ',ielm
112  CALL plante(1)
113  stop
114  ENDIF
115  CALL paracoi(x1(ideb:ifin),x2(ideb:ifin),x3(ideb:ifin),
116  & nseg,icom,ian,npl,
117  & mesh%NB_NEIGHB_SEG,mesh%NB_NEIGHB_PT_SEG%I,
118  & mesh%LIST_SEND_SEG%I,mesh%NH_COM_SEG%I,
119  & mesh%NH_COM_SEG%DIM1,mesh%BUF_SEND%I,
120  & mesh%BUF_RECV%I,mesh%BUF_SEND%DIM1)
121  ENDDO
122  ENDIF
123 !
124  ELSE
125 !
126  CALL paracoi(x1,x2,x3,
127  & nseg,icom,ian,1,
128  & mesh%NB_NEIGHB_SEG,mesh%NB_NEIGHB_PT_SEG%I,
129  & mesh%LIST_SEND_SEG%I,mesh%NH_COM_SEG%I,
130  & mesh%NH_COM_SEG%DIM1,mesh%BUF_SEND%I,
131  & mesh%BUF_RECV%I,mesh%BUF_SEND%DIM1)
132 !
133  ENDIF
134 !
135 !-----------------------------------------------------------------------
136 !
137  RETURN
138  END
subroutine paracoi(V1, V2, V3, NPOIN, ICOM, IAN, NPLAN, NB_NEIGHB, NB_NEIGHB_PT, LIST_SEND, NH_COM, DIMNHCOM, BUF_SEND, BUF_RECV, DIMBUF)
Definition: paracoi.f:8
subroutine parcom2i(X1, X2, X3, NPOIN, NPLAN, ICOM, IAN, MESH)
Definition: parcom2i.f:7
subroutine parcom2i_seg(X1, X2, X3, NSEG, NPLAN, ICOM, IAN, MESH, OPT, IELM)
Definition: parcom2i_seg.f:7
Definition: bief.f:3