public void TestVolumeCorrectionFactor(TestData example1, TestData example2, TestData example3, TestData example4, TestData example5)
        {
            Calcs calc = new Calcs();

            double CTPL = calc.GetCTPLFromApiDegFPsig(example1.Grp, example1.Api60, example1.TempF, example1.PressPsig);

            Assert.True(EqualsToPrecision(example1.CTPL, CTPL, 1.0e-3));

            CTPL = calc.GetCTPLFromApiDegFPsig(example2.Grp, example2.Api60, example2.TempF, example2.PressPsig);
            Assert.True(EqualsToPrecision(example2.CTPL, CTPL, 1.0e-3));


            CTPL = calc.GetCTPLFromApiDegFPsig(example3.Grp, example3.Api60, example3.TempF, example3.PressPsig);
            Assert.True(EqualsToPrecision(example3.CTPL, CTPL, 1.6e-3));             // Customer data seems suspect in this case.  Pressure seems rather low.

            CTPL = calc.GetCTPLFromApiDegFPsig(example4.Grp, example4.Api60, example4.TempF, example4.PressPsig);
            Assert.True(EqualsToPrecision(example4.CTPL, CTPL, 1.0e-3));

            CTPL = calc.GetCTPLFromApiDegFPsig(example5.Grp, example5.Api60, example5.TempF, example5.PressPsig);
            Assert.True(EqualsToPrecision(example5.CTPL, CTPL, 1.6e-3));  // Customer data seems suspect in this case.  Pressure seems rather low.
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            // Check roundups
            double t    = 5.34;
            string uom  = "degC";
            Calcs  calc = new Calcs();

            Console.WriteLine("For temp of {0} {1} roundup is {2} {1}", t, uom, calc.RoundUpAPI11_1(t, uom));
            t = -5.34;
            Console.WriteLine("For temp of {0} {1} roundup is {2} {1}", t, uom, calc.RoundUpAPI11_1(t, uom));
            t   = 10.05;
            uom = "degF";
            Console.WriteLine("For temp of {0} {1} roundup is {2} {1}", t, uom, calc.RoundUpAPI11_1(t, uom));

            // Check other roundups
            t = -0.05;
            int pow10 = -1;

            Console.WriteLine("Value of {0} rounds up to {1} at precision 10e{2}", t, calc.RoundUpAPI11_1(t, Math.Pow(10, pow10)), pow10);
            t = -0.049;
            Console.WriteLine("Value of {0} rounds up to {1} at precision 10e{2}", t, calc.RoundUpAPI11_1(t, Math.Pow(10, pow10)), pow10);
            t = -0.051;
            Console.WriteLine("Value of {0} rounds up to {1} at precision 10e{2}", t, calc.RoundUpAPI11_1(t, Math.Pow(10, pow10)), pow10);
            t = 0.35555;
            Console.WriteLine("Value of {0} rounds up to {1} at precision 10e{2}", t, calc.RoundUpAPI11_1(t, Math.Pow(10, pow10)), pow10);
            t = 0.40289;
            Console.WriteLine("Value of {0} rounds up to {1} at precision 10e{2}", t, calc.RoundUpAPI11_1(t, Math.Pow(10, pow10)), pow10);
            t = 24.95;
            Console.WriteLine("Value of {0} rounds up to {1} at precision 10e{2}", t, calc.RoundUp(t, pow10), pow10);
            t     = 2015.0;
            pow10 = 1;
            Console.WriteLine("Value of {0} rounds up to {1} at precision 10e{2}", t, calc.RoundUp(t, pow10), pow10);
            t     = 2017.5;
            pow10 = 0;
            Console.WriteLine("Value of {0} rounds up to {1} at precision 10e{2}", t, calc.RoundUp(t, pow10), pow10);
            t     = 1.374174158511;
            pow10 = -5;
            Console.WriteLine("Value of {0} rounds up to {1} at precision 10e{2}", t, calc.RoundUp(t, pow10), pow10);


            // Check temperature conversions
            t = 32;
            Console.WriteLine("Temp {0} in degF converts to {1} in degC", t, Conversions.DegFtoDegC(t));
            Console.WriteLine("Temp {0} in degF converts to {1} in degK", t, Conversions.DegFtoDegK(t));
            t = -40;
            Console.WriteLine("Temp {0} in degF converts to {1} in degC", t, Conversions.DegFtoDegC(t));
            Console.WriteLine("Temp {0} in degF converts to {1} in degK", t, Conversions.DegFtoDegK(t));
            t = 60;
            Console.WriteLine("Temp {0} in degF converts to {1} in degC", t, Conversions.DegFtoDegC(t));
            Console.WriteLine("Temp {0} in degF converts to {1} in degK", t, Conversions.DegFtoDegK(t));
            t = 212;
            Console.WriteLine("Temp {0} in degF converts to {1} in degC", t, Conversions.DegFtoDegC(t));
            Console.WriteLine("Temp {0} in degF converts to {1} in degK", t, Conversions.DegFtoDegK(t));
            t = 0;
            Console.WriteLine("Temp {0} in degC converts to {1} in degF", t, Conversions.DegCtoDegF(t));
            t = -40;
            Console.WriteLine("Temp {0} in degC converts to {1} in degF", t, Conversions.DegCtoDegF(t));
            t = 15;
            Console.WriteLine("Temp {0} in degC converts to {1} in degF", t, Conversions.DegCtoDegF(t));
            t = 100;
            Console.WriteLine("Temp {0} in degC converts to {1} in degF", t, Conversions.DegCtoDegF(t));
            t   = 32;
            uom = "degF";
            Console.WriteLine("Temp {0} in {1} ITS90 converts to {2} {1} ITPS68 - rounded up", t, uom, calc.RoundUpAPI11_1(Conversions.TempITS90toITPS68(t, uom), uom));
            t = -40;
            Console.WriteLine("Temp {0} in {1} ITS90 converts to {2} {1} ITPS68 - rounded up", t, uom, calc.RoundUpAPI11_1(Conversions.TempITS90toITPS68(t, uom), uom));
            t = 60;
            Console.WriteLine("Temp {0} in {1} ITS90 converts to {2} {1} ITPS68 - rounded up", t, uom, calc.RoundUpAPI11_1(Conversions.TempITS90toITPS68(t, uom), uom));
            t = 212;
            Console.WriteLine("Temp {0} in {1} ITS90 converts to {2} {1} ITPS68", t, uom, Conversions.TempITS90toITPS68(t, uom));
            t   = 0;
            uom = "degC";
            Console.WriteLine("Temp {0} in {1} ITS90 converts to {2} {1} ITPS68", t, uom, Conversions.TempITS90toITPS68(t, uom));
            t = -40;
            Console.WriteLine("Temp {0} in {1} ITS90 converts to {2} {1} ITPS68", t, uom, Conversions.TempITS90toITPS68(t, uom));
            t = 15;
            Console.WriteLine("Temp {0} in {1} ITS90 converts to {2} {1} ITPS68", t, uom, Conversions.TempITS90toITPS68(t, uom));
            t = 100;
            Console.WriteLine("Temp {0} in {1} ITS90 converts to {2} {1} ITPS68", t, uom, Conversions.TempITS90toITPS68(t, uom));

            // Check Density Conversions
            double d = 10;

            uom = "API";
            Console.WriteLine("Density {0} in {1} converts to {2} in SG", d, uom, Conversions.APItoSG(d));
            Console.WriteLine("Density {0} in {1} converts to {2} in kg/m3", d, uom, Conversions.APItoKgm3(d));
            d = 1.8400000333786;
            Console.WriteLine("Density {0} in {1} converts to {2} in SG", d, uom, Conversions.APItoSG(d));
            Console.WriteLine("Density {0} in {1} converts to {2} in kg/m3", d, uom, Conversions.APItoKgm3(d));
            d   = 1;
            uom = "SG";
            Console.WriteLine("Density {0} in {1} converts to {2} in API", d, uom, Conversions.SGtoAPI(d));
            Console.WriteLine("Density {0} in {1} converts to {2} in kg/m3", d, uom, Conversions.APItoKgm3(Conversions.SGtoAPI(d)));
            d   = 999.016;
            uom = "kg/m3";
            Console.WriteLine("Density {0} in {1} converts to {2} in API", d, uom, Conversions.Kgm3toAPI(d));
            Console.WriteLine("Density {0} in {1} converts to {2} in SG", d, uom, Conversions.APItoSG(Conversions.Kgm3toAPI(d)));
            Console.WriteLine("Density {0} in {1} converts to {2} in lb/gal", d, uom, Conversions.KgM3ToLbGal(d));
            d = 610.6;
            Console.WriteLine("Density {0} in {1} converts to {2} in API", d, uom, Conversions.Kgm3toAPI(d));
            Console.WriteLine("Density {0} in {1} converts to {2} in SG", d, uom, Conversions.APItoSG(Conversions.Kgm3toAPI(d)));
            d = 800;
            Console.WriteLine("Density {0} in {1} converts to {2} in API", d, uom, Conversions.Kgm3toAPI(d));
            Console.WriteLine("Density {0} in {1} converts to {2} in SG", d, uom, Conversions.APItoSG(Conversions.Kgm3toAPI(d)));
            d   = 0.5250;
            uom = "SG";
            Console.WriteLine("Density {0} in {1} converts to {2} in API", d, uom, Conversions.SGtoAPI(d));
            Console.WriteLine("Density {0} in {1} converts to {2} in kg/m3", d, uom, Conversions.SGtoKgm3(d));

            // Get kCoeffs and print them
            var grp = COMMODITY_GROUP.CRUDE_OIL;
            var kc  = calc.GetKCoeffs(grp);

            Console.WriteLine("Commodity Group {0} has k0={1}, k1={2}, k2={3}", kc.CommodityGroup, kc.k0, kc.k1, kc.k2);
            grp = COMMODITY_GROUP.FUEL_OILS;
            kc  = calc.GetKCoeffs(grp);
            Console.WriteLine("Commodity Group {0} has k0={1}, k1={2}, k2={3}", kc.CommodityGroup, kc.k0, kc.k1, kc.k2);
            grp = COMMODITY_GROUP.GASOLINES;
            kc  = calc.GetKCoeffs(grp);
            Console.WriteLine("Commodity Group {0} has k0={1}, k1={2}, k2={3}", kc.CommodityGroup, kc.k0, kc.k1, kc.k2);
            grp = COMMODITY_GROUP.JET_FUELS;
            kc  = calc.GetKCoeffs(grp);
            Console.WriteLine("Commodity Group {0} has k0={1}, k1={2}, k2={3}", kc.CommodityGroup, kc.k0, kc.k1, kc.k2);
            grp = COMMODITY_GROUP.LUBRICATING_OIL;
            kc  = calc.GetKCoeffs(grp);
            Console.WriteLine("Commodity Group {0} has k0={1}, k1={2}, k2={3}", kc.CommodityGroup, kc.k0, kc.k1, kc.k2);
            grp = COMMODITY_GROUP.TRANSITION_ZONE;
            kc  = calc.GetKCoeffs(grp);
            Console.WriteLine("Commodity Group {0} has k0={1}, k1={2}, k2={3}", kc.CommodityGroup, kc.k0, kc.k1, kc.k2);

            // Get GasLiqProperties and print them
            var gasLiq = LIQ_GAS_FLUID.EE_68_32;
            var lgp    = calc.GetLiqGasProps(gasLiq);

            Console.WriteLine("Liquid Gas {0} has relDens60={1}, tempCritK={2}, compCrit={3}, densCrit={4}, k1={5}, k2={6}, k1={7}, k2={8}", lgp.Fluid, lgp.relDens60, lgp.tempCritK, lgp.comprFactCrit, lgp.densCrit, lgp.k1, lgp.k2, lgp.k3, lgp.k4);
            gasLiq = LIQ_GAS_FLUID.ETHANE;
            lgp    = calc.GetLiqGasProps(gasLiq);
            Console.WriteLine("Liquid Gas {0} has relDens60={1}, tempCritK={2}, compCrit={3}, densCrit={4}, k1={5}, k2={6}, k1={7}, k2={8}", lgp.Fluid, lgp.relDens60, lgp.tempCritK, lgp.comprFactCrit, lgp.densCrit, lgp.k1, lgp.k2, lgp.k3, lgp.k4);
            gasLiq = LIQ_GAS_FLUID.EP_65_35;
            lgp    = calc.GetLiqGasProps(gasLiq);
            Console.WriteLine("Liquid Gas {0} has relDens60={1}, tempCritK={2}, compCrit={3}, densCrit={4}, k1={5}, k2={6}, k1={7}, k2={8}", lgp.Fluid, lgp.relDens60, lgp.tempCritK, lgp.comprFactCrit, lgp.densCrit, lgp.k1, lgp.k2, lgp.k3, lgp.k4);
            gasLiq = LIQ_GAS_FLUID.EP_35_65;
            lgp    = calc.GetLiqGasProps(gasLiq);
            Console.WriteLine("Liquid Gas {0} has relDens60={1}, tempCritK={2}, compCrit={3}, densCrit={4}, k1={5}, k2={6}, k1={7}, k2={8}", lgp.Fluid, lgp.relDens60, lgp.tempCritK, lgp.comprFactCrit, lgp.densCrit, lgp.k1, lgp.k2, lgp.k3, lgp.k4);
            gasLiq = LIQ_GAS_FLUID.PROPANE;
            lgp    = calc.GetLiqGasProps(gasLiq);
            Console.WriteLine("Liquid Gas {0} has relDens60={1}, tempCritK={2}, compCrit={3}, densCrit={4}, k1={5}, k2={6}, k1={7}, k2={8}", lgp.Fluid, lgp.relDens60, lgp.tempCritK, lgp.comprFactCrit, lgp.densCrit, lgp.k1, lgp.k2, lgp.k3, lgp.k4);
            gasLiq = LIQ_GAS_FLUID.iBUTANE;
            lgp    = calc.GetLiqGasProps(gasLiq);
            Console.WriteLine("Liquid Gas {0} has relDens60={1}, tempCritK={2}, compCrit={3}, densCrit={4}, k1={5}, k2={6}, k1={7}, k2={8}", lgp.Fluid, lgp.relDens60, lgp.tempCritK, lgp.comprFactCrit, lgp.densCrit, lgp.k1, lgp.k2, lgp.k3, lgp.k4);
            gasLiq = LIQ_GAS_FLUID.nBUTANE;
            lgp    = calc.GetLiqGasProps(gasLiq);
            Console.WriteLine("Liquid Gas {0} has relDens60={1}, tempCritK={2}, compCrit={3}, densCrit={4}, k1={5}, k2={6}, k1={7}, k2={8}", lgp.Fluid, lgp.relDens60, lgp.tempCritK, lgp.comprFactCrit, lgp.densCrit, lgp.k1, lgp.k2, lgp.k3, lgp.k4);
            gasLiq = LIQ_GAS_FLUID.iPENTANE;
            lgp    = calc.GetLiqGasProps(gasLiq);
            Console.WriteLine("Liquid Gas {0} has relDens60={1}, tempCritK={2}, compCrit={3}, densCrit={4}, k1={5}, k2={6}, k1={7}, k2={8}", lgp.Fluid, lgp.relDens60, lgp.tempCritK, lgp.comprFactCrit, lgp.densCrit, lgp.k1, lgp.k2, lgp.k3, lgp.k4);
            gasLiq = LIQ_GAS_FLUID.nPENTANE;
            lgp    = calc.GetLiqGasProps(gasLiq);
            Console.WriteLine("Liquid Gas {0} has relDens60={1}, tempCritK={2}, compCrit={3}, densCrit={4}, k1={5}, k2={6}, k1={7}, k2={8}", lgp.Fluid, lgp.relDens60, lgp.tempCritK, lgp.comprFactCrit, lgp.densCrit, lgp.k1, lgp.k2, lgp.k3, lgp.k4);
            gasLiq = LIQ_GAS_FLUID.iHEXANE;
            lgp    = calc.GetLiqGasProps(gasLiq);
            Console.WriteLine("Liquid Gas {0} has relDens60={1}, tempCritK={2}, compCrit={3}, densCrit={4}, k1={5}, k2={6}, k1={7}, k2={8}", lgp.Fluid, lgp.relDens60, lgp.tempCritK, lgp.comprFactCrit, lgp.densCrit, lgp.k1, lgp.k2, lgp.k3, lgp.k4);
            gasLiq = LIQ_GAS_FLUID.nHEXANE;
            lgp    = calc.GetLiqGasProps(gasLiq);
            Console.WriteLine("Liquid Gas {0} has relDens60={1}, tempCritK={2}, compCrit={3}, densCrit={4}, k1={5}, k2={6}, k1={7}, k2={8}", lgp.Fluid, lgp.relDens60, lgp.tempCritK, lgp.comprFactCrit, lgp.densCrit, lgp.k1, lgp.k2, lgp.k3, lgp.k4);
            gasLiq = LIQ_GAS_FLUID.nHEPTANE;
            lgp    = calc.GetLiqGasProps(gasLiq);
            Console.WriteLine("Liquid Gas {0} has relDens60={1}, tempCritK={2}, compCrit={3}, densCrit={4}, k1={5}, k2={6}, k1={7}, k2={8}", lgp.Fluid, lgp.relDens60, lgp.tempCritK, lgp.comprFactCrit, lgp.densCrit, lgp.k1, lgp.k2, lgp.k3, lgp.k4);

            // Get Vapor Pressure Correlation Parameters
            var vpCorrParms = RulesLoader.GetVapPressCorrParams();

            foreach (var vpCorrParm in vpCorrParms)
            {
                Console.WriteLine("{0}{1}Relative Density{2}{3} - A0={4},A1={5},A2={6},B0={7},B1={8},B2={9}",
                                  vpCorrParm.RelDensityRange.Min, vpCorrParm.RelDensityRange.MinCompare == COMPARE.INCLUDE?"<=":"<",
                                  vpCorrParm.RelDensityRange.MaxCompare == COMPARE.INCLUDE ? "<=" : "<", vpCorrParm.RelDensityRange.Max,
                                  vpCorrParm.A0, vpCorrParm.A1, vpCorrParm.A2, vpCorrParm.B0, vpCorrParm.B1, vpCorrParm.B2);
            }

            // Validate range checks
            double pres = 0;
            double temp = 0;
            double dens = 800;
            double api  = Conversions.Kgm3toAPI(dens);

            grp = COMMODITY_GROUP.CRUDE_OIL;
            Console.WriteLine("Testing for commodity group {0}", grp);
            double vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);  // All good

            Console.WriteLine("Values in range test completed");
            // Temp to low
            temp = -58.1;
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);
                Console.WriteLine("Test for low temp for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Temp {0} is too low", temp);
            }
            // Temp to high
            temp = 302.1;
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);
                Console.WriteLine("Test for high temp for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e) {
                Console.WriteLine("Temp {0} is too high", temp);
            }
            temp = 0;
            // Press to low
            pres = -0.1;
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);
                Console.WriteLine("Test for low press for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Press {0} is too low", pres);
            }
            // Press to high
            pres = 1500.1;
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);
                Console.WriteLine("Test for high press for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Press {0} is too high", pres);
            }
            // Density too low
            dens = 610.5;
            api  = Conversions.Kgm3toAPI(dens);
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);
                Console.WriteLine("Test for low density for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Density {0} is too low", dens);
            }
            // Density too high
            dens = 1163.5;
            api  = Conversions.Kgm3toAPI(dens);
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);
                Console.WriteLine("Test for high density for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Density {0} is too high", dens);
            }
            pres = 0;
            temp = 0;
            dens = 900;
            api  = Conversions.Kgm3toAPI(dens);
            grp  = COMMODITY_GROUP.FUEL_OILS;
            Console.WriteLine("Testing for commodity group {0}", grp);
            vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);              // All good
            Console.WriteLine("Values in range test completed");
            // Density too low
            dens = 818.3126;
            api  = Conversions.Kgm3toAPI(dens);
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);
                Console.WriteLine("Test for low density for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Density {0} is too low", dens);
            }
            // Density too high
            dens = 1163.6;
            api  = Conversions.Kgm3toAPI(dens);
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);
                Console.WriteLine("Test for high density for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Density {0} is too high", dens);
            }
            dens = 800;
            api  = Conversions.Kgm3toAPI(dens);
            grp  = COMMODITY_GROUP.JET_FUELS;
            Console.WriteLine("Testing for commodity group {0}", grp);
            vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);              // All good
            Console.WriteLine("Values in range test completed");
            // Density too low
            dens = 787.5194;
            api  = Conversions.Kgm3toAPI(dens);
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);
                Console.WriteLine("Test for low density for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Density {0} is too low", dens);
            }
            // Density too high
            dens = 838.3127;
            api  = Conversions.Kgm3toAPI(dens);
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);
                Console.WriteLine("Test for high density for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Density {0} is too high", dens);
            }
            dens = 780;
            api  = Conversions.Kgm3toAPI(dens);
            grp  = COMMODITY_GROUP.TRANSITION_ZONE;
            Console.WriteLine("Testing for commodity group {0}", grp);
            vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);              // All good
            Console.WriteLine("Values in range test completed");
            // Density too low
            dens = 770.351;
            api  = Conversions.Kgm3toAPI(dens);
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);
                Console.WriteLine("Test for low density for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Density {0} is too low", dens);
            }
            // Density too high
            dens = 787.5195;
            api  = Conversions.Kgm3toAPI(dens);
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);
                Console.WriteLine("Test for high density for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Density {0} is too high", dens);
            }
            dens = 650;
            api  = Conversions.Kgm3toAPI(dens);
            grp  = COMMODITY_GROUP.GASOLINES;
            Console.WriteLine("Testing for commodity group {0}", grp);
            vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);              // All good
            Console.WriteLine("Values in range test completed");
            // Density too low
            dens = 610.5;
            api  = Conversions.Kgm3toAPI(dens);
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);
                Console.WriteLine("Test for low density for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Density {0} is too low", dens);
            }
            // Density too high
            dens = 770.352;
            api  = Conversions.Kgm3toAPI(dens);
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);
                Console.WriteLine("Test for high density for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Density {0} is too high", dens);
            }
            dens = 900;
            api  = Conversions.Kgm3toAPI(dens);
            grp  = COMMODITY_GROUP.LUBRICATING_OIL;
            Console.WriteLine("Testing for commodity group {0}", grp);
            vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);              // All good
            Console.WriteLine("Values in range test completed");
            // Density too low
            dens = 800.8;
            api  = Conversions.Kgm3toAPI(dens);
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);
                Console.WriteLine("Test for low density for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Density {0} is too low", dens);
            }
            // Density too high
            dens = 1163.5;
            api  = Conversions.Kgm3toAPI(dens);
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres);
                Console.WriteLine("Test for high density for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Density {0} is too high", dens);
            }
            // LPG and NGLs
            pres = 150;
            double vapPres = 40;

            temp = -40;
            dens = 500;
            api  = Conversions.Kgm3toAPI(dens);
            grp  = COMMODITY_GROUP.LPG_NGL;
            Console.WriteLine("Testing for commodity group {0}", grp);
            vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres, vapPres);  // All good
            Console.WriteLine("Values in range test completed");
            // Temp to low
            temp = -50.9;
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres, vapPres);                 // All good
                Console.WriteLine("Test for low temp for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Temp {0} is too low", temp);
            }
            // Temp to high
            temp = 199.5;
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres, vapPres);                 // All good
                Console.WriteLine("Test for high temp for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Temp {0} is too high", temp);
            }
            // Density to low
            dens = Conversions.SGtoKgm3(0.349);
            api  = Conversions.Kgm3toAPI(dens);
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres, vapPres);                 // All good
                Console.WriteLine("Test for low density for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Density {0} is too low", dens);
            }
            // Density to high
            dens = Conversions.SGtoKgm3(0.689);
            api  = Conversions.Kgm3toAPI(dens);
            try
            {
                vcf = calc.GetCTPLFromApiDegFPsig(grp, api, temp, pres, vapPres);                 // All good
                Console.WriteLine("Test for high density for {0} failed", grp);
            }
            catch (ArgumentOutOfRangeException e)
            {
                Console.WriteLine("Density {0} is too high", dens);
            }

            Console.WriteLine("Press ENTER to terminate");
            Console.ReadLine();
        }