Example #1
0
        private double GetFlatUseCoefficientFromReferenceTable(
            double Depth, double Thickness,
            SawnLumberType SawnLumberType, 
            CommercialGrade CommercialGrade, 
            ReferenceDesignValueType ReferenceDesignValueType
            )
        {
            double b = Depth;
            double t = Thickness;
            double C_fu = 1.0;
            switch (SawnLumberType)
            {
                case SawnLumberType.DimensionLumber:
                    C_fu = GetDimensionalLumberC_fu(b, t); break;//4A
                case SawnLumberType.SouthernPineDimensionLumber://4B
                    C_fu = GetSPDimensionalLumberC_fu(b, t); break;
                case SawnLumberType.MechanicallyGradedDimensionLumber: //4C
                    C_fu = GetMechanicallyGradedLumberC_fu(b, t);  break;
                case SawnLumberType.VisuallyGradedTimbers: //4D
                    C_fu = GetTimberC_fu(b, t, CommercialGrade, ReferenceDesignValueType); break;
                case SawnLumberType.VisuallyGradedDecking: //4E
                    C_fu = GetDeckingC_fu(); break;
                case SawnLumberType.NonNorthAmericanVisuallyGradedDimensionLumber: //4F
                    C_fu = GetNonNorthAmericanLumberC_fu(b, t); break;
                default://4A
                    C_fu = GetDimensionalLumberC_fu(b, t); break; 

            }
            return C_fu;
        }
        /// <summary>
        /// When dimension lumber is used where moisture content will exceed 19% for an extended time period,
        /// design values shall be multiplied by the appropriate wet service factors
        /// </summary>
        /// <param name="ValueType"> Distiguishes between bending, shear, tension compression reference values</param>
        /// <param name="F">Reference design value for bending or compression</param>
        /// <param name="C_F">Size factor</param>
        /// <param name="SawnLumberType">Defines the type of lumber</param>
        /// <returns></returns>
        public double GetWetServiceFactor(ReferenceDesignValueType ValueType, double F,
                                          double C_F, SawnLumberType SawnLumberType)
        {
            double Cm = 1.0;

            switch (SawnLumberType)
            {
            case SawnLumberType.DimensionLumber:
                return(GetDimensionalLumberC_M(ValueType, F, C_F));    //4A

            case SawnLumberType.SouthernPineDimensionLumber:
                return(GetDimensionalLumberC_M(ValueType, F, C_F));    //4B

            case SawnLumberType.MechanicallyGradedDimensionLumber:     //4C
                return(GetDimensionalLumberC_M(ValueType, F, C_F));

            case SawnLumberType.VisuallyGradedTimbers:     //4D
                return(GetTimberC_M(ValueType, F, C_F));

            case SawnLumberType.VisuallyGradedDecking:     //4E
                return(GetDeckingC_M(ValueType, F, C_F));

            case SawnLumberType.NonNorthAmericanVisuallyGradedDimensionLumber:     //4F
                return(GetNonNorthAmericanLumberC_M(ValueType, F, C_F));

            default:
                return(GetDimensionalLumberC_M(ValueType, F, C_F));    //4A
            }
        }
        private double GetDeckingC_M(ReferenceDesignValueType ValueType, double F_b, double C_F)
        {
            switch (ValueType)
            {
            case ReferenceDesignValueType.Bending:
                double Fb = F_b;

                if (Fb * C_F <= 1.500) //when (Fb)(CF) =1,150 psi, CM= 1.0 form footnote of table
                {
                    return(1.0);
                }
                else
                {
                    return(0.85);
                }

            case ReferenceDesignValueType.TensionParallelToGrain:            return(1.0);

            case ReferenceDesignValueType.ShearParallelToGrain:              return(1.0);

            case ReferenceDesignValueType.CompresionPerpendicularToGrain:    return(0.67);

            case ReferenceDesignValueType.CompresionParallelToGrain:         return(1.0);

            case ReferenceDesignValueType.ModulusOfElasticity:               return(0.9);

            case ReferenceDesignValueType.ModulusOfElasticityMin:            return(0.9);

            default: return(1.0);
            }
        }
Example #4
0
        private double GetSizeCoefficientFromReferenceTable(
           double Depth, double Thickness,
           SawnLumberType SawnLumberType,
           CommercialGrade CommercialGrade,
           ReferenceDesignValueType ReferenceDesignValueType,
            bool LoadAppliedToNarrowFace
           )
        {
            double b = Depth;
            double t = Thickness;
            double C_F = 1.0;
            switch (SawnLumberType)
            {
                case SawnLumberType.DimensionLumber:
                    C_F = GetDimensionalLumberC_F(b, t, CommercialGrade,ReferenceDesignValueType); break;//4A
                case SawnLumberType.SouthernPineDimensionLumber://4B
                    C_F = GetSPDimensionalLumberC_F(b, t,CommercialGrade); break;
                case SawnLumberType.MechanicallyGradedDimensionLumber: //4C
                    C_F = 1.0; break;
                case SawnLumberType.VisuallyGradedTimbers: //4D
                    C_F = GetTimberC_F(b, ReferenceDesignValueType, LoadAppliedToNarrowFace); break;
                case SawnLumberType.VisuallyGradedDecking: //4E
                    C_F = GetDeckingC_F(t); break;
                case SawnLumberType.NonNorthAmericanVisuallyGradedDimensionLumber: //4F
                    //Adjustment factors for table 4F are the same as those for 4A
                    C_F = GetDimensionalLumberC_F(b, t, CommercialGrade, ReferenceDesignValueType); break;
                default://4A
                     C_F = GetDimensionalLumberC_F(b, t, CommercialGrade,ReferenceDesignValueType); break;

            }
            return C_F;
        }
