Soil anchor was added
This commit is contained in:
@@ -23,5 +23,6 @@
|
|||||||
public static string ErrorOfExuting => "#0017: Error of executing";
|
public static string ErrorOfExuting => "#0017: Error of executing";
|
||||||
public static string ExpectedWas(System.Type expected, System.Type was) => $"{DataIsInCorrect}: Expected {expected}, but was {was}";
|
public static string ExpectedWas(System.Type expected, System.Type was) => $"{DataIsInCorrect}: Expected {expected}, but was {was}";
|
||||||
public static string ExpectedWas(System.Type expected, object obj) => ExpectedWas(expected, obj.GetType());
|
public static string ExpectedWas(System.Type expected, object obj) => ExpectedWas(expected, obj.GetType());
|
||||||
|
public static string NullReference => "#0018: Null reference";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,6 @@ namespace StructureHelperCommon.Models.Calculators
|
|||||||
/// True if result of calculation is valid
|
/// True if result of calculation is valid
|
||||||
/// </summary>
|
/// </summary>
|
||||||
bool IsValid { get; set; }
|
bool IsValid { get; set; }
|
||||||
string Description { get; set; }
|
string? Description { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
114
StructureHelperCommon/Models/Soils/AnchorCalculator.cs
Normal file
114
StructureHelperCommon/Models/Soils/AnchorCalculator.cs
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||||
|
using StructureHelperCommon.Models.Calculators;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelperCommon.Models.Soils
|
||||||
|
{
|
||||||
|
public class AnchorCalculator : ICalculator
|
||||||
|
{
|
||||||
|
private AnchorResult result;
|
||||||
|
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
public IAnchorSoilProperties Soil { get; set; }
|
||||||
|
public SoilAnchor Anchor { get; set; }
|
||||||
|
|
||||||
|
public IResult Result => result;
|
||||||
|
|
||||||
|
public Action<IResult> ActionToOutputResults { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
|
||||||
|
|
||||||
|
public AnchorCalculator(SoilAnchor soilAnchor, IAnchorSoilProperties anchorSoilProperties)
|
||||||
|
{
|
||||||
|
Anchor = soilAnchor;
|
||||||
|
Soil = anchorSoilProperties;
|
||||||
|
}
|
||||||
|
|
||||||
|
public object Clone()
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Run()
|
||||||
|
{
|
||||||
|
const double ratioFactor = 1.01d;
|
||||||
|
|
||||||
|
CheckParameters();
|
||||||
|
|
||||||
|
result = new() { IsValid = true };
|
||||||
|
|
||||||
|
var alpha = Math.PI / 180d * Anchor.AngleToHorizont;
|
||||||
|
var fi = Math.PI / 180d * Soil.FrictionAngle;
|
||||||
|
var sinFi = Math.Sin(fi);
|
||||||
|
|
||||||
|
double ksi0 = GetKsi();
|
||||||
|
|
||||||
|
var hk = Anchor.GroundLevel - Anchor.HeadLevel;
|
||||||
|
hk += Anchor.FreeLength * Math.Sin(alpha);
|
||||||
|
result.AnchorCenterLevel = hk;
|
||||||
|
|
||||||
|
var decrement = Math.Sqrt(Math.Pow(Math.Cos(alpha), 2) + Math.Pow(ksi0 * Math.Sin(alpha), 2));
|
||||||
|
var sigma0g = 0.5d * (Soil.VolumetricWeight * hk + Anchor.AdditionalSurfPressure) * (ksi0 + decrement);
|
||||||
|
result.AverageSidePressure = sigma0g;
|
||||||
|
|
||||||
|
var overA1 = (1 + Soil.PoissonRatio) * (sigma0g + Soil.Coheasion / Math.Tan(fi)) * sinFi;
|
||||||
|
var a1 = Soil.YoungsModulus / overA1;
|
||||||
|
|
||||||
|
double kp = GetKp(ratioFactor, sinFi, a1);
|
||||||
|
|
||||||
|
var charRak = Math.PI * Anchor.RootDiameter * Anchor.RootLength;
|
||||||
|
charRak *= 1 + sinFi;
|
||||||
|
charRak *= sigma0g * Math.Tan(fi) + Soil.Coheasion;
|
||||||
|
charRak *= kp * GetGammaC();
|
||||||
|
|
||||||
|
result.CharBearingCapacity = charRak;
|
||||||
|
result.DesignBearingCapacity = charRak / GetGammaN();
|
||||||
|
|
||||||
|
result.MortarVolumeFstStady = 0.5d * (Anchor.RootDiameter * Anchor.RootDiameter - Anchor.JetTubeDiameter * Anchor.JetTubeDiameter) * (1 + 3.1 * Anchor.WaterCementRatio) * Anchor.RootLength;
|
||||||
|
result.MortarVolumeSndStady = 0.5d * (Anchor.RootDiameter * Anchor.RootDiameter - Anchor.BoreHoleDiameter * Anchor.BoreHoleDiameter) * (1 + 3.1d * Anchor.WaterCementRatio) * Anchor.RootLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CheckParameters()
|
||||||
|
{
|
||||||
|
if (Anchor.RootDiameter < Anchor.BoreHoleDiameter)
|
||||||
|
{
|
||||||
|
throw new StructureHelperException(ErrorStrings.DataIsInCorrect + $": Diameter of root {Anchor.RootDiameter}m must be greater than diameter of borehole {Anchor.BoreHoleDiameter}m");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private double GetKp(double ratioFactor, double sinFi, double a1)
|
||||||
|
{
|
||||||
|
var tetta = sinFi / (1 + sinFi);
|
||||||
|
var kp = ratioFactor - Math.Pow(Anchor.BoreHoleDiameter / Anchor.RootDiameter, 2);
|
||||||
|
kp /= ratioFactor - a1 * a1 / (1 + a1 * a1);
|
||||||
|
kp = Math.Pow(kp, tetta);
|
||||||
|
return kp;
|
||||||
|
}
|
||||||
|
|
||||||
|
private double GetKsi()
|
||||||
|
{
|
||||||
|
if (Soil.SoilType == SoilType.SandAndSemiSand) { return 0.43d; }
|
||||||
|
else if (Soil.SoilType == SoilType.SemiClay) { return 0.55d; }
|
||||||
|
else if (Soil.SoilType == SoilType.Clay) { return 0.72d; }
|
||||||
|
else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown); }
|
||||||
|
}
|
||||||
|
|
||||||
|
private double GetGammaC()
|
||||||
|
{
|
||||||
|
if (Soil.SoilType == SoilType.SandAndSemiSand) { return 0.72d; }
|
||||||
|
else if (Soil.SoilType == SoilType.SemiClay) { return 0.64d; }
|
||||||
|
else if (Soil.SoilType == SoilType.Clay) { return 0.64; }
|
||||||
|
else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown + $": {Soil.SoilType}"); }
|
||||||
|
}
|
||||||
|
|
||||||
|
private double GetGammaN()
|
||||||
|
{
|
||||||
|
if (Anchor.DurabilityType == DurabilityType.Temporary) { return 1.2d; }
|
||||||
|
else if (Anchor.DurabilityType == DurabilityType.Eturnal) { return 1.4d; }
|
||||||
|
else { throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknown + $": {Anchor.DurabilityType}"); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
40
StructureHelperCommon/Models/Soils/AnchorResult.cs
Normal file
40
StructureHelperCommon/Models/Soils/AnchorResult.cs
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
using StructureHelperCommon.Models.Calculators;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Security.Permissions;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelperCommon.Models.Soils
|
||||||
|
{
|
||||||
|
public class AnchorResult : IResult
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public bool IsValid { get; set; }
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public string? Description { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Characteristic Bearing Capacity, N
|
||||||
|
/// </summary>
|
||||||
|
public double CharBearingCapacity { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Design Bearing Capacity, N
|
||||||
|
/// </summary>
|
||||||
|
public double DesignBearingCapacity { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Average side pressure, Pa
|
||||||
|
/// </summary>
|
||||||
|
public double AverageSidePressure { get;set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Volume of mortar of first stady, m^3
|
||||||
|
/// </summary>
|
||||||
|
public double MortarVolumeFstStady { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Volume of mortar of second stady, m^3
|
||||||
|
/// </summary>
|
||||||
|
public double MortarVolumeSndStady { get; set; }
|
||||||
|
public double AnchorCenterLevel { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
38
StructureHelperCommon/Models/Soils/AnchorSoilProperties.cs
Normal file
38
StructureHelperCommon/Models/Soils/AnchorSoilProperties.cs
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelperCommon.Models.Soils
|
||||||
|
{
|
||||||
|
public class AnchorSoilProperties : IAnchorSoilProperties
|
||||||
|
{
|
||||||
|
public Guid Id { get;}
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public double YoungsModulus { get; set; }
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public double PoissonRatio { get; set; }
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public double VolumetricWeight { get; set; }
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public double FrictionAngle { get; set; }
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public double Coheasion { get; set; }
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public SoilType SoilType { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public AnchorSoilProperties(Guid id)
|
||||||
|
{
|
||||||
|
Id = id;
|
||||||
|
YoungsModulus = 20e6d; //20MPa
|
||||||
|
PoissonRatio = 0.3d;
|
||||||
|
VolumetricWeight = 20e3d; //20kN/m^3
|
||||||
|
FrictionAngle = 25d;
|
||||||
|
Coheasion = 30e3d; //30kPa
|
||||||
|
SoilType = SoilType.SandAndSemiSand;
|
||||||
|
}
|
||||||
|
public AnchorSoilProperties() : this(Guid.NewGuid()) { }
|
||||||
|
}
|
||||||
|
}
|
||||||
46
StructureHelperCommon/Models/Soils/IAnchorSoilProperties.cs
Normal file
46
StructureHelperCommon/Models/Soils/IAnchorSoilProperties.cs
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
using StructureHelperCommon.Infrastructures.Interfaces;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelperCommon.Models.Soils
|
||||||
|
{
|
||||||
|
public enum SoilType
|
||||||
|
{
|
||||||
|
SandAndSemiSand,
|
||||||
|
SemiClay,
|
||||||
|
Clay
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Properties of soil for calculating of soil anchor
|
||||||
|
/// </summary>
|
||||||
|
public interface IAnchorSoilProperties : ISaveable
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Young's modulus, Pa
|
||||||
|
/// </summary>
|
||||||
|
double YoungsModulus { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Poison ratio
|
||||||
|
/// </summary>
|
||||||
|
double PoissonRatio { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Volumetric weight, N/m^3
|
||||||
|
/// </summary>
|
||||||
|
double VolumetricWeight { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Angle of internal friction, degree
|
||||||
|
/// </summary>
|
||||||
|
double FrictionAngle { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Coheasion, Pa
|
||||||
|
/// </summary>
|
||||||
|
double Coheasion { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Type of Soil
|
||||||
|
/// </summary>
|
||||||
|
SoilType SoilType { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
148
StructureHelperCommon/Models/Soils/SoilAnchor.cs
Normal file
148
StructureHelperCommon/Models/Soils/SoilAnchor.cs
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||||
|
using StructureHelperCommon.Infrastructures.Interfaces;
|
||||||
|
using StructureHelperCommon.Services;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Security.Permissions;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelperCommon.Models.Soils
|
||||||
|
{
|
||||||
|
public enum DurabilityType
|
||||||
|
{
|
||||||
|
Temporary,
|
||||||
|
Eturnal
|
||||||
|
}
|
||||||
|
public class SoilAnchor : ISaveable
|
||||||
|
{
|
||||||
|
private double rootLength;
|
||||||
|
private double rootDiameter;
|
||||||
|
private double freeLength;
|
||||||
|
private double jetTubeDiameter;
|
||||||
|
private double waterCementRatio;
|
||||||
|
private double boreHoleDiameter;
|
||||||
|
private double angleToHorizont;
|
||||||
|
private double additionalSurfPressure;
|
||||||
|
private double headLevel;
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public Guid Id {get; private set;}
|
||||||
|
/// <summary>
|
||||||
|
/// Length of root, m
|
||||||
|
/// </summary>
|
||||||
|
public double RootLength
|
||||||
|
{
|
||||||
|
get => rootLength; set
|
||||||
|
{
|
||||||
|
CheckObject.CheckMinMax(value, 0d, 10d);
|
||||||
|
rootLength = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Diameter of root, m
|
||||||
|
/// </summary>
|
||||||
|
public double RootDiameter
|
||||||
|
{
|
||||||
|
get => rootDiameter; set
|
||||||
|
{
|
||||||
|
CheckObject.CheckMinMax(value, 0d, 1d);
|
||||||
|
rootDiameter = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public double GroundLevel { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Absolute level of head of anchor, m
|
||||||
|
/// </summary>
|
||||||
|
public double HeadLevel { get => headLevel; set => headLevel = value; }
|
||||||
|
/// <summary>
|
||||||
|
/// Free Length, m
|
||||||
|
/// </summary>
|
||||||
|
public double FreeLength
|
||||||
|
{
|
||||||
|
get => freeLength; set
|
||||||
|
{
|
||||||
|
CheckObject.CheckMinMax(value, 0d, 20d);
|
||||||
|
freeLength = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Diameter of boregole, m
|
||||||
|
/// </summary>
|
||||||
|
public double BoreHoleDiameter
|
||||||
|
{
|
||||||
|
get => boreHoleDiameter; set
|
||||||
|
{
|
||||||
|
CheckObject.CheckMinMax(value, 0d, 1d);
|
||||||
|
boreHoleDiameter = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Diameter of tube for jetting of mortar
|
||||||
|
/// </summary>
|
||||||
|
public double JetTubeDiameter
|
||||||
|
{
|
||||||
|
get => jetTubeDiameter; set
|
||||||
|
{
|
||||||
|
CheckObject.CheckMinMax(value, 0d, 0.1d);
|
||||||
|
jetTubeDiameter = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Water-Cement ratio of jetting mortar
|
||||||
|
/// </summary>
|
||||||
|
public double WaterCementRatio
|
||||||
|
{
|
||||||
|
get => waterCementRatio; set
|
||||||
|
{
|
||||||
|
CheckObject.CheckMinMax(value, 0d, 3d);
|
||||||
|
waterCementRatio = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Angle between horizontal plane and axis of anchor, degree
|
||||||
|
/// </summary>
|
||||||
|
public double AngleToHorizont
|
||||||
|
{
|
||||||
|
get => angleToHorizont; set
|
||||||
|
{
|
||||||
|
CheckObject.CheckMinMax(value, 0d, 60d);
|
||||||
|
angleToHorizont = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Additional pressure on the surface of ground, Pa
|
||||||
|
/// </summary>
|
||||||
|
public double AdditionalSurfPressure
|
||||||
|
{
|
||||||
|
get => additionalSurfPressure; set
|
||||||
|
{
|
||||||
|
CheckObject.CheckMinMax(value, 0d, 2e4d); //20kPa
|
||||||
|
additionalSurfPressure = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public DurabilityType DurabilityType {get;set;}
|
||||||
|
|
||||||
|
|
||||||
|
public SoilAnchor(Guid id)
|
||||||
|
{
|
||||||
|
Id = id;
|
||||||
|
RootLength = 6;
|
||||||
|
HeadLevel = -4d;
|
||||||
|
FreeLength = 7d;
|
||||||
|
BoreHoleDiameter = 0.145d;
|
||||||
|
RootDiameter = boreHoleDiameter / 0.9d;
|
||||||
|
JetTubeDiameter = 0.025d;
|
||||||
|
WaterCementRatio = 0.45d;
|
||||||
|
AngleToHorizont = 15;
|
||||||
|
DurabilityType = DurabilityType.Temporary;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SoilAnchor() : this(Guid.NewGuid()) { }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,6 +7,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace StructureHelperCommon.Services
|
namespace StructureHelperCommon.Services
|
||||||
{
|
{
|
||||||
@@ -43,5 +44,12 @@ namespace StructureHelperCommon.Services
|
|||||||
throw new StructureHelperException($"{ErrorStrings.ExpectedWas(targetType, sourceObject.GetType())}");
|
throw new StructureHelperException($"{ErrorStrings.ExpectedWas(targetType, sourceObject.GetType())}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void CheckMinMax (double value, double minValue, double maxValue)
|
||||||
|
{
|
||||||
|
if (value == null || minValue == null || maxValue == null) { throw new StructureHelperException(ErrorStrings.NullReference); }
|
||||||
|
if (value < minValue) { throw new StructureHelperException($"{ErrorStrings.IncorrectValue}: Value must be greater than {minValue}"); }
|
||||||
|
if (value > maxValue) { throw new StructureHelperException($"{ErrorStrings.IncorrectValue}: Value must be less than {maxValue}"); }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,8 +15,6 @@ namespace StructureHelperTests.UnitTests.Calcuators
|
|||||||
//Arrange
|
//Arrange
|
||||||
var calculator = new LimitCurveCalculator(new StabLimitCurveLogic())
|
var calculator = new LimitCurveCalculator(new StabLimitCurveLogic())
|
||||||
{
|
{
|
||||||
XMax = xmax,
|
|
||||||
Ymax = ymax
|
|
||||||
};
|
};
|
||||||
//Act
|
//Act
|
||||||
calculator.Run();
|
calculator.Run();
|
||||||
|
|||||||
@@ -0,0 +1,65 @@
|
|||||||
|
using NUnit.Framework;
|
||||||
|
using StructureHelperCommon.Models.Soils;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StructureHelperTests.UnitTests.Calcuators
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
public class SoilAnchorCalculatorTest
|
||||||
|
{
|
||||||
|
[TestCase(6d, 0.483d, 7d, 0d, -2.188d, 25d, 30e3d, 2005767.1007324921d, 1671472.5839437435d)]
|
||||||
|
[TestCase(6d, 0.483d, 7d, 0d, -2.188d, 30d, 0d, 1437198.1109237692d, 1197665.0924364743d)]
|
||||||
|
public void Run_ShouldPass(double rootLength, double rootDiameter, double freeLength, double graundLevel, double headLevel, double fi, double c, double expectedCharBearingCapacity, double expectedDesignBearingCapacity)
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var anchor = new SoilAnchor()
|
||||||
|
{
|
||||||
|
RootLength = rootLength,
|
||||||
|
RootDiameter = rootDiameter,
|
||||||
|
FreeLength = freeLength,
|
||||||
|
GroundLevel = graundLevel,
|
||||||
|
HeadLevel = headLevel,
|
||||||
|
};
|
||||||
|
var soil = new AnchorSoilProperties()
|
||||||
|
{
|
||||||
|
FrictionAngle = fi,
|
||||||
|
Coheasion = c
|
||||||
|
};
|
||||||
|
//Act
|
||||||
|
var calculator = new AnchorCalculator(anchor, soil);
|
||||||
|
calculator.Run();
|
||||||
|
var result = calculator.Result as AnchorResult;
|
||||||
|
//Assert
|
||||||
|
Assert.IsNotNull(result);
|
||||||
|
Assert.AreEqual(expectedCharBearingCapacity, result.CharBearingCapacity, expectedCharBearingCapacity * 1e-6d);
|
||||||
|
Assert.AreEqual(expectedDesignBearingCapacity, result.DesignBearingCapacity, expectedDesignBearingCapacity * 1e-6d);
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestCase(6d, 0.2d, 7d, 0.145d, 0.28290937500000002d, 0.13633537500000006d)]
|
||||||
|
[TestCase(6d, 0.483, 7d, 0.145d, 1.6716908400000001d, 1.5251168399999999d)]
|
||||||
|
public void Run_ShouldPass_Volume(double rootLength, double rootDiameter, double freeLength, double boreHoleDiameter, double expectedVolume1, double expectedVolume2)
|
||||||
|
{
|
||||||
|
//Arrange
|
||||||
|
var anchor = new SoilAnchor()
|
||||||
|
{
|
||||||
|
RootLength = rootLength,
|
||||||
|
RootDiameter = rootDiameter,
|
||||||
|
FreeLength = freeLength,
|
||||||
|
BoreHoleDiameter = boreHoleDiameter,
|
||||||
|
};
|
||||||
|
var soil = new AnchorSoilProperties();
|
||||||
|
//Act
|
||||||
|
var calculator = new AnchorCalculator(anchor, soil);
|
||||||
|
calculator.Run();
|
||||||
|
var result = calculator.Result as AnchorResult;
|
||||||
|
//Assert
|
||||||
|
Assert.IsNotNull(result);
|
||||||
|
Assert.AreEqual(expectedVolume1, result.MortarVolumeFstStady, expectedVolume1 * 1e-6d);
|
||||||
|
Assert.AreEqual(expectedVolume2, result.MortarVolumeSndStady, expectedVolume2 * 1e-6d);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user