|
From: <bma...@us...> - 2013-11-14 17:19:17
|
Revision: 8533
http://sourceforge.net/p/fudaa/svn/8533
Author: bmarchan
Date: 2013-11-14 17:19:14 +0000 (Thu, 14 Nov 2013)
Log Message:
-----------
Mascaret : Formule Recking 2010
Modified Paths:
--------------
trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierFormuleSediment.java
trunk/soft/fudaa-mascaret/server/src/test/java/org/fudaa/dodico/hydraulique1d/metier/SedimentologieTest.java
Added Paths:
-----------
trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierFormuleRecking2010.java
Added: trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierFormuleRecking2010.java
===================================================================
--- trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierFormuleRecking2010.java (rev 0)
+++ trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierFormuleRecking2010.java 2013-11-14 17:19:14 UTC (rev 8533)
@@ -0,0 +1,136 @@
+package org.fudaa.dodico.hydraulique1d.metier.sediment;
+
+import org.fudaa.dodico.hydraulique1d.metier.MetierDescriptionVariable;
+import org.fudaa.dodico.hydraulique1d.metier.MetierResultatsTemporelSpacialI;
+
+import com.memoire.fu.FuLog;
+
+/**
+ * Calcul s\xE9dimentaire avec la formule de Recking 2010.
+ *
+ * @author Bertrand Marchand (mar...@de...)
+ * @version $Id: MetierFormuleLefort1991.java 8524 2013-10-18 08:01:47Z
+ * bmarchan$
+ */
+public class MetierFormuleRecking2010 extends MetierFormuleSediment {
+
+ @Override
+ public double calculer(MetierParametresSediment _params, MetierResultatsTemporelSpacialI _adapter, int _ibief, int _isect, int _itps) {
+
+ double pente = _adapter.getValue(MetierDescriptionVariable.PENE, _ibief, _itps, _isect);
+ double larg = _adapter.getValue(MetierDescriptionVariable.B1, _ibief, _itps, _isect);
+ double qmin = _adapter.getValue(MetierDescriptionVariable.QMIN, _ibief, _itps, _isect);
+// double h = _adapter.getValue(MetierDescriptionVariable.Y, _ibief, _itps, _isect);
+
+ double dens = _params.getDensiteMateriau();
+ double d84 = _params.getD84();
+ double d50 = _params.getD50();
+
+ // Diametre cible
+ double dcible;
+ if (d50 > 0.002) {
+ dcible = 3.5 * d84;
+ }
+ else {
+ dcible = d50;
+ }
+
+ // Calcul de RH
+// double rh = calculerRH(h, d84, qmin, pente, larg);
+ // Calcul de RH cible
+ double rhcible = calculerRHCible(qmin, larg, pente, dcible);
+
+ double tetac84;
+ if (d50 < 0.002) {
+ tetac84 = 0.045;
+ }
+ else {
+ tetac84 = (1.32 * pente + 0.037) * Math.pow(d84 / d50, -0.93);
+ }
+
+ // 'valeur de tetac prise pour la validation des valeurs labo
+ // 'tetac84 = 0.15 * pente ^ 0.275
+
+ double l = 12.53 * Math.pow((d84 / d50), (4.445 * Math.pow(pente, 0.5))) * Math.pow(tetac84, 1.605);
+
+ // calcul du d\xE9bit solide
+ double teta84 = rhcible * pente / (d84 * (dens - 1));
+ double cpl;
+ if (teta84 < l) {
+ cpl = 0.0005 * (dens * 1000) * Math.pow((9.81 * (dens - 1) * Math.pow(d84, 3)), 0.5) * Math.pow((d84 / d50), (-18 * Math.pow(pente, 0.5))) * Math.pow((teta84 / tetac84), 6.5);
+ }
+ else {
+ cpl = 14 * (dens * 1000) * Math.pow((9.81 * (dens - 1) * Math.pow(d84, 3)), 0.5) * Math.pow(teta84, 2.45);
+ }
+ double qs = cpl / (dens * 1000) * larg;
+
+ return qs;
+ }
+
+ protected double calculerRH(double _h, double _d84, double _qmin, double _pente, double _larg) {
+ double rh;
+ if (_h / _d84 < 5) {
+ rh = Math.pow((_qmin / _larg * Math.pow(_d84, 0.52)) / (3.2 * Math.pow((9.81 * _pente), 0.5)), 0.5);
+ }
+ else {
+ rh = Math.pow(((_qmin / _larg * Math.pow(_d84, 0.27)) / (4.7 * Math.pow((9.81 * _pente), 0.5))), 0.57);
+ }
+ return rh;
+ }
+
+ /**
+ * Calcul du RH cible par dicothomie.
+ *
+ * @param _qmin Le d\xE9bit en lit mineur
+ * @param _larg La largeur du profil
+ * @param _pente La pente
+ * @param _dcible Le diametre de grain cible
+ * @param _rescible Le r\xE9sultat cible \xE0 trouver
+ * @return La RH correspondant au r\xE9sultat cible demand\xE9.
+ */
+ private double calculerRHCible(double _qmin, double _larg, double _pente, double _dcible) {
+ double rhSup = 1.e20;
+ double rhInf = 1.e-20;
+ double rhCible = 0;
+ double rescible = 0;
+ double val = rescible + 1;
+
+ // It\xE9rations par dicothomie jusqu'\xE0 obtention du r\xE9sultat.
+ while (true) {
+ rhCible = (rhSup + rhInf) / 2;
+ val = _qmin * (_larg - 2 * rhCible) / (rhCible * _larg * _larg * Math.pow((9.81 * rhCible * (_pente)), 0.5)) - 6.25 - 5.75 * Math.log10(rhCible / (_dcible));
+
+ if (val - rescible > 0) {
+ rhInf = rhCible;
+ }
+ else if (val < rescible - 1.e-8) {
+ rhSup = rhCible;
+ }
+ // Sortie si convergence
+ else {
+ break;
+ }
+ }
+// FuLog.debug("rhCible=" + rhCible);
+ return rhCible;
+ }
+
+ @Override
+ public MetierDescriptionVariable[] getRequiredVariable() {
+ return new MetierDescriptionVariable[] {
+ MetierDescriptionVariable.B1,
+ MetierDescriptionVariable.CHAR,
+ MetierDescriptionVariable.QMIN
+ };
+ }
+
+ @Override
+ public MetierDescriptionVariable getVariable() {
+ return MetierDescriptionVariable.QS_RECKING10;
+ }
+
+ @Override
+ public String getName() {
+ return "Recking 2010";
+ }
+}
Property changes on: trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierFormuleRecking2010.java
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierFormuleSediment.java
===================================================================
--- trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierFormuleSediment.java 2013-11-08 16:27:15 UTC (rev 8532)
+++ trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierFormuleSediment.java 2013-11-14 17:19:14 UTC (rev 8533)
@@ -35,7 +35,7 @@
formules_.add(new MetierFormuleLefort1991());
formules_.add(new MetierFormuleLefort2007());
formules_.add(new MetierFormuleMeyerPeter());
- // formules_.add(MetierDescriptionVariable.QS_RECKING10);
+ formules_.add(new MetierFormuleRecking2010());
formules_.add(new MetierFormuleRecking2011());
formules_.add(new MetierFormuleRickenmann());
formules_.add(new MetierFormuleSmartJaggi());
@@ -124,16 +124,6 @@
double diam = _params.getDmoyen();
double dens = _params.getDensiteMateriau();
- // ' initialisation des colonnes et des lignes
- // Col_Tau = Range("Tau").Column
- // Col_deb_cible = Range("Qcible").Column
- // Col_H = Range("Hauteur").Column
- //
- // lgn_calcul = Range("ligne_debut").Row
- // ligne = lgn_calcul
-
- // 'boucle sur les lignes'
- // Do While Cells(ligne, Col_deb_cible) <> ""
// Calcul de tau
double rh1 = (h1 * larg) / (larg + 2. * h1);
@@ -151,21 +141,9 @@
// ecriture de Tau
ret.tau = tau;
ret.taueff = taueff;
-
- // teta = tau*
- // if (Diam <> "" Then
ret.teta = tau / (9.81 * 1000. * (dens - 1) * diam);
- // Else
- // teta = "-"
- // End If
- // If D50 <> "" Then
ret.tetaD50 = tau / (9.81 * 1000. * (dens - 1) * d50);
- // Else
- // teta_d50 = "-"
- // End If
- // Cells(ligne, Col_Tau + 2) = teta '=tau* f(dm)
- // Cells(ligne, Col_Tau + 3) = teta_d50 '=tau* f(D50)
return ret;
}
Modified: trunk/soft/fudaa-mascaret/server/src/test/java/org/fudaa/dodico/hydraulique1d/metier/SedimentologieTest.java
===================================================================
--- trunk/soft/fudaa-mascaret/server/src/test/java/org/fudaa/dodico/hydraulique1d/metier/SedimentologieTest.java 2013-11-08 16:27:15 UTC (rev 8532)
+++ trunk/soft/fudaa-mascaret/server/src/test/java/org/fudaa/dodico/hydraulique1d/metier/SedimentologieTest.java 2013-11-14 17:19:14 UTC (rev 8533)
@@ -8,6 +8,7 @@
import org.fudaa.dodico.hydraulique1d.metier.sediment.MetierFormuleLefort1991;
import org.fudaa.dodico.hydraulique1d.metier.sediment.MetierFormuleLefort2007;
import org.fudaa.dodico.hydraulique1d.metier.sediment.MetierFormuleMeyerPeter;
+import org.fudaa.dodico.hydraulique1d.metier.sediment.MetierFormuleRecking2010;
import org.fudaa.dodico.hydraulique1d.metier.sediment.MetierFormuleRecking2011;
import org.fudaa.dodico.hydraulique1d.metier.sediment.MetierFormuleRickenmann;
import org.fudaa.dodico.hydraulique1d.metier.sediment.MetierFormuleSediment;
@@ -197,6 +198,40 @@
}
}
+ public void testFormuleRecking2010() throws IOException {
+ FuLog.debug("Formule Recking 2010");
+ MetierFormuleSediment form=new MetierFormuleRecking2010();
+ for (int itps=0; itps<hydrauRes_.getNbTemps(); itps++) {
+ double val=form.calculer(params_, hydrauRes_, 0, 0, itps);
+ assertEquals(val, sedRes[9][itps],epsilon);
+ }
+// double G7=1000;
+// double lb=30;
+// double itrap=0.01;
+// double ABsup=1.e20;
+// double ABinf=1.e-20;
+// double AB=0;
+// double dopti=0.35;
+// double valcible=6.01;
+// double val=valcible+1;
+//
+// while (Math.abs(val) > 10.e-8) {
+// AB=(ABsup+ABinf)/2;
+// val = G7 * (lb - 2 * AB) / (AB * lb * lb * Math.pow((9.81 * AB * (itrap)), 0.5)) - 6.25 - 5.75 * Math.log10(AB / (dopti));
+// FuLog.debug("val=" + val);
+// if (val-valcible>0) {
+// ABinf=AB;
+// }
+// else if (val<valcible-1.e-8) {
+// ABsup=AB;
+// }
+// else {
+// break;
+// }
+// }
+// FuLog.debug("AB=" + AB);
+ }
+
public void testFormuleRecking2011() throws IOException {
FuLog.debug("Formule Recking 2011");
MetierFormuleSediment form=new MetierFormuleRecking2011();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|