Fortran DLL Wrapper
![]() | FortranDllServiceTComputeFracturingMudWeights Method |
Computes fracturing mud weights.
Namespace: FortranWrapper
Assembly: FortranWrapper (in FortranWrapper.dll) Version: 1.0.1.0 (1.0.1.0)

public double[] ComputeFracturingMudWeights( T model, IProgress<int> progress = null, int progressInterval = 10 )
Public Function ComputeFracturingMudWeights ( model As T, Optional progress As IProgress(Of Integer) = Nothing, Optional progressInterval As Integer = 10 ) As Double()
public: array<double>^ ComputeFracturingMudWeights( T model, IProgress<int>^ progress = nullptr, int progressInterval = 10 )
member ComputeFracturingMudWeights : model : 'T * ?progress : IProgress<int> * ?progressInterval : int (* Defaults: let _progress = defaultArg progress null let _progressInterval = defaultArg progressInterval 10 *) -> float[]
Parameters
- model
- Type: T
Simulation model contains parameters required for running. - progress (Optional)
- Type: FortranWrapperIProgressInt32
Provider for progress updates. - progressInterval (Optional)
- Type: SystemInt32
Progress interval - number of data points processed in between two progress reports.
Return Value
Type: DoubleAn array of fracturing mud weights sorted in the order of data points in model. Unit: kg/m^3.

Compute Fracturing Mud Weights
var model = new ElasticModel() { WellboreGeometry = new WellboreGeometry() { TVD = new double[] { 800, 900, 1000, 1000, 1100, 1200, 1200, 1300, 1400, 1400, 1500, 1600, 1600, 1700, 1800, 1800, 1900, 2000 }, BoreholeRadius = new double[] { 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16 }, Inclination = new double[] { 0, 20, 25, 20, 30, 28, 30, 24, 17, 24, 15, 22, 15, 28, 35, 28, 40, 45 }, Azimuth = new double[] { 0, 10, 20, 10, 30, 40, 30, 50, 60, 50, 70, 80, 70, 90, 100, 90, 110, 120 } }, BoreholeCondition = new BoreholeCondition[] { BoreholeCondition.Impermeable, BoreholeCondition.Impermeable, BoreholeCondition.Impermeable, BoreholeCondition.Permeable, BoreholeCondition.Permeable, BoreholeCondition.Permeable, BoreholeCondition.Impermeable, BoreholeCondition.Impermeable, BoreholeCondition.Impermeable, BoreholeCondition.Permeable, BoreholeCondition.Permeable, BoreholeCondition.Permeable, BoreholeCondition.Permeable, BoreholeCondition.Permeable, BoreholeCondition.Permeable, BoreholeCondition.Impermeable, BoreholeCondition.Impermeable, BoreholeCondition.Impermeable }, StressGradients = new StressGradients() { OverburdenStressGradient = new double[] { 24, 24, 24, 26, 26, 26, 25, 25, 25, 27, 27, 27, 28, 28, 28, 29, 29, 29 }, MaxHorizontalStressGradient = new double[] { 23, 23, 23, 21.5, 21.5, 21.5, 24.5, 24.5, 24.5, 25, 25, 25, 22, 22, 22, 23, 23, 23 }, MinHorizontalStressGradient = new double[] { 18, 18, 18, 18.5, 18.5, 18.5, 19, 19, 19, 16.5, 16.5, 16.5, 17.5, 17.5, 17.5, 17, 17, 17 }, MaxHorizontalStressAzimuth = new double[] { 0, 0, 0, 10, 10, 10, 20, 20, 20, 30, 30, 30, 40, 40, 40, 50, 50, 50 }, PorePressureGradient = new double[] { 9.8, 9.8, 9.8, 10.7, 10.7, 10.7, 10.2, 10.2, 10.2, 10.1, 10.1, 10.1, 10.5, 10.5, 10.5, 10.6, 10.6, 10.6 }, }, MechanicalProperties = new MechanicalProperties() { YoungModulusInIsotropicPlane = new double[] { 1800, 1800, 1800, 1900, 1900, 1900, 1850, 1850, 1850, 2200, 2200, 2200, 2400, 2400, 2400, 2900, 2900, 2900 }, PoissonRatioInIsotropicPlane = new double[] { 0.3, 0.3, 0.3, 0.21, 0.21, 0.21, 0.32, 0.32, 0.32, 0.28, 0.28, 0.28, 0.25, 0.25, 0.25, 0.22, 0.22, 0.22 }, }, FailureProperties = new FailureProperties() { Cohesion = new double[] { 7, 7, 7, 8, 8, 8, 12, 12, 12, 9, 9, 9, 6, 6, 6, 8.5, 8.5, 8.5 }, FrictionAngle = new double[] { 15, 15, 15, 14, 14, 14, 20, 20, 20, 12, 12, 12, 19, 19, 19, 11, 11, 11 }, BreakOutAngle = new double[] { 0, 0, 0, 5, 5, 5, 10, 10, 10, 8, 8, 8, 10, 10, 10, 0, 0, 0 }, TensileStrength = new double[] { 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5 }, RadialRatio = new double[] { 1, 1, 1, 1.05, 1.05, 1.05, 1.1, 1.1, 1.1, 1.08, 1.08, 1.08, 1.2, 1.2, 1.2, 1.15, 1.15, 1.15 } } }; var progress = new FortranWrapper.Progress<int>(i => Debug.WriteLine("Progress: {0}", i)); var expectedMWs = new double[] { 2163.275391, 2153.544678, 2158.044189, 1793.990234, 1762.308594, 1762.980591, 2551.020508, 2551.020264, 2551.020264, 1466.338501, 1462.319824, 1433.732666, 1820.731079, 1775.111816, 1757.394165, 2586.648926, 2814.40332, 2959.183838 }; var dllService = new FortranDllService<IElasticModel>(); var actualMWs = dllService.ComputeFracturingMudWeights(model, progress, progressInterval: 4); var eps = 1E-5; // tolerance epsilon Assert.IsTrue(expectedMWs.Length == actualMWs.Length); for (int i = 0; i < expectedMWs.Length; i++) { var diff = Math.Abs(expectedMWs[i] - actualMWs[i]); Assert.IsTrue(diff <= eps, string.Format("i = {0}, expected = {1}, actual = {2}, diff = {3}", i, expectedMWs[i], actualMWs[i], diff)); }
