Saturation Height Model

The Saturation Height Model wizard calibrates a capillary-pressure relationship from core Pc–Sw measurements, combines the fitted plugs into zone-group models, and applies a calibration to well porosity and permeability curves. It produces Height above FWL, Capillary pressure and Water saturation curves, and can store a named calibration for other wells and workflows.

Launching the wizard

Open the Petrophysics ribbon bar and click Saturation Height Model in the Core group.

Work through Core data, Calibration and Apply & validate. Load and review the measurements, fit the model and correlations, then calculate and validate the output curves.

Drag the border between settings and results to give either pane more room. On Calibration, you can also resize the plug table against the correlations and Fit QC area, and adjust the split between the plug-fit and residual plots. On Apply & validate, drag the borders between the live preview and results, or between the result summary and plots.

Loading core data

On Core data, select a Well and Core table. The picker lists the selected well's core tables and project tables under Statistics > Tables. Changing Well refreshes the list. If that well has no core table of its own, an unselectable explanation appears; any project tables remain selectable.

Selecting a table suggests assignments for the fields under Columns and units, using imported roles where available or recognized whole column names. Unrecognized columns remain available for manual assignment. Manual corrections remain until you change the table or well, which refreshes the suggestions.

  • Under Core data source, choose the source Well and Core table. Assign at least Sample id, Capillary pressure and Saturation. Assign Porosity and Permeability for coefficient correlations, Thomeer or Leverett-J, and map Depth (MD), Zone, Well, Test method, QC flag and Branch (drainage / imbibition) when those columns are present. Resistivity index can also be mapped; it is recorded but is not used by this model.
  • For a well core table, a recognized Pc unit is suggested beside Capillary pressure; otherwise choose the unit: MPa, psi, psia, bar, atm or kPa. If the stored unit is missing, ambiguous or unsupported, select the correct unit manually; no unit is assumed.
  • Sw or SWater suggests water saturation; SHg or Snw suggests non-wetting saturation. If the column name is ambiguous, select the phase manually. Set Saturation holds to Water saturation (Sw) or Non-wetting phase saturation (e.g. mercury). A non-wetting value is converted with Sw = 1 − Snw. Select v/v or % for core porosity and saturation; percent values are converted to fractions. Select m or ft for Depth (MD). Permeability is read in mD. Check the suggested units against the source data before loading.
  • Click Load core data. Rows sharing a Sample id form one plug. Rows with an empty or invalid sample id, Pc or Sw are omitted; when Depth is assigned, rows with an empty or nonnumeric depth are also omitted and reported. Keep repeated plug metadata consistent throughout each sample.
  • Use Plug filters to limit the loaded plugs by Well, Zone, Test method or QC flag. Refit after changing a filter. With no branch column, every point is treated as drainage.

For a source file that records a plug depth only on the first row of a block, use Fill down depth in the core-table import before loading it into this wizard.

After Load core data, review the populated plug and measured-point preview. This reference example contains six measurements for one plug.

saturation_height_model_data_tab.png

To reuse a calibration, select a project-saved model under Or start from a saved model and click Load model. The wizard stays on Core data; choose Apply & validate when ready. Opening a stored model from the Data Manager instead opens the wizard on Apply & validate. Saved models remain available after reopening the project, and the target well does not need its own core table.

Loading restores the calibration and coefficient correlations, together with recorded core-source and column assignments, units, Saturation holds, Plug filters, plug and matching-point exclusions, laboratory and reservoir fluid settings and presets, pressure normalisation and branch-combination settings. Older models can restore only the settings they recorded. Missing source data, columns, filter values or excluded measurements are reported; the loaded coefficients remain usable on Apply & validate. Before refitting, review the restored settings and exclusions on Core data.

QC and pressure normalisation

On Core data, review plugs and measured points, exclude unreliable measurements, and choose whether to normalise pressure before fitting. The populated preview is shown above.

  • Clear Use in the plug preview to remove the whole plug from fitting. In the selected plug's point table, clear Use to exclude an individual measurement.
  • Logarithmic Pc axis is enabled initially. Non-positive Pc values cannot be drawn on that axis and are omitted and counted instead of being silently floored.
  • Enable Normalize to reservoir conditions to use Pc(reservoir) = Pc(lab) × |sigma(reservoir) cos theta(reservoir)| / |sigma(lab) cos theta(lab)|. Air-mercury, Air-brine, Gas-brine and Oil-brine presets fill the sigma and contact-angle fields; all values remain editable.
  • Drainage enters the fit by default. Imbibition remains visible as a separate dashed branch; enable Combine imbibition into the drainage fit only when the two branches should be fitted together.

