def __defaults__(self): # -------------------------------------------------------------- # User inputs # -------------------------------------------------------------- self.altitude_start = None # Optional self.altitude_end = 10. * Units.km # -------------------------------------------------------------- # State # -------------------------------------------------------------- # conditions self.state.conditions.update(Conditions.Aerodynamics()) # initials and unknowns ones_row = self.state.ones_row self.state.unknowns.throttle = ones_row(1) * 0.5 self.state.unknowns.body_angle = ones_row(1) * 0.0 self.state.residuals.forces = ones_row(2) * 0.0 # -------------------------------------------------------------- # The Solving Process # -------------------------------------------------------------- # -------------------------------------------------------------- # Initialize - before iteration # -------------------------------------------------------------- initialize = self.process.initialize initialize.expand_state = Methods.expand_state initialize.differentials = Methods.Common.Numerics.initialize_differentials_dimensionless initialize.conditions = None initialize.differentials_altitude = Methods.Climb.Common.update_differentials_altitude # -------------------------------------------------------------- # Converge - starts iteration # -------------------------------------------------------------- converge = self.process.converge converge.converge_root = Methods.converge_root # -------------------------------------------------------------- # Iterate - this is iterated # -------------------------------------------------------------- iterate = self.process.iterate # Update Initials iterate.initials = Process() iterate.initials.time = Methods.Common.Frames.initialize_time iterate.initials.weights = Methods.Common.Weights.initialize_weights iterate.initials.inertial_position = Methods.Common.Frames.initialize_inertial_position iterate.initials.planet_position = Methods.Common.Frames.initialize_planet_position # Unpack Unknowns iterate.unknowns = Process() iterate.unknowns.mission = Methods.Climb.Common.unpack_unknowns # Update Conditions iterate.conditions = Process() iterate.conditions.differentials = Methods.Common.Numerics.update_differentials_time iterate.conditions.acceleration = Methods.Common.Frames.update_acceleration iterate.conditions.altitude = Methods.Common.Aerodynamics.update_altitude iterate.conditions.atmosphere = Methods.Common.Aerodynamics.update_atmosphere iterate.conditions.gravity = Methods.Common.Weights.update_gravity iterate.conditions.freestream = Methods.Common.Aerodynamics.update_freestream iterate.conditions.orientations = Methods.Common.Frames.update_orientations iterate.conditions.aerodynamics = Methods.Common.Aerodynamics.update_aerodynamics iterate.conditions.stability = Methods.Common.Aerodynamics.update_stability iterate.conditions.propulsion = Methods.Common.Energy.update_thrust iterate.conditions.weights = Methods.Common.Weights.update_weights iterate.conditions.forces = Methods.Common.Frames.update_forces iterate.conditions.planet_position = Methods.Common.Frames.update_planet_position # Solve Residuals iterate.residuals = Process() iterate.residuals.total_forces = Methods.Climb.Common.residual_total_forces # -------------------------------------------------------------- # Finalize - after iteration # -------------------------------------------------------------- finalize = self.process.finalize # Post Processing finalize.post_process = Process() finalize.post_process.inertial_position = Methods.Common.Frames.integrate_inertial_horizontal_position finalize.post_process.stability = Methods.Common.Aerodynamics.update_stability return
def __defaults__(self): """ This sets the default solver flow. Anything in here can be modified after initializing a segment. Assumptions: None Source: N/A Inputs: None Outputs: None Properties Used: None """ # -------------------------------------------------------------- # User inputs # -------------------------------------------------------------- self.altitude = None self.acceleration = 1. * Units['m/s/s'] self.air_speed_start = 0.0 * Units['m/s'] self.air_speed_end = 1.0 * Units['m/s'] self.pitch_initial = None self.pitch_final = 0.0 * Units['rad'] # -------------------------------------------------------------- # State # -------------------------------------------------------------- # conditions self.state.conditions.update(Conditions.Aerodynamics()) # initials and unknowns ones_row = self.state.ones_row self.state.residuals.forces = ones_row(2) * 0.0 # -------------------------------------------------------------- # The Solving Process # -------------------------------------------------------------- # -------------------------------------------------------------- # Initialize - before iteration # -------------------------------------------------------------- initialize = self.process.initialize initialize.expand_state = Methods.expand_state initialize.differentials = Methods.Common.Numerics.initialize_differentials_dimensionless initialize.conditions = Methods.Transition.Constant_Acceleration_Constant_Pitchrate_Constant_Altitude.initialize_conditions # -------------------------------------------------------------- # Converge - starts iteration # -------------------------------------------------------------- converge = self.process.converge converge.converge_root = Methods.converge_root # -------------------------------------------------------------- # Iterate - this is iterated # -------------------------------------------------------------- iterate = self.process.iterate # Update Initials iterate.initials = Process() iterate.initials.time = Methods.Common.Frames.initialize_time iterate.initials.weights = Methods.Common.Weights.initialize_weights iterate.initials.inertial_position = Methods.Common.Frames.initialize_inertial_position iterate.initials.planet_position = Methods.Common.Frames.initialize_planet_position # Unpack Unknowns iterate.unknowns = Process() iterate.unknowns.mission = Methods.Cruise.Common.unpack_unknowns # Update Conditions iterate.conditions = Process() iterate.conditions.differentials = Methods.Common.Numerics.update_differentials_time iterate.conditions.altitude = Methods.Common.Aerodynamics.update_altitude iterate.conditions.atmosphere = Methods.Common.Aerodynamics.update_atmosphere iterate.conditions.gravity = Methods.Common.Weights.update_gravity iterate.conditions.freestream = Methods.Common.Aerodynamics.update_freestream iterate.conditions.orientations = Methods.Common.Frames.update_orientations iterate.conditions.propulsion = Methods.Common.Energy.update_thrust iterate.conditions.aerodynamics = Methods.Common.Aerodynamics.update_aerodynamics iterate.conditions.stability = Methods.Common.Aerodynamics.update_stability iterate.conditions.weights = Methods.Common.Weights.update_weights iterate.conditions.forces = Methods.Common.Frames.update_forces iterate.conditions.planet_position = Methods.Common.Frames.update_planet_position # Solve Residuals iterate.residuals = Process() iterate.residuals.total_forces = Methods.Transition.Constant_Acceleration_Constant_Pitchrate_Constant_Altitude.residual_total_forces # -------------------------------------------------------------- # Finalize - after iteration # -------------------------------------------------------------- finalize = self.process.finalize # Post Processing finalize.post_process = Process() finalize.post_process.inertial_position = Methods.Common.Frames.integrate_inertial_horizontal_position finalize.post_process.stability = Methods.Common.Aerodynamics.update_stability finalize.post_process.aero_derivatives = skip finalize.post_process.noise = Methods.Common.Noise.compute_noise return
def __defaults__(self): """ This sets the default solver flow. Anything in here can be modified after initializing a segment. Assumptions: None Source: N/A Inputs: None Outputs: None Properties Used: None """ # -------------------------------------------------------------- # User inputs # -------------------------------------------------------------- self.ground_incline = 0.0 self.friction_coefficient = 0.04 self.throttle = None self.velocity_start = 0.0 self.velocity_end = 0.0 self.altitude = 0.0 # -------------------------------------------------------------- # State # -------------------------------------------------------------- # conditions self.state.conditions.update(Conditions.Aerodynamics()) # initials and unknowns ones_row = self.state.ones_row # Specific ground things self.state.conditions.ground = Data() self.state.conditions.ground.incline = ones_row(1) * 0.0 self.state.conditions.ground.friction_coefficient = ones_row(1) * 0.0 self.state.conditions.frames.inertial.ground_force_vector = ones_row( 3) * 0.0 # -------------------------------------------------------------- # The Solving Process # -------------------------------------------------------------- # -------------------------------------------------------------- # Initialize - before iteration # -------------------------------------------------------------- initialize = self.process.initialize initialize.expand_state = Methods.expand_state initialize.differentials = Methods.Common.Numerics.initialize_differentials_dimensionless initialize.conditions = Methods.Ground.Common.initialize_conditions # -------------------------------------------------------------- # Converge - starts iteration # -------------------------------------------------------------- converge = self.process.converge converge.converge_root = Methods.converge_root # -------------------------------------------------------------- # Iterate - this is iterated # -------------------------------------------------------------- iterate = self.process.iterate # Update Initials iterate.initials = Process() iterate.initials.time = Methods.Common.Frames.initialize_time iterate.initials.weights = Methods.Common.Weights.initialize_weights iterate.initials.inertial_position = Methods.Common.Frames.initialize_inertial_position iterate.initials.planet_position = Methods.Common.Frames.initialize_planet_position # Unpack Unknowns iterate.unknowns = Process() iterate.unknowns.mission = Methods.Ground.Common.unpack_unknowns # Update Conditions iterate.conditions = Process() iterate.conditions.differentials = Methods.Common.Numerics.update_differentials_time iterate.conditions.altitude = Methods.Common.Aerodynamics.update_altitude iterate.conditions.atmosphere = Methods.Common.Aerodynamics.update_atmosphere iterate.conditions.gravity = Methods.Common.Weights.update_gravity iterate.conditions.freestream = Methods.Common.Aerodynamics.update_freestream iterate.conditions.orientations = Methods.Common.Frames.update_orientations iterate.conditions.propulsion = Methods.Common.Energy.update_thrust iterate.conditions.aerodynamics = Methods.Common.Aerodynamics.update_aerodynamics iterate.conditions.stability = Methods.Common.Aerodynamics.update_stability iterate.conditions.weights = Methods.Common.Weights.update_weights iterate.conditions.forces_ground = Methods.Ground.Common.compute_ground_forces iterate.conditions.forces = Methods.Ground.Common.compute_forces iterate.conditions.planet_position = Methods.Common.Frames.update_planet_position # Solve Residuals iterate.residuals = Process() iterate.residuals.total_forces = Methods.Ground.Common.solve_residuals # -------------------------------------------------------------- # Finalize - after iteration # -------------------------------------------------------------- finalize = self.process.finalize # Post Processing finalize.post_process = Process() finalize.post_process.inertial_position = Methods.Common.Frames.integrate_inertial_horizontal_position finalize.post_process.stability = Methods.Common.Aerodynamics.update_stability return
def __defaults__(self): """ This sets the default solver flow. Anything in here can be modified after initializing a segment. Assumptions: None Source: N/A Inputs: None Outputs: None Properties Used: None """ # -------------------------------------------------------------- # User inputs # -------------------------------------------------------------- self.altitude = None self.air_speed = 10. * Units['km/hr'] self.distance = 10. * Units.km self.altitude_start = None self.altitude_end = None # -------------------------------------------------------------- # State # -------------------------------------------------------------- # conditions self.state.conditions.update( Conditions.Aerodynamics() ) # initials and unknowns ones_row = self.state.ones_row self.state.unknowns.throttle = ones_row(1) * 0.5 self.state.unknowns.body_angle = ones_row(1) * 0.0 self.state.residuals.forces = ones_row(2) * 0.0 # -------------------------------------------------------------- # The Solving Process # -------------------------------------------------------------- # -------------------------------------------------------------- # Initialize - before iteration # -------------------------------------------------------------- initialize = self.process.initialize initialize.clear() initialize.expand_state = Methods.expand_state initialize.differentials = Methods.Common.Numerics.initialize_differentials_dimensionless initialize.conditions = Methods.Climb.Constant_Speed_Linear_Altitude.initialize_conditions # -------------------------------------------------------------- # Converge - starts iteration # -------------------------------------------------------------- converge = self.process.converge converge.clear() converge.converge_root = Methods.converge_root # -------------------------------------------------------------- # Iterate - this is iterated # -------------------------------------------------------------- iterate = self.process.iterate iterate.clear() # Update Initials iterate.initials = Process() iterate.initials.time = Methods.Common.Frames.initialize_time iterate.initials.weights = Methods.Common.Weights.initialize_weights iterate.initials.inertial_position = Methods.Common.Frames.initialize_inertial_position iterate.initials.planet_position = Methods.Common.Frames.initialize_planet_position # Unpack Unknowns iterate.unpack_unknowns = Methods.Cruise.Common.unpack_unknowns # Update Conditions iterate.conditions = Process() iterate.conditions.differentials = Methods.Common.Numerics.update_differentials_time iterate.conditions.altitude = Methods.Common.Aerodynamics.update_altitude iterate.conditions.atmosphere = Methods.Common.Aerodynamics.update_atmosphere iterate.conditions.gravity = Methods.Common.Weights.update_gravity iterate.conditions.freestream = Methods.Common.Aerodynamics.update_freestream iterate.conditions.orientations = Methods.Common.Frames.update_orientations iterate.conditions.propulsion = Methods.Common.Energy.update_thrust iterate.conditions.aerodynamics = Methods.Common.Aerodynamics.update_aerodynamics iterate.conditions.stability = Methods.Common.Aerodynamics.update_stability iterate.conditions.weights = Methods.Common.Weights.update_weights iterate.conditions.forces = Methods.Common.Frames.update_forces iterate.conditions.planet_position = Methods.Common.Frames.update_planet_position # Solve Residuals iterate.residuals = Process() iterate.residuals.total_forces = Methods.Cruise.Common.residual_total_forces # -------------------------------------------------------------- # Finalize - after iteration # -------------------------------------------------------------- finalize = self.process.finalize finalize.clear() # Post Processing finalize.post_process = Process() finalize.post_process.inertial_position = Methods.Common.Frames.integrate_inertial_horizontal_position finalize.post_process.stability = Methods.Common.Aerodynamics.update_stability return
def __defaults__(self): """This sets the default values. Assumptions: None Source: N/A Inputs: None Outputs: None Properties Used: None """ # -------------------------------------------------------------- # User inputs # -------------------------------------------------------------- # self.example = 1.0 # -------------------------------------------------------------- # State # -------------------------------------------------------------- # conditions self.state.conditions.update( Conditions.Aerodynamics() ) self.temperature_deviation = 0.0 # -------------------------------------------------------------- # The Solving Process # -------------------------------------------------------------- # -------------------------------------------------------------- # Initialize - before iteration # -------------------------------------------------------------- initialize = self.process.initialize initialize.expand_state = Methods.expand_state initialize.differentials = Methods.Common.Numerics.initialize_differentials_dimensionless initialize.conditions = None # -------------------------------------------------------------- # Converge - starts iteration # -------------------------------------------------------------- converge = self.process.converge converge.converge_root = Methods.converge_root # -------------------------------------------------------------- # Iterate - this is iterated # -------------------------------------------------------------- iterate = self.process.iterate # Update Initials iterate.initials = Process() iterate.initials.time = Methods.Common.Frames.initialize_time iterate.initials.weights = Methods.Common.Weights.initialize_weights iterate.initials.inertial_position = Methods.Common.Frames.initialize_inertial_position iterate.initials.planet_position = Methods.Common.Frames.initialize_planet_position # Unpack Unknowns iterate.unknowns = Process() iterate.unknowns.mission = None # Update Conditions iterate.conditions = Process() iterate.conditions.differentials = Methods.Common.Numerics.update_differentials_time iterate.conditions.altitude = Methods.Common.Aerodynamics.update_altitude iterate.conditions.atmosphere = Methods.Common.Aerodynamics.update_atmosphere iterate.conditions.gravity = Methods.Common.Weights.update_gravity iterate.conditions.freestream = Methods.Common.Aerodynamics.update_freestream iterate.conditions.orientations = Methods.Common.Frames.update_orientations iterate.conditions.aerodynamics = Methods.Common.Aerodynamics.update_aerodynamics iterate.conditions.stability = Methods.Common.Aerodynamics.update_stability iterate.conditions.energy = Methods.Common.Energy.update_thrust iterate.conditions.weights = Methods.Common.Weights.update_weights iterate.conditions.forces = Methods.Common.Frames.update_forces iterate.conditions.planet_position = Methods.Common.Frames.update_planet_position # Solve Residuals iterate.residuals = Process() # -------------------------------------------------------------- # Finalize - after iteration # -------------------------------------------------------------- finalize = self.process.finalize # Post Processing finalize.post_process = Process() finalize.post_process.inertial_position = Methods.Common.Frames.integrate_inertial_horizontal_position finalize.post_process.stability = Methods.Common.Aerodynamics.update_stability return
def __defaults__(self): """ This sets the default solver flow. Anything in here can be modified after initializing a segment. Assumptions: None Source: N/A Inputs: None Outputs: None Properties Used: None """ # -------------------------------------------------------------- # User inputs # -------------------------------------------------------------- self.altitude = None self.air_speed = 10. * Units['km/hr'] self.distance = 10. * Units.km self.x_accel = 0. self.z_accel = 0. # note that down is positive self.state.numerics.number_control_points = 1 # -------------------------------------------------------------- # State # -------------------------------------------------------------- # conditions self.state.conditions.update( Conditions.Aerodynamics() ) # initials and unknowns self.state.unknowns.throttle = np.array([[0.5]]) self.state.unknowns.body_angle = np.array([[0.0]]) self.state.residuals.forces = np.array([[0.0,0.0]]) # -------------------------------------------------------------- # The Solving Process # -------------------------------------------------------------- # -------------------------------------------------------------- # Initialize - before iteration # -------------------------------------------------------------- initialize = self.process.initialize initialize.expand_state = skip initialize.differentials = skip initialize.conditions = Methods.Single_Point.Set_Speed_Set_Altitude.initialize_conditions # -------------------------------------------------------------- # Converge - starts iteration # -------------------------------------------------------------- converge = self.process.converge converge.converge_root = Methods.converge_root # -------------------------------------------------------------- # Iterate - this is iterated # -------------------------------------------------------------- iterate = self.process.iterate # Update Initials iterate.initials = Process() iterate.initials.time = Methods.Common.Frames.initialize_time iterate.initials.weights = Methods.Common.Weights.initialize_weights iterate.initials.inertial_position = Methods.Common.Frames.initialize_inertial_position iterate.initials.planet_position = Methods.Common.Frames.initialize_planet_position # Unpack Unknowns iterate.unknowns = Process() iterate.unknowns.mission = Methods.Cruise.Common.unpack_unknowns # Update Conditions iterate.conditions = Process() iterate.conditions.differentials = skip iterate.conditions.altitude = Methods.Common.Aerodynamics.update_altitude iterate.conditions.atmosphere = Methods.Common.Aerodynamics.update_atmosphere iterate.conditions.gravity = Methods.Common.Weights.update_gravity iterate.conditions.freestream = Methods.Common.Aerodynamics.update_freestream iterate.conditions.orientations = Methods.Common.Frames.update_orientations iterate.conditions.aerodynamics = Methods.Common.Aerodynamics.update_aerodynamics iterate.conditions.stability = Methods.Common.Aerodynamics.update_stability iterate.conditions.propulsion = Methods.Common.Energy.update_thrust iterate.conditions.weights = Methods.Single_Point.Set_Speed_Set_Altitude.update_weights iterate.conditions.forces = Methods.Common.Frames.update_forces iterate.conditions.planet_position = skip # Solve Residuals iterate.residuals = Process() iterate.residuals.total_forces = Methods.Climb.Common.residual_total_forces # -------------------------------------------------------------- # Finalize - after iteration # -------------------------------------------------------------- finalize = self.process.finalize # Post Processing finalize.post_process = Process() finalize.post_process.inertial_position = skip finalize.post_process.stability = Methods.Common.Aerodynamics.update_stability return
def __defaults__(self): """ This sets the default solver flow. Anything in here can be modified after initializing a segment. Assumptions: None Source: N/A Inputs: None Outputs: None Properties Used: None """ # -------------------------------------------------------------- # User inputs # -------------------------------------------------------------- self.altitude = None self.time = 1.0 * Units.seconds self.overcharge_contingency = 1.25 self.battery_discharge = True # -------------------------------------------------------------- # State # -------------------------------------------------------------- # conditions self.state.conditions.update(Conditions.Aerodynamics()) # initials and unknowns ones_row = self.state.ones_row # -------------------------------------------------------------- # The Solving Process # -------------------------------------------------------------- # -------------------------------------------------------------- # Initialize - before iteration # -------------------------------------------------------------- initialize = self.process.initialize initialize.expand_state = Methods.expand_state initialize.differentials = Methods.Common.Numerics.initialize_differentials_dimensionless initialize.conditions = Methods.Ground.Battery_Charge_Discharge.initialize_conditions # -------------------------------------------------------------- # Converge - starts iteration # -------------------------------------------------------------- converge = self.process.converge converge.converge_root = Methods.converge_root # -------------------------------------------------------------- # Iterate - this is iterated # -------------------------------------------------------------- iterate = self.process.iterate # Update Initials iterate.initials = Process() iterate.initials.time = Methods.Common.Frames.initialize_time iterate.initials.weights = Methods.Common.Weights.initialize_weights iterate.initials.inertial_position = Methods.Common.Frames.initialize_inertial_position iterate.initials.planet_position = Methods.Common.Frames.initialize_planet_position # Unpack Unknowns iterate.unknowns = Process() iterate.unknowns.mission = Methods.Ground.Battery_Charge_Discharge.unpack_unknowns # Update Conditions iterate.conditions = Process() iterate.conditions.differentials = Methods.Common.Numerics.update_differentials_time iterate.conditions.altitude = Methods.Common.Aerodynamics.update_altitude iterate.conditions.atmosphere = Methods.Common.Aerodynamics.update_atmosphere iterate.conditions.gravity = Methods.Common.Weights.update_gravity iterate.conditions.freestream = Methods.Common.Aerodynamics.update_freestream iterate.conditions.orientations = Methods.Common.Frames.update_orientations iterate.conditions.propulsion = Methods.Common.Energy.update_thrust iterate.conditions.aerodynamics = Methods.Common.Aerodynamics.update_aerodynamics iterate.conditions.stability = Methods.Common.Aerodynamics.update_stability iterate.conditions.weights = Methods.Common.Weights.update_weights iterate.conditions.forces = Methods.Common.Frames.update_forces iterate.conditions.planet_position = Methods.Common.Frames.update_planet_position # Solve Residuals iterate.residuals = Process() # -------------------------------------------------------------- # Finalize - after iteration # -------------------------------------------------------------- finalize = self.process.finalize # Post Processing finalize.post_process = Process() finalize.post_process.inertial_position = Methods.Common.Frames.integrate_inertial_horizontal_position finalize.post_process.stability = skip finalize.post_process.aero_derivatives = skip finalize.post_process.noise = skip return
def __defaults__(self): # -------------------------------------------------------------- # User inputs # -------------------------------------------------------------- self.throttle = None self.velocity_start = 0.0 self.velocity_end = 0.0 # -------------------------------------------------------------- # State # -------------------------------------------------------------- # conditions self.state.conditions.update( Conditions.Aerodynamics() ) # initials and unknowns ones_row = self.state.ones_row self.state.unknowns.body_angle = ones_row(1) * 0.0 self.state.unknowns.velocity_x = ones_row(1) * 0.0 self.state.unknowns.time = 0.1 self.state.residuals.final_velocity_error = 0.0 self.state.residuals.forces = ones_row(2) * 0.0 # -------------------------------------------------------------- # The Solving Process # -------------------------------------------------------------- # -------------------------------------------------------------- # Initialize - before iteration # -------------------------------------------------------------- initialize = self.process.initialize initialize.clear() initialize.expand_state = Methods.expand_state initialize.differentials = Methods.Common.Numerics.initialize_differentials_dimensionless initialize.conditions = Methods.Cruise.Constant_Throttle_Constant_Altitude.initialize_conditions # -------------------------------------------------------------- # Converge - starts iteration # -------------------------------------------------------------- converge = self.process.converge converge.clear() converge.converge_root = Methods.converge_root # -------------------------------------------------------------- # Iterate - this is iterated # -------------------------------------------------------------- iterate = self.process.iterate iterate.clear() # Update Initials iterate.initials = Process() iterate.initials.time = Methods.Common.Frames.initialize_time iterate.initials.weights = Methods.Common.Weights.initialize_weights iterate.initials.inertial_position = Methods.Common.Frames.initialize_inertial_position iterate.initials.planet_position = Methods.Common.Frames.initialize_planet_position # Unpack Unknowns iterate.unpack_unknowns = Methods.Cruise.Constant_Throttle_Constant_Altitude.unpack_unknowns # Update Conditions iterate.conditions = Process() iterate.conditions.differentials = Methods.Common.Numerics.update_differentials_time iterate.conditions.altitude = Methods.Common.Aerodynamics.update_altitude iterate.conditions.atmosphere = Methods.Common.Aerodynamics.update_atmosphere iterate.conditions.gravity = Methods.Common.Weights.update_gravity iterate.conditions.freestream = Methods.Common.Aerodynamics.update_freestream iterate.conditions.orientations = Methods.Common.Frames.update_orientations iterate.conditions.aerodynamics = Methods.Common.Aerodynamics.update_aerodynamics iterate.conditions.stability = Methods.Common.Aerodynamics.update_stability iterate.conditions.propulsion = Methods.Common.Energy.update_thrust iterate.conditions.weights = Methods.Common.Weights.update_weights iterate.conditions.forces = Methods.Common.Frames.update_forces iterate.conditions.planet_position = Methods.Common.Frames.update_planet_position # Solve Residuals iterate.residuals = Process() iterate.residuals.total_forces = Methods.Cruise.Constant_Throttle_Constant_Altitude.solve_residuals # -------------------------------------------------------------- # Finalize - after iteration # -------------------------------------------------------------- finalize = self.process.finalize finalize.clear() # Post Processing finalize.post_process = Process() finalize.post_process.inertial_position = Methods.Common.Frames.integrate_inertial_horizontal_position #finalize.post_process.stability = Methods.Common.Aerodynamics.update_stability finalize.post_process.cruise = Methods.Cruise.Constant_Throttle_Constant_Altitude.post_process return
def __defaults__(self): # -------------------------------------------------------------- # User inputs # -------------------------------------------------------------- self.ground_incline = 0.0 self.friction_coefficient = 0.04 self.throttle = None self.velocity_start = 0.0 self.velocity_end = 0.0 # -------------------------------------------------------------- # State # -------------------------------------------------------------- # conditions self.state.conditions.update(Conditions.Aerodynamics()) # initials and unknowns ones_row = self.state.ones_row self.state.unknowns.velocity_x = ones_row(1) * 0.0 self.state.unknowns.time = 0.1 self.state.residuals.acceleration_x = ones_row(1) * 0.0 self.state.residuals.final_velocity_error = ones_row(1) * 0.0 # Specific ground things self.state.conditions.ground = Data() self.state.conditions.ground.incline = ones_row(1) * 0.0 self.state.conditions.ground.friction_coefficient = ones_row(1) * 0.0 self.state.conditions.frames.inertial.ground_force_vector = ones_row( 3) * 0.0 # -------------------------------------------------------------- # The Solving Process # -------------------------------------------------------------- # -------------------------------------------------------------- # Initialize - before iteration # -------------------------------------------------------------- initialize = self.process.initialize initialize.clear() initialize.expand_state = Methods.expand_state initialize.differentials = Methods.Common.Numerics.initialize_differentials_dimensionless initialize.conditions = Methods.Ground.Common.initialize_conditions # -------------------------------------------------------------- # Converge - starts iteration # -------------------------------------------------------------- converge = self.process.converge converge.clear() converge.converge_root = Methods.converge_root # -------------------------------------------------------------- # Iterate - this is iterated # -------------------------------------------------------------- iterate = self.process.iterate iterate.clear() # Update Initials iterate.initials = Process() iterate.initials.time = Methods.Common.Frames.initialize_time iterate.initials.weights = Methods.Common.Weights.initialize_weights iterate.initials.inertial_position = Methods.Common.Frames.initialize_inertial_position iterate.initials.planet_position = Methods.Common.Frames.initialize_planet_position # Unpack Unknowns iterate.unpack_unknowns = Methods.Ground.Common.unpack_unknowns # Update Conditions iterate.conditions = Process() iterate.conditions.differentials = Methods.Common.Numerics.update_differentials_time iterate.conditions.altitude = Methods.Common.Aerodynamics.update_altitude iterate.conditions.atmosphere = Methods.Common.Aerodynamics.update_atmosphere iterate.conditions.gravity = Methods.Common.Weights.update_gravity iterate.conditions.freestream = Methods.Common.Aerodynamics.update_freestream iterate.conditions.orientations = Methods.Common.Frames.update_orientations iterate.conditions.aerodynamics = Methods.Common.Aerodynamics.update_aerodynamics iterate.conditions.stability = Methods.Common.Aerodynamics.update_stability iterate.conditions.propulsion = Methods.Common.Energy.update_thrust iterate.conditions.weights = Methods.Common.Weights.update_weights iterate.conditions.forces_ground = Methods.Ground.Common.compute_ground_forces iterate.conditions.forces = Methods.Ground.Common.compute_forces iterate.conditions.planet_position = Methods.Common.Frames.update_planet_position ## NEW STUFF TO UPDATE # Solve Residuals iterate.residuals = Process() iterate.residuals.total_forces = Methods.Ground.Common.solve_residuals # -------------------------------------------------------------- # Finalize - after iteration # -------------------------------------------------------------- finalize = self.process.finalize finalize.clear() # Post Processing finalize.post_process = Process() finalize.post_process.inertial_position = Methods.Common.Frames.integrate_inertial_horizontal_position finalize.post_process.stability = Methods.Common.Aerodynamics.update_stability finalize.post_process.ground = Methods.Ground.Common.post_process return
def __defaults__(self): # -------------------------------------------------------------- # User inputs # -------------------------------------------------------------- self.altitude_start = None # Optional self.altitude_end = 10. * Units.km self.throttle = 0.5 self.mach_number = 0.7 self.settings.root_finder = scipy.optimize.root # -------------------------------------------------------------- # State # -------------------------------------------------------------- # conditions self.state.conditions.update(Conditions.Aerodynamics()) # initials and unknowns ones_row = self.state.ones_row self.state.unknowns.body_angle = ones_row(1) * -3.0 * Units.deg self.state.unknowns.wind_angle = ones_row(1) * 0.8 * Units.deg self.state.residuals.forces = ones_row(2) * 0.0 # -------------------------------------------------------------- # The Solving Process # -------------------------------------------------------------- # -------------------------------------------------------------- # Initialize - before iteration # -------------------------------------------------------------- initialize = self.process.initialize initialize.clear() initialize.expand_state = Methods.expand_state initialize.differentials = Methods.Common.Numerics.initialize_differentials_dimensionless initialize.conditions = Methods.Descent.Constant_Throttle_Constant_Mach.initialize_conditions initialize.velocities = Methods.Descent.Constant_Throttle_Constant_Mach.update_velocity_vector_from_wind_angle initialize.differentials_altitude = Methods.Descent.Constant_Throttle_Constant_Mach.update_differentials_time # -------------------------------------------------------------- # Converge - starts iteration # -------------------------------------------------------------- converge = self.process.converge converge.clear() converge.converge_root = Methods.converge_root # -------------------------------------------------------------- # Iterate - this is iterated # -------------------------------------------------------------- iterate = self.process.iterate iterate.clear() # Update Initials iterate.initials = Process() iterate.initials.time = Methods.Common.Frames.initialize_time iterate.initials.weights = Methods.Common.Weights.initialize_weights iterate.initials.inertial_position = Methods.Common.Frames.initialize_inertial_position iterate.initials.planet_position = Methods.Common.Frames.initialize_planet_position # Unpack Unknowns iterate.unpack_unknowns = Methods.Descent.Constant_Throttle_Constant_Mach.unpack_body_angle # Update Conditions iterate.conditions = Process() iterate.conditions.velocities = Methods.Descent.Constant_Throttle_Constant_Mach.update_velocity_vector_from_wind_angle iterate.conditions.differentials_a = Methods.Descent.Constant_Throttle_Constant_Mach.update_differentials_time iterate.conditions.acceleration = Methods.Descent.Constant_Throttle_Constant_Mach.update_acceleration iterate.conditions.altitude = Methods.Common.Aerodynamics.update_altitude iterate.conditions.atmosphere = Methods.Common.Aerodynamics.update_atmosphere iterate.conditions.gravity = Methods.Common.Weights.update_gravity iterate.conditions.freestream = Methods.Common.Aerodynamics.update_freestream iterate.conditions.orientations = Methods.Common.Frames.update_orientations iterate.conditions.aerodynamics = Methods.Common.Aerodynamics.update_aerodynamics iterate.conditions.stability = Methods.Common.Aerodynamics.update_stability iterate.conditions.propulsion = Methods.Common.Energy.update_thrust iterate.conditions.weights = Methods.Descent.Constant_Throttle_Constant_Mach.update_weights iterate.conditions.forces = Methods.Descent.Constant_Throttle_Constant_Mach.update_forces iterate.conditions.planet_position = Methods.Common.Frames.update_planet_position # Solve Residuals iterate.residuals = Process() iterate.residuals.total_forces = Methods.Descent.Constant_Throttle_Constant_Mach.residual_total_forces # -------------------------------------------------------------- # Finalize - after iteration # -------------------------------------------------------------- finalize = self.process.finalize finalize.clear() # Post Processing finalize.post_process = Process() finalize.post_process.inertial_position = Methods.Common.Frames.integrate_inertial_horizontal_position finalize.post_process.stability = Methods.Common.Aerodynamics.update_stability return
def __defaults__(self): """This sets the default values. Assumptions: None Source: N/A Inputs: None Outputs: None Properties Used: None """ # -------------------------------------------------------------- # State # -------------------------------------------------------------- # conditions self.state.conditions.update(Conditions.Basic()) # -------------------------------------------------------------- # The Solving Process # -------------------------------------------------------------- # -------------------------------------------------------------- # Initialize - before iteration # -------------------------------------------------------------- initialize = self.process.initialize initialize.expand_state = Methods.expand_state initialize.differentials = Methods.Common.Numerics.initialize_differentials_dimensionless initialize.conditions = None # -------------------------------------------------------------- # Converge - starts iteration # -------------------------------------------------------------- converge = self.process.converge converge.converge_root = Methods.converge_root # -------------------------------------------------------------- # Iterate - this is iterated # -------------------------------------------------------------- iterate = self.process.iterate # Update Initials iterate.initials = Process() iterate.initials.time = Methods.Common.Frames.initialize_time # Unpack Unknowns iterate.unknowns = Process() iterate.unknowns.mission = None # Update Conditions iterate.conditions = Process() iterate.conditions.differentials = Methods.Common.Numerics.update_differentials_time # Solve Residuals iterate.residuals = Process() # -------------------------------------------------------------- # Finalize - after iteration # -------------------------------------------------------------- finalize = self.process.finalize finalize.post_process = Process() return
def __defaults__(self): """ This sets the default solver flow. Anything in here can be modified after initializing a segment. Assumptions: None Source: N/A Inputs: None Outputs: None Properties Used: None """ # -------------------------------------------------------------- # User inputs # -------------------------------------------------------------- self.altitude = None self.air_speed_start = None self.air_speed_end = None self.acceleration = None self.pitch_initial = None self.pitch_final = None self.objective = None # This will be a key self.minimize = True self.lift_coefficient_limit = 1.e20 self.algorithm = 'SLSQP' # -------------------------------------------------------------- # State # -------------------------------------------------------------- # conditions self.state.conditions.update( Conditions.Aerodynamics() ) # initials and unknowns ones_row = self.state.ones_row self.state.unknowns.rotor_power_coefficient = 0.05 * ones_row(1) self.state.unknowns.throttle_lift = 1.25 * ones_row(1) self.state.unknowns.propeller_power_coefficient = 0.02 * ones_row(1) self.state.unknowns.throttle = .50 * ones_row(1) self.state.residuals.network = 0.0 * ones_row(3) self.state.residuals.forces = 0.0 * ones_row(2) self.state.inputs_last = None self.state.objective_value = 0.0 self.state.constraint_values = 0.0 # -------------------------------------------------------------- # The Solving Process # -------------------------------------------------------------- # -------------------------------------------------------------- # Initialize - before iteration # -------------------------------------------------------------- initialize = self.process.initialize initialize.expand_state = Methods.expand_state initialize.solved_mission = Methods.Transition.Lift_Cruise_Optimized.solve_constant_speed_constant_altitude_loiter initialize.differentials = Methods.Common.Numerics.initialize_differentials_dimensionless initialize.conditions = Methods.Transition.Constant_Acceleration_Constant_Pitchrate_Constant_Altitude.initialize_conditions # -------------------------------------------------------------- # Converge - starts iteration # -------------------------------------------------------------- converge = self.process.converge converge.converge_root = Methods.converge_opt # -------------------------------------------------------------- # Iterate - this is iterated # -------------------------------------------------------------- iterate = self.process.iterate # Update Initials iterate.initials = Process() iterate.initials.time = Methods.Common.Frames.initialize_time iterate.initials.weights = Methods.Common.Weights.initialize_weights iterate.initials.inertial_position = Methods.Common.Frames.initialize_inertial_position iterate.initials.planet_position = Methods.Common.Frames.initialize_planet_position # Unpack Unknowns iterate.unknowns = Process() iterate.unknowns.mission = Methods.Transition.Lift_Cruise_Optimized.unpack_unknowns # Update Conditions iterate.conditions = Process() iterate.conditions.differentials = Methods.Transition.Lift_Cruise_Optimized.update_differentials iterate.conditions.acceleration = Methods.Common.Frames.update_acceleration iterate.conditions.altitude = Methods.Common.Aerodynamics.update_altitude iterate.conditions.atmosphere = Methods.Common.Aerodynamics.update_atmosphere iterate.conditions.gravity = Methods.Common.Weights.update_gravity iterate.conditions.freestream = Methods.Common.Aerodynamics.update_freestream iterate.conditions.orientations = Methods.Common.Frames.update_orientations iterate.conditions.propulsion = Methods.Common.Energy.update_thrust iterate.conditions.aerodynamics = Methods.Common.Aerodynamics.update_aerodynamics iterate.conditions.stability = Methods.Common.Aerodynamics.update_stability iterate.conditions.weights = Methods.Common.Weights.update_weights iterate.conditions.forces = Methods.Common.Frames.update_forces iterate.conditions.planet_position = Methods.Common.Frames.update_planet_position # Solve Residuals iterate.residuals = Process() iterate.residuals.total_forces = Methods.Transition.Constant_Acceleration_Constant_Pitchrate_Constant_Altitude.residual_total_forces # Set outputs iterate.outputs = Process() iterate.outputs.objective = Methods.Transition.Lift_Cruise_Optimized.objective iterate.outputs.constraints = Methods.Transition.Lift_Cruise_Optimized.constraints iterate.outputs.cache_inputs = Methods.Transition.Lift_Cruise_Optimized.cache_inputs # -------------------------------------------------------------- # Finalize - after iteration # -------------------------------------------------------------- finalize = self.process.finalize # Post Processing finalize.post_process = Process() finalize.post_process.inertial_position = Methods.Common.Frames.integrate_inertial_horizontal_position finalize.post_process.stability = Methods.Common.Aerodynamics.update_stability return
def __defaults__(self): """ This sets the default solver flow. Anything in here can be modified after initializing a segment. Assumptions: None Source: N/A Inputs: None Outputs: None Properties Used: None """ # -------------------------------------------------------------- # User inputs # -------------------------------------------------------------- self.altitude_start = None self.altitude_end = None self.air_speed_start = None self.air_speed_end = None self.objective = None # This will be a key self.minimize = True self.lift_coefficient_limit = 1.e20 self.seed_climb_rate = 100. * Units['feet/min'] self.algorithm = 'SLSQP' # -------------------------------------------------------------- # State # -------------------------------------------------------------- # conditions self.state.conditions.update( Conditions.Aerodynamics() ) # initials and unknowns ones_row = self.state.ones_row self.state.unknowns.throttle = ones_row(1) * 0.8 self.state.unknowns.body_angle = ones_row(1) * 5.0 * Units.degrees self.state.unknowns.flight_path_angle = ones_row(1) * 3.0 * Units.degrees self.state.unknowns.velocity = ones_row(1) * 1.0 self.state.residuals.forces = ones_row(2) * 0.0 self.state.inputs_last = None self.state.objective_value = 0.0 self.state.constraint_values = 0.0 # -------------------------------------------------------------- # The Solving Process # -------------------------------------------------------------- # -------------------------------------------------------------- # Initialize - before iteration # -------------------------------------------------------------- initialize = self.process.initialize initialize.expand_state = Methods.expand_state initialize.solved_mission = Methods.Climb.Optimized.solve_linear_speed_constant_rate initialize.differentials = Methods.Common.Numerics.initialize_differentials_dimensionless initialize.conditions = SUAVE.Methods.skip # -------------------------------------------------------------- # Converge - starts iteration # -------------------------------------------------------------- converge = self.process.converge converge.converge_root = Methods.converge_opt # -------------------------------------------------------------- # Iterate - this is iterated # -------------------------------------------------------------- iterate = self.process.iterate # Update Initials iterate.initials = Process() iterate.initials.time = Methods.Common.Frames.initialize_time iterate.initials.weights = Methods.Common.Weights.initialize_weights iterate.initials.inertial_position = Methods.Common.Frames.initialize_inertial_position iterate.initials.planet_position = Methods.Common.Frames.initialize_planet_position # Unpack Unknowns iterate.unknowns = Process() iterate.unknowns.mission = Methods.Climb.Optimized.unpack_unknowns # Update Conditions iterate.conditions = Process() iterate.conditions.differentials = Methods.Climb.Optimized.update_differentials iterate.conditions.acceleration = Methods.Common.Frames.update_acceleration iterate.conditions.altitude = Methods.Common.Aerodynamics.update_altitude iterate.conditions.atmosphere = Methods.Common.Aerodynamics.update_atmosphere iterate.conditions.gravity = Methods.Common.Weights.update_gravity iterate.conditions.freestream = Methods.Common.Aerodynamics.update_freestream iterate.conditions.orientations = Methods.Common.Frames.update_orientations iterate.conditions.propulsion = Methods.Common.Energy.update_thrust iterate.conditions.aerodynamics = Methods.Common.Aerodynamics.update_aerodynamics iterate.conditions.stability = Methods.Common.Aerodynamics.update_stability iterate.conditions.weights = Methods.Common.Weights.update_weights iterate.conditions.forces = Methods.Common.Frames.update_forces iterate.conditions.planet_position = Methods.Common.Frames.update_planet_position # Solve Residuals iterate.residuals = Process() iterate.residuals.total_forces = Methods.Climb.Common.residual_total_forces # Set outputs iterate.outputs = Process() iterate.outputs.objective = Methods.Climb.Optimized.objective iterate.outputs.constraints = Methods.Climb.Optimized.constraints iterate.outputs.cache_inputs = Methods.Climb.Optimized.cache_inputs # -------------------------------------------------------------- # Finalize - after iteration # -------------------------------------------------------------- finalize = self.process.finalize # Post Processing finalize.post_process = Process() finalize.post_process.inertial_position = Methods.Common.Frames.integrate_inertial_horizontal_position finalize.post_process.stability = Methods.Common.Aerodynamics.update_stability return
def __defaults__(self): """ This sets the default solver flow. Anything in here can be modified after initializing a segment. Assumptions: None Source: N/A Inputs: None Outputs: None Properties Used: None """ # -------------------------------------------------------------- # User inputs # -------------------------------------------------------------- self.altitude_start = 20. * Units.km # must be greater than end self.altitude_end = 0. * Units.km # default is zero self.throttle = 0.5 # can alter if engines, set engines num to zero if glider self.descent_rate = 3 * Units.m / Units.s # remember z is down self.equivalent_air_speed = 10 * Units.m / Units.s # -------------------------------------------------------------- # State # -------------------------------------------------------------- # conditions self.state.conditions.update(Conditions.Aerodynamics()) # initials and unknowns ones_row = self.state.ones_row self.state.unknowns.body_angle = ones_row(1) * 5.0 * Units.deg self.state.unknowns.wind_angle = ones_row(1) * 0.0 * Units.deg self.state.residuals.forces = ones_row(2) * 0.0 # -------------------------------------------------------------- # The Solving Process # -------------------------------------------------------------- # -------------------------------------------------------------- # Initialize - before iteration # -------------------------------------------------------------- initialize = self.process.initialize initialize.expand_state = Methods.expand_state initialize.differentials = Methods.Common.Numerics.initialize_differentials_dimensionless # initialize.conditions = Methods.Descent.Constant_Throttle_Constant_Rate.initialize_conditions # initialize.velocities = Methods.Descent.Constant_Throttle_Constant_Rate.update_velocity_vector_from_wind_angle # initialize.differentials_altitude = Methods.Descent.Constant_Throttle_Constant_Rate.update_differentials_altitude initialize.conditions = Constant_Throttle_Constant_Rate_Meth.initialize_conditions initialize.velocities = Constant_Throttle_Constant_Rate_Meth.update_velocity_vector_from_wind_angle initialize.differentials_altitude = Constant_Throttle_Constant_Rate_Meth.update_differentials_altitude # -------------------------------------------------------------- # Converge - starts iteration # -------------------------------------------------------------- converge = self.process.converge converge.converge_root = Methods.converge_root # -------------------------------------------------------------- # Iterate - this is iterated # -------------------------------------------------------------- iterate = self.process.iterate # Update Initials iterate.initials = Process() iterate.initials.time = Methods.Common.Frames.initialize_time iterate.initials.weights = Methods.Common.Weights.initialize_weights iterate.initials.inertial_position = Methods.Common.Frames.initialize_inertial_position iterate.initials.planet_position = Methods.Common.Frames.initialize_planet_position # Unpack Unknowns iterate.unknowns = Process() iterate.unknowns.mission = Constant_Throttle_Constant_Rate_Meth.unpack_body_angle #Methods.Descent.Constant_Throttle_Constant_Rate.unpack_body_angle # Update Conditions iterate.conditions = Process() iterate.conditions.velocities = Constant_Throttle_Constant_Rate_Meth.update_velocity_vector_from_wind_angle #Methods.Descent.Constant_Throttle_Constant_Rate.update_velocity_vector_from_wind_angle iterate.conditions.differentials_a = Constant_Throttle_Constant_Rate_Meth.update_differentials_altitude #Methods.Descent.Constant_Throttle_Constant_Rate.update_differentials_altitude iterate.conditions.differentials_b = Methods.Common.Numerics.update_differentials_time iterate.conditions.acceleration = Methods.Common.Frames.update_acceleration iterate.conditions.altitude = Methods.Common.Aerodynamics.update_altitude iterate.conditions.atmosphere = Methods.Common.Aerodynamics.update_atmosphere iterate.conditions.gravity = Methods.Common.Weights.update_gravity iterate.conditions.freestream = Methods.Common.Aerodynamics.update_freestream iterate.conditions.orientations = Methods.Common.Frames.update_orientations iterate.conditions.aerodynamics = Methods.Common.Aerodynamics.update_aerodynamics iterate.conditions.stability = Methods.Common.Aerodynamics.update_stability iterate.conditions.propulsion = Methods.Common.Energy.update_thrust iterate.conditions.weights = Methods.Common.Weights.update_weights iterate.conditions.forces = Methods.Common.Frames.update_forces iterate.conditions.planet_position = Methods.Common.Frames.update_planet_position # Solve Residuals iterate.residuals = Process() iterate.residuals.total_forces = Methods.Climb.Common.residual_total_forces # -------------------------------------------------------------- # Finalize - after iteration # -------------------------------------------------------------- finalize = self.process.finalize # Post Processing finalize.post_process = Process() finalize.post_process.inertial_position = Methods.Common.Frames.integrate_inertial_horizontal_position finalize.post_process.stability = Methods.Common.Aerodynamics.update_stability return
def __defaults__(self): # -------------------------------------------------------------- # User inputs # -------------------------------------------------------------- # self.example = 1.0 # -------------------------------------------------------------- # State # -------------------------------------------------------------- # conditions self.state.conditions.update(Conditions.Basic()) # initials and unknowns, Example... ##ones_row = self.state.ones_row ##self.state.unknowns.throttle = ones_row(1) * 0.5 ##self.state.unknowns.body_angle = ones_row(1) * 0.0 ##self.state.residuals.forces = ones_row(2) * 0.0 # -------------------------------------------------------------- # The Solving Process # -------------------------------------------------------------- # -------------------------------------------------------------- # Initialize - before iteration # -------------------------------------------------------------- initialize = self.process.initialize initialize.clear() initialize.expand_state = Methods.expand_state initialize.differentials = Methods.Common.Numerics.initialize_differentials_dimensionless initialize.conditions = None # -------------------------------------------------------------- # Converge - starts iteration # -------------------------------------------------------------- converge = self.process.converge converge.clear() converge.converge_root = Methods.converge_root # -------------------------------------------------------------- # Iterate - this is iterated # -------------------------------------------------------------- iterate = self.process.iterate iterate.clear() # Update Initials iterate.initials = Process() iterate.initials.time = Methods.Common.Frames.initialize_time # Unpack Unknowns iterate.unpack_unknowns = None # Update Conditions iterate.conditions = Process() iterate.conditions.differentials = Methods.Common.Numerics.update_differentials_time # Solve Residuals iterate.residuals = Process() # -------------------------------------------------------------- # Finalize - after iteration # -------------------------------------------------------------- finalize = self.process.finalize finalize.clear() finalize.post_process = Process() return