| | |
| | | using ErrorAnalysis.Repository; |
| | | using ErrorAnalysis.Repository.Entity; |
| | | using Microsoft.VisualBasic; |
| | | using System; |
| | | using System.Collections.Generic; |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取远探头C或O值 |
| | | /// 获取远探头C或O值(废弃) |
| | | /// </summary> |
| | | /// <param name="connectionString">数据库连接字符串</param> |
| | | /// <param name="modelId">管柱ID</param> |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取近探头C或O值 |
| | | /// 获取近探头C或O值(废弃) |
| | | /// </summary> |
| | | /// <param name="connectionString">数据库连接字符串</param> |
| | | /// <param name="modelId">管柱ID</param> |
| | |
| | | return result; |
| | | } |
| | | |
| | | public static List<double[]> GetFarSpectrum(string modelId, double porosity, double sw) |
| | | { |
| | | var result = new List<double[]>(); |
| | | if (porosity > 40) |
| | | throw new InvalidDataException("Porosity value out of range!"); |
| | | |
| | | double[] oilLineSpec; |
| | | double[] waterLineSpec; |
| | | |
| | | if (porosity % 5 == 0) |
| | | { |
| | | oilLineSpec = RepositoryInstance.Instance.COFarResultRepository.GetCOFarResult(modelId, (int)porosity, 0).CInelasticSpec.Split(',').Select(v => Convert.ToDouble(v)).ToArray(); |
| | | waterLineSpec = RepositoryInstance.Instance.COFarResultRepository.GetCOFarResult(modelId, (int)porosity, 100).CInelasticSpec.Split(',').Select(v => Convert.ToDouble(v)).ToArray(); |
| | | } |
| | | else |
| | | { |
| | | var ceilingPorosity = Math.Ceiling(porosity / 5) * 5; |
| | | double[] ceilingOilLineSpec = RepositoryInstance.Instance.COFarResultRepository.GetCOFarResult(modelId, (int)ceilingPorosity, 0).CInelasticSpec.Split(',').Select(v => Convert.ToDouble(v)).ToArray(); |
| | | double[] ceilingWaterLineSpec = RepositoryInstance.Instance.COFarResultRepository.GetCOFarResult(modelId, (int)ceilingPorosity, 100).CInelasticSpec.Split(',').Select(v => Convert.ToDouble(v)).ToArray(); |
| | | |
| | | var floorPorosity = Math.Floor(porosity / 5) * 5; |
| | | double[] floorOilLineSpec = RepositoryInstance.Instance.COFarResultRepository.GetCOFarResult(modelId, (int)floorPorosity, 0).CInelasticSpec.Split(',').Select(v => Convert.ToDouble(v)).ToArray(); |
| | | double[] floorWaterLineSpec = RepositoryInstance.Instance.COFarResultRepository.GetCOFarResult(modelId, (int)floorPorosity, 100).CInelasticSpec.Split(',').Select(v => Convert.ToDouble(v)).ToArray(); |
| | | |
| | | oilLineSpec = ceilingOilLineSpec; |
| | | waterLineSpec = ceilingWaterLineSpec; |
| | | |
| | | for (int i = 0; i < ceilingOilLineSpec.Length; i++) |
| | | { |
| | | oilLineSpec[i] = Utility.Interpolate(porosity, floorPorosity, floorOilLineSpec[i], ceilingPorosity, ceilingOilLineSpec[i]); |
| | | waterLineSpec[i] = Utility.Interpolate(porosity, floorPorosity, floorWaterLineSpec[i], ceilingPorosity, ceilingWaterLineSpec[i]); |
| | | } |
| | | } |
| | | if (sw == 0) |
| | | { |
| | | for (int i = 0; i < oilLineSpec.Length; i++) |
| | | { |
| | | result.Add([i, oilLineSpec[i]]); |
| | | } |
| | | } |
| | | else if (sw == 100) |
| | | { |
| | | for (int i = 0; i < waterLineSpec.Length; i++) |
| | | { |
| | | result.Add([i, waterLineSpec[i]]); |
| | | } |
| | | } |
| | | else if (sw > 0 && sw < 100) |
| | | { |
| | | for (int i = 0; i < waterLineSpec.Length; i++) |
| | | { |
| | | var val = Utility.Interpolate(sw, 0, oilLineSpec[i], 100, waterLineSpec[i]); |
| | | result.Add([i, val]); |
| | | } |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | public static List<double[]> GetNearSpectrum(string modelId, double porosity, double sw) |
| | | { |
| | | var result = new List<double[]>(); |
| | | if (porosity > 40) |
| | | throw new InvalidDataException("Porosity value out of range!"); |
| | | |
| | | double[] oilLineSpec; |
| | | double[] waterLineSpec; |
| | | |
| | | if (porosity % 5 == 0) |
| | | { |
| | | oilLineSpec = RepositoryInstance.Instance.CONearResultRepository.GetCONearResult(modelId, (int)porosity, 0).CInelasticSpec.Split(',').Select(v => Convert.ToDouble(v)).ToArray(); |
| | | waterLineSpec = RepositoryInstance.Instance.CONearResultRepository.GetCONearResult(modelId, (int)porosity, 100).CInelasticSpec.Split(',').Select(v => Convert.ToDouble(v)).ToArray(); |
| | | } |
| | | else |
| | | { |
| | | var ceilingPorosity = Math.Ceiling(porosity / 5) * 5; |
| | | double[] ceilingOilLineSpec = RepositoryInstance.Instance.CONearResultRepository.GetCONearResult(modelId, (int)ceilingPorosity, 0).CInelasticSpec.Split(',').Select(v => Convert.ToDouble(v)).ToArray(); |
| | | double[] ceilingWaterLineSpec = RepositoryInstance.Instance.CONearResultRepository.GetCONearResult(modelId, (int)ceilingPorosity, 100).CInelasticSpec.Split(',').Select(v => Convert.ToDouble(v)).ToArray(); |
| | | |
| | | var floorPorosity = Math.Floor(porosity / 5) * 5; |
| | | double[] floorOilLineSpec = RepositoryInstance.Instance.CONearResultRepository.GetCONearResult(modelId, (int)floorPorosity, 0).CInelasticSpec.Split(',').Select(v => Convert.ToDouble(v)).ToArray(); |
| | | double[] floorWaterLineSpec = RepositoryInstance.Instance.CONearResultRepository.GetCONearResult(modelId, (int)floorPorosity, 100).CInelasticSpec.Split(',').Select(v => Convert.ToDouble(v)).ToArray(); |
| | | |
| | | oilLineSpec = ceilingOilLineSpec; |
| | | waterLineSpec = ceilingWaterLineSpec; |
| | | |
| | | for (int i = 0; i < ceilingOilLineSpec.Length; i++) |
| | | { |
| | | oilLineSpec[i] = Utility.Interpolate(porosity, floorPorosity, floorOilLineSpec[i], ceilingPorosity, ceilingOilLineSpec[i]); |
| | | waterLineSpec[i] = Utility.Interpolate(porosity, floorPorosity, floorWaterLineSpec[i], ceilingPorosity, ceilingWaterLineSpec[i]); |
| | | } |
| | | } |
| | | if (sw == 0) |
| | | { |
| | | for (int i = 0; i < oilLineSpec.Length; i++) |
| | | { |
| | | result.Add([i, oilLineSpec[i]]); |
| | | } |
| | | } |
| | | else if (sw == 100) |
| | | { |
| | | for (int i = 0; i < waterLineSpec.Length; i++) |
| | | { |
| | | result.Add([i, waterLineSpec[i]]); |
| | | } |
| | | } |
| | | else if (sw > 0 && sw < 100) |
| | | { |
| | | for (int i = 0; i < waterLineSpec.Length; i++) |
| | | { |
| | | var val = Utility.Interpolate(sw, 0, oilLineSpec[i], 100, waterLineSpec[i]); |
| | | result.Add([i, val]); |
| | | } |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | public static (double, double) GetFarCROR(string modelId, double porosity, double sw) |
| | | { |
| | | var cWinLength = _cWinEndIndex - _cWinStartIndex + 1; |