Normalisation keeps the original Pc and uses a separate transformed value. It does not alter the core table. Set Water density (g/cm3) and Hydrocarbon density (g/cm3) here for the reservoir fluids; these densities are also used when applying the model.

Fitting the model

On Calibration, choose log Pc or Saturation as the Fit domain. The selected domain is stored with the model and reported beside the fit statistics. Changing the model function clears the current fits, so fit again after switching.

Choose the function and Swir source, then click Fit & correlate. This fits the plugs and builds the group correlations. The reference example uses Brooks-Corey with a fixed Swir of 0.15; six points produce Pe = 2.5 MPa and Lambda = 1.8, with Constant correlations for the single plug.

saturation_height_model_model.png

  • Brooks-Corey fits Pe, Lambda and Swir per plug, using Se = (Sw − Swir) / (1 − Swir) and Pc = Pe × Se^(−1/Lambda). The inverse returns Sw = 1 when Pc is at or below Pe.
  • Thomeer fits Pd, G and BV inf per plug. Above Pd, Sb = BV inf × 10^[−G/log10(Pc/Pd)] and Sw = 1 − Sb/porosity. At or below Pd, Sw is 1. The table also reports the resulting Sw min.
  • Leverett-J transforms each point with J = 0.216606 × (Pc in psi / |sigma cos theta|) × sqrt(K/PHI) and fits one Je, Lambda and Swir set per zone group rather than per plug.

For Brooks-Corey and Leverett-J, choose the Swir source: Fitted per plug (the default), Lowest measured Sw of the plug, or Fixed value for a common supplied value. Leverett-J fits one set per group. The plug or group table can override the page's Swir choice for an individual row. Selecting the lowest measured Sw can exclude that point from a logarithmic fit because its effective saturation is zero. A fit needs at least three valid points. Points outside a required logarithmic domain are excluded and counted, and a plug whose usable saturations are all identical is reported as not fitted.

The results table names the fitted parameters and reports Fit domain, Points used, Points excluded, RMS, R2, Bias, Status and Notes.

Correlating coefficients

For Brooks-Corey and Thomeer, use the coefficient controls on Calibration to define how each coefficient varies within each zone group. The populated fit and group correlation are shown above.

  • Choose the Zone group and Coefficient, then select PHI (porosity, v/v), K (permeability, mD) or sqrt(K / PHI) as the predictor.
  • Choose Constant, Linear (A = a + b*X), Power (A = a * X^b), Exponential (A = a * exp(b*X)) or Logarithmic (A = a + b*ln X), then click Correlate again.
  • The table and scatter plot show the equation, R2 and excluded-point count. A group with fewer than three fitted plugs offers Constant only and is marked (< 3 pts). Domain exclusions for Power, Exponential and Logarithmic fits are counted rather than hidden.

With Leverett-J, coefficient correlations are not needed: J already contains permeability and porosity, and correlating its coefficients against those inputs again would apply the normalisation twice. After fitting, continue to Apply & validate.

Applying a model

On Apply & validate, choose the target well, input curves, free-water level and output names.

With a Zone set selected, the depth preview focuses on the interval spanning the zones chosen in Apply to zone, with a 10% margin above and below, limited to the available log interval. Without a usable selected-zone interval, it shows the available log interval. The first preview track has a full depth axis; the other tracks show their start and end depths. Samples outside the selected zones remain null in all three output curves, including below the FWL.

Manual and fluid-contact FWL values, labels, tooltips and readouts, together with the depth plots, use project depth units (m or ft). Changing project units while the wizard remains open updates these displays without changing the physical depth or calculation results. Saved HAFWL curves and the height used in the pressure formula below remain in metres.

