예제 #1
0
        public ConcreteSectionFlexure GetRectangularSectionFourSidesDistributed(double b, double h,
    double A_sTopBottom, double A_sLeftRight, double c_centTopBottom, double c_centLeftRight, IConcreteMaterial mat, IRebarMaterial rebarMaterial)
        {

            double YTop = h / 2.0 - c_centTopBottom;
            double YBottom = -h / 2.0 + c_centTopBottom;
            double XLeft = -b / 2.0 + c_centLeftRight;
            double XRight = b / 2.0 - c_centLeftRight;

            Point2D P1 = new Point2D(XLeft, YTop);
            Point2D P2 = new Point2D(XRight, YTop);
            Point2D P3 = new Point2D(XRight, YBottom);
            Point2D P4 = new Point2D(XLeft, YBottom);

            RebarLine topLine = new RebarLine(A_sTopBottom, P1, P2, rebarMaterial, false);
            RebarLine bottomLine = new RebarLine(A_sTopBottom, P3, P4, rebarMaterial, false);

            RebarLine leftLine = new RebarLine(A_sLeftRight, P2, P3, rebarMaterial, true);
            RebarLine rightLine = new RebarLine(A_sLeftRight, P4, P1, rebarMaterial, true);

            List<RebarPoint> LongitudinalBars = new List<RebarPoint>();

            LongitudinalBars.AddRange(topLine.RebarPoints);
            LongitudinalBars.AddRange(bottomLine.RebarPoints);
            LongitudinalBars.AddRange(leftLine.RebarPoints);
            LongitudinalBars.AddRange(rightLine.RebarPoints);


            CrossSectionRectangularShape section = new CrossSectionRectangularShape(mat, null, b, h);
            CalcLog log = new CalcLog();

            ConcreteSectionFlexure sectionFlexure = new ConcreteSectionFlexure(section, LongitudinalBars, log);
            return sectionFlexure;
        }
예제 #2
0
        public static Dictionary<string, object> WindGustEffectFactor(double B,double h,double L,double beta,double n_1,double V,
            string WindExposureCategory, string WindStructureDynamicResponseType = "Flexible", string Code = "ASCE7-10")
        {
            //Default values
            double G = 0;

            //Calculation logic:

            WindExposureCategory Exposure;

            bool IsValidStringExposure = Enum.TryParse(WindExposureCategory, true, out Exposure);
            if (IsValidStringExposure == false)
            {
                throw new Exception("Exposure category is not recognized. Check input string.");
            }

            WindStructureDynamicResponseType response;
            bool IsValidStringResponse = Enum.TryParse(WindStructureDynamicResponseType, true, out response);
            if (IsValidStringResponse == false)
            {
                throw new Exception("Dynamic response type is not recognized. Specify Rigid or Flexible. Check input string.");
            }

            CalcLog Log = new CalcLog();
            WindStructure structure = new WindStructure(Log);
            G = structure.GetGustFacor(response,B,h,L,beta,n_1,V,Exposure);

            return new Dictionary<string, object>
            {
                { "G", G }
 
            };
        }
        public static Dictionary<string, object> SeismicFundamentalPeriodGeneralMethod(double h_n, string SeismicSystemTypeGeneralProcedure, string Code = "ASCE7-10")
        {
            //Default values
            double T_a = 0;


            //Calculation logic:
            CalcLog log = new CalcLog();

            SeismicSystemTypeForApproximateAnalysis SeismicSystemType;
            bool IsValidSystemType = Enum.TryParse(SeismicSystemTypeGeneralProcedure, out SeismicSystemType);
            if (IsValidSystemType==false)
            {
                throw new Exception("Lateral system not recognized");  
            }

            Wosad.Loads.ASCE.ASCE7_10.SeismicLoads.Building b = new Wosad.Loads.ASCE.ASCE7_10.SeismicLoads.Building(null,
                Wosad.Loads.ASCE7.Entities.SeismicDesignCategory.None, log);
            T_a = b.GetApproximatePeriodGeneral(h_n, SeismicSystemType);
         

            return new Dictionary<string, object>
            {
                { "T_a", T_a }
 
            };
        }
        public static Dictionary<string, object> ExternalPressureCoefficientMWFRS(double B, double L, string WindFaceType, string Code = "ASCE7-10")
        {
            //Default values
            double C_p = 0;


            //Calculation logic:
            WindFace face;

            bool IsValidStringFaceType = Enum.TryParse(WindFaceType, true, out face);
            if (IsValidStringFaceType == false)
            {
                throw new Exception("Wind face type is not recognized. Use Windward, Leeward or Side. Check input string.");
            }

            CalcLog Log = new CalcLog();
            Mwfrs Mwfrs = new Mwfrs(Log);
            C_p = Mwfrs.GetWallPressureCoefficient(face, B, L);

            return new Dictionary<string, object>
            {
                { "C_p", C_p }
 
            };
        }
