//----------------------------------------------------------------------- // // Copyright (c) 2011 Deltares. All rights reserved. // // B.S.T.I.M. The // tom.the@deltares.nl // 23-06-2011 // Evaluate if uplift occurs //----------------------------------------------------------------------- namespace Deltares.Dam.Data { using System; using System.Collections.Generic; public class UpliftRWEvaluator : RWEvaluator { private DikeDrySensitivity dikeDrySensitivity = DikeDrySensitivity.None; private LoadSituation loadSituation = LoadSituation.Wet; private HydraulicShortcutType hydraulicShortcutType = HydraulicShortcutType.NoHydraulicShortcut; public UpliftRWEvaluator() { } public override Enum Evaluate(Location location, SoilGeometry soilGeometry, params Enum[] previousChoices) { base.Evaluate(location, soilGeometry, previousChoices); Dictionary choices = new Dictionary(); foreach (Enum enumValue in previousChoices) { if (enumValue != null) { choices[enumValue.GetType()] = enumValue; } } dikeDrySensitivity = (DikeDrySensitivity)choices[typeof(DikeDrySensitivity)]; loadSituation = (LoadSituation)choices[typeof(LoadSituation)]; hydraulicShortcutType = (HydraulicShortcutType) choices[typeof (HydraulicShortcutType)]; // determine uplift here double? upliftFactor = GetLowestUpliftFactor(); UpliftType upliftType = UpliftType.NoUplift; if (upliftFactor != null) { if (upliftFactor.Value < location.ModelFactors.UpliftCriterionStability) { return UpliftType.Uplift; } } return upliftType; } /// /// Create PL-lines /// /// private PLLines CreatePLLines() { PLLinesCreator plLinesCreator = new PLLinesCreator(); double waterLevel = GetBoezemLevel(); plLinesCreator.WaterLevelRiverHigh = waterLevel; plLinesCreator.HeadInPLLine2 = location.HeadPL2; plLinesCreator.HeadInPLLine3 = location.HeadPl3; plLinesCreator.HeadInPLLine4 = location.HeadPl4; plLinesCreator.SurfaceLine = location.LocalXZSurfaceLine2; plLinesCreator.WaterLevelPolder = location.PolderLevel; plLinesCreator.ModelParametersForPLLines = location.CreateModelParametersForPLLines(); plLinesCreator.SoilProfile = soilGeometry.SoilProfile; plLinesCreator.SoilGeometry2DName = null; plLinesCreator.SoilGeometryType = SoilGeometryType.SoilGeometry1D; plLinesCreator.GaugePLLines = null; plLinesCreator.Gauges = null; plLinesCreator.GaugeMissVal = 0.0; plLinesCreator.IsAdjustPL3AndPL4SoNoUpliftWillOccurEnabled = true; // for stability this must set to true plLinesCreator.PlLineOffsetBelowDikeTopAtRiver = location.PlLineOffsetBelowDikeTopAtRiver; plLinesCreator.PlLineOffsetBelowDikeTopAtPolder = location.PlLineOffsetBelowDikeTopAtPolder; plLinesCreator.SoilBaseDB = null; // soilbase; plLinesCreator.DikeEmbankmentMaterial = location.GetDikeEmbankmentSoil(); plLinesCreator.IsUseOvenDryUnitWeight = (dikeDrySensitivity == DikeDrySensitivity.Dry); plLinesCreator.IsHydraulicShortcut = (hydraulicShortcutType == HydraulicShortcutType.HydraulicShortcut); plLinesCreator.XSoilGeometry2DOrigin = location.XSoilGeometry2DOrigin; PLLines plLines = plLinesCreator.CreateAllPLLines(location); return plLines; } /// /// Determine boezemlevel according to loadsituation /// /// private double GetBoezemLevel() { double boezemLevel = 0.0; switch (loadSituation) { case LoadSituation.Wet: boezemLevel = location.BoezemLevelTp; break; case LoadSituation.Dry: boezemLevel = location.BoezemLevelHbp; break; } return boezemLevel; } /// /// Determine where lowest uplift factor occurs and the value of that factor /// /// private double? GetLowestUpliftFactor() { UpliftLocationDeterminator upliftLocationDeterminator = new UpliftLocationDeterminator() { SurfaceLine = location.LocalXZSurfaceLine2, SoilProfile = soilGeometry.SoilProfile, SoilGeometry2DName = null, SoilBaseDB = null, //soilbase, DikeEmbankmentMaterial = location.GetDikeEmbankmentSoil(), PLLines = CreatePLLines(), IsUseOvenDryUnitWeight = (dikeDrySensitivity == DikeDrySensitivity.Dry), XSoilGeometry2DOrigin = location.XSoilGeometry2DOrigin }; UpliftLocationAndResult upliftLocationAndResult = upliftLocationDeterminator.GetLocationAtWithLowestUpliftFactor(); if (upliftLocationAndResult != null) return upliftLocationAndResult.UpliftFactor; else return null; } } }