The TELEMAC-MASCARET system  trunk
tvf_2.f
Go to the documentation of this file.
1 ! ****************
2  SUBROUTINE tvf_2
3 ! ****************
4 !
5  &(f,fstar,fc,volu2d,unsv2d,dt,fxbor,fxborpar,fbor,smh,yasmh,fscexp,
6  & npoin,nptfr,nbor,limtra,kdir,kddl,optsou,hlin,
7  & iopt2,flbortra,surnit,rain,pluie,train,phi_i,tetafcor,
8  & mass_bal,massou)
9 !
10 !***********************************************************************
11 ! BIEF V7P1
12 !***********************************************************************
13 !
14 !brief As TVF, computes the new value of tracer in a sub-iteration,
15 !+ but here based on contributions per point, not on fluxes.
16 !
17 !history S. PAVAN & J-M HERVOUET (EDF LAB, LNHE)
18 !+ 22/04/2014
19 !+ V7P0
20 !+ First version, derived from TVF.
21 !
22 !history S. PAVAN & J-M HERVOUET (EDF LAB, LNHE)
23 !+ 28/05/2015
24 !+ V7P0
25 !+ Second version, with 3 new arguments after PHI_I.
26 !
27 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
28 !| MASS_BAL |-->| IF YES, FLBORTRA WILL BE UPDATED FOR THE
29 !| | | MASS BALANCE.
30 !| DT |-->| TIME-STEP
31 !| F |<--| VALUES OF F AT TIME N+1 OF SUB-ITERATION
32 !| FBOR |-->| VALUES OF F AT THE PRESCRIBED BOUNDARIES
33 !| FC |-->| VALUES OF F AT TIME N OF SUB-ITERATION
34 !| FLBORTRA |<->| FLUX OF TRACER AT THE BOUNDARIES
35 !| FSTAR |-->| VALUE OF THE PREDICTOR
36 !| FSCEXP |-->| EXPLICIT SOURCE TERM FOR F
37 !| FXBOR |-->| FLUXES ON BOUNDARIES
38 !| FXBORPAR |-->| FLUXES ON BOUNDARIES (DEFINED ON ALL DOMAIN
39 !| | | AND ASSEMBLED IN PARALLEL)
40 !| HLIN |-->| WATER DEPTH AT TIME N+1
41 !| | | (WITH LINEAR INTERPOLATION IN TIME BETWEEN
42 !| | | HN AND H)
43 !| IOPT2 |-->| 0: CONSERVATIVE ADVECTION FIELD
44 !| | | 1: NON CONSERVATIVE ADVECTION FIELD
45 !| KDDL |-->| CONVENTION FOR DEGREE OF FREEDOM
46 !| KDIR |-->| CONVENTION FOR DIRICHLET POINT
47 !| LIMTRA |-->| TECHNICAL BOUNDARY CONDITIONS FOR TRACERS
48 !| MASS_BAL |-->| IF YES, ALL TERMS FOR MASS BALANCE
49 !| | | WILL BE COMPUTED
50 !| MASSOU |<->| ADDED MASS BY SOURCE TERMS
51 !| NBOR |-->| GLOBAL NUMBER OF BOUNDARY POINTS
52 !| NPOIN |-->| NUMBER OF POINTS
53 !| NPTFR |-->| NUMBER OF BOUNDARY POINTS
54 !| OPTSOU |-->| TYPE OF SOURCES
55 !| | | 1: NORMAL
56 !| | | 2: DIRAC
57 !| PHI_I |-->| CONTRIBUTIONS PER POINT
58 !| PLUIE |-->| RAIN OR EVAPORATION, IN M/S
59 !| RAIN |-->| IF YES: RAIN OR EVAPORATION
60 !| SMH |-->| SOURCE TERM IN CONTINUITY EQUATION
61 !| SURNIT |-->| SURNIT=1/NIT
62 !| TETAFCOR |-->| SEMI_IMPLICITATION COEFFICIENT
63 !| | | (CASE OF PREDICTOR CORRECTOR)
64 !| TRAIN |-->| VALUE OF TRACER IN RAIN
65 !| UNSV2D |-->| INVERSE OF INTEGRALS OF TEST FUNCTIONS
66 !| YASMH |-->| IF YES, SMH MUST BE TAKEN INTO ACCOUNT
67 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
68 !
69  USE bief, ex_tvf_2 => tvf_2
70 !
72  IMPLICIT NONE
73 !
74 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
75 !
76  INTEGER, INTENT(IN) :: NPOIN,NPTFR,KDIR,KDDL
77  INTEGER, INTENT(IN) :: OPTSOU,IOPT2
78  INTEGER, INTENT(IN) :: NBOR(nptfr),LIMTRA(nptfr)
79  DOUBLE PRECISION, INTENT(IN) :: DT,SURNIT,TRAIN,TETAFCOR
80  DOUBLE PRECISION, INTENT(INOUT) :: FLBORTRA(nptfr),MASSOU
81  DOUBLE PRECISION, INTENT(INOUT) :: F(npoin)
82  DOUBLE PRECISION, INTENT(IN) :: FXBOR(nptfr)
83  DOUBLE PRECISION, INTENT(IN) :: FC(npoin),HLIN(npoin)
84  DOUBLE PRECISION, INTENT(IN) :: SMH(npoin),UNSV2D(npoin)
85  DOUBLE PRECISION, INTENT(IN) :: VOLU2D(npoin)
86  DOUBLE PRECISION, INTENT(IN) :: PLUIE(*)
87  DOUBLE PRECISION, INTENT(IN) :: FSCEXP(npoin),FSTAR(npoin)
88  DOUBLE PRECISION, INTENT(IN) :: FBOR(nptfr),FXBORPAR(npoin)
89  DOUBLE PRECISION, INTENT(IN) :: PHI_I(npoin)
90  LOGICAL, INTENT(IN) :: YASMH,RAIN,MASS_BAL
91 !
92 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
93 !
94  INTEGER I,N
95 !
96 !-----------------------------------------------------------------------
97 !
98  IF(iopt2.NE.0) THEN
99  WRITE(lu,*) 'TVF_2: UNKNOWN IOPT2 OPTION'
100  CALL plante(1)
101  stop
102  ENDIF
103 !
104 !-----------------------------------------------------------------------
105 !
106 ! INTERNAL FLUXES
107 !
108 !-----------------------------------------------------------------------
109 !
110  DO i=1,npoin
111  f(i)=f(i)-(dt/hlin(i))*unsv2d(i)*phi_i(i)
112  ENDDO
113 !
114 !-----------------------------------------------------------------------
115 !
116 ! SOURCE TERMS
117 !
118 !-----------------------------------------------------------------------
119 !
120  IF(yasmh) THEN
121  IF(optsou.EQ.1) THEN
122  DO i=1,npoin
123  f(i)=f(i)+dt/hlin(i)*smh(i)
124  & *(fscexp(i)-tetafcor*fstar(i)-(1.d0-tetafcor)*fc(i))
125  ENDDO
126  ELSEIF(optsou.EQ.2) THEN
127  DO i=1,npoin
128  f(i)=f(i)+dt/hlin(i)*unsv2d(i)*smh(i)
129  & *(fscexp(i)-tetafcor*fstar(i)-(1.d0-tetafcor)*fc(i))
130  ENDDO
131  ENDIF
132  IF(mass_bal) THEN
133  IF(optsou.EQ.1) THEN
134  DO i=1,npoin
135  IF(smh(i).GT.0.d0) THEN
136  massou=massou+dt*volu2d(i)*smh(i)*fscexp(i)
137  ELSE
138  massou=massou+dt*volu2d(i)*smh(i)
139  & *(tetafcor*fstar(i)+(1.d0-tetafcor)*fc(i))
140  ENDIF
141  ENDDO
142  ELSEIF(optsou.EQ.2) THEN
143  DO i=1,npoin
144  IF(smh(i).GT.0.d0) THEN
145  massou=massou+dt*smh(i)*fscexp(i)
146  ELSE
147  massou=massou+dt*smh(i)
148  & *(tetafcor*fstar(i)+(1.d0-tetafcor)*fc(i))
149  ENDIF
150  ENDDO
151  ENDIF
152  ENDIF
153  ENDIF
154 !
155 !-----------------------------------------------------------------------
156 !
157 ! RAIN-EVAPORATION
158 !
159 !-----------------------------------------------------------------------
160 !
161  IF(rain) THEN
162  DO i=1,npoin
163  IF(pluie(i).GT.0.d0) THEN
164 ! REAL RAIN, VALUE IN RAIN CONSIDERED...
165  f(i)=f(i)+dt/hlin(i)*pluie(i)
166  & *(train-tetafcor*fstar(i)-(1.d0-tetafcor)*fc(i))
167  ELSE
168 ! EVAPORATION, VALUE IN RAIN NOT CONSIDERED...
169  f(i)=f(i)+dt/hlin(i)*pluie(i)
170  & *( -tetafcor*fstar(i)-(1.d0-tetafcor)*fc(i))
171  ENDIF
172  ENDDO
173  ENDIF
174 !
175 !-----------------------------------------------------------------------
176 !
177 ! BOUNDARIES
178 !
179 !-----------------------------------------------------------------------
180 !
181 ! ON THE DIRICHLET BOUNDARIES, FLUX TERMS TAKEN INTO ACCOUNT
182 ! ON OTHERS, FBOR IS TAKEN AS FN, SO NO CONTRIBUTION
183 ! FC : FN AT THE PREDICTOR STEP
184 !
185  DO i=1,nptfr
186  IF(limtra(i).EQ.kdir) THEN
187  n=nbor(i)
188  f(n)=f(n)-dt/hlin(n)*unsv2d(n)*fxborpar(n)*
189  & (fbor(i)-(1.d0-tetafcor)*fc(n)-tetafcor*fstar(n))
190  ENDIF
191  ENDDO
192  IF(mass_bal) THEN
193  DO i=1,nptfr
194  IF(limtra(i).EQ.kdir) THEN
195  flbortra(i)=flbortra(i)+fxbor(i)*fbor(i)*surnit
196  ELSEIF(limtra(i).EQ.kddl) THEN
197  n=nbor(i)
198  flbortra(i)=flbortra(i)
199  & +fxbor(i)*((1.d0-tetafcor)*fc(n)+tetafcor*fstar(n))*surnit
200  ENDIF
201  ENDDO
202  ENDIF
203 !
204 !-----------------------------------------------------------------------
205 !
206  RETURN
207  END
208 
subroutine tvf_2(F, FSTAR, FC, VOLU2D, UNSV2D, DT, FXBOR, FXBORPAR, FBOR, SMH, YASMH, FSCEXP, NPOIN, NPTFR, NBOR, LIMTRA, KDIR, KDDL, OPTSOU, HLIN, IOPT2, FLBORTRA, SURNIT, RAIN, PLUIE, TRAIN, PHI_I, TETAFCOR, MASS_BAL, MASSOU)
Definition: tvf_2.f:10
Definition: bief.f:3