예제 #5
0
        public static Dictionary<string, object> SeismicSiteCoefficients(double S_S, double S_1, string SiteClass, string Code = "ASCE7-10")
        {
            //Default values
        double F_a = 0;
        double F_v = 0;


            //Calculation logic:

            SeismicSiteClass _SiteClass;
            bool ValidSiteClass = Enum.TryParse(SiteClass, out _SiteClass);

            if (ValidSiteClass == false)
            {
                throw new Exception("Site class is not recognized. Please check input.");
            }
            else
            {


                CalcLog log = new CalcLog();
                Wosad.Loads.ASCE.ASCE7_10.SeismicLoads.Site s = new Wosad.Loads.ASCE.ASCE7_10.SeismicLoads.Site(_SiteClass, log);
                F_a = s.SiteCoefficientFa(S_S);
                F_v = s.SiteCoefficientFv(S_1);
            }

            return new Dictionary<string, object>
            {
                { "F_a", F_a }
            ,{ "F_v", F_v }
 
            };
            }
예제 #6
0
        public static Dictionary<string, object> WindVelocityPressure(double K_z, double K_zt, double K_d, double V, string WindVelocityLocation = "Wall", string Code = "ASCE7-10")
        {
        //public static double WindVelocityPressure(double K_z, double K_zt, double K_d, double V, string WindVelocityLocation = "Wall")
        //{
            //Default values
            double q_z = 0;


            //Calculation logic:


            WindVelocityLocation Location;

            bool IsValidStringLocation = Enum.TryParse(WindVelocityLocation, true, out Location);
            if (IsValidStringLocation == false)
            {
                throw new Exception("Wind pressure location is not recognized. Check input string.");
            }

            CalcLog Log  = new CalcLog();
            BuildingDirectionalProcedureElement element = new BuildingDirectionalProcedureElement(Log);
            q_z = element.GetVelocityPressure(K_z, K_zt, K_d, V, Location);

            return new Dictionary<string, object>
            {
                { "q_z", q_z }
 
            };

            //return q_z;
        }
예제 #7
0
        public void ReturnColumnStabilityFactorDimensionalLumber()
        {
            CalcLog log = new CalcLog();
            DimensionalLumber m = new DimensionalLumber();
            double b = 1.5;
            double d = 5.5;

            
            double C_F =1.0;
            double C_M = 1.0;
            double C_t = 1.0;
            double C_i = 1.0;
            double C_T = 1.0;
            double C_D = 1.15;
            double E_min =580.0;
            double F_c = 1.6;
            double l_e = 144.0;
            double lambda =0.8;
            double C_P = m.GetColumnStabilityFactor(d, F_c, E_min, l_e, C_M, C_M, C_t, C_t,C_F, C_i, C_i, C_T, lambda);

            double refValue = 0.342;
            double actualTolerance = EvaluateActualTolerance(C_P, refValue);
            Assert.LessOrEqual(actualTolerance, tolerance);

        }
