// Copyright (C) Stichting Deltares 2019. All rights reserved.
//
// This file is part of the Dam Engine.
//
// The Dam Engine is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
//
// All names, logos, and references to "Deltares" are registered trademarks of
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
using Deltares.DamEngine.Data.Standard;
using Deltares.DamEngine.Data.Standard.Validation;
namespace Deltares.DamEngine.Data.General
{
public class SheetPiling : IAssignable, ICloneable
{
public double XCoordinate { get; set; }
public double YCoordinate { get; set; }
public double ZCoordinate { get; set; }
public double Length { get; set; }
public void Assign(SheetPiling sheetPiling)
{
this.XCoordinate = sheetPiling.XCoordinate;
this.YCoordinate = sheetPiling.YCoordinate;
this.ZCoordinate = sheetPiling.ZCoordinate;
this.Length = sheetPiling.Length;
}
public SheetPiling Clone()
{
var sheetPiling = new SheetPiling();
sheetPiling.Assign(this);
return sheetPiling;
}
}
public class HorizontalBalanceArea : IAssignable, ICloneable
{
public double XLeft { get; set; }
public double XRight { get; set; }
public double YTop { get; set; }
public double YBottom { get; set; }
public int PlaneCount { get; set; }
public void Assign(HorizontalBalanceArea horizontalBalanceArea)
{
this.XLeft = horizontalBalanceArea.XLeft;
this.XRight = horizontalBalanceArea.XRight;
this.YTop = horizontalBalanceArea.YTop;
this.YBottom = horizontalBalanceArea.YBottom;
this.PlaneCount = horizontalBalanceArea.PlaneCount;
}
public HorizontalBalanceArea Clone()
{
var horizontalBalanceArea = new HorizontalBalanceArea();
horizontalBalanceArea.Assign(this);
return horizontalBalanceArea;
}
}
public class SlipCircleDefinition : IAssignable, ICloneable
{
private double xCoordinateLastUpliftPoint;
private int upliftVanLeftGridVerticalPointCount;
private double upliftVanTangentLinesDistance;
private double bishopTangentLinesDistance;
private double upliftVanLeftGridVerticalPointDistance;
private int upliftVanLeftGridHorizontalPointCount;
private double upliftVanLeftGridHorizontalPointDistance;
private int upliftVanRightGridVerticalPointCount;
private double upliftVanRightGridVerticalPointDistance;
private int upliftVanRightGridHorizontalPointCount;
private double upliftVanRightGridHorizontalPointDistance;
private int bishopGridHorizontalPointCount;
private double bishopGridHorizontalPointDistance;
private int bishopGridVerticalPointCount;
private double bishopGridVerticalPointDistance;
public double XCoordinateLastUpliftPoint
{
get
{
return xCoordinateLastUpliftPoint;
}
set
{
xCoordinateLastUpliftPoint = value;
}
}
public TangentLinesDefinition UpliftVanTangentLinesDefinition { get; set; }
public double UpliftVanTangentLinesDistance
{
get
{
return upliftVanTangentLinesDistance;
}
set
{
upliftVanTangentLinesDistance = value;
}
}
public TangentLinesDefinition BishopTangentLinesDefinition { get; set; }
public double BishopTangentLinesDistance
{
get
{
return bishopTangentLinesDistance;
}
set
{
bishopTangentLinesDistance = value;
}
}
public GridSizeDetermination GridSizeDetermination { get; set; }
public int UpliftVanLeftGridVerticalPointCount
{
get
{
return upliftVanLeftGridVerticalPointCount;
}
set
{
upliftVanLeftGridVerticalPointCount = value;
}
}
public double UpliftVanLeftGridVerticalPointDistance
{
get
{
return upliftVanLeftGridVerticalPointDistance;
}
set
{
upliftVanLeftGridVerticalPointDistance = value;
}
}
public int UpliftVanLeftGridHorizontalPointCount
{
get
{
return upliftVanLeftGridHorizontalPointCount;
}
set
{
upliftVanLeftGridHorizontalPointCount = value;
}
}
public double UpliftVanLeftGridHorizontalPointDistance
{
get
{
return upliftVanLeftGridHorizontalPointDistance;
}
set
{
upliftVanLeftGridHorizontalPointDistance = value;
}
}
public int UpliftVanRightGridVerticalPointCount
{
get
{
return upliftVanRightGridVerticalPointCount;
}
set
{
upliftVanRightGridVerticalPointCount = value;
}
}
public double UpliftVanRightGridVerticalPointDistance
{
get
{
return upliftVanRightGridVerticalPointDistance;
}
set
{
upliftVanRightGridVerticalPointDistance = value;
}
}
public int UpliftVanRightGridHorizontalPointCount
{
get
{
return upliftVanRightGridHorizontalPointCount;
}
set
{
upliftVanRightGridHorizontalPointCount = value;
}
}
public double UpliftVanRightGridHorizontalPointDistance
{
get
{
return upliftVanRightGridHorizontalPointDistance;
}
set
{
upliftVanRightGridHorizontalPointDistance = value;
}
}
public int BishopGridVerticalPointCount
{
get
{
return bishopGridVerticalPointCount;
}
set
{
bishopGridVerticalPointCount = value;
}
}
public double BishopGridVerticalPointDistance
{
get
{
return bishopGridVerticalPointDistance;
}
set
{
bishopGridVerticalPointDistance = value;
}
}
public int BishopGridHorizontalPointCount
{
get
{
return bishopGridHorizontalPointCount;
}
set
{
bishopGridHorizontalPointCount = value;
}
}
public double BishopGridHorizontalPointDistance
{
get
{
return bishopGridHorizontalPointDistance;
}
set
{
bishopGridHorizontalPointDistance = value;
}
}
public DamFailureMechanismeCalculationSpecification Specification { get; set; }
public void Assign(SlipCircleDefinition slipCircleDefinition)
{
this.XCoordinateLastUpliftPoint = slipCircleDefinition.XCoordinateLastUpliftPoint;
this.UpliftVanTangentLinesDefinition = slipCircleDefinition.UpliftVanTangentLinesDefinition;
this.UpliftVanTangentLinesDistance = slipCircleDefinition.UpliftVanTangentLinesDistance;
this.BishopTangentLinesDefinition = slipCircleDefinition.BishopTangentLinesDefinition;
this.BishopTangentLinesDistance = slipCircleDefinition.BishopTangentLinesDistance;
this.GridSizeDetermination = slipCircleDefinition.GridSizeDetermination;
this.UpliftVanLeftGridVerticalPointCount = slipCircleDefinition.UpliftVanLeftGridVerticalPointCount;
this.UpliftVanLeftGridVerticalPointDistance = slipCircleDefinition.UpliftVanLeftGridVerticalPointDistance;
this.UpliftVanLeftGridHorizontalPointCount = slipCircleDefinition.UpliftVanLeftGridHorizontalPointCount;
this.UpliftVanLeftGridHorizontalPointDistance = slipCircleDefinition.UpliftVanLeftGridHorizontalPointDistance;
this.UpliftVanRightGridVerticalPointCount = slipCircleDefinition.UpliftVanRightGridVerticalPointCount;
this.UpliftVanRightGridVerticalPointDistance = slipCircleDefinition.UpliftVanRightGridVerticalPointDistance;
this.UpliftVanRightGridHorizontalPointCount = slipCircleDefinition.UpliftVanRightGridHorizontalPointCount;
this.UpliftVanRightGridHorizontalPointDistance = slipCircleDefinition.UpliftVanRightGridHorizontalPointDistance;
this.BishopGridVerticalPointCount = slipCircleDefinition.BishopGridVerticalPointCount;
this.BishopGridVerticalPointDistance = slipCircleDefinition.BishopGridVerticalPointDistance;
this.BishopGridHorizontalPointCount = slipCircleDefinition.BishopGridHorizontalPointCount;
this.BishopGridHorizontalPointDistance = slipCircleDefinition.BishopGridHorizontalPointDistance;
}
public SlipCircleDefinition Clone()
{
var slipCircleDefinition = new SlipCircleDefinition();
slipCircleDefinition.Assign(this);
return slipCircleDefinition;
}
}
public class MStabZoneAreas : IAssignable, ICloneable
{
public double DikeTableHeight { get; set; }
public double DikeTableWidth { get; set; }
public double XCoordinateDikeTopAtRiver { get; set; }
public double XCoordinateDikeTopAtPolder { get; set; }
public double XCoordinateStartRestProfile { get; set; }
public double SafetyFactorZone1A { get; set; }
public double SafetyFactorZone1B { get; set; }
public void Assign(MStabZoneAreas mstabZoneAreas)
{
this.DikeTableHeight = mstabZoneAreas.DikeTableHeight;
this.DikeTableWidth = mstabZoneAreas.DikeTableWidth;
this.XCoordinateDikeTopAtRiver = mstabZoneAreas.XCoordinateDikeTopAtRiver;
this.XCoordinateDikeTopAtPolder = mstabZoneAreas.XCoordinateDikeTopAtPolder;
this.XCoordinateStartRestProfile = mstabZoneAreas.XCoordinateStartRestProfile;
this.SafetyFactorZone1A = mstabZoneAreas.SafetyFactorZone1A;
this.SafetyFactorZone1B = mstabZoneAreas.SafetyFactorZone1B;
}
public MStabZoneAreas Clone()
{
var mstabZoneAreas = new MStabZoneAreas();
mstabZoneAreas.Assign(this);
return mstabZoneAreas;
}
}
public class MStabForbiddenZone : IAssignable, ICloneable
{
public bool IsXEntryMinUsed { get; set; }
public bool IsXEntryMaxUsed { get; set; }
public double XEntryMin { get; set; }
public double XEntryMax { get; set; }
public void Assign(MStabForbiddenZone mstabForbiddenZone)
{
this.IsXEntryMinUsed = mstabForbiddenZone.IsXEntryMinUsed;
this.IsXEntryMaxUsed = mstabForbiddenZone.IsXEntryMaxUsed;
this.XEntryMin = mstabForbiddenZone.XEntryMin;
this.XEntryMax = mstabForbiddenZone.XEntryMax;
}
public MStabForbiddenZone Clone()
{
var mstabForbiddenZone = new MStabForbiddenZone();
mstabForbiddenZone.Assign(this);
return mstabForbiddenZone;
}
}
public class MStabGeometryCreationOptions : IAssignable, ICloneable
{
public MStabGeometryCreationOptions()
{
SoilProfileType = SoilProfileType.ProfileType1D;
SoilGeometry2DFilename = "";
XOffsetSoilGeometry2DOrigin = 0.0;
MaterialForDike = "";
MaterialForShoulder = "";
IsUseOriginalPlLineAssignments = false;
IsUseOriginalCalculationOptions = false;
PlLineAssignment = PlLineAssignment.ExpertKnowledge;
IntrusionVerticalWaterPressureType = IntrusionVerticalWaterPressureType.Standard;
PenetrationLength = 0.0;
IsDesign = false;
}
public SoilProfileType SoilProfileType { get; set; }
public string SoilGeometry2DFilename { get; set; }
public double XOffsetSoilGeometry2DOrigin { get; set; }
public string MaterialForDike { get; set; }
public string MaterialForShoulder { get; set; }
public bool IsUseOriginalPlLineAssignments { get; set; }
public bool IsUseOriginalCalculationOptions { get; set; }
public PlLineAssignment PlLineAssignment { get; set; }
public IntrusionVerticalWaterPressureType IntrusionVerticalWaterPressureType { get; set; }
public double PenetrationLength { get; set; }
public bool IsDesign { get; set; }
public void Assign(MStabGeometryCreationOptions mstabGeometryCreationOptions)
{
this.SoilProfileType = mstabGeometryCreationOptions.SoilProfileType;
this.SoilGeometry2DFilename = mstabGeometryCreationOptions.SoilGeometry2DFilename;
this.XOffsetSoilGeometry2DOrigin = mstabGeometryCreationOptions.XOffsetSoilGeometry2DOrigin;
this.MaterialForDike = mstabGeometryCreationOptions.MaterialForDike;
this.MaterialForShoulder = mstabGeometryCreationOptions.MaterialForShoulder;
this.IsUseOriginalPlLineAssignments = mstabGeometryCreationOptions.IsUseOriginalPlLineAssignments;
this.IsUseOriginalCalculationOptions = mstabGeometryCreationOptions.IsUseOriginalCalculationOptions;
this.PlLineAssignment = mstabGeometryCreationOptions.PlLineAssignment;
this.IntrusionVerticalWaterPressureType = mstabGeometryCreationOptions.IntrusionVerticalWaterPressureType;
this.PenetrationLength = mstabGeometryCreationOptions.PenetrationLength;
this.IsDesign = mstabGeometryCreationOptions.IsDesign;
}
public MStabGeometryCreationOptions Clone()
{
var mstabGeometryCreationOptions = new MStabGeometryCreationOptions();
mstabGeometryCreationOptions.Assign(this);
return mstabGeometryCreationOptions;
}
}
public class MStabCalculationOptions : IAssignable, ICloneable
{
public double MinimalCircleDepth { get; set; }
public MStabZonesType ZonesType { get; set; }
public void Assign(MStabCalculationOptions mstabCalculationOptions)
{
this.MinimalCircleDepth = mstabCalculationOptions.MinimalCircleDepth;
this.ZonesType = mstabCalculationOptions.ZonesType;
}
public MStabCalculationOptions Clone()
{
var mstabCalculationOptions = new MStabCalculationOptions();
mstabCalculationOptions.Assign(this);
return mstabCalculationOptions;
}
}
public class MStabParameters : ICloneable
{
private MStabGridPosition gridPosition;
public MStabParameters()
{
this.IsCalculateAllStabilityProjectsAtOnce = true;
this.IsOverrulePlLineCreationMethod = false;
this.PlLineCreationMethod = PlLineCreationMethod.ExpertKnowledgeRRD;
this.Model = MStabModelType.Bishop;
this.SearchMethod = MStabSearchMethod.Grid;
this.ZoneAreas = null;
this.gridPosition = MStabGridPosition.Right;
this.CalculationOptions = new MStabCalculationOptions();
this.GeometryCreationOptions = new MStabGeometryCreationOptions();
this.SheetPiling = null;
this.HorizontalBalanceArea = new HorizontalBalanceArea();
this.SlipCircleDefinition = new SlipCircleDefinition();
}
public bool IsCombinedBishopUpliftVanCalculation { get { return (Model == MStabModelType.BishopUpliftVan); } }
// IsCombinedBishopUpliftVanCalculation (formerly IsAutoSelectCalculation) is the same as Model == MStabModel.BishopUpliftVan
// This property was first implemented for FewsDam and later MStabModel.BishopUpliftVan was implemented for normal DAM operation
// Now we will use Model == MStabModel.BishopUpliftVan for both FewsDam and DAM
// This readonly property is implemented for backward compatibiity
public bool IsCalculateAllStabilityProjectsAtOnce { get; set; }
// Normally PLLine creation is specified per location.
// If IsOverrulePLLineCreationMethod is set to true the settings in the locations will be
// overruled with the value in PLLineCreationMethod
public bool IsOverrulePlLineCreationMethod { get; set; }
public PlLineCreationMethod PlLineCreationMethod { get; set; }
public MStabModelType Model { get; set; }
public MStabShearStrength ShearStrength { get; set; }
public MStabSearchMethod SearchMethod { get; set; }
public bool IsProbabilistic { get; set; }
public string ProjectFileName { get; set; }
public string SoilDatabaseName { get; set; }
public MStabZoneAreas ZoneAreas { get; set; }
public MStabForbiddenZone ForbiddenZone { get; set; }
public MStabGeometryCreationOptions GeometryCreationOptions { get; set; }
public SheetPiling SheetPiling { get; set; }
public HorizontalBalanceArea HorizontalBalanceArea { get; set; }
[Validate]
public SlipCircleDefinition SlipCircleDefinition { get; set; }
public MStabCalculationOptions CalculationOptions { get; set; }
public MStabGridPosition GridPosition
{
get { return gridPosition; }
set
{
gridPosition = value;
}
}
public void Assign(MStabParameters mstabParameters)
{
this.Model = mstabParameters.Model;
this.ShearStrength = mstabParameters.ShearStrength;
this.SearchMethod = mstabParameters.SearchMethod;
this.IsProbabilistic = mstabParameters.IsProbabilistic;
this.GridPosition = mstabParameters.GridPosition;
this.ProjectFileName = mstabParameters.ProjectFileName;
this.SoilDatabaseName = mstabParameters.SoilDatabaseName;
if (this.ZoneAreas != null)
{
this.ZoneAreas.Assign(mstabParameters.ZoneAreas);
}
else
{
this.ZoneAreas = null;
}
if (this.ForbiddenZone != null)
{
this.ForbiddenZone.Assign(mstabParameters.ForbiddenZone);
}
else
{
this.ForbiddenZone = null;
}
if (this.CalculationOptions != null)
{
this.CalculationOptions.Assign(mstabParameters.CalculationOptions);
}
else
{
this.CalculationOptions = null;
}
if (this.GeometryCreationOptions != null)
{
this.GeometryCreationOptions.Assign(mstabParameters.GeometryCreationOptions);
}
else
{
this.GeometryCreationOptions = null;
}
if (this.SheetPiling != null)
{
this.SheetPiling.Assign(mstabParameters.SheetPiling);
}
else
{
this.SheetPiling = null;
}
if (this.HorizontalBalanceArea != null)
{
this.HorizontalBalanceArea.Assign(mstabParameters.HorizontalBalanceArea);
}
else
{
this.HorizontalBalanceArea = null;
}
this.SoilDatabaseName = mstabParameters.SoilDatabaseName;
if (this.SlipCircleDefinition != null)
{
this.SlipCircleDefinition.Assign(mstabParameters.SlipCircleDefinition);
}
else
{
this.SlipCircleDefinition = null;
}
}
public MStabZonesType ZonesType
{
get { return this.CalculationOptions.ZonesType; }
set { this.CalculationOptions.ZonesType = value; }
}
public MStabParameters Clone()
{
var mstabParameters = new MStabParameters();
if (this.ZoneAreas != null)
mstabParameters.ZoneAreas = this.ZoneAreas.Clone();
if (this.ForbiddenZone != null)
mstabParameters.ForbiddenZone = this.ForbiddenZone.Clone();
if (this.GeometryCreationOptions != null)
mstabParameters.GeometryCreationOptions = this.GeometryCreationOptions.Clone();
if (this.SheetPiling != null)
mstabParameters.SheetPiling = this.SheetPiling.Clone();
if (this.HorizontalBalanceArea != null)
mstabParameters.HorizontalBalanceArea = this.HorizontalBalanceArea.Clone();
if (this.SlipCircleDefinition != null)
mstabParameters.SlipCircleDefinition = this.SlipCircleDefinition.Clone();
if (this.CalculationOptions != null)
mstabParameters.CalculationOptions = this.CalculationOptions.Clone();
mstabParameters.Assign(this);
return mstabParameters;
}
}
}