Example #5
0
        public double GetWetServiceFactor(ReferenceDesignValueType ValueType)
        {
            switch (ValueType)
            {
            case ReferenceDesignValueType.Bending:
                return(0.8);

            case ReferenceDesignValueType.TensionParallelToGrain:
                return(0.8);

            case ReferenceDesignValueType.ShearParallelToGrain:
                return(0.875);

            case ReferenceDesignValueType.CompresionPerpendicularToGrain:
                return(0.53);

            case ReferenceDesignValueType.CompresionParallelToGrain:
                return(0.73);

            case ReferenceDesignValueType.ModulusOfElasticity:
                return(0.833);

            case ReferenceDesignValueType.ModulusOfElasticityMin:
                return(0.833);

            default:
                return(0.8);
            }
        }
Example #6
0
        public virtual double GetTemperatureFactorCt(ReferenceDesignValueType ValueType, double Temperature,
            ServiceMoistureConditions Conditions)
        {
            double T =Temperature;
            double Ct=1.0;

		 if (ValueType == ReferenceDesignValueType.TensionParallelToGrain || 
             ValueType == ReferenceDesignValueType.ModulusOfElasticity || 
             ValueType == ReferenceDesignValueType.ModulusOfElasticityMin)
	    {
           if (T<=100)
	            {
                    Ct= 1.0;
	            }
            else if (T>100 && T<=125)
	            {
                    Ct = 0.9;
	            }
            else
	            {
                    Ct = 0.9;
	            }
	    }
                    else
	        {
                     if (Conditions == ServiceMoistureConditions.Dry)
	                    {
		                        if (T<=100)
	                                {
                                        Ct = 1.0;
	                                }
                                else if (T>100 && T<=125)
	                                {
                                        Ct = 0.8;
	                                }
                                else
	                                {
                                        Ct = 0.7;
	                                }
	                    }
                     else
	                    {
                                    if (T<=100)
	                                    {
                                            Ct = 1.0;
	                                    }
                                    else if (T>100 && T<=125)
	                                    {
                                            Ct = 0.7;
	                                    }
                                    else
	                                    {
                                            Ct = 0.5;
	                                    }

	                    }
	        }

                return Ct;
        }
Example #7
0
         public double GetResistanceFactor(ReferenceDesignValueType ValueType )
        {
            double phi=1.0;
            switch (ValueType)
            {
                case ReferenceDesignValueType.Bending:
                    phi = 0.85;
                    break;
                case ReferenceDesignValueType.TensionParallelToGrain:
                    phi = 0.80;
                    break;
                case ReferenceDesignValueType.ShearParallelToGrain:
                    phi = 0.75;
                    break;
                case ReferenceDesignValueType.CompresionPerpendicularToGrain:
                    phi = 0.9;
                    break;
                case ReferenceDesignValueType.CompresionParallelToGrain:
                    phi = 0.9;
                    break;
                case ReferenceDesignValueType.ModulusOfElasticity:
                    phi = 1.0;
                    break;
                case ReferenceDesignValueType.ModulusOfElasticityMin:
                    phi = 0.85;
                    break;
                default:
                    break;
            }

            return phi;
        }
Example #8
0
        public double GetFormatConversionFactor(ReferenceDesignValueType ValueType )
        {
            double K_F;
            switch (ValueType)
            {
                case ReferenceDesignValueType.Bending:
                    K_F = 2.54;
                    break;
                case ReferenceDesignValueType.TensionParallelToGrain:
                    K_F = 2.70;
                    break;
                case ReferenceDesignValueType.ShearParallelToGrain:
                    K_F = 2.88;
                    break;
                case ReferenceDesignValueType.CompresionPerpendicularToGrain:
                    K_F = 1.67;
                    break;
                case ReferenceDesignValueType.CompresionParallelToGrain:
                    K_F = 2.4;
                    break;
                case ReferenceDesignValueType.ModulusOfElasticity:
                    K_F = 1.0;
                    break;
                case ReferenceDesignValueType.ModulusOfElasticityMin:
                    K_F = 1.76;
                    break;
                default:
                    K_F = 1.0;
                    break;
            }

            return K_F;
        }
        public double GetStrengthReductionFactor_phi(ReferenceDesignValueType ValueType)
        {
            switch (ValueType)
            {
            case ReferenceDesignValueType.Bending:
                return(0.85);

            case ReferenceDesignValueType.TensionParallelToGrain:
                return(0.8);

            case ReferenceDesignValueType.ShearParallelToGrain:
                return(0.75);

            case ReferenceDesignValueType.CompresionPerpendicularToGrain:
                return(0.9);

            case ReferenceDesignValueType.CompresionParallelToGrain:
                return(0.9);

            case ReferenceDesignValueType.ModulusOfElasticity:
                return(0.85);

            case ReferenceDesignValueType.ModulusOfElasticityMin:
                return(0.85);

            default:
                return(0.85);
            }
        }
