The TELEMAC-MASCARET system  trunk
tvf.f
Go to the documentation of this file.
1 ! **************
2  SUBROUTINE tvf
3 ! **************
4 !
5  &(f,fc,h,fxmat,fxmatpar,
6  & volu2d,unsv2d,dt,fxbor,fxborpar,t7,fbor,smh,yasmh,fscexp,
7  & nseg,npoin,nptfr,gloseg,sizglo,nbor,limtra,kdir,kddl,optsou,hlin,
8  & iopt2,flbortra,surnit,mesh,rain,pluie,train,massou,
9  & mass_balance)
10 !
11 !***********************************************************************
12 ! BIEF V7P1
13 !***********************************************************************
14 !
15 !brief COMPUTES THE TRACER FOR FINITE VOLUME SCHEME.
16 !+ TO COMPLETE.
17 !
18 !history C-T PHAM (LNHE)
19 !+ 27/02/09
20 !+ V5P9
21 !+ JMH : DISTINGUISHES BETWEEN FXBOR AND FXBORTRA
22 !
23 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
24 !+ 13/07/2010
25 !+ V6P0
26 !+ Translation of French comments within the FORTRAN sources into
27 !+ English comments
28 !
29 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
30 !+ 21/08/2010
31 !+ V6P0
32 !+ Creation of DOXYGEN tags for automated documentation and
33 !+ cross-referencing of the FORTRAN sources
34 !
35 !history J-M HERVOUET (LNHE)
36 !+ 24/02/2012
37 !+ V6P2
38 !+ Rain and evaporation added (after initiative by O. Boutron, from
39 !+ Tour du Valat, and O. Bertrand, Artelia group)
40 !
41 !history J-M HERVOUET (LNHE)
42 !+ 08/06/2015
43 !+ V7P1
44 !+ Now mass balance done on request.
45 !
46 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
47 !| DT |-->| TIME-STEP
48 !| F |<--| VALUES OF F AT TIME N+1 OF SUB-ITERATION
49 !| FBOR |-->| VALUES OF F AT THE PRESCRIBED BOUNDARIES
50 !| FC |-->| VALUES OF F AT TIME N OF SUB-ITERATION
51 !| FLBORTRA |<->| FLUX OF TRACER AT THE BOUNDARIES
52 !| FSCEXP |-->| EXPLICIT SOURCE TERM FOR F
53 !| FXBOR |-->| FLUXES ON BOUNDARIES
54 !| FXBORPAR |-->| FLUXES ON BOUNDARIES (DEFINED ON ALL DOMAIN
55 !| | | AND ASSEMBLED IN PARALLEL)
56 !| FXMAT |-->| FLUXES (NON ASSEMBLED IN PARALLEL)
57 !| FXMATPAR |-->| FLUXES (ASSEMBLED IN PARALLEL)
58 !| GLOSEG |-->| GLOBAL NUMBER OF THE 2 POINTS OF A SEGMENT.
59 !| H |-->| WATER DEPTH AT TIME N+1
60 !| | | (VALUE COMPATIBLE WITH CONTINUITY)
61 !| HLIN |-->| WATER DEPTH AT TIME N+1
62 !| | | (WITH LINEAR INTERPOLATION IN TIME BETWEEN
63 !| | | HN AND H)
64 !| IOPT2 |-->| 0: CONSERVATIVE ADVECTION FIELD
65 !| | | 1: NON CONSERVATIVE ADVECTION FIELD
66 !| KDDL |-->| CONVENTION FOR DEGREE OF FREEDOM
67 !| KDIR |-->| CONVENTION FOR DIRICHLET POINT
68 !| LIMTRA |-->| TECHNICAL BOUNDARY CONDITIONS FOR TRACERS
69 !| MASS_BALANCE |-->| IF YES, ALL TERMS FOR MASS BALANCE
70 !| | | WILL BE COMPUTED
71 !| MASSOU |-->| MASS ADDED BY SOURCE TERM
72 !| MESH |-->| MESH STRUCTURE
73 !| NBOR |-->| GLOBAL NUMBER OF BOUNDARY POINTS
74 !| NPOIN |-->| NUMBER OF POINTS
75 !| NPTFR |-->| NUMBER OF BOUNDARY POINTS
76 !| NSEG |-->| NUMBER OF SEGMENTS
77 !| OPTSOU |-->| TYPE OF SOURCES
78 !| | | 1: NORMAL
79 !| | | 2: DIRAC
80 !| PLUIE |-->| RAIN OR EVAPORATION, IN M/S
81 !| RAIN |-->| IF YES: RAIN OR EVAPORATION
82 !| SIZGLO |-->| FIRST DIMENSION OF GLOSEG
83 !| SMH |-->| SOURCE TERM IN CONTINUITY EQUATION
84 !| SURNIT |-->| SURNIT=1/NIT
85 !| T7 |<->| BIEF_OBJ STRUCTURE FOR A WORK ARRAY
86 !| TRAIN |-->| VALUE OF TRACER IN RAIN
87 !| UNSV2D |-->| INVERSE OF INTEGRALS OF TEST FUNCTIONS
88 !| YASMH |-->| IF YES, SMH MUST BE TAKEN INTO ACCOUNT
89 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
90 !
91  USE bief, ex_tvf => tvf
92 !
94  IMPLICIT NONE
95 !
96 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
97 !
98  INTEGER, INTENT(IN) :: NSEG,NPOIN,NPTFR,KDIR,KDDL
99  INTEGER, INTENT(IN) :: SIZGLO,OPTSOU,IOPT2
100  INTEGER, INTENT(IN) :: GLOSEG(sizglo,2)
101  INTEGER, INTENT(IN) :: NBOR(nptfr),LIMTRA(nptfr)
102  DOUBLE PRECISION, INTENT(IN) :: DT,SURNIT,TRAIN
103  DOUBLE PRECISION, INTENT(INOUT) :: FLBORTRA(nptfr)
104  DOUBLE PRECISION, INTENT(INOUT) :: F(npoin),MASSOU
105  DOUBLE PRECISION, INTENT(IN) :: FXBOR(nptfr)
106  DOUBLE PRECISION, INTENT(IN) :: FC(npoin),H(npoin),HLIN(npoin)
107  DOUBLE PRECISION, INTENT(IN) :: SMH(*),UNSV2D(npoin)
108  DOUBLE PRECISION, INTENT(IN) :: PLUIE(*),VOLU2D(npoin)
109  DOUBLE PRECISION, INTENT(IN) :: FSCEXP(*)
110  DOUBLE PRECISION, INTENT(IN) :: FBOR(nptfr),FXBORPAR(npoin)
111  DOUBLE PRECISION, INTENT(IN) :: FXMAT(nseg),FXMATPAR(nseg)
112  LOGICAL, INTENT(IN) :: YASMH,RAIN,MASS_BALANCE
113  TYPE(bief_obj), INTENT(INOUT) :: T7
114  TYPE(bief_mesh), INTENT(INOUT) :: MESH
115 !
116 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
117 !
118  INTEGER I,N
119 !
120 !-----------------------------------------------------------------------
121 !
122  IF(iopt2.EQ.0) THEN
123 ! CONSERVATIVE ADVECTION FIELD
124  DO i = 1,npoin
125  f(i) = fc(i)
126  ENDDO
127  ELSEIF(iopt2.EQ.1) THEN
128 ! NON CONSERVATIVE ADVECTION FIELD
129  DO i = 1,npoin
130  f(i) = fc(i)*max(h(i),1.d-8)/max(hlin(i),1.d-8)
131  ENDDO
132  ELSE
133  WRITE(lu,*) 'TVF: UNKNOWN OPTION'
134  CALL plante(1)
135  stop
136  ENDIF
137 !
138 ! THE CONTRIBUTION OF FLUXES IS BUILT APART FOR
139 ! PRELIMINARY PARALLEL ASSEMBLING BEFORE ADDING ON F
140 !
141  DO i = 1,npoin
142  t7%R(i) = 0.d0
143  ENDDO
144  DO i = 1,nseg
145  IF(fxmatpar(i).LT.0.d0) THEN
146  t7%R(gloseg(i,1)) = t7%R(gloseg(i,1))
147  & - dt/hlin(gloseg(i,1))*unsv2d(gloseg(i,1))
148  & *fxmat(i)*(fc(gloseg(i,2))-fc(gloseg(i,1)))
149  ELSEIF(fxmatpar(i).GT.0.d0) THEN
150  t7%R(gloseg(i,2)) = t7%R(gloseg(i,2))
151  & + dt/hlin(gloseg(i,2))*unsv2d(gloseg(i,2))
152  & *fxmat(i)*(fc(gloseg(i,1))-fc(gloseg(i,2)))
153  ENDIF
154  ENDDO
155  IF(ncsize.GT.1) CALL parcom(t7,2,mesh)
156  DO i = 1,npoin
157  f(i) = f(i)+t7%R(i)
158  ENDDO
159 !
160 ! SOURCE TERMS
161 !
162  IF(yasmh) THEN
163  IF(optsou.EQ.1) THEN
164  DO i=1,npoin
165  IF(smh(i).GT.0.d0) THEN
166  f(i)=f(i)+dt/hlin(i)*smh(i)*(fscexp(i)-fc(i))
167  ENDIF
168  ENDDO
169  ELSEIF(optsou.EQ.2) THEN
170  DO i=1,npoin
171  IF(smh(i).GT.0.d0) THEN
172  f(i)=f(i)+dt/hlin(i)*unsv2d(i)*smh(i)*(fscexp(i)-fc(i))
173  ENDIF
174  ENDDO
175  ENDIF
176  IF(mass_balance) THEN
177  IF(optsou.EQ.1) THEN
178  DO i=1,npoin
179  IF(smh(i).GT.0.d0) THEN
180  massou=massou+dt*volu2d(i)*smh(i)*fscexp(i)
181  ELSE
182  massou=massou+dt*volu2d(i)*smh(i)*fc(i)
183  ENDIF
184  ENDDO
185  ELSEIF(optsou.EQ.2) THEN
186  DO i=1,npoin
187  IF(smh(i).GT.0.d0) THEN
188  massou=massou+dt*smh(i)*fscexp(i)
189  ELSE
190  massou=massou+dt*smh(i)*fc(i)
191  ENDIF
192  ENDDO
193  ENDIF
194  ENDIF
195  ENDIF
196 !
197 ! RAIN-EVAPORATION
198 !
199  IF(rain) THEN
200  DO i=1,npoin
201  IF(pluie(i).GT.0.d0) THEN
202 ! REAL RAIN, VALUE IN RAIN CONSIDERED...
203  f(i)=f(i)+dt/hlin(i)*pluie(i)*(train-fc(i))
204  ELSE
205 ! EVAPORATION, VALUE IN RAIN NOT CONSIDERED...
206  f(i)=f(i)+dt/hlin(i)*pluie(i)*( -fc(i))
207  ENDIF
208  ENDDO
209  ENDIF
210 !
211 ! ON THE DIRICHLET BOUNDARIES, FLUX TERMS TAKEN INTO ACCOUNT
212 ! ON OTHERS, FBOR IS TAKEN AS FN, SO NO CONTRIBUTION
213 !
214  DO i=1,nptfr
215  IF(limtra(i).EQ.kdir) THEN
216  n=nbor(i)
217  f(n)=f(n)-dt/hlin(n)*unsv2d(n)*fxborpar(n)*(fbor(i)-fc(n))
218  ENDIF
219  ENDDO
220  IF(mass_balance) THEN
221  DO i=1,nptfr
222  IF(limtra(i).EQ.kdir) THEN
223  flbortra(i)=flbortra(i)+fxbor(i)*fbor(i)*surnit
224  ELSEIF(limtra(i).EQ.kddl) THEN
225  n=nbor(i)
226  flbortra(i)=flbortra(i)+fxbor(i)*fc(n)*surnit
227  ENDIF
228  ENDDO
229  ENDIF
230 !
231 !-----------------------------------------------------------------------
232 !
233  RETURN
234  END
235 
subroutine mass_balance(DT, NPTFR, ENTET, NSICLA, NUMLIQ, NFRLIQ, FLBCLA, LT, NIT, NPOIN, VOLU2D, CHARR, SUSP, EVCL_MB, EVCL_MS, MASSTOT, MASS0TOT)
Definition: mass_balance.f:9
subroutine parcom(X, ICOM, MESH)
Definition: parcom.f:7
subroutine tvf(F, FC, H, FXMAT, FXMATPAR, VOLU2D, UNSV2D, DT, FXBOR, FXBORPAR, T7, FBOR, SMH, YASMH, FSCEXP, NSEG, NPOIN, NPTFR, GLOSEG, SIZGLO, NBOR, LIMTRA, KDIR, KDDL, OPTSOU, HLIN, IOPT2, FLBORTRA, SURNIT, MESH, RAIN, PLUIE, TRAIN, MASSOU, MASS_BALANCE)
Definition: tvf.f:11
Definition: bief.f:3