예제 #1
0
 public void CalculateOilTest_March9_2012()
 {
     double[] rho0 = { 0.9, 0.88, 0.86, 0.84, 0.82, 0.8, 0.78, 0.76, 0.74, 0.72, 0.7, 0.68, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85 };
     double[] Rs   = { 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0,
                       100.0,     0.0,  50.0, 100.0, 150.0, 200.0, 250.0, 300.0, 350.0, 400.0, 450.0 };
     double[] P = { 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 60.0,
                    60.0, 60.0, 60.0, 60.0, 60.0, 60.0, 60.0, 60.0, 60.0 };
     //KResults are not provided in the python code oil_flag11.py
     //double[] KResults = { };
     double[] vel = { 1.419354650612, 1.396523495791, 1.373050880475, 1.348924794867,
                      1.324120478412, 1.298601745168, 1.272321240147, 1.244891756594,
                      1.215280756274, 1.186798363425, 1.159565129588, 1.133769876582,
                      1.608671089213, 1.525174734841, 1.453008659029, 1.389434532465,
                      1.330858948878, 1.282621392775, 1.248366303083, 1.225560066150,
                      1.212799904902, 1.209404245261 };
     double[] rhoResultsBy1000 = { 0.818905771890, 0.800517657722, 0.781992687855, 0.763371813360,
                                   0.744688932377, 0.725973968289, 0.707255049719, 0.688560236329,
                                   0.669919069078, 0.651364150267, 0.632932936876, 0.614669943566,
                                   0.871637832672, 0.824115924495, 0.786357762648, 0.751427228598,
                                   0.718554606033, 0.689831078427, 0.664977637551, 0.643571679934,
                                   0.625165000236, 0.609334962576 };
     for (int i = 0; i < 22; i++)
     {
         double          API           = (141.5 / rho0[i]) - 131.5;
         double          G             = 0.65;
         double          T             = 30.0;
         FluidProperties flagresultOil = FlagLogic.CalculateOilProperties(T, P[i], G, Rs[i], API);
         //Assert.AreEqual(KResults[i], Math.Round(flagresultOil.FlagResultK.Value, 3), 0.009, "Expected and actual density k_oil do not match");
         Assert.AreEqual(rhoResultsBy1000[i] * 1000, Math.Round(flagresultOil.FlagResultRho.Value, 9), 1e-9, "Expected and actual density rho_oil do not match");
         Assert.AreEqual(vel[i], Math.Round(flagresultOil.FlagResultVelocity.Value, 12), 1e-12, "Expected and actual velocity vel_oil do not match");
     }
 }
예제 #2
0
        public void CalculateOilTest_March5_2012()
        {
            FluidProperties initialFluid = new FluidProperties()
            {
                FluidDensityAPI  = 25.72,
                GasOilRatioRs    = 1,
                FluidGravity     = 0.6,
                FluidTemperature = 60,
                FluidPressure    = 1
            };

            const double tolerance = 0.025; //TODO - this was 0.009 but then tests fail.  TODO: review against spec, when we get one.

            FluidProperties flagresultOil = FlagLogic.CalculateOilProperties(initialFluid.FluidTemperature.Value, initialFluid.FluidPressure.Value,
                                                                             initialFluid.FluidGravity, initialFluid.GasOilRatioRs.Value,
                                                                             initialFluid.FluidDensityAPI);
            FluidProperties flagresultGas   = FlagLogic.CalculateGasProperties(initialFluid.FluidTemperature.Value, initialFluid.FluidPressure.Value, initialFluid.FluidGravity, 0.008314);
            FluidProperties flagresultBrine = FlagLogic.CalculateBrineProperties(initialFluid.FluidTemperature.Value, initialFluid.FluidPressure.Value, 25000, 100, 0, 0);

            checkValue(1.4954, Math.Round(flagresultOil.FlagResultK.Value, 3), tolerance, "Expected and actual density k_oil do not match");

            checkValue(1.4954, Math.Round(flagresultOil.FlagResultK.Value, 3), tolerance, "Expected and actual density k_oil do not match");
            checkValue(866.918, Math.Round(flagresultOil.FlagResultRho.Value, 3), tolerance, "Expected and actual density rho_oil do not match");
            checkValue(0.0010247, Math.Round(flagresultGas.FlagResultK.Value, 3), tolerance, "Expected and actual density k_oil do not match");
            checkValue(6.295, Math.Round(flagresultGas.FlagResultRho.Value, 3), tolerance, "Expected and actual density rho_oil do not match");
            checkValue(2.48417, Math.Round(flagresultBrine.FlagResultK.Value, 3), tolerance, "Expected and actual density k_oil do not match");
            checkValue(1000.687247, Math.Round(flagresultBrine.FlagResultRho.Value, 3), tolerance, "Expected and actual density rho_oil do not match");
        }
