The TELEMAC-MASCARET system  trunk
bedload_effpnt.f
Go to the documentation of this file.
1 ! *************************
2  SUBROUTINE bedload_effpnt
3 ! *************************
4 !
5  & (maskel,liqbor,s,zf,npoin,nptfr,ielmt,kent,
6  & beta,pi,msk,mesh,dzfdx,dzfdy,cteta,steta,
7  & coef,calfa,salfa,slopeff,phised,devia,beta2,
8  & tob,xmvs,xmve,dm,grav,unsv2d)
9 !
10 !***********************************************************************
11 ! SISYPHE V6P3 12/02/2013
12 !***********************************************************************
13 !
14 !brief COMPUTES THE PARAMETERS OF THE SLOPE EFFECT.
15 !
16 !history E. PELTIER; C. LENORMANT; J.-M. HERVOUET
17 !+ 11/09/1995
18 !+ V5P1
19 !+
20 !
21 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
22 !+ 13/07/2010
23 !+ V6P0
24 !+ Translation of French comments within the FORTRAN sources into
25 !+ English comments
26 !
27 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
28 !+ 21/08/2010
29 !+ V6P0
30 !+ Creation of DOXYGEN tags for automated documentation and
31 !+ cross-referencing of the FORTRAN sources
32 !
33 !history C.VILLARET (EDF-LNHE), P.TASSI (EDF-LNHE)
34 !+ 19/07/2011
35 !+ V6P1
36 !+ Name of variables
37 !+
38 !history Pablo Tassi PAT (EDF-LNHE)
39 !+ 12/02/2013
40 !+ V6P3
41 !+ Correction by Rebekka Kopmann (BAW):
42 !+ Avoiding the slope effect at the open boundaries
43 !+ So far only the magnitude is set to 1, but the directions are due to the slope effect.
44 !+ Specially at the outlet boundary, this can create problems.
45 !+ If a bar is moved out of the model there can be the situation,
46 !+ that you have a negative slope in longitudinal, which creates in inflow of the bed load
47 !
48 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
49 !| BETA |-->| COEFFICIENT FOR SLOPING BED EFFECT ( KOCH AND FLOKSTRA)
50 !| BETA2 |-->| COEFFICIENT FOR THE DEVIATION (TALMON ET AL.)
51 !| CALFA |<->| COSINUS OF THE ANGLE BETWEEN TRANSPORT RATE AND X-AXIS
52 !| COEF |<->| CORRECTION COEFFICIENT FOR THE INTENSITY OF BEDLOAD TRANSPORT
53 !| CTETA |<->| COSINUS OF THE ANGLE BETWEEN MEAN FLOW AND X-AXIS
54 !| DEVIA |-->| SLOPE EFFECT FORMULA FOR DEVIATION
55 !| DM |-->| SEDIMENT GRAIN DIAMETER
56 !| DZFDX |<->| BOTTOM SLOPE IN THE X-DIRECTION
57 !| DZFDY |<->| BOTTOM SLOPE IN THE Y-DIRECTION
58 !| GRAV |-->| ACCELERATION OF GRAVITY
59 !| IELMT |-->| NUMBER OF ELEMENTS
60 !| KENT |-->| CONVENTION FOR LIQUID INPUT WITH PRESCRIBED VALUE
61 !| LIQBOR |-->| TYPE OF BOUNDARY CONDITION FOR QS
62 !| MASKEL |-->| MASKING OF ELEMENTS
63 !| MESH |<->| MESH STRUCTURE
64 !| MSK |-->| IF YES, THERE IS MASKED ELEMENTS
65 !| NPOIN |-->| NUMBER OF POINTS
66 !| NPTFR |-->| NUMBER OF BOUNDARY POINTS
67 !| PHISED |-->| ANGLE OF REPOSE OF THE SEDIMENT
68 !| PI |-->| PI
69 !| S |-->| VOID STRUCTURE
70 !| SALFA |<->| SINUS OF THE ANGLE BETWEEN TRANSPORT RATE AND X-AXIS
71 !| SLOPEFF |-->| LOGICAL, SLOPING BED EFFECT OR NOT
72 !| STETA |<->| COSINUS OF THE ANGLE BETWEEN MEAN FLOW AND Y-AXIS
73 !| TOB |<->| BED SHEAR STRESS (TOTAL FRICTION)
74 !| UNSV2D |-->| INVERSE OF INTEGRALS OF TEST FUNCTIONS
75 !| XMVE |-->| FLUID DENSITY
76 !| XMVS |-->| WATER DENSITY
77 !| ZF |-->| ELEVATION OF BOTTOM
78 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
79 !
80  USE interface_sisyphe,ex_bedload_effpnt => bedload_effpnt
81  USE bief
83  IMPLICIT NONE
84 !
85  ! 2/ GLOBAL VARIABLES
86  ! -------------------
87  TYPE(bief_obj), INTENT(IN) :: MASKEL,LIQBOR,S,UNSV2D
88  TYPE(bief_obj), INTENT(IN) :: ZF, TOB
89  INTEGER, INTENT(IN) :: NPOIN, NPTFR, IELMT, KENT
90  INTEGER, INTENT(IN) :: SLOPEFF,DEVIA
91  DOUBLE PRECISION, INTENT(IN) :: BETA, PI, PHISED, BETA2
92  DOUBLE PRECISION, INTENT(IN) :: XMVS, XMVE, GRAV, DM
93  LOGICAL, INTENT(IN) :: MSK
94  TYPE(bief_mesh), INTENT(INOUT) :: MESH
95  TYPE(bief_obj), INTENT(INOUT) :: DZFDX, DZFDY
96  TYPE(bief_obj), INTENT(INOUT) :: CTETA,STETA
97  TYPE(bief_obj), INTENT(INOUT) :: COEF, CALFA, SALFA
98 !
99  ! 3/ LOCAL VARIABLES
100  ! ------------------
101  INTEGER :: I, K
102  DOUBLE PRECISION :: C,ZETA,C1,CALPHA,SALPHA,AA,BB
103  DOUBLE PRECISION :: CPSI,SPSI,DZF,TANPHI,CZETA,SZETA,SURBETA2
104  DOUBLE PRECISION :: NORM,TT1
105 !
106 !======================================================================!
107 !======================================================================!
108 ! PROGRAM !
109 !======================================================================!
110 !======================================================================!
111 !
112 !
113 ! TODO : IF WE SWAP THE DEVIA AND THE SLOPEFF ACTIONS BELOW
114 ! IT IS PROBABLY NOT USEFUL TO DO A COPY OF CALFA AND SALFA ?
115 !
116 ! COS AND SIN TETA (CALFA AND SALFA HAVE ALREADY BEEN COMPUTED
117 ! IN BEDLOAD_SOLIDISCHARGE, SO JUST A COPY HERE)
118 ! TETA = ANGLE OF THE FLOW WITH OX
119 !
120  CALL os('X=Y ',x=cteta,y=calfa)
121  CALL os('X=Y ',x=steta,y=salfa)
122 !
123 !----------------------------------------------------------------------
124 !
125 ! COMPUTES THE SLOPE : D(ZF)/DX ET D(ZF)/DY (AT THE NODES)
126 !
127  CALL vector(dzfdx, '=', 'GRADF X',ielmt,1.d0,zf,s,s,
128  & s,s,s,mesh,msk,maskel)
129  CALL vector(dzfdy, '=', 'GRADF Y',ielmt,1.d0,zf,s,s,
130  & s,s,s,mesh,msk,maskel)
131 !
132  IF(ncsize.GT.1) THEN
133  CALL parcom(dzfdx,2,mesh)
134  CALL parcom(dzfdy,2,mesh)
135  ENDIF
136 !
137  CALL os('X=XY ',x=dzfdx,y=unsv2d)
138  CALL os('X=XY ',x=dzfdy,y=unsv2d)
139 !
140 !======================================================================
141 !
142 ! COMPUTES THE SOLID TRANSPORT ANGLE ALFA = TETA + DEVIATION
143 !
144 ! 1 : KOCH AND FLOKSTRA
145 !
146  IF(devia==1) THEN
147 !
148  c = 2.d0*(xmvs-xmve)*grav*dm/3.d0
149  DO i=1,npoin
150  tt1=c/max(tob%R(i),1.d-10)
151  aa=steta%R(i)-tt1*dzfdy%R(i)
152  bb=cteta%R(i)-tt1*dzfdx%R(i)
153  norm=max(sqrt(aa**2+bb**2),1.d-10)
154  salfa%R(i)=aa/norm
155  calfa%R(i)=bb/norm
156  ENDDO
157 !
158 ! 2 : TALMON ET AL. JHR 1995 33(4)
159 !
160  ELSEIF(devia==2) THEN
161 !
162  surbeta2=1.d0/beta2
163  c = (xmvs-xmve)*grav*dm*surbeta2**2
164  DO i=1,npoin
165  tt1=sqrt(c/max(tob%R(i),1.d-10))
166  aa=steta%R(i)-tt1*dzfdy%R(i)
167  bb=cteta%R(i)-tt1*dzfdx%R(i)
168  norm=max(sqrt(aa**2+bb**2),1.d-10)
169  salfa%R(i)=aa/norm
170  calfa%R(i)=bb/norm
171  ENDDO
172 !
173  ENDIF
174 !
175 !======================================================================
176 !
177 ! COMPUTES THE COEFFICIENT TO TAKE THE SLOPE EFFECT ON THE MAGNITUDE
178 ! OF THE SOLID TRANSPORT INTO ACCOUNT
179 !
180 ! METHOD 1 (EMPIRICAL)
181 !
182  IF(slopeff==1) THEN
183 !
184  DO i=1,npoin
185  coef%R(i)=max(0.d0,
186  & 1.d0-beta*(dzfdx%R(i)*cteta%R(i)+dzfdy%R(i)*steta%R(i)) )
187  ENDDO
188 !
189 ! METHOD 2 : SOULSBY 1997 DYNAMICS OF MARINE SANDS P107-108
190 !
191  ELSEIF(slopeff.EQ.2) THEN
192 !
193  tanphi = tan(phised*pi/180.d0)
194 !
195  DO i=1,npoin
196 !
197 ! COSINE AND SINE OF THE DIRECTION OF THE SLOPE
198  dzf=sqrt(dzfdx%R(i)**2+dzfdy%R(i)**2)
199  IF(dzf.GT.1.d-12) THEN
200  calpha=dzfdx%R(i)/dzf
201  salpha=dzfdy%R(i)/dzf
202  ELSE
203  calpha=1.d0
204  salpha=0.d0
205  ENDIF
206 !
207 ! ZETA: ANGLE OF THE SLOPE WITH HORIZONTAL (BETA IN SOULSBY)
208  zeta=atan(dzf)
209  czeta=cos(zeta)
210  szeta=sin(zeta)
211 !
212 ! PSI: ANGLE OF THE CURRENT WITH THE SLOPE DIRECTION
213 ! PSI=TETA%R(I)-ALPHA
214  cpsi=cteta%R(i)*calpha+steta%R(i)*salpha
215  spsi=steta%R(i)*calpha-cteta%R(i)*salpha
216  c1=(czeta*tanphi)**2-(spsi*szeta)**2
217  coef%R(i)=max((cpsi*szeta+sqrt(max(c1,0.d0)))/tanphi,0.d0)
218  coef%R(i)=max(coef%R(i),0.d0)
219 !
220  ENDDO
221 !
222  ENDIF
223 !
224 ! ********************************************************************* !
225 ! V - TREATS THE BOUNDARY POINTS WITH IMPOSED RATE !
226 ! QS IS NOT MODIFIED WHEN SPECIFIED BY THE USER !
227 ! ********************************************************************* !
228 !
229 ! RK no slope effect at the open boundaries
230  DO k = 1, nptfr
231  IF (liqbor%I(k) == kent) THEN
232  coef%R(mesh%NBOR%I(k)) = 1.d0
233  calfa%R(mesh%NBOR%I(k)) = cteta%R(mesh%NBOR%I(k))
234  salfa%R(mesh%NBOR%I(k)) = steta%R(mesh%NBOR%I(k))
235  ENDIF
236 ! R.K. MAY 2007
237 ! KSORT = 4
238  IF (liqbor%I(k) == 4) THEN
239  coef%R(mesh%NBOR%I(k)) = 1.d0
240  calfa%R(mesh%NBOR%I(k)) = cteta%R(mesh%NBOR%I(k))
241  salfa%R(mesh%NBOR%I(k)) = steta%R(mesh%NBOR%I(k))
242  ENDIF
243  ENDDO
244 !
245 !======================================================================
246 !======================================================================
247 !
248  RETURN
249  END SUBROUTINE bedload_effpnt
subroutine bedload_effpnt(MASKEL, LIQBOR, S, ZF, NPOIN, NPTFR, IELMT, KENT, BETA, PI, MSK, MESH, DZFDX, DZFDY, CTETA, STETA, COEF, CALFA, SALFA, SLOPEFF, PHISED, DEVIA, BETA2, TOB, XMVS, XMVE, DM, GRAV, UNSV2D)
subroutine vector(VEC, OP, FORMUL, IELM1, XMUL, F, G, H, U, V, W, MESH, MSK, MASKEL, LEGO, ASSPAR)
Definition: vector.f:7
subroutine os(OP, X, Y, Z, C, IOPT, INFINI, ZERO)
Definition: os.f:7
subroutine parcom(X, ICOM, MESH)
Definition: parcom.f:7
subroutine coef(S3D_IVIDE, S3D_EPAI, TRA01, S3D_NPFMAX, IMAX, NDEB, S3D_RHOS, GRAV, S3D_DTC, DSIG1)
Definition: coef.f:9
Definition: bief.f:3