internal virtual double GetBranchShearYielding(HssTrussConnectionBranch branch)
        {
            double       P = 0;
            double       Pn;
            double       theta    = branch.Angle;
            double       sinTheta = Math.Sin(theta.ToRadians());
            double       pi       = Math.PI;
            ISectionPipe section  = GetBranchSection(branch);
            double       Fy       = branch.Section.Material.YieldStress;
            double       t        = section.t_des;
            double       Db       = section.D;

            if (Db < (Db - 2.0 * t))
            {
                //(K2-1)
                Pn = 0.6 * Fy * t * pi * Db * (1.0 + sinTheta / (2.0 * Math.Pow(sinTheta, 2)));

                P = Pn * 0.95;
            }
            else
            {
                P = double.PositiveInfinity;
            }

            return(P);
        }
예제 #2
0
        internal double GetVerticalComponentOfCompressionBranchChordPlastificationForce(string LoadCaseName, double D, double Qf, double Qg)
        {
            double PnSinTheta = 0;

            //var thisLoadCaseData = loadCases.Where(c => c.LoadCaseName == LoadCaseName).ToList()[0];
            HssKConnectionLoadCaseData thisLoadCaseData;

            loadCases.TryGetValue(LoadCaseName, out thisLoadCaseData);

            if (thisLoadCaseData != null)
            {
                HssTrussConnectionBranch branch  = thisLoadCaseData.CompressionBranch;
                ISectionPipe             section = GetBranchSection(branch);
                double Fy = branch.Section.Material.YieldStress;
                double t  = section.t_des;
                double Db = section.D;

                //(K2-4)
                PnSinTheta = Fy * Math.Pow(t, 2) * (2.0 + 11.33 * Db / D) * Qg * Qf;
            }
            else
            {
                throw new Exception("Could not find branch data for the given load case name");
            }
            return(PnSinTheta);
        }
예제 #3
0
        internal virtual double GetBranchShearYielding(HssTrussConnectionBranch branch)
        {
            double P = 0;
            double Pn;
            double theta = branch.Angle;
            double sinTheta = Math.Sin(theta.ToRadians());
            double pi = Math.PI;
            ISectionPipe section = GetBranchSection(branch);
            double Fy = branch.Section.Material.YieldStress;
            double t = section.t_des;
            double Db = section.D;

            if (Db<(Db-2.0*t))
            {
                //(K2-1)
                Pn = 0.6 * Fy * t * pi * Db * (1.0 + sinTheta / (2.0 * Math.Pow(sinTheta, 2)));

                P = Pn * 0.95;

            }
            else
            {
                P = double.PositiveInfinity;
            }

            return P;

        }
예제 #4
0
 internal ISectionPipe GetBranchSection(HssTrussConnectionBranch branch)
 {
     ISectionPipe chord = branch.Section as ISectionPipe;
     if (chord == null)
     {
         throw new SectionWrongTypeException(typeof(ISectionPipe));
     }
     return chord;
 }
예제 #5
0
        internal ISectionPipe GetBranchSection(HssTrussConnectionBranch branch)
        {
            ISectionPipe chord = branch.Section as ISectionPipe;

            if (chord == null)
            {
                throw new SectionWrongTypeException(typeof(ISectionPipe));
            }
            return(chord);
        }
        internal double GetTensionBranchCapacity(HssKConnectionLoadCaseData loadCase, double D, double Qg, double Qf)
        {
            HssTrussConnectionBranch tensionBranch = loadCase.TensionBranch;
            double P_ChordPlastification           = CheckChordPlastificationForTensionBranch(loadCase.LoadCaseName, D, Qf, Qg);
            double P = Math.Abs(P_ChordPlastification);

            //add capacity to branch info
            tensionBranch.AddStrengthValue(P, loadCase.LoadCaseName);
            return(P);
        }
