コード例 #1
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);
        }
コード例 #2
0
        /// <summary>
        /// 更新当前对话框显示的截面信息
        /// </summary>
        /// <param name="SecId">截面号</param>
        public void UpdateCurentSec(int SecId)
        {
            MainForm   mmf    = this.Owner as MainForm;
            ModelForm1 mf     = mmf.ModelForm;
            Bmodel     mm     = mf.CurModel;
            BSections  curSec = mm.sections[SecId];
            string     len    = mm.unit.Length;//长度单位

            //更新截面信息
            tb_SecID.Text   = SecId.ToString();
            tb_SecName.Text = curSec.Name;


            //更新截面特性
            Dgv_SecProp.Rows.Clear();//清除行
            Dgv_SecProp.RowHeadersVisible = false;
            DataAddRow(ref Dgv_SecProp, "A", curSec.Area.ToString(), len + "^2");
            DataAddRow(ref Dgv_SecProp, "Ixx", curSec.Ixx.ToString(), len + "^4");
            DataAddRow(ref Dgv_SecProp, "Iyy", curSec.Iyy.ToString(), len + "^4");
            DataAddRow(ref Dgv_SecProp, "Izz", curSec.Izz.ToString(), len + "^4");
            DataAddRow(ref Dgv_SecProp, "Iw", curSec.Iw.ToString(), len + "^6");

            DataAddRow(ref Dgv_SecProp, "Cent:y", curSec.Cy.ToString(), len);
            DataAddRow(ref Dgv_SecProp, "Cent:z", curSec.Cz.ToString(), len);
            DataAddRow(ref Dgv_SecProp, "Shear:y", curSec.Sy.ToString(), len);
            DataAddRow(ref Dgv_SecProp, "Shear:z", curSec.Sz.ToString(), len);

            DataAddRow(ref Dgv_SecProp, "CyM", curSec.CyM.ToString(), len);
            DataAddRow(ref Dgv_SecProp, "CyP", curSec.CyP.ToString(), len);
            DataAddRow(ref Dgv_SecProp, "CzM", curSec.CzM.ToString(), len);
            DataAddRow(ref Dgv_SecProp, "CzP", curSec.CzP.ToString(), len);

            MakeEditable(ref Dgv_SecProp, 1);//使可编辑
        }
コード例 #3
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);
        }
コード例 #4
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);
        }
コード例 #5
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);
        }
コード例 #6
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;
        }
コード例 #7
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);
        }
コード例 #8
0
        private void button1_Click(object sender, EventArgs e)
        {
            MainForm   mmf    = this.Owner as MainForm;
            ModelForm1 mf     = mmf.ModelForm;
            Bmodel     mm     = mf.CurModel;
            int        secid  = Convert.ToInt32(tb_SecID.Text);
            BSections  curSec = mm.sections[secid];

            foreach (DataGridViewRow row in Dgv_SecProp.Rows)
            {
                string Prop = row.Cells[0].Value.ToString();
                double valu = Convert.ToDouble(row.Cells[1].Value.ToString());
                switch (Prop)
                {
                case "A": curSec.Area = valu; break;

                case "Iw": curSec.Iw = valu; break;

                case "Ixx": curSec.Ixx = valu; break;

                case "Iyy": curSec.Iyy = valu; break;

                case "Izz": curSec.Izz = valu; break;

                case "Cent:y": curSec.Cy = valu; break;

                case "Cent:z": curSec.Cz = valu; break;

                case "Shear:y": curSec.Sy = valu; break;

                case "Shear:z": curSec.Sz = valu; break;

                case "CyM": curSec.CyM = valu; break;

                case "CyP": curSec.CyP = valu; break;

                case "CzM": curSec.CzM = valu; break;

                case "CzP": curSec.CzP = valu; break;

                default: break;
                }
            }

            this.Close();
        }
コード例 #9
0
        /// <summary>
        /// 对某单元按指定的计算长度计算长细比
        /// </summary>
        /// <param name="mm">模型对像</param>
        /// <param name="iElem">单元号,必须为梁单元FrameElement</param>
        /// <param name="l_0y">平面内计算长度</param>
        /// <param name="l_0z">平面外计算长度</param>
        public static void CalDesignPara_lemda(ref Bmodel mm, int iElem, double l_0y, double l_0z)
        {
            FrameElement ele    = mm.elements[iElem] as FrameElement;
            int          iSec   = ele.iPRO;                                                  //截面号
            BSections    curSec = mm.sections[iSec];                                         //当前截面
            double       i_y    = Math.Sqrt(mm.sections[iSec].Iyy / mm.sections[iSec].Area); //回转半径
            double       i_z    = Math.Sqrt(mm.sections[iSec].Izz / mm.sections[iSec].Area);

            ele.DPs.Lemda_y = l_0y / i_y; //计算长细比
            ele.DPs.Lemda_z = l_0z / i_z; //计算长细比

            //形心到剪心的矩离
            double e0       = Math.Sqrt(Math.Pow(curSec.Sy - curSec.Cy, 2) + Math.Pow(curSec.Sz - curSec.Cz, 2));
            double i02      = Math.Pow(e0, 2) + Math.Pow(i_y, 2) + Math.Pow(i_z, 2);
            double Lemda_z2 = 0;//扭转屈曲的换算长细比

            //如果截面上下不对称
            if (Math.Abs(curSec.CzM - curSec.CzP) > 0.002)
            {
                //扭转屈曲的换算长细比
                Lemda_z2 = i02 * curSec.Area / (curSec.Ixx / 25.7 + curSec.Iw / Math.Pow(l_0z, 2));
                double temp1 = Math.Pow(ele.DPs.Lemda_z, 2) + Lemda_z2;
                double temp2 = temp1 + Math.Sqrt(Math.Pow(temp1, 2) - 4 * (1 - Math.Pow(e0, 2) / i02) *
                                                 Math.Pow(ele.DPs.Lemda_z, 2) * Lemda_z2);
                ele.DPs.Lemda_yz = Math.Sqrt(temp2) / Math.Sqrt(2);
            }
            else if (Math.Abs(curSec.CyM - curSec.CyP) > 0.002)
            {
                //扭转屈曲的换算长细比
                Lemda_z2 = i02 * curSec.Area / (curSec.Ixx / 25.7 + curSec.Iw / Math.Pow(l_0y, 2));
                double temp1 = Math.Pow(ele.DPs.Lemda_y, 2) + Lemda_z2;
                double temp2 = temp1 + Math.Sqrt(Math.Pow(temp1, 2) - 4 * (1 - Math.Pow(e0, 2) / i02) *
                                                 Math.Pow(ele.DPs.Lemda_y, 2) * Lemda_z2);
                ele.DPs.Lemda_yz = Math.Sqrt(temp2) / Math.Sqrt(2);
            }

            double eleLeng = mm.getFrameLength(iElem); //单元长度

            ele.DPs.Lk_y = l_0y / eleLeng;             //计算长度系数(单元长度的倍数)
            ele.DPs.Lk_z = l_0z / eleLeng;
        }
コード例 #10
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));
            }
        }