The TELEMAC-MASCARET system  trunk
na_flux3d_lim.f
Go to the documentation of this file.
1 ! ************************
2  SUBROUTINE na_flux3d_lim
3 ! ************************
4 !
5  &(w,flulim,nseg2d,nelem,nelmax,nelem2,nelmax2,eltseg)
6 !
7 !***********************************************************************
8 ! BIEF V6P2 24/08/2012
9 !***********************************************************************
10 !
11 !brief LIMITS 3D HORIZONTAL FLUXES IN A NON ASSEMBLED ELEMENT BY
12 ! ELEMENT ARRAY. FOR PRISMS. FIRST THE FLUXES ARE COMPUTED
13 ! WITH THE FINITE ELEMENT FLUXES. THEN LIMITATION IS DONE,
14 ! THEN FINITE ELEMENT FLUXES ARE REASSEMBLED.
15 !
16 !history J-M HERVOUET (LNHE)
17 !+ 23/08/2012
18 !+ V6P2
19 !+ First version.
20 !
21 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
22 !| ELTSEG |-->| ELEMENTS THAT FORM A TRIANGLE
23 !| FLULIM |-->| LIMITING FACTOR OF 2D SEGMENTS
24 !| NELEM |-->| NUMBER OF ELEMENTS IN 3D
25 !| NELEM2 |-->| NUMBER OF ELEMENTS IN 2D
26 !| NSEG2D |-->| NUMBER OF SEGMENTS IN 2D
27 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS IN 3D
28 !| NELMAX2 |-->| MAXIMUM NUMBER OF ELEMENTS IN 2D
29 !| W |-->| FINITE ELEMENT FLUXES (I.E. LEAVING POINTS)
30 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
31 !
32  USE bief
33 !
35  IMPLICIT NONE
36 !
37 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
38 !
39  INTEGER, INTENT(IN) :: NSEG2D,NELMAX
40  INTEGER, INTENT(IN) :: NELEM,NELEM2,NELMAX2
41  INTEGER, INTENT(IN) :: ELTSEG(nelmax2,3)
42  DOUBLE PRECISION, INTENT(INOUT) :: W(nelmax,6)
43  DOUBLE PRECISION, INTENT(IN) :: FLULIM(nseg2d)
44 !
45 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
46 !
47  INTEGER IELEM,IELEM2
48  DOUBLE PRECISION F12,F23,F31,A1,A2,A3,F1,F2,F3
49 !
50 !-----------------------------------------------------------------------
51 !
52 ! LIMITS 3D HORIZONTAL FLUXES BY COEFFICIENT OF 2D FLUXES
53 !
54 ! POINT TO POINT FLUXES ARE COMPUTED
55 ! SEE FLUX_EF_VF IN BIEF, OPTION 2
56 ! THEN THEY ARE REGROUPED ON POINTS
57 !
58 !-----------------------------------------------------------------------
59 !
60 ! HORIZONTAL SEGMENTS
61 !
62  DO ielem=1,nelem
63 !
64  ielem2=mod(ielem-1,nelem2)+1
65 !
66 ! LOWER LEVEL (SUM OF 3 W MUST BE 0, IT IS WITH VC04PP)
67 !
68  f1 = w(ielem,1)
69  f2 = w(ielem,2)
70  f3 = w(ielem,3)
71  a1 = abs(f1)
72  a2 = abs(f2)
73  a3 = abs(f3)
74  f12=0.d0
75  f23=0.d0
76  f31=0.d0
77  IF(a1.GE.a2.AND.a1.GE.a3) THEN
78 ! ALL FLOW TO AND FROM NODE 1
79  f12 = - f2
80  f31 = + f3
81  ELSEIF(a2.GE.a1.AND.a2.GE.a3) THEN
82 ! ALL FLOW TO AND FROM NODE 2
83  f12 = + f1
84  f23 = - f3
85  ELSE
86 ! ALL FLOW TO AND FROM NODE 3
87  f23 = + f2
88  f31 = - f1
89  ENDIF
90 ! LIMITATION
91  f12=f12*flulim(eltseg(ielem2,1))
92  f23=f23*flulim(eltseg(ielem2,2))
93  f31=f31*flulim(eltseg(ielem2,3))
94 ! REGROUPING
95  w(ielem,1)=f12-f31
96  w(ielem,2)=f23-f12
97  w(ielem,3)=f31-f23
98 !
99 ! UPPER LEVEL (SUM OF 3 W MUST BE 0, IT IS WITH VC04PP)
100 !
101  f1 = w(ielem,4)
102  f2 = w(ielem,5)
103  f3 = w(ielem,6)
104  a1 = abs(f1)
105  a2 = abs(f2)
106  a3 = abs(f3)
107  f12=0.d0
108  f23=0.d0
109  f31=0.d0
110  IF(a1.GE.a2.AND.a1.GE.a3) THEN
111 ! ALL FLOW TO AND FROM NODE 1
112  f12 = - f2
113  f31 = + f3
114  ELSEIF(a2.GE.a1.AND.a2.GE.a3) THEN
115 ! ALL FLOW TO AND FROM NODE 2
116  f12 = + f1
117  f23 = - f3
118  ELSE
119 ! ALL FLOW TO AND FROM NODE 3
120  f23 = + f2
121  f31 = - f1
122  ENDIF
123 ! LIMITATION
124  f12=f12*flulim(eltseg(ielem2,1))
125  f23=f23*flulim(eltseg(ielem2,2))
126  f31=f31*flulim(eltseg(ielem2,3))
127 ! REGROUPING
128  w(ielem,4)=f12-f31
129  w(ielem,5)=f23-f12
130  w(ielem,6)=f31-f23
131  ENDDO
132 !
133 !-----------------------------------------------------------------------
134 !
135  RETURN
136  END
subroutine na_flux3d_lim(W, FLULIM, NSEG2D, NELEM, NELMAX, NELEM2, NELMAX2, ELTSEG)
Definition: na_flux3d_lim.f:7
Definition: bief.f:3