示例#1
0
 public static double NeutralAxis(Plate botFlange, Plate web, Plate topFlange, Plate bolster, Plate slab, double modRatio, bool composite,
                                  bool positiveMoment)
 {
     double[] array = CompositeAndPositiveMoment(composite, positiveMoment);
     return((botFlange.Area() * botFlange.CG + web.Area() * web.CG + topFlange.Area() * topFlange.CG + (bolster.Area(modRatio) * bolster.CG + slab.Area(modRatio) * slab.CG) * array[0] * array[1])
            / (botFlange.Area() + web.Area() + topFlange.Area() + (bolster.Area(modRatio) + slab.Area(modRatio)) * array[0] * array[1]));
 }
示例#2
0
        public static double BeamArea(Plate botFlange, Plate web, Plate topFlange, Plate bolster, Plate slab, List <Reinforcing> reinforcing, double modRatio,
                                      bool composite, bool positiveMoment)
        {
            double[] array     = CompositeAndPositiveMoment(composite, positiveMoment);
            double   reinfArea = 0;

            foreach (Reinforcing reinf in reinforcing)
            {
                reinfArea += reinf.Area * (1 - array[1] / modRatio); //remove slab area where reinf exists with (1 - 1/modRatio)
            }
            return(botFlange.Area() + web.Area() + topFlange.Area() + (bolster.Area(modRatio) + slab.Area(modRatio)) * array[0] * array[1] + reinfArea * array[0]);
        }
示例#3
0
        public static double MomentOfInertia(Plate botFlange, Plate web, Plate topFlange, Plate bolster, Plate slab, double modRatio, bool composite,
                                             bool positiveMoment)
        {
            double[] array = CompositeAndPositiveMoment(composite, positiveMoment);
            double   NA    = NeutralAxis(botFlange, web, topFlange, bolster, slab, modRatio, composite, positiveMoment);

            return(botFlange.I_x() + botFlange.Area() * Math.Pow(botFlange.CG - NA, 2)
                   + web.I_x() + web.Area() * Math.Pow(web.CG - NA, 2)
                   + topFlange.I_x() + topFlange.Area() * Math.Pow(topFlange.CG - NA, 2)
                   + (bolster.I_x(modRatio) + bolster.Area(modRatio) * Math.Pow(bolster.CG - NA, 2)                   // need to add modRatio to bolster.I_x()
                      + slab.I_x(modRatio) + slab.Area(modRatio) * Math.Pow(slab.CG - NA, 2)) * array[0] * array[1]); // need to add modRatio to slab.I_x()
        }
示例#4
0
        public static double MomentOfInertia(Plate botFlange, Plate web, Plate topFlange, Plate bolster, Plate slab, List <Reinforcing> reinforcing, double modRatio, bool composite,
                                             bool positiveMoment)
        {
            double[] array   = CompositeAndPositiveMoment(composite, positiveMoment);
            double   NA      = NeutralAxis(botFlange, web, topFlange, bolster, slab, reinforcing, modRatio, composite, positiveMoment);
            double   reinf_I = 0;

            foreach (Reinforcing reinf in reinforcing)
            {
                reinf_I += reinf.Area * (1 - array[1] / modRatio) * Math.Pow(reinf.Location - NA, 2);
            }
            return(botFlange.I_x() + botFlange.Area() * Math.Pow(botFlange.CG - NA, 2)
                   + web.I_x() + web.Area() * Math.Pow(web.CG - NA, 2)
                   + topFlange.I_x() + topFlange.Area() * Math.Pow(topFlange.CG - NA, 2)
                   + (bolster.I_x(modRatio) + bolster.Area(modRatio) * Math.Pow(bolster.CG - NA, 2)                 // need to add modRatio to bolster.I_x()
                      + slab.I_x(modRatio) + slab.Area(modRatio) * Math.Pow(slab.CG - NA, 2)) * array[0] * array[1] // need to add modRatio to slab.I_x()
                   + reinf_I * array[0]);
        }
