public void GetMNCurveY(out List <Tuple <double, double> > MN_Y, int npts = 20) { DataTable Summary = new DataTable("Y方向MN曲线"); Summary.Gen(120, new string[] { "M", "N", "a", "e", "fst", "fsc", "Ncal" }); MN_Y = new List <Tuple <double, double> >(); double h = LengthY; double b = LengthZ; double Nn = 0.0; double Mu = 0.0; Reinforcement CompRebar = RebarY1; Reinforcement TensRebar = RebarY0; ConcreteAASHTO Conc = thisConcrete; double DepthT = h - TensRebar.locY; double DepthC = Math.Abs(CompRebar.locY); double a_balance = GetABalance(Conc, TensRebar, DepthT); double e_balance = GetEBalance(b, h, Conc, TensRebar, CompRebar, DepthT, DepthC); double N_balance = GetNBalance(b, h, Conc, TensRebar, CompRebar, DepthT, DepthC); double Nstep = N_balance / (npts - 1); Tuple <double, double> fsa = new Tuple <double, double>(0, 0); for (int i = 0; i < npts; i++) { Nn = N_balance - Nstep * i; fsa = PubFuncs.GetCompRebarFs(1, LengthY, LengthZ, LengthY, DepthC, thisConcrete, RebarY0, RebarY1, -Nn); Mu = 0.85 * thisConcrete.Fck_cylinder * LengthZ * fsa.Item2 * (DepthT - 0.5 * fsa.Item2) - RebarY1.AsTotal * fsa.Item1 * (DepthT - (LengthY - DepthC)); MN_Y.Add(new Tuple <double, double>(Mu, Nn)); double Ncal = 0.85 * Conc.Fck_cylinder * b * fsa.Item2 - RebarY0.AsTotal * RebarY0.Fy - RebarY1.AsTotal * fsa.Item1; Summary.WriteLine(i, new double[] { Mu, Nn, fsa.Item2, Mu / Nn, RebarY0.Fy, fsa.Item1, Ncal }); } double Estep = e_balance / (5 * npts); double e = 0; for (int i = 0; i < 5 * npts; i++) { e = e_balance - Estep * (i + 1); fsa = PubFuncs.GetTensRebarFs(a_balance, Conc.Beta1 * h, b, h, DepthT, DepthC, Conc, TensRebar, CompRebar, e); Mu = 0.85 * thisConcrete.Fck_cylinder * b * fsa.Item2 * (DepthT - 0.5 * fsa.Item2) + CompRebar.AsTotal * CompRebar.Fy * (DepthT - (LengthY - DepthC)); //Nn = 0.85 * thisConcrete.Fck_cylinder * b * fsa.Item2 - TensRebar.AsTotal * fsa.Item1 + CompRebar.AsTotal * CompRebar.Fy; Summary.WriteLine(npts + i, new double[] { Mu, Mu / e, fsa.Item2, e, fsa.Item1, -RebarY1.Fy }); } }
/// <summary> /// 截面分析 /// </summary> public void SectionAnalysis(int npts = 20) { List <Tuple <double, double> > MN_Y = new List <Tuple <double, double> >(); List <Tuple <double, double> > MN_Z = new List <Tuple <double, double> >(); double N_balance = GetNBalance(LengthZ, LengthY, thisConcrete, RebarY0, RebarY1, LengthY - RebarY0.locY, Math.Abs(RebarY1.locY)); double a_balance = GetABalance(thisConcrete, RebarY0, LengthY - RebarY0.locY); double Nstep = N_balance / (npts - 1); double Nn = 0.0; double Mu = 0.0; double DepthC = RebarY1.locY; double DepthT = LengthY - RebarY0.locY; Tuple <double, double> fsa = new Tuple <double, double>(0, 0); for (int i = 0; i < npts; i++) { Nn = N_balance - Nstep * i; if (Nn <= N_balance) { fsa = PubFuncs.GetCompRebarFs(1, LengthY, LengthZ, LengthY, DepthC, thisConcrete, RebarY0, RebarY1, -Nn); } Mu = 0.85 * thisConcrete.Fck_cylinder * LengthZ * fsa.Item2 * (DepthT - 0.5 * fsa.Item2) - RebarY1.AsTotal * fsa.Item1 * (DepthT - (LengthY - DepthC)); MN_Y.Add(new Tuple <double, double>(Mu, Nn)); } MN_Y.Sort((x, y) => x.Item2.CompareTo(y.Item2)); ; ////受拉破坏 //Console.WriteLine(string.Format("# 截面为<常轴力弯曲破坏>")); //Tuple<double, double> fsa = GetFs(1, H, Nn); //var Mu = 0.85 * Conc.Fcu * B * fsa.Item2 * (DepthT - 0.5 * fsa.Item2) - CompRebar.As * fsa.Item1 * (DepthT - (H - DepthC)); //Console.WriteLine(string.Format("# a={0:F3}mm", fsa.Item2)); //Console.WriteLine(string.Format("# fs={0:F3}MPa", fsa.Item1)); //Console.WriteLine(string.Format("# 极限承载力Mu={1:F0}kNm", fsa.Item1, Mu / 1e6)); //Console.WriteLine(string.Format("# 极限承载力φMu={1:F0}kNm", fsa.Item1, Mu / 1e6 * 0.75)); return; }