private double GetIntermediateColdRoofCs(double slope, data.SnowRoofSurfaceType surface, ICalcLogEntry CsEntry)
        {
            double Cs = 1.0;


            if (surface == data.SnowRoofSurfaceType.Slippery)
            {
                if (slope <= 10.0)
                {
                    Cs = 1.0;
                    CsEntry.DescriptionReference = "/Templates/Loads/ASCE7_10/Snow/SnowSlopeFactorIntermediateColdSlippery.docx";
                }
                else
                {
                    if (slope > 70)
                    {
                        Cs = 0.0;
                        CsEntry.DescriptionReference = "/Templates/Loads/ASCE7_10/Snow/SnowSlopeFactorIntermediateColdSlippery.docx";
                    }
                    else
                    {
                        Cs = 1.0 - (slope - 10.0) / 60.0;
                        CsEntry.DescriptionReference = "/Templates/Loads/ASCE7_10/Snow/SnowSlopeFactorIntermediateColdSlipperyInterp.docx";
                    }
                }
            }
            else
            {
                if (slope <= 37.5)
                {
                    Cs = 1.0;
                    CsEntry.DescriptionReference = "/Templates/Loads/ASCE7_10/Snow/SnowSlopeFactorIntermediateColdNonSlippery.docx";
                }
                else
                {
                    if (slope > 70)
                    {
                        Cs = 0.0;
                        CsEntry.DescriptionReference = "/Templates/Loads/ASCE7_10/Snow/SnowSlopeFactorIntermediateColdNonSlippery.docx";
                    }
                    else
                    {
                        Cs = 1.0 - (slope - 37.5) / 32.5;
                        CsEntry.DescriptionReference = "/Templates/Loads/ASCE7_10/Snow/SnowSlopeFactorIntermediateColdNonSlipperyInterp.docx";
                    }
                }
            }

            return(Cs);
        }
        private double GetWarmRoofCs(double slope, data.SnowRoofSurfaceType surface, ICalcLogEntry CsEntry)
        {
            double Cs = 1.0;

            if (surface == data.SnowRoofSurfaceType.Slippery)
            {
                if (slope <= 5.0)
                {
                    Cs = 1.0;
                    CsEntry.DescriptionReference = "/Templates/Loads/ASCE7_10/Snow/SnowSlopeFactorWarmSlippery.docx";
                }
                else
                {
                    if (slope > 70)
                    {
                        Cs = 0.0;
                        CsEntry.DescriptionReference = "/Templates/Loads/ASCE7_10/Snow/SnowSlopeFactorWarmSlippery.docx";
                    }
                    else
                    {
                        Cs = 1.0 - (slope - 5.0) / 65.0;
                        CsEntry.DescriptionReference = "/Templates/Loads/ASCE7_10/Snow/SnowSlopeFactorWarmSlipperyInterp.docx";
                    }
                }
            }
            else
            {
                if (slope <= 30.0)
                {
                    Cs = 1.0;
                    CsEntry.DescriptionReference = "/Templates/Loads/ASCE7_10/Snow/SnowSlopeFactorWarmNonSlippery.docx";
                }
                else
                {
                    if (slope > 70)
                    {
                        Cs = 0.0;
                        CsEntry.DescriptionReference = "/Templates/Loads/ASCE7_10/Snow/SnowSlopeFactorWarmNonSlippery.docx";
                    }
                    else
                    {
                        Cs = 1.0 - (slope - 30.0) / 40.0;
                        CsEntry.DescriptionReference = "/Templates/Loads/ASCE7_10/Snow/SnowSlopeFactorWarmSlipperyInterp.docx";
                    }
                }
            }

            return(Cs);
        }
        public double GetSnowSlopeFactor(double RoofSlopeAngle, data.SnowRoofSurfaceType surface, double ThermalFactor)
        {
            double Ct = ThermalFactor;
            double Cs;


            #region Cs
            ICalcLogEntry CsEntry = new CalcLogEntry();
            CsEntry.ValueName = "Cs";
            CsEntry.AddDependencyValue("s", Math.Round(RoofSlopeAngle, 3));
            CsEntry.AddDependencyValue("Ct", Math.Round(ThermalFactor, 3));
            CsEntry.Reference = "";
            CsEntry.FormulaID = null; //reference to formula from code

            #endregion


            if (Ct <= 1.0)
            {
                Cs = GetWarmRoofCs(RoofSlopeAngle, surface, CsEntry);
            }
            else
            {
                if (Ct >= 1.2)
                {
                    Cs = GetColdRoofCs(RoofSlopeAngle, surface, CsEntry);
                }
                else
                {
                    Cs = GetIntermediateColdRoofCs(RoofSlopeAngle, surface, CsEntry);
                }
            }
            CsEntry.VariableValue = Math.Round(Cs, 3).ToString();
            this.AddToLog(CsEntry);

            return(Cs);
        }