def test_all_scalars(): g = gassmann(2, 1, 1, 1) assert g == 1.3333333333333333 #def test_k0_vector(): # g = gassmann(np.array([1, 2, 3]), 1, 1, 1) # assert np.all(g == np.array([4, 5, 6]))
def saturation_fluids(K0, K_dry, K_fluid, porosity, G_dry, rho_fluid, rho_0): """ Add info here """ K = gm.gassmann(K0, K_dry, K_fluid, porosity) G = G_dry M = K + 4 / 3 * G RHO = porosity * rho_fluid + (1 - porosity) * rho_0 VP = np.sqrt(np.divide(M, RHO)) VS = np.sqrt(np.divide(G, RHO)) AI = VP * RHO VPVS = np.divide(VP, VS) return AI, VPVS
GR = ( C/G_c + (1-C)/G_q )**-1 # Reuss GV = C*G_c + (1-C)*G_q # Voigt G0 = 0.5*(GR+GV) # Hill rho_0 = C*rho_c + (1-C)*rho_q # Mineral density Rho = por*rho_f + (1-por)*rho_0 # Saturated rock density Vp_log = 3040 Vs_log = 1670 G = Rho * Vs_log**2 # Gas saturated shear modulus K = Rho * Vp_log**2 - 4/3*G # Gas saturated bulk from the given modulus K_dry = gm.gassmanninv(K0, K ,K_f, por) G_dry = G print("K_dry = ",K_dry/1e9,"GPa") print("G_dry = ", G_dry/1e9, "GPa") Sw = 0.2 # Water saturation rho_f = Sw*rho_b + (1-Sw)*rho_o # Oil-brine fluid density K_f = ( Sw/K_b + (1-Sw)/K_o )**(-1) # Oil-brine bulk modulus Rho_OilSat = por*rho_f + (1-por)*rho_0 # Bulk density K_OilSat = gm.gassmann(K0,K_dry,K_f,por)# Saturated bulk modulus G_OilSat = G_dry # Saturated shear modulus M_OilSat = K_OilSat + 4/3*G_OilSat # Saturated compressional modulus Vs_OilSat = math.sqrt( G_OilSat / Rho_OilSat ) # Vs Vp_OilSat = math.sqrt( M_OilSat / Rho_OilSat ) # Vp AI_OilSat = Rho_OilSat*Vp_OilSat # Acoustic impedance print(tabulate ([["Original gas", Rho , Vp_log, Vs_log, Rho*Vp_log, Vp_log/Vs_log ], ["Subst. Oil", Rho_OilSat, Vp_OilSat, Vs_OilSat, AI_OilSat,Vp_OilSat/Vs_OilSat]], headers=["Case","Rho", "Vp", "Vs", "AI", "Vp/Vs"], tablefmt='orgtbl'))
G = Rho * Vs_log**2 # Gas saturated shear modulus K = Rho * Vp_log**2 - 4 / 3 * G # Gas saturated bulk from the given modulus K_dry = gm.gassmanninv(K0, K, K_f, por) G_dry = G """ Problem 5, same reservoir as last problem """ SW = np.linspace(0, 1, 101) # Fluid density vector for different saturations: Rho_f = SW * rho_b + (1 - SW) * rho_g # Bulk density for different saturations: RHO = por * Rho_f + (1 - por) * rho_0 # Bulk modulus complete mix (Reuss): K_f = (np.divide(SW, K_b) + np.divide(1 - SW, K_g))**-1 K = gm.gassmann(K0, K_dry, K_f, por) G = G_dry M = K + 4 / 3 * G VP = np.sqrt(np.divide(M, RHO)) VS = np.sqrt(np.divide(G, RHO)) AI = VP * RHO VPVS = np.divide(VP, VS) plt.figure() plt.subplot(231) plt.plot(SW, RHO) plt.xlabel('Water saturation') plt.ylabel('Density') plt.subplot(232) plt.plot(SW, VP)
# Gas: rho_g = 230.0 K_g = 0.1 * GPa G_g = 0 C = 0.2 # Relative fraction clay KR = (C / K_c + (1 - C) / K_q)**-1 # Reuss KV = C * K_c + (1 - C) * K_q # Voigt K0 = 0.5 * (KR + KV) # Hill GR = (C / G_c + (1 - C) / G_q)**-1 # Reuss GV = C * G_c + (1 - C) * G_q # Voigt G0 = 0.5 * (GR + GV) # Hill rho_0 = C * rho_c + (1 - C) * rho_q # Mineral density POR = np.linspace(0.1, 0.35, 100) por_c = 0.4 K_dry = K0 * (1 - POR / por_c) G_dry = G0 * (1 - POR / por_c) K = gm.gassmann(K0, K_dry, K_b, POR) # Brine saturated bulk mod. G = G_dry M = K + 4 / 3 * G RHO = POR * rho_b + (1 - POR) * rho_0 VP = np.sqrt(np.divide(M, RHO)) VS = np.sqrt(np.divide(G, RHO)) AI = VP * RHO VPVS = np.divide(VP, VS) plt.figure() plt.plot(AI, VPVS, 'b*') plt.show()
# Bulk density oil sat: Rho_OilSat = por * rho_o + (1 - por) * rho_0 AI_OilSat = Rho_OilSat * Vp_OilSat # Oil saturated moduli: G_OilSat = Rho_OilSat * Vs_OilSat**2 K_OilSat = Rho_OilSat * Vp_OilSat**2 - 4 / 3 * G_OilSat # Dry sandstone frame modulus: K_dry = gm.gassmanninv(K_0, K_OilSat, K_o, por) G_dry = G_OilSat # Substitution to brine: Rho_BrineSat = por * rho_b + (1 - por) * rho_0 K_BrineSat = gm.gassmann(K_0, K_dry, K_b, por) G_BrineSat = G_dry M_BrineSat = K_BrineSat + 4 / 3 * G_BrineSat Vs_BrineSat = math.sqrt(G_BrineSat / Rho_BrineSat) Vp_BrineSat = math.sqrt(M_BrineSat / Rho_BrineSat) AI_BrineSat = Rho_BrineSat * Vp_BrineSat # Substitution to gas: Rho_GasSat = por * rho_g + (1 - por) * rho_0 K_GasSat = gm.gassmann(K_0, K_dry, K_g, por) G_GasSat = G_dry M_GasSat = K_GasSat + 4 / 3 * G_GasSat Vs_GasSat = math.sqrt(G_GasSat / Rho_GasSat) Vp_GasSat = math.sqrt(M_GasSat / Rho_GasSat) AI_GasSat = Rho_GasSat * Vp_GasSat