def __check_values(self, entity_id, entity_type, value_entity, value_json, variable_name): """ Checks if two values are the same and issues a detailed error message in case they do not match up to the specified tolerance Keyword arguments: self -- It signifies an instance of a class. entity_id -- The Kratos node or element to check entity_type -- The type of the entity value_entity -- The value on the entity value_json -- The reference value from the json variable_name -- The name of the variable """ relevant_digits = int( max(self.rel_tol_digits, self.abs_tol_digits)) + 1 # +1 for one more digit of output isclosethis = t_isclose(value_entity, value_json, rel_tol=self.rel_tol, abs_tol=self.abs_tol) msg = 'Error checking {} #{} for variable {} results:\n'.format( entity_type, entity_id, variable_name) msg += '%.*f != %.*f; rel_tol=%.*f, abs_tol=%.*f' % ( relevant_digits, value_entity, relevant_digits, value_json, self.rel_tol_digits, self.rel_tol, self.abs_tol_digits, self.abs_tol) self.assertTrue(isclosethis, msg=msg)
def _check_results(self, result, reference, rel_tol, abs_tol): isclosethis = t_isclose(result, reference, rel_tol, abs_tol) full_msg = "Failed with following parameters:\n" full_msg += str(result) + " != " + str(reference) + ", rel_tol = " full_msg += str(rel_tol) + ", abs_tol = " + str(abs_tol) self.assertTrue(isclosethis, msg=full_msg)
def __CheckCloseValues(self, val_a, val_b, additional_info=""): isclosethis = t_isclose(val_a, val_b, rel_tol=self.reltol, abs_tol=self.tol) full_msg = self.info_msg + "\n" full_msg += str(val_a) + " != " + str(val_b) + ", rel_tol = " full_msg += str(self.reltol) + ", abs_tol = " + str(self.tol) if additional_info != "": full_msg += "\n" + additional_info self.assertTrue(isclosethis, msg=full_msg)
def ExecuteFinalizeSolutionStep(self): tol = self.params["tolerance"].GetDouble() reltol = self.params["relative_tolerance"].GetDouble() time = self.model_part.ProcessInfo.GetValue(KratosMultiphysics.TIME) dt = self.model_part.ProcessInfo.GetValue( KratosMultiphysics.DELTA_TIME) step = self.model_part.ProcessInfo.GetValue(KratosMultiphysics.STEP) self.time_counter += dt if self.time_counter > self.frequency: self.time_counter = 0.0 input_time_list = self.data["TIME"] # Material points values for mp in self.model_part.Elements: compute = self.__check_flag(mp) if (compute == True): for i in range(self.params["check_variables"].size()): out = self.params["check_variables"][i] variable_name = out.GetString() variable = KratosMultiphysics.KratosGlobals.GetVariable( variable_name) variable_type = KratosMultiphysics.KratosGlobals.GetVariableType( variable_name) value = mp.CalculateOnIntegrationPoints( variable, self.model_part.ProcessInfo)[0] # Scalar variable if (variable_type == "Double" or variable_type == "Component"): values_json = self.data["PARTICLE_" + str(mp.Id)][variable_name] value_json = self.__linear_interpolation( time, input_time_list, values_json) isclosethis = t_isclose(value, value_json, rel_tol=reltol, abs_tol=tol) self.assertTrue( isclosethis, msg=(str(value) + " != " + str(value_json) + ", rel_tol = " + str(reltol) + ", abs_tol = " + str(tol) + " : Error checking particle " + str(mp.Id) + " " + variable_name + " results.")) # Array variable elif variable_type == "Array": if (KratosMultiphysics.KratosGlobals. GetVariableType(variable_name + "_X") == "Component"): for component_index, component in enumerate( ["_X", "_Y", "_Z"]): values_json = self.data[ "PARTICLE_" + str(mp.Id)][variable_name + component] value_json = self.__linear_interpolation( time, input_time_list, values_json) isclosethis = t_isclose( value[component_index], value_json, rel_tol=reltol, abs_tol=tol) self.assertTrue( isclosethis, msg=(str(value[component_index]) + " != " + str(value_json) + ", rel_tol = " + str(reltol) + ", abs_tol = " + str(tol) + " : Error checking particle " + str(mp.Id) + " " + variable_name + " results.")) else: values_json = self.data[ "PARTICLE_" + str(mp.Id)][variable_name][step - 1] for index in range(len(value)): value_json = values_json[ index] # self.__linear_interpolation(time, input_time_list, values_json[index]) isclosethis = t_isclose(value[index], value_json, rel_tol=reltol, abs_tol=tol) self.assertTrue( isclosethis, msg=(str(value) + " != " + str(value_json) + ", rel_tol = " + str(reltol) + ", abs_tol = " + str(tol) + " : Error checking particle " + str(mp.Id) + " " + variable_name + " results.")) # Vector variable elif variable_type == "Vector": values_json = self.data[ "PARTICLE_" + str(mp.Id)][variable_name][step - 1] for index in range(len(value)): value_json = values_json[ index] # self.__linear_interpolation(time, input_time_list, values_json[index]) isclosethis = t_isclose(value[index], value_json, rel_tol=reltol, abs_tol=tol) self.assertTrue( isclosethis, msg=(str(value) + " != " + str(value_json) + ", rel_tol = " + str(reltol) + ", abs_tol = " + str(tol) + " : Error checking particle " + str(mp.Id) + " " + variable_name + " results."))
def ExecuteFinalizeSolutionStep(self): """ This method is executed in order to finalize the current step Here the dictionary containing the solution is filled Keyword arguments: self -- It signifies an instance of a class. """ tol = self.params["tolerance"].GetDouble() reltol = self.params["relative_tolerance"].GetDouble() time = self.sub_model_part.ProcessInfo.GetValue(KratosMultiphysics.TIME) dt = self.sub_model_part.ProcessInfo.GetValue(KratosMultiphysics.DELTA_TIME) step = self.sub_model_part.ProcessInfo.GetValue(KratosMultiphysics.STEP) self.time_counter += dt if self.time_counter > self.frequency: self.time_counter = 0.0 input_time_list = self.data["TIME"] # Nodal values for node in self.sub_model_part.Nodes: compute = self.__check_flag(node) if compute is True: for i in range(self.params["check_variables"].size()): out = self.params["check_variables"][i] variable_name = out.GetString() variable = KratosMultiphysics.KratosGlobals.GetVariable( variable_name ) variable_type = KratosMultiphysics.KratosGlobals.GetVariableType(variable_name) if self.historical_value is True: value = node.GetSolutionStepValue(variable, 0) else: value = node.GetValue(variable) # Scalar variable if (variable_type == "Double" or variable_type == "Component"): values_json = self.data["NODE_" + str(node.Id)][variable_name] value_json = self.__linear_interpolation(time, input_time_list, values_json) isclosethis = t_isclose(value, value_json, rel_tol=reltol, abs_tol=tol) self.assertTrue(isclosethis, msg=(str(value) + " != " + str(value_json) + ", rel_tol = " + str(reltol) + ", abs_tol = " + str(tol) + " : Error checking node " + str(node.Id) + " " + variable_name + " results.")) # Array variable elif variable_type == "Array": if (KratosMultiphysics.KratosGlobals.GetVariableType(variable_name + "_X") == "Component"): # X-component values_json = self.data["NODE_" + str(node.Id)][variable_name + "_X"] value_json = self.__linear_interpolation(time, input_time_list, values_json) isclosethis = t_isclose(value[0], value_json, rel_tol=reltol, abs_tol=tol) self.assertTrue(isclosethis, msg=(str(value[0]) + " != " + str(value_json) + ", rel_tol = " + str(reltol) + ", abs_tol = " + str(tol) + " : Error checking node " + str(node.Id) + " " + variable_name + " results.")) # Y-component values_json = self.data["NODE_" + str(node.Id)][variable_name + "_Y"] value_json = self.__linear_interpolation(time, input_time_list, values_json) isclosethis = t_isclose(value[1], value_json, rel_tol=reltol, abs_tol=tol) self.assertTrue(isclosethis, msg=(str(value[1]) + " != "+str(value_json) + ", rel_tol = " + str(reltol) + ", abs_tol = " + str(tol) + " : Error checking node " + str(node.Id) + " " + variable_name + " results.")) # Z-component values_json = self.data["NODE_" + str(node.Id)][variable_name + "_Z"] value_json = self.__linear_interpolation(time, input_time_list, values_json) isclosethis = t_isclose(value[2], value_json, rel_tol=reltol, abs_tol=tol) self.assertTrue(isclosethis, msg=(str(value[2])+" != " + str(value_json) + ", rel_tol = " + str(reltol) + ", abs_tol = " + str(tol) + " : Error checking node " + str(node.Id) + " " + variable_name + " results.")) else: values_json = self.data["NODE_"+str(node.Id)][variable_name][self.step_counter] for index in range(len(value)): value_json = values_json[index] # self.__linear_interpolation(time, input_time_list, values_json[index]) isclosethis = t_isclose(value[index], value_json, rel_tol=reltol, abs_tol=tol) self.assertTrue(isclosethis, msg=(str(value[index]) + " != " + str(value_json) + ", rel_tol = " + str(reltol) + ", abs_tol = " + str(tol) + " : Error checking node " + str(node.Id) + " " + variable_name + " results.")) # Vector variable elif variable_type == "Vector": values_json = self.data["NODE_"+str(node.Id)][variable_name][self.step_counter] for index in range(len(value)): value_json = values_json[index] # self.__linear_interpolation(time, input_time_list, values_json[index]) isclosethis = t_isclose(value[index], value_json, rel_tol=reltol, abs_tol=tol) self.assertTrue(isclosethis, msg=(str(value[index]) + " != " + str(value_json) + ", rel_tol = " + str(reltol) + ", abs_tol = " + str(tol) + " : Error checking node " + str(node.Id) + " " + variable_name + " results.")) # Nodal values for elem in self.sub_model_part.Elements: compute = self.__check_flag(elem) if compute is True: for i in range(self.params["gauss_points_check_variables"].size()): out = self.params["gauss_points_check_variables"][i] variable_name = out.GetString() variable = KratosMultiphysics.KratosGlobals.GetVariable( variable_name ) variable_type = KratosMultiphysics.KratosGlobals.GetVariableType(variable_name) value = elem.CalculateOnIntegrationPoints(variable, self.sub_model_part.ProcessInfo) gauss_point_number = len(value) # Scalar variable if (variable_type == "Double" or variable_type == "Component"): for gp in range(gauss_point_number): values_json = self.data["ELEMENT_"+str(elem.Id)][variable_name][str(gp)] value_json = self.__linear_interpolation(time, input_time_list, values_json) isclosethis = t_isclose(value[gp], value_json, rel_tol=reltol, abs_tol=tol) self.assertTrue(isclosethis, msg=(str(value[gp]) + " != " + str(value_json) + ", rel_tol = " + str(reltol) + ", abs_tol = " + str(tol) + " : Error checking elem " + str(elem.Id) + " " + variable_name + " results.")) # Array variable elif variable_type == "Array": if (KratosMultiphysics.KratosGlobals.GetVariableType(variable_name + "_X") == "Component"): for gp in range(gauss_point_number): # X-component values_json = self.data["ELEMENT_" + str(elem.Id)][variable_name + "_X"][str(gp)] value_json = self.__linear_interpolation(time, input_time_list, values_json) isclosethis = t_isclose(value[gp][0], value_json, rel_tol=reltol, abs_tol=tol) self.assertTrue(isclosethis, msg=(str(value[gp][0]) + " != " + str(value_json) + ", rel_tol = " + str(reltol) + ", abs_tol = " + str(tol) + " : Error checking elem " + str(elem.Id) + " " + variable_name + " results.")) # Y-component values_json = self.data["ELEMENT_"+str(elem.Id)][variable_name + "_Y"][str(gp)] value_json = self.__linear_interpolation(time, input_time_list, values_json) isclosethis = t_isclose(value[gp][1], value_json, rel_tol=reltol, abs_tol=tol) self.assertTrue(isclosethis, msg=(str(value[gp][1]) + " != " + str(value_json) + ", rel_tol = " + str(reltol) + ", abs_tol = " + str(tol) + " : Error checking elem " + str(elem.Id) + " " + variable_name + " results.")) # Z-component values_json = self.data["ELEMENT_"+str(elem.Id)][variable_name + "_Z"][str(gp)] value_json = self.__linear_interpolation(time, input_time_list, values_json) isclosethis = t_isclose(value[gp][2], value_json, rel_tol=reltol, abs_tol=tol) self.assertTrue(isclosethis, msg=(str(value[gp][2]) + " != " + str(value_json) + ", rel_tol = " + str(reltol) + ", abs_tol = " + str(tol) + " : Error checking elem "+str(elem.Id) + " " + variable_name + " results.")) else: for gp in range(gauss_point_number): values_json = self.data["ELEMENT_" + str(elem.Id)][variable_name][str(gp)][self.step_counter] for index in range(len(value[gp])): value_json = values_json[index] # self.__linear_interpolation(time, input_time_list, values_json[index]) isclosethis = t_isclose(value[gp][index], value_json, rel_tol=reltol, abs_tol=tol) self.assertTrue(isclosethis, msg=(str(value[gp][index]) + " != " + str(value_json) + ", rel_tol = " + str(reltol) + ", abs_tol = " + str(tol) + " : Error checking elem " + str(elem.Id) + " " + variable_name + " results.")) # Vector variable elif variable_type == "Vector": for gp in range(gauss_point_number): values_json = self.data["ELEMENT_" + str(elem.Id)][variable_name][str(gp)][self.step_counter] for index in range(len(value[gp])): value_json = values_json[index] # self.__linear_interpolation(time, input_time_list, values_json[index]) isclosethis = t_isclose(value[gp][index], value_json, rel_tol=reltol, abs_tol=tol) self.assertTrue(isclosethis, msg=(str(value[gp][index]) + " != " + str(value_json) + ", rel_tol = " + str(reltol) + ", abs_tol = " + str(tol) + " : Error checking elem " + str(elem.Id) + " " + variable_name + " results.")) # TODO: Add pending classes self.step_counter += 1