The TELEMAC-MASCARET system  trunk
cvsp_alt.f
Go to the documentation of this file.
1 ! **********************************
2  DOUBLE PRECISION FUNCTION cvsp_alt
3 ! **********************************
4 !
5  &(j, formula)
6 !
7 !***********************************************************************
8 ! SISYPHE V7P2 05/12/2017
9 !***********************************************************************
10 !
11 !brief CALCULATES A DYNAMIC ACTIVE LAYER THICKNESS
12 !+ ACCORDING TO 1 OF A COUPLE OF FORMULAS
13 !
14 !
15 !history UWE MERKEL
16 !+ 20/07/2011
17 !+ V6P2
18 !+
19 !
20 !history P. A. TASSI (EDF R&D, LNHE)
21 !+ 12/03/2013
22 !+ V6P3
23 !+ cleaning, cosmetic
24 !
25 !history LEOPOLD STADLER (BAW) & J-M HERVOUET (EDF LAB, LNHE)
26 !+ 28/07/2014
27 !+ V7P0
28 !+ Computation of D90 and DIAMAX secured to avoid divisions by 0.
29 !
30 !history UWE MERKEL (UHM) R. KOPMANN (BAW)
31 !+ 22/11/2016 / 2017
32 !+ V6P3 / V7P2
33 !+ Many changes
34 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
35 !| J |<--| INDEX OF A POINT IN MESH
36 !| FORMULA |<--| WHICH FORMULA TO USE TO CALCULATE THE ALT
37 !| VCE |-->| WATER VISCOSITY
38 !| XMVE |-->| FLUID DENSITY
39 !| XMVS |-->| SEDIMENT DENSITY
40 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
41 !
42  USE bief
44 !
46  IMPLICIT NONE
47 
48  INTEGER, INTENT(IN) :: J
49  INTEGER, INTENT(IN) :: FORMULA
50 !
51 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
52 !
53  INTEGER I
54  DOUBLE PRECISION RHO, RHO_S, G, D50, D90, DMAX, FMAX, TAUC, TAUB
55  DOUBLE PRECISION PON, SUMME
56  DOUBLE PRECISION DSTAR, DENS
57 !
58 !-----------------------------------------------------------------------
59 !
60 ! ATTENTION !
61 !
62 !-----------------------------------------------------------------------
63 !
64 ! EXPECTS GRAIN CLASSES TO BE SORTED IN ASCENDING ORDER
65 ! UNLIKE SISYPHE!!!
66 ! IMPROVE IT!!!
67 !
68 !-----------------------------------------------------------------------
69 !
70 !
71 !-----------------------------------------------------------------------
72 ! CHECK ASCENDING ORDER OF CLASSES D50
73 !-----------------------------------------------------------------------
74  DO i=1,nsicla-1
75  IF(fdm(i).GE.fdm(i+1)) THEN
76  WRITE(lu,*) 'STOPPING!!!! GRAIN CLASSES HAVE TO BE',
77  & ' IN ASCENDING ORDER!!! FOR DYNAMIC ALT'
78  CALL plante(1)
79  stop
80  ENDIF
81  ENDDO
82 !-----------------------------------------------------------------------
83 ! BASICS
84 !-----------------------------------------------------------------------
85  g = grav
86  rho = xmve
87  rho_s = xmvs
88  pon = xkv
89  d50 = acladm%R(j)
90 !-----------------------------------------------------------------------
91 ! DMAX - NEW APPROXIMATION: DMAX = D99 / BEFORE DMAX = MAX(FDM)
92 !-----------------------------------------------------------------------
93  fmax = 0.99d0
94  summe = avail(j,1,1)
95  dmax = 0.d0
96  IF (summe.GE.fmax) THEN
97  dmax = fdm(1)
98  ELSE
99  DO i=2,nsicla
100  IF(avail(j,1,i).GT.0.d0) THEN
101  summe = avail(j,1,i) + summe
102  IF(summe.GE.fmax.AND.dmax.EQ.0.d0) THEN
103  dmax = fdm(i-1) + ( (fdm(i)-fdm(i-1)) /
104  & avail(j,1,i)) * (fmax-(summe-avail(j,1,i)))
105  ENDIF
106  ENDIF
107  ENDDO
108  ENDIF
109 !DMAX = MAX(FDM(1), DMAX)
110  IF (dmax.LE.0.d0.AND.summe.GT.zero) THEN
111  WRITE(lu,*)'UHM DMAXERROR'
112  DO i=1,nsicla
113  WRITE(lu,*)'DMAXERROR',j,i,fdm(i),avail(j,1,i),summe
114  WRITE(lu,*)zf%R(j)-zr%R(j)
115  ENDDO
116  stop
117  ENDIF
118 !-----------------------------------------------------------------------
119 ! D90 - ONLY FIRST APPROXIMATION!
120 !-----------------------------------------------------------------------
121  fmax = 0.90d0
122  summe = avail(j,1,1)
123  d90 = 0.d0
124  IF (summe.GE.fmax) THEN
125  d90 = fdm(1)
126  ELSE
127  DO i=2,nsicla
128  IF(avail(j,1,i).GT.0.d0) THEN
129  summe = avail(j,1,i) + summe
130  IF(summe.GE.fmax.AND.d90.EQ.0.d0) THEN
131  d90 = fdm(i-1) + ( (fdm(i)-fdm(i-1)) /
132  & avail(j,1,i)) * (fmax-(summe-avail(j,1,i)))
133  ENDIF
134  ENDIF
135  ENDDO
136  ENDIF
137 !D90 = MAX(FDM(1), D90)
138  IF (d90.LE.0.d0.AND.summe.GT.zero) THEN
139  WRITE(lu,*)'UHM D90ERROR', d90, fmax, summe
140  DO i=1,nsicla
141  WRITE(lu,*)'D90ERROR',j,i,fdm(i),avail(j,1,i),summe
142  ENDDO
143  WRITE(lu,*)'D90ERROR'
144  ENDIF
145 !-----------------------------------------------------------------------
146 ! SHEAR PARAMETERS
147 !-----------------------------------------------------------------------
148 ! HERE ARE ENOUGH POSSIBILITIES FOR IMPROVEMENT
149 ! THE INITIATION OF MOTION STARTS WITH THE SMALLEST GRAIN
150 ! LEEDS TO BIGGER ACTIVE LAYER THICKNESSES
151  tauc = ac(1)*((xmvs-xmve)*g*d50)
152  taub = tob%R(j)
153 !
154 !-----------------------------------------------------------------------
155 ! NEW ACTIVE LAYER THICKNESS
156 !-----------------------------------------------------------------------
157 !
158  SELECT CASE (formula)
159 !-----------------------------------------------------------------------
160 ! HUNZIKER & GUENTHER
161 !-----------------------------------------------------------------------
162 !
163  CASE (1)
164  cvsp_alt = 5.d0 * dmax
165 !
166 !-----------------------------------------------------------------------
167 ! FREDSOE & DEIGAARD 1992
168 !-----------------------------------------------------------------------
169 !
170  CASE (2)
171  cvsp_alt = 2.d0 * taub / (g*(rho_s-rho))
172  & / tan(phised/180.0d0*pi) / (1.d0-pon)
173 !
174 !-----------------------------------------------------------------------
175 ! VAN RIJN 1993
176 !-----------------------------------------------------------------------
177 !
178  CASE (3)
179  cvsp_alt = 0.d0
180  IF(tauc.GT.0.d0) THEN
181  IF(taub.GT.tauc) THEN
182  dens = (rho_s - rho) / rho
183  dstar = d50*(g*dens/vce**2)**(1.d0/3.d0)
184  cvsp_alt = 0.3d0*(dstar**0.7d0)*
185  & ((taub-tauc)/tauc)**0.5*d50
186  ENDIF
187  ENDIF
188 !-----------------------------------------------------------------------
189 ! WONG 2006
190 !-----------------------------------------------------------------------
191  CASE (4)
192  IF((taub/(rho_s-rho)/g/d50).LT.0.0549d0) THEN
193  cvsp_alt = 0.d0
194  ELSE
195  cvsp_alt=5.0d0*d50*((taub/(rho_s-rho)/g/d50)
196  & -0.0549d0)**0.56d0
197  ENDIF
198 !-----------------------------------------------------------------------
199 ! MALCHEREK 2003
200 !-----------------------------------------------------------------------
201  CASE (5)
202  cvsp_alt = 0.d0
203  IF (tauc.GT.0) THEN
204  cvsp_alt = d90 / (1.d0-pon) * taub/tauc
205  ENDIF
206 !-----------------------------------------------------------------------
207 ! SISYPHE
208 !-----------------------------------------------------------------------
209  CASE (6)
210  cvsp_alt = 3.d0 * d50
211 !-----------------------------------------------------------------------
212 ! CONSTANT FROM CAS FILE
213 !-----------------------------------------------------------------------
214  CASE (0)
215  cvsp_alt = elay0
216 !-----------------------------------------------------------------------
217  CASE DEFAULT
218  WRITE(lu,*)'NO VALID CHOICE FOR "C-VSM DYNAMIC ALT MODEL"'
219  WRITE(lu,*)'MUST BE BETWEEN 0 AND 6'
220  CALL plante(1)
221 !
222  END SELECT
223 !-----------------------------------------------------------------------
224 ! MINIMUM ALT VALUE = SMALLEST GRAIN SIZE
225 !-----------------------------------------------------------------------
226  cvsp_alt = max(cvsp_alt, fdm(1))
227 !
228 !-----------------------------------------------------------------------
229 !
230  RETURN
231  END FUNCTION cvsp_alt
double precision, target phised
double precision, target xkv
type(bief_obj), target zr
type(bief_obj), target zf
type(bief_obj), target acladm
double precision, dimension(nsiclm), target fdm
double precision, dimension(:,:,:), allocatable, target avail
double precision function cvsp_alt(J, FORMULA)
Definition: cvsp_alt.f:7
type(bief_obj), target tob
double precision, dimension(nsiclm), target ac
Definition: bief.f:3