def test_Export_ImportCouplingInterface_Mesh(
            self):  # can also be Geometry at some point
        p = self.__RunPythonInSubProcess("import_export_mesh")

        model = KM.Model()
        io_settings = KM.Parameters("""{
            "connect_to" : "impExpMesh"
        }""")
        solver_name = "ExpImpMesh"  # aka "my_name" for the CoSimIO
        kratos_co_sim_io = CreateKratosCoSimIO(io_settings, model,
                                               solver_name)  # this connects
        kratos_co_sim_io.Initialize()

        model_part = model.CreateModelPart("mesh_exchange_1")
        model_part_returned = model.CreateModelPart("mesh_exchange_2")

        for i in range(15):
            model_part.CreateNewNode(i + 1, i * 1.1, 1.1**i, 0.0)
        props = model_part.CreateNewProperties(0)
        for i in range(9):  # this leaves some hanging nodes
            model_part.CreateNewElement("Element2D2N", i + 1, [i + 1, i + 2],
                                        props)

        interface_configuration_export = {"model_part_name": "mesh_exchange_1"}
        kratos_co_sim_io.ExportCouplingInterface(
            interface_configuration_export)

        interface_configuration_import = {"model_part_name": "mesh_exchange_2"}
        kratos_co_sim_io.ImportCouplingInterface(
            interface_configuration_import)

        kratos_co_sim_io.Finalize()  # this disconnects

        # checking the values after disconnecting to avoid deadlock
        self.assertEqual(model_part.NumberOfNodes(),
                         model_part_returned.NumberOfNodes())
        self.assertEqual(model_part.NumberOfElements(),
                         model_part_returned.NumberOfElements())

        for node_orig, node_exchanged in zip(model_part.Nodes,
                                             model_part_returned.Nodes):
            self.assertEqual(node_orig.Id, node_exchanged.Id)
            self.assertAlmostEqual(node_orig.X0, node_exchanged.X0)
            self.assertAlmostEqual(node_orig.Y0, node_exchanged.Y0)
            self.assertAlmostEqual(node_orig.Z0, node_exchanged.Z0)

        for elem_orig, elem_exchanged in zip(model_part.Elements,
                                             model_part_returned.Elements):
            self.assertEqual(len(elem_orig.GetNodes()),
                             len(elem_exchanged.GetNodes()))
            for node_orig, node_exchanged in zip(elem_orig.GetNodes(),
                                                 elem_exchanged.GetNodes()):
                self.assertEqual(node_orig.Id, node_exchanged.Id)
                self.assertAlmostEqual(node_orig.X0, node_exchanged.X0)
                self.assertAlmostEqual(node_orig.Y0, node_exchanged.Y0)
                self.assertAlmostEqual(node_orig.Z0, node_exchanged.Z0)

        self.__CheckSubProcess(p)
    def test_Export_ImportCouplingData(self):
        p = self.__RunPythonInSubProcess("import_export_data")

        model = KM.Model()
        io_settings = KM.Parameters("""{
            "connect_to" : "impExp"
        }""")
        solver_name = "ExpImp"  # aka "my_name" for the CoSimIO
        kratos_co_sim_io = CreateKratosCoSimIO(io_settings, model,
                                               solver_name)  # this connects
        kratos_co_sim_io.Initialize()

        model_part = model.CreateModelPart("for_test")
        model_part.AddNodalSolutionStepVariable(KM.PRESSURE)
        model_part.AddNodalSolutionStepVariable(KM.TEMPERATURE)
        for i in range(5):
            node = model_part.CreateNewNode(
                i + 1, 0.0, 0.0,
                0.0)  # using same coord, doesn't matter for this test
            node.SetSolutionStepValue(KM.PRESSURE, i * 1.7)

        settings_pres = KM.Parameters("""{
            "model_part_name" : "for_test",
            "variable_name"   : "PRESSURE"
        }""")

        settings_temp = KM.Parameters("""{
            "model_part_name" : "for_test",
            "variable_name"   : "TEMPERATURE"
        }""")
        interface_data_pres = CouplingInterfaceData(settings_pres, model,
                                                    "data_exchange_1")
        interface_data_temp = CouplingInterfaceData(settings_temp, model,
                                                    "data_exchange_2")
        interface_data_pres.Initialize()
        interface_data_temp.Initialize()

        data_configuration_export = {
            "type": "coupling_interface_data",
            "interface_data": interface_data_pres
        }
        kratos_co_sim_io.ExportData(data_configuration_export)

        data_configuration_import = {
            "type": "coupling_interface_data",
            "interface_data": interface_data_temp
        }
        kratos_co_sim_io.ImportData(data_configuration_import)

        kratos_co_sim_io.Finalize()  # this disconnects

        # checking the values after disconnecting to avoid deadlock
        for i, node in enumerate(model_part.Nodes):
            self.assertAlmostEqual(node.GetSolutionStepValue(KM.TEMPERATURE),
                                   i * 1.7)

        self.__CheckSubProcess(p)
    def test_Connect_Disconnect(self):
        model = KM.Model()
        io_settings = KM.Parameters("""{}""")  # using the defaults
        solver_name = "c_d_test"
        kratos_co_sim_io = CreateKratosCoSimIO(io_settings, model,
                                               solver_name)  # this connects
        kratos_co_sim_io.Initialize()

        RunPythonInSubProcess("connect_disconnect")

        kratos_co_sim_io.Finalize()  # this disconnects
    def test_Connect_Disconnect(self):
        p = self.__RunPythonInSubProcess("connect_disconnect")
        model = KM.Model()
        io_settings = KM.Parameters("""{
            "connect_to" : "partner_b"
        }""")
        solver_name = "partner_a" # aka "my_name" for the CoSimIO
        kratos_co_sim_io = CreateKratosCoSimIO(io_settings, model, solver_name) # this connects
        kratos_co_sim_io.Initialize()

        kratos_co_sim_io.Finalize() # this disconnects

        self.__CheckSubProcess(p)