示例#5
0
        public static double FirstMoment_Q(CompositeBeam compositeBeam, double modRatio, bool composite, bool positiveMoment, double location)
        {
            double[] array = CompositeAndPositiveMoment(composite, positiveMoment);
            double   NA = NeutralAxis(compositeBeam, modRatio, composite, positiveMoment);
            Plate    botFlange = compositeBeam.BotFlange, web = compositeBeam.Web, topFlange = compositeBeam.TopFlange, bolster = compositeBeam.Bolster, slab = compositeBeam.Slab;

            // component {area, dist to location}
            double[] slabC            = { 0, 0 }, bolstC = { 0, 0 }, tFlangeC = { 0, 0 }, webC = { 0, 0 }, bFlangeC = { 0, 0 };
            double[] tFlangeT         = { 0, 0 }, webT = { 0, 0 }, bFlangeT = { 0, 0 };
            double   reinfFirstMoment = 0;

            if (NA <= location)
            {
                foreach (Reinforcing reinf in compositeBeam.Reinforcing)
                {
                    if (location >= reinf.Location)
                    {
                        reinfFirstMoment += reinf.Area * (1 - array[1] / modRatio) * (reinf.Location - NA);
                    }
                }

                if (location >= compositeBeam.Slab.BotLocation)
                {
                    slabC[0] = slab.Area(modRatio) * (slab.TopLocation - location) / slab.y * array[0] * array[1];
                    slabC[1] = (slab.TopLocation - NA) / 2;
                }
                else if (location >= bolster.BotLocation)
                {
                    slabC[0]  = slab.Area(modRatio) * array[0] * array[1];
                    slabC[1]  = slab.CG - NA;
                    bolstC[0] = bolster.Area(modRatio) * (bolster.TopLocation - location) / bolster.y * array[0] * array[1];
                    bolstC[1] = (bolster.TopLocation - NA) / 2;
                }
                else if (location >= topFlange.BotLocation)
                {
                    slabC[0]    = slab.Area(modRatio) * array[0] * array[1];
                    slabC[1]    = slab.CG - NA;
                    bolstC[0]   = bolster.Area(modRatio) * array[0] * array[1];
                    bolstC[1]   = bolster.CG - NA;
                    tFlangeC[0] = topFlange.Area() * (topFlange.TopLocation - location) / topFlange.y;
                    tFlangeC[1] = (topFlange.TopLocation - NA) / 2;
                }
                else if (location >= web.BotLocation)
                {
                    slabC[0]    = slab.Area(modRatio) * array[0] * array[1];
                    slabC[1]    = slab.CG - NA;
                    bolstC[0]   = bolster.Area(modRatio) * array[0] * array[1];
                    bolstC[1]   = bolster.CG - NA;
                    tFlangeC[0] = topFlange.Area();
                    tFlangeC[1] = topFlange.CG - NA;
                    webC[0]     = web.Area() * (web.TopLocation - location) / web.y;
                    webC[1]     = (web.TopLocation - NA) / 2;
                }
                else
                {
                    slabC[0]    = slab.Area(modRatio) * array[0] * array[1];
                    slabC[1]    = slab.CG - NA;
                    bolstC[0]   = bolster.Area(modRatio) * array[0] * array[1];
                    bolstC[1]   = bolster.CG - NA;
                    tFlangeC[0] = topFlange.Area();
                    tFlangeC[1] = topFlange.CG - NA;
                    webC[0]     = web.Area();
                    webC[1]     = web.CG - NA;
                    bFlangeC[0] = botFlange.Area() * (botFlange.TopLocation - location) / botFlange.y;
                    bFlangeC[1] = (botFlange.TopLocation - NA) / 2;
                }
                return(slabC[0] * slabC[1] + bolstC[0] * bolstC[1] + tFlangeC[0] * tFlangeC[1] + webC[0] * webC[1] + bFlangeC[0] * bFlangeC[1]
                       + reinfFirstMoment * array[0]);
            }
            else
            {
                if (location <= botFlange.TopLocation)
                {
                    bFlangeT[0] = botFlange.Area() * (location - botFlange.BotLocation) / botFlange.y;
                    bFlangeT[1] = (NA - botFlange.BotLocation) / 2;
                }
                else if (location <= web.TopLocation)
                {
                    bFlangeT[0] = botFlange.Area();
                    bFlangeT[1] = NA - botFlange.CG;
                    webT[0]     = web.Area() * (location - web.BotLocation) / web.y;
                    webT[1]     = (NA - web.BotLocation) / 2;
                }
                else if (location <= topFlange.TopLocation)
                {
                    bFlangeT[0] = botFlange.Area();
                    bFlangeT[1] = NA - botFlange.CG;
                    webT[0]     = web.Area();
                    webT[1]     = NA - web.CG;
                    tFlangeT[0] = topFlange.Area() * (location - topFlange.BotLocation) / topFlange.y;
                    tFlangeT[1] = (NA - topFlange.BotLocation) / 2;
                }
                else
                {
                    bFlangeT[0] = botFlange.Area();
                    bFlangeT[1] = NA - botFlange.CG;
                    webT[0]     = web.Area();
                    webT[1]     = NA - web.CG;
                    tFlangeT[0] = topFlange.Area();
                    tFlangeT[1] = NA - topFlange.CG;
                }
                return(tFlangeT[0] * tFlangeT[1] + webT[0] * webT[1] + bFlangeT[0] * bFlangeT[1]);
            }
        }
