public static double Yc2(string ground, TypeFlexStructure flex = TypeFlexStructure.Гибкая, double L = 0, double H = 1)
        {
            if (flex == TypeFlexStructure.Гибкая)
            {
                return(1);
            }

            double Yc21 = table_5_4[ground][1];
            double Yc22 = table_5_4[ground][2];

            Geo.Line2d interpolant = new Geo.Line2d(new Geo.Point2d(4, Yc21), new Geo.Point2d(1.5, Yc22));
            if (L / H < 4 && L / H > 1.5)
            {
                return(interpolant.Interpolation(L / H));
            }
            else if (L / H >= 4)
            {
                return(Yc21);
            }
            else
            {
                return(Yc22);
            }
        }
Beispiel #2
0
        public ObservableCollection <DataR> P(ObservableCollection <Bore> bores, TypeFlexStructure ts, double ls, double hs, double k = 1)
        {
            ObservableCollection <DataR> res = new ObservableCollection <DataR>();

            foreach (Bore bore in bores)
            {
                DataR dataR = R(bore, ts, ls, hs, k);
                dataR.Base = Name;
                dataR.Bore = "Скв." + bore.Name;

                if (Loads == null || Loads.Count == 0)
                {
                    dataR.CreateFullData();
                    dataR.CreateMediumData();
                    dataR.CreateSmallData();
                    res.Add(dataR);
                    continue;
                }
                List <double> P     = new List <double>(Loads.Count);
                List <double> PmaxX = new List <double>(Loads.Count);
                List <double> PmaxY = new List <double>(Loads.Count);
                List <double> chP   = new List <double>(Loads.Count);
                List <double> GapX  = new List <double>(Loads.Count);
                List <double> GapY  = new List <double>(Loads.Count);
                List <double> chGap = new List <double>(Loads.Count);
                foreach (FoundLoad item in Loads)
                {
                    P.Add(item.N / (B * L) + item.q + 2 * D1);
                    double ex = (item.Mx / (item.N + 2 * D1 * L * B)) / L;
                    double wx = (B * L * L * L) / 6;
                    double pmaxx;
                    if (ex <= 1 / 6)
                    {
                        pmaxx = item.N / (B * L) + 2 * D1 + Math.Abs(item.Mx) / wx; PmaxX.Add(pmaxx); GapX.Add(0); ex = 0;
                    }
                    else
                    {
                        double C0x = 0.5 * L - item.Mx / (item.N + 2 * D1 * L * B);
                        pmaxx = 2 * (item.N + 2 * D1 * L * B) / (3 * B * C0x);
                        PmaxX.Add(pmaxx);
                        GapX.Add(ex);
                    }
                    double ey = (item.My / (item.N + 2 * D1 * L * B)) / B;
                    double wy = (L * B * B * B) / 6;
                    double pmaxy;
                    if (ey <= 1 / 6)
                    {
                        pmaxy = item.N / (B * L) + 2 * D1 + Math.Abs(item.My) / wy; PmaxY.Add(pmaxy); GapY.Add(0); ey = 0;
                    }
                    else
                    {
                        double C0y = 0.5 * B - item.My / (item.N + 2 * D1 * L * B);
                        pmaxy = 2 * (item.N + 2 * D1 * L * B) / (3 * L * C0y);
                        PmaxY.Add(pmaxy);
                        GapY.Add(ey);
                    }
                    chGap.Add(Math.Max(ex, ey));
                    List <double> chp = new List <double> {
                        (item.N / (B * L) + item.q + 2 * D1) / dataR.R, pmaxx / (1.2 * dataR.R), pmaxy / (1.2 * dataR.R)
                    };
                    chP.Add(chp.Max());
                }
                dataR.P        = Math.Round(P.Max(), 3);
                dataR.PmaxX    = Math.Round(PmaxX.Max(), 3);
                dataR.PmaxY    = Math.Round(PmaxY.Max(), 3);
                dataR.CheckP   = Math.Round(chP.Max(), 3);
                dataR.CheckGap = Math.Round(chGap.Max(), 3);
                dataR.GapX     = Math.Round(GapX.Max(), 3);
                dataR.GapY     = Math.Round(GapY.Max(), 3);

                dataR.CreateFullData();
                dataR.CreateMediumData();
                dataR.CreateSmallData();

                res.Add(dataR);
            }

            return(res);
        }
