The TELEMAC-MASCARET system  trunk
parcom2_seg.f
Go to the documentation of this file.
1 ! **********************
2  SUBROUTINE parcom2_seg
3 ! **********************
4 !
5  &( x1 , x2 , x3 , nseg , nplan , icom , ian , mesh , opt , ielm )
6 !
7 !***********************************************************************
8 ! BIEF V6P2 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/10/09
26 !+ V6P0
27 !+
28 !
29 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
30 !+ 13/07/2010
31 !+ V6P0
32 !+ Translation of French comments within the FORTRAN sources into
33 !+ English comments
34 !
35 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
36 !+ 21/08/2010
37 !+ V6P0
38 !+ Creation of DOXYGEN tags for automated documentation and
39 !+ cross-referencing of the FORTRAN sources
40 !
41 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
42 !| IAN |-->| NUMBER OF VECTORS TO BE TREATED (X1, X2, X3)
43 !| ICOM |-->| COMMUNICATION MODE
44 !| | | = 1 : VALUE WITH MAXIMUM ABSOLUTE VALUE TAKEN
45 !| | | = 2 : CONTRIBUTIONS ADDED
46 !| | | = 3 : MAXIMUM CONTRIBUTION RETAINED
47 !| | | = 4 : MINIMUM CONTRIBUTION RETAINED
48 !| IELM |-->| TYPE OF ELEMENT (11: LINEAR TRIANGLE, ETC.)
49 !| MESH |-->| MESH STRUCTURE
50 !| NPLAN |-->| NUMBER OF PLANES
51 !| NSEG |-->| NUMBER OF 2D SEGMENTS
52 !| OPT |-->| 1 : HORIZONTAL AND VERTICAL SEGMENTS ONLY
53 !| | | 2 : ALL SEGMENTS
54 !| X1 |<->| VECTOR TO BE COMPLETED, SEE IAN
55 !| X2 |<->| VECTOR TO BE COMPLETED, SEE IAN
56 !| X3 |<->| VECTOR TO BE COMPLETED, SEE IAN
57 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
58 !
59  USE bief, ex_parcom2_seg => parcom2_seg
60 !
62  IMPLICIT NONE
63 !
64 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
65 !
66  INTEGER, INTENT(IN) :: ICOM,NSEG,NPLAN,IAN,OPT,IELM
67 !
68 ! STRUCTURES: VECTORS OR BLOCKS
69 !
70  TYPE(bief_mesh) , INTENT(INOUT) :: MESH
71 !
72 ! IN 2D X1(NSEG)
73 ! IN 3D X1(NSEG*NPLAN+NPOIN2*(NPLAN-1))
74 !
75  DOUBLE PRECISION, INTENT(INOUT) :: X1(*),X2(*),X3(*)
76 !
77 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
78 !
79  INTEGER NPOIN2,IDEB,IFIN,IPLAN,NPL
80 !
81 !-----------------------------------------------------------------------
82 !
83  IF(nplan.GT.1) THEN
84 !
85 ! 1) HORIZONTAL FLUXES
86 !
87  DO iplan=1,nplan
88  ideb=1+nseg*(iplan-1)
89  ifin= nseg* iplan
90  CALL paraco(x1(ideb:ifin),x2(ideb:ifin),x3(ideb:ifin),
91  & nseg,icom,ian,1,
92  & mesh%NB_NEIGHB_SEG,mesh%NB_NEIGHB_PT_SEG%I,
93  & mesh%LIST_SEND_SEG%I,mesh%NH_COM_SEG%I,
94  & mesh%NH_COM_SEG%DIM1,mesh%BUF_SEND%R,
95  & mesh%BUF_RECV%R,mesh%BUF_SEND%DIM1)
96  ENDDO
97 !
98 ! 2) VERTICAL FLUXES
99 !
100  npoin2=mesh%NPOIN
101  DO iplan=1,nplan-1
102  ideb=nseg*nplan + npoin2*(iplan-1) + 1
103  ifin=nseg*nplan + npoin2* iplan
104  CALL parcom2(x1(ideb:ifin),x2(ideb:ifin),x3(ideb:ifin),
105  & npoin2,1,icom,ian,mesh)
106  ENDDO
107 !
108 ! 3) CROSSED FLUXES
109 !
110  IF(opt.EQ.2) THEN
111  DO iplan=1,nplan-1
112  IF(ielm.EQ.41) THEN
113 ! TWO CROSSED FLUXES (PER RECTANGLE OF PRISM)
114  npl=2
115  ideb=nseg*nplan+npoin2*(nplan-1)+2*nseg*(iplan-1) + 1
116  ifin=nseg*nplan+npoin2*(nplan-1)+2*nseg* iplan
117  ELSEIF(ielm.EQ.51) THEN
118 ! ONE CROSSED FLUX (PER ORIGINAL RECTANGLE OF PRISM)
119  npl=1
120  ideb=nseg*nplan+npoin2*(nplan-1)+nseg*(iplan-1) + 1
121  ifin=nseg*nplan+npoin2*(nplan-1)+nseg* iplan
122  ELSE
123  WRITE(lu,*) 'UNKNOWN ELEMENT IN PARCOM2_SEG: ',ielm
124  CALL plante(1)
125  stop
126  ENDIF
127  CALL paraco(x1(ideb:ifin),x2(ideb:ifin),x3(ideb:ifin),
128  & nseg,icom,ian,npl,
129  & mesh%NB_NEIGHB_SEG,mesh%NB_NEIGHB_PT_SEG%I,
130  & mesh%LIST_SEND_SEG%I,mesh%NH_COM_SEG%I,
131  & mesh%NH_COM_SEG%DIM1,mesh%BUF_SEND%R,
132  & mesh%BUF_RECV%R,mesh%BUF_SEND%DIM1)
133  ENDDO
134  ENDIF
135 !
136  ELSE
137 !
138  CALL paraco(x1,x2,x3,
139  & nseg,icom,ian,1,
140  & mesh%NB_NEIGHB_SEG,mesh%NB_NEIGHB_PT_SEG%I,
141  & mesh%LIST_SEND_SEG%I,mesh%NH_COM_SEG%I,
142  & mesh%NH_COM_SEG%DIM1,mesh%BUF_SEND%R,
143  & mesh%BUF_RECV%R,mesh%BUF_SEND%DIM1)
144 !
145  ENDIF
146 !
147 !-----------------------------------------------------------------------
148 !
149  RETURN
150  END
subroutine parcom2_seg(X1, X2, X3, NSEG, NPLAN, ICOM, IAN, MESH, OPT, IELM)
Definition: parcom2_seg.f:7
subroutine parcom2(X1, X2, X3, NPOIN, NPLAN, ICOM, IAN, MESH)
Definition: parcom2.f:7
subroutine paraco(V1, V2, V3, NPOIN, ICOM, IAN, NPLAN, NB_NEIGHB, NB_NEIGHB_PT, LIST_SEND, NH_COM, DIMNHCOM, BUF_SEND, BUF_RECV, DIMBUF)
Definition: paraco.f:8
Definition: bief.f:3