Esempio n. 1
0
    def __init__(self, model, settings):
        Kratos.Process.__init__(self)

        default_parameters = Kratos.Parameters("""
        {
            "model_part_name" : "PLEASE_SPECIFY_MODEL_PART_NAME",
            "input_variable_settings" : [
                {
                    "method_name"    : "sum",
                    "norm_type"      : "none",
                    "container"      : "nodal_historical",
                    "variable_names" : [],
                    "method_settings": {}
                }
            ],
            "output_settings" : {
                "output_control_variable": "STEP",
                "output_time_interval"   : 1,
                "write_kratos_version"   : true,
                "write_time_stamp"       : true,
                "output_file_settings"   : {
                    "file_name"  : "<model_part_name>_<container>_<norm_type>_<method_name>.dat",
                    "output_path": "spatial_statistics_output",
                    "write_buffer_size" : -1
                }
            }
        }  """)

        self.model = model
        self.settings = settings
        self.settings.ValidateAndAssignDefaults(default_parameters)
        self.variables_settings_list = self.settings["input_variable_settings"]
        self.output_settings = self.settings["output_settings"]
        self.output_settings.RecursivelyValidateAndAssignDefaults(
            default_parameters["output_settings"])

        for variable_settings in self.variables_settings_list:
            variable_settings.ValidateAndAssignDefaults(
                default_parameters["input_variable_settings"][0])
            container_name = variable_settings["container"].GetString()
            norm_type = variable_settings["norm_type"].GetString()
            method_name = variable_settings["method_name"].GetString()

            item_container = GetItemContainer(container_name)
            item_norm_container = GetNormTypeContainer(item_container,
                                                       norm_type)
            GetMethod(item_norm_container, method_name)

        self.model_part_name = self.settings["model_part_name"].GetString()

        output_control_variable_name = self.settings["output_settings"][
            "output_control_variable"].GetString()
        if (not Kratos.KratosGlobals.HasVariable(output_control_variable_name)
            ):
            raise Exception(
                "Unknown output control variable. [ \"output_control_variable\" = \""
                + output_control_variable_name + "\" ]")

        Kratos.Logger.PrintInfo("SpatialStatisticsProcess",
                                "Initialized statistics process.")
Esempio n. 2
0
    def CalculateOutput(self):
        for variable_settings, output_file in zip(self.variables_settings_list, self.output_files):
            self.is_output_control_variable_value_written = False
            container_name = variable_settings["container"].GetString()
            norm_type = variable_settings["norm_type"].GetString()
            method_name = variable_settings["method_name"].GetString()

            item_container = GetItemContainer(container_name)
            item_norm_container = GetNormTypeContainer(item_container, norm_type)
            method = GetMethod(item_norm_container, method_name)

            variable_list = []
            variable_names_list = variable_settings["variable_names"].GetStringArray()
            for variable_name in variable_names_list:
                variable_list.append(Kratos.KratosGlobals.GetVariable(variable_name))

            if (norm_type == "none"):
                for index, variable in enumerate(variable_list):
                    output = method(self.__get_model_part(), variable)
                    method_headers = GetMethodHeaders(method_name, variable_settings["method_settings"])
                    self.__write_output(output,  variable_names_list[index], variable_names_list, norm_type, method_name, method_headers, output_file)
            else:
                for index, variable in enumerate(variable_list):
                    output = method(self.__get_model_part(), variable, norm_type, variable_settings["method_settings"])
                    method_headers = GetMethodHeaders(method_name, variable_settings["method_settings"])
                    self.__write_output(output, variable_names_list[index], variable_names_list, norm_type, method_name, method_headers, output_file)
Esempio n. 3
0
    def __TestMethod(self,
                     test_method_name,
                     analytical_method,
                     method_params=Kratos.Parameters("""{}""")):
        for container_type in self.containers_to_test:
            container = SpatialMethodTests.__GetContainer(
                self.model_part, container_type)
            item_method_container = GetItemContainer(container_type)
            for variable, norm_types in self.test_cases.items():
                for norm_type in norm_types:
                    item_method_norm_container = GetNormTypeContainer(
                        item_method_container, norm_type)

                    if (norm_type == "none"
                            and test_method_name in self.norm_only_methods):
                        continue

                    test_method = GetMethod(item_method_norm_container,
                                            test_method_name)
                    if (norm_type == "none"):
                        method_value = test_method(self.model_part, variable)
                    else:
                        method_value = test_method(self.model_part, variable,
                                                   norm_type, method_params)

                    analytical_value = analytical_method(
                        container, container_type, norm_type, variable)
                    CheckValues(self, analytical_value, method_value, 10)
Esempio n. 4
0
    def ExecuteInitialize(self):
        self.method_list = []
        for variable_settings in self.variables_settings_list:
            container_name = variable_settings["container"].GetString()
            norm_type = variable_settings["norm_type"].GetString()
            method_name = variable_settings["method_name"].GetString()
            echo_level = variable_settings["echo_level"].GetInt()

            item_container = GetItemContainer(container_name)
            method = GetMethod(item_container, method_name)
            method_objects = method(self.__get_model_part(), norm_type,
                                    echo_level,
                                    variable_settings["method_settings"])

            self.method_list.extend(method_objects)

        for method in self.method_list:
            method.InitializeStatisticsMethod(self.statistics_control_value)