예제 #8
0
        public static Dictionary<string, object> XAxisProperties(string SteelShapeId)
        {
            //Default values
            double x_e = 0;
double x_p = 0;
double I_x = 0;
double Z_x = 0;
double S_x = 0;
double r_x = 0;


            //Calculation logic:

CalcLog cl = new CalcLog();
AiscCatalogShape shape = new AiscCatalogShape(SteelShapeId, cl);

x_e = shape.x;
x_p = shape.xp;
I_x = shape.Ix;
Z_x = shape.Zx;
S_x = shape.Sx;
r_x = shape.rx;

            return new Dictionary<string, object>
            {
                { "x_e", x_e }
,{ "x_p", x_p }
,{ "I_x", I_x }
,{ "Z_x", Z_x }
,{ "S_x", S_x }
,{ "r_x", r_x }
 
            };
        }
예제 #9
0
        protected double GetFcrGeneral()
        {
            SectionRectangular r = new SectionRectangular(t_w, h_o);
            SteelMaterial mat = new SteelMaterial(Material.YieldStress);
            CalcLog log = new CalcLog();

            AffectedElementInFlexure flexuralElement = new AffectedElementInFlexure(r, mat, log);
            return flexuralElement.GetPlateBucklingCriticalStress(c);

            #region Obsolete
            //double lambda = GetLambda();
            //double F_y = Material.YieldStress;

            //double Q;
            //if (lambda<=0.7)
            //{
            //    Q = 1.0;
            //}
            //else if (lambda<=1.41)
            //{
            //    Q = (1.34 - 0.468 * lambda);
            //}
            //else
            //{
            //    Q = ((1.3) / (Math.Pow(lambda, 2)));
            //}
            //double F_cr = F_y * Q;
            //return F_cr; 
            #endregion
        }
예제 #10
0
        public static Dictionary<string, object> YAxisProperties(string SteelShapeId)
        {
            //Default values
            double y_e = 0;
double y_p = 0;
double I_y = 0;
double Z_y = 0;
double S_y = 0;
double r_y = 0;


            //Calculation logic:
CalcLog cl = new CalcLog();
AiscCatalogShape shape = new AiscCatalogShape(SteelShapeId, cl);

y_e = shape.y;
y_p = shape.yp;
I_y = shape.Iy;
Z_y = shape.Zy;
S_y = shape.Sy;
r_y = shape.ry;


            return new Dictionary<string, object>
            {
                { "y_e", y_e }
,{ "y_p", y_p }
,{ "I_y", I_y }
,{ "Z_y", Z_y }
,{ "S_y", S_y }
,{ "r_y", r_y }
 
            };
        }
        public static Dictionary<string, object> WindInternalPressureCoefficient(string WindEnclosureType = "Enclosed", string Code = "ASCE7-10")
        {
            //Default values
            double GC_pi = 0;


            //Calculation logic:

            WindEnclosureType Enclosure;
            
            bool IsValidStringEnclosure = Enum.TryParse(WindEnclosureType, true, out Enclosure);
            if (IsValidStringEnclosure == false)
            {
                throw new Exception("Wind enclosure type is not recognized. Check input string.");
            }

            CalcLog Log  = new CalcLog();
            WindBuilding  building  = new WindBuilding(Log);


            GC_pi = building.GetInternalPressureCoefficient(Enclosure);

            return new Dictionary<string, object>
            {
                { "GC_pi", GC_pi }
 
            };
        }
예제 #12
0
        public void ReturnColumnStabilityFactorTimber()
        {
            CalcLog log = new CalcLog();
            DimensionalLumber m = new DimensionalLumber();
            double b = 5.5;
            double d = 5.5;


            double C_F = 1.0;
            double C_M_Fc = 0.91;
            double C_M_E = 1.0;
            double C_t = 1.0;
            double C_i = 1.0;
            double C_T = 1.0;
            double C_D = 1.15;
            double E_min = 470.0;
            double F_c =0.85;
            double l_e = 15*12*0.5; //with K-factor
            double lambda = 0.8;
            double C_P = m.GetColumnStabilityFactor(d, F_c, E_min, l_e,C_M_Fc,C_M_E, C_t,C_t, C_F, C_i,C_i, C_T, lambda);

            double refValue = 0.827;
            double actualTolerance = EvaluateActualTolerance(C_P, refValue);
            Assert.LessOrEqual(actualTolerance, tolerance);

        }
