/// <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> /// 计算四个最大外边角点压弯组合构件强度 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); }
/// <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> /// 计算四个最大外边角点压弯组合构件稳定性 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); }
/// <summary> /// 输出所有截面验算参数设置 /// </summary> /// <param name="mm"></param> /// <param name="cr"></param> /// <param name="FileOut"></param> public static void WriteCheckPara(ref Bmodel mm, ref CheckRes cr, string FileOut) { FileStream stream = File.Open(FileOut, FileMode.Create); StreamWriter writer = new StreamWriter(stream); writer.WriteLine("截面号\t截面名称\t平面内计算长度\t平面外计算长度\t材料设计强度\t净毛面积比\t塑性发展系数γx\t" + "塑性发展系数γy\t等效弯矩系数βmx\t等效弯矩系数βmy\t等效弯矩系数βtx\t等效弯矩系数βty\t" + "受弯稳定系数ψbx\t受弯稳定系数ψby\t平面内长细比\t平面外长细比" + "\t截面类别\t抗震承力调整系数γre\t截面影响系数η"); foreach (BSections sec in mm.sections.Values) { List <int> tempElem = mm.getElemBySec(sec.Num); if (tempElem.Count == 0) { continue; } int eNum = tempElem[0]; double eLeng = mm.getFrameLength(eNum); FrameElement fe = mm.elements[eNum] as FrameElement; DesignParameters DP = fe.DPs; double ly = DP.Lk_y * eLeng; double lz = DP.Lk_z * eLeng; writer.Write("{0}\t{1}\t{2}\t{3}", sec.Num.ToString(), sec.Name, ly.ToString("0.00"), lz.ToString("0.00")); writer.Write("\t{0}\t{1}\t{2}", DP.fy.ToString("0"), DP.Ratio_Anet.ToString("0.00"), DP.Gamma_y.ToString("0.00")); writer.Write("\t{0}\t{1}\t{2}", DP.Gamma_z.ToString("0.00"), DP.Belta_my.ToString("0.00"), DP.Belta_mz.ToString("0.00")); writer.Write("\t{0}\t{1}", DP.Belta_ty.ToString("0.00"), DP.Belta_tz.ToString("0.00")); writer.Write("\t{0}\t{1}", DP.Phi_by.ToString("0.00"), DP.Phi_bz.ToString("0.00")); writer.Write("\t{0}\t{1}", DP.Lemda_y.ToString("0.00"), DP.Lemda_z.ToString("0.00")); writer.Write("\t{0}\t{1}", DP.SecCat.ToString(), DP.Gamma_re.ToString("0.00")); writer.Write("\t{0}", DP.Yita.ToString("0.00")); writer.Write("\n"); } writer.Close(); stream.Close(); }
/// <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); }
/// <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)); } }