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>
        /// 计算截面验算点上的强度最大值(绝对值)
        /// </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.º 3
0
        /// <summary>
        /// 读入截面验算的设置参数
        /// </summary>
        /// <param name="mm"></param>
        /// <param name="cr"></param>
        /// <param name="FileIn"></param>
        public static void ReadCheckPara(ref Bmodel mm, ref CheckRes cr, string FileIn)
        {
            string line = null;      //行文本

            string[] curdata = null; //当前行数据变量
            int      curNum  = 0;    //当前截面号

            FileStream   stream = File.Open(FileIn, FileMode.Open, FileAccess.Read);
            StreamReader reader = new StreamReader(stream);

            line = reader.ReadLine();

            for (line = reader.ReadLine(); line != null; line = reader.ReadLine())
            {
                curdata = line.Split("\t".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); //字符串分割
                curNum  = Convert.ToInt32(curdata[0]);                                           //当前截面号

                List <int> eles = mm.getElemBySec(curNum);                                       //当前截面的单元集
                foreach (int ele in eles)
                {
                    if (!(mm.elements[ele] is FrameElement))
                    {
                        continue;
                    }
                    FrameElement fe = mm.elements[ele] as FrameElement;

                    double      len_y    = Convert.ToDouble(curdata[2]);
                    double      len_z    = Convert.ToDouble(curdata[3]);
                    double      Net_r    = Convert.ToDouble(curdata[5]);
                    double      Gamma_y  = Convert.ToDouble(curdata[6]);
                    double      Gamma_z  = Convert.ToDouble(curdata[7]);
                    double      Betla_my = Convert.ToDouble(curdata[8]);
                    double      Betal_mz = Convert.ToDouble(curdata[9]);
                    double      Betal_ty = Convert.ToDouble(curdata[10]);
                    double      Betal_tz = Convert.ToDouble(curdata[11]);
                    double      Phi_by   = Convert.ToDouble(curdata[12]);
                    double      Phi_bz   = Convert.ToDouble(curdata[13]);
                    double      F        = Convert.ToDouble(curdata[4]);  //强度设计值
                    double      Gamma_re = Convert.ToDouble(curdata[17]); //承载力调整系数
                    SecCategory cat      = SecCategory.b;
                    switch (curdata[16])
                    {
                    case "a": cat = SecCategory.a; break;

                    case "b": cat = SecCategory.b; break;

                    case "c": cat = SecCategory.c; break;

                    case "d": cat = SecCategory.d; break;

                    default: cat = SecCategory.b; break;
                    }
                    double Yita = Convert.ToDouble(curdata[18]);//截面影响系数


                    //更新长细比
                    CodeCheck.CalDesignPara_lemda(ref mm, ele, len_y, len_z);
                    //更新受压稳定系数
                    CodeCheck.CalDesignPara_phi(ref mm, ele, 1, cat);
                    CodeCheck.CalDesignPara_phi(ref mm, ele, 2, cat);

                    fe.DPs.SecCat     = cat;
                    fe.DPs.Ratio_Anet = Net_r;
                    fe.DPs.Gamma_y    = Gamma_y;
                    fe.DPs.Gamma_z    = Gamma_z;
                    fe.DPs.Belta_my   = Betla_my;
                    fe.DPs.Belta_mz   = Betal_mz;
                    fe.DPs.Belta_ty   = Betal_ty;
                    fe.DPs.Belta_tz   = Betal_tz;
                    fe.DPs.fy         = F;//强度设计值
                    fe.DPs.Gamma_re   = Gamma_re;
                    fe.DPs.Yita       = Yita;
                }
            }

            reader.Close();
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 验算单个单元
        /// </summary>
        /// <param name="mm">模型对像</param>
        /// <param name="iElem">单元号</param>
        public void CheckElemByNum(ref Bmodel mm, int iElem)
        {
            EleCheckResData EleData = new EleCheckResData(iElem); //单元组合验算表

            List <string> coms = mm.LoadCombTable.ComSteel;

            foreach (string com in coms)
            {
                double gamma_re = 1.0;//承载力抗震调整系数
                //如果未激活则不验算
                if (mm.LoadCombTable[com].bACTIVE == false)
                {
                    continue;
                }
                FrameElement ele = mm.elements[iElem] as FrameElement;

                //若为地震组合则取存储的承载力抗震调整系数
                if (mm.LoadCombTable[com].hasLC_ANAL(ANAL.ES) ||
                    mm.LoadCombTable[com].hasLC_ANAL(ANAL.RS))
                {
                    gamma_re = ele.DPs.Gamma_re;
                }

                //先进行单元内力组合
                ElemForce EFcom = mm.CalElemForceComb(mm.LoadCombTable[com], iElem);

                //计算强度
                double Strength_i = CodeCheck.CalSecMaxStrength_YW(EFcom.Force_i,
                                                                   mm.sections[ele.iPRO],
                                                                   ele.DPs) * gamma_re;//i截面计算强度
                double Strength_2 = CodeCheck.CalSecMaxStrength_YW(EFcom.Force_48,
                                                                   mm.sections[ele.iPRO],
                                                                   ele.DPs) * gamma_re;
                double Strength_j = CodeCheck.CalSecMaxStrength_YW(EFcom.Force_j,
                                                                   mm.sections[ele.iPRO],
                                                                   ele.DPs) * gamma_re;
                //计算稳定性强度
                //double Stability_i = CodeCheck.CalStability_YW(EFcom.Force_i, mm.sections[ele.iPRO],
                //    ele.DPs, mm.mats[ele.iMAT].Elast)*gamma_re;
                //double Stability_2 =CodeCheck. CalStability_YW(EFcom.Force_48, mm.sections[ele.iPRO],
                //    ele.DPs, mm.mats[ele.iMAT].Elast)*gamma_re;
                //double Stability_j =CodeCheck. CalStability_YW(EFcom.Force_j, mm.sections[ele.iPRO],
                //    ele.DPs, mm.mats[ele.iMAT].Elast)*gamma_re;
                double Stability_i = CodeCheck.CalSecMaxStability_YW(EFcom.Force_i, mm.sections[ele.iPRO],
                                                                     ele.DPs, mm.mats[ele.iMAT].Elast) * gamma_re;
                double Stability_2 = CodeCheck.CalSecMaxStability_YW(EFcom.Force_48, mm.sections[ele.iPRO],
                                                                     ele.DPs, mm.mats[ele.iMAT].Elast) * gamma_re;
                double Stability_j = CodeCheck.CalSecMaxStability_YW(EFcom.Force_j, mm.sections[ele.iPRO],
                                                                     ele.DPs, mm.mats[ele.iMAT].Elast) * gamma_re;

                double Ratio   = Math.Max(Strength_i, Stability_i) / ele.DPs.fy;
                double Ratio_2 = Math.Max(Strength_2, Stability_2) / ele.DPs.fy;
                double Ratio_j = Math.Max(Strength_j, Stability_j) / ele.DPs.fy;

                //加入到数据库
                SingleEleCheckResData Secrd =
                    new SingleEleCheckResData("I", com, EFcom.Force_i.N, EFcom.Force_i.My, EFcom.Force_i.Mz,
                                              Strength_i, Stability_i, Ratio);
                SingleEleCheckResData Secrd_2 =
                    new SingleEleCheckResData("1/2", com, EFcom.Force_48.N, EFcom.Force_48.My, EFcom.Force_48.Mz,
                                              Strength_2, Stability_2, Ratio_2);
                SingleEleCheckResData Secrd_j =
                    new SingleEleCheckResData("J", com, EFcom.Force_j.N, EFcom.Force_j.My, EFcom.Force_j.Mz,
                                              Strength_j, Stability_j, Ratio_j);

                Secrd = Secrd.TheMaxRatio(Secrd_2);//取得控制内力
                Secrd = Secrd.TheMaxRatio(Secrd_j);

                EleData.Add(com, Secrd);//添加到单元验算结果数据中
            }

            //添加到数据表
            if (this._CheckResTable.ContainsKey(iElem))
            {
                this._CheckResTable.Remove(iElem);
                this._CheckResTable.Add(iElem, EleData);
            }
            else
            {
                this._CheckResTable.Add(iElem, EleData);
            }
        }