示例#6
0
        //REMOVE PLASTIC PROPERTIES FROM ELASTIC PROPERTIES CLASS!!!

        /*public static double[] PlasticVariables(Plate botFlange, Plate web, Plate topFlange, Plate bolster, Plate slab)
         * {
         *  double[] a = new double[4];
         *  // dist to PNA from top of slab if located in slab
         *  a[0] = (botFlange.Force() + web.Force() + topFlange.Force()) / (0.85 * slab.x * slab.Strength);
         *  // dist to PNA from top of haunch if located in bolster
         *  a[1] = (botFlange.Force() + web.Force() + topFlange.Force() - 0.85 * slab.Force()) / (0.85 * bolster.x * bolster.Strength);
         *  // dist to PNA from top of top flange if located in top flange
         *  a[2] = (botFlange.Force() + web.Force() + topFlange.Force() - 0.85 * slab.Force() - 0.85 * bolster.Force()) / (2 * topFlange.x * topFlange.Strength);
         *  // dist to PNA from top of web if located in web
         *  a[3] = (botFlange.Force() - web.Force() - topFlange.Force() - 0.85 * slab.Force() - 0.85 * bolster.Force()) / (2 * web.x * web.Strength);
         *
         *  return a;
         * }
         *
         * public static double[] PlasticTop(Plate botFlange, Plate web, Plate topFlange, Plate bolster, Plate slab)
         * {
         *  // return[force, CG]
         *  double[] a = PlasticVariables(botFlange, web, topFlange, bolster, slab), b = new double[2];
         *  double PNA = PlasticNeutralAxis(botFlange, web, topFlange, bolster, slab);
         *  // component {force, dist to PNA}
         *  double[] slabC = { 0, 0 }, bolstC = { 0, 0 }, tFlangeC = { 0, 0 }, webC = { 0, 0 };
         *  if (a[0] <= slab.y)
         *  {
         *      slabC[0] = a[0] * 0.85 * slab.x * slab.Strength;
         *      slabC[1] = slab.TopLocation - a[0] / 2 - PNA;
         *  }
         *  else if (a[1] <= bolster.y)
         *  {
         *      slabC[0] = 0.85 * slab.Force();
         *      slabC[1] = slab.CG - PNA;
         *      bolstC[0] = a[1] * 0.85 * bolster.x * bolster.Strength;
         *      bolstC[1] = bolster.TopLocation - a[1] / 2 - PNA;
         *  }
         *  else if (a[2] <= topFlange.y)
         *  {
         *      slabC[0] = 0.85 * slab.Force();
         *      slabC[1] = slab.CG - PNA;
         *      bolstC[0] = 0.85 * bolster.Force();
         *      bolstC[1] = bolster.CG - PNA;
         *      tFlangeC[0] = a[2] * topFlange.x * topFlange.Strength;
         *      tFlangeC[1] = topFlange.TopLocation - a[2] / 2 - PNA;
         *  }
         *  else
         *  {
         *      slabC[0] = 0.85 * slab.Force();
         *      slabC[1] = slab.CG - PNA;
         *      bolstC[0] = 0.85 * bolster.Force();
         *      bolstC[1] = bolster.CG - PNA;
         *      tFlangeC[0] = topFlange.Force();
         *      tFlangeC[1] = topFlange.CG - PNA;
         *      webC[0] = a[3] * web.x * web.Strength;
         *      webC[1] = web.TopLocation - a[3] / 2 - PNA;
         *  }
         *
         *  b[0] = slabC[0] + bolstC[0] + tFlangeC[0] + webC[0];
         *  b[1] = (slabC[0] * slabC[1] + bolstC[0] * bolstC[1] + tFlangeC[0] * tFlangeC[1] + webC[0] * webC[1]) / b[0];
         *
         *  return b;
         * }
         *
         * public static double[] PlasticBottom(Plate botFlange, Plate web, Plate topFlange, Plate bolster, Plate slab)
         * {
         *  double[] a = PlasticVariables(botFlange, web, topFlange, bolster, slab), b = new double[2];
         *  double PNA = PlasticNeutralAxis(botFlange, web, topFlange, bolster, slab);
         *  // component {force, dist to PNA}
         *  double[] slabT = { 0, 0 }, bolstT = { 0, 0 }, tFlangeT = { 0, 0 }, webT = { 0, 0 }, bFlangeT = { 0, 0 };
         *  if (a[0] <= slab.y | a[1] <= bolster.y)
         *  {
         *      tFlangeT[0] = topFlange.Force();
         *      tFlangeT[1] = PNA - topFlange.CG;
         *      webT[0] = web.Force();
         *      webT[1] = PNA - web.CG;
         *      bFlangeT[0] = botFlange.Force();
         *      bFlangeT[1] = PNA - botFlange.CG;
         *
         *  }
         *  else if (a[2] <= topFlange.y)
         *  {
         *      tFlangeT[0] = (topFlange.y - a[2]) * topFlange.x * topFlange.Strength;
         *      tFlangeT[1] = (topFlange.y - a[2]) / 2;
         *      webT[0] = web.Force();
         *      webT[1] = PNA - web.CG;
         *      bFlangeT[0] = botFlange.Force();
         *      bFlangeT[1] = PNA - botFlange.CG;
         *  }
         *  else
         *  {
         *      webT[0] = (web.y - a[3]) * web.x * web.Strength;
         *      webT[1] = (web.y - a[3]) / 2;
         *      bFlangeT[0] = botFlange.Force();
         *      bFlangeT[1] = PNA - botFlange.CG;
         *  }
         *
         *  b[0] = slabT[0] + bolstT[0] + tFlangeT[0] + webT[0] + bFlangeT[0];
         *  b[1] = (slabT[0] * slabT[1] + bolstT[0] * bolstT[1] + tFlangeT[0] * tFlangeT[1] + webT[0] * webT[1] + bFlangeT[0] * bFlangeT[1]) / b[0];
         *
         *  return b;
         *
         * }
         *
         * public static double PlasticNeutralAxis(Plate botFlange, Plate web, Plate topFlange, Plate bolster, Plate slab)
         * {
         *  double[] a = PlasticVariables(botFlange, web, topFlange, bolster, slab);
         *
         *  if (a[0] <= slab.y)
         *  {
         *      return botFlange.y + web.y + topFlange.y + bolster.y + slab.y - a[0];
         *  }
         *  else if (a[1] <= bolster.y)
         *  {
         *      return botFlange.y + web.y + topFlange.y + bolster.y - a[1];
         *  }
         *  else if (a[2] <= topFlange.y)
         *  {
         *      return botFlange.y + web.y + topFlange.y - a[2];
         *  }
         *  else
         *  {
         *      return botFlange.y + web.y - a[3];
         *  }
         * }*/
        //REMOVE PLASTIC PROPERTIES FROM ELASTIC PROPERTIES CLASS!!!

        public static double FirstMoment_Q(Plate botFlange, Plate web, Plate topFlange, Plate bolster, Plate slab, double modRatio, bool composite,
                                           bool positiveMoment, double location)
        {
            double[] array = CompositeAndPositiveMoment(composite, positiveMoment);
            double   NA    = NeutralAxis(botFlange, web, topFlange, bolster, slab, modRatio, composite, positiveMoment);

            // component {area, dist to location}
            double[] slabC    = { 0, 0 }, bolstC = { 0, 0 }, tFlangeC = { 0, 0 }, webC = { 0, 0 }, bFlangeC = { 0, 0 };
            double[] tFlangeT = { 0, 0 }, webT = { 0, 0 }, bFlangeT = { 0, 0 };
            if (NA <= location)
            {
                if (location >= slab.BotLocation)
                {
                    slabC[0] = slab.Area(modRatio) * (slab.TopLocation - location) / slab.y * array[0] * array[1];
                    slabC[1] = (slab.TopLocation - location) / 2;
                }
                else if (location >= bolster.BotLocation)
                {
                    slabC[0]  = slab.Area(modRatio) * array[0] * array[1];
                    slabC[1]  = slab.CG - location;
                    bolstC[0] = bolster.Area(modRatio) * (bolster.TopLocation - location) / bolster.y * array[0] * array[1];
                    bolstC[1] = (bolster.TopLocation - location) / 2;
                }
                else if (location >= topFlange.BotLocation)
                {
                    slabC[0]    = slab.Area(modRatio) * array[0] * array[1];
                    slabC[1]    = slab.CG - location;
                    bolstC[0]   = bolster.Area(modRatio) * array[0] * array[1];
                    bolstC[1]   = bolster.CG - location;
                    tFlangeC[0] = topFlange.Area() * (topFlange.TopLocation - location) / topFlange.y;
                    tFlangeC[1] = (topFlange.TopLocation - location) / 2;
                }
                else if (location >= web.BotLocation)
                {
                    slabC[0]    = slab.Area(modRatio) * array[0] * array[1];
                    slabC[1]    = slab.CG - location;
                    bolstC[0]   = bolster.Area(modRatio) * array[0] * array[1];
                    bolstC[1]   = bolster.CG - location;
                    tFlangeC[0] = topFlange.Area();
                    tFlangeC[1] = topFlange.CG - location;
                    webC[0]     = web.Area() * (web.TopLocation - location) / web.y;
                    webC[1]     = (web.TopLocation - location) / 2;
                }
                else
                {
                    slabC[0]    = slab.Area(modRatio) * array[0] * array[1];
                    slabC[1]    = slab.CG - location;
                    bolstC[0]   = bolster.Area(modRatio) * array[0] * array[1];
                    bolstC[1]   = bolster.CG - location;
                    tFlangeC[0] = topFlange.Area();
                    tFlangeC[1] = topFlange.CG - location;
                    webC[0]     = web.Area();
                    webC[1]     = web.CG - location;
                    bFlangeC[0] = botFlange.Area() * (botFlange.TopLocation - location) / botFlange.y;
                    bFlangeC[1] = (botFlange.TopLocation - location) / 2;
                }
                return(slabC[0] * slabC[1] + bolstC[0] * bolstC[1] + tFlangeC[0] * tFlangeC[1] + webC[0] * webC[1] + bFlangeC[0] * bFlangeC[1]);
            }
            else
            {
                if (location <= botFlange.TopLocation)
                {
                    bFlangeT[0] = botFlange.Area() * (location - botFlange.BotLocation) / botFlange.y;
                    bFlangeT[1] = (location - botFlange.BotLocation) / 2;
                }
                else if (location <= web.TopLocation)
                {
                    bFlangeT[0] = botFlange.Area();
                    bFlangeT[1] = location - botFlange.CG;
                    webT[0]     = web.Area() * (location - web.BotLocation) / web.y;
                    webT[1]     = (location - web.BotLocation) / 2;
                }
                else if (location <= topFlange.TopLocation)
                {
                    bFlangeT[0] = botFlange.Area();
                    bFlangeT[1] = location - botFlange.CG;
                    webT[0]     = web.Area();
                    webT[1]     = location - web.CG;
                    tFlangeT[0] = topFlange.Area() * (location - topFlange.BotLocation) / topFlange.y;
                    tFlangeT[1] = (location - topFlange.BotLocation) / 2;
                }
                else
                {
                    bFlangeT[0] = botFlange.Area();
                    bFlangeT[1] = location - botFlange.CG;
                    webT[0]     = web.Area();
                    webT[1]     = location - web.CG;
                    tFlangeT[0] = topFlange.Area();
                    tFlangeT[1] = location - topFlange.CG;
                }
                return(tFlangeT[0] * tFlangeT[1] + webT[0] * webT[1] + bFlangeT[0] * bFlangeT[1]);
            }
        }
示例#7
0
 public static double BeamArea(Plate botFlange, Plate web, Plate topFlange, Plate bolster, Plate slab, double modRatio, bool composite, bool positiveMoment)
 {
     double[] array = CompositeAndPositiveMoment(composite, positiveMoment);
     return(botFlange.Area() + web.Area() + topFlange.Area() + (bolster.Area(modRatio) + slab.Area(modRatio)) * array[0] * array[1]);
 }