def end_burn(a, density, c_star, gamma, n, exit_mach, exit_velocity, exit_area, throat_area, dt, motor_height, motor_diameter): # initialize loop variables regression_depth = 0 elapsed_time = 0 # start the burn at zero seconds count = 0 # initialize output lists chamber_pressure_list = np.array([0]) burn_rate_list = np.array([0]) regression_depth_list = np.array([0]) burning_area_list = np.array([0]) m_dot_list = np.array([0]) exit_pressure_list = np.array([0]) thrust_list = np.array([0]) elapsed_time_list = np.array([0]) burning_area = geometry.circle_area(motor_diameter) sim_start = time.time() burning = True while burning: count = count + 1 # iterate calculations chamber_pressure = burn.calculate_chamber_pressure(burning_area, throat_area, a, density, c_star, n) burn_rate = burn.calculate_burn_rate(a, chamber_pressure, n) regression_depth = burn.calculate_new_regression_dist(regression_depth, burn_rate, dt) m_dot = burn.calculate_mass_flow_rate(burning_area, burn_rate, density) exit_pressure = burn.calculate_nozzle_exit_pressure(chamber_pressure, gamma, exit_mach) thrust = burn.calculate_vacuum_thrust(m_dot, exit_velocity, exit_area, exit_pressure) elapsed_time = elapsed_time + dt # record values chamber_pressure_list = np.append(chamber_pressure_list, chamber_pressure) burn_rate_list = np.append(burn_rate_list, burn_rate) regression_depth_list = np.append(regression_depth_list, regression_depth) burning_area_list = np.append(burning_area_list, burning_area) m_dot_list = np.append(m_dot_list, m_dot) exit_pressure_list = np.append(exit_pressure_list, exit_pressure) elapsed_time_list = np.append(elapsed_time_list, elapsed_time) thrust_list = np.append(thrust_list, thrust) # available exits if regression_depth >= motor_height: burning = False # print("'successful' burn out") if count >= 100000: burning = False print("unsuccessful burn out, 1000 iteration criteria violated") if time.time() - sim_start > 30: print("unsuccessful burn out, 30 second criteria violated") burning = False return chamber_pressure_list, burn_rate_list, regression_depth_list, burning_area_list, m_dot_list, exit_pressure_list, elapsed_time_list, thrust_list
def burn_motor(regression_map, throat_area, a, density, c_star, gamma, n, exit_mach, exit_velocity, exit_area, dt, mc_mask, volume_ratio): elapsed_time = 0 # start the burn at zero seconds regression_depth = 0.00001 # m thrust_initial = 10 count = 0 chamber_pressure_list = np.array([0]) burn_rate_list = np.array([0]) regression_depth_list = np.array([0]) burning_area_list = np.array([0]) m_dot_list = np.array([0]) exit_pressure_list = np.array([0]) thrust_list = np.array([0]) elapsed_time_list = np.array([0]) burning = True burning_area = calculate_burning_area(regression_map, -0.001, mc_mask, volume_ratio) sim_start = time.time() while burning: count = count + 1 chamber_pressure = burn.calculate_chamber_pressure( burning_area, throat_area, a, density, c_star, n) # obsolete burn_rate = burn.calculate_burn_rate(a, chamber_pressure, n) regression_depth = burn.calculate_new_regression_dist( regression_depth, burn_rate, dt) burning_area = calculate_burning_area(regression_map, -regression_depth, mc_mask, volume_ratio) m_dot = burn.calculate_mass_flow_rate(burning_area, burn_rate, density) exit_pressure = burn.calculate_nozzle_exit_pressure( chamber_pressure, gamma, exit_mach) thrust = burn.calculate_vacuum_thrust(m_dot, exit_velocity, exit_area, exit_pressure) elapsed_time = elapsed_time + dt if count == 1: thrust_initial = thrust chamber_pressure_list = np.append(chamber_pressure_list, chamber_pressure) burn_rate_list = np.append(burn_rate_list, burn_rate) regression_depth_list = np.append(regression_depth_list, regression_depth) burning_area_list = np.append(burning_area_list, burning_area) m_dot_list = np.append(m_dot_list, m_dot) exit_pressure_list = np.append(exit_pressure_list, exit_pressure) elapsed_time_list = np.append(elapsed_time_list, elapsed_time) thrust_list = np.append(thrust_list, thrust) if thrust < thrust_initial * 0.1: burning = False if count >= 1000: burning = False if time.time() - sim_start > 60: burning = False return chamber_pressure_list, burn_rate_list, regression_depth_list, burning_area_list, m_dot_list, exit_pressure_list, elapsed_time_list, thrust_list
def bates_burn_motor(throat_area, a, density, c_star, gamma, n, exit_mach, exit_velocity, exit_area, dt, motor_height, motor_diameter, core_diameter, burn_top, burn_bottom): regression_depth = 0 elapsed_time = 0 # start the burn at zero seconds count = 0 chamber_pressure_list = np.array([0]) burn_rate_list = np.array([0]) regression_depth_list = np.array([0]) burning_area_list = np.array([0]) m_dot_list = np.array([0]) exit_pressure_list = np.array([0]) thrust_list = np.array([0]) elapsed_time_list = np.array([0]) burning = True burning_area = bates_burn_area(regression_depth, core_diameter, motor_height, motor_diameter, burn_top, burn_bottom) sim_start = time.time() while burning: count = count + 1 # calculate iterations chamber_pressure = burn.calculate_chamber_pressure(burning_area, throat_area, a, density, c_star, n) # obsolete burn_rate = burn.calculate_burn_rate(a, chamber_pressure, n) regression_depth = burn.calculate_new_regression_dist(regression_depth, burn_rate, dt) burning_area = bates_burn_area(regression_depth, core_diameter, motor_height, motor_diameter, burn_top, burn_bottom) m_dot = burn.calculate_mass_flow_rate(burning_area, burn_rate, density) exit_pressure = burn.calculate_nozzle_exit_pressure(chamber_pressure, gamma, exit_mach) thrust = burn.calculate_vacuum_thrust(m_dot, exit_velocity, exit_area, exit_pressure) elapsed_time = elapsed_time + dt # record values chamber_pressure_list = np.append(chamber_pressure_list, chamber_pressure) burn_rate_list = np.append(burn_rate_list, burn_rate) regression_depth_list = np.append(regression_depth_list, regression_depth) burning_area_list = np.append(burning_area_list, burning_area) m_dot_list = np.append(m_dot_list, m_dot) exit_pressure_list = np.append(exit_pressure_list, exit_pressure) elapsed_time_list = np.append(elapsed_time_list, elapsed_time) thrust_list = np.append(thrust_list, thrust) if regression_depth * 2 + core_diameter > motor_diameter: burning = False # print("'successful' burn out") if count >= 1000: burning = False print("unsuccessful burn out, 1000 iteration criteria violated") if time.time()-sim_start > 60: print("unsuccessful burn out, 60 second criteria violated") burning = False return chamber_pressure_list, burn_rate_list, regression_depth_list, burning_area_list, m_dot_list, exit_pressure_list, elapsed_time_list, thrust_list
def wagon_wheel_burn(Ro, Rp, Ri, f, N, epsilon, theta, a, density, c_star, gamma, n, exit_mach, exit_velocity, exit_area, dt, motor_height, motor_diameter, throat_area, burn_top, burn_bottom): # initialize loop variables regression_depth = 0 elapsed_time = 0 # start the burn at zero seconds count = 0 # initialize output lists chamber_pressure_list = np.array([0]) burn_rate_list = np.array([0]) regression_depth_list = np.array([0]) burning_area_list = np.array([0]) m_dot_list = np.array([0]) exit_pressure_list = np.array([0]) thrust_list = np.array([0]) elapsed_time_list = np.array([0]) # calculate zero contour burn area burning_area = wagon_wheel_burn_area(motor_height, motor_diameter, Ro, Rp, Ri, f, N, epsilon, theta, regression_depth, burn_top, burn_bottom) sim_start = time.time() burning = True while burning: count = count + 1 # iterate calculations chamber_pressure = burn.calculate_chamber_pressure(burning_area, throat_area, a, density, c_star, n) # obsolete burn_rate = burn.calculate_burn_rate(a, chamber_pressure, n) regression_depth = burn.calculate_new_regression_dist(regression_depth, burn_rate, dt) burning_area = wagon_wheel_burn_area(motor_height, motor_diameter, Ro, Rp, Ri, f, N, epsilon, theta, regression_depth, burn_top, burn_bottom) m_dot = burn.calculate_mass_flow_rate(burning_area, burn_rate, density) exit_pressure = burn.calculate_nozzle_exit_pressure(chamber_pressure, gamma, exit_mach) thrust = burn.calculate_vacuum_thrust(m_dot, exit_velocity, exit_area, exit_pressure) elapsed_time = elapsed_time + dt # record values chamber_pressure_list = np.append(chamber_pressure_list, chamber_pressure) burn_rate_list = np.append(burn_rate_list, burn_rate) regression_depth_list = np.append(regression_depth_list, regression_depth) burning_area_list = np.append(burning_area_list, burning_area) m_dot_list = np.append(m_dot_list, m_dot) exit_pressure_list = np.append(exit_pressure_list, exit_pressure) elapsed_time_list = np.append(elapsed_time_list, elapsed_time) thrust_list = np.append(thrust_list, thrust) # available exits if (regression_depth + Ri + f) > motor_diameter: burning = False # print("'successful' burn out") if thrust <= 0: burning = False if count >= 1000: burning = False print("unsuccessful burn out, 1000 iteration criteria violated") if time.time() - sim_start > 60: print("unsuccessful burn out, 60 second criteria violated") burning = False return chamber_pressure_list, burn_rate_list, regression_depth_list, burning_area_list, m_dot_list,\ exit_pressure_list, elapsed_time_list, thrust_list
def star_burn(Ro, Rp, Ri, epsilon, N, f, a, density, c_star, gamma, n, exit_mach, exit_velocity, exit_area, dt, motor_height, motor_diameter, throat_area, burn_top, burn_bottom): # initialize loop variables regression_depth = 0 elapsed_time = 0 # start the burn at zero seconds count = 0 # initialize output lists chamber_pressure_list = np.array([0]) burn_rate_list = np.array([0]) regression_depth_list = np.array([0]) burning_area_list = np.array([0]) m_dot_list = np.array([0]) exit_pressure_list = np.array([0]) thrust_list = np.array([0]) elapsed_time_list = np.array([0]) # determine theta parameter from inputs theta = 2 * np.arctan(Rp * np.sin(np.pi * epsilon / N) * np.tan(np.pi * epsilon / N) / (Rp * np.sin(np.pi * epsilon/ N) - Ri * np.tan(np.pi * epsilon / N))) print(f"theta = {theta}") # calculate zero contour burn area burning_area = star_burn_area(motor_height, motor_diameter, Ro, Rp, Ri, epsilon, N, regression_depth, f, theta, burn_top, burn_bottom) sim_start = time.time() burning = True while burning: count = count + 1 # iterate calculations chamber_pressure = burn.calculate_chamber_pressure(burning_area, throat_area, a, density, c_star, n) # obsolete burn_rate = burn.calculate_burn_rate(a, chamber_pressure, n) regression_depth = burn.calculate_new_regression_dist(regression_depth, burn_rate, dt) burning_area = star_burn_area(motor_height, motor_diameter, Ro, Rp, Ri, epsilon, N, regression_depth, f, theta, burn_top, burn_bottom) m_dot = burn.calculate_mass_flow_rate(burning_area, burn_rate, density) exit_pressure = burn.calculate_nozzle_exit_pressure(chamber_pressure, gamma, exit_mach) thrust = burn.calculate_vacuum_thrust(m_dot, exit_velocity, exit_area, exit_pressure) elapsed_time = elapsed_time + dt # record values chamber_pressure_list = np.append(chamber_pressure_list, chamber_pressure) burn_rate_list = np.append(burn_rate_list, burn_rate) regression_depth_list = np.append(regression_depth_list, regression_depth) burning_area_list = np.append(burning_area_list, burning_area) m_dot_list = np.append(m_dot_list, m_dot) exit_pressure_list = np.append(exit_pressure_list, exit_pressure) elapsed_time_list = np.append(elapsed_time_list, elapsed_time) thrust_list = np.append(thrust_list, thrust) # print values print(f"\nIteration: {count}") print(f"Time: {round(elapsed_time, 3)} sec") print(f"Regression: {round(regression_depth, 3)} m") print(f"Burning Area: {round(burning_area, 3)} m^2") print(f"Pressure: {round(chamber_pressure, 3)} Pa") print(f"Burn Rate: {round(burn_rate, 3)} m/sec") print(f"Mass Flow Rate: {round(m_dot, 3) } kg/sec") print(f"Exit Pressure: {round(exit_pressure, 3)} Pa") print(f"Thrust: {round(thrust, 3)} N") # available exits if regression_depth + f + Ri > motor_diameter: burning = False # print("'successful' burn out") if count >= 1000: burning = False print("unsuccessful burn out, 1000 iteration criteria violated") if time.time() - sim_start > 60: print("unsuccessful burn out, 60 second criteria violated") burning = False if thrust == 0: burning = False return chamber_pressure_list, burn_rate_list, regression_depth_list, burning_area_list, m_dot_list, exit_pressure_list, elapsed_time_list, thrust_list
def burn_motor(regression_map, throat_area, a, density, c_star, gamma, n, exit_mach, exit_velocity, exit_area, dt, map_ratio, motor_height, core_diameter, motor_diameter, fidelity): elapsed_time = 0 # start the burn at zero seconds regression_depth = 0.0000001 # m max_regression = (motor_diameter - core_diameter) / 2 thrust_initial = True count = 0 chamber_pressure_list = np.array([0]) burn_rate_list = np.array([0]) regression_depth_list = np.array([0]) burning_area_list = np.array([0]) m_dot_list = np.array([0]) exit_pressure_list = np.array([0]) thrust_list = np.array([0]) elapsed_time_list = np.array([0]) burning = True burning_area = calculate_burning_area(regression_map, regression_depth, motor_height, map_ratio, fidelity) sim_start = time.time() while burning: count = count + 1 # calculate values chamber_pressure = burn.calculate_chamber_pressure( burning_area, throat_area, a, density, c_star, n) # obsolete burn_rate = burn.calculate_burn_rate(a, chamber_pressure, n) regression_depth = burn.calculate_new_regression_dist( regression_depth, burn_rate, dt) burning_area = calculate_burning_area(regression_map, regression_depth, motor_height, map_ratio, fidelity) m_dot = burn.calculate_mass_flow_rate(burning_area, burn_rate, density) exit_pressure = burn.calculate_nozzle_exit_pressure( chamber_pressure, gamma, exit_mach) thrust = burn.calculate_vacuum_thrust(m_dot, exit_velocity, exit_area, exit_pressure) elapsed_time = elapsed_time + dt if count == 1: thrust_initial = thrust if thrust < thrust_initial * 0.1: burning = False if count >= 1000: burning = False print("2d sim took too many iterations") if time.time() - sim_start > 30: burning = False print("2d sim took too long") if regression_depth > max_regression: burning = False print(f"2d regression distance exceeded max of: {max_regression}") # record values chamber_pressure_list = np.append(chamber_pressure_list, chamber_pressure) burn_rate_list = np.append(burn_rate_list, burn_rate) regression_depth_list = np.append(regression_depth_list, regression_depth) burning_area_list = np.append(burning_area_list, burning_area) m_dot_list = np.append(m_dot_list, m_dot) exit_pressure_list = np.append(exit_pressure_list, exit_pressure) elapsed_time_list = np.append(elapsed_time_list, elapsed_time) thrust_list = np.append(thrust_list, thrust) return chamber_pressure_list, burn_rate_list, regression_depth_list, burning_area_list, m_dot_list, exit_pressure_list, elapsed_time_list, thrust_list