Index: DamClients/DamUI/branches/DamUI 19.3/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs =================================================================== diff -u -r3701 -r3766 --- DamClients/DamUI/branches/DamUI 19.3/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 3701) +++ DamClients/DamUI/branches/DamUI 19.3/src/DamClientsLibrary/Deltares.Dam.Data/DamEngineIo/FillXmlInputFromDamUi.cs (.../FillXmlInputFromDamUi.cs) (revision 3766) @@ -687,7 +687,7 @@ var layer = soilProfile1D.Layers[i]; var inputLayer = new SoilProfile1DLayer1D { - Name = layer.Id, + Name = "L" + i, SoilName = layer.Soil.Name, TopLevel = layer.TopLevel, IsAquifer = layer.IsAquifer, Index: DamClients/DamUI/branches/DamUI 19.3/src/Dam/Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs =================================================================== diff -u -r3701 -r3766 --- DamClients/DamUI/branches/DamUI 19.3/src/Dam/Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs (.../FillXmlInputFromDamUiTests.cs) (revision 3701) +++ DamClients/DamUI/branches/DamUI 19.3/src/Dam/Tests/DamEngineIo/FillXmlInputFromDamUiTests.cs (.../FillXmlInputFromDamUiTests.cs) (revision 3766) @@ -470,7 +470,7 @@ { var layer = new SoilLayer1D { - Id = "Layer" + (j + 1).ToString(), + Id = "L" + j, Soil = dike.SoilList.Soils[j], TopLevel = 1 * -j }; Index: DamClients/DamUI/branches/DamUI 19.3/src/DamClientsLibrary/Deltares.Dam.Data/Scenario.cs =================================================================== diff -u -r3701 -r3766 --- DamClients/DamUI/branches/DamUI 19.3/src/DamClientsLibrary/Deltares.Dam.Data/Scenario.cs (.../Scenario.cs) (revision 3701) +++ DamClients/DamUI/branches/DamUI 19.3/src/DamClientsLibrary/Deltares.Dam.Data/Scenario.cs (.../Scenario.cs) (revision 3766) @@ -605,43 +605,42 @@ /// /// default value if not available /// uplift criterion for this scenario - public double GetUpliftCriterionStability(double? defaultUpliftCriterionStability) + public double GetUpliftCriterionStability(double defaultUpliftCriterionStability) { - if ((defaultUpliftCriterionStability == null) && (ModelFactors.UpliftCriterionStability == null)) + if ((defaultUpliftCriterionStability < 0) && (ModelFactors.UpliftCriterionStability < 0)) { throw new ScenarioException(String.Format(LocalizationManager.GetTranslatedText(this, "NoUpliftCriterionForStability"), Location.Name, ToString())); } - return (ModelFactors.UpliftCriterionStability == null ? defaultUpliftCriterionStability.Value - : ModelFactors.UpliftCriterionStability); + return (ModelFactors.UpliftCriterionStability < 0 ? defaultUpliftCriterionStability : ModelFactors.UpliftCriterionStability); } /// /// Get uplift criterion for this scenario; return default value if not available /// /// default value if not available /// uplift criterion for this scenario - public double GetUpliftCriterionPiping(double? defaultUpliftCriterionPiping) + public double GetUpliftCriterionPiping(double defaultUpliftCriterionPiping) { - if ((defaultUpliftCriterionPiping == null) && (ModelFactors.UpliftCriterionPiping == null)) + if ((defaultUpliftCriterionPiping < 0) && (ModelFactors.UpliftCriterionPiping < 0)) { throw new ScenarioException(String.Format(LocalizationManager.GetTranslatedText(this, "NoUpliftCriterionForPiping"), Location.Name, ToString())); } - return (ModelFactors.UpliftCriterionPiping == null ? defaultUpliftCriterionPiping.Value : ModelFactors.UpliftCriterionPiping); + return (ModelFactors.UpliftCriterionPiping < 0 ? defaultUpliftCriterionPiping : ModelFactors.UpliftCriterionPiping); } /// /// Get required safety factor for this scenario; return default value if not available /// /// default value if not available /// uplift criterion for this scenario - public double GetRequiredSafetyFactorPiping(double? defaultRequiredSafetyFactorPiping) + public double GetRequiredSafetyFactorPiping(double defaultRequiredSafetyFactorPiping) { - if ((defaultRequiredSafetyFactorPiping == null) && (ModelFactors.RequiredSafetyFactorPiping == null)) + if ((defaultRequiredSafetyFactorPiping < 0) && (ModelFactors.RequiredSafetyFactorPiping < 0)) { throw new ScenarioException(String.Format(LocalizationManager.GetTranslatedText(this, "NoRequiredSafetyFactorPiping"), Location.Name, ToString())); } - return (ModelFactors.RequiredSafetyFactorPiping == null ? defaultRequiredSafetyFactorPiping.Value : ModelFactors.RequiredSafetyFactorPiping); + return (ModelFactors.RequiredSafetyFactorPiping < 0 ? defaultRequiredSafetyFactorPiping : ModelFactors.RequiredSafetyFactorPiping); } /// Index: DamClients/DamUI/branches/DamUI 19.3/src/DamClientsLibrary/Deltares.Dam.Data/DataPlugins/DataPluginImporter.cs =================================================================== diff -u -r3701 -r3766 --- DamClients/DamUI/branches/DamUI 19.3/src/DamClientsLibrary/Deltares.Dam.Data/DataPlugins/DataPluginImporter.cs (.../DataPluginImporter.cs) (revision 3701) +++ DamClients/DamUI/branches/DamUI 19.3/src/DamClientsLibrary/Deltares.Dam.Data/DataPlugins/DataPluginImporter.cs (.../DataPluginImporter.cs) (revision 3766) @@ -85,8 +85,7 @@ private readonly List importLogMessages = new List(); private List attributes; private DamProjectType damProjectType; - private bool csvDataAdded = false; - + private string damProjectFolder; /// @@ -1263,7 +1262,6 @@ importLogMessages.AddRange(combineImportedData.ErrorMessages); Debug.Assert(ReferenceEquals(waterBoard, combineImportedData.WaterBoard)); waterBoard = combineImportedData.WaterBoard; - csvDataAdded = true; } } Index: DamClients/DamUI/branches/DamUI 19.3/src/Dam/Forms/DamSpatialEditorDecorator.cs =================================================================== diff -u -r3701 -r3766 --- DamClients/DamUI/branches/DamUI 19.3/src/Dam/Forms/DamSpatialEditorDecorator.cs (.../DamSpatialEditorDecorator.cs) (revision 3701) +++ DamClients/DamUI/branches/DamUI 19.3/src/Dam/Forms/DamSpatialEditorDecorator.cs (.../DamSpatialEditorDecorator.cs) (revision 3766) @@ -92,12 +92,18 @@ { get { - var profileName = GeometryProbabilitiesCount > 0 ? GeometryProbabilities[index].SoilGeometryName : ""; - if (!String.IsNullOrEmpty(profileName)) + if (index < GeometryProbabilitiesCount) { - var translatedPrefix = LocalizationManager.GetTranslatedText(this, "ProfileNamePrefix"); - return String.Concat(translatedPrefix, ": ", profileName); + var profileName = GeometryProbabilitiesCount > 0 + ? GeometryProbabilities[index].SoilGeometryName + : ""; + if (!String.IsNullOrEmpty(profileName)) + { + var translatedPrefix = LocalizationManager.GetTranslatedText(this, "ProfileNamePrefix"); + return String.Concat(translatedPrefix, ": ", profileName); + } } + return ""; } } Index: DamClients/DamUI/branches/DamUI 19.3/src/DamClientsLibrary/Deltares.Dam.Data/Location.cs =================================================================== diff -u -r3701 -r3766 --- DamClients/DamUI/branches/DamUI 19.3/src/DamClientsLibrary/Deltares.Dam.Data/Location.cs (.../Location.cs) (revision 3701) +++ DamClients/DamUI/branches/DamUI 19.3/src/DamClientsLibrary/Deltares.Dam.Data/Location.cs (.../Location.cs) (revision 3766) @@ -1200,7 +1200,7 @@ { foreach (var scenario in scenarios) { - if (scenario.RequiredSafetyFactorStabilityInnerSlope == null) + if (scenario.RequiredSafetyFactorStabilityInnerSlope < 0) return new[] { new ValidationResult(ValidationResultType.Error, Index: DamClients/DamUI/branches/DamUI 19.3/src/DamClientsLibrary/Deltares.Dam.Data/WaterBoardPostProcessRelativeProfiles.cs =================================================================== diff -u -r3751 -r3766 --- DamClients/DamUI/branches/DamUI 19.3/src/DamClientsLibrary/Deltares.Dam.Data/WaterBoardPostProcessRelativeProfiles.cs (.../WaterBoardPostProcessRelativeProfiles.cs) (revision 3751) +++ DamClients/DamUI/branches/DamUI 19.3/src/DamClientsLibrary/Deltares.Dam.Data/WaterBoardPostProcessRelativeProfiles.cs (.../WaterBoardPostProcessRelativeProfiles.cs) (revision 3766) @@ -55,6 +55,9 @@ var orgSegment = location.Segment; if (orgSegment != null) { + var topSurfaceline = location.SurfaceLine2.CharacteristicPoints.Geometry.GetMaxZ(); + var characteristicGeometryPoint = location.SurfaceLine2.CharacteristicPoints.GetGeometryPoint(characteristicPointType); + bool errorFound = false; var newSegment = new Segment(); newSegment.Name = String.Format("Segment {0}-{1}", orgSegment.Name, location.Name); int soilProbabilityIndex = 0; @@ -63,7 +66,6 @@ soilProbabilityIndex++; try { - var characteristicGeometryPoint = location.SurfaceLine2.CharacteristicPoints.GetGeometryPoint(characteristicPointType); if (characteristicGeometryPoint == null) { throw new WaterBoardPostProcessRelativeProfilesException(String.Format("Characteristic point {0} is not defined", characteristicPointType)); @@ -95,21 +97,41 @@ { soilProfile1D.BottomLevel += deltaZ; } - + var profileTopLevel = soilProfile1D.TopLevel; + // If the top of the profile is moved below the top of the surface level, a gap appears which will be filled in later in the UI + // to the combined 2D. However, for Piping calculation the 1D profile itself needs to start at least at the top of the surface line + // too in order to perform a correct calculation. So extend the 1D profile here too! + if (profileTopLevel < topSurfaceline) + { + var newTopLayer = new SoilLayer1D + { + SoilProfile = soilProfile1D, + MaintainLayerOrder = true, + TopLevel = topSurfaceline, + IsAquifer = false, + Soil = dike.SoilList.GetSoilByName(location.DikeEmbankmentMaterial) + }; + soilProfile1D.Layers.Insert(0, newTopLayer); + } + // Add new SoilGeometryProbability to new segment and assign new segment to location newSegment.SoilProfileProbabilities.Add(newSoilGeometryProbability); - location.Segment = newSegment; - waterBoard.Segments.Add(newSegment); // Add new soil profile to existing list. dike.SoilProfiles.Add(soilProfile1D); } catch (Exception e) { + errorFound = true; LogManager.Messages.Add(new LogMessage(LogMessageType.Error, location, String.Format("Error in location '{0}' applying relative height for soilprofile '{1}': {2} ", location.Name, orgSoilGeometryProbability.SoilGeometryName, e.Message))); } } + if (!errorFound) + { + location.Segment = newSegment; + waterBoard.Segments.Add(newSegment); + } } } }