sf.valprint("Delta Time", DELT)
sf.valprint("Delta X", DELX)
CHECK = WAVE_SPEED * DELT
sf.valprint("a * dt", CHECK)


# CALCULATIONS TO SET UP PROBLEM
DIA = DIA_IN/12.0  # FEET (DIAMETER)
AREA = np.pi * DIA**2/4.0  # FT2 (AREA OF PIPE FLOW)
RHOW = 1.94  # SLUGS/FT3 (DENSITY OF WATER)
RHO = FLUID_RHO  # SLUGS/FT3 (DENSITY OF FLUID)
GAMMA = RHO * GRAV  # LB/FT3
DEL_WEIGHT = (FLUID_WEIGHT - PROD_WEIGHT)  # LB/FT3 (DIFF IN FLUID WEIGHTS)

# CALCULATE FRICTION FACTOR
VISC = sf.visc(90, 2000, "Water")
# DIMENSIONLESS DARCY-WIESBACH FRICTION FACTOR
FRIC = sf.FrictionFact_jit(VEL0, VISC, SPG, DIA_IN, ROUGH, 0)
sf.valprint("FRICTION FACTOR", FRIC)

# INITIAL CONDITIONS (TOTAL HEAD EVERYWHERE IN SYSTEM)
HEAD_EL = np.sin(THETA)*XGRID  # ELEVATION HEAD
HEAD_V = VEL0**2/(2*GRAV)  # VELOCITY HEAD
HEAD_LS = FRIC*XGRID/(2*DIA*GRAV)*VEL0**2  # HEAD LOSS FROM FRICTION
HEAD0 = HEAD_US - HEAD_LS  # INITIAL CONDITIONS - TOTAL HEAD
DEPTH = HEAD_EL[::-1]

# BOUNDARY CONDITIONS
BC_US = HEAD_US  # CONSTANT HEAD AT UPSTREAM RESERVOIR

VEL_DS = np.zeros(len(TGRID))