T_DUR = 5.0 # [SEC] DURATION OF TRACTION PULSE EMOD = 2.2E9 # [PA] ELASTIC MODULUS (water) RHO = 1000.0 # [KG/M3] DENSITY (water) AREA = 1.0 # [M2] CROSS-SECTIONAL AREA # SIG_YIELD = 20.0E9 # [PA] YIELD STRESS SIG_ZERO = 100.0E3 # [PA] AMPLITUDE OF PULSE # DISCRETIZATION T_INC = 200 # NUMBER OF TIME INCREMENTS X_INC = 200 # NUMBER OF SPATIAL INCREMENTS # CALCULATED PARAMETERS CEL = np.sqrt(EMOD/RHO) # [M/SEC] LWAVE = CEL*T_DUR # [M] sf.valprint("wavelength", LWAVE) LEN_REAL = LWAVE*4 # [M] LENGTH OF REAL DOMAIN, 1/2 the modeled domain LEN = LEN_REAL*2 # MODELED SPATIAL DOMAIN IS TWICE THAT OF THE REAL DOMAIN T_NNODE = T_INC + 1 # NUMBER OF TIME NODES X_NNODE = X_INC + 1 # NUMBER OF SPATIAL NODES T_ELEM = T_TOT/T_INC # SIZE OF EACH TIME STEP X_ELEM = LEN/X_INC # SIZE OF EACH SPATIAL STEP # CREATE VECTORS TVECT = np.linspace(0, T_TOT, T_NNODE) # TIME VECTOR XVECT = np.linspace(0, LEN, X_NNODE) # SPACE VECTOR TRAC_VECT = np.zeros(len(TVECT)) # EMPTY TRACTION VECTOR # CREATE THE TRACTION VECTOR (PULSE) for i in xrange(len(TVECT)):
import numpy as np import matplotlib.pyplot as plt import sys sys.path.append('/Users/Lampe/PyScripts/surgeAnalysis') import SurgeFunc as sf PSI = np.linspace(100, 3000) # sf.matprint("PSI", PSI) COMP = sf.CompBrine(100, PSI) BULK = 1/COMP DEN_GCC = sf.DBrine(100, PSI) # OR SPECIFIC GRAVITY # sf.matprint("SG", DEN_GCC) SG = np.mean(DEN_GCC) sf.valprint("Avg SG", SG) DEN_SLUG = 1.94 * DEN_GCC QUOT = (144.0)/(COMP*DEN_SLUG) # sf.matprint("QUOT", QUOT) SPEED = np.sqrt(QUOT) # FT/SEC sf.matprint("SPEED OF SOUND", SPEED) PATH = '/Users/Lampe/Documents/PB/SurgeAnalysis/Results/' FIG2, AX2 = plt.subplots(figsize=(12, 8)) AX2.plot(PSI, SPEED, 'o--') AX2.grid(True) AX2.set_xlabel("Pressure (psi)") AX2.set_ylabel("Wave Speed (ft/sec)") # AX2.legend(LBL, frameon=1, framealpha=1, loc=1) FIG2_NAME = 'brine_speed.pdf'
FLUID_WEIGHT = sf.unit_weight(FLUID_TEMP, FLUID_PRES, FLUID) # LB/FT3 SPG = FLUID_WEIGHT / 62.4 FLUID_RHO = FLUID_WEIGHT / GRAV # SLUG/FT3 # PRODUCT PROPERTIES PROD = "n-Propane" PROD_TEMP = 105.0 PROD_PRES = PRESS_US # PSIG PROD_WEIGHT = sf.unit_weight(PROD_TEMP, PROD_PRES, PROD) # LB/FT3 PROD_RHO = PROD_WEIGHT / GRAV # SLUG/FT3 # DEFINE DISCRETIZATION NELEM = 4 # CALCULATE WAVE SPEED IN SYSTEM sf.valprint("FLUID GRAVITY", SPG) FLUID_COMP = sf.CompBrine(FLUID_TEMP, FLUID_PRES) # 1/PSI sf.valprint("FLUID COMPRESSIBILITY", FLUID_COMP) DEN_SLUG = 1.94 * SPG QUOT = (144.0)/(FLUID_COMP*DEN_SLUG) WAVE_SPEED_FLUID = np.sqrt(QUOT) # FT/SEC WAVE_SPEED_PROD = sf.speedOfSound(PROD_TEMP, PROD_PRES, PROD) # FT/SEC sf.valprint("SPEED OF SOUND IN FLUID ONLY", WAVE_SPEED_FLUID) sf.valprint("SPEED OF SOUND IN PRODUCT ONLY", WAVE_SPEED_PROD) NUM = 144.0/(FLUID_COMP * FLUID_RHO) # FT2/SEC2 DEN = 1 + (DIA_IN/(MOD_PIPE * WALL_THICK * FLUID_COMP))*(1-POISSON/2.0) WAVE_SPEED = np.sqrt(NUM/DEN) sf.valprint("SPEED OF SOUND IN SYSTEM", WAVE_SPEED) TIME_CRIT = LENGTH/WAVE_SPEED # TIME FOR PRESSURE WAVE TO TRAVEL LENGTH