public void HeadedAnchorPerpendicularDeckReturnsValue()
        {
            HeadedAnchor a               = new HeadedAnchor();
            double       Q_n             = a.GetNominalShearStrength(DeckAtBeamCondition.Perpendicular, HeadedAnchorWeldCase.WeldedThroughDeck, 2, 3, 3, 6, 0.75, 4, 65, 110);
            double       refValue        = 18.3;
            double       actualTolerance = EvaluateActualTolerance(Q_n, refValue);

            Assert.True(actualTolerance <= tolerance);
        }
        public void HeadedAnchorParalleDeckReturnsValue()
        {
            HeadedAnchor a               = new HeadedAnchor();
            double       Q_n             = a.GetNominalShearStrength(DeckAtBeamCondition.Parallel, HeadedAnchorWeldCase.WeldedThroughDeck, 1, 3, 3, 6, 0.75, 4, 65, 110);
            double       refValue        = 21.2;
            double       actualTolerance = EvaluateActualTolerance(Q_n, refValue);

            Assert.LessOrEqual(actualTolerance, tolerance);
        }
        public void HeadedAnchorNoDeckReturnsValue()
        {
            HeadedAnchor a               = new HeadedAnchor();
            double       Q_n             = a.GetNominalShearStrength(DeckAtBeamCondition.NoDeck, HeadedAnchorWeldCase.WeldedDirectly, 1, 3, 3, 6, 0.75, 4, 65, 110);
            double       refValue        = 21.2;
            double       actualTolerance = EvaluateActualTolerance(Q_n, refValue);

            Assert.True(actualTolerance <= tolerance);
        }
        public static Dictionary <string, object> ShearStrengthOfHeadedAnchor(double d_sa, double R_g, double R_p, double fc_prime, double w_c, double F_u = 65, string Code = "AISC360-10"
                                                                              )
        {
            //Default values
            double Q_n    = 0;
            double phiQ_n = 0;

            //Calculation logic:
            HeadedAnchor a = new HeadedAnchor();

            Q_n    = a.GetNominalShearStrength(d_sa, R_g, R_p, fc_prime, F_u, w_c);
            phiQ_n = a.GetShearStrength(d_sa, R_g, R_p, fc_prime, F_u, w_c);

            return(new Dictionary <string, object>
            {
                { "Q_n", Q_n },
                { "phiQ_n", phiQ_n }
            });
        }
        public static Dictionary <string, object> HeadedAnchorPositionAndGroupFactors(string HeadedAnchorDeckCondition, string HeadedAnchorWeldCase, double N_saRib, double e_mid_ht, double h_r,
                                                                                      double w_r, string Code = "AISC360-10")
        {
            //Default values
            double R_g = 0;
            double R_p = 0;


            //Calculation logic:
            steel.DeckAtBeamCondition deckCondition;
            bool IsValidHeadedAnchorDeckCondition = Enum.TryParse(HeadedAnchorDeckCondition, true, out deckCondition);

            if (IsValidHeadedAnchorDeckCondition == false)
            {
                throw new Exception("Headed anchor position and group factor calculation failed. Invalid string provided for HeadedAnchorDeckCondition.");
            }

            steel.HeadedAnchorWeldCase studWeld;
            bool IsValidHeadedAnchorWeldCase = Enum.TryParse(HeadedAnchorWeldCase, true, out studWeld);

            if (IsValidHeadedAnchorWeldCase == false)
            {
                throw new Exception("Headed anchor position and group factor calculation failed. Invalid string provided for HeadedAnchorWeldCase.");
            }

            HeadedAnchor a = new HeadedAnchor();

            R_g = a.GetGroupFactorR_g(deckCondition, studWeld, N_saRib, h_r, w_r);
            R_p = a.GetPlacementFactorR_p(deckCondition, studWeld, e_mid_ht);

            return(new Dictionary <string, object>
            {
                { "R_g", R_g }
                , { "R_p", R_p }
            });
        }