Example #10
0
 private double GetDeckingC_M(ReferenceDesignValueType ValueType, double F_b, double C_F)
 {
      switch (ValueType)
     {
         case ReferenceDesignValueType.Bending:
             double Fb = F_b;
             
             if (Fb*C_F<=1.500) //when (Fb)(CF) ≤1,150 psi, CM= 1.0 form footnote of table
             {
                 return 1.0;
             }
             else
             {
                 return 0.85;
             }
             
         case ReferenceDesignValueType.TensionParallelToGrain:            return 1.0;
         case ReferenceDesignValueType.ShearParallelToGrain:              return 1.0;
         case ReferenceDesignValueType.CompresionPerpendicularToGrain:    return 0.67;
         case ReferenceDesignValueType.CompresionParallelToGrain:         return 1.0;
         case ReferenceDesignValueType.ModulusOfElasticity:               return 0.9;
         case ReferenceDesignValueType.ModulusOfElasticityMin:            return 0.9;
         default: return 1.0;
     }
 }
Example #11
0
        public double GetFormatConversionFactor_K_F(ReferenceDesignValueType ValueType)
        {
            switch (ValueType)
            {
            case ReferenceDesignValueType.Bending:
                return(2.54);

            case ReferenceDesignValueType.TensionParallelToGrain:
                return(2.7);

            case ReferenceDesignValueType.ShearParallelToGrain:
                return(2.88);

            case ReferenceDesignValueType.CompresionPerpendicularToGrain:
                return(1.67);

            case ReferenceDesignValueType.CompresionParallelToGrain:
                return(2.4);

            case ReferenceDesignValueType.ModulusOfElasticity:
                return(1.0);

            case ReferenceDesignValueType.ModulusOfElasticityMin:
                return(1.76);

            default:
                return(2.54);
            }
        }
Example #12
0
        public virtual double GetTemperatureFactorCt(ReferenceDesignValueType ValueType, double Temperature,
                                                     ServiceMoistureConditions Conditions)
        {
            double T  = Temperature;
            double Ct = 1.0;

            if (ValueType == ReferenceDesignValueType.TensionParallelToGrain ||
                ValueType == ReferenceDesignValueType.ModulusOfElasticity ||
                ValueType == ReferenceDesignValueType.ModulusOfElasticityMin)
            {
                if (T <= 100)
                {
                    Ct = 1.0;
                }
                else if (T > 100 && T <= 125)
                {
                    Ct = 0.9;
                }
                else
                {
                    Ct = 0.9;
                }
            }
            else
            {
                if (Conditions == ServiceMoistureConditions.Dry)
                {
                    if (T <= 100)
                    {
                        Ct = 1.0;
                    }
                    else if (T > 100 && T <= 125)
                    {
                        Ct = 0.8;
                    }
                    else
                    {
                        Ct = 0.7;
                    }
                }
                else
                {
                    if (T <= 100)
                    {
                        Ct = 1.0;
                    }
                    else if (T > 100 && T <= 125)
                    {
                        Ct = 0.7;
                    }
                    else
                    {
                        Ct = 0.5;
                    }
                }
            }

            return(Ct);
        }
Example #13
0
 public double GetFlatUseFactor( 
     double Depth, double Thickness,
     SawnLumberType SawnLumberType,
     CommercialGrade CommercialGrade, 
     ReferenceDesignValueType ReferenceDesignValueType
     )
 {
     double b = Depth;
     double C_fu = 1.0;
     if (b >= 2 || b <= 4)
     {
         C_fu = GetFlatUseCoefficientFromReferenceTable(
         Depth,  Thickness,
         SawnLumberType, CommercialGrade, 
         ReferenceDesignValueType);
     }
     return C_fu;
 }
Example #14
0
 public double GetInsizingFactor(
 ReferenceDesignValueType ReferenceDesignValueType
 )
 {
     //NDS 2015 Table 4.3.8
     if (ReferenceDesignValueType == ReferenceDesignValueType.ModulusOfElasticity
         || ReferenceDesignValueType == ReferenceDesignValueType.ModulusOfElasticityMin)
     {
         return 0.95;
     }
     else if (ReferenceDesignValueType == ReferenceDesignValueType.CompresionPerpendicularToGrain)
     {
         return 1.0;
     }
     else
     {
         return 0.8;
     }
 }
Example #15
0
        public double GetFlatUseFactor(
            double Depth, double Thickness,
            SawnLumberType SawnLumberType,
            CommercialGrade CommercialGrade,
            ReferenceDesignValueType ReferenceDesignValueType
            )
        {
            double b    = Depth;
            double C_fu = 1.0;

            if (b >= 2 || b <= 4)
            {
                C_fu = GetFlatUseCoefficientFromReferenceTable(
                    Depth, Thickness,
                    SawnLumberType, CommercialGrade,
                    ReferenceDesignValueType);
            }
            return(C_fu);
        }
