In [1]:
%matplotlib inline

In [2]:
import os, csv
import pandas as pd

In [3]:
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 [4]:
sub_dir = 'contained/4'
filename = 'contained-FIP.txt'
deviated_og_4 = Dataset(filename, sub_dir)

sub_dir = 'contained/6'
filename = 'contained-FIP.txt'
deviated_og_6 = Dataset(filename, sub_dir)

sub_dir = 'contained/8'
filename = 'contained-FIP.txt'
deviated_og_8 = Dataset(filename, sub_dir)

sub_dir = 'contained/10'
filename = 'contained-FIP.txt'
deviated_og_10 = Dataset(filename, sub_dir)

sub_dir = 'contained/11_5'
filename = 'contained-FIP.txt'
deviated_og_11_5 = Dataset(filename, sub_dir)

In [5]:
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np

In [28]:
fig, ax = plt.subplots(figsize=(8,8))

ax.set_title(r'$Cummulative \ production \ vs. \ pore \ volumes \ injected \ N_{p} \ vs. PV \ $', fontsize=16)

ax.set_xlabel(r'$Pore \ volume \ injected \ PV \ [-]$', fontsize=16)
ax.set_ylabel(r'$Cummulative \ oil \ production \ N_{p} \ m^3$', fontsize=16)

ax.plot(deviated_og_4.pore_volumes_injected.values, deviated_og_4.cummulative_oil_production.values, 
        color="black", linestyle=":", label='$ N_{p} \ Rate: \ 4 \ \\frac{m^3}{sm}$', linewidth=3)

ax.plot(deviated_og_6.pore_volumes_injected.values, deviated_og_6.cummulative_oil_production.values, 
        color="black", linestyle="--", label='$ N_{p} \ Rate: \ 6 \ \\frac{m^3}{sm}$', linewidth=3)

ax.plot(deviated_og_8.pore_volumes_injected.values, deviated_og_8.cummulative_oil_production.values, 
        color="black", linestyle="-.", label='$ N_{p} \ Rate: \ 8 \ \\frac{m^3}{sm}$', linewidth=3)

ax.plot(deviated_og_10.pore_volumes_injected.values, deviated_og_10.cummulative_oil_production.values, 
        color="black", linestyle="-", label='$ N_{p} \ Rate: \ 10 \ \\frac{m^3}{sm}$', linewidth=3)

ax.plot(deviated_og_11_5.pore_volumes_injected.values, deviated_og_11_5.cummulative_oil_production.values, 
        color="black", linestyle="-", label='$ N_{p} \ Rate: \ 11.5 \ \\frac{m^3}{sm}$', linewidth=3)

ax.annotate('$Contained$', xy=(0.01, 2.4e3), fontsize=14)

plt.grid()
plt.legend(fontsize=12, loc=4)
plt.savefig('Np_vs_PV_contained_11_5.png', dpi=300)
plt.show()



In [27]:
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=1.0e6,right=2.0e8)

ax2 = ax1.twinx()
ax2.set_xlim(left=1.0e6,right=2.0e8)
ax.set_title(r'$Cummulative \ production \ vs. \ pore \ volumes \ injected \ N_{p} \ vs. PV \ $', fontsize=16)

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.loglog(deviated_og_4.time.values, deviated_og_4.oil_production_rate.values, 
        color="black", linestyle=":", label='$ N_{p}/q_{o} \ Rate: \ 4 \ \\frac{m^3}{sm}$', linewidth=3)

ax1.loglog(deviated_og_6.time.values, deviated_og_6.oil_production_rate.values, 
        color="black", linestyle="--", label='$ N_{p}/q_{o} \ Rate: \ 6 \ \\frac{m^3}{sm}$', linewidth=3)

ax1.loglog(deviated_og_8.time.values, deviated_og_8.oil_production_rate.values, 
        color="black", linestyle="-.", label='$ N_{p}/q_{o} \ Rate: \ 8 \ \\frac{m^3}{sm}$', linewidth=3)

ax1.loglog(deviated_og_10.time.values, deviated_og_10.oil_production_rate.values, 
        color="grey", linestyle="-", label='$ N_{p}/q_{o} \ Rate: \ 10 \ \\frac{m^3}{sm}$', linewidth=3)

ax1.loglog(deviated_og_11_5.time.values, deviated_og_11_5.oil_production_rate.values, 
        color="black", linestyle="-", label='$ N_{p}/q_{o} \ Rate: \ 11.5 \ \\frac{m^3}{sm}$', linewidth=3)


ax1.set_ylim(bottom=2e-6, top = 2e-5)

ax2.loglog(deviated_og_4.time.values, deviated_og_4.cummulative_oil_production.values, 
        color="black", linestyle=":", linewidth=3)

ax2.loglog(deviated_og_6.time.values, deviated_og_6.cummulative_oil_production.values, 
        color="black", linestyle="--", linewidth=3)

ax2.loglog(deviated_og_8.time.values, deviated_og_8.cummulative_oil_production.values, 
        color="black", linestyle="-.", linewidth=3)

ax2.loglog(deviated_og_10.time.values, deviated_og_10.cummulative_oil_production.values, 
        color="grey", linestyle="-", linewidth=3)

ax2.loglog(deviated_og_11_5.time.values, deviated_og_11_5.cummulative_oil_production.values, 
        color="black", linestyle="-", linewidth=3)
ax2.set_ylim(bottom=1e0, top = 2e3)


ax1.axvline(x=3.6e7, linewidth=1, color='grey', linestyle='dashed')
ax1.axvline(x=4.3e7, linewidth=1, color='grey', linestyle='dashed')
ax1.axvline(x=5.4e7, linewidth=1, color='grey', linestyle='dashed')
ax1.axvline(x=7.4e7, linewidth=1, color='grey', linestyle='dashed')
ax1.axvline(x=1.1e8, linewidth=1, color='grey', linestyle='dashed')

ax2.axhline(y=5e2, linewidth=1, color='grey', linestyle='dashed')

ax2.annotate('$N_{p} \ at \ gas \ breakthrough: \ 500 \ m^3$', xy=(3e6, 6e2), fontsize=14)
ax2.annotate('$Contained \ Vertical \ Injector$', xy=(1e6, 1.5e3), fontsize=14)

h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
legend = ax1.legend(h1+h2, l1+l2, fontsize=10, loc=3)
frame = legend.get_frame()
frame.set_facecolor('white')

plt.savefig('Historical_contained_all_rates_zoom.png', dpi=300)
plt.show()



In [129]:


In [129]:


In [129]:


In [129]:


In [129]:


In [ ]: