Ejemplo n.º 1
0
        /// <summary>
        /// 计算截面所有验算点的控制稳定应力
        /// </summary>
        /// <param name="NL">截面内力</param>
        /// <param name="Sec">截面对像</param>
        /// <param name="DPs">单元设计参数</param>
        /// <param name="E">材料弹性模量</param>
        /// <returns>截面稳定应力值</returns>
        public static double CalSecMaxStability_YW(SecForce NL, BSections Sec, DesignParameters DPs, double E)
        {
            double            Res   = 0;
            List <double>     slist = new List <double>();
            Point2dCollection pts;

            if (Sec is SectionGeneral)
            {
                SectionGeneral secg = Sec as SectionGeneral;
                pts = secg.OPOLY;
            }
            else
            {
                pts = Sec.CheckPointCollection;
            }
            //添加到结果表
            foreach (Point2d pt in pts)
            {
                slist.Add(CodeCheck.CalPointStability(NL, Sec, pt, DPs, E));
            }

            //求得集合中的最大值
            foreach (double ss in slist)
            {
                Res = Math.Max(Res, ss);
            }
            return(Res);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 计算验算点的压弯组合构件强度 GB 50017-2003 式(5.2.1)
        /// </summary>
        /// <param name="NL">截面内力</param>
        /// <param name="Sec">截面</param>
        /// <param name="iPt">截面中的验算点号</param>
        /// <param name="DPs">截面验算参数</param>
        /// <returns>强度应力(拉为正,压为负)</returns>
        public static double CalPointStrength_YW(SecForce NL, BSections Sec, int iPt, DesignParameters DPs)
        {
            double y, z, Res;

            if (Sec is SectionDBuser)
            {
                Sec.getCheckPoint(iPt, out y, out z); //取得截面验算点坐标
            }
            else if (Sec is SectionGeneral)           //如果为自定截面则验算所有外轮廓点
            {
                SectionGeneral GenSec = Sec as SectionGeneral;
                y = GenSec.OPOLY[iPt].X;
                z = GenSec.OPOLY[iPt].Y;
            }
            else
            {
                y = 0; z = 0;
            }

            //如果验算点为0,0,则直接返回0应力值
            if (y == 0 && z == 0)
            {
                return(0);
            }
            double Wy  = Sec.Iyy / z;         //抗弯截面模量
            double Wz  = Sec.Izz / y;         //抗弯截面模量
            double Wny = Wy * DPs.Ratio_Anet; //净截面模量
            double Wnz = Wz * DPs.Ratio_Anet; //净截面模量
            double My  = -(NL.My);            //弯矩,取内力的反号:参Midsa手册02 P16页梁单元内力输出方向
            double Mz  = -(NL.Mz);

            Res = NL.N / (Sec.Area * DPs.Ratio_Anet) +
                  My / (DPs.Gamma_y * Wny) + Mz / (DPs.Gamma_z * Wnz);
            return(Res);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 计算四个最大外边角点压弯组合构件强度 GB 50017-2003 式(5.2.1)
        /// 注:目前默认支持单位为:N,m
        /// </summary>
        /// <param name="NL">截面内力</param>
        /// <param name="Sec">截面参数</param>
        /// <param name="DPs">设计参数</param>
        /// <returns>强度应力值(均为正值)</returns>
        public static double CalStrength_YW(SecForce NL, BSections Sec, DesignParameters DPs)
        {
            double Res1, Res2, Res3, Res4, RES;                //返回结果

            double Wy  = Sec.Iyy / Math.Max(Sec.CzM, Sec.CzP); //抗弯截面模量
            double Wz  = Sec.Izz / Math.Max(Sec.CyM, Sec.CyP); //抗弯截面模量
            double Wny = Wy * DPs.Ratio_Anet;                  //净截面模量
            double Wnz = Wz * DPs.Ratio_Anet;                  //净截面模量
            double My  = Math.Abs(NL.My);                      //弯矩,取绝对值
            double Mz  = Math.Abs(NL.Mz);

            Res1 = NL.N / (Sec.Area * DPs.Ratio_Anet) +
                   My / (DPs.Gamma_y * Wny) + Mz / (DPs.Gamma_z * Wnz);
            Res2 = NL.N / (Sec.Area * DPs.Ratio_Anet) -
                   My / (DPs.Gamma_y * Wny) - Mz / (DPs.Gamma_z * Wnz);
            Res3 = NL.N / (Sec.Area * DPs.Ratio_Anet) -
                   My / (DPs.Gamma_y * Wny) + Mz / (DPs.Gamma_z * Wnz);
            Res4 = NL.N / (Sec.Area * DPs.Ratio_Anet) +
                   My / (DPs.Gamma_y * Wny) - Mz / (DPs.Gamma_z * Wnz);

            RES = Math.Max(Math.Abs(Res1), Math.Abs(Res2));
            RES = Math.Max(Math.Abs(Res3), RES);
            RES = Math.Max(Math.Abs(Res4), RES);
            return(RES);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 计算截面验算点上的强度最大值(绝对值)
        /// </summary>
        /// <param name="NL">截面内力</param>
        /// <param name="Sec">截面对像</param>
        /// <param name="DPs">单元设计参数</param>
        /// <returns>截面强度应力值(绝对值)</returns>
        public static double CalSecMaxStrength_YW(SecForce NL, BSections Sec, DesignParameters DPs)
        {
            double        Res   = 0;
            List <double> slist = new List <double>();
            int           count = 4;

            if (Sec is SectionGeneral)
            {
                SectionGeneral secg = Sec as SectionGeneral;
                count = secg.OPOLY.Length;
            }
            else
            {
                count = 4;
            }
            //添加到结果表
            for (int i = 0; i < count; i++)
            {
                slist.Add(CodeCheck.CalPointStrength_YW(NL, Sec, i, DPs));
            }

            //求得集合中的最大值
            foreach (double ss in slist)
            {
                Res = Math.Max(Res, Math.Abs(ss));
            }
            return(Res);
        }
Ejemplo n.º 5
0
        private void button5_Click(object sender, EventArgs e)
        {
            BLoadComb    com = CurModel.LoadCombTable.getLoadComb(LCKind.STEEL, "sGen2");
            ElemForce    ef  = CurModel.CalElemForceComb(com, 4);
            SecForce     sf  = ef.Force_i;
            FrameElement fe  = CurModel.elements[4] as FrameElement;
            BSections    sec = CurModel.sections[fe.iPRO];
            double       s1  = CodeCheck.CalPointStrength_YW(sf, sec, 1, fe.DPs);
            double       s2  = CodeCheck.CalPointStrength_YW(sf, sec, 2, fe.DPs);
            double       s3  = CodeCheck.CalPointStrength_YW(sf, sec, 3, fe.DPs);
            double       s4  = CodeCheck.CalPointStrength_YW(sf, sec, 4, fe.DPs);

            return;
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 计算四个最大外边角点压弯组合构件稳定性 GB 50017-2003 式(5.2.5-1) (5.2.5-2)
        /// 注:目前默认支持单位为:N,m
        /// </summary>
        /// <param name="NL">截面内力</param>
        /// <param name="Sec">截面参数</param>
        /// <param name="DPs">设计参数</param>
        /// <param name="E">材料的弹性模量</param>
        /// <returns>稳定验算应力值(均为正值)</returns>
        public static double CalStability_YW(SecForce NL, BSections Sec, DesignParameters DPs,
                                             double E)
        {
            double Res1, Res2, RES; //分别对应(5.2.5-1) (5.2.5-2)式结果
            double Wy, Wz;          //抗弯截面模量

            if (NL.My >= 0)
            {
                Wy = Sec.Iyy / Sec.CzP;//+z侧受压
            }
            else
            {
                Wy = Sec.Iyy / Sec.CzM;//-z侧受压
            }
            if (NL.Mz >= 0)
            {
                Wz = Sec.Izz / Sec.CyP;//+y侧受压
            }
            else
            {
                Wz = Sec.Izz / Sec.CyM;  //-y侧受压
            }
            double N  = NL.N;            //轴向力
            double My = Math.Abs(NL.My); //弯矩,取绝对值
            double Mz = Math.Abs(NL.Mz);

            //参数
            double N_ey = Math.Pow(Math.PI, 2) * E * Sec.Area / (1.1 * Math.Pow(DPs.Lemda_y, 2));
            double N_ez = Math.Pow(Math.PI, 2) * E * Sec.Area / (1.1 * Math.Pow(DPs.Lemda_z, 2));

            double Ref_Ny = 1;//与轴压力有关的参数
            double Ref_Nz = 1;

            if (N < 0)//如为轴压力对参数进行调整
            {
                Ref_Ny = 1 - 0.8 * Math.Abs(N) / N_ey;
                Ref_Nz = 1 - 0.8 * Math.Abs(N) / N_ez;
            }

            //进行功能计算,注意弯矩后两项应为-号
            Res1 = N / (DPs.Phi_y * Sec.Area) - DPs.Belta_my * My / (DPs.Gamma_y * Wy * Ref_Ny) -
                   DPs.Yita * DPs.Belta_tz * Mz / (DPs.Phi_bz * Wz);
            Res2 = N / (DPs.Phi_z * Sec.Area) - DPs.Yita * DPs.Belta_ty * My / (DPs.Phi_by * Wy)
                   - DPs.Belta_mz * Mz / (DPs.Gamma_z * Wz * Ref_Nz);

            RES = Math.Max(Math.Abs(Res1), Math.Abs(Res2));
            return(RES);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 计算验算点的稳定性应力 GB 50017-2003 式(5.2.5-1) (5.2.5-2)
        /// </summary>
        /// <param name="NL">截面内力</param>
        /// <param name="Sec">截面</param>
        /// <param name="Pt">截面验算点,以截面形心为原点</param>
        /// <param name="DPs">截面验算参数</param>
        /// <param name="E">材料弹性模量</param>
        /// <returns>稳定应力(为正或0)</returns>
        public static double CalPointStability(SecForce NL, BSections Sec, Point2d Pt, DesignParameters DPs, double E)
        {
            double y, z, Res, Sta1, Sta2;

            y = Pt.X; z = Pt.Y;

            double N  = NL.N;  //轴向力
            double My = NL.My; //弯矩
            double Mz = NL.Mz;

            //参数
            double N_ey = Math.Pow(Math.PI, 2) * E * Sec.Area / (1.1 * Math.Pow(DPs.Lemda_y, 2));
            double N_ez = Math.Pow(Math.PI, 2) * E * Sec.Area / (1.1 * Math.Pow(DPs.Lemda_z, 2));

            double Ref_Ny = 1;//与轴压力有关的参数
            double Ref_Nz = 1;

            if (N < 0)//如为轴压力对参数进行调整
            {
                Ref_Ny = 1 - 0.8 * Math.Abs(N) / N_ey;
                Ref_Nz = 1 - 0.8 * Math.Abs(N) / N_ez;
            }

            //进行功能计算,注意弯矩后两项应为-号
            Sta1 = N / (DPs.Phi_y * Sec.Area) - DPs.Belta_my * My * z / (DPs.Gamma_y * Sec.Iyy * Ref_Ny) -
                   DPs.Yita * DPs.Belta_tz * Mz * y / (DPs.Phi_bz * Sec.Izz);
            Sta2 = N / (DPs.Phi_z * Sec.Area) - DPs.Yita * DPs.Belta_ty * My * z / (DPs.Phi_by * Sec.Iyy)
                   - DPs.Belta_mz * Mz * y / (DPs.Gamma_z * Sec.Izz * Ref_Nz);

            //取控制值
            Res = Math.Min(Sta1, Sta2);
            //如果为拉应力则返回0,如果为压应力反回正的应力值
            if (Res > 0)
            {
                return(0);
            }
            else
            {
                return(Math.Abs(Res));
            }
        }