/// <summary> /// Asserts whether the <see cref="PersistableWaternetCreatorSettings"/> contains the data /// that is representative for the <paramref name="input"/>. /// </summary> /// <param name="input">The input that contains the original data.</param> /// <param name="waternetCreatorSettingsCollection">The <see cref="PersistableWaternetCreatorSettings"/> /// that needs to be asserted.</param> /// <param name="normativeAssessmentLevel">The normative assessment level to use.</param> /// <param name="stages">The stages to use.</param> /// <exception cref="AssertionException">Thrown when the data in <paramref name="waternetCreatorSettingsCollection"/> /// is not correct.</exception> public static void AssertWaternetCreatorSettings(MacroStabilityInwardsInput input, IEnumerable <PersistableWaternetCreatorSettings> waternetCreatorSettingsCollection, RoundedDouble normativeAssessmentLevel, MacroStabilityInwardsExportStageType[] stages) { Assert.AreEqual(2, waternetCreatorSettingsCollection.Count()); for (var i = 0; i < waternetCreatorSettingsCollection.Count(); i++) { PersistableWaternetCreatorSettings waternetCreatorSettings = waternetCreatorSettingsCollection.ElementAt(i); Assert.AreEqual(input.MinimumLevelPhreaticLineAtDikeTopPolder, waternetCreatorSettings.InitialLevelEmbankmentTopWaterSide); Assert.AreEqual(input.MinimumLevelPhreaticLineAtDikeTopRiver, waternetCreatorSettings.InitialLevelEmbankmentTopLandSide); Assert.AreEqual(input.AdjustPhreaticLine3And4ForUplift, waternetCreatorSettings.AdjustForUplift); Assert.AreEqual(input.LeakageLengthInwardsPhreaticLine3, waternetCreatorSettings.PleistoceneLeakageLengthInwards); Assert.AreEqual(input.LeakageLengthOutwardsPhreaticLine3, waternetCreatorSettings.PleistoceneLeakageLengthInwards); Assert.AreEqual(input.LeakageLengthInwardsPhreaticLine4, waternetCreatorSettings.AquiferLayerInsideAquitardLeakageLengthInwards); Assert.AreEqual(input.LeakageLengthOutwardsPhreaticLine4, waternetCreatorSettings.AquiferLayerInsideAquitardLeakageLengthOutwards); Assert.AreEqual(input.PiezometricHeadPhreaticLine2Inwards, waternetCreatorSettings.AquitardHeadLandSide); Assert.AreEqual(input.PiezometricHeadPhreaticLine2Outwards, waternetCreatorSettings.AquitardHeadWaterSide); Assert.AreEqual(input.WaterLevelRiverAverage, waternetCreatorSettings.MeanWaterLevel); Assert.AreEqual(input.DrainageConstructionPresent, waternetCreatorSettings.IsDrainageConstructionPresent); Assert.AreEqual(input.XCoordinateDrainageConstruction, waternetCreatorSettings.DrainageConstruction.X); Assert.AreEqual(input.ZCoordinateDrainageConstruction, waternetCreatorSettings.DrainageConstruction.Z); Assert.AreEqual(IsDitchPresent(input.SurfaceLine), waternetCreatorSettings.IsDitchPresent); AssertDitchCharacteristics(input.SurfaceLine, waternetCreatorSettings.DitchCharacteristics, IsDitchPresent(input.SurfaceLine)); AssertEmbankmentCharacteristics(input.SurfaceLine, waternetCreatorSettings.EmbankmentCharacteristics); Assert.AreEqual(GetEmbankmentSoilScenario(input.DikeSoilScenario), waternetCreatorSettings.EmbankmentSoilScenario); Assert.IsFalse(waternetCreatorSettings.IsAquiferLayerInsideAquitard); Assert.IsNotNull(waternetCreatorSettings.AquiferLayerId); if (stages[i] == MacroStabilityInwardsExportStageType.Daily) { Assert.AreEqual(input.WaterLevelRiverAverage, waternetCreatorSettings.NormativeWaterLevel); Assert.AreEqual(input.LocationInputDaily.WaterLevelPolder, waternetCreatorSettings.WaterLevelHinterland); Assert.AreEqual(input.LocationInputDaily.PenetrationLength, waternetCreatorSettings.IntrusionLength); AssertOffsets(input.LocationInputDaily, waternetCreatorSettings); } else if (stages[i] == MacroStabilityInwardsExportStageType.Extreme) { Assert.AreEqual(normativeAssessmentLevel, waternetCreatorSettings.NormativeWaterLevel); Assert.AreEqual(input.LocationInputExtreme.WaterLevelPolder, waternetCreatorSettings.WaterLevelHinterland); Assert.AreEqual(input.LocationInputExtreme.PenetrationLength, waternetCreatorSettings.IntrusionLength); AssertOffsets(input.LocationInputExtreme, waternetCreatorSettings); } } }
/// <summary> /// Creates a new <see cref="PersistableWaternetCreatorSettings"/>. /// </summary> /// <param name="input">The input to use.</param> /// <param name="idFactory">The factory for creating IDs.</param> /// <param name="registry">The persistence registry.</param> /// <param name="stageType">The stage type.</param> /// <returns>The created <see cref="PersistableWaternetCreatorSettings"/>.</returns> /// <exception cref="InvalidEnumArgumentException">Thrown when <see cref="IMacroStabilityInwardsWaternetInput.DikeSoilScenario"/> /// has an invalid value for <see cref="MacroStabilityInwardsDikeSoilScenario"/>.</exception> /// <exception cref="NotSupportedException">Thrown when <see cref="IMacroStabilityInwardsWaternetInput.DikeSoilScenario"/> /// is not supported.</exception> private static PersistableWaternetCreatorSettings Create(IMacroStabilityInwardsWaternetInput input, IdFactory idFactory, MacroStabilityInwardsExportRegistry registry, MacroStabilityInwardsExportStageType stageType) { bool isDitchPresent = IsDitchPresent(input.SurfaceLine); var waternetCreatorSettings = new PersistableWaternetCreatorSettings { Id = idFactory.Create(), InitialLevelEmbankmentTopWaterSide = input.MinimumLevelPhreaticLineAtDikeTopRiver, InitialLevelEmbankmentTopLandSide = input.MinimumLevelPhreaticLineAtDikeTopPolder, AdjustForUplift = input.AdjustPhreaticLine3And4ForUplift, PleistoceneLeakageLengthOutwards = input.LeakageLengthOutwardsPhreaticLine3, PleistoceneLeakageLengthInwards = input.LeakageLengthInwardsPhreaticLine3, AquiferLayerInsideAquitardLeakageLengthOutwards = input.LeakageLengthOutwardsPhreaticLine4, AquiferLayerInsideAquitardLeakageLengthInwards = input.LeakageLengthInwardsPhreaticLine4, AquitardHeadWaterSide = input.PiezometricHeadPhreaticLine2Outwards, AquitardHeadLandSide = input.PiezometricHeadPhreaticLine2Inwards, MeanWaterLevel = input.WaterLevelRiverAverage, IsDrainageConstructionPresent = input.DrainageConstructionPresent, DrainageConstruction = new PersistablePoint(input.XCoordinateDrainageConstruction, input.ZCoordinateDrainageConstruction), IsDitchPresent = isDitchPresent, DitchCharacteristics = CreateDitchCharacteristics(input.SurfaceLine, isDitchPresent), EmbankmentCharacteristics = CreateEmbankmentCharacteristics(input.SurfaceLine), EmbankmentSoilScenario = CreateEmbankmentSoilScenario(input.DikeSoilScenario), IsAquiferLayerInsideAquitard = false }; IEnumerable <MacroStabilityInwardsSoilLayer2D> aquiferLayers = MacroStabilityInwardsSoilProfile2DLayersHelper.GetLayersRecursively(input.SoilProfileUnderSurfaceLine.Layers) .Where(l => l.Data.IsAquifer); if (aquiferLayers.Count() == 1) { waternetCreatorSettings.AquiferLayerId = registry.GeometryLayers[stageType][aquiferLayers.Single()]; } registry.AddWaternetCreatorSettings(stageType, waternetCreatorSettings.Id); return(waternetCreatorSettings); }
private static void AssertOffsets(IMacroStabilityInwardsLocationInput locationInput, PersistableWaternetCreatorSettings waternetCreatorSettings) { Assert.AreEqual(locationInput.UseDefaultOffsets, waternetCreatorSettings.UseDefaultOffsets); Assert.AreEqual(locationInput.PhreaticLineOffsetBelowDikeTopAtPolder, waternetCreatorSettings.OffsetEmbankmentTopLandSide); Assert.AreEqual(locationInput.PhreaticLineOffsetBelowDikeTopAtRiver, waternetCreatorSettings.OffsetEmbankmentTopWaterSide); Assert.AreEqual(locationInput.PhreaticLineOffsetBelowDikeToeAtPolder, waternetCreatorSettings.OffsetEmbankmentToeLandSide); Assert.AreEqual(locationInput.PhreaticLineOffsetBelowShoulderBaseInside, waternetCreatorSettings.OffsetShoulderBaseLandSide); }
public void Create_WithValidData_ReturnsStages() { // Setup var idFactory = new IdFactory(); var registry = new MacroStabilityInwardsExportRegistry(); var stageTypes = new[] { MacroStabilityInwardsExportStageType.Daily, MacroStabilityInwardsExportStageType.Extreme }; var settingsList = new List <PersistableCalculationSettings>(); var geometryList = new List <PersistableGeometry>(); var soilLayersList = new List <PersistableSoilLayerCollection>(); var waternetList = new List <PersistableWaternet>(); var waternetCreatorSettingsList = new List <PersistableWaternetCreatorSettings>(); var stateList = new List <PersistableState>(); foreach (MacroStabilityInwardsExportStageType stageType in stageTypes) { var settings = new PersistableCalculationSettings { Id = idFactory.Create() }; settingsList.Add(settings); var geometry = new PersistableGeometry { Id = idFactory.Create() }; geometryList.Add(geometry); var persistableSoilLayerCollection = new PersistableSoilLayerCollection { Id = idFactory.Create() }; soilLayersList.Add(persistableSoilLayerCollection); var waternet = new PersistableWaternet { Id = idFactory.Create() }; waternetList.Add(waternet); var waternetCreatorSettings = new PersistableWaternetCreatorSettings { Id = idFactory.Create() }; waternetCreatorSettingsList.Add(waternetCreatorSettings); var state = new PersistableState { Id = idFactory.Create() }; stateList.Add(state); registry.AddSettings(stageType, settings.Id); registry.AddGeometry(stageType, geometry.Id); registry.AddSoilLayer(stageType, persistableSoilLayerCollection.Id); registry.AddWaternet(stageType, waternet.Id); registry.AddWaternetCreatorSettings(stageType, waternetCreatorSettings.Id); registry.AddState(stageType, state.Id); } // Call IEnumerable <PersistableStage> stages = PersistableStageFactory.Create(idFactory, registry); // Assert PersistableDataModelTestHelper.AssertStages(stages, settingsList, geometryList, soilLayersList, waternetList, waternetCreatorSettingsList, stateList); }
private static void SetOffsets(IMacroStabilityInwardsLocationInput locationInput, PersistableWaternetCreatorSettings waternetCreatorSettings) { waternetCreatorSettings.UseDefaultOffsets = locationInput.UseDefaultOffsets; waternetCreatorSettings.OffsetEmbankmentTopWaterSide = locationInput.PhreaticLineOffsetBelowDikeTopAtRiver; waternetCreatorSettings.OffsetEmbankmentTopLandSide = locationInput.PhreaticLineOffsetBelowDikeTopAtPolder; waternetCreatorSettings.OffsetEmbankmentToeLandSide = locationInput.PhreaticLineOffsetBelowDikeToeAtPolder; waternetCreatorSettings.OffsetShoulderBaseLandSide = locationInput.PhreaticLineOffsetBelowShoulderBaseInside; }