예제 #7
0
        internal double GetTensionBranchCapacity(double D, double Qg, double Qf)
        {
            HssTrussConnectionBranch tensionBranch = loadCase.TensionBranch;
            double P_ChordPlastification           = CheckChordPlastificationForTensionBranch(loadCase.LoadCaseName, D, Qf, Qg);
            double P_ShearYielding = GetBranchShearYielding(tensionBranch);
            double P = Math.Min(Math.Abs(P_ChordPlastification), Math.Abs(P_ShearYielding));

            //add capacity to branch info
            tensionBranch.AddStrengthValue(P, loadCase.LoadCaseName);
            return(P);
        }
예제 #8
0
        internal double GetCompressionBranchCapacity(HssKConnectionLoadCaseData loadCase, double D, double Qg, double Qf)
        {
            HssTrussConnectionBranch compressionBranch = loadCase.CompressionBranch;
            double P_ChordPlastification = CheckChordPlastificationForCompressionBranch(loadCase.LoadCaseName, D, Qf, Qg);
            double P_ShearYielding       = GetBranchShearYielding(compressionBranch);
            double P = Math.Min(Math.Abs(P_ChordPlastification), Math.Abs(P_ShearYielding));

            //add capacity to branch info here
            compressionBranch.AddStrengthValue(P, loadCase.LoadCaseName);
            return(P);
        }
        internal List <string> GetUniqueCaseNames(HssTrussConnectionBranch branch)
        {
            List <string> caseNames = new List <string>();

            foreach (var f in branch.Forces)
            {
                if (caseNames.Contains(f.LoadCaseName) != true)
                {
                    caseNames.Add(f.LoadCaseName);
                }
            }
            return(caseNames);
        }
예제 #10
0
        public double CheckChordPlastificationForCompressionBranch(string LoadCaseName, double D, double Qf, double Qg)
        {
            double P = 0.0;
            HssKConnectionLoadCaseData thisLoadCaseData;

            loadCases.TryGetValue(LoadCaseName, out thisLoadCaseData);
            if (thisLoadCaseData != null)
            {
                HssTrussConnectionBranch branch = thisLoadCaseData.CompressionBranch;
                P = this.CheckChordPlastificationForBranch(branch, LoadCaseName, D, Qf, Qg);
            }
            else
            {
                throw new Exception("Could not find branch data for the given load case name");
            }

            return(P);
        }
예제 #11
0
        internal  double CheckChordPlastification(HssTrussConnectionBranch branch,double D, double Qf)
        {
            double P = 0;
            double Pn;
            double theta = branch.Angle;
            double sinTheta = Math.Sin(theta.ToRadians());
            ISectionPipe section = GetBranchSection(branch);
            double Fy = branch.Section.Material.YieldStress;
            double t = section.t_des;
            double Db = section.D;
            double beta = Db / D;
               //(K2-3)
           Pn = Fy*Math.Pow(t,2)*(5.7/(1.0-0.81*beta)*Qf)/sinTheta;

                P = 0.9 * Pn;

            return P;
        }
예제 #12
0
        internal  double CheckChordPlastification(HssTrussConnectionBranch branch, double D, double gamma, double Qf)
        {
            double P = 0;
            double Pn;
            double theta = branch.Angle;
            double sinTheta = Math.Sin(theta.ToRadians());
            ISectionPipe section = GetBranchSection(branch);
            double Fy = Chord.Section.Material.YieldStress;
            double t = section.t_des;
            double Db = section.D;
            double beta = Db / D;
            //(K2-2)
            Pn = (Fy * Math.Pow(t, 2) * (3.1 + 15.6 * Math.Pow(beta, 2)) * Math.Pow(gamma, 0.2) * Qf) / sinTheta;

                P = 0.9 * Pn;

            return P;
        }
        internal void DetermineTensionCompressionBranches(List <string> loadCaseList)
        {
            //prior to calculation of connection capacity need to determine
            //which branches are nesion and which are compression

            foreach (var caseName in loadCaseList)
            {
                HssTrussConnectionBranch compBranch = null;
                HssTrussConnectionBranch tensBranch = null;

                foreach (var b in Branches)
                {
                    //chnage this!!!!
                    double Fx = b.Forces.Where(f => f.LoadCaseName == caseName).ToList()[0].Fx; // first item in found forces
                    if (Fx <= 0.0)
                    {
                        compBranch = b;
                    }
                    else
                    {
                        tensBranch = b;
                    }
                }

                HssKConnectionLoadCaseData data = null;

                if (compBranch != null && tensBranch != null)
                {
                    data = new HssKConnectionLoadCaseData(caseName, compBranch, tensBranch);
                }
                else
                {
                    throw new Exception("Failed to identify tension and compression branches in the connection");
                }



                if (this.loadCases == null)
                {
                    loadCases = new Dictionary <string, HssKConnectionLoadCaseData>();
                }
                loadCases.Add(caseName, data);
            }
        }
