Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/TestFiles/RegionalAssessment.xml
===================================================================
diff -u
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/TestFiles/RegionalAssessment.xml (revision 0)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/TestFiles/RegionalAssessment.xml (revision 1119)
@@ -0,0 +1,11655 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Standard/Calculation/ICalculation.cs
===================================================================
diff -u -r877 -r1119
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Standard/Calculation/ICalculation.cs (.../ICalculation.cs) (revision 877)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Standard/Calculation/ICalculation.cs (.../ICalculation.cs) (revision 1119)
@@ -36,8 +36,8 @@
public interface ICalculation
{
- CalculationResult RegisterProgress(ProgressDelegate progressDelegate);
- CalculationResult RegisterGetValues(GetValuesDelegate getValuesDelegate);
- CalculationResult RegisterSetValues(SetValuesDelegate setValuesDelegate);
+ //CalculationResult RegisterProgress(ProgressDelegate aProgressDelegate);
+ //CalculationResult RegisterGetValues(GetValuesDelegate aGetValuesDelegate);
+ //CalculationResult RegisterSetValues(SetValuesDelegate setValuesDelegate);
}
}
\ No newline at end of file
Index: DamEngine/trunk/src/Deltares.DamEngine.Interface/FillXmlOutputFromDam.cs
===================================================================
diff -u -r1013 -r1119
--- DamEngine/trunk/src/Deltares.DamEngine.Interface/FillXmlOutputFromDam.cs (.../FillXmlOutputFromDam.cs) (revision 1013)
+++ DamEngine/trunk/src/Deltares.DamEngine.Interface/FillXmlOutputFromDam.cs (.../FillXmlOutputFromDam.cs) (revision 1119)
@@ -19,7 +19,6 @@
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
-using System;
using Deltares.DamEngine.Data.General;
using Deltares.DamEngine.Io.XmlOutput;
@@ -61,88 +60,7 @@
output.Results.CalculationResults = new CalculationResults();
CreateDesignResultsOutput(damProjectData, output);
-
- // Calculation results (per location)
- // output.Results.CalculationResults.LocationResults = new CalculationResultsLocationResult[damProjectData.LocationJobs.Count];
- // var jobtel = 0;
- // foreach (var locationJob in damProjectData.LocationJobs)
- // {
- // var outputLocationResult = new CalculationResultsLocationResult();
- //
- // // Stability TimeSerie (later)
- //
- // // Piping TimeSerie (later)
- //
- // // RWScenarios results
- // outputLocationResult.RWScenariosResult = new CalculationResultsLocationResultRWScenariosResult();
- // outputLocationResult.RWScenariosResult.SafetyFactor = locationJob.LocationResult.RWScenariosResult.SafetyFactor;
- // outputLocationResult.RWScenariosResult.CalculationResult = locationJob.LocationResult.RWScenariosResult.CalculationResult;
- // outputLocationResult.RWScenariosResult.RWScenarioResult = new RWScenarioResult[locationJob.LocationResult.RWScenariosResult.RWScenarioResults.Count];
- // var scentel = 0;
- // foreach (var rwScenarioResult in locationJob.LocationResult.RWScenariosResult.RWScenarioResults)
- // {
- // var outputRwScenarioResult = new RWScenarioResult();
- // outputRwScenarioResult.LoadSituation = rwScenarioResult.LoadSituation;
- // outputRwScenarioResult.DikeDrySensitivity = rwScenarioResult.DikeDrySensitivity;
- // outputRwScenarioResult.HydraulicShortcutType = rwScenarioResult.HydraulicShortcutType;
- // outputRwScenarioResult.UpliftType = rwScenarioResult.UpliftType;
- // outputRwScenarioResult.ModelOption = rwScenarioResult.ModelOption;
- // outputRwScenarioResult.ScenarioType = rwScenarioResult.ScenarioType;
- // outputRwScenarioResult.CalculationResult = rwScenarioResult.CalculationResult;
- // outputRwScenarioResult.SafetyFactor = rwScenarioResult.SafetyFactor;
- // outputRwScenarioResult.RWScenarioProfileResults = new RWScenarioResultRWScenarioProfileResult[rwScenarioResult.RWScenarioProfileResults.Count];
- // var proftel = 0;
- // foreach (var profileResult in rwScenarioResult.RWScenarioProfileResults)
- // {
- // var outputProfileResult = new RWScenarioResultRWScenarioProfileResult();
- // outputProfileResult.LocationName = profileResult.LocationName;
- // outputProfileResult.LoadSituation = profileResult.LoadSituation;
- // outputProfileResult.DikeDrySensitivity = profileResult.DikeDrySensitivity;
- // outputProfileResult.HydraulicShortcutType = profileResult.HydraulicShortcutType;
- // outputProfileResult.UpliftType = profileResult.UpliftType;
- // outputProfileResult.MStabModelOption = profileResult.MstabModelOption;
- // outputProfileResult.PipingModelOption = profileResult.PipingModelOption;
- // outputProfileResult.ScenarioType = profileResult.ScenarioType;
- // outputProfileResult.SoilProfileName = profileResult.SoilProfileName;
- // outputProfileResult.SoilProfileProbability = profileResult.SoilProfileProbability;
- // //outputProfileResult.FailureMechanismType = profileResult.FailureMechanismType;
- // outputProfileResult.BaseFileName = profileResult.BaseFileName;
- // outputProfileResult.RWResult = new RWResult();
- // //outputProfileResult.RWResult.RWResultType = profileResult.RwResultType;
- // outputProfileResult.RWResult.SafetyFactor = profileResult.SafetyFactor;
- // outputProfileResult.RWResult.ProbabilityOfFailure = profileResult.ProbabilityOfFailure;
- // //outputProfileResult.RWResult.CalculationResult = profileResult.CalculationResult;
- // outputLocationResult.RWScenariosResult.RWScenarioResult[scentel].RWScenarioProfileResults[proftel] = outputProfileResult;
- // proftel++;
- // }
- // outputLocationResult.RWScenariosResult.RWScenarioResult[scentel] = outputRwScenarioResult;
- // scentel++;
- //
- // // RWSchematizationFactors Result
- // outputLocationResult.RWSchematizationFactorsResult = new CalculationResultsLocationResultRWSchematizationFactorsResult();
- // outputLocationResult.RWSchematizationFactorsResult.RWSchematizationFactorResult = new CalculationResultsLocationResultRWSchematizationFactorsResultRWSchematizationFactorResult[damProjectData.SchematizationFactors.Count];
- // var factortel = 0;
- // foreach (var rwSchematizationFactorResult in damProjectData.SchematizationFactors)
- // {
- // var factorResult = new CalculationResultsLocationResultRWSchematizationFactorsResultRWSchematizationFactorResult();
- // factorResult.LocationName = rwSchematizationFactorResult.LocationName;
- // //factorResult.SchematizationType = rwSchematizationFactorResult.SchematizationType;
- // factorResult.SoilProfileName = rwSchematizationFactorResult.SoilProfileName;
- // factorResult.OriginalDecisiveSoilProfileName = rwSchematizationFactorResult.OriginalDecisiveSoilProfileName;
- // factorResult.SchematizationFactor = rwSchematizationFactorResult.SchematizationFactor;
- // factorResult.SummedProfileProbability = rwSchematizationFactorResult.SummedProfileProbability;
- // //factorResult.DecisiveScenarioName = rwSchematizationFactorResult.DecisiveScenarioName;
- // factorResult.DetrimentFactor = rwSchematizationFactorResult.DetrimentFactor;
- // factorResult.SafetyFactor = rwSchematizationFactorResult.SafetyFactor;
- // //factorResult.CalculationResult = rwSchematizationFactorResult.CalculationResult;
- // outputLocationResult.RWSchematizationFactorsResult.RWSchematizationFactorResult[factortel] = factorResult;
- // factortel++;
- // }
- //
- // }
- // output.Results.CalculationResults.LocationResults[jobtel] = outputLocationResult;
- // jobtel++;
- // }
+ CreateLocationResultsOutput(damProjectData, output);
return output;
}
@@ -335,5 +253,91 @@
desResult.StabilityDesignResults.NumberOfIterationsSpecified = designResult.StabilityDesignResults.NumberOfIterations.HasValue;
if (designResult.StabilityDesignResults.NumberOfIterations.HasValue) desResult.StabilityDesignResults.NumberOfIterations = designResult.StabilityDesignResults.NumberOfIterations.Value;
}
+
+ private static void CreateLocationResultsOutput(DamProjectData damProjectData, Output output)
+ {
+ // Calculation results (per location)
+ output.Results.CalculationResults.LocationResults = new CalculationResultsLocationResult[damProjectData.LocationJobs.Count];
+ var jobtel = 0;
+ foreach (var locationJob in damProjectData.LocationJobs)
+ {
+ var outputLocationResult = new CalculationResultsLocationResult();
+
+ // Stability TimeSerie (later)
+
+ // Piping TimeSerie (later)
+
+ // RegionalScenarios results
+ outputLocationResult.RegionalScenariosResult = new CalculationResultsLocationResultRegionalScenariosResult();
+ outputLocationResult.RegionalScenariosResult.SafetyFactor = locationJob.LocationResult.RegionalScenariosResult.SafetyFactor;
+ outputLocationResult.RegionalScenariosResult.CalculationResult = ConversionHelper.ConvertToOutputCalculationResult(locationJob.LocationResult.RegionalScenariosResult.CalculationResult);
+ outputLocationResult.RegionalScenariosResult.RegionalScenarioResult = new RegionalScenarioResult[locationJob.LocationResult.RegionalScenariosResult.RegionalScenarioResults.Count];
+ var scentel = 0;
+ foreach (var rwScenarioResult in locationJob.LocationResult.RegionalScenariosResult.RegionalScenarioResults)
+ {
+ var outputRwScenarioResult = new RegionalScenarioResult();
+ outputRwScenarioResult.LoadSituation = ConversionHelper.ConvertToOutputLoadSituation(rwScenarioResult.LoadSituation);
+ outputRwScenarioResult.DikeDrySensitivity = ConversionHelper.ConvertToOutputDikeDrySensitivity(rwScenarioResult.DikeDrySensitivity);
+ outputRwScenarioResult.HydraulicShortcutType = ConversionHelper.ConvertToOutputHydraulicShortcutType(rwScenarioResult.HydraulicShortcutType);
+ outputRwScenarioResult.UpliftType = ConversionHelper.ConvertToOutputUpliftType(rwScenarioResult.UpliftType);
+ outputRwScenarioResult.ModelOption = ConversionHelper.ConvertToOutputMStabModelType(rwScenarioResult.ModelOption);
+ outputRwScenarioResult.ScenarioType = ConversionHelper.ConvertToOutputScenarioType(rwScenarioResult.ScenarioType);
+ outputRwScenarioResult.CalculationResult = ConversionHelper.ConvertToOutputCalculationResult(rwScenarioResult.CalculationResult);
+ outputRwScenarioResult.SafetyFactor = rwScenarioResult.SafetyFactor;
+ outputRwScenarioResult.RegionalScenarioProfileResults = new RegionalScenarioResultRegionalScenarioProfileResult[rwScenarioResult.RegionalScenarioProfileResults.Count];
+ var proftel = 0;
+ foreach (var profileResult in rwScenarioResult.RegionalScenarioProfileResults)
+ {
+ var outputProfileResult = new RegionalScenarioResultRegionalScenarioProfileResult();
+ outputProfileResult.LocationName = profileResult.LocationName;
+ outputProfileResult.LoadSituation = ConversionHelper.ConvertToOutputLoadSituation(profileResult.LoadSituation);
+ outputProfileResult.DikeDrySensitivity = ConversionHelper.ConvertToOutputDikeDrySensitivity(profileResult.DikeDrySensitivity);
+ outputProfileResult.HydraulicShortcutType = ConversionHelper.ConvertToOutputHydraulicShortcutType(profileResult.HydraulicShortcutType);
+ outputProfileResult.UpliftType = ConversionHelper.ConvertToOutputUpliftType(profileResult.UpliftType);
+ outputProfileResult.MStabModelOption = ConversionHelper.ConvertToOutputMStabModelType(profileResult.MstabModelOption);
+ outputProfileResult.PipingModelOption = ConversionHelper.ConvertToOutputPipingModelType(profileResult.PipingModelOption);
+ outputProfileResult.ScenarioType = ConversionHelper.ConvertToOutputScenarioType(profileResult.ScenarioType);
+ outputProfileResult.SoilProfileName = profileResult.SoilProfileName;
+ outputProfileResult.SoilProfileProbability = profileResult.SoilProfileProbability;
+ outputProfileResult.FailureMechanismType = ConversionHelper.ConvertToInputFailureMechanismSystemType(profileResult.FailureMechanismType);
+ outputProfileResult.BaseFileName = profileResult.BaseFileName;
+ outputProfileResult.RegionalResult = new RegionalResult();
+ outputProfileResult.RegionalResult.RegionalResultType = ConversionHelper.ConvertToOutputRegionalResultType(profileResult.RegionalResultType);
+ outputProfileResult.RegionalResult.SafetyFactor = profileResult.SafetyFactor;
+ outputProfileResult.RegionalResult.ProbabilityOfFailure = profileResult.ProbabilityOfFailure;
+ outputProfileResult.RegionalResult.CalculationResult = ConversionHelper.ConvertToOutputCalculationResult(profileResult.CalculationResult);
+ outputLocationResult.RegionalScenariosResult.RegionalScenarioResult[scentel].RegionalScenarioProfileResults[proftel] = outputProfileResult;
+ proftel++;
+ }
+ outputLocationResult.RegionalScenariosResult.RegionalScenarioResult[scentel] = outputRwScenarioResult;
+ scentel++;
+
+ // RWSchematizationFactors Result later
+ // Note that xsd should be adapted first: the types should be stored as int, not as string! This to be able to reuse the converters
+// outputLocationResult.RegionalSchematizationFactorsResult = new CalculationResultsLocationResultRegionalSchematizationFactorsResult();
+// outputLocationResult.RegionalSchematizationFactorsResult.RegionalSchematizationFactorResult = new CalculationResultsLocationResultRegionalSchematizationFactorsResultRegionalSchematizationFactorResult[damProjectData.SchematizationFactors.Count];
+// var factortel = 0;
+// foreach (var rwSchematizationFactorResult in damProjectData.SchematizationFactors)
+// {
+// var factorResult = new CalculationResultsLocationResultRegionalSchematizationFactorsResultRegionalSchematizationFactorResult();
+// factorResult.LocationName = rwSchematizationFactorResult.LocationName;
+// factorResult.SchematizationType = rwSchematizationFactorResult.SchematizationType;
+// factorResult.SoilProfileName = rwSchematizationFactorResult.SoilProfileName;
+// factorResult.OriginalDecisiveSoilProfileName = rwSchematizationFactorResult.OriginalDecisiveSoilProfileName;
+// factorResult.SchematizationFactor = rwSchematizationFactorResult.SchematizationFactor;
+// factorResult.SummedProfileProbability = rwSchematizationFactorResult.SummedProfileProbability;
+// factorResult.DecisiveRegionalScenarioName = rwSchematizationFactorResult.DecisiveScenarioName;
+// factorResult.DetrimentFactor = rwSchematizationFactorResult.DetrimentFactor;
+// factorResult.SafetyFactor = rwSchematizationFactorResult.SafetyFactor;
+// factorResult.CalculationResult = ConversionHelper.ConvertToOutputCalculationResult(rwSchematizationFactorResult.CalculationResult);
+// outputLocationResult.RegionalSchematizationFactorsResult.RegionalSchematizationFactorResult[factortel] = factorResult;
+// factortel++;
+// }
+
+ }
+ output.Results.CalculationResults.LocationResults[jobtel] = outputLocationResult;
+ jobtel++;
+ }
+ }
}
}
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesAssessmentRegional/RegionalScenariosCalculation.cs
===================================================================
diff -u -r1117 -r1119
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesAssessmentRegional/RegionalScenariosCalculation.cs (.../RegionalScenariosCalculation.cs) (revision 1117)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/DikesAssessmentRegional/RegionalScenariosCalculation.cs (.../RegionalScenariosCalculation.cs) (revision 1119)
@@ -22,14 +22,21 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
+using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
+using Deltares.DamEngine.Calculators.KernelWrappers.Common;
+using Deltares.DamEngine.Calculators.KernelWrappers.Interfaces;
+using Deltares.DamEngine.Calculators.Properties;
using Deltares.DamEngine.Data.General;
+using Deltares.DamEngine.Data.General.Results;
using Deltares.DamEngine.Data.Geotechnics;
using Deltares.DamEngine.Data.RegionalAssessmentResults;
using Deltares.DamEngine.Data.Standard.Calculation;
using Deltares.DamEngine.Data.Standard.Language;
using Deltares.DamEngine.Data.Standard.Logging;
+using Deltares.DamPiping.BlighCalculator;
+using Deltares.DamPiping.Sellmeijer4ForcesCalculator;
namespace Deltares.DamEngine.Calculators.DikesAssessmentRegional
{
@@ -42,27 +49,153 @@
public RegionalScenariosCalculationException(string message) : base(message) { }
}
+ ///
+ /// Class to perform the calculation of reginal scenarios
+ ///
+ ///
public class RegionalScenariosCalculation : ICalculation
{
+ private DamProjectData damProjectData;
+
+ public List Execute(DamProjectData aDamProjectData)
+ {
+ damProjectData = aDamProjectData;
+ maxCalculationCores = damProjectData.MaxCalculationCores;
+ var dj = damProjectData.DikeJob;
+ evaluationJob = damProjectData.GetEvaluationJob();
+ //evaluationJob.Locations.AddRange();
+ Run();
+ return new List();
+ }
+
+ private IKernelWrapper CreateKernelWrapperforJob(DamFailureMechanismeCalculationSpecification currentSpecification,
+ Location location, SoilGeometryProbability soilGeometryProbability, out IKernelDataInput kernelDataInput,
+ out IKernelDataOutput kernelDataOutput)
+ {
+ IKernelWrapper kernelWrapper = KernelWrapperHelper.CreateKernelWrapper(currentSpecification);
+
+ if (kernelWrapper == null)
+ {
+ throw new NotImplementedException(Resources.DesignCalculatorKernelNotImplemented);
+ }
+
+ //damProjectData.DesignCalculations = new List();
+ var calculationMessages = new List();
+ // Prepare input
+ var damKernelInput = new DamKernelInput();
+ var projectPath = damProjectData.ProjectPath != "" ? damProjectData.ProjectPath : Directory.GetCurrentDirectory();
+ damKernelInput.ProjectDir = projectPath;
+ damKernelInput.CalculationDir = Path.Combine(projectPath, damProjectData.CalculationMap);
+ damKernelInput.Location = location;
+ damKernelInput.SubSoilScenario = soilGeometryProbability;
+ //damKernelInput.DesignScenario = location.Scenarios[designScenarioIndex];
+ damKernelInput.DamFailureMechanismeCalculationSpecification = damProjectData.DamProjectCalculationSpecification.CurrentSpecification;
+ damKernelInput.RiverLevelHigh = damKernelInput.DesignScenario.RiverLevel;// #Bka hier geen Dscen
+ damKernelInput.RiverLevelLow = damKernelInput.DesignScenario.RiverLevelLow;// #Bka hier geen Dscen
+ AnalysisType analysisType = DamProjectCalculationSpecification.SelectedAnalysisType;
+ // SynchronizeDesignScenarioDataWithLocationData(damKernelInput.DesignScenario, damKernelInput.Location);
+ // IKernelDataInput kernelDataInput;
+ //IKernelDataOutput kernelDataOutput;
+ PrepareResult prepareResult = kernelWrapper.Prepare(damKernelInput, 0, out kernelDataInput, out kernelDataOutput);
+
+ // Sometimes the kernelDataInput is not created (p.e when soilprofileprobablility is meant for
+ // stability where Piping calc is wanted). In that case, do nothing but just skip.
+ if (prepareResult == PrepareResult.Successful)
+ {
+ // switch (analysisType)
+ // {
+ // case AnalysisType.AdaptGeometry:
+ // PerformDesignCalculation(kernelWrapper, kernelDataInput, kernelDataOutput,
+ // damKernelInput, calculationMessages, damProjectData.DesignCalculations);
+ // break;
+ // case AnalysisType.NoAdaption:
+ // PerformSingleCalculation(kernelWrapper, kernelDataInput, kernelDataOutput,
+ // damKernelInput, calculationMessages, damProjectData.DesignCalculations);
+ // break;
+ //
+ // }
+ }
+ else
+ {
+ if (prepareResult == PrepareResult.NotRelevant)
+ {
+ calculationMessages.Add(new LogMessage(LogMessageType.Info, null,
+ string.Format(Resources.DesignCalculatorIrrelevant,
+ location.Name,
+ soilGeometryProbability.ToString(),
+ damKernelInput.DesignScenario.LocationScenarioID))); // #Bka hier geen Dscen
+ }
+ if (prepareResult == PrepareResult.Failed)
+ {
+ calculationMessages.Add(new LogMessage(LogMessageType.Error, null,
+ string.Format(Resources.DesignCalculatorPrepareError,
+ location.Name,
+ soilGeometryProbability.ToString(),
+ damKernelInput.DesignScenario.LocationScenarioID)));// #Bka hier geen Dscen
+ }
+ }
+ return kernelWrapper;//calculationMessages;
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
private EvaluationJob evaluationJob = null;
- private GetValuesDelegate getValuesDelegate = null;
- private ProgressDelegate progressDelegate = null;
- private SendMessageDelegate sendMessageDelegate = null;
+ private GetValuesDelegate getValuesDelegate;
+ private ProgressDelegate progressDelegate;
+ private SendMessageDelegate sendMessageDelegate;
private string mstabExePath = @".\DGeoStability.exe";
private int maxCalculationCores = 255;
private Dictionary runningJobs = new Dictionary();
private bool isSkipStabilityCalculation = false;
-
+
+ ///
+ /// Gets or sets the type of the piping model.
+ ///
+ ///
+ /// The type of the piping model.
+ ///
public PipingModelType PipingModelType { get; set; }
+
+ ///
+ /// Gets or sets the m stab parameters.
+ ///
+ ///
+ /// The m stab parameters.
+ ///
public MStabParameters MStabParameters { get; set; }
- public RegionalScenariosCalculation()
- {
- }
-
#region ICalculation Members
+ ///
+ /// Gets the results.
+ ///
+ /// The results.
+ ///
public CalculationResult GetResults(ref string results)
{
// try
@@ -78,6 +211,11 @@
return CalculationResult.UnexpectedError;
}
+ ///
+ /// Loads the specified input.
+ ///
+ /// The input.
+ ///
public CalculationResult Load(string input)
{
// try
@@ -93,48 +231,82 @@
return CalculationResult.UnexpectedError;
}
- public CalculationResult RegisterGetValues(GetValuesDelegate getValuesDelegate)
+ ///
+ /// Registers the get values.
+ ///
+ /// The get values delegate.
+ ///
+ public CalculationResult RegisterGetValues(GetValuesDelegate aGetValuesDelegate)
{
- this.getValuesDelegate = getValuesDelegate;
+ getValuesDelegate = aGetValuesDelegate;
return CalculationResult.Succeeded;
}
- public CalculationResult RegisterProgress(ProgressDelegate progressDelegate)
+ ///
+ /// Registers the progress.
+ ///
+ /// The progress delegate.
+ ///
+ public CalculationResult RegisterProgress(ProgressDelegate aProgressDelegate)
{
- this.progressDelegate = progressDelegate;
+ progressDelegate = aProgressDelegate;
return CalculationResult.Succeeded;
}
+ ///
+ /// Registers the send debug information.
+ ///
+ /// The send debug information delegate.
+ ///
public CalculationResult RegisterSendDebugInfo(SendDebugInfodelegate sendDebugInfoDelegate)
{
return CalculationResult.Succeeded;
}
- public CalculationResult RegisterSendMessage(SendMessageDelegate sendMessageDelegate)
+ ///
+ /// Registers the send message.
+ ///
+ /// The send message delegate.
+ ///
+ public CalculationResult RegisterSendMessage(SendMessageDelegate aSendMessageDelegate)
{
- this.sendMessageDelegate = sendMessageDelegate;
+ sendMessageDelegate = aSendMessageDelegate;
return CalculationResult.Succeeded;
}
+ ///
+ /// Registers the set values.
+ ///
+ /// The set values delegate.
+ ///
public CalculationResult RegisterSetValues(SetValuesDelegate setValuesDelegate)
{
return CalculationResult.Succeeded;
}
+ ///
+ /// Registers the user abort.
+ ///
+ /// The user abort delegate.
+ ///
public CalculationResult RegisterUserAbort(UserAbortDelegate userAbortDelegate)
{
return CalculationResult.Succeeded;
}
+ ///
+ /// Runs this instance.
+ ///
+ ///
public CalculationResult Run()
{
try
{
- List tasks = this.FillQueue();
+ List tasks = FillQueue();
- General.Parallel.Run(tasks, this.RunTask, this.progressDelegate, this.MaxCalculationCores);
- this.FillResults(tasks);
+ General.Parallel.Run(tasks, RunTask, progressDelegate, maxCalculationCores);
+ FillResults(tasks);
return CalculationResult.Succeeded;
}
@@ -145,50 +317,66 @@
}
}
+ ///
+ /// Validates this instance.
+ ///
+ ///
public CalculationResult Validate()
{
return CalculationResult.Succeeded;
}
#endregion
+ ///
+ /// Gets the version.
+ ///
+ ///
+ /// The version.
+ ///
public string Version
{
get { return System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); }
}
+ ///
+ /// Gets or sets the mstab executable path.
+ ///
+ ///
+ /// The mstab executable path.
+ ///
public string MStabExePath
{
get { return mstabExePath; }
set { mstabExePath = value; }
}
+ ///
+ /// Gets or sets a value indicating whether this instance is skip stability calculation.
+ ///
+ ///
+ /// true if this instance is skip stability calculation; otherwise, false.
+ ///
public bool IsSkipStabilityCalculation
{
get { return isSkipStabilityCalculation; }
set { isSkipStabilityCalculation = value; }
}
- public int MaxCalculationCores
- {
- get { return maxCalculationCores; }
- set { maxCalculationCores = value; }
- }
-
private List FillQueue()
{
List tasks = new List();
- this.evaluationJob.FailedEvaluatedLocations = new List();
- foreach (Location location in this.evaluationJob.Locations)
+ evaluationJob.FailedEvaluatedLocations = new List();
+ foreach (var location in evaluationJob.Locations)
{
if (location.Segment == null)
{
// Add this location to the failed locations
- if (this.evaluationJob.FailedEvaluatedLocations.IndexOf(location) < 0)
+ if (evaluationJob.FailedEvaluatedLocations.IndexOf(location) < 0)
{
- this.evaluationJob.FailedEvaluatedLocations.Add(location);
- var locationHasNoSegment = LocalizationManager.GetTranslatedText(this.GetType(), "LocationHasNoSegment");
+ evaluationJob.FailedEvaluatedLocations.Add(location);
+ var locationHasNoSegment = LocalizationManager.GetTranslatedText(GetType(), "LocationHasNoSegment");
sendMessageDelegate(new LogMessage(LogMessageType.Error, location, locationHasNoSegment));
}
}
@@ -202,10 +390,10 @@
FailureMechanismSystemType.StabilityInside)).ToList();
if (soilGeometryProbabilities.Count == 0)
{
- this.evaluationJob.FailedEvaluatedLocations.Add(location);
+ evaluationJob.FailedEvaluatedLocations.Add(location);
sendMessageDelegate(
- new LogMessage(LogMessageType.Warning, location, String.Format("Location has no soilprofiles: ") +
- String.Format("Segment: {0}", location.Segment.Name)));
+ new LogMessage(LogMessageType.Warning, location, string.Format("Location has no soilprofiles: ") +
+ string.Format("Segment: {0}", location.Segment.Name)));
}
else
@@ -214,26 +402,26 @@
{
if (soilGeometryProbability.SoilProfileType == SoilProfileType.ProfileType2D || soilGeometryProbability.SoilProfileType == SoilProfileType.ProfileTypeStiFile)
{
- this.evaluationJob.FailedEvaluatedLocations.Add(location);
+ evaluationJob.FailedEvaluatedLocations.Add(location);
sendMessageDelegate(new LogMessage(LogMessageType.Warning, location, LocalizationManager.GetTranslatedText(this, "Geometry2DNotSupportedInRegionalAssessment") +
- String.Format("Segment: {0}", location.Segment.Name)));
+ string.Format("Segment: {0}", location.Segment.Name)));
}
else
{
SoilProfile soilProfile = soilGeometryProbability.SoilProfile1D;
- IList rwScenarios = null;
+ IList rwScenarios;
try
{
- rwScenarios = this.GetRWScenarios(location, soilGeometryProbability);
+ rwScenarios = GetRegionalScenarios(location, soilGeometryProbability);
}
catch (Exception e)
{
rwScenarios = null;
// Add this location to the failed locations
- if (this.evaluationJob.FailedEvaluatedLocations.IndexOf(location) < 0)
+ if (evaluationJob.FailedEvaluatedLocations.IndexOf(location) < 0)
{
- this.evaluationJob.FailedEvaluatedLocations.Add(location);
+ evaluationJob.FailedEvaluatedLocations.Add(location);
sendMessageDelegate(
new LogMessage(LogMessageType.Warning, location, String.Format("Cannot generate scenarios: {0}", e.Message) +
String.Format("Soilprofile: {0}", soilProfile.Name)));
@@ -255,11 +443,13 @@
return tasks;
}
- private IList GetRWScenarios(Location location, SoilGeometryProbability soilGeometryProbability)
+ private IList GetRegionalScenarios(Location location, SoilGeometryProbability soilGeometryProbability)
{
- RegionalScenarioSelector selector = new RegionalScenarioSelector();
- selector.PipingModelType = PipingModelType;
- selector.MStabParameters = MStabParameters;
+ RegionalScenarioSelector selector = new RegionalScenarioSelector
+ {
+ PipingModelType = PipingModelType,
+ MStabParameters = MStabParameters
+ };
return selector.GetScenarios(location, soilGeometryProbability);
}
@@ -311,8 +501,8 @@
///
private void ProcessJobPiping(RegionalScenarioProfileResult job)
{
-// if (job.Location.ModelFactors.UpliftCriterionPiping.HasValue)
-// {
+ if (job.Location.ModelFactors.UpliftCriterionPiping.HasValue)
+ {
// var modelParametersForPLLines = new ModelParametersForPlLines();
// var calculator = GetCalculatorForPipingModel(job, modelParametersForPLLines);
// double waterLevel;
@@ -327,9 +517,9 @@
// }
// //job.SoilGeometryProbability.SoilProfile1D.EnsureUniqueLayerIds();
// var calculationName = GetCalculationNameForPipingCalculator(job);
-// calculator.FilenameCalculation = Path.Combine(Path.Combine(DamProjectData.ProjectWorkingPath, job.FailureMechanismType.ToString()), calculationName);
+// calculator.FilenameCalculation = Path.Combine(Path.Combine(damProjectData.ProjectPath, job.FailureMechanismType.ToString()), calculationName);
// calculator.IsHydraulicShortcut = (job.HydraulicShortcutType == HydraulicShortcutType.HydraulicShortcut);
-// double? pipingFactor = calculator.CalculatePipingFactor(job.Location, job.Location.LocalXZSurfaceLine2, job.SoilGeometryProbability.SoilProfile1D, waterLevel);
+// double? pipingFactor = calculator.CalculatePipingFactor(job.Location, job.Location.SurfaceLine, job.SoilGeometryProbability.SoilProfile1D, waterLevel);
// job.BaseFileName = calculator.FilenameCalculation;
//
// job.RegionalResultType = RegionalResultType.SafetyFactor;
@@ -346,11 +536,11 @@
// job.SafetyFactor = double.NaN;
// job.CalculationResult = CalculationResult.RunFailed;
// }
-// }
-// else
-// {
-// throw new RegionalScenariosCalculationException(String.Format("Uplift criterion not defined for location {0}", job.Location.Name));
-// } //##Bka
+ }
+ else
+ {
+ throw new RegionalScenariosCalculationException(String.Format("Uplift criterion not defined for location {0}", job.Location.Name));
+ }
}
@@ -380,17 +570,14 @@
///
///
/// proper piping calculator
-// private PipingCalculator GetCalculatorForPipingModel(RWScenarioProfileResult job, ModelParametersForPlLines modelParametersForPLLines)
+// private PipingCalculator GetCalculatorForPipingModel(RegionalScenarioProfileResult job, ModelParametersForPLLines modelParametersForPlLines)
// {
// PipingCalculator calculator;
// switch (job.PipingModelOption)
// {
// case PipingModelType.SellmeijerVnk: calculator = new PipingCalculatorSellmeijer(modelParametersForPLLines,
// 1.0, null, null, null, job.Location.ModelFactors.UpliftCriterionPiping.Value);
// break;
-// case PipingModelType.Sellmeijer2Forces: calculator = new PipingCalculatorSellmeijer2Forces(modelParametersForPLLines,
-// 1.0, null, null, job.Location.ModelFactors.UpliftCriterionPiping.Value);
-// break;
// case PipingModelType.Sellmeijer4Forces: calculator = new PipingCalculatorSellmeijer4Forces(modelParametersForPLLines,
// 1.0, null, null, job.Location.ModelFactors.UpliftCriterionPiping.Value);
// break;
@@ -409,52 +596,65 @@
///
private void ProcessJobStability(RegionalScenarioProfileResult job)
{
+
// StabilityCalculation calculator = new StabilityCalculation();
+ var currentSpecification = damProjectData.DamProjectCalculationSpecification.CurrentSpecification;
+ currentSpecification.FailureMechanismSystemType = job.FailureMechanismType;
+ IKernelDataInput kernelDataInput;
+ IKernelDataOutput kernelDataOutput;
+ var calculator = CreateKernelWrapperforJob(currentSpecification, job.Location, job.SoilGeometryProbability,
+ out kernelDataInput, out kernelDataOutput);
+ lock (runningJobs)
+ {
+ runningJobs[calculator] = job;
+ }
-// lock (runningJobs)
-// {
-// runningJobs[calculator] = job;
-// }
-
// calculator.MStabExePath = this.MStabExePath;
// calculator.RegisterSendMessage(this.SendStabilityMessage);
//
-// string soilDatabaseName = job.Location.StabilityOptions.SoilDatabaseName;
- // DamFailureMechanismeCalculationSpecification damCalculation =
- // calculator.GetSpecification(this.evaluationJob.DikeName, soilDatabaseName, job.Location, new SoilGeometry(job.SoilGeometryProbability.SoilProfile1D, null),
- // (MStabModelType)job.MstabModelOption, job.LoadSituation, job.DikeDrySensitivity, job.HydraulicShortcutType, MStabParameters);
+// string soilDatabaseName = job.Location.StabilityOptions.SoilDatabaseName;
+// DamFailureMechanismeCalculationSpecification damCalculation =
+// calculator.GetSpecification(this.evaluationJob.DikeName, soilDatabaseName, job.Location, new SoilGeometry(job.SoilGeometryProbability.SoilProfile1D, null),
+// (MStabModelType)job.MstabModelOption, job.LoadSituation, job.DikeDrySensitivity, job.HydraulicShortcutType, MStabParameters);
//
// calculator.SaveToFile(damCalculation.FailureMechanismParametersMStab);
// string inputFile = damCalculation.FailureMechanismParametersMStab.MStabParameters.ProjectFileName;
//
// job.BaseFileName = inputFile.Replace(DamProject.ProjectWorkingPath, @"").Replace(".sti", "");
// calculator.Load(inputFile);
-// job.CalculationResult = calculator.Run();
+ List messages;
+ calculator.Execute(kernelDataInput, kernelDataOutput, out messages);
+ job.CalculationResult = CalculationResult.Succeeded; //Run();
if (job.CalculationResult == CalculationResult.Succeeded)
{
- string results = "";
-
-// job.CalculationResult = calculator.GetResults(ref results);
- //XmlDeserializer deserializer = new XmlDeserializer();
+ string resultMessage = "";
+ List results;
+ var input = (DamKernelInput) kernelDataInput;
+ calculator.PostProcess(input, kernelDataOutput, resultMessage, out results);
+ //string results = "";
+ job.SafetyFactor = results[0].SafetyFactor.Value;
+ job.CalculationResult = results[0].CalculationResult;
+ job.RegionalResultType = RegionalResultType.SafetyFactor;
+//XmlDeserializer deserializer = new XmlDeserializer();
// RegionalResult result = (RegionalResult)deserializer.XmlDeserializeFromString(results, typeof(RegionalResult));
-// job.SafetyFactor = result.SafetyFactor;
-// job.ProbabilityOfFailure = result.ProbabilityOfFailure;
-// job.RegionalResultType = result.RegionalResultType;
-// job.CalculationResult = result.CalculationResult;
+ // job.SafetyFactor = result.SafetyFactor;
+ // job.ProbabilityOfFailure = result.ProbabilityOfFailure;
+ // job.RegionalResultType = result.RegionalResultType;
+ // job.CalculationResult = result.CalculationResult;
}
else
{
-// job.RegionalResultType = (damCalculation.FailureMechanismParametersMStab.MStabParameters.IsProbabilistic ? RegionalResultType.ProbabilityOfFailure : RegionalResultType.SafetyFactor);
+ job.RegionalResultType = (currentSpecification.FailureMechanismParametersMStab.MStabParameters.IsProbabilistic ? RegionalResultType.ProbabilityOfFailure : RegionalResultType.SafetyFactor);
job.SafetyFactor = double.NaN;
job.ProbabilityOfFailure = double.NaN;
}
lock (runningJobs)
{
-// runningJobs.Remove(calculator);
+ runningJobs.Remove(calculator);
}
}
@@ -535,7 +735,7 @@
}
// scenariosResult are the results of all scenarios for one location.
- this.evaluationJob.Results.Add(scenariosResult);
+ evaluationJob.Results.Add(scenariosResult);
}
catch (Exception e)
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/RegionalAssessment/RegionalScenariosCalculationTests.cs
===================================================================
diff -u
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/RegionalAssessment/RegionalScenariosCalculationTests.cs (revision 0)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/RegionalAssessment/RegionalScenariosCalculationTests.cs (revision 1119)
@@ -0,0 +1,81 @@
+// Copyright (C) Stichting Deltares 2018. All rights reserved.
+//
+// This file is part of the Dam Engine.
+//
+// The Dam Engine is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+//
+// All names, logos, and references to "Deltares" are registered trademarks of
+// Stichting Deltares and remain full property of Stichting Deltares at all times.
+// All rights reserved.
+
+using System.IO;
+using Deltares.DamEngine.Interface;
+using Deltares.DamEngine.Io;
+using NUnit.Framework;
+
+namespace Deltares.DamEngine.Calculators.Tests.RegionalAssessment
+{
+ [TestFixture]
+ public class RegionalScenariosCalculationTests
+ {
+ private const double tolerance = 0.0005;
+
+ [Test, Category("Work_In_Progress")]
+ public void Test()
+ {
+ const string calcDir = "TestOutStabBishop";
+ if (Directory.Exists(calcDir))
+ {
+ Directory.Delete(calcDir, true); // delete previous results
+ }
+
+ Directory.CreateDirectory(calcDir);
+
+
+ const string fileName = @"TestFiles\RegionalAssessment.xml";
+ string inputString = File.ReadAllText(fileName);
+ inputString = ChangeValueInXml(inputString, "ProjectPath", ""); // Current directory will be used
+ inputString = ChangeValueInXml(inputString, "CalculationMap", calcDir); // Current directory will be used
+ inputString = ChangeValueInXml(inputString, "MapForSoilgeometries2D", @"TestFiles\DAM Tutorial Design.geometries2D.0\");
+ inputString = ChangeValueInXml(inputString, "SoilDatabaseName", @"TestFiles\DAM Tutorial Design0.soilmaterials.mdb");
+ var engineInterface = new EngineInterface(inputString);
+ Assert.IsNotNull(engineInterface.DamProjectData);
+
+ string outputString = engineInterface.Run();
+
+ Assert.IsNotNull(outputString);
+ var output = DamXmlSerialization.LoadOutputFromXmlString(outputString);
+ Assert.AreEqual(1.282, output.Results.CalculationResults.LocationResults[0].RegionalScenariosResult.SafetyFactor, tolerance);
+ // Zone1SafetyFactor=1.282
+ }
+
+ public string ChangeValueInXml(string input, string key, string value)
+ {
+ string result = input;
+ string searchString = key + "=\"";
+ var startIndex = input.IndexOf(searchString);
+ var length = searchString.Length;
+ if (startIndex != -1)
+ {
+ // find next double quote
+ var endIndex = input.Substring(startIndex + length).IndexOf("\"");
+ string dirString = input.Substring(startIndex + length, endIndex);
+ string pattern = searchString + dirString;
+ string replacement = searchString + value;
+ result = input.Replace(pattern, replacement);
+ }
+ return result;
+ }
+ }
+}
Index: DamEngine/trunk/src/Deltares.DamEngine.Interface/EngineInterface.cs
===================================================================
diff -u -r971 -r1119
--- DamEngine/trunk/src/Deltares.DamEngine.Interface/EngineInterface.cs (.../EngineInterface.cs) (revision 971)
+++ DamEngine/trunk/src/Deltares.DamEngine.Interface/EngineInterface.cs (.../EngineInterface.cs) (revision 1119)
@@ -21,6 +21,7 @@
using System;
using System.Collections.Generic;
+using Deltares.DamEngine.Calculators.DikesAssessmentRegional;
using Deltares.DamEngine.Calculators.DikesDesign;
using Deltares.DamEngine.Data.General;
using Deltares.DamEngine.Data.Standard;
@@ -166,6 +167,9 @@
{
case DamProjectType.Assessment:
case DamProjectType.AssessmentRegional:
+ var regionalScenariosCalculator = new RegionalScenariosCalculation();
+ calculationMessages = regionalScenariosCalculator.Execute(DamProjectData);
+ break;
case DamProjectType.Operational:
throw new NotImplementedException();
case DamProjectType.Design:
Index: DamEngine/trunk/src/Deltares.DamEngine.Data/General/DamProjectData.cs
===================================================================
diff -u -r1113 -r1119
--- DamEngine/trunk/src/Deltares.DamEngine.Data/General/DamProjectData.cs (.../DamProjectData.cs) (revision 1113)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/General/DamProjectData.cs (.../DamProjectData.cs) (revision 1119)
@@ -345,6 +345,10 @@
}
return jobs;
}
+ set
+ {
+ jobs = value;
+ }
}
public LocationJob GetFirstLocationJobWithDesignResults()
@@ -375,7 +379,7 @@
{
foreach (LocationJob locationJob in this.LocationJobs)
{
- if (locationJob.HasLocationResults)
+ if (locationJob.HasTimeSeriesLocationResults)
{
return locationJob;
}
Index: DamEngine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlOutput.cs
===================================================================
diff -u -r1013 -r1119
--- DamEngine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlOutput.cs (.../FillDamFromXmlOutput.cs) (revision 1013)
+++ DamEngine/trunk/src/Deltares.DamEngine.Interface/FillDamFromXmlOutput.cs (.../FillDamFromXmlOutput.cs) (revision 1119)
@@ -23,8 +23,11 @@
using Deltares.DamEngine.Data.General;
using Deltares.DamEngine.Data.Geometry;
using Deltares.DamEngine.Data.Geotechnics;
+using Deltares.DamEngine.Data.RegionalAssessmentResults;
using Deltares.DamEngine.Data.Standard.Logging;
using Deltares.DamEngine.Io.XmlOutput;
+using RegionalResult = Deltares.DamEngine.Io.XmlOutput.RegionalResult;
+using RegionalScenarioResult = Deltares.DamEngine.Io.XmlOutput.RegionalScenarioResult;
namespace Deltares.DamEngine.Interface
{
@@ -41,9 +44,16 @@
public static DamProjectData CreateDamProjectData(Output output)
{
var damProjectData = new DamProjectData();
- if (output != null && output.Results != null && output.Results.CalculationResults != null && output.Results.CalculationResults.DesignResults != null)
+ if (output != null && output.Results != null && output.Results.CalculationResults != null)
{
- CreateDesignResultsOutput(output, damProjectData);
+ if (output.Results.CalculationResults.DesignResults != null)
+ {
+ CreateDesignResultsOutput(output, damProjectData);
+ }
+ if (output.Results.CalculationResults.LocationResults != null)
+ {
+ CreateLocationResultsOutput(output, damProjectData);
+ }
}
return damProjectData;
}
@@ -212,5 +222,69 @@
desResult.StabilityDesignResults.UpliftSituation = situation;
}
}
+
+ private static void CreateLocationResultsOutput(Output output, DamProjectData damProjectData)
+ {
+ // Calculation results (per location)
+ damProjectData.LocationJobs = new List();
+ var jobtel = 0;
+// foreach (var outputLocationResult in output.Results.CalculationResults.LocationResults)
+// {
+// var locationJob = new LocationJob("hh");
+// // Stability TimeSerie (later)
+//
+// // Piping TimeSerie (later)
+//
+// // RegionalScenarios results
+// outputLocationResult.RegionalScenariosResult = new CalculationResultsLocationResultRegionalScenariosResult();
+// outputLocationResult.RegionalScenariosResult.SafetyFactor = locationJob.LocationResult.RegionalScenariosResult.SafetyFactor;
+// outputLocationResult.RegionalScenariosResult.CalculationResult = ConversionHelper.ConvertToOutputCalculationResult(locationJob.LocationResult.RegionalScenariosResult.CalculationResult);
+// outputLocationResult.RegionalScenariosResult.RegionalScenarioResult = new RegionalScenarioResult[locationJob.LocationResult.RegionalScenariosResult.RegionalScenarioResults.Count];
+// var scentel = 0;
+// foreach (var rwScenarioResult in locationJob.LocationResult.RegionalScenariosResult.RegionalScenarioResults)
+// {
+// var outputRwScenarioResult = new RegionalScenarioResult();
+// outputRwScenarioResult.LoadSituation = ConversionHelper.ConvertToOutputLoadSituation(rwScenarioResult.LoadSituation);
+// outputRwScenarioResult.DikeDrySensitivity = ConversionHelper.ConvertToOutputDikeDrySensitivity(rwScenarioResult.DikeDrySensitivity);
+// outputRwScenarioResult.HydraulicShortcutType = ConversionHelper.ConvertToOutputHydraulicShortcutType(rwScenarioResult.HydraulicShortcutType);
+// outputRwScenarioResult.UpliftType = ConversionHelper.ConvertToOutputUpliftType(rwScenarioResult.UpliftType);
+// outputRwScenarioResult.ModelOption = ConversionHelper.ConvertToOutputMStabModelType(rwScenarioResult.ModelOption);
+// outputRwScenarioResult.ScenarioType = ConversionHelper.ConvertToOutputScenarioType(rwScenarioResult.ScenarioType);
+// outputRwScenarioResult.CalculationResult = ConversionHelper.ConvertToOutputCalculationResult(rwScenarioResult.CalculationResult);
+// outputRwScenarioResult.SafetyFactor = rwScenarioResult.SafetyFactor;
+// outputRwScenarioResult.RegionalScenarioProfileResults = new RegionalScenarioResultRegionalScenarioProfileResult[rwScenarioResult.RegionalScenarioProfileResults.Count];
+// var proftel = 0;
+// foreach (var profileResult in rwScenarioResult.RegionalScenarioProfileResults)
+// {
+// var outputProfileResult = new RegionalScenarioResultRegionalScenarioProfileResult();
+// outputProfileResult.LocationName = profileResult.LocationName;
+// outputProfileResult.LoadSituation = ConversionHelper.ConvertToOutputLoadSituation(profileResult.LoadSituation);
+// outputProfileResult.DikeDrySensitivity = ConversionHelper.ConvertToOutputDikeDrySensitivity(profileResult.DikeDrySensitivity);
+// outputProfileResult.HydraulicShortcutType = ConversionHelper.ConvertToOutputHydraulicShortcutType(profileResult.HydraulicShortcutType);
+// outputProfileResult.UpliftType = ConversionHelper.ConvertToOutputUpliftType(profileResult.UpliftType);
+// outputProfileResult.MStabModelOption = ConversionHelper.ConvertToOutputMStabModelType(profileResult.MstabModelOption);
+// outputProfileResult.PipingModelOption = ConversionHelper.ConvertToOutputPipingModelType(profileResult.PipingModelOption);
+// outputProfileResult.ScenarioType = ConversionHelper.ConvertToOutputScenarioType(profileResult.ScenarioType);
+// outputProfileResult.SoilProfileName = profileResult.SoilProfileName;
+// outputProfileResult.SoilProfileProbability = profileResult.SoilProfileProbability;
+// outputProfileResult.FailureMechanismType = ConversionHelper.ConvertToInputFailureMechanismSystemType(profileResult.FailureMechanismType);
+// outputProfileResult.BaseFileName = profileResult.BaseFileName;
+// outputProfileResult.RegionalResult = new RegionalResult();
+// outputProfileResult.RegionalResult.RegionalResultType = ConversionHelper.ConvertToOutputRegionalResultType(profileResult.RegionalResultType);
+// outputProfileResult.RegionalResult.SafetyFactor = profileResult.SafetyFactor;
+// outputProfileResult.RegionalResult.ProbabilityOfFailure = profileResult.ProbabilityOfFailure;
+// outputProfileResult.RegionalResult.CalculationResult = ConversionHelper.ConvertToOutputCalculationResult(profileResult.CalculationResult);
+// outputLocationResult.RegionalScenariosResult.RegionalScenarioResult[scentel].RegionalScenarioProfileResults[proftel] = outputProfileResult;
+// proftel++;
+// }
+// outputLocationResult.RegionalScenariosResult.RegionalScenarioResult[scentel] = outputRwScenarioResult;
+// scentel++;
+//
+// // RWSchematizationFactors Result later
+// }
+// output.Results.CalculationResults.LocationResults[jobtel] = outputLocationResult;
+// jobtel++;
+// }
+ }
}
}
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Interfaces/IKernelWrapper.cs
===================================================================
diff -u -r1040 -r1119
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Interfaces/IKernelWrapper.cs (.../IKernelWrapper.cs) (revision 1040)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators/KernelWrappers/Interfaces/IKernelWrapper.cs (.../IKernelWrapper.cs) (revision 1119)
@@ -25,6 +25,7 @@
using Deltares.DamEngine.Data.General.Results;
using Deltares.DamEngine.Data.Geometry;
using Deltares.DamEngine.Data.Geotechnics;
+using Deltares.DamEngine.Data.Standard.Calculation;
using Deltares.DamEngine.Data.Standard.Logging;
namespace Deltares.DamEngine.Calculators.KernelWrappers.Interfaces
@@ -44,7 +45,7 @@
///
/// Interface to implement external failure mechanisms
///
- public interface IKernelWrapper
+ public interface IKernelWrapper : ICalculation
{
///
/// Prepares the failure mechanism input based on general dam kernel input.
Index: DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Deltares.DamEngine.Calculators.Tests.csproj
===================================================================
diff -u -r1115 -r1119
--- DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Deltares.DamEngine.Calculators.Tests.csproj (.../Deltares.DamEngine.Calculators.Tests.csproj) (revision 1115)
+++ DamEngine/trunk/src/Deltares.DamEngine.Calculators.Tests/Deltares.DamEngine.Calculators.Tests.csproj (.../Deltares.DamEngine.Calculators.Tests.csproj) (revision 1119)
@@ -68,6 +68,7 @@
+
@@ -80,6 +81,14 @@
{B7A49C1A-1C91-4D72-ABA9-9FBAC2509D8E}
Deltares.DamEngine.Data
+
+ {750464A3-CBFA-429F-920E-B430867F1120}
+ Deltares.DamEngine.Interface
+
+
+ {1560A423-F338-4DEC-8583-1DFF7077F104}
+ Deltares.DamEngine.Io
+
{A41683F4-C3E0-4386-AEE7-FAACD535CF93}
Deltares.DamEngine.TestHelpers
@@ -127,7 +136,11 @@
PreserveNewest
+
+ PreserveNewest
+
+