diff --git a/aviary/examples/external_subsystems/battery/battery_variable_meta_data.py b/aviary/examples/external_subsystems/battery/battery_variable_meta_data.py index 051221847..e0a979f68 100644 --- a/aviary/examples/external_subsystems/battery/battery_variable_meta_data.py +++ b/aviary/examples/external_subsystems/battery/battery_variable_meta_data.py @@ -17,14 +17,6 @@ meta_data=ExtendedMetaData ) -av.add_meta_data( - Aircraft.Battery.EFFICIENCY, - units=None, - desc="Battery efficiency (eta)", - default_value=0.85, - meta_data=ExtendedMetaData -) - av.add_meta_data( Aircraft.Battery.ENERGY_REQUIRED, units="kW*h", @@ -41,14 +33,6 @@ meta_data=ExtendedMetaData ) -av.add_meta_data( - Aircraft.Battery.MASS, - units="kg", - desc="Battery mass", - default_value=1.0, - meta_data=ExtendedMetaData -) - av.add_meta_data( Aircraft.Battery.N_PARALLEL, units=None, @@ -73,14 +57,6 @@ meta_data=ExtendedMetaData ) -av.add_meta_data( - Aircraft.Battery.VOLUME, - units="inch**3", - desc="Battery volume", - default_value=1.0, - meta_data=ExtendedMetaData -) - ##### CASE VALUES ##### av.add_meta_data( diff --git a/aviary/examples/external_subsystems/battery/battery_variables.py b/aviary/examples/external_subsystems/battery/battery_variables.py index 498c83c9e..551220281 100644 --- a/aviary/examples/external_subsystems/battery/battery_variables.py +++ b/aviary/examples/external_subsystems/battery/battery_variables.py @@ -13,16 +13,13 @@ class Aircraft(AviaryAircraft): # cell = single cell, battery = one case plus multiple cells - class Battery: + class Battery(AviaryAircraft.Battery): CURRENT_MAX = "aircraft:battery:current_max" - EFFICIENCY = "aircraft:battery:efficiency" ENERGY_REQUIRED = "aircraft:battery:energy_required" HEAT_CAPACITY = "aircraft:battery:heat_capacity" - MASS = "aircraft:battery:mass" N_PARALLEL = "aircraft:battery:n_parallel" N_SERIES = "aircraft:battery:n_series" VOLTAGE = "aircraft:battery:voltage" - VOLUME = "aircraft:battery:volume" class Case: HEAT_CAPACITY = "aircraft:battery:case:heat_capacity" diff --git a/aviary/examples/external_subsystems/engine_NPSS/table_engine_builder.py b/aviary/examples/external_subsystems/engine_NPSS/table_engine_builder.py index 0e3deab5d..1aaad993f 100644 --- a/aviary/examples/external_subsystems/engine_NPSS/table_engine_builder.py +++ b/aviary/examples/external_subsystems/engine_NPSS/table_engine_builder.py @@ -107,7 +107,7 @@ def build_mission(self, num_nodes, aviary_inputs): -engine_data[:, 4], units='lbm/s', desc='Current fuel flow rate ') - engine.add_output(Dynamic.Mission.ELECTRIC_POWER, + engine.add_output(Dynamic.Mission.ELECTRIC_POWER_IN, zeros_array, units='kW', desc='Current electric energy rate') diff --git a/aviary/interface/test/test_timeseries_report.py b/aviary/interface/test/test_timeseries_report.py index 599d222a5..71a1cf94c 100644 --- a/aviary/interface/test/test_timeseries_report.py +++ b/aviary/interface/test/test_timeseries_report.py @@ -23,7 +23,7 @@ def test_timeseries_report(self): max_iter=0) expected_header = [ - "time (s)", "altitude (ft)", "altitude_rate (ft/s)", "distance (m)", "drag (lbf)", + "time (s)", "altitude (ft)", "altitude_rate (ft/s)", "distance (m)", "drag (lbf)", "electric_power_in_total (kW)", "fuel_flow_rate_negative_total (lbm/h)", "mach (unitless)", "mach_rate (unitless/s)", "mass (kg)", "specific_energy_rate_excess (m/s)", "throttle (unitless)", "thrust_net_total (lbf)", "velocity (m/s)" @@ -31,7 +31,7 @@ def test_timeseries_report(self): expected_rows = [ [ - "0.0", "0.0", "8.333333333333337", "1.0", "21108.418300418845", + "0.0", "0.0", "8.333333333333337", "1.0", "21108.418300418845", "0.0", "-10492.593707324704", "0.2", "0.0001354166666666668", "79560.101698", "12.350271989430475", "0.565484286063171", "28478.788920867584", "68.05737270077049" diff --git a/aviary/mission/flight_phase_builder.py b/aviary/mission/flight_phase_builder.py index 8cc748274..df2fbb9d7 100644 --- a/aviary/mission/flight_phase_builder.py +++ b/aviary/mission/flight_phase_builder.py @@ -256,6 +256,11 @@ def build_phase(self, aviary_options: AviaryValues = None, phase_type=EquationsO output_name=Dynamic.Mission.FUEL_FLOW_RATE_NEGATIVE_TOTAL, units='lbm/h' ) + phase.add_timeseries_output( + Dynamic.Mission.ELECTRIC_POWER_IN_TOTAL, + output_name=Dynamic.Mission.ELECTRIC_POWER_IN_TOTAL, units='kW' + ) + phase.add_timeseries_output( Dynamic.Mission.ALTITUDE_RATE, output_name=Dynamic.Mission.ALTITUDE_RATE, units='ft/s' diff --git a/aviary/mission/flops_based/ode/mission_ODE.py b/aviary/mission/flops_based/ode/mission_ODE.py index 0658d18c9..12bcac72d 100644 --- a/aviary/mission/flops_based/ode/mission_ODE.py +++ b/aviary/mission/flops_based/ode/mission_ODE.py @@ -150,7 +150,8 @@ def setup(self): num_nodes=nn, aviary_inputs=aviary_options) if subsystem_mission is not None: add_subsystem_group = True - external_subsystem_group.add_subsystem(subsystem.name, subsystem_mission) + external_subsystem_group.add_subsystem(subsystem.name, + subsystem_mission) # Only add the external subsystem group if it has at least one subsystem. # Without this logic there'd be an empty OM group added to the ODE. diff --git a/aviary/models/engines/turbofan_28k_with_electric.deck b/aviary/models/engines/turbofan_28k_with_electric.deck new file mode 100644 index 000000000..3ccbebe77 --- /dev/null +++ b/aviary/models/engines/turbofan_28k_with_electric.deck @@ -0,0 +1,1112 @@ +Mach_Number (unitless), Altitude (ft), Throttle (unitless), Gross_Thrust (lbf), Ram_Drag (lbf), Fuel_Flow (lb/h), NOx_Rate (lb/h),electric_power_in (kW) + 0.0, 0.0, 21.0, 1446.4, 0.0, 842.2, 4.7876, 14.464 + 0.0, 0.0, 22.0, 2314.3, 0.0, 976.0, 5.1926, 23.143 + 0.0, 0.0, 24.0, 4049.9, 0.0, 1281.0, 6.6532, 40.499 + 0.0, 0.0, 26.0, 5785.6, 0.0, 1659.9, 8.2234, 57.856 + 0.0, 0.0, 30.0, 9642.7, 0.0, 2621.6, 12.0946, 96.427 + 0.0, 0.0, 34.0, 13499.8, 0.0, 3673.3, 15.0321, 134.998 + 0.0, 0.0, 38.0, 17356.9, 0.0, 4795.2, 17.5877, 173.56900000000002 + 0.0, 0.0, 42.0, 21214.0, 0.0, 5979.1, 19.8547, 212.14000000000001 + 0.0, 0.0, 46.0, 25071.1, 0.0, 7258.1, 33.3976, 250.71099999999998 + 0.0, 0.0, 48.0, 26999.7, 0.0, 7932.6, 49.2185, 269.997 + 0.0, 0.0, 50.0, 28928.1, 0.0, 8662.3, 61.9894, 289.281 + 0.0, 2000.0, 21.0, 1446.4, 0.0, 781.8, 5.2521, 14.464 + 0.0, 2000.0, 22.0, 2314.2, 0.0, 914.2, 5.1431, 23.142 + 0.0, 2000.0, 24.0, 4049.9, 0.0, 1220.2, 6.7284, 40.499 + 0.0, 2000.0, 26.0, 5785.6, 0.0, 1608.2, 8.4472, 57.856 + 0.0, 2000.0, 30.0, 9642.7, 0.0, 2572.5, 12.5205, 96.427 + 0.0, 2000.0, 34.0, 13499.7, 0.0, 3624.6, 15.6007, 134.997 + 0.0, 2000.0, 38.0, 17356.8, 0.0, 4748.2, 18.2407, 173.56799999999998 + 0.0, 2000.0, 42.0, 21213.8, 0.0, 5953.1, 20.6168, 212.138 + 0.0, 2000.0, 46.0, 25070.8, 0.0, 7274.3, 46.5192, 250.708 + 0.0, 2000.0, 48.0, 26999.7, 0.0, 8005.4, 61.6004, 269.997 + 0.0, 2000.0, 50.0, 28928.0, 0.0, 8769.0, 72.5104, 289.28000000000003 + 0.0, 5000.0, 21.0, 1338.1, 0.0, 706.8, 6.8008, 13.381 + 0.0, 5000.0, 22.0, 2140.9, 0.0, 828.3, 5.03, 21.409000000000002 + 0.0, 5000.0, 24.0, 3746.7, 0.0, 1111.0, 6.2319, 37.467 + 0.0, 5000.0, 26.0, 5352.3, 0.0, 1469.9, 7.9885, 53.523 + 0.0, 5000.0, 30.0, 8920.6, 0.0, 2355.4, 12.0275, 89.206 + 0.0, 5000.0, 34.0, 12488.9, 0.0, 3323.4, 15.1312, 124.889 + 0.0, 5000.0, 38.0, 16057.1, 0.0, 4353.1, 17.7742, 160.571 + 0.0, 5000.0, 42.0, 19625.3, 0.0, 5473.5, 20.1814, 196.253 + 0.0, 5000.0, 46.0, 23193.5, 0.0, 6708.4, 39.1314, 231.935 + 0.0, 5000.0, 48.0, 24977.9, 0.0, 7391.9, 57.3145, 249.77900000000002 + 0.0, 5000.0, 50.0, 26761.8, 0.0, 8104.6, 69.2582, 267.618 + 0.1, 0.0, 21.0, 2503.9, 1057.5, 905.8, 4.7726, 25.039 + 0.1, 0.0, 22.0, 3575.1, 1260.9, 1088.1, 5.7209, 35.751 + 0.1, 0.0, 24.0, 5626.3, 1576.4, 1525.4, 7.6905, 56.263000000000005 + 0.1, 0.0, 26.0, 7615.0, 1829.5, 2001.1, 9.4545, 76.15 + 0.1, 0.0, 30.0, 11922.9, 2280.3, 3129.8, 13.5965, 119.229 + 0.1, 0.0, 34.0, 16145.2, 2645.4, 4326.3, 16.5878, 161.452 + 0.1, 0.0, 38.0, 20316.5, 2959.7, 5587.6, 19.1578, 203.165 + 0.1, 0.0, 42.0, 24452.2, 3238.4, 6932.0, 26.8701, 244.52200000000002 + 0.1, 0.0, 46.0, 28560.1, 3489.2, 8389.7, 57.6579, 285.601 + 0.1, 0.0, 48.0, 30603.9, 3604.5, 9194.3, 69.2477, 306.03900000000004 + 0.1, 0.0, 50.0, 32642.3, 3714.3, 10032.8, 77.4403, 326.423 + 0.1, 2000.0, 21.0, 2330.3, 984.5, 824.4, 4.924, 23.303 + 0.1, 2000.0, 22.0, 3327.1, 1173.8, 991.2, 5.5336, 33.271 + 0.1, 2000.0, 24.0, 5235.7, 1467.4, 1391.5, 7.5234, 52.357 + 0.1, 2000.0, 26.0, 7086.3, 1702.9, 1826.8, 9.2983, 70.863 + 0.1, 2000.0, 30.0, 11094.9, 2122.6, 2859.5, 13.4284, 110.949 + 0.1, 2000.0, 34.0, 15023.5, 2462.3, 3960.7, 16.4467, 150.235 + 0.1, 2000.0, 38.0, 18904.9, 2754.8, 5117.1, 19.0209, 189.049 + 0.1, 2000.0, 42.0, 22752.9, 3013.8, 6361.1, 24.7835, 227.52900000000002 + 0.1, 2000.0, 46.0, 26574.2, 3246.4, 7721.3, 56.6411, 265.742 + 0.1, 2000.0, 48.0, 28476.4, 3353.7, 8462.9, 68.5093, 284.764 + 0.1, 2000.0, 50.0, 30372.6, 3455.8, 9235.9, 77.0405, 303.726 + 0.1, 5000.0, 21.0, 2084.6, 880.6, 738.0, 6.5816, 20.846 + 0.1, 5000.0, 22.0, 2976.4, 1050.0, 884.8, 4.9156, 29.764000000000003 + 0.1, 5000.0, 24.0, 4684.1, 1312.8, 1237.6, 6.8861, 46.841 + 0.1, 5000.0, 26.0, 6339.8, 1523.6, 1621.7, 8.6447, 63.398 + 0.1, 5000.0, 30.0, 9926.1, 1899.3, 2532.7, 12.6499, 99.26100000000001 + 0.1, 5000.0, 34.0, 13440.9, 2203.3, 3503.2, 15.6314, 134.409 + 0.1, 5000.0, 38.0, 16913.5, 2465.1, 4524.4, 18.1789, 169.135 + 0.1, 5000.0, 42.0, 20356.6, 2696.9, 5621.1, 20.4797, 203.566 + 0.1, 5000.0, 46.0, 23775.6, 2905.2, 6820.1, 42.0756, 237.756 + 0.1, 5000.0, 48.0, 25476.8, 3001.2, 7474.2, 58.5348, 254.768 + 0.1, 5000.0, 50.0, 27173.2, 3092.6, 8156.2, 69.8119, 271.732 + 0.1, 10000.0, 21.0, 1721.9, 727.2, 612.6, 9.402, 17.219 + 0.1, 10000.0, 22.0, 2458.8, 867.2, 730.7, 7.2271, 24.588 + 0.1, 10000.0, 24.0, 3869.8, 1084.5, 1014.8, 5.7309, 38.698 + 0.1, 10000.0, 26.0, 5237.7, 1258.8, 1324.4, 7.4445, 52.377 + 0.1, 10000.0, 30.0, 8200.9, 1569.4, 2059.1, 10.9423, 82.009 + 0.1, 10000.0, 34.0, 11104.9, 1820.8, 2841.8, 14.0989, 111.04899999999999 + 0.1, 10000.0, 38.0, 13974.0, 2037.3, 3665.3, 16.5692, 139.74 + 0.1, 10000.0, 42.0, 16818.6, 2229.1, 4548.6, 18.7998, 168.18599999999998 + 0.1, 10000.0, 46.0, 19643.6, 2401.3, 5515.6, 21.9454, 196.43599999999998 + 0.1, 10000.0, 48.0, 21049.0, 2480.6, 6042.3, 33.2727, 210.49 + 0.1, 10000.0, 50.0, 22450.7, 2556.3, 6592.6, 50.9804, 224.507 + 0.2, 0.0, 21.0, 3984.0, 2660.5, 927.8, 4.88, 39.84 + 0.2, 0.0, 22.0, 5132.8, 3015.2, 1158.3, 6.0773, 51.328 + 0.2, 0.0, 24.0, 7290.5, 3584.8, 1655.7, 8.2264, 72.905 + 0.2, 0.0, 26.0, 9344.4, 4050.6, 2168.2, 10.048, 93.444 + 0.2, 0.0, 30.0, 13714.4, 4891.5, 3335.6, 14.1832, 137.144 + 0.2, 0.0, 34.0, 17928.1, 5575.9, 4564.4, 17.1365, 179.28099999999998 + 0.2, 0.0, 38.0, 22048.5, 6167.1, 5839.6, 19.6518, 220.485 + 0.2, 0.0, 42.0, 26104.0, 6693.4, 7176.2, 31.254, 261.04 + 0.2, 0.0, 46.0, 30105.5, 7165.7, 8625.1, 60.8012, 301.055 + 0.2, 0.0, 48.0, 32088.4, 7383.6, 9408.5, 71.4541, 320.884 + 0.2, 0.0, 50.0, 34059.1, 7590.1, 10231.7, 78.754, 340.591 + 0.2, 2000.0, 21.0, 3705.8, 2475.9, 844.5, 4.8026, 37.058 + 0.2, 2000.0, 22.0, 4773.5, 2805.8, 1055.1, 5.8928, 47.735 + 0.2, 2000.0, 24.0, 6779.2, 3335.6, 1509.9, 8.0591, 67.792 + 0.2, 2000.0, 26.0, 8688.2, 3768.8, 1978.1, 9.8731, 86.882 + 0.2, 2000.0, 30.0, 12750.0, 4551.0, 3045.6, 14.0129, 127.5 + 0.2, 2000.0, 34.0, 16665.9, 5187.3, 4175.2, 16.9893, 166.65900000000002 + 0.2, 2000.0, 38.0, 20495.5, 5737.3, 5341.9, 19.5044, 204.955 + 0.2, 2000.0, 42.0, 24264.1, 6226.1, 6575.1, 28.1727, 242.641 + 0.2, 2000.0, 46.0, 27981.8, 6663.9, 7924.2, 59.5213, 279.818 + 0.2, 2000.0, 48.0, 29823.9, 6866.3, 8646.0, 70.5775, 298.23900000000003 + 0.2, 2000.0, 50.0, 31655.3, 7058.3, 9403.9, 78.2786, 316.553 + 0.2, 5000.0, 21.0, 3315.0, 2214.7, 755.5, 6.435, 33.15 + 0.2, 5000.0, 22.0, 4270.4, 2510.0, 941.0, 5.268, 42.704 + 0.2, 5000.0, 24.0, 6064.9, 2984.3, 1342.0, 7.4149, 60.649 + 0.2, 5000.0, 26.0, 7773.0, 3372.1, 1755.4, 9.2124, 77.73 + 0.2, 5000.0, 30.0, 11407.0, 4072.2, 2696.9, 13.2256, 114.07000000000001 + 0.2, 5000.0, 34.0, 14910.5, 4641.7, 3693.1, 16.1681, 149.105 + 0.2, 5000.0, 38.0, 18336.7, 5134.0, 4722.6, 18.6548, 183.36700000000002 + 0.2, 5000.0, 42.0, 21708.3, 5571.5, 5810.0, 20.9007, 217.083 + 0.2, 5000.0, 46.0, 25034.4, 5963.4, 6999.7, 46.548, 250.34400000000002 + 0.2, 5000.0, 48.0, 26682.2, 6144.6, 7635.7, 60.7973, 266.822 + 0.2, 5000.0, 50.0, 28321.1, 6316.5, 8304.7, 71.4843, 283.211 + 0.2, 10000.0, 21.0, 2738.0, 1829.0, 626.4, 9.2804, 27.38 + 0.2, 10000.0, 22.0, 3527.6, 2073.3, 775.5, 6.4797, 35.276 + 0.2, 10000.0, 24.0, 5010.5, 2465.5, 1098.5, 6.2413, 50.105000000000004 + 0.2, 10000.0, 26.0, 6421.8, 2786.1, 1431.7, 7.9908, 64.218 + 0.2, 10000.0, 30.0, 9424.6, 3365.1, 2191.4, 11.7561, 94.24600000000001 + 0.2, 10000.0, 34.0, 12319.4, 3836.1, 2994.6, 14.6148, 123.194 + 0.2, 10000.0, 38.0, 15150.2, 4243.1, 3825.2, 17.0282, 151.502 + 0.2, 10000.0, 42.0, 17936.1, 4604.8, 4701.2, 19.1798, 179.361 + 0.2, 10000.0, 46.0, 20683.4, 4929.0, 5659.9, 23.6308, 206.83400000000003 + 0.2, 10000.0, 48.0, 22045.5, 5078.8, 6173.0, 36.4956, 220.455 + 0.2, 10000.0, 50.0, 23399.5, 5221.0, 6712.2, 53.4919, 233.995 + 0.25, 0.0, 21.0, 4982.9, 3711.0, 967.7, 5.1347, 49.829 + 0.25, 0.0, 22.0, 6155.9, 4120.9, 1221.5, 6.4157, 61.559 + 0.25, 0.0, 24.0, 8353.0, 4791.8, 1741.2, 8.5818, 83.53 + 0.25, 0.0, 26.0, 10434.6, 5347.2, 2267.6, 10.7481, 104.346 + 0.25, 0.0, 30.0, 14837.1, 6358.1, 3458.3, 14.5379, 148.371 + 0.25, 0.0, 34.0, 19055.8, 7185.2, 4700.4, 17.4532, 190.558 + 0.25, 0.0, 38.0, 23164.2, 7901.7, 5979.8, 19.9304, 231.64200000000002 + 0.25, 0.0, 42.0, 27194.4, 8540.4, 7318.7, 34.2788, 271.944 + 0.25, 0.0, 46.0, 31158.1, 9112.7, 8772.0, 62.9527, 311.581 + 0.25, 0.0, 48.0, 33119.2, 9377.6, 9547.4, 72.8167, 331.19199999999995 + 0.25, 0.0, 50.0, 35064.8, 9627.7, 10368.8, 79.61, 350.648 + 0.25, 2000.0, 21.0, 4635.4, 3453.6, 881.2, 4.9403, 46.354 + 0.25, 2000.0, 22.0, 5725.7, 3834.8, 1113.2, 6.2358, 57.257 + 0.25, 2000.0, 24.0, 7767.9, 4458.7, 1587.7, 8.4148, 77.679 + 0.25, 2000.0, 26.0, 9702.8, 4975.4, 2068.9, 10.3133, 97.02799999999999 + 0.25, 2000.0, 30.0, 13794.8, 5915.8, 3157.8, 14.3694, 137.948 + 0.25, 2000.0, 34.0, 17715.3, 6684.5, 4299.7, 17.3076, 177.153 + 0.25, 2000.0, 38.0, 21533.5, 7351.2, 5470.6, 19.7854, 215.335 + 0.25, 2000.0, 42.0, 25278.1, 7944.4, 6705.3, 30.7493, 252.78099999999998 + 0.25, 2000.0, 46.0, 28960.8, 8474.8, 8057.1, 61.504, 289.608 + 0.25, 2000.0, 48.0, 30782.4, 8720.7, 8773.3, 71.9783, 307.824 + 0.25, 2000.0, 50.0, 32590.3, 8953.2, 9529.4, 79.1712, 325.903 + 0.25, 5000.0, 21.0, 4146.8, 3089.4, 787.7, 5.8398, 41.468 + 0.25, 5000.0, 22.0, 5122.4, 3430.7, 992.0, 5.6074, 51.224 + 0.25, 5000.0, 24.0, 6949.9, 3989.3, 1411.0, 7.7697, 69.499 + 0.25, 5000.0, 26.0, 8681.0, 4451.7, 1835.5, 9.5548, 86.81 + 0.25, 5000.0, 30.0, 12342.2, 5293.4, 2795.6, 13.5758, 123.42200000000001 + 0.25, 5000.0, 34.0, 15850.1, 5981.6, 3803.0, 16.4816, 158.501 + 0.25, 5000.0, 38.0, 19266.4, 6578.4, 4836.6, 18.9321, 192.66400000000002 + 0.25, 5000.0, 42.0, 22617.1, 7109.4, 5925.2, 21.9946, 226.171 + 0.25, 5000.0, 46.0, 25911.5, 7584.2, 7117.3, 49.402, 259.115 + 0.25, 5000.0, 48.0, 27541.0, 7804.3, 7748.5, 62.5764, 275.41 + 0.25, 5000.0, 50.0, 29158.9, 8012.2, 8415.7, 72.7322, 291.589 + 0.25, 10000.0, 21.0, 3424.9, 2551.5, 652.1, 8.6939, 34.249 + 0.25, 10000.0, 22.0, 4231.3, 2833.9, 816.4, 5.6904, 42.313 + 0.25, 10000.0, 24.0, 5741.3, 3295.8, 1153.9, 6.5846, 57.413000000000004 + 0.25, 10000.0, 26.0, 7171.8, 3678.2, 1496.8, 8.3269, 71.718 + 0.25, 10000.0, 30.0, 10196.9, 4374.2, 2270.9, 12.0944, 101.969 + 0.25, 10000.0, 34.0, 13095.1, 4943.3, 3083.3, 14.918, 130.951 + 0.25, 10000.0, 38.0, 15917.5, 5436.7, 3916.9, 17.295, 159.175 + 0.25, 10000.0, 42.0, 18685.9, 5875.8, 4794.1, 19.4143, 186.859 + 0.25, 10000.0, 46.0, 21407.5, 6268.5, 5754.5, 25.0166, 214.07500000000002 + 0.25, 10000.0, 48.0, 22754.0, 6450.6, 6263.1, 38.8691, 227.54 + 0.25, 10000.0, 50.0, 24090.7, 6622.7, 6801.4, 55.311, 240.907 + 0.3, 0.0, 21.0, 6173.4, 4945.6, 1022.8, 5.4835, 61.733999999999995 + 0.3, 0.0, 22.0, 7364.1, 5399.7, 1289.1, 6.7761, 73.641 + 0.3, 0.0, 24.0, 9594.3, 6156.5, 1828.9, 8.945, 95.943 + 0.3, 0.0, 26.0, 11702.0, 6790.9, 2370.2, 11.3695, 117.02 + 0.3, 0.0, 30.0, 16141.2, 7956.0, 3586.7, 14.9079, 161.412 + 0.3, 0.0, 34.0, 20374.2, 8914.9, 4845.9, 17.7911, 203.74200000000002 + 0.3, 0.0, 38.0, 24482.0, 9748.6, 6136.4, 20.2415, 244.82 + 0.3, 0.0, 42.0, 28498.9, 10491.9, 7487.2, 38.1853, 284.98900000000003 + 0.3, 0.0, 46.0, 32440.2, 11158.6, 8946.6, 65.3539, 324.402 + 0.3, 0.0, 48.0, 34385.6, 11467.0, 9722.6, 74.4559, 343.856 + 0.3, 0.0, 50.0, 36314.3, 11758.7, 10541.1, 80.6075, 363.14300000000003 + 0.3, 2000.0, 21.0, 5743.4, 4602.6, 931.5, 5.2941, 57.434 + 0.3, 2000.0, 22.0, 6850.3, 5024.9, 1175.0, 6.6001, 68.503 + 0.3, 2000.0, 24.0, 8923.2, 5728.8, 1668.1, 8.7823, 89.23200000000001 + 0.3, 2000.0, 26.0, 10882.3, 6318.8, 2161.9, 11.0244, 108.823 + 0.3, 2000.0, 30.0, 15008.5, 7402.8, 3275.4, 14.742, 150.085 + 0.3, 2000.0, 34.0, 18942.1, 8294.0, 4433.1, 17.6473, 189.421 + 0.3, 2000.0, 38.0, 22759.9, 9069.6, 5614.1, 20.0977, 227.59900000000002 + 0.3, 2000.0, 42.0, 26492.4, 9759.9, 6860.5, 34.3047, 264.92400000000004 + 0.3, 2000.0, 46.0, 30152.8, 10377.9, 8215.0, 63.8559, 301.528 + 0.3, 2000.0, 48.0, 31959.4, 10663.8, 8934.3, 73.6791, 319.594 + 0.3, 2000.0, 50.0, 33752.0, 10934.9, 9687.3, 80.2171, 337.52 + 0.3, 5000.0, 21.0, 5137.9, 4117.3, 832.0, 5.0092, 51.379 + 0.3, 5000.0, 22.0, 6128.4, 4495.5, 1046.5, 5.9682, 61.284 + 0.3, 5000.0, 24.0, 7983.1, 5125.5, 1481.4, 8.1293, 79.831 + 0.3, 5000.0, 26.0, 9735.9, 5653.8, 1917.6, 9.9046, 97.359 + 0.3, 5000.0, 30.0, 13427.5, 6623.9, 2899.2, 13.9423, 134.275 + 0.3, 5000.0, 34.0, 16946.8, 7421.7, 3920.4, 16.8161, 169.468 + 0.3, 5000.0, 38.0, 20362.5, 8115.9, 4962.2, 19.2379, 203.625 + 0.3, 5000.0, 42.0, 23701.7, 8733.8, 6061.4, 23.5209, 237.01700000000002 + 0.3, 5000.0, 46.0, 26976.2, 9286.8, 7256.0, 52.5299, 269.762 + 0.3, 5000.0, 48.0, 28592.9, 9543.0, 7890.1, 64.7543, 285.92900000000003 + 0.3, 5000.0, 50.0, 30196.6, 9785.7, 8554.4, 74.2115, 301.966 + 0.3, 10000.0, 21.0, 4243.8, 3400.8, 687.6, 7.8677, 42.438 + 0.3, 10000.0, 22.0, 5062.5, 3713.6, 860.4, 4.908, 50.625 + 0.3, 10000.0, 24.0, 6595.3, 4234.8, 1211.0, 6.9375, 65.953 + 0.3, 10000.0, 26.0, 8043.8, 4671.6, 1563.1, 8.6667, 80.438 + 0.3, 10000.0, 30.0, 11094.2, 5473.9, 2354.8, 12.4504, 110.94200000000001 + 0.3, 10000.0, 34.0, 14002.0, 6133.6, 3177.8, 15.2398, 140.02 + 0.3, 10000.0, 38.0, 16824.1, 6707.5, 4018.5, 17.5905, 168.24099999999999 + 0.3, 10000.0, 42.0, 19583.3, 7218.6, 4904.6, 19.6927, 195.833 + 0.3, 10000.0, 46.0, 22288.8, 7676.1, 5867.0, 26.9467, 222.888 + 0.3, 10000.0, 48.0, 23624.2, 7887.9, 6378.4, 42.0826, 236.24200000000002 + 0.3, 10000.0, 50.0, 24949.6, 8088.6, 6913.7, 57.381, 249.49599999999998 + 0.3, 15000.0, 21.0, 3479.6, 2788.1, 567.1, 10.753, 34.796 + 0.3, 15000.0, 22.0, 4151.5, 3045.2, 705.0, 7.7596, 41.515 + 0.3, 15000.0, 24.0, 5409.3, 3473.3, 985.3, 5.6485, 54.093 + 0.3, 15000.0, 26.0, 6597.7, 3831.9, 1267.2, 7.317, 65.977 + 0.3, 15000.0, 30.0, 9100.3, 4490.8, 1900.3, 10.2364, 91.003 + 0.3, 15000.0, 34.0, 11486.0, 5032.6, 2558.6, 13.4803, 114.86 + 0.3, 15000.0, 38.0, 13801.0, 5503.8, 3231.5, 15.7326, 138.01 + 0.3, 15000.0, 42.0, 16064.5, 5923.6, 3939.7, 17.7439, 160.645 + 0.3, 15000.0, 46.0, 18284.0, 6299.3, 4708.7, 19.6831, 182.84 + 0.3, 15000.0, 48.0, 19379.7, 6473.2, 5117.8, 21.3254, 193.79700000000003 + 0.3, 15000.0, 50.0, 20466.5, 6637.9, 5546.1, 30.4095, 204.665 + 0.35, 0.0, 21.0, 7566.3, 6374.0, 1096.3, 5.9318, 75.663 + 0.35, 0.0, 22.0, 8770.7, 6863.1, 1379.4, 7.2407, 87.70700000000001 + 0.35, 0.0, 24.0, 11031.6, 7693.3, 1932.5, 9.3656, 110.316 + 0.35, 0.0, 26.0, 13168.6, 8399.6, 2472.9, 11.7648, 131.686 + 0.35, 0.0, 30.0, 17653.6, 9705.4, 3720.3, 15.2909, 176.536 + 0.35, 0.0, 34.0, 21914.4, 10786.9, 5002.2, 18.1525, 219.144 + 0.35, 0.0, 38.0, 26037.3, 11730.5, 6310.8, 20.5849, 260.373 + 0.35, 0.0, 42.0, 30057.1, 12571.0, 7691.3, 43.1208, 300.57099999999997 + 0.35, 0.0, 46.0, 33993.9, 13328.4, 9155.7, 67.9905, 339.939 + 0.35, 0.0, 48.0, 35932.2, 13677.3, 9939.7, 76.3155, 359.322 + 0.35, 0.0, 50.0, 37853.7, 14009.0, 10755.8, 81.718, 378.537 + 0.35, 2000.0, 21.0, 7039.8, 5932.0, 999.1, 5.7509, 70.39800000000001 + 0.35, 2000.0, 22.0, 8159.4, 6386.9, 1257.8, 7.0693, 81.594 + 0.35, 2000.0, 24.0, 10260.8, 7159.0, 1763.3, 9.2076, 102.60799999999999 + 0.35, 2000.0, 26.0, 12247.3, 7816.1, 2255.9, 11.5847, 122.473 + 0.35, 2000.0, 30.0, 16416.2, 9030.9, 3397.3, 15.1257, 164.162 + 0.35, 2000.0, 34.0, 20375.6, 10036.0, 4575.8, 18.0083, 203.756 + 0.35, 2000.0, 38.0, 24207.3, 10913.7, 5773.4, 20.4408, 242.073 + 0.35, 2000.0, 42.0, 27941.9, 11694.1, 7047.4, 39.005, 279.41900000000004 + 0.35, 2000.0, 46.0, 31598.2, 12396.5, 8403.2, 66.4441, 315.982 + 0.35, 2000.0, 48.0, 33398.3, 12719.4, 9133.8, 75.6132, 333.98300000000006 + 0.35, 2000.0, 50.0, 35183.5, 13027.6, 9884.0, 81.3882, 351.835 + 0.35, 5000.0, 21.0, 6297.7, 5306.8, 891.4, 5.1268, 62.977 + 0.35, 5000.0, 22.0, 7299.6, 5714.1, 1119.5, 6.4339, 72.99600000000001 + 0.35, 5000.0, 24.0, 9179.9, 6405.3, 1565.3, 8.5499, 91.79899999999999 + 0.35, 5000.0, 26.0, 10957.1, 6993.4, 2000.3, 10.2625, 109.57100000000001 + 0.35, 5000.0, 30.0, 14686.9, 8080.8, 3006.9, 14.3212, 146.869 + 0.35, 5000.0, 34.0, 18229.2, 8980.4, 4046.1, 17.1706, 182.292 + 0.35, 5000.0, 38.0, 21657.4, 9766.2, 5102.9, 19.5757, 216.574 + 0.35, 5000.0, 42.0, 24998.3, 10464.7, 6226.3, 25.9255, 249.983 + 0.35, 5000.0, 46.0, 28269.4, 11093.1, 7421.8, 55.8105, 282.694 + 0.35, 5000.0, 48.0, 29879.7, 11382.5, 8065.8, 67.2746, 298.797 + 0.35, 5000.0, 50.0, 31477.1, 11658.5, 8727.8, 75.9179, 314.771 + 0.35, 10000.0, 21.0, 5202.0, 4383.5, 735.2, 6.795, 52.02 + 0.35, 10000.0, 22.0, 6030.2, 4720.6, 919.0, 5.282, 60.302 + 0.35, 10000.0, 24.0, 7584.1, 5292.2, 1278.6, 7.346, 75.84100000000001 + 0.35, 10000.0, 26.0, 9052.7, 5778.6, 1629.9, 9.0072, 90.52700000000002 + 0.35, 10000.0, 30.0, 12134.6, 6677.8, 2441.6, 12.816, 121.346 + 0.35, 10000.0, 34.0, 15061.4, 7421.8, 3279.3, 15.5823, 150.614 + 0.35, 10000.0, 38.0, 17893.8, 8071.6, 4132.1, 17.9157, 178.938 + 0.35, 10000.0, 42.0, 20654.1, 8649.1, 5037.3, 20.0235, 206.541 + 0.35, 10000.0, 46.0, 23357.0, 9169.2, 6000.8, 29.5981, 233.57 + 0.35, 10000.0, 48.0, 24688.2, 9408.4, 6520.4, 45.9418, 246.882 + 0.35, 10000.0, 50.0, 26007.2, 9636.6, 7053.3, 59.5544, 260.072 + 0.35, 15000.0, 21.0, 4265.5, 3594.1, 604.8, 9.6899, 42.655 + 0.35, 15000.0, 22.0, 4945.3, 3871.2, 751.6, 6.6744, 49.453 + 0.35, 15000.0, 24.0, 6220.4, 4340.7, 1039.2, 6.0427, 62.204 + 0.35, 15000.0, 26.0, 7425.3, 4740.1, 1320.6, 7.6429, 74.253 + 0.35, 15000.0, 30.0, 9953.9, 5478.5, 1969.8, 10.8708, 99.539 + 0.35, 15000.0, 34.0, 12355.2, 6089.6, 2639.9, 13.8065, 123.552 + 0.35, 15000.0, 38.0, 14678.8, 6623.1, 3322.2, 16.0412, 146.78799999999998 + 0.35, 15000.0, 42.0, 16943.3, 7097.5, 4045.6, 18.0572, 169.433 + 0.35, 15000.0, 46.0, 19160.5, 7524.6, 4816.5, 19.9608, 191.60500000000002 + 0.35, 15000.0, 48.0, 20251.7, 7720.9, 5231.4, 22.6619, 202.51700000000002 + 0.35, 15000.0, 50.0, 21334.5, 7908.4, 5657.5, 33.1924, 213.345 + 0.4, 2000.0, 21.0, 8528.1, 7446.9, 1080.6, 6.2764, 85.281 + 0.4, 2000.0, 22.0, 9658.0, 7928.2, 1353.5, 7.5936, 96.58 + 0.4, 2000.0, 24.0, 11784.7, 8757.4, 1878.4, 9.7055, 117.84700000000001 + 0.4, 2000.0, 26.0, 13797.7, 9473.0, 2382.4, 12.1006, 137.977 + 0.4, 2000.0, 30.0, 18018.9, 10811.1, 3529.2, 15.5376, 180.18900000000002 + 0.4, 2000.0, 34.0, 22012.9, 11922.0, 4732.9, 18.4036, 220.12900000000002 + 0.4, 2000.0, 38.0, 25869.2, 12895.0, 5956.0, 20.8298, 258.692 + 0.4, 2000.0, 42.0, 29617.1, 13759.9, 7260.5, 44.5575, 296.171 + 0.4, 2000.0, 46.0, 33282.9, 14542.5, 8623.9, 69.2745, 332.829 + 0.4, 2000.0, 48.0, 35081.9, 14900.1, 9368.5, 77.6817, 350.819 + 0.4, 2000.0, 50.0, 36867.3, 15243.9, 10120.0, 82.6292, 368.67300000000006 + 0.4, 5000.0, 21.0, 7629.4, 6662.3, 963.1, 5.6477, 76.294 + 0.4, 5000.0, 22.0, 8640.5, 7093.1, 1203.9, 6.9524, 86.405 + 0.4, 5000.0, 24.0, 10543.4, 7835.5, 1666.8, 9.0427, 105.434 + 0.4, 5000.0, 26.0, 12344.4, 8476.0, 2111.2, 11.1881, 123.444 + 0.4, 5000.0, 30.0, 16121.1, 9673.7, 3123.3, 14.7282, 161.211 + 0.4, 5000.0, 34.0, 19694.5, 10668.0, 4184.8, 17.5597, 196.945 + 0.4, 5000.0, 38.0, 23144.4, 11539.2, 5263.3, 19.9572, 231.44400000000002 + 0.4, 5000.0, 42.0, 26497.4, 12313.3, 6414.0, 29.514, 264.97400000000005 + 0.4, 5000.0, 46.0, 29777.0, 13014.0, 7616.7, 59.0834, 297.77 + 0.4, 5000.0, 48.0, 31386.7, 13333.9, 8272.8, 70.033, 313.867 + 0.4, 5000.0, 50.0, 32983.8, 13641.9, 8936.1, 77.8099, 329.838 + 0.4, 10000.0, 21.0, 6302.4, 5503.6, 792.8, 5.5515, 63.024 + 0.4, 10000.0, 22.0, 7138.3, 5860.2, 987.2, 5.7899, 71.38300000000001 + 0.4, 10000.0, 24.0, 8710.6, 6473.9, 1360.1, 7.8236, 87.10600000000001 + 0.4, 10000.0, 26.0, 10198.9, 7003.7, 1718.7, 9.4457, 101.989 + 0.4, 10000.0, 30.0, 13319.7, 7994.3, 2535.4, 13.2086, 133.197 + 0.4, 10000.0, 34.0, 16272.3, 8816.6, 3391.4, 15.9573, 162.72299999999998 + 0.4, 10000.0, 38.0, 19122.7, 9537.0, 4262.0, 18.2845, 191.227 + 0.4, 10000.0, 42.0, 21893.2, 10177.2, 5188.5, 20.3954, 218.93200000000002 + 0.4, 10000.0, 46.0, 24602.9, 10756.8, 6158.4, 33.2437, 246.02900000000002 + 0.4, 10000.0, 48.0, 25932.9, 11021.4, 6687.2, 50.2607, 259.329 + 0.4, 10000.0, 50.0, 27252.3, 11276.0, 7221.2, 62.3136, 272.523 + 0.4, 15000.0, 21.0, 5168.0, 4512.9, 650.8, 8.4556, 51.68 + 0.4, 15000.0, 22.0, 5854.1, 4806.0, 806.0, 5.4657, 58.541000000000004 + 0.4, 15000.0, 24.0, 7144.6, 5310.3, 1104.8, 6.507, 71.44600000000001 + 0.4, 15000.0, 26.0, 8365.6, 5745.3, 1391.4, 8.064, 83.656 + 0.4, 15000.0, 30.0, 10925.8, 6558.6, 2044.8, 11.5264, 109.258 + 0.4, 15000.0, 34.0, 13348.1, 7234.0, 2729.6, 14.1632, 133.481 + 0.4, 15000.0, 38.0, 15686.6, 7825.6, 3426.3, 16.3919, 156.866 + 0.4, 15000.0, 42.0, 17959.2, 8351.4, 4166.5, 18.4104, 179.592 + 0.4, 15000.0, 46.0, 20182.2, 8827.3, 4942.1, 20.2805, 201.822 + 0.4, 15000.0, 48.0, 21272.7, 9044.6, 5364.6, 24.6069, 212.727 + 0.4, 15000.0, 50.0, 22355.5, 9253.8, 5792.4, 36.8914, 223.555 + 0.4, 20000.0, 21.0, 4204.2, 3671.1, 533.0, 11.3443, 42.042 + 0.4, 20000.0, 22.0, 4763.2, 3910.2, 655.9, 8.3987, 47.632 + 0.4, 20000.0, 24.0, 5814.2, 4321.4, 892.7, 5.1322, 58.141999999999996 + 0.4, 20000.0, 26.0, 6808.5, 4676.0, 1119.9, 6.6187, 68.08500000000001 + 0.4, 20000.0, 30.0, 8893.2, 5339.0, 1638.7, 9.2928, 88.932 + 0.4, 20000.0, 34.0, 10865.4, 5889.5, 2181.2, 12.2577, 108.654 + 0.4, 20000.0, 38.0, 12769.1, 6371.6, 2734.1, 14.3697, 127.691 + 0.4, 20000.0, 42.0, 14619.4, 6800.2, 3321.2, 16.2797, 146.194 + 0.4, 20000.0, 46.0, 16429.0, 7188.1, 3935.2, 18.0475, 164.29 + 0.4, 20000.0, 48.0, 17317.4, 7365.4, 4270.7, 18.9554, 173.174 + 0.4, 20000.0, 50.0, 18198.2, 7535.7, 4608.9, 19.8172, 181.982 + 0.45, 5000.0, 21.0, 9134.3, 8186.4, 1052.9, 6.2594, 91.34299999999999 + 0.45, 5000.0, 22.0, 10153.5, 8637.0, 1297.4, 7.5048, 101.535 + 0.45, 5000.0, 24.0, 12077.2, 9423.1, 1777.2, 9.5637, 120.772 + 0.45, 5000.0, 26.0, 13900.8, 10109.4, 2237.9, 11.8951, 139.008 + 0.45, 5000.0, 30.0, 17726.1, 11407.1, 3263.8, 15.2102, 177.261 + 0.45, 5000.0, 34.0, 21336.8, 12490.1, 4347.5, 18.0093, 213.368 + 0.45, 5000.0, 38.0, 24813.0, 13438.6, 5462.2, 20.4201, 248.13 + 0.45, 5000.0, 42.0, 28188.8, 14287.0, 6626.4, 34.5899, 281.888 + 0.45, 5000.0, 46.0, 31486.0, 15056.3, 7841.9, 62.5039, 314.86 + 0.45, 5000.0, 48.0, 33098.2, 15405.0, 8512.7, 72.9747, 330.98199999999997 + 0.45, 5000.0, 50.0, 34700.2, 15743.1, 9179.8, 79.8154, 347.00199999999995 + 0.45, 10000.0, 21.0, 7545.9, 6763.0, 865.0, 5.1128, 75.459 + 0.45, 10000.0, 22.0, 8388.6, 7135.9, 1062.6, 6.3291, 83.88600000000001 + 0.45, 10000.0, 24.0, 9978.2, 7786.1, 1449.5, 8.3334, 99.78200000000001 + 0.45, 10000.0, 26.0, 11485.1, 8353.6, 1820.8, 9.9346, 114.851 + 0.45, 10000.0, 30.0, 14645.9, 9426.7, 2648.1, 13.6721, 146.459 + 0.45, 10000.0, 34.0, 17629.4, 10322.5, 3522.4, 16.3907, 176.294 + 0.45, 10000.0, 38.0, 20501.5, 11106.9, 4421.5, 18.7295, 205.01500000000001 + 0.45, 10000.0, 42.0, 23290.9, 11808.7, 5360.6, 20.8118, 232.90900000000002 + 0.45, 10000.0, 46.0, 26014.7, 12444.7, 6339.6, 38.0177, 260.147 + 0.45, 10000.0, 48.0, 27346.9, 12733.1, 6880.0, 54.809, 273.469 + 0.45, 10000.0, 50.0, 28670.6, 13012.9, 7417.8, 65.5452, 286.706 + 0.45, 15000.0, 21.0, 6188.1, 5546.1, 708.2, 7.0161, 61.88100000000001 + 0.45, 15000.0, 22.0, 6879.8, 5852.6, 866.3, 5.0623, 68.798 + 0.45, 15000.0, 24.0, 8184.3, 6386.7, 1176.1, 6.9948, 81.843 + 0.45, 15000.0, 26.0, 9420.7, 6852.7, 1473.1, 8.533, 94.20700000000001 + 0.45, 15000.0, 30.0, 12014.0, 7734.1, 2135.7, 11.9737, 120.14 + 0.45, 15000.0, 34.0, 14461.5, 8469.7, 2834.4, 14.5758, 144.615 + 0.45, 15000.0, 38.0, 16817.6, 9113.8, 3553.9, 16.8157, 168.176 + 0.45, 15000.0, 42.0, 19105.8, 9690.3, 4304.2, 18.8064, 191.058 + 0.45, 15000.0, 46.0, 21340.5, 10212.6, 5087.2, 20.6468, 213.405 + 0.45, 15000.0, 48.0, 22433.2, 10449.4, 5519.7, 27.6021, 224.33200000000002 + 0.45, 15000.0, 50.0, 23518.8, 10679.1, 5949.6, 41.4721, 235.188 + 0.45, 20000.0, 21.0, 5034.5, 4512.0, 578.2, 9.9201, 50.345 + 0.45, 20000.0, 22.0, 5598.0, 4762.1, 703.5, 7.1405, 55.980000000000004 + 0.45, 20000.0, 24.0, 6660.5, 5197.7, 949.2, 5.5997, 66.605 + 0.45, 20000.0, 26.0, 7667.4, 5577.6, 1184.8, 7.0642, 76.67399999999999 + 0.45, 20000.0, 30.0, 9779.0, 6296.0, 1710.7, 9.6704, 97.79 + 0.45, 20000.0, 34.0, 11771.9, 6895.7, 2264.6, 12.6477, 117.719 + 0.45, 20000.0, 38.0, 13690.0, 7420.5, 2835.3, 14.7686, 136.9 + 0.45, 20000.0, 42.0, 15553.0, 7890.4, 3430.4, 16.6516, 155.53 + 0.45, 20000.0, 46.0, 17372.0, 8316.2, 4051.2, 18.3923, 173.72 + 0.45, 20000.0, 48.0, 18261.9, 8509.5, 4393.4, 19.298, 182.61900000000003 + 0.45, 20000.0, 50.0, 19145.4, 8696.4, 4733.9, 20.4806, 191.454 + 0.45, 25000.0, 21.0, 4060.5, 3638.9, 471.3, 12.8242, 40.605000000000004 + 0.45, 25000.0, 22.0, 4515.9, 3841.4, 569.7, 10.0682, 45.159 + 0.45, 25000.0, 24.0, 5374.3, 4193.9, 762.8, 5.6593, 53.743 + 0.45, 25000.0, 26.0, 6187.3, 4501.0, 947.5, 5.5964, 61.873000000000005 + 0.45, 25000.0, 30.0, 7892.2, 5081.8, 1360.8, 8.0513, 78.922 + 0.45, 25000.0, 34.0, 9501.3, 5566.7, 1795.6, 10.5022, 95.01299999999999 + 0.45, 25000.0, 38.0, 11049.7, 5991.0, 2244.5, 12.7089, 110.49700000000001 + 0.45, 25000.0, 42.0, 12553.9, 6370.9, 2711.4, 14.4744, 125.539 + 0.45, 25000.0, 46.0, 14022.2, 6715.2, 3198.7, 16.1089, 140.222 + 0.45, 25000.0, 48.0, 14740.5, 6871.3, 3466.7, 16.9602, 147.405 + 0.45, 25000.0, 50.0, 15453.9, 7022.7, 3734.8, 17.7627, 154.539 + 0.5, 10000.0, 21.0, 8935.3, 8163.6, 961.2, 5.8415, 89.353 + 0.5, 10000.0, 22.0, 9784.6, 8549.9, 1163.5, 6.9976, 97.846 + 0.5, 10000.0, 24.0, 11396.5, 9235.8, 1543.3, 8.8511, 113.965 + 0.5, 10000.0, 26.0, 12924.7, 9838.0, 1929.2, 10.5792, 129.247 + 0.5, 10000.0, 30.0, 16130.8, 10986.4, 2783.0, 14.2064, 161.308 + 0.5, 10000.0, 34.0, 19153.1, 11950.9, 3679.1, 16.8955, 191.53099999999998 + 0.5, 10000.0, 38.0, 22058.2, 12798.3, 4602.1, 19.2194, 220.58200000000002 + 0.5, 10000.0, 42.0, 24877.3, 13559.7, 5557.3, 21.8787, 248.773 + 0.5, 10000.0, 46.0, 27624.5, 14249.1, 6554.3, 44.2213, 276.245 + 0.5, 10000.0, 48.0, 28965.7, 14561.4, 7104.9, 59.1261, 289.65700000000004 + 0.5, 10000.0, 50.0, 30298.2, 14865.0, 7650.4, 69.0476, 302.982 + 0.5, 15000.0, 21.0, 7328.1, 6695.3, 785.0, 5.2669, 73.281 + 0.5, 15000.0, 22.0, 8025.5, 7012.9, 947.3, 5.7106, 80.255 + 0.5, 15000.0, 24.0, 9348.0, 7576.1, 1250.9, 7.4914, 93.48 + 0.5, 15000.0, 26.0, 10602.1, 8070.9, 1560.0, 9.017, 106.021 + 0.5, 15000.0, 30.0, 13232.8, 9014.0, 2243.0, 12.4829, 132.328 + 0.5, 15000.0, 34.0, 15712.4, 9806.1, 2959.9, 15.0577, 157.124 + 0.5, 15000.0, 38.0, 18095.8, 10502.0, 3698.5, 17.2835, 180.958 + 0.5, 15000.0, 42.0, 20408.6, 11127.3, 4462.3, 19.2512, 204.08599999999998 + 0.5, 15000.0, 46.0, 22662.5, 11693.7, 5260.4, 22.1856, 226.625 + 0.5, 15000.0, 48.0, 23762.9, 11950.1, 5699.8, 31.922, 237.62900000000002 + 0.5, 15000.0, 50.0, 24855.4, 12199.1, 6135.5, 46.874, 248.55400000000003 + 0.5, 20000.0, 21.0, 5962.3, 5447.4, 638.9, 8.1949, 59.623000000000005 + 0.5, 20000.0, 22.0, 6530.4, 5706.6, 767.5, 5.5864, 65.304 + 0.5, 20000.0, 24.0, 7607.5, 6165.9, 1008.8, 6.0754, 76.075 + 0.5, 20000.0, 26.0, 8628.5, 6569.1, 1253.7, 7.5239, 86.285 + 0.5, 20000.0, 30.0, 10770.3, 7337.8, 1795.3, 10.1237, 107.70299999999999 + 0.5, 20000.0, 34.0, 12788.9, 7983.4, 2363.9, 13.1017, 127.889 + 0.5, 20000.0, 38.0, 14729.0, 8550.6, 2949.4, 15.2078, 147.29 + 0.5, 20000.0, 42.0, 16611.6, 9060.2, 3555.1, 17.0676, 166.11599999999999 + 0.5, 20000.0, 46.0, 18446.0, 9521.6, 4187.2, 18.7919, 184.46 + 0.5, 20000.0, 48.0, 19341.8, 9731.0, 4535.0, 19.685, 193.418 + 0.5, 20000.0, 50.0, 20231.5, 9934.1, 4880.0, 22.2565, 202.315 + 0.5, 25000.0, 21.0, 4809.4, 4393.9, 518.7, 11.1067, 48.093999999999994 + 0.5, 25000.0, 22.0, 5268.5, 4603.8, 619.7, 8.5392, 52.685 + 0.5, 25000.0, 24.0, 6138.4, 4975.2, 809.4, 4.6585, 61.384 + 0.5, 25000.0, 26.0, 6963.0, 5301.2, 1001.5, 6.0297, 69.63 + 0.5, 25000.0, 30.0, 8692.6, 5923.0, 1426.9, 8.4555, 86.926 + 0.5, 25000.0, 34.0, 10322.4, 6444.9, 1873.7, 11.1348, 103.224 + 0.5, 25000.0, 38.0, 11888.8, 6903.5, 2334.1, 13.1197, 118.88799999999999 + 0.5, 25000.0, 42.0, 13408.7, 7315.6, 2809.6, 14.8632, 134.08700000000002 + 0.5, 25000.0, 46.0, 14889.7, 7688.8, 3305.8, 16.4821, 148.89700000000002 + 0.5, 25000.0, 48.0, 15612.7, 7857.9, 3578.7, 17.3225, 156.127 + 0.5, 25000.0, 50.0, 16331.0, 8022.2, 3850.1, 18.1143, 163.31 + 0.55, 10000.0, 21.0, 10473.2, 9708.0, 1063.1, 6.5663, 104.73200000000001 + 0.55, 10000.0, 22.0, 11331.3, 10107.0, 1273.2, 7.684, 113.31299999999999 + 0.55, 10000.0, 24.0, 12968.8, 10826.2, 1651.6, 9.4227, 129.688 + 0.55, 10000.0, 26.0, 14524.0, 11463.2, 2046.0, 11.6154, 145.24 + 0.55, 10000.0, 30.0, 17784.6, 12683.1, 2929.7, 14.7724, 177.84599999999998 + 0.55, 10000.0, 34.0, 20855.7, 13713.6, 3852.5, 17.4405, 208.55700000000002 + 0.55, 10000.0, 38.0, 23804.1, 14621.6, 4806.1, 19.7586, 238.041 + 0.55, 10000.0, 42.0, 26664.3, 15441.0, 5782.5, 24.8341, 266.643 + 0.55, 10000.0, 46.0, 29445.2, 16181.5, 6806.8, 51.3216, 294.452 + 0.55, 10000.0, 48.0, 30801.6, 16517.7, 7366.0, 63.4873, 308.016 + 0.55, 10000.0, 50.0, 32151.3, 16847.1, 7921.7, 72.7201, 321.513 + 0.55, 15000.0, 21.0, 8589.7, 7962.3, 866.4, 5.2947, 85.897 + 0.55, 15000.0, 22.0, 9294.1, 8290.2, 1034.6, 6.3704, 92.941 + 0.55, 15000.0, 24.0, 10637.7, 8880.9, 1337.3, 8.0399, 106.37700000000001 + 0.55, 15000.0, 26.0, 11913.6, 9404.0, 1653.0, 9.52, 119.13600000000001 + 0.55, 15000.0, 30.0, 14588.5, 10405.8, 2359.7, 13.0203, 145.885 + 0.55, 15000.0, 34.0, 17108.0, 11252.3, 3098.8, 15.5778, 171.08 + 0.55, 15000.0, 38.0, 19526.7, 11997.8, 3861.4, 17.7957, 195.26700000000002 + 0.55, 15000.0, 42.0, 21872.4, 12670.6, 4642.0, 19.7451, 218.72400000000002 + 0.55, 15000.0, 46.0, 24153.7, 13278.7, 5460.9, 25.1739, 241.537 + 0.55, 15000.0, 48.0, 25266.4, 13555.1, 5907.7, 37.7816, 252.66400000000002 + 0.55, 15000.0, 50.0, 26373.7, 13825.7, 6352.0, 52.6518, 263.737 + 0.55, 20000.0, 21.0, 6989.4, 6479.0, 703.3, 6.503, 69.89399999999999 + 0.55, 20000.0, 22.0, 7563.3, 6746.5, 837.0, 5.0064, 75.63300000000001 + 0.55, 20000.0, 24.0, 8657.4, 7228.1, 1077.2, 6.5972, 86.574 + 0.55, 20000.0, 26.0, 9696.4, 7654.5, 1327.5, 8.0013, 96.964 + 0.55, 20000.0, 30.0, 11874.4, 8471.2, 1888.0, 11.0514, 118.744 + 0.55, 20000.0, 34.0, 13925.6, 9161.1, 2474.4, 13.5941, 139.256 + 0.55, 20000.0, 38.0, 15894.5, 9768.8, 3078.5, 15.69, 158.945 + 0.55, 20000.0, 42.0, 17804.3, 10317.3, 3698.0, 17.5325, 178.043 + 0.55, 20000.0, 46.0, 19661.3, 10813.0, 4347.4, 19.2513, 196.613 + 0.55, 20000.0, 48.0, 20567.3, 11038.3, 4701.1, 20.1286, 205.673 + 0.55, 20000.0, 50.0, 21468.4, 11258.8, 5053.1, 25.1535, 214.68400000000003 + 0.55, 25000.0, 21.0, 5638.5, 5226.6, 569.1, 9.4348, 56.385 + 0.55, 25000.0, 22.0, 6102.2, 5443.2, 674.2, 6.9986, 61.022 + 0.55, 25000.0, 24.0, 6985.9, 5832.7, 863.0, 5.1538, 69.859 + 0.55, 25000.0, 26.0, 7825.0, 6177.5, 1059.5, 6.4814, 78.25 + 0.55, 25000.0, 30.0, 9583.8, 6838.0, 1499.7, 8.8813, 95.838 + 0.55, 25000.0, 34.0, 11240.1, 7395.8, 1960.8, 11.5975, 112.40100000000001 + 0.55, 25000.0, 38.0, 12829.7, 7887.1, 2435.5, 13.5701, 128.297 + 0.55, 25000.0, 42.0, 14371.4, 8330.6, 2922.0, 15.2974, 143.714 + 0.55, 25000.0, 46.0, 15870.7, 8731.4, 3431.6, 16.9093, 158.70700000000002 + 0.55, 25000.0, 48.0, 16601.9, 8913.6, 3708.9, 17.7331, 166.019 + 0.55, 25000.0, 50.0, 17329.5, 9092.0, 3985.6, 18.5183, 173.29500000000002 + 0.55, 30000.0, 21.0, 4506.0, 4176.6, 459.6, 12.3646, 45.06 + 0.55, 30000.0, 22.0, 4877.6, 4350.6, 541.3, 9.9465, 48.776 + 0.55, 30000.0, 24.0, 5585.4, 4663.2, 688.6, 6.3459, 55.854 + 0.55, 30000.0, 26.0, 6257.1, 4939.6, 841.1, 4.9951, 62.571000000000005 + 0.55, 30000.0, 30.0, 7665.1, 5469.3, 1183.3, 7.2442, 76.65100000000001 + 0.55, 30000.0, 34.0, 8990.5, 5916.4, 1541.7, 9.1534, 89.905 + 0.55, 30000.0, 38.0, 10262.7, 6310.2, 1910.9, 11.4896, 102.62700000000001 + 0.55, 30000.0, 42.0, 11496.3, 6665.6, 2289.2, 13.1001, 114.963 + 0.55, 30000.0, 46.0, 12696.1, 6986.9, 2685.7, 14.6049, 126.96100000000001 + 0.55, 30000.0, 48.0, 13281.5, 7133.2, 2900.4, 15.3716, 132.815 + 0.55, 30000.0, 50.0, 13863.3, 7275.8, 3114.4, 16.1055, 138.633 + 0.6, 15000.0, 21.0, 9973.8, 9348.2, 950.5, 5.9783, 99.738 + 0.6, 15000.0, 22.0, 10687.7, 9686.8, 1124.3, 7.0163, 106.87700000000001 + 0.6, 15000.0, 24.0, 12054.5, 10302.9, 1438.6, 8.6443, 120.545 + 0.6, 15000.0, 26.0, 13357.4, 10855.1, 1754.7, 10.0484, 133.574 + 0.6, 15000.0, 30.0, 16084.8, 11914.4, 2488.5, 13.592, 160.84799999999998 + 0.6, 15000.0, 34.0, 18652.7, 12814.1, 3252.5, 16.1377, 186.52700000000002 + 0.6, 15000.0, 38.0, 21114.4, 13607.6, 4042.6, 18.3508, 211.144 + 0.6, 15000.0, 42.0, 23501.9, 14327.1, 4845.2, 20.2894, 235.019 + 0.6, 15000.0, 46.0, 25820.8, 14977.7, 5688.9, 30.203, 258.20799999999997 + 0.6, 15000.0, 48.0, 26957.4, 15280.2, 6143.4, 44.8334, 269.574 + 0.6, 15000.0, 50.0, 28089.5, 15578.2, 6600.6, 58.0636, 280.895 + 0.6, 20000.0, 21.0, 8116.3, 7607.3, 769.9, 4.8739, 81.163 + 0.6, 20000.0, 22.0, 8697.8, 7883.4, 907.9, 5.6219, 86.978 + 0.6, 20000.0, 24.0, 9810.9, 8385.7, 1157.0, 7.1692, 98.109 + 0.6, 20000.0, 26.0, 10872.0, 8836.1, 1408.5, 8.504, 108.72 + 0.6, 20000.0, 30.0, 13092.7, 9699.5, 1989.8, 11.7084, 130.92700000000002 + 0.6, 20000.0, 34.0, 15183.5, 10432.9, 2596.5, 14.1211, 151.835 + 0.6, 20000.0, 38.0, 17187.7, 11079.9, 3223.0, 16.2145, 171.877 + 0.6, 20000.0, 42.0, 19131.3, 11666.4, 3858.8, 18.0426, 191.313 + 0.6, 20000.0, 46.0, 21019.2, 12196.8, 4528.3, 19.7561, 210.192 + 0.6, 20000.0, 48.0, 21944.6, 12443.4, 4888.4, 21.6513, 219.446 + 0.6, 20000.0, 50.0, 22865.7, 12685.9, 5250.5, 29.7394, 228.657 + 0.6, 25000.0, 21.0, 6548.0, 6137.4, 621.3, 7.8343, 65.48 + 0.6, 25000.0, 22.0, 7018.0, 6361.0, 730.0, 5.5192, 70.18 + 0.6, 25000.0, 24.0, 7917.0, 6767.3, 925.6, 5.6982, 79.17 + 0.6, 25000.0, 26.0, 8773.7, 7131.3, 1123.2, 6.9559, 87.73700000000001 + 0.6, 25000.0, 30.0, 10567.1, 7829.7, 1580.2, 9.3365, 105.671 + 0.6, 25000.0, 34.0, 12254.9, 8422.5, 2056.4, 12.09, 122.54899999999999 + 0.6, 25000.0, 38.0, 13872.9, 8945.6, 2548.6, 14.0586, 138.729 + 0.6, 25000.0, 42.0, 15441.9, 9419.5, 3048.5, 15.7736, 154.419 + 0.6, 25000.0, 46.0, 16965.8, 9848.6, 3573.0, 17.3772, 169.658 + 0.6, 25000.0, 48.0, 17712.8, 10048.1, 3855.9, 18.1848, 177.128 + 0.6, 25000.0, 50.0, 18456.6, 10244.4, 4140.2, 18.9671, 184.566 + 0.6, 30000.0, 21.0, 5233.4, 4905.1, 500.0, 10.771, 52.333999999999996 + 0.6, 30000.0, 22.0, 5610.0, 5084.7, 584.6, 8.4942, 56.1 + 0.6, 30000.0, 24.0, 6329.9, 5410.6, 736.4, 5.0619, 63.299 + 0.6, 30000.0, 26.0, 7015.7, 5702.4, 890.5, 5.441, 70.157 + 0.6, 30000.0, 30.0, 8451.2, 6262.4, 1245.5, 7.6673, 84.51200000000001 + 0.6, 30000.0, 34.0, 9802.1, 6737.8, 1616.1, 9.6371, 98.021 + 0.6, 30000.0, 38.0, 11096.9, 7157.0, 1998.7, 11.9431, 110.969 + 0.6, 30000.0, 42.0, 12352.3, 7536.9, 2387.5, 13.542, 123.523 + 0.6, 30000.0, 46.0, 13571.6, 7880.7, 2795.9, 15.0403, 135.716 + 0.6, 30000.0, 48.0, 14169.7, 8041.0, 3014.6, 15.7897, 141.697 + 0.6, 30000.0, 50.0, 14764.6, 8198.1, 3235.5, 16.5238, 147.64600000000002 + 0.6, 35000.0, 21.0, 4139.6, 3879.7, 401.9, 13.7651, 41.39600000000001 + 0.6, 35000.0, 22.0, 4438.7, 4022.7, 467.0, 11.4717, 44.387 + 0.6, 35000.0, 24.0, 5009.8, 4281.9, 583.8, 8.0866, 50.098000000000006 + 0.6, 35000.0, 26.0, 5553.5, 4513.7, 702.3, 5.2844, 55.535000000000004 + 0.6, 35000.0, 30.0, 6691.7, 4958.7, 975.1, 6.0676, 66.917 + 0.6, 35000.0, 34.0, 7762.5, 5336.2, 1259.8, 7.8379, 77.625 + 0.6, 35000.0, 38.0, 8788.5, 5669.1, 1553.9, 9.6313, 87.885 + 0.6, 35000.0, 42.0, 9783.3, 5970.6, 1853.8, 11.4063, 97.833 + 0.6, 35000.0, 46.0, 10749.7, 6243.7, 2167.6, 12.7926, 107.49700000000001 + 0.6, 35000.0, 48.0, 11223.1, 6370.7, 2335.6, 13.4895, 112.23100000000001 + 0.6, 35000.0, 50.0, 11695.0, 6496.0, 2504.7, 14.1725, 116.95 + 0.6, 37000.0, 21.0, 3758.1, 3522.0, 370.0, 14.2083, 37.581 + 0.6, 37000.0, 22.0, 4030.2, 3652.4, 428.7, 11.9308, 40.302 + 0.6, 37000.0, 24.0, 4549.5, 3888.3, 534.1, 8.6067, 45.495 + 0.6, 37000.0, 26.0, 5043.7, 4099.0, 640.8, 5.8649, 50.437 + 0.6, 37000.0, 30.0, 6078.5, 4504.0, 886.9, 5.62, 60.785000000000004 + 0.6, 37000.0, 34.0, 7051.8, 4847.5, 1143.9, 7.3337, 70.518 + 0.6, 37000.0, 38.0, 7984.2, 5150.1, 1409.1, 8.8243, 79.842 + 0.6, 37000.0, 42.0, 8888.2, 5424.2, 1680.1, 10.7527, 88.882 + 0.6, 37000.0, 46.0, 9766.3, 5672.7, 1963.0, 12.0908, 97.663 + 0.6, 37000.0, 48.0, 10197.0, 5788.4, 2114.5, 12.7641, 101.97 + 0.6, 37000.0, 50.0, 10625.8, 5902.3, 2266.3, 13.4179, 106.258 + 0.6, 39000.0, 21.0, 3410.5, 3195.9, 342.8, 13.7365, 34.105000000000004 + 0.6, 39000.0, 22.0, 3658.1, 3314.8, 396.0, 11.5252, 36.581 + 0.6, 39000.0, 24.0, 4130.3, 3529.5, 491.6, 8.3235, 41.303000000000004 + 0.6, 39000.0, 26.0, 4579.5, 3721.3, 588.5, 5.6738, 45.795 + 0.6, 39000.0, 30.0, 5520.0, 4089.6, 811.7, 5.3948, 55.2 + 0.6, 39000.0, 34.0, 6404.7, 4402.1, 1044.8, 7.0416, 64.047 + 0.6, 39000.0, 38.0, 7251.9, 4677.1, 1285.7, 8.4753, 72.51899999999999 + 0.6, 39000.0, 42.0, 8073.2, 4926.2, 1532.0, 10.3344, 80.732 + 0.6, 39000.0, 46.0, 8871.3, 5152.2, 1788.5, 11.6188, 88.713 + 0.6, 39000.0, 48.0, 9262.7, 5257.5, 1925.9, 12.2647, 92.62700000000001 + 0.6, 39000.0, 50.0, 9652.5, 5361.2, 2063.4, 12.8882, 96.525 + 0.6, 41000.0, 21.0, 3094.4, 2899.4, 318.6, 13.295, 30.944000000000003 + 0.6, 41000.0, 22.0, 3320.0, 3008.0, 366.6, 11.1448, 33.2 + 0.6, 41000.0, 24.0, 3749.4, 3203.6, 453.0, 8.0632, 37.494 + 0.6, 41000.0, 26.0, 4157.8, 3378.0, 541.0, 5.5011, 41.578 + 0.6, 41000.0, 30.0, 5012.8, 3713.2, 743.4, 5.178, 50.128 + 0.6, 41000.0, 34.0, 5816.8, 3997.3, 954.9, 6.7566, 58.168000000000006 + 0.6, 41000.0, 38.0, 6586.8, 4247.5, 1173.9, 8.1404, 65.86800000000001 + 0.6, 41000.0, 42.0, 7333.1, 4473.9, 1397.5, 9.9298, 73.331 + 0.6, 41000.0, 46.0, 8058.4, 4679.4, 1630.2, 11.1649, 80.584 + 0.6, 41000.0, 48.0, 8414.1, 4775.2, 1754.8, 11.7844, 84.141 + 0.6, 41000.0, 50.0, 8768.5, 4869.7, 1878.9, 12.376, 87.685 + 0.65, 15000.0, 21.0, 11481.3, 10854.1, 1035.9, 6.6394, 114.81299999999999 + 0.65, 15000.0, 22.0, 12207.7, 11204.2, 1215.3, 7.6447, 122.07700000000001 + 0.65, 15000.0, 24.0, 13603.0, 11846.9, 1542.7, 9.2444, 136.03 + 0.65, 15000.0, 26.0, 14935.6, 12427.0, 1867.4, 11.011, 149.356 + 0.65, 15000.0, 30.0, 17724.6, 13543.7, 2628.1, 14.1919, 177.24599999999998 + 0.65, 15000.0, 34.0, 20349.9, 14496.6, 3420.7, 16.7302, 203.49900000000002 + 0.65, 15000.0, 38.0, 22863.3, 15337.4, 4243.8, 18.9494, 228.633 + 0.65, 15000.0, 42.0, 25300.6, 16102.7, 5073.7, 20.8824, 253.006 + 0.65, 15000.0, 46.0, 27684.0, 16813.4, 5945.8, 37.6447, 276.84000000000003 + 0.65, 15000.0, 48.0, 28853.2, 17146.3, 6412.4, 52.4446, 288.53200000000004 + 0.65, 15000.0, 50.0, 30016.4, 17473.3, 6885.5, 63.165, 300.16400000000004 + 0.65, 20000.0, 21.0, 9343.5, 8833.4, 837.7, 5.2653, 93.435 + 0.65, 20000.0, 22.0, 9935.0, 9118.7, 979.9, 6.2209, 99.35000000000001 + 0.65, 20000.0, 24.0, 11071.1, 9642.6, 1239.6, 7.74, 110.71100000000001 + 0.65, 20000.0, 26.0, 12156.3, 10115.6, 1497.6, 9.0357, 121.56299999999999 + 0.65, 20000.0, 30.0, 14427.2, 11026.1, 2101.3, 12.2787, 144.27200000000002 + 0.65, 20000.0, 34.0, 16564.3, 11802.7, 2729.9, 14.6793, 165.643 + 0.65, 20000.0, 38.0, 18610.2, 12488.0, 3382.1, 16.7756, 186.102 + 0.65, 20000.0, 42.0, 20594.6, 13112.0, 4040.1, 18.6009, 205.946 + 0.65, 20000.0, 46.0, 22534.2, 13691.1, 4731.2, 20.3058, 225.342 + 0.65, 20000.0, 48.0, 23485.7, 13962.4, 5100.5, 24.9412, 234.857 + 0.65, 20000.0, 50.0, 24432.6, 14229.1, 5474.5, 36.2661, 244.326 + 0.65, 25000.0, 21.0, 7538.7, 7127.2, 674.5, 6.3118, 75.387 + 0.65, 25000.0, 22.0, 8016.8, 7358.3, 786.7, 4.8016, 80.168 + 0.65, 25000.0, 24.0, 8934.3, 7781.9, 990.5, 6.2373, 89.34299999999999 + 0.65, 25000.0, 26.0, 9810.5, 8164.3, 1193.3, 7.4577, 98.105 + 0.65, 25000.0, 30.0, 11644.1, 8900.5, 1667.2, 9.8122, 116.441 + 0.65, 25000.0, 34.0, 13369.6, 9528.5, 2161.3, 12.6125, 133.696 + 0.65, 25000.0, 38.0, 15021.2, 10082.6, 2673.6, 14.582, 150.21200000000002 + 0.65, 25000.0, 42.0, 16623.1, 10587.1, 3190.9, 16.2937, 166.231 + 0.65, 25000.0, 46.0, 18188.8, 11055.3, 3733.0, 17.8916, 181.888 + 0.65, 25000.0, 48.0, 18957.1, 11274.9, 4023.5, 18.6867, 189.571 + 0.65, 25000.0, 50.0, 19721.6, 11490.7, 4316.5, 19.4646, 197.21599999999998 + 0.65, 30000.0, 21.0, 6025.8, 5696.8, 541.2, 9.2686, 60.258 + 0.65, 30000.0, 22.0, 6408.8, 5882.4, 628.6, 7.1132, 64.08800000000001 + 0.65, 30000.0, 24.0, 7143.4, 6222.1, 786.8, 4.7609, 71.434 + 0.65, 30000.0, 26.0, 7844.8, 6528.7, 944.9, 5.9115, 78.44800000000001 + 0.65, 30000.0, 30.0, 9312.7, 7119.2, 1313.5, 8.114, 93.12700000000001 + 0.65, 30000.0, 34.0, 10693.4, 7622.5, 1697.7, 10.5176, 106.934 + 0.65, 30000.0, 38.0, 12015.1, 8066.7, 2096.0, 12.429, 120.15100000000001 + 0.65, 30000.0, 42.0, 13296.7, 8470.9, 2498.2, 14.0245, 132.967 + 0.65, 30000.0, 46.0, 14549.5, 8846.3, 2919.9, 15.5145, 145.495 + 0.65, 30000.0, 48.0, 15164.4, 9022.5, 3145.2, 16.2578, 151.644 + 0.65, 30000.0, 50.0, 15776.0, 9195.4, 3372.5, 16.9835, 157.76 + 0.65, 35000.0, 21.0, 4767.0, 4506.6, 433.5, 12.2477, 47.67 + 0.65, 35000.0, 22.0, 5071.1, 4654.4, 500.8, 10.0982, 50.711000000000006 + 0.65, 35000.0, 24.0, 5653.7, 4924.4, 622.1, 6.8639, 56.537 + 0.65, 35000.0, 26.0, 6210.0, 5168.0, 743.9, 4.422, 62.1 + 0.65, 35000.0, 30.0, 7373.7, 5637.1, 1027.3, 6.4841, 73.737 + 0.65, 35000.0, 34.0, 8468.2, 6037.1, 1322.7, 8.2441, 84.682 + 0.65, 35000.0, 38.0, 9515.4, 6389.7, 1628.5, 10.3632, 95.154 + 0.65, 35000.0, 42.0, 10530.9, 6710.5, 1938.8, 11.8544, 105.309 + 0.65, 35000.0, 46.0, 11523.6, 7008.6, 2262.9, 13.2342, 115.236 + 0.65, 35000.0, 48.0, 12010.7, 7148.5, 2436.1, 13.9247, 120.10700000000001 + 0.65, 35000.0, 50.0, 12495.8, 7286.2, 2609.9, 14.5969, 124.958 + 0.65, 37000.0, 21.0, 4328.0, 4091.4, 398.3, 12.7114, 43.28 + 0.65, 37000.0, 22.0, 4604.7, 4226.1, 459.1, 10.5799, 46.047 + 0.65, 37000.0, 24.0, 5134.7, 4472.0, 568.6, 7.4067, 51.347 + 0.65, 37000.0, 26.0, 5640.3, 4693.6, 678.3, 4.7981, 56.403000000000006 + 0.65, 37000.0, 30.0, 6698.2, 5120.4, 934.1, 6.0241, 66.982 + 0.65, 37000.0, 34.0, 7693.1, 5484.2, 1200.6, 7.7263, 76.93100000000001 + 0.65, 37000.0, 38.0, 8645.0, 5805.0, 1476.6, 9.5229, 86.45 + 0.65, 37000.0, 42.0, 9567.7, 6096.5, 1757.2, 11.1876, 95.677 + 0.65, 37000.0, 46.0, 10470.1, 6367.8, 2049.0, 12.5173, 104.70100000000001 + 0.65, 37000.0, 48.0, 10912.6, 6494.8, 2205.3, 13.1845, 109.126 + 0.65, 37000.0, 50.0, 11353.7, 6620.3, 2361.7, 13.8301, 113.537 + 0.65, 39000.0, 21.0, 3928.0, 3713.0, 368.4, 12.2906, 39.28 + 0.65, 39000.0, 22.0, 4179.8, 3835.7, 423.5, 10.2222, 41.798 + 0.65, 39000.0, 24.0, 4661.5, 4059.5, 522.5, 7.1754, 46.615 + 0.65, 39000.0, 26.0, 5121.2, 4261.1, 622.3, 4.6517, 51.211999999999996 + 0.65, 39000.0, 30.0, 6082.8, 4649.3, 854.5, 5.7838, 60.828 + 0.65, 39000.0, 34.0, 6987.2, 4980.3, 1096.2, 7.4195, 69.872 + 0.65, 39000.0, 38.0, 7852.3, 5272.0, 1347.0, 9.1325, 78.52300000000001 + 0.65, 39000.0, 42.0, 8690.6, 5536.9, 1601.9, 10.7517, 86.906 + 0.65, 39000.0, 46.0, 9510.4, 5783.5, 1866.9, 12.0307, 95.104 + 0.65, 39000.0, 48.0, 9912.8, 5899.1, 2008.5, 12.6712, 99.128 + 0.65, 39000.0, 50.0, 10313.9, 6013.4, 2149.9, 13.285, 103.139 + 0.65, 41000.0, 21.0, 3564.4, 3369.0, 341.4, 11.8988, 35.644 + 0.65, 41000.0, 22.0, 3793.7, 3481.1, 391.2, 9.8837, 37.937 + 0.65, 41000.0, 24.0, 4231.9, 3684.9, 480.9, 6.9499, 42.318999999999996 + 0.65, 41000.0, 26.0, 4649.7, 3868.3, 571.5, 4.5148, 46.497 + 0.65, 41000.0, 30.0, 5523.7, 4221.4, 782.2, 5.5521, 55.237 + 0.65, 41000.0, 34.0, 6345.8, 4522.5, 1001.6, 7.1247, 63.458000000000006 + 0.65, 41000.0, 38.0, 7131.8, 4787.6, 1229.2, 8.7518, 71.318 + 0.65, 41000.0, 42.0, 7893.5, 5028.4, 1460.7, 10.3306, 78.935 + 0.65, 41000.0, 46.0, 8638.7, 5252.7, 1701.3, 11.5623, 86.38700000000001 + 0.65, 41000.0, 48.0, 9004.5, 5357.9, 1829.8, 12.177, 90.045 + 0.65, 41000.0, 50.0, 9369.0, 5462.0, 1957.7, 12.7624, 93.69 + 0.7, 15000.0, 21.0, 13112.0, 12479.9, 1130.1, 7.3244, 131.12 + 0.7, 15000.0, 22.0, 13855.4, 12844.0, 1307.0, 8.2542, 138.554 + 0.7, 15000.0, 24.0, 15285.0, 13515.0, 1648.6, 9.8351, 152.85 + 0.7, 15000.0, 26.0, 16649.3, 14120.8, 1994.3, 11.9014, 166.493 + 0.7, 15000.0, 30.0, 19512.9, 15298.6, 2780.9, 14.827, 195.12900000000002 + 0.7, 15000.0, 34.0, 22204.6, 16304.7, 3606.0, 17.3622, 222.046 + 0.7, 15000.0, 38.0, 24778.2, 17192.6, 4465.4, 19.5875, 247.782 + 0.7, 15000.0, 42.0, 27296.1, 18024.8, 5329.0, 23.4826, 272.961 + 0.7, 15000.0, 46.0, 29762.1, 18805.2, 6235.3, 46.8096, 297.621 + 0.7, 15000.0, 48.0, 30970.5, 19170.8, 6719.8, 59.383, 309.705 + 0.7, 15000.0, 50.0, 32171.1, 19528.5, 7209.9, 68.7032, 321.711 + 0.7, 20000.0, 21.0, 10671.0, 10156.9, 912.4, 5.9185, 106.71000000000001 + 0.7, 20000.0, 22.0, 11276.8, 10454.1, 1053.1, 6.8056, 112.768 + 0.7, 20000.0, 24.0, 12440.5, 11000.8, 1323.8, 8.3011, 124.405 + 0.7, 20000.0, 26.0, 13551.0, 11494.4, 1598.0, 9.6082, 135.51 + 0.7, 20000.0, 30.0, 15882.3, 12454.6, 2221.7, 12.8741, 158.823 + 0.7, 20000.0, 34.0, 18073.4, 13274.7, 2876.5, 15.2715, 180.734 + 0.7, 20000.0, 38.0, 20168.3, 13998.5, 3557.9, 17.3754, 201.683 + 0.7, 20000.0, 42.0, 22217.1, 14676.3, 4242.1, 19.2013, 222.171 + 0.7, 20000.0, 46.0, 24224.9, 15312.9, 4960.5, 22.3983, 242.24900000000002 + 0.7, 20000.0, 48.0, 25208.3, 15610.7, 5344.4, 30.8596, 252.083 + 0.7, 20000.0, 50.0, 26185.8, 15902.7, 5731.7, 44.4788, 261.858 + 0.7, 25000.0, 21.0, 8610.5, 8195.8, 733.3, 4.7574, 86.105 + 0.7, 25000.0, 22.0, 9099.7, 8436.2, 843.9, 5.3542, 90.99700000000001 + 0.7, 25000.0, 24.0, 10039.4, 8878.3, 1056.5, 6.7662, 100.394 + 0.7, 25000.0, 26.0, 10936.2, 9277.4, 1272.2, 7.9972, 109.36200000000001 + 0.7, 25000.0, 30.0, 12818.5, 10053.9, 1762.2, 10.8094, 128.185 + 0.7, 25000.0, 34.0, 14587.3, 10716.9, 2276.5, 13.1665, 145.873 + 0.7, 25000.0, 38.0, 16278.4, 11302.1, 2811.5, 15.1405, 162.784 + 0.7, 25000.0, 42.0, 17932.2, 11850.1, 3349.2, 16.8532, 179.322 + 0.7, 25000.0, 46.0, 19552.5, 12364.7, 3912.9, 18.4489, 195.525 + 0.7, 25000.0, 48.0, 20346.0, 12605.2, 4213.9, 19.2419, 203.46 + 0.7, 25000.0, 50.0, 21135.9, 12842.2, 4516.7, 20.8046, 211.359 + 0.7, 30000.0, 21.0, 6883.1, 6551.6, 586.9, 7.7444, 68.831 + 0.7, 30000.0, 22.0, 7275.0, 6744.6, 673.2, 5.7924, 72.75 + 0.7, 30000.0, 24.0, 8027.3, 7099.1, 838.4, 5.2616, 80.27300000000001 + 0.7, 30000.0, 26.0, 8744.9, 7418.9, 1005.9, 6.4147, 87.449 + 0.7, 30000.0, 30.0, 10251.7, 8041.7, 1387.1, 8.5806, 102.51700000000001 + 0.7, 30000.0, 34.0, 11667.2, 8573.2, 1787.1, 11.0992, 116.67200000000001 + 0.7, 30000.0, 38.0, 13020.3, 9042.3, 2203.0, 12.9445, 130.203 + 0.7, 30000.0, 42.0, 14343.5, 9481.5, 2621.7, 14.5449, 143.435 + 0.7, 30000.0, 46.0, 15639.9, 9894.0, 3059.8, 16.0318, 156.399 + 0.7, 30000.0, 48.0, 16274.9, 10087.0, 3293.1, 16.7705, 162.749 + 0.7, 30000.0, 50.0, 16906.9, 10277.0, 3528.3, 17.4883, 169.06900000000002 + 0.7, 35000.0, 21.0, 5445.9, 5183.5, 468.4, 10.7259, 54.458999999999996 + 0.7, 35000.0, 22.0, 5757.0, 5337.1, 535.0, 8.7976, 57.57 + 0.7, 35000.0, 24.0, 6353.6, 5618.9, 661.7, 5.6702, 63.53600000000001 + 0.7, 35000.0, 26.0, 6922.8, 5873.2, 791.0, 4.8981, 69.22800000000001 + 0.7, 35000.0, 30.0, 8117.1, 6367.8, 1083.9, 6.9194, 81.171 + 0.7, 35000.0, 34.0, 9239.1, 6790.1, 1391.6, 8.6731, 92.391 + 0.7, 35000.0, 38.0, 10311.5, 7162.7, 1711.2, 10.8441, 103.11500000000001 + 0.7, 35000.0, 42.0, 11359.5, 7511.0, 2033.2, 12.3341, 113.595 + 0.7, 35000.0, 46.0, 12386.9, 7838.7, 2370.3, 13.7136, 123.869 + 0.7, 35000.0, 48.0, 12890.1, 7992.0, 2549.7, 14.4009, 128.901 + 0.7, 35000.0, 50.0, 13391.1, 8143.2, 2729.2, 15.0634, 133.911 + 0.7, 37000.0, 21.0, 4944.6, 4706.2, 429.8, 11.2106, 49.446000000000005 + 0.7, 37000.0, 22.0, 5227.7, 4846.2, 489.9, 9.3025, 52.277 + 0.7, 37000.0, 24.0, 5770.2, 5102.7, 604.1, 6.2444, 57.702 + 0.7, 37000.0, 26.0, 6287.7, 5334.1, 720.9, 4.4868, 62.877 + 0.7, 37000.0, 30.0, 7373.4, 5784.0, 985.0, 6.4444, 73.734 + 0.7, 37000.0, 34.0, 8393.3, 6168.3, 1262.6, 8.1407, 83.93299999999999 + 0.7, 37000.0, 38.0, 9368.0, 6507.2, 1551.0, 10.2088, 93.68 + 0.7, 37000.0, 42.0, 10320.4, 6823.9, 1842.1, 11.6506, 103.204 + 0.7, 37000.0, 46.0, 11254.0, 7121.8, 2146.1, 12.9821, 112.54 + 0.7, 37000.0, 48.0, 11711.4, 7261.3, 2308.0, 13.645, 117.114 + 0.7, 37000.0, 50.0, 12167.0, 7399.1, 2469.7, 14.282, 121.67 + 0.7, 39000.0, 21.0, 4487.8, 4271.2, 396.9, 10.8462, 44.878 + 0.7, 39000.0, 22.0, 4745.4, 4398.8, 451.5, 8.9937, 47.454 + 0.7, 39000.0, 24.0, 5238.7, 4632.3, 555.0, 6.0497, 52.387 + 0.7, 39000.0, 26.0, 5709.1, 4842.7, 660.9, 4.3014, 57.09100000000001 + 0.7, 39000.0, 30.0, 6696.0, 5252.1, 900.8, 6.1896, 66.96000000000001 + 0.7, 39000.0, 34.0, 7623.1, 5601.6, 1152.7, 7.8201, 76.23100000000001 + 0.7, 39000.0, 38.0, 8508.9, 5909.8, 1414.4, 9.8095, 85.089 + 0.7, 39000.0, 42.0, 9374.1, 6197.4, 1678.7, 11.196, 93.741 + 0.7, 39000.0, 46.0, 10222.7, 6468.4, 1955.0, 12.4794, 102.227 + 0.7, 39000.0, 48.0, 10638.4, 6595.3, 2101.9, 13.1156, 106.384 + 0.7, 39000.0, 50.0, 11052.6, 6720.7, 2248.2, 13.7233, 110.52600000000001 + 0.7, 41000.0, 21.0, 4072.9, 3876.1, 367.0, 10.4999, 40.729 + 0.7, 41000.0, 22.0, 4307.3, 3992.4, 416.6, 8.698, 43.073 + 0.7, 41000.0, 24.0, 4756.0, 4204.9, 510.3, 5.8669, 47.56 + 0.7, 41000.0, 26.0, 5183.6, 4396.4, 606.4, 4.1214, 51.836000000000006 + 0.7, 41000.0, 30.0, 6080.8, 4768.8, 824.2, 5.9412, 60.808 + 0.7, 41000.0, 34.0, 6923.7, 5086.9, 1052.9, 7.5111, 69.237 + 0.7, 41000.0, 38.0, 7728.7, 5367.1, 1290.6, 9.4241, 77.287 + 0.7, 41000.0, 42.0, 8515.0, 5628.6, 1531.1, 10.7626, 85.15 + 0.7, 41000.0, 46.0, 9286.2, 5874.9, 1781.7, 11.9963, 92.86200000000001 + 0.7, 41000.0, 48.0, 9664.1, 5990.4, 1914.9, 12.6068, 96.641 + 0.7, 41000.0, 50.0, 10040.5, 6104.4, 2047.5, 13.1893, 100.405 + 0.7, 43000.0, 21.0, 3695.7, 3516.9, 340.2, 10.182, 36.957 + 0.7, 43000.0, 22.0, 3909.2, 3623.1, 385.1, 8.4342, 39.092 + 0.7, 43000.0, 24.0, 4317.5, 3816.8, 469.8, 5.6921, 43.175000000000004 + 0.7, 43000.0, 26.0, 4706.4, 3991.1, 557.2, 3.9488, 47.064 + 0.7, 43000.0, 30.0, 5522.1, 4329.9, 754.8, 5.704, 55.221000000000004 + 0.7, 43000.0, 34.0, 6288.3, 4619.3, 962.3, 7.2124, 62.883 + 0.7, 43000.0, 38.0, 7019.9, 4874.0, 1178.2, 9.0518, 70.199 + 0.7, 43000.0, 42.0, 7734.6, 5111.8, 1396.8, 10.3435, 77.346 + 0.7, 43000.0, 46.0, 8435.5, 5335.9, 1624.2, 11.5304, 84.355 + 0.7, 43000.0, 48.0, 8778.7, 5440.7, 1745.0, 12.1165, 87.787 + 0.7, 43000.0, 50.0, 9121.2, 5544.6, 1865.4, 12.6763, 91.212 + 0.75, 20000.0, 21.0, 12099.2, 11578.4, 993.4, 6.5843, 120.992 + 0.75, 20000.0, 22.0, 12724.0, 11890.6, 1129.3, 7.3857, 127.24000000000001 + 0.75, 20000.0, 24.0, 13920.6, 12462.1, 1410.5, 8.8599, 139.20600000000002 + 0.75, 20000.0, 26.0, 15061.0, 12977.4, 1701.9, 10.3273, 150.61 + 0.75, 20000.0, 30.0, 17460.5, 13988.0, 2352.5, 13.4976, 174.605 + 0.75, 20000.0, 34.0, 19714.1, 14852.5, 3037.5, 15.8999, 197.141 + 0.75, 20000.0, 38.0, 21884.6, 15634.1, 3751.2, 18.0102, 218.846 + 0.75, 20000.0, 42.0, 24018.9, 16379.3, 4468.2, 19.8495, 240.18900000000002 + 0.75, 20000.0, 46.0, 26105.5, 17076.8, 5219.0, 27.2502, 261.055 + 0.75, 20000.0, 48.0, 27126.2, 17402.8, 5619.3, 39.5279, 271.262 + 0.75, 20000.0, 50.0, 28140.0, 17722.3, 6024.0, 53.0099, 281.40000000000003 + 0.75, 25000.0, 21.0, 9763.6, 9343.5, 797.1, 5.1492, 97.63600000000001 + 0.75, 25000.0, 22.0, 10267.9, 9595.8, 903.1, 5.8999, 102.679 + 0.75, 25000.0, 24.0, 11234.1, 10058.0, 1124.6, 7.2923, 112.34100000000001 + 0.75, 25000.0, 26.0, 12154.7, 10474.5, 1353.8, 8.5338, 121.54700000000001 + 0.75, 25000.0, 30.0, 14092.2, 11291.8, 1864.8, 11.4987, 140.922 + 0.75, 25000.0, 34.0, 15911.3, 11990.8, 2403.1, 13.7532, 159.113 + 0.75, 25000.0, 38.0, 17663.3, 12622.6, 2963.2, 15.732, 176.633 + 0.75, 25000.0, 42.0, 19385.8, 13225.0, 3526.7, 17.4568, 193.858 + 0.75, 25000.0, 46.0, 21070.1, 13789.1, 4116.3, 19.0568, 210.701 + 0.75, 25000.0, 48.0, 21894.0, 14052.8, 4429.6, 19.8471, 218.94 + 0.75, 25000.0, 50.0, 22712.7, 14311.6, 4746.3, 24.5603, 227.127 + 0.75, 30000.0, 21.0, 7805.4, 7469.7, 636.6, 6.2175, 78.054 + 0.75, 30000.0, 22.0, 8209.2, 7672.0, 718.6, 4.557, 82.09200000000001 + 0.75, 30000.0, 24.0, 8982.7, 8042.7, 891.3, 5.7565, 89.82700000000001 + 0.75, 30000.0, 26.0, 9719.7, 8376.8, 1069.8, 6.9217, 97.197 + 0.75, 30000.0, 30.0, 11270.2, 9032.1, 1467.1, 9.0687, 112.70200000000001 + 0.75, 30000.0, 34.0, 12725.6, 9592.3, 1885.5, 11.6454, 127.256 + 0.75, 30000.0, 38.0, 14127.3, 10098.7, 2320.9, 13.4935, 141.273 + 0.75, 30000.0, 42.0, 15505.2, 10581.3, 2759.3, 15.1024, 155.05200000000002 + 0.75, 30000.0, 46.0, 16852.7, 11033.5, 3217.1, 16.5918, 168.52700000000002 + 0.75, 30000.0, 48.0, 17511.6, 11244.9, 3461.0, 17.331, 175.11599999999999 + 0.75, 30000.0, 50.0, 18167.3, 11452.9, 3705.8, 18.0435, 181.673 + 0.75, 35000.0, 21.0, 6176.3, 5910.6, 506.6, 9.2124, 61.763000000000005 + 0.75, 35000.0, 22.0, 6496.8, 6071.7, 569.8, 7.5518, 64.968 + 0.75, 35000.0, 24.0, 7110.0, 6366.1, 702.3, 4.5131, 71.10000000000001 + 0.75, 35000.0, 26.0, 7694.4, 6631.6, 839.8, 5.3704, 76.944 + 0.75, 35000.0, 30.0, 8923.6, 7152.1, 1145.3, 7.3736, 89.236 + 0.75, 35000.0, 34.0, 10077.2, 7597.2, 1467.2, 9.1266, 100.772 + 0.75, 35000.0, 38.0, 11187.9, 7999.4, 1801.8, 11.3524, 111.879 + 0.75, 35000.0, 42.0, 12279.4, 8382.4, 2139.1, 12.8488, 122.794 + 0.75, 35000.0, 46.0, 13347.0, 8741.4, 2491.2, 14.2339, 133.47 + 0.75, 35000.0, 48.0, 13869.4, 8909.5, 2678.5, 14.9197, 138.694 + 0.75, 35000.0, 50.0, 14389.1, 9075.0, 2865.5, 15.5782, 143.89100000000002 + 0.75, 37000.0, 21.0, 5608.1, 5366.7, 464.3, 9.7221, 56.081 + 0.75, 37000.0, 22.0, 5899.7, 5513.5, 521.3, 8.0824, 58.997 + 0.75, 37000.0, 24.0, 6457.4, 5781.4, 640.8, 5.1113, 64.574 + 0.75, 37000.0, 26.0, 6988.6, 6023.0, 764.9, 4.9447, 69.88600000000001 + 0.75, 37000.0, 30.0, 8106.0, 6496.6, 1040.5, 6.8848, 81.06 + 0.75, 37000.0, 34.0, 9154.7, 6901.6, 1331.0, 8.58, 91.54700000000001 + 0.75, 37000.0, 38.0, 10164.2, 7267.4, 1632.9, 10.6998, 101.64200000000001 + 0.75, 37000.0, 42.0, 11156.1, 7615.6, 1937.4, 12.1486, 111.561 + 0.75, 37000.0, 46.0, 12126.5, 7942.2, 2255.5, 13.4852, 121.265 + 0.75, 37000.0, 48.0, 12601.0, 8094.8, 2424.1, 14.1465, 126.01 + 0.75, 37000.0, 50.0, 13073.6, 8245.6, 2592.2, 14.7777, 130.73600000000002 + 0.75, 39000.0, 21.0, 5090.3, 4871.0, 428.1, 9.413, 50.903000000000006 + 0.75, 39000.0, 22.0, 5355.6, 5004.7, 479.9, 7.8205, 53.556000000000004 + 0.75, 39000.0, 24.0, 5862.7, 5248.6, 588.2, 4.959, 58.627 + 0.75, 39000.0, 26.0, 6345.7, 5468.4, 700.9, 4.7432, 63.457 + 0.75, 39000.0, 30.0, 7361.5, 5899.2, 951.1, 6.612, 73.615 + 0.75, 39000.0, 34.0, 8314.7, 6267.5, 1214.7, 8.2426, 83.147 + 0.75, 39000.0, 38.0, 9232.3, 6600.2, 1488.9, 10.2835, 92.323 + 0.75, 39000.0, 42.0, 10133.6, 6916.7, 1765.7, 11.6794, 101.33600000000001 + 0.75, 39000.0, 46.0, 11015.2, 7213.4, 2054.3, 12.9644, 110.15200000000002 + 0.75, 39000.0, 48.0, 11446.7, 7352.4, 2207.5, 13.5999, 114.46700000000001 + 0.75, 39000.0, 50.0, 11876.3, 7489.5, 2360.1, 14.2058, 118.76299999999999 + 0.75, 41000.0, 21.0, 4620.0, 4420.7, 395.3, 9.1163, 46.2 + 0.75, 41000.0, 22.0, 4861.4, 4542.5, 442.3, 7.5735, 48.614 + 0.75, 41000.0, 24.0, 5322.7, 4764.6, 540.6, 4.8099, 53.227 + 0.75, 41000.0, 26.0, 5761.8, 4964.6, 642.9, 4.5487, 57.618 + 0.75, 41000.0, 30.0, 6685.2, 5356.6, 869.9, 6.3495, 66.852 + 0.75, 41000.0, 34.0, 7551.8, 5691.7, 1109.2, 7.9189, 75.518 + 0.75, 41000.0, 38.0, 8385.8, 5994.3, 1358.1, 9.8824, 83.85799999999999 + 0.75, 41000.0, 42.0, 9204.8, 6281.8, 1609.8, 11.2269, 92.04799999999999 + 0.75, 41000.0, 46.0, 10006.1, 6551.7, 1872.0, 12.4638, 100.061 + 0.75, 41000.0, 48.0, 10398.3, 6678.1, 2010.9, 13.0741, 103.98299999999999 + 0.75, 41000.0, 50.0, 10788.7, 6802.8, 2149.4, 13.6567, 107.88700000000001 + 0.75, 43000.0, 21.0, 4192.7, 4011.6, 365.5, 8.8388, 41.927 + 0.75, 43000.0, 22.0, 4412.3, 4122.6, 408.2, 7.3458, 44.123000000000005 + 0.75, 43000.0, 24.0, 4832.0, 4324.9, 497.1, 4.6778, 48.32 + 0.75, 43000.0, 26.0, 5231.3, 4506.9, 590.1, 4.3594, 52.313 + 0.75, 43000.0, 30.0, 6071.0, 4863.7, 796.3, 6.0969, 60.71 + 0.75, 43000.0, 34.0, 6858.8, 5168.6, 1013.4, 7.606, 68.58800000000001 + 0.75, 43000.0, 38.0, 7616.8, 5443.7, 1239.5, 9.4944, 76.168 + 0.75, 43000.0, 42.0, 8361.0, 5705.0, 1468.3, 10.7912, 83.61 + 0.75, 43000.0, 46.0, 9089.4, 5950.4, 1706.1, 11.9799, 90.89399999999999 + 0.75, 43000.0, 48.0, 9445.7, 6065.4, 1832.3, 12.5674, 94.45700000000001 + 0.75, 43000.0, 50.0, 9800.8, 6179.0, 1958.1, 13.1272, 98.008 + 0.79, 20000.0, 21.0, 13316.7, 12788.5, 1056.2, 7.085, 133.167 + 0.79, 20000.0, 22.0, 13958.5, 13113.3, 1191.3, 7.8437, 139.585 + 0.79, 20000.0, 24.0, 15183.9, 13704.9, 1486.2, 9.3251, 151.839 + 0.79, 20000.0, 26.0, 16353.4, 14240.4, 1788.3, 11.2602, 163.534 + 0.79, 20000.0, 30.0, 18814.0, 15292.3, 2465.9, 14.0199, 188.14000000000001 + 0.79, 20000.0, 34.0, 21136.0, 16205.7, 3176.5, 16.4247, 211.36 + 0.79, 20000.0, 38.0, 23387.7, 17048.6, 3921.0, 18.5484, 233.877 + 0.79, 20000.0, 42.0, 25599.2, 17851.6, 4668.4, 20.4014, 255.99200000000002 + 0.79, 20000.0, 46.0, 27757.9, 18601.6, 5449.7, 33.7104, 277.579 + 0.79, 20000.0, 48.0, 28812.4, 18951.7, 5865.5, 47.6231, 288.124 + 0.79, 20000.0, 50.0, 29859.3, 19294.4, 6286.5, 58.7708, 298.593 + 0.79, 25000.0, 21.0, 10746.2, 10320.3, 846.3, 5.6217, 107.462 + 0.79, 25000.0, 22.0, 11264.8, 10583.2, 952.1, 6.3348, 112.648 + 0.79, 25000.0, 24.0, 12254.3, 11061.5, 1184.1, 7.73, 122.54299999999999 + 0.79, 25000.0, 26.0, 13198.3, 11494.4, 1421.7, 8.9669, 131.983 + 0.79, 25000.0, 30.0, 15184.9, 12345.0, 1954.0, 11.9882, 151.849 + 0.79, 25000.0, 34.0, 17059.4, 13083.5, 2512.5, 14.2443, 170.59400000000002 + 0.79, 25000.0, 38.0, 18877.2, 13765.2, 3097.0, 16.2353, 188.77200000000002 + 0.79, 25000.0, 42.0, 20662.0, 14414.1, 3683.6, 17.9702, 206.62 + 0.79, 25000.0, 46.0, 22404.6, 15020.7, 4297.5, 19.5778, 224.046 + 0.79, 25000.0, 48.0, 23255.8, 15303.8, 4623.5, 21.9802, 232.558 + 0.79, 25000.0, 50.0, 24101.0, 15581.1, 4952.6, 29.7794, 241.01 + 0.79, 30000.0, 21.0, 8591.6, 8251.2, 675.0, 5.0944, 85.91600000000001 + 0.79, 30000.0, 22.0, 9006.5, 8461.9, 756.7, 4.8532, 90.065 + 0.79, 30000.0, 24.0, 9798.6, 8845.4, 937.1, 6.1642, 97.986 + 0.79, 30000.0, 26.0, 10554.1, 9192.5, 1122.5, 7.3259, 105.54100000000001 + 0.79, 30000.0, 30.0, 12143.7, 9874.3, 1536.0, 9.4741, 121.43700000000001 + 0.79, 30000.0, 34.0, 13643.5, 10466.3, 1970.6, 12.1021, 136.435 + 0.79, 30000.0, 38.0, 15097.6, 11012.7, 2424.8, 13.9599, 150.976 + 0.79, 30000.0, 42.0, 16525.2, 11532.5, 2881.4, 15.5783, 165.252 + 0.79, 30000.0, 46.0, 17919.4, 12018.9, 3357.8, 17.0748, 179.19400000000002 + 0.79, 30000.0, 48.0, 18600.1, 12245.8, 3611.2, 17.8146, 186.00099999999998 + 0.79, 30000.0, 50.0, 19277.1, 12468.8, 3865.8, 18.5261, 192.771 + 0.79, 35000.0, 21.0, 6798.9, 6529.5, 536.1, 8.112, 67.989 + 0.79, 35000.0, 22.0, 7128.1, 6697.1, 598.7, 6.5792, 71.281 + 0.79, 35000.0, 24.0, 7756.4, 7002.1, 737.5, 4.6585, 77.564 + 0.79, 35000.0, 26.0, 8355.2, 7277.7, 880.4, 5.7496, 83.552 + 0.79, 35000.0, 30.0, 9615.4, 7819.4, 1198.4, 7.7528, 96.154 + 0.79, 35000.0, 34.0, 10803.8, 8289.5, 1532.7, 9.805, 108.038 + 0.79, 35000.0, 38.0, 11956.1, 8723.4, 1881.7, 11.7838, 119.561 + 0.79, 35000.0, 42.0, 13087.1, 9135.9, 2232.9, 13.2881, 130.871 + 0.79, 35000.0, 46.0, 14191.7, 9522.2, 2599.6, 14.681, 141.917 + 0.79, 35000.0, 48.0, 14731.2, 9702.5, 2793.6, 15.3669, 147.312 + 0.79, 35000.0, 50.0, 15267.9, 9880.0, 2987.8, 16.0243, 152.679 + 0.79, 37000.0, 21.0, 6173.6, 5928.9, 490.9, 8.6418, 61.736000000000004 + 0.79, 37000.0, 22.0, 6473.1, 6081.5, 547.1, 7.1362, 64.73100000000001 + 0.79, 37000.0, 24.0, 7044.4, 6359.1, 672.3, 4.2757, 70.444 + 0.79, 37000.0, 26.0, 7588.8, 6609.9, 801.5, 5.3123, 75.888 + 0.79, 37000.0, 30.0, 8734.3, 7102.7, 1088.2, 7.2492, 87.34299999999999 + 0.79, 37000.0, 34.0, 9814.5, 7530.3, 1389.7, 8.9444, 98.145 + 0.79, 37000.0, 38.0, 10862.0, 7925.1, 1704.9, 11.1167, 108.62 + 0.79, 37000.0, 42.0, 11889.7, 8300.2, 2022.2, 12.5731, 118.897 + 0.79, 37000.0, 46.0, 12893.6, 8651.4, 2352.9, 13.9174, 128.936 + 0.79, 37000.0, 48.0, 13383.9, 8815.5, 2528.3, 14.5794, 133.839 + 0.79, 37000.0, 50.0, 13871.8, 8977.0, 2703.4, 15.2136, 138.718 + 0.79, 39000.0, 21.0, 5603.8, 5381.5, 452.2, 8.3724, 56.038000000000004 + 0.79, 39000.0, 22.0, 5876.3, 5520.5, 503.1, 6.9121, 58.763000000000005 + 0.79, 39000.0, 24.0, 6395.9, 5773.3, 616.7, 4.1333, 63.958999999999996 + 0.79, 39000.0, 26.0, 6890.8, 6001.3, 734.2, 5.0969, 68.908 + 0.79, 39000.0, 30.0, 7932.0, 6449.6, 994.3, 6.962, 79.32000000000001 + 0.79, 39000.0, 34.0, 8914.2, 6838.7, 1268.4, 8.5965, 89.14200000000001 + 0.79, 39000.0, 38.0, 9866.0, 7197.6, 1554.3, 10.685, 98.66 + 0.79, 39000.0, 42.0, 10799.9, 7538.5, 1842.4, 12.0879, 107.999 + 0.79, 39000.0, 46.0, 11712.2, 7857.8, 2143.1, 13.3818, 117.12200000000001 + 0.79, 39000.0, 48.0, 12157.8, 8007.0, 2302.2, 14.0174, 121.57799999999999 + 0.79, 39000.0, 50.0, 12601.3, 8153.9, 2461.0, 14.6254, 126.01299999999999 + 0.79, 41000.0, 21.0, 5086.2, 4884.2, 417.1, 8.114, 50.862 + 0.79, 41000.0, 22.0, 5334.1, 5010.8, 463.4, 6.7051, 53.34100000000001 + 0.79, 41000.0, 24.0, 5806.8, 5241.1, 566.2, 3.9985, 58.068000000000005 + 0.79, 41000.0, 26.0, 6256.7, 5448.5, 672.9, 4.8879, 62.567 + 0.79, 41000.0, 30.0, 7203.5, 5856.5, 909.4, 6.6888, 72.035 + 0.79, 41000.0, 34.0, 8096.2, 6210.4, 1158.0, 8.2594, 80.962 + 0.79, 41000.0, 38.0, 8961.4, 6536.8, 1417.5, 10.2694, 89.614 + 0.79, 41000.0, 42.0, 9810.0, 6846.6, 1679.3, 11.621, 98.10000000000001 + 0.79, 41000.0, 46.0, 10639.2, 7136.9, 1952.5, 12.8649, 106.39200000000001 + 0.79, 41000.0, 48.0, 11044.2, 7272.6, 2096.9, 13.4762, 110.44200000000001 + 0.79, 41000.0, 50.0, 11447.3, 7406.3, 2241.1, 14.0615, 114.473 + 0.8, 20000.0, 21.0, 13631.6, 13101.2, 1071.7, 7.2066, 136.316 + 0.8, 20000.0, 22.0, 14277.9, 13429.2, 1206.9, 7.9564, 142.779 + 0.8, 20000.0, 24.0, 15511.1, 14025.9, 1505.6, 9.4413, 155.11100000000002 + 0.8, 20000.0, 26.0, 16688.8, 14567.1, 1810.3, 11.3981, 166.888 + 0.8, 20000.0, 30.0, 19165.5, 15629.4, 2495.5, 14.1535, 191.655 + 0.8, 20000.0, 34.0, 21509.9, 16559.4, 3213.1, 16.5599, 215.09900000000002 + 0.8, 20000.0, 38.0, 23783.7, 17418.7, 3966.3, 18.6886, 237.83700000000002 + 0.8, 20000.0, 42.0, 26016.0, 18236.5, 4721.8, 20.5452, 260.16 + 0.8, 20000.0, 46.0, 28194.2, 19000.4, 5512.1, 35.7201, 281.942 + 0.8, 20000.0, 48.0, 29257.3, 19356.5, 5932.0, 49.6781, 292.573 + 0.8, 20000.0, 50.0, 30313.1, 19704.9, 6356.8, 59.9573, 303.131 + 0.8, 25000.0, 21.0, 11000.5, 10572.8, 858.4, 5.7369, 110.005 + 0.8, 25000.0, 22.0, 11522.8, 10838.4, 964.5, 6.4424, 115.228 + 0.8, 25000.0, 24.0, 12518.5, 11320.9, 1199.4, 7.8407, 125.185 + 0.8, 25000.0, 26.0, 13468.9, 11757.9, 1438.7, 9.0737, 134.689 + 0.8, 25000.0, 30.0, 15468.6, 12617.0, 1976.9, 12.1112, 154.686 + 0.8, 25000.0, 34.0, 17361.2, 13369.0, 2541.0, 14.3696, 173.61200000000002 + 0.8, 25000.0, 38.0, 19196.7, 14063.9, 3132.5, 16.3657, 191.967 + 0.8, 25000.0, 42.0, 20998.4, 14725.0, 3725.7, 18.1043, 209.984 + 0.8, 25000.0, 46.0, 22756.7, 15342.6, 4346.4, 19.7156, 227.567 + 0.8, 25000.0, 48.0, 23614.9, 15630.5, 4675.4, 22.8123, 236.14900000000003 + 0.8, 25000.0, 50.0, 24467.2, 15912.5, 5007.9, 31.4463, 244.67200000000003 + 0.8, 30000.0, 21.0, 8794.9, 8453.1, 684.4, 4.8251, 87.949 + 0.8, 30000.0, 22.0, 9212.8, 8666.0, 766.2, 4.9546, 92.128 + 0.8, 30000.0, 24.0, 10009.9, 9052.9, 949.1, 6.2683, 100.099 + 0.8, 30000.0, 26.0, 10770.5, 9403.4, 1135.9, 7.4268, 107.705 + 0.8, 30000.0, 30.0, 12370.4, 10092.0, 1554.2, 9.6026, 123.704 + 0.8, 30000.0, 34.0, 13884.6, 10694.7, 1993.0, 12.2194, 138.846 + 0.8, 30000.0, 38.0, 15352.8, 11251.5, 2452.3, 14.0807, 153.528 + 0.8, 30000.0, 42.0, 16793.7, 11781.1, 2913.8, 15.7013, 167.937 + 0.8, 30000.0, 46.0, 18200.3, 12276.3, 3395.6, 17.2013, 182.003 + 0.8, 30000.0, 48.0, 18886.8, 12507.0, 3651.1, 17.9402, 188.868 + 0.8, 30000.0, 50.0, 19569.5, 12734.0, 3908.4, 18.6521, 195.695 + 0.8, 35000.0, 21.0, 6959.9, 6689.4, 543.4, 7.8502, 69.599 + 0.8, 35000.0, 22.0, 7291.5, 6858.8, 606.0, 6.339, 72.915 + 0.8, 35000.0, 24.0, 7923.7, 7166.4, 746.6, 4.7559, 79.237 + 0.8, 35000.0, 26.0, 8526.5, 7444.7, 890.7, 5.8442, 85.265 + 0.8, 35000.0, 30.0, 9794.9, 7991.8, 1212.3, 7.8493, 97.949 + 0.8, 35000.0, 34.0, 10994.6, 8470.3, 1549.7, 9.9967, 109.94600000000001 + 0.8, 35000.0, 38.0, 12158.1, 8912.6, 1902.7, 11.8951, 121.581 + 0.8, 35000.0, 42.0, 13299.6, 9332.9, 2257.9, 13.4031, 132.996 + 0.8, 35000.0, 46.0, 14413.9, 9725.9, 2628.2, 14.7963, 144.139 + 0.8, 35000.0, 48.0, 14958.1, 9909.5, 2824.3, 15.483, 149.58100000000002 + 0.8, 35000.0, 50.0, 15499.3, 10090.1, 3020.9, 16.1418, 154.993 + 0.8, 37000.0, 21.0, 6319.9, 6074.2, 497.4, 8.3849, 63.199 + 0.8, 37000.0, 22.0, 6621.5, 6228.4, 553.7, 6.9012, 66.215 + 0.8, 37000.0, 24.0, 7196.4, 6508.4, 680.6, 4.3469, 71.964 + 0.8, 37000.0, 26.0, 7744.3, 6761.5, 810.7, 5.4024, 77.443 + 0.8, 37000.0, 30.0, 8897.5, 7259.4, 1100.8, 7.3437, 88.97500000000001 + 0.8, 37000.0, 34.0, 9988.0, 7694.8, 1405.5, 9.0829, 99.88 + 0.8, 37000.0, 38.0, 11045.4, 8096.9, 1723.9, 11.2241, 110.454 + 0.8, 37000.0, 42.0, 12082.7, 8479.1, 2044.4, 12.6821, 120.82700000000001 + 0.8, 37000.0, 46.0, 13095.6, 8836.7, 2378.8, 14.0299, 130.95600000000002 + 0.8, 37000.0, 48.0, 13590.1, 9003.6, 2555.9, 14.6924, 135.901 + 0.8, 37000.0, 50.0, 14082.1, 9167.9, 2733.1, 15.3273, 140.821 + 0.8, 39000.0, 21.0, 5736.6, 5513.4, 458.1, 8.1251, 57.36600000000001 + 0.8, 39000.0, 22.0, 6011.0, 5653.8, 509.0, 6.6908, 60.11 + 0.8, 39000.0, 24.0, 6533.9, 5908.8, 624.2, 4.1644, 65.339 + 0.8, 39000.0, 26.0, 7032.1, 6139.1, 742.6, 5.1849, 70.32100000000001 + 0.8, 39000.0, 30.0, 8080.3, 6592.0, 1005.9, 7.0545, 80.803 + 0.8, 39000.0, 34.0, 9071.6, 6988.0, 1282.5, 8.7133, 90.71600000000001 + 0.8, 39000.0, 38.0, 10032.7, 7353.7, 1571.6, 10.789, 100.32700000000001 + 0.8, 39000.0, 42.0, 10975.1, 7701.0, 1862.9, 12.1943, 109.751 + 0.8, 39000.0, 46.0, 11895.7, 8026.0, 2166.6, 13.4902, 118.95700000000001 + 0.8, 39000.0, 48.0, 12345.1, 8177.9, 2327.3, 14.1257, 123.45100000000001 + 0.8, 39000.0, 50.0, 12792.3, 8327.3, 2488.0, 14.7358, 127.923 + 0.8, 41000.0, 21.0, 5206.8, 5004.0, 422.5, 7.8759, 52.068000000000005 + 0.8, 41000.0, 22.0, 5456.4, 5131.9, 468.7, 6.4921, 54.564 + 0.8, 41000.0, 24.0, 5932.1, 5364.1, 573.0, 3.9876, 59.321000000000005 + 0.8, 41000.0, 26.0, 6385.0, 5573.6, 680.6, 4.9727, 63.85 + 0.8, 41000.0, 30.0, 7338.1, 5985.7, 919.7, 6.7752, 73.381 + 0.8, 41000.0, 34.0, 8239.2, 6346.0, 1170.8, 8.3569, 82.39200000000001 + 0.8, 41000.0, 38.0, 9112.8, 6678.6, 1433.3, 10.3696, 91.128 + 0.8, 41000.0, 42.0, 9969.4, 6994.3, 1697.9, 11.7243, 99.694 + 0.8, 41000.0, 46.0, 10805.8, 7289.8, 1973.9, 12.9692, 108.05799999999999 + 0.8, 41000.0, 48.0, 11214.3, 7427.8, 2119.8, 13.581, 112.143 + 0.8, 41000.0, 50.0, 11620.8, 7563.8, 2265.5, 14.1666, 116.208 + 0.8, 43000.0, 21.0, 4725.6, 4541.3, 390.2, 7.6384, 47.25600000000001 + 0.8, 43000.0, 22.0, 4952.6, 4657.7, 432.1, 6.3043, 49.526 + 0.8, 43000.0, 24.0, 5385.5, 4869.4, 526.6, 3.8166, 53.855000000000004 + 0.8, 43000.0, 26.0, 5797.4, 5060.1, 624.5, 4.7702, 57.974 + 0.8, 43000.0, 30.0, 6664.0, 5435.0, 841.4, 6.5063, 66.64 + 0.8, 43000.0, 34.0, 7483.3, 5762.9, 1069.3, 8.0181, 74.833 + 0.8, 43000.0, 38.0, 8277.5, 6065.4, 1307.7, 9.9658, 82.775 + 0.8, 43000.0, 42.0, 9055.9, 6352.3, 1548.6, 11.2718, 90.559 + 0.8, 43000.0, 46.0, 9816.3, 6621.1, 1799.0, 12.4684, 98.163 + 0.8, 43000.0, 48.0, 10187.6, 6746.6, 1931.5, 13.0575, 101.876 + 0.8, 43000.0, 50.0, 10556.9, 6870.2, 2063.5, 13.6188, 105.569 + 0.85, 20000.0, 21.0, 15269.7, 14726.9, 1148.4, 7.7963, 152.697 + 0.85, 20000.0, 22.0, 15940.5, 15071.8, 1286.4, 8.5229, 159.405 + 0.85, 20000.0, 24.0, 17216.3, 15696.2, 1605.0, 10.037, 172.16299999999998 + 0.85, 20000.0, 26.0, 18437.2, 16265.7, 1923.0, 12.0458, 184.372 + 0.85, 20000.0, 30.0, 21018.2, 17399.0, 2650.6, 14.837, 210.18200000000002 + 0.85, 20000.0, 34.0, 23493.4, 18426.4, 3408.9, 17.2645, 234.93400000000003 + 0.85, 20000.0, 38.0, 25884.8, 19370.2, 4206.9, 19.4142, 258.848 + 0.85, 20000.0, 42.0, 28229.3, 20267.0, 5007.6, 23.7977, 282.293 + 0.85, 20000.0, 46.0, 30511.4, 21101.3, 5843.9, 46.826, 305.11400000000003 + 0.85, 20000.0, 48.0, 31623.3, 21489.2, 6287.4, 58.5793, 316.233 + 0.85, 20000.0, 50.0, 32726.4, 21868.7, 6737.1, 67.2902, 327.264 + 0.85, 25000.0, 21.0, 12322.9, 11885.2, 918.3, 6.2921, 123.229 + 0.85, 25000.0, 22.0, 12864.9, 12164.6, 1027.0, 6.9769, 128.649 + 0.85, 25000.0, 24.0, 13894.8, 12669.2, 1277.4, 8.3905, 138.948 + 0.85, 25000.0, 26.0, 14880.2, 13129.4, 1527.5, 9.6187, 148.80200000000002 + 0.85, 25000.0, 30.0, 16963.6, 14045.5, 2098.8, 12.7509, 169.636 + 0.85, 25000.0, 34.0, 18961.6, 14876.3, 2695.0, 15.0269, 189.61599999999999 + 0.85, 25000.0, 38.0, 20891.7, 15639.3, 3321.4, 17.0425, 208.917 + 0.85, 25000.0, 42.0, 22783.5, 16363.9, 3949.4, 18.7996, 227.835 + 0.85, 25000.0, 46.0, 24625.9, 17039.0, 4606.3, 21.7264, 246.25900000000001 + 0.85, 25000.0, 48.0, 25523.3, 17352.8, 4953.5, 29.2527, 255.233 + 0.85, 25000.0, 50.0, 26413.9, 17659.8, 5304.8, 41.448, 264.139 + 0.85, 30000.0, 21.0, 9852.7, 9503.0, 730.5, 4.817, 98.52700000000002 + 0.85, 30000.0, 22.0, 10286.3, 9726.8, 814.8, 5.4569, 102.863 + 0.85, 30000.0, 24.0, 11110.8, 10131.7, 1009.8, 6.7844, 111.10799999999999 + 0.85, 30000.0, 26.0, 11899.3, 10500.5, 1204.7, 7.9341, 118.993 + 0.85, 30000.0, 30.0, 13566.3, 11234.9, 1649.0, 10.6836, 135.66299999999998 + 0.85, 30000.0, 34.0, 15164.4, 11900.5, 2112.4, 12.8292, 151.644 + 0.85, 30000.0, 38.0, 16708.5, 12512.1, 2599.3, 14.7084, 167.085 + 0.85, 30000.0, 42.0, 18221.3, 13092.4, 3087.7, 16.346, 182.213 + 0.85, 30000.0, 46.0, 19695.1, 13633.6, 3597.6, 17.8596, 196.951 + 0.85, 30000.0, 48.0, 20413.3, 13885.5, 3867.4, 18.6028, 204.133 + 0.85, 30000.0, 50.0, 21126.4, 14132.3, 4139.7, 19.3169, 211.264 + 0.85, 35000.0, 21.0, 7797.5, 7520.8, 578.7, 6.6087, 77.97500000000001 + 0.85, 35000.0, 22.0, 8141.8, 7699.1, 643.4, 5.1541, 81.418 + 0.85, 35000.0, 24.0, 8795.7, 8020.9, 793.4, 5.2408, 87.95700000000001 + 0.85, 35000.0, 26.0, 9420.6, 8313.7, 943.8, 6.3186, 94.206 + 0.85, 35000.0, 30.0, 10741.8, 8897.0, 1284.8, 8.3419, 107.41799999999999 + 0.85, 35000.0, 34.0, 12008.4, 9425.6, 1641.7, 10.725, 120.084 + 0.85, 35000.0, 38.0, 13232.1, 9911.4, 2016.1, 12.4766, 132.321 + 0.85, 35000.0, 42.0, 14430.9, 10372.2, 2391.9, 13.999, 144.309 + 0.85, 35000.0, 46.0, 15598.6, 10802.0, 2783.9, 15.4058, 155.98600000000002 + 0.85, 35000.0, 48.0, 16167.5, 11002.0, 2990.7, 16.095, 161.675 + 0.85, 35000.0, 50.0, 16732.6, 11198.0, 3199.2, 16.7582, 167.326 + 0.85, 37000.0, 21.0, 7080.7, 6829.3, 529.2, 7.1696, 70.807 + 0.85, 37000.0, 22.0, 7393.9, 6991.7, 587.4, 5.7449, 73.939 + 0.85, 37000.0, 24.0, 7988.5, 7284.6, 722.8, 4.8169, 79.885 + 0.85, 37000.0, 26.0, 8556.5, 7551.0, 858.6, 5.8624, 85.565 + 0.85, 37000.0, 30.0, 9757.7, 8081.8, 1166.5, 7.8217, 97.57700000000001 + 0.85, 37000.0, 34.0, 10908.7, 8562.5, 1488.5, 10.0732, 109.087 + 0.85, 37000.0, 38.0, 12020.9, 9004.3, 1826.1, 11.7857, 120.209 + 0.85, 37000.0, 42.0, 13110.2, 9423.3, 2165.5, 13.2592, 131.102 + 0.85, 37000.0, 46.0, 14171.0, 9813.8, 2518.9, 14.6171, 141.71 + 0.85, 37000.0, 48.0, 14688.6, 9996.1, 2705.6, 15.2834, 146.886 + 0.85, 37000.0, 50.0, 15202.3, 10174.6, 2893.4, 15.9241, 152.023 + 0.85, 39000.0, 21.0, 6427.5, 6199.1, 487.0, 6.9546, 64.275 + 0.85, 39000.0, 22.0, 6712.2, 6346.7, 539.4, 5.589, 67.122 + 0.85, 39000.0, 24.0, 7253.1, 6613.6, 662.4, 4.6165, 72.531 + 0.85, 39000.0, 26.0, 7769.4, 6855.8, 785.8, 5.6258, 77.694 + 0.85, 39000.0, 30.0, 8861.3, 7338.7, 1065.5, 7.514, 88.613 + 0.85, 39000.0, 34.0, 9907.4, 7775.8, 1357.5, 9.6651, 99.074 + 0.85, 39000.0, 38.0, 10918.3, 8177.7, 1664.3, 11.3296, 109.18299999999999 + 0.85, 39000.0, 42.0, 11908.0, 8558.4, 1972.4, 12.7479, 119.08 + 0.85, 39000.0, 46.0, 12872.3, 8913.7, 2293.5, 14.056, 128.72299999999998 + 0.85, 39000.0, 48.0, 13342.3, 9079.2, 2463.0, 14.6952, 133.423 + 0.85, 39000.0, 50.0, 13809.4, 9241.8, 2633.5, 15.3107, 138.094 + 0.9, 35000.0, 21.0, 8689.9, 8405.4, 612.6, 5.4642, 86.899 + 0.9, 35000.0, 22.0, 9048.1, 8592.9, 681.7, 4.4604, 90.48100000000001 + 0.9, 35000.0, 24.0, 9727.3, 8930.8, 841.5, 5.7208, 97.273 + 0.9, 35000.0, 26.0, 10383.2, 9245.3, 999.3, 6.7969, 103.83200000000001 + 0.9, 35000.0, 30.0, 11785.1, 9888.5, 1365.6, 8.8636, 117.851 + 0.9, 35000.0, 34.0, 13126.8, 10471.6, 1745.1, 11.3302, 131.268 + 0.9, 35000.0, 38.0, 14418.8, 11005.1, 2142.8, 13.0965, 144.188 + 0.9, 35000.0, 42.0, 15682.3, 11509.9, 2543.0, 14.6396, 156.823 + 0.9, 35000.0, 46.0, 16909.5, 11978.5, 2959.3, 16.0593, 169.095 + 0.9, 35000.0, 48.0, 17506.0, 12195.7, 3179.8, 16.7568, 175.06 + 0.9, 35000.0, 50.0, 18098.7, 12409.1, 3401.9, 17.4262, 180.98700000000002 + 0.9, 37000.0, 21.0, 7891.3, 7632.9, 559.6, 6.0554, 78.913 + 0.9, 37000.0, 22.0, 8217.1, 7803.6, 621.9, 4.6273, 82.171 + 0.9, 37000.0, 24.0, 8834.9, 8111.3, 766.2, 5.2826, 88.349 + 0.9, 37000.0, 26.0, 9431.0, 8397.2, 908.7, 6.3254, 94.31 + 0.9, 37000.0, 30.0, 10705.5, 8982.6, 1239.4, 8.326, 107.055 + 0.9, 37000.0, 34.0, 11924.9, 9512.8, 1581.3, 10.6732, 119.249 + 0.9, 37000.0, 38.0, 13099.4, 9998.1, 1940.8, 12.3857, 130.994 + 0.9, 37000.0, 42.0, 14247.6, 10457.1, 2302.0, 13.878, 142.476 + 0.9, 37000.0, 46.0, 15363.1, 10883.5, 2678.2, 15.2518, 153.631 + 0.9, 37000.0, 48.0, 15905.5, 11081.3, 2876.5, 15.9229, 159.055 + 0.9, 37000.0, 50.0, 16443.8, 11275.0, 3076.2, 16.5691, 164.438 + 0.9, 39000.0, 21.0, 7163.6, 6928.7, 514.4, 5.8837, 71.63600000000001 + 0.9, 39000.0, 22.0, 7459.9, 7084.2, 570.9, 4.5067, 74.599 + 0.9, 39000.0, 24.0, 8021.6, 7364.1, 701.6, 5.0624, 80.21600000000001 + 0.9, 39000.0, 26.0, 8563.7, 7624.5, 831.4, 6.0727, 85.63700000000001 + 0.9, 39000.0, 30.0, 9722.3, 8156.9, 1131.6, 7.9996, 97.223 + 0.9, 39000.0, 34.0, 10830.8, 8639.2, 1442.2, 10.2576, 108.30799999999999 + 0.9, 39000.0, 38.0, 11898.0, 9080.3, 1768.2, 11.9058, 118.98 + 0.9, 39000.0, 42.0, 12941.4, 9497.6, 2096.6, 13.3448, 129.414 + 0.9, 39000.0, 46.0, 13955.2, 9885.2, 2438.2, 14.6669, 139.55200000000002 + 0.9, 39000.0, 48.0, 14447.9, 10064.9, 2618.2, 15.3126, 144.479 + 0.9, 39000.0, 50.0, 14937.5, 10241.3, 2799.5, 15.9332, 149.375 diff --git a/aviary/models/test_aircraft/aircraft_for_bench_FwFm_with_electric.csv b/aviary/models/test_aircraft/aircraft_for_bench_FwFm_with_electric.csv new file mode 100644 index 000000000..b8e406e77 --- /dev/null +++ b/aviary/models/test_aircraft/aircraft_for_bench_FwFm_with_electric.csv @@ -0,0 +1,158 @@ +aircraft:air_conditioning:mass_scaler,1.0,unitless +aircraft:anti_icing:mass_scaler,1.0,unitless +aircraft:apu:mass_scaler,1.1,unitless +aircraft:avionics:mass_scaler,1.2,unitless +aircraft:canard:area,0.0,ft**2 +aircraft:canard:aspect_ratio,0.0,unitless +aircraft:canard:thickness_to_chord,0.0,unitless +aircraft:crew_and_payload:baggage_mass_per_passenger,45.0,lbm +aircraft:crew_and_payload:cargo_container_mass_scaler,1.0,unitless +aircraft:crew_and_payload:flight_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:mass_per_passenger,180.0,lbm +aircraft:crew_and_payload:misc_cargo,0.0,lbm +aircraft:crew_and_payload:non_flight_crew_mass_scaler,1.0,unitless +aircraft:crew_and_payload:num_business_class,0,unitless +aircraft:crew_and_payload:num_first_class,11,unitless +aircraft:crew_and_payload:num_flight_attendants,3,unitless +aircraft:crew_and_payload:num_flight_crew,2,unitless +aircraft:crew_and_payload:num_galley_crew,0,unitless +aircraft:crew_and_payload:num_non_flight_crew,3,unitless +aircraft:crew_and_payload:num_passengers,169,unitless +aircraft:crew_and_payload:num_tourist_class,158,unitless +aircraft:crew_and_payload:passenger_service_mass_scaler,1.0,unitless +aircraft:crew_and_payload:wing_cargo,0.0,lbm +aircraft:design:base_area,0.0,ft**2 +aircraft:design:empty_mass_margin_scaler,0.0,unitless +aircraft:design:lift_dependent_drag_coeff_factor,0.909839381134961,unitless +aircraft:design:touchdown_mass,152800.0,lbm +aircraft:design:reserve_fuel_additional,3000.,lbm +aircraft:design:subsonic_drag_coeff_factor,1.0,unitless +aircraft:design:supersonic_drag_coeff_factor,1.0,unitless +aircraft:design:use_alt_mass,False,unitless +aircraft:design:zero_lift_drag_coeff_factor,0.930890028006548,unitless +aircraft:electrical:mass_scaler,1.25,unitless +aircraft:engine:additional_mass_fraction,0.,unitless +aircraft:engine:constant_fuel_consumption,0.,lbm/h +aircraft:engine:data_file,models/engines/turbofan_28k_with_electric.deck,unitless +aircraft:engine:flight_idle_thrust_fraction,0.0,unitless +aircraft:engine:flight_idle_max_fraction,1.0,unitless +aircraft:engine:flight_idle_min_fraction,0.08,unitless +aircraft:engine:fuel_flow_scaler_constant_term,0.,unitless +aircraft:engine:fuel_flow_scaler_linear_term,0.,unitless +aircraft:engine:generate_flight_idle,True,unitless +aircraft:engine:geopotential_alt,False,unitless +aircraft:engine:ignore_negative_thrust,False,unitless +aircraft:engine:interpolation_method,slinear,unitless +aircraft:engine:mass_scaler,1.15,unitless +aircraft:engine:mass,7400,lbm +aircraft:engine:num_engines,2,unitless +aircraft:engine:num_fuselage_engines,0,unitless +aircraft:engine:num_wing_engines,2,unitless +aircraft:engine:reference_mass,7400,lbm +aircraft:engine:reference_sls_thrust,28928.1,lbf +aircraft:engine:scale_mass,True,unitless +aircraft:engine:scale_performance,True,unitless +aircraft:engine:scaled_sls_thrust,28928.1,lbf +aircraft:engine:subsonic_fuel_flow_scaler,1.,unitless +aircraft:engine:supersonic_fuel_flow_scaler,1.,unitless +aircraft:engine:thrust_reversers_mass_scaler,0.0,unitless +aircraft:engine:wing_locations,[0.26869218],unitless +aircraft:fins:area,0.0,ft**2 +aircraft:fins:mass_scaler,1.0,unitless +aircraft:fins:mass,0.0,lbm +aircraft:fins:num_fins,0,unitless +aircraft:fins:taper_ratio,10.0,unitless +aircraft:fuel:auxiliary_fuel_capacity,0.0,lbm +aircraft:fuel:density_ratio,1.0,unitless +aircraft:fuel:fuel_system_mass_scaler,1.0,unitless +aircraft:fuel:fuselage_fuel_capacity,0.0,lbm +aircraft:fuel:num_tanks,7,unitless +aircraft:fuel:total_capacity,45694.0,lbm +aircraft:fuel:unusable_fuel_mass_scaler,1.0,unitless +aircraft:furnishings:mass_scaler,1.1,unitless +aircraft:fuselage:length,128.0,ft +aircraft:fuselage:mass_scaler,1.05,unitless +aircraft:fuselage:max_height,13.17,ft +aircraft:fuselage:max_width,12.33,ft +aircraft:fuselage:military_cargo_floor,False,unitless +aircraft:fuselage:num_fuselages,1,unitless +aircraft:fuselage:passenger_compartment_length,85.5,ft +aircraft:fuselage:planform_area,1578.24,ft**2 +aircraft:fuselage:wetted_area_scaler,1.0,unitless +aircraft:fuselage:wetted_area,4158.62,ft**2 +aircraft:horizontal_tail:area,355.0,ft**2 +aircraft:horizontal_tail:aspect_ratio,6.0,unitless +aircraft:horizontal_tail:mass_scaler,1.2,unitless +aircraft:horizontal_tail:taper_ratio,0.22,unitless +aircraft:horizontal_tail:thickness_to_chord,0.125,unitless +aircraft:horizontal_tail:vertical_tail_fraction,0.0,unitless +aircraft:horizontal_tail:wetted_area_scaler,1.0,unitless +aircraft:horizontal_tail:wetted_area,592.65,ft**2 +aircraft:hydraulics:mass_scaler,1.0,unitless +aircraft:hydraulics:system_pressure,3000.0,lbf/ft**2 +aircraft:instruments:mass_scaler,1.25,unitless +aircraft:landing_gear:carrier_based,False,unitless +aircraft:landing_gear:main_gear_mass_scaler,1.1,unitless +aircraft:landing_gear:main_gear_oleo_length,102.0,inch +aircraft:landing_gear:nose_gear_mass_scaler,1.0,unitless +aircraft:landing_gear:nose_gear_oleo_length,67.0,inch +aircraft:nacelle:avg_diameter,7.94,ft +aircraft:nacelle:avg_length,12.3,ft +aircraft:nacelle:count_factor,2,unitless +aircraft:nacelle:mass_scaler,1.0,unitless +aircraft:nacelle:wetted_area_scaler,1.0,unitless +aircraft:paint:mass_per_unit_area,0.037,lbm/ft**2 +aircraft:propulsion:engine_oil_mass_scaler,1.0,unitless +aircraft:propulsion:misc_mass_scaler,1.0,unitless +aircraft:vertical_tail:area,284.0,ft**2 +aircraft:vertical_tail:aspect_ratio,1.75,unitless +aircraft:vertical_tail:mass_scaler,1.0,unitless +aircraft:vertical_tail:num_tails,1,unitless +aircraft:vertical_tail:taper_ratio,0.33,unitless +aircraft:vertical_tail:thickness_to_chord,0.1195,unitless +aircraft:vertical_tail:wetted_area_scaler,1.0,unitless +aircraft:vertical_tail:wetted_area,581.13,ft**2 +aircraft:wing:aeroelastic_tailoring_factor,0.0,unitless +aircraft:wing:airfoil_technology,1.92669766647637,unitless +aircraft:wing:area,1370.0,ft**2 +aircraft:wing:aspect_ratio,11.22091,unitless +aircraft:wing:bending_mass_scaler,1.0,unitless +aircraft:wing:chord_per_semispan,0.31,0.23,0.084,unitless +aircraft:wing:composite_fraction,0.2,unitless +aircraft:wing:control_surface_area,137,ft**2 +aircraft:wing:control_surface_area_ratio,0.1,unitless +aircraft:wing:glove_and_bat,134.0,ft**2 +aircraft:wing:input_station_dist,0.,0.2759,0.9367,unitless +aircraft:wing:load_distribution_control,2.0,unitless +aircraft:wing:load_fraction,1.0,unitless +aircraft:wing:load_path_sweep_dist,0.,22.,deg +aircraft:wing:mass_scaler,1.23,unitless +aircraft:wing:max_camber_at_70_semispan,0.0,unitless +aircraft:wing:misc_mass_scaler,1.0,unitless +aircraft:wing:num_integration_stations,50,unitless +aircraft:wing:shear_control_mass_scaler,1.0,unitless +aircraft:wing:span_efficiency_reduction,False,unitless +aircraft:wing:span,117.83,ft +aircraft:wing:strut_bracing_factor,0.0,unitless +aircraft:wing:surface_ctrl_mass_scaler,1.0,unitless +aircraft:wing:sweep,25.0,deg +aircraft:wing:taper_ratio,0.278,unitless +aircraft:wing:thickness_to_chord_dist,0.145,0.115,0.104,unitless +aircraft:wing:thickness_to_chord,0.13,unitless +aircraft:wing:ultimate_load_factor,3.75,unitless +aircraft:wing:var_sweep_mass_penalty,0.0,unitless +aircraft:wing:wetted_area_scaler,1.0,unitless +aircraft:wing:wetted_area,2396.56,ft**2 +mission:constraints:max_mach,0.785,unitless +mission:design:cruise_altitude,35000,ft +mission:design:gross_mass,175400.0,lbm +mission:design:range,3500,NM +mission:design:thrust_takeoff_per_eng,28928.1,lbf +mission:landing:lift_coefficient_max,2.0,unitless +mission:summary:cruise_mach,0.785,unitless +mission:summary:fuel_flow_scaler,1.0,unitless +mission:takeoff:fuel_simple,577,lbm +mission:takeoff:lift_coefficient_max,3.0,unitless +mission:takeoff:lift_over_drag,17.354,unitless +settings:equations_of_motion,height_energy +settings:mass_method,FLOPS \ No newline at end of file diff --git a/aviary/subsystems/energy/__init__.py b/aviary/subsystems/energy/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/aviary/subsystems/energy/battery_builder.py b/aviary/subsystems/energy/battery_builder.py new file mode 100644 index 000000000..635063ec9 --- /dev/null +++ b/aviary/subsystems/energy/battery_builder.py @@ -0,0 +1,59 @@ +import numpy as np +import openmdao.api as om + +from aviary.subsystems.subsystem_builder_base import SubsystemBuilderBase +from aviary.subsystems.energy.battery_sizing import SizeBattery +from aviary.variable_info.variables import Aircraft, Dynamic + + +class BatteryBuilder(SubsystemBuilderBase): + default_name = 'battery' + + def build_pre_mission(self, aviary_inputs=None): + return SizeBattery(aviary_inputs=aviary_inputs) + + def get_mass_names(self): + return [Aircraft.Battery.MASS] + + def build_mission(self, num_nodes, aviary_inputs=None) -> om.Group: + battery_group = om.Group() + # Here, the efficiency variable is used as an overall efficiency for the battery + soc = om.ExecComp('state_of_charge = (energy_capacity - (cumulative_electric_energy_used/efficiency)) / energy_capacity', + state_of_charge={'val': np.zeros( + num_nodes), 'units': 'unitless'}, + energy_capacity={'val': 10.0, 'units': 'kJ'}, + cumulative_electric_energy_used={ + 'val': np.zeros(num_nodes), 'units': 'kJ'}, + efficiency={'val': 0.95, 'units': 'unitless'}) + + battery_group.add_subsystem('state_of_charge', + subsys=soc, + promotes_inputs=[('energy_capacity', Aircraft.Battery.ENERGY_CAPACITY), + ('cumulative_electric_energy_used', + Dynamic.Mission.CUMULATIVE_ELECTRIC_ENERGY_USED), + ('efficiency', Aircraft.Battery.EFFICIENCY)], + promotes_outputs=[('state_of_charge', Dynamic.Mission.BATTERY_STATE_OF_CHARGE)]) + + return battery_group + + def get_states(self): + state_dict = {Dynamic.Mission.CUMULATIVE_ELECTRIC_ENERGY_USED: {'fix_initial': True, + 'fix_final': False, + 'lower': 0.0, + 'ref': 1e4, + 'defect_ref': 1e6, + 'units': 'kJ', + 'rate_source': Dynamic.Mission.ELECTRIC_POWER_IN_TOTAL, + 'input_initial': 0.0}} + + return state_dict + + def get_constraints(self): + constraint_dict = { + # Can add constraints here; state of charge is a common one in many battery applications + f'battery.{Dynamic.Mission.BATTERY_STATE_OF_CHARGE}': + {'type': 'boundary', + 'loc': 'final', + 'lower': 0.2}, + } + return constraint_dict diff --git a/aviary/subsystems/energy/battery_sizing.py b/aviary/subsystems/energy/battery_sizing.py new file mode 100644 index 000000000..bb7ccaad6 --- /dev/null +++ b/aviary/subsystems/energy/battery_sizing.py @@ -0,0 +1,60 @@ +import openmdao.api as om + +from aviary.utils.aviary_values import AviaryValues +from aviary.variable_info.functions import add_aviary_input, add_aviary_output +from aviary.variable_info.variables import Aircraft + + +class SizeBattery(om.ExplicitComponent): + ''' + Calculates battery mass from specific energy and additional mass + ''' + + def initialize(self): + self.options.declare( + 'aviary_inputs', types=AviaryValues, + desc='collection of Aircraft/Mission specific options') + + def setup(self): + add_aviary_input(self, Aircraft.Battery.PACK_MASS, val=0.0, units='kg', + desc='mass of energy-storing components of battery') + add_aviary_input(self, Aircraft.Battery.ADDITIONAL_MASS, val=0.0, units='kg', + desc='mass of non energy-storing components of battery') + add_aviary_input(self, Aircraft.Battery.PACK_ENERGY_DENSITY, val=0.0, units='kJ/kg', + desc='energy density of battery pack') + + add_aviary_output(self, Aircraft.Battery.MASS, val=0.0, + units='kg', desc='total battery mass') + add_aviary_output(self, Aircraft.Battery.ENERGY_CAPACITY, val=0.0, + units='kJ', desc='total battery energy storage') + + def compute(self, inputs, outputs): + energy_density_kj_kg = inputs[Aircraft.Battery.PACK_ENERGY_DENSITY] + addtl_mass = inputs[Aircraft.Battery.ADDITIONAL_MASS] + pack_mass = inputs[Aircraft.Battery.PACK_MASS] + + total_mass = pack_mass + addtl_mass + total_energy = pack_mass * energy_density_kj_kg + + outputs[Aircraft.Battery.MASS] = total_mass + outputs[Aircraft.Battery.ENERGY_CAPACITY] = total_energy + + def setup_partials(self): + self.declare_partials(Aircraft.Battery.ENERGY_CAPACITY, + Aircraft.Battery.PACK_ENERGY_DENSITY) + self.declare_partials(Aircraft.Battery.ENERGY_CAPACITY, + Aircraft.Battery.PACK_MASS) + + self.declare_partials(Aircraft.Battery.MASS, + Aircraft.Battery.ADDITIONAL_MASS, val=1.0) + self.declare_partials(Aircraft.Battery.MASS, + Aircraft.Battery.PACK_MASS, val=1.0) + + def compute_partials(self, inputs, J): + energy_density_kj_kg = inputs[Aircraft.Battery.PACK_ENERGY_DENSITY] + pack_mass = inputs[Aircraft.Battery.PACK_MASS] + + J[Aircraft.Battery.ENERGY_CAPACITY, + Aircraft.Battery.PACK_ENERGY_DENSITY] = pack_mass + J[Aircraft.Battery.ENERGY_CAPACITY, + Aircraft.Battery.PACK_MASS] = energy_density_kj_kg diff --git a/aviary/subsystems/energy/test/__init__.py b/aviary/subsystems/energy/test/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/aviary/subsystems/energy/test/test_battery.py b/aviary/subsystems/energy/test/test_battery.py new file mode 100644 index 000000000..356be1ae3 --- /dev/null +++ b/aviary/subsystems/energy/test/test_battery.py @@ -0,0 +1,81 @@ +import unittest + +import numpy as np +import openmdao.api as om + +from openmdao.utils.assert_utils import assert_check_partials, assert_near_equal + +from aviary.subsystems.energy.battery_builder import BatteryBuilder +import aviary.api as av + + +class TestBatteryDerivs(unittest.TestCase): + def setUp(self): + self.prob = prob = om.Problem() + + self.options = av.AviaryValues() + + self.battery = BatteryBuilder() + + def test_battery_premission(self): + prob = self.prob + prob.model.add_subsystem('battery_premission', + self.battery.build_pre_mission(self.options), + promotes=['*']) + + prob.setup(force_alloc_complex=True) + + prob.set_val(av.Aircraft.Battery.PACK_ENERGY_DENSITY, 550, units='kW*h/kg') + prob.set_val(av.Aircraft.Battery.PACK_MASS, 1200, units='lbm') + prob.set_val(av.Aircraft.Battery.ADDITIONAL_MASS, 115, units='lbm') + + prob.run_model() + + mass_expected = 1_315 + energy_expected = 1_077_735.47112 + + mass = prob.get_val(av.Aircraft.Battery.MASS, 'lbm') + energy = prob.get_val(av.Aircraft.Battery.ENERGY_CAPACITY, 'MJ') + + assert_near_equal(mass, mass_expected, tolerance=1e-10) + assert_near_equal(energy, energy_expected, tolerance=1e-10) + + partial_data = prob.check_partials(out_stream=None, method="cs") + assert_check_partials(partial_data, atol=1e-9, rtol=1e-9) + + def test_battery_mission(self): + prob = self.prob + prob.model.add_subsystem('battery_mission', + subsys=self.battery.build_mission(num_nodes=4), + promotes=['*']) + + efficiency = 0.95 + prob.model.set_input_defaults( + av.Aircraft.Battery.ENERGY_CAPACITY, 10_000, units='kJ') + prob.model.set_input_defaults( + av.Aircraft.Battery.EFFICIENCY, efficiency, units='unitless') + prob.model.set_input_defaults(av.Dynamic.Mission.CUMULATIVE_ELECTRIC_ENERGY_USED, [ + 0, 2_000, 5_000, 9_500], units='kJ') + + prob.setup(force_alloc_complex=True) + + prob.run_model() + + soc_expected = np.array([1., 0.7894736842105263, 0.4736842105263159, 0.]) + soc = prob.get_val(av.Dynamic.Mission.BATTERY_STATE_OF_CHARGE, 'unitless') + + assert_near_equal(soc, soc_expected, tolerance=1e-10) + + partial_data = prob.check_partials(out_stream=None, method="cs") + assert_check_partials(partial_data, atol=1e-9, rtol=1e-9) + + +class TestBattery(av.TestSubsystemBuilderBase): + + def setUp(self): + self.subsystem_builder = BatteryBuilder() + self.aviary_values = av.AviaryValues() + + +if __name__ == '__main__': + unittest.main() diff --git a/aviary/subsystems/propulsion/engine_deck.py b/aviary/subsystems/propulsion/engine_deck.py index 9937662d4..fc5ca7dc4 100644 --- a/aviary/subsystems/propulsion/engine_deck.py +++ b/aviary/subsystems/propulsion/engine_deck.py @@ -54,7 +54,7 @@ SHAFT_POWER_CORRECTED = EngineModelVariables.SHAFT_POWER_CORRECTED RAM_DRAG = EngineModelVariables.RAM_DRAG FUEL_FLOW = EngineModelVariables.FUEL_FLOW -ELECTRIC_POWER = EngineModelVariables.ELECTRIC_POWER +ELECTRIC_POWER_IN = EngineModelVariables.ELECTRIC_POWER_IN NOX_RATE = EngineModelVariables.NOX_RATE TEMPERATURE = EngineModelVariables.TEMPERATURE_ENGINE_T4 # EXIT_AREA = EngineModelVariables.EXIT_AREA @@ -71,7 +71,7 @@ GROSS_THRUST: ['gross_thrust'], RAM_DRAG: ['ram_drag'], FUEL_FLOW: ['fuel', 'fuel_flow', 'fuel_flow_rate'], - ELECTRIC_POWER: 'electric_power', + ELECTRIC_POWER_IN: ['electric_power_in', 'electric_power'], NOX_RATE: ['nox', 'nox_rate'], TEMPERATURE: ['t4', 'temp', 'temperature'], SHAFT_POWER: ['shaft_power', 'shp'], @@ -286,7 +286,7 @@ def _set_variable_flags(self): # requires importing EngineModelVariables) self.use_thrust = THRUST in engine_variables or TAILPIPE_THRUST in engine_variables self.use_fuel = FUEL_FLOW in engine_variables - self.use_electricity = ELECTRIC_POWER in engine_variables + self.use_electricity = ELECTRIC_POWER_IN in engine_variables self.use_hybrid_throttle = HYBRID_THROTTLE in engine_variables self.use_nox = NOX_RATE in engine_variables self.use_t4 = TEMPERATURE in engine_variables @@ -785,9 +785,9 @@ def _build_engine_interpolator(self, num_nodes, aviary_inputs): self.data[FUEL_FLOW], units=units[FUEL_FLOW], desc='Current fuel flow rate (unscaled)') - engine.add_output('electric_power_unscaled', - self.data[ELECTRIC_POWER], - units=units[ELECTRIC_POWER], + engine.add_output('electric_power_in_unscaled', + self.data[ELECTRIC_POWER_IN], + units=units[ELECTRIC_POWER_IN], desc='Current electric energy rate (unscaled)') engine.add_output('nox_rate_unscaled', self.data[NOX_RATE], @@ -990,8 +990,8 @@ def build_mission(self, num_nodes, aviary_inputs) -> om.Group: 'engine_scaling.thrust_net_unscaled') engine_group.connect('interpolation.fuel_flow_rate_unscaled', 'engine_scaling.fuel_flow_rate_unscaled') - engine_group.connect('interpolation.electric_power_unscaled', - 'engine_scaling.electric_power_unscaled') + engine_group.connect('interpolation.electric_power_in_unscaled', + 'engine_scaling.electric_power_in_unscaled') engine_group.connect('interpolation.nox_rate_unscaled', 'engine_scaling.nox_rate_unscaled') if self.use_thrust: diff --git a/aviary/subsystems/propulsion/engine_scaling.py b/aviary/subsystems/propulsion/engine_scaling.py index 7c3cf72dd..2e93162c3 100644 --- a/aviary/subsystems/propulsion/engine_scaling.py +++ b/aviary/subsystems/propulsion/engine_scaling.py @@ -41,7 +41,7 @@ def setup(self): self.add_input('fuel_flow_rate_unscaled', val=np.zeros(nn), units='lbm/h', desc='Current fuel flow rate (unscaled)') - self.add_input('electric_power_unscaled', val=np.zeros(nn), + self.add_input('electric_power_in_unscaled', val=np.zeros(nn), units='kW', desc='Current electric power consumption (unscaled)') self.add_input('nox_rate_unscaled', val=np.zeros(nn), units='lbm/h', @@ -65,7 +65,7 @@ def setup(self): self.add_output(Dynamic.Mission.FUEL_FLOW_RATE_NEGATIVE, val=np.zeros(nn), units='lbm/h', desc='Current fuel flow rate (negative)') - self.add_output(Dynamic.Mission.ELECTRIC_POWER, val=np.zeros(nn), + self.add_output(Dynamic.Mission.ELECTRIC_POWER_IN, val=np.zeros(nn), units='kW', desc='Current electric power consumption') self.add_output(Dynamic.Mission.NOX_RATE, val=np.zeros(nn), @@ -103,7 +103,7 @@ def compute(self, inputs, outputs): unscaled_net_thrust = inputs['thrust_net_unscaled'] unscaled_max_thrust = inputs['thrust_net_max_unscaled'] unscaled_fuel_flow_rate = inputs['fuel_flow_rate_unscaled'] - unscaled_electric_power = inputs['electric_power_unscaled'] + unscaled_electric_power_in = inputs['electric_power_in_unscaled'] unscaled_nox_rate = inputs['nox_rate_unscaled'] unscaled_shaft_power = inputs['shaft_power_unscaled'] unscaled_shaft_power_corrected = inputs['shaft_power_corrected_unscaled'] @@ -140,7 +140,7 @@ def compute(self, inputs, outputs): (unscaled_fuel_flow_rate * fuel_flow_scale_factor) - constant_fuel_flow # all other variables are just linearly scaled - outputs[Dynamic.Mission.ELECTRIC_POWER] = unscaled_electric_power * scale_factor + outputs[Dynamic.Mission.ELECTRIC_POWER_IN] = unscaled_electric_power_in * scale_factor outputs[Dynamic.Mission.NOX_RATE] = unscaled_nox_rate * scale_factor outputs[Dynamic.Mission.SHAFT_POWER] = unscaled_shaft_power * scale_factor outputs[Dynamic.Mission.SHAFT_POWER_CORRECTED] = unscaled_shaft_power_corrected * scale_factor @@ -187,13 +187,13 @@ def setup_partials(self): val=1.0) self.declare_partials( - Dynamic.Mission.ELECTRIC_POWER, + Dynamic.Mission.ELECTRIC_POWER_IN, Aircraft.Engine.SCALE_FACTOR, rows=r, cols=c, val=1.0) self.declare_partials( - Dynamic.Mission.ELECTRIC_POWER, - 'electric_power_unscaled', + Dynamic.Mission.ELECTRIC_POWER_IN, + 'electric_power_in_unscaled', rows=r, cols=r, val=1.0) @@ -260,7 +260,7 @@ def compute_partials(self, inputs, J): unscaled_net_thrust = inputs['thrust_net_unscaled'] unscaled_max_thrust = inputs['thrust_net_max_unscaled'] unscaled_fuel_flow_rate = inputs['fuel_flow_rate_unscaled'] - unscaled_electric_power = inputs['electric_power_unscaled'] + unscaled_electric_power_in = inputs['electric_power_in_unscaled'] unscaled_nox_rate = inputs['nox_rate_unscaled'] unscaled_shaft_power = inputs['shaft_power_unscaled'] unscaled_shaft_power_corrected = inputs['shaft_power_corrected_unscaled'] @@ -331,10 +331,10 @@ def compute_partials(self, inputs, J): # J[Dynamic.FUEL_FLOW_RATE_NEGATIVE, Aircraft.Engine.SCALE_FACTOR] = -np.ravel( # fuel_flow_scale_deriv) - # J[Dynamic.ELECTRIC_POWER, 'electric_power_unscaled'] = np.tile( + # J[Dynamic.ELECTRIC_POWER_IN, 'electric_power_in_unscaled'] = np.tile( # scale_factor, nn) - # J[Dynamic.ELECTRIC_POWER, Aircraft.Engine.SCALE_FACTOR] = np.ravel( - # unscaled_electric_power * deriv_factor) + # J[Dynamic.ELECTRIC_POWER_IN, Aircraft.Engine.SCALE_FACTOR] = np.ravel( + # unscaled_electric_power_in * deriv_factor) # J[Dynamic.NOX_RATE, 'nox_rate_unscaled'] = np.tile( # scale_factor, nn) @@ -358,9 +358,9 @@ def compute_partials(self, inputs, J): J[Dynamic.Mission.FUEL_FLOW_RATE_NEGATIVE, Aircraft.Engine.SCALE_FACTOR] = fuel_flow_scale_deriv - J[Dynamic.Mission.ELECTRIC_POWER, 'electric_power_unscaled'] = scale_factor - J[Dynamic.Mission.ELECTRIC_POWER, - Aircraft.Engine.SCALE_FACTOR] = unscaled_electric_power * deriv_factor + J[Dynamic.Mission.ELECTRIC_POWER_IN, 'electric_power_in_unscaled'] = scale_factor + J[Dynamic.Mission.ELECTRIC_POWER_IN, + Aircraft.Engine.SCALE_FACTOR] = unscaled_electric_power_in * deriv_factor J[Dynamic.Mission.NOX_RATE, 'nox_rate_unscaled'] = scale_factor J[Dynamic.Mission.NOX_RATE, Aircraft.Engine.SCALE_FACTOR] = unscaled_nox_rate * deriv_factor diff --git a/aviary/subsystems/propulsion/propulsion_mission.py b/aviary/subsystems/propulsion/propulsion_mission.py index 610403bb7..503cef166 100644 --- a/aviary/subsystems/propulsion/propulsion_mission.py +++ b/aviary/subsystems/propulsion/propulsion_mission.py @@ -116,7 +116,7 @@ def setup(self): axis=1, units='lbm/h') perf_mux.add_var( - Dynamic.Mission.ELECTRIC_POWER, + Dynamic.Mission.ELECTRIC_POWER_IN, shape=(nn,), axis=1, units='kW') @@ -161,8 +161,8 @@ def setup(self): 'vectorize_performance.' + Dynamic.Mission.THRUST_MAX + '_' + str(i)) self.connect(engine.name + '.' + Dynamic.Mission.FUEL_FLOW_RATE_NEGATIVE, 'vectorize_performance.' + Dynamic.Mission.FUEL_FLOW_RATE_NEGATIVE + '_' + str(i)) - self.connect(engine.name + '.' + Dynamic.Mission.ELECTRIC_POWER, - 'vectorize_performance.' + Dynamic.Mission.ELECTRIC_POWER + '_' + str(i)) + self.connect(engine.name + '.' + Dynamic.Mission.ELECTRIC_POWER_IN, + 'vectorize_performance.' + Dynamic.Mission.ELECTRIC_POWER_IN + '_' + str(i)) self.connect(engine.name + '.' + Dynamic.Mission.NOX_RATE, 'vectorize_performance.' + Dynamic.Mission.NOX_RATE + '_' + str(i)) @@ -219,7 +219,7 @@ def setup(self): val=np.zeros((nn, num_engine_type)), units='lbf') self.add_input(Dynamic.Mission.FUEL_FLOW_RATE_NEGATIVE, val=np.zeros((nn, num_engine_type)), units='lbm/h') - self.add_input(Dynamic.Mission.ELECTRIC_POWER, + self.add_input(Dynamic.Mission.ELECTRIC_POWER_IN, val=np.zeros((nn, num_engine_type)), units='kW') self.add_input(Dynamic.Mission.NOX_RATE, val=np.zeros((nn, num_engine_type)), units='lbm/h') @@ -228,7 +228,7 @@ def setup(self): self.add_output(Dynamic.Mission.THRUST_MAX_TOTAL, val=np.zeros(nn), units='lbf') self.add_output(Dynamic.Mission.FUEL_FLOW_RATE_NEGATIVE_TOTAL, val=np.zeros(nn), units='lbm/h') - self.add_output(Dynamic.Mission.ELECTRIC_POWER_TOTAL, + self.add_output(Dynamic.Mission.ELECTRIC_POWER_IN_TOTAL, val=np.zeros(nn), units='kW') self.add_output(Dynamic.Mission.NOX_RATE_TOTAL, val=np.zeros(nn), units='lbm/h') @@ -252,8 +252,8 @@ def setup_partials(self): Dynamic.Mission.FUEL_FLOW_RATE_NEGATIVE_TOTAL, Dynamic.Mission.FUEL_FLOW_RATE_NEGATIVE, val=deriv, rows=r, cols=c) self.declare_partials( - Dynamic.Mission.ELECTRIC_POWER_TOTAL, - Dynamic.Mission.ELECTRIC_POWER, val=deriv, rows=r, cols=c) + Dynamic.Mission.ELECTRIC_POWER_IN_TOTAL, + Dynamic.Mission.ELECTRIC_POWER_IN, val=deriv, rows=r, cols=c) self.declare_partials( Dynamic.Mission.NOX_RATE_TOTAL, Dynamic.Mission.NOX_RATE, @@ -265,12 +265,12 @@ def compute(self, inputs, outputs): thrust = inputs[Dynamic.Mission.THRUST] thrust_max = inputs[Dynamic.Mission.THRUST_MAX] fuel_flow = inputs[Dynamic.Mission.FUEL_FLOW_RATE_NEGATIVE] - electric = inputs[Dynamic.Mission.ELECTRIC_POWER] + electric = inputs[Dynamic.Mission.ELECTRIC_POWER_IN] nox = inputs[Dynamic.Mission.NOX_RATE] outputs[Dynamic.Mission.THRUST_TOTAL] = np.dot(thrust, num_engines) outputs[Dynamic.Mission.THRUST_MAX_TOTAL] = np.dot(thrust_max, num_engines) outputs[Dynamic.Mission.FUEL_FLOW_RATE_NEGATIVE_TOTAL] = np.dot( fuel_flow, num_engines) - outputs[Dynamic.Mission.ELECTRIC_POWER_TOTAL] = np.dot(electric, num_engines) + outputs[Dynamic.Mission.ELECTRIC_POWER_IN_TOTAL] = np.dot(electric, num_engines) outputs[Dynamic.Mission.NOX_RATE_TOTAL] = np.dot(nox, num_engines) diff --git a/aviary/subsystems/propulsion/test/test_custom_engine_model.py b/aviary/subsystems/propulsion/test/test_custom_engine_model.py index d682914bc..8a7c365f5 100644 --- a/aviary/subsystems/propulsion/test/test_custom_engine_model.py +++ b/aviary/subsystems/propulsion/test/test_custom_engine_model.py @@ -61,7 +61,7 @@ def setup(self): shape=nn, units='lbm/s', desc='Current fuel flow rate (scaled)') - self.add_output(Dynamic.Mission.ELECTRIC_POWER, + self.add_output(Dynamic.Mission.ELECTRIC_POWER_IN, shape=nn, units='W', desc='Current electric energy rate (scaled)') diff --git a/aviary/subsystems/propulsion/test/test_propulsion_mission.py b/aviary/subsystems/propulsion/test/test_propulsion_mission.py index 1ad3d82f2..0ea367c4b 100644 --- a/aviary/subsystems/propulsion/test/test_propulsion_mission.py +++ b/aviary/subsystems/propulsion/test/test_propulsion_mission.py @@ -115,7 +115,7 @@ def test_propulsion_sum(self): np.array([[602.11, 3554], [100, 9000]])) self.prob.set_val(Dynamic.Mission.FUEL_FLOW_RATE_NEGATIVE, np.array([[123, -221.44], [-765.2, -1]])) - self.prob.set_val(Dynamic.Mission.ELECTRIC_POWER, + self.prob.set_val(Dynamic.Mission.ELECTRIC_POWER_IN, np.array([[3.01, -12], [484.2, 8123]])) self.prob.set_val(Dynamic.Mission.NOX_RATE, np.array([[322, 4610], [1.54, 2.844]])) @@ -126,20 +126,20 @@ def test_propulsion_sum(self): thrust_max = self.prob.get_val(Dynamic.Mission.THRUST_MAX_TOTAL, units='lbf') fuel_flow = self.prob.get_val( Dynamic.Mission.FUEL_FLOW_RATE_NEGATIVE_TOTAL, units='lb/h') - electric_power = self.prob.get_val( - Dynamic.Mission.ELECTRIC_POWER_TOTAL, units='kW') + electric_power_in = self.prob.get_val( + Dynamic.Mission.ELECTRIC_POWER_IN_TOTAL, units='kW') nox = self.prob.get_val(Dynamic.Mission.NOX_RATE_TOTAL, units='lb/h') expected_thrust = np.array([2347.202, 14535]) expected_thrust_max = np.array([8914.33, 18300]) expected_fuel_flow = np.array([-73.88, -2297.6]) - expected_electric_power = np.array([-14.97, 17698.6]) + expected_electric_power_in = np.array([-14.97, 17698.6]) expected_nox = np.array([10186, 10.308]) assert_near_equal(thrust, expected_thrust, tolerance=1e-12) assert_near_equal(thrust_max, expected_thrust_max, tolerance=1e-12) assert_near_equal(fuel_flow, expected_fuel_flow, tolerance=1e-12) - assert_near_equal(electric_power, expected_electric_power, tolerance=1e-12) + assert_near_equal(electric_power_in, expected_electric_power_in, tolerance=1e-12) assert_near_equal(nox, expected_nox, tolerance=1e-12) partial_data = self.prob.check_partials(out_stream=None, method="cs") diff --git a/aviary/subsystems/propulsion/utils.py b/aviary/subsystems/propulsion/utils.py index 50cf1fabd..10c238e65 100644 --- a/aviary/subsystems/propulsion/utils.py +++ b/aviary/subsystems/propulsion/utils.py @@ -33,7 +33,7 @@ class EngineModelVariables(Enum): SHAFT_POWER_CORRECTED = auto() RAM_DRAG = auto() FUEL_FLOW = auto() - ELECTRIC_POWER = auto() + ELECTRIC_POWER_IN = auto() NOX_RATE = auto() TEMPERATURE_ENGINE_T4 = auto() # EXIT_AREA = auto() @@ -51,7 +51,7 @@ class EngineModelVariables(Enum): EngineModelVariables.SHAFT_POWER_CORRECTED: 'hp', EngineModelVariables.RAM_DRAG: 'lbf', EngineModelVariables.FUEL_FLOW: 'lb/h', - EngineModelVariables.ELECTRIC_POWER: 'kW', + EngineModelVariables.ELECTRIC_POWER_IN: 'kW', EngineModelVariables.NOX_RATE: 'lb/h', EngineModelVariables.TEMPERATURE_ENGINE_T4: 'degR' # EngineModelVariables.EXIT_AREA: 'ft**2', diff --git a/aviary/subsystems/test/subsystem_tester.py b/aviary/subsystems/test/subsystem_tester.py index 4a364f81e..771ceb003 100644 --- a/aviary/subsystems/test/subsystem_tester.py +++ b/aviary/subsystems/test/subsystem_tester.py @@ -253,7 +253,6 @@ def test_check_state_variables(self): prob.final_setup() inputs = prob.model.list_inputs(out_stream=None, prom_name=True) - outputs = prob.model.list_outputs(out_stream=None, prom_name=True) for key, value in states.items(): if mission_sys is not None: @@ -262,14 +261,6 @@ def test_check_state_variables(self): self.assertTrue(state_var_exists, f"State variable '{key}' not found in the model.") - # Check rate_source variable existence - if 'rate_source' in value: - rate_source = value['rate_source'] - rate_source_exists = any( - rate_source in output[0] for output in outputs) - self.assertTrue( - rate_source_exists, f"Rate source variable '{rate_source}' for state '{key}' not found in the model.") - def test_check_pre_mission(self): if not hasattr(self, 'aviary_values'): self.aviary_values = AviaryValues() @@ -344,11 +335,12 @@ def test_check_constraints(self): inputs = prob.model.list_inputs(out_stream=None, prom_name=True) outputs = prob.model.list_outputs(out_stream=None, prom_name=True) + name = self.subsystem_builder.default_name for key, value in constraints.items(): # Check constraint existence constraint_exists = (any(key == output[1]['prom_name'] for output in outputs) or any( - key == input[1]['prom_name'] for input in inputs)) + key == input[1]['prom_name'] for input in inputs) or any(key == f'{name}.{output[1]["prom_name"]}' for output in outputs) or any(key == f'{name}.{input[1]["prom_name"]}' for input in inputs)) self.assertTrue(constraint_exists, f"Constraint '{key}' not found in the model.") diff --git a/aviary/utils/engine_deck_conversion.py b/aviary/utils/engine_deck_conversion.py index 7faa40259..596a2086a 100644 --- a/aviary/utils/engine_deck_conversion.py +++ b/aviary/utils/engine_deck_conversion.py @@ -38,7 +38,7 @@ def __str__(self): SHAFT_POWER_CORRECTED = EngineModelVariables.SHAFT_POWER_CORRECTED RAM_DRAG = EngineModelVariables.RAM_DRAG FUEL_FLOW = EngineModelVariables.FUEL_FLOW -ELECTRIC_POWER = EngineModelVariables.ELECTRIC_POWER +ELECTRIC_POWER_IN = EngineModelVariables.ELECTRIC_POWER_IN NOX_RATE = EngineModelVariables.NOX_RATE TEMPERATURE = EngineModelVariables.TEMPERATURE_ENGINE_T4 # EXIT_AREA = EngineModelVariables.EXIT_AREA diff --git a/aviary/validation_cases/benchmark_tests/test_battery_in_a_mission.py b/aviary/validation_cases/benchmark_tests/test_battery_in_a_mission.py new file mode 100644 index 000000000..3ffe0c2e7 --- /dev/null +++ b/aviary/validation_cases/benchmark_tests/test_battery_in_a_mission.py @@ -0,0 +1,96 @@ +import unittest + +from openmdao.utils.testing_utils import use_tempdirs +from openmdao.utils.assert_utils import assert_near_equal + +import aviary.api as av + +from aviary.subsystems.energy.battery_builder import BatteryBuilder + + +@use_tempdirs +class TestSubsystemsMission(unittest.TestCase): + def setUp(self): + self.phase_info = { + 'pre_mission': { + 'include_takeoff': False, + 'external_subsystems': [BatteryBuilder()], + 'optimize_mass': True, + }, + 'cruise': { + "subsystem_options": {"core_aerodynamics": {"method": "computed"}}, + 'external_subsystems': [BatteryBuilder()], + "user_options": { + "optimize_mach": False, + "optimize_altitude": False, + "polynomial_control_order": 1, + "num_segments": 5, + "order": 3, + "solve_for_distance": False, + "initial_mach": (0.72, "unitless"), + "final_mach": (0.72, "unitless"), + "mach_bounds": ((0.7, 0.74), "unitless"), + "initial_altitude": (35000.0, "ft"), + "final_altitude": (35000.0, "ft"), + "altitude_bounds": ((23000.0, 38000.0), "ft"), + "throttle_enforcement": "boundary_constraint", + "fix_initial": True, + "constrain_final": False, + "fix_duration": False, + "initial_bounds": ((0.0, 0.0), "min"), + "duration_bounds": ((10., 30.), "min"), + }, + }, + 'post_mission': { + 'include_landing': False, + 'external_subsystems': [], + } + } + + def test_subsystems_in_a_mission(self): + phase_info = self.phase_info.copy() + + prob = av.AviaryProblem() + + prob.load_inputs( + "models/test_aircraft/aircraft_for_bench_FwFm_with_electric.csv", phase_info) + + # Preprocess inputs + prob.check_and_preprocess_inputs() + + prob.add_pre_mission_systems() + + prob.add_phases() + + prob.add_post_mission_systems() + + # Link phases and variables + prob.link_phases() + + prob.add_driver('SLSQP') + + prob.add_design_variables() + + prob.add_objective('fuel_burned') + + prob.setup() + + prob.set_initial_guesses() + + prob.set_val(av.Aircraft.Battery.PACK_ENERGY_DENSITY, 550, units='kJ/kg') + prob.set_val(av.Aircraft.Battery.PACK_MASS, 1000, units='lbm') + prob.set_val(av.Aircraft.Battery.ADDITIONAL_MASS, 115, units='lbm') + + prob.run_aviary_problem() + + electric_energy_used = prob.get_val( + f'traj.cruise.timeseries.{av.Dynamic.Mission.CUMULATIVE_ELECTRIC_ENERGY_USED}', units='kW*h') + fuel_burned = prob.get_val(av.Mission.Summary.FUEL_BURNED, units='lbm') + + # Check outputs + assert_near_equal(electric_energy_used[-1], 42.5594728, 1.e-7) + assert_near_equal(fuel_burned, 805.8963261, 1.e-7) + + +if __name__ == "__main__": + unittest.main() diff --git a/aviary/variable_info/variable_meta_data.py b/aviary/variable_info/variable_meta_data.py index 26879b9a7..a93afa353 100644 --- a/aviary/variable_info/variable_meta_data.py +++ b/aviary/variable_info/variable_meta_data.py @@ -203,6 +203,123 @@ default_value=1.0, ) +# ____ _ _ +# | _ \ | | | | +# | |_) | __ _ | |_ | |_ ___ _ __ _ _ +# | _ < / _` | | __| | __| / _ \ | '__| | | | | +# | |_) | | (_| | | |_ | |_ | __/ | | | |_| | +# |____/ \__,_| \__| \__| \___| |_| \__, | +# __/ | +# |___/ +# ================================================= +add_meta_data( + Aircraft.Battery.ADDITIONAL_MASS, + meta_data=_MetaData, + historical_name={"GASP": None, + "FLOPS": None, + "LEAPS1": 'aircraft.inputs.L0_battery.weight_offset' + }, + units='lbm', + desc='mass of non energy-storing parts of the battery', + default_value=0.0, +) + +add_meta_data( + Aircraft.Battery.DISCHARGE_LIMIT, + meta_data=_MetaData, + historical_name={"GASP": 'INGASP.SOCMIN', + "FLOPS": None, + "LEAPS1": 'aircraft.inputs.L0_battery.depth_of_discharge' + }, + units='unitless', + desc='default constraint on how far the battery can discharge, as a proportion of ' + 'total energy capacity', + default_value=0.2, +) + +add_meta_data( + Aircraft.Battery.EFFICIENCY, + meta_data=_MetaData, + historical_name={"GASP": 'INGASP.EFF_BAT', + "FLOPS": None, + "LEAPS1": None + }, + units='unitless', + desc="battery pack efficiency" +) + +add_meta_data( + Aircraft.Battery.ENERGY_CAPACITY, + meta_data=_MetaData, + historical_name={"GASP": 'EBATTAVL', + "FLOPS": None, + "LEAPS1": None + }, + units='kJ', + desc="total energy the battery can store" +) + +add_meta_data( + Aircraft.Battery.MASS, + meta_data=_MetaData, + historical_name={"GASP": 'INGASP.WBATTIN', + "FLOPS": None, + "LEAPS1": 'aircraft.inputs.L0_battery.weight' + }, + units='lbm', + desc='total mass of the battery', + default_value=0.0, +) + +add_meta_data( + Aircraft.Battery.PACK_ENERGY_DENSITY, + meta_data=_MetaData, + historical_name={"GASP": 'INGASP.ENGYDEN', + "FLOPS": None, + "LEAPS1": 'aircraft.inputs.L0_battery.energy_density' + }, + units='kW*h/kg', + desc='specific energy density of the battery pack', + default_value=1.0, +) + + +add_meta_data( + Aircraft.Battery.PACK_MASS, + meta_data=_MetaData, + historical_name={"GASP": None, + "FLOPS": None, + "LEAPS1": None + }, + units='lbm', + desc='mass of the energy-storing components of the battery', + default_value=0.0, +) + +add_meta_data( + Aircraft.Battery.PACK_VOLUMETRIC_DENSITY, + meta_data=_MetaData, + historical_name={"GASP": None, + "FLOPS": None, + "LEAPS1": None + }, + units='kW*h/L', + desc='volumetric density of the battery pack', + default_value=0, +) + +add_meta_data( + Aircraft.Battery.VOLUME, + meta_data=_MetaData, + historical_name={"GASP": None, + "FLOPS": None, + "LEAPS1": None + }, + units='ft*3', + desc='total volume of the battery pack', + default_value=0.0, +) + # ____ _ _ _ __ __ _ ____ _ # | _ \ | | | | | | \ \ / / (_) | _ \ | | @@ -6030,6 +6147,28 @@ '(at hypothetical maximum thrust condition)' ) +add_meta_data( + Dynamic.Mission.BATTERY_STATE_OF_CHARGE, + meta_data=_MetaData, + historical_name={"GASP": None, + "FLOPS": None, + "LEAPS1": None + }, + units='unitless', + desc="battery's current state of charge" +) + +add_meta_data( + Dynamic.Mission.CUMULATIVE_ELECTRIC_ENERGY_USED, + meta_data=_MetaData, + historical_name={"GASP": None, + "FLOPS": None, + "LEAPS1": None + }, + units='kJ', + desc='Total amount of electric energy consumed by the vehicle up until this point in the mission', +) + add_meta_data( Dynamic.Mission.DENSITY, meta_data=_MetaData, @@ -6086,19 +6225,18 @@ ) add_meta_data( - Dynamic.Mission.ELECTRIC_POWER, + Dynamic.Mission.ELECTRIC_POWER_IN, meta_data=_MetaData, historical_name={"GASP": None, "FLOPS": None, "LEAPS1": None }, units='kW', - desc='Current electric power consumption of the vehicle, per single instance of ' - 'each engine model' + desc='Current electric power consumption of each engine', ) add_meta_data( - Dynamic.Mission.ELECTRIC_POWER_TOTAL, + Dynamic.Mission.ELECTRIC_POWER_IN_TOTAL, meta_data=_MetaData, historical_name={"GASP": None, "FLOPS": None, diff --git a/aviary/variable_info/variables.py b/aviary/variable_info/variables.py index 72e45a422..31e3cae43 100644 --- a/aviary/variable_info/variables.py +++ b/aviary/variable_info/variables.py @@ -26,6 +26,17 @@ class Avionics: MASS = 'aircraft:avionics:mass' MASS_SCALER = 'aircraft:avionics:mass_scaler' + class Battery: + ADDITIONAL_MASS = 'aircraft:battery:additional_mass' + DISCHARGE_LIMIT = 'aircraft:battery:discharge_limit' + EFFICIENCY = 'aircraft:battery:efficiency' + ENERGY_CAPACITY = 'aircraft:battery:energy_capacity' + MASS = 'aircraft:battery:mass' + PACK_ENERGY_DENSITY = 'aircraft:battery:pack_energy_density' + PACK_MASS = 'aircraft:battery:pack_mass' + PACK_VOLUMETRIC_DENSITY = 'aircraft:battery:pack_volumetric_density' + VOLUME = 'aircraft:battery:volume' + class BWB: CABIN_AREA = 'aircraft:blended_wing_body_design:cabin_area' NUM_BAYS = 'aircraft:blended_wing_body_design:num_bays' @@ -583,13 +594,15 @@ class Mission: ALTITUDE = 'altitude' ALTITUDE_RATE = 'altitude_rate' ALTITUDE_RATE_MAX = 'altitude_rate_max' + BATTERY_STATE_OF_CHARGE = 'battery_state_of_charge' + CUMULATIVE_ELECTRIC_ENERGY_USED = 'cumulative_electric_energy_used' DENSITY = 'density' DISTANCE = 'distance' DISTANCE_RATE = 'distance_rate' DRAG = 'drag' DYNAMIC_PRESSURE = 'dynamic_pressure' - ELECTRIC_POWER = 'electric_power' - ELECTRIC_POWER_TOTAL = 'electric_power_total' + ELECTRIC_POWER_IN = 'electric_power_in' + ELECTRIC_POWER_IN_TOTAL = 'electric_power_in_total' # EXIT_AREA = 'exit_area' FLIGHT_PATH_ANGLE = 'flight_path_angle' FLIGHT_PATH_ANGLE_RATE = 'flight_path_angle_rate'