diff --git a/homework4/exercise_5.py b/homework4/exercise_5.py index 1dc6dfb..82b1511 100644 --- a/homework4/exercise_5.py +++ b/homework4/exercise_5.py @@ -1,42 +1,65 @@ #!/bin/env python3 import numpy as np import argparse -def readPositions(planet_name,directory): + +def readPositions(planet_name, directory): """ :param planet_name: :param directory: :return: """ m = 365 n = 3 planet_position = np.zeros((m, n), dtype=np.float64) - for i in range(0,m): - filename = directory+"step-"+'{:04}'.format(i)+".csv" - with open(filename, 'r') as f : + + if directory == "Trajectories/": + last = 11 + elif directory == "dumps/": + last = 10 + else: + print("wrong directory for reference or solution files") + + for i in range(0, m): + if directory == "Trajectories/": + filename = directory + "step-" + '{:04}'.format(i) + ".csv" + elif directory == "dumps/": + filename = directory + "step-" + '{:05}'.format(i) + ".csv" + else: + print("wrong directory for reference or solution files") + + with open(filename, 'r') as f: data = f.readlines() for line in data: - words = line.split() - if words[11] == planet_name : - planet_position[i,0:n] = np.array(words[0:n], dtype=np.float64) + words = line.split() + if words[last] == planet_name: + planet_position[i, 0:n] = np.array(words[0:n], dtype=np.float64) return planet_position +def computeError(positions_sol, positions_ref): + error = np.sqrt(np.sum(np.power(np.subtract(positions_sol, positions_ref), 2))) + return error -if __name__ == "__main__": +if __name__ == "__main__": parser = argparse.ArgumentParser(description='Compute_error') parser.add_argument('planet_name', type=str, help='specify the name of the planet') - parser.add_argument('directory', type=str, + parser.add_argument('directory_ref', type=str, + help='directory with the reference files for all the steps from 1 to 365') + parser.add_argument('directory_sol', type=str, help='directory with the solution files for all the steps from 1 to 365') args = parser.parse_args() planet_name = args.planet_name - directory = args.directory - planetPosition = readPositions(planet_name,directory ) - print("done") + directory_ref = args.directory_ref + directory_sol = args.directory_sol + positions_ref = readPositions(planet_name, directory_ref) + positions_sol = readPositions(planet_name, directory_sol) + error = computeError(positions_sol, positions_ref) + print(error) diff --git a/homework4/exercise_6.py b/homework4/exercise_6.py new file mode 100644 index 0000000..9d3b166 --- /dev/null +++ b/homework4/exercise_6.py @@ -0,0 +1,42 @@ +#!/bin/env python3 + + +import numpy as np +import argparse + + +def generateInput(scale,planet_name,input_filename,output_filename): + scale_velocity = np.zeros((3,), dtype=np.float64) + out_file = open(output_filename, 'w') + separator = ' ' + with open(input_filename, 'r') as f: + data = f.readlines() + for line in data: + words = line.split() + if words[10] == planet_name: + scale_velocity = np.multiply(scale, np.array(words[3:6], dtype=np.float64)) + string_velocity = np.array2string(scale_velocity, separator=' ') # There is a loss of precision here + out_file.write(separator.join(words[0:3]) + string_velocity[1:-2] + " " + separator.join(words[6:11]) + '\n') + else: + out_file.write(separator.join(words) + '\n') + out_file.close() + return out_file + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Compute_error') + parser.add_argument('planet_name', type=str, + help='specify the name of the planet') + parser.add_argument('scale', type=float, + help='scale for velocity') + parser.add_argument('input_filename', type=str, + help='input filename') + parser.add_argument('output_filename', type=str, + help='output_filename filename') + + args = parser.parse_args() + planet_name = args.planet_name + scale = args.scale + input_filename = args.input_filename + output_filename = args.output_filename + out_file = generateInput(scale, planet_name, input_filename, output_filename) \ No newline at end of file