Example #16
0
 public double GetInsizingFactor(
     ReferenceDesignValueType ReferenceDesignValueType
     )
 {
     //NDS 2015 Table 4.3.8
     if (ReferenceDesignValueType == ReferenceDesignValueType.ModulusOfElasticity ||
         ReferenceDesignValueType == ReferenceDesignValueType.ModulusOfElasticityMin)
     {
         return(0.95);
     }
     else if (ReferenceDesignValueType == ReferenceDesignValueType.CompresionPerpendicularToGrain)
     {
         return(1.0);
     }
     else
     {
         return(0.8);
     }
 }
Example #17
0
        public double GetFormatConversionFactor(ReferenceDesignValueType ValueType)
        {
            double K_F;

            switch (ValueType)
            {
            case ReferenceDesignValueType.Bending:
                K_F = 2.54;
                break;

            case ReferenceDesignValueType.TensionParallelToGrain:
                K_F = 2.70;
                break;

            case ReferenceDesignValueType.ShearParallelToGrain:
                K_F = 2.88;
                break;

            case ReferenceDesignValueType.CompresionPerpendicularToGrain:
                K_F = 1.67;
                break;

            case ReferenceDesignValueType.CompresionParallelToGrain:
                K_F = 2.4;
                break;

            case ReferenceDesignValueType.ModulusOfElasticity:
                K_F = 1.0;
                break;

            case ReferenceDesignValueType.ModulusOfElasticityMin:
                K_F = 1.76;
                break;

            default:
                K_F = 1.0;
                break;
            }

            return(K_F);
        }
Example #18
0
        private double GetTimberC_F(double Depth, ReferenceDesignValueType ReferenceDesignValueType, bool LoadAppliedToNarrowFace)
        {
            double C_F;

            if (LoadAppliedToNarrowFace == true)
            {
                if (Depth > 12.0 && ReferenceDesignValueType == ReferenceDesignValueType.Bending)
                {
                    C_F = Math.Pow(12 / Depth, 1 / 9.0);
                }
                else
                {
                    C_F = 1.0;
                }
                return(C_F);
            }
            else
            {
                return(1.0);
            }
        }
Example #19
0
        private double GetTimberC_M(ReferenceDesignValueType ValueType, double DesignReferenceValue, double CF)
        {
            switch (ValueType)
            {
            case ReferenceDesignValueType.Bending:                           return(1.0);

            case ReferenceDesignValueType.TensionParallelToGrain:            return(1.0);

            case ReferenceDesignValueType.ShearParallelToGrain:              return(1.0);

            case ReferenceDesignValueType.CompresionPerpendicularToGrain:    return(0.67);

            case ReferenceDesignValueType.CompresionParallelToGrain:         return(0.91);

            case ReferenceDesignValueType.ModulusOfElasticity:               return(1.0);

            case ReferenceDesignValueType.ModulusOfElasticityMin:            return(1.0);

            default: return(1.0);
            }
        }
Example #20
0
        double GetNonNorthAmericanLumberC_M(ReferenceDesignValueType ValueType, double DesignReferenceValue, double CF)
        {
            switch (ValueType)
            {
            case ReferenceDesignValueType.Bending:
                double Fb = DesignReferenceValue;

                if (Fb * CF <= 1.500)     //when (Fb)(CF) =1,150 psi, CM= 1.0
                {
                    return(1.0);
                }
                else
                {
                    return(0.85);
                }

            case ReferenceDesignValueType.TensionParallelToGrain: return(1.0);

            case ReferenceDesignValueType.ShearParallelToGrain: return(0.97);

            case ReferenceDesignValueType.CompresionPerpendicularToGrain: return(0.67);

            case ReferenceDesignValueType.CompresionParallelToGrain:
                double Fc = DesignReferenceValue;
                if (Fc * CF <= 0.750)     //when (Fb)(CF) =750 psi, CM= 1.0
                {
                    return(1.0);
                }
                else
                {
                    return(0.8);
                }

            case ReferenceDesignValueType.ModulusOfElasticity: return(0.9);

            case ReferenceDesignValueType.ModulusOfElasticityMin: return(0.9);

            default: return(1.0);
            }
        }
Example #21
0
        public double GetResistanceFactor(ReferenceDesignValueType ValueType)
        {
            double phi = 1.0;

            switch (ValueType)
            {
            case ReferenceDesignValueType.Bending:
                phi = 0.85;
                break;

            case ReferenceDesignValueType.TensionParallelToGrain:
                phi = 0.80;
                break;

            case ReferenceDesignValueType.ShearParallelToGrain:
                phi = 0.75;
                break;

            case ReferenceDesignValueType.CompresionPerpendicularToGrain:
                phi = 0.9;
                break;

            case ReferenceDesignValueType.CompresionParallelToGrain:
                phi = 0.9;
                break;

            case ReferenceDesignValueType.ModulusOfElasticity:
                phi = 1.0;
                break;

            case ReferenceDesignValueType.ModulusOfElasticityMin:
                phi = 0.85;
                break;

            default:
                break;
            }

            return(phi);
        }