예제 #13
0
        public ISteelCompressionMember GetIshape(ISteelSection Section, bool IsRolled, double L_x, double L_y, double L_z, ICalcLog CalcLog)
        {

            ISteelCompressionMember column = null;
            IShapeCompactness compactnessTop = new ShapeCompactness.IShapeMember(Section, IsRolled, Common.Section.Interfaces.FlexuralCompressionFiberPosition.Top);
            IShapeCompactness compactnessBot = new ShapeCompactness.IShapeMember(Section, IsRolled, Common.Section.Interfaces.FlexuralCompressionFiberPosition.Bottom);
            ICalcLog Log = new CalcLog();


            CompactnessClassAxialCompression flangeCompactnessTop = compactnessTop.GetFlangeCompactnessCompression();
            CompactnessClassAxialCompression flangeCompactnessBot = compactnessTop.GetFlangeCompactnessCompression();
            CompactnessClassAxialCompression webCompactness = compactnessTop.GetWebCompactnessCompression();

            if (flangeCompactnessTop == CompactnessClassAxialCompression.NonSlender && webCompactness == CompactnessClassAxialCompression.NonSlender
                && flangeCompactnessBot == CompactnessClassAxialCompression.NonSlender)
            {
                column = new IShapeCompact(Section, IsRolled, L_x, L_y, L_z, Log);
                //if (IShape.b_fBot == IShape.b_fTop && IShape.t_fBot == IShape.t_fTop)
                //{
                //    return new IShapeCompact(SectionI, IsRolledShape, L_ex, L_ey, L_ez, log);
                //}
                //else
                //{
                //    throw new NotImplementedException();
                //}
            }
            else
            {
                column = new IShapeSlenderElements(Section, IsRolled, L_x, L_y, L_z, Log);
            }
            return column;
        }
예제 #14
0
        public static Dictionary<string, object> SeismicImportanceFactor(string BuildingRiskCategory, string Code = "ASCE7-10")
        {
            //Default values
            double I_e = 0;


            //Calculation logic:
            CalcLog log = new CalcLog();

            Wosad.Loads.ASCE7.Entities.BuildingRiskCategory _BuildingRiskCategory;
            bool IsValidCat = Enum.TryParse(BuildingRiskCategory, out _BuildingRiskCategory);
            if (IsValidCat == false)
            {
                throw new Exception("Building risk category not recognized. Check input.");
            }
            //= (BuildingRiskCategory)Enum.Parse(typeof(BuildingRiskCategory), (string)GetParameterValue("RiskCategory", inputData));

            Wosad.Loads.ASCE.ASCE7_10.SeismicLoads.General gen = new Wosad.Loads.ASCE.ASCE7_10.SeismicLoads.General(log);
            I_e = gen.GetImportanceFactor(_BuildingRiskCategory);

            return new Dictionary<string, object>
            {
                { "I_e", I_e }
 
            };
        }
        public static Dictionary<string, object> MaterialMechanicalProperties(string SteelMaterialId, double d_b = 0, string Code = "AISC360-10")
        {
            //Default values
            double F_y = 0;
            double F_u = 0;
            double E = 0;
            double G = 0;


            //Calculation logic:
            CalcLog cl = new CalcLog();
            SteelMaterialCatalog sm = new SteelMaterialCatalog(SteelMaterialId, d_b, cl);
            F_y = sm.YieldStress;
            F_u = sm.UltimateStress;
            E = sm.ModulusOfElasticity;
            G = sm.ShearModulus;


            return new Dictionary<string, object>
            {
                { "F_y", F_y }
                ,{ "F_u", F_u }
                ,{ "E", E }
                ,{ "G", G }
 
            };
        }
        public ConcreteSectionCompression GetCompressionMember(ConcreteSectionFlexure flexuralSection,
        CompressionMemberType CompressionMemberType)
        {
            
            CalcLog log = new CalcLog();

            ConcreteSectionCompression compSection = new ConcreteSectionCompression(flexuralSection, CompressionMemberType, log);
            return compSection;
        }
