Source code for pygeopressure.pressure.multivariate

# -*- coding: utf-8 -*-
"""
Routines for multivariate pressure prediction

Created on Sep 20 2018
"""
from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

__author__ = "yuhao"

import numpy as np


[docs]def multivariate_virgin(sigma, phi, vsh, a_0, a_1, a_2, a_3, B): """ Calculate velocity using multivariate virgin curve Parameters ---------- sigma : 1-d ndarray effective pressure phi : 1-d ndarray effective porosity vsh : 1-d ndarray shale volume a_0, a_1, a_2, a_3 : float coefficients of equation B : float effective pressure exponential Returns ------- out : 1-d ndarray velocity array Notes ----- .. math:: V = a_0 + a_1\\phi + a_2{V}_{sh} + a_3 {\\sigma}^{B} [5]_ .. [5] Sayers, C., Smit, T., van Eden, C., Wervelman, R., Bachmann, B., Fitts, T., et al. (2003). Use of reflection tomography to predict pore pressure in overpressured reservoir sands. In submitted for presentation at the SEG 2003 annual meeting. """ return a_0 - a_1 * phi - a_2 * vsh + a_3 * sigma**B
[docs]def invert_multivariate_virgin(vel, phi, vsh, a_0, a_1, a_2, a_3, B): """ Calculate effective stress using multivariate virgin curve Parameters ---------- vel : 1-d ndarray velocity array whose unit is m/s. phi : 1-d ndarray porosity array vsh : 1-d ndarray shale volume a_0, a_1, a_2, a_3 : scalar coefficients Returns ------- sigma: 1-d ndarray """ return ((vel - a_0 + a_1 * phi + a_2 * vsh) / a_3)**(1 / B)
[docs]def multivariate_unloading(sigma, phi, vsh, a_0, a_1, a_2, a_3, B, U, vmax): """ Calculate velocity using multivariate unloading curve """ sigma_max = invert_multivariate_virgin( vmax, phi, vsh, a_0, a_1, a_2, a_3, B) sigma_vc = sigma_max*(sigma/sigma_max)**(1/U) return multivariate_virgin(sigma_vc, phi, vsh, a_0, a_1, a_2, a_3, B)
[docs]def invert_multivariate_unloading(vel, phi, vsh, a_0, a_1, a_2, a_3, B, U, vmax): """ Calculate effective stress using multivariate unloading curve """ sigma_max = invert_multivariate_virgin( vmax, phi, vsh, a_0, a_1, a_2, a_3, B) sigma_vc = invert_multivariate_virgin( vel, phi, vsh, a_0, a_1, a_2, a_3, B) return sigma_max * (sigma_vc/sigma_max)**U
[docs]def effective_stress_multivariate(vel, phi, vsh, a_0, a_1, a_2, a_3, B, U, vmax, start_idx, end_idx=None): ves = invert_multivariate_virgin(vel, phi, vsh, a_0, a_1, a_2, a_3, B) unloading = invert_multivariate_unloading( vel, phi, vsh, a_0, a_1, a_2, a_3, B, U, vmax) ves[start_idx: end_idx] = unloading[start_idx: end_idx] return ves
[docs]def pressure_multivariate(obp, vel, phi, vsh, a_0, a_1, a_2, a_3, B, U, vmax, start_idx, end_idx=None): """ Pressure Prediction using multivariate model """ ves = effective_stress_multivariate( vel, phi, vsh, a_0, a_1, a_2, a_3, B, U, vmax, start_idx, end_idx) return obp - ves
[docs]def pressure_multivariate_varu(obp, vel, phi, vsh, a_0, a_1, a_2, a_3, B, U, vmax, start_idx, buf=20, end_idx=None, end_buffer=10): """ Pressure Prediction using multivariate model """ ves = effective_stress_multivariate_varu( vel, phi, vsh, a_0, a_1, a_2, a_3, B, U, vmax, start_idx, buf, end_idx, end_buffer) return obp - ves
[docs]def effective_stress_multivariate_varu(vel, phi, vsh, a_0, a_1, a_2, a_3, B, U, vmax, start_idx, buf=20, end_idx=None, end_buffer=10): u_array = np.ones(vel.shape) u_array[start_idx: end_idx] = U # start buffer u_buffer = np.linspace(1, U, buf) u_array[start_idx-buf+1: start_idx + 1] = u_buffer # end buffer if end_idx is not None: u_array[end_idx: end_idx + end_buffer] = np.linspace(U, 1, end_buffer) ves = invert_multivariate_unloading(vel, phi, vsh, a_0, a_1, a_2, a_3, B, u_array, vmax) return ves