Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Deltares.Dam.Data.csproj =================================================================== diff -u -r2573 -r2576 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Deltares.Dam.Data.csproj (.../Deltares.Dam.Data.csproj) (revision 2573) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Deltares.Dam.Data.csproj (.../Deltares.Dam.Data.csproj) (revision 2576) @@ -252,6 +252,7 @@ + Fisheye: Tag 2573 refers to a dead (removed) revision in file `DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/ModelFactors.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/IO/CombineImportedData.cs =================================================================== diff -u -r2573 -r2576 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/IO/CombineImportedData.cs (.../CombineImportedData.cs) (revision 2573) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/IO/CombineImportedData.cs (.../CombineImportedData.cs) (revision 2576) @@ -652,11 +652,14 @@ { Location = dikeLocation, LocationScenarioID = scenarioRecord.LocationScenarioId, - RequiredSafetyFactorStabilityInnerSlope = scenarioRecord.SafetyFactorStabilityInnerSlope, - RequiredSafetyFactorStabilityOuterSlope = scenarioRecord.SafetyFactorStabilityOuterSlope, - RequiredSafetyFactorPiping = scenarioRecord.SafetyFactorPiping, - UpliftCriterionPiping = scenarioRecord.UpliftCriterionPiping, - UpliftCriterionStability = scenarioRecord.UpliftCriterionStability + ModelFactors = + { + RequiredSafetyFactorStabilityInnerSlope = scenarioRecord.SafetyFactorStabilityInnerSlope, + RequiredSafetyFactorStabilityOuterSlope = scenarioRecord.SafetyFactorStabilityOuterSlope, + RequiredSafetyFactorPiping = scenarioRecord.SafetyFactorPiping, + UpliftCriterionPiping = scenarioRecord.UpliftCriterionPiping, + UpliftCriterionStability = scenarioRecord.UpliftCriterionStability + }, }; var locationRecord = LocationRecords.FirstOrDefault(l => l.LocationId == scenarioRecord.LocationId); // set values in scenario (1 from scenariorecord, 2 from locationrecord, 3 default) Index: DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Scenario.cs =================================================================== diff -u -r2573 -r2576 --- DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Scenario.cs (.../Scenario.cs) (revision 2573) +++ DamClients/DamUI/trunk/src/DamClientsLibrary/Deltares.Dam.Data/Scenario.cs (.../Scenario.cs) (revision 2576) @@ -135,6 +135,7 @@ ClearResults(); ClearErrors(); ClearstabilityUpliftSituations(); + ModelFactors = new ModelFactors(); } /// @@ -278,11 +279,11 @@ [Description("Required safety factor stability inner slope")] public double? RequiredSafetyFactorStabilityInnerSlope { - get { return RequiredSafetyFactorStabilityInnerSlope; } + get { return ModelFactors.RequiredSafetyFactorStabilityInnerSlope; } set { DataEventPublisher.BeforeChange(this, ExpressionRequiredSafetyFactorStabilityInnerSlope); - RequiredSafetyFactorStabilityInnerSlope = value; + ModelFactors.RequiredSafetyFactorStabilityInnerSlope = value; DataEventPublisher.AfterChange(this, ExpressionRequiredSafetyFactorStabilityInnerSlope); } } @@ -299,11 +300,11 @@ [Description("Required safety factor stability outer slope")] public double? RequiredSafetyFactorStabilityOuterSlope { - get { return RequiredSafetyFactorStabilityOuterSlope; } + get { return ModelFactors.RequiredSafetyFactorStabilityOuterSlope; } set { DataEventPublisher.BeforeChange(this, ExpressionRequiredSafetyFactorStabilityOuterSlope); - RequiredSafetyFactorStabilityOuterSlope = value; + ModelFactors.RequiredSafetyFactorStabilityOuterSlope = value; DataEventPublisher.AfterChange(this, ExpressionRequiredSafetyFactorStabilityOuterSlope); } } @@ -320,11 +321,11 @@ [Description("Required safety factor piping")] public double? RequiredSafetyFactorPiping { - get { return RequiredSafetyFactorPiping; } + get { return ModelFactors.RequiredSafetyFactorPiping; } set { DataEventPublisher.BeforeChange(this, ExpressionRequiredSafetyFactorPiping); - RequiredSafetyFactorPiping = value; + ModelFactors.RequiredSafetyFactorPiping = value; DataEventPublisher.AfterChange(this, ExpressionRequiredSafetyFactorPiping); } } @@ -341,11 +342,11 @@ [Description("Uplift criterion piping")] public double? UpliftCriterionPiping { - get { return UpliftCriterionPiping; } + get { return ModelFactors.UpliftCriterionPiping; } set { DataEventPublisher.BeforeChange(this, ExpressionUpliftCriterionPiping); - UpliftCriterionPiping = value; + ModelFactors.UpliftCriterionPiping = value; DataEventPublisher.AfterChange(this, ExpressionUpliftCriterionPiping); } } @@ -362,11 +363,11 @@ [Description("Uplift criterion stability")] public double? UpliftCriterionStability { - get { return UpliftCriterionStability; } + get { return ModelFactors.UpliftCriterionStability; } set { DataEventPublisher.BeforeChange(this, ExpressionUpliftCriterionStability); - UpliftCriterionStability = value; + ModelFactors.UpliftCriterionStability = value; DataEventPublisher.AfterChange(this, ExpressionUpliftCriterionStability); } } @@ -589,6 +590,9 @@ } } + [Browsable(false)] + public ModelFactors ModelFactors { get; set; } + /// Aggregation relationship. [Browsable(false)] public Location Location @@ -598,6 +602,339 @@ } /// + /// Get uplift criterion for this scenario; return default value if not available + /// + /// default value if not available + /// uplift criterion for this scenario + public double GetUpliftCriterionStability(double? defaultUpliftCriterionStability) + { + if ((defaultUpliftCriterionStability == null) && (ModelFactors.UpliftCriterionStability == null)) + { + throw new ScenarioException(String.Format(LocalizationManager.GetTranslatedText(this, "NoUpliftCriterionForStability"), Location.Name, ToString())); + + } + return (ModelFactors.UpliftCriterionStability == null ? defaultUpliftCriterionStability.Value + : ModelFactors.UpliftCriterionStability.Value); + } + + /// + /// 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) + { + if ((defaultUpliftCriterionPiping == null) && (ModelFactors.UpliftCriterionPiping == null)) + { + throw new ScenarioException(String.Format(LocalizationManager.GetTranslatedText(this, "NoUpliftCriterionForPiping"), Location.Name, ToString())); + } + return (ModelFactors.UpliftCriterionPiping == null ? defaultUpliftCriterionPiping.Value : ModelFactors.UpliftCriterionPiping.Value); + } + + /// + /// 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) + { + if ((defaultRequiredSafetyFactorPiping == null) && (ModelFactors.RequiredSafetyFactorPiping == null)) + { + throw new ScenarioException(String.Format(LocalizationManager.GetTranslatedText(this, "NoRequiredSafetyFactorPiping"), Location.Name, ToString())); + } + return (ModelFactors.RequiredSafetyFactorPiping == null ? defaultRequiredSafetyFactorPiping.Value : ModelFactors.RequiredSafetyFactorPiping.Value); + } + + /// + /// Determines whether [is pl line offset factor below shoulder crest valid]. + /// + /// + [Validate] + public ValidationResult[] IsPlLineOffsetFactorBelowShoulderCrestValid() + { + if (UsePlLineOffsetFactorBelowShoulderCrest.HasValue && UsePlLineOffsetFactorBelowShoulderCrest.Value && + PlLineOffsetFactorBelowShoulderCrest.HasValue) + { + if (PlLineOffsetFactorBelowShoulderCrest.Value < DamGlobalConstants.PlLineOffsetFactorBelowShoulderCrestMinValue) + { + return new[] + { + new ValidationResult(ValidationResultType.Error, + LocalizationManager.GetTranslatedText(this, "PlLineOffsetFactorBelowShoulderCrestTooSmall"), + this, "PlLineOffsetFactorBelowShoulderCrest", "AssignMinValue", (IRepairer) this) + }; + } + if (PlLineOffsetFactorBelowShoulderCrest.Value > DamGlobalConstants.PlLineOffsetFactorBelowShoulderCrestMaxValue) + { + return new[] + { + new ValidationResult(ValidationResultType.Error, + LocalizationManager.GetTranslatedText(this, "PlLineOffsetFactorBelowShoulderCrestTooLarge"), + this, "PlLineOffsetFactorBelowShoulderCrest", "AssignMaxValue", (IRepairer) this) + }; + } + } + return new ValidationResult[0]; + } + + /// + /// Get stability uplift situation + /// + /// + /// + private UpliftSituation? GetStabilityUpliftSituation(Object objectAsKey) + { + return objectAsKey != null && stabilityUpliftSituations.ContainsKey(objectAsKey) ? stabilityUpliftSituations[objectAsKey] : null; + } + + /// + /// Get stability uplift situation + /// + /// + /// + /// + public UpliftSituation? GetStabilityUpliftSituation(SoilProfile1D soilProfile, string soilGeometry2DName) + { + Object objectAsKey = GetObjectAsKey(soilProfile, soilGeometry2DName); + return GetStabilityUpliftSituation(objectAsKey); + } + + /// + /// Set stability uplift situation + /// + /// + /// + private void SetStabilityUpliftSituation(Object objectAsKey, UpliftSituation upliftSituation) + { + stabilityUpliftSituations[objectAsKey] = upliftSituation; + } + + /// + /// Set stability uplift situation + /// + /// + /// + /// + public void SetStabilityUpliftSituation(SoilProfile1D soilProfile, string soilGeometry2DName, UpliftSituation upliftSituation) + { + Object objectAsKey = GetObjectAsKey(soilProfile, soilGeometry2DName); + SetStabilityUpliftSituation(objectAsKey, upliftSituation); + } + + /// + /// Get PipingResults + /// + /// + /// + private PipingResults? GetPipingResults(Object objectAsKey) + { + if (objectAsKey != null) + { + return pipingResults.ContainsKey(objectAsKey) ? pipingResults[objectAsKey] : null; + } + return null; + } + + /// + /// Get PipingResults + /// + /// + /// + /// + public PipingResults? GetPipingResults(SoilProfile1D soilProfile, string soilGeometry2DName) + { + Object objectAsKey = GetObjectAsKey(soilProfile, soilGeometry2DName); + return GetPipingResults(objectAsKey); + } + + /// + /// Set PipingResults + /// + /// + /// + private void SetPipingResults(Object objectAsKey, PipingResults? pipingResults) + { + this.pipingResults[objectAsKey] = pipingResults; + } + + /// + /// Set PipingResults + /// + /// + /// + /// + public void SetPipingResults(SoilProfile1D soilProfile, string soilGeometry2DName, PipingResults? pipingResults) + { + Object objectAsKey = GetObjectAsKey(soilProfile, soilGeometry2DName); + SetPipingResults(objectAsKey, pipingResults); + } + + /// + /// Get Safety Factor Piping + /// + /// + /// + private double? GetSafetyFactorPiping(Object objectAsKey) + { + if (objectAsKey != null) + { + return safetyFactorsPiping.ContainsKey(objectAsKey) ? safetyFactorsPiping[objectAsKey] : null; + } + return null; + } + + /// + /// Get Safety Factor Piping + /// + /// + /// + /// + public double? GetSafetyFactorPiping(SoilProfile1D soilProfile, string soilGeometry2DName) + { + Object objectAsKey = GetObjectAsKey(soilProfile, soilGeometry2DName); + return GetSafetyFactorPiping(objectAsKey); + } + + /// + /// Get Result Message + /// + /// + /// + private string GetResultMessage(Object objectAsKey) + { + if (objectAsKey != null) + { + return resultMessages.ContainsKey(objectAsKey) ? resultMessages[objectAsKey] : null; + } + return null; + } + + /// + /// Get Result Message + /// + /// + /// + /// + public string GetResultMessage(SoilProfile1D soilProfile, string soilGeometry2DName) + { + Object objectAsKey = GetObjectAsKey(soilProfile, soilGeometry2DName); + return GetResultMessage(objectAsKey); + } + + /// + /// Set Result Message + /// + /// + /// + private void SetResultMessage(Object objectAsKey, string resultMessage) + { + resultMessages[objectAsKey] = resultMessage; + } + + /// + /// Set Result Message + /// + /// + /// + /// + public void SetResultMessage(SoilProfile1D soilProfile, string soilGeometry2DName, string resultMessage) + { + Object objectAsKey = GetObjectAsKey(soilProfile, soilGeometry2DName); + SetResultMessage(objectAsKey, resultMessage); + } + + /// + /// Get Redesigned surfaceline + /// + /// + /// + private SurfaceLine2 GetRedesignedSurfaceLine(Object objectAsKey) + { + if (objectAsKey != null) + { + return redesignedSurfaceLines.ContainsKey(objectAsKey) ? redesignedSurfaceLines[objectAsKey] : null; + } + return null; + } + + /// + /// Get Redesigned surfaceline + /// + /// + /// + /// + public SurfaceLine2 GetRedesignedSurfaceLine(SoilProfile1D soilProfile, string soilGeometry2DName) + { + Object objectAsKey = GetObjectAsKey(soilProfile, soilGeometry2DName); + return GetRedesignedSurfaceLine(objectAsKey); + } + + /// + /// Set Redesigned surfaceline + /// + /// + /// + private void SetRedesignedSurfaceLine(Object objectAsKey, SurfaceLine2 surfaceLine) + { + redesignedSurfaceLines[objectAsKey] = surfaceLine; + } + + /// + /// Set Redesigned surfaceline + /// + /// + /// + /// + public void SetRedesignedSurfaceLine(SoilProfile1D soilProfile, string soilGeometry2DName, SurfaceLine2 surfaceLine) + { + Object objectAsKey = GetObjectAsKey(soilProfile, soilGeometry2DName); + SetRedesignedSurfaceLine(objectAsKey, surfaceLine); + } + + /// + /// Get Most recent surfaceline + /// + /// + /// + private SurfaceLine2 GetMostRecentSurfaceLine(Object objectAsKey) + { + if (objectAsKey != null) + { + return redesignedSurfaceLines.ContainsKey(objectAsKey) ? redesignedSurfaceLines[objectAsKey] ?? Location.LocalXZSurfaceLine2 : Location.LocalXZSurfaceLine2; + } + return null; + } + + /// + /// Get Most recent surfaceline + /// + /// + /// + /// + public SurfaceLine2 GetMostRecentSurfaceLine(SoilProfile soilProfile, string soilGeometry2DName) + { + var profile1D = soilProfile as SoilProfile1D; + Object objectAsKey = GetObjectAsKey(profile1D, soilGeometry2DName); + return GetMostRecentSurfaceLine(objectAsKey); + } + + /// + /// Determine object key based on either 1d-soilprofile or 2d-geometry + /// + /// + /// + /// + /// + private Object GetObjectAsKey(SoilProfile1D soilProfile, string soilGeometry2DName) + { + if (soilProfile != null) + { + return soilProfile; + } + return soilGeometry2DName; + } + + /// /// Implementation of ToString /// /// @@ -607,10 +944,10 @@ Location.Name, LocationScenarioID, RiverLevel, RiverLevelLow.HasValue ? RiverLevelLow.Value.ToString(CultureInfo.InvariantCulture) : "?", DikeTableHeight.HasValue ? DikeTableHeight.Value.ToString(CultureInfo.InvariantCulture) : "?", - RequiredSafetyFactorStabilityInnerSlope.HasValue ? - RequiredSafetyFactorStabilityInnerSlope.Value.ToString(CultureInfo.InvariantCulture) : "?", - RequiredSafetyFactorStabilityOuterSlope.HasValue ? - RequiredSafetyFactorStabilityOuterSlope.Value.ToString(CultureInfo.InvariantCulture) : "?", + ModelFactors.RequiredSafetyFactorStabilityInnerSlope.HasValue ? + ModelFactors.RequiredSafetyFactorStabilityInnerSlope.Value.ToString(CultureInfo.InvariantCulture) : "?", + ModelFactors.RequiredSafetyFactorStabilityOuterSlope.HasValue ? + ModelFactors.RequiredSafetyFactorStabilityOuterSlope.Value.ToString(CultureInfo.InvariantCulture) : "?", PlLineOffsetBelowDikeTopAtRiver.ToString(CultureInfo.InvariantCulture), PlLineOffsetBelowDikeToeAtPolder.ToString(CultureInfo.InvariantCulture), PlLineOffsetBelowDikeTopAtPolder.ToString(CultureInfo.InvariantCulture), @@ -645,26 +982,29 @@ { nameValuePairs.Add(ScenarioParameterNames.DikeTableHeight, DikeTableHeight.Value.ToString(numberFormatInfo)); } - if (RequiredSafetyFactorStabilityInnerSlope != null) + if (ModelFactors != null) { - nameValuePairs.Add(ScenarioParameterNames.RequiredSafetyFactorStabilityInnerSlope, RequiredSafetyFactorStabilityInnerSlope.Value.ToString(numberFormatInfo)); + if (ModelFactors.RequiredSafetyFactorStabilityInnerSlope != null) + { + nameValuePairs.Add(ScenarioParameterNames.RequiredSafetyFactorStabilityInnerSlope, ModelFactors.RequiredSafetyFactorStabilityInnerSlope.Value.ToString(numberFormatInfo)); + } + if (ModelFactors.RequiredSafetyFactorStabilityOuterSlope != null) + { + nameValuePairs.Add(ScenarioParameterNames.RequiredSafetyFactorStabilityOuterSlope, ModelFactors.RequiredSafetyFactorStabilityOuterSlope.Value.ToString(numberFormatInfo)); + } + if (ModelFactors.RequiredSafetyFactorPiping != null) + { + nameValuePairs.Add(ScenarioParameterNames.RequiredSafetyFactorPiping, ModelFactors.RequiredSafetyFactorPiping.Value.ToString(numberFormatInfo)); + } + if (ModelFactors.UpliftCriterionPiping != null) + { + nameValuePairs.Add(ScenarioParameterNames.UpliftCriterionPiping, ModelFactors.UpliftCriterionPiping.Value.ToString(numberFormatInfo)); + } + if (ModelFactors.UpliftCriterionStability != null) + { + nameValuePairs.Add(ScenarioParameterNames.UpliftCriterionStability, ModelFactors.UpliftCriterionStability.Value.ToString(numberFormatInfo)); + } } - if (RequiredSafetyFactorStabilityOuterSlope != null) - { - nameValuePairs.Add(ScenarioParameterNames.RequiredSafetyFactorStabilityOuterSlope, RequiredSafetyFactorStabilityOuterSlope.Value.ToString(numberFormatInfo)); - } - if (RequiredSafetyFactorPiping != null) - { - nameValuePairs.Add(ScenarioParameterNames.RequiredSafetyFactorPiping, RequiredSafetyFactorPiping.Value.ToString(numberFormatInfo)); - } - if (UpliftCriterionPiping != null) - { - nameValuePairs.Add(ScenarioParameterNames.UpliftCriterionPiping, UpliftCriterionPiping.Value.ToString(numberFormatInfo)); - } - if (UpliftCriterionStability != null) - { - nameValuePairs.Add(ScenarioParameterNames.UpliftCriterionStability, UpliftCriterionStability.Value.ToString(numberFormatInfo)); - } nameValuePairs.Add(ScenarioParameterNames.PlLineOffsetBelowDikeTopAtRiver, PlLineOffsetBelowDikeTopAtRiver.ToString(numberFormatInfo)); nameValuePairs.Add(ScenarioParameterNames.PlLineOffsetBelowDikeTopAtPolder, PlLineOffsetBelowDikeTopAtPolder.ToString(numberFormatInfo)); nameValuePairs.Add(ScenarioParameterNames.PlLineOffsetBelowShoulderBaseInside, PlLineOffsetBelowShoulderBaseInside.ToString(numberFormatInfo)); @@ -709,15 +1049,15 @@ if (parameterName.Equals(ScenarioParameterNames.DikeTableHeight)) DikeTableHeight = Convert.ToDouble(parameterValue, numberFormatInfo); if (parameterName.Equals(ScenarioParameterNames.RequiredSafetyFactorStabilityInnerSlope)) - RequiredSafetyFactorStabilityInnerSlope = Convert.ToDouble(parameterValue, numberFormatInfo); + ModelFactors.RequiredSafetyFactorStabilityInnerSlope = Convert.ToDouble(parameterValue, numberFormatInfo); if (parameterName.Equals(ScenarioParameterNames.RequiredSafetyFactorStabilityOuterSlope)) - RequiredSafetyFactorStabilityOuterSlope = Convert.ToDouble(parameterValue, numberFormatInfo); + ModelFactors.RequiredSafetyFactorStabilityOuterSlope = Convert.ToDouble(parameterValue, numberFormatInfo); if (parameterName.Equals(ScenarioParameterNames.RequiredSafetyFactorPiping)) - RequiredSafetyFactorPiping = Convert.ToDouble(parameterValue, numberFormatInfo); + ModelFactors.RequiredSafetyFactorPiping = Convert.ToDouble(parameterValue, numberFormatInfo); if (parameterName.Equals(ScenarioParameterNames.UpliftCriterionPiping)) - UpliftCriterionPiping = Convert.ToDouble(parameterValue, numberFormatInfo); + ModelFactors.UpliftCriterionPiping = Convert.ToDouble(parameterValue, numberFormatInfo); if (parameterName.Equals(ScenarioParameterNames.UpliftCriterionStability)) - UpliftCriterionStability = Convert.ToDouble(parameterValue, numberFormatInfo); + ModelFactors.UpliftCriterionStability = Convert.ToDouble(parameterValue, numberFormatInfo); if (parameterName.Equals(ScenarioParameterNames.PlLineOffsetBelowDikeTopAtRiver)) PlLineOffsetBelowDikeTopAtRiver = Convert.ToDouble(parameterValue, numberFormatInfo); if (parameterName.Equals(ScenarioParameterNames.PlLineOffsetBelowDikeTopAtPolder))