예제 #17
0
 public void ConnectedPlateReturnsFlexuralStrength()
 {
     ICalcLog log = new  CalcLog();
     SectionRectangular Section = new SectionRectangular(0.5, 8);
     ISteelMaterial Material = new SteelMaterial(50);
     AffectedElementInFlexure element = new AffectedElementInFlexure(Section, Material, log);
     double phiM_n = element.GetFlexuralStrength();
     Assert.AreEqual(360.0, phiM_n);
 }
        public static Dictionary<string, object> ShapeBasicGeometricProperties(string SteelShapeId)
        {
            //Default values
            double d = 0;
            double b= 0;
            double b_f = 0;
            double t_f = 0;
            double t_w = 0;
            double k = 0;
            double D = 0;
            double B = 0;
            double H = 0;
            double t = 0;
            double t_nom = 0;
            double t_des = 0;
            double A = 0;

            //Calculation logic
            CalcLog cl = new CalcLog();
            AiscCatalogShape shape = new AiscCatalogShape(SteelShapeId, cl);
            d = shape.d;
            b_f = shape.bf;
            t_f = shape.tf;
            t_w = shape.tw;
            k = shape.kdes;
            D = shape.OD;
            b = shape.b;
            B = shape.B;
            H = shape.Ht;
            t = shape.t;
            t_nom = shape.tnom;
            t_des = shape.tdes;
            A = shape.A;

            return new Dictionary<string, object>
            {
                { "d", d }
                ,{ "b_f", b_f }
                ,{ "t_f", t_f }
                ,{ "t_w", t_w }
                ,{ "k", k }
                ,{ "D", D }
                ,{ "B", B }
                ,{ "H", H }
                ,{ "t", t }
                ,{ "t_nom", t_nom }
                ,{ "t_des", t_des }
                ,{ "b", b }
                 ,{ "A", A }
            };
        }
예제 #19
0
        public double GetFlexuralStrength()
        {
            double phiM_n =0.0;

            CalcLog log = new CalcLog();
            ISection section = Section.Shape;
            if (section is SectionRectangular || section is SectionOfPlateWithHoles || section is SectionI)
            {
                if (section is SectionOfPlateWithHoles)
                {
                    SectionOfPlateWithHoles plateWithHoles = section as SectionOfPlateWithHoles;
                    double S_g = plateWithHoles.B * Math.Pow(plateWithHoles.H, 2);
                    double Z_net = plateWithHoles.Z_x;
                    double Y = 0.9* this.Section.Material.YieldStress * S_g; //Flexural Yielding
                    double R = 0.75* this.Section.Material.UltimateStress * Z_net;
                    phiM_n = Math.Min(Y, R);
                }
                else if (section is ISectionI )
	            {
                        ISectionI IShape = section as ISectionI;
                        double R = GetTensionFlangeRuptureStrength(IShape);
                        if (IsCompactDoublySymmetricForFlexure == false)
                        {
                            throw new Exception("Noncompact and singly symmetric I-shapes are not supported for connection checks.");
                        }
                        else
                        {
                            BeamIDoublySymmetricCompact IBeam = new BeamIDoublySymmetricCompact(Section,this.IsRolled, Log);
                            double Y = 0.9 * IBeam.GetMajorNominalPlasticMoment();
                            phiM_n = Math.Min(Y, R);
                        }

	            }
                else //Rectangle
	            {
                    SectionRectangular plate = section as SectionRectangular;
                    if (plate !=null)
                    {
                        double Z = plate.Z_x;
                        double Y =0.9* this.Section.Material.YieldStress * Z;
                        phiM_n = Y; 
                    }
	            }
            }
            else
            {
                throw new Exception("Wrong section type. Only SectionRectangular, SectionOfPlateWithHoles and SectionI are supported.");
            }

            return phiM_n;
        }
