AP
AP
• Reservoir boundaries
• Fracture types
• Fault systems
Phase transitions
Import pandas as pd
Import numpy as np
Import matplotlib.pyplot as plt
Def load_pressure_data(filepath):
Df = pd.read_csv(filepath)
If {‘Time’, ‘Pressure’}.issubset(df.columns):
Else:
Dp = np.gradient(pressure, time)
Tdp = time * dp
Return tdp
Features = []
Features.append(‘U-Fault’)
Features.append(‘Partial/Fault’)
Return features
Features = []
If len(peaks) > 1:
Features.append(‘Dual Porosity’)
Slopes = np.diff(np.log(derivative))/np.diff(np.log(time))
Features.append(‘Radial Composite’)
Features.append(‘Constant Pressure’)
Return features
Def analyze_reservoir_signatures(time, pressure, derivative):
Features = {
‘Phase Markers’: []
# Phase detection
Log_deriv = np.log(derivative)
Dlog_deriv = np.diff(log_deriv)/np.diff(np.log(time))
Return features
Def plot_analysis(time, pressure, derivative, features):
Plt.figure(figsize=(12, 8))
# Main plot
Annotation_y = max(derivative)*0.8
If items:
Bbox=dict(facecolor=’white’, alpha=0.8))
Slope_markers = {
X_ref = 0.1
Dx = np.logspace(-1, 1, 10)
Dy = y_ref * (dx/x_ref)**slope
Plt.legend()
Plt.tight_layout()
Plt.show()
Def main():
Print(f”\n{category}:”)
For item in items:
Print(f” - {item}”)
If __name__ == “__main__”:
Main()