예제 #1
0
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
예제 #2
0
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
예제 #3
0
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
예제 #4
0
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
예제 #5
0
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
예제 #6
0
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