def setUp(self):
        # Create a complete model part to retrieve an interface from it
        self.model = KratosMultiphysics.Model()
        model_part = self.model.CreateModelPart("MainModelPart")
        model_part.ProcessInfo[KratosMultiphysics.DOMAIN_SIZE] = 2
        model_part.AddNodalSolutionStepVariable(
            KratosMultiphysics.DISPLACEMENT)

        # Import model part from mdpa file.
        work_folder = "FSIProblemEmulatorTest"
        input_filename = 'test_FSI_emulator_Structural'
        with UnitTest.WorkFolderScope(work_folder, __file__):
            KratosMultiphysics.ModelPartIO(input_filename).ReadModelPart(
                model_part)

        # Create the convergence accelerator
        conv_acc_factory = KratosMultiphysics.Parameters("""
        {
            "solver_type": "constant_relaxation",
            "w": 0.5
        }""")
        self.convergence_accelerator = convergence_accelerator_factory.CreateConvergenceAccelerator(
            conv_acc_factory)

        # Create the FSI coupling interface
        fsi_coupling_int_settings = KratosMultiphysics.Parameters("""
        {
            "model_part_name": "FSICouplingInterfaceStructure",
            "parent_model_part_name": "MainModelPart.StructureInterface2D_Solid_interface",
            "input_variable_list": ["POSITIVE_FACE_PRESSURE"],
            "output_variable_list": ["DISPLACEMENT"]
        }""")
        self.fsi_coupling_interface = fsi_coupling_interface.FSICouplingInterface(
            self.model, fsi_coupling_int_settings,
            self.convergence_accelerator)
예제 #2
0
    def __CreateFSICouplingInterfaceFluid(self):
        # Set auxiliary settings
        # Note that in the embedded case, the fluid interface is identical to the structure one
        # This is intentionally done, since this copy will be used in the level set computation
        if (self.level_set_type == "continuous"):
            aux_settings = KratosMultiphysics.Parameters("""{
                "model_part_name": "FSICouplingInterfaceFluid",
                "parent_model_part_name": "",
                "input_variable_list": ["DISPLACEMENT"],
                "output_variable_list": ["PRESSURE"]
            }""")
        elif (self.level_set_type == "discontinuous"):
            aux_settings = KratosMultiphysics.Parameters("""{
                "model_part_name": "FSICouplingInterfaceFluid",
                "parent_model_part_name": "",
                "input_variable_list": ["DISPLACEMENT"],
                "output_variable_list": ["POSITIVE_FACE_PRESSURE","NEGATIVE_FACE_PRESSURE"]
            }""")
        else:
            err_msg = 'Level set type is: \'' + self.level_set_type + '\'. Expected \'continuous\' or \'discontinuous\'.'
            raise Exception(err_msg)

        aux_settings["parent_model_part_name"].SetString(
            self.structure_interface_submodelpart_name)

        # Construct the FSI coupling interface
        fsi_coupling_interface_fluid = fsi_coupling_interface.FSICouplingInterface(
            self.model, aux_settings)

        KratosMultiphysics.Logger.PrintInfo(
            'PartitionedEmbeddedFSIBaseSolver',
            'Fluid FSI coupling interface created')

        return fsi_coupling_interface_fluid