예제 #20
0
        public void DougFirReturnsBendingReferenceValue()
        {
            CalcLog log = new CalcLog();
            VisuallyGradedDimensionLumber dl = new VisuallyGradedDimensionLumber("DOUGLAS FIR-LARCH (NORTH)",
                "Stud", "2 in. & wider", log);

            double F_b = dl.F_b;


            double refValue = 650.0;
            double actualTolerance = EvaluateActualTolerance(F_b, refValue);
            Assert.LessOrEqual(actualTolerance, tolerance);

        }
예제 #21
0
        public static Dictionary<string, object> SeismicStoryForces(double T, double C_s, List<double> StoryElevationsFromBase, List<double> StoryWeights, string Code = "ASCE7-10")
        {
            //Default values
            List<double> StoryForces = new List<double>();


            //Calculation logic:
            CalcLog log = new CalcLog();
            SeismicLateralForceResistingStructure structure = new SeismicLateralForceResistingStructure(log);
            StoryForces = structure.CalculateSeismicLoads(T, C_s, StoryElevationsFromBase, StoryWeights);

            return new Dictionary<string, object>
            {
                { "StoryForces", StoryForces }
            };
        }
예제 #22
0
        public void ReturnsSizeFactorDimensionalLumber()
        {
            CalcLog log = new CalcLog();
            DimensionalLumber m = new DimensionalLumber();
            double b = 1.5;
            double d = 5.5;

            double C_F = m.GetSizeFactor(d, b, Wood.NDS.Entities.SawnLumberType.DimensionLumber, Wood.NDS.Entities.CommercialGrade.No2,
                 Wood.NDS.Entities.ReferenceDesignValueType.Bending);


            double refValue = 1.3;
            double actualTolerance = EvaluateActualTolerance(C_F, refValue);
            Assert.LessOrEqual(actualTolerance, tolerance);

        }
예제 #23
0
        public static Dictionary<string, object> ReferenceValues(string WoodSpeciesId, string CommercialGradeId, string SizeClassId="2 in. & wider",
            string WoodMemberType = "SawnDimensionLumber",
            string Code = "NDS2015")
        {
            //Default values
            double F_b = 0;
            double F_c = 0;
            double F_t = 0;
            double F_v = 0;
            double E = 0;
            double E_min = 0;
            double F_cPerp = 0;
            double G = 0.0;

            //Calculation logic:
            if (WoodMemberType.Contains("Sawn") && WoodMemberType.Contains("Lumber"))
            {
                CalcLog log = new CalcLog();
                VisuallyGradedDimensionLumber dl = new VisuallyGradedDimensionLumber(WoodSpeciesId,
                    CommercialGradeId, SizeClassId, log);

                F_b = dl.F_b/1000.0; //All Dynamo nodes use ksi units by default
                F_c = dl.F_cParal / 1000.0; //All Dynamo nodes use ksi units by default
                F_t = dl.F_t / 1000.0; //All Dynamo nodes use ksi units by default
                F_v = dl.F_v / 1000.0; //All Dynamo nodes use ksi units by default
                E = dl.E / 1000.0; //All Dynamo nodes use ksi units by default
                E_min = dl.E_min / 1000.0; //All Dynamo nodes use ksi units by default
                F_cPerp = dl.F_cPerp / 1000.0; //All Dynamo nodes use ksi units by default
                G = dl.G;
            }
            else
            {
                throw new Exception("Wood member type not supported.");
            }

            return new Dictionary<string, object>
                        {
                            { "F_b", F_b }
            ,{ "F_c", F_c }
            ,{ "F_t", F_t }
            ,{ "F_v", F_v }
            ,{ "E", E }
            ,{ "E_min", E_min }
            ,{ "F_cPerp", F_cPerp }
            ,{ "G", G }
                        };
                    }
