/// <summary> /// Calculate Structural Class based on PN-EN 1992-1-1 Table 4.3N /// </summary> public ConcreteCoverOutput CalculateStructuralClass(ConcreteCoverInput inputData) { this.inputData = inputData; ExposureClass exposureClass = ConvertStringToExposureClass(this.inputData.ExposureClass); ConcreteClass concreteClass = ConvertStringToConcreteClass(this.inputData.ConcreteClass); this.outputData.StructuralClass = this.inputData.BaseStructuralClass; // Check Exposure Class if (exposureClass == ExposureClass.X0 || exposureClass == ExposureClass.XC1 || exposureClass == ExposureClass.XC2 || exposureClass == ExposureClass.XC3 || exposureClass == ExposureClass.XC4 || exposureClass == ExposureClass.XD1 || exposureClass == ExposureClass.XD2 || exposureClass == ExposureClass.XS1 || exposureClass == ExposureClass.XD3 || exposureClass == ExposureClass.XS2 || exposureClass == ExposureClass.XS3 ) { // Modification based on Design Working Life of 100 years if (this.inputData.DesignWorkingLifeOf100Years) { //this.StructuralClass = (StructuralClass)((int)StructuralClass + 2).Clamp((int)StructuralClass.S1, (int)StructuralClass.S6); this.outputData.StructuralClass = ((int)ConvertStringToStructuralClass(this.outputData.StructuralClass) + 2).ToString(); } // Modification based on Concrete Class and Exposure Class if ((concreteClass >= ConcreteClass.C30_37 && (exposureClass == ExposureClass.X0 || exposureClass == ExposureClass.XC1)) || (concreteClass >= ConcreteClass.C35_45 && (exposureClass == ExposureClass.XC2 || exposureClass == ExposureClass.XC3)) || (concreteClass >= ConcreteClass.C40_50 && (exposureClass == ExposureClass.XC4 || exposureClass == ExposureClass.XD1 || exposureClass == ExposureClass.XD2 || exposureClass == ExposureClass.XS1)) || (concreteClass >= ConcreteClass.C45_55 && (exposureClass == ExposureClass.XD3 || exposureClass == ExposureClass.XS2 || exposureClass == ExposureClass.XS3))) { //this.StructuralClass = (StructuralClass)((int)StructuralClass - 1).Clamp((int)StructuralClass.S1, (int)StructuralClass.S6); this.outputData.StructuralClass = ((int)ConvertStringToStructuralClass(this.outputData.StructuralClass) - 1).ToString(); } // Modification based on Member With Slab Geometry if (this.inputData.MemberWithSlabGeometry) { //this.StructuralClass = (StructuralClass)((int)StructuralClass - 1).Clamp((int)StructuralClass.S1, (int)StructuralClass.S6); this.outputData.StructuralClass = ((int)ConvertStringToStructuralClass(this.outputData.StructuralClass) - 1).ToString(); } // Modification based on Member With Slab Geometry if (this.inputData.SpecialQualityControlOfTheConcreteProductionEnsured) { //this.StructuralClass = (StructuralClass)((int)StructuralClass - 1).Clamp((int)StructuralClass.S1, (int)StructuralClass.S6); this.outputData.StructuralClass = ((int)ConvertStringToStructuralClass(this.outputData.StructuralClass) - 1).ToString(); } } this.outputData.StructuralClass = ((int)ConvertStringToStructuralClass(this.outputData.StructuralClass)).Clamp((int)StructuralClass.S1, (int)StructuralClass.S6).ToString(); return(this.outputData); }
public void CalculateStructuralClass(string testCaseNumber, StructuralClass structureClass, bool designWorkingLifeOf100Years, ExposureClass exposureClass, ConcreteClass concreteClass, bool memberWithSlabGeometry, bool specialQualityControlOfTheConcreteProductionEnsured, string expectedStructuralClass) { ConcreteCoverInput inputData = new ConcreteCoverInput() { // Recommended Structural Class when design working life is 50 years BaseStructuralClass = ConcreteCoverCalculator.ConvertStructuralClassToString(structureClass), DesignWorkingLifeOf100Years = designWorkingLifeOf100Years, ExposureClass = ConcreteCoverCalculator.ConvertExposureClassToString(exposureClass), ConcreteClass = ConcreteCoverCalculator.ConvertConcreteClassToString(concreteClass), MemberWithSlabGeometry = memberWithSlabGeometry, SpecialQualityControlOfTheConcreteProductionEnsured = specialQualityControlOfTheConcreteProductionEnsured }; ConcreteCoverCalculator coverCalculator = new ConcreteCoverCalculator(); var result = coverCalculator.CalculateStructuralClass(inputData); Assert.AreEqual(expectedStructuralClass, "S" + result.StructuralClass); }
/// <summary> /// Convert exposure class to string. /// </summary> /// <param name="exposureClass"></param> /// <returns></returns> public static string ConvertExposureClassToString(ExposureClass exposureClass) { return(exposureClass.ToString()); }
public void CalculateMinimumCoverDueToEnvironmentalConditionsTests(int testCaseNumber, ExposureClass exposureClass, StructuralClass structuralClass, double expectedCover) { ConcreteCoverInput inputData = new ConcreteCoverInput() { ExposureClass = ConcreteCoverCalculator.ConvertExposureClassToString(exposureClass), }; ConcreteCoverCalculator coverCalculator = new ConcreteCoverCalculator(); coverCalculator.outputData.StructuralClass = ConcreteCoverCalculator.ConvertStructuralClassToString(structuralClass); var result = coverCalculator.CalculateMinimumCoverDueToEnvironmentalConditions(inputData); Assert.AreEqual(expectedCover, result.MinimumCoverDueToEnvironmentalConditions); }