Source code for pygeopressure.pressure.bowers_seis

# -*- coding: utf-8 -*-
"""
Routines for Bowers' pore pressure prediction with seismic velocity
"""
from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

__author__ = "yuhao"

import numpy as np

from pygeopressure.basic.indexes import InlineIndex, CdpIndex
from pygeopressure.basic.optimizer import optimize_bowers_trace
from pygeopressure.pressure.bowers import invert_virgin
from pygeopressure.pressure.hydrostatic import hydrostatic_trace
from pygeopressure.pressure.utils import create_seis, create_seis_info


[docs]def bowers_seis(output_name, obp_cube, vel_cube, a=None, b=None, upper=None, lower=None, mode='simple'): # create seismic object bowers_cube = create_seis(output_name, vel_cube) # create info file create_seis_info(bowers_cube, output_name) # calculation if mode == 'optimize': # with optimization bowers_optimize(bowers_cube, obp_cube, vel_cube, upper, lower) else: # simple bowers_simple(bowers_cube, obp_cube, vel_cube, a, b) return bowers_cube
[docs]def bowers_simple(bowers_cube, obp_cube, vel_cube, a=None, b=None): """ Bowers prediction with fixed a, b """ for inl in vel_cube.inlines(): obp_data_inline = obp_cube.data(InlineIndex(inl)) vel_data_inline = vel_cube.data(InlineIndex(inl)) bowers_inline = obp_data_inline - \ invert_virgin(vel_data_inline, a, b) bowers_cube.update(InlineIndex(inl), bowers_inline)
[docs]def bowers_optimize(bowers_cube, obp_cube, vel_cube, upper_hor, lower_hor): """ Bowers prediction with automatic coefficient optimization """ depth_tr = np.array(list(vel_cube.depths())) hydro_tr = hydrostatic_trace(depth_tr) for inl in vel_cube.inlines(): bowers_data_inline = np.zeros((vel_cube.nNorth, vel_cube.nDepth)) for i, crl in enumerate(vel_cube.crlines()): vel_tr = vel_cube.data(CdpIndex((inl, crl))) obp_tr = obp_cube.data(CdpIndex((inl, crl))) depth_upper = upper_hor.get_cdp((inl, crl)) if lower_hor == "bottom": depth_lower = depth_tr[-1] else: depth_lower = lower_hor.get_cdp((inl, crl)) try: a, b = optimize_bowers_trace( depth_tr, vel_tr, obp_tr, hydro_tr, depth_upper, depth_lower) except: raise Exception("cdp{},{}".format(inl, crl)) bowers_data_inline[i] = invert_virgin(vel_tr, a, b) bowers_cube.update(InlineIndex(inl), bowers_data_inline)