예제 #24
0
        public static Dictionary<string, object> WindExposureConstants(string WindExposureCategory, string Code = "ASCE7-10")
        {
            //Default values
            double alpha = 0;
            double z_g = 0;
            double alpha_ = 0;
            double b_ = 0;
            double c = 0;
            double l = 0;
            double epsilon_ = 0;
            double z_min = 0;

            WindExposureCategory Exposure;
            //Calculation logic:
            bool IsValidStringExposure = Enum.TryParse(WindExposureCategory, true, out Exposure);
            if (IsValidStringExposure == false)
            {
                throw new Exception("Exposure category is not recognized. Check input string.");
            }

            CalcLog log = new CalcLog();
            WindStructure structure = new WindStructure(new CalcLog());
            //structure.GetTerrainExposureConstant(TerrainExposureConstant.alpha, Exposure);
           alpha =      structure.GetTerrainExposureConstant(TerrainExposureConstant.alpha , Exposure);
           z_g =        structure.GetTerrainExposureConstant(TerrainExposureConstant.zg , Exposure);
           alpha_ =     structure.GetTerrainExposureConstant(TerrainExposureConstant.alpha_ob , Exposure);
           b_ =         structure.GetTerrainExposureConstant(TerrainExposureConstant.b_ob , Exposure);
           c =          structure.GetTerrainExposureConstant(TerrainExposureConstant.c , Exposure);
           l =          structure.GetTerrainExposureConstant(TerrainExposureConstant.l , Exposure);
           epsilon_ =   structure.GetTerrainExposureConstant(TerrainExposureConstant.epsilon_ob , Exposure);
           z_min =      structure.GetTerrainExposureConstant(TerrainExposureConstant.zmin , Exposure);

            return new Dictionary<string, object>
            {
                { "alpha", alpha }
                ,{ "z_g", z_g }
                ,{ "alpha_", alpha_ }
                ,{ "b_", b_ }
                ,{ "c", c }
                ,{ "l", l }
                ,{ "epsilon_", epsilon_ }
                ,{ "z_min", z_min }
 
            };
        }
        public static Dictionary<string, object> SeismicFundamentalPeriodUpperLimitCoefficient(double S_D1, string Code = "ASCE7-10")
        {
            //Default values
            double C_u = 0;


            //Calculation logic:

            CalcLog log = new CalcLog();
            Wosad.Loads.ASCE.ASCE7_10.SeismicLoads.Building building = new Wosad.Loads.ASCE.ASCE7_10.SeismicLoads.Building(null, log);
            C_u = building.GetCoefficientForUpperBoundOnCalculatedPeriod(S_D1);

            return new Dictionary<string, object>
            {
                { "C_u", C_u }
 
            };
        }
        public void HssRhsConcentratedForceThroughPlateReturnsValue()
        {
            SectionTube ch = new SectionTube(null, 8, 8, 0.25,0.93*0.25,1.5*0.25);
            SteelMaterial matE = new SteelMaterial(46.0);
            SteelRhsSection Element = new SteelRhsSection(ch, matE);

            SectionRectangular rec = new SectionRectangular(0.25,8.0);
            SteelMaterial matR = new SteelMaterial(36.0);
            SteelPlateSection pl = new SteelPlateSection(rec,matR);

            CalcLog log = new CalcLog();

            RhsLongitudinalThroughPlate concForceConnection = new RhsLongitudinalThroughPlate(Element, pl, log, false,45.0, 148.0, 0.0);
            double phiR_n = concForceConnection.GetHssWallPlastificationStrengthUnderAxialLoad().Value;

            double refValueSec = 46.2;
            double actualToleranceSec = EvaluateActualTolerance(phiR_n, refValueSec);
            Assert.LessOrEqual(actualToleranceSec, tolerance);
        }
