Пример #1
0
        public override bool Equals(object obj)
        {
            CircleSection s2 = obj as CircleSection;

            if (this.D == s2.D &&
                this.FiB == s2.FiB &&
                this.C == s2.C &&
                this.NoB == s2.NoB &&
                Equals(this.CurrentConcrete, s2.CurrentConcrete) &&
                Equals(this.CurrentSteel, s2.CurrentSteel) &&
                this.Fi == s2.Fi &&
                this.Ab == s2.Ab &&
                this.A == s2.A &&
                this.Fi == s2.Fi)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Пример #2
0
        /// <summary>
        /// Funkcja zwraca szerokość rozwarcia rysy dla zadanej siły podłużnej oraz momentu zginającego
        /// </summary>
        /// <param name="section">klasa reprezentująca obliczany przekrój</param>
        /// <param name="NEd">siła osiowa w kN</param>
        /// <param name="MEd">moment zginający w kNm</param>
        /// <param name="k1">współczynnik k1 zależny od przyczepności zbrojenia (0.8 lub 1.6 patrz EC / 0.8 dla prętów żebrowanych)</param>
        /// <param name="kt">współczynnik kt zależny od czasu trwania obciążenia (0.6 obc. krótkotrwałe, 0.4 obc. długotrwałe)</param>
        /// <returns>Zwraca szerokość rozwarcia rysy w mm</returns>
        public double SLS_CrackWidth(double NEd, double MEd, double kt, double k1, bool lowerFace)
        {
            StressState naprezenia = SLS_GetStresses(NEd, MEd);
            double      alfaE      = CurrentSteel.Es / CurrentConcrete.Ecm;
            double      As; //w milimetrach kwadratowych!!
            double      fi, c, spacing;

            if (this is RectangleSection)
            {
                RectangleSection sec = this as RectangleSection;
                if (lowerFace)
                {
                    fi      = sec.Fi1;
                    c       = sec.C1;
                    spacing = sec.Spacing1;
                    As      = Asi[1] * Dimfactor * Dimfactor;
                }
                else
                {
                    fi      = sec.Fi2;
                    c       = sec.C2;
                    spacing = sec.Spacing2;
                    As      = Asi[0] * Dimfactor * Dimfactor;
                }
            }
            else if (this is CircleSection)
            {
                CircleSection sec = this as CircleSection;
                fi      = sec.FiB;
                c       = sec.C;
                spacing = sec.Spacing;
                As      = ZbrRozcPole(naprezenia.WysokośćStrefySciskanej) * Dimfactor * Dimfactor;
            }
            else
            {
                fi      = 0;
                c       = 0;
                spacing = 0;
                As      = 0;
            }
            double roPeff, deltaEpsilon, AcEff, srMax;
            double sigmaS;

            if (lowerFace)
            {
                sigmaS = naprezenia.BottomSteelStress(this);
            }
            else
            {
                sigmaS = naprezenia.TopSteelStress(this);
            }

            double Es     = this.CurrentSteel.Es;
            double fctEff = this.CurrentConcrete.fctm;
            double h      = HTotal;                                         //wysokosc w milimetrach!!
            double x      = naprezenia.WysokośćStrefySciskanej * Dimfactor; //w milimetrach!!
            double k2;
            double k3 = 3.4;
            double k4 = 0.425;

            //przypadek gdy nie dochodzi do zarysowania w ogóle
            if (naprezenia.Faza == 1)
            {
                return(0);
            }
            if (As == 0)
            {
                As = 0.0000001;
            }

            if (sigmaS > 0)
            {
                return(0);
            }
            else
            {
                sigmaS = Math.Abs(sigmaS);
            }

            /*
             * if (As == 0)
             * {
             *  //return 100;
             *  As = 0.000001;
             * }
             */

            AcEff  = Crack_AcEff(x);     // w milimetrach kwadratowych!!
            roPeff = As / AcEff;

            double deltaEpsilon1 = (sigmaS - kt * fctEff / roPeff * (1 + alfaE * roPeff)) / Es;
            double deltaEpsilon2 = 0.6 * sigmaS / Es;

            deltaEpsilon = Math.Max(deltaEpsilon1, deltaEpsilon2);

            //określenie współczynnika k2
            double epsilon1, epsilon2;

            if (naprezenia.BottomSteelStress(this) * naprezenia.TopSteelStress(this) < 0)
            {
                k2 = 0.5;
            }/*
              * else if (naprezenia.SteelAs1Stress < 0 && naprezenia.SteelAs1Stress < 0)
              * {
              * k2 = 1;
              * }*/
            else if (naprezenia.BottomSteelStress(this) > 0)
            {
                k2 = 0;
            }
            else
            {
                double epsilonAs1 = naprezenia.BottomSteelStress(this) / Es;
                double epsilonAs2 = naprezenia.TopSteelStress(this) / Es;
                double epsEdge1   = Math.Abs((epsilonAs1 - epsilonAs2) / (DiE.Max() - DiE.Min()) * DiE.Min() - epsilonAs1);
                double epsEdge2   = Math.Abs((epsilonAs1 - epsilonAs2) / (DiE.Max() - DiE.Min()) * (HTotal / Dimfactor - DiE.Max()) + epsilonAs2);
                epsilon1 = Math.Max(epsEdge1, epsEdge2);
                epsilon2 = Math.Min(epsEdge1, epsEdge2);
                k2       = (epsilon1 + epsilon2) / (2 * epsilon1);
            }

            double maxSpace = 5 * (c + 0.5 * fi);

            //określenie maksymalnego rozstawu rys
            if (As == 0 || spacing > maxSpace)
            {                          // jesli nie ma zbrojenia lub rozstaw jest zbyt duży
                srMax = 1.3 * (h - x); // w milimetrach
            }
            else
            {
                srMax = k3 * c + k4 * (k1 * k2 * fi) / roPeff;      // w milimetrach
            }
            double wk1 = srMax * deltaEpsilon;

            return(wk1);        //w milimetrach
        }
Пример #3
0
        // KONIEC OPROGRAMOWANIA KONTROLEK

        private Section CreateSection(int i)
        {
            Section section;

            if (i == 1)
            {
                if (radioBut_Rectangle_sec1.IsChecked == true)
                {
                    if (comboBox_As1_spac_no_1.Text == "spacing")
                    {
                        section = new RectangleSection(
                            new Concrete((Concrete.classes)comboBox_Concrete_1.SelectedIndex),
                            new Steel((Steel.classes)comboBox_Steel_1.SelectedIndex),
                            Double.Parse(textBox_width_1.Text),
                            Double.Parse(textBox_height_1.Text),
                            Double.Parse(comboBox_diameter_As1_1.Text),
                            Double.Parse(textBox_spac_no_As1_1.Text),
                            Double.Parse(textBox_cover_As1_1.Text),
                            Double.Parse(comboBox_diameter_As2_1.Text),
                            Double.Parse(textBox_spac_no_As2_1.Text),
                            Double.Parse(textBox_cover_As2_1.Text),
                            CreateStirrups(1)
                            );
                    }
                    else if (comboBox_As1_spac_no_1.Text == "no of bars")
                    {
                        section = new RectangleSection(
                            new Concrete((Concrete.classes)comboBox_Concrete_1.SelectedIndex),
                            new Steel((Steel.classes)comboBox_Steel_1.SelectedIndex),
                            Double.Parse(textBox_width_1.Text),
                            Double.Parse(textBox_height_1.Text),
                            Double.Parse(comboBox_diameter_As1_1.Text),
                            Int32.Parse(textBox_spac_no_As1_1.Text),
                            Double.Parse(textBox_cover_As1_1.Text),
                            Double.Parse(comboBox_diameter_As2_1.Text),
                            Int32.Parse(textBox_spac_no_As2_1.Text),
                            Double.Parse(textBox_cover_As2_1.Text),
                            CreateStirrups(1)
                            );
                    }
                    else
                    {
                        section = null;
                    }
                }
                else if (radioBut_Circular_sec1.IsChecked == true)
                {
                    section = new CircleSection(
                        new Concrete((Concrete.classes)comboBox_Concrete_1.SelectedIndex),
                        new Steel((Steel.classes)comboBox_Steel_1.SelectedIndex),
                        Double.Parse(textBox_diameter_1.Text),
                        Double.Parse(comboBox_diameter_Circ_1.Text),
                        Double.Parse(textBox_cover_Circ_1.Text),
                        Int32.Parse(textBox_no_Circ_1.Text));
                }
                else
                {
                    section = null;
                }
            }
            else if (i == 2)
            {
                if (radioBut_Rectangle_sec2.IsChecked == true)
                {
                    if (comboBox_As1_spac_no_2.Text == "spacing")
                    {
                        section = new RectangleSection(
                            new Concrete((Concrete.classes)comboBox_Concrete_2.SelectedIndex),
                            new Steel((Steel.classes)comboBox_Steel_2.SelectedIndex),
                            Double.Parse(textBox_width_2.Text),
                            Double.Parse(textBox_height_2.Text),
                            Double.Parse(comboBox_diameter_As1_2.Text),
                            Double.Parse(textBox_spac_no_As1_2.Text),
                            Double.Parse(textBox_cover_As1_2.Text),
                            Double.Parse(comboBox_diameter_As2_2.Text),
                            Double.Parse(textBox_spac_no_As2_2.Text),
                            Double.Parse(textBox_cover_As2_2.Text),
                            CreateStirrups(2)
                            );
                    }
                    else if (comboBox_As1_spac_no_2.Text == "no of bars")
                    {
                        section = new RectangleSection(
                            new Concrete((Concrete.classes)comboBox_Concrete_2.SelectedIndex),
                            new Steel((Steel.classes)comboBox_Steel_2.SelectedIndex),
                            Double.Parse(textBox_width_2.Text),
                            Double.Parse(textBox_height_2.Text),
                            Double.Parse(comboBox_diameter_As1_2.Text),
                            Int32.Parse(textBox_spac_no_As1_2.Text),
                            Double.Parse(textBox_cover_As1_2.Text),
                            Double.Parse(comboBox_diameter_As2_2.Text),
                            Int32.Parse(textBox_spac_no_As2_2.Text),
                            Double.Parse(textBox_cover_As2_2.Text),
                            CreateStirrups(2)
                            );
                    }
                    else
                    {
                        section = null;
                    }
                }
                else if (radioBut_Circular_sec2.IsChecked == true)
                {
                    section = new CircleSection(
                        new Concrete((Concrete.classes)comboBox_Concrete_2.SelectedIndex),
                        new Steel((Steel.classes)comboBox_Steel_2.SelectedIndex),
                        Double.Parse(textBox_diameter_2.Text),
                        Double.Parse(comboBox_diameter_Circ_2.Text),
                        Double.Parse(textBox_cover_Circ_2.Text),
                        Int32.Parse(textBox_no_Circ_2.Text));
                }
                else
                {
                    section = null;
                }
            }
            else
            {
                section = null;
            }
            return(section);
        }