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 [ ]: