/// <summary>
        /// Creates an instance of <see cref="OvertoppingRateCalculationInput"/> for calculation purposes.
        /// </summary>
        /// <param name="calculation">The calculation containing the input for the overtopping rate calculation.</param>
        /// <param name="generalInput">The general grass cover erosion inwards calculation input parameters.</param>
        /// <param name="hydraulicBoundaryDatabaseFilePath">The path which points to the hydraulic boundary database file.</param>
        /// <param name="usePreprocessor">Indicator whether to use the preprocessor in the calculation.</param>
        /// <returns>A new <see cref="OvertoppingRateCalculationInput"/> instance.</returns>
        /// <exception cref="ArgumentException">Thrown when the <paramref name="hydraulicBoundaryDatabaseFilePath"/>
        /// contains invalid characters.</exception>
        /// <exception cref="CriticalFileReadException">Thrown when:
        /// <list type="bullet">
        /// <item>No settings database file could be found at the location of <paramref name="hydraulicBoundaryDatabaseFilePath"/>
        /// with the same name.</item>
        /// <item>Unable to open settings database file.</item>
        /// <item>Unable to read required data from database file.</item>
        /// </list>
        /// </exception>
        private static OvertoppingRateCalculationInput CreateOvertoppingRateInput(GrassCoverErosionInwardsCalculation calculation,
                                                                                  GeneralGrassCoverErosionInwardsInput generalInput,
                                                                                  string hydraulicBoundaryDatabaseFilePath,
                                                                                  bool usePreprocessor)
        {
            var overtoppingRateCalculationInput = new OvertoppingRateCalculationInput(calculation.InputParameters.HydraulicBoundaryLocation.Id,
                                                                                      calculation.InputParameters.OvertoppingRateTargetProbability,
                                                                                      calculation.InputParameters.Orientation,
                                                                                      ParseProfilePoints(calculation.InputParameters.DikeGeometry),
                                                                                      HydraRingInputParser.ParseForeshore(calculation.InputParameters),
                                                                                      HydraRingInputParser.ParseBreakWater(calculation.InputParameters),
                                                                                      calculation.InputParameters.DikeHeight,
                                                                                      generalInput.CriticalOvertoppingModelFactor,
                                                                                      generalInput.FbFactor.Mean,
                                                                                      generalInput.FbFactor.StandardDeviation,
                                                                                      generalInput.FbFactor.LowerBoundary,
                                                                                      generalInput.FbFactor.UpperBoundary,
                                                                                      generalInput.FnFactor.Mean,
                                                                                      generalInput.FnFactor.StandardDeviation,
                                                                                      generalInput.FnFactor.LowerBoundary,
                                                                                      generalInput.FnFactor.UpperBoundary,
                                                                                      generalInput.OvertoppingModelFactor,
                                                                                      generalInput.FrunupModelFactor.Mean,
                                                                                      generalInput.FrunupModelFactor.StandardDeviation,
                                                                                      generalInput.FrunupModelFactor.LowerBoundary,
                                                                                      generalInput.FrunupModelFactor.UpperBoundary,
                                                                                      generalInput.FshallowModelFactor.Mean,
                                                                                      generalInput.FshallowModelFactor.StandardDeviation,
                                                                                      generalInput.FshallowModelFactor.LowerBoundary,
                                                                                      generalInput.FshallowModelFactor.UpperBoundary);

            HydraRingSettingsDatabaseHelper.AssignSettingsFromDatabase(overtoppingRateCalculationInput, hydraulicBoundaryDatabaseFilePath, usePreprocessor);

            return(overtoppingRateCalculationInput);
        }
Ejemplo n.º 2
0
        public void GetSubMechanismModelId_Always_ReturnsExpectedValues(int subMechanismModelId, int?expectedSubMechanismModelId)
        {
            // Call
            var input = new OvertoppingRateCalculationInput(1, 1000, double.NaN,
                                                            new List <HydraRingRoughnessProfilePoint>(),
                                                            new List <HydraRingForelandPoint>(),
                                                            new HydraRingBreakWater(0, 1.1),
                                                            2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
                                                            13, 14, 15, 16, 17, 18, 19, 20);

            // Assert
            Assert.AreEqual(expectedSubMechanismModelId, input.GetSubMechanismModelId(subMechanismModelId));
        }
        private OvertoppingRateOutput CalculateOvertoppingRate(GrassCoverErosionInwardsCalculation calculation,
                                                               GeneralGrassCoverErosionInwardsInput generalInput,
                                                               string hydraulicBoundaryDatabaseFilePath,
                                                               bool usePreprocessor,
                                                               int numberOfCalculators)
        {
            if (overtoppingRateCalculator == null)
            {
                return(null);
            }

            NotifyProgress(string.Format(Resources.GrassCoverErosionInwardsCalculationService_Calculate_Executing_calculation_of_type_0,
                                         Resources.GrassCoverErosionInwardsCalculationService_OvertoppingRate),
                           numberOfCalculators, numberOfCalculators);

            OvertoppingRateCalculationInput overtoppingRateCalculationInput = CreateOvertoppingRateInput(
                calculation, generalInput, hydraulicBoundaryDatabaseFilePath, usePreprocessor);

            var overtoppingRateCalculated = true;

            try
            {
                PerformCalculation(() => overtoppingRateCalculator.Calculate(overtoppingRateCalculationInput),
                                   () => overtoppingRateCalculator.LastErrorFileContent,
                                   () => overtoppingRateCalculator.OutputDirectory,
                                   calculation.Name,
                                   Resources.GrassCoverErosionInwardsCalculationService_OvertoppingRate);
            }
            catch (HydraRingCalculationException)
            {
                overtoppingRateCalculated = false;
            }

            if (canceled || !overtoppingRateCalculated)
            {
                return(null);
            }

            OvertoppingRateOutput output = CreateOvertoppingRateOutput(overtoppingRateCalculator,
                                                                       calculation.Name,
                                                                       overtoppingRateCalculationInput.Beta,
                                                                       calculation.InputParameters.OvertoppingRateTargetProbability,
                                                                       calculation.InputParameters.ShouldOvertoppingRateIllustrationPointsBeCalculated);

            return(output);
        }