Example #22
0
        private double GetSizeCoefficientFromReferenceTable(
            double Depth, double Thickness,
            SawnLumberType SawnLumberType,
            CommercialGrade CommercialGrade,
            ReferenceDesignValueType ReferenceDesignValueType,
            bool LoadAppliedToNarrowFace
            )
        {
            double b   = Depth;
            double t   = Thickness;
            double C_F = 1.0;

            switch (SawnLumberType)
            {
            case SawnLumberType.DimensionLumber:
                C_F = GetDimensionalLumberC_F(b, t, CommercialGrade, ReferenceDesignValueType); break; //4A

            case SawnLumberType.SouthernPineDimensionLumber:                                           //4B
                C_F = GetSPDimensionalLumberC_F(b, t, CommercialGrade); break;

            case SawnLumberType.MechanicallyGradedDimensionLumber:     //4C
                C_F = 1.0; break;

            case SawnLumberType.VisuallyGradedTimbers:     //4D
                C_F = GetTimberC_F(b, ReferenceDesignValueType, LoadAppliedToNarrowFace); break;

            case SawnLumberType.VisuallyGradedDecking:     //4E
                C_F = GetDeckingC_F(t); break;

            case SawnLumberType.NonNorthAmericanVisuallyGradedDimensionLumber:     //4F
                //Adjustment factors for table 4F are the same as those for 4A
                C_F = GetDimensionalLumberC_F(b, t, CommercialGrade, ReferenceDesignValueType); break;

            default:    //4A
                C_F = GetDimensionalLumberC_F(b, t, CommercialGrade, ReferenceDesignValueType); break;
            }
            return(C_F);
        }
Example #23
0
        public  double GetSizeFactor(
            double Depth, double Thickness,
            SawnLumberType SawnLumberType,
            CommercialGrade CommercialGrade,
            ReferenceDesignValueType ReferenceDesignValueType,
            bool LoadAppliedToNarrowFace=true
            )
        {
            double C_F;
            if (Thickness >= 5 && Depth > 12.0)
            {
                // NDS 2015 Section 4.3.6.2
                C_F = Math.Pow(12 / Depth, 1 / 9.0);
                C_F = C_F > 1.0 ? 1.0 : C_F;
            }

            else
            {
                C_F = GetSizeCoefficientFromReferenceTable(Depth, Thickness, SawnLumberType,
                   CommercialGrade, ReferenceDesignValueType, LoadAppliedToNarrowFace);
            }
            return C_F;
        }
Example #24
0
        /// <summary>
        /// When dimension lumber is used where moisture content will exceed 19% for an extended time period, 
        /// design values shall be multiplied by the appropriate wet service factors 
        /// </summary>
        /// <param name="ValueType"> Distiguishes between bending, shear, tension compression reference values</param>
        /// <param name="F">Reference design value for bending or compression</param>
        /// <param name="C_F">Size factor</param>
        /// <param name="SawnLumberType">Defines the type of lumber</param>
        /// <returns></returns>
        public  double GetWetServiceFactor(ReferenceDesignValueType ValueType, double F,
            double C_F, SawnLumberType SawnLumberType)
        {
            double Cm = 1.0;
            switch (SawnLumberType)
            {
                case SawnLumberType.DimensionLumber:
                    return GetDimensionalLumberC_M(ValueType, F, C_F); //4A
                case SawnLumberType.SouthernPineDimensionLumber:
                    return GetDimensionalLumberC_M(ValueType, F, C_F); //4B
                case SawnLumberType.MechanicallyGradedDimensionLumber: //4C
                    return GetDimensionalLumberC_M(ValueType, F, C_F);
                case SawnLumberType.VisuallyGradedTimbers: //4D
                    return GetTimberC_M(ValueType, F, C_F);
                case SawnLumberType.VisuallyGradedDecking: //4E
                    return GetDeckingC_M(ValueType, F, C_F);
                case SawnLumberType.NonNorthAmericanVisuallyGradedDimensionLumber: //4F
                    return GetNonNorthAmericanLumberC_M(ValueType, F, C_F);
                default:
                    return GetDimensionalLumberC_M(ValueType, F, C_F); //4A

            }
        }
Example #25
0
        public double GetSizeFactor(
            double Depth, double Thickness,
            SawnLumberType SawnLumberType,
            CommercialGrade CommercialGrade,
            ReferenceDesignValueType ReferenceDesignValueType,
            bool LoadAppliedToNarrowFace = true
            )
        {
            double C_F;

            if (Thickness >= 5 && Depth > 12.0)
            {
                // NDS 2015 Section 4.3.6.2
                C_F = Math.Pow(12 / Depth, 1 / 9.0);
                C_F = C_F > 1.0 ? 1.0 : C_F;
            }

            else
            {
                C_F = GetSizeCoefficientFromReferenceTable(Depth, Thickness, SawnLumberType,
                                                           CommercialGrade, ReferenceDesignValueType, LoadAppliedToNarrowFace);
            }
            return(C_F);
        }
