diff --git a/kratos/python_scripts/json_output_process.py b/kratos/python_scripts/json_output_process.py index a7680cbf73cb..f129fe1a7c3a 100644 --- a/kratos/python_scripts/json_output_process.py +++ b/kratos/python_scripts/json_output_process.py @@ -2,6 +2,9 @@ import KratosMultiphysics from KratosMultiphysics.json_utilities import read_external_json, write_external_json +# Adding operator add +from operator import add + def Factory(settings, Model): if not isinstance(settings, KratosMultiphysics.Parameters): raise Exception("Expected input shall be a Parameters object, encapsulating a json string") @@ -285,16 +288,16 @@ def ExecuteFinalizeSolutionStep(self): data["RESULTANT"][variable_name + "_Z"][-1] += value[2] else: if not self.resultant_solution: - list = self.__kratos_vector_to_python_list(value) - data[node_identifier][variable_name ].append(list) + lst = self.__kratos_vector_to_python_list(value) + data[node_identifier][variable_name ].append(lst) else: aux = 0.0 for index in range(len(value)): aux += value[index] if count == 0: - data["RESULTANT"][variable_name ].append(aux) + data["RESULTANT"][variable_name].append(aux) else: - data["RESULTANT"][variable_name ][-1] += aux + data["RESULTANT"][variable_name][-1] += aux elif variable_type == "Vector": if not self.resultant_solution: data[node_identifier][variable_name].append(self.__kratos_vector_to_python_list(value)) @@ -302,7 +305,7 @@ def ExecuteFinalizeSolutionStep(self): if count == 0: data["RESULTANT"][variable_name].append(self.__kratos_vector_to_python_list(value)) else: - data["RESULTANT"][variable_name][-1] += self.__kratos_vector_to_python_list(value) + data["RESULTANT"][variable_name][-1] = list(map(add, data["RESULTANT"][variable_name][-1], self.__kratos_vector_to_python_list(value))) # TODO: Add pending classes count += 1 @@ -352,9 +355,9 @@ def ExecuteFinalizeSolutionStep(self): data["RESULTANT"][variable_name + "_Z"][str(gp)][-1] += value[gp][2] else: if not self.resultant_solution: - list = self.__kratos_vector_to_python_list(value) + lst = self.__kratos_vector_to_python_list(value) for gp in range(gauss_point_number): - data["ELEMENT_" + str(elem.Id)][variable_name][str(gp)].append(list) + data["ELEMENT_" + str(elem.Id)][variable_name][str(gp)].append(lst) else: if count == 0: for gp in range(gauss_point_number): @@ -371,13 +374,13 @@ def ExecuteFinalizeSolutionStep(self): elif variable_type == "Vector": if not self.resultant_solution: for gp in range(gauss_point_number): - list = self.__kratos_vector_to_python_list(value[gp]) - data["ELEMENT_" + str(elem.Id)][variable_name][str(gp)].append(list) + lst = self.__kratos_vector_to_python_list(value[gp]) + data["ELEMENT_" + str(elem.Id)][variable_name][str(gp)].append(lst) else: if count == 0: for gp in range(gauss_point_number): - list = self.__kratos_vector_to_python_list(value[gp]) - data["RESULTANT"][variable_name][str(gp)][-1] += list + lst = self.__kratos_vector_to_python_list(value[gp]) + data["RESULTANT"][variable_name][str(gp)][-1] += lst # TODO: Add pending classes count += 1 @@ -392,10 +395,10 @@ def __kratos_vector_to_python_list(self, value): value -- The Kratos vector to transform """ - list = [] + lst = [] for index in range(len(value)): - list.append(value[index]) - return list + lst.append(value[index]) + return lst def __generate_variable_list_from_input(self, param): """ Parse a list of variables from input. diff --git a/kratos/tests/test_json_output_process.py b/kratos/tests/test_json_output_process.py index 51f0f900977e..280a733bcb3b 100644 --- a/kratos/tests/test_json_output_process.py +++ b/kratos/tests/test_json_output_process.py @@ -1,11 +1,14 @@ import KratosMultiphysics import KratosMultiphysics.KratosUnittest as KratosUnittest +import KratosMultiphysics.kratos_utilities as KratosUtils from KratosMultiphysics.json_output_process import JsonOutputProcess -import itertools import json +import os from pathlib import Path +def GetFilePath(fileName): + return os.path.join(os.path.dirname(os.path.realpath(__file__)), fileName) class TestJsonOutputProcess(KratosUnittest.TestCase): def setUp(self): @@ -13,6 +16,10 @@ def setUp(self): self.model = KratosMultiphysics.Model() self.model_part = self.model.CreateModelPart("Main") + def tearDown(self): + KratosUtils.DeleteFileIfExisting(GetFilePath("external_forces_output.json")) + KratosUtils.DeleteFileIfExisting(GetFilePath("resultant_external_forces_output.json")) + def add_three_nodes_to_model_part(self): node_ids_and_coordinates = [ (1, 0.0, 0.0, 0.0), @@ -79,6 +86,7 @@ def test_output_of_resultant_vector_variable(self): self.add_vectors_to_nodes_of_model_part( vector_variable_for_testing, test_vectors ) + ref_solution = [6.0, 6.0, 6.0] output_file_path = ( Path(__file__).resolve().parent / "resultant_external_forces_output.json" @@ -103,7 +111,7 @@ def test_output_of_resultant_vector_variable(self): self.assertEqual(len(resultant_vector_variable_results_for_all_time_steps), 1) self.assertVectorAlmostEqual( resultant_vector_variable_results_for_all_time_steps[0], - list(itertools.chain(*test_vectors)), + ref_solution, )