The TELEMAC-MASCARET system  trunk
mt15pp.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE mt15pp
3 ! *****************
4 !
5  &(t,xm,xmul,f,zpt,surfac,ikle,nelem,nelmax)
6 !
7 !***********************************************************************
8 ! BIEF V7P0 03/06/2014
9 !***********************************************************************
10 !
11 !brief Builds a matrix corresponding to the advection with a settling
12 !+ velocity. This vertical velocity WC is stored in F and
13 !+ is positive when going downwards.
14 !
15 !warning Element linear prism : 41
16 !
17 !history J-M HERVOUET (EDF LAB, LNHE)
18 !+ 03/06/2014
19 !+ V7P0
20 !+ First version.
21 !
22 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
23 !| F |-->| FUNCTION USED IN THE FORMULA
24 !| IKLE |-->| CONNECTIVITY TABLE
25 !| NELEM |-->| NUMBER OF ELEMENTS
26 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS
27 !| SURFAC |-->| AREA OF 2D ELEMENTS
28 !| T |<->| WORK ARRAY FOR ELEMENT BY ELEMENT DIAGONAL
29 !| XM |<->| OFF-DIAGONAL TERMS
30 !| XMUL |-->| COEFFICIENT FOR MULTIPLICATION
31 !| ZPT |-->| Z COORDINATES
32 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
33 !
34  USE bief, ex_mt15pp => mt15pp
35 !
37  IMPLICIT NONE
38 !
39 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
40 !
41  INTEGER, INTENT(IN) :: NELEM,NELMAX
42  INTEGER, INTENT(IN) :: IKLE(nelmax,6)
43 !
44  DOUBLE PRECISION, INTENT(INOUT) :: T(nelmax,6),XM(nelmax,30)
45 !
46  DOUBLE PRECISION, INTENT(IN) :: XMUL
47  DOUBLE PRECISION, INTENT(IN) :: F(*),ZPT(*)
48 !
49  DOUBLE PRECISION, INTENT(IN) :: SURFAC(nelmax)
50 !
51 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
52 !
53 ! DECLARATIONS SPECIFIC TO THIS SUBROUTINE
54 !
55  INTEGER IELEM,I1,I2,I3,I4,I5,I6
56  DOUBLE PRECISION XSUR3
57 !
58 !-----------------------------------------------------------------------
59 !
60  xsur3=xmul/3.d0
61 !
62 !=======================================================================
63 !
64  DO ielem=1,nelem
65 !
66  i1=ikle(ielem,1)
67  i2=ikle(ielem,2)
68  i3=ikle(ielem,3)
69  i4=ikle(ielem,4)
70  i5=ikle(ielem,5)
71  i6=ikle(ielem,6)
72 !
73  t(ielem,1)=0.d0
74  t(ielem,2)=0.d0
75  t(ielem,3)=0.d0
76 !
77  xm(ielem, 1)=0.d0
78  xm(ielem, 2)=0.d0
79  xm(ielem, 4)=0.d0
80  xm(ielem, 5)=0.d0
81  xm(ielem, 6)=0.d0
82  xm(ielem, 7)=0.d0
83  xm(ielem, 9)=0.d0
84  xm(ielem,10)=0.d0
85  xm(ielem,11)=0.d0
86  xm(ielem,13)=0.d0
87  xm(ielem,14)=0.d0
88  xm(ielem,15)=0.d0
89 !
90  xm(ielem,16)=0.d0
91  xm(ielem,17)=0.d0
92  xm(ielem,18)=0.d0
93  xm(ielem,19)=0.d0
94  xm(ielem,20)=0.d0
95  xm(ielem,21)=0.d0
96  xm(ielem,22)=0.d0
97  xm(ielem,23)=0.d0
98  xm(ielem,24)=0.d0
99  xm(ielem,25)=0.d0
100  xm(ielem,26)=0.d0
101  xm(ielem,27)=0.d0
102  xm(ielem,28)=0.d0
103  xm(ielem,29)=0.d0
104  xm(ielem,30)=0.d0
105 !
106 !-----------------------------------------------------------------------
107 !
108 ! EXTRA-DIAGONAL TERMS: BOTTOM POINTS RECEIVE FROM UPPER POINT
109 ! A FLUX EQUAL TO WC*SURFAC/3 MULTIPLIED
110 ! BY CONCENTRATION OF UPPER POINT
111 ! DIAGONAL TERMS : TOP POINTS GIVE TO LOWER POINTS
112 ! A FLUX EQUAL TO WC*SURFAC/3 MULTIPLIED
113 ! BY ITS CONCENTRATION.
114 !
115 !-----------------------------------------------------------------------
116 !
117  IF(zpt(i4)-zpt(i1).GT.1.d-4) THEN
118 ! TERM 4-4
119  t(ielem,4)= f(i4)*surfac(ielem)*xsur3
120 ! TERM 1-4
121  xm(ielem, 3)=-f(i4)*surfac(ielem)*xsur3
122  ENDIF
123  IF(zpt(i5)-zpt(i2).GT.1.d-4) THEN
124 ! TERM 5-5
125  t(ielem,5)= f(i5)*surfac(ielem)*xsur3
126 ! TERM 2-5
127  xm(ielem, 8)=-f(i5)*surfac(ielem)*xsur3
128  ENDIF
129  IF(zpt(i6)-zpt(i3).GT.1.d-4) THEN
130 ! TERM 6-6
131  t(ielem,6)= f(i6)*surfac(ielem)*xsur3
132 ! TERM 3-6
133  xm(ielem,12)=-f(i6)*surfac(ielem)*xsur3
134  ENDIF
135 !
136  ENDDO
137 !
138 !-----------------------------------------------------------------------
139 !
140  RETURN
141  END
subroutine mt15pp(T, XM, XMUL, F, ZPT, SURFAC, IKLE, NELEM, NELMAX)
Definition: mt15pp.f:7
Definition: bief.f:3