Example #26
0
        private double GetFlatUseCoefficientFromReferenceTable(
            double Depth, double Thickness,
            SawnLumberType SawnLumberType,
            CommercialGrade CommercialGrade,
            ReferenceDesignValueType ReferenceDesignValueType
            )
        {
            double b    = Depth;
            double t    = Thickness;
            double C_fu = 1.0;

            switch (SawnLumberType)
            {
            case SawnLumberType.DimensionLumber:
                C_fu = GetDimensionalLumberC_fu(b, t); break;   //4A

            case SawnLumberType.SouthernPineDimensionLumber:    //4B
                C_fu = GetSPDimensionalLumberC_fu(b, t); break;

            case SawnLumberType.MechanicallyGradedDimensionLumber:     //4C
                C_fu = GetMechanicallyGradedLumberC_fu(b, t);  break;

            case SawnLumberType.VisuallyGradedTimbers:     //4D
                C_fu = GetTimberC_fu(b, t, CommercialGrade, ReferenceDesignValueType); break;

            case SawnLumberType.VisuallyGradedDecking:     //4E
                C_fu = GetDeckingC_fu(); break;

            case SawnLumberType.NonNorthAmericanVisuallyGradedDimensionLumber:     //4F
                C_fu = GetNonNorthAmericanLumberC_fu(b, t); break;

            default:    //4A
                C_fu = GetDimensionalLumberC_fu(b, t); break;
            }
            return(C_fu);
        }
Example #27
0
        private double GetDimensionalLumberC_F(double Depth, double Thickness, CommercialGrade Grade, ReferenceDesignValueType ReferenceDesignValueType)
        {
            double SizeFactor;
            string GradeString = "Other";


            if (Grade == CommercialGrade.Standard || Grade == CommercialGrade.Construction)
            {
                SizeFactor = 1.0;
            }
            else
            {
                double b = Math.Ceiling(Depth);
                double t = Math.Ceiling(Thickness);

                //Adjust thickness
                if (t <= 3)
                {
                    t = 3.0;
                }
                else if (t > 3 && t <= 5)
                {
                    t = 4.0;
                }
                else
                {
                    throw new Exception("Use timber values for elements having over 5 inches in thickness.");
                }

                //adjust the values for lookup (for depth)
                if (Grade == CommercialGrade.Utility)
                {
                    GradeString = Grade.ToString();
                    if (b <= 3)
                    {
                        b = 3;
                    }
                    else
                    {
                        b = 4;
                    }
                }
                else if (Grade == CommercialGrade.Stud)
                {
                    GradeString = Grade.ToString();

                    if (b <= 4)
                    {
                        b = 4;
                    }
                    else if (b >= 7)
                    {
                        b = 8;
                    }
                }
                else
                {
                    GradeString = "Other";


                    //Adjust depth
                    if (b <= 4)
                    {
                        b = 4;
                    }
                    else if (b == 7)
                    {
                        b = 8;
                    }
                    else if (b == 9)
                    {
                        b = 10;
                    }
                    else if (b >= 10)
                    {
                        b = 14;
                    }
                }

                #region Read Table Data

                var Tv11       = new { Grade = "", Depth = 0.0, Thickness = 0.0, Fb = 0.0, Ft = 0.0, Fc = 0.0 }; // sample
                var ResultList = ListFactory.MakeList(Tv11);

                using (StringReader reader = new StringReader(Resources.NDS2015_Table4A_SizeFactor))
                {
                    string line;
                    while ((line = reader.ReadLine()) != null)
                    {
                        string[] Vals = line.Split(',');
                        if (Vals.Count() == 6)
                        {
                            string _Grade     = Vals[0];
                            double _Depth     = double.Parse(Vals[1], CultureInfo.InvariantCulture);
                            double _Thickness = double.Parse(Vals[2], CultureInfo.InvariantCulture);
                            double _Fb        = double.Parse(Vals[3], CultureInfo.InvariantCulture);
                            double _Ft        = double.Parse(Vals[4], CultureInfo.InvariantCulture);
                            double _Fc        = double.Parse(Vals[5], CultureInfo.InvariantCulture);

                            ResultList.Add(new
                            {
                                Grade     = _Grade,
                                Depth     = _Depth,
                                Thickness = _Thickness,
                                Fb        = _Fb,
                                Ft        = _Ft,
                                Fc        = _Fc
                            });
                        }
                    }
                }

                #endregion

                var RValues = from v in ResultList
                              where
                              (v.Grade == GradeString &&
                               v.Depth == b &&
                               v.Thickness == t)
                              select v;
                var foundValue = (RValues.ToList()).FirstOrDefault();
                if (foundValue == null)
                {
                    throw new Exception("Combination of lumber grade and size was not found. Check input");
                }
                else
                {
                    switch (ReferenceDesignValueType)
                    {
                    case ReferenceDesignValueType.Bending:
                        SizeFactor = foundValue.Fb;
                        break;

                    case ReferenceDesignValueType.TensionParallelToGrain:
                        SizeFactor = foundValue.Ft;
                        break;

                    case ReferenceDesignValueType.CompresionParallelToGrain:
                        SizeFactor = foundValue.Fc;
                        break;

                    default:
                        SizeFactor = 1.0;
                        break;
                    }
                }
                if (SizeFactor == 0)
                {
                    throw new Exception("Combination of lumber grade and size was not found. Check input");
                }
            }

            return(SizeFactor);
        }
Example #28
0
        private double GetTimberC_F(double Depth, ReferenceDesignValueType ReferenceDesignValueType, bool LoadAppliedToNarrowFace)
        {
            double C_F;

            if (LoadAppliedToNarrowFace ==true)
            {
                if (Depth>12.0 && ReferenceDesignValueType == ReferenceDesignValueType.Bending)
                {
                    C_F = Math.Pow(12 / Depth, 1 / 9.0);
                }
                else
                {
                    C_F = 1.0;
                }
                return C_F;
            }
            else
            {
                return 1.0;
            }
        }