예제 #27
0
        public static Dictionary<string, object> TorsionalProperties(string SteelShapeId)
        {
            //Default values
                double J = 0;
                double C = 0;
                double C_w = 0;
                double W_no = 0;
                double S_w1 = 0;
                double S_w2 = 0;
                double S_w3 = 0;
                double Q_fl = 0;
                double Q_w = 0;


            //Calculation logic:
                CalcLog cl = new CalcLog();
                AiscCatalogShape shape = new AiscCatalogShape(SteelShapeId, cl);
                
                J = shape.J;
                C = shape.C;
                C_w = shape.Cw;
                C_w  =shape.Cw; 
                W_no =shape.Wno;
                S_w1 =shape.Sw1;
                S_w2 =shape.Sw2;
                S_w3 =shape.Sw3;
                Q_fl =shape.Qf;
                Q_w = shape.Qw; 

            return new Dictionary<string, object>
            {
                { "J", J }
                ,{ "C", C }
                ,{ "C_w", C_w }
                ,{ "W_no", W_no }
                ,{ "S_w1", S_w1 }
                ,{ "S_w2", S_w2 }
                ,{ "S_w3", S_w3 }
                ,{ "Q_fl", Q_fl }
                ,{ "Q_w", Q_w }
 
            };
        }
예제 #28
0
        public static Dictionary<string, object> SeismicDesignCategory(string BuildingRiskCategory, double S_DS, double S_D1, double S_1, string Code = "ASCE7-10")
        {
            //Default values
            string SeismicDesignCategory = "";

            
            //Calculation logic:
            Wosad.Loads.ASCE7.Entities.BuildingRiskCategory RiskCategory;
            bool ValidRiskCategory = Enum.TryParse(BuildingRiskCategory, out RiskCategory);
            CalcLog log = new CalcLog();

            Wosad.Loads.ASCE.ASCE7_10.SeismicLoads.General gen = new Wosad.Loads.ASCE.ASCE7_10.SeismicLoads.General(log);
            SeismicDesignCategory = gen.GetSeismicDesignCategory(RiskCategory, S_DS, S_D1, S_1).ToString();


            return new Dictionary<string, object>
            {
                { "SeismicDesignCategory", SeismicDesignCategory }
 
            };
        }
예제 #29
0
        public ISteelCompressionMember GetRhsShape(ISteelSection Section, double L_ex, double L_ey, double L_ez, ICalcLog CalcLog)
        {

            ISteelCompressionMember column = null;
            IShapeCompactness compactnessX = new ShapeCompactness.HollowMember(Section, Common.Section.Interfaces.FlexuralCompressionFiberPosition.Top, Common.Entities.MomentAxis.XAxis);
            IShapeCompactness compactnessY = new ShapeCompactness.HollowMember(Section, Common.Section.Interfaces.FlexuralCompressionFiberPosition.Top, Common.Entities.MomentAxis.YAxis);
            ICalcLog Log = new CalcLog();

            CompactnessClassAxialCompression webCompactnessX = compactnessX.GetWebCompactnessCompression();
            CompactnessClassAxialCompression webCompactnessY = compactnessY.GetWebCompactnessCompression();

            if (webCompactnessX ==  CompactnessClassAxialCompression.NonSlender && webCompactnessY == CompactnessClassAxialCompression.NonSlender )
            {
                return new RhsNonSlender(Section, L_ex, L_ey, L_ez, CalcLog);
            }
            else
            {
                return new RhsSlender(Section, L_ex, L_ey, L_ez, CalcLog);
            }
            return column;
        }
        public static Dictionary<string, object> CompressionDevelopmentLengthBasic(Concrete.ACI318.General.Concrete.ConcreteMaterial ConcreteMaterial, double d_b,
            RebarMaterial RebarMaterial, bool HasConfiningReinforcement=false, string Code = "ACI318-14")
        {
            //Default values
            double l_dc = 0;


            //Calculation logic:
            IRebarMaterial mat = RebarMaterial.Material;
            Rebar rebar = new Rebar(d_b, false, mat);

            CalcLog log = new CalcLog();
            DevelopmentCompression cd = new DevelopmentCompression(ConcreteMaterial.Concrete, rebar, log, HasConfiningReinforcement);
            l_dc = cd.Length;

            return new Dictionary<string, object>
            {
                { "l_dc", l_dc }
 
            };
        }