Example #1
0
        private Bore BoreW(Bore bore)
        {
            Bore res = new Bore
            {
                Name   = bore.Name,
                Number = bore.Number,
                WL     = bore.WL,
                X      = bore.X,
                Y      = bore.Y,
                Z      = bore.Z
            };
            List <Layer> downW  = DownW(bore);
            List <Layer> layers = new List <Layer>(UpW(bore));

            if (downW.Count > 0)
            {
                layers.AddRange(downW);
            }
            if (layers.Count > 0)
            {
                res.Layers = new ObservableCollection <Layer>(layers);
                res.Layers[res.Layers.Count - 1].Down = res.Layers[res.Layers.Count - 1].Down + bore.DZ;
                res.Layers[res.Layers.Count - 1].H    = res.Layers[res.Layers.Count - 1].H + bore.DZ;
                res.Layers[res.Layers.Count - 1].Z    = res.Layers[res.Layers.Count - 1].Z - bore.DZ;
                return(res);
            }
            else
            {
                bore.Layers[bore.Layers.Count - 1].Down = bore.Layers[bore.Layers.Count - 1].Down + bore.DZ;
                bore.Layers[bore.Layers.Count - 1].H    = bore.Layers[bore.Layers.Count - 1].H + bore.DZ;
                bore.Layers[bore.Layers.Count - 1].Z    = bore.Layers[bore.Layers.Count - 1].Z - bore.DZ;
                return(bore);
            }
        }
Example #2
0
        private List <Layer> DownW(Bore bore)
        {
            List <Layer> layers = new List <Layer>(bore.Layers.Reverse());
            List <Layer> res    = new List <Layer>();

            foreach (Layer item in layers)
            {
                if (item.Down <= bore.WL)
                {
                    break;
                }
                if (item.IGE.W)
                {
                    item.IGE.RoII = (item.IGE.Ys - 1) / (1 + item.IGE.Ke);
                }
                res.Add(item.Clone());
            }
            if (res.Count > 0)
            {
                res.Reverse();
                res[0].Up = (double)bore.WL;
                res[0].H  = res[0].Down - res[0].Up;
            }
            return(res);
        }
Example #3
0
 public void AddBore(Bore bore)
 {
     if (Bores == null)
     {
         Bores = new ObservableCollection <Bore>();
     }
     Bores.Add(bore);
 }
Example #4
0
        private List <Layer> DownF(Bore bore)
        {
            List <Layer> res = new List <Layer>();
            double       d, z;

            if (Basement)
            {
                d = Hs + Hcf + Db;
            }
            else
            {
                d = D1;
            }

            if (B < 10)
            {
                z = 0.5 * B;
            }
            else
            {
                z = 4 + 0.1 * B;
            }

            double FL, ZL;

            FL = d;
            ZL = d + z;

            Bore boreW = BoreW(bore);

            if (boreW.Layers.Count == 0)
            {
                return(res);
            }
            foreach (Layer item in boreW.Layers)
            {
                if (item.Down > FL)
                {
                    res.Add(item.Clone());
                }
                if (item.Down >= ZL)
                {
                    break;
                }
            }
            res[0].Up = FL;
            res[0].H  = res[0].Down - res[0].Up;
            res[res.Count - 1].Down = ZL;
            res[res.Count - 1].H    = res[res.Count - 1].Down - res[res.Count - 1].Up;
            return(res);
        }
Example #5
0
        private List <Layer> UpW(Bore bore)
        {
            List <Layer> res = new List <Layer>();

            foreach (Layer item in bore.Layers)
            {
                if (item.Up > bore.WL)
                {
                    break;
                }
                res.Add(item.Clone());
            }
            if (res.Count > 0)
            {
                res[res.Count - 1].Down = (double)bore.WL;
                res[res.Count - 1].H    = res[res.Count - 1].Down - res[res.Count - 1].Up;
            }
            return(res);
        }
Example #6
0
        private List <Layer> DownFS(Bore bore)
        {
            List <Layer> res = new List <Layer>();
            double       FL;

            if (Basement)
            {
                FL = Hs + Hcf + Db;
            }
            else
            {
                FL = D1;
            }

            Bore boreW = BoreW(bore);

            if (boreW.Layers.Count == 0)
            {
                return(res);
            }

            foreach (Layer item in boreW.Layers.Reverse())
            {
                if (item.Down < FL)
                {
                    break;
                }
                res.Add(item.Clone());
            }

            if (res.Count > 0)
            {
                res.Reverse();
            }
            res[0].Up = FL;
            res[0].H  = res[0].Down - res[0].Up;

            return(res);
        }