예제 #3
0
        public ConnectAndType GetFlagToDirection(FlagLogic Flages)
        {
            foreach (var Direction in Directions)
            {
                if (Direction.flagLogic == Flages)
                {
                    return(Direction);
                }
            }

            return(null);
        }
예제 #4
0
 public void CalculateGasPropertiesTest()
 {
     double[] gravity    = { 0.56, 0.76, 0.96, 1.06, 1.26, 1.46, 1.66, 1.86, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72 };
     double[] T          = { 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 20.0, 40.0, 60.0, 80.0, 100.0, 120.0, 140.0 };
     double[] P          = { 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0 };
     double[] KResults   = { 0.140, 0.2125, 0.311, 0.364, 0.470, 0.570, 0.664, 0.750, 0.062, 0.127, 0.195, 0.265, 0.339, 0.416, 0.497, 0.580, 0.668, 0.217, 0.176, 0.145, 0.123, 0.107, 0.095, 0.086 };
     double[] rhoResults = { 242.019, 341.347, 419.377, 451.215, 504.173, 546.494, 581.189, 610.2276, 228.164, 289.144, 323.090, 346.086, 363.295, 376.940,
                             388.177, 397.678, 405.871, 334.595, 311.756, 289.906, 269.544,  250.991, 234.356, 219.575 };
     for (int i = 0; i < 24; i++)
     {
         FluidProperties flagresultGas = FlagLogic.CalculateGasProperties(T[i], P[i], gravity[i], 0.008314);
         Assert.AreEqual(KResults[i], Math.Round(flagresultGas.FlagResultK.Value, 3), 0.009, "Expected and actual density k_gas do not match");
         Assert.AreEqual(rhoResults[i], Math.Round(flagresultGas.FlagResultRho.Value, 3), 0.009, "Expected and actual density rho_gas do not match");
     }
 }
예제 #5
0
 public void CalculateBrineTestPython()
 {
     double[] Sal = { 0.0,       30000.0,  60000.0,  90000.0, 120000.0, 150000.0, 180000.0, 210000.0, 240000.0, 270000.0, 300000.0, 150000.0, 150000.0, 150000.0,
                      150000.0, 150000.0, 150000.0, 150000.0, 150000.0, 150000.0, 150000.0 };
     double[] Na       = { 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0 };
     double[] KC       = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0 };
     double[] Ca       = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0, 40.0 };
     double[] T        = { 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0 };
     double[] P        = { 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 0.1, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0 };
     double[] KResults = { 2.347, 2.503, 2.674, 2.854, 3.040, 3.230, 3.424, 3.620, 3.816, 4.011, 4.204, 2.865, 3.022, 3.161, 3.281, 3.386, 3.476,
                           3.552, 3.618, 3.672, 3.718 };
     double[] rhoResults = { 1005.667,   1026.222,  1047.369,  1069.105,  1091.432,  1114.349,  1137.856, 1161.954, 1186.642, 1211.920, 1237.788,
                             1105.5378, 1109.5396, 1112.1331, 1113.5245, 1113.9376, 1113.5669, 1112.5800,  1111.12,  1109.31, 1107.259 };
     for (int i = 0; i < 21; i++)
     {
         FluidProperties flagresultBrine = FlagLogic.CalculateBrineProperties(T[i], P[i], Sal[i], Na[i], KC[i], Ca[i]);
         Assert.AreEqual(KResults[i], Math.Round(flagresultBrine.FlagResultK.Value, 3), 0.009, "Expected and actual density k_brine do not match");
         Assert.AreEqual(rhoResults[i], Math.Round(flagresultBrine.FlagResultRho.Value, 3), 0.009, "Expected and actual density rho_brine do not match");
     }
 }