diff --git a/Materials/IMaterials/StandardMaterials/En/EnSteelCorrosionResistance.cs b/Materials/IMaterials/StandardMaterials/En/EnSteelCorrosionResistance.cs
new file mode 100644
index 0000000..bc40a4d
--- /dev/null
+++ b/Materials/IMaterials/StandardMaterials/En/EnSteelCorrosionResistance.cs
@@ -0,0 +1,9 @@
+namespace MagmaWorks.Taxonomy.Materials.StandardMaterials.En
+{
+ public enum EnSteelCorrosionResistance
+ {
+ None,
+ W,
+ WP
+ }
+}
diff --git a/Materials/IMaterials/StandardMaterials/En/EnSteelDeliveryCondition.cs b/Materials/IMaterials/StandardMaterials/En/EnSteelDeliveryCondition.cs
new file mode 100644
index 0000000..981a0bc
--- /dev/null
+++ b/Materials/IMaterials/StandardMaterials/En/EnSteelDeliveryCondition.cs
@@ -0,0 +1,16 @@
+using System.ComponentModel;
+
+namespace MagmaWorks.Taxonomy.Materials.StandardMaterials.En
+{
+ public enum EnSteelDeliveryCondition
+ {
+ [Description("As-rolled - EN10025-2")]
+ AR,
+ [Description("Normalised rolled in accordance with EN 10025-3")]
+ N,
+ [Description("Thermomechanical rolling in accordance with EN 10025-4")]
+ M,
+ [Description("Quenched and tempered in accordance with EN 10025-6")]
+ Q
+ }
+}
diff --git a/Materials/IMaterials/StandardMaterials/En/EnSteelFormingTemperature.cs b/Materials/IMaterials/StandardMaterials/En/EnSteelFormingTemperature.cs
new file mode 100644
index 0000000..26d4c57
--- /dev/null
+++ b/Materials/IMaterials/StandardMaterials/En/EnSteelFormingTemperature.cs
@@ -0,0 +1,8 @@
+namespace MagmaWorks.Taxonomy.Materials.StandardMaterials.En
+{
+ public enum EnSteelFormingTemperature
+ {
+ HotRolled,
+ ColdFormed
+ }
+}
diff --git a/Materials/IMaterials/StandardMaterials/En/EnSteelGrade.cs b/Materials/IMaterials/StandardMaterials/En/EnSteelGrade.cs
index f64e8a1..39ea9da 100644
--- a/Materials/IMaterials/StandardMaterials/En/EnSteelGrade.cs
+++ b/Materials/IMaterials/StandardMaterials/En/EnSteelGrade.cs
@@ -5,28 +5,8 @@ public enum EnSteelGrade
S235,
S275,
S355,
+ S420,
S450,
- S275N,
- S355N,
- S420N,
- S460N,
- S275M,
- S355M,
- S420M,
- S460M,
- S235W,
- S355W,
- S460Q,
- S235H,
- S275H,
- S355H,
- S275NH,
- S355NH,
- S420NH,
- S460NH,
- S275MH,
- S355MH,
- S420MH,
- S460MH,
+ S460,
}
}
diff --git a/Materials/IMaterials/StandardMaterials/En/EnSteelImpactTemperatureProperty.cs b/Materials/IMaterials/StandardMaterials/En/EnSteelImpactTemperatureProperty.cs
new file mode 100644
index 0000000..ec68894
--- /dev/null
+++ b/Materials/IMaterials/StandardMaterials/En/EnSteelImpactTemperatureProperty.cs
@@ -0,0 +1,9 @@
+namespace MagmaWorks.Taxonomy.Materials.StandardMaterials.En
+{
+ public enum EnSteelImpactTemperatureProperty
+ {
+ None,
+ L,
+ L1
+ }
+}
diff --git a/Materials/IMaterials/StandardMaterials/En/EnSteelQuality.cs b/Materials/IMaterials/StandardMaterials/En/EnSteelQuality.cs
new file mode 100644
index 0000000..237abff
--- /dev/null
+++ b/Materials/IMaterials/StandardMaterials/En/EnSteelQuality.cs
@@ -0,0 +1,11 @@
+namespace MagmaWorks.Taxonomy.Materials.StandardMaterials.En
+{
+ public enum EnSteelQuality
+ {
+ None,
+ JR,
+ J0,
+ J2,
+ K2
+ }
+}
diff --git a/Materials/IMaterials/StandardMaterials/En/IEnSteelMaterial.cs b/Materials/IMaterials/StandardMaterials/En/IEnSteelMaterial.cs
index a85d056..89ef41f 100644
--- a/Materials/IMaterials/StandardMaterials/En/IEnSteelMaterial.cs
+++ b/Materials/IMaterials/StandardMaterials/En/IEnSteelMaterial.cs
@@ -1,13 +1,12 @@
-using MagmaWorks.Taxonomy.Materials.StandardMaterials.En;
-using OasysUnits;
+using OasysUnits;
namespace MagmaWorks.Taxonomy.Materials.StandardMaterials.En
{
public interface IEnSteelMaterial : IEnMaterial
{
+ IEnSteelSpecification Specification { get; }
EnSteelGrade Grade { get; }
- EnExecutionClass ExecutionClassforStaticOrLowSeismicLoading { get; }
- EnExecutionClass ExecutionClassforFatigueOrHighSeismicLoading { get; }
+
///
/// γM0 partial factor for resistance of cross-sections whatever the class is
///
diff --git a/Materials/IMaterials/StandardMaterials/En/IEnSteelSpecification.cs b/Materials/IMaterials/StandardMaterials/En/IEnSteelSpecification.cs
new file mode 100644
index 0000000..73e4da6
--- /dev/null
+++ b/Materials/IMaterials/StandardMaterials/En/IEnSteelSpecification.cs
@@ -0,0 +1,16 @@
+using MagmaWorks.Taxonomy.Serialization;
+
+namespace MagmaWorks.Taxonomy.Materials.StandardMaterials.En
+{
+ public interface IEnSteelSpecification : ITaxonomySerializable
+ {
+ EnExecutionClass ExecutionClassforStaticOrLowSeismicLoading { get; set; }
+ EnExecutionClass ExecutionClassforFatigueOrHighSeismicLoading { get; set; }
+ EnSteelCorrosionResistance CorrosionResistance { get; set; }
+ EnSteelDeliveryCondition DeliveryCondition { get; set; }
+ EnSteelFormingTemperature FormingTemperature { get; set; }
+ EnSteelImpactTemperatureProperty ImpactTemperatureProperty { get; set; }
+ EnSteelQuality Quality { get; set; }
+ bool HollowSection { get; set; }
+ }
+}
diff --git a/Materials/IMaterials/StandardMaterials/En/InvalidSteelSpecificationException.cs b/Materials/IMaterials/StandardMaterials/En/InvalidSteelSpecificationException.cs
new file mode 100644
index 0000000..9b9a05c
--- /dev/null
+++ b/Materials/IMaterials/StandardMaterials/En/InvalidSteelSpecificationException.cs
@@ -0,0 +1,9 @@
+using System;
+
+namespace MagmaWorks.Taxonomy.Materials.StandardMaterials.En
+{
+ public class InvalidSteelSpecificationException : Exception
+ {
+ public InvalidSteelSpecificationException(string t) : base(t) { }
+ }
+}
diff --git a/Materials/MaterialTests/ENMaterialFactory/ENSteelFactoryTests.cs b/Materials/MaterialTests/ENMaterialFactory/ENSteelFactoryTests.cs
index 19d250b..b0026bf 100644
--- a/Materials/MaterialTests/ENMaterialFactory/ENSteelFactoryTests.cs
+++ b/Materials/MaterialTests/ENMaterialFactory/ENSteelFactoryTests.cs
@@ -30,163 +30,206 @@ public void CreateStandardS355ConcreteMaterialTests()
}
[Theory]
- [MemberData(nameof(EnumValues))]
- public void CreateLinearElasticTests(EnSteelGrade grade)
+ [MemberData(nameof(AllEnTable3_1SteelMaterials))]
+ public void CreateLinearElasticTests(EnSteelMaterial material)
{
// Assemble
+ string materialGrade = GetGradeName(material);
+
// Act
- ILinearElasticMaterial material = EnSteelFactory.CreateLinearElastic(grade);
+ ILinearElasticMaterial analysisMaterial = EnSteelFactory.CreateLinearElastic(material);
// Assert
- double expectedStrength = Table3_1[grade].fy40;
- Assert.Equal(expectedStrength, material.Strength.Megapascals, 12);
+ double expectedStrength = Table3_1[materialGrade].fy40;
+ Assert.Equal(expectedStrength, analysisMaterial.Strength.Megapascals, 12);
double expectedElasticModulus = 210;
- Assert.Equal(expectedElasticModulus, material.ElasticModulus.Gigapascals, 12);
+ Assert.Equal(expectedElasticModulus, analysisMaterial.ElasticModulus.Gigapascals, 12);
- Assert.Equal(MaterialType.Steel, material.Type);
+ Assert.Equal(MaterialType.Steel, analysisMaterial.Type);
}
[Theory]
- [MemberData(nameof(EnumValues))]
- public void CreateLinearElasticThickPlatedTests(EnSteelGrade grade)
+ [MemberData(nameof(AllEnTable3_1SteelMaterials))]
+ public void CreateLinearElasticThickPlatedTests(EnSteelMaterial material)
{
// Assemble
+ string materialGrade = GetGradeName(material);
Length thickness = new Length(60, LengthUnit.Millimeter);
// Act
- ILinearElasticMaterial material = EnSteelFactory.CreateLinearElastic(grade, thickness);
+ ILinearElasticMaterial analysisMaterial = EnSteelFactory.CreateLinearElastic(material, thickness);
// Assert
- double expectedStrength = Table3_1[grade].fy80;
- Assert.Equal(expectedStrength, material.Strength.Megapascals, 12);
+ double expectedStrength = Table3_1[materialGrade].fy80;
+ Assert.Equal(expectedStrength, analysisMaterial.Strength.Megapascals, 12);
double expectedElasticModulus = 210;
- Assert.Equal(expectedElasticModulus, material.ElasticModulus.Gigapascals, 12);
+ Assert.Equal(expectedElasticModulus, analysisMaterial.ElasticModulus.Gigapascals, 12);
- Assert.Equal(MaterialType.Steel, material.Type);
+ Assert.Equal(MaterialType.Steel, analysisMaterial.Type);
}
[Theory]
- [MemberData(nameof(EnumValues))]
- public void CreateBiLinearTests(EnSteelGrade grade)
+ [MemberData(nameof(AllEnTable3_1SteelMaterials))]
+ public void CreateBiLinearTests(EnSteelMaterial material)
{
// Assemble
+ string materialGrade = GetGradeName(material);
+
// Act
- IBiLinearMaterial material = EnSteelFactory.CreateBiLinear(grade);
+ IBiLinearMaterial analysisMaterial = EnSteelFactory.CreateBiLinear(material);
// Assert
- double expectedYieldStrength = Table3_1[grade].fy40;
- Assert.Equal(expectedYieldStrength, material.YieldStrength.Megapascals, 12);
+ double expectedYieldStrength = Table3_1[materialGrade].fy40;
+ Assert.Equal(expectedYieldStrength, analysisMaterial.YieldStrength.Megapascals, 12);
- double expectedUltimateStrength = Table3_1[grade].fu40;
- Assert.Equal(expectedUltimateStrength, material.UltimateStrength.Megapascals, 12);
+ double expectedUltimateStrength = Table3_1[materialGrade].fu40;
+ Assert.Equal(expectedUltimateStrength, analysisMaterial.UltimateStrength.Megapascals, 12);
double expectedElasticModulus = 210;
- Assert.Equal(expectedElasticModulus, material.ElasticModulus.Gigapascals, 12);
+ Assert.Equal(expectedElasticModulus, analysisMaterial.ElasticModulus.Gigapascals, 12);
- Assert.Equal(MaterialType.Steel, material.Type);
+ Assert.Equal(MaterialType.Steel, analysisMaterial.Type);
}
[Theory]
- [MemberData(nameof(EnumValues))]
- public void CreateBiLinearThickPlatedTests(EnSteelGrade grade)
+ [MemberData(nameof(AllEnTable3_1SteelMaterials))]
+ public void CreateBiLinearThickPlatedTests(EnSteelMaterial material)
{
- if ((int)grade > 21)
- {
- CreateBiLinearThrowsExpectionForSomeGradesTests(grade);
- return;
- }
-
// Assemble
+ string materialGrade = GetGradeName(material);
Length thickness = new Length(60, LengthUnit.Millimeter);
// Act
- IBiLinearMaterial material = EnSteelFactory.CreateBiLinear(grade, thickness);
+ if (material.Specification.HollowSection && material.Specification.DeliveryCondition == EnSteelDeliveryCondition.M)
+ {
+ Assert.Throws(() => EnSteelFactory.CreateBiLinear(material, thickness));
+ return;
+ }
+
+ IBiLinearMaterial analysisMaterial = EnSteelFactory.CreateBiLinear(material, thickness);
// Assert
- double expectedYieldStrength = Table3_1[grade].fy80;
- Assert.Equal(expectedYieldStrength, material.YieldStrength.Megapascals, 12);
+ double expectedYieldStrength = Table3_1[materialGrade].fy80;
+ Assert.Equal(expectedYieldStrength, analysisMaterial.YieldStrength.Megapascals, 12);
- double expectedUltimateStrength = Table3_1[grade].fu80;
- Assert.Equal(expectedUltimateStrength, material.UltimateStrength.Megapascals, 12);
+ double expectedUltimateStrength = Table3_1[materialGrade].fu80;
+ Assert.Equal(expectedUltimateStrength, analysisMaterial.UltimateStrength.Megapascals, 12);
double expectedElasticModulus = 210;
- Assert.Equal(expectedElasticModulus, material.ElasticModulus.Gigapascals, 12);
+ Assert.Equal(expectedElasticModulus, analysisMaterial.ElasticModulus.Gigapascals, 12);
- Assert.Equal(MaterialType.Steel, material.Type);
+ Assert.Equal(MaterialType.Steel, analysisMaterial.Type);
}
[Fact]
public void CreateLinearElasticThrowsExpectionForTooThickPlateTests()
{
// Assemble
+ var material = new EnSteelMaterial(EnSteelGrade.S235, NationalAnnex.RecommendedValues);
Length thickness = new Length(81, LengthUnit.Millimeter);
- EnSteelGrade grade = EnSteelGrade.S235;
// Act
// Assert
- Assert.Throws(() => EnSteelFactory.CreateLinearElastic(grade, thickness));
+ Assert.Throws(() => EnSteelFactory.CreateLinearElastic(material, thickness));
}
[Theory]
- [InlineData(EnSteelGrade.S275MH)]
- [InlineData(EnSteelGrade.S355MH)]
- [InlineData(EnSteelGrade.S420MH)]
- [InlineData(EnSteelGrade.S460MH)]
+ [InlineData(EnSteelGrade.S275)]
+ [InlineData(EnSteelGrade.S355)]
+ [InlineData(EnSteelGrade.S420)]
+ [InlineData(EnSteelGrade.S460)]
public void CreateBiLinearThrowsExpectionForSomeGradesTests(EnSteelGrade grade)
{
// Assemble
+ var material = new EnSteelMaterial(grade, NationalAnnex.RecommendedValues);
+ material.Specification.DeliveryCondition = EnSteelDeliveryCondition.M;
+ material.Specification.HollowSection = true;
Length thickness = new Length(60, LengthUnit.Millimeter);
// Act
// Assert
- Assert.Throws(() => EnSteelFactory.CreateBiLinear(grade, thickness));
+ Assert.Throws(() => EnSteelFactory.CreateBiLinear(material, thickness));
}
- public static IEnumerable