Example #7
0
        private List <Layer> UpF(Bore bore)
        {
            List <Layer> res = new List <Layer>();
            double       d;

            if (Basement)
            {
                d = Hs + Hcf + Db;
            }
            else
            {
                d = D1;
            }

            double FL;

            FL = d;

            Bore boreW = BoreW(bore);

            if (boreW.Layers.Count == 0)
            {
                return(res);
            }
            foreach (Layer item in boreW.Layers)
            {
                if (item.Up > FL)
                {
                    break;
                }
                res.Add(item.Clone());
            }
            res[res.Count - 1].Down = FL;
            res[res.Count - 1].H    = res[res.Count - 1].Down - res[res.Count - 1].Up;

            return(res);
        }
Example #8
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);
        }
Example #9
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);
        }
Example #10
0
        public DataS Sp(Bore bore, FoundLoad load, double kHc = 0.5, PointFound ptFond = PointFound.Центр)
        {
            DataS         res    = new DataS();
            List <Layer>  downFS = DownFS(bore);
            List <double> n      = res.N;

            n = new List <double>();

            foreach (Layer item in downFS)
            {
                n.Add(Math.Ceiling(item.H / (0.4 * B)));
            }

            List <Layer> layers = new List <Layer>();

            for (int i = 0; i < n.Count; i++)
            {
                double z   = downFS[i].Up;
                double dlt = downFS[i].H / n[i];
                while (downFS[i].Down > z)
                {
                    z += dlt;
                    Layer lay = downFS[i].Clone();
                    lay.Down = z;
                    lay.H    = dlt;
                    lay.Up   = z - dlt;
                    layers.Add(lay);
                }
            }

            double FL;

            if (Basement)
            {
                FL = Hs + Hcf + Db;
            }
            else
            {
                FL = D1;
            }

            res.Z = new List <double>()
            {
                0
            };
            foreach (Layer item in layers)
            {
                res.Z.Add(item.Up + 0.5 * item.H - FL);
            }

            res.Alfa = TablesInterolator.Table_5_8(res.Z, B, L, Type);

            List <Layer> upF = UpF(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 sig_zg0 = res.YIIu * FL;
            double p       = load.N / (B * L) + load.q + 2 * FL;

            res.sig_zy = new List <double>();
            res.sig_zp = new List <double>();
            for (int i = 0; i < res.Z.Count; i++)
            {
                res.sig_zp.Add((double)res.Alfa[i] * p);
                res.sig_zy.Add((double)res.Alfa[i] * sig_zg0);
            }

            res.sig_zg = new List <double> {
                sig_zg0
            };
            res.E = new List <double>();
            for (int i = 0; i < layers.Count; i++)
            {
                res.sig_zg.Add(sig_zg0 + layers[i].IGE.RoII * (res.Z[i + 1] - (layers[i].Up - FL)));
                sig_zg0 += layers[i].H * layers[i].IGE.RoII;
                res.E.Add(layers[i].IGE.E * 101.972);
            }

            sig_zg0 = res.YIIu * FL;

            if (B <= 10)
            {
                res.Hmin = B / 2;
            }
            else if (B > 10 && B <= 60)
            {
                res.Hmin = 4 + 0.1 * B;
            }
            else
            {
                res.Hmin = 10;
            }

            int j = 0;

            for (int i = 0; i < layers.Count; i++)
            {
                if (res.sig_zp[i] >= kHc * res.sig_zg[i])
                {
                    res.Hc = res.Z[i];
                }
                else
                {
                    j = i;
                    break;
                }
            }

            int t = 0; double pt = layers[t].H;

            while (pt <= res.Hmin)
            {
                t++;
                pt += layers[t].H;
            }

            if (res.Hmin > res.Hc)
            {
                res.Hc = res.Hmin;
                j      = t;
            }

            if (sig_zg0 >= p)
            {
                for (int i = 0; i <= j; i++)
                {
                    res.Sp += res.sig_zp[i + 1] * layers[i].H / (5 * res.E[i]);
                }
                res.Sp *= 0.8;
            }
            else
            {
                for (int i = 0; i <= j; i++)
                {
                    res.Sp += (res.sig_zp[i + 1] - res.sig_zy[i + 1]) * layers[i].H / res.E[i] + res.sig_zy[i + 1] * layers[i].H / (5 * res.E[i]);
                }
                res.Sp *= 0.8;
            }

            res.Sp = Math.Round(res.Sp * 100, 1);
            res.p  = Math.Round(p, 2);

            return(res);
        }