|
From: <bma...@us...> - 2013-10-18 15:35:15
|
Revision: 8526
http://sourceforge.net/p/fudaa/svn/8526
Author: bmarchan
Date: 2013-10-18 15:35:09 +0000 (Fri, 18 Oct 2013)
Log Message:
-----------
Mascaret : Calcul de tau moyen
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
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-10-18 08:19:32 UTC (rev 8525)
+++ trunk/soft/fudaa-mascaret/server/src/main/java/org/fudaa/dodico/hydraulique1d/metier/sediment/MetierFormuleSediment.java 2013-10-18 15:35:09 UTC (rev 8526)
@@ -8,27 +8,39 @@
/**
* La classe abstraire pour toutes les formules de s\xE9diment
+ *
* @author Bertrand Marchand (mar...@de...)
- *
+ *
*/
public abstract class MetierFormuleSediment {
+ /**
+ * Valeurs de retour de la fonction de calcul de tau moyen
+ *
+ * @author Bertrand Marchand (mar...@de...)
+ */
+ public class RetTauMoy {
+ public double tau;
+ public double taueff;
+ public double teta;
+ public double tetaD50;
+ }
/**
* Contient les instances de chaque formule.
*/
- private static List<MetierFormuleSediment> formules_=new ArrayList<MetierFormuleSediment>();
+ private static List<MetierFormuleSediment> formules_ = new ArrayList<MetierFormuleSediment>();
static {
-// formules_.add(MetierDescriptionVariable.QS_ENGELUND);
+ // formules_.add(MetierDescriptionVariable.QS_ENGELUND);
formules_.add(new MetierFormuleLefort1991());
formules_.add(new MetierFormuleLefort2007());
formules_.add(new MetierFormuleMeyerPeter());
-// formules_.add(MetierDescriptionVariable.QS_RECKING10);
-// formules_.add(MetierDescriptionVariable.QS_RECKING11);
-// formules_.add(MetierDescriptionVariable.QS_RICKENMANN);
+ // formules_.add(MetierDescriptionVariable.QS_RECKING10);
+ // formules_.add(MetierDescriptionVariable.QS_RECKING11);
+ // formules_.add(MetierDescriptionVariable.QS_RICKENMANN);
formules_.add(new MetierFormuleSmartJaggi());
-// formules_.add(MetierDescriptionVariable.QS_VANRIJN);
+ // formules_.add(MetierDescriptionVariable.QS_VANRIJN);
}
-
+
public MetierFormuleSediment() {
super();
}
@@ -39,49 +51,119 @@
* @return La variable associ\xE9e et calcul\xE9e par la formule.
*/
public abstract MetierDescriptionVariable getVariable();
-
+
/**
* @return Le nom de la formule (pour affichage)
*/
public abstract String getName();
-
+
/**
* @return Les variables necessaires au calcul par la formule. Sans ces
* variables, le calcul n'est pas possible.
*/
public abstract MetierDescriptionVariable[] getRequiredVariable();
-
+
/**
* Necessaire pour comparer correctement 2 enums.
*/
@Override
public boolean equals(Object _obj) {
- if (_obj==null || !(_obj instanceof MetierFormuleSediment)) return false;
- return getVariable().equals(((MetierFormuleSediment)_obj).getVariable());
+ if (_obj == null || !(_obj instanceof MetierFormuleSediment))
+ return false;
+ return getVariable().equals(((MetierFormuleSediment) _obj).getVariable());
}
@Override
public String toString() {
return getName();
}
-
+
/**
* @return Toutes les formules possibles.
*/
public static MetierFormuleSediment[] values() {
return formules_.toArray(new MetierFormuleSediment[0]);
}
-
+
/**
* La formule utilis\xE9e pour le calcul de la variable en entr\xE9e
+ *
* @param _var La variable
* @return La formule, ou null si la variable n'est pas s\xE9dimentaire.
*/
public static MetierFormuleSediment getFormule(MetierDescriptionVariable _var) {
for (MetierFormuleSediment formule : values()) {
- if (formule.getVariable().nom().equals(_var.nom()))
+ if (formule.getVariable().nom().equals(_var.nom()))
return formule;
}
return null;
}
+
+ /**
+ * Calcul de la contrainte hydrodynamique moyenne sur la section (utilis\xE9 par
+ * quelques formules).
+ * Utilise les r\xE9sultats KMIN, PENE, B1 et Y.
+ *
+ * @param _params Les parametres de sedimentologie.
+ * @param _adapter Les resultats
+ * @param _ibief L'indice de bief
+ * @param _isect L'indice de section
+ * @param _itps L'indice de temps.
+ */
+ public RetTauMoy taumoy(MetierParametresSediment _params, MetierResultatsTemporelSpacialI _adapter, int _ibief, int _isect, int _itps) {
+ RetTauMoy ret = new RetTauMoy();
+
+ double kr = _params.getRugosite();
+ double ks = _adapter.getValue(MetierDescriptionVariable.KMIN, _ibief, _itps, _isect);
+ double pente = _adapter.getValue(MetierDescriptionVariable.PENE, _ibief, _itps, _isect);
+ double Larg = _adapter.getValue(MetierDescriptionVariable.B1, _ibief, _itps, _isect);
+ double D50 = _params.getD50();
+ 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 H1 = _adapter.getValue(MetierDescriptionVariable.Y, _ibief, _itps, _isect);
+ double RH1 = (H1 * Larg) / (Larg + 2. * H1);
+
+ double Tau = 9.81 * 1000. * RH1 * pente;
+ double Kpeau;
+ if (kr > ks) {
+ Kpeau = kr;
+ }
+ else {
+ Kpeau = ks;
+ }
+
+ double Taueff = Math.pow((ks / Kpeau), 1.5) * Tau;
+
+ // 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;
+ }
}
\ No newline at end of file
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-18 08:19:32 UTC (rev 8525)
+++ trunk/soft/fudaa-mascaret/server/src/test/java/org/fudaa/dodico/hydraulique1d/metier/SedimentologieTest.java 2013-10-18 15:35:09 UTC (rev 8526)
@@ -6,6 +6,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.MetierFormuleSediment;
import org.fudaa.dodico.hydraulique1d.metier.sediment.MetierParametresSediment;
import org.fudaa.dodico.mascaret.AbstractMascaretTestCase;
@@ -48,6 +49,12 @@
//Van Rijn
{0.45, 0.32, 0.22, 0.16, 0.11, 0.09, 0.04, 0.04, 0.02, 0.02, 0.01, 0.01, 0.00, 0.00, 0.00, 0.00, 0.00, 0.01}
};
+ double[][] tauRes=new double[][] {
+ {274.34, 237.62, 200.39, 174.54, 151.03, 137.08, 104.27, 101.95, 85.56, 75.63, 67.39, 55.32, 42.26, 35.62, 27.98, 18.50, 12.23, 4.66},
+ {196.30, 170.03, 143.39, 124.89, 108.07, 98.09, 74.61, 72.95, 61.22, 54.11, 48.22, 39.58, 30.24, 25.49, 20.02, 13.24, 8.75, 3.34},
+ {0.85, 0.73, 0.62, 0.54, 0.47, 0.42, 0.32, 0.31, 0.26, 0.23, 0.21, 0.17, 0.13, 0.11, 0.09, 0.06, 0.04, 0.01},
+ {0.28, 0.24, 0.21, 0.18, 0.16, 0.14, 0.11, 0.10, 0.09, 0.08, 0.07, 0.06, 0.04, 0.04, 0.03, 0.02, 0.01, 0.00}
+ };
/**
* 1 seul bief, une seule section, avec plusieurs temps pour simuler un changement de d\xE9bit.
@@ -57,7 +64,10 @@
// 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 };
+ double[] hauteurs = new double[] {
+ 3.14873081460036, 2.68210790714307, 2.22448059466516, 1.9154924638265, 1.6406299286677, 1.48011332926777,
+ 1.11014253111858, 1.08431580617216, 0.903738918268046, 0.795428295616823, 0.706414986443789, 0.57689555253611,
+ 0.438313744098063, 0.368420603900746, 0.288496806954015, 0.190040156277613, 0.125250658298057, 0.0476277981477428 };
@Override
public double getValue(MetierDescriptionVariable _var, int _ibief, int _itps, int _isect) {
@@ -132,4 +142,17 @@
assertEquals(val, sedRes[4][itps],epsilon);
}
}
+
+ public void testTauMoy() throws IOException {
+ FuLog.debug("Tau moyen");
+ // N'importe quelle formule convient pour ce test.
+ MetierFormuleSediment form=new MetierFormuleMeyerPeter();
+ for (int itps=0; itps<hydrauRes_.getNbTemps(); itps++) {
+ MetierFormuleSediment.RetTauMoy ret=form.taumoy(params_, hydrauRes_, 0, 0, itps);
+ assertEquals(ret.tau, tauRes[0][itps],epsilon);
+ assertEquals(ret.taueff, tauRes[1][itps],epsilon);
+ assertEquals(ret.teta, tauRes[2][itps],epsilon);
+ assertEquals(ret.tetaD50, tauRes[3][itps],epsilon);
+ }
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|