/// <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); }
/// <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); }
/// <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(); }
/// <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); } }