def compare_benchmarks(first_benchmark: dict, second_benchmark: dict, output_path: str, filename: str) -> dict: """ It compares the results of two benchmark runs. It uses an 8th-order Lagrange interpolator to compare the state (or the dependent variable, depending on what is given as input) history. The difference is returned in form of a dictionary and, if desired, written to a file named filename and placed in the directory output_path. Parameters ---------- first_benchmark : dict State (or dependent variable history) from the first benchmark. second_benchmark : dict State (or dependent variable history) from the second benchmark. output_path : str If and where to save the benchmark results (if None, results are NOT written). filename : str Name of the output file. Returns ------- benchmark_difference : dict Interpolated difference between the two benchmarks' state (or dependent variable) history. """ # Create 8th-order Lagrange interpolator for first benchmark benchmark_interpolator = interpolators.create_one_dimensional_interpolator(first_benchmark, interpolators.lagrange_interpolation(8)) # Calculate the difference between the benchmarks print('Calculating benchmark differences...') # Initialize difference dictionaries benchmark_difference = dict() # Calculate the difference between the states and dependent variables in an iterative manner for second_epoch in second_benchmark.keys(): benchmark_difference[second_epoch] = benchmark_interpolator.interpolate(second_epoch) - \ second_benchmark[second_epoch] # Write results to files if output_path is not None: save2txt(benchmark_difference, filename, output_path) # Return the interpolator return benchmark_difference
# Create mass rate model mass_rate_settings_on_vehicle = { 'Vehicle': [propagation_setup.mass.from_thrust()] } # Create mass propagator settings (same for all propagations) mass_propagator_settings = propagation_setup.propagator.mass( bodies_to_propagate, mass_rate_settings_on_vehicle, np.array([vehicle_mass]), termination_settings) ########################################################################### # IF DESIRED, GENERATE BENCHMARK ########################################## ########################################################################### if use_benchmark: # Define benchmark interpolator settings to make a comparison between the two benchmarks benchmark_interpolator_settings = interpolators.lagrange_interpolation(8) # Create propagation settings for the benchmark translational_propagator_settings = propagation_setup.propagator.translational( central_bodies, acceleration_settings, bodies_to_propagate, initial_state, termination_settings, output_variables=dependent_variables_to_save) # Note, the following line is needed to properly use the accelerations, and modify them in the Problem class translational_propagator_settings.recreate_state_derivative_models(bodies) # Create multi-type propagation settings list propagator_settings_list = [ translational_propagator_settings, mass_propagator_settings