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]))
Beispiel #2
0
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
Beispiel #3
0
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'))
Beispiel #4
0
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)
Beispiel #5
0
# 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()
Beispiel #6
0
# 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