Example #29
0
        private double GetTimberC_fu(double b, double t, CommercialGrade CommercialGrade,
                                     ReferenceDesignValueType ReferenceDesignValueType)
        {
            double C_fu = 1.0;

            if (CommercialGrade == Entities.CommercialGrade.SelectStructural)
            {
                if (ReferenceDesignValueType == Entities.ReferenceDesignValueType.Bending)
                {
                    C_fu = 0.86;
                }
                else if (ReferenceDesignValueType == ReferenceDesignValueType.ModulusOfElasticityMin ||
                         ReferenceDesignValueType == ReferenceDesignValueType.ModulusOfElasticityMin)
                {
                    C_fu = 1.0;
                }
                else
                {
                    C_fu = 1.0;
                }
            }

            if (CommercialGrade == Entities.CommercialGrade.No2)
            {
                if (ReferenceDesignValueType == Entities.ReferenceDesignValueType.Bending)
                {
                    C_fu = 1.0;
                }
                else if (ReferenceDesignValueType == ReferenceDesignValueType.ModulusOfElasticityMin ||
                         ReferenceDesignValueType == ReferenceDesignValueType.ModulusOfElasticityMin)
                {
                    C_fu = 1.0;
                }
                else
                {
                    C_fu = 1.0;
                }
            }

            else
            {
                //(CommercialGrade == Entities.CommercialGrade.No1)

                if (ReferenceDesignValueType == Entities.ReferenceDesignValueType.Bending)
                {
                    C_fu = 0.74;
                }
                else if (ReferenceDesignValueType == ReferenceDesignValueType.ModulusOfElasticityMin ||
                         ReferenceDesignValueType == ReferenceDesignValueType.ModulusOfElasticityMin)
                {
                    C_fu = 0.9;
                }
                else
                {
                    C_fu = 1.0;
                }
            }


            return(C_fu);
        }
Example #30
0
        private double GetDimensionalLumberC_F(double Depth, double Thickness, CommercialGrade Grade, ReferenceDesignValueType ReferenceDesignValueType)
        {
            double SizeFactor;
            string GradeString = "Other";


            if (Grade == CommercialGrade.Standard || Grade == CommercialGrade.Construction)
            {
                SizeFactor = 1.0; 
            }
            else 
            {
                double b = Math.Ceiling(Depth);
                double t = Math.Ceiling(Thickness);

                //Adjust thickness
                if (t <= 3)
                {
                    t = 3.0;
                }
                else if (t > 3 && t <= 5)
                {
                    t = 4.0;
                }
                else
                {
                    throw new Exception("Use timber values for elements having over 5 inches in thickness.");
                }
                
                //adjust the values for lookup (for depth)
                if (Grade == CommercialGrade.Utility)
                {
                    GradeString = Grade.ToString();
                    if (b<=3)
                    {
                        b = 3; 
                    }
                    else
                    {
                        b = 4;
                    }
                }
                else if (Grade == CommercialGrade.Stud)
                {
                    GradeString = Grade.ToString();

                    if (b <= 4)
                    {
                        b = 4;
                    }
                    else if (b >= 7)
                    {
                        b = 8;
                    }

                }
                else
                {
                    
                    GradeString = "Other";


                    //Adjust depth
                    if (b<=4)
                    {
                        b = 4;  
                    }
                    else if (b==7)
                    {
                        b = 8;
                    }
                    else if (b == 9)
                    {
                        b = 10;
                    }
                    else if (b>=10)
                    {
                        b = 14;
                    }

                }
               
                #region Read Table Data

                var Tv11 = new { Grade="",	Depth=0.0,	Thickness=0.0, Fb=0.0,	Ft=0.0,	Fc=0.0}; // sample
                var ResultList = ListFactory.MakeList(Tv11);

                using (StringReader reader = new StringReader(Resources.NDS2015_Table4A_SizeFactor))
                {
                    string line;
                    while ((line = reader.ReadLine()) != null)
                    {
                        string[] Vals = line.Split(',');
                        if (Vals.Count() == 6)
                        {

                            string _Grade = Vals[0];
                            double _Depth     =double.Parse(Vals[1],CultureInfo.InvariantCulture);
                            double _Thickness =double.Parse(Vals[2],CultureInfo.InvariantCulture);
                            double _Fb        =double.Parse(Vals[3],CultureInfo.InvariantCulture);
                            double _Ft        =double.Parse(Vals[4],CultureInfo.InvariantCulture);
                            double _Fc        =double.Parse(Vals[5],CultureInfo.InvariantCulture);

                            ResultList.Add(new
                            {
                                Grade    = _Grade    ,
                                Depth    = _Depth    ,
                                Thickness= _Thickness,
                                Fb       = _Fb       ,
                                Ft       = _Ft       ,
                                Fc       = _Fc       

                            });
                        }
                    }

                }

                #endregion

                var RValues = from v in ResultList
                              where
                                  (v.Grade == GradeString &&
                                  v.Depth == b  &&
                                  v.Thickness ==t)
                              select v;
                var foundValue = (RValues.ToList()).FirstOrDefault();
                if (foundValue == null)
                {
                    throw new Exception("Combination of lumber grade and size was not found. Check input");
                }
                else
                {
                    switch (ReferenceDesignValueType)
                    {
                        case ReferenceDesignValueType.Bending:
                            SizeFactor = foundValue.Fb;
                            break;
                        case ReferenceDesignValueType.TensionParallelToGrain:
                            SizeFactor = foundValue.Ft;
                            break;
                        case ReferenceDesignValueType.CompresionParallelToGrain:
                            SizeFactor = foundValue.Fc;
                            break;
                        default:
                            SizeFactor = 1.0;
                            break;
                    }
                }
                if (SizeFactor == 0)
                {
                    throw new Exception("Combination of lumber grade and size was not found. Check input");
                }
            }

            return SizeFactor;
        }