예제 #14
0
        internal double CheckChordPlastification(HssTrussConnectionBranch branch, double D, double gamma, double Qf)
        {
            double       P = 0;
            double       Pn;
            double       theta    = branch.Angle;
            double       sinTheta = Math.Sin(theta.ToRadians());
            ISectionPipe section  = GetBranchSection(branch);
            double       Fy       = Chord.Section.Material.YieldStress;
            double       t        = section.t_des;
            double       Db       = section.D;
            double       beta     = Db / D;

            //(K2-2)
            Pn = (Fy * Math.Pow(t, 2) * (3.1 + 15.6 * Math.Pow(beta, 2)) * Math.Pow(gamma, 0.2) * Qf) / sinTheta;

            P = 0.9 * Pn;

            return(P);
        }
예제 #15
0
        internal double CheckChordPlastification(HssTrussConnectionBranch branch, double D, double Qf)
        {
            double       P = 0;
            double       Pn;
            double       theta    = branch.Angle;
            double       sinTheta = Math.Sin(theta.ToRadians());
            ISectionPipe section  = GetBranchSection(branch);
            double       Fy       = branch.Section.Material.YieldStress;
            double       t        = section.t_des;
            double       Db       = section.D;
            double       beta     = Db / D;

            //(K2-3)
            Pn = Fy * Math.Pow(t, 2) * (5.7 / (1.0 - 0.81 * beta) * Qf) / sinTheta;

            P = 0.9 * Pn;

            return(P);
        }
예제 #16
0
        internal double CheckChordPlastificationForBranch(HssTrussConnectionBranch branch, string LoadCaseName, double D, double Qf, double Qg)
        {
            double P = 0;
            double Pn;



            //var thisLoadCaseData = loadCases.Where(c => c.LoadCaseName == LoadCaseName).ToList()[0];


            double theta      = branch.Angle;
            double sinTheta   = Math.Sin(theta.ToRadians());
            double PnSinTheta = GetVerticalComponentOfCompressionBranchChordPlastificationForce(
                LoadCaseName, D, Qf, Qg);

            Pn = PnSinTheta / sinTheta;



            P = 0.9 * Pn;

            return(P);
        }
 internal List<string> GetUniqueCaseNames(HssTrussConnectionBranch branch)
 {
     List<string> caseNames = new List<string>();
     foreach (var f in branch.Forces)
     {
         if (caseNames.Contains(f.LoadCaseName)!=true)
         {
             caseNames.Add(f.LoadCaseName);
         }
     }
     return caseNames;
 }
 internal override double GetBranchShearYielding(HssTrussConnectionBranch branch)
 {
     //this limit state does not apply to overlap connections
     return(double.PositiveInfinity);
 }
예제 #19
0
        internal double CheckChordPlastificationForBranch(HssTrussConnectionBranch branch, string LoadCaseName, double D, double Qf, double Qg)
        {
            double P = 0;
            double Pn;



            //var thisLoadCaseData = loadCases.Where(c => c.LoadCaseName == LoadCaseName).ToList()[0];

                
                double theta = branch.Angle;
                double sinTheta = Math.Sin(theta.ToRadians());
                double PnSinTheta = GetVerticalComponentOfCompressionBranchChordPlastificationForce(
                    LoadCaseName,D,Qf,Qg);

                Pn = PnSinTheta / sinTheta;
            


                P = 0.9 * Pn;

            return P;
        }
예제 #20
0
 internal override double GetBranchShearYielding(HssTrussConnectionBranch branch)
 {
     //this limit state does not apply to overlap connections
     return double.PositiveInfinity;
 }