The TELEMAC-MASCARET system  trunk
hvf.f
Go to the documentation of this file.
1 ! **************
2  SUBROUTINE hvf
3 ! **************
4 !
5  &(h,hn,fxmat,unsv2d,dt,fxbor,smh,yasmh,nseg,npoin,nptfr,gloseg,
6  & sizglo,nbor,optsou,t7,mesh,msk,rain,pluie)
7 !
8 !***********************************************************************
9 ! BIEF V6P2 21/08/2010
10 !***********************************************************************
11 !
12 !brief FOR FINITE VOLUMES ADVECTION, COMPUTES AN INTERMEDIATE DEPTH
13 !+ IF THERE ARE SUB-ITERATIONS.
14 !
15 !history CHI-TUAN PHAM (LNHE)
16 !+ 09/02/2009
17 !+ V5P9
18 !+ JMH : SEQUENCE IF(MSK) : AVOIDS NEGATIVE DEPTHS
19 !
20 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
21 !+ 13/07/2010
22 !+ V6P0
23 !+ Translation of French comments within the FORTRAN sources into
24 !+ English comments
25 !
26 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
27 !+ 21/08/2010
28 !+ V6P0
29 !+ Creation of DOXYGEN tags for automated documentation and
30 !+ cross-referencing of the FORTRAN sources
31 !
32 !history J-M HERVOUET (LNHE)
33 !+ 24/02/2012
34 !+ V6P2
35 !+ Rain and evaporation added (after initiative by O. Boutron, from
36 !+ Tour du Valat, and O. Bertrand, Artelia group)
37 !
38 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
39 !| DT |-->| TIME STEP
40 !| FXBOR |-->| FLUX ON BOUNDARIES (DEFINED ON ALL DOMAIN
41 !| | | AND ASSEMBLED IN PARALLEL)
42 !| FXMAT |-->| MATRIX FOR STORING FLUXES.
43 !| GLOSEG |-->| GLOBAL NUMBER OF THE 2 POINTS OF A SEGMENT
44 !| H |-->| WATER DEPTH AT TIME N+1
45 !| HN |-->| WATER DEPTH AT TIME N
46 !| MESH |-->| MESh STRUCTURE
47 !| MSK |-->| MSK : IF YES, MASKING OF DRY ELEMENTS
48 !| NBOR |-->| GLOBAL NUMBER OF BOUNDARY POINTS
49 !| NPOIN |-->| NUMBER OF POINTS
50 !| NPTFR |-->| NUMBER OF BOUNDARY POINTS
51 !| NSEG |-->| NUMBER OF SEGMENTS
52 !| OPTSOU |-->| OPTION FOR THE TREATMENT OF SOURCES
53 !| | | 1: NORMAL 2: DIRAC
54 !| | | SEE PROPAG IN TELEMAC-2D
55 !| PLUIE |-->| RAIN OR EVAPORATION, IN M/S
56 !| RAIN |-->| IF YES: RAIN OR EVAPORATION
57 !| SIZGLO |-->| FIRST DIMENSION OF GLOSEG
58 !| SMH |-->| SOURCE TERM IN CONTINUITY EQUATION
59 !| T7 |<->| WORK BIEF_OBJ STRUCTURE
60 !| UNSV2D |-->| INVERSE OF INTEGRALS OF TEST FUNCTIONS
61 !| YASMH |-->| IF YES, SMH MUST BE TAKEN INTO ACCOUNT
62 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
63 !
64  USE bief, ex_hvf => hvf
65 !
67  IMPLICIT NONE
68 !
69 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
70 !
71  INTEGER, INTENT(IN) :: NSEG,NPOIN,NPTFR,OPTSOU,SIZGLO
72  INTEGER, INTENT(IN) :: GLOSEG(sizglo,2)
73  INTEGER, INTENT(IN) :: NBOR(nptfr)
74  DOUBLE PRECISION, INTENT(IN) :: DT
75  DOUBLE PRECISION, INTENT(INOUT) :: H(npoin)
76  DOUBLE PRECISION, INTENT(IN) :: HN(npoin),UNSV2D(npoin)
77  DOUBLE PRECISION, INTENT(IN) :: FXBOR(npoin),SMH(npoin)
78  DOUBLE PRECISION, INTENT(IN) :: FXMAT(nseg*2),PLUIE(npoin)
79  LOGICAL, INTENT(IN) :: YASMH,MSK,RAIN
80  TYPE(bief_obj), INTENT(INOUT) :: T7
81  TYPE(bief_mesh), INTENT(INOUT) :: MESH
82 !
83 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
84 !
85  INTEGER I,N
86 !
87 !-----------------------------------------------------------------------
88 !
89  DO i = 1,npoin
90  h(i) = hn(i)
91  ENDDO
92 !
93 ! SOURCES
94 !
95  IF(yasmh) THEN
96  IF(optsou.EQ.1) THEN
97  DO i = 1,npoin
98  h(i) = h(i) + dt*smh(i)
99  ENDDO
100  ELSEIF(optsou.EQ.2) THEN
101  DO i = 1,npoin
102  h(i) = h(i) + dt*unsv2d(i)*smh(i)
103  ENDDO
104  ENDIF
105  ENDIF
106 !
107 ! RAIN OR EVAPORATION
108 !
109  IF(rain) THEN
110  DO i = 1,npoin
111  h(i) = h(i) + dt*pluie(i)
112  ENDDO
113  ENDIF
114 !
115  IF(ncsize.GT.1) THEN
116  DO i = 1,npoin
117  t7%R(i) = 0.d0
118  ENDDO
119  DO i = 1,nseg
120  t7%R(gloseg(i,1))=t7%R(gloseg(i,1))
121  & -dt*unsv2d(gloseg(i,1))*fxmat(i)
122  t7%R(gloseg(i,2))=t7%R(gloseg(i,2))
123  & +dt*unsv2d(gloseg(i,2))*fxmat(i)
124  ENDDO
125  CALL parcom(t7,2,mesh)
126  DO i = 1,npoin
127  h(i) = h(i) + t7%R(i)
128  ENDDO
129  ELSE
130  DO i = 1,nseg
131  h(gloseg(i,1))=h(gloseg(i,1))-dt*unsv2d(gloseg(i,1))*fxmat(i)
132  h(gloseg(i,2))=h(gloseg(i,2))+dt*unsv2d(gloseg(i,2))*fxmat(i)
133  ENDDO
134  ENDIF
135 !
136 ! ON THE BOUNDARIES : BOUNDARY FLUX TERMS
137 !
138  DO i=1,nptfr
139  n=nbor(i)
140  h(n) = h(n) - dt*unsv2d(n)*fxbor(n)
141  ENDDO
142 !
143 !-----------------------------------------------------------------------
144 !
145 ! WHEN NEGATIVE DEPTHS APPEAR WHILE COMPUTING H, THE PREVIOUS
146 ! VALUE OF H IS KEPT
147 !
148  IF(msk) THEN
149  DO i = 1,npoin
150  IF(h(i).LT.0.d0) h(i) = max(1.d-2,hn(i))
151  ENDDO
152  ENDIF
153 !
154 !-----------------------------------------------------------------------
155 !
156  RETURN
157  END
subroutine hvf(H, HN, FXMAT, UNSV2D, DT, FXBOR, SMH, YASMH, NSEG, NPOIN, NPTFR, GLOSEG, SIZGLO, NBOR, OPTSOU, T7, MESH, MSK, RAIN, PLUIE)
Definition: hvf.f:8
subroutine parcom(X, ICOM, MESH)
Definition: parcom.f:7
Definition: bief.f:3