Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Services/HydraRingConfigurationService.cs =================================================================== diff -u -r5cbdfc02ed72dd65d6d6eea33a33804ea6cf6b02 -r23925d0f05558876349015afc3f698789699a0e3 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Services/HydraRingConfigurationService.cs (.../HydraRingConfigurationService.cs) (revision 5cbdfc02ed72dd65d6d6eea33a33804ea6cf6b02) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Services/HydraRingConfigurationService.cs (.../HydraRingConfigurationService.cs) (revision 23925d0f05558876349015afc3f698789699a0e3) @@ -28,6 +28,7 @@ using Ringtoets.HydraRing.Calculation.Data; using Ringtoets.HydraRing.Calculation.Data.Defaults; using Ringtoets.HydraRing.Calculation.Data.Input; +using Ringtoets.HydraRing.Calculation.Data.Settings; using Ringtoets.HydraRing.Calculation.Providers; namespace Ringtoets.HydraRing.Calculation.Services @@ -56,18 +57,36 @@ /// internal class HydraRingConfigurationService { + private struct InputWithSettings + { + public HydraRingCalculationInput Input; + public DesignTablesSetting DesignTablesSetting; + public HydraulicModelsSetting HydraulicModelsSetting; + public Dictionary NumericsSetting; + + public InputWithSettings(HydraRingCalculationInput hydraRingCalculationInput, DesignTablesSetting designTablesSetting, HydraulicModelsSetting hydraulicModelsSetting, Dictionary numericsSetting) + { + Input = hydraRingCalculationInput; + DesignTablesSetting = designTablesSetting; + NumericsSetting = numericsSetting; + HydraulicModelsSetting = hydraulicModelsSetting; + } + } + private const double defaultLayerId = 1; private const double defaultAlternativeId = 1; private const double defaultHydraRingValue = 0.0; private readonly double? defaultHydraRingNullValue = null; private readonly string ringId; - private readonly IList hydraRingCalculationInputs; + private readonly IList hydraRingInputsAndSettings = new List(); + private readonly FailureMechanismDefaultsProvider failureMechanismDefaultsProvider = new FailureMechanismDefaultsProvider(); + private readonly VariableDefaultsProvider variableDefaultsProvider = new VariableDefaultsProvider(); + private readonly NumericsSettingsProvider numericsSettingsProvider = new NumericsSettingsProvider(); private readonly DesignTablesSettingsProvider designTablesSettingsProvider = new DesignTablesSettingsProvider(); private readonly HydraulicModelsSettingsProvider hydraulicModelsSettingsProvider = new HydraulicModelsSettingsProvider(); - private readonly FailureMechanismDefaultsProvider failureMechanismDefaultsProvider = new FailureMechanismDefaultsProvider(); - private readonly VariableDefaultsProvider variableDefaultsProvider = new VariableDefaultsProvider(); + private readonly HydraRingUncertaintiesType uncertaintiesType; /// @@ -77,8 +96,6 @@ /// The to use while performing Hydra-Ring calculations. public HydraRingConfigurationService(string ringId, HydraRingUncertaintiesType uncertaintiesType) { - hydraRingCalculationInputs = new List(); - this.ringId = ringId; this.uncertaintiesType = uncertaintiesType; } @@ -113,17 +130,38 @@ /// the same has already been added. public void AddHydraRingCalculationInput(HydraRingCalculationInput hydraRingCalculationInput) { - if (hydraRingCalculationInputs.Any(h => h.Section.SectionId == hydraRingCalculationInput.Section.SectionId)) + AddHydraRingCalculationInput(hydraRingCalculationInput, + null, + null, + null); + } + + /// + /// Adds Hydra-Ring calculation input to the configuration. + /// + /// The calculation input to add to the configuration. + /// The settings for the design table when performing the calculation with given . + /// The dictionary containing numerics settings per submechanism for the given . + /// The settings for the hydraulic models when performing the calculation with given . + /// Thrown when with + /// the same has already been added. + public void AddHydraRingCalculationInput(HydraRingCalculationInput input, DesignTablesSetting designTablesSetting, + Dictionary numericsSettings, HydraulicModelsSetting hydraulicModelsSetting) + { + if (hydraRingInputsAndSettings.Any(h => h.Input.Section.SectionId == input.Section.SectionId)) { - throw new ArgumentException(@"Section id is not unique", "hydraRingCalculationInput"); + throw new ArgumentException(@"Section id is not unique", "input"); } - if (hydraRingCalculationInputs.Count > 0 && hydraRingCalculationInputs.First().FailureMechanismType != hydraRingCalculationInput.FailureMechanismType) + if (hydraRingInputsAndSettings.Count > 0 && hydraRingInputsAndSettings.First().Input.FailureMechanismType != input.FailureMechanismType) { throw new NotSupportedException("Running calculations for multiple failure mechanism types is not supported."); } - hydraRingCalculationInputs.Add(hydraRingCalculationInput); + hydraRingInputsAndSettings.Add(new InputWithSettings( + input, + designTablesSetting, + hydraulicModelsSetting, numericsSettings)); } /// @@ -163,11 +201,14 @@ private IList GetHydraulicModelsConfiguration() { var timeIntegrationSchemeId = 1; - var input = hydraRingCalculationInputs.FirstOrDefault(); - if (input != null) + if(hydraRingInputsAndSettings.Count > 0) { - timeIntegrationSchemeId = hydraulicModelsSettingsProvider.GetHydraulicModelsSetting(input.FailureMechanismType, ringId).TimeIntegrationSchemeId; + HydraulicModelsSetting hydraulicModelsSetting = hydraulicModelsSettingsProvider.GetHydraulicModelsSetting( + hydraRingInputsAndSettings.First().Input.FailureMechanismType, + ringId); + + timeIntegrationSchemeId = hydraulicModelsSetting.TimeIntegrationSchemeId; } return new List @@ -191,9 +232,10 @@ { var orderedDictionaries = new List(); - foreach (var hydraRingCalculationInput in hydraRingCalculationInputs) + foreach (InputWithSettings inputWithSettings in hydraRingInputsAndSettings) { - var hydraRingSection = hydraRingCalculationInput.Section; + HydraRingCalculationInput hydraRingCalculationInput = inputWithSettings.Input; + HydraRingSection hydraRingSection = hydraRingCalculationInput.Section; orderedDictionaries.Add(new OrderedDictionary { @@ -249,10 +291,11 @@ { var orderedDictionaries = new List(); - foreach (var hydraRingCalculationInput in hydraRingCalculationInputs) + foreach (InputWithSettings inputWithSettings in hydraRingInputsAndSettings) { - var failureMechanismDefaults = failureMechanismDefaultsProvider.GetFailureMechanismDefaults(hydraRingCalculationInput.FailureMechanismType); - var designTablesSetting = designTablesSettingsProvider.GetDesignTablesSetting(hydraRingCalculationInput.FailureMechanismType, ringId); + HydraRingCalculationInput hydraRingCalculationInput = inputWithSettings.Input; + FailureMechanismDefaults failureMechanismDefaults = failureMechanismDefaultsProvider.GetFailureMechanismDefaults(hydraRingCalculationInput.FailureMechanismType); + DesignTablesSetting designTablesSetting = designTablesSettingsProvider.GetDesignTablesSetting(hydraRingCalculationInput.FailureMechanismType, ringId); orderedDictionaries.Add(new OrderedDictionary { @@ -305,11 +348,12 @@ { var orderDictionaries = new List(); - foreach (var hydraRingCalculationInput in hydraRingCalculationInputs) + foreach (InputWithSettings inputWithSettings in hydraRingInputsAndSettings) { - var failureMechanismDefaults = failureMechanismDefaultsProvider.GetFailureMechanismDefaults(hydraRingCalculationInput.FailureMechanismType); + HydraRingCalculationInput hydraRingCalculationInput = inputWithSettings.Input; + FailureMechanismDefaults failureMechanismDefaults = failureMechanismDefaultsProvider.GetFailureMechanismDefaults(hydraRingCalculationInput.FailureMechanismType); - foreach (var subMechanismId in failureMechanismDefaults.SubMechanismIds) + foreach (int subMechanismId in failureMechanismDefaults.SubMechanismIds) { var numericsSetting = numericsSettingsProvider.GetNumericsSetting(hydraRingCalculationInput.FailureMechanismType, subMechanismId, ringId); @@ -386,11 +430,12 @@ { var orderDictionaries = new List(); - foreach (var hydraRingCalculationInput in hydraRingCalculationInputs) + foreach (InputWithSettings inputWithSettings in hydraRingInputsAndSettings) { - var failureMechanismDefaults = failureMechanismDefaultsProvider.GetFailureMechanismDefaults(hydraRingCalculationInput.FailureMechanismType); + HydraRingCalculationInput hydraRingCalculationInput = inputWithSettings.Input; + FailureMechanismDefaults failureMechanismDefaults = failureMechanismDefaultsProvider.GetFailureMechanismDefaults(hydraRingCalculationInput.FailureMechanismType); - foreach (var hydraRingVariable in hydraRingCalculationInput.Variables) + foreach (HydraRingVariable hydraRingVariable in hydraRingCalculationInput.Variables) { var variableDefaults = variableDefaultsProvider.GetVariableDefaults(hydraRingCalculationInput.FailureMechanismType, hydraRingVariable.VariableId); @@ -459,11 +504,12 @@ { var orderDictionaries = new List(); - foreach (var hydraRingCalculationInput in hydraRingCalculationInputs) + foreach (InputWithSettings inputWithSettings in hydraRingInputsAndSettings) { + HydraRingCalculationInput hydraRingCalculationInput = inputWithSettings.Input; for (var i = 0; i < hydraRingCalculationInput.ProfilePoints.Count(); i++) { - var hydraRingProfilePoint = hydraRingCalculationInput.ProfilePoints.ElementAt(i); + HydraRingProfilePoint hydraRingProfilePoint = hydraRingCalculationInput.ProfilePoints.ElementAt(i); orderDictionaries.Add(new OrderedDictionary { @@ -489,12 +535,13 @@ private IList GetCalculationProfilesConfiguration() { var orderDictionaries = new List(); - - foreach (var hydraRingCalculationInput in hydraRingCalculationInputs) + + foreach (InputWithSettings inputWithSettings in hydraRingInputsAndSettings) { + HydraRingCalculationInput hydraRingCalculationInput = inputWithSettings.Input; for (var i = 0; i < hydraRingCalculationInput.ProfilePoints.Count(); i++) { - var hydraRingProfilePoint = hydraRingCalculationInput.ProfilePoints.ElementAt(i); + HydraRingProfilePoint hydraRingProfilePoint = hydraRingCalculationInput.ProfilePoints.ElementAt(i); orderDictionaries.Add(new OrderedDictionary { @@ -523,8 +570,9 @@ private IList GetForlandModelsConfiguration() { var orderDictionaries = new List(); - foreach (HydraRingCalculationInput input in hydraRingCalculationInputs.Where(i => i.ForelandsPoints.Any())) + foreach (InputWithSettings inputWithSettings in hydraRingInputsAndSettings.Where(i => i.Input.ForelandsPoints.Any())) { + HydraRingCalculationInput input = inputWithSettings.Input; FailureMechanismDefaults failureMechanismDefaults = failureMechanismDefaultsProvider.GetFailureMechanismDefaults(input.FailureMechanismType); orderDictionaries.Add(new OrderedDictionary { @@ -545,8 +593,9 @@ private IList GetForelandsConfiguration() { var orderDictionaries = new List(); - foreach (var hydraRingCalculationInput in hydraRingCalculationInputs) + foreach (InputWithSettings inputWithSettings in hydraRingInputsAndSettings) { + HydraRingCalculationInput hydraRingCalculationInput = inputWithSettings.Input; for (var i = 0; i < hydraRingCalculationInput.ForelandsPoints.Count(); i++) { var forelandPoint = hydraRingCalculationInput.ForelandsPoints.ElementAt(i); @@ -574,8 +623,9 @@ private IList GetBreakWatersConfiguration() { var orderedDictionaries = new List(); - foreach (var hydraRingCalculationInput in hydraRingCalculationInputs) + foreach (InputWithSettings inputWithSettings in hydraRingInputsAndSettings) { + HydraRingCalculationInput hydraRingCalculationInput = inputWithSettings.Input; if (hydraRingCalculationInput.BreakWater != null) { orderedDictionaries.Add(new OrderedDictionary @@ -599,9 +649,10 @@ { var orderedDictionaries = new List(); - foreach (var hydraRingCalculationInput in hydraRingCalculationInputs) + foreach (InputWithSettings inputWithSettings in hydraRingInputsAndSettings) { - var failureMechanismDefaults = failureMechanismDefaultsProvider.GetFailureMechanismDefaults(hydraRingCalculationInput.FailureMechanismType); + HydraRingCalculationInput hydraRingCalculationInput = inputWithSettings.Input; + FailureMechanismDefaults failureMechanismDefaults = failureMechanismDefaultsProvider.GetFailureMechanismDefaults(hydraRingCalculationInput.FailureMechanismType); orderedDictionaries.Add(new OrderedDictionary { @@ -630,9 +681,10 @@ { var orderedDictionaries = new List(); - foreach (var hydraRingCalculationInput in hydraRingCalculationInputs) + foreach (InputWithSettings inputWithSettings in hydraRingInputsAndSettings) { - var failureMechanismDefaults = failureMechanismDefaultsProvider.GetFailureMechanismDefaults(hydraRingCalculationInput.FailureMechanismType); + HydraRingCalculationInput hydraRingCalculationInput = inputWithSettings.Input; + FailureMechanismDefaults failureMechanismDefaults = failureMechanismDefaultsProvider.GetFailureMechanismDefaults(hydraRingCalculationInput.FailureMechanismType); foreach (var subMechanismId in failureMechanismDefaults.SubMechanismIds) {