Ejemplo n.º 4
0
        public void Constructor_Always_ExpectedValues()
        {
            // Setup
            const double targetProbability           = 1.0 / 10000;
            const int    hydraulicBoundaryLocationId = 1000;

            const double sectionNormal = 20.0;
            const double dikeHeight    = 1.1;
            const double modelFactorCriticalOvertopping = 2.2;
            const double factorFbMean = 3.3;
            const double factorFbStandardDeviation = 4.4;
            const double factorFbLowerBoundary     = 5.5;
            const double factorFbUpperBoundary     = 6.6;
            const double factorFnMean = 7.7;
            const double factorFnStandardDeviation                   = 8.8;
            const double factorFnLowerBoundary                       = 9.9;
            const double factorFnUpperBoundary                       = 10.0;
            const double modelFactorOvertopping                      = 11.1;
            const double modelFactorFrunupMean                       = 12.2;
            const double modelFactorFrunupStandardDeviation          = 13.3;
            const double modelFactorFrunupLowerBoundary              = 14.4;
            const double modelFactorFrunupUpperBoundary              = 15.5;
            const double exponentModelFactorShallowMean              = 16.6;
            const double exponentModelFactorShallowStandardDeviation = 17.7;
            const double exponentModelFactorShallowLowerBoundary     = 18.8;
            const double exponentModelFactorShallowUpperBoundary     = 19.9;

            var expectedRingProfilePoints = new List <HydraRingRoughnessProfilePoint>
            {
                new HydraRingRoughnessProfilePoint(1.1, 2.2, 3.3)
            };
            var expectedRingForelandPoints = new List <HydraRingForelandPoint>
            {
                new HydraRingForelandPoint(2.2, 3.3)
            };
            var expectedRingBreakWater = new HydraRingBreakWater(2, 3.3);

            // Call
            var input = new OvertoppingRateCalculationInput(hydraulicBoundaryLocationId, targetProbability, sectionNormal,
                                                            expectedRingProfilePoints, expectedRingForelandPoints, expectedRingBreakWater,
                                                            dikeHeight,
                                                            modelFactorCriticalOvertopping,
                                                            factorFbMean, factorFbStandardDeviation,
                                                            factorFbLowerBoundary, factorFbUpperBoundary,
                                                            factorFnMean, factorFnStandardDeviation,
                                                            factorFnLowerBoundary, factorFnUpperBoundary,
                                                            modelFactorOvertopping,
                                                            modelFactorFrunupMean, modelFactorFrunupStandardDeviation,
                                                            modelFactorFrunupLowerBoundary, modelFactorFrunupUpperBoundary,
                                                            exponentModelFactorShallowMean, exponentModelFactorShallowStandardDeviation,
                                                            exponentModelFactorShallowLowerBoundary, exponentModelFactorShallowUpperBoundary);

            // Assert
            double expectedBeta = StatisticsConverter.ProbabilityToReliability(targetProbability);

            Assert.IsInstanceOf <HydraulicLoadsCalculationInput>(input);
            Assert.AreEqual(2, input.CalculationTypeId);
            Assert.AreEqual(hydraulicBoundaryLocationId, input.HydraulicBoundaryLocationId);
            Assert.AreEqual(HydraRingFailureMechanismType.OvertoppingRate, input.FailureMechanismType);
            Assert.AreEqual(17, input.VariableId);
            Assert.IsNotNull(input.Section);
            HydraRingDataEqualityHelper.AreEqual(GetDefaultOvertoppingRateVariables().ToArray(), input.Variables.ToArray());
            CollectionAssert.AreEqual(expectedRingProfilePoints, input.ProfilePoints);
            CollectionAssert.AreEqual(expectedRingForelandPoints, input.ForelandPoints);
            Assert.AreEqual(expectedRingBreakWater, input.BreakWater);
            Assert.AreEqual(expectedBeta, input.Beta);

            HydraRingSection hydraRingSection = input.Section;

            Assert.AreEqual(1, hydraRingSection.SectionId);
            Assert.IsNaN(hydraRingSection.SectionLength);
            Assert.AreEqual(sectionNormal, hydraRingSection.CrossSectionNormal);
        }