I tried some attempts to correct the "fsolve" error, but without any progression.
I'm writing here the part related to the mission setup (I don't know why but I'm unable to attach the code file at this moment here).
If possible, would you be so kind to give a rapid look in the code and see if there is something missing or wrong related to residuals and unknowns?
If I cannot fix this issues, I think I will just downgrade to the 2.1.0 version because the code was working well in this version.
# ----------------------------------------------------------------------
# Define the Mission
# ----------------------------------------------------------------------
def mission_setup(analyses,vehicle): # add ,vehicle
# ------------------------------------------------------------------
# Initialize the Mission
# ------------------------------------------------------------------
mission = SUAVE.Analyses.Mission.Sequential_Segments()
mission.tag = 'the_mission'
#airport
airport = SUAVE.Attributes.Airports.Airport()
airport.altitude = 0.0 * Units.ft #Denver 5434 ft
airport.delta_isa = 15.0 #ISA +15ºC
airport.atmosphere = SUAVE.Attributes.Atmospheres.Earth.US_Standard_1976()
mission.airport = airport
# unpack Segments module
Segments = SUAVE.Analyses.Mission.Segments
# base segment
base_segment = Segments.Segment()
atmosphere=SUAVE.Attributes.Atmospheres.Earth.US_Standard_1976()
planet = SUAVE.Attributes.Planets.Earth()
#he battery network has a more complex voltage model that requires an additional unknown and residual.
ones_row = base_segment.state.ones_row
base_segment.process.iterate.initials.initialize_battery = SUAVE.Methods.Missions.Segments.Common.Energy.initialize_battery
base_segment.process.iterate.conditions.planet_position = SUAVE.Methods.skip
base_segment.state.numerics.number_control_points = 4
base_segment.process.iterate.unknowns.network = vehicle.propulsors.battery_propeller.unpack_unknowns
base_segment.process.iterate.residuals.network = vehicle.propulsors.battery_propeller.residuals
base_segment.state.unknowns.propeller_power_coefficient = 0.005 * ones_row(1)
base_segment.state.unknowns.battery_voltage_under_load = vehicle.propulsors.battery_propeller.battery.max_voltage * ones_row(1)
base_segment.state.residuals.network = 0. * ones_row(2)
# ------------------------------------------------------------------
# Takeoff Roll
# ------------------------------------------------------------------
segment = Segments.Ground.Takeoff(base_segment)
segment.tag = "Takeoff"
segment.analyses.extend( analyses.takeoff )
segment.battery_energy = vehicle.propulsors.battery_propeller.battery.max_energy* 0.89 # Charge de battery to start
Vstall_ft = 140 #ft/s # 153.61 km/h
Vstall = Vstall_ft/3.281
segment.velocity_start = 0.* Units['m/s']
segment.velocity_end = 1.2*Vstall * Units['m/s']
TLF = 800 * Units.meters # Take-off field lenght in meters
t_TLF = 2*TLF/(segment.velocity_end)
segment.friction_coefficient = 0.04
segment.time = t_TLF
segment.state.unknowns.throttle = 0.85 * ones_row(1)
#print('Segment velocity end (m/s): ',segment.velocity_end)
#print('TFL (m): ', TLF)
#print('t_takeoff (s): ',t_TLF)
# add to misison
mission.append_segment(segment)
# ------------------------------------------------------------------
# First Climb Segment: Constant Speed, Constant Rate
# ------------------------------------------------------------------
segment = Segments.Climb.Constant_Speed_Constant_Rate(base_segment)
segment.tag = "climb_1"
segment.analyses.extend( analyses.takeoff )
#segment.state.numerics.number_control_points = 64
segment.battery_energy = vehicle.propulsors.battery_propeller.battery.max_energy #* 0.89 # Charge de battery to start
segment.altitude_start = 0.0 * Units.km
segment.altitude_end = 15000. * Units.ft
segment.air_speed = 244.1 * Units['km/hr'] #
segment.climb_rate = 1750. * Units['ft/min']
segment.state.unknowns.throttle = 0.85 * ones_row(1) #that means that the initial guess for your throttle setting in that segment is 85%. The true value will be calculated through the iteration process.
# add to misison
mission.append_segment(segment)
# ------------------------------------------------------------------
# Second Climb Segment: Constant Speed, Constant Rate
# ------------------------------------------------------------------
segment = Segments.Climb.Constant_Speed_Constant_Rate(base_segment)
segment.tag = "climb_2"
segment.analyses.extend( analyses.cruise )
segment.altitude_end = 20000. * Units.ft
segment.air_speed = 297.5 * Units['km/hr']
segment.climb_rate = 1300. * Units['ft/min']
segment.state.unknowns.throttle = 0.9 * ones_row(1)
# add to mission
mission.append_segment(segment)
# ------------------------------------------------------------------
# Cruise Segment: Constant Speed, Constant Altitude
# ------------------------------------------------------------------
segment = Segments.Cruise.Constant_Speed_Constant_Altitude(base_segment)
segment.tag = "cruise"
segment.analyses.extend( analyses.cruise )
segment.air_speed = 336.6 * Units['km/hr'] # Ref 350 km/h
segment.distance = 330.0 * Units.km # Only cruise
segment.state.unknowns.throttle = 0.9 * ones_row(1)
# add to mission
mission.append_segment(segment)
# ------------------------------------------------------------------
# First Descent Segment: Constant Speed, Constant Rate
# ------------------------------------------------------------------
segment = Segments.Descent.Constant_Speed_Constant_Rate(base_segment)
segment.tag = "descent_1"
segment.analyses.extend( analyses.cruise )
segment.altitude_end = 7500. * Units.ft
segment.air_speed = 305.7 * Units['km/hr']
segment.descent_rate = 880. * Units['ft/min']
segment.state.unknowns.throttle = 0.9 * ones_row(1)
# add to mission
mission.append_segment(segment)
# ------------------------------------------------------------------
# Second Descent Segment: Constant Speed, Constant Rate
# ------------------------------------------------------------------
segment = Segments.Descent.Constant_Speed_Constant_Rate(base_segment)
segment.tag = "descent_2"
segment.analyses.extend( analyses.landing )
segment.altitude_end = 0. * Units.ft
segment.air_speed = 260.3 * Units['km/hr']
segment.descent_rate = 750. * Units['ft/min']
segment.state.unknowns.throttle = 0.9 * ones_row(1)
# add to mission
mission.append_segment(segment)