Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 4
0
    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."))
Ejemplo n.º 5
0
    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