The TELEMAC-MASCARET system  trunk
bedload_solvs_fe.f
Go to the documentation of this file.
1 ! ***************************
2  SUBROUTINE bedload_solvs_fe
3 ! ***************************
4 !
5  &(mesh,s,ebor,maskel,mask,qsx,qsy,ielmt,npoin,nptfr,kent,kdir,kddl,
6  & limtec,dt,msk,entet,t1,t2,t3,t4,t8,zfcl,hz,hzn,gloseg,dimglo,
7  & flodel,flulim,nseg,unsv2d,csf_sable,icla,flbcla,ava,liqbor,qbor,
8  & maxadv)
9 !
10 !***********************************************************************
11 ! SISYPHE V6P2 21/07/2011
12 !***********************************************************************
13 !
14 !brief SOLVES:
15 !code
16 !+ D(HZ)
17 !+ ---- + DIV(QS) = 0
18 !+ DT
19 !
20 !warning
21 !+ LIMTEC is used here instead of LIEBOR. The difference is that
22 !+ LIMTEC is LIEBOR corrected in view of sign of u.n at boundaries
23 !+ then KENT, KSORT apply to LIEBOR, while KDIR and KDDL apply on
24 !+ LIMTEC, see bedload_diffin.f
25 !
26 !history E. PELTIER; C. LENORMANT; J.-M. HERVOUET
27 !+ 11/09/1995
28 !+ V5P1
29 !+
30 !
31 !history B. MINH DUC
32 !+ **/**/2002
33 !+ V5P3
34 !+
35 !
36 !history F. HUVELIN
37 !+ 14/09/2004
38 !+ V5P5
39 !+
40 !
41 !history J.-M. HERVOUET
42 !+ 29/10/2007
43 !+ V5P8
44 !+
45 !
46 !history J.-M. HERVOUET
47 !+ 05/09/2009
48 !+ V6P0
49 !+ NEW METHOD
50 !
51 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
52 !+ 13/07/2010
53 !+ V6P0
54 !+ Translation of French comments within the FORTRAN sources into
55 !+ English comments
56 !
57 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
58 !+ 21/08/2010
59 !+ V6P0
60 !+ Creation of DOXYGEN tags for automated documentation and
61 !+ cross-referencing of the FORTRAN sources
62 !
63 !history C.VILLARET (EDF-LNHE), P.TASSI (EDF-LNHE)
64 !+ 19/07/2011
65 !+ V6P1
66 !+ Name of variables
67 !+
68 !history J-M HERVOUET (EDF-LNHE)
69 !+ 27/01/2012
70 !+ V6P2
71 !+ Argument ICLA added
72 !
73 !history J-M HERVOUET (EDF-LNHE)
74 !+ 14/02/2012
75 !+ V6P2
76 !+ Optimisation, and FLBCLA built and kept for use in bilan_sisyphe
77 !+ Treatment of QBOR added
78 !
79 !history J-M HERVOUET (EDF-LNHE)
80 !+ 25/12/2012
81 !+ V6P3
82 !+ 3 arguments added to VECTOS.
83 !
84 !history L. STADLER (BAW)
85 !+ 17/03/2016
86 !+ V7P2
87 !+ Call to flusec_sis added for new computation of discharges through
88 !+ cross-sections.
89 !
90 !history J-M HERVOUET (EDF-LNHE)
91 !+ 10/06/2016
92 !+ V7P2
93 !+ Cancelling sediment fluxes to and from dry nodes.
94 !
95 !history J-M HERVOUET (EDF-LNHE)
96 !+ 09/09/2016
97 !+ V7P2
98 !+ Adding fake arguments PLUIE and RAIN in the call to positive_depths.
99 !
100 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
101 !| DIMGLO |-->| FIRST DIMENSION OF GLOSEG
102 !| DT |-->| TIME STEP
103 !| EBOR |<->| BOUNDARY CONDITION FOR BED EVOLUTION (DIRICHLET)
104 !| ENTET |-->| LOGICAL, IF YES INFORMATION IS GIVEN ON MASS CONSERVATION
105 !| FLBCLA |<->| FLUXES AT BOUNDARY FOR THE CLASS
106 !| FLODEL |<--| FLUXES BETWEEN POINTS (PER SEGMENT)
107 !| FLULIM |<--| LIMITATION OF FLUXES
108 !| GLOSEG |-->| CONNECTIVITY TABLE FOR SEGMENTS
109 !| HZ |<--| NEW AVAILABLE LAYER OF SEDIMENT
110 !| HZN |-->| OLD AVAILABLE LAYER OF SEDIMENT
111 !| ICLA |-->| CLASS NUMBER
112 !| IELMT |-->| NUMBER OF ELEMENTS
113 !| KDDL |-->| CONVENTION FOR DEGREE OF FREEDOM
114 !| KDIR |-->| CONVENTION FOR DIRICHLET POINT
115 !| KENT |-->| CONVENTION FOR LIQUID INPUT WITH PRESCRIBED VALUE
116 !| LIMTEC |-->| TYPE OF BOUNDARY CONDITION
117 !| LIQBOR |-->| TYPE OF BOUNDARY CONDITION ON BEDLOAD DISCHARGE
118 !| MASK |-->| BLOCK OF MASKS, EVERY ONE FOR A TYPE OF BOUNDARY
119 !| | | SEE DIFFIN.F IN LIBRARY BIEF.
120 !| MASKEL |-->| MASKING OF ELEMENTS
121 !| MAXADV |-->| MAXIMUM NUMBER OF ITERATIONS (IN POSITIVE_DEPTH)
122 !| MESH |<->| MESH STRUCTURE
123 !| MSK |-->| IF YES, THERE IS MASKED ELEMENTS
124 !| NPOIN |-->| NUMBER OF POINTS
125 !| NPTFR |-->| NUMBER OF BOUNDARY POINTS
126 !| NSEG |-->| NUMBER OF SEGMENTS PER CONTROL SECTION
127 !| QBOR |-->| PRESCRIBED BEDLOAD DISCHARGES
128 !| QSX |-->| SOLID DISCHARGE X
129 !| QSY |-->| SOLID DISCHARGE Y
130 !| S |-->| VOID STRUCTURE
131 !| T1 |<->| WORK BIEF_OBJ STRUCTURE
132 !| T2 |<->| WORK BIEF_OBJ STRUCTURE
133 !| T3 |<->| WORK BIEF_OBJ STRUCTURE
134 !| T4 |<->| WORK BIEF_OBJ STRUCTURE
135 !| T8 |<->| WORK BIEF_OBJ STRUCTURE
136 !| UNSV2D |-->| INVERSE OF INTEGRALS OF TEST FUNCTIONS
137 !| ZFCL |<--| ZFCL=HZ-HZN
138 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
139 !
140  USE bief
141  USE interface_sisyphe, ex_bedload_solvs_fe => bedload_solvs_fe
143 !
145  IMPLICIT NONE
146 !
147 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
148 !
149  TYPE(bief_mesh), INTENT(INOUT) :: MESH
150  TYPE(bief_obj), INTENT(IN) :: S,MASKEL,MASK,QSX,QSY
151  INTEGER, INTENT(IN) :: IELMT,NPOIN,NPTFR,KENT,KDIR
152  INTEGER, INTENT(IN) :: DIMGLO,NSEG,ICLA,KDDL,MAXADV
153  INTEGER, INTENT(IN) :: GLOSEG(dimglo,2)
154  DOUBLE PRECISION, INTENT(IN) :: DT,CSF_SABLE,AVA(npoin)
155  DOUBLE PRECISION, INTENT(INOUT) :: FLULIM(nseg)
156  LOGICAL, INTENT(IN) :: MSK,ENTET
157  TYPE(bief_obj), INTENT(INOUT) :: FLODEL,T1,T2,T3,T4,T8
158  TYPE(bief_obj), INTENT(INOUT) :: HZ,EBOR,LIMTEC
159  TYPE(bief_obj), INTENT(INOUT) :: ZFCL,FLBCLA
160  TYPE(bief_obj), INTENT(IN) :: HZN,UNSV2D,LIQBOR,QBOR
161 !
162 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
163 !
164  INTEGER K,N,I1,I2,ISEG
165 !
166 !-----------------------------------------------------------------------
167 !
168 ! BOUNDARY FLUXES
169 !
170  CALL vector(flbcla,'=','FLUBOR ',ielbor(ielmt,1),1.d0,
171  & s,s,s,qsx,qsy,s,mesh,.true.,mask)
172 !
173 ! BOUNDARY CONDITIONS: EITHER EBOR OR QBOR PRESCRIBED (NOT THE 2)
174 !
175  DO k=1,nptfr
176  IF(liqbor%I(k).EQ.kent) THEN
177 ! QBOR IS GIVEN BY USER, AND POSITIVE IF ENTERING
178 ! HERE WE PUT THE INTERNAL USAGE <0 = ENTERING
179  flbcla%R(k)=-qbor%R(k)
180 ! EVEN IF USER HAS SPECIFIED LIEBOR=KSORT, LIMTEC MAY HAVE BEEN
181 ! SET TO KDIR BY CHECKING IF VELOCITY IS ENTERING, THIS IS
182 ! UNWANTED HERE AS QBOR ONLY IS TAKEN INTO ACCOUNT,
183 ! SO DDL IS PUT TO AVOID A DIRICHLET TREATMENT IN POSITIVE_DEPTHS.
184  limtec%I(k)=kddl
185  ELSEIF(limtec%I(k).EQ.kdir) THEN
186 ! HERE THE VARIABLE WILL BE THE LAYER DEPTH OF THE SEDIMENT CLASS,
187 ! PUT IN T8, NOT THE EVOLUTION
188  n=mesh%NBOR%I(k)
189  t8%R(k)=ava(n)*ebor%R(k)*csf_sable+hzn%R(n)
190  ENDIF
191  ENDDO
192 !
193 ! HERE T1 MAY NOT BE ASSEMBLED, WE WORK DIRECTLY ON MESH%W%R AFTER,
194 ! FOR CALLING FLUX_EF_VF (IT IS T1 IN NON ASSEMBLED FORM)
195 !
196  CALL vector(t1,'=','VGRADP ',qsx%ELM,-1.d0,
197  & s,s,s,qsx,qsy,s,mesh,msk,maskel,lego=.false.)
198 !
199 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
200 !
201 ! FLODEL COMPUTED HERE, NOT IN POSITIVE_DEPTHS
202 !
203  CALL flux_ef_vf(flodel%R,mesh%W%R,mesh%NSEG,mesh%NELEM,
204  & mesh%NELMAX,mesh%ELTSEG%I,mesh%ORISEG%I,
205  & mesh%IKLE%I,.true.,2)
206 !
207 ! CANCELLING THE FLUXES TO AND FROM DRY POINTS
208 !
209  DO iseg=1,nseg
210  i1=gloseg(iseg,1)
211  i2=gloseg(iseg,2)
212  IF(hn%R(i1).LT.hmin_bedload.OR.
213  & hn%R(i2).LT.hmin_bedload) flodel%R(iseg)=0.d0
214  ENDDO
215 !
216 ! END OF NEW SECTION (ONLY TRUE CHANGED INTO FALSE AFTER FLODEL IN THE NEXT CALL)
217 !
218 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
219 !
220  CALL positive_depths(t1,t2,t3,t4,hz,hzn,mesh,
221 ! !!!!!!
222 ! & FLODEL, .TRUE.,FLBCLA,DT,UNSV2D,NPOIN,
223  & flodel,.false.,flbcla,dt,unsv2d,npoin,
224  & gloseg(1:dimglo,1),gloseg(1:dimglo,2),
225  & mesh%NBOR%I,nptfr,t8,.false.,t8,.false.,
226 ! VOID (SMH) VOID (PLUIE)
227  & 1,flulim,
228  & limtec%I,t8%R ,kdir,entet,mesh%W%R,
229 ! EBOR%R
230  & 'SISYPHE ',2,maxadv)
231 ! 2 : HARDCODED
232 ! OPTION FOR POSITIVE DEPTHS ALGORITHMS
233 ! HERE CHOICE OF OPTION INDEPENDENT OF
234 ! SEGMENT NUMBERING
235 !
236  CALL os('X=Y-Z ' ,x=zfcl,y=hz,z=hzn)
237 !
238 !-----------------------------------------------------------------------
239 !
240 ! NEW FLUXES ACROSS CROSS-SECTIONS
241 !
242  IF(doflux) THEN
243  CALL flusec_sis(gloseg,dimglo,dt,mesh,
244  & flodel,icla,entet)
245  ENDIF
246 !
247 !-----------------------------------------------------------------------
248 !
249  RETURN
250  END
251 
double precision hmin_bedload
subroutine bedload_solvs_fe(MESH, S, EBOR, MASKEL, MASK, QSX, QSY, IELMT, NPOIN, NPTFR, KENT, KDIR, KDDL, LIMTEC, DT, MSK, ENTET, T1, T2, T3, T4, T8, ZFCL, HZ, HZN, GLOSEG, DIMGLO, FLODEL, FLULIM, NSEG, UNSV2D, CSF_SABLE, ICLA, FLBCLA, AVA, LIQBOR, QBOR, MAXADV)
integer function ielbor(IELM, I)
Definition: ielbor.f:7
subroutine flusec_sis(GLOSEG, DIMGLO, DT, MESH, FLODEL, ICLA, DOPLOT)
Definition: flusec_sis.f:7
subroutine vector(VEC, OP, FORMUL, IELM1, XMUL, F, G, H, U, V, W, MESH, MSK, MASKEL, LEGO, ASSPAR)
Definition: vector.f:7
subroutine flux_ef_vf(FLOW, PHIEL, NSEG, NELEM, NELMAX, ELTSEG, ORISEG, IKLE, INIFLO, IOPT, FN, YAFLULIM, FLULIM, YAFLULIMEBE, FLULIMEBE)
Definition: flux_ef_vf.f:8
type(bief_obj), target hn
subroutine os(OP, X, Y, Z, C, IOPT, INFINI, ZERO)
Definition: os.f:7
subroutine positive_depths(T1, T2, T3, T4, H, HN, MESH, FLODEL, COMPUTE_FLODEL, FLBOR, DT, UNSV2D, NPOIN, GLOSEG1, GLOSEG2, NBOR, NPTFR, SMH, YASMH, PLUIE, RAIN, OPTSOU, FLULIM, LIMPRO, HBOR, KDIR, INFO, FLOPOINT, NAMECODE, OPTION, NITMAX, DOFLULIM, FLULIMEBE, DOFLULIMEBE)
Definition: bief.f:3