public ConcreteBreakoutTension(
            IConcreteMaterial Material,
            int n, 
            double h_eff,
            double e_p_Nx,
            double e_p_Ny,
            double ev_p,  
            double ca_MIN,
            double ca_MAX,
            double s_MAX,
            double A_nc,
            AnchorInstallationType AnchorType, 
            ConcreteCrackingCondition ConcreteCondition,
            AnchorQualification AnchorQualification,
            double kc_Override,
            double gamma_c_NOverwrite,
            CastInAnchorageType CastInAnchorageType,
            bool HasSupplementalReinforcement
            )
            : base(n,
            h_eff, AnchorType)
        {
            this.Material = Material;
           this.A_nc = A_nc;
           this.e_p_Nx  =e_p_Nx ;
           this.e_p_Ny  =e_p_Ny ;
           this.ev_p    =ev_p   ;
           this.ca_MIN  =ca_MIN ;
           this.ca_MAX = ca_MAX;
           this.s_MAX = s_MAX;
           this.AnchorType=AnchorType       ;
           this.ConcreteCondition = ConcreteCondition;
           this.AnchorQualification = AnchorQualification;
           this.kc_Override=kc_Override;
           this.gamma_c_NOverwrite = gamma_c_NOverwrite;
           this.HasSupplementalReinforcement = HasSupplementalReinforcement;

        }
 public ConcreteBreakoutTension(
     IConcreteMaterial Material,
     int n,
     double h_eff,
     double e_p_Nx,
     double e_p_Ny,
     double ev_p,
     double ca_MIN,
     double ca_MAX,
     double s_MAX,
     double A_nc,
     AnchorInstallationType AnchorType,
     ConcreteCrackingCondition ConcreteCondition,
     AnchorQualification AnchorQualification,
     double kc_Override,
     double gamma_c_NOverwrite,
     CastInAnchorageType CastInAnchorageType,
     bool HasSupplementalReinforcement
     )
     : base(n,
            h_eff, AnchorType)
 {
     this.Material                     = Material;
     this.A_nc                         = A_nc;
     this.e_p_Nx                       = e_p_Nx;
     this.e_p_Ny                       = e_p_Ny;
     this.ev_p                         = ev_p;
     this.ca_MIN                       = ca_MIN;
     this.ca_MAX                       = ca_MAX;
     this.s_MAX                        = s_MAX;
     this.AnchorType                   = AnchorType;
     this.ConcreteCondition            = ConcreteCondition;
     this.AnchorQualification          = AnchorQualification;
     this.kc_Override                  = kc_Override;
     this.gamma_c_NOverwrite           = gamma_c_NOverwrite;
     this.HasSupplementalReinforcement = HasSupplementalReinforcement;
 }
        private double GetGamma_c_N(AnchorInstallationType AnchorType, ConcreteCrackingCondition ConcreteCondition,
                                    AnchorQualification AnchorQualification, double kc,
                                    double gamma_c_NOverwrite)
        {
            //17.4.2.6

            double Gamma_c_N = 0.0;

            if (ConcreteCondition == ConcreteCrackingCondition.Cracked)
            {
                Gamma_c_N = 1.0;
            }
            else
            {
                if (AnchorType == AnchorInstallationType.CastInPlace)
                {
                    Gamma_c_N = 1.25;
                }
                else
                {
                    //post-installed case

                    switch (AnchorQualification)
                    {
                    case AnchorQualification.Conventional:  Gamma_c_N = 1.4;    break;

                    case AnchorQualification.SpecialForCrackedAndUncrackedConcrete: Gamma_c_N = gamma_c_NOverwrite;   break;

                    case AnchorQualification.SpecialForUncrackedConcrete:  Gamma_c_N = 1.0;    break;

                    default: Gamma_c_N = 1.0; break;
                    }
                }
            }

            return(Gamma_c_N);
        }
        private double GetGamma_c_N(AnchorInstallationType AnchorType, ConcreteCrackingCondition ConcreteCondition,
            AnchorQualification AnchorQualification, double kc, 
            double gamma_c_NOverwrite)
        {
            //17.4.2.6

            double Gamma_c_N = 0.0;
            if (ConcreteCondition == ConcreteCrackingCondition.Cracked)
            {
                Gamma_c_N = 1.0;
            }
            else
            {
                if (AnchorType == AnchorInstallationType.CastInPlace)
                {
                    Gamma_c_N = 1.25;
                }
                else
                {
                    //post-installed case

                    switch (AnchorQualification)
	                    {
                        case AnchorQualification.Conventional:  Gamma_c_N = 1.4;    break;
                        case AnchorQualification.SpecialForCrackedAndUncrackedConcrete: Gamma_c_N = gamma_c_NOverwrite;   break;
                        case AnchorQualification.SpecialForUncrackedConcrete:  Gamma_c_N = 1.0;    break;
                        default: Gamma_c_N = 1.0; break;
	                    }

                }
            }

            return Gamma_c_N;
        }