Example #31
0
        double GetNonNorthAmericanLumberC_M(ReferenceDesignValueType ValueType, double DesignReferenceValue, double CF)
        {
            switch (ValueType)
            {
                case ReferenceDesignValueType.Bending:
                    double Fb = DesignReferenceValue;

                    if (Fb * CF <= 1.500) //when (Fb)(CF) ≤1,150 psi, CM= 1.0
                    {
                        return 1.0;
                    }
                    else
                    {
                        return 0.85;
                    }

                case ReferenceDesignValueType.TensionParallelToGrain: return 1.0;
                case ReferenceDesignValueType.ShearParallelToGrain: return 0.97;
                case ReferenceDesignValueType.CompresionPerpendicularToGrain: return 0.67;
                case ReferenceDesignValueType.CompresionParallelToGrain:
                    double Fc = DesignReferenceValue;
                    if (Fc * CF <= 0.750) //when (Fb)(CF) ≤750 psi, CM= 1.0
                    {
                        return 1.0;
                    }
                    else
                    {
                        return 0.8;
                    }
                case ReferenceDesignValueType.ModulusOfElasticity: return 0.9;
                case ReferenceDesignValueType.ModulusOfElasticityMin: return 0.9;
                default: return 1.0;
            }
        }
Example #32
0
 public double GetTemperatureFactorCt(ReferenceDesignValueType ValueType, double Temperature,
      ServiceMoistureConditions Conditions)
 {
     return base.GetTemperatureFactorCt(ValueType, Temperature, Conditions);
 }
Example #33
0
        private double GetTimberC_fu(double b, double t, CommercialGrade CommercialGrade, 
            ReferenceDesignValueType ReferenceDesignValueType)
        {
            double C_fu = 1.0;

            if (CommercialGrade == Entities.CommercialGrade.SelectStructural)
            {
                if (ReferenceDesignValueType ==  Entities.ReferenceDesignValueType.Bending)
                {
                    C_fu = 0.86;
                }
                else if (ReferenceDesignValueType ==  ReferenceDesignValueType.ModulusOfElasticityMin || 
                    ReferenceDesignValueType == ReferenceDesignValueType.ModulusOfElasticityMin)
                {
                    C_fu = 1.0;
                }
                else
                {
                    C_fu = 1.0;
                }
            }
           
            if (CommercialGrade == Entities.CommercialGrade.No2)
            {
                if (ReferenceDesignValueType ==  Entities.ReferenceDesignValueType.Bending)
                {
                    C_fu =1.0;
                }
                else if (ReferenceDesignValueType ==  ReferenceDesignValueType.ModulusOfElasticityMin || 
                    ReferenceDesignValueType == ReferenceDesignValueType.ModulusOfElasticityMin)
                {
                    C_fu = 1.0;
                }
                else
                {
                    C_fu = 1.0;
                }
            }

            else
	        {
                     //(CommercialGrade == Entities.CommercialGrade.No1)
                    
                        if (ReferenceDesignValueType ==  Entities.ReferenceDesignValueType.Bending)
                        {
                            C_fu =0.74;
                        }
                        else if (ReferenceDesignValueType ==  ReferenceDesignValueType.ModulusOfElasticityMin || 
                            ReferenceDesignValueType == ReferenceDesignValueType.ModulusOfElasticityMin)
                        {
                            C_fu =  0.9;
                        }
                        else
                        {
                            C_fu = 1.0;
                        }
            }
	        

            return C_fu;
        }
Example #34
0
 public double GetTemperatureFactorCt(ReferenceDesignValueType ValueType, double Temperature,
                                      MoistureCondition Conditions)
 {
     return(base.GetTemperatureFactorCt(ValueType, Temperature, Conditions));
 }
Example #35
0
 private double GetTimberC_M(ReferenceDesignValueType ValueType, double DesignReferenceValue, double CF)
 {
      switch (ValueType)
     {
         case ReferenceDesignValueType.Bending:                           return 1.0;
         case ReferenceDesignValueType.TensionParallelToGrain:            return 1.0;
         case ReferenceDesignValueType.ShearParallelToGrain:              return 1.0;
         case ReferenceDesignValueType.CompresionPerpendicularToGrain:    return 0.67;
         case ReferenceDesignValueType.CompresionParallelToGrain:         return 0.91;
         case ReferenceDesignValueType.ModulusOfElasticity:               return 1.0;
         case ReferenceDesignValueType.ModulusOfElasticityMin:            return 1.0;
         default: return 1.0;
     }
 }