Beispiel #3
0
        private DataR R(Bore bore, TypeFlexStructure ts, double ls, double hs, double k = 1)
        {
            DataR        res   = new DataR();
            List <Layer> upF   = UpF(bore);
            List <Layer> downF = DownF(bore);
            double       roh   = 0;
            double       h     = 0;

            if (upF.Count > 0)
            {
                foreach (Layer item in upF)
                {
                    roh += item.H * item.IGE.RoII;
                    h   += item.H;
                }
            }
            res.YIIu = Math.Round(roh / h, 3);

            double fih = 0;
            double ch  = 0;

            roh = 0;
            h   = 0;
            if (downF.Count > 0)
            {
                foreach (Layer item in downF)
                {
                    fih += item.H * item.IGE.FiII;
                    ch  += item.H * item.IGE.CII * 100;
                    roh += item.H * item.IGE.RoII;
                    h   += item.H;
                }
            }
            res.YII        = Math.Round(roh / h, 3);
            res.FiII       = Math.Round(fih / h);
            res.CII        = Math.Round(ch / h, 3);
            res.IL         = downF[0].IGE.IL;
            res.Ke         = downF[0].IGE.Ke;
            res.Ys         = downF[0].IGE.Ys;
            res.Ground     = "ИГЭ " + downF[0].IGE.NumIGE + " " + downF[0].IGE.Description;
            res.GroundType = downF[0].IGE.GroundType;
            res.Yc1        = TablesInterolator.Yc1(res.GroundType);
            res.Yc2        = TablesInterolator.Yc2(res.GroundType, ts, ls, hs);
            double[] MyMqMc = TablesInterolator.My_Mq_Mc(res.FiII);
            res.My = MyMqMc[0];
            res.Mq = MyMqMc[1];
            res.Mc = MyMqMc[2];
            res.K  = k;

            if (B < 10)
            {
                res.Kz = 1;
            }
            else
            {
                res.Kz = 8 / B + 0.2;
            }

            if (Basement)
            {
                res.d1 = Math.Round(Hs + Hcf * (Ycf / res.YIIu), 3);
            }
            else
            {
                res.d1 = D1;
            }

            if (Basement && Db > 2)
            {
                res.db = 2;
            }
            else if (Basement && Db <= 2)
            {
                res.db = Db;
            }
            else
            {
                res.db = 0;
            }

            res.R = res.Yc1 * res.Yc2 * (res.My * res.Kz * B * res.YII + res.Mq * res.d1 * res.YIIu + (res.Mq - 1) * res.db * res.YIIu + res.Mc * res.CII) / k;
            res.R = Math.Round(res.R, 2);
            //res.GroundType = "";

            return(res);
        }
Beispiel #4
0
        public DataR P(Bore bore, TypeFlexStructure ts, double ls, double hs, double k = 1)
        {
            DataR dataR = R(bore, ts, ls, hs, k);

            dataR.Base = Name;
            dataR.Bore = "Скв." + bore.Name;

            if (Loads == null || Loads.Count == 0)
            {
                FullResults   = dataR.FullResults();
                MediumResults = dataR.MediumResults();
                SmallResults  = dataR.SmallResults();
                return(dataR);
            }
            List <double> P     = new List <double>(Loads.Count);
            List <double> PmaxX = new List <double>(Loads.Count);
            List <double> PmaxY = new List <double>(Loads.Count);
            List <double> chP   = new List <double>(Loads.Count);
            List <double> GapX  = new List <double>(Loads.Count);
            List <double> GapY  = new List <double>(Loads.Count);
            List <double> chGap = new List <double>(Loads.Count);

            foreach (FoundLoad item in Loads)
            {
                P.Add(item.N / (B * L) + item.q + 2 * D1);
                double ex = (Math.Abs(item.Mx) / (item.N + 2 * D1 * L * B)) / L;
                double wx = (B * L * L * L) / 6;
                double pmaxx;
                if (ex <= (1.0 / 6))
                {
                    pmaxx = item.N / (B * L) + 2 * D1 + Math.Abs(item.Mx) / wx; PmaxX.Add(pmaxx); GapX.Add(0); ex = 0;
                }
                else
                {
                    double C0x = 0.5 * L - item.Mx / (item.N + 2 * D1 * L * B);
                    pmaxx = 2 * (item.N + 2 * D1 * L * B) / (3 * B * C0x);
                    PmaxX.Add(pmaxx);
                    GapX.Add(ex);
                }
                double ey = (Math.Abs(item.My) / (item.N + 2 * D1 * L * B)) / B;
                double wy = (L * B * B * B) / 6;
                double pmaxy;
                if (ey <= (1.0 / 6))
                {
                    pmaxy = item.N / (B * L) + 2 * D1 + Math.Abs(item.My) / wy; PmaxY.Add(pmaxy); GapY.Add(0); ey = 0;
                }
                else
                {
                    double C0y = 0.5 * B - item.My / (item.N + 2 * D1 * L * B);
                    pmaxy = 2 * (item.N + 2 * D1 * L * B) / (3 * L * C0y);
                    PmaxY.Add(pmaxy);
                    GapY.Add(ey);
                }
                chGap.Add(Math.Max(ex, ey));
                List <double> chp = new List <double> {
                    (item.N / (B * L) + item.q + 2 * D1) / dataR.R, pmaxx / (1.2 * dataR.R), pmaxy / (1.2 * dataR.R)
                };
                chP.Add(chp.Max());
            }
            dataR.P        = Math.Round(P.Max(), 3);
            dataR.PmaxX    = Math.Round(PmaxX.Max(), 3);
            dataR.PmaxY    = Math.Round(PmaxY.Max(), 3);
            dataR.CheckP   = Math.Round(chP.Max(), 3);
            dataR.CheckGap = Math.Round(chGap.Max(), 3);
            dataR.GapX     = Math.Round(GapX.Max(), 3);
            dataR.GapY     = Math.Round(GapY.Max(), 3);

            FullResults   = dataR.FullResults();
            MediumResults = dataR.MediumResults();
            SmallResults  = dataR.SmallResults();

            return(dataR);
        }