|
From: <bma...@us...> - 2013-10-18 08:01:50
|
Revision: 8524
http://sourceforge.net/p/fudaa/svn/8524
Author: bmarchan
Date: 2013-10-18 08:01:47 +0000 (Fri, 18 Oct 2013)
Log Message:
-----------
Mascaret : Formule Lefort 2007
Modified Paths:
--------------
trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierFormuleLefort1991.java
trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierParametresSediment.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/MetierFormuleLefort2007.java
Modified: trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierFormuleLefort1991.java
===================================================================
--- trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierFormuleLefort1991.java 2013-10-17 12:33:25 UTC (rev 8523)
+++ trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierFormuleLefort1991.java 2013-10-18 08:01:47 UTC (rev 8524)
@@ -22,8 +22,9 @@
public double calculer(MetierParametresSediment _params, MetierResultatsTemporelSpacialI _adapter, int _ibief, int _isect, int _itps) {
double pente = _adapter.getValue(MetierDescriptionVariable.PENE, _ibief, _itps, _isect);
+ double qmin = _adapter.getValue(MetierDescriptionVariable.QMIN, _ibief, _itps, _isect);
+
double dens = _params.getDensiteMateriau();
-
double d90 = _params.getD90();
double d30 = _params.getD30();
double diam = _params.getDmoyen();
@@ -37,9 +38,6 @@
qc = 0.0776 * Math.pow((9.81 * Math.pow(diam, 5)), 0.5) * Math.pow((dens - 1), (8. / 3)) * Math.pow((1 - 1.2 * pente), (8. / 3)) / Math.pow(pente, (13. / 6));
}
- // D\xE9bit liquide
- double qmin = _adapter.getValue(MetierDescriptionVariable.QMIN, _ibief, _itps, _isect);
-
// Calcul du d\xE9bit solide
double qs;
if (qc > qmin) {
Added: trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierFormuleLefort2007.java
===================================================================
--- trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierFormuleLefort2007.java (rev 0)
+++ trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierFormuleLefort2007.java 2013-10-18 08:01:47 UTC (rev 8524)
@@ -0,0 +1,124 @@
+package org.fudaa.dodico.hydraulique1d.metier.sediment;
+
+import org.fudaa.dodico.hydraulique1d.metier.MetierDescriptionVariable;
+import org.fudaa.dodico.hydraulique1d.metier.MetierResultatsTemporelSpacialI;
+
+/**
+ * Calcul s\xE9dimentaire avec la formule de Lefort 1991.
+ *
+ * @author Bertrand Marchand (mar...@de...)
+ * @version $Id: MetierFormuleLefort1991.java 8523 2013-10-17 12:33:25Z bmarchan$
+ */
+public class MetierFormuleLefort2007 extends MetierFormuleSediment {
+
+ /**
+ * Calcul de la capacit\xE9 de transport dans chaque section selon la formule de
+ * Lefort. La formule calcule la capacit\xE9 de transport apparante avec une
+ * densit\xE9 apparente de 2. Un coefficient de 0.755 est ajout\xE9 pour revenir au
+ * volume r\xE9el et non au calcul du volume en place (voir \xE9tablissement formule
+ * de lefort).
+ */
+ @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 ks = _adapter.getValue(MetierDescriptionVariable.KMIN, _ibief, _itps, _isect);
+ double qmin = _adapter.getValue(MetierDescriptionVariable.QMIN, _ibief, _itps, _isect);
+ double h = _adapter.getValue(MetierDescriptionVariable.HMOY, _ibief, _itps, _isect);
+
+ double nu = _params.getViscosite();
+ double diam = _params.getDmoyen();
+ double dens = _params.getDensiteMateriau();
+ double d90 = _params.getD90();
+ double d30 = _params.getD30();
+ double d50 = _params.getD50();
+
+ // ' initialisation des colonnes et des lignes
+ // Col_Lefort07 = Range("Lefort07").Column
+ // Col_deb_cible = Range("Qcible").Column
+ // Col_H = Range("Hauteur").Column
+ //
+ // Lgn_Qc = Range("Ligne_Qc").Row
+ // lgn_calcul = Range("ligne_debut").Row
+ // ligne = lgn_calcul
+
+ // calcul des coef
+ double rap = Math.pow((d90 / d30), 0.21);
+ double detoile = diam * Math.pow((9.81 * (dens - 1) / Math.pow(nu, 2)), (1. / 3));
+ double kr = 21.1 / Math.pow(diam, (1. / 6));
+ double n = 1.725 + 0.09 * Math.log10(pente);
+
+ double cdm;
+ if (diam < 0.008) {
+ cdm = 0.0269;
+ }
+ else {
+ cdm = 0.0269 + 0.532 / (1.1 + detoile) - 0.0589 * Math.exp(-detoile / 60);
+ }
+ double m = 1.887 + 0.09 * Math.log10(pente);
+
+ // calcul du debit de debut d'entrainement
+ double qc = Math.pow((9.81 * Math.pow(diam, 5)), 0.5) * cdm * Math.pow((dens - 1), (5. / 3)) * Math.pow((larg / diam), (2. / 3)) * Math.pow((ks / kr), -0.42) * Math.pow(pente, (-n));
+
+ // Cells(Lgn_Qc, Col_Lefort07) = Qc
+
+ // calcul du d\xE9bit solide
+ // Do While Cells(ligne, Col_deb_cible) <> ""
+ // Qmin = Cells(ligne, Col_deb_cible)
+ double cp;
+ if (qmin > qc) {
+
+ double qetoile = qmin / qc;
+ // calcul de getoile
+ double gQetoile;
+ if (qetoile > 2.5) {
+ gQetoile = 3.88 * Math.pow((1 - Math.pow((0.75 / qetoile), 0.25)), (5. / 3));
+ }
+ else {
+ gQetoile = 0.4 * Math.pow((qetoile / 2.5), (6.25 * (1 - 0.37 * qetoile)));
+ }
+
+ // Coef de correction de dune
+ double cor;
+ if (ks / kr < 0.6) {
+ cor = 1 - 0.9 * Math.exp(-0.08 * Math.pow((ks / kr), 2.4) * qetoile);
+ }
+ else {
+ cor = 1;
+ }
+
+ // Calcul du reynolds
+ double rh = (h * larg) / (larg + 2 * h);
+ double re = qmin * rh / ((larg * h) * nu);
+
+ double z = 0.78 + 1.53 * Math.pow(re, 0.14) / Math.pow(detoile, 0.78);
+
+ // concentration en !!!! T/m3
+ cp = 3.176 * cor * rap * dens / Math.pow((dens - 1), (1.38)) * Math.pow(pente, m) * Math.pow(gQetoile, z);
+ }
+ else {
+ cp = 0;
+ }
+
+ double qs = qmin * cp / dens;
+ return qs;
+ }
+
+ @Override
+ public MetierDescriptionVariable[] getRequiredVariable() {
+ return new MetierDescriptionVariable[] {
+ MetierDescriptionVariable.CHAR, MetierDescriptionVariable.QMIN, MetierDescriptionVariable.B1,
+ MetierDescriptionVariable.KMIN, MetierDescriptionVariable.HMOY
+ };
+ }
+
+ @Override
+ public MetierDescriptionVariable getVariable() {
+ return MetierDescriptionVariable.QS_LEFORT07;
+ }
+
+ @Override
+ public String getName() {
+ return "Lefort 2007";
+ }
+}
Property changes on: trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierFormuleLefort2007.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/MetierParametresSediment.java
===================================================================
--- trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierParametresSediment.java 2013-10-17 12:33:25 UTC (rev 8523)
+++ trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierParametresSediment.java 2013-10-18 08:01:47 UTC (rev 8524)
@@ -88,6 +88,10 @@
public double getTEau() {
return tEau_;
}
+
+ public double getViscosite() {
+ return 0.001382/Math.pow((getTEau()+50),1.7);
+ }
public void setTEau(double tEau) {
if (tEau_==tEau) return;
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-10-17 12:33:25 UTC (rev 8523)
+++ trunk/soft/fudaa-mascaret/server/src/test/java/org/fudaa/dodico/hydraulique1d/metier/SedimentologieTest.java 2013-10-18 08:01:47 UTC (rev 8524)
@@ -5,6 +5,7 @@
import junit.framework.AssertionFailedError;
import org.fudaa.dodico.hydraulique1d.metier.sediment.MetierFormuleLefort1991;
+import org.fudaa.dodico.hydraulique1d.metier.sediment.MetierFormuleLefort2007;
import org.fudaa.dodico.hydraulique1d.metier.sediment.MetierFormuleSediment;
import org.fudaa.dodico.hydraulique1d.metier.sediment.MetierParametresSediment;
import org.fudaa.dodico.mascaret.AbstractMascaretTestCase;
@@ -55,6 +56,8 @@
class HydrauResults implements MetierResultatsTemporelSpacialI {
// Les debits, issus de la feuille Excel
double[] debits = new double[] { 1000, 774, 573, 450, 350, 296, 185, 178, 132, 107, 88, 63, 40, 30, 20, 10, 5, 1 };
+ // Les hauteurs, issues de la feuille Excel
+ double[] hauteurs = new double[] { 3.149, 2.682, 2.224, 1.915, 1.641, 1.480, 1.110, 1.084, 0.904, 0.795, 0.706, 0.577, 0.438, 0.368, 0.288, 0.190, 0.125, 0.05 };
@Override
public double getValue(MetierDescriptionVariable _var, int _ibief, int _itps, int _isect) {
@@ -74,6 +77,10 @@
else if (_var.nom().equals(MetierDescriptionVariable.QMIN.nom())) {
return debits[_itps];
}
+ // Hauteurs
+ else if (_var.nom().equals(MetierDescriptionVariable.HMOY.nom())) {
+ return hauteurs[_itps];
+ }
throw new AssertionFailedError();
}
@@ -116,4 +123,13 @@
assertEquals(val, sedRes[2][itps],epsilon);
}
}
+
+ public void testFormuleLefort2007() throws IOException {
+ FuLog.debug("Formule Lefort2007");
+ MetierFormuleSediment form=new MetierFormuleLefort2007();
+ for (int itps=0; itps<hydrauRes_.getNbTemps(); itps++) {
+ double val=form.calculer(params_, hydrauRes_, 0, 0, itps);
+ assertEquals(val, sedRes[4][itps],epsilon);
+ }
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|