The porosity scale is detected from the curve values and stored units. Fractions are used directly; percentages are divided by 100 before calibration-range checks, coefficient correlations and model application. The source curve is unchanged, so a second curve is unnecessary. Conclusive values override a conflicting unit label. Check the displayed interpretation and warnings when units are unknown, values are ambiguous, the label conflicts with the values, or the input is implausible.

  1. Choose the Target well and Porosity curve. Select a Permeability curve only when the model needs it; Constant correlations do not require one. The porosity curve supplies the MD sampling grid, and required permeability is interpolated onto it. Check the input units; Clip negative porosity to 0 is available for negative samples. A trajectory is required to calculate TVDSS.
  2. Select the matching Zone set when the model has several groups. With exactly one calibrated group, leaving Zone set empty applies that group to the whole well. Use Apply to zone to restrict calculation to the selected zone or zones; samples outside those zones are excluded and written as null.
  3. For FWL source, select Manual TVDSS and enter the level as positive downward in project depth units, or select Fluid contact. The default All fluid contacts (Data Manager) lists FWL contacts directly without choosing a zone. Alternatively, choose a Conceptual model and Zone to filter the contacts. Choose a constant-level FWL contact. A polygon-bounded level is accepted with a reminder to check that the target well is inside it; a map-valued FWL is refused. See Fluid contacts.
  4. Check the reservoir densities set on Core data and edit the three output names if needed. The defaults are HAFWL (m), PC_SHM (MPa) and SW_SHM (v/v).
  5. Click Apply model. Height is FWL TVDSS − sample TVDSS, and Pc (MPa) = 0.00980665 × (water density − hydrocarbon density) × height (m). At or below the FWL, Pc is 0 and Sw is 1.

A sample with no matching group, an uncalibrated group, unusable input or a coefficient outside its mathematical domain is written as null in all three outputs. No NaN or infinite value is written. Samples outside the calibration porosity, permeability or Pc range are still calculated and counted as out of range.

Results, saving and reuse

After Apply model, review the summary, Coverage of the last Apply and validation plots on Apply & validate. The example shows calculated saturation and populated coverage. It applies the single calibrated group to the whole well, with a manual FWL and no permeability curve. The four plot tabs are:

saturation_height_model_results.png

  • Pc vs Sw – raw core points, fitted plug curves and the final group model.
  • Coefficients – the selected coefficient correlation, where applicable.
  • Sw vs depth – calculated Sw, an existing Sw curve and core points.
  • Height above FWL – one final saturation-height relationship per calibrated group.

The summary reports included and excluded plugs, calibrated groups, mean fit statistics, calculated wells, computed and null samples, out-of-range samples, samples below the FWL and the output curve names.

Save model is disabled until at least one group is calibrated. Then enter a Model name under Model and curves on Apply & validate (or provide one when prompted) and click Save model. This stores the calibration under Statistics > Saturation height models without writing curves or closing the wizard. Saving the current stored model under the same name updates it; saving under a new name creates another model. If the name belongs to a different stored model, the wizard asks before replacing it. Confirming replacement redirects curves and workflow jobs linked to that model to the replacement.

To write curves, configure the target and inputs on Apply & validate and click Save curves. This recalculates and writes the output curves without saving the model or closing the wizard. If you save curves before the first Save model, those curves have no link to a stored model; save the model and save curves again to link new curves. Click Close when finished.

Right-click a stored model to Open, Rename or Delete it. You can also load it from the Core data page. Right-click a produced curve and choose Show saturation-height model settings to reopen the run configuration.

Saving to a workflow

Save to workflow requires a model already stored under Statistics. For a new calibration, click Save model and wait for confirmation that it was saved. Set reservoir densities on Core data and configure the target, FWL and curve names on Apply & validate. Refit if the calibration is marked out of date, then click Save to workflow without reopening the wizard. If the project has no workflow, confirm the Create workflow prompt; cancelling the prompt adds no job.

If calibration changes have not been saved, Save to workflow warns that the task will reopen and run with the previously saved calibration. To retain the changes, choose No, click Save model, then click Save to workflow again. Choosing Yes deliberately uses the saved calibration.

The task keeps the stored-model reference, target well, input curves, zone set and zone selection, FWL choice, densities, negative-porosity clipping option and output names. Reopening the task restores the saved model's calibration together with these task settings. It can replay without opening the wizard; replay uses the same porosity-scale conversion and reports warnings. Renaming the model preserves the reference, and recalibrating it under the same name updates what the task uses. If the model is deleted, replay reports which model is missing instead of silently skipping the task.

Save to workflow leaves the wizard open for further editing, validation and calculation. When the wizard was opened from a workflow task, saving updates that same task. Click Close to end the session.

Current scope

  • This is a standalone Core wizard; it is not a method inside Petrophysical Evaluation.
  • Models are grouped by zones, not by a categorical rock-type curve.
  • A separate Lambda model is not offered; use Brooks-Corey where that parameterisation is intended.
  • The wizard accepts a manual FWL or a constant-level FWL contact. It does not use a depth-map contact or solve the FWL from the calibration data.
  • Relative permeability, hysteresis, full SCAL simulation and simulator export are outside this workflow.

See Also