Beispiel #1
0
    def _SynchronizeOutputData(self, solver_name):
        from_solver = self.solver_wrappers[solver_name]
        output_data_list = self.coupling_sequence[solver_name][
            "output_data_list"]
        if self.echo_level > 2:
            cs_tools.cs_print_info(
                self._ClassName(),
                'Start Synchronizing Output for "{}"'.format(
                    colors.blue(solver_name)))

        for i in range(output_data_list.size()):
            i_output_data = output_data_list[i]

            data_name = i_output_data["data"].GetString()
            to_solver_name = i_output_data["to_solver"].GetString()
            to_solver_data_name = i_output_data["to_solver_data"].GetString()

            if self.echo_level > 2:
                cs_tools.cs_print_info(
                    "  Data", '"{}" | to solver: "{}": "{}"'.format(
                        colors.magenta(data_name), colors.blue(to_solver_name),
                        colors.magenta(to_solver_data_name)))

            # check if data-exchange is specified for current time
            if not KM.IntervalUtility(i_output_data).IsInInterval(self.time):
                if self.echo_level > 2:
                    cs_tools.cs_print_info("  Skipped", 'not in interval')
                continue

            # from solver
            from_solver_data = from_solver.GetInterfaceData(data_name)

            # to solver
            to_solver = self.solver_wrappers[to_solver_name]
            to_solver_data = to_solver.GetInterfaceData(to_solver_data_name)

            # perform the data transfer
            self.__ExecuteCouplingOperations(
                i_output_data["before_data_transfer_operations"])

            data_transfer_operator_name = i_output_data[
                "data_transfer_operator"].GetString()
            # TODO check the order of solvers!
            self.__GetDataTransferOperator(
                data_transfer_operator_name).TransferData(
                    from_solver_data, to_solver_data,
                    i_output_data["data_transfer_operator_options"])

            self.__ExecuteCouplingOperations(
                i_output_data["after_data_transfer_operations"])

            self.__ApplyScaling(to_solver_data, i_output_data)

            # Exporting data to external solvers
            from_solver.ExportCouplingInterfaceData(from_solver_data)

        if self.echo_level > 2:
            cs_tools.cs_print_info(
                self._ClassName(), 'End Synchronizing Output for "{}"'.format(
                    colors.blue(solver_name)))
 def ExportData(self, data_config):
     if self.echo_level > 2:
         cs_tools.cs_print_info(
             "CoSimulationSolverWrapper",
             'Exporting data of solver: "{}" with type: "{}"'.format(
                 colors.blue(self.name), data_config["type"]))
     self.__GetIO().ExportData(data_config)
 def ExportCouplingInterface(self, interface_config):
     if self.echo_level > 2:
         cs_tools.cs_print_info(
             "CoSimulationSolverWrapper",
             'Exporting coupling interface "{}" of solver: "{}"'.format(
                 colors.magenta(interface_config["model_part_name"]),
                 colors.blue(self.name)))
     self.__GetIO().ExportCouplingInterface(interface_config)
Beispiel #4
0
    def _SynchronizeOutputData(self, solver_name):
        from_solver = self.solver_wrappers[solver_name]
        data_list = self.coupling_sequence[solver_name]["output_data_list"]
        if self.echo_level > 2:
            cs_tools.cs_print_info(
                self._ClassName(),
                'Start Synchronizing Output for solver "{}"'.format(
                    colors.blue(solver_name)))

        for i in range(data_list.size()):
            i_data = data_list[i]

            from_data_name = i_data["data"].GetString()
            to_solver_name = i_data["to_solver"].GetString()

            to_solver_data_name = i_data["to_solver_data"].GetString()

            if self.echo_level > 2:
                cs_tools.cs_print_info(
                    "  Data", '"{}" | to solver: "{}": "{}"'.format(
                        colors.magenta(from_data_name),
                        colors.blue(to_solver_name),
                        colors.magenta(to_solver_data_name)))

            # from solver
            from_solver_data = from_solver.GetInterfaceData(from_data_name)

            # to solver
            to_solver = self.solver_wrappers[to_solver_name]
            to_solver_data = to_solver.GetInterfaceData(to_solver_data_name)

            self.__SynchronizeData(i_data, from_solver, from_solver_data,
                                   to_solver, to_solver_data)

        if self.echo_level > 2:
            cs_tools.cs_print_info(
                self._ClassName(),
                'End Synchronizing Output for solver "{}"'.format(
                    colors.blue(solver_name)))
    def SolveSolutionStep(self):
        num_coupling_interfaces = self.settings["coupling_interfaces"].size()

        self.__CustomPrint(
            1,
            colors.green("Starting import") + " of CouplingInterfaceData ...")

        for i in range(num_coupling_interfaces):
            coupling_interface_settings = self.settings["coupling_interfaces"][
                i]
            if not coupling_interface_settings.Has("data_field_recv"):
                continue
            sub_model_part_name = coupling_interface_settings[
                "sub_model_part_name"].GetString()
            data_field_settings = coupling_interface_settings[
                "data_field_recv"]

            data_field_name = data_field_settings["data_field_name"].GetString(
            )

            self.__CustomPrint(
                2,
                colors.green('Importing') +
                ' data-field "{}" on ModelPart "{}"'.format(
                    data_field_name, sub_model_part_name))

            variables = GenerateVariableListFromInput(
                data_field_settings["variables"])

            if not self.dry_run:
                KratosCoSim.EMPIRE_API.EMPIRE_API_recvDataField(
                    self.model["ExtSolver." + sub_model_part_name],
                    data_field_name,
                    *variables)  # passing all varibales from the list
            else:
                self.__CustomPrint(2, colors.magenta('... skipped'))

        self.__CustomPrint(
            1,
            colors.green("Finished import") + " of CouplingInterfaceData")

        if self.echo_level > 0: print()  # newline
        self.__CustomPrint(1, colors.blue("Solving ..."))
        time.sleep(self.solving_time)
        self.__CustomPrint(2,
                           "Solving took {} [sec]".format(self.solving_time))
        if self.echo_level > 0: print()  # newline
        # TODO implement random values ... ?

        self.__CustomPrint(
            1,
            colors.cyan("Starting export") + " of CouplingInterfaceData ...")

        for i in range(num_coupling_interfaces):
            coupling_interface_settings = self.settings["coupling_interfaces"][
                i]
            if not coupling_interface_settings.Has("data_field_send"):
                continue
            sub_model_part_name = coupling_interface_settings[
                "sub_model_part_name"].GetString()
            data_field_settings = coupling_interface_settings[
                "data_field_send"]

            data_field_name = data_field_settings["data_field_name"].GetString(
            )

            self.__CustomPrint(
                2,
                colors.cyan('Exporting') +
                ' data-field "{}" on ModelPart "{}"'.format(
                    data_field_name, sub_model_part_name))

            variables = GenerateVariableListFromInput(
                data_field_settings["variables"])

            if not self.dry_run:
                KratosCoSim.EMPIRE_API.EMPIRE_API_sendDataField(
                    self.model["ExtSolver." + sub_model_part_name],
                    data_field_name,
                    *variables)  # passing all varibales from the list
            else:
                self.__CustomPrint(2, colors.magenta('... skipped'))

        self.__CustomPrint(
            1,
            colors.cyan("Finished export") + " of CouplingInterfaceData")