| """ | |
| Rock Physics Template (RPT) | |
| =========================== | |
| """ | |
| # %% | |
| import pandas as pd | |
| import numpy as np | |
| import matplotlib.pyplot as plt | |
| plt.rcParams['font.size']=14 | |
| plt.rcParams['font.family']='arial' | |
| # %% | |
| #import rockphypy # import the module | |
| from rockphypy import QI, GM, Fluid | |
| # %% | |
| # Rock physics models can be used to calculate elastic properties with various combination of lithology and fluid parameters. Rock Physics Templates (RPTs) were first presented by Ødegaard and Avseth (2003). Rock physics templates (RPT) is used to display a reference framework of all the possible variations of a particular rock and use such templates to understand actual well log data (or seismic-derived elastic properties). | |
| # | |
| # %% | |
| # specify model parameters | |
| D0, K0, G0 = 2.65, 36.6, 45 | |
| Dc, Kc, Gc = 2.65,37, 45 # cement | |
| Db, Kb = 1, 2.5 | |
| Do, Ko = 0.8, 1.5 | |
| Dg, Kg = 0.2, 0.05 | |
| ### adjustable para | |
| phi_c = 0.4 | |
| Cn=8.6 ## calculate coordination number | |
| phi = np.linspace(0.1,phi_c,10) #define porosity range according to critical porosity | |
| sw=np.linspace(0,1,5) # water saturation | |
| sigma=20 | |
| f=0.5 | |
| # %% | |
| # - Case 1: create RPT for unconsolidated sand using softsand/friable sand model | |
| # | |
| # %% | |
| # softsand model gas | |
| Kdry1, Gdry1 = GM.softsand(K0, G0, phi, phi_c, Cn, sigma,f) # soft sand | |
| fig1=QI.plot_rpt(Kdry1,Gdry1,K0,D0,Kb,Db,Kg,Dg,phi,sw) | |
| plt.title('Softsand RPT-gas') | |
| plt.xlim(1000,10000) | |
| plt.ylim(1.4,2.4) | |
| # %% | |
| # softsand model oil | |
| fig1_=QI.plot_rpt(Kdry1,Gdry1,K0,D0,Kb,Db,Ko,Do,phi,sw) | |
| plt.title('Softsand RPT-oil') | |
| plt.xlim(1000,10000) | |
| plt.ylim(1.4,2.4) | |
| # %% | |
| # - Case 2: create RPT for stiff sandstone using stiffsand model | |
| # | |
| # %% | |
| Kdry2, Gdry2 = GM.stiffsand(K0, G0, phi, phi_c, Cn, sigma, f) # stiff sand | |
| fig2=QI.plot_rpt(Kdry2,Gdry2,K0,D0,Kb,Db,Kg,Dg,phi,sw) | |
| plt.title('Stiffsand RPT-gas') | |
| plt.xlim(1000,14000) | |
| plt.ylim(1.4,2.3) | |
| # %% | |
| # stiffsand model oil | |
| fig2_=QI.plot_rpt(Kdry2,Gdry2,K0,D0,Kb,Db,Ko,Do,phi,sw) | |
| plt.title('Stiffsand RPT-oil') | |
| plt.xlim(1000,14000) | |
| plt.ylim(1.4,2.3) | |
| # %% | |
| # Applied to field data | |
| # ^^^^^^^^^^^^^^^^^^^^^ | |
| # Let's import the same synthetic well log data and apply the rock physics screening to the well log data | |
| # | |
| # %% | |
| # read data | |
| data = pd.read_csv('sandstone.csv',index_col=0) | |
| # specify model parameters | |
| D0, K0, G0 = 2.65, 37, 38 | |
| Dg, Kg = 0.2, 0.05 | |
| ### adjustable para | |
| phi_c = 0.36 | |
| phi = np.linspace(0.01,phi_c,10) #define porosity range according to critical porosity | |
| sw=np.linspace(0,1,5) # water saturation | |
| IP= data.VP*data.DEN | |
| PS= data.VP/data.VS | |
| Kdry, Gdry = GM.stiffsand(K0, G0, phi, phi_c, Cn, sigma, f=0) # stiff sand | |
| # sphinx figure | |
| # sphinx_gallery_thumbnail_number = 5 | |
| fig=QI.plot_rpt(Kdry,Gdry,K0,D0,Kb,Db,Kg,Dg,phi,sw) | |
| fig.set_size_inches(7, 6) | |
| plt.scatter(IP,PS, c=data.eff_stress,edgecolors='grey',s=80,alpha=1,cmap='Greens_r') | |
| cbar=plt.colorbar() | |
| cbar.set_label(r'$\rm \sigma_{eff}$ (MPa)') | |
| plt.xlabel('IP') | |
| plt.xlim(1000,14000) | |
| plt.ylim(1.4,2.4) | |
| #fig.savefig(path+'./rpt.png',dpi=600,bbox_inches='tight') | |
| # %% | |
| # **Reference**: | |
| # | |
| # - Mavko, G., Mukerji, T. and Dvorkin, J., 2020. The rock physics handbook. Cambridge university press. | |
| # | |
| # - Avseth, P.A. and Odegaard, E., 2003. Well log and seismic data analysis using rock physics templates. First break, 22(10). | |
| # | |
| # - Avseth, P., Mukerji, T. and Mavko, G., 2010. Quantitative seismic interpretation: Applying rock physics tools to reduce interpretation risk. Cambridge university press. | |
| # | |