예제 #3
0
    def __CreateFSICouplingInterfaceStructure(self):
        # Set auxiliary settings
        if (self.level_set_type == "continuous"):
            aux_settings = KratosMultiphysics.Parameters("""{
                "model_part_name": "FSICouplingInterfaceStructure",
                "parent_model_part_name": "",
                "input_variable_list": ["POSITIVE_FACE_PRESSURE"],
                "output_variable_list": ["DISPLACEMENT"]
            }""")
        elif (self.level_set_type == "discontinuous"):
            aux_settings = KratosMultiphysics.Parameters("""{
                "model_part_name": "FSICouplingInterfaceStructure",
                "parent_model_part_name": "",
                "input_variable_list": ["POSITIVE_FACE_PRESSURE","NEGATIVE_FACE_PRESSURE"],
                "output_variable_list": ["DISPLACEMENT"]
            }""")
        else:
            err_msg = 'Level set type is: \'' + self.level_set_type + '\'. Expected \'continuous\' or \'discontinuous\'.'
            raise Exception(err_msg)

        aux_settings["parent_model_part_name"].SetString(
            self.structure_interface_submodelpart_name)

        # Construct the FSI coupling interface
        fsi_coupling_interface_structure = fsi_coupling_interface.FSICouplingInterface(
            self.model, aux_settings, self.__GetConvergenceAccelerator())

        KratosMultiphysics.Logger.PrintInfo(
            'PartitionedEmbeddedFSIBaseSolver',
            'Structure FSI coupling interface created')

        return fsi_coupling_interface_structure
    def _CreateFSICouplingInterfaceStructure(self):
        """Create the structure FSI coupling interface

        Create the structure FSI coupling interface with a default MPI convergence accelerator
        The final convergence accelerator will be assigned to the structure FSI coupling interface in the _CreateConvergenceAccelerator
        This is required since the MPI parallel convergence accelerators require the residual minimization model part to be instantiated
        """
        # Set auxiliary settings
        aux_settings = KratosMultiphysics.Parameters("""{
            "model_part_name": "FSICouplingInterfaceStructure",
            "parent_model_part_name": "",
            "input_variable_list": ["SURFACE_LOAD"],
            "output_variable_list": ["DISPLACEMENT"]
        }""")
        aux_settings["parent_model_part_name"].SetString(
            self.interfaces_dict['structure'])

        # Construct the FSI coupling interface
        fsi_coupling_interface_structure = fsi_coupling_interface.FSICouplingInterface(
            self.model, aux_settings,
            KratosTrilinos.TrilinosConvergenceAccelerator())

        KratosMultiphysics.Logger.PrintInfo(
            'PartitionedEmbeddedFSIBaseSolver',
            'Structure FSI coupling interface created')

        return fsi_coupling_interface_structure
예제 #5
0
    def __CreateFSICouplingInterfaceFluid(self, fluid_interface_side):
        # Set auxiliary settings
        aux_settings = KratosMultiphysics.Parameters("""{
            "model_part_name": "",
            "parent_model_part_name": "",
            "input_variable_list": ["MESH_DISPLACEMENT"],
            "output_variable_list": []
        }""")
        aux_settings["model_part_name"].SetString(
            "FSICouplingInterface{}".format(fluid_interface_side.capitalize()))
        aux_settings["parent_model_part_name"].SetString(
            self.interfaces_dict[fluid_interface_side])
        aux_settings["output_variable_list"].Append(
            "{}_MAPPED_VECTOR_VARIABLE".format(
                "POSITIVE" if fluid_interface_side ==
                'fluid_positive' else "NEGATIVE"))

        # Construct the FSI coupling interface
        # Note that no convergence accelerator is created in the fluid side
        fsi_coupling_interface_fluid = fsi_coupling_interface.FSICouplingInterface(
            self.model, aux_settings)

        KratosMultiphysics.Logger.PrintInfo(
            'PartitionedEmbeddedFSIBaseSolver',
            'Fluid {} FSI coupling interface created'.format(
                fluid_interface_side))

        return fsi_coupling_interface_fluid
예제 #6
0
    def _CreateFSICouplingInterfaceStructure(self):
        # Set auxiliary settings
        aux_settings = KratosMultiphysics.Parameters(
        """{
            "model_part_name": "FSICouplingInterfaceStructure",
            "parent_model_part_name": "",
            "input_variable_list": ["SURFACE_LOAD"],
            "output_variable_list": ["DISPLACEMENT"]
        }""")
        aux_settings["parent_model_part_name"].SetString(self.interfaces_dict['structure'])

        # Get the convergence accelerator instance (note that it is created in this call)
        convergence_accelerator = self._GetConvergenceAccelerator()

        # Construct the FSI coupling interface
        fsi_coupling_interface_structure = fsi_coupling_interface.FSICouplingInterface(
            self.model,
            aux_settings,
            convergence_accelerator)

        KratosMultiphysics.Logger.PrintInfo('PartitionedFSIBaseSolver', 'Structure FSI coupling interface created')

        return fsi_coupling_interface_structure