In [2]:
%matplotlib inline
In [3]:
import os, csv
import pandas as pd
sub_dir = 'deviated_og/11_5'
filename = 'deviated_og-FIP.txt'
In [4]:
class Dataset(object):
def __init__(self, filename, subdir):
cur_dir = os.getcwd()
target_dir = os.path.join(cur_dir, sub_dir)
with open(os.path.join(target_dir, filename), "r") as f:
df = pd.read_csv(f, delimiter="\t")
self.time = df['Time (s)']
coarse_sandstone_1_oip = df['COARSE-SANDSTONE-1\'s OIP (m3)']
coarse_sandstone_1_wip = df['COARSE-SANDSTONE-1\'s WIP (m3)']
faults_oip = df['FAULT\'s OIP (m3)']
faults_wip = df['FAULT\'s WIP (m3)']
fine_sandstone_1_oip = df['FINE-SANDSTONE-1\'s OIP (m3)']
fine_sandstone_1_wip = df['FINE-SANDSTONE-1\'s WIP (m3)']
grainstone_1_oip = df['GRAINSTONE-1\'s OIP (m3)']
grainstone_1_wip = df['GRAINSTONE-1\'s WIP (m3)']
grainstone_2_oip = df['GRAINSTONE-2\'s OIP (m3)']
grainstone_2_wip = df['GRAINSTONE-2\'s WIP (m3)']
grainstone_3_oip = df['GRAINSTONE-3\'s OIP (m3)']
grainstone_3_wip = df['GRAINSTONE-3\'s WIP (m3)']
grainstone_4_oip = df['GRAINSTONE-4\'s OIP (m3)']
grainstone_4_wip = df['GRAINSTONE-4\'s WIP (m3)']
grainstone_5_oip = df['GRAINSTONE-5\'s OIP (m3)']
grainstone_5_wip = df['GRAINSTONE-5\'s WIP (m3)']
grainstone_6_oip = df['GRAINSTONE-6\'s OIP (m3)']
grainstone_6_wip = df['GRAINSTONE-6\'s WIP (m3)']
grainstone_7_oip = df['GRAINSTONE-7\'s OIP (m3)']
grainstone_7_wip = df['GRAINSTONE-7\'s WIP (m3)']
grainstone_8_oip = df['GRAINSTONE-8\'s OIP (m3)']
grainstone_8_wip = df['GRAINSTONE-8\'s WIP (m3)']
grainstone_9_oip = df['GRAINSTONE-9\'s OIP (m3)']
grainstone_9_wip = df['GRAINSTONE-9\'s WIP (m3)']
marl_1_oip = df['MARL-1\'s OIP (m3)']
marl_1_wip = df['MARL-1\'s WIP (m3)']
marl_2_oip = df['MARL-2\'s OIP (m3)']
marl_2_wip = df['MARL-2\'s WIP (m3)']
marl_3_oip = df['MARL-3\'s OIP (m3)']
marl_3_wip = df['MARL-3\'s WIP (m3)']
marl_4_oip = df['MARL-4\'s OIP (m3)']
marl_4_wip = df['MARL-4\'s WIP (m3)']
marl_5_oip = df['MARL-5\'s OIP (m3)']
marl_5_wip = df['MARL-5\'s WIP (m3)']
marl_6_oip = df['MARL-6\'s OIP (m3)']
marl_6_wip = df['MARL-6\'s WIP (m3)']
marl_7_oip = df['MARL-7\'s OIP (m3)']
marl_7_wip = df['MARL-7\'s WIP (m3)']
marl_8_oip = df['MARL-8\'s OIP (m3)']
marl_8_wip = df['MARL-8\'s WIP (m3)']
medium_sandstone_1_oip = df['MEDIUM-SANDSTONE-1\'s OIP (m3)']
medium_sandstone_1_wip = df['MEDIUM-SANDSTONE-1\'s WIP (m3)']
medium_sandstone_2_oip = df['MEDIUM-SANDSTONE-2\'s OIP (m3)']
medium_sandstone_2_wip = df['MEDIUM-SANDSTONE-2\'s WIP (m3)']
medium_sandstone_3_oip = df['MEDIUM-SANDSTONE-3\'s OIP (m3)']
medium_sandstone_3_wip = df['MEDIUM-SANDSTONE-3\'s WIP (m3)']
mudstone_1_oip = df['MUDSTONE-1\'s OIP (m3)']
mudstone_1_wip = df['MUDSTONE-1\'s WIP (m3)']
mudstone_2_oip = df['MUDSTONE-2\'s OIP (m3)']
mudstone_2_wip = df['MUDSTONE-2\'s WIP (m3)']
mudstone_3_oip = df['MUDSTONE-3\'s OIP (m3)']
mudstone_3_wip = df['MUDSTONE-3\'s WIP (m3)']
mudstone_4_oip = df['MUDSTONE-4\'s OIP (m3)']
mudstone_4_wip = df['MUDSTONE-4\'s WIP (m3)']
mudstone_5_oip = df['MUDSTONE-5\'s OIP (m3)']
mudstone_5_wip = df['MUDSTONE-5\'s WIP (m3)']
models_oip = df['Model\'s OIP (m3)']
models_wip = df['Model\'s WIP (m3)']
packstone_1_oip = df['PACKSTONE-1\'s OIP (m3)']
packstone_1_wip = df['PACKSTONE-1\'s WIP (m3)']
top_seal_oip = df['TOP-SEAL\'s OIP (m3)']
top_seal_wip = df['TOP-SEAL\'s WIP (m3)']
unknown_1_oip = df['UNKNOWN-1\'s OIP (m3)']
unknown_1_wip = df['UNKNOWN-1\'s WIP (m3)']
unknown_2_oip = df['UNKNOWN-2\'s OIP (m3)']
unknown_2_wip = df['UNKNOWN-2\'s WIP (m3)']
unknown_3_oip = df['UNKNOWN-3\'s OIP (m3)']
unknown_3_wip = df['UNKNOWN-3\'s WIP (m3)']
wackstone_1_oip = df['WACKSTONE-1\'s OIP (m3)']
wackstone_1_wip = df['WACKSTONE-1\'s WIP (m3)']
well_1_oip = df['WELL-1\'s OIP (m3)']
well_1_wip = df['WELL-1\'s WIP (m3)']
well_2_oip = df['WELL-2\'s OIP (m3)']
well_2_wip = df['WELL-2\'s WIP (m3)']
mudstones_gip = sum([mudstone_1_oip, mudstone_2_oip, mudstone_3_oip, mudstone_4_oip, mudstone_5_oip])
mudstones_oip = sum([mudstone_1_wip, mudstone_2_wip, mudstone_3_wip, mudstone_4_wip, mudstone_5_wip])
sandstones_gip = sum([medium_sandstone_1_oip, medium_sandstone_2_oip, medium_sandstone_3_oip,
fine_sandstone_1_oip, coarse_sandstone_1_oip])
sandstones_oip = sum([medium_sandstone_1_wip, medium_sandstone_2_wip, medium_sandstone_3_wip,
fine_sandstone_1_wip, coarse_sandstone_1_wip])
unknown_gip = sum([unknown_1_oip, unknown_2_oip, unknown_3_oip])
unknown_oip = sum([unknown_1_wip, unknown_2_wip, unknown_3_wip])
grainstones_gip = sum([grainstone_1_oip, grainstone_2_oip, grainstone_3_oip, grainstone_4_oip, grainstone_5_oip, grainstone_6_oip,
grainstone_7_oip, grainstone_8_oip, grainstone_9_oip])
grainstones_oip = sum([grainstone_1_wip, grainstone_2_wip, grainstone_3_wip, grainstone_4_wip, grainstone_5_wip, grainstone_6_wip,
grainstone_7_wip, grainstone_8_wip, grainstone_9_wip])
marls_gip = sum([marl_1_oip, marl_2_oip, marl_3_oip, marl_4_oip, marl_5_oip, marl_6_oip, marl_7_oip, marl_8_oip])
marls_oip = sum([marl_1_wip, marl_2_wip, marl_3_wip, marl_4_wip, marl_5_wip, marl_6_wip, marl_7_wip, marl_8_wip])
packstones_gip = sum([packstone_1_oip])
packstones_oip = sum([packstone_1_wip])
wackstones_gip = sum([wackstone_1_oip])
wackstones_oip = sum([wackstone_1_wip])
active_model_gip_check = models_oip-top_seal_oip-faults_oip-well_1_oip-well_2_oip
active_model_oip_check = models_wip-top_seal_wip-faults_wip-well_1_wip-well_2_wip
active_model_gip = mudstones_gip+sandstones_gip+unknown_gip+grainstones_gip+marls_gip+packstones_gip+wackstones_gip
active_model_oip = mudstones_oip+sandstones_oip+unknown_oip+grainstones_oip+marls_oip+packstones_oip+wackstones_oip
df['active_model_gip'] = active_model_gip
df['active_model_oip'] = active_model_oip
ts = df.set_index('Time (s)').diff()
dt = df.diff()['Time (s)']
oil_volume_change = -1*ts['active_model_oip']
self.oil_production_rate = oil_volume_change/dt.values
ts['oil_production_rate'] = self.oil_production_rate
gas_volume_change = ts['active_model_gip']
self.gas_injection_rate = gas_volume_change/dt.values
ts['gas_injection_rate'] = self.gas_injection_rate
self.cummulative_oil_production = oil_volume_change.cumsum()
ts['cummulative_oil_production'] = self.cummulative_oil_production
self.cummulative_gas_injection = gas_volume_change.cumsum()
self.active_pore_volume = (active_model_gip+active_model_oip)
self.pore_volumes_injected = self.cummulative_gas_injection/self.active_pore_volume.values
self.recovery_factor = (self.cummulative_oil_production/self.active_pore_volume.values)
self.reciprocal_oil_rate = 1.0/self.oil_production_rate
self.cummulative_oil_over_oil_rate = self.cummulative_oil_production/self.oil_production_rate.values
In [5]:
sub_dir = 'deviated_og/11_5'
filename = 'deviated_og-FIP.txt'
deviated_og_11_5 = Dataset(filename, sub_dir)
sub_dir = 'contained/11_5'
filename = 'contained-FIP.txt'
contained_11_5 = Dataset(filename, sub_dir)
In [6]:
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
In [55]:
fig, ax = plt.subplots(figsize=(10,8))
ax.set_title(r'$Auxilary \ Diagnostic \ Plot \ Log(\frac{1}{q_{o}}) \ vs. \ Log(\frac{N_{p}}{q_{o}})$', fontsize=16)
ax.set_ylabel(r'$Log(\frac{1}{Oil \ Production \ Rate \ q}) Log(\frac{1}{q_{o}}) \ \frac{s}{m^3}$', fontsize=16)
ax.set_xlabel(r'$Log(\frac{Cummulative \ Oil \ Production}{Oil \ Production \ Rate \ q}) Log(\frac{N_{p}}{q_{o}}) \ [seconds]$', fontsize=16)
ax.loglog(deviated_og_11_5.cummulative_oil_over_oil_rate.values, deviated_og_11_5.reciprocal_oil_rate.values,
color="red", marker="s", label='$Deviated \ OG \ 11.5 \ Log(\\frac{1}{q_{o}})$', markersize=2)
ax.loglog(contained_11_5.cummulative_oil_over_oil_rate.values, contained_11_5.reciprocal_oil_rate.values,
color="blue", marker="s", label='$Contained \ 11.5 \ Log(\\frac{1}{q_{o}})$', markersize=2)
plt.grid()
plt.legend(fontsize=16, loc=4)
plt.savefig('auxilary_comaprison_contained_deviated_og_11_5.png', dpi=300)
plt.show()
In [56]:
fig, ax = plt.subplots(figsize=(8,8))
ax.set_xlim(left=0.0,right=3.5e9)
ax.set_ylim(bottom=1e-9, top=1e-4)
ax.set_title(r'$Logarithm \ of \ production \ rate \ versus \ time \ log(q_{o}) \ vs. \ t$', fontsize=16)
ax.set_xlabel(r'$Time \ t \ [seconds]$', fontsize=16)
ax.set_ylabel(r'$Logarithm \ of \ oil \ production \ rate \ log(q_{o}) \ \frac{m^3}{s}$', fontsize=16)
ax.semilogy()
ax.plot(deviated_og_11_5.time.values, deviated_og_11_5.oil_production_rate.values,
color="red", marker="x", label='$Deviated \ OG \ 11.5 \ Log(q_{o})$', markersize=1)
ax.plot(contained_11_5.time.values, contained_11_5.oil_production_rate.values,
color="blue", marker="x", label='$Contained \ 11.5 \ Log(q_{o})$', markersize=1)
plt.grid()
plt.legend(fontsize=16)
plt.savefig('log_oil_comparison_contained_deviated_og_11_5.png', dpi=300)
plt.show()
In [57]:
x_left = 1.e6
x_right = 1.e10
fig, ax1 = plt.subplots(figsize=(8,8))
#ax.set_ylim(bottom=2500, top=6500)
ax1.set_title(r'$Historical \ production \ data \ plot \ log(q_{o}) \ and \ log(N_{p}) \ versus \ log(t)$', fontsize=16)
ax1.set_xlim(left=x_left,right=x_right)
ax2 = ax1.twinx()
ax2.set_xlim(left=x_left,right=x_right)
ax2.set_ylim(bottom=1e1, top=1.e6)
ax1.loglog(deviated_og_11_5.time.values, deviated_og_11_5.oil_production_rate.values,
color="red", marker="x", label='$Deviated \ OG \ 11.5 \ Log(q_{o})$', markersize=2)
ax1.loglog(contained_11_5.time.values, contained_11_5.oil_production_rate.values,
color="blue", marker="x", label='$Contained \ 11.5 \ Log(q_{o})$', markersize=2)
ax2.loglog(deviated_og_11_5.time.values, deviated_og_11_5.cummulative_oil_production.values,
color="red", marker="s", label='$Deviated \ OG \ 11.5 \ Log(N_{p})$', markersize=1)
ax2.loglog(contained_11_5.time.values, contained_11_5.cummulative_oil_production.values,
color="blue", marker="s", label='$Contained \ 11.5 \ Log(N_{p})$', markersize=1)
ax1.set_xlabel(r'$Logarithm \ of \ time \ log(t) \ [seconds]$', fontsize=16)
ax1.set_ylabel(r'$Logarithm \ of \ oil \ production \ rate \ log(q_{o}) \ \frac{m^3}{s}$', fontsize=16)
ax2.set_ylabel(r'$Logarithm \ of \ cummulative \ oil \ production \ log(N_{p}) \ m^3$', fontsize=16)
ax1.grid()
h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
legend = ax1.legend(h1+h2, l1+l2, fontsize=12)
frame = legend.get_frame()
frame.set_facecolor('white')
plt.savefig('historical_comparison_contained_deviated_og_11_5.png', dpi=300)
plt.show()
In [58]:
x_left = 3.e7
x_right = 4.e8
fig, ax1 = plt.subplots(figsize=(8,8))
#ax.set_ylim(bottom=2500, top=6500)
ax1.set_title(r'$Historical \ production \ data \ plot \ log(q_{o}) \ and \ log(N_{p}) \ versus \ log(t)$', fontsize=16)
ax1.set_xlim(left=x_left,right=x_right)
ax1.set_ylim(bottom=1.e-6, top=4.e-5)
ax2 = ax1.twinx()
ax2.set_xlim(left=x_left,right=x_right)
ax2.set_ylim(bottom=1.e2, top=4.e3)
ax1.loglog(deviated_og_11_5.time.values, deviated_og_11_5.oil_production_rate.values,
color="red", marker="x", label='$Deviated \ OG \ 11.5 \ Log(q_{o})$', markersize=2)
ax1.loglog(contained_11_5.time.values, contained_11_5.oil_production_rate.values,
color="blue", marker="x", label='$Contained \ 11.5 \ Log(q_{o})$', markersize=2)
ax2.loglog(deviated_og_11_5.time.values, deviated_og_11_5.cummulative_oil_production.values,
color="red", marker="s", label='$Deviated \ OG \ 11.5 \ Log(N_{p})$', markersize=2)
ax2.loglog(contained_11_5.time.values, contained_11_5.cummulative_oil_production.values,
color="blue", marker="s", label='$Contained \ 11.5 \ Log(N_{p})$', markersize=2)
ax1.set_xlabel(r'$Logarithm \ of \ time \ log(t) \ [seconds]$', fontsize=16)
ax1.set_ylabel(r'$Logarithm \ of \ oil \ production \ rate \ log(q_{o}) \ \frac{m^3}{s}$', fontsize=16)
ax2.set_ylabel(r'$Logarithm \ of \ cummulative \ oil \ production \ log(N_{p}) \ m^3$', fontsize=16)
h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1+h2, l1+l2, fontsize=11)
ax1.grid(True, which='major')
ax1.grid(True, which='minor')
plt.grid(b=True, which='major', color='black', linestyle='-')
plt.grid(b=True, which='minor', color='grey', linestyle='--')
plt.savefig('historical_comparison_contained_deviated_og_11_5_zoom.png', dpi=300)
plt.show()
In [ ]:
In [30]:
In [ ]: